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
.