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