- Vendor ID
-
PCI configuration space — конфигурационное адресное пространство конфигурационное адресное пространство. Оно состоит из 256 байт, которые можно адресовать, зная номер шины PCI, номер устройства и номер функции в устройстве. Первые 64 байта из 256 стандартизированы, а остальные регистры могут быть использованы по усмотрению изготовителя устройства.
Содержание
Стандартизированные регистры
Регистры Vendor ID и Device ID идентифицируют устройство и обычно называются PCI ID. Шестнадцатиразрядный регистр Vendor ID выдаётся организацией PCI SIG. Шестнадцатиразрядный регистр Device ID назначается изготовителем устройства. Существует проект создания базы данных всех известных значений регистров Vendor ID и Device ID. (Смотри #Ссылки.)
Первые 64 байта конфигурационного адресного пространства (в соответствии с PCI Local Bus Specification 2.2):
Адрес 31 ... 2423 ... 1615 ... 87 ... 00x00 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
pointer0x38 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 устройства находятся в неактивном состоянии, им не назначены адреса, по которым драйвера устройств могут взаимодействовать с ними. Либо 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
-
Wikimedia Foundation. 2010.