MLK-14938-23 mailbox: enable mbox_send non-blocking use
Add a timeout to allow non-blocking use in the same way as mbox_recv Signed-off-by: Teo Hall <teo.hall@nxp.com> (cherry picked from commit c2296701fa91dc8d4144c84c19ffe40dba3df88c)
This commit is contained in:
parent
3733fc85c1
commit
afcfb7e510
|
|
@ -100,13 +100,29 @@ int mbox_free(struct mbox_chan *chan)
|
|||
return ops->free(chan);
|
||||
}
|
||||
|
||||
int mbox_send(struct mbox_chan *chan, const void *data)
|
||||
int mbox_send(struct mbox_chan *chan, const void *data, ulong timeout_us)
|
||||
{
|
||||
struct mbox_ops *ops = mbox_dev_ops(chan->dev);
|
||||
ulong start_time;
|
||||
int ret;
|
||||
|
||||
debug("%s(chan=%p, data=%p)\n", __func__, chan, data);
|
||||
|
||||
return ops->send(chan, data);
|
||||
start_time = timer_get_us();
|
||||
/*
|
||||
* Account for partial us ticks, but if timeout_us is 0, ensure we
|
||||
* still don't wait at all.
|
||||
*/
|
||||
if (timeout_us)
|
||||
timeout_us++;
|
||||
|
||||
for (;;) {
|
||||
ret = ops->send(chan, data);
|
||||
if (ret != -EBUSY)
|
||||
return ret;
|
||||
if ((timer_get_us() - start_time) >= timeout_us)
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
}
|
||||
|
||||
int mbox_recv(struct mbox_chan *chan, void *data, ulong timeout_us)
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@ int mbox_free(struct mbox_chan *chan);
|
|||
* will ignore this parameter.
|
||||
* @return 0 if OK, or a negative error code.
|
||||
*/
|
||||
int mbox_send(struct mbox_chan *chan, const void *data);
|
||||
int mbox_send(struct mbox_chan *chan, const void *data, ulong timeout_us);
|
||||
|
||||
/**
|
||||
* mbox_recv - Receive any available message from a mailbox channel
|
||||
|
|
|
|||
Loading…
Reference in New Issue