#include <linux/io.h>
#include <linux/err.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/interrupt.h>
#include <linux/mod_devicetable.h>
#include <linux/platform_device.h>
#include <linux/mailbox_controller.h>
#include <soc/microchip/mpfs.h>
#define SERVICES_CR_OFFSET …
#define SERVICES_SR_OFFSET …
#define MAILBOX_REG_OFFSET …
#define MSS_SYS_MAILBOX_DATA_OFFSET …
#define SCB_MASK_WIDTH …
#define SCB_CTRL_REQ …
#define SCB_CTRL_REQ_MASK …
#define SCB_CTRL_BUSY …
#define SCB_CTRL_BUSY_MASK …
#define SCB_CTRL_ABORT …
#define SCB_CTRL_ABORT_MASK …
#define SCB_CTRL_NOTIFY …
#define SCB_CTRL_NOTIFY_MASK …
#define SCB_CTRL_POS …
#define SCB_CTRL_MASK …
#define SCB_STATUS_REQ …
#define SCB_STATUS_REQ_MASK …
#define SCB_STATUS_BUSY …
#define SCB_STATUS_BUSY_MASK …
#define SCB_STATUS_ABORT …
#define SCB_STATUS_ABORT_MASK …
#define SCB_STATUS_NOTIFY …
#define SCB_STATUS_NOTIFY_MASK …
#define SCB_STATUS_POS …
#define SCB_STATUS_MASK …
struct mpfs_mbox { … };
static bool mpfs_mbox_busy(struct mpfs_mbox *mbox)
{ … }
static bool mpfs_mbox_last_tx_done(struct mbox_chan *chan)
{ … }
static int mpfs_mbox_send_data(struct mbox_chan *chan, void *data)
{ … }
static void mpfs_mbox_rx_data(struct mbox_chan *chan)
{ … }
static irqreturn_t mpfs_mbox_inbox_isr(int irq, void *data)
{ … }
static int mpfs_mbox_startup(struct mbox_chan *chan)
{ … }
static void mpfs_mbox_shutdown(struct mbox_chan *chan)
{ … }
static const struct mbox_chan_ops mpfs_mbox_ops = …;
static int mpfs_mbox_probe(struct platform_device *pdev)
{ … }
static const struct of_device_id mpfs_mbox_of_match[] = …;
MODULE_DEVICE_TABLE(of, mpfs_mbox_of_match);
static struct platform_driver mpfs_mbox_driver = …;
module_platform_driver(…) …;
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;