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$
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,
54237925Snp	CPL_TAG_WRITE_REQ     = 0x16,
55218792Snp	CPL_BARRIER           = 0x18,
56218792Snp	CPL_TID_RELEASE       = 0x1A,
57237925Snp	CPL_TAG_READ_REQ      = 0x1B,
58237925Snp	CPL_TX_PKT_FSO        = 0x1E,
59237925Snp	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,
71237925Snp	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,
90237925Snp	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,
103237925Snp	CPL_T5_TRACE_PKT      = 0x48,
104237925Snp	CPL_RX_ISCSI_DDP      = 0x49,
105237925Snp	CPL_RX_FCOE_DIF       = 0x4A,
106237925Snp	CPL_RX_DATA_DIF       = 0x4B,
107252495Snp	CPL_ERR_NOTIFY	      = 0x4D,
108218792Snp
109218792Snp	CPL_RDMA_READ_REQ     = 0x60,
110237925Snp	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,
122237925Snp	CPL_T5_RDMA_READ_REQ  = 0xA9,
123237925Snp	CPL_RDMA_ATOMIC_REQ   = 0xAA,
124237925Snp	CPL_RDMA_ATOMIC_RPL   = 0xAB,
125237925Snp	CPL_RDMA_IMM_DATA     = 0xAC,
126237925Snp	CPL_RDMA_IMM_DATA_SE  = 0xAD,
127218792Snp
128218792Snp	CPL_TRACE_PKT         = 0xB0,
129252495Snp	CPL_TRACE_PKT_T5      = 0x48,
130218792Snp	CPL_RX2TX_DATA        = 0xB1,
131237925Snp	CPL_ISCSI_DATA        = 0xB2,
132237925Snp	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,
164247434Snp	CPL_ERR_KEEPALV_NEG_ADVICE = 37,
165247434Snp	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))))
276218792Snp
277218792Snp/* partitioning of TID fields that also carry a queue id */
278218792Snp#define S_TID_TID    0
279218792Snp#define M_TID_TID    0x3fff
280218792Snp#define V_TID_TID(x) ((x) << S_TID_TID)
281218792Snp#define G_TID_TID(x) (((x) >> S_TID_TID) & M_TID_TID)
282218792Snp
283218792Snp#define S_TID_QID    14
284218792Snp#define M_TID_QID    0x3ff
285218792Snp#define V_TID_QID(x) ((x) << S_TID_QID)
286218792Snp#define G_TID_QID(x) (((x) >> S_TID_QID) & M_TID_QID)
287218792Snp
288218792Snpunion opcode_info {
289218792Snp	__be64 opcode_info;
290218792Snp	__u8 opcode;
291218792Snp};
292218792Snp
293218792Snpstruct tcp_options {
294218792Snp	__be16 mss;
295218792Snp	__u8 wsf;
296218792Snp#if defined(__LITTLE_ENDIAN_BITFIELD)
297218792Snp	__u8 :4;
298218792Snp	__u8 unknown:1;
299237925Snp	__u8 ecn:1;
300218792Snp	__u8 sack:1;
301218792Snp	__u8 tstamp:1;
302218792Snp#else
303218792Snp	__u8 tstamp:1;
304218792Snp	__u8 sack:1;
305237925Snp	__u8 ecn:1;
306218792Snp	__u8 unknown:1;
307218792Snp	__u8 :4;
308218792Snp#endif
309218792Snp};
310218792Snp
311218792Snpstruct rss_header {
312218792Snp	__u8 opcode;
313218792Snp#if defined(__LITTLE_ENDIAN_BITFIELD)
314218792Snp	__u8 channel:2;
315218792Snp	__u8 filter_hit:1;
316218792Snp	__u8 filter_tid:1;
317218792Snp	__u8 hash_type:2;
318218792Snp	__u8 ipv6:1;
319218792Snp	__u8 send2fw:1;
320218792Snp#else
321218792Snp	__u8 send2fw:1;
322218792Snp	__u8 ipv6:1;
323218792Snp	__u8 hash_type:2;
324218792Snp	__u8 filter_tid:1;
325218792Snp	__u8 filter_hit:1;
326218792Snp	__u8 channel:2;
327218792Snp#endif
328218792Snp	__be16 qid;
329218792Snp	__be32 hash_val;
330218792Snp};
331218792Snp
332218792Snp#define S_HASHTYPE 20
333218792Snp#define M_HASHTYPE 0x3
334218792Snp#define G_HASHTYPE(x) (((x) >> S_HASHTYPE) & M_HASHTYPE)
335218792Snp
336218792Snp#define S_QNUM 0
337218792Snp#define M_QNUM 0xFFFF
338218792Snp#define G_QNUM(x) (((x) >> S_QNUM) & M_QNUM)
339218792Snp
340218792Snp#ifndef CHELSIO_FW
341218792Snpstruct work_request_hdr {
342218792Snp	__be32 wr_hi;
343218792Snp	__be32 wr_mid;
344218792Snp	__be64 wr_lo;
345218792Snp};
346218792Snp
347218792Snp/* wr_mid fields */
348218792Snp#define S_WR_LEN16    0
349218792Snp#define M_WR_LEN16    0xFF
350218792Snp#define V_WR_LEN16(x) ((x) << S_WR_LEN16)
351218792Snp#define G_WR_LEN16(x) (((x) >> S_WR_LEN16) & M_WR_LEN16)
352218792Snp
353218792Snp/* wr_hi fields */
354218792Snp#define S_WR_OP    24
355218792Snp#define M_WR_OP    0xFF
356218792Snp#define V_WR_OP(x) ((__u64)(x) << S_WR_OP)
357218792Snp#define G_WR_OP(x) (((x) >> S_WR_OP) & M_WR_OP)
358218792Snp
359218792Snp# define WR_HDR struct work_request_hdr wr
360218792Snp# define WR_HDR_SIZE sizeof(struct work_request_hdr)
361218792Snp# define RSS_HDR
362218792Snp#else
363218792Snp# define WR_HDR
364218792Snp# define WR_HDR_SIZE 0
365218792Snp# define RSS_HDR struct rss_header rss_hdr;
366218792Snp#endif
367218792Snp
368218792Snp/* option 0 fields */
369218792Snp#define S_ACCEPT_MODE    0
370218792Snp#define M_ACCEPT_MODE    0x3
371218792Snp#define V_ACCEPT_MODE(x) ((x) << S_ACCEPT_MODE)
372218792Snp#define G_ACCEPT_MODE(x) (((x) >> S_ACCEPT_MODE) & M_ACCEPT_MODE)
373218792Snp
374218792Snp#define S_TX_CHAN    2
375218792Snp#define M_TX_CHAN    0x3
376218792Snp#define V_TX_CHAN(x) ((x) << S_TX_CHAN)
377218792Snp#define G_TX_CHAN(x) (((x) >> S_TX_CHAN) & M_TX_CHAN)
378218792Snp
379218792Snp#define S_NO_CONG    4
380218792Snp#define V_NO_CONG(x) ((x) << S_NO_CONG)
381218792Snp#define F_NO_CONG    V_NO_CONG(1U)
382218792Snp
383218792Snp#define S_DELACK    5
384218792Snp#define V_DELACK(x) ((x) << S_DELACK)
385218792Snp#define F_DELACK    V_DELACK(1U)
386218792Snp
387218792Snp#define S_INJECT_TIMER    6
388218792Snp#define V_INJECT_TIMER(x) ((x) << S_INJECT_TIMER)
389218792Snp#define F_INJECT_TIMER    V_INJECT_TIMER(1U)
390218792Snp
391218792Snp#define S_NON_OFFLOAD    7
392218792Snp#define V_NON_OFFLOAD(x) ((x) << S_NON_OFFLOAD)
393218792Snp#define F_NON_OFFLOAD    V_NON_OFFLOAD(1U)
394218792Snp
395218792Snp#define S_ULP_MODE    8
396218792Snp#define M_ULP_MODE    0xF
397218792Snp#define V_ULP_MODE(x) ((x) << S_ULP_MODE)
398218792Snp#define G_ULP_MODE(x) (((x) >> S_ULP_MODE) & M_ULP_MODE)
399218792Snp
400218792Snp#define S_RCV_BUFSIZ    12
401218792Snp#define M_RCV_BUFSIZ    0x3FFU
402218792Snp#define V_RCV_BUFSIZ(x) ((x) << S_RCV_BUFSIZ)
403218792Snp#define G_RCV_BUFSIZ(x) (((x) >> S_RCV_BUFSIZ) & M_RCV_BUFSIZ)
404218792Snp
405218792Snp#define S_DSCP    22
406218792Snp#define M_DSCP    0x3F
407218792Snp#define V_DSCP(x) ((x) << S_DSCP)
408218792Snp#define G_DSCP(x) (((x) >> S_DSCP) & M_DSCP)
409218792Snp
410218792Snp#define S_SMAC_SEL    28
411218792Snp#define M_SMAC_SEL    0xFF
412218792Snp#define V_SMAC_SEL(x) ((__u64)(x) << S_SMAC_SEL)
413218792Snp#define G_SMAC_SEL(x) (((x) >> S_SMAC_SEL) & M_SMAC_SEL)
414218792Snp
415218792Snp#define S_L2T_IDX    36
416218792Snp#define M_L2T_IDX    0xFFF
417218792Snp#define V_L2T_IDX(x) ((__u64)(x) << S_L2T_IDX)
418218792Snp#define G_L2T_IDX(x) (((x) >> S_L2T_IDX) & M_L2T_IDX)
419218792Snp
420218792Snp#define S_TCAM_BYPASS    48
421218792Snp#define V_TCAM_BYPASS(x) ((__u64)(x) << S_TCAM_BYPASS)
422218792Snp#define F_TCAM_BYPASS    V_TCAM_BYPASS(1ULL)
423218792Snp
424218792Snp#define S_NAGLE    49
425218792Snp#define V_NAGLE(x) ((__u64)(x) << S_NAGLE)
426218792Snp#define F_NAGLE    V_NAGLE(1ULL)
427218792Snp
428218792Snp#define S_WND_SCALE    50
429218792Snp#define M_WND_SCALE    0xF
430218792Snp#define V_WND_SCALE(x) ((__u64)(x) << S_WND_SCALE)
431218792Snp#define G_WND_SCALE(x) (((x) >> S_WND_SCALE) & M_WND_SCALE)
432218792Snp
433218792Snp#define S_KEEP_ALIVE    54
434218792Snp#define V_KEEP_ALIVE(x) ((__u64)(x) << S_KEEP_ALIVE)
435218792Snp#define F_KEEP_ALIVE    V_KEEP_ALIVE(1ULL)
436218792Snp
437218792Snp#define S_MAX_RT    55
438218792Snp#define M_MAX_RT    0xF
439218792Snp#define V_MAX_RT(x) ((__u64)(x) << S_MAX_RT)
440218792Snp#define G_MAX_RT(x) (((x) >> S_MAX_RT) & M_MAX_RT)
441218792Snp
442218792Snp#define S_MAX_RT_OVERRIDE    59
443218792Snp#define V_MAX_RT_OVERRIDE(x) ((__u64)(x) << S_MAX_RT_OVERRIDE)
444218792Snp#define F_MAX_RT_OVERRIDE    V_MAX_RT_OVERRIDE(1ULL)
445218792Snp
446218792Snp#define S_MSS_IDX    60
447218792Snp#define M_MSS_IDX    0xF
448218792Snp#define V_MSS_IDX(x) ((__u64)(x) << S_MSS_IDX)
449218792Snp#define G_MSS_IDX(x) (((x) >> S_MSS_IDX) & M_MSS_IDX)
450218792Snp
451218792Snp/* option 1 fields */
452218792Snp#define S_SYN_RSS_ENABLE    0
453218792Snp#define V_SYN_RSS_ENABLE(x) ((x) << S_SYN_RSS_ENABLE)
454218792Snp#define F_SYN_RSS_ENABLE    V_SYN_RSS_ENABLE(1U)
455218792Snp
456218792Snp#define S_SYN_RSS_USE_HASH    1
457218792Snp#define V_SYN_RSS_USE_HASH(x) ((x) << S_SYN_RSS_USE_HASH)
458218792Snp#define F_SYN_RSS_USE_HASH    V_SYN_RSS_USE_HASH(1U)
459218792Snp
460218792Snp#define S_SYN_RSS_QUEUE    2
461218792Snp#define M_SYN_RSS_QUEUE    0x3FF
462218792Snp#define V_SYN_RSS_QUEUE(x) ((x) << S_SYN_RSS_QUEUE)
463218792Snp#define G_SYN_RSS_QUEUE(x) (((x) >> S_SYN_RSS_QUEUE) & M_SYN_RSS_QUEUE)
464218792Snp
465218792Snp#define S_LISTEN_INTF    12
466218792Snp#define M_LISTEN_INTF    0xFF
467218792Snp#define V_LISTEN_INTF(x) ((x) << S_LISTEN_INTF)
468218792Snp#define G_LISTEN_INTF(x) (((x) >> S_LISTEN_INTF) & M_LISTEN_INTF)
469218792Snp
470218792Snp#define S_LISTEN_FILTER    20
471218792Snp#define V_LISTEN_FILTER(x) ((x) << S_LISTEN_FILTER)
472218792Snp#define F_LISTEN_FILTER    V_LISTEN_FILTER(1U)
473218792Snp
474218792Snp#define S_SYN_DEFENSE    21
475218792Snp#define V_SYN_DEFENSE(x) ((x) << S_SYN_DEFENSE)
476218792Snp#define F_SYN_DEFENSE    V_SYN_DEFENSE(1U)
477218792Snp
478218792Snp#define S_CONN_POLICY    22
479218792Snp#define M_CONN_POLICY    0x3
480218792Snp#define V_CONN_POLICY(x) ((x) << S_CONN_POLICY)
481218792Snp#define G_CONN_POLICY(x) (((x) >> S_CONN_POLICY) & M_CONN_POLICY)
482218792Snp
483252495Snp#define S_FILT_INFO    28
484252495Snp#define M_FILT_INFO    0xfffffffffULL
485252495Snp#define V_FILT_INFO(x) ((x) << S_FILT_INFO)
486252495Snp#define G_FILT_INFO(x) (((x) >> S_FILT_INFO) & M_FILT_INFO)
487252495Snp
488218792Snp/* option 2 fields */
489218792Snp#define S_RSS_QUEUE    0
490218792Snp#define M_RSS_QUEUE    0x3FF
491218792Snp#define V_RSS_QUEUE(x) ((x) << S_RSS_QUEUE)
492218792Snp#define G_RSS_QUEUE(x) (((x) >> S_RSS_QUEUE) & M_RSS_QUEUE)
493218792Snp
494218792Snp#define S_RSS_QUEUE_VALID    10
495218792Snp#define V_RSS_QUEUE_VALID(x) ((x) << S_RSS_QUEUE_VALID)
496218792Snp#define F_RSS_QUEUE_VALID    V_RSS_QUEUE_VALID(1U)
497218792Snp
498218792Snp#define S_RX_COALESCE_VALID    11
499218792Snp#define V_RX_COALESCE_VALID(x) ((x) << S_RX_COALESCE_VALID)
500218792Snp#define F_RX_COALESCE_VALID    V_RX_COALESCE_VALID(1U)
501218792Snp
502218792Snp#define S_RX_COALESCE    12
503218792Snp#define M_RX_COALESCE    0x3
504218792Snp#define V_RX_COALESCE(x) ((x) << S_RX_COALESCE)
505218792Snp#define G_RX_COALESCE(x) (((x) >> S_RX_COALESCE) & M_RX_COALESCE)
506218792Snp
507218792Snp#define S_CONG_CNTRL    14
508218792Snp#define M_CONG_CNTRL    0x3
509218792Snp#define V_CONG_CNTRL(x) ((x) << S_CONG_CNTRL)
510218792Snp#define G_CONG_CNTRL(x) (((x) >> S_CONG_CNTRL) & M_CONG_CNTRL)
511218792Snp
512218792Snp#define S_PACE    16
513218792Snp#define M_PACE    0x3
514218792Snp#define V_PACE(x) ((x) << S_PACE)
515218792Snp#define G_PACE(x) (((x) >> S_PACE) & M_PACE)
516218792Snp
517218792Snp#define S_CONG_CNTRL_VALID    18
518218792Snp#define V_CONG_CNTRL_VALID(x) ((x) << S_CONG_CNTRL_VALID)
519218792Snp#define F_CONG_CNTRL_VALID    V_CONG_CNTRL_VALID(1U)
520218792Snp
521218792Snp#define S_PACE_VALID    19
522218792Snp#define V_PACE_VALID(x) ((x) << S_PACE_VALID)
523218792Snp#define F_PACE_VALID    V_PACE_VALID(1U)
524218792Snp
525218792Snp#define S_RX_FC_DISABLE    20
526218792Snp#define V_RX_FC_DISABLE(x) ((x) << S_RX_FC_DISABLE)
527218792Snp#define F_RX_FC_DISABLE    V_RX_FC_DISABLE(1U)
528218792Snp
529218792Snp#define S_RX_FC_DDP    21
530218792Snp#define V_RX_FC_DDP(x) ((x) << S_RX_FC_DDP)
531218792Snp#define F_RX_FC_DDP    V_RX_FC_DDP(1U)
532218792Snp
533218792Snp#define S_RX_FC_VALID    22
534218792Snp#define V_RX_FC_VALID(x) ((x) << S_RX_FC_VALID)
535218792Snp#define F_RX_FC_VALID    V_RX_FC_VALID(1U)
536218792Snp
537218792Snp#define S_TX_QUEUE    23
538218792Snp#define M_TX_QUEUE    0x7
539218792Snp#define V_TX_QUEUE(x) ((x) << S_TX_QUEUE)
540218792Snp#define G_TX_QUEUE(x) (((x) >> S_TX_QUEUE) & M_TX_QUEUE)
541218792Snp
542218792Snp#define S_RX_CHANNEL    26
543218792Snp#define V_RX_CHANNEL(x) ((x) << S_RX_CHANNEL)
544218792Snp#define F_RX_CHANNEL    V_RX_CHANNEL(1U)
545218792Snp
546218792Snp#define S_CCTRL_ECN    27
547218792Snp#define V_CCTRL_ECN(x) ((x) << S_CCTRL_ECN)
548218792Snp#define F_CCTRL_ECN    V_CCTRL_ECN(1U)
549218792Snp
550218792Snp#define S_WND_SCALE_EN    28
551218792Snp#define V_WND_SCALE_EN(x) ((x) << S_WND_SCALE_EN)
552218792Snp#define F_WND_SCALE_EN    V_WND_SCALE_EN(1U)
553218792Snp
554218792Snp#define S_TSTAMPS_EN    29
555218792Snp#define V_TSTAMPS_EN(x) ((x) << S_TSTAMPS_EN)
556218792Snp#define F_TSTAMPS_EN    V_TSTAMPS_EN(1U)
557218792Snp
558218792Snp#define S_SACK_EN    30
559218792Snp#define V_SACK_EN(x) ((x) << S_SACK_EN)
560218792Snp#define F_SACK_EN    V_SACK_EN(1U)
561218792Snp
562252495Snp#define S_T5_OPT_2_VALID    31
563252495Snp#define V_T5_OPT_2_VALID(x) ((x) << S_T5_OPT_2_VALID)
564252495Snp#define F_T5_OPT_2_VALID    V_T5_OPT_2_VALID(1U)
565252495Snp
566218792Snpstruct cpl_pass_open_req {
567218792Snp	WR_HDR;
568218792Snp	union opcode_tid ot;
569218792Snp	__be16 local_port;
570218792Snp	__be16 peer_port;
571218792Snp	__be32 local_ip;
572218792Snp	__be32 peer_ip;
573218792Snp	__be64 opt0;
574218792Snp	__be64 opt1;
575218792Snp};
576218792Snp
577218792Snpstruct cpl_pass_open_req6 {
578218792Snp	WR_HDR;
579218792Snp	union opcode_tid ot;
580218792Snp	__be16 local_port;
581218792Snp	__be16 peer_port;
582218792Snp	__be64 local_ip_hi;
583218792Snp	__be64 local_ip_lo;
584218792Snp	__be64 peer_ip_hi;
585218792Snp	__be64 peer_ip_lo;
586218792Snp	__be64 opt0;
587218792Snp	__be64 opt1;
588218792Snp};
589218792Snp
590218792Snpstruct cpl_pass_open_rpl {
591218792Snp	RSS_HDR
592218792Snp	union opcode_tid ot;
593218792Snp	__u8 rsvd[3];
594218792Snp	__u8 status;
595218792Snp};
596218792Snp
597218792Snpstruct cpl_pass_establish {
598218792Snp	RSS_HDR
599218792Snp	union opcode_tid ot;
600218792Snp	__be32 rsvd;
601218792Snp	__be32 tos_stid;
602218792Snp	__be16 mac_idx;
603218792Snp	__be16 tcp_opt;
604218792Snp	__be32 snd_isn;
605218792Snp	__be32 rcv_isn;
606218792Snp};
607218792Snp
608218792Snp/* cpl_pass_establish.tos_stid fields */
609218792Snp#define S_PASS_OPEN_TID    0
610218792Snp#define M_PASS_OPEN_TID    0xFFFFFF
611218792Snp#define V_PASS_OPEN_TID(x) ((x) << S_PASS_OPEN_TID)
612218792Snp#define G_PASS_OPEN_TID(x) (((x) >> S_PASS_OPEN_TID) & M_PASS_OPEN_TID)
613218792Snp
614218792Snp#define S_PASS_OPEN_TOS    24
615218792Snp#define M_PASS_OPEN_TOS    0xFF
616218792Snp#define V_PASS_OPEN_TOS(x) ((x) << S_PASS_OPEN_TOS)
617218792Snp#define G_PASS_OPEN_TOS(x) (((x) >> S_PASS_OPEN_TOS) & M_PASS_OPEN_TOS)
618218792Snp
619218792Snp/* cpl_pass_establish.tcp_opt fields (also applies to act_open_establish) */
620218792Snp#define G_TCPOPT_WSCALE_OK(x)  (((x) >> 5) & 1)
621218792Snp#define G_TCPOPT_SACK(x)       (((x) >> 6) & 1)
622218792Snp#define G_TCPOPT_TSTAMP(x)     (((x) >> 7) & 1)
623218792Snp#define G_TCPOPT_SND_WSCALE(x) (((x) >> 8) & 0xf)
624218792Snp#define G_TCPOPT_MSS(x)        (((x) >> 12) & 0xf)
625218792Snp
626218792Snpstruct cpl_pass_accept_req {
627218792Snp	RSS_HDR
628218792Snp	union opcode_tid ot;
629218792Snp	__be16 rsvd;
630218792Snp	__be16 len;
631218792Snp	__be32 hdr_len;
632218792Snp	__be16 vlan;
633218792Snp	__be16 l2info;
634218792Snp	__be32 tos_stid;
635218792Snp	struct tcp_options tcpopt;
636218792Snp};
637218792Snp
638218792Snp/* cpl_pass_accept_req.hdr_len fields */
639218792Snp#define S_SYN_RX_CHAN    0
640218792Snp#define M_SYN_RX_CHAN    0xF
641218792Snp#define V_SYN_RX_CHAN(x) ((x) << S_SYN_RX_CHAN)
642218792Snp#define G_SYN_RX_CHAN(x) (((x) >> S_SYN_RX_CHAN) & M_SYN_RX_CHAN)
643218792Snp
644218792Snp#define S_TCP_HDR_LEN    10
645218792Snp#define M_TCP_HDR_LEN    0x3F
646218792Snp#define V_TCP_HDR_LEN(x) ((x) << S_TCP_HDR_LEN)
647218792Snp#define G_TCP_HDR_LEN(x) (((x) >> S_TCP_HDR_LEN) & M_TCP_HDR_LEN)
648218792Snp
649218792Snp#define S_IP_HDR_LEN    16
650218792Snp#define M_IP_HDR_LEN    0x3FF
651218792Snp#define V_IP_HDR_LEN(x) ((x) << S_IP_HDR_LEN)
652218792Snp#define G_IP_HDR_LEN(x) (((x) >> S_IP_HDR_LEN) & M_IP_HDR_LEN)
653218792Snp
654218792Snp#define S_ETH_HDR_LEN    26
655237925Snp#define M_ETH_HDR_LEN    0x3F
656218792Snp#define V_ETH_HDR_LEN(x) ((x) << S_ETH_HDR_LEN)
657218792Snp#define G_ETH_HDR_LEN(x) (((x) >> S_ETH_HDR_LEN) & M_ETH_HDR_LEN)
658218792Snp
659218792Snp/* cpl_pass_accept_req.l2info fields */
660218792Snp#define S_SYN_MAC_IDX    0
661218792Snp#define M_SYN_MAC_IDX    0x1FF
662218792Snp#define V_SYN_MAC_IDX(x) ((x) << S_SYN_MAC_IDX)
663218792Snp#define G_SYN_MAC_IDX(x) (((x) >> S_SYN_MAC_IDX) & M_SYN_MAC_IDX)
664218792Snp
665218792Snp#define S_SYN_XACT_MATCH    9
666218792Snp#define V_SYN_XACT_MATCH(x) ((x) << S_SYN_XACT_MATCH)
667218792Snp#define F_SYN_XACT_MATCH    V_SYN_XACT_MATCH(1U)
668218792Snp
669218792Snp#define S_SYN_INTF    12
670218792Snp#define M_SYN_INTF    0xF
671218792Snp#define V_SYN_INTF(x) ((x) << S_SYN_INTF)
672218792Snp#define G_SYN_INTF(x) (((x) >> S_SYN_INTF) & M_SYN_INTF)
673218792Snp
674218792Snpstruct cpl_pass_accept_rpl {
675218792Snp	WR_HDR;
676218792Snp	union opcode_tid ot;
677218792Snp	__be32 opt2;
678218792Snp	__be64 opt0;
679218792Snp};
680218792Snp
681252814Snpstruct cpl_t5_pass_accept_rpl {
682252814Snp	WR_HDR;
683252814Snp	union opcode_tid ot;
684252814Snp	__be32 opt2;
685252814Snp	__be64 opt0;
686252814Snp	__be32 iss;
687252814Snp	__be32 rsvd;
688252814Snp};
689252814Snp
690218792Snpstruct cpl_act_open_req {
691218792Snp	WR_HDR;
692218792Snp	union opcode_tid ot;
693218792Snp	__be16 local_port;
694218792Snp	__be16 peer_port;
695218792Snp	__be32 local_ip;
696218792Snp	__be32 peer_ip;
697218792Snp	__be64 opt0;
698218792Snp	__be32 params;
699218792Snp	__be32 opt2;
700218792Snp};
701218792Snp
702252495Snp#define S_FILTER_TUPLE	24
703252495Snp#define M_FILTER_TUPLE	0xFFFFFFFFFF
704252495Snp#define V_FILTER_TUPLE(x) ((x) << S_FILTER_TUPLE)
705252495Snp#define G_FILTER_TUPLE(x) (((x) >> S_FILTER_TUPLE) & M_FILTER_TUPLE)
706237925Snpstruct cpl_t5_act_open_req {
707237925Snp	WR_HDR;
708237925Snp	union opcode_tid ot;
709237925Snp	__be16 local_port;
710237925Snp	__be16 peer_port;
711237925Snp	__be32 local_ip;
712237925Snp	__be32 peer_ip;
713237925Snp	__be64 opt0;
714252814Snp	__be32 iss;
715237925Snp	__be32 opt2;
716237925Snp	__be64 params;
717237925Snp};
718218792Snp
719218792Snpstruct cpl_act_open_req6 {
720218792Snp	WR_HDR;
721218792Snp	union opcode_tid ot;
722218792Snp	__be16 local_port;
723218792Snp	__be16 peer_port;
724218792Snp	__be64 local_ip_hi;
725218792Snp	__be64 local_ip_lo;
726218792Snp	__be64 peer_ip_hi;
727218792Snp	__be64 peer_ip_lo;
728218792Snp	__be64 opt0;
729218792Snp	__be32 params;
730218792Snp	__be32 opt2;
731218792Snp};
732218792Snp
733237925Snpstruct cpl_t5_act_open_req6 {
734237925Snp	WR_HDR;
735237925Snp	union opcode_tid ot;
736237925Snp	__be16 local_port;
737237925Snp	__be16 peer_port;
738237925Snp	__be64 local_ip_hi;
739237925Snp	__be64 local_ip_lo;
740237925Snp	__be64 peer_ip_hi;
741237925Snp	__be64 peer_ip_lo;
742237925Snp	__be64 opt0;
743252814Snp	__be32 iss;
744237925Snp	__be32 opt2;
745237925Snp	__be64 params;
746237925Snp};
747237925Snp
748218792Snpstruct cpl_act_open_rpl {
749218792Snp	RSS_HDR
750218792Snp	union opcode_tid ot;
751218792Snp	__be32 atid_status;
752218792Snp};
753218792Snp
754218792Snp/* cpl_act_open_rpl.atid_status fields */
755218792Snp#define S_AOPEN_STATUS    0
756218792Snp#define M_AOPEN_STATUS    0xFF
757218792Snp#define V_AOPEN_STATUS(x) ((x) << S_AOPEN_STATUS)
758218792Snp#define G_AOPEN_STATUS(x) (((x) >> S_AOPEN_STATUS) & M_AOPEN_STATUS)
759218792Snp
760218792Snp#define S_AOPEN_ATID    8
761218792Snp#define M_AOPEN_ATID    0xFFFFFF
762218792Snp#define V_AOPEN_ATID(x) ((x) << S_AOPEN_ATID)
763218792Snp#define G_AOPEN_ATID(x) (((x) >> S_AOPEN_ATID) & M_AOPEN_ATID)
764218792Snp
765218792Snpstruct cpl_act_establish {
766218792Snp	RSS_HDR
767218792Snp	union opcode_tid ot;
768218792Snp	__be32 rsvd;
769218792Snp	__be32 tos_atid;
770218792Snp	__be16 mac_idx;
771218792Snp	__be16 tcp_opt;
772218792Snp	__be32 snd_isn;
773218792Snp	__be32 rcv_isn;
774218792Snp};
775218792Snp
776218792Snpstruct cpl_get_tcb {
777218792Snp	WR_HDR;
778218792Snp	union opcode_tid ot;
779218792Snp	__be16 reply_ctrl;
780218792Snp	__be16 cookie;
781218792Snp};
782218792Snp
783218792Snp/* cpl_get_tcb.reply_ctrl fields */
784218792Snp#define S_QUEUENO    0
785218792Snp#define M_QUEUENO    0x3FF
786218792Snp#define V_QUEUENO(x) ((x) << S_QUEUENO)
787218792Snp#define G_QUEUENO(x) (((x) >> S_QUEUENO) & M_QUEUENO)
788218792Snp
789218792Snp#define S_REPLY_CHAN    14
790218792Snp#define V_REPLY_CHAN(x) ((x) << S_REPLY_CHAN)
791218792Snp#define F_REPLY_CHAN    V_REPLY_CHAN(1U)
792218792Snp
793218792Snp#define S_NO_REPLY    15
794218792Snp#define V_NO_REPLY(x) ((x) << S_NO_REPLY)
795218792Snp#define F_NO_REPLY    V_NO_REPLY(1U)
796218792Snp
797218792Snpstruct cpl_get_tcb_rpl {
798218792Snp	RSS_HDR
799218792Snp	union opcode_tid ot;
800218792Snp	__u8 cookie;
801218792Snp	__u8 status;
802218792Snp	__be16 len;
803218792Snp};
804218792Snp
805218792Snpstruct cpl_set_tcb {
806218792Snp	WR_HDR;
807218792Snp	union opcode_tid ot;
808218792Snp	__be16 reply_ctrl;
809218792Snp	__be16 cookie;
810218792Snp};
811218792Snp
812218792Snpstruct cpl_set_tcb_field {
813218792Snp	WR_HDR;
814218792Snp	union opcode_tid ot;
815218792Snp	__be16 reply_ctrl;
816218792Snp	__be16 word_cookie;
817218792Snp	__be64 mask;
818218792Snp	__be64 val;
819218792Snp};
820218792Snp
821240169Snpstruct cpl_set_tcb_field_core {
822240169Snp	union opcode_tid ot;
823240169Snp	__be16 reply_ctrl;
824240169Snp	__be16 word_cookie;
825240169Snp	__be64 mask;
826240169Snp	__be64 val;
827240169Snp};
828240169Snp
829218792Snp/* cpl_set_tcb_field.word_cookie fields */
830218792Snp#define S_WORD    0
831218792Snp#define M_WORD    0x1F
832218792Snp#define V_WORD(x) ((x) << S_WORD)
833218792Snp#define G_WORD(x) (((x) >> S_WORD) & M_WORD)
834218792Snp
835218792Snp#define S_COOKIE    5
836218792Snp#define M_COOKIE    0x7
837218792Snp#define V_COOKIE(x) ((x) << S_COOKIE)
838218792Snp#define G_COOKIE(x) (((x) >> S_COOKIE) & M_COOKIE)
839218792Snp
840218792Snpstruct cpl_set_tcb_rpl {
841218792Snp	RSS_HDR
842218792Snp	union opcode_tid ot;
843218792Snp	__be16 rsvd;
844218792Snp	__u8   cookie;
845218792Snp	__u8   status;
846218792Snp	__be64 oldval;
847218792Snp};
848218792Snp
849218792Snpstruct cpl_close_con_req {
850218792Snp	WR_HDR;
851218792Snp	union opcode_tid ot;
852218792Snp	__be32 rsvd;
853218792Snp};
854218792Snp
855218792Snpstruct cpl_close_con_rpl {
856218792Snp	RSS_HDR
857218792Snp	union opcode_tid ot;
858218792Snp	__u8  rsvd[3];
859218792Snp	__u8  status;
860218792Snp	__be32 snd_nxt;
861218792Snp	__be32 rcv_nxt;
862218792Snp};
863218792Snp
864218792Snpstruct cpl_close_listsvr_req {
865218792Snp	WR_HDR;
866218792Snp	union opcode_tid ot;
867218792Snp	__be16 reply_ctrl;
868218792Snp	__be16 rsvd;
869218792Snp};
870218792Snp
871218792Snp/* additional cpl_close_listsvr_req.reply_ctrl field */
872218792Snp#define S_LISTSVR_IPV6    14
873218792Snp#define V_LISTSVR_IPV6(x) ((x) << S_LISTSVR_IPV6)
874218792Snp#define F_LISTSVR_IPV6    V_LISTSVR_IPV6(1U)
875218792Snp
876218792Snpstruct cpl_close_listsvr_rpl {
877218792Snp	RSS_HDR
878218792Snp	union opcode_tid ot;
879218792Snp	__u8 rsvd[3];
880218792Snp	__u8 status;
881218792Snp};
882218792Snp
883218792Snpstruct cpl_abort_req_rss {
884218792Snp	RSS_HDR
885218792Snp	union opcode_tid ot;
886218792Snp	__u8  rsvd[3];
887218792Snp	__u8  status;
888218792Snp};
889218792Snp
890218792Snpstruct cpl_abort_req {
891218792Snp	WR_HDR;
892218792Snp	union opcode_tid ot;
893218792Snp	__be32 rsvd0;
894218792Snp	__u8  rsvd1;
895218792Snp	__u8  cmd;
896218792Snp	__u8  rsvd2[6];
897218792Snp};
898218792Snp
899218792Snpstruct cpl_abort_rpl_rss {
900218792Snp	RSS_HDR
901218792Snp	union opcode_tid ot;
902218792Snp	__u8  rsvd[3];
903218792Snp	__u8  status;
904218792Snp};
905218792Snp
906218792Snpstruct cpl_abort_rpl {
907218792Snp	WR_HDR;
908218792Snp	union opcode_tid ot;
909218792Snp	__be32 rsvd0;
910218792Snp	__u8  rsvd1;
911218792Snp	__u8  cmd;
912218792Snp	__u8  rsvd2[6];
913218792Snp};
914218792Snp
915218792Snpstruct cpl_peer_close {
916218792Snp	RSS_HDR
917218792Snp	union opcode_tid ot;
918218792Snp	__be32 rcv_nxt;
919218792Snp};
920218792Snp
921218792Snpstruct cpl_tid_release {
922218792Snp	WR_HDR;
923218792Snp	union opcode_tid ot;
924218792Snp	__be32 rsvd;
925218792Snp};
926218792Snp
927218792Snpstruct tx_data_wr {
928218792Snp	__be32 wr_hi;
929218792Snp	__be32 wr_lo;
930218792Snp	__be32 len;
931218792Snp	__be32 flags;
932218792Snp	__be32 sndseq;
933218792Snp	__be32 param;
934218792Snp};
935218792Snp
936218792Snp/* tx_data_wr.flags fields */
937218792Snp#define S_TX_ACK_PAGES    21
938218792Snp#define M_TX_ACK_PAGES    0x7
939218792Snp#define V_TX_ACK_PAGES(x) ((x) << S_TX_ACK_PAGES)
940218792Snp#define G_TX_ACK_PAGES(x) (((x) >> S_TX_ACK_PAGES) & M_TX_ACK_PAGES)
941218792Snp
942218792Snp/* tx_data_wr.param fields */
943218792Snp#define S_TX_PORT    0
944218792Snp#define M_TX_PORT    0x7
945218792Snp#define V_TX_PORT(x) ((x) << S_TX_PORT)
946218792Snp#define G_TX_PORT(x) (((x) >> S_TX_PORT) & M_TX_PORT)
947218792Snp
948218792Snp#define S_TX_MSS    4
949218792Snp#define M_TX_MSS    0xF
950218792Snp#define V_TX_MSS(x) ((x) << S_TX_MSS)
951218792Snp#define G_TX_MSS(x) (((x) >> S_TX_MSS) & M_TX_MSS)
952218792Snp
953218792Snp#define S_TX_QOS    8
954218792Snp#define M_TX_QOS    0xFF
955218792Snp#define V_TX_QOS(x) ((x) << S_TX_QOS)
956218792Snp#define G_TX_QOS(x) (((x) >> S_TX_QOS) & M_TX_QOS)
957218792Snp
958218792Snp#define S_TX_SNDBUF 16
959218792Snp#define M_TX_SNDBUF 0xFFFF
960218792Snp#define V_TX_SNDBUF(x) ((x) << S_TX_SNDBUF)
961218792Snp#define G_TX_SNDBUF(x) (((x) >> S_TX_SNDBUF) & M_TX_SNDBUF)
962218792Snp
963218792Snpstruct cpl_tx_data {
964218792Snp	union opcode_tid ot;
965218792Snp	__be32 len;
966218792Snp	__be32 rsvd;
967218792Snp	__be32 flags;
968218792Snp};
969218792Snp
970218792Snp/* cpl_tx_data.flags fields */
971218792Snp#define S_TX_PROXY    5
972218792Snp#define V_TX_PROXY(x) ((x) << S_TX_PROXY)
973218792Snp#define F_TX_PROXY    V_TX_PROXY(1U)
974218792Snp
975218792Snp#define S_TX_ULP_SUBMODE    6
976218792Snp#define M_TX_ULP_SUBMODE    0xF
977218792Snp#define V_TX_ULP_SUBMODE(x) ((x) << S_TX_ULP_SUBMODE)
978218792Snp#define G_TX_ULP_SUBMODE(x) (((x) >> S_TX_ULP_SUBMODE) & M_TX_ULP_SUBMODE)
979218792Snp
980218792Snp#define S_TX_ULP_MODE    10
981218792Snp#define M_TX_ULP_MODE    0xF
982218792Snp#define V_TX_ULP_MODE(x) ((x) << S_TX_ULP_MODE)
983218792Snp#define G_TX_ULP_MODE(x) (((x) >> S_TX_ULP_MODE) & M_TX_ULP_MODE)
984218792Snp
985218792Snp#define S_TX_SHOVE    14
986218792Snp#define V_TX_SHOVE(x) ((x) << S_TX_SHOVE)
987218792Snp#define F_TX_SHOVE    V_TX_SHOVE(1U)
988218792Snp
989218792Snp#define S_TX_MORE    15
990218792Snp#define V_TX_MORE(x) ((x) << S_TX_MORE)
991218792Snp#define F_TX_MORE    V_TX_MORE(1U)
992218792Snp
993218792Snp#define S_TX_URG    16
994218792Snp#define V_TX_URG(x) ((x) << S_TX_URG)
995218792Snp#define F_TX_URG    V_TX_URG(1U)
996218792Snp
997218792Snp#define S_TX_FLUSH    17
998218792Snp#define V_TX_FLUSH(x) ((x) << S_TX_FLUSH)
999218792Snp#define F_TX_FLUSH    V_TX_FLUSH(1U)
1000218792Snp
1001218792Snp#define S_TX_SAVE    18
1002218792Snp#define V_TX_SAVE(x) ((x) << S_TX_SAVE)
1003218792Snp#define F_TX_SAVE    V_TX_SAVE(1U)
1004218792Snp
1005218792Snp#define S_TX_TNL    19
1006218792Snp#define V_TX_TNL(x) ((x) << S_TX_TNL)
1007218792Snp#define F_TX_TNL    V_TX_TNL(1U)
1008218792Snp
1009218792Snp/* additional tx_data_wr.flags fields */
1010218792Snp#define S_TX_CPU_IDX    0
1011218792Snp#define M_TX_CPU_IDX    0x3F
1012218792Snp#define V_TX_CPU_IDX(x) ((x) << S_TX_CPU_IDX)
1013218792Snp#define G_TX_CPU_IDX(x) (((x) >> S_TX_CPU_IDX) & M_TX_CPU_IDX)
1014218792Snp
1015218792Snp#define S_TX_CLOSE    17
1016218792Snp#define V_TX_CLOSE(x) ((x) << S_TX_CLOSE)
1017218792Snp#define F_TX_CLOSE    V_TX_CLOSE(1U)
1018218792Snp
1019218792Snp#define S_TX_INIT    18
1020218792Snp#define V_TX_INIT(x) ((x) << S_TX_INIT)
1021218792Snp#define F_TX_INIT    V_TX_INIT(1U)
1022218792Snp
1023218792Snp#define S_TX_IMM_ACK    19
1024218792Snp#define V_TX_IMM_ACK(x) ((x) << S_TX_IMM_ACK)
1025218792Snp#define F_TX_IMM_ACK    V_TX_IMM_ACK(1U)
1026218792Snp
1027218792Snp#define S_TX_IMM_DMA    20
1028218792Snp#define V_TX_IMM_DMA(x) ((x) << S_TX_IMM_DMA)
1029218792Snp#define F_TX_IMM_DMA    V_TX_IMM_DMA(1U)
1030218792Snp
1031218792Snpstruct cpl_tx_data_ack {
1032218792Snp	RSS_HDR
1033218792Snp	union opcode_tid ot;
1034218792Snp	__be32 snd_una;
1035218792Snp};
1036218792Snp
1037218792Snpstruct cpl_wr_ack {  /* XXX */
1038218792Snp	RSS_HDR
1039218792Snp	union opcode_tid ot;
1040218792Snp	__be16 credits;
1041218792Snp	__be16 rsvd;
1042218792Snp	__be32 snd_nxt;
1043218792Snp	__be32 snd_una;
1044218792Snp};
1045218792Snp
1046218792Snpstruct cpl_tx_pkt_core {
1047218792Snp	__be32 ctrl0;
1048218792Snp	__be16 pack;
1049218792Snp	__be16 len;
1050218792Snp	__be64 ctrl1;
1051218792Snp};
1052218792Snp
1053218792Snpstruct cpl_tx_pkt {
1054218792Snp	WR_HDR;
1055218792Snp	struct cpl_tx_pkt_core c;
1056218792Snp};
1057218792Snp
1058218792Snp#define cpl_tx_pkt_xt cpl_tx_pkt
1059218792Snp
1060218792Snp/* cpl_tx_pkt_core.ctrl0 fields */
1061218792Snp#define S_TXPKT_VF    0
1062218792Snp#define M_TXPKT_VF    0xFF
1063218792Snp#define V_TXPKT_VF(x) ((x) << S_TXPKT_VF)
1064218792Snp#define G_TXPKT_VF(x) (((x) >> S_TXPKT_VF) & M_TXPKT_VF)
1065218792Snp
1066218792Snp#define S_TXPKT_PF    8
1067218792Snp#define M_TXPKT_PF    0x7
1068218792Snp#define V_TXPKT_PF(x) ((x) << S_TXPKT_PF)
1069218792Snp#define G_TXPKT_PF(x) (((x) >> S_TXPKT_PF) & M_TXPKT_PF)
1070218792Snp
1071218792Snp#define S_TXPKT_VF_VLD    11
1072218792Snp#define V_TXPKT_VF_VLD(x) ((x) << S_TXPKT_VF_VLD)
1073218792Snp#define F_TXPKT_VF_VLD    V_TXPKT_VF_VLD(1U)
1074218792Snp
1075218792Snp#define S_TXPKT_OVLAN_IDX    12
1076218792Snp#define M_TXPKT_OVLAN_IDX    0xF
1077218792Snp#define V_TXPKT_OVLAN_IDX(x) ((x) << S_TXPKT_OVLAN_IDX)
1078218792Snp#define G_TXPKT_OVLAN_IDX(x) (((x) >> S_TXPKT_OVLAN_IDX) & M_TXPKT_OVLAN_IDX)
1079218792Snp
1080252495Snp#define S_TXPKT_T5_OVLAN_IDX    12
1081252495Snp#define M_TXPKT_T5_OVLAN_IDX    0x7
1082252495Snp#define V_TXPKT_T5_OVLAN_IDX(x) ((x) << S_TXPKT_T5_OVLAN_IDX)
1083252495Snp#define G_TXPKT_T5_OVLAN_IDX(x) (((x) >> S_TXPKT_T5_OVLAN_IDX) & \
1084252495Snp				M_TXPKT_T5_OVLAN_IDX)
1085252495Snp
1086218792Snp#define S_TXPKT_INTF    16
1087218792Snp#define M_TXPKT_INTF    0xF
1088218792Snp#define V_TXPKT_INTF(x) ((x) << S_TXPKT_INTF)
1089218792Snp#define G_TXPKT_INTF(x) (((x) >> S_TXPKT_INTF) & M_TXPKT_INTF)
1090218792Snp
1091218792Snp#define S_TXPKT_SPECIAL_STAT    20
1092218792Snp#define V_TXPKT_SPECIAL_STAT(x) ((x) << S_TXPKT_SPECIAL_STAT)
1093218792Snp#define F_TXPKT_SPECIAL_STAT    V_TXPKT_SPECIAL_STAT(1U)
1094218792Snp
1095252495Snp#define S_TXPKT_T5_FCS_DIS    21
1096252495Snp#define V_TXPKT_T5_FCS_DIS(x) ((x) << S_TXPKT_T5_FCS_DIS)
1097252495Snp#define F_TXPKT_T5_FCS_DIS    V_TXPKT_T5_FCS_DIS(1U)
1098252495Snp
1099218792Snp#define S_TXPKT_INS_OVLAN    21
1100218792Snp#define V_TXPKT_INS_OVLAN(x) ((x) << S_TXPKT_INS_OVLAN)
1101218792Snp#define F_TXPKT_INS_OVLAN    V_TXPKT_INS_OVLAN(1U)
1102218792Snp
1103252495Snp#define S_TXPKT_T5_INS_OVLAN    15
1104252495Snp#define V_TXPKT_T5_INS_OVLAN(x) ((x) << S_TXPKT_T5_INS_OVLAN)
1105252495Snp#define F_TXPKT_T5_INS_OVLAN    V_TXPKT_T5_INS_OVLAN(1U)
1106252495Snp
1107218792Snp#define S_TXPKT_STAT_DIS    22
1108218792Snp#define V_TXPKT_STAT_DIS(x) ((x) << S_TXPKT_STAT_DIS)
1109218792Snp#define F_TXPKT_STAT_DIS    V_TXPKT_STAT_DIS(1U)
1110218792Snp
1111218792Snp#define S_TXPKT_LOOPBACK    23
1112218792Snp#define V_TXPKT_LOOPBACK(x) ((x) << S_TXPKT_LOOPBACK)
1113218792Snp#define F_TXPKT_LOOPBACK    V_TXPKT_LOOPBACK(1U)
1114218792Snp
1115237925Snp#define S_TXPKT_TSTAMP    23
1116237925Snp#define V_TXPKT_TSTAMP(x) ((x) << S_TXPKT_TSTAMP)
1117237925Snp#define F_TXPKT_TSTAMP    V_TXPKT_TSTAMP(1U)
1118237925Snp
1119218792Snp#define S_TXPKT_OPCODE    24
1120218792Snp#define M_TXPKT_OPCODE    0xFF
1121218792Snp#define V_TXPKT_OPCODE(x) ((x) << S_TXPKT_OPCODE)
1122218792Snp#define G_TXPKT_OPCODE(x) (((x) >> S_TXPKT_OPCODE) & M_TXPKT_OPCODE)
1123218792Snp
1124218792Snp/* cpl_tx_pkt_core.ctrl1 fields */
1125218792Snp#define S_TXPKT_SA_IDX    0
1126218792Snp#define M_TXPKT_SA_IDX    0xFFF
1127218792Snp#define V_TXPKT_SA_IDX(x) ((x) << S_TXPKT_SA_IDX)
1128218792Snp#define G_TXPKT_SA_IDX(x) (((x) >> S_TXPKT_SA_IDX) & M_TXPKT_SA_IDX)
1129218792Snp
1130218792Snp#define S_TXPKT_CSUM_END    12
1131218792Snp#define M_TXPKT_CSUM_END    0xFF
1132218792Snp#define V_TXPKT_CSUM_END(x) ((x) << S_TXPKT_CSUM_END)
1133218792Snp#define G_TXPKT_CSUM_END(x) (((x) >> S_TXPKT_CSUM_END) & M_TXPKT_CSUM_END)
1134218792Snp
1135218792Snp#define S_TXPKT_CSUM_START    20
1136218792Snp#define M_TXPKT_CSUM_START    0x3FF
1137218792Snp#define V_TXPKT_CSUM_START(x) ((x) << S_TXPKT_CSUM_START)
1138218792Snp#define G_TXPKT_CSUM_START(x) (((x) >> S_TXPKT_CSUM_START) & M_TXPKT_CSUM_START)
1139218792Snp
1140218792Snp#define S_TXPKT_IPHDR_LEN    20
1141218792Snp#define M_TXPKT_IPHDR_LEN    0x3FFF
1142218792Snp#define V_TXPKT_IPHDR_LEN(x) ((__u64)(x) << S_TXPKT_IPHDR_LEN)
1143218792Snp#define G_TXPKT_IPHDR_LEN(x) (((x) >> S_TXPKT_IPHDR_LEN) & M_TXPKT_IPHDR_LEN)
1144218792Snp
1145218792Snp#define S_TXPKT_CSUM_LOC    30
1146218792Snp#define M_TXPKT_CSUM_LOC    0x3FF
1147218792Snp#define V_TXPKT_CSUM_LOC(x) ((__u64)(x) << S_TXPKT_CSUM_LOC)
1148218792Snp#define G_TXPKT_CSUM_LOC(x) (((x) >> S_TXPKT_CSUM_LOC) & M_TXPKT_CSUM_LOC)
1149218792Snp
1150218792Snp#define S_TXPKT_ETHHDR_LEN    34
1151218792Snp#define M_TXPKT_ETHHDR_LEN    0x3F
1152218792Snp#define V_TXPKT_ETHHDR_LEN(x) ((__u64)(x) << S_TXPKT_ETHHDR_LEN)
1153218792Snp#define G_TXPKT_ETHHDR_LEN(x) (((x) >> S_TXPKT_ETHHDR_LEN) & M_TXPKT_ETHHDR_LEN)
1154218792Snp
1155218792Snp#define S_TXPKT_CSUM_TYPE    40
1156218792Snp#define M_TXPKT_CSUM_TYPE    0xF
1157218792Snp#define V_TXPKT_CSUM_TYPE(x) ((__u64)(x) << S_TXPKT_CSUM_TYPE)
1158218792Snp#define G_TXPKT_CSUM_TYPE(x) (((x) >> S_TXPKT_CSUM_TYPE) & M_TXPKT_CSUM_TYPE)
1159218792Snp
1160218792Snp#define S_TXPKT_VLAN    44
1161218792Snp#define M_TXPKT_VLAN    0xFFFF
1162218792Snp#define V_TXPKT_VLAN(x) ((__u64)(x) << S_TXPKT_VLAN)
1163218792Snp#define G_TXPKT_VLAN(x) (((x) >> S_TXPKT_VLAN) & M_TXPKT_VLAN)
1164218792Snp
1165218792Snp#define S_TXPKT_VLAN_VLD    60
1166218792Snp#define V_TXPKT_VLAN_VLD(x) ((__u64)(x) << S_TXPKT_VLAN_VLD)
1167218792Snp#define F_TXPKT_VLAN_VLD    V_TXPKT_VLAN_VLD(1ULL)
1168218792Snp
1169218792Snp#define S_TXPKT_IPSEC    61
1170218792Snp#define V_TXPKT_IPSEC(x) ((__u64)(x) << S_TXPKT_IPSEC)
1171218792Snp#define F_TXPKT_IPSEC    V_TXPKT_IPSEC(1ULL)
1172218792Snp
1173218792Snp#define S_TXPKT_IPCSUM_DIS    62
1174218792Snp#define V_TXPKT_IPCSUM_DIS(x) ((__u64)(x) << S_TXPKT_IPCSUM_DIS)
1175218792Snp#define F_TXPKT_IPCSUM_DIS    V_TXPKT_IPCSUM_DIS(1ULL)
1176218792Snp
1177218792Snp#define S_TXPKT_L4CSUM_DIS    63
1178218792Snp#define V_TXPKT_L4CSUM_DIS(x) ((__u64)(x) << S_TXPKT_L4CSUM_DIS)
1179218792Snp#define F_TXPKT_L4CSUM_DIS    V_TXPKT_L4CSUM_DIS(1ULL)
1180218792Snp
1181237925Snpstruct cpl_tx_pkt_lso_core {
1182218792Snp	__be32 lso_ctrl;
1183218792Snp	__be16 ipid_ofst;
1184218792Snp	__be16 mss;
1185218792Snp	__be32 seqno_offset;
1186218792Snp	__be32 len;
1187218792Snp	/* encapsulated CPL (TX_PKT, TX_PKT_XT or TX_DATA) follows here */
1188218792Snp};
1189218792Snp
1190237925Snpstruct cpl_tx_pkt_lso {
1191237925Snp	WR_HDR;
1192237925Snp	struct cpl_tx_pkt_lso_core c;
1193237925Snp	/* encapsulated CPL (TX_PKT, TX_PKT_XT or TX_DATA) follows here */
1194237925Snp};
1195237925Snp
1196237925Snpstruct cpl_tx_pkt_ufo_core {
1197237925Snp	__be16 ethlen;
1198237925Snp	__be16 iplen;
1199237925Snp	__be16 udplen;
1200237925Snp	__be16 mss;
1201237925Snp	__be32 len;
1202237925Snp	__be32 r1;
1203237925Snp	/* encapsulated CPL (TX_PKT, TX_PKT_XT or TX_DATA) follows here */
1204237925Snp};
1205237925Snp
1206237925Snpstruct cpl_tx_pkt_ufo {
1207237925Snp	WR_HDR;
1208237925Snp	struct cpl_tx_pkt_ufo_core c;
1209237925Snp	/* encapsulated CPL (TX_PKT, TX_PKT_XT or TX_DATA) follows here */
1210237925Snp};
1211237925Snp
1212237925Snp/* cpl_tx_pkt_lso_core.lso_ctrl fields */
1213218792Snp#define S_LSO_TCPHDR_LEN    0
1214218792Snp#define M_LSO_TCPHDR_LEN    0xF
1215218792Snp#define V_LSO_TCPHDR_LEN(x) ((x) << S_LSO_TCPHDR_LEN)
1216218792Snp#define G_LSO_TCPHDR_LEN(x) (((x) >> S_LSO_TCPHDR_LEN) & M_LSO_TCPHDR_LEN)
1217218792Snp
1218218792Snp#define S_LSO_IPHDR_LEN    4
1219218792Snp#define M_LSO_IPHDR_LEN    0xFFF
1220218792Snp#define V_LSO_IPHDR_LEN(x) ((x) << S_LSO_IPHDR_LEN)
1221218792Snp#define G_LSO_IPHDR_LEN(x) (((x) >> S_LSO_IPHDR_LEN) & M_LSO_IPHDR_LEN)
1222218792Snp
1223218792Snp#define S_LSO_ETHHDR_LEN    16
1224218792Snp#define M_LSO_ETHHDR_LEN    0xF
1225218792Snp#define V_LSO_ETHHDR_LEN(x) ((x) << S_LSO_ETHHDR_LEN)
1226218792Snp#define G_LSO_ETHHDR_LEN(x) (((x) >> S_LSO_ETHHDR_LEN) & M_LSO_ETHHDR_LEN)
1227218792Snp
1228218792Snp#define S_LSO_IPV6    20
1229218792Snp#define V_LSO_IPV6(x) ((x) << S_LSO_IPV6)
1230218792Snp#define F_LSO_IPV6    V_LSO_IPV6(1U)
1231218792Snp
1232218792Snp#define S_LSO_OFLD_ENCAP    21
1233218792Snp#define V_LSO_OFLD_ENCAP(x) ((x) << S_LSO_OFLD_ENCAP)
1234218792Snp#define F_LSO_OFLD_ENCAP    V_LSO_OFLD_ENCAP(1U)
1235218792Snp
1236218792Snp#define S_LSO_LAST_SLICE    22
1237218792Snp#define V_LSO_LAST_SLICE(x) ((x) << S_LSO_LAST_SLICE)
1238218792Snp#define F_LSO_LAST_SLICE    V_LSO_LAST_SLICE(1U)
1239218792Snp
1240218792Snp#define S_LSO_FIRST_SLICE    23
1241218792Snp#define V_LSO_FIRST_SLICE(x) ((x) << S_LSO_FIRST_SLICE)
1242218792Snp#define F_LSO_FIRST_SLICE    V_LSO_FIRST_SLICE(1U)
1243218792Snp
1244218792Snp#define S_LSO_OPCODE    24
1245218792Snp#define M_LSO_OPCODE    0xFF
1246218792Snp#define V_LSO_OPCODE(x) ((x) << S_LSO_OPCODE)
1247218792Snp#define G_LSO_OPCODE(x) (((x) >> S_LSO_OPCODE) & M_LSO_OPCODE)
1248218792Snp
1249252495Snp#define S_LSO_T5_XFER_SIZE	   0
1250252495Snp#define M_LSO_T5_XFER_SIZE    0xFFFFFFF
1251252495Snp#define V_LSO_T5_XFER_SIZE(x) ((x) << S_LSO_T5_XFER_SIZE)
1252252495Snp#define G_LSO_T5_XFER_SIZE(x) (((x) >> S_LSO_T5_XFER_SIZE) & M_LSO_T5_XFER_SIZE)
1253252495Snp
1254237925Snp/* cpl_tx_pkt_lso_core.mss fields */
1255218792Snp#define S_LSO_MSS    0
1256218792Snp#define M_LSO_MSS    0x3FFF
1257218792Snp#define V_LSO_MSS(x) ((x) << S_LSO_MSS)
1258218792Snp#define G_LSO_MSS(x) (((x) >> S_LSO_MSS) & M_LSO_MSS)
1259218792Snp
1260218792Snp#define S_LSO_IPID_SPLIT    15
1261218792Snp#define V_LSO_IPID_SPLIT(x) ((x) << S_LSO_IPID_SPLIT)
1262218792Snp#define F_LSO_IPID_SPLIT    V_LSO_IPID_SPLIT(1U)
1263218792Snp
1264237925Snpstruct cpl_tx_pkt_fso {
1265237925Snp	WR_HDR;
1266237925Snp	__be32 fso_ctrl;
1267237925Snp	__be16 seqcnt_ofst;
1268237925Snp	__be16 mtu;
1269237925Snp	__be32 param_offset;
1270218792Snp	__be32 len;
1271237925Snp	/* encapsulated CPL (TX_PKT or TX_PKT_XT) follows here */
1272218792Snp};
1273218792Snp
1274237925Snp/* cpl_tx_pkt_fso.fso_ctrl fields different from cpl_tx_pkt_lso.lso_ctrl */
1275237925Snp#define S_FSO_XCHG_CLASS    21
1276237925Snp#define V_FSO_XCHG_CLASS(x) ((x) << S_FSO_XCHG_CLASS)
1277237925Snp#define F_FSO_XCHG_CLASS    V_FSO_XCHG_CLASS(1U)
1278218792Snp
1279237925Snp#define S_FSO_INITIATOR    20
1280237925Snp#define V_FSO_INITIATOR(x) ((x) << S_FSO_INITIATOR)
1281237925Snp#define F_FSO_INITIATOR    V_FSO_INITIATOR(1U)
1282218792Snp
1283237925Snp#define S_FSO_FCHDR_LEN    12
1284237925Snp#define M_FSO_FCHDR_LEN    0xF
1285237925Snp#define V_FSO_FCHDR_LEN(x) ((x) << S_FSO_FCHDR_LEN)
1286237925Snp#define G_FSO_FCHDR_LEN(x) (((x) >> S_FSO_FCHDR_LEN) & M_FSO_FCHDR_LEN)
1287237925Snp
1288218792Snpstruct cpl_iscsi_hdr_no_rss {
1289218792Snp	union opcode_tid ot;
1290218792Snp	__be16 pdu_len_ddp;
1291218792Snp	__be16 len;
1292218792Snp	__be32 seq;
1293218792Snp	__be16 urg;
1294218792Snp	__u8 rsvd;
1295218792Snp	__u8 status;
1296218792Snp};
1297218792Snp
1298237925Snpstruct cpl_tx_data_iso {
1299237925Snp	WR_HDR;
1300237925Snp	__be32 iso_ctrl;
1301237925Snp	__u8   rsvd;
1302237925Snp	__u8   ahs_len;
1303237925Snp	__be16 mss;
1304237925Snp	__be32 burst_size;
1305237925Snp	__be32 len;
1306237925Snp	/* encapsulated CPL_TX_DATA follows here */
1307237925Snp};
1308237925Snp
1309237925Snp/* cpl_tx_data_iso.iso_ctrl fields different from cpl_tx_pkt_lso.lso_ctrl */
1310237925Snp#define S_ISO_CPLHDR_LEN    18
1311237925Snp#define M_ISO_CPLHDR_LEN    0xF
1312237925Snp#define V_ISO_CPLHDR_LEN(x) ((x) << S_ISO_CPLHDR_LEN)
1313237925Snp#define G_ISO_CPLHDR_LEN(x) (((x) >> S_ISO_CPLHDR_LEN) & M_ISO_CPLHDR_LEN)
1314237925Snp
1315237925Snp#define S_ISO_HDR_CRC    17
1316237925Snp#define V_ISO_HDR_CRC(x) ((x) << S_ISO_HDR_CRC)
1317237925Snp#define F_ISO_HDR_CRC    V_ISO_HDR_CRC(1U)
1318237925Snp
1319237925Snp#define S_ISO_DATA_CRC    16
1320237925Snp#define V_ISO_DATA_CRC(x) ((x) << S_ISO_DATA_CRC)
1321237925Snp#define F_ISO_DATA_CRC    V_ISO_DATA_CRC(1U)
1322237925Snp
1323237925Snp#define S_ISO_IMD_DATA_EN    15
1324237925Snp#define V_ISO_IMD_DATA_EN(x) ((x) << S_ISO_IMD_DATA_EN)
1325237925Snp#define F_ISO_IMD_DATA_EN    V_ISO_IMD_DATA_EN(1U)
1326237925Snp
1327237925Snp#define S_ISO_PDU_TYPE    13
1328237925Snp#define M_ISO_PDU_TYPE    0x3
1329237925Snp#define V_ISO_PDU_TYPE(x) ((x) << S_ISO_PDU_TYPE)
1330237925Snp#define G_ISO_PDU_TYPE(x) (((x) >> S_ISO_PDU_TYPE) & M_ISO_PDU_TYPE)
1331237925Snp
1332218792Snpstruct cpl_iscsi_hdr {
1333218792Snp	RSS_HDR
1334218792Snp	union opcode_tid ot;
1335218792Snp	__be16 pdu_len_ddp;
1336218792Snp	__be16 len;
1337218792Snp	__be32 seq;
1338218792Snp	__be16 urg;
1339218792Snp	__u8 rsvd;
1340218792Snp	__u8 status;
1341218792Snp};
1342218792Snp
1343218792Snp/* cpl_iscsi_hdr.pdu_len_ddp fields */
1344218792Snp#define S_ISCSI_PDU_LEN    0
1345218792Snp#define M_ISCSI_PDU_LEN    0x7FFF
1346218792Snp#define V_ISCSI_PDU_LEN(x) ((x) << S_ISCSI_PDU_LEN)
1347218792Snp#define G_ISCSI_PDU_LEN(x) (((x) >> S_ISCSI_PDU_LEN) & M_ISCSI_PDU_LEN)
1348218792Snp
1349218792Snp#define S_ISCSI_DDP    15
1350218792Snp#define V_ISCSI_DDP(x) ((x) << S_ISCSI_DDP)
1351218792Snp#define F_ISCSI_DDP    V_ISCSI_DDP(1U)
1352218792Snp
1353237925Snpstruct cpl_iscsi_data {
1354237925Snp	RSS_HDR
1355237925Snp	union opcode_tid ot;
1356237925Snp	__u8 rsvd0[2];
1357237925Snp	__be16 len;
1358237925Snp	__be32 seq;
1359237925Snp	__be16 urg;
1360237925Snp	__u8 rsvd1;
1361237925Snp	__u8 status;
1362237925Snp};
1363237925Snp
1364218792Snpstruct cpl_rx_data {
1365218792Snp	RSS_HDR
1366218792Snp	union opcode_tid ot;
1367218792Snp	__be16 rsvd;
1368218792Snp	__be16 len;
1369218792Snp	__be32 seq;
1370218792Snp	__be16 urg;
1371218792Snp#if defined(__LITTLE_ENDIAN_BITFIELD)
1372218792Snp	__u8 dack_mode:2;
1373218792Snp	__u8 psh:1;
1374218792Snp	__u8 heartbeat:1;
1375218792Snp	__u8 ddp_off:1;
1376218792Snp	__u8 :3;
1377218792Snp#else
1378218792Snp	__u8 :3;
1379218792Snp	__u8 ddp_off:1;
1380218792Snp	__u8 heartbeat:1;
1381218792Snp	__u8 psh:1;
1382218792Snp	__u8 dack_mode:2;
1383218792Snp#endif
1384218792Snp	__u8 status;
1385218792Snp};
1386218792Snp
1387218792Snpstruct cpl_fcoe_hdr {
1388218792Snp	RSS_HDR
1389218792Snp	union opcode_tid ot;
1390218792Snp	__be16 oxid;
1391218792Snp	__be16 len;
1392218792Snp	__be32 rctl_fctl;
1393218792Snp	__u8 cs_ctl;
1394218792Snp	__u8 df_ctl;
1395218792Snp	__u8 sof;
1396218792Snp	__u8 eof;
1397218792Snp	__be16 seq_cnt;
1398218792Snp	__u8 seq_id;
1399218792Snp	__u8 type;
1400218792Snp	__be32 param;
1401218792Snp};
1402218792Snp
1403237925Snpstruct cpl_fcoe_data {
1404237925Snp	RSS_HDR
1405237925Snp	union opcode_tid ot;
1406237925Snp	__u8 rsvd0[2];
1407237925Snp	__be16 len;
1408237925Snp	__be32 seq;
1409237925Snp	__u8 rsvd1[3];
1410237925Snp	__u8 status;
1411237925Snp};
1412237925Snp
1413218792Snpstruct cpl_rx_urg_notify {
1414218792Snp	RSS_HDR
1415218792Snp	union opcode_tid ot;
1416218792Snp	__be32 seq;
1417218792Snp};
1418218792Snp
1419218792Snpstruct cpl_rx_urg_pkt {
1420218792Snp	RSS_HDR
1421218792Snp	union opcode_tid ot;
1422218792Snp	__be16 rsvd;
1423218792Snp	__be16 len;
1424218792Snp};
1425218792Snp
1426218792Snpstruct cpl_rx_data_ack {
1427218792Snp	WR_HDR;
1428218792Snp	union opcode_tid ot;
1429218792Snp	__be32 credit_dack;
1430218792Snp};
1431218792Snp
1432240169Snpstruct cpl_rx_data_ack_core {
1433240169Snp	union opcode_tid ot;
1434240169Snp	__be32 credit_dack;
1435240169Snp};
1436240169Snp
1437218792Snp/* cpl_rx_data_ack.ack_seq fields */
1438218792Snp#define S_RX_CREDITS    0
1439218792Snp#define M_RX_CREDITS    0x3FFFFFF
1440218792Snp#define V_RX_CREDITS(x) ((x) << S_RX_CREDITS)
1441218792Snp#define G_RX_CREDITS(x) (((x) >> S_RX_CREDITS) & M_RX_CREDITS)
1442218792Snp
1443218792Snp#define S_RX_MODULATE_TX    26
1444218792Snp#define V_RX_MODULATE_TX(x) ((x) << S_RX_MODULATE_TX)
1445218792Snp#define F_RX_MODULATE_TX    V_RX_MODULATE_TX(1U)
1446218792Snp
1447218792Snp#define S_RX_MODULATE_RX    27
1448218792Snp#define V_RX_MODULATE_RX(x) ((x) << S_RX_MODULATE_RX)
1449218792Snp#define F_RX_MODULATE_RX    V_RX_MODULATE_RX(1U)
1450218792Snp
1451218792Snp#define S_RX_FORCE_ACK    28
1452218792Snp#define V_RX_FORCE_ACK(x) ((x) << S_RX_FORCE_ACK)
1453218792Snp#define F_RX_FORCE_ACK    V_RX_FORCE_ACK(1U)
1454218792Snp
1455218792Snp#define S_RX_DACK_MODE    29
1456218792Snp#define M_RX_DACK_MODE    0x3
1457218792Snp#define V_RX_DACK_MODE(x) ((x) << S_RX_DACK_MODE)
1458218792Snp#define G_RX_DACK_MODE(x) (((x) >> S_RX_DACK_MODE) & M_RX_DACK_MODE)
1459218792Snp
1460218792Snp#define S_RX_DACK_CHANGE    31
1461218792Snp#define V_RX_DACK_CHANGE(x) ((x) << S_RX_DACK_CHANGE)
1462218792Snp#define F_RX_DACK_CHANGE    V_RX_DACK_CHANGE(1U)
1463218792Snp
1464218792Snpstruct cpl_rx_ddp_complete {
1465218792Snp	RSS_HDR
1466218792Snp	union opcode_tid ot;
1467218792Snp	__be32 ddp_report;
1468218792Snp	__be32 rcv_nxt;
1469218792Snp	__be32 rsvd;
1470218792Snp};
1471218792Snp
1472218792Snpstruct cpl_rx_data_ddp {
1473218792Snp	RSS_HDR
1474218792Snp	union opcode_tid ot;
1475218792Snp	__be16 urg;
1476218792Snp	__be16 len;
1477218792Snp	__be32 seq;
1478218792Snp	union {
1479218792Snp		__be32 nxt_seq;
1480218792Snp		__be32 ddp_report;
1481218792Snp	} u;
1482218792Snp	__be32 ulp_crc;
1483218792Snp	__be32 ddpvld;
1484218792Snp};
1485218792Snp
1486237925Snp#define cpl_rx_iscsi_ddp cpl_rx_data_ddp
1487237925Snp
1488218792Snpstruct cpl_rx_fcoe_ddp {
1489218792Snp	RSS_HDR
1490218792Snp	union opcode_tid ot;
1491218792Snp	__be16 rsvd;
1492218792Snp	__be16 len;
1493218792Snp	__be32 seq;
1494218792Snp	__be32 ddp_report;
1495218792Snp	__be32 ulp_crc;
1496218792Snp	__be32 ddpvld;
1497218792Snp};
1498218792Snp
1499237925Snpstruct cpl_rx_data_dif {
1500237925Snp	RSS_HDR
1501237925Snp	union opcode_tid ot;
1502237925Snp	__be16 ddp_len;
1503237925Snp	__be16 msg_len;
1504237925Snp	__be32 seq;
1505237925Snp	union {
1506237925Snp		__be32 nxt_seq;
1507237925Snp		__be32 ddp_report;
1508237925Snp	} u;
1509237925Snp	__be32 err_vec;
1510237925Snp	__be32 ddpvld;
1511237925Snp};
1512237925Snp
1513237925Snpstruct cpl_rx_iscsi_dif {
1514237925Snp	RSS_HDR
1515237925Snp	union opcode_tid ot;
1516237925Snp	__be16 ddp_len;
1517237925Snp	__be16 msg_len;
1518237925Snp	__be32 seq;
1519237925Snp	union {
1520237925Snp		__be32 nxt_seq;
1521237925Snp		__be32 ddp_report;
1522237925Snp	} u;
1523237925Snp	__be32 ulp_crc;
1524237925Snp	__be32 ddpvld;
1525237925Snp	__u8 rsvd0[8];
1526237925Snp	__be32 err_vec;
1527237925Snp	__u8 rsvd1[4];
1528237925Snp};
1529237925Snp
1530237925Snpstruct cpl_rx_fcoe_dif {
1531237925Snp	RSS_HDR
1532237925Snp	union opcode_tid ot;
1533237925Snp	__be16 ddp_len;
1534237925Snp	__be16 msg_len;
1535237925Snp	__be32 seq;
1536237925Snp	__be32 ddp_report;
1537237925Snp	__be32 err_vec;
1538237925Snp	__be32 ddpvld;
1539237925Snp};
1540237925Snp
1541237925Snp/* cpl_rx_{data,iscsi,fcoe}_{ddp,dif}.ddpvld fields */
1542218792Snp#define S_DDP_VALID    15
1543218792Snp#define M_DDP_VALID    0x1FFFF
1544218792Snp#define V_DDP_VALID(x) ((x) << S_DDP_VALID)
1545218792Snp#define G_DDP_VALID(x) (((x) >> S_DDP_VALID) & M_DDP_VALID)
1546218792Snp
1547218792Snp#define S_DDP_PPOD_MISMATCH    15
1548218792Snp#define V_DDP_PPOD_MISMATCH(x) ((x) << S_DDP_PPOD_MISMATCH)
1549218792Snp#define F_DDP_PPOD_MISMATCH    V_DDP_PPOD_MISMATCH(1U)
1550218792Snp
1551218792Snp#define S_DDP_PDU    16
1552218792Snp#define V_DDP_PDU(x) ((x) << S_DDP_PDU)
1553218792Snp#define F_DDP_PDU    V_DDP_PDU(1U)
1554218792Snp
1555218792Snp#define S_DDP_LLIMIT_ERR    17
1556218792Snp#define V_DDP_LLIMIT_ERR(x) ((x) << S_DDP_LLIMIT_ERR)
1557218792Snp#define F_DDP_LLIMIT_ERR    V_DDP_LLIMIT_ERR(1U)
1558218792Snp
1559218792Snp#define S_DDP_PPOD_PARITY_ERR    18
1560218792Snp#define V_DDP_PPOD_PARITY_ERR(x) ((x) << S_DDP_PPOD_PARITY_ERR)
1561218792Snp#define F_DDP_PPOD_PARITY_ERR    V_DDP_PPOD_PARITY_ERR(1U)
1562218792Snp
1563218792Snp#define S_DDP_PADDING_ERR    19
1564218792Snp#define V_DDP_PADDING_ERR(x) ((x) << S_DDP_PADDING_ERR)
1565218792Snp#define F_DDP_PADDING_ERR    V_DDP_PADDING_ERR(1U)
1566218792Snp
1567218792Snp#define S_DDP_HDRCRC_ERR    20
1568218792Snp#define V_DDP_HDRCRC_ERR(x) ((x) << S_DDP_HDRCRC_ERR)
1569218792Snp#define F_DDP_HDRCRC_ERR    V_DDP_HDRCRC_ERR(1U)
1570218792Snp
1571218792Snp#define S_DDP_DATACRC_ERR    21
1572218792Snp#define V_DDP_DATACRC_ERR(x) ((x) << S_DDP_DATACRC_ERR)
1573218792Snp#define F_DDP_DATACRC_ERR    V_DDP_DATACRC_ERR(1U)
1574218792Snp
1575218792Snp#define S_DDP_INVALID_TAG    22
1576218792Snp#define V_DDP_INVALID_TAG(x) ((x) << S_DDP_INVALID_TAG)
1577218792Snp#define F_DDP_INVALID_TAG    V_DDP_INVALID_TAG(1U)
1578218792Snp
1579218792Snp#define S_DDP_ULIMIT_ERR    23
1580218792Snp#define V_DDP_ULIMIT_ERR(x) ((x) << S_DDP_ULIMIT_ERR)
1581218792Snp#define F_DDP_ULIMIT_ERR    V_DDP_ULIMIT_ERR(1U)
1582218792Snp
1583218792Snp#define S_DDP_OFFSET_ERR    24
1584218792Snp#define V_DDP_OFFSET_ERR(x) ((x) << S_DDP_OFFSET_ERR)
1585218792Snp#define F_DDP_OFFSET_ERR    V_DDP_OFFSET_ERR(1U)
1586218792Snp
1587218792Snp#define S_DDP_COLOR_ERR    25
1588218792Snp#define V_DDP_COLOR_ERR(x) ((x) << S_DDP_COLOR_ERR)
1589218792Snp#define F_DDP_COLOR_ERR    V_DDP_COLOR_ERR(1U)
1590218792Snp
1591218792Snp#define S_DDP_TID_MISMATCH    26
1592218792Snp#define V_DDP_TID_MISMATCH(x) ((x) << S_DDP_TID_MISMATCH)
1593218792Snp#define F_DDP_TID_MISMATCH    V_DDP_TID_MISMATCH(1U)
1594218792Snp
1595218792Snp#define S_DDP_INVALID_PPOD    27
1596218792Snp#define V_DDP_INVALID_PPOD(x) ((x) << S_DDP_INVALID_PPOD)
1597218792Snp#define F_DDP_INVALID_PPOD    V_DDP_INVALID_PPOD(1U)
1598218792Snp
1599218792Snp#define S_DDP_ULP_MODE    28
1600218792Snp#define M_DDP_ULP_MODE    0xF
1601218792Snp#define V_DDP_ULP_MODE(x) ((x) << S_DDP_ULP_MODE)
1602218792Snp#define G_DDP_ULP_MODE(x) (((x) >> S_DDP_ULP_MODE) & M_DDP_ULP_MODE)
1603218792Snp
1604237925Snp/* cpl_rx_{data,iscsi,fcoe}_{ddp,dif}.ddp_report fields */
1605218792Snp#define S_DDP_OFFSET    0
1606218792Snp#define M_DDP_OFFSET    0xFFFFFF
1607218792Snp#define V_DDP_OFFSET(x) ((x) << S_DDP_OFFSET)
1608218792Snp#define G_DDP_OFFSET(x) (((x) >> S_DDP_OFFSET) & M_DDP_OFFSET)
1609218792Snp
1610218792Snp#define S_DDP_DACK_MODE    24
1611218792Snp#define M_DDP_DACK_MODE    0x3
1612218792Snp#define V_DDP_DACK_MODE(x) ((x) << S_DDP_DACK_MODE)
1613218792Snp#define G_DDP_DACK_MODE(x) (((x) >> S_DDP_DACK_MODE) & M_DDP_DACK_MODE)
1614218792Snp
1615218792Snp#define S_DDP_BUF_IDX    26
1616218792Snp#define V_DDP_BUF_IDX(x) ((x) << S_DDP_BUF_IDX)
1617218792Snp#define F_DDP_BUF_IDX    V_DDP_BUF_IDX(1U)
1618218792Snp
1619218792Snp#define S_DDP_URG    27
1620218792Snp#define V_DDP_URG(x) ((x) << S_DDP_URG)
1621218792Snp#define F_DDP_URG    V_DDP_URG(1U)
1622218792Snp
1623218792Snp#define S_DDP_PSH    28
1624218792Snp#define V_DDP_PSH(x) ((x) << S_DDP_PSH)
1625218792Snp#define F_DDP_PSH    V_DDP_PSH(1U)
1626218792Snp
1627218792Snp#define S_DDP_BUF_COMPLETE    29
1628218792Snp#define V_DDP_BUF_COMPLETE(x) ((x) << S_DDP_BUF_COMPLETE)
1629218792Snp#define F_DDP_BUF_COMPLETE    V_DDP_BUF_COMPLETE(1U)
1630218792Snp
1631218792Snp#define S_DDP_BUF_TIMED_OUT    30
1632218792Snp#define V_DDP_BUF_TIMED_OUT(x) ((x) << S_DDP_BUF_TIMED_OUT)
1633218792Snp#define F_DDP_BUF_TIMED_OUT    V_DDP_BUF_TIMED_OUT(1U)
1634218792Snp
1635218792Snp#define S_DDP_INV    31
1636218792Snp#define V_DDP_INV(x) ((x) << S_DDP_INV)
1637218792Snp#define F_DDP_INV    V_DDP_INV(1U)
1638218792Snp
1639218792Snpstruct cpl_rx_pkt {
1640218792Snp	RSS_HDR
1641218792Snp	__u8 opcode;
1642218792Snp#if defined(__LITTLE_ENDIAN_BITFIELD)
1643218792Snp	__u8 iff:4;
1644218792Snp	__u8 csum_calc:1;
1645218792Snp	__u8 ipmi_pkt:1;
1646218792Snp	__u8 vlan_ex:1;
1647218792Snp	__u8 ip_frag:1;
1648218792Snp#else
1649218792Snp	__u8 ip_frag:1;
1650218792Snp	__u8 vlan_ex:1;
1651218792Snp	__u8 ipmi_pkt:1;
1652218792Snp	__u8 csum_calc:1;
1653218792Snp	__u8 iff:4;
1654218792Snp#endif
1655218792Snp	__be16 csum;
1656218792Snp	__be16 vlan;
1657218792Snp	__be16 len;
1658218792Snp	__be32 l2info;
1659218792Snp	__be16 hdr_len;
1660218792Snp	__be16 err_vec;
1661218792Snp};
1662218792Snp
1663218792Snp/* rx_pkt.l2info fields */
1664218792Snp#define S_RX_ETHHDR_LEN    0
1665218792Snp#define M_RX_ETHHDR_LEN    0x1F
1666218792Snp#define V_RX_ETHHDR_LEN(x) ((x) << S_RX_ETHHDR_LEN)
1667218792Snp#define G_RX_ETHHDR_LEN(x) (((x) >> S_RX_ETHHDR_LEN) & M_RX_ETHHDR_LEN)
1668218792Snp
1669237925Snp#define S_RX_T5_ETHHDR_LEN    0
1670237925Snp#define M_RX_T5_ETHHDR_LEN    0x3F
1671237925Snp#define V_RX_T5_ETHHDR_LEN(x) ((x) << S_RX_T5_ETHHDR_LEN)
1672237925Snp#define G_RX_T5_ETHHDR_LEN(x) (((x) >> S_RX_T5_ETHHDR_LEN) & M_RX_T5_ETHHDR_LEN)
1673237925Snp
1674218792Snp#define S_RX_PKTYPE    5
1675218792Snp#define M_RX_PKTYPE    0x7
1676218792Snp#define V_RX_PKTYPE(x) ((x) << S_RX_PKTYPE)
1677218792Snp#define G_RX_PKTYPE(x) (((x) >> S_RX_PKTYPE) & M_RX_PKTYPE)
1678218792Snp
1679237925Snp#define S_RX_T5_DATYPE    6
1680237925Snp#define M_RX_T5_DATYPE    0x3
1681237925Snp#define V_RX_T5_DATYPE(x) ((x) << S_RX_T5_DATYPE)
1682237925Snp#define G_RX_T5_DATYPE(x) (((x) >> S_RX_T5_DATYPE) & M_RX_T5_DATYPE)
1683237925Snp
1684218792Snp#define S_RX_MACIDX    8
1685218792Snp#define M_RX_MACIDX    0x1FF
1686218792Snp#define V_RX_MACIDX(x) ((x) << S_RX_MACIDX)
1687218792Snp#define G_RX_MACIDX(x) (((x) >> S_RX_MACIDX) & M_RX_MACIDX)
1688218792Snp
1689237925Snp#define S_RX_T5_PKTYPE    17
1690237925Snp#define M_RX_T5_PKTYPE    0x7
1691237925Snp#define V_RX_T5_PKTYPE(x) ((x) << S_RX_T5_PKTYPE)
1692237925Snp#define G_RX_T5_PKTYPE(x) (((x) >> S_RX_T5_PKTYPE) & M_RX_T5_PKTYPE)
1693237925Snp
1694218792Snp#define S_RX_DATYPE    18
1695218792Snp#define M_RX_DATYPE    0x3
1696218792Snp#define V_RX_DATYPE(x) ((x) << S_RX_DATYPE)
1697218792Snp#define G_RX_DATYPE(x) (((x) >> S_RX_DATYPE) & M_RX_DATYPE)
1698218792Snp
1699218792Snp#define S_RXF_PSH    20
1700218792Snp#define V_RXF_PSH(x) ((x) << S_RXF_PSH)
1701218792Snp#define F_RXF_PSH    V_RXF_PSH(1U)
1702218792Snp
1703218792Snp#define S_RXF_SYN    21
1704218792Snp#define V_RXF_SYN(x) ((x) << S_RXF_SYN)
1705218792Snp#define F_RXF_SYN    V_RXF_SYN(1U)
1706218792Snp
1707218792Snp#define S_RXF_UDP    22
1708218792Snp#define V_RXF_UDP(x) ((x) << S_RXF_UDP)
1709218792Snp#define F_RXF_UDP    V_RXF_UDP(1U)
1710218792Snp
1711218792Snp#define S_RXF_TCP    23
1712218792Snp#define V_RXF_TCP(x) ((x) << S_RXF_TCP)
1713218792Snp#define F_RXF_TCP    V_RXF_TCP(1U)
1714218792Snp
1715218792Snp#define S_RXF_IP    24
1716218792Snp#define V_RXF_IP(x) ((x) << S_RXF_IP)
1717218792Snp#define F_RXF_IP    V_RXF_IP(1U)
1718218792Snp
1719218792Snp#define S_RXF_IP6    25
1720218792Snp#define V_RXF_IP6(x) ((x) << S_RXF_IP6)
1721218792Snp#define F_RXF_IP6    V_RXF_IP6(1U)
1722218792Snp
1723218792Snp#define S_RXF_SYN_COOKIE    26
1724218792Snp#define V_RXF_SYN_COOKIE(x) ((x) << S_RXF_SYN_COOKIE)
1725218792Snp#define F_RXF_SYN_COOKIE    V_RXF_SYN_COOKIE(1U)
1726218792Snp
1727218792Snp#define S_RXF_FCOE    26
1728218792Snp#define V_RXF_FCOE(x) ((x) << S_RXF_FCOE)
1729218792Snp#define F_RXF_FCOE    V_RXF_FCOE(1U)
1730218792Snp
1731218792Snp#define S_RXF_LRO    27
1732218792Snp#define V_RXF_LRO(x) ((x) << S_RXF_LRO)
1733218792Snp#define F_RXF_LRO    V_RXF_LRO(1U)
1734218792Snp
1735218792Snp#define S_RX_CHAN    28
1736218792Snp#define M_RX_CHAN    0xF
1737218792Snp#define V_RX_CHAN(x) ((x) << S_RX_CHAN)
1738218792Snp#define G_RX_CHAN(x) (((x) >> S_RX_CHAN) & M_RX_CHAN)
1739218792Snp
1740218792Snp/* rx_pkt.hdr_len fields */
1741218792Snp#define S_RX_TCPHDR_LEN    0
1742218792Snp#define M_RX_TCPHDR_LEN    0x3F
1743218792Snp#define V_RX_TCPHDR_LEN(x) ((x) << S_RX_TCPHDR_LEN)
1744218792Snp#define G_RX_TCPHDR_LEN(x) (((x) >> S_RX_TCPHDR_LEN) & M_RX_TCPHDR_LEN)
1745218792Snp
1746218792Snp#define S_RX_IPHDR_LEN    6
1747218792Snp#define M_RX_IPHDR_LEN    0x3FF
1748218792Snp#define V_RX_IPHDR_LEN(x) ((x) << S_RX_IPHDR_LEN)
1749218792Snp#define G_RX_IPHDR_LEN(x) (((x) >> S_RX_IPHDR_LEN) & M_RX_IPHDR_LEN)
1750218792Snp
1751218792Snp/* rx_pkt.err_vec fields */
1752218792Snp#define S_RXERR_OR    0
1753218792Snp#define V_RXERR_OR(x) ((x) << S_RXERR_OR)
1754218792Snp#define F_RXERR_OR    V_RXERR_OR(1U)
1755218792Snp
1756218792Snp#define S_RXERR_MAC    1
1757218792Snp#define V_RXERR_MAC(x) ((x) << S_RXERR_MAC)
1758218792Snp#define F_RXERR_MAC    V_RXERR_MAC(1U)
1759218792Snp
1760218792Snp#define S_RXERR_IPVERS    2
1761218792Snp#define V_RXERR_IPVERS(x) ((x) << S_RXERR_IPVERS)
1762218792Snp#define F_RXERR_IPVERS    V_RXERR_IPVERS(1U)
1763218792Snp
1764218792Snp#define S_RXERR_FRAG    3
1765218792Snp#define V_RXERR_FRAG(x) ((x) << S_RXERR_FRAG)
1766218792Snp#define F_RXERR_FRAG    V_RXERR_FRAG(1U)
1767218792Snp
1768218792Snp#define S_RXERR_ATTACK    4
1769218792Snp#define V_RXERR_ATTACK(x) ((x) << S_RXERR_ATTACK)
1770218792Snp#define F_RXERR_ATTACK    V_RXERR_ATTACK(1U)
1771218792Snp
1772218792Snp#define S_RXERR_ETHHDR_LEN    5
1773218792Snp#define V_RXERR_ETHHDR_LEN(x) ((x) << S_RXERR_ETHHDR_LEN)
1774218792Snp#define F_RXERR_ETHHDR_LEN    V_RXERR_ETHHDR_LEN(1U)
1775218792Snp
1776218792Snp#define S_RXERR_IPHDR_LEN    6
1777218792Snp#define V_RXERR_IPHDR_LEN(x) ((x) << S_RXERR_IPHDR_LEN)
1778218792Snp#define F_RXERR_IPHDR_LEN    V_RXERR_IPHDR_LEN(1U)
1779218792Snp
1780218792Snp#define S_RXERR_TCPHDR_LEN    7
1781218792Snp#define V_RXERR_TCPHDR_LEN(x) ((x) << S_RXERR_TCPHDR_LEN)
1782218792Snp#define F_RXERR_TCPHDR_LEN    V_RXERR_TCPHDR_LEN(1U)
1783218792Snp
1784218792Snp#define S_RXERR_PKT_LEN    8
1785218792Snp#define V_RXERR_PKT_LEN(x) ((x) << S_RXERR_PKT_LEN)
1786218792Snp#define F_RXERR_PKT_LEN    V_RXERR_PKT_LEN(1U)
1787218792Snp
1788218792Snp#define S_RXERR_TCP_OPT    9
1789218792Snp#define V_RXERR_TCP_OPT(x) ((x) << S_RXERR_TCP_OPT)
1790218792Snp#define F_RXERR_TCP_OPT    V_RXERR_TCP_OPT(1U)
1791218792Snp
1792218792Snp#define S_RXERR_IPCSUM    12
1793218792Snp#define V_RXERR_IPCSUM(x) ((x) << S_RXERR_IPCSUM)
1794218792Snp#define F_RXERR_IPCSUM    V_RXERR_IPCSUM(1U)
1795218792Snp
1796218792Snp#define S_RXERR_CSUM    13
1797218792Snp#define V_RXERR_CSUM(x) ((x) << S_RXERR_CSUM)
1798218792Snp#define F_RXERR_CSUM    V_RXERR_CSUM(1U)
1799218792Snp
1800218792Snp#define S_RXERR_PING    14
1801218792Snp#define V_RXERR_PING(x) ((x) << S_RXERR_PING)
1802218792Snp#define F_RXERR_PING    V_RXERR_PING(1U)
1803218792Snp
1804218792Snpstruct cpl_trace_pkt {
1805218792Snp	RSS_HDR
1806218792Snp	__u8 opcode;
1807218792Snp	__u8 intf;
1808218792Snp#if defined(__LITTLE_ENDIAN_BITFIELD)
1809218792Snp	__u8 runt:4;
1810218792Snp	__u8 filter_hit:4;
1811218792Snp	__u8 :6;
1812218792Snp	__u8 err:1;
1813218792Snp	__u8 trunc:1;
1814218792Snp#else
1815218792Snp	__u8 filter_hit:4;
1816218792Snp	__u8 runt:4;
1817218792Snp	__u8 trunc:1;
1818218792Snp	__u8 err:1;
1819218792Snp	__u8 :6;
1820218792Snp#endif
1821218792Snp	__be16 rsvd;
1822218792Snp	__be16 len;
1823218792Snp	__be64 tstamp;
1824218792Snp};
1825218792Snp
1826237925Snpstruct cpl_t5_trace_pkt {
1827237925Snp	RSS_HDR
1828237925Snp	__u8 opcode;
1829237925Snp	__u8 intf;
1830237925Snp#if defined(__LITTLE_ENDIAN_BITFIELD)
1831237925Snp	__u8 runt:4;
1832237925Snp	__u8 filter_hit:4;
1833237925Snp	__u8 :6;
1834237925Snp	__u8 err:1;
1835237925Snp	__u8 trunc:1;
1836237925Snp#else
1837237925Snp	__u8 filter_hit:4;
1838237925Snp	__u8 runt:4;
1839237925Snp	__u8 trunc:1;
1840237925Snp	__u8 err:1;
1841237925Snp	__u8 :6;
1842237925Snp#endif
1843237925Snp	__be16 rsvd;
1844237925Snp	__be16 len;
1845237925Snp	__be64 tstamp;
1846237925Snp	__be64 rsvd1;
1847237925Snp};
1848237925Snp
1849218792Snpstruct cpl_rte_delete_req {
1850218792Snp	WR_HDR;
1851218792Snp	union opcode_tid ot;
1852218792Snp	__be32 params;
1853218792Snp};
1854218792Snp
1855218792Snp/* {cpl_rte_delete_req, cpl_rte_read_req}.params fields */
1856218792Snp#define S_RTE_REQ_LUT_IX    8
1857218792Snp#define M_RTE_REQ_LUT_IX    0x7FF
1858218792Snp#define V_RTE_REQ_LUT_IX(x) ((x) << S_RTE_REQ_LUT_IX)
1859218792Snp#define G_RTE_REQ_LUT_IX(x) (((x) >> S_RTE_REQ_LUT_IX) & M_RTE_REQ_LUT_IX)
1860218792Snp
1861218792Snp#define S_RTE_REQ_LUT_BASE    19
1862218792Snp#define M_RTE_REQ_LUT_BASE    0x7FF
1863218792Snp#define V_RTE_REQ_LUT_BASE(x) ((x) << S_RTE_REQ_LUT_BASE)
1864218792Snp#define G_RTE_REQ_LUT_BASE(x) (((x) >> S_RTE_REQ_LUT_BASE) & M_RTE_REQ_LUT_BASE)
1865218792Snp
1866218792Snp#define S_RTE_READ_REQ_SELECT    31
1867218792Snp#define V_RTE_READ_REQ_SELECT(x) ((x) << S_RTE_READ_REQ_SELECT)
1868218792Snp#define F_RTE_READ_REQ_SELECT    V_RTE_READ_REQ_SELECT(1U)
1869218792Snp
1870218792Snpstruct cpl_rte_delete_rpl {
1871218792Snp	RSS_HDR
1872218792Snp	union opcode_tid ot;
1873218792Snp	__u8 status;
1874218792Snp	__u8 rsvd[3];
1875218792Snp};
1876218792Snp
1877218792Snpstruct cpl_rte_write_req {
1878218792Snp	WR_HDR;
1879218792Snp	union opcode_tid ot;
1880218792Snp	__u32 write_sel;
1881218792Snp	__be32 lut_params;
1882218792Snp	__be32 l2t_idx;
1883218792Snp	__be32 netmask;
1884218792Snp	__be32 faddr;
1885218792Snp};
1886218792Snp
1887218792Snp/* cpl_rte_write_req.write_sel fields */
1888218792Snp#define S_RTE_WR_L2TIDX    31
1889218792Snp#define V_RTE_WR_L2TIDX(x) ((x) << S_RTE_WR_L2TIDX)
1890218792Snp#define F_RTE_WR_L2TIDX    V_RTE_WR_L2TIDX(1U)
1891218792Snp
1892218792Snp#define S_RTE_WR_FADDR    30
1893218792Snp#define V_RTE_WR_FADDR(x) ((x) << S_RTE_WR_FADDR)
1894218792Snp#define F_RTE_WR_FADDR    V_RTE_WR_FADDR(1U)
1895218792Snp
1896218792Snp/* cpl_rte_write_req.lut_params fields */
1897218792Snp#define S_RTE_WR_LUT_IX    10
1898218792Snp#define M_RTE_WR_LUT_IX    0x7FF
1899218792Snp#define V_RTE_WR_LUT_IX(x) ((x) << S_RTE_WR_LUT_IX)
1900218792Snp#define G_RTE_WR_LUT_IX(x) (((x) >> S_RTE_WR_LUT_IX) & M_RTE_WR_LUT_IX)
1901218792Snp
1902218792Snp#define S_RTE_WR_LUT_BASE    21
1903218792Snp#define M_RTE_WR_LUT_BASE    0x7FF
1904218792Snp#define V_RTE_WR_LUT_BASE(x) ((x) << S_RTE_WR_LUT_BASE)
1905218792Snp#define G_RTE_WR_LUT_BASE(x) (((x) >> S_RTE_WR_LUT_BASE) & M_RTE_WR_LUT_BASE)
1906218792Snp
1907218792Snpstruct cpl_rte_write_rpl {
1908218792Snp	RSS_HDR
1909218792Snp	union opcode_tid ot;
1910218792Snp	__u8 status;
1911218792Snp	__u8 rsvd[3];
1912218792Snp};
1913218792Snp
1914218792Snpstruct cpl_rte_read_req {
1915218792Snp	WR_HDR;
1916218792Snp	union opcode_tid ot;
1917218792Snp	__be32 params;
1918218792Snp};
1919218792Snp
1920218792Snpstruct cpl_rte_read_rpl {
1921218792Snp	RSS_HDR
1922218792Snp	union opcode_tid ot;
1923218792Snp	__u8 status;
1924218792Snp	__u8 rsvd;
1925218792Snp	__be16 l2t_idx;
1926218792Snp#if defined(__LITTLE_ENDIAN_BITFIELD)
1927218792Snp	__u32 :30;
1928218792Snp	__u32 select:1;
1929218792Snp#else
1930218792Snp	__u32 select:1;
1931218792Snp	__u32 :30;
1932218792Snp#endif
1933218792Snp	__be32 addr;
1934218792Snp};
1935218792Snp
1936218792Snpstruct cpl_l2t_write_req {
1937218792Snp	WR_HDR;
1938218792Snp	union opcode_tid ot;
1939218792Snp	__be16 params;
1940218792Snp	__be16 l2t_idx;
1941218792Snp	__be16 vlan;
1942218792Snp	__u8   dst_mac[6];
1943218792Snp};
1944218792Snp
1945218792Snp/* cpl_l2t_write_req.params fields */
1946218792Snp#define S_L2T_W_INFO    2
1947218792Snp#define M_L2T_W_INFO    0x3F
1948218792Snp#define V_L2T_W_INFO(x) ((x) << S_L2T_W_INFO)
1949218792Snp#define G_L2T_W_INFO(x) (((x) >> S_L2T_W_INFO) & M_L2T_W_INFO)
1950218792Snp
1951218792Snp#define S_L2T_W_PORT    8
1952252495Snp#define M_L2T_W_PORT    0x3
1953218792Snp#define V_L2T_W_PORT(x) ((x) << S_L2T_W_PORT)
1954218792Snp#define G_L2T_W_PORT(x) (((x) >> S_L2T_W_PORT) & M_L2T_W_PORT)
1955218792Snp
1956252495Snp#define S_L2T_W_LPBK    10
1957252495Snp#define V_L2T_W_LPBK(x) ((x) << S_L2T_W_LPBK)
1958252495Snp#define F_L2T_W_PKBK    V_L2T_W_LPBK(1U)
1959252495Snp
1960252495Snp#define S_L2T_W_ARPMISS         11
1961252495Snp#define V_L2T_W_ARPMISS(x)      ((x) << S_L2T_W_ARPMISS)
1962252495Snp#define F_L2T_W_ARPMISS         V_L2T_W_ARPMISS(1U)
1963252495Snp
1964218792Snp#define S_L2T_W_NOREPLY    15
1965218792Snp#define V_L2T_W_NOREPLY(x) ((x) << S_L2T_W_NOREPLY)
1966218792Snp#define F_L2T_W_NOREPLY    V_L2T_W_NOREPLY(1U)
1967218792Snp
1968252495Snp#define CPL_L2T_VLAN_NONE 0xfff
1969252495Snp
1970218792Snpstruct cpl_l2t_write_rpl {
1971218792Snp	RSS_HDR
1972218792Snp	union opcode_tid ot;
1973218792Snp	__u8 status;
1974218792Snp	__u8 rsvd[3];
1975218792Snp};
1976218792Snp
1977218792Snpstruct cpl_l2t_read_req {
1978218792Snp	WR_HDR;
1979218792Snp	union opcode_tid ot;
1980218792Snp	__be32 l2t_idx;
1981218792Snp};
1982218792Snp
1983218792Snpstruct cpl_l2t_read_rpl {
1984218792Snp	RSS_HDR
1985218792Snp	union opcode_tid ot;
1986218792Snp	__u8 status;
1987218792Snp#if defined(__LITTLE_ENDIAN_BITFIELD)
1988218792Snp	__u8 :4;
1989218792Snp	__u8 iff:4;
1990218792Snp#else
1991218792Snp	__u8 iff:4;
1992218792Snp	__u8 :4;
1993218792Snp#endif
1994218792Snp	__be16 vlan;
1995218792Snp	__be16 info;
1996218792Snp	__u8 dst_mac[6];
1997218792Snp};
1998218792Snp
1999218792Snpstruct cpl_smt_write_req {
2000218792Snp	WR_HDR;
2001218792Snp	union opcode_tid ot;
2002218792Snp	__be32 params;
2003218792Snp	__be16 pfvf1;
2004218792Snp	__u8   src_mac1[6];
2005218792Snp	__be16 pfvf0;
2006218792Snp	__u8   src_mac0[6];
2007218792Snp};
2008218792Snp
2009237925Snpstruct cpl_smt_write_rpl {
2010237925Snp	RSS_HDR
2011237925Snp	union opcode_tid ot;
2012237925Snp	__u8 status;
2013237925Snp	__u8 rsvd[3];
2014237925Snp};
2015237925Snp
2016237925Snpstruct cpl_smt_read_req {
2017237925Snp	WR_HDR;
2018237925Snp	union opcode_tid ot;
2019237925Snp	__be32 params;
2020237925Snp};
2021237925Snp
2022237925Snpstruct cpl_smt_read_rpl {
2023237925Snp	RSS_HDR
2024237925Snp	union opcode_tid ot;
2025237925Snp	__u8   status;
2026237925Snp	__u8   ovlan_idx;
2027237925Snp	__be16 rsvd;
2028237925Snp	__be16 pfvf1;
2029237925Snp	__u8   src_mac1[6];
2030237925Snp	__be16 pfvf0;
2031237925Snp	__u8   src_mac0[6];
2032237925Snp};
2033237925Snp
2034218792Snp/* cpl_smt_{read,write}_req.params fields */
2035218792Snp#define S_SMTW_OVLAN_IDX    16
2036218792Snp#define M_SMTW_OVLAN_IDX    0xF
2037218792Snp#define V_SMTW_OVLAN_IDX(x) ((x) << S_SMTW_OVLAN_IDX)
2038218792Snp#define G_SMTW_OVLAN_IDX(x) (((x) >> S_SMTW_OVLAN_IDX) & M_SMTW_OVLAN_IDX)
2039218792Snp
2040218792Snp#define S_SMTW_IDX    20
2041218792Snp#define M_SMTW_IDX    0x7F
2042218792Snp#define V_SMTW_IDX(x) ((x) << S_SMTW_IDX)
2043218792Snp#define G_SMTW_IDX(x) (((x) >> S_SMTW_IDX) & M_SMTW_IDX)
2044218792Snp
2045218792Snp#define S_SMTW_NORPL    31
2046218792Snp#define V_SMTW_NORPL(x) ((x) << S_SMTW_NORPL)
2047218792Snp#define F_SMTW_NORPL    V_SMTW_NORPL(1U)
2048218792Snp
2049218792Snp/* cpl_smt_{read,write}_req.pfvf? fields */
2050218792Snp#define S_SMTW_VF    0
2051218792Snp#define M_SMTW_VF    0xFF
2052218792Snp#define V_SMTW_VF(x) ((x) << S_SMTW_VF)
2053218792Snp#define G_SMTW_VF(x) (((x) >> S_SMTW_VF) & M_SMTW_VF)
2054218792Snp
2055218792Snp#define S_SMTW_PF    8
2056218792Snp#define M_SMTW_PF    0x7
2057218792Snp#define V_SMTW_PF(x) ((x) << S_SMTW_PF)
2058218792Snp#define G_SMTW_PF(x) (((x) >> S_SMTW_PF) & M_SMTW_PF)
2059218792Snp
2060218792Snp#define S_SMTW_VF_VLD    11
2061218792Snp#define V_SMTW_VF_VLD(x) ((x) << S_SMTW_VF_VLD)
2062218792Snp#define F_SMTW_VF_VLD    V_SMTW_VF_VLD(1U)
2063218792Snp
2064237925Snpstruct cpl_tag_write_req {
2065237925Snp	WR_HDR;
2066237925Snp	union opcode_tid ot;
2067237925Snp	__be32 params;
2068237925Snp	__be64 tag_val;
2069237925Snp};
2070237925Snp
2071237925Snpstruct cpl_tag_write_rpl {
2072218792Snp	RSS_HDR
2073218792Snp	union opcode_tid ot;
2074218792Snp	__u8 status;
2075237925Snp	__u8 rsvd[2];
2076237925Snp	__u8 idx;
2077218792Snp};
2078218792Snp
2079237925Snpstruct cpl_tag_read_req {
2080218792Snp	WR_HDR;
2081218792Snp	union opcode_tid ot;
2082218792Snp	__be32 params;
2083218792Snp};
2084218792Snp
2085237925Snpstruct cpl_tag_read_rpl {
2086218792Snp	RSS_HDR
2087218792Snp	union opcode_tid ot;
2088218792Snp	__u8   status;
2089237925Snp#if defined(__LITTLE_ENDIAN_BITFIELD)
2090237925Snp	__u8 :4;
2091237925Snp	__u8 tag_len:1;
2092237925Snp	__u8 :2;
2093237925Snp	__u8 ins_enable:1;
2094237925Snp#else
2095237925Snp	__u8 ins_enable:1;
2096237925Snp	__u8 :2;
2097237925Snp	__u8 tag_len:1;
2098237925Snp	__u8 :4;
2099237925Snp#endif
2100237925Snp	__u8   rsvd;
2101237925Snp	__u8   tag_idx;
2102237925Snp	__be64 tag_val;
2103218792Snp};
2104218792Snp
2105237925Snp/* cpl_tag{read,write}_req.params fields */
2106237925Snp#define S_TAGW_IDX    0
2107237925Snp#define M_TAGW_IDX    0x7F
2108237925Snp#define V_TAGW_IDX(x) ((x) << S_TAGW_IDX)
2109237925Snp#define G_TAGW_IDX(x) (((x) >> S_TAGW_IDX) & M_TAGW_IDX)
2110237925Snp
2111237925Snp#define S_TAGW_LEN    20
2112237925Snp#define V_TAGW_LEN(x) ((x) << S_TAGW_LEN)
2113237925Snp#define F_TAGW_LEN    V_TAGW_LEN(1U)
2114237925Snp
2115237925Snp#define S_TAGW_INS_ENABLE    23
2116237925Snp#define V_TAGW_INS_ENABLE(x) ((x) << S_TAGW_INS_ENABLE)
2117237925Snp#define F_TAGW_INS_ENABLE    V_TAGW_INS_ENABLE(1U)
2118237925Snp
2119237925Snp#define S_TAGW_NORPL    31
2120237925Snp#define V_TAGW_NORPL(x) ((x) << S_TAGW_NORPL)
2121237925Snp#define F_TAGW_NORPL    V_TAGW_NORPL(1U)
2122237925Snp
2123218792Snpstruct cpl_barrier {
2124218792Snp	WR_HDR;
2125218792Snp	__u8 opcode;
2126218792Snp	__u8 chan_map;
2127218792Snp	__be16 rsvd0;
2128218792Snp	__be32 rsvd1;
2129218792Snp};
2130218792Snp
2131218792Snp/* cpl_barrier.chan_map fields */
2132218792Snp#define S_CHAN_MAP    4
2133218792Snp#define M_CHAN_MAP    0xF
2134218792Snp#define V_CHAN_MAP(x) ((x) << S_CHAN_MAP)
2135218792Snp#define G_CHAN_MAP(x) (((x) >> S_CHAN_MAP) & M_CHAN_MAP)
2136218792Snp
2137218792Snpstruct cpl_error {
2138218792Snp	RSS_HDR
2139218792Snp	union opcode_tid ot;
2140218792Snp	__be32 error;
2141218792Snp};
2142218792Snp
2143218792Snpstruct cpl_hit_notify {
2144218792Snp	RSS_HDR
2145218792Snp	union opcode_tid ot;
2146218792Snp	__be32 rsvd;
2147218792Snp	__be32 info;
2148218792Snp	__be32 reason;
2149218792Snp};
2150218792Snp
2151218792Snpstruct cpl_pkt_notify {
2152218792Snp	RSS_HDR
2153218792Snp	union opcode_tid ot;
2154218792Snp	__be16 rsvd;
2155218792Snp	__be16 len;
2156218792Snp	__be32 info;
2157218792Snp	__be32 reason;
2158218792Snp};
2159218792Snp
2160218792Snp/* cpl_{hit,pkt}_notify.info fields */
2161218792Snp#define S_NTFY_MAC_IDX    0
2162218792Snp#define M_NTFY_MAC_IDX    0x1FF
2163218792Snp#define V_NTFY_MAC_IDX(x) ((x) << S_NTFY_MAC_IDX)
2164218792Snp#define G_NTFY_MAC_IDX(x) (((x) >> S_NTFY_MAC_IDX) & M_NTFY_MAC_IDX)
2165218792Snp
2166218792Snp#define S_NTFY_INTF    10
2167218792Snp#define M_NTFY_INTF    0xF
2168218792Snp#define V_NTFY_INTF(x) ((x) << S_NTFY_INTF)
2169218792Snp#define G_NTFY_INTF(x) (((x) >> S_NTFY_INTF) & M_NTFY_INTF)
2170218792Snp
2171218792Snp#define S_NTFY_TCPHDR_LEN    14
2172218792Snp#define M_NTFY_TCPHDR_LEN    0xF
2173218792Snp#define V_NTFY_TCPHDR_LEN(x) ((x) << S_NTFY_TCPHDR_LEN)
2174218792Snp#define G_NTFY_TCPHDR_LEN(x) (((x) >> S_NTFY_TCPHDR_LEN) & M_NTFY_TCPHDR_LEN)
2175218792Snp
2176218792Snp#define S_NTFY_IPHDR_LEN    18
2177218792Snp#define M_NTFY_IPHDR_LEN    0x1FF
2178218792Snp#define V_NTFY_IPHDR_LEN(x) ((x) << S_NTFY_IPHDR_LEN)
2179218792Snp#define G_NTFY_IPHDR_LEN(x) (((x) >> S_NTFY_IPHDR_LEN) & M_NTFY_IPHDR_LEN)
2180218792Snp
2181218792Snp#define S_NTFY_ETHHDR_LEN    27
2182218792Snp#define M_NTFY_ETHHDR_LEN    0x1F
2183218792Snp#define V_NTFY_ETHHDR_LEN(x) ((x) << S_NTFY_ETHHDR_LEN)
2184218792Snp#define G_NTFY_ETHHDR_LEN(x) (((x) >> S_NTFY_ETHHDR_LEN) & M_NTFY_ETHHDR_LEN)
2185218792Snp
2186237925Snp#define S_NTFY_T5_IPHDR_LEN    18
2187237925Snp#define M_NTFY_T5_IPHDR_LEN    0xFF
2188237925Snp#define V_NTFY_T5_IPHDR_LEN(x) ((x) << S_NTFY_T5_IPHDR_LEN)
2189237925Snp#define G_NTFY_T5_IPHDR_LEN(x) (((x) >> S_NTFY_T5_IPHDR_LEN) & M_NTFY_T5_IPHDR_LEN)
2190237925Snp
2191237925Snp#define S_NTFY_T5_ETHHDR_LEN    26
2192237925Snp#define M_NTFY_T5_ETHHDR_LEN    0x3F
2193237925Snp#define V_NTFY_T5_ETHHDR_LEN(x) ((x) << S_NTFY_T5_ETHHDR_LEN)
2194237925Snp#define G_NTFY_T5_ETHHDR_LEN(x) (((x) >> S_NTFY_T5_ETHHDR_LEN) & M_NTFY_T5_ETHHDR_LEN)
2195237925Snp
2196218792Snpstruct cpl_rdma_terminate {
2197218792Snp	RSS_HDR
2198218792Snp	union opcode_tid ot;
2199218792Snp	__be16 rsvd;
2200218792Snp	__be16 len;
2201218792Snp};
2202218792Snp
2203218792Snpstruct cpl_set_le_req {
2204218792Snp	WR_HDR;
2205218792Snp	union opcode_tid ot;
2206218792Snp	__be16 reply_ctrl;
2207218792Snp	__be16 params;
2208218792Snp	__be64 mask_hi;
2209218792Snp	__be64 mask_lo;
2210218792Snp	__be64 val_hi;
2211218792Snp	__be64 val_lo;
2212218792Snp};
2213218792Snp
2214218792Snp/* cpl_set_le_req.reply_ctrl additional fields */
2215218792Snp#define S_LE_REQ_IP6    13
2216218792Snp#define V_LE_REQ_IP6(x) ((x) << S_LE_REQ_IP6)
2217218792Snp#define F_LE_REQ_IP6    V_LE_REQ_IP6(1U)
2218218792Snp
2219218792Snp/* cpl_set_le_req.params fields */
2220218792Snp#define S_LE_CHAN    0
2221218792Snp#define M_LE_CHAN    0x3
2222218792Snp#define V_LE_CHAN(x) ((x) << S_LE_CHAN)
2223218792Snp#define G_LE_CHAN(x) (((x) >> S_LE_CHAN) & M_LE_CHAN)
2224218792Snp
2225218792Snp#define S_LE_OFFSET    5
2226218792Snp#define M_LE_OFFSET    0x7
2227218792Snp#define V_LE_OFFSET(x) ((x) << S_LE_OFFSET)
2228218792Snp#define G_LE_OFFSET(x) (((x) >> S_LE_OFFSET) & M_LE_OFFSET)
2229218792Snp
2230218792Snp#define S_LE_MORE    8
2231218792Snp#define V_LE_MORE(x) ((x) << S_LE_MORE)
2232218792Snp#define F_LE_MORE    V_LE_MORE(1U)
2233218792Snp
2234218792Snp#define S_LE_REQSIZE    9
2235218792Snp#define M_LE_REQSIZE    0x7
2236218792Snp#define V_LE_REQSIZE(x) ((x) << S_LE_REQSIZE)
2237218792Snp#define G_LE_REQSIZE(x) (((x) >> S_LE_REQSIZE) & M_LE_REQSIZE)
2238218792Snp
2239218792Snp#define S_LE_REQCMD    12
2240218792Snp#define M_LE_REQCMD    0xF
2241218792Snp#define V_LE_REQCMD(x) ((x) << S_LE_REQCMD)
2242218792Snp#define G_LE_REQCMD(x) (((x) >> S_LE_REQCMD) & M_LE_REQCMD)
2243218792Snp
2244218792Snpstruct cpl_set_le_rpl {
2245218792Snp	RSS_HDR
2246218792Snp	union opcode_tid ot;
2247218792Snp	__u8 chan;
2248218792Snp	__u8 info;
2249218792Snp	__be16 len;
2250218792Snp};
2251218792Snp
2252218792Snp/* cpl_set_le_rpl.info fields */
2253218792Snp#define S_LE_RSPCMD    0
2254218792Snp#define M_LE_RSPCMD    0xF
2255218792Snp#define V_LE_RSPCMD(x) ((x) << S_LE_RSPCMD)
2256218792Snp#define G_LE_RSPCMD(x) (((x) >> S_LE_RSPCMD) & M_LE_RSPCMD)
2257218792Snp
2258218792Snp#define S_LE_RSPSIZE    4
2259218792Snp#define M_LE_RSPSIZE    0x7
2260218792Snp#define V_LE_RSPSIZE(x) ((x) << S_LE_RSPSIZE)
2261218792Snp#define G_LE_RSPSIZE(x) (((x) >> S_LE_RSPSIZE) & M_LE_RSPSIZE)
2262218792Snp
2263218792Snp#define S_LE_RSPTYPE    7
2264218792Snp#define V_LE_RSPTYPE(x) ((x) << S_LE_RSPTYPE)
2265218792Snp#define F_LE_RSPTYPE    V_LE_RSPTYPE(1U)
2266218792Snp
2267218792Snpstruct cpl_sge_egr_update {
2268218792Snp	RSS_HDR
2269218792Snp	__be32 opcode_qid;
2270218792Snp	__be16 cidx;
2271218792Snp	__be16 pidx;
2272218792Snp};
2273218792Snp
2274218792Snp/* cpl_sge_egr_update.ot fields */
2275218792Snp#define S_EGR_QID    0
2276218792Snp#define M_EGR_QID    0x1FFFF
2277218792Snp#define V_EGR_QID(x) ((x) << S_EGR_QID)
2278218792Snp#define G_EGR_QID(x) (((x) >> S_EGR_QID) & M_EGR_QID)
2279218792Snp
2280247434Snp/* cpl_fw*.type values */
2281247434Snpenum {
2282247434Snp	FW_TYPE_CMD_RPL = 0,
2283247434Snp	FW_TYPE_WR_RPL = 1,
2284247434Snp	FW_TYPE_CQE = 2,
2285247434Snp	FW_TYPE_OFLD_CONNECTION_WR_RPL = 3,
2286247434Snp	FW_TYPE_RSSCPL = 4,
2287247434Snp};
2288247434Snp
2289218792Snpstruct cpl_fw2_pld {
2290218792Snp	RSS_HDR
2291218792Snp	u8 opcode;
2292218792Snp	u8 rsvd[5];
2293218792Snp	__be16 len;
2294218792Snp};
2295218792Snp
2296218792Snpstruct cpl_fw4_pld {
2297218792Snp	RSS_HDR
2298218792Snp	u8 opcode;
2299218792Snp	u8 rsvd0[3];
2300218792Snp	u8 type;
2301218792Snp	u8 rsvd1;
2302218792Snp	__be16 len;
2303218792Snp	__be64 data;
2304218792Snp	__be64 rsvd2;
2305218792Snp};
2306218792Snp
2307218792Snpstruct cpl_fw6_pld {
2308218792Snp	RSS_HDR
2309218792Snp	u8 opcode;
2310218792Snp	u8 rsvd[5];
2311218792Snp	__be16 len;
2312218792Snp	__be64 data[4];
2313218792Snp};
2314218792Snp
2315218792Snpstruct cpl_fw2_msg {
2316218792Snp	RSS_HDR
2317218792Snp	union opcode_info oi;
2318218792Snp};
2319218792Snp
2320218792Snpstruct cpl_fw4_msg {
2321218792Snp	RSS_HDR
2322218792Snp	u8 opcode;
2323218792Snp	u8 type;
2324218792Snp	__be16 rsvd0;
2325218792Snp	__be32 rsvd1;
2326218792Snp	__be64 data[2];
2327218792Snp};
2328218792Snp
2329218792Snpstruct cpl_fw4_ack {
2330218792Snp	RSS_HDR
2331218792Snp	union opcode_tid ot;
2332218792Snp	u8 credits;
2333218792Snp	u8 rsvd0[2];
2334237925Snp	u8 flags;
2335218792Snp	__be32 snd_nxt;
2336218792Snp	__be32 snd_una;
2337218792Snp	__be64 rsvd1;
2338218792Snp};
2339218792Snp
2340237925Snpenum {
2341237925Snp	CPL_FW4_ACK_FLAGS_SEQVAL	= 0x1,	/* seqn valid */
2342237925Snp	CPL_FW4_ACK_FLAGS_CH		= 0x2,	/* channel change complete */
2343237925Snp	CPL_FW4_ACK_FLAGS_FLOWC		= 0x4,	/* fw_flowc_wr complete */
2344237925Snp};
2345237925Snp
2346218792Snpstruct cpl_fw6_msg {
2347218792Snp	RSS_HDR
2348218792Snp	u8 opcode;
2349218792Snp	u8 type;
2350218792Snp	__be16 rsvd0;
2351218792Snp	__be32 rsvd1;
2352218792Snp	__be64 data[4];
2353218792Snp};
2354218792Snp
2355218792Snp/* cpl_fw6_msg.type values */
2356218792Snpenum {
2357247434Snp	FW6_TYPE_CMD_RPL	= FW_TYPE_CMD_RPL,
2358247434Snp	FW6_TYPE_WR_RPL		= FW_TYPE_WR_RPL,
2359247434Snp	FW6_TYPE_CQE		= FW_TYPE_CQE,
2360247434Snp	FW6_TYPE_OFLD_CONNECTION_WR_RPL = FW_TYPE_OFLD_CONNECTION_WR_RPL,
2361247434Snp	FW6_TYPE_RSSCPL		= FW_TYPE_RSSCPL,
2362240169Snp
2363240169Snp	NUM_FW6_TYPES
2364218792Snp};
2365218792Snp
2366237925Snpstruct cpl_fw6_msg_ofld_connection_wr_rpl {
2367237925Snp	__u64	cookie;
2368237925Snp	__be32	tid;	/* or atid in case of active failure */
2369237925Snp	__u8	t_state;
2370237925Snp	__u8	retval;
2371237925Snp	__u8	rsvd[2];
2372237925Snp};
2373237925Snp
2374218792Snp/* ULP_TX opcodes */
2375218792Snpenum {
2376218792Snp	ULP_TX_MEM_READ = 2,
2377218792Snp	ULP_TX_MEM_WRITE = 3,
2378218792Snp	ULP_TX_PKT = 4
2379218792Snp};
2380218792Snp
2381218792Snpenum {
2382218792Snp	ULP_TX_SC_NOOP = 0x80,
2383218792Snp	ULP_TX_SC_IMM  = 0x81,
2384218792Snp	ULP_TX_SC_DSGL = 0x82,
2385218792Snp	ULP_TX_SC_ISGL = 0x83
2386218792Snp};
2387218792Snp
2388218792Snp#define S_ULPTX_CMD    24
2389218792Snp#define M_ULPTX_CMD    0xFF
2390218792Snp#define V_ULPTX_CMD(x) ((x) << S_ULPTX_CMD)
2391218792Snp
2392218792Snp#define S_ULPTX_LEN16    0
2393218792Snp#define M_ULPTX_LEN16    0xFF
2394218792Snp#define V_ULPTX_LEN16(x) ((x) << S_ULPTX_LEN16)
2395218792Snp
2396218792Snp#define S_ULP_TX_SC_MORE 23
2397218792Snp#define V_ULP_TX_SC_MORE(x) ((x) << S_ULP_TX_SC_MORE)
2398218792Snp#define F_ULP_TX_SC_MORE  V_ULP_TX_SC_MORE(1U)
2399218792Snp
2400218792Snpstruct ulptx_sge_pair {
2401218792Snp	__be32 len[2];
2402218792Snp	__be64 addr[2];
2403218792Snp};
2404218792Snp
2405218792Snpstruct ulptx_sgl {
2406218792Snp	__be32 cmd_nsge;
2407218792Snp	__be32 len0;
2408218792Snp	__be64 addr0;
2409218792Snp#if !(defined C99_NOT_SUPPORTED)
2410218792Snp	struct ulptx_sge_pair sge[0];
2411218792Snp#endif
2412218792Snp};
2413218792Snp
2414218792Snpstruct ulptx_isge {
2415218792Snp	__be32 stag;
2416218792Snp	__be32 len;
2417218792Snp	__be64 target_ofst;
2418218792Snp};
2419218792Snp
2420218792Snpstruct ulptx_isgl {
2421218792Snp	__be32 cmd_nisge;
2422218792Snp	__be32 rsvd;
2423218792Snp#if !(defined C99_NOT_SUPPORTED)
2424218792Snp	struct ulptx_isge sge[0];
2425218792Snp#endif
2426218792Snp};
2427218792Snp
2428218792Snpstruct ulptx_idata {
2429218792Snp	__be32 cmd_more;
2430218792Snp	__be32 len;
2431218792Snp};
2432218792Snp
2433218792Snp#define S_ULPTX_NSGE    0
2434218792Snp#define M_ULPTX_NSGE    0xFFFF
2435218792Snp#define V_ULPTX_NSGE(x) ((x) << S_ULPTX_NSGE)
2436218792Snp
2437218792Snpstruct ulp_mem_io {
2438218792Snp	WR_HDR;
2439218792Snp	__be32 cmd;
2440218792Snp	__be32 len16;             /* command length */
2441218792Snp	__be32 dlen;              /* data length in 32-byte units */
2442218792Snp	__be32 lock_addr;
2443218792Snp};
2444218792Snp
2445218792Snp/* additional ulp_mem_io.cmd fields */
2446218792Snp#define S_ULP_MEMIO_ORDER    23
2447218792Snp#define V_ULP_MEMIO_ORDER(x) ((x) << S_ULP_MEMIO_ORDER)
2448218792Snp#define F_ULP_MEMIO_ORDER    V_ULP_MEMIO_ORDER(1U)
2449218792Snp
2450252495Snp#define S_T5_ULP_MEMIO_IMM    23
2451252495Snp#define V_T5_ULP_MEMIO_IMM(x) ((x) << S_T5_ULP_MEMIO_IMM)
2452252495Snp#define F_T5_ULP_MEMIO_IMM    V_T5_ULP_MEMIO_IMM(1U)
2453252495Snp
2454252495Snp#define S_T5_ULP_MEMIO_ORDER    22
2455252495Snp#define V_T5_ULP_MEMIO_ORDER(x) ((x) << S_T5_ULP_MEMIO_ORDER)
2456252495Snp#define F_T5_ULP_MEMIO_ORDER    V_T5_ULP_MEMIO_ORDER(1U)
2457252495Snp
2458218792Snp/* ulp_mem_io.lock_addr fields */
2459218792Snp#define S_ULP_MEMIO_ADDR    0
2460218792Snp#define M_ULP_MEMIO_ADDR    0x7FFFFFF
2461218792Snp#define V_ULP_MEMIO_ADDR(x) ((x) << S_ULP_MEMIO_ADDR)
2462218792Snp
2463218792Snp#define S_ULP_MEMIO_LOCK    31
2464218792Snp#define V_ULP_MEMIO_LOCK(x) ((x) << S_ULP_MEMIO_LOCK)
2465218792Snp#define F_ULP_MEMIO_LOCK    V_ULP_MEMIO_LOCK(1U)
2466218792Snp
2467218792Snp/* ulp_mem_io.dlen fields */
2468218792Snp#define S_ULP_MEMIO_DATA_LEN    0
2469218792Snp#define M_ULP_MEMIO_DATA_LEN    0x1F
2470218792Snp#define V_ULP_MEMIO_DATA_LEN(x) ((x) << S_ULP_MEMIO_DATA_LEN)
2471218792Snp
2472252495Snp/* ULP_TXPKT field values */
2473252495Snpenum {
2474252495Snp	ULP_TXPKT_DEST_TP = 0,
2475252495Snp	ULP_TXPKT_DEST_SGE,
2476252495Snp	ULP_TXPKT_DEST_UP,
2477252495Snp	ULP_TXPKT_DEST_DEVNULL,
2478252495Snp};
2479252495Snp
2480218792Snpstruct ulp_txpkt {
2481218792Snp	__be32 cmd_dest;
2482218792Snp	__be32 len;
2483218792Snp};
2484218792Snp
2485218792Snp/* ulp_txpkt.cmd_dest fields */
2486218792Snp#define S_ULP_TXPKT_DEST    16
2487218792Snp#define M_ULP_TXPKT_DEST    0x3
2488218792Snp#define V_ULP_TXPKT_DEST(x) ((x) << S_ULP_TXPKT_DEST)
2489218792Snp
2490218792Snp#define S_ULP_TXPKT_FID	    4
2491218792Snp#define M_ULP_TXPKT_FID     0x7ff
2492218792Snp#define V_ULP_TXPKT_FID(x)  ((x) << S_ULP_TXPKT_FID)
2493218792Snp
2494237925Snp#define S_ULP_TXPKT_RO      3
2495237925Snp#define V_ULP_TXPKT_RO(x) ((x) << S_ULP_TXPKT_RO)
2496237925Snp#define F_ULP_TXPKT_RO V_ULP_TXPKT_RO(1U)
2497237925Snp
2498218792Snp#endif  /* T4_MSG_H */
2499