mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-07 20:00:23 +00:00
parent
575a81a633
commit
4359b99c4f
@ -52,12 +52,12 @@ namespace Genode
|
|||||||
inline Native_thread_id thread_invalid_id() { return 0; }
|
inline Native_thread_id thread_invalid_id() { return 0; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Message that is communicated between user threads
|
* Data bunch with variable size that is communicated between threads
|
||||||
*
|
*
|
||||||
* \param MAX_SIZE maximum size the object is allowed to take
|
* \param MAX_SIZE maximum size the object is allowed to take
|
||||||
*/
|
*/
|
||||||
template <size_t MAX_SIZE>
|
template <size_t MAX_SIZE>
|
||||||
struct Ipc_msg;
|
struct Message;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Message that is communicated from a thread creator to the new thread
|
* Message that is communicated from a thread creator to the new thread
|
||||||
@ -119,7 +119,7 @@ namespace Genode
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <Genode::size_t MAX_SIZE>
|
template <Genode::size_t MAX_SIZE>
|
||||||
class Genode::Ipc_msg
|
class Genode::Message
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@ -256,7 +256,7 @@ struct Genode::Native_utcb
|
|||||||
|
|
||||||
union {
|
union {
|
||||||
uint8_t data[SIZE];
|
uint8_t data[SIZE];
|
||||||
Ipc_msg<SIZE> ipc_msg;
|
Message<SIZE> message;
|
||||||
Startup_msg startup_msg;
|
Startup_msg startup_msg;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -79,12 +79,12 @@ void Ipc_client::_call()
|
|||||||
/* send request and receive corresponding reply */
|
/* send request and receive corresponding reply */
|
||||||
unsigned const local_name = Ipc_ostream::_dst.local_name();
|
unsigned const local_name = Ipc_ostream::_dst.local_name();
|
||||||
Native_utcb * const utcb = Thread_base::myself()->utcb();
|
Native_utcb * const utcb = Thread_base::myself()->utcb();
|
||||||
utcb->ipc_msg.prepare_send(_snd_msg->buf, _write_offset, local_name);
|
utcb->message.prepare_send(_snd_msg->buf, _write_offset, local_name);
|
||||||
if (Kernel::send_request_msg(Ipc_ostream::_dst.dst())) {
|
if (Kernel::send_request_msg(Ipc_ostream::_dst.dst())) {
|
||||||
PERR("failed to receive reply");
|
PERR("failed to receive reply");
|
||||||
throw Blocking_canceled();
|
throw Blocking_canceled();
|
||||||
}
|
}
|
||||||
utcb->ipc_msg.finish_receive(_rcv_msg->buf, _rcv_msg->size());
|
utcb->message.finish_receive(_rcv_msg->buf, _rcv_msg->size());
|
||||||
|
|
||||||
/* reset unmarshaller */
|
/* reset unmarshaller */
|
||||||
_write_offset = _read_offset = RPC_OBJECT_ID_SIZE;
|
_write_offset = _read_offset = RPC_OBJECT_ID_SIZE;
|
||||||
@ -129,7 +129,7 @@ void Ipc_server::_wait()
|
|||||||
throw Blocking_canceled();
|
throw Blocking_canceled();
|
||||||
}
|
}
|
||||||
Native_utcb * const utcb = Thread_base::myself()->utcb();
|
Native_utcb * const utcb = Thread_base::myself()->utcb();
|
||||||
utcb->ipc_msg.finish_receive(_rcv_msg->buf, _rcv_msg->size());
|
utcb->message.finish_receive(_rcv_msg->buf, _rcv_msg->size());
|
||||||
|
|
||||||
/* update server state */
|
/* update server state */
|
||||||
_prepare_next_reply_wait();
|
_prepare_next_reply_wait();
|
||||||
@ -140,7 +140,7 @@ void Ipc_server::_reply()
|
|||||||
{
|
{
|
||||||
unsigned const local_name = Ipc_ostream::_dst.local_name();
|
unsigned const local_name = Ipc_ostream::_dst.local_name();
|
||||||
Native_utcb * const utcb = Thread_base::myself()->utcb();
|
Native_utcb * const utcb = Thread_base::myself()->utcb();
|
||||||
utcb->ipc_msg.prepare_send(_snd_msg->buf, _write_offset, local_name);
|
utcb->message.prepare_send(_snd_msg->buf, _write_offset, local_name);
|
||||||
Kernel::send_reply_msg(0);
|
Kernel::send_reply_msg(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,12 +155,12 @@ void Ipc_server::_reply_wait()
|
|||||||
/* send reply and receive next request */
|
/* send reply and receive next request */
|
||||||
unsigned const local_name = Ipc_ostream::_dst.local_name();
|
unsigned const local_name = Ipc_ostream::_dst.local_name();
|
||||||
Native_utcb * const utcb = Thread_base::myself()->utcb();
|
Native_utcb * const utcb = Thread_base::myself()->utcb();
|
||||||
utcb->ipc_msg.prepare_send(_snd_msg->buf, _write_offset, local_name);
|
utcb->message.prepare_send(_snd_msg->buf, _write_offset, local_name);
|
||||||
if (Kernel::send_reply_msg(1)) {
|
if (Kernel::send_reply_msg(1)) {
|
||||||
PERR("failed to receive request");
|
PERR("failed to receive request");
|
||||||
throw Blocking_canceled();
|
throw Blocking_canceled();
|
||||||
}
|
}
|
||||||
utcb->ipc_msg.finish_receive(_rcv_msg->buf, _rcv_msg->size());
|
utcb->message.finish_receive(_rcv_msg->buf, _rcv_msg->size());
|
||||||
|
|
||||||
/* update server state */
|
/* update server state */
|
||||||
_prepare_next_reply_wait();
|
_prepare_next_reply_wait();
|
||||||
|
@ -456,7 +456,7 @@ void Thread::_call_await_request_msg()
|
|||||||
{
|
{
|
||||||
void * buf_base;
|
void * buf_base;
|
||||||
size_t buf_size;
|
size_t buf_size;
|
||||||
_utcb_phys->ipc_msg.info_about_await_request(buf_base, buf_size);
|
_utcb_phys->message.info_about_await_request(buf_base, buf_size);
|
||||||
Ipc_node::await_request(buf_base, buf_size);
|
Ipc_node::await_request(buf_base, buf_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -473,7 +473,7 @@ void Thread::_call_send_request_msg()
|
|||||||
size_t msg_size;
|
size_t msg_size;
|
||||||
void * buf_base;
|
void * buf_base;
|
||||||
size_t buf_size;
|
size_t buf_size;
|
||||||
_utcb_phys->ipc_msg.info_about_send_request(msg_base, msg_size,
|
_utcb_phys->message.info_about_send_request(msg_base, msg_size,
|
||||||
buf_base, buf_size);
|
buf_base, buf_size);
|
||||||
Ipc_node::send_request_await_reply(dst, msg_base, msg_size,
|
Ipc_node::send_request_await_reply(dst, msg_base, msg_size,
|
||||||
buf_base, buf_size);
|
buf_base, buf_size);
|
||||||
@ -484,7 +484,7 @@ void Thread::_call_send_reply_msg()
|
|||||||
{
|
{
|
||||||
void * msg_base;
|
void * msg_base;
|
||||||
size_t msg_size;
|
size_t msg_size;
|
||||||
_utcb_phys->ipc_msg.info_about_send_reply(msg_base, msg_size);
|
_utcb_phys->message.info_about_send_reply(msg_base, msg_size);
|
||||||
Ipc_node::send_reply(msg_base, msg_size);
|
Ipc_node::send_reply(msg_base, msg_size);
|
||||||
bool const await_request_msg = user_arg_1();
|
bool const await_request_msg = user_arg_1();
|
||||||
if (await_request_msg) { _call_await_request_msg(); }
|
if (await_request_msg) { _call_await_request_msg(); }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user