root/include/linux/mailbox_client.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * Copyright (C) 2013-2014 Linaro Ltd.
   4  * Author: Jassi Brar <jassisinghbrar@gmail.com>
   5  */
   6 
   7 #ifndef __MAILBOX_CLIENT_H
   8 #define __MAILBOX_CLIENT_H
   9 
  10 #include <linux/of.h>
  11 #include <linux/device.h>
  12 
  13 struct mbox_chan;
  14 
  15 /**
  16  * struct mbox_client - User of a mailbox
  17  * @dev:                The client device
  18  * @tx_block:           If the mbox_send_message should block until data is
  19  *                      transmitted.
  20  * @tx_tout:            Max block period in ms before TX is assumed failure
  21  * @knows_txdone:       If the client could run the TX state machine. Usually
  22  *                      if the client receives some ACK packet for transmission.
  23  *                      Unused if the controller already has TX_Done/RTR IRQ.
  24  * @rx_callback:        Atomic callback to provide client the data received
  25  * @tx_prepare:         Atomic callback to ask client to prepare the payload
  26  *                      before initiating the transmission if required.
  27  * @tx_done:            Atomic callback to tell client of data transmission
  28  */
  29 struct mbox_client {
  30         struct device *dev;
  31         bool tx_block;
  32         unsigned long tx_tout;
  33         bool knows_txdone;
  34 
  35         void (*rx_callback)(struct mbox_client *cl, void *mssg);
  36         void (*tx_prepare)(struct mbox_client *cl, void *mssg);
  37         void (*tx_done)(struct mbox_client *cl, void *mssg, int r);
  38 };
  39 
  40 struct mbox_chan *mbox_request_channel_byname(struct mbox_client *cl,
  41                                               const char *name);
  42 struct mbox_chan *mbox_request_channel(struct mbox_client *cl, int index);
  43 int mbox_send_message(struct mbox_chan *chan, void *mssg);
  44 int mbox_flush(struct mbox_chan *chan, unsigned long timeout);
  45 void mbox_client_txdone(struct mbox_chan *chan, int r); /* atomic */
  46 bool mbox_client_peek_data(struct mbox_chan *chan); /* atomic */
  47 void mbox_free_channel(struct mbox_chan *chan); /* may sleep */
  48 
  49 #endif /* __MAILBOX_CLIENT_H */

/* [<][>][^][v][top][bottom][index][help] */