Add non-MSI IRQ functionality to PCI
This commit is contained in:
@@ -3,6 +3,8 @@
|
||||
// irq.h header to provide controller-agnostic interface
|
||||
#include "sys/types.h"
|
||||
|
||||
struct pci_device;
|
||||
|
||||
#define IOAPIC_REG_ID 0x00
|
||||
#define IOAPIC_REG_VER 0x01
|
||||
#define IOAPIC_REG_REDIR 0x10
|
||||
@@ -50,4 +52,4 @@ uint8_t amd64_ioapic_leg_gsi(uint8_t leg_irq);
|
||||
#define PCI_IRQ_INVALID 0xFFFFFFFE
|
||||
|
||||
int amd64_pci_init_irqs(void);
|
||||
uint32_t amd64_pci_pin_irq_route(uint8_t bus, uint8_t dev, uint8_t func, uint8_t pin);
|
||||
uint32_t amd64_pci_pin_irq_route(struct pci_device *dev, uint8_t pin);
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#define IRQ_UNHANDLED ((uint32_t) -1)
|
||||
|
||||
typedef uint32_t (*irq_handler_func_t) (void *);
|
||||
struct pci_device;
|
||||
|
||||
struct irq_handler {
|
||||
irq_handler_func_t func;
|
||||
@@ -18,7 +19,7 @@ struct irq_handler {
|
||||
int irq_add_handler(uint8_t gsi, irq_handler_func_t handler, void *ctx);
|
||||
int irq_add_leg_handler(uint8_t leg_irq, irq_handler_func_t handler, void *ctx);
|
||||
int irq_add_msi_handler(irq_handler_func_t handler, void *ctx, uint8_t *vector);
|
||||
//int irq_add_pci_handler(pci_addr_t addr, uint8_t pin, irq_handler_func_t handler, void *ctx);
|
||||
int irq_add_pci_handler(struct pci_device *dev, uint8_t pin, irq_handler_func_t handler, void *ctx);
|
||||
|
||||
int irq_has_handler(uint8_t gsi);
|
||||
|
||||
|
||||
@@ -21,14 +21,19 @@
|
||||
struct pci_device;
|
||||
typedef void (*pci_driver_func_t)(struct pci_device *dev);
|
||||
|
||||
void pci_get_device_address(const struct pci_device *dev, uint8_t *b, uint8_t *d, uint8_t *f);
|
||||
|
||||
void pci_init(void);
|
||||
void pci_add_root_bus(uint8_t n);
|
||||
|
||||
uint32_t pci_config_read_dword_legacy(uint8_t bus, uint8_t dev, uint8_t func, uint32_t off);
|
||||
uint32_t pci_config_read_dword(struct pci_device *dev, uint16_t off);
|
||||
void pci_config_write_dword_legacy(uint8_t bus, uint8_t dev, uint8_t func, uint32_t off, uint32_t val);
|
||||
void pci_config_write_dword(struct pci_device *dev, uint16_t off, uint32_t val);
|
||||
void pci_add_irq(struct pci_device *dev, irq_handler_func_t handler, void *ctx);
|
||||
|
||||
void pci_add_class_driver(uint32_t full_class, pci_driver_func_t func, const char *name);
|
||||
void pci_add_device_driver(uint32_t id, pci_driver_func_t func, const char *name);
|
||||
|
||||
// pcidb.c
|
||||
const char *pci_class_string(uint16_t full_class);
|
||||
|
||||
Reference in New Issue
Block a user