Я работаю над реализацией простого устройства PCI в QEMU и драйвера ядра для него, и у меня возникли некоторые проблемы с обработкой вызовов функций pci_read / write_config_ * со стороны устройства.
В отличие от простых операций rw на отображаемой панели памяти, где обратные вызовы MemoryRegionOps получают точное смещение, используемое драйвером, обратные вызовы config_read / write, реализованные как члены в структуре PCIDevice, получают адрес, который прошел через некоторые манипуляции / отображение, которые я трудно понять.
Следование по пути кода до pci_config_host_read / write в источниках QEMU и то же самое на стороне ядра для функций pci_read / write_config_ * не дало четких ответов.
Может кто-нибудь помочь мне понять, как извлечь смещение конфигурации, используемое драйвером при вызове функций pci config rw?