diff options
Diffstat (limited to 'src/pci.h')
-rw-r--r-- | src/pci.h | 17 |
1 files changed, 17 insertions, 0 deletions
@@ -1,6 +1,8 @@ #ifndef PCI_H #define PCI_H +#include <stdbool.h> + #include "port.h" typedef struct { @@ -8,6 +10,7 @@ typedef struct { uint16_t device_id; uint8_t class_id; uint8_t subclass_id; + uint8_t interface_id; uint8_t revision_id; } pci_device_descriptor_t; @@ -16,6 +19,18 @@ typedef struct { port32_t data_port; } pci_controller_t; +typedef enum { + BASE_ADDRESS_REGISTER_TYPE_IO, + BASE_ADDRESS_REGISTER_TYPE_MEMORY_MAPPED +} pci_base_address_register_type_t; + +typedef struct { + pci_base_address_register_type_t type; + bool prefechable; + uint8_t *addr; + uint32_t *size; +} pci_base_address_register_t; + void pci_controller_init( pci_controller_t *controller ); uint16_t pci_controller_read( pci_controller_t *controller, uint16_t bus, uint16_t device, uint16_t function, uint32_t offset ); @@ -24,4 +39,6 @@ void pci_controller_scan( pci_controller_t *controller ); void pci_device_descriptor_init( pci_device_descriptor_t *descriptor, pci_controller_t *controller, uint16_t bus, uint16_t device, uint16_t function ); +void pci_base_address_register_init( pci_base_address_register_t *base_address_register, pci_controller_t *controller, uint16_t bus, uint16_t device, uint16_t function, uint16_t bar ); + #endif // PCI_H |