0001
0002
0003
0004
0005
0006
0007
0008 #ifndef GOYA_PACKETS_H
0009 #define GOYA_PACKETS_H
0010
0011 #include <linux/types.h>
0012
0013 #define PACKET_HEADER_PACKET_ID_SHIFT 56
0014 #define PACKET_HEADER_PACKET_ID_MASK 0x1F00000000000000ull
0015
0016 enum packet_id {
0017 PACKET_WREG_32 = 0x1,
0018 PACKET_WREG_BULK = 0x2,
0019 PACKET_MSG_LONG = 0x3,
0020 PACKET_MSG_SHORT = 0x4,
0021 PACKET_CP_DMA = 0x5,
0022 PACKET_MSG_PROT = 0x7,
0023 PACKET_FENCE = 0x8,
0024 PACKET_LIN_DMA = 0x9,
0025 PACKET_NOP = 0xA,
0026 PACKET_STOP = 0xB,
0027 MAX_PACKET_ID = (PACKET_HEADER_PACKET_ID_MASK >>
0028 PACKET_HEADER_PACKET_ID_SHIFT) + 1
0029 };
0030
0031 #define GOYA_PKT_CTL_OPCODE_SHIFT 24
0032 #define GOYA_PKT_CTL_OPCODE_MASK 0x1F000000
0033
0034 #define GOYA_PKT_CTL_EB_SHIFT 29
0035 #define GOYA_PKT_CTL_EB_MASK 0x20000000
0036
0037 #define GOYA_PKT_CTL_RB_SHIFT 30
0038 #define GOYA_PKT_CTL_RB_MASK 0x40000000
0039
0040 #define GOYA_PKT_CTL_MB_SHIFT 31
0041 #define GOYA_PKT_CTL_MB_MASK 0x80000000
0042
0043
0044
0045
0046
0047
0048 struct goya_packet {
0049 __le64 header;
0050
0051
0052
0053 u8 contents[];
0054 };
0055
0056 struct packet_nop {
0057 __le32 reserved;
0058 __le32 ctl;
0059 };
0060
0061 struct packet_stop {
0062 __le32 reserved;
0063 __le32 ctl;
0064 };
0065
0066 #define GOYA_PKT_WREG32_CTL_REG_OFFSET_SHIFT 0
0067 #define GOYA_PKT_WREG32_CTL_REG_OFFSET_MASK 0x0000FFFF
0068
0069 struct packet_wreg32 {
0070 __le32 value;
0071 __le32 ctl;
0072 };
0073
0074 struct packet_wreg_bulk {
0075 __le32 size64;
0076 __le32 ctl;
0077 __le64 values[];
0078 };
0079
0080 struct packet_msg_long {
0081 __le32 value;
0082 __le32 ctl;
0083 __le64 addr;
0084 };
0085
0086 struct packet_msg_short {
0087 __le32 value;
0088 __le32 ctl;
0089 };
0090
0091 struct packet_msg_prot {
0092 __le32 value;
0093 __le32 ctl;
0094 __le64 addr;
0095 };
0096
0097 struct packet_fence {
0098 __le32 cfg;
0099 __le32 ctl;
0100 };
0101
0102 #define GOYA_PKT_LIN_DMA_CTL_WO_SHIFT 0
0103 #define GOYA_PKT_LIN_DMA_CTL_WO_MASK 0x00000001
0104
0105 #define GOYA_PKT_LIN_DMA_CTL_RDCOMP_SHIFT 1
0106 #define GOYA_PKT_LIN_DMA_CTL_RDCOMP_MASK 0x00000002
0107
0108 #define GOYA_PKT_LIN_DMA_CTL_WRCOMP_SHIFT 2
0109 #define GOYA_PKT_LIN_DMA_CTL_WRCOMP_MASK 0x00000004
0110
0111 #define GOYA_PKT_LIN_DMA_CTL_MEMSET_SHIFT 6
0112 #define GOYA_PKT_LIN_DMA_CTL_MEMSET_MASK 0x00000040
0113
0114 #define GOYA_PKT_LIN_DMA_CTL_DMA_DIR_SHIFT 20
0115 #define GOYA_PKT_LIN_DMA_CTL_DMA_DIR_MASK 0x00700000
0116
0117 struct packet_lin_dma {
0118 __le32 tsize;
0119 __le32 ctl;
0120 __le64 src_addr;
0121 __le64 dst_addr;
0122 };
0123
0124 struct packet_cp_dma {
0125 __le32 tsize;
0126 __le32 ctl;
0127 __le64 src_addr;
0128 };
0129
0130 #endif