#include 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; }