diff options
-rw-r--r-- | include/kernel/kernel/intrmgr.h | 60 | ||||
-rw-r--r-- | nids/360/SceKernelIntrMgr.yml | 23 |
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 |