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