linux/include/linux/mailbox_client.h
<<
>>
Prefs
   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
  13struct 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 */
  29struct 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
  40struct mbox_chan *mbox_request_channel_byname(struct mbox_client *cl,
  41                                              const char *name);
  42struct mbox_chan *mbox_request_channel(struct mbox_client *cl, int index);
  43int mbox_send_message(struct mbox_chan *chan, void *mssg);
  44int mbox_flush(struct mbox_chan *chan, unsigned long timeout);
  45void mbox_client_txdone(struct mbox_chan *chan, int r); /* atomic */
  46bool mbox_client_peek_data(struct mbox_chan *chan); /* atomic */
  47void mbox_free_channel(struct mbox_chan *chan); /* may sleep */
  48
  49#endif /* __MAILBOX_CLIENT_H */
  50