Главная » Ассемблер, Железо » Конфигурационное пространство устройства PCI

0

Для программистов интерес в первую очередь представляют функции PCI BIOS, поскольку они позволяют получить доступ к информации об адресном пространстве и пространстве ввода-вывода подключенных к шине PCI устройств. Описание этих функций дано в PCI BIOS Specification [81], а также в руководстве PhoenixBIOS User’s Manual [85].

Интерфейс PCI BIOS обеспечивает аппаратно-независимый метод управления устройствами PCI (а также AGP) в любых возможных режимах работы архитектуры х86 (включая реальный, защищенный

16-разрядный, защищенный 32-разрядный режимы и режим с линейным адресным пространством). Основное назначение функций PCI BIOS — работа с конфигурационным пространством и генерация специальных циклов шины PCI.

Рис. 3.1.

Общий вид конфигурационного пространства устройства PCI показан на рис. 3.1. Конфигурационное пространство содержит три области:

•      заголовок, не зависящий от типа устройства;

•      область, определяемая устройством (значением Header Туре);

•      область, определяемая пользователем.

С точки зрения программиста важными являются первые две из перечисленных областей, а область пользователя фактически доступна лишь разработчикам устройства, поскольку детальное описание этой области есть только у них и посторонним обычно не предоставляется. Впрочем, чтобы извлечь какую-то полезную информацию из полей, содержащих базовые адреса, также необходимо располагать документацией на устройство: каждый изготовитель трактует их по-своему. Для наглядности достаточно сравнить между собой распределение базовых адресов в видеоконтроллерах 3Dfx [38] и Matrox [75, 76].

Если программисту требуется выполнять с устройством PCI только типовые операции, то ему совершенно не обязательно разрабатывать полноценный драйвер для устройства — для решения некоторых типовых задач достаточно той документации, которую фирмы- изготовители предоставляют через Интернет в режиме свободного доступа. На практике интерес представляют следующие поля конфигурационного пространства:

•            Vendor ID — код фирмы-изготовителя устройства;

•            Device ID — код устройства;

•            Class Code — код класса устройства;

•            Base Address Registers — регистры базовых адресов;

•            Interrupt Line — номер выделенного устройству прерывания IRQ.

Код изготовителя, код устройства и код класса применяются в процессе поиска заданного устройства. Если необходимо найти конкретное устройство, то поиск выполняется по кодам устройства и его изготовителя (см. вышеупомянутые описания контроллеров Matrox и 3Dfx); если требуется обнаружить все устройства определенного типа, то используется код класса. После того как искомое устройство обнаружено, при помощи регистров базовых адресов можно определить выделенные ему области в адресном пространстве памяти и пространстве ввода-вывода. Наибольший интерес, однако, представляет регистр Interrupt Line, позволяющий выяснить, какая линия IRQ была выделена устройству процедурой РпР BIOS в процессе начальной загрузки компьютера — в некоторых случаях это единственный документированный способ определения номера прерывания.

Источник: Кулаков В. К90 Программирование на аппаратном уровне: специальный справочник (+дискета). 2-е издание. — СПб.: Питер, 2003. — 847 е.: ил.

По теме:

  • Комментарии