diff --git a/libctru/include/3ds/svc.h b/libctru/include/3ds/svc.h index f75f283..47352b0 100644 --- a/libctru/include/3ds/svc.h +++ b/libctru/include/3ds/svc.h @@ -511,7 +511,15 @@ Result svcQueryProcessMemory(MemInfo* info, PageInfo* out, Handle process, u32 a Result svcInvalidateProcessDataCache(Handle process, void* addr, u32 size); /** - * @brief Flushes a process's data cache. + * @brief Cleans a process's data cache. + * @param process Handle of the process. + * @param addr Address to clean. + * @param size Size of the memory to clean. + */ +Result svcStoreProcessDataCache(Handle process, void* addr, u32 size); + +/** + * @brief Flushes (cleans and invalidates) a process's data cache. * @param process Handle of the process. * @param addr Address to flush. * @param size Size of the memory to flush. @@ -605,6 +613,14 @@ Result svcCreateCodeSet(Handle* out, const CodeSetInfo *info, void* code_ptr, vo */ Result svcCreateProcess(Handle* out, Handle codeset, const u32 *arm11kernelcaps, u32 arm11kernelcaps_num); +/** + * @brief Gets a process's affinity mask. + * @param[out] affinitymask Pointer to store the affinity masks. + * @param process Handle of the process. + * @param processorcount Number of processors. + */ +Result svcGetProcessAffinityMask(u8* affinitymask, Handle process, s32 processorcount); + /** * @brief Sets a process's affinity mask. * @param process Handle of the process. @@ -613,10 +629,17 @@ Result svcCreateProcess(Handle* out, Handle codeset, const u32 *arm11kernelcaps, */ Result svcSetProcessAffinityMask(Handle process, const u8* affinitymask, s32 processorcount); +/** + * Gets a process's ideal processor. + * @param[out] processorid Pointer to store the ID of the process's ideal processor. + * @param process Handle of the process. + */ +Result svcGetProcessIdealProcessor(s32 *processorid, Handle process); + /** * Sets a process's ideal processor. * @param process Handle of the process. - * @param processorid ID of the thread's ideal processor. + * @param processorid ID of the process's ideal processor. */ Result svcSetProcessIdealProcessor(Handle process, s32 processorid); diff --git a/libctru/source/svc.s b/libctru/source/svc.s index 1277594..590c592 100644 --- a/libctru/source/svc.s +++ b/libctru/source/svc.s @@ -37,10 +37,21 @@ SVC_BEGIN svcExitProcess svc 0x03 bx lr +SVC_BEGIN svcGetProcessAffinityMask + svc 0x04 + bx lr + SVC_BEGIN svcSetProcessAffinityMask svc 0x05 bx lr +SVC_BEGIN svcGetProcessIdealProcessor + str r0, [sp, #-0x4]! + svc 0x06 + ldr r3, [sp], #4 + str r1, [r3] + bx lr + SVC_BEGIN svcSetProcessIdealProcessor svc 0x07 bx lr @@ -372,6 +383,10 @@ SVC_BEGIN svcInvalidateProcessDataCache svc 0x52 bx lr +SVC_BEGIN svcStoreProcessDataCache + svc 0x53 + bx lr + SVC_BEGIN svcFlushProcessDataCache svc 0x54 bx lr