Changes

1,361 bytes added ,  20:31, 27 July 2014
whew
Line 3: Line 3:  
|-
 
|-
 
!  Id
 
!  Id
NATIVE_FIRM ARM11 kernel notes
+
NF ARM11
Enabled for the TWL_FIRM ARM11 kernel
+
NF ARM9
 +
!  TF ARM11
 
!  Description
 
!  Description
 +
! scope="col" width="200" |  Notes
 
|-
 
|-
 
| 0x01  
 
| 0x01  
|  
+
| Yes
 +
| No
 
| No
 
| No
| Result ControlMemory(u32* outaddr, u32 addr0, u32 addr1, u32 size, u32 operation, u32 permissions) (outaddr is usually the same as the input addr0)
+
| Result ControlMemory(u32* outaddr, u32 addr0, u32 addr1, u32 size, u32 operation, u32 permissions)
 +
| Outaddr is usually the same as the input addr0.
 
|-
 
|-
 
| 0x02  
 
| 0x02  
|  
+
| Yes
 +
| No
 
| No
 
| No
| Result QueryMemory(MemoryInfo* info, PageInfo* out, u32 Addr)
+
| Result QueryMemory(MemoryInfo* info, PageInfo* out, u32 Addr)
 +
|
 
|-
 
|-
 
| 0x03  
 
| 0x03  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| void ExitProcess(void)
 
| void ExitProcess(void)
 +
|
 
|-
 
|-
 
| 0x04  
 
| 0x04  
|  
+
| Yes
 +
| No
 
| No
 
| No
| Result GetProcessAffinityMask(u8* affinitymask, Handle process, s32 processorcount)
+
| Result GetProcessAffinityMask(u8* affinitymask, Handle process, s32 processorcount)
 +
|
 
|-
 
|-
 
| 0x05  
 
| 0x05  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result SetProcessAffinityMask(Handle process, u8* affinitymask, s32 processorcount)
 
| Result SetProcessAffinityMask(Handle process, u8* affinitymask, s32 processorcount)
 +
|
 
|-
 
|-
 
| 0x06  
 
| 0x06  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result GetProcessIdealProcessor(s32 *idealprocessor, Handle process)
 
| Result GetProcessIdealProcessor(s32 *idealprocessor, Handle process)
 +
|
 
|-
 
|-
 
| 0x07  
 
| 0x07  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result SetProcessIdealProcessor(Handle process, s32 idealprocessor)
 
| Result SetProcessIdealProcessor(Handle process, s32 idealprocessor)
 +
|
 
|-
 
|-
 
| 0x08  
 
| 0x08  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| 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
 +
| Yes
 
| Yes
 
| Yes
 
| void ExitThread(void)
 
| void ExitThread(void)
 +
|
 
|-
 
|-
 
| 0x0A  
 
| 0x0A  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| void SleepThread(s64 nanoseconds)
 
| void SleepThread(s64 nanoseconds)
 +
|
 
|-
 
|-
 
| 0x0B  
 
| 0x0B  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result GetThreadPriority(s32* priority, Handle thread)
 
| Result GetThreadPriority(s32* priority, Handle thread)
 +
|
 
|-
 
|-
 
| 0x0C  
 
| 0x0C  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result SetThreadPriority(Handle thread, s32 priority)
 
| Result SetThreadPriority(Handle thread, s32 priority)
 +
|
 
|-
 
|-
 
| 0x0D  
 
| 0x0D  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result GetThreadAffinityMask(u8* affinitymask, Handle thread, s32 processorcount)
 
| Result GetThreadAffinityMask(u8* affinitymask, Handle thread, s32 processorcount)
 +
|
 
|-
 
|-
 
| 0x0E  
 
| 0x0E  
| Stubbed beginning with [[8.0.0-18]].
+
| Yes
 +
| No
 
| No
 
| 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]].
 
|-
 
|-
 
| 0x0F  
 
| 0x0F  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result GetThreadIdealProcessor(s32* processorid, Handle thread)
 
| Result GetThreadIdealProcessor(s32* processorid, Handle thread)
 +
|
 
|-
 
|-
 
| 0x10  
 
| 0x10  
| Stubbed beginning with [[8.0.0-18]].
+
| Yes
 +
| No
 
| No
 
| 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]].
 
|-
 
|-
 
| 0x11  
 
| 0x11  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| s32 GetCurrentProcessorNumber(void)
 
| s32 GetCurrentProcessorNumber(void)
 +
|
 
|-
 
|-
 
| 0x12  
 
| 0x12  
|  
+
| Yes
 +
| No
 
| No
 
| No
| Result Run(Handle process, StartupInfo* info) (This starts the main() thread. Buf+0 is main-thread priority, Buf+4 is main-thread stack-size.)
+
| Result Run(Handle process, StartupInfo* info)
 +
| This starts the main() thread. Buf+0 is main-thread priority, Buf+4 is main-thread stack-size.
 
|-
 
|-
 
| 0x13  
 
| 0x13  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result CreateMutex(Handle* mutex, bool initialLocked)
 
| Result CreateMutex(Handle* mutex, bool initialLocked)
 +
|
 
|-
 
|-
 
| 0x14  
 
| 0x14  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result ReleaseMutex(Handle mutex)
 
| Result ReleaseMutex(Handle mutex)
 +
|
 
|-
 
|-
 
| 0x15  
 
| 0x15  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result CreateSemaphore(Handle* semaphore, s32 initialCount, s32 maxCount)
 
| Result CreateSemaphore(Handle* semaphore, s32 initialCount, s32 maxCount)
 +
|
 
|-
 
|-
 
| 0x16  
 
| 0x16  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result ReleaseSemaphore(s32* count, Handle semaphore, s32 releaseCount)
 
| Result ReleaseSemaphore(s32* count, Handle semaphore, s32 releaseCount)
 +
|
 
|-
 
|-
 
| 0x17  
 
| 0x17  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result CreateEvent(Handle* event, ResetType resettype)
 
| Result CreateEvent(Handle* event, ResetType resettype)
 +
|
 
|-
 
|-
 
| 0x18  
 
| 0x18  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result SignalEvent(Handle event)
 
| Result SignalEvent(Handle event)
 +
|
 
|-
 
|-
 
| 0x19  
 
| 0x19  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result ClearEvent(Handle event)
 
| Result ClearEvent(Handle event)
 +
|
 
|-
 
|-
 
| 0x1A  
 
| 0x1A  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result CreateTimer(Handle* timer, ResetType resettype)
 
| Result CreateTimer(Handle* timer, ResetType resettype)
 +
|
 
|-
 
|-
 
| 0x1B  
 
| 0x1B  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result SetTimer(Handle timer, s64 initial, s64 interval)
 
| Result SetTimer(Handle timer, s64 initial, s64 interval)
 +
|
 
|-
 
|-
 
| 0x1C  
 
| 0x1C  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result CancelTimer(Handle timer)
 
| Result CancelTimer(Handle timer)
 +
|
 
|-
 
|-
 
| 0x1D  
 
| 0x1D  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result ClearTimer(Handle timer)
 
| Result ClearTimer(Handle timer)
 +
|
 
|-
 
|-
 
| 0x1E  
 
| 0x1E  
|  
+
| Yes
 +
| No
 
| No
 
| 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
 +
| No
 
| No
 
| No
 
| Result MapMemoryBlock(Handle memblock, u32 addr, u32 mypermissions, u32 otherpermission)
 
| Result MapMemoryBlock(Handle memblock, u32 addr, u32 mypermissions, u32 otherpermission)
 +
|
 
|-
 
|-
 
| 0x20  
 
| 0x20  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result UnmapMemoryBlock(Handle memblock, u32 addr)
 
| Result UnmapMemoryBlock(Handle memblock, u32 addr)
 +
|
 
|-
 
|-
 
| 0x21  
 
| 0x21  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result CreateAddressArbiter(Handle* arbiter)
 
| Result CreateAddressArbiter(Handle* arbiter)
 +
|
 
|-
 
|-
 
| 0x22  
 
| 0x22  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| 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
 +
| Yes
 
| Yes
 
| Yes
 
| Result CloseHandle(Handle handle)
 
| Result CloseHandle(Handle handle)
 +
|
 
|-
 
|-
 
| 0x24  
 
| 0x24  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result WaitSynchronization1(Handle handle, s64 nanoseconds)
 
| Result WaitSynchronization1(Handle handle, s64 nanoseconds)
 +
|
 
|-
 
|-
 
| 0x25  
 
| 0x25  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| 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
 +
| No
 
| No
 
| 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
 +
| Yes
 
| Yes
 
| Yes
 
| Result DuplicateHandle(Handle* out, Handle original)
 
| Result DuplicateHandle(Handle* out, Handle original)
 +
|
 
|-
 
|-
 
| 0x28  
 
| 0x28  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| 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
 +
| No
 
| No
 
| No
 
| Result GetHandleInfo(s64* out, Handle handle, HandleInfoType type)
 
| Result GetHandleInfo(s64* out, Handle handle, HandleInfoType type)
 +
|
 
|-
 
|-
 
| 0x2A  
 
| 0x2A  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result GetSystemInfo(s64* out, SystemInfoType type, s32 param)
 
| Result GetSystemInfo(s64* out, SystemInfoType type, s32 param)
 +
|
 
|-
 
|-
 
| 0x2B  
 
| 0x2B  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result GetProcessInfo(s64* out, Handle process, ProcessInfoType type)
 
| Result GetProcessInfo(s64* out, Handle process, ProcessInfoType type)
 +
|
 
|-
 
|-
 
| 0x2C  
 
| 0x2C  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result GetThreadInfo(s64* out, Handle thread, ThreadInfoType type)
 
| Result GetThreadInfo(s64* out, Handle thread, ThreadInfoType type)
 +
|
 
|-
 
|-
 
| 0x2D  
 
| 0x2D  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result ConnectToPort(Handle* out, const char* portName)
 
| Result ConnectToPort(Handle* out, const char* portName)
 +
|
 
|-
 
|-
 
| 0x2E  
 
| 0x2E  
| Stubbed
+
| Yes
 +
| No
 
| No
 
| No
 
| Result SendSyncRequest1(Handle session)
 
| Result SendSyncRequest1(Handle session)
 +
| Stubbed
 +
|
 
|-
 
|-
 
| 0x2F  
 
| 0x2F  
| Stubbed
+
| Yes
 +
| No
 
| No
 
| No
 
| Result SendSyncRequest2(Handle session)
 
| Result SendSyncRequest2(Handle session)
 +
| Stubbed
 +
|
 
|-
 
|-
 
| 0x30  
 
| 0x30  
| Stubbed
+
| Yes
 +
| No
 
| No
 
| No
 
| Result SendSyncRequest3(Handle session)
 
| Result SendSyncRequest3(Handle session)
 +
| Stubbed
 +
|
 
|-
 
|-
 
| 0x31  
 
| 0x31  
| Stubbed
+
| Yes
 +
| No
 
| No
 
| No
 
| Result SendSyncRequest4(Handle session)
 
| Result SendSyncRequest4(Handle session)
 +
| Stubbed
 +
|
 
|-
 
|-
 
| 0x32  
 
| 0x32  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result SendSyncRequest(Handle session)
 
| Result SendSyncRequest(Handle session)
 +
|
 
|-
 
|-
 
| 0x33  
 
| 0x33  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result OpenProcess(Handle* process, u32 processId)
 
| Result OpenProcess(Handle* process, u32 processId)
 +
|
 
|-
 
|-
 
| 0x34  
 
| 0x34  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result OpenThread(Handle* thread, Handle process, u32 threadId)
 
| Result OpenThread(Handle* thread, Handle process, u32 threadId)
 +
|
 
|-
 
|-
 
| 0x35  
 
| 0x35  
|  
+
| Yes
 +
| No
 
| Yes
 
| Yes
 
| Result GetProcessId(u32* processId, Handle process)
 
| Result GetProcessId(u32* processId, Handle process)
 +
|
 
|-
 
|-
 
| 0x36  
 
| 0x36  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result GetProcessIdOfThread(u32* processId, Handle thread)
 
| Result GetProcessIdOfThread(u32* processId, Handle thread)
 +
|
 
|-
 
|-
 
| 0x37  
 
| 0x37  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result GetThreadId(u32* threadId, Handle thread)
 
| Result GetThreadId(u32* threadId, Handle thread)
 +
|
 
|-
 
|-
 
| 0x38  
 
| 0x38  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result GetResourceLimit(Handle* resourceLimit, Handle process)
 
| Result GetResourceLimit(Handle* resourceLimit, Handle process)
 +
|
 
|-
 
|-
 
| 0x39  
 
| 0x39  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result GetResourceLimitLimitValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount)
 
| Result GetResourceLimitLimitValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount)
 +
|
 
|-
 
|-
 
| 0x3A  
 
| 0x3A  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result GetResourceLimitCurrentValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount)
 
| Result GetResourceLimitCurrentValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount)
 +
|
 
|-
 
|-
 
| 0x3B  
 
| 0x3B  
|  
+
| Yes
 +
| No
 
| No
 
| No
| Result GetThreadContext(ThreadContext* context, Handle thread) (Stubbed)
+
| Result GetThreadContext(ThreadContext* context, Handle thread)
 +
| Stubbed
 
|-
 
|-
 
| 0x3C  
 
| 0x3C  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Break(BreakReason)
 
| Break(BreakReason)
 +
|
 
|-
 
|-
 
| 0x3D  
 
| 0x3D  
|
   
| Yes
 
| Yes
| OutputDebugString(void const, int) (Does nothing on non-debug units)
+
| Yes
 +
| Yes
 +
| OutputDebugString(void const, int)
 +
| Does nothing on non-debug units.
 
|-
 
|-
 
| 0x3E  
 
| 0x3E  
|  
+
| Yes
 +
| No
 
| No
 
| 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
 +
| No
 
| No
 
| 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.
 
|-
 
|-
 
| 0x48  
 
| 0x48  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result CreateSessionToPort(Handle* session, Handle port)
 
| Result CreateSessionToPort(Handle* session, Handle port)
 +
|
 
|-
 
|-
 
| 0x49  
 
| 0x49  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result CreateSession(Handle* sessionServer, Handle* sessionClient)
 
| Result CreateSession(Handle* sessionServer, Handle* sessionClient)
 +
|
 
|-
 
|-
 
| 0x4A  
 
| 0x4A  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result AcceptSession(Handle* session, Handle port)
 
| Result AcceptSession(Handle* session, Handle port)
 +
|
 
|-
 
|-
 
| 0x4B  
 
| 0x4B  
|  
+
| Yes
 +
| No
 
| No
 
| No
| Result ReplyAndReceive1(s32* index, Handle* handles, s32 handleCount, Handle replyTarget) (Stubbed)
+
| Result ReplyAndReceive1(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
 +
| Stubbed.
 
|-
 
|-
 
| 0x4C  
 
| 0x4C  
|  
+
| Yes
 +
| No
 
| No
 
| No
| Result ReplyAndReceive2(s32* index, Handle* handles, s32 handleCount, Handle replyTarget) (Stubbed)
+
| Result ReplyAndReceive2(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
 +
| Stubbed.
 
|-
 
|-
 
| 0x4D  
 
| 0x4D  
|  
+
| Yes
 +
| No
 
| No
 
| No
| Result ReplyAndReceive3(s32* index, Handle* handles, s32 handleCount, Handle replyTarget) (Stubbed)
+
| Result ReplyAndReceive3(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
 +
| Stubbed.
 
|-
 
|-
 
| 0x4E  
 
| 0x4E  
|  
+
| Yes
 +
| No
 
| No
 
| No
| Result ReplyAndReceive4(s32* index, Handle* handles, s32 handleCount, Handle replyTarget) (Stubbed)
+
| Result ReplyAndReceive4(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
 +
| Stubbed.
 
|-
 
|-
 
| 0x4F  
 
| 0x4F  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result ReplyAndReceive(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
 
| Result ReplyAndReceive(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
 +
|
 
|-
 
|-
 
| 0x50  
 
| 0x50  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result BindInterrupt(Interrupt name, Handle syncObject, s32 priority, bool isManualClear)
 
| Result BindInterrupt(Interrupt name, Handle syncObject, s32 priority, bool isManualClear)
 +
|
 
|-
 
|-
 
| 0x51  
 
| 0x51  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result UnbindInterrupt(Interrupt name, Handle syncObject)
 
| Result UnbindInterrupt(Interrupt name, Handle syncObject)
 +
|
 
|-
 
|-
 
| 0x52  
 
| 0x52  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result InvalidateProcessDataCache(Handle process, void* addr, u32 size)
 
| Result InvalidateProcessDataCache(Handle process, void* addr, u32 size)
 +
|
 
|-
 
|-
 
| 0x53  
 
| 0x53  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result StoreProcessDataCache(Handle process, void const* addr, u32 size)
 
| Result StoreProcessDataCache(Handle process, void const* addr, u32 size)
 +
|
 
|-
 
|-
 
| 0x54  
 
| 0x54  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result FlushProcessDataCache(Handle process, void const* addr, u32 size)
 
| Result FlushProcessDataCache(Handle process, void const* addr, u32 size)
 +
|
 
|-
 
|-
 
| 0x55  
 
| 0x55  
|
   
| Yes
 
| Yes
| Result StartInterProcessDma(Handle* dma, Handle dstProcess, void* dst, Handle srcProcess, const void* src, u32 size, const DmaConfig& config )
+
| Yes
 +
| Yes
 +
| Result StartInterProcessDma(Handle* dma, Handle dstProcess, void* dst, Handle srcProcess, const void* src, u32 size, const DmaConfig& config)
 +
|
 
|-
 
|-
 
| 0x56  
 
| 0x56  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result StopDma(Handle dma)
 
| Result StopDma(Handle dma)
 +
|
 
|-
 
|-
 
| 0x57  
 
| 0x57  
|  
+
| Yes
 +
| Yes
 
| Yes
 
| Yes
 
| Result GetDmaState(DmaState* state, Handle dma)
 
| Result GetDmaState(DmaState* state, Handle dma)
 +
|
 
|-
 
|-
 
| 0x58
 
| 0x58
|  
+
| Yes
 +
| Yes
 
| Yes
 
| 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
 +
| No
 
| No
 
| No
 
| Result DebugActiveProcess(Handle* debug, u32 processID)
 
| Result DebugActiveProcess(Handle* debug, u32 processID)
 +
|
 
|-
 
|-
 
| 0x61  
 
| 0x61  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result BreakDebugProcess(Handle debug)
 
| Result BreakDebugProcess(Handle debug)
 +
|
 
|-
 
|-
 
| 0x62  
 
| 0x62  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result TerminateDebugProcess(Handle debug)
 
| Result TerminateDebugProcess(Handle debug)
 +
|
 
|-
 
|-
 
| 0x63  
 
| 0x63  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result GetProcessDebugEvent(DebugEventInfo* info, Handle debug)
 
| Result GetProcessDebugEvent(DebugEventInfo* info, Handle debug)
 +
|
 
|-
 
|-
 
| 0x64  
 
| 0x64  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result ContinueDebugEvent(Handle debug, u32 flags)
 
| Result ContinueDebugEvent(Handle debug, u32 flags)
 +
|
 
|-
 
|-
 
| 0x65  
 
| 0x65  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result GetProcessList(s32* processCount, u32* processIds, s32 processIdMaxCount)
 
| Result GetProcessList(s32* processCount, u32* processIds, s32 processIdMaxCount)
 +
|
 
|-
 
|-
 
| 0x66  
 
| 0x66  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result GetThreadList(s32* threadCount, u32* threadIds, s32 threadIdMaxCount, Handle domain)
 
| Result GetThreadList(s32* threadCount, u32* threadIds, s32 threadIdMaxCount, Handle domain)
 +
|
 
|-
 
|-
 
| 0x67  
 
| 0x67  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result GetDebugThreadContext(ThreadContext* context, Handle debug, u32 threadId, u32 controlFlags)
 
| Result GetDebugThreadContext(ThreadContext* context, Handle debug, u32 threadId, u32 controlFlags)
 +
|
 
|-
 
|-
 
| 0x68  
 
| 0x68  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result SetDebugThreadContext(Handle debug, u32 threadId, ThreadContext* context, u32 controlFlags)
 
| Result SetDebugThreadContext(Handle debug, u32 threadId, ThreadContext* context, u32 controlFlags)
 +
|
 
|-
 
|-
 
| 0x69  
 
| 0x69  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result QueryDebugProcessMemory(MemoryInfo* blockInfo, PageInfo* pageInfo, Handle process, u32 addr)
 
| Result QueryDebugProcessMemory(MemoryInfo* blockInfo, PageInfo* pageInfo, Handle process, u32 addr)
 +
|
 
|-
 
|-
 
| 0x6A  
 
| 0x6A  
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| Result ReadProcessMemory(void* buffer, Handle debug, u32 addr, u32 size)
 
| Result ReadProcessMemory(void* buffer, Handle debug, u32 addr, u32 size)
 +
|
 
|-
 
|-
 
| 0x6B  
 
| 0x6B  
|  
+
| Yes
 +
| No
 
| No
 
| 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
 +
| No
 
| No
 
| No
 
| Result SetHardwareBreakPoint(s32 registerId, u32 control, u32 value)
 
| Result SetHardwareBreakPoint(s32 registerId, u32 control, u32 value)
 +
|
 
|-
 
|-
 
| 0x6D
 
| 0x6D
|  
+
| Yes
 +
| No
 
| No
 
| No
| GetDebugThreadParam(long long *, int *, nn::Handle, unsigned int, nn::dmnt::DebugThreadParam) (Disabled on regular kernel)
+
| GetDebugThreadParam(long long *, int *, nn::Handle, unsigned int, nn::dmnt::DebugThreadParam)
 +
| Disabled on regular kernel.
 
|- style="border-top: double"
 
|- style="border-top: double"
 
| 0x70
 
| 0x70
|  
+
| Yes
 +
| No
 
| No
 
| 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
 +
| No
 
| No
 
| No
 
| MapProcessMemory(Handle KProcess, unsigned int StartAddr, unsigned int EndAddr)
 
| MapProcessMemory(Handle KProcess, unsigned int StartAddr, unsigned int EndAddr)
 +
|
 
|-
 
|-
 
| 0x72
 
| 0x72
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| UnmapProcessMemory(Handle KProcess, unsigned int StartAddr, unsigned int EndAddr)
 
| UnmapProcessMemory(Handle KProcess, unsigned int StartAddr, unsigned int EndAddr)
 +
|
 
|-
 
|-
 
| 0x73
 
| 0x73
|  
+
| Yes
 +
| No
 
| No
 
| 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
| Stubbed
+
| Yes
 +
| No
 
| No
 
| No
 
|  
 
|  
 +
| Stubbed
 
|-
 
|-
 
| 0x75
 
| 0x75
|  
+
| Yes
 +
| No
 
| No
 
| 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
 +
| No
 
| No
 
| No
 
| TerminateProcess(Handle)
 
| TerminateProcess(Handle)
 +
|
 
|-
 
|-
 
| 0x77
 
| 0x77
|  
+
| Yes
 +
| No
 
| No
 
| No
| (Handle KProcess, Handle KResourceLimit)
+
| ??? (Handle KProcess, Handle KResourceLimit)
 +
|
 
|-
 
|-
 
| 0x78
 
| 0x78
|  
+
| Yes
 +
| No
 
| No
 
| No
 
| CreateResourceLimit(Handle *KResourceLimit)
 
| CreateResourceLimit(Handle *KResourceLimit)
 +
|
 
|-
 
|-
 
| 0x79
 
| 0x79
|  
+
| Yes
 +
| No
 
| No
 
| No
| ?
+
| ???
 +
|
 
|-
 
|-
 
| 0x7A
 
| 0x7A
| Stubbed beginning with [[2.0.0-2]]
+
| Yes
 +
| No
 
| Yes
 
| 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.
 
|-
 
|-
 
| 0x7B
 
| 0x7B
| Available(normally not accessible due to SVC-access-control).
+
| Yes
 +
| Yes
 
| No
 
| No
| Backdoor(unsigned int CodeAddress) This is used/accessible by [[FIRM|Process9]].
+
| Backdoor(unsigned int CodeAddress)
 +
| This is used on ARM9 NATIVE_FIRM. No ARM11 processes have access to it without some form of kernelhax.
 
|-
 
|-
 
| 0x7C
 
| 0x7C
|
   
| Yes
 
| Yes
| KernelSetState(unsigned int Type, unsigned int Param0, unsigned int Param1, unsigned int Param2) (The Type determines the usage of each param)
+
| Yes
 +
| Yes
 +
| KernelSetState(unsigned int Type, unsigned int Param0, unsigned int Param1, unsigned int Param2)
 +
| The type determines the meaning of each param
 
|-
 
|-
 
| 0x7D
 
| 0x7D
|  
+
| Yes
 +
| No
 
| No
 
| 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
 
| Yes
| Debug related (The Syscall access control mask doesn't apply for this SVC)
+
| Yes
 +
| Yes
 +
| ???
 +
| Debug related? The svcaccesscontrol mask doesn't apply for this SVC. Stubbed on ARM9 NATIVE_FIRM.
 
|}
 
|}