feat: rank drivers at compile time
This commit is contained in:
@@ -13,7 +13,6 @@
|
||||
#ifdef ENABLE_PCIPP
|
||||
|
||||
#include <drivers/pci_devices.h>
|
||||
#include <libc/sort.h>
|
||||
|
||||
#endif
|
||||
|
||||
@@ -192,21 +191,6 @@ void pci_check_bus(uint8_t bus) {
|
||||
}
|
||||
}
|
||||
|
||||
int pci_driver_compare(const void* a, const void* b) {
|
||||
int rank_a = ((struct pci_driver *) a)->rank;
|
||||
int rank_b = ((struct pci_driver *) b)->rank;
|
||||
if (rank_a > rank_b) {
|
||||
return 1;
|
||||
} else if (rank_a < rank_b) {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void pci_sort_drivers() {
|
||||
qsort(DRIVER(0), NUM_DRIVERS, sizeof(struct pci_driver), pci_driver_compare);
|
||||
}
|
||||
|
||||
void pci_scan() {
|
||||
if (last_pci_device_index != 0) {
|
||||
k_panics("Can only scan once!");
|
||||
@@ -385,16 +369,15 @@ void pci_init_bar(pci_device *device, uint8_t bar_index) {
|
||||
}
|
||||
|
||||
// internal drivers
|
||||
PCI_DRIVER(
|
||||
PCI_DRIVER(0) = {
|
||||
.name = "pci-secondary-bus",
|
||||
.description = "A PCI bus connected to the primary bus",
|
||||
.rank = 0, // internal driver for PCI bus
|
||||
.match.class = PCI_CLASS_BRIDGE,
|
||||
.match.subclass = PCI_SUB_CLASS_PCI_PCI_BRIDGE_4,
|
||||
.mask.class = true,
|
||||
.mask.subclass = true,
|
||||
.direct_use = true,
|
||||
.use = pci_secondary_bus_use,
|
||||
);
|
||||
};
|
||||
|
||||
// todo https://wiki.osdev.org/Universal_Serial_Bus if i dare
|
||||
Reference in New Issue
Block a user