#include <linux/bitops.h>
#include <linux/clk.h>
#include <linux/device.h>
#include <linux/err.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/kernel.h>
#include <linux/mailbox_controller.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_irq.h>
#include <linux/platform_device.h>
#include <linux/reset.h>
#include <linux/spinlock.h>
#define NUM_CHANS …
#define CTRL_REG(n) …
#define CTRL_RX(n) …
#define CTRL_TX(n) …
#define REMOTE_IRQ_EN_REG …
#define REMOTE_IRQ_STAT_REG …
#define LOCAL_IRQ_EN_REG …
#define LOCAL_IRQ_STAT_REG …
#define RX_IRQ(n) …
#define RX_IRQ_MASK …
#define TX_IRQ(n) …
#define TX_IRQ_MASK …
#define FIFO_STAT_REG(n) …
#define FIFO_STAT_MASK …
#define MSG_STAT_REG(n) …
#define MSG_STAT_MASK …
#define MSG_DATA_REG(n) …
#define mbox_dbg(mbox, ...) …
struct sun6i_msgbox { … };
static bool sun6i_msgbox_last_tx_done(struct mbox_chan *chan);
static bool sun6i_msgbox_peek_data(struct mbox_chan *chan);
static inline int channel_number(struct mbox_chan *chan)
{ … }
static inline struct sun6i_msgbox *to_sun6i_msgbox(struct mbox_chan *chan)
{ … }
static irqreturn_t sun6i_msgbox_irq(int irq, void *dev_id)
{ … }
static int sun6i_msgbox_send_data(struct mbox_chan *chan, void *data)
{ … }
static int sun6i_msgbox_startup(struct mbox_chan *chan)
{ … }
static void sun6i_msgbox_shutdown(struct mbox_chan *chan)
{ … }
static bool sun6i_msgbox_last_tx_done(struct mbox_chan *chan)
{ … }
static bool sun6i_msgbox_peek_data(struct mbox_chan *chan)
{ … }
static const struct mbox_chan_ops sun6i_msgbox_chan_ops = …;
static int sun6i_msgbox_probe(struct platform_device *pdev)
{ … }
static void sun6i_msgbox_remove(struct platform_device *pdev)
{ … }
static const struct of_device_id sun6i_msgbox_of_match[] = …;
MODULE_DEVICE_TABLE(of, sun6i_msgbox_of_match);
static struct platform_driver sun6i_msgbox_driver = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;