Конфигурационное пространство PCI
Конфигурационное пространство PCI (англ. PCI configuration space) — адресное пространство для конфигурации PCI, в дополнение к типичным адресным пространствам памяти и ввода-вывода.
Одним из главных усовершенствований шины PCI по сравнению с другими архитектурами ввода-вывода стал её конфигурационный механизм, обладающий конфигурационным адресным пространством, состоящим из 256 байт, которые можно адресовать, зная номер шины PCI, номер устройства и номер функции в устройстве. Первые 64 байта из 256 стандартизированы, а остальные регистры могут быть использованы по усмотрению изготовителя устройства.
Стандартизированные регистры
правитьРегистры Vendor ID и Device ID идентифицируют устройство и обычно называются PCI ID. Шестнадцатиразрядный регистр Vendor ID выдаётся организацией PCI SIG. Шестнадцатиразрядный регистр Device ID назначается изготовителем устройства. Существует проект создания базы данных всех известных значений регистров Vendor ID и Device ID. (Смотри список ссылок.)
Первые 16 двойных слов конфигурационного адресного пространства (в соответствии с PCI Local Bus Specification 2.2):
Адрес | 31 ... 24 |
23 ... 16 |
15 ... 8 |
7 ... 0
|
---|---|---|---|---|
0x00 | DeviceID | VendorID | ||
0x04 | Status | Command | ||
0x08 | Class Code | Revision ID | ||
0x0C | BIST | Header Type | Latency Timer | Cache Line Size |
0x10 | Base Address Register 0 | |||
0x14 | Base Address Register 1 | |||
0x18 | Base Address Register 2 | |||
0x1C | Base Address Register 3 | |||
0x20 | Base Address Register 4 | |||
0x24 | Base Address Register 5 | |||
0x28 | Cardbus CIS pointer | |||
0x2C | SubsystemID | Subsystem Vendor ID | ||
0x30 | Expansion ROM Base Address | |||
0x34 | Reserved | Capabilities pointer | ||
0x38 | Reserved | |||
0x3C | Max_Lat | Min_Gnt | Interrupt Pin | Interrupt Line |
Регистры DeviceID, VendorID, Status, Command, Class Code, Revision ID, Header Type являются обязательными для всех PCI-устройств (для многих типов устройств обязательными являются также регистры Subsystem ID и Subsystem Vendor ID).
Все остальные регистры являются опциональными.
Автоматическая инициализация аппаратуры с помощью конфигурационного пространства
правитьДля того, чтобы обращаться к устройству через адресное пространство памяти или ввода-вывода, системное программное обеспечение или ОС программирует базовые адресные регистры (англ. Base Address Registers, также называемые BAR’ами), посылая конфигурационные команды PCI-контроллеру. В начале загрузки системы все PCI устройства находятся в неактивном состоянии, им не назначены адреса, по которым драйверы устройств могут взаимодействовать с ними. Либо BIOS, либо сама операционная система обращается к PCI слотам и настраивает BAR’ы в конфигурационном адресном пространстве. Значения BAR’ов действительны всё время, пока система включена. При отключении питания значения этих регистров теряются до следующей загрузки, в процессе которой процедура настройки повторяется. Так как этот процесс полностью автоматизирован, пользователь компьютера освобождается от непростой задачи конфигурирования нового аппаратного обеспечения, подключаемого к шине PCI (в отличие, например, от шины ISA, базовые адреса устройств, подключаемых к которой, приходилось настраивать перемычками или переключателями).
Любое PCI-устройство, не являющееся мостом (см. PCI-to-PCI Bridge Architecture Specification. Revision 1.1) может иметь до шести BAR’ов, каждый из которых отвечает за определённый диапазон адресов в адресном пространстве памяти или ввода-вывода. Кроме того, устройство может иметь firmware).
Доступ к PCI через порты I/O
правитьДля работы с шиной PCI в PC-AT и совместимых машинах выделено два основных порта.
0CF8h -W порт адреса Address
0CFCh RW порт данных Data
Оба порта являются 32 битными.
Порт адреса представляет собой следующую 32 битную структуру:
Порт адреса задает шину, устройства, и адрес регистра в конфигурационном пространстве устройства.
Грубо говоря, устройство — это физически присутствующее устройство. А функция — это логическое устройство.
+---+---------+-------+----------+--------+---------------+-+-+
|31 |30 24|23 16|15 11|10 8|7 2|1|0|
+---+---------+-------+----------+--------+---------------+-+-+
| с | резерв |шина |устройство| функция|Индекс регистра|0|0|
+---+---------+-------+----------+--------+---------------+-+-+
С — флаг доступа к устройству.
Младшие два бита в порту адреса всегда 0.
По окончании работы с устройством следует сбросить адрес в 0.
Если в ответ на запрос нулевого регистра возвращается 0FFFFh, то устройства не существует.
Vendor ID (ID производителя) — для Intel это 8086h, но не может принимать значение 0FFFFh.
Device ID (ID устройства) — принимает различные значения
Revision ID (ID модификации) — обозначает номер модификации устройства, назначается производителем.
Class Code (Код класса) — состоит из трех частей
+---------------+--------------+---------------------+
|23 16|15 8|7 0|
+---------------+--------------+---------------------+
|Base Class Code|Sub Class Code|Programming Interface|
+---------------+--------------+---------------------+
Base Class Code — базовый класс, сокращенно BCC.
Sub Class Code — подкласс, сокращенно SCC.
Programming Interface — интерфейс, сокращенно PI.
Header Type (тип заголовка) — если бит 7 равен 1, то устройство содержит несколько функций.
Если бит 6 равен 0, то заголовок стандартный. Стандартные заголовки:
00 — стандартный смотри выше.
01 — стандартный для моста PCI-to-PCI
02 — стандартный для моста CardBus.
Ссылки
править- The Linux PCI ID Repository, база данных ID PCI-устройств
- PCI Vendor and Device Lists — том, где можно найти драйвер под устройство.
Для улучшения этой статьи желательно:
|