blob: f73a8913da9510f11058c613d51968b5142e2114 [file] [log] [blame]
/* 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