From 55b1cd7f2c68d1c482bc1b3a1f6f8774af94816d Mon Sep 17 00:00:00 2001 From: Maschell Date: Thu, 9 Feb 2023 14:07:49 +0100 Subject: [PATCH] coreinit: Add some kernel related functions --- include/coreinit/kernel.h | 62 +++++++++++++++++++ .../test_compile_headers_list.h | 1 + 2 files changed, 63 insertions(+) create mode 100644 include/coreinit/kernel.h diff --git a/include/coreinit/kernel.h b/include/coreinit/kernel.h new file mode 100644 index 00000000..b0cdd7d6 --- /dev/null +++ b/include/coreinit/kernel.h @@ -0,0 +1,62 @@ +#pragma once +#include +#include + +/** + * \defgroup coreinit_kernel + * \ingroup coreinit + * @{ + */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum OSICICommand { + OS_ICI_COMMAND_INVALID_IC_RANGE = 1, + OS_ICI_COMMAND_RESCHEDULE_CORE = 2, + OS_ICI_COMMAND_HALT_CORE = 3, + OS_ICI_COMMAND_PROC_EXIT = 4, + OS_ICI_COMMAND_SET_DABR = 5, + OS_ICI_COMMAND_PROC_SCHED = 6, + OS_ICI_COMMAND_FAST_BG_EXIT = 7, + OS_ICI_COMMAND_IOP_SHELL_CORE_TRACE = 8, + OS_ICI_COMMAND_SYSTEM_FATAL = 9, + OS_ICI_COMMAND_SET_IABR = 10, + OS_ICI_COMMAND_PANIC_0X15 = 0xB, + OS_ICI_COMMAND_PROC_KILL = 0xC, + OS_ICI_COMMAND_PROC_CRASH = 0xD, + OS_ICI_COMMAND_UNKNOWN = 0xE, // Waits for rendezvous, then updates heartbeat + OS_ICI_COMMAND_OVERLAY_ARENA = 0xF, +} OSICICommand; + +typedef void (*OSExceptionCallbackExFn)(OSExceptionType exceptionType, OSContext * interruptedContext, OSContext *cbContext); + +typedef void (*KernelTimerCallbackFn)(OSExceptionType exception, OSContext *interruptedContext, OSContext *currentContext); + +typedef uint32_t KernelTimerHandle; + +typedef struct OSExceptionChainInfo { + OSExceptionCallbackExFn callback; + void *stack; + OSContext *context; +} OSExceptionChainInfo; +WUT_CHECK_OFFSET(OSExceptionChainInfo, 0, callback); +WUT_CHECK_OFFSET(OSExceptionChainInfo, 4, stack); +WUT_CHECK_OFFSET(OSExceptionChainInfo, 8, context); +WUT_CHECK_SIZE(OSExceptionChainInfo, 12); + +void __KernelSetUserModeExHandler(OSExceptionType exceptionType, OSExceptionChainInfo *chainInfo, OSExceptionChainInfo *prevChainInfo); + +KernelTimerHandle __KernelAllocateTimer(KernelTimerCallbackFn, void *exceptionStack, OSContext *context); +uint32_t __KernelPrimeTimer(KernelTimerHandle handle, uint64_t startTimeInTicks, uint64_t intervalInTicks, uint32_t unknown); + +void __KernelSendICI(OSICICommand cmd, void *arg1, uint32_t unknown1, uint32_t unknown2); + +void __KernelGetInfo(uint32_t type, void *outBuffer, uint32_t outBufferSize, uint32_t core); + +#ifdef __cplusplus +} +#endif + +/** @} */ diff --git a/tests/test_compile_headers_common/test_compile_headers_list.h b/tests/test_compile_headers_common/test_compile_headers_list.h index e090479b..16552297 100644 --- a/tests/test_compile_headers_common/test_compile_headers_list.h +++ b/tests/test_compile_headers_common/test_compile_headers_list.h @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include