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

View File

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