19 lines
612 B
C
19 lines
612 B
C
|
#include <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;
|
||
|
}
|