Compare commits
2 Commits
118f5cb81a
...
11b4d6a2bc
| Author | SHA1 | Date | |
|---|---|---|---|
| 11b4d6a2bc | |||
| 3ee494cffc |
@@ -71,6 +71,7 @@ SRCFILES += $(call GRABSRC, \
|
||||
pci \
|
||||
pci/ata \
|
||||
pci/serial \
|
||||
pci/qemu/testdev \
|
||||
cjob \
|
||||
)
|
||||
|
||||
|
||||
@@ -29,6 +29,9 @@
|
||||
|
||||
void pci_ata_init(void) {
|
||||
PciDev dev = pci_getdev(0x8086, 0x7010, -1);
|
||||
if (!dev.bits) {
|
||||
return;
|
||||
}
|
||||
|
||||
static const char *progif_msg[] = {
|
||||
[0x00] = "ISA Compatibility mode-only controller",
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "pci/pci.h"
|
||||
#include "pci/ata/ata.h"
|
||||
#include "pci/serial/serial.h"
|
||||
#include "pci/qemu/testdev/testdev.h"
|
||||
#include "io/io.h"
|
||||
#include "std/string.h"
|
||||
#include "util/util.h"
|
||||
@@ -194,6 +195,7 @@ PciDev pci_getdev(uint16_t vendorid, uint16_t deviceid, int devtype) {
|
||||
PciInitFn PCI_INIT_ARRAY[PCI_INIT_ARRAY_MAX] = {
|
||||
&pci_ata_init,
|
||||
&pci_serial_init,
|
||||
&pci_qemu_testdev_init,
|
||||
};
|
||||
|
||||
void pci_init_devs(void) {
|
||||
|
||||
36
kernel/pci/qemu/testdev/testdev.c
Normal file
36
kernel/pci/qemu/testdev/testdev.c
Normal file
@@ -0,0 +1,36 @@
|
||||
#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);
|
||||
}
|
||||
6
kernel/pci/qemu/testdev/testdev.h
Normal file
6
kernel/pci/qemu/testdev/testdev.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#ifndef PCI_QEMU_TESTDEV_TESTDEV_H_
|
||||
#define PCI_QEMU_TESTDEV_TESTDEV_H_
|
||||
|
||||
void pci_qemu_testdev_init(void);
|
||||
|
||||
#endif // PCI_QEMU_TESTDEV_TESTDEV_H_
|
||||
Reference in New Issue
Block a user