#pragma once #include /** * A specific IRQ gate * \internal */ struct IrqHandlerGate; /** * A hook called on an interrupt */ struct IrqHandlerHook { /// Higher priority values called first u32 Priority; /** * The hook itself. * * \return 1 to cancel uncalled hooks * 0 on success * -1 on failure */ s32 (*HookCall)(); /** * Next hook * \internal */ struct IrqHandlerHook* Next; /** * Attached gate * \internal */ struct IrqHandlerGate* Gate; }; /** * Initialize the IRQ handler * * \return 0 on success */ s32 IrqHandlerInitialize(); /** * Hook an interrupt * * \return 0 on success */ s32 IrqHandlerAttach(u8 Gate, struct IrqHandlerHook* Hook); /** * Remove a hook * * \return 0 on success */ s32 IrqHandlerDetach(struct IrqHandlerHook* Hook); void IrqHandlerDisableInterrupts(); void IrqHandlerEnableInterrupts();