Files
opencoreC/hal/include/pci.h
T

52 lines
1.3 KiB
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;
typedef struct gpu_info {
uint16_t vendor_id;
uint16_t device_id;
uint8_t bus;
uint8_t slot;
uint8_t func;
uint32_t vram_mb;
char vendor_name[32];
char model_name[64];
} gpu_info_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);
uint32_t pci_get_bar_size(uint8_t bus, uint8_t slot, uint8_t func, uint8_t bar_idx);
const char *pci_class_to_string(uint8_t class_code, uint8_t subclass);
const char *pci_vendor_to_string(uint16_t vendor_id);
int pci_detect_gpu(gpu_info_t *out_gpu);
typedef void (*pci_scan_callback_t)(const pci_device_t *dev);
void pci_scan_bus(pci_scan_callback_t callback);
#ifdef __cplusplus
}
#endif