hw: no msg_base argument to Ipc_node::send_request

ref #1108
This commit is contained in:
Martin Stein 2014-03-27 14:23:49 +01:00 committed by Norman Feske
parent b34ce7d2b0
commit e856158824
3 changed files with 31 additions and 38 deletions

View File

@ -165,25 +165,23 @@ class Genode::Message_tpl
/** /**
* Get properties of request message and receive buffer * Get properties of request message and receive buffer
* *
* \return msg_base base of complete send-message data * \return buf_base base of receive buffer and request message
* \return msg_size size of complete send-message data
* \return buf_base base of receive buffer
* \return buf_size size of receive buffer * \return buf_size size of receive buffer
* \return msg_size size of request message
*/ */
void request_info(void * & msg_base, size_t & msg_size, void request_info(void * & buf_base, size_t & buf_size,
void * & buf_base, size_t & buf_size) const size_t & msg_size) const
{ {
msg_base = (void *)this;
msg_size = _size();
buf_base = (void *)this; buf_base = (void *)this;
buf_size = MAX_SIZE; buf_size = MAX_SIZE;
msg_size = _size();
} }
/** /**
* Get properties of reply message * Get properties of reply message
* *
* \return msg_base base of complete send-message data * \return msg_base base of reply message
* \return msg_size size of complete send-message data * \return msg_size size of reply message
*/ */
void reply_info(void * & msg_base, size_t & msg_size) const void reply_info(void * & msg_base, size_t & msg_size) const
{ {

View File

@ -215,28 +215,26 @@ class Kernel::Ipc_node
/** /**
* Send a request and wait for the according reply * Send a request and wait for the according reply
* *
* \param dest targeted IPC node * \param dst targeted IPC node
* \param req_base base of the request payload * \param buf_base base of receive buffer and request message
* \param req_size size of the request payload * \param buf_size size of receive buffer
* \param inbuf_base base of the reply buffer * \param msg_size size of request message
* \param inbuf_size size of the reply buffer
*/ */
void send_request(Ipc_node * const dst, void * const req_base, void send_request(Ipc_node * const dst, void * const buf_base,
size_t const req_size, void * const inbuf_base, size_t const buf_size, size_t const msg_size)
size_t const inbuf_size)
{ {
/* assertions */ /* assertions */
assert(_state == INACTIVE || _state == PREPARE_REPLY); assert(_state == INACTIVE || _state == PREPARE_REPLY);
/* prepare transmission of request message */ /* prepare transmission of request message */
_outbuf.base = req_base; _outbuf.base = buf_base;
_outbuf.size = req_size; _outbuf.size = msg_size;
_outbuf.src = this; _outbuf.src = this;
_outbuf_dst = dst; _outbuf_dst = dst;
/* prepare reception of reply message */ /* prepare reception of reply message */
_inbuf.base = inbuf_base; _inbuf.base = buf_base;
_inbuf.size = inbuf_size; _inbuf.size = buf_size;
/* don't clear '_inbuf.origin' because we might prepare a reply */ /* don't clear '_inbuf.origin' because we might prepare a reply */
/* update state */ /* update state */
@ -250,20 +248,20 @@ class Kernel::Ipc_node
/** /**
* Wait until a request has arrived and load it for handling * Wait until a request has arrived and load it for handling
* *
* \param inbuf_base base of the request buffer * \param buf_base base of receive buffer
* \param inbuf_size size of the request buffer * \param buf_size size of receive buffer
* *
* \return wether a request could be received already * \return wether a request could be received already
*/ */
bool await_request(void * const inbuf_base, bool await_request(void * const buf_base,
size_t const inbuf_size) size_t const buf_size)
{ {
/* assertions */ /* assertions */
assert(_state == INACTIVE); assert(_state == INACTIVE);
/* prepare receipt of request */ /* prepare receipt of request */
_inbuf.base = inbuf_base; _inbuf.base = buf_base;
_inbuf.size = inbuf_size; _inbuf.size = buf_size;
_inbuf.src = 0; _inbuf.src = 0;
/* if anybody already announced a request receive it */ /* if anybody already announced a request receive it */
@ -279,16 +277,16 @@ class Kernel::Ipc_node
/** /**
* Reply to last request if there's any * Reply to last request if there's any
* *
* \param reply_base base of the reply payload * \param msg_base base of reply message
* \param reply_size size of the reply payload * \param msg_size size of reply message
*/ */
void send_reply(void * const reply_base, void send_reply(void * const msg_base,
size_t const reply_size) size_t const msg_size)
{ {
/* reply to the last request if we have to */ /* reply to the last request if we have to */
if (_state == PREPARE_REPLY) { if (_state == PREPARE_REPLY) {
if (_inbuf.src) { if (_inbuf.src) {
_inbuf.src->_receive_reply(reply_base, reply_size); _inbuf.src->_receive_reply(msg_base, msg_size);
_inbuf.src = 0; _inbuf.src = 0;
} }
_state = INACTIVE; _state = INACTIVE;

View File

@ -420,13 +420,10 @@ void Thread::_call_send_request_msg()
_unschedule(AWAITS_IPC); _unschedule(AWAITS_IPC);
return; return;
} }
void * msg_base;
size_t msg_size;
void * buf_base; void * buf_base;
size_t buf_size; size_t buf_size, msg_size;
Native_utcb::Message * const msg = _utcb_phys->message(); _utcb_phys->message()->request_info(buf_base, buf_size, msg_size);
msg->request_info(msg_base, msg_size, buf_base, buf_size); Ipc_node::send_request(dst, buf_base, buf_size, msg_size);
Ipc_node::send_request(dst, msg_base, msg_size, buf_base, buf_size);
_unschedule(AWAITS_IPC); _unschedule(AWAITS_IPC);
} }