/* 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