35 lines
859 B
C
35 lines
859 B
C
#pragma once
|
|
|
|
#include "stdint.h"
|
|
|
|
#define PCI_CONFIG_ADDRESS 0xCF8
|
|
#define PCI_CONFIG_DATA 0xCFC
|
|
|
|
typedef struct pci_device {
|
|
uint8_t bus;
|
|
uint8_t slot;
|
|
uint8_t func;
|
|
uint16_t vendor_id;
|
|
uint16_t device_id;
|
|
uint8_t class_code;
|
|
uint8_t subclass;
|
|
uint8_t prog_if;
|
|
uint8_t header_type;
|
|
} pci_device_t;
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
uint32_t pci_read_config_dword(uint8_t bus, uint8_t slot, uint8_t func, uint8_t offset);
|
|
void pci_write_config_dword(uint8_t bus, uint8_t slot, uint8_t func, uint8_t offset, uint32_t val);
|
|
uint16_t pci_get_vendor_id(uint8_t bus, uint8_t slot, uint8_t func);
|
|
uint16_t pci_get_device_id(uint8_t bus, uint8_t slot, uint8_t func);
|
|
|
|
typedef void (*pci_scan_callback_t)(const pci_device_t *dev);
|
|
void pci_scan_bus(pci_scan_callback_t callback);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|