#ifndef RVL_SDK_OS_INTERRUPT_H #define RVL_SDK_OS_INTERRUPT_H #include "common.h" #ifdef __cplusplus extern "C" { #endif // Forward declarations typedef struct OSContext; // Create mask from interrupt ID #define OS_INTR_MASK(intr) (1 << (31 - intr)) typedef enum { OS_INTR_MEM_0, OS_INTR_MEM_1, OS_INTR_MEM_2, OS_INTR_MEM_3, OS_INTR_MEM_ADDRESS, OS_INTR_DSP_AI, OS_INTR_DSP_ARAM, OS_INTR_DSP_DSP, OS_INTR_AI_AI, OS_INTR_EXI_0_EXI, OS_INTR_EXI_0_TC, OS_INTR_EXI_0_EXT, OS_INTR_EXI_1_EXI, OS_INTR_EXI_1_TC, OS_INTR_EXI_1_EXT, OS_INTR_EXI_2_EXI, OS_INTR_EXI_2_TC, OS_INTR_PI_CP, OS_INTR_PI_PE_TOKEN, OS_INTR_PI_PE_FINISH, OS_INTR_PI_SI, OS_INTR_PI_DI, OS_INTR_PI_RSW, OS_INTR_PI_ERROR, OS_INTR_PI_VI, OS_INTR_PI_DEBUG, OS_INTR_PI_HSP, OS_INTR_PI_ACR, OS_INTR_28, OS_INTR_29, OS_INTR_30, OS_INTR_31, OS_INTR_MAX } OSInterruptType; typedef void (*OSInterruptHandler)(s16 intr, struct OSContext *ctx); extern u32 __OSLastInterruptSrr0; extern s16 __OSLastInterrupt; extern s64 __OSLastInterruptTime; BOOL OSDisableInterrupts(void); BOOL OSEnableInterrupts(void); BOOL OSRestoreInterrupts(BOOL status); OSInterruptHandler __OSSetInterruptHandler(OSInterruptType type, OSInterruptHandler handler); OSInterruptHandler __OSGetInterruptHandler(OSInterruptType type); void __OSInterruptInit(void); u32 __OSMaskInterrupts(u32 userMask); u32 __OSUnmaskInterrupts(u32 userMask); void __OSDispatchInterrupt(u8 intr, struct OSContext *ctx); void __RAS_OSDisableInterrupts_begin(void); void __RAS_OSDisableInterrupts_end(void); #ifdef __cplusplus } #endif #endif