SVC: Difference between revisions

DCNick3 (talk | contribs)
m SetHeapSize: Fix register size W1 -> X1
Update SVCs to reflect 15.0.0
Line 177: Line 177:
| 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 252:
|-
|-
| 0x7F || void || [[#CallSecureMonitor|CallSecureMonitor]] || SecureMonitorArguments *args
| 0x7F || void || [[#CallSecureMonitor|CallSecureMonitor]] || SecureMonitorArguments *args
|- style="border-top: double"
| [15.0.0+] 0x90  || Result || MapInsecureMemory || uintptr_t address, size_t size
|-
| [15.0.0+] 0x91  || Result || UnmapInsecureMemory || uintptr_t address, size_t size
|-
|-
|}
|}
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 ==