diff options
author | Anton Kling <anton@kling.gg> | 2023-11-15 02:58:36 +0100 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2023-11-15 21:40:13 +0100 |
commit | b775d4e1b626f97364994fd0d60faac9e78932bb (patch) | |
tree | d4015aa95e226cf0a1722e12f53e342a7b70f370 /kernel/drivers/pci.c | |
parent | e22e493940266e0aa9be2bf58df1821a3539e19b (diff) |
PCI: Add interrupt handler functions
Diffstat (limited to 'kernel/drivers/pci.c')
-rw-r--r-- | kernel/drivers/pci.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/kernel/drivers/pci.c b/kernel/drivers/pci.c index 362d5c3..7484a41 100644 --- a/kernel/drivers/pci.c +++ b/kernel/drivers/pci.c @@ -135,6 +135,24 @@ int pci_populate_device_struct(u16 vendor, u16 device, return 0; } +void pci_enable_interrupts(const struct PCI_DEVICE *device) { + u32 register1 = pci_config_read32(device, 0, 0x4); + u8 current_interrupt = (register1 >> 10) & 1; + if (current_interrupt) { + kprintf("PCI: Interrrupt already enabled\n"); + } + register1 |= (1 << 10); + pci_config_write32(device, 0, 0x4, register1); +} + +void pci_set_interrupt_line(const struct PCI_DEVICE *device, + u8 interrupt_line) { + u32 register1 = pci_config_read32(device, 0, 0x3C); + register1 &= ~(0xFF); + register1 |= interrupt_line; + pci_config_write32(device, 0, 0x3C, register1); +} + u8 pci_get_interrupt_line(const struct PCI_DEVICE *device) { return pci_config_read32(device, 0, 0x3C) & 0xFF; } |