| /* SPDX-License-Identifier: GPL-2.0-only OR MIT */ |
| /* |
| * Apple mailbox message format |
| * |
| * Copyright The Asahi Linux Contributors |
| */ |
| |
| #ifndef _APPLE_MAILBOX_H_ |
| #define _APPLE_MAILBOX_H_ |
| |
| #include <linux/device.h> |
| #include <linux/types.h> |
| |
| /* encodes a single 96bit message sent over the single channel */ |
| struct apple_mbox_msg { |
| u64 msg0; |
| u32 msg1; |
| }; |
| |
| struct apple_mbox { |
| struct device *dev; |
| void __iomem *regs; |
| const struct apple_mbox_hw *hw; |
| bool active; |
| |
| int irq_recv_not_empty; |
| int irq_send_empty; |
| |
| spinlock_t rx_lock; |
| spinlock_t tx_lock; |
| |
| struct completion tx_empty; |
| |
| /** Receive callback for incoming messages */ |
| void (*rx)(struct apple_mbox *mbox, struct apple_mbox_msg msg, void *cookie); |
| void *cookie; |
| }; |
| |
| struct apple_mbox *apple_mbox_get(struct device *dev, int index); |
| struct apple_mbox *apple_mbox_get_byname(struct device *dev, const char *name); |
| |
| int apple_mbox_start(struct apple_mbox *mbox); |
| void apple_mbox_stop(struct apple_mbox *mbox); |
| int apple_mbox_poll(struct apple_mbox *mbox); |
| int apple_mbox_send(struct apple_mbox *mbox, struct apple_mbox_msg msg, |
| bool atomic); |
| |
| #endif |