Introduction   API Reference   Files   Index  

IPC
[L4 System Calls]

Inter Process Communication (IPC). More...

Defines

#define L4_IPC_IS_ERROR(x)
 Test if IPC error occurred.
#define L4_IPC_MSG_DECEITED(x)
 Test if received message was deceited by a chief task.
#define L4_IPC_MSG_REDIRECTED(x)
 Test if the message was redirected to a chief task.
#define L4_IPC_SRC_INSIDE(x)
 Test if the message comes from outside or inside the clan.
#define L4_IPC_SND_ERROR(x)
 Test if send operation failed.
#define L4_IPC_ERROR(x)
 Get IPC error from IPC result message dope.
#define L4_IPC_ENOT_EXISTENT   0x10
 Non-existing destination or source.
#define L4_IPC_RETIMEOUT   0x20
 Timeout during receive operation.
#define L4_IPC_SETIMEOUT   0x30
 Timeout during send operation.
#define L4_IPC_RECANCELED   0x40
 Receive operation canceled.
#define L4_IPC_SECANCELED   0x50
 Send operation canceled.
#define L4_IPC_REMAPFAILED   0x60
 Map flexpage failed in receive operation.
#define L4_IPC_SEMAPFAILED   0x70
 Map flexpage failed in send operation.
#define L4_IPC_RESNDPFTO   0x80
 Send-pagefault timeout in receive operation.
#define L4_IPC_SESNDPFTO   0x90
 Send-pagefault timeout in send operation.
#define L4_IPC_RERCVPFTO   0xA0
 Receive-pagefault timeout in receive operation.
#define L4_IPC_SERCVPFTO   0xB0
 Receive-pagefault timeout in send operation.
#define L4_IPC_REABORTED   0xC0
 Receive operation aborted.
#define L4_IPC_SEABORTED   0xD0
 Send operation aborted.
#define L4_IPC_REMSGCUT   0xE0
 Cut receive message (due to (a) message buffer is too small, (b) not enough strings are accepted, (c) at least one string buffer is too small).
#define L4_IPC_SEMSGCUT   0xF0
 Cut send message (due to (a) message buffer is too small, (b) not enough strings are accepted, (c) at least one string buffer is too small).

Functions

l4_timeout_t l4_ipc_timeout (unsigned snd_man, unsigned snd_exp, unsigned rcv_man, unsigned rcv_exp)
 Convert explicit timeout values to L4 type.
int l4_ipc_call_tag (l4_threadid_t dest, const void *snd_msg, l4_umword_t snd_dword0, l4_umword_t snd_dword1, l4_msgtag_t tag, void *rcv_msg, l4_umword_t *rcv_dword0, l4_umword_t *rcv_dword1, l4_timeout_t timeout, l4_msgdope_t *result, l4_msgtag_t *rtag)
 IPC Call, usual blocking RPC, tagged version.
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)
 IPC Call, usual blocking RPC.
int l4_ipc_reply_and_wait_tag (l4_threadid_t dest, const void *snd_msg, l4_umword_t snd_dword0, l4_umword_t snd_dword1, l4_msgtag_t tag, l4_threadid_t *src, void *rcv_msg, l4_umword_t *rcv_dword0, l4_umword_t *rcv_dword1, l4_timeout_t timeout, l4_msgdope_t *result, l4_msgtag_t *rtag)
 IPC reply and wait, send a reply to a client and wait for next message, tagged version.
int l4_ipc_reply_and_wait (l4_threadid_t dest, const void *snd_msg, l4_umword_t snd_dword0, l4_umword_t snd_dword1, l4_threadid_t *src, void *rcv_msg, l4_umword_t *rcv_dword0, l4_umword_t *rcv_dword1, l4_timeout_t timeout, l4_msgdope_t *result)
 IPC reply and wait, send a reply to a client and wait for next message.
int l4_ipc_wait_next_period (l4_threadid_t *src, void *rcv_msg, l4_umword_t *rcv_dword0, l4_umword_t *rcv_dword1, l4_timeout_t timeout, l4_msgdope_t *result)
 Wait for next period.
int l4_ipc_send_tag (l4_threadid_t dest, const void *snd_msg, l4_umword_t snd_dword0, l4_umword_t snd_dword1, l4_msgtag_t tag, l4_timeout_t timeout, l4_msgdope_t *result)
 IPC send, send a message to a thread, tagged version.
int l4_ipc_send (l4_threadid_t dest, const void *snd_msg, l4_umword_t snd_dword0, l4_umword_t snd_dword1, l4_timeout_t timeout, l4_msgdope_t *result)
 IPC send, send a message to a thread.
int l4_ipc_wait_tag (l4_threadid_t *src, void *rcv_msg, l4_umword_t *rcv_dword0, l4_umword_t *rcv_dword1, l4_timeout_t timeout, l4_msgdope_t *result, l4_msgtag_t *tag)
 IPC wait, wait for message from any source, tagged version.
int l4_ipc_wait (l4_threadid_t *src, void *rcv_msg, l4_umword_t *rcv_dword0, l4_umword_t *rcv_dword1, l4_timeout_t timeout, l4_msgdope_t *result)
 IPC wait, wait for message from any source.
int l4_ipc_receive_tag (l4_threadid_t src, void *rcv_msg, l4_umword_t *rcv_dword0, l4_umword_t *rcv_dword1, l4_timeout_t timeout, l4_msgdope_t *result, l4_msgtag_t *tag)
 IPC receive, wait for a message from a specified thread, tagged version.
int l4_ipc_receive (l4_threadid_t src, void *rcv_msg, l4_umword_t *rcv_dword0, l4_umword_t *rcv_dword1, l4_timeout_t timeout, l4_msgdope_t *result)
 IPC receive, wait for a message from a specified thread.
int l4_ipc_sleep (l4_timeout_t timeout)
 Sleep for an amount of time.
int l4_ipc_fpage_received (l4_msgdope_t msgdope)
 Check if received message contains flexpage.
int l4_ipc_is_fpage_granted (l4_fpage_t fp)
 Check if flexpage was granted.
int l4_ipc_is_fpage_writable (l4_fpage_t fp)
 Check if flexpage is writable.
long l4_is_rcv_map_descr (const void *msg)
 Return if message is fpage message.
long l4_is_long_rcv_descr (const void *msg)
 Return if receive message descriptor is a long IPC message descriptor.
long l4_is_long_snd_descr (const void *msg)
 Return if source message descriptor is a long IPC message descriptor.
const l4_msg_tl4_get_snd_msg_from_descr (const void *msg)
 Return message descriptor address from send message descriptor.
l4_msg_tl4_get_rcv_msg_from_descr (void *msg)
 Return message descriptor address from receive message descriptor.

Detailed Description

Inter Process Communication (IPC).

IPC in L4 is always synchronous and unbuffered: a message is transferred from the sender to the recipient if and only if the recipient has invoked a corresponding IPC operation. The sender blocks until this happens or a timeout specified by the sender elapsed without the destination becoming ready to receive.

IPC can be used to copy data as well as to map or grant flexpages from the sender to the recipient. There are two major flavors of IPC messages:

Short or register IPC

With short IPC only two dwords or a single flexpage can be transfered. The data is transfered using CPU registers, no memory reference is necessary.

Long or memory IPC

With long IPC up to 524288 (2^19) dwords and 32 memory buffers ("indirect strings") can be transfered. A valid message buffer looks as follows:

 struct msg_buffer
 {
   l4_fpage_t     rcv_fpage;   // flexpage receive window
   l4_msgdope_t   size;        // message size dope
   l4_msgdope_t   send;        // message send dope
   
   // message send flexpages (optional)
   l4_snd_fpage_t snd_fpage0;  
   ...
 
   // message dwords (optional)
   l4_umword_t    dword0;
   ...

   // message send/receive string descriptors (optional)
   l4_strdope_t   str0;
   ...
 }

The same message buffer can be used for both send and receive operations. Note that the first two dwords of the message (either the first send flexpage or the first two message dwords) are still transfered using CPU registers.

rcv_fpage
The flexpage describes the window to receive flexpages into. If no flexpage is specified (0), no flexpages can be received.
size
The size message dope describes the size of the entire message buffer. The number of dwords includes also the dwords used to describe send flexpages (two dwords per send flexpage). See also L4_IPC_DOPE(dwords, strings).
send
The send message dope describes the part of the message buffer which should be transfered in a send operation. It can contain only a subset of the message buffer described by size. Note that the string dopes of the indirect strings to be transfered must still begin at the position described by the message size dope. See also L4_IPC_DOPE(dwords, strings).
snd_fpage
Send flexpage descriptors to be transfered in a send operation. If flexpages should be transfered in a send operation (Bit 1 of the message descriptor address set to 1), L4 treats the first dwords of the message buffer as send flexpage descriptors until it finds an invalid descriptor (flexpage descriptor set to 0).
dword
Message dwords to send/receive.
str
Indirect strings to send/receive. A string dope describes both the source and receive address of the strings to send resp. to receive.

Define Documentation

#define L4_IPC_IS_ERROR (  ) 

Test if IPC error occurred.

Parameters:
x IPC result message dope
Returns:
!= 0 if error occurred, 0 if not

Definition at line 104 of file L4API-l4v2/ipc.h.

#define L4_IPC_MSG_DECEITED (  ) 

Test if received message was deceited by a chief task.

Parameters:
x IPC result message dope
Returns:
!= 0 if message was deceited, 0 if not

Definition at line 114 of file L4API-l4v2/ipc.h.

#define L4_IPC_MSG_REDIRECTED (  ) 

Test if the message was redirected to a chief task.

Parameters:
x IPC result message dope
Returns:
!= 0 if message was redirected, 0 if not

Definition at line 124 of file L4API-l4v2/ipc.h.

#define L4_IPC_SRC_INSIDE (  ) 

Test if the message comes from outside or inside the clan.

Parameters:
x IPC result message dope
Returns:
!= 0 if the message comes from an inner clan, 0 if it comes from outside the own clan.

Definition at line 135 of file L4API-l4v2/ipc.h.

#define L4_IPC_SND_ERROR (  ) 

Test if send operation failed.

Parameters:
x IPC result message dope
Returns:
!= 0 if send operation failed, 0 if not

Definition at line 145 of file L4API-l4v2/ipc.h.

#define L4_IPC_ERROR (  ) 

Get IPC error from IPC result message dope.

Parameters:
x IPC result message dope

Definition at line 159 of file L4API-l4v2/ipc.h.


Function Documentation

l4_timeout_t l4_ipc_timeout ( unsigned  snd_man,
unsigned  snd_exp,
unsigned  rcv_man,
unsigned  rcv_exp 
) [inline]

Convert explicit timeout values to L4 type.

Parameters:
snd_man Mantissa of send timeout.
snd_exp Exponent of send timeout.
rcv_man Mantissa of receive timeout.
rcv_exp Exponent of receive timeout.

Definition at line 206 of file __timeout.h.

References l4_timeout_t::p, l4_timeout_t::rcv, l4_timeout_t::snd, and l4_timeout_s::t.

int l4_ipc_call_tag ( l4_threadid_t  dest,
const void *  snd_msg,
l4_umword_t  snd_dword0,
l4_umword_t  snd_dword1,
l4_msgtag_t  tag,
void *  rcv_msg,
l4_umword_t rcv_dword0,
l4_umword_t rcv_dword1,
l4_timeout_t  timeout,
l4_msgdope_t result,
l4_msgtag_t rtag 
) [inline]

IPC Call, usual blocking RPC, tagged version.

Parameters:
dest Thread id of the call destination
snd_msg Pointer to the send message descriptor. It can contain the following values:
  • L4_IPC_NIL_DESCRIPTOR the IPC does not include a send operation.
  • L4_IPC_SHORT_MSG the 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.
  • <mem> the IPC includes sending a message to the destination specified by dest. snd_msg must point to a valid message buffer (see Long IPC). The first two 32-bit words of the message have to be given separately in snd_dword0 and snd_dword1.
snd_dword0 The first dword to be transmitted.
snd_dword1 The second dword to be transmitted.
tag Message tag of the sending IPC
rcv_msg Pointer to the receive message descriptor. It can contain the following values:
  • L4_IPC_NIL_DESCRIPTOR the IPC does not include a receive operation.
  • L4_IPC_SHORT_MSG Only messages up to two 32-bit words and are accepted. The received message is returned in rcv_dword0 and rcv_dword1.
  • <mem> Receive message. rcv_msg must point to a valid message buffer (see Long IPC). Note that the first two 32-bit words of the received message are returned in rcv_dword0 and rcv_dword1.
  • L4_IPC_MAPMSG(address,size) Only a flexpage or up to two 32-bit words (in rcv_dword0 and rcv_dword1) are accepted.
  • L4_IPC_IOMAPMSG(port, iosize) Only an I/O flexpage or up to two 32-bit words (in rcv_dword0 and rcv_dword1) are accepted.
  • L4_IPC_CAPMAPMSG(taskno, order) Only a capability flexpage or up to two 32-bit words (in rcv_dword0 and rcv_dword1) are accepted.
Return values:
rcv_dword0 The first dword of the received message, undefined if no message was received.
rcv_dword1 The second dword of the received message, undefined if no message was received.
Parameters:
timeout IPC timeout (see l4_ipc_timeout).
Return values:
result Result message dope
rtag Message tag of the receiving IPC
Returns:
0 if no error occurred. The send operation (if specified) was successful, and if a receive operation was also specified, a message was also received correctly. != 0 if an error occurred:
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.

Referenced by l4_ipc_call().

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 
) [inline]

IPC Call, usual blocking RPC.

See also:
l4_ipc_call_tag

Definition at line 9 of file ipc-impl.h.

References l4_ipc_call_tag(), and l4_msgtag().

int l4_ipc_reply_and_wait_tag ( l4_threadid_t  dest,
const void *  snd_msg,
l4_umword_t  snd_dword0,
l4_umword_t  snd_dword1,
l4_msgtag_t  tag,
l4_threadid_t src,
void *  rcv_msg,
l4_umword_t rcv_dword0,
l4_umword_t rcv_dword1,
l4_timeout_t  timeout,
l4_msgdope_t result,
l4_msgtag_t rtag 
) [inline]

IPC reply and wait, send a reply to a client and wait for next message, tagged version.

Parameters:
dest Thread id of the send destination
snd_msg Pointer to the send message descriptor. It can contain the following values:
  • L4_IPC_NIL_DESCRIPTOR the IPC does not include a send operation.
  • L4_IPC_SHORT_MSG the 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.
  • <mem> the IPC includes sending a message to the destination specified by dest. snd_msg must point to a valid message buffer (see Long IPC). The first two 32-bit words of the message have to be given separately in snd_dword0 and snd_dword1.
snd_dword0 The first dword to be transmitted.
snd_dword1 The second dword to be transmitted.
tag Message tag of the sending IPC
Return values:
src Source thread id of the received message
Parameters:
rcv_msg Pointer to the receive message descriptor. It can contain the following values:
  • L4_IPC_NIL_DESCRIPTOR the IPC does not include a receive operation.
  • L4_IPC_SHORT_MSG Only messages up to two 32-bit words and are accepted. The received message is returned in rcv_dword0 and rcv_dword1.
  • <mem> Receive message. rcv_msg must point to a valid message buffer (see Long IPC). Note that the first two 32-bit words of the received message are returned in rcv_dword0 and rcv_dword1.
  • L4_IPC_MAPMSG(address,size) Only a flexpage or up to two 32-bit words (in rcv_dword0 and rcv_dword1) are accepted.
  • L4_IPC_IOMAPMSG(port, iosize) Only an I/O flexpage or up to two 32-bit words (in rcv_dword0 and rcv_dword1) are accepted.
  • L4_IPC_CAPMAPMSG(taskno, order) Only a capability flexpage or up to two 32-bit words (in rcv_dword0 and rcv_dword1) are accepted.
Return values:
rcv_dword0 The first dword of the received message, undefined if no message was received.
rcv_dword1 The second dword of the received message, undefined if no message was received.
Parameters:
timeout IPC timeout (see l4_ipc_timeout).
Return values:
result Result message dope
rtag Message tag of the receiving IPC
Returns:
0 if no error occurred. The send operation (if specified) was successful, and if a receive operation was also specified, a message was also received correctly. != 0 if an error occurred:
snd_msg is sent to thread with id dest and the invoker waits for a reply from any source. This is the standard server operation: it sends a reply to the actual client and waits for the next order which may come from a different client.

Referenced by l4_ipc_reply_and_wait().

int l4_ipc_reply_and_wait ( l4_threadid_t  dest,
const void *  snd_msg,
l4_umword_t  snd_dword0,
l4_umword_t  snd_dword1,
l4_threadid_t src,
void *  rcv_msg,
l4_umword_t rcv_dword0,
l4_umword_t rcv_dword1,
l4_timeout_t  timeout,
l4_msgdope_t result 
) [inline]

IPC reply and wait, send a reply to a client and wait for next message.

See also:
l4_ipc_reply_and_wait_tag

Definition at line 26 of file ipc-impl.h.

References l4_ipc_reply_and_wait_tag(), and l4_msgtag().

int l4_ipc_send_tag ( l4_threadid_t  dest,
const void *  snd_msg,
l4_umword_t  snd_dword0,
l4_umword_t  snd_dword1,
l4_msgtag_t  tag,
l4_timeout_t  timeout,
l4_msgdope_t result 
) [inline]

IPC send, send a message to a thread, tagged version.

Parameters:
dest Thread id of the send destination
snd_msg Pointer to the send message descriptor. It can contain the following values:
  • L4_IPC_SHORT_MSG the 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.
  • <mem> the IPC includes sending a message to the destination specified by dest. snd_msg must point to a valid message buffer (see Long IPC). The first two 32-bit words of the message have to be given separately in snd_dword0 and snd_dword1.
snd_dword0 The first dword to be transmitted.
snd_dword1 The second dword to be transmitted.
tag Message tag
timeout IPC timeout (see l4_ipc_timeout).
Return values:
result Result message dope
Returns:
0 if no error occurred. The send operation (if specified) was successful, and if a receive operation was also specified, a message was also received correctly. != 0 if an error occurred:
snd_msg is sent to the thread with id dest. There is no receive phase included. The invoker continues working after sending the message.

Referenced by l4_ipc_send().

int l4_ipc_send ( l4_threadid_t  dest,
const void *  snd_msg,
l4_umword_t  snd_dword0,
l4_umword_t  snd_dword1,
l4_timeout_t  timeout,
l4_msgdope_t result 
) [inline]

IPC send, send a message to a thread.

See also:
l4_ipc_send_tag

Definition at line 58 of file ipc-impl.h.

References l4_ipc_send_tag(), and l4_msgtag().

int l4_ipc_wait_tag ( l4_threadid_t src,
void *  rcv_msg,
l4_umword_t rcv_dword0,
l4_umword_t rcv_dword1,
l4_timeout_t  timeout,
l4_msgdope_t result,
l4_msgtag_t tag 
) [inline]

IPC wait, wait for message from any source, tagged version.

Return values:
src Source thread id of the received message
Parameters:
rcv_msg Pointer to the receive message descriptor. It can contain the following values:
  • L4_IPC_SHORT_MSG Only messages up to two 32-bit words and are accepted. The received message is returned in rcv_dword0 and rcv_dword1.
  • <mem> Receive message. rcv_msg must point to a valid message buffer (see Long IPC). Note that the first two 32-bit words of the received message are returned in rcv_dword0 and rcv_dword1.
  • L4_IPC_MAPMSG(address,size) Only a flexpage or up to two 32-bit words (in rcv_dword0 and rcv_dword1) are accepted.
  • L4_IPC_IOMAPMSG(port, iosize) Only an I/O flexpage or up to two 32-bit words (in rcv_dword0 and rcv_dword1) are accepted.
  • L4_IPC_CAPMAPMSG(taskno, order) Only a capability flexpage or up to two 32-bit words (in rcv_dword0 and rcv_dword1) are accepted.
Return values:
rcv_dword0 The first dword of the received message.
rcv_dword1 The second dword of the received message.
Parameters:
timeout IPC timeout (see l4_ipc_timeout).
Return values:
result Result message dope
tag Message tag
Returns:
0 if no error occurred. The send operation (if specified) was successful, and if a receive operation was also specified, a message was also received correctly. != 0 if an error occurred:
This operation includes no send phase. The invoker waits for a message from any source (including a hardware interrupt).

Referenced by l4_ipc_wait().

int l4_ipc_wait ( l4_threadid_t src,
void *  rcv_msg,
l4_umword_t rcv_dword0,
l4_umword_t rcv_dword1,
l4_timeout_t  timeout,
l4_msgdope_t result 
) [inline]

IPC wait, wait for message from any source.

See also:
l4_ipc_wait_tag

Definition at line 45 of file ipc-impl.h.

References l4_ipc_wait_tag().

int l4_ipc_receive_tag ( l4_threadid_t  src,
void *  rcv_msg,
l4_umword_t rcv_dword0,
l4_umword_t rcv_dword1,
l4_timeout_t  timeout,
l4_msgdope_t result,
l4_msgtag_t tag 
) [inline]

IPC receive, wait for a message from a specified thread, tagged version.

Parameters:
src Thread to receive message from
rcv_msg Pointer to the receive message descriptor. It can contain the following values:
  • L4_IPC_SHORT_MSG Only messages up to two 32-bit words and are accepted. The received message is returned in rcv_dword0 and rcv_dword1.
  • <mem> Receive message. rcv_msg must point to a valid message buffer (see Long IPC). Note that the first two 32-bit words of the received message are returned in rcv_dword0 and rcv_dword1.
  • L4_IPC_MAPMSG(address,size) Only a flexpage or up to two 32-bit words (in rcv_dword0 and rcv_dword1) are accepted.
  • L4_IPC_IOMAPMSG(port, iosize) Only an I/O flexpage or up to two 32-bit words (in rcv_dword0 and rcv_dword1) are accepted.
  • L4_IPC_CAPMAPMSG(taskno, order) Only a capability flexpage or up to two 32-bit words (in rcv_dword0 and rcv_dword1) are accepted.
Return values:
rcv_dword0 The first dword of the received message.
rcv_dword1 The second dword of the received message.
Parameters:
timeout IPC timeout (see l4_ipc_timeout).
Return values:
result Result message dope
tag Message tag
Returns:
0 if no error occurred. The send operation (if specified) was successful, and if a receive operation was also specified, a message was also received correctly. != 0 if an error occurred:
This operation includes no send phase. The invoker waits for a message from src. Messages from other sources are not accepted. Note that also a hardware interrupt might be specified as source.

Referenced by l4_ipc_receive().

int l4_ipc_receive ( l4_threadid_t  src,
void *  rcv_msg,
l4_umword_t rcv_dword0,
l4_umword_t rcv_dword1,
l4_timeout_t  timeout,
l4_msgdope_t result 
) [inline]

IPC receive, wait for a message from a specified thread.

See also:
l4_ipc_receive_tag

Definition at line 70 of file ipc-impl.h.

References l4_ipc_receive_tag().

Referenced by l4_ipc_sleep().

int l4_ipc_sleep ( l4_timeout_t  timeout  )  [inline]

Sleep for an amount of time.

Parameters:
timeout IPC timeout (see l4_ipc_timeout).
Returns:
error code:
This operation includes no send phase. The invoker waits until the timeout is expired or the IPC was aborted by another thread.

Definition at line 83 of file ipc-impl.h.

References l4_ipc_receive(), L4_IPC_SHORT_MSG, and L4_NIL_ID.

int l4_ipc_fpage_received ( l4_msgdope_t  msgdope  )  [inline]

Check if received message contains flexpage.

Parameters:
msgdope IPC result message dope
Returns:
!= 0 if flexpage received, 0 if not

Definition at line 92 of file ipc-impl.h.

References l4_msgdope_struct_t::fpage_received, and l4_msgdope_t::md.

int l4_ipc_is_fpage_granted ( l4_fpage_t  fp  )  [inline]

Check if flexpage was granted.

Parameters:
fp Flexpage descriptor
Returns:
!= 0 if flexpage was granted, 0 if not

Definition at line 98 of file ipc-impl.h.

References l4_fpage_t::fp, and l4_fpage_struct_t::grant.

int l4_ipc_is_fpage_writable ( l4_fpage_t  fp  )  [inline]

Check if flexpage is writable.

Parameters:
fp Flexpage descriptor
Returns:
!= 0 if flexpage is writable, 0 if not

Definition at line 104 of file ipc-impl.h.

References l4_fpage_t::fp, and l4_fpage_struct_t::write.

long l4_is_rcv_map_descr ( const void *  msg  )  [inline]

Return if message is fpage message.

Parameters:
msg Message descriptor
Returns:
!=0 if fpage message, 0 if not

Definition at line 119 of file ipc-impl.h.

Referenced by l4_is_long_rcv_descr().

long l4_is_long_rcv_descr ( const void *  msg  )  [inline]

Return if receive message descriptor is a long IPC message descriptor.

Parameters:
msg Message descriptor
Returns:
!= 0 if long IPC message, 0 if not

Definition at line 110 of file ipc-impl.h.

References l4_is_rcv_map_descr().

long l4_is_long_snd_descr ( const void *  msg  )  [inline]

Return if source message descriptor is a long IPC message descriptor.

Parameters:
msg Message descriptor
Returns:
!= 0 if long IPC message, 0 if not

Definition at line 125 of file ipc-impl.h.

const l4_msg_t* l4_get_snd_msg_from_descr ( const void *  msg  )  [inline]

Return message descriptor address from send message descriptor.

Parameters:
msg Message descriptor
Returns:
message descriptor

Definition at line 131 of file ipc-impl.h.

l4_msg_t* l4_get_rcv_msg_from_descr ( void *  msg  )  [inline]

Return message descriptor address from receive message descriptor.

Parameters:
msg Message descriptor
Returns:
message descriptor

Definition at line 137 of file ipc-impl.h.


Fiasco/L4 System Call C-Bindings Reference Manual,  © 1996-2008