8#ifndef KERNEL_MACHINE_VIRT_IRQMANAGER_H
9#define KERNEL_MACHINE_VIRT_IRQMANAGER_H
11#include "pedigree/kernel/Spinlock.h"
12#include "pedigree/kernel/machine/IrqHandlerRegistry.h"
13#include "pedigree/kernel/machine/IrqManager.h"
14#include "pedigree/kernel/machine/ThreadedIrqDispatcher.h"
15#include "pedigree/kernel/processor/state_forward.h"
24 bool initialiseThreaded();
25 bool shutdownThreaded();
26 void handle(InterruptState& state);
33 const IrqPolicy& intxFallbackPolicy)
override;
35 irq_id_t* ids,
bool& fallbackSafe,
36 const size_t* processors =
nullptr)
override;
42 const IrqPolicy& intxFallbackPolicy)
override;
47 void enable(uint8_t irq,
bool enabled)
override;
50 static constexpr size_t MaxIrqs = 256;
51 static constexpr size_t MaxPciLines = 16;
72 static void dispatchPciLine(
void* context, uint8_t line,
size_t cookie);
77 size_t pciLine(uint32_t irq)
const;
78 uint8_t pciRegistryLine(
size_t slot)
const;
79 uint32_t acknowledge();
80 void complete(uint32_t acknowledgeValue);
81 bool setEnabled(uint32_t irq,
bool enabled);
82 void setLevel(uint32_t irq);
83 void setEdge(uint32_t irq);
93 PciLine m_PciLines[MaxPciLines];
99 uint64_t m_MsiAddress;
106extern "C" void virtHandleIrq(InterruptState& state);
irq_id_t registerHardPciIrqHandler(HardIrqHandler *handler, Device *device, const IrqPolicy &policy) override
irq_id_t registerIsaIrqHandler(uint8_t irq, IrqHandler *handler, const IrqPolicy &policy) override
irq_id_t registerPciMessageIrqHandler(IrqHandler *handler, Device *device, const IrqPolicy &intxFallbackPolicy) override
bool unregisterHandler(irq_id_t id, IrqHandlerBase *handler) override
bool registerPciMsixIrqHandlers(Device *device, IrqHandler *const *handlers, size_t count, irq_id_t *ids, bool &fallbackSafe, const size_t *processors=nullptr) override
bool unregisterSchedulerIrqHandler(irq_id_t id, SchedulerIrqHandler *handler) override
irq_id_t registerHardPciMessageIrqHandler(HardIrqHandler *handler, Device *device, const IrqPolicy &intxFallbackPolicy) override
irq_id_t registerHardIsaIrqHandler(uint8_t irq, HardIrqHandler *handler, const IrqPolicy &policy) override
irq_id_t registerSchedulerIrqHandler(uint8_t irq, SchedulerIrqHandler *handler, const IrqPolicy &policy) override
irq_id_t registerPciIrqHandler(IrqHandler *handler, Device *device, const IrqPolicy &policy) override