Detect ATA driver via PCI

This commit is contained in:
2025-11-18 23:28:45 +01:00
parent 88f9d0e3d4
commit ecfe1a7eae
8 changed files with 58 additions and 68 deletions

View File

@ -5,6 +5,7 @@
#include "io/io.h"
#include "std/string.h"
#include "util/util.h"
#include "pci/ide.h"
#include "kprintf.h"
uint8_t pci_read8(uint32_t id, uint32_t reg) {
@ -76,6 +77,7 @@ void pci_getbar(PciBar *bar, uint32_t id, uint32_t idx) {
}
static PciMatch PCI_MATCHES[] = {
{ 0x8086, 0x7010, &pci_ide_init },
};
void pci_visit(uint32_t bus, uint32_t dev, uint32_t fn) {
@ -103,8 +105,7 @@ void pci_visit(uint32_t bus, uint32_t dev, uint32_t fn) {
pci_classname(devinfo.classcode, devinfo.subclass, devinfo.progintf));
for (size_t i = 0; i < LEN(PCI_MATCHES); i++) {
if ((PCI_MATCHES[i].k1 == devinfo.vendorid && PCI_MATCHES[i].k2 == devinfo.deviceid)
|| (PCI_MATCHES[i].k1 == devinfo.classcode && PCI_MATCHES[i].k2 == devinfo.subclass)) {
if (PCI_MATCHES[i].k1 == devinfo.vendorid && PCI_MATCHES[i].k2 == devinfo.deviceid) {
PCI_MATCHES[i].initfn(&devinfo);
}
}