rk/kernel/pci.c
2024-05-26 01:33:18 -05:00

19 lines
619 B
C

#include <kernel/pci.h>
struct pci_config_space *pcie_find_device(struct mcfg *mcfg, uint8_t class, uint8_t subclass) {
int entries = (mcfg->h.Length - 44) / 16;
for (int i = 0; i < entries; i++) {
uint32_t addr = (uint32_t)mcfg->entries[i].base_addr;
for (int j = 0; j < 256; j++) {
for (int k = 0; k < 8; k++) {
struct pci_config_space *cfg = (struct pci_config_space *)PCI_ADDR(addr, i, j, k);
if (cfg->class == class && cfg->subclass == subclass) {
return cfg;
}
}
}
}
return 0;
}