summaryrefslogtreecommitdiff
path: root/include/dolphin/dsp.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/dolphin/dsp.h')
-rw-r--r--include/dolphin/dsp.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/include/dolphin/dsp.h b/include/dolphin/dsp.h
new file mode 100644
index 0000000..f74ac9e
--- /dev/null
+++ b/include/dolphin/dsp.h
@@ -0,0 +1,72 @@
+#ifndef _DOLPHIN_DSP
+#define _DOLPHIN_DSP
+
+#include "types.h"
+#include <dolphin/os.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DSP_TASK_FLAG_CLEARALL 0x00000000
+#define DSP_TASK_FLAG_ATTACHED 0x00000001
+#define DSP_TASK_FLAG_CANCEL 0x00000002
+
+#define DSP_TASK_STATE_INIT 0
+#define DSP_TASK_STATE_RUN 1
+#define DSP_TASK_STATE_YIELD 2
+#define DSP_TASK_STATE_DONE 3
+
+typedef void (*DSPCallback)(void* task);
+
+typedef struct DSPTaskInfo DSPTaskInfo;
+
+typedef struct DSPTaskInfo {
+ vu32 state;
+ vu32 priority;
+ vu32 flags;
+ u16* iram_mmem_addr;
+ u32 iram_length;
+ u32 iram_addr;
+
+ u16* dram_mmem_addr;
+ u32 dram_length;
+ u32 dram_addr;
+
+ u16 dsp_init_vector;
+ u16 dsp_resume_vector;
+
+ DSPCallback init_cb;
+ DSPCallback res_cb;
+ DSPCallback done_cb;
+ DSPCallback req_cb;
+
+ struct DSPTaskInfo* next;
+ struct DSPTaskInfo* prev;
+
+ OSTime t_context;
+ OSTime t_task;
+
+} DSPTaskInfo;
+
+void DSPInit();
+void DSPReset();
+void DSPHalt();
+void DSPSendMailToDSP(u32 mail);
+u32 DSPCheckMailToDSP();
+u32 DSPCheckMailFromDSP();
+u32 DSPGetDMAStatus();
+
+DSPTaskInfo* DSPAddTask(DSPTaskInfo* task);
+
+void __DSP_exec_task(DSPTaskInfo* curr, DSPTaskInfo* next);
+void __DSP_boot_task(DSPTaskInfo* task);
+void __DSP_remove_task(DSPTaskInfo* task);
+void __DSP_add_task(DSPTaskInfo* task);
+void __DSP_debug_printf(const char* fmt, ...);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // _DOLPHIN_DSP