SVC: Difference between revisions
Misson20000 (talk | contribs)  Add svcAcceptSession info  | 
				Misson20000 (talk | contribs)  Add svcReplyAndReceive info  | 
				||
| Line 113: | Line 113: | ||
| 0x42 || svcReplyAndReceiveLight || W0=light_session_handle || W0=result, W1,W2,W3,W4,W5,W6,W7=out  | | 0x42 || svcReplyAndReceiveLight || W0=light_session_handle || W0=result, W1,W2,W3,W4,W5,W6,W7=out  | ||
|-  | |-  | ||
| 0x43 || svcReplyAndReceive || X1=ptr_handles, W2=num_handles, X3=replytarget_handle(0=none), X4=timeout || W0=result, W1=handle_idx  | | 0x43 || [[#svcReplyAndReceive]] || X1=ptr_handles, W2=num_handles, X3=replytarget_handle(0=none), X4=timeout || W0=result, W1=handle_idx  | ||
|-  | |-  | ||
| 0x44 || svcReplyAndReceiveWithUserBuffer|| X1=buf, X2=sz, X3=ptr_handles, W4=num_handles, X5=replytarget_handle(0=none), X6=timeout || W0=result, W1=handle_idx  | | 0x44 || svcReplyAndReceiveWithUserBuffer|| X1=buf, X2=sz, X3=ptr_handles, W4=num_handles, X5=replytarget_handle(0=none), X6=timeout || W0=result, W1=handle_idx  | ||
| Line 770: | Line 770: | ||
'''0xf201:''' No session waiting to be accepted  | '''0xf201:''' No session waiting to be accepted  | ||
== svcReplyAndReceive ==  | |||
<div style="display: inline-block;">  | |||
{| class="wikitable" border="1"  | |||
|-  | |||
! Argument || Type || Name  | |||
|-  | |||
| (In) W1 || *Handle<Port or ServerSession> || <code>Handles</code>  | |||
|-  | |||
| (In) W2 || u32 || <code>NumHandles</code>  | |||
|-  | |||
| (In) W3 || Handle<ServerSession> || <code>ReplyTarget</code>  | |||
|-  | |||
| (In) X4 || u64 (nanoseconds) || <code>Timeout</code>  | |||
|-  | |||
| (Out) W0 || [[#Result]] || <code>Result</code>  | |||
|-  | |||
| (Out) W1 || u32 || <code>HandleIndex</code>  | |||
|}  | |||
</div>  | |||
If <code>ReplyTarget</code> 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.  | |||
If there is an incoming message, it is copied to the TLS.  | |||
After being validated, passed handles will be enumerated in order; even if a session has been closed, if one that appears earlier in the list has an incoming message, it will take priority and a result code of 0x0 will be returned.  | |||
=== Result codes ===  | |||
'''0x0:''' Success. Either a session has an incoming message or a port has an incoming connection. <code>HandleIndex</code> is set appropriately.  | |||
'''0xea01:''' Timeout. No handles were signalled before the timeout expired. <code>HandleIndex</code> is not updated.  | |||
'''0xf601:''' Port remote dead. One of the sessions has been closed. <code>HandleIndex</code> is set appropriately.  | |||
== svcReadWriteRegister ==  | == svcReadWriteRegister ==  | ||