Аппаратные интерфейсы ПК

         

PCI BIOS


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

Программы с помощью функций PCI BIOS могут искать интересующие их устрой­ства по идентификаторам или кодам класса. Если стоит задача «переучета» установ­ленных устройств, то она решается чтением конфигурационной информации по всем функциям всех устройств всех шин — это быстрее, чем перебирать все возмож­ные сочетания идентификаторов или классов кодов. Для найденных устройств программы должны определять реальные настройки чтением регистров конфигу­рационного пространства, учитывая возможность перемещения ресурсов по всему пространству и даже между пространствами памяти и ввода-вывода.

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

¦ АХ - BlOlh — проверка присутствия PCI BIOS;

¦     АХ - B102h — поиск устройства по идентификатору;

¦     АХ - ВЮЗЬ — поиск устройства по коду класса;

¦     АХ = В106h — генерация специального цикла PCI;

¦     АХ = BIOS, B109 и BlOAh — чтение байта, слова и двойного слова конфигура­ционного пространства устройства PCI;

¦     АХ = В10В, В10С, BlODh — запись байта, слова и двойного слова конфигурационного пространства устройства PCI.

6.3. Магистральный интерфейс AGP_________________________________ 211


•       Бит 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.

12.9. Расширения ROM BIOS__________________________________________ 497

¦     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), в ЕСХ — записываемое двойное слово.


Содержание раздела