feat: used linker to link pci drivers
This commit is contained in:
@@ -76,14 +76,21 @@
|
||||
|
||||
#define PCI_INTERRUPT_LINE_DISABLED 0xff
|
||||
|
||||
typedef struct pci_driver pci_driver;
|
||||
#ifndef PCI_DRIVER_ALIGNMENT
|
||||
#if defined(__LP64__)
|
||||
#define PCI_DRIVER_ALIGNMENT 16
|
||||
#else
|
||||
#define PCI_DRIVER_ALIGNMENT 8
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef struct pci_device pci_device;
|
||||
|
||||
typedef uint8_t (*pci_driver_validate)(const pci_device *);
|
||||
|
||||
typedef uint8_t (*pci_driver_initialize)(pci_device *);
|
||||
|
||||
typedef struct pci_driver {
|
||||
struct pci_driver {
|
||||
const char *name;
|
||||
const char *description;
|
||||
uint8_t order;
|
||||
@@ -96,7 +103,16 @@ typedef struct pci_driver {
|
||||
};
|
||||
pci_driver_validate validate;
|
||||
pci_driver_initialize initialize;
|
||||
} pci_driver;
|
||||
} __attribute__((__aligned__(PCI_DRIVER_ALIGNMENT)));
|
||||
|
||||
#define PCI_DRIVER_NAME(counter) DRIVER_CAT(pci_driver_, counter)
|
||||
#define DRIVER_CAT(a, b) DRIVER_DUMMY() a ## b
|
||||
#define DRIVER_DUMMY()
|
||||
|
||||
#define PCI_DRIVER(data...) \
|
||||
static struct pci_driver PCI_DRIVER_NAME(__COUNTER__) \
|
||||
__attribute((__used__, __section__("pci_drivers"))) \
|
||||
= { data }
|
||||
|
||||
typedef struct {
|
||||
uint32_t address;
|
||||
@@ -142,7 +158,7 @@ typedef struct pci_device {
|
||||
bar_info bar3;
|
||||
bar_info bar4;
|
||||
bar_info bar5;
|
||||
const pci_driver *pci_driver;
|
||||
const struct pci_driver *pci_driver;
|
||||
struct {
|
||||
uint8_t present: 1;
|
||||
} device_state;
|
||||
@@ -198,8 +214,6 @@ void pci_pretty_print();
|
||||
|
||||
#endif
|
||||
|
||||
uint32_t pci_register_driver(const pci_driver *pci_driver);
|
||||
|
||||
void pci_sort_drivers();
|
||||
|
||||
void pci_init_drivers();
|
||||
|
||||
Reference in New Issue
Block a user