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