1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2014-2018 Chelsio Communications.
10 CPL_SET_TCB_RPL = 0x3A,
11 CPL_SGE_EGR_UPDATE = 0xA5,
14 CPL_TX_PKT_LSO = 0xED,
18 enum { /* TX_PKT_XT checksum types */
29 #define G_TID(x) ((x) & 0xFFFFFF)
31 #define OPCODE_TID(cmd) ((cmd)->ot.opcode_tid)
33 /* extract the TID from a CPL command */
34 #define GET_TID(cmd) (G_TID(be32_to_cpu(OPCODE_TID(cmd))))
38 #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
57 #if defined(RSS_HDR_VLD) || defined(CHELSIO_FW)
58 #define RSS_HDR struct rss_header rss_hdr
64 struct work_request_hdr {
70 #define WR_HDR struct work_request_hdr wr
71 #define WR_HDR_SIZE sizeof(struct work_request_hdr)
79 #define V_COOKIE(x) ((x) << S_COOKIE)
80 #define G_COOKIE(x) (((x) >> S_COOKIE) & M_COOKIE)
82 struct cpl_set_tcb_rpl {
98 struct cpl_tx_pkt_core {
107 struct cpl_tx_pkt_core c;
110 /* cpl_tx_pkt_core.ctrl0 fields */
112 #define M_TXPKT_PF 0x7
113 #define V_TXPKT_PF(x) ((x) << S_TXPKT_PF)
114 #define G_TXPKT_PF(x) (((x) >> S_TXPKT_PF) & M_TXPKT_PF)
116 #define S_TXPKT_INTF 16
117 #define M_TXPKT_INTF 0xF
118 #define V_TXPKT_INTF(x) ((x) << S_TXPKT_INTF)
119 #define G_TXPKT_INTF(x) (((x) >> S_TXPKT_INTF) & M_TXPKT_INTF)
121 #define S_TXPKT_OPCODE 24
122 #define M_TXPKT_OPCODE 0xFF
123 #define V_TXPKT_OPCODE(x) ((x) << S_TXPKT_OPCODE)
124 #define G_TXPKT_OPCODE(x) (((x) >> S_TXPKT_OPCODE) & M_TXPKT_OPCODE)
126 /* cpl_tx_pkt_core.ctrl1 fields */
127 #define S_TXPKT_IPHDR_LEN 20
128 #define M_TXPKT_IPHDR_LEN 0x3FFF
129 #define V_TXPKT_IPHDR_LEN(x) ((__u64)(x) << S_TXPKT_IPHDR_LEN)
130 #define G_TXPKT_IPHDR_LEN(x) (((x) >> S_TXPKT_IPHDR_LEN) & M_TXPKT_IPHDR_LEN)
132 #define S_TXPKT_ETHHDR_LEN 34
133 #define M_TXPKT_ETHHDR_LEN 0x3F
134 #define V_TXPKT_ETHHDR_LEN(x) ((__u64)(x) << S_TXPKT_ETHHDR_LEN)
135 #define G_TXPKT_ETHHDR_LEN(x) (((x) >> S_TXPKT_ETHHDR_LEN) & M_TXPKT_ETHHDR_LEN)
137 #define S_T6_TXPKT_ETHHDR_LEN 32
138 #define M_T6_TXPKT_ETHHDR_LEN 0xFF
139 #define V_T6_TXPKT_ETHHDR_LEN(x) ((__u64)(x) << S_T6_TXPKT_ETHHDR_LEN)
140 #define G_T6_TXPKT_ETHHDR_LEN(x) \
141 (((x) >> S_T6_TXPKT_ETHHDR_LEN) & M_T6_TXPKT_ETHHDR_LEN)
143 #define S_TXPKT_CSUM_TYPE 40
144 #define M_TXPKT_CSUM_TYPE 0xF
145 #define V_TXPKT_CSUM_TYPE(x) ((__u64)(x) << S_TXPKT_CSUM_TYPE)
146 #define G_TXPKT_CSUM_TYPE(x) (((x) >> S_TXPKT_CSUM_TYPE) & M_TXPKT_CSUM_TYPE)
148 #define S_TXPKT_VLAN 44
149 #define M_TXPKT_VLAN 0xFFFF
150 #define V_TXPKT_VLAN(x) ((__u64)(x) << S_TXPKT_VLAN)
151 #define G_TXPKT_VLAN(x) (((x) >> S_TXPKT_VLAN) & M_TXPKT_VLAN)
153 #define S_TXPKT_VLAN_VLD 60
154 #define V_TXPKT_VLAN_VLD(x) ((__u64)(x) << S_TXPKT_VLAN_VLD)
155 #define F_TXPKT_VLAN_VLD V_TXPKT_VLAN_VLD(1ULL)
157 #define S_TXPKT_IPCSUM_DIS 62
158 #define V_TXPKT_IPCSUM_DIS(x) ((__u64)(x) << S_TXPKT_IPCSUM_DIS)
159 #define F_TXPKT_IPCSUM_DIS V_TXPKT_IPCSUM_DIS(1ULL)
161 #define S_TXPKT_L4CSUM_DIS 63
162 #define V_TXPKT_L4CSUM_DIS(x) ((__u64)(x) << S_TXPKT_L4CSUM_DIS)
163 #define F_TXPKT_L4CSUM_DIS V_TXPKT_L4CSUM_DIS(1ULL)
165 struct cpl_tx_pkt_lso_core {
171 /* encapsulated CPL (TX_PKT, TX_PKT_XT or TX_DATA) follows here */
174 struct cpl_tx_pkt_lso {
176 struct cpl_tx_pkt_lso_core c;
177 /* encapsulated CPL (TX_PKT, TX_PKT_XT or TX_DATA) follows here */
180 /* cpl_tx_pkt_lso_core.lso_ctrl fields */
181 #define S_LSO_TCPHDR_LEN 0
182 #define M_LSO_TCPHDR_LEN 0xF
183 #define V_LSO_TCPHDR_LEN(x) ((x) << S_LSO_TCPHDR_LEN)
184 #define G_LSO_TCPHDR_LEN(x) (((x) >> S_LSO_TCPHDR_LEN) & M_LSO_TCPHDR_LEN)
186 #define S_LSO_IPHDR_LEN 4
187 #define M_LSO_IPHDR_LEN 0xFFF
188 #define V_LSO_IPHDR_LEN(x) ((x) << S_LSO_IPHDR_LEN)
189 #define G_LSO_IPHDR_LEN(x) (((x) >> S_LSO_IPHDR_LEN) & M_LSO_IPHDR_LEN)
191 #define S_LSO_ETHHDR_LEN 16
192 #define M_LSO_ETHHDR_LEN 0xF
193 #define V_LSO_ETHHDR_LEN(x) ((x) << S_LSO_ETHHDR_LEN)
194 #define G_LSO_ETHHDR_LEN(x) (((x) >> S_LSO_ETHHDR_LEN) & M_LSO_ETHHDR_LEN)
196 #define S_LSO_IPV6 20
197 #define V_LSO_IPV6(x) ((x) << S_LSO_IPV6)
198 #define F_LSO_IPV6 V_LSO_IPV6(1U)
200 #define S_LSO_LAST_SLICE 22
201 #define V_LSO_LAST_SLICE(x) ((x) << S_LSO_LAST_SLICE)
202 #define F_LSO_LAST_SLICE V_LSO_LAST_SLICE(1U)
204 #define S_LSO_FIRST_SLICE 23
205 #define V_LSO_FIRST_SLICE(x) ((x) << S_LSO_FIRST_SLICE)
206 #define F_LSO_FIRST_SLICE V_LSO_FIRST_SLICE(1U)
208 #define S_LSO_OPCODE 24
209 #define M_LSO_OPCODE 0xFF
210 #define V_LSO_OPCODE(x) ((x) << S_LSO_OPCODE)
211 #define G_LSO_OPCODE(x) (((x) >> S_LSO_OPCODE) & M_LSO_OPCODE)
213 #define S_LSO_T5_XFER_SIZE 0
214 #define M_LSO_T5_XFER_SIZE 0xFFFFFFF
215 #define V_LSO_T5_XFER_SIZE(x) ((x) << S_LSO_T5_XFER_SIZE)
216 #define G_LSO_T5_XFER_SIZE(x) (((x) >> S_LSO_T5_XFER_SIZE) & M_LSO_T5_XFER_SIZE)
221 #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
242 /* rx_pkt.l2info fields */
244 #define V_RXF_UDP(x) ((x) << S_RXF_UDP)
245 #define F_RXF_UDP V_RXF_UDP(1U)
248 #define V_RXF_TCP(x) ((x) << S_RXF_TCP)
249 #define F_RXF_TCP V_RXF_TCP(1U)
252 #define V_RXF_IP(x) ((x) << S_RXF_IP)
253 #define F_RXF_IP V_RXF_IP(1U)
256 #define V_RXF_IP6(x) ((x) << S_RXF_IP6)
257 #define F_RXF_IP6 V_RXF_IP6(1U)
259 /* rx_pkt.err_vec fields */
260 /* In T6, rx_pkt.err_vec indicates
261 * RxError Error vector (16b) or
262 * Encapsulating header length (8b),
263 * Outer encapsulation type (2b) and
264 * compressed error vector (6b) if CRxPktEnc is
265 * enabled in TP_OUT_CONFIG
267 #define S_T6_COMPR_RXERR_VEC 0
268 #define M_T6_COMPR_RXERR_VEC 0x3F
269 #define V_T6_COMPR_RXERR_VEC(x) ((x) << S_T6_COMPR_RXERR_VEC)
270 #define G_T6_COMPR_RXERR_VEC(x) \
271 (((x) >> S_T6_COMPR_RXERR_VEC) & M_T6_COMPR_RXERR_VEC)
273 /* cpl_fw*.type values */
297 ULP_TX_SC_IMM = 0x81,
298 ULP_TX_SC_DSGL = 0x82,
299 ULP_TX_SC_ISGL = 0x83
302 #define S_ULPTX_CMD 24
303 #define M_ULPTX_CMD 0xFF
304 #define V_ULPTX_CMD(x) ((x) << S_ULPTX_CMD)
306 #define S_ULP_TX_SC_MORE 23
307 #define V_ULP_TX_SC_MORE(x) ((x) << S_ULP_TX_SC_MORE)
308 #define F_ULP_TX_SC_MORE V_ULP_TX_SC_MORE(1U)
310 struct ulptx_sge_pair {
320 #if !(defined C99_NOT_SUPPORTED)
321 struct ulptx_sge_pair sge[0];
331 #define S_ULPTX_NSGE 0
332 #define M_ULPTX_NSGE 0xFFFF
333 #define V_ULPTX_NSGE(x) ((x) << S_ULPTX_NSGE)
340 /* ulp_txpkt.cmd_dest fields */
341 #define S_ULP_TXPKT_DEST 16
342 #define M_ULP_TXPKT_DEST 0x3
343 #define V_ULP_TXPKT_DEST(x) ((x) << S_ULP_TXPKT_DEST)
345 #define S_ULP_TXPKT_FID 4
346 #define M_ULP_TXPKT_FID 0x7ff
347 #define V_ULP_TXPKT_FID(x) ((x) << S_ULP_TXPKT_FID)
349 #define S_ULP_TXPKT_RO 3
350 #define V_ULP_TXPKT_RO(x) ((x) << S_ULP_TXPKT_RO)
351 #define F_ULP_TXPKT_RO V_ULP_TXPKT_RO(1U)
353 #endif /* T4_MSG_H */