123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- #pragma once
- #include <common/glib.h>
- #include "stdint.h"
- #define PORT_PCI_CONFIG_ADDRESS 0xcf8
- #define PORT_PCI_CONFIG_DATA 0xcfc
- struct List *pci_device_structure_list = NULL;
- void pci_init();
- struct pci_device_structure_header_t
- {
- struct List list;
-
- uint8_t bus;
- uint8_t device;
- uint8_t func;
- uint16_t Vendor_ID;
- uint16_t Device_ID;
- uint16_t Command;
- uint16_t Status;
- uint8_t RevisionID;
- uint8_t ProgIF;
- uint8_t SubClass;
- uint8_t Class_code;
- uint8_t CacheLineSize;
- uint8_t LatencyTimer;
- uint8_t HeaderType;
- uint8_t BIST;
-
-
-
-
- } __attribute__((packed));
- struct pci_device_structure_general_device_t
- {
- struct pci_device_structure_header_t header;
- uint32_t BAR0;
- uint32_t BAR1;
- uint32_t BAR2;
- uint32_t BAR3;
- uint32_t BAR4;
- uint32_t BAR5;
- uint32_t Cardbus_CIS_Pointer;
- uint16_t Subsystem_Vendor_ID;
- uint16_t Subsystem_ID;
- uint32_t Expansion_ROM_base_address;
- uint8_t Capabilities_Pointer;
- uint8_t reserved0;
- uint16_t reserved1;
- uint32_t reserved2;
- uint8_t Interrupt_Line;
- uint8_t Interrupt_PIN;
- uint8_t Min_Grant;
- uint8_t Max_Latency;
- } __attribute__((packed));
- struct pci_device_structure_pci_to_pci_bridge_t
- {
- struct pci_device_structure_header_t header;
- uint32_t BAR0;
- uint32_t BAR1;
- uint8_t Primary_Bus_Number;
- uint8_t Secondary_Bus_Number;
- uint8_t Subordinate_Bus_Number;
- uint8_t Secondary_Latency_Timer;
- uint8_t io_base;
- uint8_t io_limit;
- uint16_t Secondary_Status;
- uint16_t Memory_Base;
- uint16_t Memory_Limit;
- uint16_t Prefetchable_Memory_Base;
- uint16_t Prefetchable_Memory_Limit;
- uint32_t Prefetchable_Base_Upper_32_Bits;
- uint32_t Prefetchable_Limit_Upper_32_Bits;
- uint16_t io_Base_Upper_16_Bits;
- uint16_t io_Limit_Upper_16_Bits;
- uint8_t Capability_Pointer;
- uint8_t reserved0;
- uint16_t reserved1;
- uint32_t Expansion_ROM_base_address;
- uint8_t Interrupt_Line;
- uint8_t Interrupt_PIN;
- uint16_t Bridge_Control;
- } __attribute__((packed));
- struct pci_device_structure_pci_to_cardbus_bridge_t
- {
- struct pci_device_structure_header_t header;
- uint32_t CardBus_Socket_ExCa_base_address;
- uint8_t Offset_of_capabilities_list;
- uint8_t Reserved;
- uint16_t Secondary_status;
- uint8_t PCI_bus_number;
- uint8_t CardBus_bus_number;
- uint8_t Subordinate_bus_number;
- uint8_t CardBus_latency_timer;
- uint32_t Memory_Base_Address0;
- uint32_t Memory_Limit0;
- uint32_t Memory_Base_Address1;
- uint32_t Memory_Limit1;
- uint32_t IO_Base_Address0;
- uint32_t IO_Limit0;
- uint32_t IO_Base_Address1;
- uint32_t IO_Limit1;
- uint8_t Interrupt_Line;
- uint8_t Interrupt_PIN;
- uint16_t Bridge_Control;
- uint16_t Subsystem_Device_ID;
- uint16_t Subsystem_Vendor_ID;
- uint32_t PC_Card_legacy_mode_base_address_16_bit;
- } __attribute__((packed));
- uint32_t pci_read_config(uchar bus, uchar slot, uchar func, uchar offset);
- uint pci_write_config(uchar bus, uchar slot, uchar func, uchar offset, uint32_t data);
- void *pci_read_header(int *type, uchar bus, uchar slot, uchar func, bool add_to_list);
- void pci_checkAllBuses();
- void pci_get_device_structure(uint8_t class_code, uint8_t sub_class, struct pci_device_structure_header_t *res[], uint32_t *count_res);
- uint32_t pci_enumerate_capability_list(struct pci_device_structure_header_t *pci_dev, int cap_type);
|