SVC: Difference between revisions

whew
colors:)
Line 10: Line 10:
|-
|-
| 0x01  
| 0x01  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result ControlMemory(u32* outaddr, u32 addr0, u32 addr1, u32 size, u32 operation, u32 permissions)
| Result ControlMemory(u32* outaddr, u32 addr0, u32 addr1, u32 size, u32 operation, u32 permissions)
| Outaddr is usually the same as the input addr0.
| Outaddr is usually the same as the input addr0.
|-
|-
| 0x02  
| 0x02  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result QueryMemory(MemoryInfo* info, PageInfo* out, u32 Addr)
| Result QueryMemory(MemoryInfo* info, PageInfo* out, u32 Addr)
|
|
|-
|-
| 0x03  
| 0x03  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| void ExitProcess(void)
| void ExitProcess(void)
|
|
|-
|-
| 0x04  
| 0x04  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result GetProcessAffinityMask(u8* affinitymask, Handle process, s32 processorcount)
| Result GetProcessAffinityMask(u8* affinitymask, Handle process, s32 processorcount)
|
|
|-
|-
| 0x05  
| 0x05  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result SetProcessAffinityMask(Handle process, u8* affinitymask, s32 processorcount)
| Result SetProcessAffinityMask(Handle process, u8* affinitymask, s32 processorcount)
|
|
|-
|-
| 0x06  
| 0x06  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result GetProcessIdealProcessor(s32 *idealprocessor, Handle process)
| Result GetProcessIdealProcessor(s32 *idealprocessor, Handle process)
|
|
|-
|-
| 0x07  
| 0x07  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result SetProcessIdealProcessor(Handle process, s32 idealprocessor)
| Result SetProcessIdealProcessor(Handle process, s32 idealprocessor)
|
|
|-
|-
| 0x08  
| 0x08  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result [[#CreateThread|CreateThread]](Handle* thread, func entrypoint, u32 arg, u32 stacktop, s32 threadpriority, s32 processorid)
| Result [[#CreateThread|CreateThread]](Handle* thread, func entrypoint, u32 arg, u32 stacktop, s32 threadpriority, s32 processorid)
|
|
|-
|-
| 0x09  
| 0x09  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| void ExitThread(void)
| void ExitThread(void)
|
|
|-
|-
| 0x0A  
| 0x0A  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| void SleepThread(s64 nanoseconds)
| void SleepThread(s64 nanoseconds)
|
|
|-
|-
| 0x0B  
| 0x0B  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result GetThreadPriority(s32* priority, Handle thread)
| Result GetThreadPriority(s32* priority, Handle thread)
|
|
|-
|-
| 0x0C  
| 0x0C  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result SetThreadPriority(Handle thread, s32 priority)
| Result SetThreadPriority(Handle thread, s32 priority)
|
|
|-
|-
| 0x0D  
| 0x0D  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result GetThreadAffinityMask(u8* affinitymask, Handle thread, s32 processorcount)
| Result GetThreadAffinityMask(u8* affinitymask, Handle thread, s32 processorcount)
|
|
|-
|-
| 0x0E  
| 0x0E  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result SetThreadAffinityMask(Handle thread, u8* affinitymask, s32 processorcount)
| Result SetThreadAffinityMask(Handle thread, u8* affinitymask, s32 processorcount)
| Replaced with a stub in ARM11 NATIVE_FIRM kernel beginning with [[8.0.0-18]].
| Replaced with a stub in ARM11 NATIVE_FIRM kernel beginning with [[8.0.0-18]].
|-
|-
| 0x0F  
| 0x0F  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result GetThreadIdealProcessor(s32* processorid, Handle thread)
| Result GetThreadIdealProcessor(s32* processorid, Handle thread)
|
|
|-
|-
| 0x10  
| 0x10  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result SetThreadIdealProcessor(Handle thread, s32 processorid)
| Result SetThreadIdealProcessor(Handle thread, s32 processorid)
| Replaced with a stub in ARM11 NATIVE_FIRM kernel beginning with [[8.0.0-18]].
| Replaced with a stub in ARM11 NATIVE_FIRM kernel beginning with [[8.0.0-18]].
|-
|-
| 0x11  
| 0x11  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| s32 GetCurrentProcessorNumber(void)
| s32 GetCurrentProcessorNumber(void)
|
|
|-
|-
| 0x12  
| 0x12  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result Run(Handle process, StartupInfo* info)
| Result Run(Handle process, StartupInfo* info)
| This starts the main() thread. Buf+0 is main-thread priority, Buf+4 is main-thread stack-size.
| This starts the main() thread. Buf+0 is main-thread priority, Buf+4 is main-thread stack-size.
|-
|-
| 0x13  
| 0x13  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result CreateMutex(Handle* mutex, bool initialLocked)
| Result CreateMutex(Handle* mutex, bool initialLocked)
|
|
|-
|-
| 0x14  
| 0x14  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result ReleaseMutex(Handle mutex)
| Result ReleaseMutex(Handle mutex)
|
|
|-
|-
| 0x15  
| 0x15  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result CreateSemaphore(Handle* semaphore, s32 initialCount, s32 maxCount)
| Result CreateSemaphore(Handle* semaphore, s32 initialCount, s32 maxCount)
|
|
|-
|-
| 0x16  
| 0x16  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result ReleaseSemaphore(s32* count, Handle semaphore, s32 releaseCount)
| Result ReleaseSemaphore(s32* count, Handle semaphore, s32 releaseCount)
|
|
|-
|-
| 0x17  
| 0x17  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result CreateEvent(Handle* event, ResetType resettype)
| Result CreateEvent(Handle* event, ResetType resettype)
|
|
|-
|-
| 0x18  
| 0x18  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result SignalEvent(Handle event)
| Result SignalEvent(Handle event)
|
|
|-
|-
| 0x19  
| 0x19  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result ClearEvent(Handle event)
| Result ClearEvent(Handle event)
|
|
|-
|-
| 0x1A  
| 0x1A  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result CreateTimer(Handle* timer, ResetType resettype)
| Result CreateTimer(Handle* timer, ResetType resettype)
|
|
|-
|-
| 0x1B  
| 0x1B  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result SetTimer(Handle timer, s64 initial, s64 interval)
| Result SetTimer(Handle timer, s64 initial, s64 interval)
|
|
|-
|-
| 0x1C  
| 0x1C  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result CancelTimer(Handle timer)
| Result CancelTimer(Handle timer)
|
|
|-
|-
| 0x1D  
| 0x1D  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result ClearTimer(Handle timer)
| Result ClearTimer(Handle timer)
|
|
|-
|-
| 0x1E  
| 0x1E  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result CreateMemoryBlock(Handle* memblock, u32 addr, u32 size, u32 mypermission, u32 otherpermission)
| Result CreateMemoryBlock(Handle* memblock, u32 addr, u32 size, u32 mypermission, u32 otherpermission)
|
|
|-
|-
| 0x1F  
| 0x1F  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result MapMemoryBlock(Handle memblock, u32 addr, u32 mypermissions, u32 otherpermission)
| Result MapMemoryBlock(Handle memblock, u32 addr, u32 mypermissions, u32 otherpermission)
|
|
|-
|-
| 0x20  
| 0x20  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result UnmapMemoryBlock(Handle memblock, u32 addr)
| Result UnmapMemoryBlock(Handle memblock, u32 addr)
|
|
|-
|-
| 0x21  
| 0x21  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result CreateAddressArbiter(Handle* arbiter)
| Result CreateAddressArbiter(Handle* arbiter)
|
|
|-
|-
| 0x22  
| 0x22  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result ArbitrateAddress(Handle arbiter, u32 addr, ArbitrationType type, s32 value, s64 nanoseconds)
| Result ArbitrateAddress(Handle arbiter, u32 addr, ArbitrationType type, s32 value, s64 nanoseconds)
|
|
|-
|-
| 0x23  
| 0x23  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result CloseHandle(Handle handle)
| Result CloseHandle(Handle handle)
|
|
|-
|-
| 0x24  
| 0x24  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result WaitSynchronization1(Handle handle, s64 nanoseconds)
| Result WaitSynchronization1(Handle handle, s64 nanoseconds)
|
|
|-
|-
| 0x25  
| 0x25  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result WaitSynchronizationN(s32* out, Handle* handles, s32 handlecount, bool waitAll, s64 nanoseconds)
| Result WaitSynchronizationN(s32* out, Handle* handles, s32 handlecount, bool waitAll, s64 nanoseconds)
|
|
|-
|-
| 0x26  
| 0x26  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result SignalAndWait(s32* out, Handle signal, Handle* handles, s32 handleCount, bool waitAll, s64 nanoseconds)
| Result SignalAndWait(s32* out, Handle signal, Handle* handles, s32 handleCount, bool waitAll, s64 nanoseconds)
|
|
|-
|-
| 0x27  
| 0x27  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result DuplicateHandle(Handle* out, Handle original)
| Result DuplicateHandle(Handle* out, Handle original)
|
|
|-
|-
| 0x28  
| 0x28  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| s64 GetSystemTick(void) (This returns the total CPU ticks elapsed since the CPU was powered-on)
| s64 GetSystemTick(void) (This returns the total CPU ticks elapsed since the CPU was powered-on)
|
|
|-
|-
| 0x29  
| 0x29  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result GetHandleInfo(s64* out, Handle handle, HandleInfoType type)
| Result GetHandleInfo(s64* out, Handle handle, HandleInfoType type)
|
|
|-
|-
| 0x2A  
| 0x2A  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result GetSystemInfo(s64* out, SystemInfoType type, s32 param)
| Result GetSystemInfo(s64* out, SystemInfoType type, s32 param)
|
|
|-
|-
| 0x2B  
| 0x2B  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result GetProcessInfo(s64* out, Handle process, ProcessInfoType type)
| Result GetProcessInfo(s64* out, Handle process, ProcessInfoType type)
|
|
|-
|-
| 0x2C  
| 0x2C  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result GetThreadInfo(s64* out, Handle thread, ThreadInfoType type)
| Result GetThreadInfo(s64* out, Handle thread, ThreadInfoType type)
|
|
|-
|-
| 0x2D  
| 0x2D  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result ConnectToPort(Handle* out, const char* portName)
| Result ConnectToPort(Handle* out, const char* portName)
|
|
|-
|-
| 0x2E  
| 0x2E  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result SendSyncRequest1(Handle session)
| Result SendSyncRequest1(Handle session)
| Stubbed
| Stubbed
Line 333: Line 333:
|-
|-
| 0x2F  
| 0x2F  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result SendSyncRequest2(Handle session)
| Result SendSyncRequest2(Handle session)
| Stubbed
| Stubbed
Line 341: Line 341:
|-
|-
| 0x30  
| 0x30  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result SendSyncRequest3(Handle session)
| Result SendSyncRequest3(Handle session)
| Stubbed
| Stubbed
Line 349: Line 349:
|-
|-
| 0x31  
| 0x31  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result SendSyncRequest4(Handle session)
| Result SendSyncRequest4(Handle session)
| Stubbed
| Stubbed
Line 357: Line 357:
|-
|-
| 0x32  
| 0x32  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result SendSyncRequest(Handle session)
| Result SendSyncRequest(Handle session)
|
|
|-
|-
| 0x33  
| 0x33  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result OpenProcess(Handle* process, u32 processId)
| Result OpenProcess(Handle* process, u32 processId)
|
|
|-
|-
| 0x34  
| 0x34  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result OpenThread(Handle* thread, Handle process, u32 threadId)
| Result OpenThread(Handle* thread, Handle process, u32 threadId)
|
|
|-
|-
| 0x35  
| 0x35  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| Yes
| style="background: green" | Yes
| Result GetProcessId(u32* processId, Handle process)
| Result GetProcessId(u32* processId, Handle process)
|
|
|-
|-
| 0x36  
| 0x36  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result GetProcessIdOfThread(u32* processId, Handle thread)
| Result GetProcessIdOfThread(u32* processId, Handle thread)
|
|
|-
|-
| 0x37  
| 0x37  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result GetThreadId(u32* threadId, Handle thread)
| Result GetThreadId(u32* threadId, Handle thread)
|
|
|-
|-
| 0x38  
| 0x38  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result GetResourceLimit(Handle* resourceLimit, Handle process)
| Result GetResourceLimit(Handle* resourceLimit, Handle process)
|
|
|-
|-
| 0x39  
| 0x39  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result GetResourceLimitLimitValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount)
| Result GetResourceLimitLimitValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount)
|
|
|-
|-
| 0x3A  
| 0x3A  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result GetResourceLimitCurrentValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount)
| Result GetResourceLimitCurrentValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount)
|
|
|-
|-
| 0x3B  
| 0x3B  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result GetThreadContext(ThreadContext* context, Handle thread)
| Result GetThreadContext(ThreadContext* context, Handle thread)
| Stubbed
| Stubbed
|-
|-
| 0x3C  
| 0x3C  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Break(BreakReason)
| Break(BreakReason)
|
|
|-
|-
| 0x3D  
| 0x3D  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| OutputDebugString(void const, int)
| OutputDebugString(void const, int)
| Does nothing on non-debug units.
| Does nothing on non-debug units.
|-
|-
| 0x3E  
| 0x3E  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| ControlPerformanceCounter(unsigned long long, int, unsigned int, unsigned long long)
| ControlPerformanceCounter(unsigned long long, int, unsigned int, unsigned long long)
|
|
|- style="border-top: double"
|- style="border-top: double"
| 0x47  
| 0x47  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result CreatePort(Handle* portServer, Handle* portClient,  const char* name, s32 maxSessions)
| Result CreatePort(Handle* portServer, Handle* portClient,  const char* name, s32 maxSessions)
| Setting name=NULL creates a private port not accessible from svcConnectToPort.
| Setting name=NULL creates a private port not accessible from svcConnectToPort.
|-
|-
| 0x48  
| 0x48  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result CreateSessionToPort(Handle* session, Handle port)
| Result CreateSessionToPort(Handle* session, Handle port)
|
|
|-
|-
| 0x49  
| 0x49  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result CreateSession(Handle* sessionServer, Handle* sessionClient)
| Result CreateSession(Handle* sessionServer, Handle* sessionClient)
|
|
|-
|-
| 0x4A  
| 0x4A  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result AcceptSession(Handle* session, Handle port)
| Result AcceptSession(Handle* session, Handle port)
|
|
|-
|-
| 0x4B  
| 0x4B  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result ReplyAndReceive1(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
| Result ReplyAndReceive1(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
| Stubbed.
| Stubbed.
|-
|-
| 0x4C  
| 0x4C  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result ReplyAndReceive2(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
| Result ReplyAndReceive2(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
| Stubbed.
| Stubbed.
|-
|-
| 0x4D  
| 0x4D  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result ReplyAndReceive3(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
| Result ReplyAndReceive3(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
| Stubbed.
| Stubbed.
|-
|-
| 0x4E  
| 0x4E  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result ReplyAndReceive4(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
| Result ReplyAndReceive4(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
| Stubbed.
| Stubbed.
|-
|-
| 0x4F  
| 0x4F  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result ReplyAndReceive(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
| Result ReplyAndReceive(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
|
|
|-
|-
| 0x50  
| 0x50  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result BindInterrupt(Interrupt name, Handle syncObject, s32 priority, bool isManualClear)
| Result BindInterrupt(Interrupt name, Handle syncObject, s32 priority, bool isManualClear)
|
|
|-
|-
| 0x51  
| 0x51  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result UnbindInterrupt(Interrupt name, Handle syncObject)
| Result UnbindInterrupt(Interrupt name, Handle syncObject)
|
|
|-
|-
| 0x52  
| 0x52  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result InvalidateProcessDataCache(Handle process, void* addr, u32 size)
| Result InvalidateProcessDataCache(Handle process, void* addr, u32 size)
|
|
|-
|-
| 0x53  
| 0x53  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result StoreProcessDataCache(Handle process, void const* addr, u32 size)
| Result StoreProcessDataCache(Handle process, void const* addr, u32 size)
|
|
|-
|-
| 0x54  
| 0x54  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result FlushProcessDataCache(Handle process, void const* addr, u32 size)
| Result FlushProcessDataCache(Handle process, void const* addr, u32 size)
|
|
|-
|-
| 0x55  
| 0x55  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result StartInterProcessDma(Handle* dma, Handle dstProcess, void* dst, Handle srcProcess, const void* src, u32 size, const DmaConfig& config)
| Result StartInterProcessDma(Handle* dma, Handle dstProcess, void* dst, Handle srcProcess, const void* src, u32 size, const DmaConfig& config)
|
|
|-
|-
| 0x56  
| 0x56  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result StopDma(Handle dma)
| Result StopDma(Handle dma)
|
|
|-
|-
| 0x57  
| 0x57  
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Result GetDmaState(DmaState* state, Handle dma)
| Result GetDmaState(DmaState* state, Handle dma)
|
|
|-
|-
| 0x58
| 0x58
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| RestartDma(nn::Handle, void *, void  const*, unsigned int, signed char)
| RestartDma(nn::Handle, void *, void  const*, unsigned int, signed char)
|
|
|- style="border-top: double"
|- style="border-top: double"
| 0x60  
| 0x60  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result DebugActiveProcess(Handle* debug, u32 processID)
| Result DebugActiveProcess(Handle* debug, u32 processID)
|
|
|-
|-
| 0x61  
| 0x61  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result BreakDebugProcess(Handle debug)
| Result BreakDebugProcess(Handle debug)
|
|
|-
|-
| 0x62  
| 0x62  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result TerminateDebugProcess(Handle debug)
| Result TerminateDebugProcess(Handle debug)
|
|
|-
|-
| 0x63  
| 0x63  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result GetProcessDebugEvent(DebugEventInfo* info, Handle debug)
| Result GetProcessDebugEvent(DebugEventInfo* info, Handle debug)
|
|
|-
|-
| 0x64  
| 0x64  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result ContinueDebugEvent(Handle debug, u32 flags)
| Result ContinueDebugEvent(Handle debug, u32 flags)
|
|
|-
|-
| 0x65  
| 0x65  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result GetProcessList(s32* processCount, u32* processIds, s32 processIdMaxCount)
| Result GetProcessList(s32* processCount, u32* processIds, s32 processIdMaxCount)
|
|
|-
|-
| 0x66  
| 0x66  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result GetThreadList(s32* threadCount, u32* threadIds, s32 threadIdMaxCount, Handle domain)
| Result GetThreadList(s32* threadCount, u32* threadIds, s32 threadIdMaxCount, Handle domain)
|
|
|-
|-
| 0x67  
| 0x67  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result GetDebugThreadContext(ThreadContext* context, Handle debug, u32 threadId, u32 controlFlags)
| Result GetDebugThreadContext(ThreadContext* context, Handle debug, u32 threadId, u32 controlFlags)
|
|
|-
|-
| 0x68  
| 0x68  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result SetDebugThreadContext(Handle debug, u32 threadId, ThreadContext* context, u32 controlFlags)
| Result SetDebugThreadContext(Handle debug, u32 threadId, ThreadContext* context, u32 controlFlags)
|
|
|-
|-
| 0x69  
| 0x69  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result QueryDebugProcessMemory(MemoryInfo* blockInfo, PageInfo* pageInfo, Handle process, u32 addr)
| Result QueryDebugProcessMemory(MemoryInfo* blockInfo, PageInfo* pageInfo, Handle process, u32 addr)
|
|
|-
|-
| 0x6A  
| 0x6A  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result ReadProcessMemory(void* buffer, Handle debug, u32 addr, u32 size)
| Result ReadProcessMemory(void* buffer, Handle debug, u32 addr, u32 size)
|
|
|-
|-
| 0x6B  
| 0x6B  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result WriteProcessMemory(Handle debug, void const* buffer, u32 addr, u32 size)
| Result WriteProcessMemory(Handle debug, void const* buffer, u32 addr, u32 size)
|
|
|-
|-
| 0x6C  
| 0x6C  
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| Result SetHardwareBreakPoint(s32 registerId, u32 control, u32 value)
| Result SetHardwareBreakPoint(s32 registerId, u32 control, u32 value)
|
|
|-
|-
| 0x6D
| 0x6D
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| GetDebugThreadParam(long long *, int *, nn::Handle, unsigned int, nn::dmnt::DebugThreadParam)
| GetDebugThreadParam(long long *, int *, nn::Handle, unsigned int, nn::dmnt::DebugThreadParam)
| Disabled on regular kernel.
| Disabled on regular kernel.
|- style="border-top: double"
|- style="border-top: double"
| 0x70
| 0x70
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| ControlProcessMemory(Handle KProcess, unsigned int Addr0, unsigned int Addr1, unsigned int Size, unsigned int Type, unsigned int Permissions)
| ControlProcessMemory(Handle KProcess, unsigned int Addr0, unsigned int Addr1, unsigned int Size, unsigned int Type, unsigned int Permissions)
|
|
|-
|-
| 0x71
| 0x71
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| MapProcessMemory(Handle KProcess, unsigned int StartAddr, unsigned int EndAddr)
| MapProcessMemory(Handle KProcess, unsigned int StartAddr, unsigned int EndAddr)
|
|
|-
|-
| 0x72
| 0x72
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| UnmapProcessMemory(Handle KProcess, unsigned int StartAddr, unsigned int EndAddr)
| UnmapProcessMemory(Handle KProcess, unsigned int StartAddr, unsigned int EndAddr)
|
|
|-
|-
| 0x73
| 0x73
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| CreateProcess(Handle* HandleInfo_out, struct CreateProcessInfo, u32 code_ptr, u32 ro_ptr, u32 data_ptr)
| CreateProcess(Handle* HandleInfo_out, struct CreateProcessInfo, u32 code_ptr, u32 ro_ptr, u32 data_ptr)
|
|
|-
|-
| 0x74
| 0x74
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
|  
|  
| Stubbed
| Stubbed
|-
|-
| 0x75
| 0x75
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| SetupProcess(Handle* KProcess_out, Handle HandleInfo_in, u32 arm11kernelcaps_ptr, u32 arm11kernelcaps_num)
| SetupProcess(Handle* KProcess_out, Handle HandleInfo_in, u32 arm11kernelcaps_ptr, u32 arm11kernelcaps_num)
|
|
|-
|-
| 0x76
| 0x76
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| TerminateProcess(Handle)
| TerminateProcess(Handle)
|
|
|-
|-
| 0x77
| 0x77
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| ??? (Handle KProcess, Handle KResourceLimit)
| ??? (Handle KProcess, Handle KResourceLimit)
|
|
|-
|-
| 0x78
| 0x78
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| CreateResourceLimit(Handle *KResourceLimit)
| CreateResourceLimit(Handle *KResourceLimit)
|
|
|-
|-
| 0x79
| 0x79
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| ???
| ???
|
|
|-
|-
| 0x7A
| 0x7A
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| Yes
| style="background: green" | Yes
| AddCodeSegment? (unsigned int Addr, unsigned int Size)
| AddCodeSegment? (unsigned int Addr, unsigned int Size)
| Stubbed on NATIVE_FIRM beginning with [[2.0.0-2]]. Used during TWL_FIRM boot.
| Stubbed on NATIVE_FIRM beginning with [[2.0.0-2]]. Used during TWL_FIRM boot.
|-
|-
| 0x7B
| 0x7B
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| Backdoor(unsigned int CodeAddress)
| Backdoor(unsigned int CodeAddress)
| This is used on ARM9 NATIVE_FIRM. No ARM11 processes have access to it without some form of kernelhax.
| This is used on ARM9 NATIVE_FIRM. No ARM11 processes have access to it without some form of kernelhax.
|-
|-
| 0x7C
| 0x7C
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| KernelSetState(unsigned int Type, unsigned int Param0, unsigned int Param1, unsigned int Param2)
| KernelSetState(unsigned int Type, unsigned int Param0, unsigned int Param1, unsigned int Param2)
| The type determines the meaning of each param
| The type determines the meaning of each param
|-
|-
| 0x7D
| 0x7D
| Yes
| style="background: green" | Yes
| No
| style="background: red" | No
| No
| style="background: red" | No
| QueryProcessMemory(MemInfo *Info, unsigned int *Out, Handle KProcess, unsigned int Addr)
| QueryProcessMemory(MemInfo *Info, unsigned int *Out, Handle KProcess, unsigned int Addr)
|
|
|- style="border-top: double"
|- style="border-top: double"
| 0xFF
| 0xFF
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| Yes
| style="background: green" | Yes
| ???
| ???
| Debug related? The svcaccesscontrol mask doesn't apply for this SVC. Stubbed on ARM9 NATIVE_FIRM.
| Debug related? The svcaccesscontrol mask doesn't apply for this SVC. Stubbed on ARM9 NATIVE_FIRM.
|}
|}


Note that "stubbed" here means that the SVC only returns an error.
Note that "stubbed" here means that the SVC only returns an error.