diff options
Diffstat (limited to 'include/linux/mailbox')
-rw-r--r-- | include/linux/mailbox/arm_mhuv2_message.h | 20 | ||||
-rw-r--r-- | include/linux/mailbox/brcm-message.h | 59 | ||||
-rw-r--r-- | include/linux/mailbox/mtk-cmdq-mailbox.h | 83 | ||||
-rw-r--r-- | include/linux/mailbox/zynqmp-ipi-message.h | 20 |
4 files changed, 182 insertions, 0 deletions
diff --git a/include/linux/mailbox/arm_mhuv2_message.h b/include/linux/mailbox/arm_mhuv2_message.h new file mode 100644 index 000000000..821b9d96d --- /dev/null +++ b/include/linux/mailbox/arm_mhuv2_message.h @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * ARM MHUv2 Mailbox Message + * + * Copyright (C) 2020 Arm Ltd. + * Copyright (C) 2020 Linaro Ltd. + */ + +#ifndef _LINUX_ARM_MHUV2_MESSAGE_H_ +#define _LINUX_ARM_MHUV2_MESSAGE_H_ + +#include <linux/types.h> + +/* Data structure for data-transfer protocol */ +struct arm_mhuv2_mbox_msg { + void *data; + size_t len; +}; + +#endif /* _LINUX_ARM_MHUV2_MESSAGE_H_ */ diff --git a/include/linux/mailbox/brcm-message.h b/include/linux/mailbox/brcm-message.h new file mode 100644 index 000000000..18da82115 --- /dev/null +++ b/include/linux/mailbox/brcm-message.h @@ -0,0 +1,59 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (C) 2016 Broadcom + * + * Common header for Broadcom mailbox messages which is shared across + * Broadcom SoCs and Broadcom mailbox client drivers. + */ + +#ifndef _LINUX_BRCM_MESSAGE_H_ +#define _LINUX_BRCM_MESSAGE_H_ + +#include <linux/scatterlist.h> + +enum brcm_message_type { + BRCM_MESSAGE_UNKNOWN = 0, + BRCM_MESSAGE_BATCH, + BRCM_MESSAGE_SPU, + BRCM_MESSAGE_SBA, + BRCM_MESSAGE_MAX, +}; + +struct brcm_sba_command { + u64 cmd; + u64 *cmd_dma; + dma_addr_t cmd_dma_addr; +#define BRCM_SBA_CMD_TYPE_A BIT(0) +#define BRCM_SBA_CMD_TYPE_B BIT(1) +#define BRCM_SBA_CMD_TYPE_C BIT(2) +#define BRCM_SBA_CMD_HAS_RESP BIT(3) +#define BRCM_SBA_CMD_HAS_OUTPUT BIT(4) + u64 flags; + dma_addr_t resp; + size_t resp_len; + dma_addr_t data; + size_t data_len; +}; + +struct brcm_message { + enum brcm_message_type type; + union { + struct { + struct brcm_message *msgs; + unsigned int msgs_queued; + unsigned int msgs_count; + } batch; + struct { + struct scatterlist *src; + struct scatterlist *dst; + } spu; + struct { + struct brcm_sba_command *cmds; + unsigned int cmds_count; + } sba; + }; + void *ctx; + int error; +}; + +#endif /* _LINUX_BRCM_MESSAGE_H_ */ diff --git a/include/linux/mailbox/mtk-cmdq-mailbox.h b/include/linux/mailbox/mtk-cmdq-mailbox.h new file mode 100644 index 000000000..a8f0070c7 --- /dev/null +++ b/include/linux/mailbox/mtk-cmdq-mailbox.h @@ -0,0 +1,83 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (c) 2018 MediaTek Inc. + * + */ + +#ifndef __MTK_CMDQ_MAILBOX_H__ +#define __MTK_CMDQ_MAILBOX_H__ + +#include <linux/platform_device.h> +#include <linux/slab.h> +#include <linux/types.h> + +#define CMDQ_INST_SIZE 8 /* instruction is 64-bit */ +#define CMDQ_SUBSYS_SHIFT 16 +#define CMDQ_OP_CODE_SHIFT 24 +#define CMDQ_JUMP_PASS CMDQ_INST_SIZE + +#define CMDQ_WFE_UPDATE BIT(31) +#define CMDQ_WFE_UPDATE_VALUE BIT(16) +#define CMDQ_WFE_WAIT BIT(15) +#define CMDQ_WFE_WAIT_VALUE 0x1 + +/* + * WFE arg_b + * bit 0-11: wait value + * bit 15: 1 - wait, 0 - no wait + * bit 16-27: update value + * bit 31: 1 - update, 0 - no update + */ +#define CMDQ_WFE_OPTION (CMDQ_WFE_WAIT | CMDQ_WFE_WAIT_VALUE) + +/** cmdq event maximum */ +#define CMDQ_MAX_EVENT 0x3ff + +/* + * CMDQ_CODE_MASK: + * set write mask + * format: op mask + * CMDQ_CODE_WRITE: + * write value into target register + * format: op subsys address value + * CMDQ_CODE_JUMP: + * jump by offset + * format: op offset + * CMDQ_CODE_WFE: + * wait for event and clear + * it is just clear if no wait + * format: [wait] op event update:1 to_wait:1 wait:1 + * [clear] op event update:1 to_wait:0 wait:0 + * CMDQ_CODE_EOC: + * end of command + * format: op irq_flag + */ +enum cmdq_code { + CMDQ_CODE_MASK = 0x02, + CMDQ_CODE_WRITE = 0x04, + CMDQ_CODE_POLL = 0x08, + CMDQ_CODE_JUMP = 0x10, + CMDQ_CODE_WFE = 0x20, + CMDQ_CODE_EOC = 0x40, + CMDQ_CODE_READ_S = 0x80, + CMDQ_CODE_WRITE_S = 0x90, + CMDQ_CODE_WRITE_S_MASK = 0x91, + CMDQ_CODE_LOGIC = 0xa0, +}; + +struct cmdq_cb_data { + int sta; + struct cmdq_pkt *pkt; +}; + +struct cmdq_pkt { + void *va_base; + dma_addr_t pa_base; + size_t cmd_buf_size; /* command occupied size */ + size_t buf_size; /* real buffer size */ + void *cl; +}; + +u8 cmdq_get_shift_pa(struct mbox_chan *chan); + +#endif /* __MTK_CMDQ_MAILBOX_H__ */ diff --git a/include/linux/mailbox/zynqmp-ipi-message.h b/include/linux/mailbox/zynqmp-ipi-message.h new file mode 100644 index 000000000..31d8046d9 --- /dev/null +++ b/include/linux/mailbox/zynqmp-ipi-message.h @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef _LINUX_ZYNQMP_IPI_MESSAGE_H_ +#define _LINUX_ZYNQMP_IPI_MESSAGE_H_ + +/** + * struct zynqmp_ipi_message - ZynqMP IPI message structure + * @len: Length of message + * @data: message payload + * + * This is the structure for data used in mbox_send_message + * the maximum length of data buffer is fixed to 32 bytes. + * Client is supposed to be aware of this. + */ +struct zynqmp_ipi_message { + size_t len; + u8 data[]; +}; + +#endif /* _LINUX_ZYNQMP_IPI_MESSAGE_H_ */ |