♦ Expansion ROM Base Address
— базовый адрес ПЗУ программной поддержки карты. Бит 0 — разрешение использования ПЗУ; биты 1-10 — резерв; биты 11–31 — базовый адрес. Размер ПЗУ определяется так же, как и в регистрах базовых адресов (см. выше). Обращение к ПЗУ возможно лишь при разрешенном использовании памяти (бит 1 в регистре команд).
6.2.13. Классы устройств PCI
Важной частью спецификации PCI является классификация устройств и указание кода класса в его конфигурационном пространстве (3 байта Class Code). Старший байт определяет базовый класс , средний — подкласс , младший — программный интерфейс (если он стандартизован). Код класса позволяет идентифицировать наличие определенных устройств в системе, это может быть сделано с помощью PCI BIOS. Для стандартизованных устройств (например, 01:01:80 — контроллер IDE или 07:00:01 — последовательный порт 16450) «заинтересованная» программа может найти требуемое устройство и выбрать подходящий вариант драйвера. Классификатор определяет организация PCI SIG, он регулярно обновляется на сайте www.pcisig.com. Нулевые значения полей, как правило, дают самые неопределенные описания. Значение подкласса 80h относится к «иным устройствам».
Для облегчения взаимодействия с устройствами PCI имеются дополнительные функции BIOS, доступные как из реального, так и защищенного режима работы процессора. Эти функции, предназначенные для работы с конфигурационным пространством и генерации специальных циклов PCI, приходится поддерживать потому, что циклы конфигурационных обращений, как и специальный цикл, выполняются специфическим образом (см. выше). Остальные функции взаимодействия с устройствами через их пространства памяти и ввода-вывода, а также обработка прерываний, в поддержке со стороны BIOS не нуждаются, поскольку выполняются непосредственно командами процессора. Функция проверки наличия PCI BIOS позволяет определить доступные механизмы генерации этих особых циклов, и, зная их работу, программа в дальнейшем может и не пользоваться вызовами PCI BIOS.
Программы с помощью функций PCI BIOS могут искать интересующие их устройства по идентификаторам или кодам класса. Если стоит задача «переучета» установленных устройств, то она решается чтением конфигурационной информации по всем функциям всех устройств всех шин — это быстрее, чем перебирать все возможные сочетания идентификаторов или классов кодов. Для найденных устройств программы должны определять реальные настройки чтением регистров конфигурационного пространства, учитывая возможность перемещения ресурсов по всему пространству и даже между пространствами памяти и ввода-вывода.
Функции PCI BIOS для 16-битного интерфейса реального режима, V86 и 16-битного защищенного режима, вызываются через прерывание Int 1Ah
. Номер функции задается при вызове в регистре АХ
. Возможна и программная имитация прерывания дальним вызовом по физическому адресу 000FFE6EH (стандартная точка входа в обработчик Int 1Ah
) с предварительным занесением в стек регистра флагов. Для 32-разрядных вызовов защищенного режима все эти же функции вызываются через точку входа, найденную через каталог 32-разрядных сервисов, при этом назначение входных и выходных регистров и флага CF
сохраняется. До использования 32-разрядного интерфейса следует сначала найти его каталог и убедиться в наличии сервисов PCI. Вызовы требуют глубокого стека (до 1024 байт).
Функции PCI BIOS:
♦ АХ
= B101h — проверка присутствия PCI BIOS;
♦ АХ
= B102h — поиск устройства по идентификатору;
♦ АХ
= B103h — поиск устройства по коду класса;
♦ АХ
= В106h — генерация специального цикла PCI;
♦ АХ
= B108, B109 и B10Ah — чтение байта, слова и двойного слова конфигурационного пространства устройства PCI;
♦ АХ
= Brahe, B10C, B10Dh — запись байта, слова и двойного слова конфигурационного пространства устройства PCI.
6.2.15. Разработка собственных устройств PCI
При рассмотрении протокола PCI становится ясно, что разработка собственных PCI-устройств на логике малой и средней степени интеграции — занятие неблагодарное. Собственно протокол шины не так уж и сложен, но реализация требований к конфигурационным регистрам проблематична. Серийные устройства PCI, как правило, являются однокристальными — в одной микросхеме размещается и интерфейсная, и функциональная части устройства. Разработка таких микросхем весьма дорогостояща и имеет смысл лишь с перспективами массового выпуска. Для создания отладочных образцов и мелкосерийных изделий ряд фирм выпускают интерфейсные микросхемы PCI различного назначения. Со стороны PCI практически все эти микросхемы поддерживают одиночные целевые транзакции (target transactions), совершенные модели допускают и пакетные циклы. Более сложные микросхемы выполняют и функции ведущего устройства шины, организуя каналы DMA для обмена с системной памятью. Обмены по этим каналам могут инициироваться как программно со стороны хоста (host initiated DMA), так и с периферийной стороны микросхемы (target initiated DMA), в зависимости от возможностей микросхем. С периферийной стороны встречаются интерфейсы для подключения периферийных микросхем, микроконтроллеров и распространенных семейств микропроцессоров, универсальных и сигнальных. Довольно широкий выбор микросхем представлен на сайте www.plxtech.com, этой темой занимаются и иные фирмы.
Читать дальше