Line 665: |
Line 665: |
| | | |
| == svcGetInfo == | | == svcGetInfo == |
| + | |
| + | <div style="display: inline-block;"> |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Argument || Type || Name |
| + | |- |
| + | | (In) X1 || u64 || <code>Info ID</code> |
| + | |- |
| + | | (In) X2 || u64 || <code>Handle</code> |
| + | |- |
| + | | (In) X3 || u64 || <code>Info Sub ID</code> |
| + | |- |
| + | | (Out) W0 || [[#Result]] || <code>Ret</code> |
| + | |- |
| + | | (Out) X1 || u64 || <code>Out</code> |
| + | |} |
| + | </div> |
| + | |
| {| class=wikitable | | {| class=wikitable |
| ! Handle type || Id0 || Id1 || Description | | ! Handle type || Id0 || Id1 || Description |
Line 706: |
Line 724: |
| | | |
| == svcDumpInfo == | | == svcDumpInfo == |
| + | |
| + | <div style="display: inline-block;"> |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Argument || Type || Name |
| + | |- |
| + | | (In) None || || |
| + | |- |
| + | | (Out) None || || |
| + | |} |
| + | </div> |
| + | |
| Does nothing, just returns with registers set to all-zero. | | Does nothing, just returns with registers set to all-zero. |
| | | |
| == svcReadWriteRegister == | | == svcReadWriteRegister == |
| + | |
| + | <div style="display: inline-block;"> |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Argument || Type || Name |
| + | |- |
| + | | (In) X1 || u64 || <code>Reg Addr</code> |
| + | |- |
| + | | (In) W2 || u64 || <code>RW Mask</code> |
| + | |- |
| + | | (In) W3 || u64 || <code>In Value</code> |
| + | |- |
| + | | (Out) W0 || [[#Result]] || <code>Ret</code> |
| + | |- |
| + | | (Out) W1|| u64 || <code>Out Value</code> |
| + | |} |
| + | </div> |
| + | |
| Read/write IO registers with a hardcoded whitelist. Input address is physical-address and must be aligned to 4. | | Read/write IO registers with a hardcoded whitelist. Input address is physical-address and must be aligned to 4. |
| | | |
Line 727: |
Line 775: |
| | | |
| == svcCreateSharedMemory == | | == svcCreateSharedMemory == |
| + | |
| + | <div style="display: inline-block;"> |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Argument || Type || Name |
| + | |- |
| + | | (In) W1 || u64 || <code>Size</code> |
| + | |- |
| + | | (In) W2 || u64 || <code>My Permissions</code> |
| + | |- |
| + | | (In) W3 || u64 || <code>Other Permissions</code> |
| + | |- |
| + | | (Out) W0 || [[#Result]] || <code>Ret</code> |
| + | |- |
| + | | (Out) W1|| u64 || <code>Shared Memory Handle</code> |
| + | |} |
| + | </div> |
| + | |
| Other perm can be used to enforce permission 1, 3, or 0x10000000 if don't care. | | Other perm can be used to enforce permission 1, 3, or 0x10000000 if don't care. |
| | | |
| == svcMapTransferMemory == | | == svcMapTransferMemory == |
| + | |
| + | <div style="display: inline-block;"> |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Argument || Type || Name |
| + | |- |
| + | | (In) X0 || u64 || <code>Transfer Mem Handle</code> |
| + | |- |
| + | | (In) X1 || u64 || <code>Addr</code> |
| + | |- |
| + | | (In) X2 || u64 || <code>Size</code> |
| + | |- |
| + | | (In) W3 || u64 || <code>Permissions</code> |
| + | |- |
| + | | (Out) W0 || [[#Result]] || <code>Ret</code> |
| + | |} |
| + | </div> |
| + | |
| The newly mapped pages will have [[#MemoryState]] type 0xE. | | The newly mapped pages will have [[#MemoryState]] type 0xE. |
| | | |
Line 735: |
Line 819: |
| | | |
| == svcUnmapTransferMemory == | | == svcUnmapTransferMemory == |
| + | |
| + | <div style="display: inline-block;"> |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Argument || Type || Name |
| + | |- |
| + | | (In) X0 || u64 || <code>Transfer Mem Handle</code> |
| + | |- |
| + | | (In) X1 || u64 || <code>Addr</code> |
| + | |- |
| + | | (In) X2 || u64 || <code>Size</code> |
| + | |- |
| + | | (Out) W0 || [[#Result]] || <code>Ret</code> |
| + | |} |
| + | </div> |
| + | |
| Size must match size given in map syscall, otherwise there's an invalid-size error. | | Size must match size given in map syscall, otherwise there's an invalid-size error. |
| | | |
| == svcQueryPhysicalAddress == | | == svcQueryPhysicalAddress == |
| + | |
| + | <div style="display: inline-block;"> |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Argument || Type || Name |
| + | |- |
| + | | (In) X1 || u64 || <code>Addr</code> |
| + | |- |
| + | | (Out) W0 || [[#Result]]|| <code>Ret</code> |
| + | |- |
| + | | (Out) X1 || u64 || <code>Out0</code> |
| + | |- |
| + | | (Out) X2 || u64 || <code>Out1</code> |
| + | |- |
| + | | (Out) X3 || u64 || <code>Out2</code> |
| + | |} |
| + | </div> |
| + | |
| The inverse operation of [[#svcQueryIoMapping]]. | | The inverse operation of [[#svcQueryIoMapping]]. |
| | | |
| == svcQueryIoMapping == | | == svcQueryIoMapping == |
| + | |
| + | <div style="display: inline-block;"> |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Argument || Type || Name |
| + | |- |
| + | | (In) X1 || u64 || <code>Physical Address</code> |
| + | |- |
| + | | (In) X2 || u64 || <code>Size</code> |
| + | |- |
| + | | (Out) W0 || [[#Result]] || <code>Ret</code> |
| + | |- |
| + | | (Out) X1 || u64 || <code>Virtual Address</code> |
| + | |} |
| + | </div> |
| + | |
| '''Description:''' Returns a virtual address mapped to a given IO range. | | '''Description:''' Returns a virtual address mapped to a given IO range. |
| | | |
| == svcCreateDeviceAddressSpace == | | == svcCreateDeviceAddressSpace == |
| + | |
| + | <div style="display: inline-block;"> |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Argument || Type || Name |
| + | |- |
| + | | (In) X1 || u64 || <code>Device as Start Addr</code> |
| + | |- |
| + | | (In) X2 || u64 || <code>Device as End Addr</code> |
| + | |- |
| + | | (Out) W0 || [[#Result]] || <code>Ret</code> |
| + | |- |
| + | | (Out) W1 || u64 || <code>Device as Handle</code> |
| + | |} |
| + | </div> |
| + | |
| '''Description:''' Creates a virtual address space for binding device address spaces and returns a handle. | | '''Description:''' Creates a virtual address space for binding device address spaces and returns a handle. |
| | | |
Line 749: |
Line 899: |
| | | |
| == svcAttachDeviceAddressSpace == | | == svcAttachDeviceAddressSpace == |
| + | |
| + | <div style="display: inline-block;"> |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Argument || Type || Name |
| + | |- |
| + | | (In) W0 || u64 || <code>Device</code> |
| + | |- |
| + | | (In) X1 || u64 || <code>Device as Handle</code> |
| + | |- |
| + | | (Out) W0 || [[#Result]] || <code>Ret</code> |
| + | |} |
| + | </div> |
| + | |
| '''Description:''' Attaches a device address space to a [[#DeviceName|device]]. | | '''Description:''' Attaches a device address space to a [[#DeviceName|device]]. |
| | | |
| == svcDetachDeviceAddressSpace == | | == svcDetachDeviceAddressSpace == |
| + | |
| + | <div style="display: inline-block;"> |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Argument || Type || Name |
| + | |- |
| + | | (In) W0 || u64 || <code>Device</code> |
| + | |- |
| + | | (In) X1 || u64 || <code>Device as Handle</code> |
| + | |- |
| + | | (Out) W0 || [[#Result]] || <code>Ret</code> |
| + | |} |
| + | </div> |
| + | |
| '''Description:''' Detaches a device address space from a [[#DeviceName|device]]. | | '''Description:''' Detaches a device address space from a [[#DeviceName|device]]. |
| | | |