l4_ipc_call -- usual blocking rpc

1 Synopsis

#include <l4/sys/ipc.h>

static inline int
l4_ipc_call(l4_threadid_t dest , const void *snd_msg , l4_umword_t snd_dword0 , l4_umword_t snd_dword1 , void *rcv_msg , l4_umword_t *rcv_dword0 , l4_umword_t *rcv_dword1 l4_timeout_t timeout , l4_msgdope_t *result );

2 Description

snd_msg is sent to thread with id dest and the invoker waits for a reply from this thread. Messages from other sources are not accepted. Note that since the send/receive transition needs no time, the destination can reply with send timeout 0.

This operation can also be used for a server with one dedicated client. It sends the reply to the client and waits for the client's next order.

3 Arguments

dest
Thread id of the destination.
*snd_msg
Pointer to a Send Descriptor. It can contain the following values:

L4_IPC_NIL_DESCRIPTOR
Ipc does not include a send operation.
<mem>
Ipc includes sending a message to the destination specified by dest. *snd_msg must point to a valid message. The first two 32-bit words of the message have to be given separately in snd_dword0 and snd_dword1.
0
Ipc includes sending a message to the destination specified by dest. The message consists solely of the two 32-bit words snd_dword0 and snd_dword1.
snd_dword0
The first dword to be transmitted.
snd_dword1
The second dword to be transmitted.
*rcv_msg
Pointer to Receive Descriptor. It can contain the following values:

L4_IPC_NIL_DESCRIPTOR
Ipc does not include a receive operation.
0
Only messages up to two 32-bit words and are accepted. The received message is returned in rcv_dword0 and rcv_dword1.
<mem>
If Bit 1 of *rcv_msg is 0 ipc includes receiving a message respectively waiting to receive a message. *rcv_msg must point to a valid message. Note that the first two 32-bit words of the received message are returned in rcv_dword0 and rcv_dword1.
<rmap>
If Bit 1 of *rcv_msg is 1 only send-fpage messages or up to two 32-bit words (in rcv_dword0 and rcv_dword1) are accepted. If a map message is received, the 30 most significant bits describe the receive fpage (instead of rcvfpage option in a memory message buffer). Thus fpages can also be received without a message buffer in memory.
*rcv_dword0
First of two 32-bit words of received message, undefined if no message was received.
*rcv_dword1
Second of two 32-bit words of received message, undefined if no message was received.
timeout
This 32-bit word specifies all 4 timeouts, the quadruple (snd, rcv, snd pf, rcv pf). For a detailed description see the L4 Reference Manual.
result
The message dope describing the result of the Ipc.

4 Return Values

The following return values are possible:

0
No error occured. The optional send operation was successful, and if a receive operation was also specified, a message was also received correctly.
L4_IPC_ENOT_EXISTENT
Non-existing destination or source.
L4_IPC_RETIMEOUT
Timeout during receive operation.
L4_IPC_SETIMEOUT
Timeout during send operation.
L4_IPC_RECANCELED
Receive operation cancelled by another thread.
L4_IPC_SECANCELED
Send operation cancelled by another thread.
L4_IPC_REMAPFAILED
Map failed due to a shortage of page tables during receive operation.
L4_IPC_SEMAPFAILED
Map failed due to a shortage of page tables during send operation.
L4_IPC_RESNDPFTO
Send pagefault timeout.
L4_IPC_SERCVPFTO
Receive pagefault timeout.
L4_IPC_REABORTED
Receive operation aborted by another thread.
L4_IPC_SEABORTED
Send operation aborted by another thread.
L4_IPC_REMSGCUT
Received message cut. Potential reasons are:

(a)
The recipient's mword buffer is too small.
(b)
The recipient does not accept enough strings.
(c)
At least one of the recipient's string buffers is too small.

5 See Also

l4_ipc , l4_ipc_receive , l4_ipc_reply_and_wait , l4_ipc_reply_deceiting_and_wait , l4_ipc_send , l4_ipc_send_deceiting , l4_ipc_wait
Ich