summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/kernel/kernel/intrmgr.h60
-rw-r--r--nids/360/SceKernelIntrMgr.yml23
2 files changed, 83 insertions, 0 deletions
diff --git a/include/kernel/kernel/intrmgr.h b/include/kernel/kernel/intrmgr.h
new file mode 100644
index 0000000..ca11136
--- /dev/null
+++ b/include/kernel/kernel/intrmgr.h
@@ -0,0 +1,60 @@
+#ifndef _PSP2_KERNEL_INTRMGR_H_
+#define _PSP2_KERNEL_INTRMGR_H_
+
+#include <psp2kern/types.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef int (*SceKernelIntrOptParam2Callback)(int intr_code, int subintr_code);
+
+typedef struct SceKernelIntrOptParam2 {
+ uint32_t size; // 0x28
+ uint32_t unk_4;
+ uint32_t unk_8;
+ uint32_t unk_C;
+ SceKernelIntrOptParam2Callback *fptr0; // function pointer
+ SceKernelIntrOptParam2Callback *enable_subinterrupt_cb;
+ SceKernelIntrOptParam2Callback *fptr2; // function pointer
+ uint32_t unk_1C;
+ uint32_t unk_20;
+ uint32_t unk_24;
+} SceKernelIntrOptParam2;
+
+typedef struct SceKernelIntrOptParam {
+ uint32_t size; // 0x14
+ uint32_t num;
+ SceKernelIntrOptParam2 *opt2;
+ uint32_t unk_C;
+ uint32_t unk_10;
+} SceKernelIntrOptParam;
+
+typedef int (*SceKernelIntrHandler)(int unk, void *userCtx);
+typedef int (*SceKernelSubIntrHandler)(void *arg, int unk0, int unk1);
+
+int sceKernelRegisterIntrHandler(int intr_code, const char *name, int interrupt_type,
+ SceKernelIntrHandler *handler, void *userCtx, int priority, int targetcpu, SceKernelIntrOptParam *opt);
+int sceKernelReleaseIntrHandler(int intr_code);
+int sceKernelMaskIntr(int intr_code);
+int sceKernelUnmaskIntr(int intr_code);
+int sceKernelSetIntrMasked(int intr_code, int masked);
+int sceKernelGetIntrMasked(int intr_code, int *masked);
+int sceKernelIsIntrPending(int intr_code);
+int sceKernelClearIntrPending(int intr_code);
+int sceKernelSetIntrPriority(int intr_code, unsigned char priority);
+int sceKernelSetIntrTarget(int intr_code, int cpu_target_list);
+int sceKernelTriggerSGI(int intr_code, unsigned int target_list_filter, unsigned int cpu_target_list);
+int sceKernelIsIntrAllowedInCurrentContext(int intr_code);
+int sceKernelRegisterSubIntrHandler(int intr_code, int subintr_code, const char *name,
+ SceKernelSubIntrHandler handler, void *register_arg);
+int sceKernelTriggerSubIntr(int intr_code, int subintr_code, void *subintr_arg);
+int sceKernelEnableSubIntr(int intr_code, int subintr_code);
+int sceKernelDisableSubIntr(int intr_code, int subintr_code);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _PSP2_KERNEL_INTRMGR_H_ */
+
diff --git a/nids/360/SceKernelIntrMgr.yml b/nids/360/SceKernelIntrMgr.yml
new file mode 100644
index 0000000..1164649
--- /dev/null
+++ b/nids/360/SceKernelIntrMgr.yml
@@ -0,0 +1,23 @@
+modules:
+ SceKernelIntrMgr:
+ nid: 0x73B1F972
+ libraries:
+ SceIntrmgrForDriver:
+ nid: 0x9DF04041
+ functions:
+ sceKernelClearIntrPending: 0x4DC48A01
+ sceKernelDisableSubIntr: 0x259C6D9E
+ sceKernelEnableSubIntr: 0x901E41D8
+ sceKernelGetIntrMasked: 0x6EC07C56
+ sceKernelIsIntrAllowedInCurrentContext: 0x182EE3E3
+ sceKernelIsIntrPending: 0xA269003D
+ sceKernelMaskIntr: 0x180435EC
+ sceKernelRegisterIntrHandler: 0x5C1FEB29
+ sceKernelRegisterSubIntrHandler: 0x96576C18
+ sceKernelReleaseIntrHandler: 0xD6009B98
+ sceKernelSetIntrMasked: 0x7117E827
+ sceKernelSetIntrPriority: 0x71020E29
+ sceKernelSetIntrTarget: 0x973BACCC
+ sceKernelTriggerSGI: 0x29F62500
+ sceKernelTriggerSubIntr: 0xCC94B294
+ sceKernelUnmaskIntr: 0x7117E827