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