SVC: Difference between revisions
No edit summary |
|||
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]]. | ||