ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 19.06.2021

Просмотров: 186

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

AX=8301h —сброс того же таймера.

PCI BIOS

Функции PCI BIOS используются только для поиска и конфигурирования уст­ройств PCI — процедур, требующих доступа к их конфигурационному простран­ству. Регулярная работа с этими устройствами выполняется через об­ращения к регистрам устройств по адресам, полученным при конфигурировании, и обработке известных номеров прерываний от этих устройств. Для 16-битного интерфейса реального режима, V86 и 16-битного реального режима, функции PCI BIOS вызываются через прерывание Int lAh; номер функции задается при вызо­ве в регистре АХ. Возможна и программная имитация прерывания дальним вызовом по физическому адресу 000FFE6EH (стандартная точка входа в обработчик Int lAh) с предварительным занесением в стек регистра флагов.

Признаком нормального выполнения является CF=0 и АН=0; при CF-1 АН содержит код ошибки:

81h — неподдерживаемая функция;

83h — неправильный идентификатор производителя;

86h — устройство не найдено;

87h — неправильный номер регистра PCI.

Вызовы требуют глубокого стека (до 1024 байт). Для 32-разрядных вызовов защи­щенного режима все эти же функции вызываются через точку входа, найденную через каталог 32-разрядных сервисов (см. выше), при этом назначение входных и выходных регистров и флага CF сохраняется. До использования 32-разрядного интерфейса следует сначала найти его каталог и убедиться в наличии сервисов PCI. Функции PCI BIOS перечислены ниже:

АХ - В101Н проверка присутствия PCI BIOS. При наличии PCI BIOS воз­вращает CF=0, АН=0 и EDX=20494350h (строка символов "PCI "); проверяться должны все три признака. При этом в AL находится описатель аппаратного механизма доступа к конфигурационному пространству и генерации специаль­ных циклов PCI:

Бит 0 — поддержка механизма №1 для доступа к конфигурационному про­странству;

Бит 1 — поддержка механизма №2 для доступа к конфигурационному пространству;

Биты 2:3=00 (резерв);

Бит 4 — поддержка генерации специального цикла по механизму №1;

Бит 5 — поддержка генерации специального цикла по механизму №2;

Биты 6:7=00 (резерв).

В регистрах ВН и BL возвращается старший и младший номер версии (BCD-цифры), в CL — максимальный номер шины PCI, присутствующий в системе (число шин +1, поскольку они нумеруются с нуля последовательно). В регистре EDI может возвращаться линейный адрес точки входа 32-разрядных сервисов BIOS. Этот адрес возвращается не всеми версиями BIOS (некоторые не изменяют EDI); для проверки можно при вызове обнулять EDI и проверять на нуль возвращенное значение.

АХ = В102Н — поиск устройства по идентификатору. При вызове в СХ указыва­ется идентификатор устройства, в DX — идентификатор производителя, в SI —индекс (порядковый номер) устройства. При успешном возврате в ВН — номер шины, в BL[7:3] — номер устройства, BL[2:0] — номер функции. Для нахожде­ния всех устройств с указанными идентификаторами вызовы выполняют, по­следовательно инкрементируя SI от 0 до получения кода возврата 86h.


AX = B103h поиск устройства по коду класса. При вызове в ЕСХ[23:16] указывается код класса, в ЕСХ[15:8] — подкласса, в ЕСХ[7:0] — интерфейс, в SI — индекс устройства (аналогично предыдущему). При успешном возврате в ВН —номер шины, в BL[7:3] — номер устройства, BL[2:0] — номер функции.

АХ - B106h генерация специального цикла PCI. При вызове в BL указывается номер шины, в EDX — данные специального цикла.

АХ = В108h чтение байта конфигурационного пространства устройства PCI. При вызове в ВН — номер шины, в BL[7:3] — номер устройства, BL[2:0] — номер функции, в DI — номер регистра (0-FFh). При успешном возврате в CL — счи­танный байт.

АХ = B109h чтение слова конфигурационного пространства устройства PCI. При вызове в ВН — номер шины, в BL[7:3] — номер устройства, BL[2:0] — номер функции, в DI — номер регистра (0-FFh, четный). При успешном возврате в СХ — считанное слово.

АХ = В10Ah чтение двойного слова конфигурационного пространства устройства PCI. При вызове в ВН — номер шины, в BL[7:3] — номер устройства, BL[2:0] — номер функции, в DI — номер регистра (0-FFh, кратный 4). При ус­пешном возврате в ЕСХ — считанное двойное слово.

АХ = В 10Bh запись байта конфигурационного пространства устройства PCI. При вызове в ВН — номер шины, в BL[7:3] — номер устройства, BL[2:0] — номер функции, в DI — номер регистра (0-FFh), в CL — записываемый байт.

АХ = В10СН запись слова конфигурацгЛрнного пространства устройства PCI. При вызове в ВН — номер шины, в BL[7:3] — номер устройства, BL[2:0] — номер функции, в DI — номер регистра (0-FFh, четный), в СХ — записываемое слово.

АХ = BWAh запись двойного слова конфигурационного пространства устрой­ства PCI. При вызове в ВН — номер шины, в BL[7:3] — номер устройства, BL[2:0] — номер функции, в DI — номер регистра (0-FFh, кратный 4), в ЕСХ — записываемое двойное слово.