SVC: Difference between revisions

No edit summary
No edit summary
Line 3: Line 3:
|-
|-
!  Id
!  Id
!  NATIVE_FIRM ARM11 kernel notes
!  Enabled for the TWL_FIRM ARM11 kernel
!  Description
!  Description
|-
|-
| 0x1  
| 0x1  
|
| 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)
|-
|-
| 0x2  
| 0x2  
|
| No
| Result  QueryMemory(MemoryInfo* info, PageInfo* out, u32 Addr)
| Result  QueryMemory(MemoryInfo* info, PageInfo* out, u32 Addr)
|-
|-
| 0x3  
| 0x3  
|
| No
| void ExitProcess(void)
| void ExitProcess(void)
|-
|-
| 0x4  
| 0x4  
|
| No
| Result  GetProcessAffinityMask(u8* affinitymask, Handle process, s32 processorcount)
| Result  GetProcessAffinityMask(u8* affinitymask, Handle process, s32 processorcount)
|-
|-
| 0x5  
| 0x5  
|
| No
| Result SetProcessAffinityMask(Handle process, u8* affinitymask, s32 processorcount)
| Result SetProcessAffinityMask(Handle process, u8* affinitymask, s32 processorcount)
|-
|-
| 0x6  
| 0x6  
|
| No
| Result GetProcessIdealProcessor(s32 *idealprocessor, Handle process)
| Result GetProcessIdealProcessor(s32 *idealprocessor, Handle process)
|-
|-
| 0x7  
| 0x7  
|
| No
| Result SetProcessIdealProcessor(Handle process, s32 idealprocessor)
| Result SetProcessIdealProcessor(Handle process, s32 idealprocessor)
|-
|-
| 0x8  
| 0x8  
|
| 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)
|-
|-
| 0x9  
| 0x9  
|
| Yes
| void ExitThread(void)
| void ExitThread(void)
|-
|-
| 0xA  
| 0xA  
|
| Yes
| void SleepThread(s64 nanoseconds)
| void SleepThread(s64 nanoseconds)
|-
|-
| 0xB  
| 0xB  
|
| Yes
| Result GetThreadPriority(s32* priority, Handle thread)
| Result GetThreadPriority(s32* priority, Handle thread)
|-
|-
| 0xC  
| 0xC  
|
| Yes
| Result SetThreadPriority(Handle thread, s32 priority)
| Result SetThreadPriority(Handle thread, s32 priority)
|-
|-
| 0xD  
| 0xD  
|
| No
| Result GetThreadAffinityMask(u8* affinitymask, Handle thread, s32 processorcount)
| Result GetThreadAffinityMask(u8* affinitymask, Handle thread, s32 processorcount)
|-
|-
| 0xE  
| 0xE  
|
| No
| Result SetThreadAffinityMask(Handle thread, u8* affinitymask, s32 processorcount)
| Result SetThreadAffinityMask(Handle thread, u8* affinitymask, s32 processorcount)
|-
|-
| 0xF  
| 0xF  
|
| No
| Result GetThreadIdealProcessor(s32* processorid, Handle thread)
| Result GetThreadIdealProcessor(s32* processorid, Handle thread)
|-
|-
| 0x10  
| 0x10  
|
| No
| Result SetThreadIdealProcessor(Handle thread, s32 processorid)
| Result SetThreadIdealProcessor(Handle thread, s32 processorid)
|-
|-
| 0x11  
| 0x11  
|
| No
| s32 GetCurrentProcessorNumber(void)
| s32 GetCurrentProcessorNumber(void)
|-
|-
| 0x12  
| 0x12  
|
| 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
| Result CreateMutex(Handle* mutex, bool initialLocked)
| Result CreateMutex(Handle* mutex, bool initialLocked)
|-
|-
| 0x14  
| 0x14  
|
| Yes
| Result ReleaseMutex(Handle mutex)
| Result ReleaseMutex(Handle mutex)
|-
|-
| 0x15  
| 0x15  
|
| Yes
| Result CreateSemaphore(Handle* semaphore, s32 initialCount, s32 maxCount)
| Result CreateSemaphore(Handle* semaphore, s32 initialCount, s32 maxCount)
|-
|-
| 0x16  
| 0x16  
|
| Yes
| Result ReleaseSemaphore(s32* count, Handle semaphore, s32 releaseCount)
| Result ReleaseSemaphore(s32* count, Handle semaphore, s32 releaseCount)
|-
|-
| 0x17  
| 0x17  
|
| Yes
| Result CreateEvent(Handle* event, ResetType resettype)
| Result CreateEvent(Handle* event, ResetType resettype)
|-
|-
| 0x18  
| 0x18  
|
| Yes
| Result SignalEvent(Handle event)
| Result SignalEvent(Handle event)
|-
|-
| 0x19  
| 0x19  
|
| Yes
| Result ClearEvent(Handle event)
| Result ClearEvent(Handle event)
|-
|-
| 0x1A  
| 0x1A  
|
| Yes
| Result CreateTimer(Handle* timer, ResetType resettype)
| Result CreateTimer(Handle* timer, ResetType resettype)
|-
|-
| 0x1B  
| 0x1B  
|
| Yes
| Result SetTimer(Handle timer, s64 initial, s64 interval)
| Result SetTimer(Handle timer, s64 initial, s64 interval)
|-
|-
| 0x1C  
| 0x1C  
|
| Yes
| Result CancelTimer(Handle timer)
| Result CancelTimer(Handle timer)
|-
|-
| 0x1D  
| 0x1D  
|
| Yes
| Result ClearTimer(Handle timer)
| Result ClearTimer(Handle timer)
|-
|-
| 0x1E  
| 0x1E  
|
| 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  
|
| No
| Result MapMemoryBlock(Handle memblock, u32 addr, u32 mypermissions, u32 otherpermission)
| Result MapMemoryBlock(Handle memblock, u32 addr, u32 mypermissions, u32 otherpermission)
|-
|-
| 0x20  
| 0x20  
|
| No
| Result UnmapMemoryBlock(Handle memblock, u32 addr)
| Result UnmapMemoryBlock(Handle memblock, u32 addr)
|-
|-
| 0x21  
| 0x21  
|
| Yes
| Result CreateAddressArbiter(Handle* arbiter)
| Result CreateAddressArbiter(Handle* arbiter)
|-
|-
| 0x22  
| 0x22  
|
| Yes
| Result ArbitrateAddress(Handle arbiter, u32 addr, ArbitrationType type, s32 value)
| Result ArbitrateAddress(Handle arbiter, u32 addr, ArbitrationType type, s32 value)
|-
|-
| 0x23  
| 0x23  
|
| Yes
| Result CloseHandle(Handle handle)
| Result CloseHandle(Handle handle)
|-
|-
| 0x24  
| 0x24  
|
| Yes
| Result WaitSynchronization1(Handle handle, s64 nanoseconds)
| Result WaitSynchronization1(Handle handle, s64 nanoseconds)
|-
|-
| 0x25  
| 0x25  
|
| 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  
|
| 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
| Result DuplicateHandle(Handle* out, Handle original)
| Result DuplicateHandle(Handle* out, Handle original)
|-
|-
| 0x28  
| 0x28  
|
| 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  
|
| No
| Result GetHandleInfo(s64* out, Handle handle, HandleInfoType type)
| Result GetHandleInfo(s64* out, Handle handle, HandleInfoType type)
|-
|-
| 0x2A  
| 0x2A  
|
| Yes
| Result GetSystemInfo(s64* out, SystemInfoType type, s32 param)
| Result GetSystemInfo(s64* out, SystemInfoType type, s32 param)
|-
|-
| 0x2B  
| 0x2B  
|
| Yes
| Result GetProcessInfo(s64* out, Handle process, ProcessInfoType type)
| Result GetProcessInfo(s64* out, Handle process, ProcessInfoType type)
|-
|-
| 0x2C  
| 0x2C  
|
| Yes
| Result GetThreadInfo(s64* out, Handle thread, ThreadInfoType type)
| Result GetThreadInfo(s64* out, Handle thread, ThreadInfoType type)
|-
|-
| 0x2D  
| 0x2D  
|
| No
| Result ConnectToPort(Handle* out, const char* portName)
| Result ConnectToPort(Handle* out, const char* portName)
|-
|-
| 0x2E  
| 0x2E  
| Result SendSyncRequest1(Handle session) (Stubbed)
| Stubbed
| No
| Result SendSyncRequest1(Handle session)
|-
|-
| 0x2F  
| 0x2F  
| Result SendSyncRequest2(Handle session) (Stubbed)
| Stubbed
| No
| Result SendSyncRequest2(Handle session)
|-
|-
| 0x30  
| 0x30  
| Result SendSyncRequest3(Handle session) (Stubbed)
| Stubbed
| No
| Result SendSyncRequest3(Handle session)
|-
|-
| 0x31  
| 0x31  
| Result SendSyncRequest4(Handle session) (Stubbed)
| Stubbed
| No
| Result SendSyncRequest4(Handle session)
|-
|-
| 0x32  
| 0x32  
|
| No
| Result SendSyncRequest(Handle session)
| Result SendSyncRequest(Handle session)
|-
|-
| 0x33  
| 0x33  
|
| No
| Result OpenProcess(Handle* process, u32 processId)
| Result OpenProcess(Handle* process, u32 processId)
|-
|-
| 0x34  
| 0x34  
|
| No
| Result OpenThread(Handle* thread, Handle process, u32 threadId)
| Result OpenThread(Handle* thread, Handle process, u32 threadId)
|-
|-
| 0x35  
| 0x35  
|
| Yes
| Result GetProcessId(u32* processId, Handle process)
| Result GetProcessId(u32* processId, Handle process)
|-
|-
| 0x36  
| 0x36  
|
| No
| Result GetProcessIdOfThread(u32* processId, Handle thread)
| Result GetProcessIdOfThread(u32* processId, Handle thread)
|-
|-
| 0x37  
| 0x37  
|
| Yes
| Result GetThreadId(u32* threadId, Handle thread)
| Result GetThreadId(u32* threadId, Handle thread)
|-
|-
| 0x38  
| 0x38  
|
| No
| Result GetResourceLimit(Handle* resourceLimit, Handle process)
| Result GetResourceLimit(Handle* resourceLimit, Handle process)
|-
|-
| 0x39  
| 0x39  
|
| No
| Result GetResourceLimitLimitValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount)
| Result GetResourceLimitLimitValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount)
|-
|-
| 0x3A  
| 0x3A  
|
| No
| Result GetResourceLimitCurrentValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount)
| Result GetResourceLimitCurrentValues(s64* values, Handle resourceLimit, LimitableResource* names, s32 nameCount)
|-
|-
| 0x3B  
| 0x3B  
|
| No
| Result GetThreadContext(ThreadContext* context, Handle thread) (Stubbed)
| Result GetThreadContext(ThreadContext* context, Handle thread) (Stubbed)
|-
|-
| 0x3C  
| 0x3C  
|
| Yes
| Break(BreakReason)
| Break(BreakReason)
|-
|-
| 0x3D  
| 0x3D  
|
| Yes
| OutputDebugString(void const, int) (Does nothing on non-debug units)
| OutputDebugString(void const, int) (Does nothing on non-debug units)
|-
|-
| 0x3E  
| 0x3E  
|
| No
| ControlPerformanceCounter(unsigned long long, int, unsigned int, unsigned long long)
| ControlPerformanceCounter(unsigned long long, int, unsigned int, unsigned long long)
|-
|-
| 0x47  
| 0x47  
|
| No
| Result CreatePort(Handle* portServer, Handle* portClient,  const char* name, s32 maxSessions)
| Result CreatePort(Handle* portServer, Handle* portClient,  const char* name, s32 maxSessions)
|-
|-
| 0x48  
| 0x48  
|
| No
| Result CreateSessionToPort(Handle* session, Handle port)
| Result CreateSessionToPort(Handle* session, Handle port)
|-
|-
| 0x49  
| 0x49  
|
| No
| Result CreateSession(Handle* sessionServer, Handle* sessionClient)
| Result CreateSession(Handle* sessionServer, Handle* sessionClient)
|-
|-
| 0x4A  
| 0x4A  
|
| No
| Result AcceptSession(Handle* session, Handle port)
| Result AcceptSession(Handle* session, Handle port)
|-
|-
| 0x4B  
| 0x4B  
|
| 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  
|
| 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  
|
| 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  
|
| 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  
|
| No
| Result ReplyAndReceive(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
| Result ReplyAndReceive(s32* index, Handle* handles, s32 handleCount, Handle replyTarget)
|-
|-
| 0x50  
| 0x50  
|
| Yes
| Result BindInterrupt(Interrupt name, Handle syncObject, s32 priority, bool isManualClear)
| Result BindInterrupt(Interrupt name, Handle syncObject, s32 priority, bool isManualClear)
|-
|-
| 0x51  
| 0x51  
|
| Yes
| Result UnbindInterrupt(Interrupt name, Handle syncObject)
| Result UnbindInterrupt(Interrupt name, Handle syncObject)
|-
|-
| 0x52  
| 0x52  
|
| Yes
| Result InvalidateProcessDataCache(Handle process, void* addr, u32 size)
| Result InvalidateProcessDataCache(Handle process, void* addr, u32 size)
|-
|-
| 0x53  
| 0x53  
|
| Yes
| Result StoreProcessDataCache(Handle process, void const* addr, u32 size)
| Result StoreProcessDataCache(Handle process, void const* addr, u32 size)
|-
|-
| 0x54  
| 0x54  
|
| Yes
| Result FlushProcessDataCache(Handle process, void const* addr, u32 size)
| Result FlushProcessDataCache(Handle process, void const* addr, u32 size)
|-
|-
| 0x55  
| 0x55  
|
| 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
| Result StopDma(Handle dma)
| Result StopDma(Handle dma)
|-
|-
| 0x57  
| 0x57  
|
| Yes
| Result GetDmaState(DmaState* state, Handle dma)
| Result GetDmaState(DmaState* state, Handle dma)
|-
|-
| 0x58
| 0x58
|
| Yes
| RestartDma(nn::Handle, void *, void  const*, unsigned int, signed char)
| RestartDma(nn::Handle, void *, void  const*, unsigned int, signed char)
|-
|-
| 0x60  
| 0x60  
|
| No
| Result DebugActiveProcess(Handle* debug, u32 processID)
| Result DebugActiveProcess(Handle* debug, u32 processID)
|-
|-
| 0x61  
| 0x61  
|
| No
| Result BreakDebugProcess(Handle debug)
| Result BreakDebugProcess(Handle debug)
|-
|-
| 0x62  
| 0x62  
|
| No
| Result TerminateDebugProcess(Handle debug)
| Result TerminateDebugProcess(Handle debug)
|-
|-
| 0x63  
| 0x63  
|
| No
| Result GetProcessDebugEvent(DebugEventInfo* info, Handle debug)
| Result GetProcessDebugEvent(DebugEventInfo* info, Handle debug)
|-
|-
| 0x64  
| 0x64  
|
| No
| Result ContinueDebugEvent(Handle debug, u32 flags)
| Result ContinueDebugEvent(Handle debug, u32 flags)
|-
|-
| 0x65  
| 0x65  
|
| No
| Result GetProcessList(s32* processCount, u32* processIds, s32 processIdMaxCount)
| Result GetProcessList(s32* processCount, u32* processIds, s32 processIdMaxCount)
|-
|-
| 0x66  
| 0x66  
|
| No
| Result GetThreadList(s32* threadCount, u32* threadIds, s32 threadIdMaxCount, Handle domain)
| Result GetThreadList(s32* threadCount, u32* threadIds, s32 threadIdMaxCount, Handle domain)
|-
|-
| 0x67  
| 0x67  
|
| No
| Result GetDebugThreadContext(ThreadContext* context, Handle debug, u32 threadId, u32 controlFlags)
| Result GetDebugThreadContext(ThreadContext* context, Handle debug, u32 threadId, u32 controlFlags)
|-
|-
| 0x68  
| 0x68  
|
| No
| Result SetDebugThreadContext(Handle debug, u32 threadId, ThreadContext* context, u32 controlFlags)
| Result SetDebugThreadContext(Handle debug, u32 threadId, ThreadContext* context, u32 controlFlags)
|-
|-
| 0x69  
| 0x69  
|
| No
| Result QueryDebugProcessMemory(MemoryInfo* blockInfo, PageInfo* pageInfo, Handle process, u32 addr)
| Result QueryDebugProcessMemory(MemoryInfo* blockInfo, PageInfo* pageInfo, Handle process, u32 addr)
|-
|-
| 0x6A  
| 0x6A  
|
| No
| Result ReadProcessMemory(void* buffer, Handle debug, u32 addr, u32 size)
| Result ReadProcessMemory(void* buffer, Handle debug, u32 addr, u32 size)
|-
|-
| 0x6B  
| 0x6B  
|
| 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  
|
| No
| Result SetHardwareBreakPoint(s32 registerId, u32 control, u32 value)
| Result SetHardwareBreakPoint(s32 registerId, u32 control, u32 value)
|-
|-
| 0x6D
| 0x6D
|
| 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)
|-
|-
| 0x70
| 0x70
|
| 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
|
| No
| MapProcessMemory(Handle KProcess, unsigned int StartAddr, unsigned int EndAddr)
| MapProcessMemory(Handle KProcess, unsigned int StartAddr, unsigned int EndAddr)
|-
|-
| 0x72
| 0x72
|
| No
| UnmapProcessMemory(Handle KProcess, unsigned int StartAddr, unsigned int EndAddr)
| UnmapProcessMemory(Handle KProcess, unsigned int StartAddr, unsigned int EndAddr)
|-
|-
| 0x73
| 0x73
|
| No
| ?
| ?
|-
|-
| 0x74
| 0x74
| Stubbed on regular kernel
| Stubbed
| No
|
|-
|-
| 0x75
| 0x75
|
| No
| ?
| ?
|-
|-
| 0x76
| 0x76
|
| No
| TerminateProcess(Handle)
| TerminateProcess(Handle)
|-
|-
| 0x77
| 0x77
|
| No
| (Handle KProcess, Handle KResourceLimit)
| (Handle KProcess, Handle KResourceLimit)
|-
|-
| 0x78
| 0x78
|
| No
| CreateResourceLimit(Handle *KResourceLimit)
| CreateResourceLimit(Handle *KResourceLimit)
|-
|-
| 0x79
| 0x79
|
| No
| ?
| ?
|-
|-
| 0x7A
| 0x7A
| DisableExecuteNever(unsigned int Addr, unsigned int Size) (Stubbed for regular kernel beginning with [[2.0.0-2]])
| Stubbed beginning with [[2.0.0-2]]
| Yes
| DisableExecuteNever(unsigned int Addr, unsigned int Size)
|-
|-
| 0x7C
| 0x7C
|
| Yes
| KernelSetState(unsigned int Type, unsigned int Param0, unsigned int Param1, unsigned int Param2) (The Type determines the usage of each param)
| KernelSetState(unsigned int Type, unsigned int Param0, unsigned int Param1, unsigned int Param2) (The Type determines the usage of each param)
|-
|-
| 0x7D
| 0x7D
|
| No
| QueryProcessMemory(MemInfo *Info, unsigned int *Out, Handle KProcess, unsigned int Addr)
| QueryProcessMemory(MemInfo *Info, unsigned int *Out, Handle KProcess, unsigned int Addr)
|-
|-
| 0xFF
| 0xFF
|
| Yes
| Debug related (The Syscall access control mask doesn't apply for this SVC)
| Debug related (The Syscall access control mask doesn't apply for this SVC)
|}
|}