xref: /OK3568_Linux_fs/kernel/drivers/net/ethernet/chelsio/cxgb/cpl5_cmd.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*****************************************************************************
2*4882a593Smuzhiyun  *                                                                           *
3*4882a593Smuzhiyun  * File: cpl5_cmd.h                                                          *
4*4882a593Smuzhiyun  * $Revision: 1.6 $                                                          *
5*4882a593Smuzhiyun  * $Date: 2005/06/21 18:29:47 $                                              *
6*4882a593Smuzhiyun  * Description:                                                              *
7*4882a593Smuzhiyun  *  part of the Chelsio 10Gb Ethernet Driver.                                *
8*4882a593Smuzhiyun  *                                                                           *
9*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or modify      *
10*4882a593Smuzhiyun  * it under the terms of the GNU General Public License, version 2, as       *
11*4882a593Smuzhiyun  * published by the Free Software Foundation.                                *
12*4882a593Smuzhiyun  *                                                                           *
13*4882a593Smuzhiyun  * You should have received a copy of the GNU General Public License along   *
14*4882a593Smuzhiyun  * with this program; if not, see <http://www.gnu.org/licenses/>.            *
15*4882a593Smuzhiyun  *                                                                           *
16*4882a593Smuzhiyun  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED    *
17*4882a593Smuzhiyun  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF      *
18*4882a593Smuzhiyun  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.                     *
19*4882a593Smuzhiyun  *                                                                           *
20*4882a593Smuzhiyun  * http://www.chelsio.com                                                    *
21*4882a593Smuzhiyun  *                                                                           *
22*4882a593Smuzhiyun  * Copyright (c) 2003 - 2005 Chelsio Communications, Inc.                    *
23*4882a593Smuzhiyun  * All rights reserved.                                                      *
24*4882a593Smuzhiyun  *                                                                           *
25*4882a593Smuzhiyun  * Maintainers: maintainers@chelsio.com                                      *
26*4882a593Smuzhiyun  *                                                                           *
27*4882a593Smuzhiyun  * Authors: Dimitrios Michailidis   <dm@chelsio.com>                         *
28*4882a593Smuzhiyun  *          Tina Yang               <tainay@chelsio.com>                     *
29*4882a593Smuzhiyun  *          Felix Marti             <felix@chelsio.com>                      *
30*4882a593Smuzhiyun  *          Scott Bardone           <sbardone@chelsio.com>                   *
31*4882a593Smuzhiyun  *          Kurt Ottaway            <kottaway@chelsio.com>                   *
32*4882a593Smuzhiyun  *          Frank DiMambro          <frank@chelsio.com>                      *
33*4882a593Smuzhiyun  *                                                                           *
34*4882a593Smuzhiyun  * History:                                                                  *
35*4882a593Smuzhiyun  *                                                                           *
36*4882a593Smuzhiyun  ****************************************************************************/
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun #ifndef _CXGB_CPL5_CMD_H_
39*4882a593Smuzhiyun #define _CXGB_CPL5_CMD_H_
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun #include <asm/byteorder.h>
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun #if !defined(__LITTLE_ENDIAN_BITFIELD) && !defined(__BIG_ENDIAN_BITFIELD)
44*4882a593Smuzhiyun #error "Adjust your <asm/byteorder.h> defines"
45*4882a593Smuzhiyun #endif
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun enum CPL_opcode {
48*4882a593Smuzhiyun 	CPL_PASS_OPEN_REQ     = 0x1,
49*4882a593Smuzhiyun 	CPL_PASS_OPEN_RPL     = 0x2,
50*4882a593Smuzhiyun 	CPL_PASS_ESTABLISH    = 0x3,
51*4882a593Smuzhiyun 	CPL_PASS_ACCEPT_REQ   = 0xE,
52*4882a593Smuzhiyun 	CPL_PASS_ACCEPT_RPL   = 0x4,
53*4882a593Smuzhiyun 	CPL_ACT_OPEN_REQ      = 0x5,
54*4882a593Smuzhiyun 	CPL_ACT_OPEN_RPL      = 0x6,
55*4882a593Smuzhiyun 	CPL_CLOSE_CON_REQ     = 0x7,
56*4882a593Smuzhiyun 	CPL_CLOSE_CON_RPL     = 0x8,
57*4882a593Smuzhiyun 	CPL_CLOSE_LISTSRV_REQ = 0x9,
58*4882a593Smuzhiyun 	CPL_CLOSE_LISTSRV_RPL = 0xA,
59*4882a593Smuzhiyun 	CPL_ABORT_REQ         = 0xB,
60*4882a593Smuzhiyun 	CPL_ABORT_RPL         = 0xC,
61*4882a593Smuzhiyun 	CPL_PEER_CLOSE        = 0xD,
62*4882a593Smuzhiyun 	CPL_ACT_ESTABLISH     = 0x17,
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun 	CPL_GET_TCB           = 0x24,
65*4882a593Smuzhiyun 	CPL_GET_TCB_RPL       = 0x25,
66*4882a593Smuzhiyun 	CPL_SET_TCB           = 0x26,
67*4882a593Smuzhiyun 	CPL_SET_TCB_FIELD     = 0x27,
68*4882a593Smuzhiyun 	CPL_SET_TCB_RPL       = 0x28,
69*4882a593Smuzhiyun 	CPL_PCMD              = 0x29,
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun 	CPL_PCMD_READ         = 0x31,
72*4882a593Smuzhiyun 	CPL_PCMD_READ_RPL     = 0x32,
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun 	CPL_RX_DATA           = 0xA0,
76*4882a593Smuzhiyun 	CPL_RX_DATA_DDP       = 0xA1,
77*4882a593Smuzhiyun 	CPL_RX_DATA_ACK       = 0xA3,
78*4882a593Smuzhiyun 	CPL_RX_PKT            = 0xAD,
79*4882a593Smuzhiyun 	CPL_RX_ISCSI_HDR      = 0xAF,
80*4882a593Smuzhiyun 	CPL_TX_DATA_ACK       = 0xB0,
81*4882a593Smuzhiyun 	CPL_TX_DATA           = 0xB1,
82*4882a593Smuzhiyun 	CPL_TX_PKT            = 0xB2,
83*4882a593Smuzhiyun 	CPL_TX_PKT_LSO        = 0xB6,
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun 	CPL_RTE_DELETE_REQ    = 0xC0,
86*4882a593Smuzhiyun 	CPL_RTE_DELETE_RPL    = 0xC1,
87*4882a593Smuzhiyun 	CPL_RTE_WRITE_REQ     = 0xC2,
88*4882a593Smuzhiyun 	CPL_RTE_WRITE_RPL     = 0xD3,
89*4882a593Smuzhiyun 	CPL_RTE_READ_REQ      = 0xC3,
90*4882a593Smuzhiyun 	CPL_RTE_READ_RPL      = 0xC4,
91*4882a593Smuzhiyun 	CPL_L2T_WRITE_REQ     = 0xC5,
92*4882a593Smuzhiyun 	CPL_L2T_WRITE_RPL     = 0xD4,
93*4882a593Smuzhiyun 	CPL_L2T_READ_REQ      = 0xC6,
94*4882a593Smuzhiyun 	CPL_L2T_READ_RPL      = 0xC7,
95*4882a593Smuzhiyun 	CPL_SMT_WRITE_REQ     = 0xC8,
96*4882a593Smuzhiyun 	CPL_SMT_WRITE_RPL     = 0xD5,
97*4882a593Smuzhiyun 	CPL_SMT_READ_REQ      = 0xC9,
98*4882a593Smuzhiyun 	CPL_SMT_READ_RPL      = 0xCA,
99*4882a593Smuzhiyun 	CPL_ARP_MISS_REQ      = 0xCD,
100*4882a593Smuzhiyun 	CPL_ARP_MISS_RPL      = 0xCE,
101*4882a593Smuzhiyun 	CPL_MIGRATE_C2T_REQ   = 0xDC,
102*4882a593Smuzhiyun 	CPL_MIGRATE_C2T_RPL   = 0xDD,
103*4882a593Smuzhiyun 	CPL_ERROR             = 0xD7,
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun 	/* internal: driver -> TOM */
106*4882a593Smuzhiyun 	CPL_MSS_CHANGE        = 0xE1
107*4882a593Smuzhiyun };
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun #define NUM_CPL_CMDS 256
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun enum CPL_error {
112*4882a593Smuzhiyun 	CPL_ERR_NONE               = 0,
113*4882a593Smuzhiyun 	CPL_ERR_TCAM_PARITY        = 1,
114*4882a593Smuzhiyun 	CPL_ERR_TCAM_FULL          = 3,
115*4882a593Smuzhiyun 	CPL_ERR_CONN_RESET         = 20,
116*4882a593Smuzhiyun 	CPL_ERR_CONN_EXIST         = 22,
117*4882a593Smuzhiyun 	CPL_ERR_ARP_MISS           = 23,
118*4882a593Smuzhiyun 	CPL_ERR_BAD_SYN            = 24,
119*4882a593Smuzhiyun 	CPL_ERR_CONN_TIMEDOUT      = 30,
120*4882a593Smuzhiyun 	CPL_ERR_XMIT_TIMEDOUT      = 31,
121*4882a593Smuzhiyun 	CPL_ERR_PERSIST_TIMEDOUT   = 32,
122*4882a593Smuzhiyun 	CPL_ERR_FINWAIT2_TIMEDOUT  = 33,
123*4882a593Smuzhiyun 	CPL_ERR_KEEPALIVE_TIMEDOUT = 34,
124*4882a593Smuzhiyun 	CPL_ERR_ABORT_FAILED       = 42,
125*4882a593Smuzhiyun 	CPL_ERR_GENERAL            = 99
126*4882a593Smuzhiyun };
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun enum {
129*4882a593Smuzhiyun 	CPL_CONN_POLICY_AUTO = 0,
130*4882a593Smuzhiyun 	CPL_CONN_POLICY_ASK  = 1,
131*4882a593Smuzhiyun 	CPL_CONN_POLICY_DENY = 3
132*4882a593Smuzhiyun };
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun enum {
135*4882a593Smuzhiyun 	ULP_MODE_NONE   = 0,
136*4882a593Smuzhiyun 	ULP_MODE_TCPDDP = 1,
137*4882a593Smuzhiyun 	ULP_MODE_ISCSI  = 2,
138*4882a593Smuzhiyun 	ULP_MODE_IWARP  = 3,
139*4882a593Smuzhiyun 	ULP_MODE_SSL    = 4
140*4882a593Smuzhiyun };
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun enum {
143*4882a593Smuzhiyun 	CPL_PASS_OPEN_ACCEPT,
144*4882a593Smuzhiyun 	CPL_PASS_OPEN_REJECT
145*4882a593Smuzhiyun };
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun enum {
148*4882a593Smuzhiyun 	CPL_ABORT_SEND_RST = 0,
149*4882a593Smuzhiyun 	CPL_ABORT_NO_RST,
150*4882a593Smuzhiyun 	CPL_ABORT_POST_CLOSE_REQ = 2
151*4882a593Smuzhiyun };
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun enum {                // TX_PKT_LSO ethernet types
154*4882a593Smuzhiyun 	CPL_ETH_II,
155*4882a593Smuzhiyun 	CPL_ETH_II_VLAN,
156*4882a593Smuzhiyun 	CPL_ETH_802_3,
157*4882a593Smuzhiyun 	CPL_ETH_802_3_VLAN
158*4882a593Smuzhiyun };
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun union opcode_tid {
161*4882a593Smuzhiyun 	u32 opcode_tid;
162*4882a593Smuzhiyun 	u8 opcode;
163*4882a593Smuzhiyun };
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun #define S_OPCODE 24
166*4882a593Smuzhiyun #define V_OPCODE(x) ((x) << S_OPCODE)
167*4882a593Smuzhiyun #define G_OPCODE(x) (((x) >> S_OPCODE) & 0xFF)
168*4882a593Smuzhiyun #define G_TID(x)    ((x) & 0xFFFFFF)
169*4882a593Smuzhiyun 
170*4882a593Smuzhiyun /* tid is assumed to be 24-bits */
171*4882a593Smuzhiyun #define MK_OPCODE_TID(opcode, tid) (V_OPCODE(opcode) | (tid))
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun #define OPCODE_TID(cmd) ((cmd)->ot.opcode_tid)
174*4882a593Smuzhiyun 
175*4882a593Smuzhiyun /* extract the TID from a CPL command */
176*4882a593Smuzhiyun #define GET_TID(cmd) (G_TID(ntohl(OPCODE_TID(cmd))))
177*4882a593Smuzhiyun 
178*4882a593Smuzhiyun struct tcp_options {
179*4882a593Smuzhiyun 	u16 mss;
180*4882a593Smuzhiyun 	u8 wsf;
181*4882a593Smuzhiyun #if defined(__LITTLE_ENDIAN_BITFIELD)
182*4882a593Smuzhiyun 	u8 rsvd:4;
183*4882a593Smuzhiyun 	u8 ecn:1;
184*4882a593Smuzhiyun 	u8 sack:1;
185*4882a593Smuzhiyun 	u8 tstamp:1;
186*4882a593Smuzhiyun #else
187*4882a593Smuzhiyun 	u8 tstamp:1;
188*4882a593Smuzhiyun 	u8 sack:1;
189*4882a593Smuzhiyun 	u8 ecn:1;
190*4882a593Smuzhiyun 	u8 rsvd:4;
191*4882a593Smuzhiyun #endif
192*4882a593Smuzhiyun };
193*4882a593Smuzhiyun 
194*4882a593Smuzhiyun struct cpl_pass_open_req {
195*4882a593Smuzhiyun 	union opcode_tid ot;
196*4882a593Smuzhiyun 	u16 local_port;
197*4882a593Smuzhiyun 	u16 peer_port;
198*4882a593Smuzhiyun 	u32 local_ip;
199*4882a593Smuzhiyun 	u32 peer_ip;
200*4882a593Smuzhiyun 	u32 opt0h;
201*4882a593Smuzhiyun 	u32 opt0l;
202*4882a593Smuzhiyun 	u32 peer_netmask;
203*4882a593Smuzhiyun 	u32 opt1;
204*4882a593Smuzhiyun };
205*4882a593Smuzhiyun 
206*4882a593Smuzhiyun struct cpl_pass_open_rpl {
207*4882a593Smuzhiyun 	union opcode_tid ot;
208*4882a593Smuzhiyun 	u16 local_port;
209*4882a593Smuzhiyun 	u16 peer_port;
210*4882a593Smuzhiyun 	u32 local_ip;
211*4882a593Smuzhiyun 	u32 peer_ip;
212*4882a593Smuzhiyun 	u8 resvd[7];
213*4882a593Smuzhiyun 	u8 status;
214*4882a593Smuzhiyun };
215*4882a593Smuzhiyun 
216*4882a593Smuzhiyun struct cpl_pass_establish {
217*4882a593Smuzhiyun 	union opcode_tid ot;
218*4882a593Smuzhiyun 	u16 local_port;
219*4882a593Smuzhiyun 	u16 peer_port;
220*4882a593Smuzhiyun 	u32 local_ip;
221*4882a593Smuzhiyun 	u32 peer_ip;
222*4882a593Smuzhiyun 	u32 tos_tid;
223*4882a593Smuzhiyun 	u8  l2t_idx;
224*4882a593Smuzhiyun 	u8  rsvd[3];
225*4882a593Smuzhiyun 	u32 snd_isn;
226*4882a593Smuzhiyun 	u32 rcv_isn;
227*4882a593Smuzhiyun };
228*4882a593Smuzhiyun 
229*4882a593Smuzhiyun struct cpl_pass_accept_req {
230*4882a593Smuzhiyun 	union opcode_tid ot;
231*4882a593Smuzhiyun 	u16 local_port;
232*4882a593Smuzhiyun 	u16 peer_port;
233*4882a593Smuzhiyun 	u32 local_ip;
234*4882a593Smuzhiyun 	u32 peer_ip;
235*4882a593Smuzhiyun 	u32 tos_tid;
236*4882a593Smuzhiyun 	struct tcp_options tcp_options;
237*4882a593Smuzhiyun 	u8  dst_mac[6];
238*4882a593Smuzhiyun 	u16 vlan_tag;
239*4882a593Smuzhiyun 	u8  src_mac[6];
240*4882a593Smuzhiyun 	u8  rsvd[2];
241*4882a593Smuzhiyun 	u32 rcv_isn;
242*4882a593Smuzhiyun 	u32 unknown_tcp_options;
243*4882a593Smuzhiyun };
244*4882a593Smuzhiyun 
245*4882a593Smuzhiyun struct cpl_pass_accept_rpl {
246*4882a593Smuzhiyun 	union opcode_tid ot;
247*4882a593Smuzhiyun 	u32 rsvd0;
248*4882a593Smuzhiyun 	u32 rsvd1;
249*4882a593Smuzhiyun 	u32 peer_ip;
250*4882a593Smuzhiyun 	u32 opt0h;
251*4882a593Smuzhiyun 	union {
252*4882a593Smuzhiyun 		u32 opt0l;
253*4882a593Smuzhiyun 		struct {
254*4882a593Smuzhiyun 		    u8 rsvd[3];
255*4882a593Smuzhiyun 		    u8 status;
256*4882a593Smuzhiyun 		};
257*4882a593Smuzhiyun 	};
258*4882a593Smuzhiyun };
259*4882a593Smuzhiyun 
260*4882a593Smuzhiyun struct cpl_act_open_req {
261*4882a593Smuzhiyun 	union opcode_tid ot;
262*4882a593Smuzhiyun 	u16 local_port;
263*4882a593Smuzhiyun 	u16 peer_port;
264*4882a593Smuzhiyun 	u32 local_ip;
265*4882a593Smuzhiyun 	u32 peer_ip;
266*4882a593Smuzhiyun 	u32 opt0h;
267*4882a593Smuzhiyun 	u32 opt0l;
268*4882a593Smuzhiyun 	u32 iff_vlantag;
269*4882a593Smuzhiyun 	u32 rsvd;
270*4882a593Smuzhiyun };
271*4882a593Smuzhiyun 
272*4882a593Smuzhiyun struct cpl_act_open_rpl {
273*4882a593Smuzhiyun 	union opcode_tid ot;
274*4882a593Smuzhiyun 	u16 local_port;
275*4882a593Smuzhiyun 	u16 peer_port;
276*4882a593Smuzhiyun 	u32 local_ip;
277*4882a593Smuzhiyun 	u32 peer_ip;
278*4882a593Smuzhiyun 	u32 new_tid;
279*4882a593Smuzhiyun 	u8  rsvd[3];
280*4882a593Smuzhiyun 	u8  status;
281*4882a593Smuzhiyun };
282*4882a593Smuzhiyun 
283*4882a593Smuzhiyun struct cpl_act_establish {
284*4882a593Smuzhiyun 	union opcode_tid ot;
285*4882a593Smuzhiyun 	u16 local_port;
286*4882a593Smuzhiyun 	u16 peer_port;
287*4882a593Smuzhiyun 	u32 local_ip;
288*4882a593Smuzhiyun 	u32 peer_ip;
289*4882a593Smuzhiyun 	u32 tos_tid;
290*4882a593Smuzhiyun 	u32 rsvd;
291*4882a593Smuzhiyun 	u32 snd_isn;
292*4882a593Smuzhiyun 	u32 rcv_isn;
293*4882a593Smuzhiyun };
294*4882a593Smuzhiyun 
295*4882a593Smuzhiyun struct cpl_get_tcb {
296*4882a593Smuzhiyun 	union opcode_tid ot;
297*4882a593Smuzhiyun 	u32 rsvd;
298*4882a593Smuzhiyun };
299*4882a593Smuzhiyun 
300*4882a593Smuzhiyun struct cpl_get_tcb_rpl {
301*4882a593Smuzhiyun 	union opcode_tid ot;
302*4882a593Smuzhiyun 	u16 len;
303*4882a593Smuzhiyun 	u8 rsvd;
304*4882a593Smuzhiyun 	u8 status;
305*4882a593Smuzhiyun };
306*4882a593Smuzhiyun 
307*4882a593Smuzhiyun struct cpl_set_tcb {
308*4882a593Smuzhiyun 	union opcode_tid ot;
309*4882a593Smuzhiyun 	u16 len;
310*4882a593Smuzhiyun 	u16 rsvd;
311*4882a593Smuzhiyun };
312*4882a593Smuzhiyun 
313*4882a593Smuzhiyun struct cpl_set_tcb_field {
314*4882a593Smuzhiyun 	union opcode_tid ot;
315*4882a593Smuzhiyun 	u8 rsvd[3];
316*4882a593Smuzhiyun 	u8 offset;
317*4882a593Smuzhiyun 	u32 mask;
318*4882a593Smuzhiyun 	u32 val;
319*4882a593Smuzhiyun };
320*4882a593Smuzhiyun 
321*4882a593Smuzhiyun struct cpl_set_tcb_rpl {
322*4882a593Smuzhiyun 	union opcode_tid ot;
323*4882a593Smuzhiyun 	u8 rsvd[3];
324*4882a593Smuzhiyun 	u8 status;
325*4882a593Smuzhiyun };
326*4882a593Smuzhiyun 
327*4882a593Smuzhiyun struct cpl_pcmd {
328*4882a593Smuzhiyun 	union opcode_tid ot;
329*4882a593Smuzhiyun 	u16 dlen_in;
330*4882a593Smuzhiyun 	u16 dlen_out;
331*4882a593Smuzhiyun 	u32 pcmd_parm[2];
332*4882a593Smuzhiyun };
333*4882a593Smuzhiyun 
334*4882a593Smuzhiyun struct cpl_pcmd_read {
335*4882a593Smuzhiyun 	union opcode_tid ot;
336*4882a593Smuzhiyun 	u32 rsvd1;
337*4882a593Smuzhiyun 	u16 rsvd2;
338*4882a593Smuzhiyun 	u32 addr;
339*4882a593Smuzhiyun 	u16 len;
340*4882a593Smuzhiyun };
341*4882a593Smuzhiyun 
342*4882a593Smuzhiyun struct cpl_pcmd_read_rpl {
343*4882a593Smuzhiyun 	union opcode_tid ot;
344*4882a593Smuzhiyun 	u16 len;
345*4882a593Smuzhiyun };
346*4882a593Smuzhiyun 
347*4882a593Smuzhiyun struct cpl_close_con_req {
348*4882a593Smuzhiyun 	union opcode_tid ot;
349*4882a593Smuzhiyun 	u32 rsvd;
350*4882a593Smuzhiyun };
351*4882a593Smuzhiyun 
352*4882a593Smuzhiyun struct cpl_close_con_rpl {
353*4882a593Smuzhiyun 	union opcode_tid ot;
354*4882a593Smuzhiyun 	u8 rsvd[3];
355*4882a593Smuzhiyun 	u8 status;
356*4882a593Smuzhiyun 	u32 snd_nxt;
357*4882a593Smuzhiyun 	u32 rcv_nxt;
358*4882a593Smuzhiyun };
359*4882a593Smuzhiyun 
360*4882a593Smuzhiyun struct cpl_close_listserv_req {
361*4882a593Smuzhiyun 	union opcode_tid ot;
362*4882a593Smuzhiyun 	u32 rsvd;
363*4882a593Smuzhiyun };
364*4882a593Smuzhiyun 
365*4882a593Smuzhiyun struct cpl_close_listserv_rpl {
366*4882a593Smuzhiyun 	union opcode_tid ot;
367*4882a593Smuzhiyun 	u8 rsvd[3];
368*4882a593Smuzhiyun 	u8 status;
369*4882a593Smuzhiyun };
370*4882a593Smuzhiyun 
371*4882a593Smuzhiyun struct cpl_abort_req {
372*4882a593Smuzhiyun 	union opcode_tid ot;
373*4882a593Smuzhiyun 	u32 rsvd0;
374*4882a593Smuzhiyun 	u8  rsvd1;
375*4882a593Smuzhiyun 	u8  cmd;
376*4882a593Smuzhiyun 	u8  rsvd2[6];
377*4882a593Smuzhiyun };
378*4882a593Smuzhiyun 
379*4882a593Smuzhiyun struct cpl_abort_rpl {
380*4882a593Smuzhiyun 	union opcode_tid ot;
381*4882a593Smuzhiyun 	u32 rsvd0;
382*4882a593Smuzhiyun 	u8  rsvd1;
383*4882a593Smuzhiyun 	u8  status;
384*4882a593Smuzhiyun 	u8  rsvd2[6];
385*4882a593Smuzhiyun };
386*4882a593Smuzhiyun 
387*4882a593Smuzhiyun struct cpl_peer_close {
388*4882a593Smuzhiyun 	union opcode_tid ot;
389*4882a593Smuzhiyun 	u32 rsvd;
390*4882a593Smuzhiyun };
391*4882a593Smuzhiyun 
392*4882a593Smuzhiyun struct cpl_tx_data {
393*4882a593Smuzhiyun 	union opcode_tid ot;
394*4882a593Smuzhiyun 	u32 len;
395*4882a593Smuzhiyun 	u32 rsvd0;
396*4882a593Smuzhiyun 	u16 urg;
397*4882a593Smuzhiyun 	u16 flags;
398*4882a593Smuzhiyun };
399*4882a593Smuzhiyun 
400*4882a593Smuzhiyun struct cpl_tx_data_ack {
401*4882a593Smuzhiyun 	union opcode_tid ot;
402*4882a593Smuzhiyun 	u32 ack_seq;
403*4882a593Smuzhiyun };
404*4882a593Smuzhiyun 
405*4882a593Smuzhiyun struct cpl_rx_data {
406*4882a593Smuzhiyun 	union opcode_tid ot;
407*4882a593Smuzhiyun 	u32 len;
408*4882a593Smuzhiyun 	u32 seq;
409*4882a593Smuzhiyun 	u16 urg;
410*4882a593Smuzhiyun 	u8  rsvd;
411*4882a593Smuzhiyun 	u8  status;
412*4882a593Smuzhiyun };
413*4882a593Smuzhiyun 
414*4882a593Smuzhiyun struct cpl_rx_data_ack {
415*4882a593Smuzhiyun 	union opcode_tid ot;
416*4882a593Smuzhiyun 	u32 credit;
417*4882a593Smuzhiyun };
418*4882a593Smuzhiyun 
419*4882a593Smuzhiyun struct cpl_rx_data_ddp {
420*4882a593Smuzhiyun 	union opcode_tid ot;
421*4882a593Smuzhiyun 	u32 len;
422*4882a593Smuzhiyun 	u32 seq;
423*4882a593Smuzhiyun 	u32 nxt_seq;
424*4882a593Smuzhiyun 	u32 ulp_crc;
425*4882a593Smuzhiyun 	u16 ddp_status;
426*4882a593Smuzhiyun 	u8  rsvd;
427*4882a593Smuzhiyun 	u8  status;
428*4882a593Smuzhiyun };
429*4882a593Smuzhiyun 
430*4882a593Smuzhiyun /*
431*4882a593Smuzhiyun  * We want this header's alignment to be no more stringent than 2-byte aligned.
432*4882a593Smuzhiyun  * All fields are u8 or u16 except for the length.  However that field is not
433*4882a593Smuzhiyun  * used so we break it into 2 16-bit parts to easily meet our alignment needs.
434*4882a593Smuzhiyun  */
435*4882a593Smuzhiyun struct cpl_tx_pkt {
436*4882a593Smuzhiyun 	u8 opcode;
437*4882a593Smuzhiyun #if defined(__LITTLE_ENDIAN_BITFIELD)
438*4882a593Smuzhiyun 	u8 iff:4;
439*4882a593Smuzhiyun 	u8 ip_csum_dis:1;
440*4882a593Smuzhiyun 	u8 l4_csum_dis:1;
441*4882a593Smuzhiyun 	u8 vlan_valid:1;
442*4882a593Smuzhiyun 	u8 rsvd:1;
443*4882a593Smuzhiyun #else
444*4882a593Smuzhiyun 	u8 rsvd:1;
445*4882a593Smuzhiyun 	u8 vlan_valid:1;
446*4882a593Smuzhiyun 	u8 l4_csum_dis:1;
447*4882a593Smuzhiyun 	u8 ip_csum_dis:1;
448*4882a593Smuzhiyun 	u8 iff:4;
449*4882a593Smuzhiyun #endif
450*4882a593Smuzhiyun 	u16 vlan;
451*4882a593Smuzhiyun 	u16 len_hi;
452*4882a593Smuzhiyun 	u16 len_lo;
453*4882a593Smuzhiyun };
454*4882a593Smuzhiyun 
455*4882a593Smuzhiyun struct cpl_tx_pkt_lso {
456*4882a593Smuzhiyun 	u8 opcode;
457*4882a593Smuzhiyun #if defined(__LITTLE_ENDIAN_BITFIELD)
458*4882a593Smuzhiyun 	u8 iff:4;
459*4882a593Smuzhiyun 	u8 ip_csum_dis:1;
460*4882a593Smuzhiyun 	u8 l4_csum_dis:1;
461*4882a593Smuzhiyun 	u8 vlan_valid:1;
462*4882a593Smuzhiyun 	u8 :1;
463*4882a593Smuzhiyun #else
464*4882a593Smuzhiyun 	u8 :1;
465*4882a593Smuzhiyun 	u8 vlan_valid:1;
466*4882a593Smuzhiyun 	u8 l4_csum_dis:1;
467*4882a593Smuzhiyun 	u8 ip_csum_dis:1;
468*4882a593Smuzhiyun 	u8 iff:4;
469*4882a593Smuzhiyun #endif
470*4882a593Smuzhiyun 	u16 vlan;
471*4882a593Smuzhiyun 	__be32 len;
472*4882a593Smuzhiyun 
473*4882a593Smuzhiyun 	u8 rsvd[5];
474*4882a593Smuzhiyun #if defined(__LITTLE_ENDIAN_BITFIELD)
475*4882a593Smuzhiyun 	u8 tcp_hdr_words:4;
476*4882a593Smuzhiyun 	u8 ip_hdr_words:4;
477*4882a593Smuzhiyun #else
478*4882a593Smuzhiyun 	u8 ip_hdr_words:4;
479*4882a593Smuzhiyun 	u8 tcp_hdr_words:4;
480*4882a593Smuzhiyun #endif
481*4882a593Smuzhiyun 	__be16 eth_type_mss;
482*4882a593Smuzhiyun };
483*4882a593Smuzhiyun 
484*4882a593Smuzhiyun struct cpl_rx_pkt {
485*4882a593Smuzhiyun 	u8 opcode;
486*4882a593Smuzhiyun #if defined(__LITTLE_ENDIAN_BITFIELD)
487*4882a593Smuzhiyun 	u8 iff:4;
488*4882a593Smuzhiyun 	u8 csum_valid:1;
489*4882a593Smuzhiyun 	u8 bad_pkt:1;
490*4882a593Smuzhiyun 	u8 vlan_valid:1;
491*4882a593Smuzhiyun 	u8 rsvd:1;
492*4882a593Smuzhiyun #else
493*4882a593Smuzhiyun 	u8 rsvd:1;
494*4882a593Smuzhiyun 	u8 vlan_valid:1;
495*4882a593Smuzhiyun 	u8 bad_pkt:1;
496*4882a593Smuzhiyun 	u8 csum_valid:1;
497*4882a593Smuzhiyun 	u8 iff:4;
498*4882a593Smuzhiyun #endif
499*4882a593Smuzhiyun 	u16 csum;
500*4882a593Smuzhiyun 	u16 vlan;
501*4882a593Smuzhiyun 	u16 len;
502*4882a593Smuzhiyun };
503*4882a593Smuzhiyun 
504*4882a593Smuzhiyun struct cpl_l2t_write_req {
505*4882a593Smuzhiyun 	union opcode_tid ot;
506*4882a593Smuzhiyun 	u32 params;
507*4882a593Smuzhiyun 	u8 rsvd1[2];
508*4882a593Smuzhiyun 	u8 dst_mac[6];
509*4882a593Smuzhiyun };
510*4882a593Smuzhiyun 
511*4882a593Smuzhiyun struct cpl_l2t_write_rpl {
512*4882a593Smuzhiyun 	union opcode_tid ot;
513*4882a593Smuzhiyun 	u8 status;
514*4882a593Smuzhiyun 	u8 rsvd[3];
515*4882a593Smuzhiyun };
516*4882a593Smuzhiyun 
517*4882a593Smuzhiyun struct cpl_l2t_read_req {
518*4882a593Smuzhiyun 	union opcode_tid ot;
519*4882a593Smuzhiyun 	u8 rsvd[3];
520*4882a593Smuzhiyun 	u8 l2t_idx;
521*4882a593Smuzhiyun };
522*4882a593Smuzhiyun 
523*4882a593Smuzhiyun struct cpl_l2t_read_rpl {
524*4882a593Smuzhiyun 	union opcode_tid ot;
525*4882a593Smuzhiyun 	u32 params;
526*4882a593Smuzhiyun 	u8 rsvd1[2];
527*4882a593Smuzhiyun 	u8 dst_mac[6];
528*4882a593Smuzhiyun };
529*4882a593Smuzhiyun 
530*4882a593Smuzhiyun struct cpl_smt_write_req {
531*4882a593Smuzhiyun 	union opcode_tid ot;
532*4882a593Smuzhiyun 	u8 rsvd0;
533*4882a593Smuzhiyun #if defined(__LITTLE_ENDIAN_BITFIELD)
534*4882a593Smuzhiyun 	u8 rsvd1:1;
535*4882a593Smuzhiyun 	u8 mtu_idx:3;
536*4882a593Smuzhiyun 	u8 iff:4;
537*4882a593Smuzhiyun #else
538*4882a593Smuzhiyun 	u8 iff:4;
539*4882a593Smuzhiyun 	u8 mtu_idx:3;
540*4882a593Smuzhiyun 	u8 rsvd1:1;
541*4882a593Smuzhiyun #endif
542*4882a593Smuzhiyun 	u16 rsvd2;
543*4882a593Smuzhiyun 	u16 rsvd3;
544*4882a593Smuzhiyun 	u8  src_mac1[6];
545*4882a593Smuzhiyun 	u16 rsvd4;
546*4882a593Smuzhiyun 	u8  src_mac0[6];
547*4882a593Smuzhiyun };
548*4882a593Smuzhiyun 
549*4882a593Smuzhiyun struct cpl_smt_write_rpl {
550*4882a593Smuzhiyun 	union opcode_tid ot;
551*4882a593Smuzhiyun 	u8 status;
552*4882a593Smuzhiyun 	u8 rsvd[3];
553*4882a593Smuzhiyun };
554*4882a593Smuzhiyun 
555*4882a593Smuzhiyun struct cpl_smt_read_req {
556*4882a593Smuzhiyun 	union opcode_tid ot;
557*4882a593Smuzhiyun 	u8 rsvd0;
558*4882a593Smuzhiyun #if defined(__LITTLE_ENDIAN_BITFIELD)
559*4882a593Smuzhiyun 	u8 rsvd1:4;
560*4882a593Smuzhiyun 	u8 iff:4;
561*4882a593Smuzhiyun #else
562*4882a593Smuzhiyun 	u8 iff:4;
563*4882a593Smuzhiyun 	u8 rsvd1:4;
564*4882a593Smuzhiyun #endif
565*4882a593Smuzhiyun 	u16 rsvd2;
566*4882a593Smuzhiyun };
567*4882a593Smuzhiyun 
568*4882a593Smuzhiyun struct cpl_smt_read_rpl {
569*4882a593Smuzhiyun 	union opcode_tid ot;
570*4882a593Smuzhiyun 	u8 status;
571*4882a593Smuzhiyun #if defined(__LITTLE_ENDIAN_BITFIELD)
572*4882a593Smuzhiyun 	u8 rsvd1:1;
573*4882a593Smuzhiyun 	u8 mtu_idx:3;
574*4882a593Smuzhiyun 	u8 rsvd0:4;
575*4882a593Smuzhiyun #else
576*4882a593Smuzhiyun 	u8 rsvd0:4;
577*4882a593Smuzhiyun 	u8 mtu_idx:3;
578*4882a593Smuzhiyun 	u8 rsvd1:1;
579*4882a593Smuzhiyun #endif
580*4882a593Smuzhiyun 	u16 rsvd2;
581*4882a593Smuzhiyun 	u16 rsvd3;
582*4882a593Smuzhiyun 	u8  src_mac1[6];
583*4882a593Smuzhiyun 	u16 rsvd4;
584*4882a593Smuzhiyun 	u8  src_mac0[6];
585*4882a593Smuzhiyun };
586*4882a593Smuzhiyun 
587*4882a593Smuzhiyun struct cpl_rte_delete_req {
588*4882a593Smuzhiyun 	union opcode_tid ot;
589*4882a593Smuzhiyun 	u32 params;
590*4882a593Smuzhiyun };
591*4882a593Smuzhiyun 
592*4882a593Smuzhiyun struct cpl_rte_delete_rpl {
593*4882a593Smuzhiyun 	union opcode_tid ot;
594*4882a593Smuzhiyun 	u8 status;
595*4882a593Smuzhiyun 	u8 rsvd[3];
596*4882a593Smuzhiyun };
597*4882a593Smuzhiyun 
598*4882a593Smuzhiyun struct cpl_rte_write_req {
599*4882a593Smuzhiyun 	union opcode_tid ot;
600*4882a593Smuzhiyun 	u32 params;
601*4882a593Smuzhiyun 	u32 netmask;
602*4882a593Smuzhiyun 	u32 faddr;
603*4882a593Smuzhiyun };
604*4882a593Smuzhiyun 
605*4882a593Smuzhiyun struct cpl_rte_write_rpl {
606*4882a593Smuzhiyun 	union opcode_tid ot;
607*4882a593Smuzhiyun 	u8 status;
608*4882a593Smuzhiyun 	u8 rsvd[3];
609*4882a593Smuzhiyun };
610*4882a593Smuzhiyun 
611*4882a593Smuzhiyun struct cpl_rte_read_req {
612*4882a593Smuzhiyun 	union opcode_tid ot;
613*4882a593Smuzhiyun 	u32 params;
614*4882a593Smuzhiyun };
615*4882a593Smuzhiyun 
616*4882a593Smuzhiyun struct cpl_rte_read_rpl {
617*4882a593Smuzhiyun 	union opcode_tid ot;
618*4882a593Smuzhiyun 	u8 status;
619*4882a593Smuzhiyun 	u8 rsvd0[2];
620*4882a593Smuzhiyun 	u8 l2t_idx;
621*4882a593Smuzhiyun #if defined(__LITTLE_ENDIAN_BITFIELD)
622*4882a593Smuzhiyun 	u8 rsvd1:7;
623*4882a593Smuzhiyun 	u8 select:1;
624*4882a593Smuzhiyun #else
625*4882a593Smuzhiyun 	u8 select:1;
626*4882a593Smuzhiyun 	u8 rsvd1:7;
627*4882a593Smuzhiyun #endif
628*4882a593Smuzhiyun 	u8 rsvd2[3];
629*4882a593Smuzhiyun 	u32 addr;
630*4882a593Smuzhiyun };
631*4882a593Smuzhiyun 
632*4882a593Smuzhiyun struct cpl_mss_change {
633*4882a593Smuzhiyun 	union opcode_tid ot;
634*4882a593Smuzhiyun 	u32 mss;
635*4882a593Smuzhiyun };
636*4882a593Smuzhiyun 
637*4882a593Smuzhiyun #endif /* _CXGB_CPL5_CMD_H_ */
638*4882a593Smuzhiyun 
639