Line 224: |
Line 224: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W1 || u64 || <code>Size</code> | + | | (In) W1 || u64 || Size |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |- | | |- |
− | | (Out) X1 || u64 || <code>OutAddr</code> | + | | (Out) X1 || u64 || OutAddr |
| |} | | |} |
| </div> | | </div> |
| | | |
− | '''Description:''' Set the process heap to a given <code>Size</code>. It can both extend and shrink the heap. | + | '''Description:''' Set the process heap to a given Size. It can both extend and shrink the heap. |
| | | |
− | <code>Size</code> must be a multiple of 0x2000000.
| + | Size must be a multiple of 0x2000000. |
| | | |
− | On success, the heap base-address (which is fixed by kernel, aslr'd) is written to <code>OutAddr</code>. | + | On success, the heap base-address (which is fixed by kernel, aslr'd) is written to OutAddr. |
| | | |
− | [2.0.0+] <code>Size</code> must be less than 0x18000000. | + | [2.0.0+] Size must be less than 0x18000000. |
| | | |
| == svcSetMemoryPermission == | | == svcSetMemoryPermission == |
Line 247: |
Line 247: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X0 || void* || <code>Addr</code> | + | | (In) X0 || void* || Addr |
| |- | | |- |
− | | (In) X1 || u64 || <code>Size</code> | + | | (In) X1 || u64 || Size |
| |- | | |- |
− | | (In) W2 || [[#Permission]] || <code>Prot</code> | + | | (In) W2 || [[#Permission]] || Prot |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 270: |
Line 270: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X0 || void* || <code>Addr</code> | + | | (In) X0 || void* || Addr |
| |- | | |- |
− | | (In) X1 || u64 || <code>Size</code> | + | | (In) X1 || u64 || Size |
| |- | | |- |
− | | (In) W2 || u32 || <code>State0</code> | + | | (In) W2 || u32 || State0 |
| |- | | |- |
− | | (In) W3 || u32 || <code>State1</code> | + | | (In) W3 || u32 || State1 |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 305: |
Line 305: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X0 || void* || <code>DstAddr</code> | + | | (In) X0 || void* || DstAddr |
| |- | | |- |
− | | (In) X1 || void* || <code>SrcAddr</code> | + | | (In) X1 || void* || SrcAddr |
| |- | | |- |
− | | (In) X2 || u64 || <code>Size</code> | + | | (In) X2 || u64 || Size |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 323: |
Line 323: |
| If dstaddr >= LowerTreshold, the dst-range is enforced to be within the process' "MapRegion". Code can get the range of this region from [[#svcGetInfo]] id0=2,3. | | If dstaddr >= LowerTreshold, the dst-range is enforced to be within the process' "MapRegion". Code can get the range of this region from [[#svcGetInfo]] id0=2,3. |
| | | |
− | In this case, the mapped memory will have state <code>0x5C3C0B</code>. | + | In this case, the mapped memory will have state 0x5C3C0B. |
| | | |
− | As long as (dstaddr+size) < LowerThreshold, then you can map anywhere but the mapped memory will have state <code>0x482907</code> instead. | + | As long as (dstaddr+size) < LowerThreshold, then you can map anywhere but the mapped memory will have state 0x482907 instead. |
| | | |
| LowerTreshold is 0x80000000 for 36-bit address spaces, and 0x40000000 for 32-bit ones. | | LowerTreshold is 0x80000000 for 36-bit address spaces, and 0x40000000 for 32-bit ones. |
| | | |
− | [2.0.0+] Support for the <code>0x482907</code> mappings outside the "MapRegion" were removed. | + | [2.0.0+] Support for the 0x482907 mappings outside the "MapRegion" were removed. |
| | | |
| == svcUnmapMemory == | | == svcUnmapMemory == |
Line 338: |
Line 338: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X0 || void* || <code>DstAddr</code> | + | | (In) X0 || void* || DstAddr |
| |- | | |- |
− | | (In) X1 || void* || <code>SrcAddr</code> | + | | (In) X1 || void* || SrcAddr |
| |- | | |- |
− | | (In) X2 || u64 || <code>Size</code> | + | | (In) X2 || u64 || Size |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 361: |
Line 361: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X0 || [[#MemoryInfo]]* || <code>MemInfo</code> | + | | (In) X0 || [[#MemoryInfo]]* || MemInfo |
| |- | | |- |
− | | (In) X2 || void* || <code>Addr</code> | + | | (In) X2 || void* || Addr |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |- | | |- |
− | | (Out) W1 || PageInfo || <code>PageInfo</code> | + | | (Out) W1 || PageInfo || PageInfo |
| |} | | |} |
| </div> | | </div> |
Line 397: |
Line 397: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X1 || void(*)(void*) || <code>Entry</code> | + | | (In) X1 || void(*)(void*) || Entry |
| |- | | |- |
− | | (In) X2 || void* || <code>Arg</code> | + | | (In) X2 || void* || Arg |
| |- | | |- |
− | | (In) X3 || void* || <code>StackTop</code> | + | | (In) X3 || void* || StackTop |
| |- | | |- |
− | | (In) W4 || u32 || <code>Priority</code> | + | | (In) W4 || u32 || Priority |
| |- | | |- |
− | | (In) W5 || u32 || <code>ProcessorId</code> | + | | (In) W5 || u32 || ProcessorId |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |- | | |- |
− | | (Out) W1 || Handle<Thread> || <code>Handle</code> | + | | (Out) W1 || Handle<Thread> || Handle |
| |} | | |} |
| </div> | | </div> |
Line 424: |
Line 424: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W0 || Handle<Thread> || <code>Handle</code> | + | | (In) W0 || Handle<Thread> || Handle |
| |- | | |- |
| | (Out) None || || | | | (Out) None || || |
Line 454: |
Line 454: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X1 || u64 || <code>Nano</code> | + | | (In) X1 || u64 || Nano |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 471: |
Line 471: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W1|| Handle<Thread> || <code>Handle</code> | + | | (In) W1|| Handle<Thread> || Handle |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |- | | |- |
− | | (Out) W1 || u64 || <code>Priority</code> | + | | (Out) W1 || u64 || Priority |
| |} | | |} |
| </div> | | </div> |
Line 488: |
Line 488: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W0|| Handle<Thread> || <code>Handle</code> | + | | (In) W0|| Handle<Thread> || Handle |
| |- | | |- |
− | | (In) W1|| u32 || <code>Priority</code> | + | | (In) W1|| u32 || Priority |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 507: |
Line 507: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W2 || Handle<Thread> || <code>Handle</code> | + | | (In) W2 || Handle<Thread> || Handle |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |- | | |- |
− | | (Out) W1 || u32 || <code>Out0</code> | + | | (Out) W1 || u32 || Out0 |
| |- | | |- |
− | | (Out) X2 || u64 || <code>Out1</code> | + | | (Out) X2 || u64 || Out1 |
| |} | | |} |
| </div> | | </div> |
Line 526: |
Line 526: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W0 || Handle<Thread> || <code>Handle</code> | + | | (In) W0 || Handle<Thread> || Handle |
| |- | | |- |
− | | (In) W1 || u32 || <code>In0</code> | + | | (In) W1 || u32 || In0 |
| |- | | |- |
− | | (In) X2 || u64 || <code>In1</code> | + | | (In) X2 || u64 || In1 |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 547: |
Line 547: |
| | (In) None || || | | | (In) None || || |
| |- | | |- |
− | | (Out) W0/X0 || u64 || <code>CpuId</code> | + | | (Out) W0/X0 || u64 || CpuId |
| |} | | |} |
| </div> | | </div> |
Line 562: |
Line 562: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W0 || Handle<SharedMemory> || <code>MemHandle</code> | + | | (In) W0 || Handle<SharedMemory> || MemHandle |
| |- | | |- |
− | | (In) X1 || void* || <code>Addr</code> | + | | (In) X1 || void* || Addr |
| |- | | |- |
− | | (In) X2 || u64 || <code>Size</code> | + | | (In) X2 || u64 || Size |
| |- | | |- |
− | | (In) W3 || [[#Permission]] || <code>Permissions</code> | + | | (In) W3 || [[#Permission]] || Permissions |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 585: |
Line 585: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X1 || void* || <code>Addr</code> | + | | (In) X1 || void* || Addr |
| |- | | |- |
− | | (In) X2 || u64 || <code>Size</code> | + | | (In) X2 || u64 || Size |
| |- | | |- |
− | | (In) W3 || [[#Permission]] || <code>Permissions</code> | + | | (In) W3 || [[#Permission]] || Permissions |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |- | | |- |
− | | (Out) W1 || Handle<TransferMemory> || <code>Handle</code> | + | | (Out) W1 || Handle<TransferMemory> || Handle |
| |} | | |} |
| </div> | | </div> |
Line 610: |
Line 610: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X1 || Handle* || <code>HandlesPtr</code> | + | | (In) X1 || Handle* || HandlesPtr |
| |- | | |- |
− | | (In) W2 || u64 || <code>HandlesNum</code> | + | | (In) W2 || u64 || HandlesNum |
| |- | | |- |
− | | (In) X3 || u64 || <code>Timeout</code> | + | | (In) X3 || u64 || Timeout |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |- | | |- |
− | | (Out) W1 || u64 || <code>HandleIndex</code> | + | | (Out) W1 || u64 || HandleIndex |
| |} | | |} |
| </div> | | </div> |
Line 647: |
Line 647: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X0 || void* || <code>CmdPtr</code> | + | | (In) X0 || void* || CmdPtr |
| |- | | |- |
− | | (In) X1 || u64 || <code>Size</code> | + | | (In) X1 || u64 || Size |
| |- | | |- |
− | | (In) W2 || Handle<Session> || <code>Handle</code> | + | | (In) W2 || Handle<Session> || Handle |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 670: |
Line 670: |
| | (In) X1 || u64 || | | | (In) X1 || u64 || |
| |- | | |- |
− | | (In) X2 || u64 || <code>Info</code> | + | | (In) X2 || u64 || Info |
| |- | | |- |
− | | (Out) ? || ? || <code>?</code> | + | | (Out) ? || ? || ? |
| |} | | |} |
| </div> | | </div> |
Line 685: |
Line 685: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X1 || u64 || <code>InfoId</code> | + | | (In) X1 || u64 || InfoId |
| |- | | |- |
− | | (In) W2 || Handle || <code>Handle</code> | + | | (In) W2 || Handle || Handle |
| |- | | |- |
− | | (In) X3 || u64 || <code>InfoSubId</code> | + | | (In) X3 || u64 || InfoSubId |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |- | | |- |
− | | (Out) X1 || u64 || <code>Out</code> | + | | (Out) X1 || u64 || Out |
| |} | | |} |
| </div> | | </div> |
Line 759: |
Line 759: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W1 || Handle<Port> || <code>Port</code> | + | | (In) W1 || Handle<Port> || Port |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Result</code> | + | | (Out) W0 || [[#Result]] || Result |
| |- | | |- |
− | | (Out) W1 || Handle<ServerSession> || <code>Session</code> | + | | (Out) W1 || Handle<ServerSession> || Session |
| |} | | |} |
| </div> | | </div> |
Line 778: |
Line 778: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W1 || *Handle<Port or ServerSession> || <code>Handles</code> | + | | (In) W1 || *Handle<Port or ServerSession> || Handles |
| |- | | |- |
− | | (In) W2 || u32 || <code>NumHandles</code> | + | | (In) W2 || u32 || NumHandles |
| |- | | |- |
− | | (In) W3 || Handle<ServerSession> || <code>ReplyTarget</code> | + | | (In) W3 || Handle<ServerSession> || ReplyTarget |
| |- | | |- |
− | | (In) X4 || u64 (nanoseconds) || <code>Timeout</code> | + | | (In) X4 || u64 (nanoseconds) || Timeout |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Result</code> | + | | (Out) W0 || [[#Result]] || Result |
| |- | | |- |
− | | (Out) W1 || u32 || <code>HandleIndex</code> | + | | (Out) W1 || u32 || HandleIndex |
| |} | | |} |
| </div> | | </div> |
| | | |
− | If <code>ReplyTarget</code> is not zero, a reply from the TLS will be sent to that session. | + | If ReplyTarget is not zero, a reply from the TLS will be sent to that session. |
| Then it will wait until either of the passed sessions has an incoming message, is closed, a passed port has an incoming connection, or the timeout expires. | | Then it will wait until either of the passed sessions has an incoming message, is closed, a passed port has an incoming connection, or the timeout expires. |
| If there is an incoming message, it is copied to the TLS. | | If there is an incoming message, it is copied to the TLS. |
Line 800: |
Line 800: |
| === Result codes === | | === Result codes === |
| | | |
− | '''0x0:''' Success. Either a session has an incoming message or a port has an incoming connection. <code>HandleIndex</code> is set appropriately. | + | '''0x0:''' Success. Either a session has an incoming message or a port has an incoming connection. HandleIndex is set appropriately. |
| | | |
− | '''0xea01:''' Timeout. No handles were signalled before the timeout expired. <code>HandleIndex</code> is not updated. | + | '''0xea01:''' Timeout. No handles were signalled before the timeout expired. HandleIndex is not updated. |
| | | |
− | '''0xf601:''' Port remote dead. One of the sessions has been closed. <code>HandleIndex</code> is set appropriately. | + | '''0xf601:''' Port remote dead. One of the sessions has been closed. HandleIndex is set appropriately. |
| | | |
| == svcReadWriteRegister == | | == svcReadWriteRegister == |
Line 813: |
Line 813: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X1 || u64 || <code>RegAddr</code> | + | | (In) X1 || u64 || RegAddr |
| |- | | |- |
− | | (In) W2 || u64 || <code>RwMask</code> | + | | (In) W2 || u64 || RwMask |
| |- | | |- |
− | | (In) W3 || u64 || <code>InValue</code> | + | | (In) W3 || u64 || InValue |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |- | | |- |
− | | (Out) W1|| u64 || <code>OutValue</code> | + | | (Out) W1|| u64 || OutValue |
| |} | | |} |
| </div> | | </div> |
Line 834: |
Line 834: |
| | | |
| The whitelist is: | | The whitelist is: |
− | <code>
| + | |
| 0x054, 0x090, 0x094, 0x098, 0x09c, 0x0a0, 0x0a4, 0x0a8, 0x0ac, 0x0b0, 0x0b4, 0x0b8, 0x0bc, 0x0c0, 0x0c4, 0x0c8, 0x0d0, 0x0d4, 0x0d8, 0x0dc, 0x0e0, 0x100, 0x108, 0x10c, 0x118, 0x11c, 0x124, 0x128, 0x12c, 0x130, 0x134, 0x138, 0x13c, 0x158, 0x15c, 0x164, 0x168, 0x16c, 0x170, 0x174, 0x178, 0x17c, 0x200, 0x204, 0x2e4, 0x2e8, 0x2ec, 0x2f4, 0x2f8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37c, 0x380, 0x390, 0x394, 0x398, 0x3ac, 0x3b8, 0x3bc, 0x3c0, 0x3c4, 0x3d8, 0x3e8, 0x41c, 0x420, 0x424, 0x428, 0x42c, 0x430, 0x44c, 0x47c, 0x480, 0x484, 0x50c, 0x554, 0x558, 0x55c, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69c, 0x6a0, 0x6a4, 0x6c0, 0x6c4, 0x6f0, 0x6f4, 0x960, 0x970, 0x974, 0xa20, 0xa24, 0xb88, 0xb8c, 0xbc4, 0xbc8, 0xbcc, 0xbd0, 0xbd4, 0xbd8, 0xbdc, 0xbe0, 0xbe4, 0xbe8, 0xbec, 0xc00, 0xc5c, 0xcac | | 0x054, 0x090, 0x094, 0x098, 0x09c, 0x0a0, 0x0a4, 0x0a8, 0x0ac, 0x0b0, 0x0b4, 0x0b8, 0x0bc, 0x0c0, 0x0c4, 0x0c8, 0x0d0, 0x0d4, 0x0d8, 0x0dc, 0x0e0, 0x100, 0x108, 0x10c, 0x118, 0x11c, 0x124, 0x128, 0x12c, 0x130, 0x134, 0x138, 0x13c, 0x158, 0x15c, 0x164, 0x168, 0x16c, 0x170, 0x174, 0x178, 0x17c, 0x200, 0x204, 0x2e4, 0x2e8, 0x2ec, 0x2f4, 0x2f8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37c, 0x380, 0x390, 0x394, 0x398, 0x3ac, 0x3b8, 0x3bc, 0x3c0, 0x3c4, 0x3d8, 0x3e8, 0x41c, 0x420, 0x424, 0x428, 0x42c, 0x430, 0x44c, 0x47c, 0x480, 0x484, 0x50c, 0x554, 0x558, 0x55c, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69c, 0x6a0, 0x6a4, 0x6c0, 0x6c4, 0x6f0, 0x6f4, 0x960, 0x970, 0x974, 0xa20, 0xa24, 0xb88, 0xb8c, 0xbc4, 0xbc8, 0xbcc, 0xbd0, 0xbd4, 0xbd8, 0xbdc, 0xbe0, 0xbe4, 0xbe8, 0xbec, 0xc00, 0xc5c, 0xcac |
− | </code>
| |
| | | |
− | [2.0.0+] Whitelist was extended with <code>0x4c4, 0x4c8, 0x4cc, 0x584, 0x588, 0x58c.</code> | + | |
| + | [2.0.0+] Whitelist was extended with 0x4c4, 0x4c8, 0x4cc, 0x584, 0x588, 0x58c. |
| | | |
| [2.0.0+] The IO registers in range 0x7000E400 (PMC) size 0xC00 skip the whitelist, and do a TrustZone call using [[SMC]] Id1 0xC3000008(ReadWriteRegister). | | [2.0.0+] The IO registers in range 0x7000E400 (PMC) size 0xC00 skip the whitelist, and do a TrustZone call using [[SMC]] Id1 0xC3000008(ReadWriteRegister). |
| | | |
| Here is the whitelist imposed by that SMC, relative to the start of the PMC registers: | | Here is the whitelist imposed by that SMC, relative to the start of the PMC registers: |
− | <code>
| + | |
| 0x000, 0x00c, 0x010, 0x014, 0x01c, 0x020, 0x02c, 0x030, 0x034, 0x038, 0x03c, 0x040, 0x044, 0x048, 0x0dc, 0x0e0, 0x0e4, 0x160, 0x164, 0x168, 0x170, 0x1a8, 0x1b8, 0x1bc, 0x1c0, 0x1c4, 0x1c8, 0x2b4, 0x2d4, 0x440, 0x4d8 | | 0x000, 0x00c, 0x010, 0x014, 0x01c, 0x020, 0x02c, 0x030, 0x034, 0x038, 0x03c, 0x040, 0x044, 0x048, 0x0dc, 0x0e0, 0x0e4, 0x160, 0x164, 0x168, 0x170, 0x1a8, 0x1b8, 0x1bc, 0x1c0, 0x1c4, 0x1c8, 0x2b4, 0x2d4, 0x440, 0x4d8 |
− | </code>
| + | |
| | | |
| == svcCreateSharedMemory == | | == svcCreateSharedMemory == |
Line 854: |
Line 854: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W1 || u64 || <code>Size</code> | + | | (In) W1 || u64 || Size |
| |- | | |- |
− | | (In) W2 || [[#Permission]] || <code>LocalPerm</code> | + | | (In) W2 || [[#Permission]] || LocalPerm |
| |- | | |- |
− | | (In) W3 || [[#Permission]] || <code>RemotePerm</code> | + | | (In) W3 || [[#Permission]] || RemotePerm |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |- | | |- |
− | | (Out) W1 || Handle<SharedMemory> || <code>MemHandle</code> | + | | (Out) W1 || Handle<SharedMemory> || MemHandle |
| |} | | |} |
| </div> | | </div> |
Line 875: |
Line 875: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X0 || Handle<TransferMemory> || <code>MemHandle</code> | + | | (In) X0 || Handle<TransferMemory> || MemHandle |
| |- | | |- |
− | | (In) X1 || void* || <code>Addr</code> | + | | (In) X1 || void* || Addr |
| |- | | |- |
− | | (In) X2 || u64 || <code>Size</code> | + | | (In) X2 || u64 || Size |
| |- | | |- |
− | | (In) W3 || [[#Permission]] || <code>Permissions</code> | + | | (In) W3 || [[#Permission]] || Permissions |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 898: |
Line 898: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X0 || Handle<TransferMemory> || <code>MemHandle</code> | + | | (In) X0 || Handle<TransferMemory> || MemHandle |
| |- | | |- |
− | | (In) X1 || void* || <code>Addr</code> | + | | (In) X1 || void* || Addr |
| |- | | |- |
− | | (In) X2 || u64 || <code>Size</code> | + | | (In) X2 || u64 || Size |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 917: |
Line 917: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X1 || u64 || <code>Addr</code> | + | | (In) X1 || u64 || Addr |
| |- | | |- |
− | | (Out) W0 || [[#Result]]|| <code>Ret</code> | + | | (Out) W0 || [[#Result]]|| Ret |
| |- | | |- |
− | | (Out) X1 || u64 || <code>PhysAddr</code> | + | | (Out) X1 || u64 || PhysAddr |
| |- | | |- |
− | | (Out) X2 || u64 || <code>KernelAddr</code> | + | | (Out) X2 || u64 || KernelAddr |
| |- | | |- |
− | | (Out) X3 || u64 || <code>Size</code> | + | | (Out) X3 || u64 || Size |
| |} | | |} |
| </div> | | </div> |
Line 936: |
Line 936: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X1 || u64 || <code>PhysAddr</code> | + | | (In) X1 || u64 || PhysAddr |
| |- | | |- |
− | | (In) X2 || u64 || <code>Size</code> | + | | (In) X2 || u64 || Size |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |- | | |- |
− | | (Out) X1 || void* || <code>VirtAddr</code> | + | | (Out) X1 || void* || VirtAddr |
| |} | | |} |
| </div> | | </div> |
Line 955: |
Line 955: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X1 || u64 || <code>StartAddr</code> | + | | (In) X1 || u64 || StartAddr |
| |- | | |- |
− | | (In) X2 || u64 || <code>EndAddr</code> | + | | (In) X2 || u64 || EndAddr |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |- | | |- |
− | | (Out) W1 || Handle<DeviceAddressSpace> || <code>AddressSpaceHandle</code> | + | | (Out) W1 || Handle<DeviceAddressSpace> || AddressSpaceHandle |
| |} | | |} |
| </div> | | </div> |
Line 976: |
Line 976: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W0 || [[#DeviceName]] || <code>DeviceId</code> | + | | (In) W0 || [[#DeviceName]] || DeviceId |
| |- | | |- |
− | | (In) X1 || Handle<DeviceAddressSpace> || <code>DeviceAsHandle</code> | + | | (In) X1 || Handle<DeviceAddressSpace> || DeviceAsHandle |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 993: |
Line 993: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W0 || [[#DeviceName]] || <code>DeviceId</code> | + | | (In) W0 || [[#DeviceName]] || DeviceId |
| |- | | |- |
− | | (In) X1 || Handle<DeviceAddressSpace> || <code>DeviceAsHandle</code> | + | | (In) X1 || Handle<DeviceAddressSpace> || DeviceAsHandle |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 1,010: |
Line 1,010: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W0 || Handle<DeviceAddressSpace> || <code>DeviceAsHandle</code> | + | | (In) W0 || Handle<DeviceAddressSpace> || DeviceAsHandle |
| |- | | |- |
− | | (In) W1 || Handle<Process> || <code>ProcessHandle</code> | + | | (In) W1 || Handle<Process> || ProcessHandle |
| |- | | |- |
− | | (In) X2 || void* || <code>SrcAddr</code> | + | | (In) X2 || void* || SrcAddr |
| |- | | |- |
− | | (In) X3 || u64 || <code>DeviceAsSize</code> | + | | (In) X3 || u64 || DeviceAsSize |
| |- | | |- |
− | | (In) X4 || u64 || <code>DeviceAsAddr</code> | + | | (In) X4 || u64 || DeviceAsAddr |
| |- | | |- |
− | | (In) W5 || [[#Permission]] || <code>Permissions</code> | + | | (In) W5 || [[#Permission]] || Permissions |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 1,039: |
Line 1,039: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W0 || Handle<DeviceAddressSpace> || <code>DeviceAsHandle</code> | + | | (In) W0 || Handle<DeviceAddressSpace> || DeviceAsHandle |
| |- | | |- |
− | | (In) W1 || Handle<Process> || <code>ProcessHandle</code> | + | | (In) W1 || Handle<Process> || ProcessHandle |
| |- | | |- |
− | | (In) X2 || void* || <code>SrcAddr</code> | + | | (In) X2 || void* || SrcAddr |
| |- | | |- |
− | | (In) X3 || u64 || <code>DeviceAsSize</code> | + | | (In) X3 || u64 || DeviceAsSize |
| |- | | |- |
− | | (In) X4 || u64 || <code>DeviceAsAddr</code> | + | | (In) X4 || u64 || DeviceAsAddr |
| |- | | |- |
− | | (In) W5 || [[#Permission]] || <code>Permissions</code> | + | | (In) W5 || [[#Permission]] || Permissions |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 1,066: |
Line 1,066: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W0 || Handle<DeviceAddressSpace> || <code>DeviceAsHandle</code> | + | | (In) W0 || Handle<DeviceAddressSpace> || DeviceAsHandle |
| |- | | |- |
− | | (In) W1 || Handle<Process> || <code>ProcessHandle</code> | + | | (In) W1 || Handle<Process> || ProcessHandle |
| |- | | |- |
− | | (In) X2 || void* || <code>SrcAddr</code> | + | | (In) X2 || void* || SrcAddr |
| |- | | |- |
− | | (In) X3 || u64 || <code>DeviceAsSize</code> | + | | (In) X3 || u64 || DeviceAsSize |
| |- | | |- |
− | | (In) X4 || u64 || <code>DeviceAsAddr</code> | + | | (In) X4 || u64 || DeviceAsAddr |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 1,089: |
Line 1,089: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X0 || u64 || <code>SrcAddr</code> | + | | (In) X0 || u64 || SrcAddr |
| |- | | |- |
− | | (In) W1 || u64 || <code>ProcessHandle</code> | + | | (In) W1 || u64 || ProcessHandle |
| |- | | |- |
− | | (In) X2 || void* || <code>DstAddr</code> | + | | (In) X2 || void* || DstAddr |
| |- | | |- |
− | | (In) X3 || u64 || <code>Size</code> | + | | (In) X3 || u64 || Size |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 1,112: |
Line 1,112: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W0 || Handle<Process> || <code>ProcessHandle</code> | + | | (In) W0 || Handle<Process> || ProcessHandle |
| |- | | |- |
− | | (In) X1 || void* || <code>DstAddr</code> | + | | (In) X1 || void* || DstAddr |
| |- | | |- |
− | | (In) X2 || u64 || <code>SrcAddr</code> | + | | (In) X2 || u64 || SrcAddr |
| |- | | |- |
− | | (In) X3 || u64 || <code>Size</code> | + | | (In) X3 || u64 || Size |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 1,133: |
Line 1,133: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X0 || [[#MemoryInfo]]* || <code>MemInfoPtr</code> | + | | (In) X0 || [[#MemoryInfo]]* || MemInfoPtr |
| |- | | |- |
− | | (In) W2 || Handle<Process> || <code>ProcessHandle</code> | + | | (In) W2 || Handle<Process> || ProcessHandle |
| |- | | |- |
− | | (In) X3 || u64 || <code>Addr</code> | + | | (In) X3 || u64 || Addr |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |- | | |- |
− | | (Out) W1 || PageInfo || <code>PageInfo</code> | + | | (Out) W1 || PageInfo || PageInfo |
| |} | | |} |
| </div> | | </div> |
Line 1,154: |
Line 1,154: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W0 || Handle<Process> || <code>ProcessHandle</code> | + | | (In) W0 || Handle<Process> || ProcessHandle |
| |- | | |- |
− | | (In) X1 || u64 || <code>DstAddr</code> | + | | (In) X1 || u64 || DstAddr |
| |- | | |- |
− | | (In) X2 || u64 || <code>SrcAddr</code> | + | | (In) X2 || u64 || SrcAddr |
| |- | | |- |
− | | (In) X3 || u64 || <code>Size</code> | + | | (In) X3 || u64 || Size |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 1,175: |
Line 1,175: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W0 || Handle<Process> || <code>ProcessHandle</code> | + | | (In) W0 || Handle<Process> || ProcessHandle |
| |- | | |- |
− | | (In) X1 || u64 || <code>DstAddr</code> | + | | (In) X1 || u64 || DstAddr |
| |- | | |- |
− | | (In) X2 || u64 || <code>Src Addr</code> | + | | (In) X2 || u64 || Src Addr |
| |- | | |- |
− | | (In) X3 || u64 || <code>Size</code> | + | | (In) X3 || u64 || Size |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |} | | |} |
| </div> | | </div> |
Line 1,196: |
Line 1,196: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) X1 || [[#CreateProcessInfo]]* || <code>InfoPtr</code> | + | | (In) X1 || [[#CreateProcessInfo]]* || InfoPtr |
| |- | | |- |
− | | (In) X2 || u64 || <code>CapabilitiesPtr</code> | + | | (In) X2 || u64 || CapabilitiesPtr |
| |- | | |- |
− | | (In) X3 || u64 || <code>CapibilitiesNum</code> | + | | (In) X3 || u64 || CapibilitiesNum |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |- | | |- |
− | | (Out) W1 || Handle<Process> || <code>ProcessHandle</code> | + | | (Out) W1 || Handle<Process> || ProcessHandle |
| |} | | |} |
| </div> | | </div> |
Line 1,217: |
Line 1,217: |
| ! Argument || Type || Name | | ! Argument || Type || Name |
| |- | | |- |
− | | (In) W0 || Handle<Process> || <code>ProcessHandle</code> | + | | (In) W0 || Handle<Process> || ProcessHandle |
| |- | | |- |
− | | (Out) W0 || [[#Result]] || <code>Ret</code> | + | | (Out) W0 || [[#Result]] || Ret |
| |- | | |- |
− | | (Out) W1 || [[#ProcessState]] || <code>State</code> | + | | (Out) W1 || [[#ProcessState]] || State |
| |} | | |} |
| </div> | | </div> |
Line 1,508: |
Line 1,508: |
| ! Value || Type || Meaning | | ! Value || Type || Meaning |
| |- | | |- |
− | | <code>0x00000000</code> || MemoryType_Unmapped || | + | | 0x00000000 || MemoryType_Unmapped || |
| |- | | |- |
− | | <code>0x00002001</code> || MemoryType_Io || Mapped by kernel capability parsing in [[#svcCreateProcess]]. | + | | 0x00002001 || MemoryType_Io || Mapped by kernel capability parsing in [[#svcCreateProcess]]. |
| |- | | |- |
− | | <code>0x00042002</code> || MemoryType_Normal || Mapped by kernel capability parsing in [[#svcCreateProcess]]. | + | | 0x00042002 || MemoryType_Normal || Mapped by kernel capability parsing in [[#svcCreateProcess]]. |
| |- | | |- |
− | | <code>0x00DC7E03</code> || MemoryType_CodeStatic || Mapped during [[#svcCreateProcess]]. | + | | 0x00DC7E03 || MemoryType_CodeStatic || Mapped during [[#svcCreateProcess]]. |
| |- | | |- |
− | | <code>0x01FEBD04</code> || MemoryType_CodeMutable || Transition from 0xDC7E03 performed by [[#svcSetProcessMemoryPermission]]. | + | | 0x01FEBD04 || MemoryType_CodeMutable || Transition from 0xDC7E03 performed by [[#svcSetProcessMemoryPermission]]. |
| |- | | |- |
− | | <code>0x017EBD05</code> || MemoryType_Heap || Mapped using [[#svcSetHeapSize]]. | + | | 0x017EBD05 || MemoryType_Heap || Mapped using [[#svcSetHeapSize]]. |
| |- | | |- |
− | | <code>0x00402006</code> || MemoryType_SharedMemory || Mapped using [[#svcMapSharedMemory]]. | + | | 0x00402006 || MemoryType_SharedMemory || Mapped using [[#svcMapSharedMemory]]. |
| |- | | |- |
− | | <code>0x00482907</code> || [1.0.0] MemoryType_WeirdSharedMemory || Mapped using [[#svcMapMemory]]. | + | | 0x00482907 || [1.0.0] MemoryType_WeirdSharedMemory || Mapped using [[#svcMapMemory]]. |
| |- | | |- |
− | | <code>0x00DD7E08</code> || MemoryType_ModuleCodeStatic || Mapped using [[#svcMapProcessCodeMemory]]. | + | | 0x00DD7E08 || MemoryType_ModuleCodeStatic || Mapped using [[#svcMapProcessCodeMemory]]. |
| |- | | |- |
− | | <code>0x01FFBD09</code> || MemoryType_ModuleCodeMutable || Transition from 0xDD7E08 performed by [[#svcSetProcessMemoryPermission]]. | + | | 0x01FFBD09 || MemoryType_ModuleCodeMutable || Transition from 0xDD7E08 performed by [[#svcSetProcessMemoryPermission]]. |
| |- | | |- |
− | | <code>0x005C3C0A</code> || [[IPC_Marshalling|MemoryType_IpcBuffer0]] || IPC buffers with descriptor flags=0. | + | | 0x005C3C0A || [[IPC_Marshalling|MemoryType_IpcBuffer0]] || IPC buffers with descriptor flags=0. |
| |- | | |- |
− | | <code>0x005C3C0B</code> || MemoryType_MappedMemory || Mapped using [[#svcMapMemory]]. | + | | 0x005C3C0B || MemoryType_MappedMemory || Mapped using [[#svcMapMemory]]. |
| |- | | |- |
− | | <code>0x0040200C</code> || [[Thread Local Storage|MemoryType_ThreadLocal]] || Mapped during [[#svcCreateThread]]. | + | | 0x0040200C || [[Thread Local Storage|MemoryType_ThreadLocal]] || Mapped during [[#svcCreateThread]]. |
| |- | | |- |
− | | <code>0x015C3C0D</code> || MemoryType_TransferMemoryIsolated || Mapped using [[#svcMapTransferMemory]] when the owning process has perm=0. | + | | 0x015C3C0D || MemoryType_TransferMemoryIsolated || Mapped using [[#svcMapTransferMemory]] when the owning process has perm=0. |
| |- | | |- |
− | | <code>0x005C380E</code> || MemoryType_TransferMemory || Mapped using [[#svcMapTransferMemory]] when the owning process has perm!=0. | + | | 0x005C380E || MemoryType_TransferMemory || Mapped using [[#svcMapTransferMemory]] when the owning process has perm!=0. |
| |- | | |- |
− | | <code>0x0040380F</code> || MemoryType_ProcessMemory || Mapped using [[#svcMapProcessMemory]]. | + | | 0x0040380F || MemoryType_ProcessMemory || Mapped using [[#svcMapProcessMemory]]. |
| |- | | |- |
− | | <code>0x00000010</code> || MemoryType_Reserved || | + | | 0x00000010 || MemoryType_Reserved || |
| |- | | |- |
− | | <code>0x005C3811</code> || [[IPC_Marshalling|MemoryType_IpcBuffer1]] || IPC buffers with descriptor flags=1. | + | | 0x005C3811 || [[IPC_Marshalling|MemoryType_IpcBuffer1]] || IPC buffers with descriptor flags=1. |
| |- | | |- |
− | | <code>0x004C2812</code> || [[IPC_Marshalling|MemoryType_IpcBuffer3]] || IPC buffers with descriptor flags=3. | + | | 0x004C2812 || [[IPC_Marshalling|MemoryType_IpcBuffer3]] || IPC buffers with descriptor flags=3. |
| |- | | |- |
− | | <code>0x00002013</code> || MemoryType_KernelStack || Mapped in kernel during [[#svcCreateThread]]. | + | | 0x00002013 || MemoryType_KernelStack || Mapped in kernel during [[#svcCreateThread]]. |
| |} | | |} |
| | | |