Код:
+------------+-------------+-------------+--------------+---+
|31 24|23 16|15 8|7 0| ? |
+------------+-------------+-------------+--------------+---+
| Device ID | Vendor ID | 00|
+------------+-------------+-------------+--------------+---+
| Status | Command | 04|
+------------+-------------+-------------+--------------+---+
| Class Code |Revision ID | 08|
+------------+-------------+-------------+--------------+---+
| BIST | Header Type |Latency Timer|Cash Line Size| 0C|
+------------+-------------+-------------+--------------+---+
| Bass address registers 1 | 10|
+------------+-------------+-------------+--------------+---+
Class Code (Код класса) –он описывает типе устройства состоит из трех частей
Код:
+---------------+--------------+---------------------+
|23 16|15 8|7 0|
+---------------+--------------+---------------------+
|Base Class Code|Sub Class Code|Programming Interface|
+---------------+--------------+---------------------+
Base Class Code – базовый класс сокращенно BCC.
Sub Class Code - под класс сокращенно SCC.
Programming Interface – интерфейс сокращенно PI.
Подробное описание кодов можно найти в спецификации PCI.
Теперь давайте проверим, установлена дискета или нет.
ATA система на сегодняшней день такова. Что она представлена двумя контролерами PATA(IDE), SATA.
ATA - Advanced Technology Attachment, продвинутая технология присоединения
PATA - Parallel ATA (параллельный ATA)
SATA - Serial ATA (последовательный АТА)
AHCI- Advanced Host Controller Interface, расширенный интерфейс контроллера хоста, иногда встречается как ACHI
PATA сейчас называется то, что раньше звалось IDE. Хотя IDE встречается чаще.
IDE контроллер может работать в двух режимах Legacy (устаревший), Native (родной)
SATA в трех Compatibility (совместимость с IDE Legacy), SATA(Native по сути тот же самый Native IDE),AHCI (родной режим для SATA)
Есть спецификация SATA, но там ничего полезного для программиста не нашел. А вот AHCI стоит посмотреть.
Причем SATA контролер имеет базовый класс IDE.
А вот уже мультиплексор SATA дисков (ACHI имеет класс SATA контролера)
Так вот IDE – контролер это уже устоявшаяся система для общения с дисками.
к примеру на ICH5 Интел IDE контролер располагается по следующему PCI адресу B0:D31:F1
Class Code следующий 0101xxh.
Код:
+---+---+---+----------------------------------------+
|BCC|SCC|PI | Тип |
+---+---+---+----------------------------------------+
|01h|00h|00h|SCSI контролер |
+ +---+---+----------------------------------------+
| |01h|xxh|IDE контролер смотри рисунок |
+ +---+---+----------------------------------------+
| |02h|00h|Контролер гибких дисков |
+ +---+---+----------------------------------------+
| |03h|00h|IPI контролер |
+ +---+---+----------------------------------------+
| |04h|00h|RAID контролер |
+ +---+---+----------------------------------------+
| |05h|00h| |
+ +---+---+----------------------------------------+
| |06h|01h|AHCI контролер |
+ +---+---+----------------------------------------+
| |80h|00h|Устройство массовой памяти другого типа |
+---+---+---+----------------------------------------+
Надо сказать, что Programming Interface (PI) имеет сложную структуру.
Код:
+----+------+----------+----------------------------+
|Бит | Тип | Значение | Описание |
+----+------+----------+----------------------------+
| 7 | RO | 1 | Bus Master |
+----+------+----------+----------------------------+
|6:4 | RO | 0 | Зарезервировано |
+----+------+----------+----------------------------+
| | | | Поддерживаемый тип |
| 3 | RO | 1 | вторичного канала |
| | | | 1-поддерживаются оба типа |
+----+------+----------+----------------------------+
| | | | Установленный режим |
| 2 | RW/RO| 1/0 | вторичного канала |
| | | | расширенный/устоявшийся |
+----+------+----------+----------------------------+
| | | | Поддерживаемый тип |
| 1 | RO | 1 | первичного канала |
| | | | 1-поддерживаются оба типа |
+----+------+----------+----------------------------+
| 0 | RW/RO| 1/0 | Режим первичного канала |
| | | | расширенный/устоявшийся |
+----+------+----------+----------------------------+
Причем замечу, что значение первичного и вторичного каналов обязательно должны иметь одинаковые параметры.
http://ru.osdev.wikia.com/wiki/HDD