diff options
| author | Anton Kling <anton@kling.gg> | 2023-11-12 15:12:25 +0100 | 
|---|---|---|
| committer | Anton Kling <anton@kling.gg> | 2023-11-12 15:12:48 +0100 | 
| commit | 4e34a5f97786b3bab82f08297ead63e1618744ec (patch) | |
| tree | 9d95150ddb5305bfab24dedbe665939bd7a82f10 /kernel/drivers/pci.h | |
| parent | 429b619013d68b98ebadc1e90f77506bcf2dbc9e (diff) | |
Kernel/PCI: Add functions for getting BAR and specific PCI devices by
class
Diffstat (limited to 'kernel/drivers/pci.h')
| -rw-r--r-- | kernel/drivers/pci.h | 18 | 
1 files changed, 14 insertions, 4 deletions
| diff --git a/kernel/drivers/pci.h b/kernel/drivers/pci.h index 66d7207..3378c8b 100644 --- a/kernel/drivers/pci.h +++ b/kernel/drivers/pci.h @@ -1,5 +1,11 @@  #include <typedefs.h> +struct PCI_BaseAddressRegister { +  u32 address; +  u32 size; +  // TODO: Add a "type". +}; +  struct GENERAL_DEVICE {    u32 base_mem_io;    u8 interrupt_line; @@ -10,17 +16,21 @@ struct PCI_DEVICE {    u16 device;    u8 bus;    u8 slot; +  u8 header_type;    union {      struct GENERAL_DEVICE gen;    };  }; -u32 pci_config_read32(const struct PCI_DEVICE *device, u8 func, -                           u8 offset); -void pci_config_write32(const struct PCI_DEVICE *device, u8 func, -                        u8 offset, u32 data); +u8 pci_get_bar(const struct PCI_DEVICE *device, u8 bar_index, +               struct PCI_BaseAddressRegister *bar); +u32 pci_config_read32(const struct PCI_DEVICE *device, u8 func, u8 offset); +void pci_config_write32(const struct PCI_DEVICE *device, u8 func, u8 offset, +                        u32 data);  int pci_populate_device_struct(u16 vendor, u16 device,                                 struct PCI_DEVICE *pci_device); +u8 pci_devices_by_id(u8 class_id, u8 subclass_id, +                     struct PCI_DEVICE *pci_device);  u8 pci_get_interrupt_line(const struct PCI_DEVICE *device); |