X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/bc34fd00d2e81fbc890bb2060ed6693454a230bf..df1e857ac4d1410ae2bd354e361210b842ab7bc8:/lunaix-os/includes/hal/pci.h diff --git a/lunaix-os/includes/hal/pci.h b/lunaix-os/includes/hal/pci.h index 57c04ca..21952f2 100644 --- a/lunaix-os/includes/hal/pci.h +++ b/lunaix-os/includes/hal/pci.h @@ -3,6 +3,7 @@ #include #include +#include #define PCI_CONFIG_ADDR 0xcf8 #define PCI_CONFIG_DATA 0xcfc @@ -56,6 +57,19 @@ typedef unsigned int pci_reg_t; // PCI device header format // Ref: "PCI Local Bus Specification, Rev.3, Section 6.1" +#define BAR_TYPE_MMIO 0x1 +#define BAR_TYPE_CACHABLE 0x2 +#define PCI_DRV_NAME_LEN 32 + +struct pci_driver; + +struct pci_base_addr +{ + uint32_t start; + uint32_t size; + uint32_t type; +}; + struct pci_device { struct llist_header dev_chain; @@ -64,6 +78,23 @@ struct pci_device uint32_t cspace_base; uint32_t msi_loc; uint16_t intr_info; + struct + { + struct pci_driver* type; + void* instance; + } driver; + struct pci_base_addr bar[6]; +}; + +typedef void* (*pci_drv_init)(struct pci_device*); + +struct pci_driver +{ + struct llist_header drivers; + u32_t dev_info; + u32_t dev_class; + pci_drv_init create_driver; + char name[PCI_DRV_NAME_LEN]; }; // PCI Configuration Space (C-Space) r/w: @@ -91,9 +122,6 @@ pci_write_cspace(uint32_t base, int offset, pci_reg_t data) void pci_init(); -void -pci_print_device(); - /** * @brief 根据类型代码(Class Code)去在拓扑中寻找一个设备 * 类型代码请参阅: PCI LB Spec. Appendix D. @@ -136,4 +164,14 @@ pci_bar_sizing(struct pci_device* dev, uint32_t* bar_out, uint32_t bar_num); void pci_setup_msi(struct pci_device* device, int vector); +void +pci_add_driver(const char* name, + u32_t class, + u32_t vendor, + u32_t devid, + pci_drv_init init); + +int +pci_bind_driver(struct pci_device* pci_dev); + #endif /* __LUNAIX_PCI_H */