4 | 2 | Идентификатор производителя |
6 | 2 | Идентификатор устройства |
8 | 2 | Резерв¹ |
Ah | 2 | Длина структуры (байт), начиная с сигнатуры |
Ch | 1 | Версия структуры (0 для данной версии) |
Dh | 3 | Код класса |
10h | 2 | Длина образа |
12h | 2 | Версия кода/данных |
14h | 1 | Тип кода: 0 — х86 для PC-АТ, 2 — HP PA-RISC |
15h | 1 | Индикатор: 1 — последний образ, 0 — не последний |
16h | 2 | Резерв |
¹ До спецификации PCI 2.2 здесь помещался указатель на строку Vital Product Data (важные сведения о продукте).
Применительно к дополнительному ПЗУ карты PCI имеется три параметра, относящихся к размерам. Размер ПЗУ определяется чтением конфигурационного пространства. Размер, указанный во 2-м байте заголовка, указывает на длину модуля на этапе инициализации. Этот модуль POST загружает в ОЗУ перед тем, как вызвать процедуру инициализации (точка входа со смещением 3). Контрольная сумма, расположенная обычно в конце модуля, обеспечивает нулевую сумму всех байт. Длина образа, указанная в структуре данных PCI (слово со смещением 10h), описывает размер области, которая должна оставаться в памяти в режиме нормального функционирования (она может быть меньше, поскольку код процедуры инициализации уже не требуется). Эта область также защищается контрольной суммой. Структура данных PCI должна оставаться в памяти все время.
Работа с модулями ПЗУ для карт PCI выполняется в соответствии с моделью DDIM (см. выше). POST определяет наличие ПЗУ по полю Expansion ROM Base Address
в конфигурационном пространстве и назначает ему адрес в свободном пространстве памяти. После этого программированием регистра команд разрешается считывание ПЗУ, и в нем ищется сигнатура заголовка АА55h. Когда сигнатура найдена, POST ищет подходящий образ (по типу кода и совпадающий по идентификаторам с обнаруженными устройствами PCI) и загружает его в ОЗУ (в область C0000-DFFFFh), оставляя разрешенной запись в эту область. Далее чтение ПЗУ запрещается (записью в поле Expansion ROM Base Address
), и вызывается процедура инициализации (по адресу 3). При вызове процедуры POST сообщает номер шины (в регистре АН
), номер устройства (AL[7:3]
) и номер функции (AL[2:0]
), благодаря чему процедура узнает точные координаты аппаратных средств. После этого определяется размер области, которую следует оставить в памяти (по байту 2, который может быть модифицирован процедурой инициализации), и для этой области запрещается запись. Если процедура инициализации «урезает» занимаемую память, она должна позаботиться о достоверности контрольной суммы области, описанной байтом 2. Если память освобождается полностью (процедура обнуляет байт 2), то контрольная сумма, естественно, не нужна. Расширение для VGA (определяется по коду класса) обрабатывается особым образом — загружается по адресу C0000h. Процедура инициализации может определить наличие PnP BIOS в системе, проверив значение контрольной структуры PnP по адресу, указанному в ES: DI
, и исполняться в зависимости от обнаруженного системного окружения.
Глава 13
Интерфейсы питания, заземление и гальваническая развязка
По традиции «аппаратную» книгу заключает глава о «здоровом питании», очень необходимом для выживания аппаратных интерфейсов. Все внутренние устройства ПК, включая и интерфейсные адаптеры, получают напряжение от блока питания системного блока и связаны общей «схемной землей» — шиной GND. Часть внешних устройств получают питание от того же блока питания, пользуясь штатными и