1/* SPDX-License-Identifier: GPL-2.0-only OR MIT */
2/*
3 * Apple mailbox message format
4 *
5 * Copyright The Asahi Linux Contributors
6 */
7
8#ifndef _APPLE_MAILBOX_H_
9#define _APPLE_MAILBOX_H_
10
11#include <linux/device.h>
12#include <linux/types.h>
13
14/* encodes a single 96bit message sent over the single channel */
15struct apple_mbox_msg {
16 u64 msg0;
17 u32 msg1;
18};
19
20struct apple_mbox {
21 struct device *dev;
22 void __iomem *regs;
23 const struct apple_mbox_hw *hw;
24 bool active;
25
26 int irq_recv_not_empty;
27 int irq_send_empty;
28
29 spinlock_t rx_lock;
30 spinlock_t tx_lock;
31
32 struct completion tx_empty;
33
34 /** Receive callback for incoming messages */
35 void (*rx)(struct apple_mbox *mbox, struct apple_mbox_msg msg, void *cookie);
36 void *cookie;
37};
38
39struct apple_mbox *apple_mbox_get(struct device *dev, int index);
40struct apple_mbox *apple_mbox_get_byname(struct device *dev, const char *name);
41
42int apple_mbox_start(struct apple_mbox *mbox);
43void apple_mbox_stop(struct apple_mbox *mbox);
44int apple_mbox_poll(struct apple_mbox *mbox);
45int apple_mbox_send(struct apple_mbox *mbox, struct apple_mbox_msg msg,
46 bool atomic);
47
48#endif
49

source code of linux/drivers/soc/apple/mailbox.h