49 lines
1.1 KiB
C
49 lines
1.1 KiB
C
|
/* 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
|