SVC: Difference between revisions

ResetSignal returns ResultInvalidState if the event is not signaled
 
(18 intermediate revisions by 5 users not shown)
Line 169: Line 169:
| 0x54 || Result || [[#QueryPhysicalAddress|QueryPhysicalAddress]] || arch::PhysicalMemoryInfo *out_info, uintptr_t address
| 0x54 || Result || [[#QueryPhysicalAddress|QueryPhysicalAddress]] || arch::PhysicalMemoryInfo *out_info, uintptr_t address
|-
|-
| 0x55 || Result || [[#QueryIoMapping|QueryIoMapping]] || uintptr_t *out_address, [10.0.0+] size_t *out_size, PhysicalAddress physical_address, size_t size
| [1.0.0-9.2.0] 0x55 || Result || [[#QueryIoMapping|QueryIoMapping]] || uintptr_t *out_address, PhysicalAddress physical_address, size_t size
|-
| [10.0.0+] 0x55 || Result || QueryMemoryMapping || uintptr_t *out_address, size_t *out_size, PhysicalAddress physical_address, size_t size
|-
|-
| 0x56 || Result || [[#CreateDeviceAddressSpace|CreateDeviceAddressSpace]] || Handle *out_handle, uint64_t das_address, uint64_t das_size
| 0x56 || Result || [[#CreateDeviceAddressSpace|CreateDeviceAddressSpace]] || Handle *out_handle, uint64_t das_address, uint64_t das_size
Line 252: Line 254:
|-
|-
| 0x7F || void || [[#CallSecureMonitor|CallSecureMonitor]] || SecureMonitorArguments *args
| 0x7F || void || [[#CallSecureMonitor|CallSecureMonitor]] || SecureMonitorArguments *args
|-
| [S2] 0x80 || Result || SetGpuMemoryAttribute || uintptr_t address, size_t size, uint32_t mask, uint32_t attr
|-
| [S2] 0x81 || Result || LockGpuSharableMemory || PhysicalMemoryInfo* info_out, Handle process_handle, uintptr_t address, size_t size
|-
| [S2] 0x80 || Result || UnlockGpuSharableMemory || Handle process_handle, uintptr_t address, size_t size
|- style="border-top: double"
|- style="border-top: double"
| [15.0.0+] 0x90  || Result || MapInsecureMemory || uintptr_t address, size_t size
| [15.0.0+] 0x90  || Result || MapInsecurePhysicalMemory || uintptr_t address, size_t size
|-
|-
| [15.0.0+] 0x91  || Result || UnmapInsecureMemory || uintptr_t address, size_t size
| [15.0.0+] 0x91  || Result || UnmapInsecurePhysicalMemory || uintptr_t address, size_t size
|-
|-
|}
|}
Line 505: Line 513:
! Argument64 || Argument32 || Type || Name
! Argument64 || Argument32 || Type || Name
|-
|-
| (In) X0 || R0, R1 || uint64_t || Nanoseconds
| (In) X0 || R0, R1 || int64_t || Nanoseconds
|}
|}
</div>
</div>
Line 940: Line 948:
|}
|}
</div>
</div>
[S2] All errors returned by the SendSyncRequest* SVCs will automatically close the session (unknown whether handled by kernel/sysmodule).


== SendSyncRequestWithUserBuffer ==
== SendSyncRequestWithUserBuffer ==
Line 2,660: Line 2,670:
|-
|-
| Process || 26 || 0 || [14.0.0+] IsSvcPermitted
| Process || 26 || 0 || [14.0.0+] IsSvcPermitted
|-
| Process || 27 || 0 || [16.0.0+] IoRegionHint
|-
| Process || 28 || 0 || [18.0.0+] AliasRegionExtraSize
|-
| Process || 29 || 0 || [S2] RemoteRegionAddress
|-
| Process || 30 || 0 || [S2] RemoteRegionSize
|-
| Process || 31 || 0 || [S2] RemoteMemoryUsage
|-
| Process || 32 || 0 || [S2] RemoteMemoryUsagePeak
|-
| Process || 33 || 0 || [S2] ProcessPageSize
|-
| TransferMemory || 34 || 0 || [19.0.0+] TransferMemoryHint
|}
|}


Line 2,993: Line 3,019:
|-
|-
| 3 || Uncached ||  
| 3 || Uncached ||  
|-
| 4 || PermissionLocked ||
|-
| 5 || [S2] GpuSharable ||
|-
| 6 || [S2] GpuShared ||
|-
|}
|}


Line 3,036: Line 3,069:
|-
|-
| 25 || [4.0.0+] [[#CreateCodeMemory|FlagCanCodeMemory]] ||
| 25 || [4.0.0+] [[#CreateCodeMemory|FlagCanCodeMemory]] ||
|-
| 26 || [15.0.0+] FlagLinearMapped ||
|-
| 27 || [17.0.0+] FlagCanPermissionLock ||
|}
|}


Line 3,107: Line 3,144:
|-
|-
| 0x00002016 || [13.0.0+] Coverage ||  
| 0x00002016 || [13.0.0+] Coverage ||  
|-
| 0x05583817 || [15.0.0+] Insecure ||
|}
|}


Line 3,148: Line 3,187:
! Bit || Bitmask || Description
! Bit || Bitmask || Description
|-
|-
| 0 || 1 || IgnoreException (note: doesn't need to be set in the same call than Resume)
| 0 || 1 || HandleException (note: doesn't need to be set in the same call than Resume)
|-
|-
| 1 || 2 || DontCatchExceptions
| 1 || 2 || EnableExceptionEvent
|-
|-
| 2 || 4 || Resume
| 2 || 4 || ContinueAll
|-
|-
| 3 || 8 || IgnoreOtherThreadsExceptions
| 3 || 8 || ContinueOthers
|}
|}


IgnoreExceptionsOfOthers is like IgnoreException but acts on all threads that aren't in the input list. The affected threads are resumed.
ContinueOthers is like ContinueAll but acts on all threads that aren't in the input list. The affected threads are resumed.


Only one of of Resume and IgnoreOtherThreadsExceptions can be set at a time.
Only one of of HandleException and EnableExceptionEvent can be set at a time.


If the input number of threads is 0, this means "all threads".
If the input number of threads is 0, this means "all threads".
Line 3,334: Line 3,373:
Userland reporting path and [[#ReturnFromException]]:
Userland reporting path and [[#ReturnFromException]]:


TLS region start (A64):
TLS region start (UserExceptionContext):
{| class=wikitable
{| class=wikitable
! Offset || Length || Description
! Offset || Length || Description
Line 3,340: Line 3,379:
| 0x0 || 0x148 || Exception stack
| 0x0 || 0x148 || Exception stack
|-
|-
| 0x148 || 0x78 || ExceptionFrameA64
| 0x148 || 0x78 (A64) or 0x44 (A32) || ExceptionFrameA64 or ExceptionFrameA32
|-
| 0x1C0 || 0x8 || DyingMessage address (unused by kernel)
|-
| 0x1C8 || 0x8 || DyingMessage size (unused by kernel)
|}
|}


Line 3,364: Line 3,407:
|-
|-
| 0x70 || 0x8 || far
| 0x70 || 0x8 || far
|}
TLS region start (A32):
{| class=wikitable
! Offset || Length || Description
|-
| 0x0 || 0x178 || Exception stack
|-
| 0x148 || 0x44 || ExceptionFrameA32
|}
|}