![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
PCI BIOS
Функции PCI BIOS используются только для поиска и конфигурирования устройств PCI — процедур, требующих доступа к их конфигурационному пространству (см. п. 8.2). Регулярная работа с этими устройствами выполняется через обращения к регистрам устройств по адресам, полученным при конфигурировании, и обработке известных номеров прерываний от этих устройств. Для 16-битного интерфейса реального режима, V86 и 16-битного реального режима, функции PCI BIOS вызываются через прерывание Int lAh; номер функции задается при вызове в регистре АХ. Возможна и программная имитация прерывания дальним вызо- 496 Глава 12. Архитектурные компоненты IBM PC-совместимого компьютера вом по физическому адресу 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. 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), в ЕСХ — записываемое двойное слово.
|