Files

47 lines
1.1 KiB
C

#ifndef _KERNEL_DRIVERS_BUS_X86_PCI_H
#define _KERNEL_DRIVERS_BUS_X86_PCI_H
#include <drivers/driver_manager.h>
#include <libkern/c_attrs.h>
#include <libkern/types.h>
#include <platform/x86/port.h>
struct PACKED pcidd {
uint8_t bus;
uint8_t device;
uint8_t function;
uint16_t vendor_id;
uint16_t device_id;
uint8_t class_id;
uint8_t subclass_id;
uint8_t interface_id;
uint8_t revision_id;
uint32_t interrupt;
uint32_t port_base;
};
typedef struct pcidd pcidd_t;
enum bar_type {
MEMORY_MAPPED = 0,
INPUT_OUTPUT = 1
};
typedef struct {
char prefetchable;
uint32_t address;
uint8_t type;
} bar_t;
void pci_install();
uint32_t pci_read(uint16_t bus, uint16_t device, uint16_t function, uint32_t offset);
void pci_write(uint8_t bus, uint8_t device, uint8_t function, uint8_t offset, uint32_t data);
char pci_has_device_functions(uint8_t bus, uint8_t device);
int pci_find_devices();
device_desc_t pci_get_device_desriptor(uint8_t bus, uint8_t device, uint8_t function);
uint32_t pci_read_bar(device_t* dev, int bar_id);
#endif /* _KERNEL_DRIVERS_BUS_X86_PCI_H */