1218792Snp/*-
2218792Snp * Copyright (c) 2011 Chelsio Communications, Inc.
3218792Snp * All rights reserved.
4218792Snp *
5218792Snp * Redistribution and use in source and binary forms, with or without
6218792Snp * modification, are permitted provided that the following conditions
7218792Snp * are met:
8218792Snp * 1. Redistributions of source code must retain the above copyright
9218792Snp *    notice, this list of conditions and the following disclaimer.
10218792Snp * 2. Redistributions in binary form must reproduce the above copyright
11218792Snp *    notice, this list of conditions and the following disclaimer in the
12218792Snp *    documentation and/or other materials provided with the distribution.
13218792Snp *
14218792Snp * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15218792Snp * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16218792Snp * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17218792Snp * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18218792Snp * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19218792Snp * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20218792Snp * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21218792Snp * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22218792Snp * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23218792Snp * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24218792Snp * SUCH DAMAGE.
25218792Snp *
26218792Snp * $FreeBSD: releng/10.2/sys/dev/cxgbe/common/t4_msg.h 283854 2015-05-31 23:11:25Z np $
27218792Snp *
28218792Snp */
29218792Snp
30218792Snp#ifndef T4_MSG_H
31218792Snp#define T4_MSG_H
32218792Snp
33218792Snpenum {
34218792Snp	CPL_PASS_OPEN_REQ     = 0x1,
35218792Snp	CPL_PASS_ACCEPT_RPL   = 0x2,
36218792Snp	CPL_ACT_OPEN_REQ      = 0x3,
37218792Snp	CPL_SET_TCB           = 0x4,
38218792Snp	CPL_SET_TCB_FIELD     = 0x5,
39218792Snp	CPL_GET_TCB           = 0x6,
40218792Snp	CPL_CLOSE_CON_REQ     = 0x8,
41218792Snp	CPL_CLOSE_LISTSRV_REQ = 0x9,
42218792Snp	CPL_ABORT_REQ         = 0xA,
43218792Snp	CPL_ABORT_RPL         = 0xB,
44218792Snp	CPL_TX_DATA           = 0xC,
45218792Snp	CPL_RX_DATA_ACK       = 0xD,
46218792Snp	CPL_TX_PKT            = 0xE,
47218792Snp	CPL_RTE_DELETE_REQ    = 0xF,
48218792Snp	CPL_RTE_WRITE_REQ     = 0x10,
49218792Snp	CPL_RTE_READ_REQ      = 0x11,
50218792Snp	CPL_L2T_WRITE_REQ     = 0x12,
51218792Snp	CPL_L2T_READ_REQ      = 0x13,
52218792Snp	CPL_SMT_WRITE_REQ     = 0x14,
53218792Snp	CPL_SMT_READ_REQ      = 0x15,
54237436Snp	CPL_TAG_WRITE_REQ     = 0x16,
55218792Snp	CPL_BARRIER           = 0x18,
56218792Snp	CPL_TID_RELEASE       = 0x1A,
57237436Snp	CPL_TAG_READ_REQ      = 0x1B,
58237436Snp	CPL_TX_PKT_FSO        = 0x1E,
59237436Snp	CPL_TX_PKT_ISO        = 0x1F,
60218792Snp
61218792Snp	CPL_CLOSE_LISTSRV_RPL = 0x20,
62218792Snp	CPL_ERROR             = 0x21,
63218792Snp	CPL_GET_TCB_RPL       = 0x22,
64218792Snp	CPL_L2T_WRITE_RPL     = 0x23,
65218792Snp	CPL_PASS_OPEN_RPL     = 0x24,
66218792Snp	CPL_ACT_OPEN_RPL      = 0x25,
67218792Snp	CPL_PEER_CLOSE        = 0x26,
68218792Snp	CPL_RTE_DELETE_RPL    = 0x27,
69218792Snp	CPL_RTE_WRITE_RPL     = 0x28,
70218792Snp	CPL_RX_URG_PKT        = 0x29,
71237436Snp	CPL_TAG_WRITE_RPL     = 0x2A,
72218792Snp	CPL_ABORT_REQ_RSS     = 0x2B,
73218792Snp	CPL_RX_URG_NOTIFY     = 0x2C,
74218792Snp	CPL_ABORT_RPL_RSS     = 0x2D,
75218792Snp	CPL_SMT_WRITE_RPL     = 0x2E,
76218792Snp	CPL_TX_DATA_ACK       = 0x2F,
77218792Snp
78218792Snp	CPL_RX_PHYS_ADDR      = 0x30,
79218792Snp	CPL_PCMD_READ_RPL     = 0x31,
80218792Snp	CPL_CLOSE_CON_RPL     = 0x32,
81218792Snp	CPL_ISCSI_HDR         = 0x33,
82218792Snp	CPL_L2T_READ_RPL      = 0x34,
83218792Snp	CPL_RDMA_CQE          = 0x35,
84218792Snp	CPL_RDMA_CQE_READ_RSP = 0x36,
85218792Snp	CPL_RDMA_CQE_ERR      = 0x37,
86218792Snp	CPL_RTE_READ_RPL      = 0x38,
87218792Snp	CPL_RX_DATA           = 0x39,
88218792Snp	CPL_SET_TCB_RPL       = 0x3A,
89218792Snp	CPL_RX_PKT            = 0x3B,
90237436Snp	CPL_TAG_READ_RPL      = 0x3C,
91218792Snp	CPL_HIT_NOTIFY        = 0x3D,
92218792Snp	CPL_PKT_NOTIFY        = 0x3E,
93218792Snp	CPL_RX_DDP_COMPLETE   = 0x3F,
94218792Snp
95218792Snp	CPL_ACT_ESTABLISH     = 0x40,
96218792Snp	CPL_PASS_ESTABLISH    = 0x41,
97218792Snp	CPL_RX_DATA_DDP       = 0x42,
98218792Snp	CPL_SMT_READ_RPL      = 0x43,
99218792Snp	CPL_PASS_ACCEPT_REQ   = 0x44,
100218792Snp	CPL_RX2TX_PKT         = 0x45,
101218792Snp	CPL_RX_FCOE_DDP       = 0x46,
102218792Snp	CPL_FCOE_HDR          = 0x47,
103237436Snp	CPL_T5_TRACE_PKT      = 0x48,
104237436Snp	CPL_RX_ISCSI_DDP      = 0x49,
105237436Snp	CPL_RX_FCOE_DIF       = 0x4A,
106237436Snp	CPL_RX_DATA_DIF       = 0x4B,
107248925Snp	CPL_ERR_NOTIFY	      = 0x4D,
108218792Snp
109218792Snp	CPL_RDMA_READ_REQ     = 0x60,
110237436Snp	CPL_RX_ISCSI_DIF      = 0x60,
111218792Snp
112218792Snp	CPL_SET_LE_REQ        = 0x80,
113218792Snp	CPL_PASS_OPEN_REQ6    = 0x81,
114218792Snp	CPL_ACT_OPEN_REQ6     = 0x83,
115218792Snp
116218792Snp	CPL_RDMA_TERMINATE    = 0xA2,
117218792Snp	CPL_RDMA_WRITE        = 0xA4,
118218792Snp	CPL_SGE_EGR_UPDATE    = 0xA5,
119218792Snp	CPL_SET_LE_RPL        = 0xA6,
120218792Snp	CPL_FW2_MSG           = 0xA7,
121218792Snp	CPL_FW2_PLD           = 0xA8,
122237436Snp	CPL_T5_RDMA_READ_REQ  = 0xA9,
123237436Snp	CPL_RDMA_ATOMIC_REQ   = 0xAA,
124237436Snp	CPL_RDMA_ATOMIC_RPL   = 0xAB,
125237436Snp	CPL_RDMA_IMM_DATA     = 0xAC,
126237436Snp	CPL_RDMA_IMM_DATA_SE  = 0xAD,
127218792Snp
128218792Snp	CPL_TRACE_PKT         = 0xB0,
129248925Snp	CPL_TRACE_PKT_T5      = 0x48,
130218792Snp	CPL_RX2TX_DATA        = 0xB1,
131237436Snp	CPL_ISCSI_DATA        = 0xB2,
132237436Snp	CPL_FCOE_DATA         = 0xB3,
133218792Snp
134218792Snp	CPL_FW4_MSG           = 0xC0,
135218792Snp	CPL_FW4_PLD           = 0xC1,
136218792Snp	CPL_FW4_ACK           = 0xC3,
137218792Snp
138218792Snp	CPL_FW6_MSG           = 0xE0,
139218792Snp	CPL_FW6_PLD           = 0xE1,
140218792Snp	CPL_TX_PKT_LSO        = 0xED,
141218792Snp	CPL_TX_PKT_XT         = 0xEE,
142218792Snp
143218792Snp	NUM_CPL_CMDS    /* must be last and previous entries must be sorted */
144218792Snp};
145218792Snp
146218792Snpenum CPL_error {
147218792Snp	CPL_ERR_NONE               = 0,
148218792Snp	CPL_ERR_TCAM_PARITY        = 1,
149218792Snp	CPL_ERR_TCAM_FULL          = 3,
150218792Snp	CPL_ERR_BAD_LENGTH         = 15,
151218792Snp	CPL_ERR_BAD_ROUTE          = 18,
152218792Snp	CPL_ERR_CONN_RESET         = 20,
153218792Snp	CPL_ERR_CONN_EXIST_SYNRECV = 21,
154218792Snp	CPL_ERR_CONN_EXIST         = 22,
155218792Snp	CPL_ERR_ARP_MISS           = 23,
156218792Snp	CPL_ERR_BAD_SYN            = 24,
157218792Snp	CPL_ERR_CONN_TIMEDOUT      = 30,
158218792Snp	CPL_ERR_XMIT_TIMEDOUT      = 31,
159218792Snp	CPL_ERR_PERSIST_TIMEDOUT   = 32,
160218792Snp	CPL_ERR_FINWAIT2_TIMEDOUT  = 33,
161218792Snp	CPL_ERR_KEEPALIVE_TIMEDOUT = 34,
162218792Snp	CPL_ERR_RTX_NEG_ADVICE     = 35,
163218792Snp	CPL_ERR_PERSIST_NEG_ADVICE = 36,
164245935Snp	CPL_ERR_KEEPALV_NEG_ADVICE = 37,
165245935Snp	CPL_ERR_WAIT_ARP_RPL       = 41,
166218792Snp	CPL_ERR_ABORT_FAILED       = 42,
167218792Snp	CPL_ERR_IWARP_FLM          = 50,
168218792Snp};
169218792Snp
170218792Snpenum {
171218792Snp	CPL_CONN_POLICY_AUTO = 0,
172218792Snp	CPL_CONN_POLICY_ASK  = 1,
173218792Snp	CPL_CONN_POLICY_FILTER = 2,
174218792Snp	CPL_CONN_POLICY_DENY = 3
175218792Snp};
176218792Snp
177218792Snpenum {
178218792Snp	ULP_MODE_NONE          = 0,
179218792Snp	ULP_MODE_ISCSI         = 2,
180218792Snp	ULP_MODE_RDMA          = 4,
181218792Snp	ULP_MODE_TCPDDP        = 5,
182218792Snp	ULP_MODE_FCOE          = 6,
183218792Snp};
184218792Snp
185218792Snpenum {
186218792Snp	ULP_CRC_HEADER = 1 << 0,
187218792Snp	ULP_CRC_DATA   = 1 << 1
188218792Snp};
189218792Snp
190218792Snpenum {
191218792Snp	CPL_PASS_OPEN_ACCEPT,
192218792Snp	CPL_PASS_OPEN_REJECT,
193218792Snp	CPL_PASS_OPEN_ACCEPT_TNL
194218792Snp};
195218792Snp
196218792Snpenum {
197218792Snp	CPL_ABORT_SEND_RST = 0,
198218792Snp	CPL_ABORT_NO_RST,
199218792Snp};
200218792Snp
201218792Snpenum {                     /* TX_PKT_XT checksum types */
202218792Snp	TX_CSUM_TCP    = 0,
203218792Snp	TX_CSUM_UDP    = 1,
204218792Snp	TX_CSUM_CRC16  = 4,
205218792Snp	TX_CSUM_CRC32  = 5,
206218792Snp	TX_CSUM_CRC32C = 6,
207218792Snp	TX_CSUM_FCOE   = 7,
208218792Snp	TX_CSUM_TCPIP  = 8,
209218792Snp	TX_CSUM_UDPIP  = 9,
210218792Snp	TX_CSUM_TCPIP6 = 10,
211218792Snp	TX_CSUM_UDPIP6 = 11,
212218792Snp	TX_CSUM_IP     = 12,
213218792Snp};
214218792Snp
215218792Snpenum {                     /* packet type in CPL_RX_PKT */
216218792Snp	PKTYPE_XACT_UCAST = 0,
217218792Snp	PKTYPE_HASH_UCAST = 1,
218218792Snp	PKTYPE_XACT_MCAST = 2,
219218792Snp	PKTYPE_HASH_MCAST = 3,
220218792Snp	PKTYPE_PROMISC    = 4,
221218792Snp	PKTYPE_HPROMISC   = 5,
222218792Snp	PKTYPE_BCAST      = 6
223218792Snp};
224218792Snp
225218792Snpenum {                     /* DMAC type in CPL_RX_PKT */
226218792Snp	DATYPE_UCAST,
227218792Snp	DATYPE_MCAST,
228218792Snp	DATYPE_BCAST
229218792Snp};
230218792Snp
231218792Snpenum {                     /* TCP congestion control algorithms */
232218792Snp	CONG_ALG_RENO,
233218792Snp	CONG_ALG_TAHOE,
234218792Snp	CONG_ALG_NEWRENO,
235218792Snp	CONG_ALG_HIGHSPEED
236218792Snp};
237218792Snp
238218792Snpenum {                     /* RSS hash type */
239218792Snp	RSS_HASH_NONE = 0, /* no hash computed */
240218792Snp	RSS_HASH_IP   = 1, /* IP or IPv6 2-tuple hash */
241218792Snp	RSS_HASH_TCP  = 2, /* TCP 4-tuple hash */
242218792Snp	RSS_HASH_UDP  = 3  /* UDP 4-tuple hash */
243218792Snp};
244218792Snp
245218792Snpenum {                     /* LE commands */
246218792Snp	LE_CMD_READ  = 0x4,
247218792Snp	LE_CMD_WRITE = 0xb
248218792Snp};
249218792Snp
250218792Snpenum {                     /* LE request size */
251218792Snp	LE_SZ_NONE = 0,
252218792Snp	LE_SZ_33   = 1,
253218792Snp	LE_SZ_66   = 2,
254218792Snp	LE_SZ_132  = 3,
255218792Snp	LE_SZ_264  = 4,
256218792Snp	LE_SZ_528  = 5
257218792Snp};
258218792Snp
259218792Snpunion opcode_tid {
260218792Snp	__be32 opcode_tid;
261218792Snp	__u8 opcode;
262218792Snp};
263218792Snp
264218792Snp#define S_CPL_OPCODE    24
265218792Snp#define V_CPL_OPCODE(x) ((x) << S_CPL_OPCODE)
266218792Snp#define G_CPL_OPCODE(x) (((x) >> S_CPL_OPCODE) & 0xFF)
267218792Snp#define G_TID(x)    ((x) & 0xFFFFFF)
268218792Snp
269218792Snp/* tid is assumed to be 24-bits */
270218792Snp#define MK_OPCODE_TID(opcode, tid) (V_CPL_OPCODE(opcode) | (tid))
271218792Snp
272218792Snp#define OPCODE_TID(cmd) ((cmd)->ot.opcode_tid)
273218792Snp
274218792Snp/* extract the TID from a CPL command */
275218792Snp#define GET_TID(cmd) (G_TID(ntohl(OPCODE_TID(cmd))))
276283854Snp#define GET_OPCODE(cmd) ((cmd)->ot.opcode)
277218792Snp
278218792Snp/* partitioning of TID fields that also carry a queue id */
279218792Snp#define S_TID_TID    0
280218792Snp#define M_TID_TID    0x3fff
281218792Snp#define V_TID_TID(x) ((x) << S_TID_TID)
282218792Snp#define G_TID_TID(x) (((x) >> S_TID_TID) & M_TID_TID)
283218792Snp
284218792Snp#define S_TID_QID    14
285218792Snp#define M_TID_QID    0x3ff
286218792Snp#define V_TID_QID(x) ((x) << S_TID_QID)
287218792Snp#define G_TID_QID(x) (((x) >> S_TID_QID) & M_TID_QID)
288218792Snp
289218792Snpunion opcode_info {
290218792Snp	__be64 opcode_info;
291218792Snp	__u8 opcode;
292218792Snp};
293218792Snp
294218792Snpstruct tcp_options {
295218792Snp	__be16 mss;
296218792Snp	__u8 wsf;
297218792Snp#if defined(__LITTLE_ENDIAN_BITFIELD)
298218792Snp	__u8 :4;
299218792Snp	__u8 unknown:1;
300237436Snp	__u8 ecn:1;
301218792Snp	__u8 sack:1;
302218792Snp	__u8 tstamp:1;
303218792Snp#else
304218792Snp	__u8 tstamp:1;
305218792Snp	__u8 sack:1;
306237436Snp	__u8 ecn:1;
307218792Snp	__u8 unknown:1;
308218792Snp	__u8 :4;
309218792Snp#endif
310218792Snp};
311218792Snp
312218792Snpstruct rss_header {
313218792Snp	__u8 opcode;
314218792Snp#if defined(__LITTLE_ENDIAN_BITFIELD)
315218792Snp	__u8 channel:2;
316218792Snp	__u8 filter_hit:1;
317218792Snp	__u8 filter_tid:1;
318218792Snp	__u8 hash_type:2;
319218792Snp	__u8 ipv6:1;
320218792Snp	__u8 send2fw:1;
321218792Snp#else
322218792Snp	__u8 send2fw:1;
323218792Snp	__u8 ipv6:1;
324218792Snp	__u8 hash_type:2;
325218792Snp	__u8 filter_tid:1;
326218792Snp	__u8 filter_hit:1;
327218792Snp	__u8 channel:2;
328218792Snp#endif
329218792Snp	__be16 qid;
330218792Snp	__be32 hash_val;
331218792Snp};
332218792Snp
333218792Snp#define S_HASHTYPE 20
334218792Snp#define M_HASHTYPE 0x3
335218792Snp#define G_HASHTYPE(x) (((x) >> S_HASHTYPE) & M_HASHTYPE)
336218792Snp
337218792Snp#define S_QNUM 0
338218792Snp#define M_QNUM 0xFFFF
339218792Snp#define G_QNUM(x) (((x) >> S_QNUM) & M_QNUM)
340218792Snp
341218792Snp#ifndef CHELSIO_FW
342218792Snpstruct work_request_hdr {
343218792Snp	__be32 wr_hi;
344218792Snp	__be32 wr_mid;
345218792Snp	__be64 wr_lo;
346218792Snp};
347218792Snp
348218792Snp/* wr_mid fields */
349218792Snp#define S_WR_LEN16    0
350218792Snp#define M_WR_LEN16    0xFF
351218792Snp#define V_WR_LEN16(x) ((x) << S_WR_LEN16)
352218792Snp#define G_WR_LEN16(x) (((x) >> S_WR_LEN16) & M_WR_LEN16)
353218792Snp
354218792Snp/* wr_hi fields */
355218792Snp#define S_WR_OP    24
356218792Snp#define M_WR_OP    0xFF
357218792Snp#define V_WR_OP(x) ((__u64)(x) << S_WR_OP)
358218792Snp#define G_WR_OP(x) (((x) >> S_WR_OP) & M_WR_OP)
359218792Snp
360218792Snp# define WR_HDR struct work_request_hdr wr
361218792Snp# define WR_HDR_SIZE sizeof(struct work_request_hdr)
362218792Snp# define RSS_HDR
363218792Snp#else
364218792Snp# define WR_HDR
365218792Snp# define WR_HDR_SIZE 0
366218792Snp# define RSS_HDR struct rss_header rss_hdr;
367218792Snp#endif
368218792Snp
369218792Snp/* option 0 fields */
370218792Snp#define S_ACCEPT_MODE    0
371218792Snp#define M_ACCEPT_MODE    0x3
372218792Snp#define V_ACCEPT_MODE(x) ((x) << S_ACCEPT_MODE)
373218792Snp#define G_ACCEPT_MODE(x) (((x) >> S_ACCEPT_MODE) & M_ACCEPT_MODE)
374218792Snp
375218792Snp#define S_TX_CHAN    2
376218792Snp#define M_TX_CHAN    0x3
377218792Snp#define V_TX_CHAN(x) ((x) << S_TX_CHAN)
378218792Snp#define G_TX_CHAN(x) (((x) >> S_TX_CHAN) & M_TX_CHAN)
379218792Snp
380218792Snp#define S_NO_CONG    4
381218792Snp#define V_NO_CONG(x) ((x) << S_NO_CONG)
382218792Snp#define F_NO_CONG    V_NO_CONG(1U)
383218792Snp
384218792Snp#define S_DELACK    5
385218792Snp#define V_DELACK(x) ((x) << S_DELACK)
386218792Snp#define F_DELACK    V_DELACK(1U)
387218792Snp
388218792Snp#define S_INJECT_TIMER    6
389218792Snp#define V_INJECT_TIMER(x) ((x) << S_INJECT_TIMER)
390218792Snp#define F_INJECT_TIMER    V_INJECT_TIMER(1U)
391218792Snp
392218792Snp#define S_NON_OFFLOAD    7
393218792Snp#define V_NON_OFFLOAD(x) ((x) << S_NON_OFFLOAD)
394218792Snp#define F_NON_OFFLOAD    V_NON_OFFLOAD(1U)
395218792Snp
396218792Snp#define S_ULP_MODE    8
397218792Snp#define M_ULP_MODE    0xF
398218792Snp#define V_ULP_MODE(x) ((x) << S_ULP_MODE)
399218792Snp#define G_ULP_MODE(x) (((x) >> S_ULP_MODE) & M_ULP_MODE)
400218792Snp
401218792Snp#define S_RCV_BUFSIZ    12
402218792Snp#define M_RCV_BUFSIZ    0x3FFU
403218792Snp#define V_RCV_BUFSIZ(x) ((x) << S_RCV_BUFSIZ)
404218792Snp#define G_RCV_BUFSIZ(x) (((x) >> S_RCV_BUFSIZ) & M_RCV_BUFSIZ)
405218792Snp
406218792Snp#define S_DSCP    22
407218792Snp#define M_DSCP    0x3F
408218792Snp#define V_DSCP(x) ((x) << S_DSCP)
409218792Snp#define G_DSCP(x) (((x) >> S_DSCP) & M_DSCP)
410218792Snp
411218792Snp#define S_SMAC_SEL    28
412218792Snp#define M_SMAC_SEL    0xFF
413218792Snp#define V_SMAC_SEL(x) ((__u64)(x) << S_SMAC_SEL)
414218792Snp#define G_SMAC_SEL(x) (((x) >> S_SMAC_SEL) & M_SMAC_SEL)
415218792Snp
416218792Snp#define S_L2T_IDX    36
417218792Snp#define M_L2T_IDX    0xFFF
418218792Snp#define V_L2T_IDX(x) ((__u64)(x) << S_L2T_IDX)
419218792Snp#define G_L2T_IDX(x) (((x) >> S_L2T_IDX) & M_L2T_IDX)
420218792Snp
421218792Snp#define S_TCAM_BYPASS    48
422218792Snp#define V_TCAM_BYPASS(x) ((__u64)(x) << S_TCAM_BYPASS)
423218792Snp#define F_TCAM_BYPASS    V_TCAM_BYPASS(1ULL)
424218792Snp
425218792Snp#define S_NAGLE    49
426218792Snp#define V_NAGLE(x) ((__u64)(x) << S_NAGLE)
427218792Snp#define F_NAGLE    V_NAGLE(1ULL)
428218792Snp
429218792Snp#define S_WND_SCALE    50
430218792Snp#define M_WND_SCALE    0xF
431218792Snp#define V_WND_SCALE(x) ((__u64)(x) << S_WND_SCALE)
432218792Snp#define G_WND_SCALE(x) (((x) >> S_WND_SCALE) & M_WND_SCALE)
433218792Snp
434218792Snp#define S_KEEP_ALIVE    54
435218792Snp#define V_KEEP_ALIVE(x) ((__u64)(x) << S_KEEP_ALIVE)
436218792Snp#define F_KEEP_ALIVE    V_KEEP_ALIVE(1ULL)
437218792Snp
438218792Snp#define S_MAX_RT    55
439218792Snp#define M_MAX_RT    0xF
440218792Snp#define V_MAX_RT(x) ((__u64)(x) << S_MAX_RT)
441218792Snp#define G_MAX_RT(x) (((x) >> S_MAX_RT) & M_MAX_RT)
442218792Snp
443218792Snp#define S_MAX_RT_OVERRIDE    59
444218792Snp#define V_MAX_RT_OVERRIDE(x) ((__u64)(x) << S_MAX_RT_OVERRIDE)
445218792Snp#define F_MAX_RT_OVERRIDE    V_MAX_RT_OVERRIDE(1ULL)
446218792Snp
447218792Snp#define S_MSS_IDX    60
448218792Snp#define M_MSS_IDX    0xF
449218792Snp#define V_MSS_IDX(x) ((__u64)(x) << S_MSS_IDX)
450218792Snp#define G_MSS_IDX(x) (((x) >> S_MSS_IDX) & M_MSS_IDX)
451218792Snp
452218792Snp/* option 1 fields */
453218792Snp#define S_SYN_RSS_ENABLE    0
454218792Snp#define V_SYN_RSS_ENABLE(x) ((x) << S_SYN_RSS_ENABLE)
455218792Snp#define F_SYN_RSS_ENABLE    V_SYN_RSS_ENABLE(1U)
456218792Snp
457218792Snp#define S_SYN_RSS_USE_HASH    1
458218792Snp#define V_SYN_RSS_USE_HASH(x) ((x) << S_SYN_RSS_USE_HASH)
459218792Snp#define F_SYN_RSS_USE_HASH    V_SYN_RSS_USE_HASH(1U)
460218792Snp
461218792Snp#define S_SYN_RSS_QUEUE    2
462218792Snp#define M_SYN_RSS_QUEUE    0x3FF
463218792Snp#define V_SYN_RSS_QUEUE(x) ((x) << S_SYN_RSS_QUEUE)
464218792Snp#define G_SYN_RSS_QUEUE(x) (((x) >> S_SYN_RSS_QUEUE) & M_SYN_RSS_QUEUE)
465218792Snp
466218792Snp#define S_LISTEN_INTF    12
467218792Snp#define M_LISTEN_INTF    0xFF
468218792Snp#define V_LISTEN_INTF(x) ((x) << S_LISTEN_INTF)
469218792Snp#define G_LISTEN_INTF(x) (((x) >> S_LISTEN_INTF) & M_LISTEN_INTF)
470218792Snp
471218792Snp#define S_LISTEN_FILTER    20
472218792Snp#define V_LISTEN_FILTER(x) ((x) << S_LISTEN_FILTER)
473218792Snp#define F_LISTEN_FILTER    V_LISTEN_FILTER(1U)
474218792Snp
475218792Snp#define S_SYN_DEFENSE    21
476218792Snp#define V_SYN_DEFENSE(x) ((x) << S_SYN_DEFENSE)
477218792Snp#define F_SYN_DEFENSE    V_SYN_DEFENSE(1U)
478218792Snp
479218792Snp#define S_CONN_POLICY    22
480218792Snp#define M_CONN_POLICY    0x3
481218792Snp#define V_CONN_POLICY(x) ((x) << S_CONN_POLICY)
482218792Snp#define G_CONN_POLICY(x) (((x) >> S_CONN_POLICY) & M_CONN_POLICY)
483218792Snp
484248925Snp#define S_FILT_INFO    28
485248925Snp#define M_FILT_INFO    0xfffffffffULL
486248925Snp#define V_FILT_INFO(x) ((x) << S_FILT_INFO)
487248925Snp#define G_FILT_INFO(x) (((x) >> S_FILT_INFO) & M_FILT_INFO)
488248925Snp
489218792Snp/* option 2 fields */
490218792Snp#define S_RSS_QUEUE    0
491218792Snp#define M_RSS_QUEUE    0x3FF
492218792Snp#define V_RSS_QUEUE(x) ((x) << S_RSS_QUEUE)
493218792Snp#define G_RSS_QUEUE(x) (((x) >> S_RSS_QUEUE) & M_RSS_QUEUE)
494218792Snp
495218792Snp#define S_RSS_QUEUE_VALID    10
496218792Snp#define V_RSS_QUEUE_VALID(x) ((x) << S_RSS_QUEUE_VALID)
497218792Snp#define F_RSS_QUEUE_VALID    V_RSS_QUEUE_VALID(1U)
498218792Snp
499218792Snp#define S_RX_COALESCE_VALID    11
500218792Snp#define V_RX_COALESCE_VALID(x) ((x) << S_RX_COALESCE_VALID)
501218792Snp#define F_RX_COALESCE_VALID    V_RX_COALESCE_VALID(1U)
502218792Snp
503218792Snp#define S_RX_COALESCE    12
504218792Snp#define M_RX_COALESCE    0x3
505218792Snp#define V_RX_COALESCE(x) ((x) << S_RX_COALESCE)
506218792Snp#define G_RX_COALESCE(x) (((x) >> S_RX_COALESCE) & M_RX_COALESCE)
507218792Snp
508218792Snp#define S_CONG_CNTRL    14
509218792Snp#define M_CONG_CNTRL    0x3
510218792Snp#define V_CONG_CNTRL(x) ((x) << S_CONG_CNTRL)
511218792Snp#define G_CONG_CNTRL(x) (((x) >> S_CONG_CNTRL) & M_CONG_CNTRL)
512218792Snp
513218792Snp#define S_PACE    16
514218792Snp#define M_PACE    0x3
515218792Snp#define V_PACE(x) ((x) << S_PACE)
516218792Snp#define G_PACE(x) (((x) >> S_PACE) & M_PACE)
517218792Snp
518218792Snp#define S_CONG_CNTRL_VALID    18
519218792Snp#define V_CONG_CNTRL_VALID(x) ((x) << S_CONG_CNTRL_VALID)
520218792Snp#define F_CONG_CNTRL_VALID    V_CONG_CNTRL_VALID(1U)
521218792Snp
522218792Snp#define S_PACE_VALID    19
523218792Snp#define V_PACE_VALID(x) ((x) << S_PACE_VALID)
524218792Snp#define F_PACE_VALID    V_PACE_VALID(1U)
525218792Snp
526218792Snp#define S_RX_FC_DISABLE    20
527218792Snp#define V_RX_FC_DISABLE(x) ((x) << S_RX_FC_DISABLE)
528218792Snp#define F_RX_FC_DISABLE    V_RX_FC_DISABLE(1U)
529218792Snp
530218792Snp#define S_RX_FC_DDP    21
531218792Snp#define V_RX_FC_DDP(x) ((x) << S_RX_FC_DDP)
532218792Snp#define F_RX_FC_DDP    V_RX_FC_DDP(1U)
533218792Snp
534218792Snp#define S_RX_FC_VALID    22
535218792Snp#define V_RX_FC_VALID(x) ((x) << S_RX_FC_VALID)
536218792Snp#define F_RX_FC_VALID    V_RX_FC_VALID(1U)
537218792Snp
538218792Snp#define S_TX_QUEUE    23
539218792Snp#define M_TX_QUEUE    0x7
540218792Snp#define V_TX_QUEUE(x) ((x) << S_TX_QUEUE)
541218792Snp#define G_TX_QUEUE(x) (((x) >> S_TX_QUEUE) & M_TX_QUEUE)
542218792Snp
543218792Snp#define S_RX_CHANNEL    26
544218792Snp#define V_RX_CHANNEL(x) ((x) << S_RX_CHANNEL)
545218792Snp#define F_RX_CHANNEL    V_RX_CHANNEL(1U)
546218792Snp
547218792Snp#define S_CCTRL_ECN    27
548218792Snp#define V_CCTRL_ECN(x) ((x) << S_CCTRL_ECN)
549218792Snp#define F_CCTRL_ECN    V_CCTRL_ECN(1U)
550218792Snp
551218792Snp#define S_WND_SCALE_EN    28
552218792Snp#define V_WND_SCALE_EN(x) ((x) << S_WND_SCALE_EN)
553218792Snp#define F_WND_SCALE_EN    V_WND_SCALE_EN(1U)
554218792Snp
555218792Snp#define S_TSTAMPS_EN    29
556218792Snp#define V_TSTAMPS_EN(x) ((x) << S_TSTAMPS_EN)
557218792Snp#define F_TSTAMPS_EN    V_TSTAMPS_EN(1U)
558218792Snp
559218792Snp#define S_SACK_EN    30
560218792Snp#define V_SACK_EN(x) ((x) << S_SACK_EN)
561218792Snp#define F_SACK_EN    V_SACK_EN(1U)
562218792Snp
563248925Snp#define S_T5_OPT_2_VALID    31
564248925Snp#define V_T5_OPT_2_VALID(x) ((x) << S_T5_OPT_2_VALID)
565248925Snp#define F_T5_OPT_2_VALID    V_T5_OPT_2_VALID(1U)
566248925Snp
567218792Snpstruct cpl_pass_open_req {
568218792Snp	WR_HDR;
569218792Snp	union opcode_tid ot;
570218792Snp	__be16 local_port;
571218792Snp	__be16 peer_port;
572218792Snp	__be32 local_ip;
573218792Snp	__be32 peer_ip;
574218792Snp	__be64 opt0;
575218792Snp	__be64 opt1;
576218792Snp};
577218792Snp
578218792Snpstruct cpl_pass_open_req6 {
579218792Snp	WR_HDR;
580218792Snp	union opcode_tid ot;
581218792Snp	__be16 local_port;
582218792Snp	__be16 peer_port;
583218792Snp	__be64 local_ip_hi;
584218792Snp	__be64 local_ip_lo;
585218792Snp	__be64 peer_ip_hi;
586218792Snp	__be64 peer_ip_lo;
587218792Snp	__be64 opt0;
588218792Snp	__be64 opt1;
589218792Snp};
590218792Snp
591218792Snpstruct cpl_pass_open_rpl {
592218792Snp	RSS_HDR
593218792Snp	union opcode_tid ot;
594218792Snp	__u8 rsvd[3];
595218792Snp	__u8 status;
596218792Snp};
597218792Snp
598218792Snpstruct cpl_pass_establish {
599218792Snp	RSS_HDR
600218792Snp	union opcode_tid ot;
601218792Snp	__be32 rsvd;
602218792Snp	__be32 tos_stid;
603218792Snp	__be16 mac_idx;
604218792Snp	__be16 tcp_opt;
605218792Snp	__be32 snd_isn;
606218792Snp	__be32 rcv_isn;
607218792Snp};
608218792Snp
609218792Snp/* cpl_pass_establish.tos_stid fields */
610218792Snp#define S_PASS_OPEN_TID    0
611218792Snp#define M_PASS_OPEN_TID    0xFFFFFF
612218792Snp#define V_PASS_OPEN_TID(x) ((x) << S_PASS_OPEN_TID)
613218792Snp#define G_PASS_OPEN_TID(x) (((x) >> S_PASS_OPEN_TID) & M_PASS_OPEN_TID)
614218792Snp
615218792Snp#define S_PASS_OPEN_TOS    24
616218792Snp#define M_PASS_OPEN_TOS    0xFF
617218792Snp#define V_PASS_OPEN_TOS(x) ((x) << S_PASS_OPEN_TOS)
618218792Snp#define G_PASS_OPEN_TOS(x) (((x) >> S_PASS_OPEN_TOS) & M_PASS_OPEN_TOS)
619218792Snp
620218792Snp/* cpl_pass_establish.tcp_opt fields (also applies to act_open_establish) */
621218792Snp#define G_TCPOPT_WSCALE_OK(x)  (((x) >> 5) & 1)
622218792Snp#define G_TCPOPT_SACK(x)       (((x) >> 6) & 1)
623218792Snp#define G_TCPOPT_TSTAMP(x)     (((x) >> 7) & 1)
624218792Snp#define G_TCPOPT_SND_WSCALE(x) (((x) >> 8) & 0xf)
625218792Snp#define G_TCPOPT_MSS(x)        (((x) >> 12) & 0xf)
626218792Snp
627218792Snpstruct cpl_pass_accept_req {
628218792Snp	RSS_HDR
629218792Snp	union opcode_tid ot;
630218792Snp	__be16 rsvd;
631218792Snp	__be16 len;
632218792Snp	__be32 hdr_len;
633218792Snp	__be16 vlan;
634218792Snp	__be16 l2info;
635218792Snp	__be32 tos_stid;
636218792Snp	struct tcp_options tcpopt;
637218792Snp};
638218792Snp
639218792Snp/* cpl_pass_accept_req.hdr_len fields */
640218792Snp#define S_SYN_RX_CHAN    0
641218792Snp#define M_SYN_RX_CHAN    0xF
642218792Snp#define V_SYN_RX_CHAN(x) ((x) << S_SYN_RX_CHAN)
643218792Snp#define G_SYN_RX_CHAN(x) (((x) >> S_SYN_RX_CHAN) & M_SYN_RX_CHAN)
644218792Snp
645218792Snp#define S_TCP_HDR_LEN    10
646218792Snp#define M_TCP_HDR_LEN    0x3F
647218792Snp#define V_TCP_HDR_LEN(x) ((x) << S_TCP_HDR_LEN)
648218792Snp#define G_TCP_HDR_LEN(x) (((x) >> S_TCP_HDR_LEN) & M_TCP_HDR_LEN)
649218792Snp
650218792Snp#define S_IP_HDR_LEN    16
651218792Snp#define M_IP_HDR_LEN    0x3FF
652218792Snp#define V_IP_HDR_LEN(x) ((x) << S_IP_HDR_LEN)
653218792Snp#define G_IP_HDR_LEN(x) (((x) >> S_IP_HDR_LEN) & M_IP_HDR_LEN)
654218792Snp
655218792Snp#define S_ETH_HDR_LEN    26
656237436Snp#define M_ETH_HDR_LEN    0x3F
657218792Snp#define V_ETH_HDR_LEN(x) ((x) << S_ETH_HDR_LEN)
658218792Snp#define G_ETH_HDR_LEN(x) (((x) >> S_ETH_HDR_LEN) & M_ETH_HDR_LEN)
659218792Snp
660218792Snp/* cpl_pass_accept_req.l2info fields */
661218792Snp#define S_SYN_MAC_IDX    0
662218792Snp#define M_SYN_MAC_IDX    0x1FF
663218792Snp#define V_SYN_MAC_IDX(x) ((x) << S_SYN_MAC_IDX)
664218792Snp#define G_SYN_MAC_IDX(x) (((x) >> S_SYN_MAC_IDX) & M_SYN_MAC_IDX)
665218792Snp
666218792Snp#define S_SYN_XACT_MATCH    9
667218792Snp#define V_SYN_XACT_MATCH(x) ((x) << S_SYN_XACT_MATCH)
668218792Snp#define F_SYN_XACT_MATCH    V_SYN_XACT_MATCH(1U)
669218792Snp
670218792Snp#define S_SYN_INTF    12
671218792Snp#define M_SYN_INTF    0xF
672218792Snp#define V_SYN_INTF(x) ((x) << S_SYN_INTF)
673218792Snp#define G_SYN_INTF(x) (((x) >> S_SYN_INTF) & M_SYN_INTF)
674218792Snp
675218792Snpstruct cpl_pass_accept_rpl {
676218792Snp	WR_HDR;
677218792Snp	union opcode_tid ot;
678218792Snp	__be32 opt2;
679218792Snp	__be64 opt0;
680218792Snp};
681218792Snp
682252711Snpstruct cpl_t5_pass_accept_rpl {
683252711Snp	WR_HDR;
684252711Snp	union opcode_tid ot;
685252711Snp	__be32 opt2;
686252711Snp	__be64 opt0;
687252711Snp	__be32 iss;
688252711Snp	__be32 rsvd;
689252711Snp};
690252711Snp
691218792Snpstruct cpl_act_open_req {
692218792Snp	WR_HDR;
693218792Snp	union opcode_tid ot;
694218792Snp	__be16 local_port;
695218792Snp	__be16 peer_port;
696218792Snp	__be32 local_ip;
697218792Snp	__be32 peer_ip;
698218792Snp	__be64 opt0;
699218792Snp	__be32 params;
700218792Snp	__be32 opt2;
701218792Snp};
702218792Snp
703248925Snp#define S_FILTER_TUPLE	24
704248925Snp#define M_FILTER_TUPLE	0xFFFFFFFFFF
705248925Snp#define V_FILTER_TUPLE(x) ((x) << S_FILTER_TUPLE)
706248925Snp#define G_FILTER_TUPLE(x) (((x) >> S_FILTER_TUPLE) & M_FILTER_TUPLE)
707237436Snpstruct cpl_t5_act_open_req {
708237436Snp	WR_HDR;
709237436Snp	union opcode_tid ot;
710237436Snp	__be16 local_port;
711237436Snp	__be16 peer_port;
712237436Snp	__be32 local_ip;
713237436Snp	__be32 peer_ip;
714237436Snp	__be64 opt0;
715252711Snp	__be32 iss;
716237436Snp	__be32 opt2;
717237436Snp	__be64 params;
718237436Snp};
719218792Snp
720218792Snpstruct cpl_act_open_req6 {
721218792Snp	WR_HDR;
722218792Snp	union opcode_tid ot;
723218792Snp	__be16 local_port;
724218792Snp	__be16 peer_port;
725218792Snp	__be64 local_ip_hi;
726218792Snp	__be64 local_ip_lo;
727218792Snp	__be64 peer_ip_hi;
728218792Snp	__be64 peer_ip_lo;
729218792Snp	__be64 opt0;
730218792Snp	__be32 params;
731218792Snp	__be32 opt2;
732218792Snp};
733218792Snp
734237436Snpstruct cpl_t5_act_open_req6 {
735237436Snp	WR_HDR;
736237436Snp	union opcode_tid ot;
737237436Snp	__be16 local_port;
738237436Snp	__be16 peer_port;
739237436Snp	__be64 local_ip_hi;
740237436Snp	__be64 local_ip_lo;
741237436Snp	__be64 peer_ip_hi;
742237436Snp	__be64 peer_ip_lo;
743237436Snp	__be64 opt0;
744252711Snp	__be32 iss;
745237436Snp	__be32 opt2;
746237436Snp	__be64 params;
747237436Snp};
748237436Snp
749218792Snpstruct cpl_act_open_rpl {
750218792Snp	RSS_HDR
751218792Snp	union opcode_tid ot;
752218792Snp	__be32 atid_status;
753218792Snp};
754218792Snp
755218792Snp/* cpl_act_open_rpl.atid_status fields */
756218792Snp#define S_AOPEN_STATUS    0
757218792Snp#define M_AOPEN_STATUS    0xFF
758218792Snp#define V_AOPEN_STATUS(x) ((x) << S_AOPEN_STATUS)
759218792Snp#define G_AOPEN_STATUS(x) (((x) >> S_AOPEN_STATUS) & M_AOPEN_STATUS)
760218792Snp
761218792Snp#define S_AOPEN_ATID    8
762218792Snp#define M_AOPEN_ATID    0xFFFFFF
763218792Snp#define V_AOPEN_ATID(x) ((x) << S_AOPEN_ATID)
764218792Snp#define G_AOPEN_ATID(x) (((x) >> S_AOPEN_ATID) & M_AOPEN_ATID)
765218792Snp
766218792Snpstruct cpl_act_establish {
767218792Snp	RSS_HDR
768218792Snp	union opcode_tid ot;
769218792Snp	__be32 rsvd;
770218792Snp	__be32 tos_atid;
771218792Snp	__be16 mac_idx;
772218792Snp	__be16 tcp_opt;
773218792Snp	__be32 snd_isn;
774218792Snp	__be32 rcv_isn;
775218792Snp};
776218792Snp
777218792Snpstruct cpl_get_tcb {
778218792Snp	WR_HDR;
779218792Snp	union opcode_tid ot;
780218792Snp	__be16 reply_ctrl;
781218792Snp	__be16 cookie;
782218792Snp};
783218792Snp
784218792Snp/* cpl_get_tcb.reply_ctrl fields */
785218792Snp#define S_QUEUENO    0
786218792Snp#define M_QUEUENO    0x3FF
787218792Snp#define V_QUEUENO(x) ((x) << S_QUEUENO)
788218792Snp#define G_QUEUENO(x) (((x) >> S_QUEUENO) & M_QUEUENO)
789218792Snp
790218792Snp#define S_REPLY_CHAN    14
791218792Snp#define V_REPLY_CHAN(x) ((x) << S_REPLY_CHAN)
792218792Snp#define F_REPLY_CHAN    V_REPLY_CHAN(1U)
793218792Snp
794218792Snp#define S_NO_REPLY    15
795218792Snp#define V_NO_REPLY(x) ((x) << S_NO_REPLY)
796218792Snp#define F_NO_REPLY    V_NO_REPLY(1U)
797218792Snp
798218792Snpstruct cpl_get_tcb_rpl {
799218792Snp	RSS_HDR
800218792Snp	union opcode_tid ot;
801218792Snp	__u8 cookie;
802218792Snp	__u8 status;
803218792Snp	__be16 len;
804218792Snp};
805218792Snp
806218792Snpstruct cpl_set_tcb {
807218792Snp	WR_HDR;
808218792Snp	union opcode_tid ot;
809218792Snp	__be16 reply_ctrl;
810218792Snp	__be16 cookie;
811218792Snp};
812218792Snp
813218792Snpstruct cpl_set_tcb_field {
814218792Snp	WR_HDR;
815218792Snp	union opcode_tid ot;
816218792Snp	__be16 reply_ctrl;
817218792Snp	__be16 word_cookie;
818218792Snp	__be64 mask;
819218792Snp	__be64 val;
820218792Snp};
821218792Snp
822239344Snpstruct cpl_set_tcb_field_core {
823239344Snp	union opcode_tid ot;
824239344Snp	__be16 reply_ctrl;
825239344Snp	__be16 word_cookie;
826239344Snp	__be64 mask;
827239344Snp	__be64 val;
828239344Snp};
829239344Snp
830218792Snp/* cpl_set_tcb_field.word_cookie fields */
831218792Snp#define S_WORD    0
832218792Snp#define M_WORD    0x1F
833218792Snp#define V_WORD(x) ((x) << S_WORD)
834218792Snp#define G_WORD(x) (((x) >> S_WORD) & M_WORD)
835218792Snp
836218792Snp#define S_COOKIE    5
837218792Snp#define M_COOKIE    0x7
838218792Snp#define V_COOKIE(x) ((x) << S_COOKIE)
839218792Snp#define G_COOKIE(x) (((x) >> S_COOKIE) & M_COOKIE)
840218792Snp
841218792Snpstruct cpl_set_tcb_rpl {
842218792Snp	RSS_HDR
843218792Snp	union opcode_tid ot;
844218792Snp	__be16 rsvd;
845218792Snp	__u8   cookie;
846218792Snp	__u8   status;
847218792Snp	__be64 oldval;
848218792Snp};
849218792Snp
850218792Snpstruct cpl_close_con_req {
851218792Snp	WR_HDR;
852218792Snp	union opcode_tid ot;
853218792Snp	__be32 rsvd;
854218792Snp};
855218792Snp
856218792Snpstruct cpl_close_con_rpl {
857218792Snp	RSS_HDR
858218792Snp	union opcode_tid ot;
859218792Snp	__u8  rsvd[3];
860218792Snp	__u8  status;
861218792Snp	__be32 snd_nxt;
862218792Snp	__be32 rcv_nxt;
863218792Snp};
864218792Snp
865218792Snpstruct cpl_close_listsvr_req {
866218792Snp	WR_HDR;
867218792Snp	union opcode_tid ot;
868218792Snp	__be16 reply_ctrl;
869218792Snp	__be16 rsvd;
870218792Snp};
871218792Snp
872218792Snp/* additional cpl_close_listsvr_req.reply_ctrl field */
873218792Snp#define S_LISTSVR_IPV6    14
874218792Snp#define V_LISTSVR_IPV6(x) ((x) << S_LISTSVR_IPV6)
875218792Snp#define F_LISTSVR_IPV6    V_LISTSVR_IPV6(1U)
876218792Snp
877218792Snpstruct cpl_close_listsvr_rpl {
878218792Snp	RSS_HDR
879218792Snp	union opcode_tid ot;
880218792Snp	__u8 rsvd[3];
881218792Snp	__u8 status;
882218792Snp};
883218792Snp
884218792Snpstruct cpl_abort_req_rss {
885218792Snp	RSS_HDR
886218792Snp	union opcode_tid ot;
887218792Snp	__u8  rsvd[3];
888218792Snp	__u8  status;
889218792Snp};
890218792Snp
891218792Snpstruct cpl_abort_req {
892218792Snp	WR_HDR;
893218792Snp	union opcode_tid ot;
894218792Snp	__be32 rsvd0;
895218792Snp	__u8  rsvd1;
896218792Snp	__u8  cmd;
897218792Snp	__u8  rsvd2[6];
898218792Snp};
899218792Snp
900218792Snpstruct cpl_abort_rpl_rss {
901218792Snp	RSS_HDR
902218792Snp	union opcode_tid ot;
903218792Snp	__u8  rsvd[3];
904218792Snp	__u8  status;
905218792Snp};
906218792Snp
907218792Snpstruct cpl_abort_rpl {
908218792Snp	WR_HDR;
909218792Snp	union opcode_tid ot;
910218792Snp	__be32 rsvd0;
911218792Snp	__u8  rsvd1;
912218792Snp	__u8  cmd;
913218792Snp	__u8  rsvd2[6];
914218792Snp};
915218792Snp
916218792Snpstruct cpl_peer_close {
917218792Snp	RSS_HDR
918218792Snp	union opcode_tid ot;
919218792Snp	__be32 rcv_nxt;
920218792Snp};
921218792Snp
922218792Snpstruct cpl_tid_release {
923218792Snp	WR_HDR;
924218792Snp	union opcode_tid ot;
925218792Snp	__be32 rsvd;
926218792Snp};
927218792Snp
928218792Snpstruct tx_data_wr {
929218792Snp	__be32 wr_hi;
930218792Snp	__be32 wr_lo;
931218792Snp	__be32 len;
932218792Snp	__be32 flags;
933218792Snp	__be32 sndseq;
934218792Snp	__be32 param;
935218792Snp};
936218792Snp
937218792Snp/* tx_data_wr.flags fields */
938218792Snp#define S_TX_ACK_PAGES    21
939218792Snp#define M_TX_ACK_PAGES    0x7
940218792Snp#define V_TX_ACK_PAGES(x) ((x) << S_TX_ACK_PAGES)
941218792Snp#define G_TX_ACK_PAGES(x) (((x) >> S_TX_ACK_PAGES) & M_TX_ACK_PAGES)
942218792Snp
943218792Snp/* tx_data_wr.param fields */
944218792Snp#define S_TX_PORT    0
945218792Snp#define M_TX_PORT    0x7
946218792Snp#define V_TX_PORT(x) ((x) << S_TX_PORT)
947218792Snp#define G_TX_PORT(x) (((x) >> S_TX_PORT) & M_TX_PORT)
948218792Snp
949218792Snp#define S_TX_MSS    4
950218792Snp#define M_TX_MSS    0xF
951218792Snp#define V_TX_MSS(x) ((x) << S_TX_MSS)
952218792Snp#define G_TX_MSS(x) (((x) >> S_TX_MSS) & M_TX_MSS)
953218792Snp
954218792Snp#define S_TX_QOS    8
955218792Snp#define M_TX_QOS    0xFF
956218792Snp#define V_TX_QOS(x) ((x) << S_TX_QOS)
957218792Snp#define G_TX_QOS(x) (((x) >> S_TX_QOS) & M_TX_QOS)
958218792Snp
959218792Snp#define S_TX_SNDBUF 16
960218792Snp#define M_TX_SNDBUF 0xFFFF
961218792Snp#define V_TX_SNDBUF(x) ((x) << S_TX_SNDBUF)
962218792Snp#define G_TX_SNDBUF(x) (((x) >> S_TX_SNDBUF) & M_TX_SNDBUF)
963218792Snp
964218792Snpstruct cpl_tx_data {
965218792Snp	union opcode_tid ot;
966218792Snp	__be32 len;
967218792Snp	__be32 rsvd;
968218792Snp	__be32 flags;
969218792Snp};
970218792Snp
971218792Snp/* cpl_tx_data.flags fields */
972218792Snp#define S_TX_PROXY    5
973218792Snp#define V_TX_PROXY(x) ((x) << S_TX_PROXY)
974218792Snp#define F_TX_PROXY    V_TX_PROXY(1U)
975218792Snp
976218792Snp#define S_TX_ULP_SUBMODE    6
977218792Snp#define M_TX_ULP_SUBMODE    0xF
978218792Snp#define V_TX_ULP_SUBMODE(x) ((x) << S_TX_ULP_SUBMODE)
979218792Snp#define G_TX_ULP_SUBMODE(x) (((x) >> S_TX_ULP_SUBMODE) & M_TX_ULP_SUBMODE)
980218792Snp
981218792Snp#define S_TX_ULP_MODE    10
982218792Snp#define M_TX_ULP_MODE    0xF
983218792Snp#define V_TX_ULP_MODE(x) ((x) << S_TX_ULP_MODE)
984218792Snp#define G_TX_ULP_MODE(x) (((x) >> S_TX_ULP_MODE) & M_TX_ULP_MODE)
985218792Snp
986218792Snp#define S_TX_SHOVE    14
987218792Snp#define V_TX_SHOVE(x) ((x) << S_TX_SHOVE)
988218792Snp#define F_TX_SHOVE    V_TX_SHOVE(1U)
989218792Snp
990218792Snp#define S_TX_MORE    15
991218792Snp#define V_TX_MORE(x) ((x) << S_TX_MORE)
992218792Snp#define F_TX_MORE    V_TX_MORE(1U)
993218792Snp
994218792Snp#define S_TX_URG    16
995218792Snp#define V_TX_URG(x) ((x) << S_TX_URG)
996218792Snp#define F_TX_URG    V_TX_URG(1U)
997218792Snp
998218792Snp#define S_TX_FLUSH    17
999218792Snp#define V_TX_FLUSH(x) ((x) << S_TX_FLUSH)
1000218792Snp#define F_TX_FLUSH    V_TX_FLUSH(1U)
1001218792Snp
1002218792Snp#define S_TX_SAVE    18
1003218792Snp#define V_TX_SAVE(x) ((x) << S_TX_SAVE)
1004218792Snp#define F_TX_SAVE    V_TX_SAVE(1U)
1005218792Snp
1006218792Snp#define S_TX_TNL    19
1007218792Snp#define V_TX_TNL(x) ((x) << S_TX_TNL)
1008218792Snp#define F_TX_TNL    V_TX_TNL(1U)
1009218792Snp
1010218792Snp/* additional tx_data_wr.flags fields */
1011218792Snp#define S_TX_CPU_IDX    0
1012218792Snp#define M_TX_CPU_IDX    0x3F
1013218792Snp#define V_TX_CPU_IDX(x) ((x) << S_TX_CPU_IDX)
1014218792Snp#define G_TX_CPU_IDX(x) (((x) >> S_TX_CPU_IDX) & M_TX_CPU_IDX)
1015218792Snp
1016218792Snp#define S_TX_CLOSE    17
1017218792Snp#define V_TX_CLOSE(x) ((x) << S_TX_CLOSE)
1018218792Snp#define F_TX_CLOSE    V_TX_CLOSE(1U)
1019218792Snp
1020218792Snp#define S_TX_INIT    18
1021218792Snp#define V_TX_INIT(x) ((x) << S_TX_INIT)
1022218792Snp#define F_TX_INIT    V_TX_INIT(1U)
1023218792Snp
1024218792Snp#define S_TX_IMM_ACK    19
1025218792Snp#define V_TX_IMM_ACK(x) ((x) << S_TX_IMM_ACK)
1026218792Snp#define F_TX_IMM_ACK    V_TX_IMM_ACK(1U)
1027218792Snp
1028218792Snp#define S_TX_IMM_DMA    20
1029218792Snp#define V_TX_IMM_DMA(x) ((x) << S_TX_IMM_DMA)
1030218792Snp#define F_TX_IMM_DMA    V_TX_IMM_DMA(1U)
1031218792Snp
1032218792Snpstruct cpl_tx_data_ack {
1033218792Snp	RSS_HDR
1034218792Snp	union opcode_tid ot;
1035218792Snp	__be32 snd_una;
1036218792Snp};
1037218792Snp
1038218792Snpstruct cpl_wr_ack {  /* XXX */
1039218792Snp	RSS_HDR
1040218792Snp	union opcode_tid ot;
1041218792Snp	__be16 credits;
1042218792Snp	__be16 rsvd;
1043218792Snp	__be32 snd_nxt;
1044218792Snp	__be32 snd_una;
1045218792Snp};
1046218792Snp
1047218792Snpstruct cpl_tx_pkt_core {
1048218792Snp	__be32 ctrl0;
1049218792Snp	__be16 pack;
1050218792Snp	__be16 len;
1051218792Snp	__be64 ctrl1;
1052218792Snp};
1053218792Snp
1054218792Snpstruct cpl_tx_pkt {
1055218792Snp	WR_HDR;
1056218792Snp	struct cpl_tx_pkt_core c;
1057218792Snp};
1058218792Snp
1059218792Snp#define cpl_tx_pkt_xt cpl_tx_pkt
1060218792Snp
1061218792Snp/* cpl_tx_pkt_core.ctrl0 fields */
1062218792Snp#define S_TXPKT_VF    0
1063218792Snp#define M_TXPKT_VF    0xFF
1064218792Snp#define V_TXPKT_VF(x) ((x) << S_TXPKT_VF)
1065218792Snp#define G_TXPKT_VF(x) (((x) >> S_TXPKT_VF) & M_TXPKT_VF)
1066218792Snp
1067218792Snp#define S_TXPKT_PF    8
1068218792Snp#define M_TXPKT_PF    0x7
1069218792Snp#define V_TXPKT_PF(x) ((x) << S_TXPKT_PF)
1070218792Snp#define G_TXPKT_PF(x) (((x) >> S_TXPKT_PF) & M_TXPKT_PF)
1071218792Snp
1072218792Snp#define S_TXPKT_VF_VLD    11
1073218792Snp#define V_TXPKT_VF_VLD(x) ((x) << S_TXPKT_VF_VLD)
1074218792Snp#define F_TXPKT_VF_VLD    V_TXPKT_VF_VLD(1U)
1075218792Snp
1076218792Snp#define S_TXPKT_OVLAN_IDX    12
1077218792Snp#define M_TXPKT_OVLAN_IDX    0xF
1078218792Snp#define V_TXPKT_OVLAN_IDX(x) ((x) << S_TXPKT_OVLAN_IDX)
1079218792Snp#define G_TXPKT_OVLAN_IDX(x) (((x) >> S_TXPKT_OVLAN_IDX) & M_TXPKT_OVLAN_IDX)
1080218792Snp
1081248925Snp#define S_TXPKT_T5_OVLAN_IDX    12
1082248925Snp#define M_TXPKT_T5_OVLAN_IDX    0x7
1083248925Snp#define V_TXPKT_T5_OVLAN_IDX(x) ((x) << S_TXPKT_T5_OVLAN_IDX)
1084248925Snp#define G_TXPKT_T5_OVLAN_IDX(x) (((x) >> S_TXPKT_T5_OVLAN_IDX) & \
1085248925Snp				M_TXPKT_T5_OVLAN_IDX)
1086248925Snp
1087218792Snp#define S_TXPKT_INTF    16
1088218792Snp#define M_TXPKT_INTF    0xF
1089218792Snp#define V_TXPKT_INTF(x) ((x) << S_TXPKT_INTF)
1090218792Snp#define G_TXPKT_INTF(x) (((x) >> S_TXPKT_INTF) & M_TXPKT_INTF)
1091218792Snp
1092218792Snp#define S_TXPKT_SPECIAL_STAT    20
1093218792Snp#define V_TXPKT_SPECIAL_STAT(x) ((x) << S_TXPKT_SPECIAL_STAT)
1094218792Snp#define F_TXPKT_SPECIAL_STAT    V_TXPKT_SPECIAL_STAT(1U)
1095218792Snp
1096248925Snp#define S_TXPKT_T5_FCS_DIS    21
1097248925Snp#define V_TXPKT_T5_FCS_DIS(x) ((x) << S_TXPKT_T5_FCS_DIS)
1098248925Snp#define F_TXPKT_T5_FCS_DIS    V_TXPKT_T5_FCS_DIS(1U)
1099248925Snp
1100218792Snp#define S_TXPKT_INS_OVLAN    21
1101218792Snp#define V_TXPKT_INS_OVLAN(x) ((x) << S_TXPKT_INS_OVLAN)
1102218792Snp#define F_TXPKT_INS_OVLAN    V_TXPKT_INS_OVLAN(1U)
1103218792Snp
1104248925Snp#define S_TXPKT_T5_INS_OVLAN    15
1105248925Snp#define V_TXPKT_T5_INS_OVLAN(x) ((x) << S_TXPKT_T5_INS_OVLAN)
1106248925Snp#define F_TXPKT_T5_INS_OVLAN    V_TXPKT_T5_INS_OVLAN(1U)
1107248925Snp
1108218792Snp#define S_TXPKT_STAT_DIS    22
1109218792Snp#define V_TXPKT_STAT_DIS(x) ((x) << S_TXPKT_STAT_DIS)
1110218792Snp#define F_TXPKT_STAT_DIS    V_TXPKT_STAT_DIS(1U)
1111218792Snp
1112218792Snp#define S_TXPKT_LOOPBACK    23
1113218792Snp#define V_TXPKT_LOOPBACK(x) ((x) << S_TXPKT_LOOPBACK)
1114218792Snp#define F_TXPKT_LOOPBACK    V_TXPKT_LOOPBACK(1U)
1115218792Snp
1116237436Snp#define S_TXPKT_TSTAMP    23
1117237436Snp#define V_TXPKT_TSTAMP(x) ((x) << S_TXPKT_TSTAMP)
1118237436Snp#define F_TXPKT_TSTAMP    V_TXPKT_TSTAMP(1U)
1119237436Snp
1120218792Snp#define S_TXPKT_OPCODE    24
1121218792Snp#define M_TXPKT_OPCODE    0xFF
1122218792Snp#define V_TXPKT_OPCODE(x) ((x) << S_TXPKT_OPCODE)
1123218792Snp#define G_TXPKT_OPCODE(x) (((x) >> S_TXPKT_OPCODE) & M_TXPKT_OPCODE)
1124218792Snp
1125218792Snp/* cpl_tx_pkt_core.ctrl1 fields */
1126218792Snp#define S_TXPKT_SA_IDX    0
1127218792Snp#define M_TXPKT_SA_IDX    0xFFF
1128218792Snp#define V_TXPKT_SA_IDX(x) ((x) << S_TXPKT_SA_IDX)
1129218792Snp#define G_TXPKT_SA_IDX(x) (((x) >> S_TXPKT_SA_IDX) & M_TXPKT_SA_IDX)
1130218792Snp
1131218792Snp#define S_TXPKT_CSUM_END    12
1132218792Snp#define M_TXPKT_CSUM_END    0xFF
1133218792Snp#define V_TXPKT_CSUM_END(x) ((x) << S_TXPKT_CSUM_END)
1134218792Snp#define G_TXPKT_CSUM_END(x) (((x) >> S_TXPKT_CSUM_END) & M_TXPKT_CSUM_END)
1135218792Snp
1136218792Snp#define S_TXPKT_CSUM_START    20
1137218792Snp#define M_TXPKT_CSUM_START    0x3FF
1138218792Snp#define V_TXPKT_CSUM_START(x) ((x) << S_TXPKT_CSUM_START)
1139218792Snp#define G_TXPKT_CSUM_START(x) (((x) >> S_TXPKT_CSUM_START) & M_TXPKT_CSUM_START)
1140218792Snp
1141218792Snp#define S_TXPKT_IPHDR_LEN    20
1142218792Snp#define M_TXPKT_IPHDR_LEN    0x3FFF
1143218792Snp#define V_TXPKT_IPHDR_LEN(x) ((__u64)(x) << S_TXPKT_IPHDR_LEN)
1144218792Snp#define G_TXPKT_IPHDR_LEN(x) (((x) >> S_TXPKT_IPHDR_LEN) & M_TXPKT_IPHDR_LEN)
1145218792Snp
1146218792Snp#define S_TXPKT_CSUM_LOC    30
1147218792Snp#define M_TXPKT_CSUM_LOC    0x3FF
1148218792Snp#define V_TXPKT_CSUM_LOC(x) ((__u64)(x) << S_TXPKT_CSUM_LOC)
1149218792Snp#define G_TXPKT_CSUM_LOC(x) (((x) >> S_TXPKT_CSUM_LOC) & M_TXPKT_CSUM_LOC)
1150218792Snp
1151218792Snp#define S_TXPKT_ETHHDR_LEN    34
1152218792Snp#define M_TXPKT_ETHHDR_LEN    0x3F
1153218792Snp#define V_TXPKT_ETHHDR_LEN(x) ((__u64)(x) << S_TXPKT_ETHHDR_LEN)
1154218792Snp#define G_TXPKT_ETHHDR_LEN(x) (((x) >> S_TXPKT_ETHHDR_LEN) & M_TXPKT_ETHHDR_LEN)
1155218792Snp
1156218792Snp#define S_TXPKT_CSUM_TYPE    40
1157218792Snp#define M_TXPKT_CSUM_TYPE    0xF
1158218792Snp#define V_TXPKT_CSUM_TYPE(x) ((__u64)(x) << S_TXPKT_CSUM_TYPE)
1159218792Snp#define G_TXPKT_CSUM_TYPE(x) (((x) >> S_TXPKT_CSUM_TYPE) & M_TXPKT_CSUM_TYPE)
1160218792Snp
1161218792Snp#define S_TXPKT_VLAN    44
1162218792Snp#define M_TXPKT_VLAN    0xFFFF
1163218792Snp#define V_TXPKT_VLAN(x) ((__u64)(x) << S_TXPKT_VLAN)
1164218792Snp#define G_TXPKT_VLAN(x) (((x) >> S_TXPKT_VLAN) & M_TXPKT_VLAN)
1165218792Snp
1166218792Snp#define S_TXPKT_VLAN_VLD    60
1167218792Snp#define V_TXPKT_VLAN_VLD(x) ((__u64)(x) << S_TXPKT_VLAN_VLD)
1168218792Snp#define F_TXPKT_VLAN_VLD    V_TXPKT_VLAN_VLD(1ULL)
1169218792Snp
1170218792Snp#define S_TXPKT_IPSEC    61
1171218792Snp#define V_TXPKT_IPSEC(x) ((__u64)(x) << S_TXPKT_IPSEC)
1172218792Snp#define F_TXPKT_IPSEC    V_TXPKT_IPSEC(1ULL)
1173218792Snp
1174218792Snp#define S_TXPKT_IPCSUM_DIS    62
1175218792Snp#define V_TXPKT_IPCSUM_DIS(x) ((__u64)(x) << S_TXPKT_IPCSUM_DIS)
1176218792Snp#define F_TXPKT_IPCSUM_DIS    V_TXPKT_IPCSUM_DIS(1ULL)
1177218792Snp
1178218792Snp#define S_TXPKT_L4CSUM_DIS    63
1179218792Snp#define V_TXPKT_L4CSUM_DIS(x) ((__u64)(x) << S_TXPKT_L4CSUM_DIS)
1180218792Snp#define F_TXPKT_L4CSUM_DIS    V_TXPKT_L4CSUM_DIS(1ULL)
1181218792Snp
1182237436Snpstruct cpl_tx_pkt_lso_core {
1183218792Snp	__be32 lso_ctrl;
1184218792Snp	__be16 ipid_ofst;
1185218792Snp	__be16 mss;
1186218792Snp	__be32 seqno_offset;
1187218792Snp	__be32 len;
1188218792Snp	/* encapsulated CPL (TX_PKT, TX_PKT_XT or TX_DATA) follows here */
1189218792Snp};
1190218792Snp
1191237436Snpstruct cpl_tx_pkt_lso {
1192237436Snp	WR_HDR;
1193237436Snp	struct cpl_tx_pkt_lso_core c;
1194237436Snp	/* encapsulated CPL (TX_PKT, TX_PKT_XT or TX_DATA) follows here */
1195237436Snp};
1196237436Snp
1197237436Snpstruct cpl_tx_pkt_ufo_core {
1198237436Snp	__be16 ethlen;
1199237436Snp	__be16 iplen;
1200237436Snp	__be16 udplen;
1201237436Snp	__be16 mss;
1202237436Snp	__be32 len;
1203237436Snp	__be32 r1;
1204237436Snp	/* encapsulated CPL (TX_PKT, TX_PKT_XT or TX_DATA) follows here */
1205237436Snp};
1206237436Snp
1207237436Snpstruct cpl_tx_pkt_ufo {
1208237436Snp	WR_HDR;
1209237436Snp	struct cpl_tx_pkt_ufo_core c;
1210237436Snp	/* encapsulated CPL (TX_PKT, TX_PKT_XT or TX_DATA) follows here */
1211237436Snp};
1212237436Snp
1213237436Snp/* cpl_tx_pkt_lso_core.lso_ctrl fields */
1214218792Snp#define S_LSO_TCPHDR_LEN    0
1215218792Snp#define M_LSO_TCPHDR_LEN    0xF
1216218792Snp#define V_LSO_TCPHDR_LEN(x) ((x) << S_LSO_TCPHDR_LEN)
1217218792Snp#define G_LSO_TCPHDR_LEN(x) (((x) >> S_LSO_TCPHDR_LEN) & M_LSO_TCPHDR_LEN)
1218218792Snp
1219218792Snp#define S_LSO_IPHDR_LEN    4
1220218792Snp#define M_LSO_IPHDR_LEN    0xFFF
1221218792Snp#define V_LSO_IPHDR_LEN(x) ((x) << S_LSO_IPHDR_LEN)
1222218792Snp#define G_LSO_IPHDR_LEN(x) (((x) >> S_LSO_IPHDR_LEN) & M_LSO_IPHDR_LEN)
1223218792Snp
1224218792Snp#define S_LSO_ETHHDR_LEN    16
1225218792Snp#define M_LSO_ETHHDR_LEN    0xF
1226218792Snp#define V_LSO_ETHHDR_LEN(x) ((x) << S_LSO_ETHHDR_LEN)
1227218792Snp#define G_LSO_ETHHDR_LEN(x) (((x) >> S_LSO_ETHHDR_LEN) & M_LSO_ETHHDR_LEN)
1228218792Snp
1229218792Snp#define S_LSO_IPV6    20
1230218792Snp#define V_LSO_IPV6(x) ((x) << S_LSO_IPV6)
1231218792Snp#define F_LSO_IPV6    V_LSO_IPV6(1U)
1232218792Snp
1233218792Snp#define S_LSO_OFLD_ENCAP    21
1234218792Snp#define V_LSO_OFLD_ENCAP(x) ((x) << S_LSO_OFLD_ENCAP)
1235218792Snp#define F_LSO_OFLD_ENCAP    V_LSO_OFLD_ENCAP(1U)
1236218792Snp
1237218792Snp#define S_LSO_LAST_SLICE    22
1238218792Snp#define V_LSO_LAST_SLICE(x) ((x) << S_LSO_LAST_SLICE)
1239218792Snp#define F_LSO_LAST_SLICE    V_LSO_LAST_SLICE(1U)
1240218792Snp
1241218792Snp#define S_LSO_FIRST_SLICE    23
1242218792Snp#define V_LSO_FIRST_SLICE(x) ((x) << S_LSO_FIRST_SLICE)
1243218792Snp#define F_LSO_FIRST_SLICE    V_LSO_FIRST_SLICE(1U)
1244218792Snp
1245218792Snp#define S_LSO_OPCODE    24
1246218792Snp#define M_LSO_OPCODE    0xFF
1247218792Snp#define V_LSO_OPCODE(x) ((x) << S_LSO_OPCODE)
1248218792Snp#define G_LSO_OPCODE(x) (((x) >> S_LSO_OPCODE) & M_LSO_OPCODE)
1249218792Snp
1250248925Snp#define S_LSO_T5_XFER_SIZE	   0
1251248925Snp#define M_LSO_T5_XFER_SIZE    0xFFFFFFF
1252248925Snp#define V_LSO_T5_XFER_SIZE(x) ((x) << S_LSO_T5_XFER_SIZE)
1253248925Snp#define G_LSO_T5_XFER_SIZE(x) (((x) >> S_LSO_T5_XFER_SIZE) & M_LSO_T5_XFER_SIZE)
1254248925Snp
1255237436Snp/* cpl_tx_pkt_lso_core.mss fields */
1256218792Snp#define S_LSO_MSS    0
1257218792Snp#define M_LSO_MSS    0x3FFF
1258218792Snp#define V_LSO_MSS(x) ((x) << S_LSO_MSS)
1259218792Snp#define G_LSO_MSS(x) (((x) >> S_LSO_MSS) & M_LSO_MSS)
1260218792Snp
1261218792Snp#define S_LSO_IPID_SPLIT    15
1262218792Snp#define V_LSO_IPID_SPLIT(x) ((x) << S_LSO_IPID_SPLIT)
1263218792Snp#define F_LSO_IPID_SPLIT    V_LSO_IPID_SPLIT(1U)
1264218792Snp
1265237436Snpstruct cpl_tx_pkt_fso {
1266237436Snp	WR_HDR;
1267237436Snp	__be32 fso_ctrl;
1268237436Snp	__be16 seqcnt_ofst;
1269237436Snp	__be16 mtu;
1270237436Snp	__be32 param_offset;
1271218792Snp	__be32 len;
1272237436Snp	/* encapsulated CPL (TX_PKT or TX_PKT_XT) follows here */
1273218792Snp};
1274218792Snp
1275237436Snp/* cpl_tx_pkt_fso.fso_ctrl fields different from cpl_tx_pkt_lso.lso_ctrl */
1276237436Snp#define S_FSO_XCHG_CLASS    21
1277237436Snp#define V_FSO_XCHG_CLASS(x) ((x) << S_FSO_XCHG_CLASS)
1278237436Snp#define F_FSO_XCHG_CLASS    V_FSO_XCHG_CLASS(1U)
1279218792Snp
1280237436Snp#define S_FSO_INITIATOR    20
1281237436Snp#define V_FSO_INITIATOR(x) ((x) << S_FSO_INITIATOR)
1282237436Snp#define F_FSO_INITIATOR    V_FSO_INITIATOR(1U)
1283218792Snp
1284237436Snp#define S_FSO_FCHDR_LEN    12
1285237436Snp#define M_FSO_FCHDR_LEN    0xF
1286237436Snp#define V_FSO_FCHDR_LEN(x) ((x) << S_FSO_FCHDR_LEN)
1287237436Snp#define G_FSO_FCHDR_LEN(x) (((x) >> S_FSO_FCHDR_LEN) & M_FSO_FCHDR_LEN)
1288237436Snp
1289218792Snpstruct cpl_iscsi_hdr_no_rss {
1290218792Snp	union opcode_tid ot;
1291218792Snp	__be16 pdu_len_ddp;
1292218792Snp	__be16 len;
1293218792Snp	__be32 seq;
1294218792Snp	__be16 urg;
1295218792Snp	__u8 rsvd;
1296218792Snp	__u8 status;
1297218792Snp};
1298218792Snp
1299237436Snpstruct cpl_tx_data_iso {
1300237436Snp	WR_HDR;
1301237436Snp	__be32 iso_ctrl;
1302237436Snp	__u8   rsvd;
1303237436Snp	__u8   ahs_len;
1304237436Snp	__be16 mss;
1305237436Snp	__be32 burst_size;
1306237436Snp	__be32 len;
1307237436Snp	/* encapsulated CPL_TX_DATA follows here */
1308237436Snp};
1309237436Snp
1310237436Snp/* cpl_tx_data_iso.iso_ctrl fields different from cpl_tx_pkt_lso.lso_ctrl */
1311237436Snp#define S_ISO_CPLHDR_LEN    18
1312237436Snp#define M_ISO_CPLHDR_LEN    0xF
1313237436Snp#define V_ISO_CPLHDR_LEN(x) ((x) << S_ISO_CPLHDR_LEN)
1314237436Snp#define G_ISO_CPLHDR_LEN(x) (((x) >> S_ISO_CPLHDR_LEN) & M_ISO_CPLHDR_LEN)
1315237436Snp
1316237436Snp#define S_ISO_HDR_CRC    17
1317237436Snp#define V_ISO_HDR_CRC(x) ((x) << S_ISO_HDR_CRC)
1318237436Snp#define F_ISO_HDR_CRC    V_ISO_HDR_CRC(1U)
1319237436Snp
1320237436Snp#define S_ISO_DATA_CRC    16
1321237436Snp#define V_ISO_DATA_CRC(x) ((x) << S_ISO_DATA_CRC)
1322237436Snp#define F_ISO_DATA_CRC    V_ISO_DATA_CRC(1U)
1323237436Snp
1324237436Snp#define S_ISO_IMD_DATA_EN    15
1325237436Snp#define V_ISO_IMD_DATA_EN(x) ((x) << S_ISO_IMD_DATA_EN)
1326237436Snp#define F_ISO_IMD_DATA_EN    V_ISO_IMD_DATA_EN(1U)
1327237436Snp
1328237436Snp#define S_ISO_PDU_TYPE    13
1329237436Snp#define M_ISO_PDU_TYPE    0x3
1330237436Snp#define V_ISO_PDU_TYPE(x) ((x) << S_ISO_PDU_TYPE)
1331237436Snp#define G_ISO_PDU_TYPE(x) (((x) >> S_ISO_PDU_TYPE) & M_ISO_PDU_TYPE)
1332237436Snp
1333218792Snpstruct cpl_iscsi_hdr {
1334218792Snp	RSS_HDR
1335218792Snp	union opcode_tid ot;
1336218792Snp	__be16 pdu_len_ddp;
1337218792Snp	__be16 len;
1338218792Snp	__be32 seq;
1339218792Snp	__be16 urg;
1340218792Snp	__u8 rsvd;
1341218792Snp	__u8 status;
1342218792Snp};
1343218792Snp
1344218792Snp/* cpl_iscsi_hdr.pdu_len_ddp fields */
1345218792Snp#define S_ISCSI_PDU_LEN    0
1346218792Snp#define M_ISCSI_PDU_LEN    0x7FFF
1347218792Snp#define V_ISCSI_PDU_LEN(x) ((x) << S_ISCSI_PDU_LEN)
1348218792Snp#define G_ISCSI_PDU_LEN(x) (((x) >> S_ISCSI_PDU_LEN) & M_ISCSI_PDU_LEN)
1349218792Snp
1350218792Snp#define S_ISCSI_DDP    15
1351218792Snp#define V_ISCSI_DDP(x) ((x) << S_ISCSI_DDP)
1352218792Snp#define F_ISCSI_DDP    V_ISCSI_DDP(1U)
1353218792Snp
1354237436Snpstruct cpl_iscsi_data {
1355237436Snp	RSS_HDR
1356237436Snp	union opcode_tid ot;
1357237436Snp	__u8 rsvd0[2];
1358237436Snp	__be16 len;
1359237436Snp	__be32 seq;
1360237436Snp	__be16 urg;
1361237436Snp	__u8 rsvd1;
1362237436Snp	__u8 status;
1363237436Snp};
1364237436Snp
1365218792Snpstruct cpl_rx_data {
1366218792Snp	RSS_HDR
1367218792Snp	union opcode_tid ot;
1368218792Snp	__be16 rsvd;
1369218792Snp	__be16 len;
1370218792Snp	__be32 seq;
1371218792Snp	__be16 urg;
1372218792Snp#if defined(__LITTLE_ENDIAN_BITFIELD)
1373218792Snp	__u8 dack_mode:2;
1374218792Snp	__u8 psh:1;
1375218792Snp	__u8 heartbeat:1;
1376218792Snp	__u8 ddp_off:1;
1377218792Snp	__u8 :3;
1378218792Snp#else
1379218792Snp	__u8 :3;
1380218792Snp	__u8 ddp_off:1;
1381218792Snp	__u8 heartbeat:1;
1382218792Snp	__u8 psh:1;
1383218792Snp	__u8 dack_mode:2;
1384218792Snp#endif
1385218792Snp	__u8 status;
1386218792Snp};
1387218792Snp
1388218792Snpstruct cpl_fcoe_hdr {
1389218792Snp	RSS_HDR
1390218792Snp	union opcode_tid ot;
1391218792Snp	__be16 oxid;
1392218792Snp	__be16 len;
1393218792Snp	__be32 rctl_fctl;
1394218792Snp	__u8 cs_ctl;
1395218792Snp	__u8 df_ctl;
1396218792Snp	__u8 sof;
1397218792Snp	__u8 eof;
1398218792Snp	__be16 seq_cnt;
1399218792Snp	__u8 seq_id;
1400218792Snp	__u8 type;
1401218792Snp	__be32 param;
1402218792Snp};
1403218792Snp
1404237436Snpstruct cpl_fcoe_data {
1405237436Snp	RSS_HDR
1406237436Snp	union opcode_tid ot;
1407237436Snp	__u8 rsvd0[2];
1408237436Snp	__be16 len;
1409237436Snp	__be32 seq;
1410237436Snp	__u8 rsvd1[3];
1411237436Snp	__u8 status;
1412237436Snp};
1413237436Snp
1414218792Snpstruct cpl_rx_urg_notify {
1415218792Snp	RSS_HDR
1416218792Snp	union opcode_tid ot;
1417218792Snp	__be32 seq;
1418218792Snp};
1419218792Snp
1420218792Snpstruct cpl_rx_urg_pkt {
1421218792Snp	RSS_HDR
1422218792Snp	union opcode_tid ot;
1423218792Snp	__be16 rsvd;
1424218792Snp	__be16 len;
1425218792Snp};
1426218792Snp
1427218792Snpstruct cpl_rx_data_ack {
1428218792Snp	WR_HDR;
1429218792Snp	union opcode_tid ot;
1430218792Snp	__be32 credit_dack;
1431218792Snp};
1432218792Snp
1433239344Snpstruct cpl_rx_data_ack_core {
1434239344Snp	union opcode_tid ot;
1435239344Snp	__be32 credit_dack;
1436239344Snp};
1437239344Snp
1438218792Snp/* cpl_rx_data_ack.ack_seq fields */
1439218792Snp#define S_RX_CREDITS    0
1440218792Snp#define M_RX_CREDITS    0x3FFFFFF
1441218792Snp#define V_RX_CREDITS(x) ((x) << S_RX_CREDITS)
1442218792Snp#define G_RX_CREDITS(x) (((x) >> S_RX_CREDITS) & M_RX_CREDITS)
1443218792Snp
1444218792Snp#define S_RX_MODULATE_TX    26
1445218792Snp#define V_RX_MODULATE_TX(x) ((x) << S_RX_MODULATE_TX)
1446218792Snp#define F_RX_MODULATE_TX    V_RX_MODULATE_TX(1U)
1447218792Snp
1448218792Snp#define S_RX_MODULATE_RX    27
1449218792Snp#define V_RX_MODULATE_RX(x) ((x) << S_RX_MODULATE_RX)
1450218792Snp#define F_RX_MODULATE_RX    V_RX_MODULATE_RX(1U)
1451218792Snp
1452218792Snp#define S_RX_FORCE_ACK    28
1453218792Snp#define V_RX_FORCE_ACK(x) ((x) << S_RX_FORCE_ACK)
1454218792Snp#define F_RX_FORCE_ACK    V_RX_FORCE_ACK(1U)
1455218792Snp
1456218792Snp#define S_RX_DACK_MODE    29
1457218792Snp#define M_RX_DACK_MODE    0x3
1458218792Snp#define V_RX_DACK_MODE(x) ((x) << S_RX_DACK_MODE)
1459218792Snp#define G_RX_DACK_MODE(x) (((x) >> S_RX_DACK_MODE) & M_RX_DACK_MODE)
1460218792Snp
1461218792Snp#define S_RX_DACK_CHANGE    31
1462218792Snp#define V_RX_DACK_CHANGE(x) ((x) << S_RX_DACK_CHANGE)
1463218792Snp#define F_RX_DACK_CHANGE    V_RX_DACK_CHANGE(1U)
1464218792Snp
1465218792Snpstruct cpl_rx_ddp_complete {
1466218792Snp	RSS_HDR
1467218792Snp	union opcode_tid ot;
1468218792Snp	__be32 ddp_report;
1469218792Snp	__be32 rcv_nxt;
1470218792Snp	__be32 rsvd;
1471218792Snp};
1472218792Snp
1473218792Snpstruct cpl_rx_data_ddp {
1474218792Snp	RSS_HDR
1475218792Snp	union opcode_tid ot;
1476218792Snp	__be16 urg;
1477218792Snp	__be16 len;
1478218792Snp	__be32 seq;
1479218792Snp	union {
1480218792Snp		__be32 nxt_seq;
1481218792Snp		__be32 ddp_report;
1482218792Snp	} u;
1483218792Snp	__be32 ulp_crc;
1484218792Snp	__be32 ddpvld;
1485218792Snp};
1486218792Snp
1487237436Snp#define cpl_rx_iscsi_ddp cpl_rx_data_ddp
1488237436Snp
1489218792Snpstruct cpl_rx_fcoe_ddp {
1490218792Snp	RSS_HDR
1491218792Snp	union opcode_tid ot;
1492218792Snp	__be16 rsvd;
1493218792Snp	__be16 len;
1494218792Snp	__be32 seq;
1495218792Snp	__be32 ddp_report;
1496218792Snp	__be32 ulp_crc;
1497218792Snp	__be32 ddpvld;
1498218792Snp};
1499218792Snp
1500237436Snpstruct cpl_rx_data_dif {
1501237436Snp	RSS_HDR
1502237436Snp	union opcode_tid ot;
1503237436Snp	__be16 ddp_len;
1504237436Snp	__be16 msg_len;
1505237436Snp	__be32 seq;
1506237436Snp	union {
1507237436Snp		__be32 nxt_seq;
1508237436Snp		__be32 ddp_report;
1509237436Snp	} u;
1510237436Snp	__be32 err_vec;
1511237436Snp	__be32 ddpvld;
1512237436Snp};
1513237436Snp
1514237436Snpstruct cpl_rx_iscsi_dif {
1515237436Snp	RSS_HDR
1516237436Snp	union opcode_tid ot;
1517237436Snp	__be16 ddp_len;
1518237436Snp	__be16 msg_len;
1519237436Snp	__be32 seq;
1520237436Snp	union {
1521237436Snp		__be32 nxt_seq;
1522237436Snp		__be32 ddp_report;
1523237436Snp	} u;
1524237436Snp	__be32 ulp_crc;
1525237436Snp	__be32 ddpvld;
1526237436Snp	__u8 rsvd0[8];
1527237436Snp	__be32 err_vec;
1528237436Snp	__u8 rsvd1[4];
1529237436Snp};
1530237436Snp
1531237436Snpstruct cpl_rx_fcoe_dif {
1532237436Snp	RSS_HDR
1533237436Snp	union opcode_tid ot;
1534237436Snp	__be16 ddp_len;
1535237436Snp	__be16 msg_len;
1536237436Snp	__be32 seq;
1537237436Snp	__be32 ddp_report;
1538237436Snp	__be32 err_vec;
1539237436Snp	__be32 ddpvld;
1540237436Snp};
1541237436Snp
1542237436Snp/* cpl_rx_{data,iscsi,fcoe}_{ddp,dif}.ddpvld fields */
1543218792Snp#define S_DDP_VALID    15
1544218792Snp#define M_DDP_VALID    0x1FFFF
1545218792Snp#define V_DDP_VALID(x) ((x) << S_DDP_VALID)
1546218792Snp#define G_DDP_VALID(x) (((x) >> S_DDP_VALID) & M_DDP_VALID)
1547218792Snp
1548218792Snp#define S_DDP_PPOD_MISMATCH    15
1549218792Snp#define V_DDP_PPOD_MISMATCH(x) ((x) << S_DDP_PPOD_MISMATCH)
1550218792Snp#define F_DDP_PPOD_MISMATCH    V_DDP_PPOD_MISMATCH(1U)
1551218792Snp
1552218792Snp#define S_DDP_PDU    16
1553218792Snp#define V_DDP_PDU(x) ((x) << S_DDP_PDU)
1554218792Snp#define F_DDP_PDU    V_DDP_PDU(1U)
1555218792Snp
1556218792Snp#define S_DDP_LLIMIT_ERR    17
1557218792Snp#define V_DDP_LLIMIT_ERR(x) ((x) << S_DDP_LLIMIT_ERR)
1558218792Snp#define F_DDP_LLIMIT_ERR    V_DDP_LLIMIT_ERR(1U)
1559218792Snp
1560218792Snp#define S_DDP_PPOD_PARITY_ERR    18
1561218792Snp#define V_DDP_PPOD_PARITY_ERR(x) ((x) << S_DDP_PPOD_PARITY_ERR)
1562218792Snp#define F_DDP_PPOD_PARITY_ERR    V_DDP_PPOD_PARITY_ERR(1U)
1563218792Snp
1564218792Snp#define S_DDP_PADDING_ERR    19
1565218792Snp#define V_DDP_PADDING_ERR(x) ((x) << S_DDP_PADDING_ERR)
1566218792Snp#define F_DDP_PADDING_ERR    V_DDP_PADDING_ERR(1U)
1567218792Snp
1568218792Snp#define S_DDP_HDRCRC_ERR    20
1569218792Snp#define V_DDP_HDRCRC_ERR(x) ((x) << S_DDP_HDRCRC_ERR)
1570218792Snp#define F_DDP_HDRCRC_ERR    V_DDP_HDRCRC_ERR(1U)
1571218792Snp
1572218792Snp#define S_DDP_DATACRC_ERR    21
1573218792Snp#define V_DDP_DATACRC_ERR(x) ((x) << S_DDP_DATACRC_ERR)
1574218792Snp#define F_DDP_DATACRC_ERR    V_DDP_DATACRC_ERR(1U)
1575218792Snp
1576218792Snp#define S_DDP_INVALID_TAG    22
1577218792Snp#define V_DDP_INVALID_TAG(x) ((x) << S_DDP_INVALID_TAG)
1578218792Snp#define F_DDP_INVALID_TAG    V_DDP_INVALID_TAG(1U)
1579218792Snp
1580218792Snp#define S_DDP_ULIMIT_ERR    23
1581218792Snp#define V_DDP_ULIMIT_ERR(x) ((x) << S_DDP_ULIMIT_ERR)
1582218792Snp#define F_DDP_ULIMIT_ERR    V_DDP_ULIMIT_ERR(1U)
1583218792Snp
1584218792Snp#define S_DDP_OFFSET_ERR    24
1585218792Snp#define V_DDP_OFFSET_ERR(x) ((x) << S_DDP_OFFSET_ERR)
1586218792Snp#define F_DDP_OFFSET_ERR    V_DDP_OFFSET_ERR(1U)
1587218792Snp
1588218792Snp#define S_DDP_COLOR_ERR    25
1589218792Snp#define V_DDP_COLOR_ERR(x) ((x) << S_DDP_COLOR_ERR)
1590218792Snp#define F_DDP_COLOR_ERR    V_DDP_COLOR_ERR(1U)
1591218792Snp
1592218792Snp#define S_DDP_TID_MISMATCH    26
1593218792Snp#define V_DDP_TID_MISMATCH(x) ((x) << S_DDP_TID_MISMATCH)
1594218792Snp#define F_DDP_TID_MISMATCH    V_DDP_TID_MISMATCH(1U)
1595218792Snp
1596218792Snp#define S_DDP_INVALID_PPOD    27
1597218792Snp#define V_DDP_INVALID_PPOD(x) ((x) << S_DDP_INVALID_PPOD)
1598218792Snp#define F_DDP_INVALID_PPOD    V_DDP_INVALID_PPOD(1U)
1599218792Snp
1600218792Snp#define S_DDP_ULP_MODE    28
1601218792Snp#define M_DDP_ULP_MODE    0xF
1602218792Snp#define V_DDP_ULP_MODE(x) ((x) << S_DDP_ULP_MODE)
1603218792Snp#define G_DDP_ULP_MODE(x) (((x) >> S_DDP_ULP_MODE) & M_DDP_ULP_MODE)
1604218792Snp
1605237436Snp/* cpl_rx_{data,iscsi,fcoe}_{ddp,dif}.ddp_report fields */
1606218792Snp#define S_DDP_OFFSET    0
1607218792Snp#define M_DDP_OFFSET    0xFFFFFF
1608218792Snp#define V_DDP_OFFSET(x) ((x) << S_DDP_OFFSET)
1609218792Snp#define G_DDP_OFFSET(x) (((x) >> S_DDP_OFFSET) & M_DDP_OFFSET)
1610218792Snp
1611218792Snp#define S_DDP_DACK_MODE    24
1612218792Snp#define M_DDP_DACK_MODE    0x3
1613218792Snp#define V_DDP_DACK_MODE(x) ((x) << S_DDP_DACK_MODE)
1614218792Snp#define G_DDP_DACK_MODE(x) (((x) >> S_DDP_DACK_MODE) & M_DDP_DACK_MODE)
1615218792Snp
1616218792Snp#define S_DDP_BUF_IDX    26
1617218792Snp#define V_DDP_BUF_IDX(x) ((x) << S_DDP_BUF_IDX)
1618218792Snp#define F_DDP_BUF_IDX    V_DDP_BUF_IDX(1U)
1619218792Snp
1620218792Snp#define S_DDP_URG    27
1621218792Snp#define V_DDP_URG(x) ((x) << S_DDP_URG)
1622218792Snp#define F_DDP_URG    V_DDP_URG(1U)
1623218792Snp
1624218792Snp#define S_DDP_PSH    28
1625218792Snp#define V_DDP_PSH(x) ((x) << S_DDP_PSH)
1626218792Snp#define F_DDP_PSH    V_DDP_PSH(1U)
1627218792Snp
1628218792Snp#define S_DDP_BUF_COMPLETE    29
1629218792Snp#define V_DDP_BUF_COMPLETE(x) ((x) << S_DDP_BUF_COMPLETE)
1630218792Snp#define F_DDP_BUF_COMPLETE    V_DDP_BUF_COMPLETE(1U)
1631218792Snp
1632218792Snp#define S_DDP_BUF_TIMED_OUT    30
1633218792Snp#define V_DDP_BUF_TIMED_OUT(x) ((x) << S_DDP_BUF_TIMED_OUT)
1634218792Snp#define F_DDP_BUF_TIMED_OUT    V_DDP_BUF_TIMED_OUT(1U)
1635218792Snp
1636218792Snp#define S_DDP_INV    31
1637218792Snp#define V_DDP_INV(x) ((x) << S_DDP_INV)
1638218792Snp#define F_DDP_INV    V_DDP_INV(1U)
1639218792Snp
1640218792Snpstruct cpl_rx_pkt {
1641218792Snp	RSS_HDR
1642218792Snp	__u8 opcode;
1643218792Snp#if defined(__LITTLE_ENDIAN_BITFIELD)
1644218792Snp	__u8 iff:4;
1645218792Snp	__u8 csum_calc:1;
1646218792Snp	__u8 ipmi_pkt:1;
1647218792Snp	__u8 vlan_ex:1;
1648218792Snp	__u8 ip_frag:1;
1649218792Snp#else
1650218792Snp	__u8 ip_frag:1;
1651218792Snp	__u8 vlan_ex:1;
1652218792Snp	__u8 ipmi_pkt:1;
1653218792Snp	__u8 csum_calc:1;
1654218792Snp	__u8 iff:4;
1655218792Snp#endif
1656218792Snp	__be16 csum;
1657218792Snp	__be16 vlan;
1658218792Snp	__be16 len;
1659218792Snp	__be32 l2info;
1660218792Snp	__be16 hdr_len;
1661218792Snp	__be16 err_vec;
1662218792Snp};
1663218792Snp
1664218792Snp/* rx_pkt.l2info fields */
1665218792Snp#define S_RX_ETHHDR_LEN    0
1666218792Snp#define M_RX_ETHHDR_LEN    0x1F
1667218792Snp#define V_RX_ETHHDR_LEN(x) ((x) << S_RX_ETHHDR_LEN)
1668218792Snp#define G_RX_ETHHDR_LEN(x) (((x) >> S_RX_ETHHDR_LEN) & M_RX_ETHHDR_LEN)
1669218792Snp
1670237436Snp#define S_RX_T5_ETHHDR_LEN    0
1671237436Snp#define M_RX_T5_ETHHDR_LEN    0x3F
1672237436Snp#define V_RX_T5_ETHHDR_LEN(x) ((x) << S_RX_T5_ETHHDR_LEN)
1673237436Snp#define G_RX_T5_ETHHDR_LEN(x) (((x) >> S_RX_T5_ETHHDR_LEN) & M_RX_T5_ETHHDR_LEN)
1674237436Snp
1675218792Snp#define S_RX_PKTYPE    5
1676218792Snp#define M_RX_PKTYPE    0x7
1677218792Snp#define V_RX_PKTYPE(x) ((x) << S_RX_PKTYPE)
1678218792Snp#define G_RX_PKTYPE(x) (((x) >> S_RX_PKTYPE) & M_RX_PKTYPE)
1679218792Snp
1680237436Snp#define S_RX_T5_DATYPE    6
1681237436Snp#define M_RX_T5_DATYPE    0x3
1682237436Snp#define V_RX_T5_DATYPE(x) ((x) << S_RX_T5_DATYPE)
1683237436Snp#define G_RX_T5_DATYPE(x) (((x) >> S_RX_T5_DATYPE) & M_RX_T5_DATYPE)
1684237436Snp
1685218792Snp#define S_RX_MACIDX    8
1686218792Snp#define M_RX_MACIDX    0x1FF
1687218792Snp#define V_RX_MACIDX(x) ((x) << S_RX_MACIDX)
1688218792Snp#define G_RX_MACIDX(x) (((x) >> S_RX_MACIDX) & M_RX_MACIDX)
1689218792Snp
1690237436Snp#define S_RX_T5_PKTYPE    17
1691237436Snp#define M_RX_T5_PKTYPE    0x7
1692237436Snp#define V_RX_T5_PKTYPE(x) ((x) << S_RX_T5_PKTYPE)
1693237436Snp#define G_RX_T5_PKTYPE(x) (((x) >> S_RX_T5_PKTYPE) & M_RX_T5_PKTYPE)
1694237436Snp
1695218792Snp#define S_RX_DATYPE    18
1696218792Snp#define M_RX_DATYPE    0x3
1697218792Snp#define V_RX_DATYPE(x) ((x) << S_RX_DATYPE)
1698218792Snp#define G_RX_DATYPE(x) (((x) >> S_RX_DATYPE) & M_RX_DATYPE)
1699218792Snp
1700218792Snp#define S_RXF_PSH    20
1701218792Snp#define V_RXF_PSH(x) ((x) << S_RXF_PSH)
1702218792Snp#define F_RXF_PSH    V_RXF_PSH(1U)
1703218792Snp
1704218792Snp#define S_RXF_SYN    21
1705218792Snp#define V_RXF_SYN(x) ((x) << S_RXF_SYN)
1706218792Snp#define F_RXF_SYN    V_RXF_SYN(1U)
1707218792Snp
1708218792Snp#define S_RXF_UDP    22
1709218792Snp#define V_RXF_UDP(x) ((x) << S_RXF_UDP)
1710218792Snp#define F_RXF_UDP    V_RXF_UDP(1U)
1711218792Snp
1712218792Snp#define S_RXF_TCP    23
1713218792Snp#define V_RXF_TCP(x) ((x) << S_RXF_TCP)
1714218792Snp#define F_RXF_TCP    V_RXF_TCP(1U)
1715218792Snp
1716218792Snp#define S_RXF_IP    24
1717218792Snp#define V_RXF_IP(x) ((x) << S_RXF_IP)
1718218792Snp#define F_RXF_IP    V_RXF_IP(1U)
1719218792Snp
1720218792Snp#define S_RXF_IP6    25
1721218792Snp#define V_RXF_IP6(x) ((x) << S_RXF_IP6)
1722218792Snp#define F_RXF_IP6    V_RXF_IP6(1U)
1723218792Snp
1724218792Snp#define S_RXF_SYN_COOKIE    26
1725218792Snp#define V_RXF_SYN_COOKIE(x) ((x) << S_RXF_SYN_COOKIE)
1726218792Snp#define F_RXF_SYN_COOKIE    V_RXF_SYN_COOKIE(1U)
1727218792Snp
1728218792Snp#define S_RXF_FCOE    26
1729218792Snp#define V_RXF_FCOE(x) ((x) << S_RXF_FCOE)
1730218792Snp#define F_RXF_FCOE    V_RXF_FCOE(1U)
1731218792Snp
1732218792Snp#define S_RXF_LRO    27
1733218792Snp#define V_RXF_LRO(x) ((x) << S_RXF_LRO)
1734218792Snp#define F_RXF_LRO    V_RXF_LRO(1U)
1735218792Snp
1736218792Snp#define S_RX_CHAN    28
1737218792Snp#define M_RX_CHAN    0xF
1738218792Snp#define V_RX_CHAN(x) ((x) << S_RX_CHAN)
1739218792Snp#define G_RX_CHAN(x) (((x) >> S_RX_CHAN) & M_RX_CHAN)
1740218792Snp
1741218792Snp/* rx_pkt.hdr_len fields */
1742218792Snp#define S_RX_TCPHDR_LEN    0
1743218792Snp#define M_RX_TCPHDR_LEN    0x3F
1744218792Snp#define V_RX_TCPHDR_LEN(x) ((x) << S_RX_TCPHDR_LEN)
1745218792Snp#define G_RX_TCPHDR_LEN(x) (((x) >> S_RX_TCPHDR_LEN) & M_RX_TCPHDR_LEN)
1746218792Snp
1747218792Snp#define S_RX_IPHDR_LEN    6
1748218792Snp#define M_RX_IPHDR_LEN    0x3FF
1749218792Snp#define V_RX_IPHDR_LEN(x) ((x) << S_RX_IPHDR_LEN)
1750218792Snp#define G_RX_IPHDR_LEN(x) (((x) >> S_RX_IPHDR_LEN) & M_RX_IPHDR_LEN)
1751218792Snp
1752218792Snp/* rx_pkt.err_vec fields */
1753218792Snp#define S_RXERR_OR    0
1754218792Snp#define V_RXERR_OR(x) ((x) << S_RXERR_OR)
1755218792Snp#define F_RXERR_OR    V_RXERR_OR(1U)
1756218792Snp
1757218792Snp#define S_RXERR_MAC    1
1758218792Snp#define V_RXERR_MAC(x) ((x) << S_RXERR_MAC)
1759218792Snp#define F_RXERR_MAC    V_RXERR_MAC(1U)
1760218792Snp
1761218792Snp#define S_RXERR_IPVERS    2
1762218792Snp#define V_RXERR_IPVERS(x) ((x) << S_RXERR_IPVERS)
1763218792Snp#define F_RXERR_IPVERS    V_RXERR_IPVERS(1U)
1764218792Snp
1765218792Snp#define S_RXERR_FRAG    3
1766218792Snp#define V_RXERR_FRAG(x) ((x) << S_RXERR_FRAG)
1767218792Snp#define F_RXERR_FRAG    V_RXERR_FRAG(1U)
1768218792Snp
1769218792Snp#define S_RXERR_ATTACK    4
1770218792Snp#define V_RXERR_ATTACK(x) ((x) << S_RXERR_ATTACK)
1771218792Snp#define F_RXERR_ATTACK    V_RXERR_ATTACK(1U)
1772218792Snp
1773218792Snp#define S_RXERR_ETHHDR_LEN    5
1774218792Snp#define V_RXERR_ETHHDR_LEN(x) ((x) << S_RXERR_ETHHDR_LEN)
1775218792Snp#define F_RXERR_ETHHDR_LEN    V_RXERR_ETHHDR_LEN(1U)
1776218792Snp
1777218792Snp#define S_RXERR_IPHDR_LEN    6
1778218792Snp#define V_RXERR_IPHDR_LEN(x) ((x) << S_RXERR_IPHDR_LEN)
1779218792Snp#define F_RXERR_IPHDR_LEN    V_RXERR_IPHDR_LEN(1U)
1780218792Snp
1781218792Snp#define S_RXERR_TCPHDR_LEN    7
1782218792Snp#define V_RXERR_TCPHDR_LEN(x) ((x) << S_RXERR_TCPHDR_LEN)
1783218792Snp#define F_RXERR_TCPHDR_LEN    V_RXERR_TCPHDR_LEN(1U)
1784218792Snp
1785218792Snp#define S_RXERR_PKT_LEN    8
1786218792Snp#define V_RXERR_PKT_LEN(x) ((x) << S_RXERR_PKT_LEN)
1787218792Snp#define F_RXERR_PKT_LEN    V_RXERR_PKT_LEN(1U)
1788218792Snp
1789218792Snp#define S_RXERR_TCP_OPT    9
1790218792Snp#define V_RXERR_TCP_OPT(x) ((x) << S_RXERR_TCP_OPT)
1791218792Snp#define F_RXERR_TCP_OPT    V_RXERR_TCP_OPT(1U)
1792218792Snp
1793218792Snp#define S_RXERR_IPCSUM    12
1794218792Snp#define V_RXERR_IPCSUM(x) ((x) << S_RXERR_IPCSUM)
1795218792Snp#define F_RXERR_IPCSUM    V_RXERR_IPCSUM(1U)
1796218792Snp
1797218792Snp#define S_RXERR_CSUM    13
1798218792Snp#define V_RXERR_CSUM(x) ((x) << S_RXERR_CSUM)
1799218792Snp#define F_RXERR_CSUM    V_RXERR_CSUM(1U)
1800218792Snp
1801218792Snp#define S_RXERR_PING    14
1802218792Snp#define V_RXERR_PING(x) ((x) << S_RXERR_PING)
1803218792Snp#define F_RXERR_PING    V_RXERR_PING(1U)
1804218792Snp
1805218792Snpstruct cpl_trace_pkt {
1806218792Snp	RSS_HDR
1807218792Snp	__u8 opcode;
1808218792Snp	__u8 intf;
1809218792Snp#if defined(__LITTLE_ENDIAN_BITFIELD)
1810218792Snp	__u8 runt:4;
1811218792Snp	__u8 filter_hit:4;
1812218792Snp	__u8 :6;
1813218792Snp	__u8 err:1;
1814218792Snp	__u8 trunc:1;
1815218792Snp#else
1816218792Snp	__u8 filter_hit:4;
1817218792Snp	__u8 runt:4;
1818218792Snp	__u8 trunc:1;
1819218792Snp	__u8 err:1;
1820218792Snp	__u8 :6;
1821218792Snp#endif
1822218792Snp	__be16 rsvd;
1823218792Snp	__be16 len;
1824218792Snp	__be64 tstamp;
1825218792Snp};
1826218792Snp
1827237436Snpstruct cpl_t5_trace_pkt {
1828237436Snp	RSS_HDR
1829237436Snp	__u8 opcode;
1830237436Snp	__u8 intf;
1831237436Snp#if defined(__LITTLE_ENDIAN_BITFIELD)
1832237436Snp	__u8 runt:4;
1833237436Snp	__u8 filter_hit:4;
1834237436Snp	__u8 :6;
1835237436Snp	__u8 err:1;
1836237436Snp	__u8 trunc:1;
1837237436Snp#else
1838237436Snp	__u8 filter_hit:4;
1839237436Snp	__u8 runt:4;
1840237436Snp	__u8 trunc:1;
1841237436Snp	__u8 err:1;
1842237436Snp	__u8 :6;
1843237436Snp#endif
1844237436Snp	__be16 rsvd;
1845237436Snp	__be16 len;
1846237436Snp	__be64 tstamp;
1847237436Snp	__be64 rsvd1;
1848237436Snp};
1849237436Snp
1850218792Snpstruct cpl_rte_delete_req {
1851218792Snp	WR_HDR;
1852218792Snp	union opcode_tid ot;
1853218792Snp	__be32 params;
1854218792Snp};
1855218792Snp
1856218792Snp/* {cpl_rte_delete_req, cpl_rte_read_req}.params fields */
1857218792Snp#define S_RTE_REQ_LUT_IX    8
1858218792Snp#define M_RTE_REQ_LUT_IX    0x7FF
1859218792Snp#define V_RTE_REQ_LUT_IX(x) ((x) << S_RTE_REQ_LUT_IX)
1860218792Snp#define G_RTE_REQ_LUT_IX(x) (((x) >> S_RTE_REQ_LUT_IX) & M_RTE_REQ_LUT_IX)
1861218792Snp
1862218792Snp#define S_RTE_REQ_LUT_BASE    19
1863218792Snp#define M_RTE_REQ_LUT_BASE    0x7FF
1864218792Snp#define V_RTE_REQ_LUT_BASE(x) ((x) << S_RTE_REQ_LUT_BASE)
1865218792Snp#define G_RTE_REQ_LUT_BASE(x) (((x) >> S_RTE_REQ_LUT_BASE) & M_RTE_REQ_LUT_BASE)
1866218792Snp
1867218792Snp#define S_RTE_READ_REQ_SELECT    31
1868218792Snp#define V_RTE_READ_REQ_SELECT(x) ((x) << S_RTE_READ_REQ_SELECT)
1869218792Snp#define F_RTE_READ_REQ_SELECT    V_RTE_READ_REQ_SELECT(1U)
1870218792Snp
1871218792Snpstruct cpl_rte_delete_rpl {
1872218792Snp	RSS_HDR
1873218792Snp	union opcode_tid ot;
1874218792Snp	__u8 status;
1875218792Snp	__u8 rsvd[3];
1876218792Snp};
1877218792Snp
1878218792Snpstruct cpl_rte_write_req {
1879218792Snp	WR_HDR;
1880218792Snp	union opcode_tid ot;
1881218792Snp	__u32 write_sel;
1882218792Snp	__be32 lut_params;
1883218792Snp	__be32 l2t_idx;
1884218792Snp	__be32 netmask;
1885218792Snp	__be32 faddr;
1886218792Snp};
1887218792Snp
1888218792Snp/* cpl_rte_write_req.write_sel fields */
1889218792Snp#define S_RTE_WR_L2TIDX    31
1890218792Snp#define V_RTE_WR_L2TIDX(x) ((x) << S_RTE_WR_L2TIDX)
1891218792Snp#define F_RTE_WR_L2TIDX    V_RTE_WR_L2TIDX(1U)
1892218792Snp
1893218792Snp#define S_RTE_WR_FADDR    30
1894218792Snp#define V_RTE_WR_FADDR(x) ((x) << S_RTE_WR_FADDR)
1895218792Snp#define F_RTE_WR_FADDR    V_RTE_WR_FADDR(1U)
1896218792Snp
1897218792Snp/* cpl_rte_write_req.lut_params fields */
1898218792Snp#define S_RTE_WR_LUT_IX    10
1899218792Snp#define M_RTE_WR_LUT_IX    0x7FF
1900218792Snp#define V_RTE_WR_LUT_IX(x) ((x) << S_RTE_WR_LUT_IX)
1901218792Snp#define G_RTE_WR_LUT_IX(x) (((x) >> S_RTE_WR_LUT_IX) & M_RTE_WR_LUT_IX)
1902218792Snp
1903218792Snp#define S_RTE_WR_LUT_BASE    21
1904218792Snp#define M_RTE_WR_LUT_BASE    0x7FF
1905218792Snp#define V_RTE_WR_LUT_BASE(x) ((x) << S_RTE_WR_LUT_BASE)
1906218792Snp#define G_RTE_WR_LUT_BASE(x) (((x) >> S_RTE_WR_LUT_BASE) & M_RTE_WR_LUT_BASE)
1907218792Snp
1908218792Snpstruct cpl_rte_write_rpl {
1909218792Snp	RSS_HDR
1910218792Snp	union opcode_tid ot;
1911218792Snp	__u8 status;
1912218792Snp	__u8 rsvd[3];
1913218792Snp};
1914218792Snp
1915218792Snpstruct cpl_rte_read_req {
1916218792Snp	WR_HDR;
1917218792Snp	union opcode_tid ot;
1918218792Snp	__be32 params;
1919218792Snp};
1920218792Snp
1921218792Snpstruct cpl_rte_read_rpl {
1922218792Snp	RSS_HDR
1923218792Snp	union opcode_tid ot;
1924218792Snp	__u8 status;
1925218792Snp	__u8 rsvd;
1926218792Snp	__be16 l2t_idx;
1927218792Snp#if defined(__LITTLE_ENDIAN_BITFIELD)
1928218792Snp	__u32 :30;
1929218792Snp	__u32 select:1;
1930218792Snp#else
1931218792Snp	__u32 select:1;
1932218792Snp	__u32 :30;
1933218792Snp#endif
1934218792Snp	__be32 addr;
1935218792Snp};
1936218792Snp
1937218792Snpstruct cpl_l2t_write_req {
1938218792Snp	WR_HDR;
1939218792Snp	union opcode_tid ot;
1940218792Snp	__be16 params;
1941218792Snp	__be16 l2t_idx;
1942218792Snp	__be16 vlan;
1943218792Snp	__u8   dst_mac[6];
1944218792Snp};
1945218792Snp
1946218792Snp/* cpl_l2t_write_req.params fields */
1947218792Snp#define S_L2T_W_INFO    2
1948218792Snp#define M_L2T_W_INFO    0x3F
1949218792Snp#define V_L2T_W_INFO(x) ((x) << S_L2T_W_INFO)
1950218792Snp#define G_L2T_W_INFO(x) (((x) >> S_L2T_W_INFO) & M_L2T_W_INFO)
1951218792Snp
1952218792Snp#define S_L2T_W_PORT    8
1953248925Snp#define M_L2T_W_PORT    0x3
1954218792Snp#define V_L2T_W_PORT(x) ((x) << S_L2T_W_PORT)
1955218792Snp#define G_L2T_W_PORT(x) (((x) >> S_L2T_W_PORT) & M_L2T_W_PORT)
1956218792Snp
1957248925Snp#define S_L2T_W_LPBK    10
1958248925Snp#define V_L2T_W_LPBK(x) ((x) << S_L2T_W_LPBK)
1959248925Snp#define F_L2T_W_PKBK    V_L2T_W_LPBK(1U)
1960248925Snp
1961248925Snp#define S_L2T_W_ARPMISS         11
1962248925Snp#define V_L2T_W_ARPMISS(x)      ((x) << S_L2T_W_ARPMISS)
1963248925Snp#define F_L2T_W_ARPMISS         V_L2T_W_ARPMISS(1U)
1964248925Snp
1965218792Snp#define S_L2T_W_NOREPLY    15
1966218792Snp#define V_L2T_W_NOREPLY(x) ((x) << S_L2T_W_NOREPLY)
1967218792Snp#define F_L2T_W_NOREPLY    V_L2T_W_NOREPLY(1U)
1968218792Snp
1969248925Snp#define CPL_L2T_VLAN_NONE 0xfff
1970248925Snp
1971218792Snpstruct cpl_l2t_write_rpl {
1972218792Snp	RSS_HDR
1973218792Snp	union opcode_tid ot;
1974218792Snp	__u8 status;
1975218792Snp	__u8 rsvd[3];
1976218792Snp};
1977218792Snp
1978218792Snpstruct cpl_l2t_read_req {
1979218792Snp	WR_HDR;
1980218792Snp	union opcode_tid ot;
1981218792Snp	__be32 l2t_idx;
1982218792Snp};
1983218792Snp
1984218792Snpstruct cpl_l2t_read_rpl {
1985218792Snp	RSS_HDR
1986218792Snp	union opcode_tid ot;
1987218792Snp	__u8 status;
1988218792Snp#if defined(__LITTLE_ENDIAN_BITFIELD)
1989218792Snp	__u8 :4;
1990218792Snp	__u8 iff:4;
1991218792Snp#else
1992218792Snp	__u8 iff:4;
1993218792Snp	__u8 :4;
1994218792Snp#endif
1995218792Snp	__be16 vlan;
1996218792Snp	__be16 info;
1997218792Snp	__u8 dst_mac[6];
1998218792Snp};
1999218792Snp
2000218792Snpstruct cpl_smt_write_req {
2001218792Snp	WR_HDR;
2002218792Snp	union opcode_tid ot;
2003218792Snp	__be32 params;
2004218792Snp	__be16 pfvf1;
2005218792Snp	__u8   src_mac1[6];
2006218792Snp	__be16 pfvf0;
2007218792Snp	__u8   src_mac0[6];
2008218792Snp};
2009218792Snp
2010237436Snpstruct cpl_smt_write_rpl {
2011237436Snp	RSS_HDR
2012237436Snp	union opcode_tid ot;
2013237436Snp	__u8 status;
2014237436Snp	__u8 rsvd[3];
2015237436Snp};
2016237436Snp
2017237436Snpstruct cpl_smt_read_req {
2018237436Snp	WR_HDR;
2019237436Snp	union opcode_tid ot;
2020237436Snp	__be32 params;
2021237436Snp};
2022237436Snp
2023237436Snpstruct cpl_smt_read_rpl {
2024237436Snp	RSS_HDR
2025237436Snp	union opcode_tid ot;
2026237436Snp	__u8   status;
2027237436Snp	__u8   ovlan_idx;
2028237436Snp	__be16 rsvd;
2029237436Snp	__be16 pfvf1;
2030237436Snp	__u8   src_mac1[6];
2031237436Snp	__be16 pfvf0;
2032237436Snp	__u8   src_mac0[6];
2033237436Snp};
2034237436Snp
2035218792Snp/* cpl_smt_{read,write}_req.params fields */
2036218792Snp#define S_SMTW_OVLAN_IDX    16
2037218792Snp#define M_SMTW_OVLAN_IDX    0xF
2038218792Snp#define V_SMTW_OVLAN_IDX(x) ((x) << S_SMTW_OVLAN_IDX)
2039218792Snp#define G_SMTW_OVLAN_IDX(x) (((x) >> S_SMTW_OVLAN_IDX) & M_SMTW_OVLAN_IDX)
2040218792Snp
2041218792Snp#define S_SMTW_IDX    20
2042218792Snp#define M_SMTW_IDX    0x7F
2043218792Snp#define V_SMTW_IDX(x) ((x) << S_SMTW_IDX)
2044218792Snp#define G_SMTW_IDX(x) (((x) >> S_SMTW_IDX) & M_SMTW_IDX)
2045218792Snp
2046218792Snp#define S_SMTW_NORPL    31
2047218792Snp#define V_SMTW_NORPL(x) ((x) << S_SMTW_NORPL)
2048218792Snp#define F_SMTW_NORPL    V_SMTW_NORPL(1U)
2049218792Snp
2050218792Snp/* cpl_smt_{read,write}_req.pfvf? fields */
2051218792Snp#define S_SMTW_VF    0
2052218792Snp#define M_SMTW_VF    0xFF
2053218792Snp#define V_SMTW_VF(x) ((x) << S_SMTW_VF)
2054218792Snp#define G_SMTW_VF(x) (((x) >> S_SMTW_VF) & M_SMTW_VF)
2055218792Snp
2056218792Snp#define S_SMTW_PF    8
2057218792Snp#define M_SMTW_PF    0x7
2058218792Snp#define V_SMTW_PF(x) ((x) << S_SMTW_PF)
2059218792Snp#define G_SMTW_PF(x) (((x) >> S_SMTW_PF) & M_SMTW_PF)
2060218792Snp
2061218792Snp#define S_SMTW_VF_VLD    11
2062218792Snp#define V_SMTW_VF_VLD(x) ((x) << S_SMTW_VF_VLD)
2063218792Snp#define F_SMTW_VF_VLD    V_SMTW_VF_VLD(1U)
2064218792Snp
2065237436Snpstruct cpl_tag_write_req {
2066237436Snp	WR_HDR;
2067237436Snp	union opcode_tid ot;
2068237436Snp	__be32 params;
2069237436Snp	__be64 tag_val;
2070237436Snp};
2071237436Snp
2072237436Snpstruct cpl_tag_write_rpl {
2073218792Snp	RSS_HDR
2074218792Snp	union opcode_tid ot;
2075218792Snp	__u8 status;
2076237436Snp	__u8 rsvd[2];
2077237436Snp	__u8 idx;
2078218792Snp};
2079218792Snp
2080237436Snpstruct cpl_tag_read_req {
2081218792Snp	WR_HDR;
2082218792Snp	union opcode_tid ot;
2083218792Snp	__be32 params;
2084218792Snp};
2085218792Snp
2086237436Snpstruct cpl_tag_read_rpl {
2087218792Snp	RSS_HDR
2088218792Snp	union opcode_tid ot;
2089218792Snp	__u8   status;
2090237436Snp#if defined(__LITTLE_ENDIAN_BITFIELD)
2091237436Snp	__u8 :4;
2092237436Snp	__u8 tag_len:1;
2093237436Snp	__u8 :2;
2094237436Snp	__u8 ins_enable:1;
2095237436Snp#else
2096237436Snp	__u8 ins_enable:1;
2097237436Snp	__u8 :2;
2098237436Snp	__u8 tag_len:1;
2099237436Snp	__u8 :4;
2100237436Snp#endif
2101237436Snp	__u8   rsvd;
2102237436Snp	__u8   tag_idx;
2103237436Snp	__be64 tag_val;
2104218792Snp};
2105218792Snp
2106237436Snp/* cpl_tag{read,write}_req.params fields */
2107237436Snp#define S_TAGW_IDX    0
2108237436Snp#define M_TAGW_IDX    0x7F
2109237436Snp#define V_TAGW_IDX(x) ((x) << S_TAGW_IDX)
2110237436Snp#define G_TAGW_IDX(x) (((x) >> S_TAGW_IDX) & M_TAGW_IDX)
2111237436Snp
2112237436Snp#define S_TAGW_LEN    20
2113237436Snp#define V_TAGW_LEN(x) ((x) << S_TAGW_LEN)
2114237436Snp#define F_TAGW_LEN    V_TAGW_LEN(1U)
2115237436Snp
2116237436Snp#define S_TAGW_INS_ENABLE    23
2117237436Snp#define V_TAGW_INS_ENABLE(x) ((x) << S_TAGW_INS_ENABLE)
2118237436Snp#define F_TAGW_INS_ENABLE    V_TAGW_INS_ENABLE(1U)
2119237436Snp
2120237436Snp#define S_TAGW_NORPL    31
2121237436Snp#define V_TAGW_NORPL(x) ((x) << S_TAGW_NORPL)
2122237436Snp#define F_TAGW_NORPL    V_TAGW_NORPL(1U)
2123237436Snp
2124218792Snpstruct cpl_barrier {
2125218792Snp	WR_HDR;
2126218792Snp	__u8 opcode;
2127218792Snp	__u8 chan_map;
2128218792Snp	__be16 rsvd0;
2129218792Snp	__be32 rsvd1;
2130218792Snp};
2131218792Snp
2132218792Snp/* cpl_barrier.chan_map fields */
2133218792Snp#define S_CHAN_MAP    4
2134218792Snp#define M_CHAN_MAP    0xF
2135218792Snp#define V_CHAN_MAP(x) ((x) << S_CHAN_MAP)
2136218792Snp#define G_CHAN_MAP(x) (((x) >> S_CHAN_MAP) & M_CHAN_MAP)
2137218792Snp
2138218792Snpstruct cpl_error {
2139218792Snp	RSS_HDR
2140218792Snp	union opcode_tid ot;
2141218792Snp	__be32 error;
2142218792Snp};
2143218792Snp
2144218792Snpstruct cpl_hit_notify {
2145218792Snp	RSS_HDR
2146218792Snp	union opcode_tid ot;
2147218792Snp	__be32 rsvd;
2148218792Snp	__be32 info;
2149218792Snp	__be32 reason;
2150218792Snp};
2151218792Snp
2152218792Snpstruct cpl_pkt_notify {
2153218792Snp	RSS_HDR
2154218792Snp	union opcode_tid ot;
2155218792Snp	__be16 rsvd;
2156218792Snp	__be16 len;
2157218792Snp	__be32 info;
2158218792Snp	__be32 reason;
2159218792Snp};
2160218792Snp
2161218792Snp/* cpl_{hit,pkt}_notify.info fields */
2162218792Snp#define S_NTFY_MAC_IDX    0
2163218792Snp#define M_NTFY_MAC_IDX    0x1FF
2164218792Snp#define V_NTFY_MAC_IDX(x) ((x) << S_NTFY_MAC_IDX)
2165218792Snp#define G_NTFY_MAC_IDX(x) (((x) >> S_NTFY_MAC_IDX) & M_NTFY_MAC_IDX)
2166218792Snp
2167218792Snp#define S_NTFY_INTF    10
2168218792Snp#define M_NTFY_INTF    0xF
2169218792Snp#define V_NTFY_INTF(x) ((x) << S_NTFY_INTF)
2170218792Snp#define G_NTFY_INTF(x) (((x) >> S_NTFY_INTF) & M_NTFY_INTF)
2171218792Snp
2172218792Snp#define S_NTFY_TCPHDR_LEN    14
2173218792Snp#define M_NTFY_TCPHDR_LEN    0xF
2174218792Snp#define V_NTFY_TCPHDR_LEN(x) ((x) << S_NTFY_TCPHDR_LEN)
2175218792Snp#define G_NTFY_TCPHDR_LEN(x) (((x) >> S_NTFY_TCPHDR_LEN) & M_NTFY_TCPHDR_LEN)
2176218792Snp
2177218792Snp#define S_NTFY_IPHDR_LEN    18
2178218792Snp#define M_NTFY_IPHDR_LEN    0x1FF
2179218792Snp#define V_NTFY_IPHDR_LEN(x) ((x) << S_NTFY_IPHDR_LEN)
2180218792Snp#define G_NTFY_IPHDR_LEN(x) (((x) >> S_NTFY_IPHDR_LEN) & M_NTFY_IPHDR_LEN)
2181218792Snp
2182218792Snp#define S_NTFY_ETHHDR_LEN    27
2183218792Snp#define M_NTFY_ETHHDR_LEN    0x1F
2184218792Snp#define V_NTFY_ETHHDR_LEN(x) ((x) << S_NTFY_ETHHDR_LEN)
2185218792Snp#define G_NTFY_ETHHDR_LEN(x) (((x) >> S_NTFY_ETHHDR_LEN) & M_NTFY_ETHHDR_LEN)
2186218792Snp
2187237436Snp#define S_NTFY_T5_IPHDR_LEN    18
2188237436Snp#define M_NTFY_T5_IPHDR_LEN    0xFF
2189237436Snp#define V_NTFY_T5_IPHDR_LEN(x) ((x) << S_NTFY_T5_IPHDR_LEN)
2190237436Snp#define G_NTFY_T5_IPHDR_LEN(x) (((x) >> S_NTFY_T5_IPHDR_LEN) & M_NTFY_T5_IPHDR_LEN)
2191237436Snp
2192237436Snp#define S_NTFY_T5_ETHHDR_LEN    26
2193237436Snp#define M_NTFY_T5_ETHHDR_LEN    0x3F
2194237436Snp#define V_NTFY_T5_ETHHDR_LEN(x) ((x) << S_NTFY_T5_ETHHDR_LEN)
2195237436Snp#define G_NTFY_T5_ETHHDR_LEN(x) (((x) >> S_NTFY_T5_ETHHDR_LEN) & M_NTFY_T5_ETHHDR_LEN)
2196237436Snp
2197218792Snpstruct cpl_rdma_terminate {
2198218792Snp	RSS_HDR
2199218792Snp	union opcode_tid ot;
2200218792Snp	__be16 rsvd;
2201218792Snp	__be16 len;
2202218792Snp};
2203218792Snp
2204218792Snpstruct cpl_set_le_req {
2205218792Snp	WR_HDR;
2206218792Snp	union opcode_tid ot;
2207218792Snp	__be16 reply_ctrl;
2208218792Snp	__be16 params;
2209218792Snp	__be64 mask_hi;
2210218792Snp	__be64 mask_lo;
2211218792Snp	__be64 val_hi;
2212218792Snp	__be64 val_lo;
2213218792Snp};
2214218792Snp
2215218792Snp/* cpl_set_le_req.reply_ctrl additional fields */
2216218792Snp#define S_LE_REQ_IP6    13
2217218792Snp#define V_LE_REQ_IP6(x) ((x) << S_LE_REQ_IP6)
2218218792Snp#define F_LE_REQ_IP6    V_LE_REQ_IP6(1U)
2219218792Snp
2220218792Snp/* cpl_set_le_req.params fields */
2221218792Snp#define S_LE_CHAN    0
2222218792Snp#define M_LE_CHAN    0x3
2223218792Snp#define V_LE_CHAN(x) ((x) << S_LE_CHAN)
2224218792Snp#define G_LE_CHAN(x) (((x) >> S_LE_CHAN) & M_LE_CHAN)
2225218792Snp
2226218792Snp#define S_LE_OFFSET    5
2227218792Snp#define M_LE_OFFSET    0x7
2228218792Snp#define V_LE_OFFSET(x) ((x) << S_LE_OFFSET)
2229218792Snp#define G_LE_OFFSET(x) (((x) >> S_LE_OFFSET) & M_LE_OFFSET)
2230218792Snp
2231218792Snp#define S_LE_MORE    8
2232218792Snp#define V_LE_MORE(x) ((x) << S_LE_MORE)
2233218792Snp#define F_LE_MORE    V_LE_MORE(1U)
2234218792Snp
2235218792Snp#define S_LE_REQSIZE    9
2236218792Snp#define M_LE_REQSIZE    0x7
2237218792Snp#define V_LE_REQSIZE(x) ((x) << S_LE_REQSIZE)
2238218792Snp#define G_LE_REQSIZE(x) (((x) >> S_LE_REQSIZE) & M_LE_REQSIZE)
2239218792Snp
2240218792Snp#define S_LE_REQCMD    12
2241218792Snp#define M_LE_REQCMD    0xF
2242218792Snp#define V_LE_REQCMD(x) ((x) << S_LE_REQCMD)
2243218792Snp#define G_LE_REQCMD(x) (((x) >> S_LE_REQCMD) & M_LE_REQCMD)
2244218792Snp
2245218792Snpstruct cpl_set_le_rpl {
2246218792Snp	RSS_HDR
2247218792Snp	union opcode_tid ot;
2248218792Snp	__u8 chan;
2249218792Snp	__u8 info;
2250218792Snp	__be16 len;
2251218792Snp};
2252218792Snp
2253218792Snp/* cpl_set_le_rpl.info fields */
2254218792Snp#define S_LE_RSPCMD    0
2255218792Snp#define M_LE_RSPCMD    0xF
2256218792Snp#define V_LE_RSPCMD(x) ((x) << S_LE_RSPCMD)
2257218792Snp#define G_LE_RSPCMD(x) (((x) >> S_LE_RSPCMD) & M_LE_RSPCMD)
2258218792Snp
2259218792Snp#define S_LE_RSPSIZE    4
2260218792Snp#define M_LE_RSPSIZE    0x7
2261218792Snp#define V_LE_RSPSIZE(x) ((x) << S_LE_RSPSIZE)
2262218792Snp#define G_LE_RSPSIZE(x) (((x) >> S_LE_RSPSIZE) & M_LE_RSPSIZE)
2263218792Snp
2264218792Snp#define S_LE_RSPTYPE    7
2265218792Snp#define V_LE_RSPTYPE(x) ((x) << S_LE_RSPTYPE)
2266218792Snp#define F_LE_RSPTYPE    V_LE_RSPTYPE(1U)
2267218792Snp
2268218792Snpstruct cpl_sge_egr_update {
2269218792Snp	RSS_HDR
2270218792Snp	__be32 opcode_qid;
2271218792Snp	__be16 cidx;
2272218792Snp	__be16 pidx;
2273218792Snp};
2274218792Snp
2275218792Snp/* cpl_sge_egr_update.ot fields */
2276218792Snp#define S_EGR_QID    0
2277218792Snp#define M_EGR_QID    0x1FFFF
2278218792Snp#define V_EGR_QID(x) ((x) << S_EGR_QID)
2279218792Snp#define G_EGR_QID(x) (((x) >> S_EGR_QID) & M_EGR_QID)
2280218792Snp
2281247291Snp/* cpl_fw*.type values */
2282247291Snpenum {
2283247291Snp	FW_TYPE_CMD_RPL = 0,
2284247291Snp	FW_TYPE_WR_RPL = 1,
2285247291Snp	FW_TYPE_CQE = 2,
2286247291Snp	FW_TYPE_OFLD_CONNECTION_WR_RPL = 3,
2287247291Snp	FW_TYPE_RSSCPL = 4,
2288247291Snp};
2289247291Snp
2290218792Snpstruct cpl_fw2_pld {
2291218792Snp	RSS_HDR
2292218792Snp	u8 opcode;
2293218792Snp	u8 rsvd[5];
2294218792Snp	__be16 len;
2295218792Snp};
2296218792Snp
2297218792Snpstruct cpl_fw4_pld {
2298218792Snp	RSS_HDR
2299218792Snp	u8 opcode;
2300218792Snp	u8 rsvd0[3];
2301218792Snp	u8 type;
2302218792Snp	u8 rsvd1;
2303218792Snp	__be16 len;
2304218792Snp	__be64 data;
2305218792Snp	__be64 rsvd2;
2306218792Snp};
2307218792Snp
2308218792Snpstruct cpl_fw6_pld {
2309218792Snp	RSS_HDR
2310218792Snp	u8 opcode;
2311218792Snp	u8 rsvd[5];
2312218792Snp	__be16 len;
2313218792Snp	__be64 data[4];
2314218792Snp};
2315218792Snp
2316218792Snpstruct cpl_fw2_msg {
2317218792Snp	RSS_HDR
2318218792Snp	union opcode_info oi;
2319218792Snp};
2320218792Snp
2321218792Snpstruct cpl_fw4_msg {
2322218792Snp	RSS_HDR
2323218792Snp	u8 opcode;
2324218792Snp	u8 type;
2325218792Snp	__be16 rsvd0;
2326218792Snp	__be32 rsvd1;
2327218792Snp	__be64 data[2];
2328218792Snp};
2329218792Snp
2330218792Snpstruct cpl_fw4_ack {
2331218792Snp	RSS_HDR
2332218792Snp	union opcode_tid ot;
2333218792Snp	u8 credits;
2334218792Snp	u8 rsvd0[2];
2335237436Snp	u8 flags;
2336218792Snp	__be32 snd_nxt;
2337218792Snp	__be32 snd_una;
2338218792Snp	__be64 rsvd1;
2339218792Snp};
2340218792Snp
2341237436Snpenum {
2342237436Snp	CPL_FW4_ACK_FLAGS_SEQVAL	= 0x1,	/* seqn valid */
2343237436Snp	CPL_FW4_ACK_FLAGS_CH		= 0x2,	/* channel change complete */
2344237436Snp	CPL_FW4_ACK_FLAGS_FLOWC		= 0x4,	/* fw_flowc_wr complete */
2345237436Snp};
2346237436Snp
2347218792Snpstruct cpl_fw6_msg {
2348218792Snp	RSS_HDR
2349218792Snp	u8 opcode;
2350218792Snp	u8 type;
2351218792Snp	__be16 rsvd0;
2352218792Snp	__be32 rsvd1;
2353218792Snp	__be64 data[4];
2354218792Snp};
2355218792Snp
2356218792Snp/* cpl_fw6_msg.type values */
2357218792Snpenum {
2358247291Snp	FW6_TYPE_CMD_RPL	= FW_TYPE_CMD_RPL,
2359247291Snp	FW6_TYPE_WR_RPL		= FW_TYPE_WR_RPL,
2360247291Snp	FW6_TYPE_CQE		= FW_TYPE_CQE,
2361247291Snp	FW6_TYPE_OFLD_CONNECTION_WR_RPL = FW_TYPE_OFLD_CONNECTION_WR_RPL,
2362247291Snp	FW6_TYPE_RSSCPL		= FW_TYPE_RSSCPL,
2363239336Snp
2364239336Snp	NUM_FW6_TYPES
2365218792Snp};
2366218792Snp
2367237436Snpstruct cpl_fw6_msg_ofld_connection_wr_rpl {
2368237436Snp	__u64	cookie;
2369237436Snp	__be32	tid;	/* or atid in case of active failure */
2370237436Snp	__u8	t_state;
2371237436Snp	__u8	retval;
2372237436Snp	__u8	rsvd[2];
2373237436Snp};
2374237436Snp
2375218792Snp/* ULP_TX opcodes */
2376218792Snpenum {
2377218792Snp	ULP_TX_MEM_READ = 2,
2378218792Snp	ULP_TX_MEM_WRITE = 3,
2379218792Snp	ULP_TX_PKT = 4
2380218792Snp};
2381218792Snp
2382218792Snpenum {
2383218792Snp	ULP_TX_SC_NOOP = 0x80,
2384218792Snp	ULP_TX_SC_IMM  = 0x81,
2385218792Snp	ULP_TX_SC_DSGL = 0x82,
2386218792Snp	ULP_TX_SC_ISGL = 0x83
2387218792Snp};
2388218792Snp
2389218792Snp#define S_ULPTX_CMD    24
2390218792Snp#define M_ULPTX_CMD    0xFF
2391218792Snp#define V_ULPTX_CMD(x) ((x) << S_ULPTX_CMD)
2392218792Snp
2393218792Snp#define S_ULPTX_LEN16    0
2394218792Snp#define M_ULPTX_LEN16    0xFF
2395218792Snp#define V_ULPTX_LEN16(x) ((x) << S_ULPTX_LEN16)
2396218792Snp
2397218792Snp#define S_ULP_TX_SC_MORE 23
2398218792Snp#define V_ULP_TX_SC_MORE(x) ((x) << S_ULP_TX_SC_MORE)
2399218792Snp#define F_ULP_TX_SC_MORE  V_ULP_TX_SC_MORE(1U)
2400218792Snp
2401218792Snpstruct ulptx_sge_pair {
2402218792Snp	__be32 len[2];
2403218792Snp	__be64 addr[2];
2404218792Snp};
2405218792Snp
2406218792Snpstruct ulptx_sgl {
2407218792Snp	__be32 cmd_nsge;
2408218792Snp	__be32 len0;
2409218792Snp	__be64 addr0;
2410218792Snp#if !(defined C99_NOT_SUPPORTED)
2411218792Snp	struct ulptx_sge_pair sge[0];
2412218792Snp#endif
2413218792Snp};
2414218792Snp
2415218792Snpstruct ulptx_isge {
2416218792Snp	__be32 stag;
2417218792Snp	__be32 len;
2418218792Snp	__be64 target_ofst;
2419218792Snp};
2420218792Snp
2421218792Snpstruct ulptx_isgl {
2422218792Snp	__be32 cmd_nisge;
2423218792Snp	__be32 rsvd;
2424218792Snp#if !(defined C99_NOT_SUPPORTED)
2425218792Snp	struct ulptx_isge sge[0];
2426218792Snp#endif
2427218792Snp};
2428218792Snp
2429218792Snpstruct ulptx_idata {
2430218792Snp	__be32 cmd_more;
2431218792Snp	__be32 len;
2432218792Snp};
2433218792Snp
2434218792Snp#define S_ULPTX_NSGE    0
2435218792Snp#define M_ULPTX_NSGE    0xFFFF
2436218792Snp#define V_ULPTX_NSGE(x) ((x) << S_ULPTX_NSGE)
2437218792Snp
2438218792Snpstruct ulp_mem_io {
2439218792Snp	WR_HDR;
2440218792Snp	__be32 cmd;
2441218792Snp	__be32 len16;             /* command length */
2442218792Snp	__be32 dlen;              /* data length in 32-byte units */
2443218792Snp	__be32 lock_addr;
2444218792Snp};
2445218792Snp
2446218792Snp/* additional ulp_mem_io.cmd fields */
2447218792Snp#define S_ULP_MEMIO_ORDER    23
2448218792Snp#define V_ULP_MEMIO_ORDER(x) ((x) << S_ULP_MEMIO_ORDER)
2449218792Snp#define F_ULP_MEMIO_ORDER    V_ULP_MEMIO_ORDER(1U)
2450218792Snp
2451248925Snp#define S_T5_ULP_MEMIO_IMM    23
2452248925Snp#define V_T5_ULP_MEMIO_IMM(x) ((x) << S_T5_ULP_MEMIO_IMM)
2453248925Snp#define F_T5_ULP_MEMIO_IMM    V_T5_ULP_MEMIO_IMM(1U)
2454248925Snp
2455248925Snp#define S_T5_ULP_MEMIO_ORDER    22
2456248925Snp#define V_T5_ULP_MEMIO_ORDER(x) ((x) << S_T5_ULP_MEMIO_ORDER)
2457248925Snp#define F_T5_ULP_MEMIO_ORDER    V_T5_ULP_MEMIO_ORDER(1U)
2458248925Snp
2459218792Snp/* ulp_mem_io.lock_addr fields */
2460218792Snp#define S_ULP_MEMIO_ADDR    0
2461218792Snp#define M_ULP_MEMIO_ADDR    0x7FFFFFF
2462218792Snp#define V_ULP_MEMIO_ADDR(x) ((x) << S_ULP_MEMIO_ADDR)
2463218792Snp
2464218792Snp#define S_ULP_MEMIO_LOCK    31
2465218792Snp#define V_ULP_MEMIO_LOCK(x) ((x) << S_ULP_MEMIO_LOCK)
2466218792Snp#define F_ULP_MEMIO_LOCK    V_ULP_MEMIO_LOCK(1U)
2467218792Snp
2468218792Snp/* ulp_mem_io.dlen fields */
2469218792Snp#define S_ULP_MEMIO_DATA_LEN    0
2470218792Snp#define M_ULP_MEMIO_DATA_LEN    0x1F
2471218792Snp#define V_ULP_MEMIO_DATA_LEN(x) ((x) << S_ULP_MEMIO_DATA_LEN)
2472218792Snp
2473248925Snp/* ULP_TXPKT field values */
2474248925Snpenum {
2475248925Snp	ULP_TXPKT_DEST_TP = 0,
2476248925Snp	ULP_TXPKT_DEST_SGE,
2477248925Snp	ULP_TXPKT_DEST_UP,
2478248925Snp	ULP_TXPKT_DEST_DEVNULL,
2479248925Snp};
2480248925Snp
2481218792Snpstruct ulp_txpkt {
2482218792Snp	__be32 cmd_dest;
2483218792Snp	__be32 len;
2484218792Snp};
2485218792Snp
2486218792Snp/* ulp_txpkt.cmd_dest fields */
2487218792Snp#define S_ULP_TXPKT_DEST    16
2488218792Snp#define M_ULP_TXPKT_DEST    0x3
2489218792Snp#define V_ULP_TXPKT_DEST(x) ((x) << S_ULP_TXPKT_DEST)
2490218792Snp
2491218792Snp#define S_ULP_TXPKT_FID	    4
2492218792Snp#define M_ULP_TXPKT_FID     0x7ff
2493218792Snp#define V_ULP_TXPKT_FID(x)  ((x) << S_ULP_TXPKT_FID)
2494218792Snp
2495237436Snp#define S_ULP_TXPKT_RO      3
2496237436Snp#define V_ULP_TXPKT_RO(x) ((x) << S_ULP_TXPKT_RO)
2497237436Snp#define F_ULP_TXPKT_RO V_ULP_TXPKT_RO(1U)
2498237436Snp
2499218792Snp#endif  /* T4_MSG_H */
2500