Информационные технологииТехнологииПоиск

PCI BIOS

  • Stfw.Ru
  • Статьи и документация
Функции PCI BIOS используются только для поиска и конфигурирования устройств PCI - процедур, требующих доступа к их конфигурационному пространству. Регулярная работа с этими устройствами выполняется через обращения к регистрам устройств по адресам, полученным при конфигурировании, и обработке известных номеров прерываний от этих устройств. Для 16-битного интерфейса реального режима, V86 и 16-битного реального режима, функции PCI BIOS вызываются через прерывание Int lAh; номер функции задается при вызо-ве в регистре АХ. Возможна и программная имитация прерывания дальним вызовом по физическому адресу OOOFFE6EH (стандартная точка входа в обработчик 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 - номер регистра (О-FFh). При успешном возврате в CL - считанный байт.
- АХ = B109h - чтение слова конфигурационного пространства устройства PCI. При вызове в ВН - номер шины, в BL[7:3] - номер устройства, BL[2:0] - номер функции, в DI - номер регистра (О-FFh, четный). При успешном возврате в СХ - считанное слово.
- АХ = В10Ah - чтение двойного слова конфигурационного пространства устройства PCI. При вызове в ВН - номер шины, в BL[7:3] - номер устройства, BL[2:0] - номер функции, в DI - номер регистра (О-FFh, кратный 4). При успешном возврате в ЕСХ - считанное двойное слово.
- АХ = В 10Bh - запись байта конфигурационного пространства устройства PCI. При вызове в ВН - номер шины, в BL[7:3] - номер устройства, BL[2:0] - номер функции, в DI - номер регистра (О-FFh), в CL - записываемый байт.
- АХ = В10СН - запись слова конфигурацгЛрнного пространства устройства PCI. При вызове в ВН - номер шины, в BL[7:3] - номер устройства, BL[2:0] - номер функции, в DI - номер регистра (О-FFh, четный), в СХ - записываемое слово.
- АХ = BWAh - запись двойного слова конфигурационного пространства устройства PCI. При вызове в ВН - номер шины, в BL[7:3] - номер устройства, BL[2:0] - номер функции, в DI - номер регистра (О-FFh, кратный 4), в ЕСХ - записываемое двойное слово.
* При комментировании просим соблюдать законы Российской Федерации.
ЧИТАЙТЕ ТАКЖЕ:

PCI BIOS

Программный доступ к конфигурационному пространству и генерация специальных циклов

Expansion ROM карт PCI

Компьютерные статьи и документация на тему информационных технологий, обзоры железа и софта, безопасности и Интернет-технологий.
Мы в соцсетях
Последние новости