37 lines
892 B
C
37 lines
892 B
C
#include <stdint.h>
|
|
#include <stddef.h>
|
|
#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);
|
|
}
|