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 177: |
Line 179: |
| | 0x58 || Result || [[#DetachDeviceAddressSpace|DetachDeviceAddressSpace]] || DeviceName device_name, Handle das_handle | | | 0x58 || Result || [[#DetachDeviceAddressSpace|DetachDeviceAddressSpace]] || DeviceName device_name, Handle das_handle |
| |- | | |- |
− | | 0x59 || Result || [[#MapDeviceAddressSpaceByForce|MapDeviceAddressSpaceByForce]] || Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, MemoryPermission device_perm | + | | 0x59 || Result || [[#MapDeviceAddressSpaceByForce|MapDeviceAddressSpaceByForce]] || Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, uint32_t option |
| |- | | |- |
− | | 0x5A || Result || [[#MapDeviceAddressSpaceAligned|MapDeviceAddressSpaceAligned]] || Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, MemoryPermission device_perm | + | | 0x5A || Result || [[#MapDeviceAddressSpaceAligned|MapDeviceAddressSpaceAligned]] || Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, uint32_t option |
| |- | | |- |
| | [1.0.0-12.1.0] 0x5B || Result || [[#MapDeviceAddressSpace|MapDeviceAddressSpace]] || size_t *out_mapped_size, Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, MemoryPermission device_perm | | | [1.0.0-12.1.0] 0x5B || Result || [[#MapDeviceAddressSpace|MapDeviceAddressSpace]] || size_t *out_mapped_size, Handle das_handle, Handle process_handle, uint64_t process_address, size_t size, uint64_t device_address, MemoryPermission device_perm |
Line 252: |
Line 254: |
| |- | | |- |
| | 0x7F || void || [[#CallSecureMonitor|CallSecureMonitor]] || SecureMonitorArguments *args | | | 0x7F || void || [[#CallSecureMonitor|CallSecureMonitor]] || SecureMonitorArguments *args |
| + | |- style="border-top: double" |
| + | | [15.0.0+] 0x90 || Result || MapInsecurePhysicalMemory || uintptr_t address, size_t size |
| + | |- |
| + | | [15.0.0+] 0x91 || Result || UnmapInsecurePhysicalMemory || uintptr_t address, size_t size |
| |- | | |- |
| |} | | |} |
Line 261: |
Line 267: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W1 || uint32_t || Size | + | | (In) X1 || uint64_t || Size |
| |- | | |- |
| | (Out) W0 || [[#Result]] || Result | | | (Out) W0 || [[#Result]] || Result |
Line 643: |
Line 649: |
| </div> | | </div> |
| | | |
− | Takes the given event out of the signaled state. | + | Takes the given event out of the signaled state, if it is signaled. |
| | | |
| === Result codes === | | === Result codes === |
Line 649: |
Line 655: |
| | | |
| '''0xE401:''' Invalid handle. The handle either does not exist, or is not a ReadableEvent nor a WritableEvent. | | '''0xE401:''' Invalid handle. The handle either does not exist, or is not a ReadableEvent nor a WritableEvent. |
− |
| |
− | '''0xFA01:''' The handle was not in a signaled state.
| |
| | | |
| == MapSharedMemory == | | == MapSharedMemory == |
Line 738: |
Line 742: |
| </div> | | </div> |
| | | |
− | Resets the signal on the given handle, ensuring future calls to [[#WaitSynchronization]] on this handle will sleep until the handle is signaled again. If the handle is a ReadableEvent, this is equivalent to calling ClearEvent() on the handle. | + | Resets the signal on the given handle, ensuring future calls to [[#WaitSynchronization]] on this handle will sleep until the handle is signaled again. If the handle is a ReadableEvent, this returns ResultInvalidState if the event is not signaled. |
| | | |
| If the handle is a Process, it will clear the signaled state (which is set when the process changes [[#ProcessState]]. Once the process enters the Exited state, calling ResetSignal on the process will no longer have an effect (the process is permanently signaled), and the syscall will return 0xFA01. | | If the handle is a Process, it will clear the signaled state (which is set when the process changes [[#ProcessState]]. Once the process enters the Exited state, calling ResetSignal on the process will no longer have an effect (the process is permanently signaled), and the syscall will return 0xFA01. |
Line 1,426: |
Line 1,430: |
| ! Argument64 || Argument32 || Type || Name | | ! Argument64 || Argument32 || Type || Name |
| |- | | |- |
− | | (In) W1 || R1 || Handle<Port>* or Handle<ServerSession>* || Handles | + | | (In) X1 || R1 || Handle<Port>* or Handle<ServerSession>* || Handles |
| |- | | |- |
| | (In) W2 || R2 || uint32_t || NumHandles | | | (In) W2 || R2 || uint32_t || NumHandles |
Line 1,858: |
Line 1,862: |
| | (In) X4 || R5, R6 || uint64_t || DeviceAddressSpaceAddress | | | (In) X4 || R5, R6 || uint64_t || DeviceAddressSpaceAddress |
| |- | | |- |
− | | (In) W5 || R7 || [[#MemoryPermission]] || MemoryPermission | + | | (In) W5 || R7 || uint32_t || Option |
| |- | | |- |
| | (Out) W0 || R0 || [[#Result]] || Result | | | (Out) W0 || R0 || [[#Result]] || Result |
Line 1,869: |
Line 1,873: |
| | | |
| The userspace destination address must have the [[SVC#MemoryState|FlagCanDeviceMap]] bit set. Bit [[SVC#MemoryAttribute|DeviceShared]] will be set after mapping. | | The userspace destination address must have the [[SVC#MemoryState|FlagCanDeviceMap]] bit set. Bit [[SVC#MemoryAttribute|DeviceShared]] will be set after mapping. |
| + | |
| + | The Option encodes a [[#MemoryPermission]] in the low 16 bits, and an indicator of IO mapping in the high bits. |
| | | |
| == MapDeviceAddressSpaceAligned == | | == MapDeviceAddressSpaceAligned == |
Line 1,886: |
Line 1,892: |
| | (In) X4 || R5, R6 || uint64_t || DeviceAddressSpaceAddress | | | (In) X4 || R5, R6 || uint64_t || DeviceAddressSpaceAddress |
| |- | | |- |
− | | (In) W5 || R7 || [[#MemoryPermission]] || MemoryPermission | + | | (In) W5 || R7 || uint32_t || Option |
| |- | | |- |
| | (Out) W0 || R0 || [[#Result]] || Result | | | (Out) W0 || R0 || [[#Result]] || Result |
Line 1,895: |
Line 1,901: |
| | | |
| Same as [[#MapDeviceAddressSpaceByForce]], but the userspace destination address must have the [[SVC#MemoryState|FlagCanAlignedDeviceMap]] bit set instead. | | Same as [[#MapDeviceAddressSpaceByForce]], but the userspace destination address must have the [[SVC#MemoryState|FlagCanAlignedDeviceMap]] bit set instead. |
| + | |
| + | The Option encodes a [[#MemoryPermission]] in the low 16 bits, and an indicator of IO mapping in the high bits. |
| | | |
| == MapDeviceAddressSpace == | | == MapDeviceAddressSpace == |
Line 2,651: |
Line 2,659: |
| | Process || 24 || 0 || [11.0.0+] FreeThreadCount | | | Process || 24 || 0 || [11.0.0+] FreeThreadCount |
| |- | | |- |
− | | Thread || 0xF0000002 || 0-3, -1 || ThreadTickCount. When 0-3 are passed, gets specific core CPU ticks spent on thread. When -1 is passed, gets total CPU ticks spent on thread. | + | | Thread || 25 ([1.0.0-12.1.0] 0xF0000002) || 0-3, -1 || ThreadTickCount. When 0-3 are passed, gets specific core CPU ticks spent on thread. When -1 is passed, gets total CPU ticks spent on thread. |
| + | |- |
| + | | Process || 26 || 0 || [14.0.0+] IsSvcPermitted |
| + | |- |
| + | | Process || 27 || 0 || [16.0.0+] IoRegionHint |
| |} | | |} |
| | | |
Line 3,028: |
Line 3,040: |
| |- | | |- |
| | 25 || [4.0.0+] [[#CreateCodeMemory|FlagCanCodeMemory]] || | | | 25 || [4.0.0+] [[#CreateCodeMemory|FlagCanCodeMemory]] || |
| + | |- |
| + | | 26 || [15.0.0+] FlagLinearMapped || |
| |} | | |} |
| | | |
Line 3,097: |
Line 3,111: |
| |- | | |- |
| | 0x00402015 || [4.0.0+] CodeOut || Mapped in kernel during [[#ControlCodeMemory]]. | | | 0x00402015 || [4.0.0+] CodeOut || Mapped in kernel during [[#ControlCodeMemory]]. |
| + | |- |
| + | | 0x00002016 || [13.0.0+] Coverage || |
| + | |- |
| + | | 0x05583817 || [15.0.0+] Insecure || |
| |} | | |} |
| | | |