#include #include #include "pci/qemu/testdev/testdev.h" #include "pci/pci.h" #include "vmm/vmm.h" #include "bootinfo/bootinfo.h" #include "std/string.h" #include "kprintf.h" // REF: https://www.qemu.org/docs/master/specs/pci-testdev.html #define TAG "qemu-testdev" typedef struct { PciBar bar0, bar1, bar2; } QemuTestDev; QemuTestDev PCI_QEMU_TESTDEV; void pci_qemu_testdev_init(void) { PciDev dev = pci_getdev(0x1B36, 0x0005, -1); if (!dev.bits) { return; } uint8_t progif = pci_read8(dev, PCI_PROGIF); LOG("pci/"TAG, "progif=0x%02x\n", progif); pci_getbar(dev, &PCI_QEMU_TESTDEV.bar0, PCI_BAR0); pci_getbar(dev, &PCI_QEMU_TESTDEV.bar1, PCI_BAR1); pci_getbar(dev, &PCI_QEMU_TESTDEV.bar2, PCI_BAR2); PCI_LOG_BAR(TAG, PCI_QEMU_TESTDEV.bar0, 0); PCI_LOG_BAR(TAG, PCI_QEMU_TESTDEV.bar1, 1); PCI_LOG_BAR(TAG, PCI_QEMU_TESTDEV.bar2, 2); }