@@ -27,7 +27,7 @@ Controller Driver (See include/linux/mailbox_controller.h)
Allocate mbox_controller and the array of mbox_chan.
-Populate mbox_chan_ops, except peek_data() all are mandatory.
+Populate mbox_chan_ops, except poll_data() all are mandatory.
The controller driver might know a message has been consumed
by the remote by getting an IRQ or polling some hardware flag
or it can never know (the client knows by way of the protocol).
@@ -223,7 +223,7 @@ static struct sba_request *sba_alloc_request(struct sba_device *sba)
* would have completed which will create more
* room for new requests.
*/
- mbox_client_peek_data(sba->mchan);
+ mbox_client_poll_data(sba->mchan);
return NULL;
}
@@ -555,7 +555,7 @@ static enum dma_status sba_tx_status(struct dma_chan *dchan,
if (ret == DMA_COMPLETE)
return ret;
- mbox_client_peek_data(sba->mchan);
+ mbox_client_poll_data(sba->mchan);
return dma_cookie_status(dchan, cookie, txstate);
}
@@ -1223,7 +1223,7 @@ static int flexrm_send_data(struct mbox_chan *chan, void *data)
return flexrm_new_request(ring, NULL, data);
}
-static bool flexrm_peek_data(struct mbox_chan *chan)
+static bool flexrm_poll_data(struct mbox_chan *chan)
{
int cnt = flexrm_process_completions(chan->con_priv);
@@ -1449,7 +1449,7 @@ static const struct mbox_chan_ops flexrm_mbox_chan_ops = {
.send_data = flexrm_send_data,
.startup = flexrm_startup,
.shutdown = flexrm_shutdown,
- .peek_data = flexrm_peek_data,
+ .poll_data = flexrm_poll_data,
};
static struct mbox_chan *flexrm_mbox_of_xlate(struct mbox_controller *cntlr,
@@ -200,28 +200,25 @@ void mbox_client_txdone(struct mbox_chan *chan, int r)
EXPORT_SYMBOL_GPL(mbox_client_txdone);
/**
- * mbox_client_peek_data - A way for client driver to pull data
- * received from remote by the controller.
+ * mbox_client_poll_data - Poll for pending messages from the remote.
* @chan: Mailbox channel assigned to this client.
*
- * A poke to controller driver for any received data.
- * The data is actually passed onto client via the
- * mbox_chan_received_data()
- * The call can be made from atomic context, so the controller's
- * implementation of peek_data() must not sleep.
+ * Asks the controller driver to poll for any available data from the remote.
+ * The data will be synchronously delivered via mbox_chan_received_data().
+ * This call can be made from atomic context, so the controller's
+ * implementation of poll_data() must not sleep.
*
- * Return: True, if controller has, and is going to push after this,
- * some data.
- * False, if controller doesn't have any data to be read.
+ * Return: True if the controller received and has processed some data.
+ * False if controller didn't have any pending data to read.
*/
-bool mbox_client_peek_data(struct mbox_chan *chan)
+bool mbox_client_poll_data(struct mbox_chan *chan)
{
- if (chan->mbox->ops->peek_data)
- return chan->mbox->ops->peek_data(chan);
+ if (chan->mbox->ops->poll_data)
+ return chan->mbox->ops->poll_data(chan);
return false;
}
-EXPORT_SYMBOL_GPL(mbox_client_peek_data);
+EXPORT_SYMBOL_GPL(mbox_client_poll_data);
/**
* mbox_send_message - For client to submit a message to be
@@ -43,7 +43,7 @@ struct mbox_chan *mbox_request_channel(struct mbox_client *cl, int index);
int mbox_send_message(struct mbox_chan *chan, void *mssg);
int mbox_flush(struct mbox_chan *chan, unsigned long timeout);
void mbox_client_txdone(struct mbox_chan *chan, int r); /* atomic */
-bool mbox_client_peek_data(struct mbox_chan *chan); /* atomic */
+bool mbox_client_poll_data(struct mbox_chan *chan); /* atomic */
void mbox_free_channel(struct mbox_chan *chan); /* may sleep */
#endif /* __MAILBOX_CLIENT_H */
@@ -40,8 +40,8 @@ struct mbox_chan;
* mode 'send_data' is expected to return -EBUSY.
* The controller may do stuff that need to sleep/block.
* Used only if txdone_poll:=true && txdone_irq:=false
- * @peek_data: Atomic check for any received data. Return true if controller
- * has some data to push to the client. False otherwise.
+ * @poll_data: Poll atomically for received data. Return true if there
+ * was data available that has been processed. False otherwise.
*/
struct mbox_chan_ops {
int (*send_data)(struct mbox_chan *chan, void *data);
@@ -49,7 +49,7 @@ struct mbox_chan_ops {
int (*startup)(struct mbox_chan *chan);
void (*shutdown)(struct mbox_chan *chan);
bool (*last_tx_done)(struct mbox_chan *chan);
- bool (*peek_data)(struct mbox_chan *chan);
+ bool (*poll_data)(struct mbox_chan *chan);
};
/**
peek_data was poorly specified and the documentation implied it should just check for whether there are messages available to be received. The intent is for this function to be usable in atomic context. Just checking for available data is not useful; the subsystem needs to provide some way to poll for (and actually receive) data in atomic context for this to make sense. As one might expect, all existing drivers that implemented the "peek" semantics had zero actual users, since that interpretation of the feature doesn't lend itself to a useful purpose. There is only one driver implementing peek_data as a proper poll: flexrm. That also happens to be the only one with a user. So, rename peek_data to poll_data and fix the documentation to actually describe it properly as a synchronous poll for data. Previous patches already removed the useless implementations, so this only has to fix the bcm driver and client besides the subsystem. Signed-off-by: Hector Martin <marcan@marcan.st> --- Documentation/driver-api/mailbox.rst | 2 +- drivers/dma/bcm-sba-raid.c | 4 ++-- drivers/mailbox/bcm-flexrm-mailbox.c | 4 ++-- drivers/mailbox/mailbox.c | 25 +++++++++++-------------- include/linux/mailbox_client.h | 2 +- include/linux/mailbox_controller.h | 6 +++--- 6 files changed, 20 insertions(+), 23 deletions(-)