Changes

529 bytes removed ,  21:44, 25 May 2015
moved thread related stuff to Multi-threading page
Line 62: Line 62:  
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
| Result [[#CreateThread|CreateThread]](Handle* thread, func entrypoint, u32 arg, u32 stacktop, s32 threadpriority, s32 processorid)
+
| Result [[Multi-threading#CreateThread|CreateThread]](Handle* thread, func entrypoint, u32 arg, u32 stacktop, s32 threadpriority, s32 processorid)
 
|
 
|
 
|-
 
|-
Line 69: Line 69:  
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
| void ExitThread(void)
+
| void [[Multi-threading#ExitThread|ExitThread]](void)
 
|
 
|
 
|-
 
|-
Line 76: Line 76:  
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
| void SleepThread(s64 nanoseconds)
+
| void [[Multi-threading#SleepThread|SleepThread]](s64 nanoseconds)
 
|
 
|
 
|-
 
|-
Line 83: Line 83:  
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
| Result GetThreadPriority(s32* priority, Handle thread)
+
| Result [[Multi-threading#GetThreadPriority|GetThreadPriority]](s32* priority, Handle thread)
 
|
 
|
 
|-
 
|-
Line 90: Line 90:  
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
| Result SetThreadPriority(Handle thread, s32 priority)
+
| Result [[Multi-threading#SetThreadPriority|SetThreadPriority]](Handle thread, s32 priority)
 
|
 
|
 
|-
 
|-
Line 97: Line 97:  
| style="background: red" | No
 
| style="background: red" | No
 
| style="background: red" | No
 
| style="background: red" | No
| Result GetThreadAffinityMask(u8* affinitymask, Handle thread, s32 processorcount)
+
| Result [[Multi-threading#GetThreadAffinityMask|GetThreadAffinityMask]](u8* affinitymask, Handle thread, s32 processorcount)
 
|
 
|
 
|-
 
|-
Line 104: Line 104:  
| style="background: red" | No
 
| style="background: red" | No
 
| style="background: red" | No
 
| style="background: red" | No
| Result SetThreadAffinityMask(Handle thread, u8* affinitymask, s32 processorcount)
+
| Result [[Multi-threading#SetThreadAffinityMask|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]].
 
|-
 
|-
Line 111: Line 111:  
| style="background: red" | No
 
| style="background: red" | No
 
| style="background: red" | No
 
| style="background: red" | No
| Result GetThreadIdealProcessor(s32* processorid, Handle thread)
+
| Result [[Multi-threading#GetThreadIdealProcessor|GetThreadIdealProcessor]](s32* processorid, Handle thread)
 
|
 
|
 
|-
 
|-
Line 118: Line 118:  
| style="background: red" | No
 
| style="background: red" | No
 
| style="background: red" | No
 
| style="background: red" | No
| Result SetThreadIdealProcessor(Handle thread, s32 processorid)
+
| Result [[Multi-threading#SetThreadIdealProcessor|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]].
 
|-
 
|-
Line 139: Line 139:  
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
| Result CreateMutex(Handle* mutex, bool initialLocked)
+
| Result [[Multi-threading#CreateMutex|CreateMutex]](Handle* mutex, bool initialLocked)
 
|
 
|
 
|-
 
|-
Line 146: Line 146:  
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
| Result ReleaseMutex(Handle mutex)
+
| Result [[Multi-threading#ReleaseMutex|ReleaseMutex]](Handle mutex)
 
|
 
|
 
|-
 
|-
Line 153: Line 153:  
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
| Result CreateSemaphore(Handle* semaphore, s32 initialCount, s32 maxCount)
+
| Result [[Multi-threading#CreateSemaphore|CreateSemaphore]](Handle* semaphore, s32 initialCount, s32 maxCount)
 
|
 
|
 
|-
 
|-
Line 160: Line 160:  
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
| Result ReleaseSemaphore(s32* count, Handle semaphore, s32 releaseCount)
+
| Result [[Multi-threading#ReleaseSemaphore|ReleaseSemaphore]](s32* count, Handle semaphore, s32 releaseCount)
 
|
 
|
 
|-
 
|-
Line 167: Line 167:  
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
| Result CreateEvent(Handle* event, ResetType resettype)
+
| Result [[Multi-threading#CreateEvent|CreateEvent]](Handle* event, ResetType resettype)
 
|
 
|
 
|-
 
|-
Line 174: Line 174:  
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
| Result SignalEvent(Handle event)
+
| Result [[Multi-threading#SignalEvent|SignalEvent]](Handle event)
 
|
 
|
 
|-
 
|-
Line 181: Line 181:  
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
| Result ClearEvent(Handle event)
+
| Result [[Multi-threading#ClearEvent|ClearEvent]](Handle event)
 
|
 
|
 
|-
 
|-
Line 314: Line 314:  
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
| Result GetThreadInfo(s64* out, Handle thread, ThreadInfoType type)
+
| Result [[Multi-threading#GetThreadInfo|GetThreadInfo]](s64* out, Handle thread, ThreadInfoType type)
 
|
 
|
 
|-
 
|-
Line 374: Line 374:  
| style="background: red" | No
 
| style="background: red" | No
 
| style="background: red" | No
 
| style="background: red" | No
| Result OpenThread(Handle* thread, Handle process, u32 threadId)
+
| Result [[Multi-threading#OpenThread|OpenThread]](Handle* thread, Handle process, u32 threadId)
 
|
 
|
 
|-
 
|-
Line 388: Line 388:  
| style="background: red" | No
 
| style="background: red" | No
 
| style="background: red" | No
 
| style="background: red" | No
| Result GetProcessIdOfThread(u32* processId, Handle thread)
+
| Result [[Multi-threading#GetProcessIdOfThread|GetProcessIdOfThread]](u32* processId, Handle thread)
 
|
 
|
 
|-
 
|-
Line 395: Line 395:  
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
 
| style="background: green" | Yes
| Result GetThreadId(u32* threadId, Handle thread)
+
| Result [[Multi-threading#GetThreadId|GetThreadId]](u32* threadId, Handle thread)
 
|
 
|
 
|-
 
|-
Line 423: Line 423:  
| style="background: red" | No
 
| style="background: red" | No
 
| style="background: red" | No
 
| style="background: red" | No
| Result GetThreadContext(ThreadContext* context, Handle thread)
+
| Result [[Multi-threading#GetThreadContext|GetThreadContext]](ThreadContext* context, Handle thread)
 
| Stubbed
 
| Stubbed
 
|-
 
|-
Line 668: Line 668:  
| style="background: red" | No
 
| style="background: red" | No
 
| style="background: red" | No
 
| style="background: red" | No
| GetDebugThreadParam(long long *, int *, nn::Handle, unsigned int, nn::dmnt::DebugThreadParam)
+
| [[Multi-threading#GetDebugThreadParam|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"
Line 782: Line 782:  
<pre>ROM:FFF04D98                LDR            R0, =0xF8C007F4
 
<pre>ROM:FFF04D98                LDR            R0, =0xF8C007F4
 
ROM:FFF04D9C                BX              LR</pre>
 
ROM:FFF04D9C                BX              LR</pre>
  −
== CreateThread ==
  −
R0=s32 threadpriority
  −
R1=func entrypoint
  −
R2=u32 arg
  −
R3=u32 stacktop
  −
R4=s32 processorid
  −
  −
Result result=R0
  −
Handle* thread=R1
  −
  −
The processorid parameter specifies which processor the thread can run on. Non-negative values correspond to a specific CPU. (e.g. 0 for the Appcore and 1 for the Syscore on Old3DS) Special value -1 means all CPUs, and -2 means the default CPU for the process (Read from the [[NCCH/Extended Header|Exheader]], usually 0 for applications, 1 for system services). Games usually create threads using -2.
  −
  −
With the Old3DS kernel, the s32 processorid must be <=2.
  −
  −
With the New3DS kernel: processorid must be <= <total cores(MPCore "SCU Configuration Register" CPU number value + 1)>. When processorid==0x2 and the process is not an APPLICATION mem-region process, exheader kernel-flags bitmask 0x2000 must be set otherwise error 0xD9001BEA is returned. When processorid==0x3 and the process is not an APPLICATION mem-region process, error 0xD9001BEA is returned. These are the only restriction checks done by the kernel for processorid.
  −
  −
The thread priority value must be in the following range: 0x0..0x3F.
  −
  −
The stacktop must be aligned to 0x8-bytes, otherwise when not aligned to 0x8-bytes the ARM11 kernel clears the low 3-bits of the stacktop address.
  −
   
= Types and structures =
 
= Types and structures =
  
48

edits