diff mbox

mailbox: add tx_prepare client callback

Message ID 1415721852-10193-1-git-send-email-sudeep.holla@arm.com
State New
Headers show

Commit Message

Sudeep Holla Nov. 11, 2014, 4:04 p.m. UTC
If the mailbox controller expects the payload is in place before
initiating the transmit, then it's impossible to reuse the list
maintained by core mailbox code currently. Maintaining another list
for sending the message in the controller seems totally unnecessary
as core mailbox library already provides that feature.

This patch introduces tx_prepare callback in mbox_client which
can be used by the core mailbox library before initiating the
transaction through mbox->ops->send_data. The client driver can
implement this callback to ensure the payload is copied to the
shared memory.

Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Cc: Jassi Brar <jaswinder.singh@linaro.org>
Cc: Arnd Bergmann <arnd@arndb.de>
---
 drivers/mailbox/mailbox.c      | 2 ++
 include/linux/mailbox_client.h | 1 +
 2 files changed, 3 insertions(+)

Comments

Jassi Brar Nov. 11, 2014, 5:53 p.m. UTC | #1
On 11 November 2014 21:34, Sudeep Holla <sudeep.holla@arm.com> wrote:
> If the mailbox controller expects the payload is in place before
> initiating the transmit, then it's impossible to reuse the list
> maintained by core mailbox code currently. Maintaining another list
> for sending the message in the controller seems totally unnecessary
> as core mailbox library already provides that feature.
>
> This patch introduces tx_prepare callback in mbox_client which
> can be used by the core mailbox library before initiating the
> transaction through mbox->ops->send_data. The client driver can
> implement this callback to ensure the payload is copied to the
> shared memory.
>
> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> Cc: Jassi Brar <jaswinder.singh@linaro.org>
> Cc: Arnd Bergmann <arnd@arndb.de>
> ---
>  drivers/mailbox/mailbox.c      | 2 ++
>  include/linux/mailbox_client.h | 1 +
>  2 files changed, 3 insertions(+)
>
> diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
> index afcb430508ec..4b4044f47b45 100644
> --- a/drivers/mailbox/mailbox.c
> +++ b/drivers/mailbox/mailbox.c
> @@ -76,6 +76,8 @@ static void msg_submit(struct mbox_chan *chan)
>
>         data = chan->msg_data[idx];
>
> +       if (chan->cl->tx_prepare)
> +               chan->cl->tx_prepare(chan->cl, data);
>         /* Try to submit a message to the MBOX controller */
>         err = chan->mbox->ops->send_data(chan, data);
>         if (!err) {
> diff --git a/include/linux/mailbox_client.h b/include/linux/mailbox_client.h
> index 307d9cab2026..5a1a6db63e96 100644
> --- a/include/linux/mailbox_client.h
> +++ b/include/linux/mailbox_client.h
> @@ -34,6 +34,7 @@ struct mbox_client {
>         bool knows_txdone;
>
>         void (*rx_callback)(struct mbox_client *cl, void *mssg);
> +       void (*tx_prepare)(struct mbox_client *cl, void *mssg);
>         void (*tx_done)(struct mbox_client *cl, void *mssg, int r);
>  };
>
Please add some documentation for tx_prepare() as well.

Thanks
Jassi
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
Sudeep Holla Nov. 11, 2014, 6:08 p.m. UTC | #2
On 11/11/14 17:53, Jassi Brar wrote:
> On 11 November 2014 21:34, Sudeep Holla <sudeep.holla@arm.com> wrote:
>> If the mailbox controller expects the payload is in place before
>> initiating the transmit, then it's impossible to reuse the list
>> maintained by core mailbox code currently. Maintaining another list
>> for sending the message in the controller seems totally unnecessary
>> as core mailbox library already provides that feature.
>>
>> This patch introduces tx_prepare callback in mbox_client which
>> can be used by the core mailbox library before initiating the
>> transaction through mbox->ops->send_data. The client driver can
>> implement this callback to ensure the payload is copied to the
>> shared memory.
>>
>> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
>> Cc: Jassi Brar <jaswinder.singh@linaro.org>
>> Cc: Arnd Bergmann <arnd@arndb.de>
>> ---
>>   drivers/mailbox/mailbox.c      | 2 ++
>>   include/linux/mailbox_client.h | 1 +
>>   2 files changed, 3 insertions(+)
>>
>> diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
>> index afcb430508ec..4b4044f47b45 100644
>> --- a/drivers/mailbox/mailbox.c
>> +++ b/drivers/mailbox/mailbox.c
>> @@ -76,6 +76,8 @@ static void msg_submit(struct mbox_chan *chan)
>>
>>          data = chan->msg_data[idx];
>>
>> +       if (chan->cl->tx_prepare)
>> +               chan->cl->tx_prepare(chan->cl, data);
>>          /* Try to submit a message to the MBOX controller */
>>          err = chan->mbox->ops->send_data(chan, data);
>>          if (!err) {
>> diff --git a/include/linux/mailbox_client.h b/include/linux/mailbox_client.h
>> index 307d9cab2026..5a1a6db63e96 100644
>> --- a/include/linux/mailbox_client.h
>> +++ b/include/linux/mailbox_client.h
>> @@ -34,6 +34,7 @@ struct mbox_client {
>>          bool knows_txdone;
>>
>>          void (*rx_callback)(struct mbox_client *cl, void *mssg);
>> +       void (*tx_prepare)(struct mbox_client *cl, void *mssg);
>>          void (*tx_done)(struct mbox_client *cl, void *mssg, int r);
>>   };
>>
> Please add some documentation for tx_prepare() as well.
>

Ah, sorry for missing that, will add and resend.

Regards,
Sudeep

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/
diff mbox

Patch

diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
index afcb430508ec..4b4044f47b45 100644
--- a/drivers/mailbox/mailbox.c
+++ b/drivers/mailbox/mailbox.c
@@ -76,6 +76,8 @@  static void msg_submit(struct mbox_chan *chan)
 
 	data = chan->msg_data[idx];
 
+	if (chan->cl->tx_prepare)
+		chan->cl->tx_prepare(chan->cl, data);
 	/* Try to submit a message to the MBOX controller */
 	err = chan->mbox->ops->send_data(chan, data);
 	if (!err) {
diff --git a/include/linux/mailbox_client.h b/include/linux/mailbox_client.h
index 307d9cab2026..5a1a6db63e96 100644
--- a/include/linux/mailbox_client.h
+++ b/include/linux/mailbox_client.h
@@ -34,6 +34,7 @@  struct mbox_client {
 	bool knows_txdone;
 
 	void (*rx_callback)(struct mbox_client *cl, void *mssg);
+	void (*tx_prepare)(struct mbox_client *cl, void *mssg);
 	void (*tx_done)(struct mbox_client *cl, void *mssg, int r);
 };