Как прочитать расширенное пространство конфигурации PCIE в Linux? - PullRequest
2 голосов
/ 14 июня 2011

Я пробовал как прочитать запись pci пользовательского пространства в каталоге / proc / bus / pci, так и вызвать API драйвера пространства ядра pci_read_config_word () в драйвере. но, похоже, оба могут читать только базовую конфигурацию pci, смещение меньше 0x100.

Смещение, которое я хочу прочитать, превышает 0x100, может кто-нибудь сказать мне, как это сделать в Linux? если бы это было сделано в пространстве ядра, было бы очень полезно узнать, какой API вызывать. Большое спасибо!

1 Ответ

10 голосов
/ 15 июня 2011

pci_read_config_word() - правильный API, но для доступа к расширенному пространству конфигурации вам нужно использовать MMCONFIG. Это не то, что вы создали; ядро должно выбрать использование MMCONFIG самостоятельно, если доступно. Вы видите что-нибудь вроде

e0000000-efffffff : PCI MMCONFIG 0000 [bus 00-ff]

в /proc/iomem? Также в вашем журнале ядра вы должны увидеть несколько строк о таблице ACPI MCFG и MMCONFIG:

ACPI: MCFG 00000000bb7fec63 0003C (v01 LENOVO TP-6U    00001410 LNVO 00000001)
...
PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000)

и, конечно, ваше ядро ​​должно быть собрано с CONFIG_PCI_MMCONFIG=y.

...