1 /* 2 * Copyright (C) 2016 Broadcom 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License version 2 as 6 * published by the Free Software Foundation. 7 * 8 * Common header for Broadcom mailbox messages which is shared across 9 * Broadcom SoCs and Broadcom mailbox client drivers. 10 */ 11 12 #ifndef _LINUX_BRCM_MESSAGE_H_ 13 #define _LINUX_BRCM_MESSAGE_H_ 14 15 #include <linux/scatterlist.h> 16 17 enum brcm_message_type { 18 BRCM_MESSAGE_UNKNOWN = 0, 19 BRCM_MESSAGE_BATCH, 20 BRCM_MESSAGE_SPU, 21 BRCM_MESSAGE_SBA, 22 BRCM_MESSAGE_MAX, 23 }; 24 25 struct brcm_sba_command { 26 u64 cmd; 27 u64 *cmd_dma; 28 dma_addr_t cmd_dma_addr; 29 #define BRCM_SBA_CMD_TYPE_A BIT(0) 30 #define BRCM_SBA_CMD_TYPE_B BIT(1) 31 #define BRCM_SBA_CMD_TYPE_C BIT(2) 32 #define BRCM_SBA_CMD_HAS_RESP BIT(3) 33 #define BRCM_SBA_CMD_HAS_OUTPUT BIT(4) 34 u64 flags; 35 dma_addr_t resp; 36 size_t resp_len; 37 dma_addr_t data; 38 size_t data_len; 39 }; 40 41 struct brcm_message { 42 enum brcm_message_type type; 43 union { 44 struct { 45 struct brcm_message *msgs; 46 unsigned int msgs_queued; 47 unsigned int msgs_count; 48 } batch; 49 struct { 50 struct scatterlist *src; 51 struct scatterlist *dst; 52 } spu; 53 struct { 54 struct brcm_sba_command *cmds; 55 unsigned int cmds_count; 56 } sba; 57 }; 58 void *ctx; 59 int error; 60 }; 61 62 #endif /* _LINUX_BRCM_MESSAGE_H_ */ 63