struct pci_dev_info

Сведения об устройстве на шине PCI

Прототип:

#include <hw/pci.h>
#include <hw/pci_devices.h>
struct pci_dev_info {
uint16_t DeviceId;
uint16_t VendorId;
uint16_t SubsystemId;
uint16_t SubsystemVendorId;
uint8_t BusNumber;
uint8_t DevFunc;
uint8_t Revision;
uint8_t Rsvd[5];
uint32_t Class;
uint32_t Irq;
uint64_t CpuIoTranslation; /* pci_addr = cpu_addr - translation */
uint64_t CpuMemTranslation; /* pci_addr = cpu_addr - translation */
uint64_t CpuIsaTranslation; /* pci_addr = cpu_addr - translation */
uint64_t CpuBmstrTranslation; /* pci_addr = cpu_addr + translation */
uint64_t PciBaseAddress[6];
uint64_t CpuBaseAddress[6];
uint32_t BaseAddressSize[6];
uint64_t PciRom;
uint64_t CpuRom;
uint32_t RomSize;
uint32_t Rsvd1;
uint64_t BusIoStart;
uint64_t BusIoEnd;
uint64_t BusMemStart;
uint64_t BusMemEnd;
uint8_t msi;
uint8_t Rsvd2[3];
uint32_t Rsvd3;
};

Описание:

Тип позволяет обрабатывать сведения об устройстве на шине PCI, которые являются представлением конфигурационной области дескриптора устройства на шине.


Note: Функция pci_attach_device() не отображает какие-либо области ввода-вывода или памяти в адресное пространство процесса. Адреса, возвращаемые в структуре pci_dev_info, являются физическими адресами.

Структура включает следующие поля:

DeviceId
Идентификатор устройства (ввод/вывод). Список поддерживаемых идентификаторов устройств см. в <hw/pci_devices.h>.
VendorId
Идентификатор производителя (ввод / вывод). Список поддерживаемых идентификаторов производителей см. в <hw/pci_devices.h>.
SubsystemId
Идентификатор подсистемы (вывод).
SubsystemVendorId
Идентификатор производителя подсистемы (вывод).
BusNumber
Номер шины (ввод/вывод).
DevFunc
Номер устройства/функции (ввод/вывод).
Revision
ерсия устройства (вывод).
Class
Код класса (ввод/вывод). Список кодов классов см. в <hw/pci.h>. Это поле является комбинацией кода класса и кода подкласса (PCI_CLASS_DISPLAY | PCI_SUBCLASS_DISPLAY_XGA).
Irq
Номер прерывания (вывод).
CpuIoTranslation
Значение трансляции CPU в PCI (pci_addr = cpu_addr - translation).
CpuMemTranslation
Трансляция памяти CPU в PCI (pci_addr = cpu_addr - translation).
CpuIsaTranslation
Трансляция памяти CPU в ISA (pci_addr = cpu_addr - translation).
CpuBmstrTranslation
Трансляция адреса мастера шины ЦП в адрес мастера шины PCI (pci_addr = cpu_addr + translation).
PciBaseAddress[6]
Базовый адрес PCI (массив из 6 uint64_t элементов).

Note: Эта функция декодирует биты 1 и 2, чтобы узнать, имеет ли регистр размер в 32 или в 64 бит, 64-битные значения соответствуют базовым регистрам.

CpuBaseAddress[6]
Базовый адрес ЦП (массив из 6 uint64_t элементов).

Некоторые платформы транслируют адреса через мосты PCI, так что один адрес находится на стороне PCI моста, а другой - на стороне ЦП. В x86 PciBaseAddress и CpuBaseAddress одинаковы, но на других платформах они будут разными. В пользовательских приложениях рекомендуется всегда использовать CpuBaseAddress.
BaseAddressSize[6]
Размер базового ROM адреса на плате (массив из 6 uint32_t элементов).
PciRom
Адрес PCI ROM.
CpuRom
Адрес CPU ROM.
RomSize
Размер ROM на плате.

Тестирование и преобразования адресов

Чтобы облегчить тестирование адресов, возвращаемых сервером PCI, были определены следующие макросы в заголовочном файле <hw/pci.h>:

PCI_IS_IO( address )
Проверить, является ли адрес адресом ввода-вывода.
PCI_IS_MEM( address )
Проверить, является ли адрес адресом памяти.
PCI_IO_ADDR( address )
Преобразует адрес, возвращаемый сервером PCI, в адрес ввода-вывода.
PCI_MEM_ADDR( address )
Преобразует адрес, возвращаемый сервером PCI, в адрес памяти.
PCI_ROM_ADDR( address )
Преобразует адрес, возвращаемый сервером PCI, в адрес ROM.

Пример:

uint64_t port;
/* Test the address returned by the pci server */
if ( PCI_IS_IO( addr ) )
port = (PCI_IO_ADDR( addr ));

Классификация:

ЗОСРВ «Нейтрино»

Тематические ссылки:

pci_attach_device()




Предыдущий раздел: Описание API системной библиотеки