#ifndef RVL_SDK_DSP_TASK_H #define RVL_SDK_DSP_TASK_H #include "common.h" #ifdef __cplusplus extern "C" { #endif // Forward declarations typedef struct DSPTask; typedef struct OSContext; typedef enum { DSP_TASK_ACTIVE = (1 << 0), DSP_TASK_CANCELED = (1 << 1), } DSPTaskFlags; typedef enum { DSP_TASK_STATE_0, DSP_TASK_STATE_1, DSP_TASK_STATE_2, DSP_TASK_STATE_3, } DSPTaskState; typedef void (*DSPTaskCallback)(struct DSPTask *task); typedef struct DSPTask { u32 state; // at 0x0 u32 prio; // at 0x4 u32 flags; // at 0x8 void *iramMmemAddr; // at 0xC u32 iramMmemLen; // at 0x10 void *iramDspAddr; // at 0x14 u32 iramDspLen; // at 0x18 u32 dramMmemLen; // at 0x1C UNKWORD WORD_0x20; u16 startVector; // at 0x24 u16 resumeVector; // at 0x26 DSPTaskCallback initCallback; // at 0x28 DSPTaskCallback resumeCallback; // at 0x2C DSPTaskCallback doneCallback; // at 0x30 DSPTaskCallback requestCallback; // at 0x34 struct DSPTask *next; // at 0x38 struct DSPTask *prev; // at 0x3C } DSPTask; extern BOOL __DSP_rude_task_pending; extern DSPTask *__DSP_rude_task; extern DSPTask *__DSP_tmp_task; extern DSPTask *__DSP_last_task; extern DSPTask *__DSP_first_task; extern DSPTask *__DSP_curr_task; void __DSPHandler(s16 intr, struct OSContext *ctx); void __DSP_exec_task(DSPTask *task1, DSPTask *task2); void __DSP_boot_task(DSPTask *task); void __DSP_insert_task(DSPTask *task); void __DSP_remove_task(DSPTask *task); #ifdef __cplusplus } #endif #endif