GNU Linux-libre 6.9.1-gnu
[releases.git] / drivers / soc / apple / mailbox.h
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 */
15 struct apple_mbox_msg {
16         u64 msg0;
17         u32 msg1;
18 };
19
20 struct 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
39 struct apple_mbox *apple_mbox_get(struct device *dev, int index);
40 struct apple_mbox *apple_mbox_get_byname(struct device *dev, const char *name);
41
42 int apple_mbox_start(struct apple_mbox *mbox);
43 void apple_mbox_stop(struct apple_mbox *mbox);
44 int apple_mbox_poll(struct apple_mbox *mbox);
45 int apple_mbox_send(struct apple_mbox *mbox, struct apple_mbox_msg msg,
46                     bool atomic);
47
48 #endif