Restructure the x86 interrupt handling to allow for a more flexible method of using IOAPIC and MSI interrupts. The essence of this change is to allow for the user to pick, for both IOAPIC and MSIs, which CPU vector to use. Additionally there is future support, in the API, for seL4 to eventually protect MSI interrupts with the vt-d interrupt routing tables. API behaviour for legacy systems using the PIC is preserved Part of SELFOUR-281
35 lines
1.2 KiB
C
35 lines
1.2 KiB
C
/*
|
|
* Copyright 2014, General Dynamics C4 Systems
|
|
*
|
|
* This software may be distributed and modified according to the terms of
|
|
* the GNU General Public License version 2. Note that NO WARRANTY is provided.
|
|
* See "LICENSE_GPLv2.txt" for details.
|
|
*
|
|
* @TAG(GD_GPL)
|
|
*/
|
|
|
|
#ifndef __OBJECT_INTERRUPT_H
|
|
#define __OBJECT_INTERRUPT_H
|
|
|
|
#include <types.h>
|
|
#include <api/failures.h>
|
|
#include <object/structures.h>
|
|
#include <arch/object/interrupt.h>
|
|
#include <plat/machine.h>
|
|
|
|
exception_t decodeIRQControlInvocation(word_t invLabel, word_t length,
|
|
cte_t *srcSlot, extra_caps_t excaps,
|
|
word_t *buffer);
|
|
exception_t invokeIRQControl(irq_t irq, cte_t *handlerSlot, cte_t *controlSlot);
|
|
exception_t decodeIRQHandlerInvocation(word_t invLabel, irq_t irq,
|
|
extra_caps_t excaps);
|
|
void invokeIRQHandler_AckIRQ(irq_t irq);
|
|
void invokeIRQHandler_SetIRQHandler(irq_t irq, cap_t cap, cte_t *slot);
|
|
void invokeIRQHandler_ClearIRQHandler(irq_t irq);
|
|
void deletingIRQHandler(irq_t irq);
|
|
void deletedIRQHandler(irq_t irq);
|
|
void handleInterrupt(irq_t irq);
|
|
bool_t isIRQActive(irq_t irq);
|
|
void setIRQState(irq_state_t irqState, irq_t irq);
|
|
|
|
#endif
|