0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef _LINUX_BRCM_MESSAGE_H_
0010 #define _LINUX_BRCM_MESSAGE_H_
0011
0012 #include <linux/scatterlist.h>
0013
0014 enum brcm_message_type {
0015 BRCM_MESSAGE_UNKNOWN = 0,
0016 BRCM_MESSAGE_BATCH,
0017 BRCM_MESSAGE_SPU,
0018 BRCM_MESSAGE_SBA,
0019 BRCM_MESSAGE_MAX,
0020 };
0021
0022 struct brcm_sba_command {
0023 u64 cmd;
0024 u64 *cmd_dma;
0025 dma_addr_t cmd_dma_addr;
0026 #define BRCM_SBA_CMD_TYPE_A BIT(0)
0027 #define BRCM_SBA_CMD_TYPE_B BIT(1)
0028 #define BRCM_SBA_CMD_TYPE_C BIT(2)
0029 #define BRCM_SBA_CMD_HAS_RESP BIT(3)
0030 #define BRCM_SBA_CMD_HAS_OUTPUT BIT(4)
0031 u64 flags;
0032 dma_addr_t resp;
0033 size_t resp_len;
0034 dma_addr_t data;
0035 size_t data_len;
0036 };
0037
0038 struct brcm_message {
0039 enum brcm_message_type type;
0040 union {
0041 struct {
0042 struct brcm_message *msgs;
0043 unsigned int msgs_queued;
0044 unsigned int msgs_count;
0045 } batch;
0046 struct {
0047 struct scatterlist *src;
0048 struct scatterlist *dst;
0049 } spu;
0050 struct {
0051 struct brcm_sba_command *cmds;
0052 unsigned int cmds_count;
0053 } sba;
0054 };
0055 void *ctx;
0056 int error;
0057 };
0058
0059 #endif