// // Created by rick on 02-02-21. // #ifndef NEW_KERNEL_PCI_H #define NEW_KERNEL_PCI_H #include #define PCI_CLASS_MASS_STORAGE 0x01 // class MASS STORAGE 1 #define PCI_SUB_CLASS_IDE 0x01 #define PCI_REGISTER_OK 0 #define PCI_REGISTER_ERR_FULL (-1) #define PCI_VALIDATE_OK 0 #define PCI_VALIDATE_FAIL 1 #define PCI_INIT_OK 0 #define PCI_INIT_FAIL 1 typedef struct pci_driver pci_driver; typedef struct pci_device pci_device; typedef u8 (*pci_driver_validate)(const pci_device *); typedef u8 (*pci_driver_initialize)(const pci_device *); typedef struct pci_driver { const char *name; const char *description; u8 order; u8 pci_class; u8 pci_subclass; struct { u8 pci_use_subclass: 1; }; pci_driver_validate validate; pci_driver_initialize initialize; } pci_driver; typedef struct pci_device { u8 bus; u8 slot; u8 func; union { struct { u16 vendorId; u16 deviceId; }; u32 config_line_0; }; union { struct { u8 revisionId; u8 programInterface; u8 subclass; u8 class; }; u32 config_line_2; }; union { struct { u8 cacheLineSize; u8 latencyTimer; u8 headerType; u8 bist; }; u32 config_line_3; }; const pci_driver *pci_driver; struct { u8 present: 1; } device_state; struct { u8 initialized: 1; } driver_state; } pci_device; void pci_print_info(); u32 pci_register_driver(const pci_driver *pci_driver); void pci_sort_drivers(); void pci_init_drivers(); void pci_scan(); #endif //NEW_KERNEL_PCI_H