summaryrefslogtreecommitdiff
path: root/src/pci.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/pci.h')
-rw-r--r--src/pci.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/pci.h b/src/pci.h
index 6f82f12..6f22da6 100644
--- a/src/pci.h
+++ b/src/pci.h
@@ -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