Обработка чтения / записи PCI в конфигурационном пространстве на устройстве QEMU - PullRequest
0 голосов
/ 04 мая 2019

Я работаю над реализацией простого устройства 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?

1 Ответ

0 голосов
/ 09 мая 2019

Если вы устанавливаете модель своего устройства PCI для реализации методов QEMU PCIDevice config_read и config_write, передаваемые им адреса должны быть смещениями в пространстве конфигурации PCI (т. Е. Начиная со стандартного 0 == PCI_VENDOR_ID, 2 == PCI_DEVICE_ID, 4 == PCI_COMMAND и т. Д. И все, что связано с устройством, после 64 байтов стандартизированного пространства конфигурации).

...