162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*****************************************************************************
362306a36Sopenharmony_ci *                                                                           *
462306a36Sopenharmony_ci * File: cpl5_cmd.h                                                          *
562306a36Sopenharmony_ci * $Revision: 1.6 $                                                          *
662306a36Sopenharmony_ci * $Date: 2005/06/21 18:29:47 $                                              *
762306a36Sopenharmony_ci * Description:                                                              *
862306a36Sopenharmony_ci *  part of the Chelsio 10Gb Ethernet Driver.                                *
962306a36Sopenharmony_ci *                                                                           *
1062306a36Sopenharmony_ci *                                                                           *
1162306a36Sopenharmony_ci * http://www.chelsio.com                                                    *
1262306a36Sopenharmony_ci *                                                                           *
1362306a36Sopenharmony_ci * Copyright (c) 2003 - 2005 Chelsio Communications, Inc.                    *
1462306a36Sopenharmony_ci * All rights reserved.                                                      *
1562306a36Sopenharmony_ci *                                                                           *
1662306a36Sopenharmony_ci * Maintainers: maintainers@chelsio.com                                      *
1762306a36Sopenharmony_ci *                                                                           *
1862306a36Sopenharmony_ci * Authors: Dimitrios Michailidis   <dm@chelsio.com>                         *
1962306a36Sopenharmony_ci *          Tina Yang               <tainay@chelsio.com>                     *
2062306a36Sopenharmony_ci *          Felix Marti             <felix@chelsio.com>                      *
2162306a36Sopenharmony_ci *          Scott Bardone           <sbardone@chelsio.com>                   *
2262306a36Sopenharmony_ci *          Kurt Ottaway            <kottaway@chelsio.com>                   *
2362306a36Sopenharmony_ci *          Frank DiMambro          <frank@chelsio.com>                      *
2462306a36Sopenharmony_ci *                                                                           *
2562306a36Sopenharmony_ci * History:                                                                  *
2662306a36Sopenharmony_ci *                                                                           *
2762306a36Sopenharmony_ci ****************************************************************************/
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci#ifndef _CXGB_CPL5_CMD_H_
3062306a36Sopenharmony_ci#define _CXGB_CPL5_CMD_H_
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci#include <asm/byteorder.h>
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci#if !defined(__LITTLE_ENDIAN_BITFIELD) && !defined(__BIG_ENDIAN_BITFIELD)
3562306a36Sopenharmony_ci#error "Adjust your <asm/byteorder.h> defines"
3662306a36Sopenharmony_ci#endif
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_cienum CPL_opcode {
3962306a36Sopenharmony_ci	CPL_PASS_OPEN_REQ     = 0x1,
4062306a36Sopenharmony_ci	CPL_PASS_OPEN_RPL     = 0x2,
4162306a36Sopenharmony_ci	CPL_PASS_ESTABLISH    = 0x3,
4262306a36Sopenharmony_ci	CPL_PASS_ACCEPT_REQ   = 0xE,
4362306a36Sopenharmony_ci	CPL_PASS_ACCEPT_RPL   = 0x4,
4462306a36Sopenharmony_ci	CPL_ACT_OPEN_REQ      = 0x5,
4562306a36Sopenharmony_ci	CPL_ACT_OPEN_RPL      = 0x6,
4662306a36Sopenharmony_ci	CPL_CLOSE_CON_REQ     = 0x7,
4762306a36Sopenharmony_ci	CPL_CLOSE_CON_RPL     = 0x8,
4862306a36Sopenharmony_ci	CPL_CLOSE_LISTSRV_REQ = 0x9,
4962306a36Sopenharmony_ci	CPL_CLOSE_LISTSRV_RPL = 0xA,
5062306a36Sopenharmony_ci	CPL_ABORT_REQ         = 0xB,
5162306a36Sopenharmony_ci	CPL_ABORT_RPL         = 0xC,
5262306a36Sopenharmony_ci	CPL_PEER_CLOSE        = 0xD,
5362306a36Sopenharmony_ci	CPL_ACT_ESTABLISH     = 0x17,
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci	CPL_GET_TCB           = 0x24,
5662306a36Sopenharmony_ci	CPL_GET_TCB_RPL       = 0x25,
5762306a36Sopenharmony_ci	CPL_SET_TCB           = 0x26,
5862306a36Sopenharmony_ci	CPL_SET_TCB_FIELD     = 0x27,
5962306a36Sopenharmony_ci	CPL_SET_TCB_RPL       = 0x28,
6062306a36Sopenharmony_ci	CPL_PCMD              = 0x29,
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci	CPL_PCMD_READ         = 0x31,
6362306a36Sopenharmony_ci	CPL_PCMD_READ_RPL     = 0x32,
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci	CPL_RX_DATA           = 0xA0,
6762306a36Sopenharmony_ci	CPL_RX_DATA_DDP       = 0xA1,
6862306a36Sopenharmony_ci	CPL_RX_DATA_ACK       = 0xA3,
6962306a36Sopenharmony_ci	CPL_RX_PKT            = 0xAD,
7062306a36Sopenharmony_ci	CPL_RX_ISCSI_HDR      = 0xAF,
7162306a36Sopenharmony_ci	CPL_TX_DATA_ACK       = 0xB0,
7262306a36Sopenharmony_ci	CPL_TX_DATA           = 0xB1,
7362306a36Sopenharmony_ci	CPL_TX_PKT            = 0xB2,
7462306a36Sopenharmony_ci	CPL_TX_PKT_LSO        = 0xB6,
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci	CPL_RTE_DELETE_REQ    = 0xC0,
7762306a36Sopenharmony_ci	CPL_RTE_DELETE_RPL    = 0xC1,
7862306a36Sopenharmony_ci	CPL_RTE_WRITE_REQ     = 0xC2,
7962306a36Sopenharmony_ci	CPL_RTE_WRITE_RPL     = 0xD3,
8062306a36Sopenharmony_ci	CPL_RTE_READ_REQ      = 0xC3,
8162306a36Sopenharmony_ci	CPL_RTE_READ_RPL      = 0xC4,
8262306a36Sopenharmony_ci	CPL_L2T_WRITE_REQ     = 0xC5,
8362306a36Sopenharmony_ci	CPL_L2T_WRITE_RPL     = 0xD4,
8462306a36Sopenharmony_ci	CPL_L2T_READ_REQ      = 0xC6,
8562306a36Sopenharmony_ci	CPL_L2T_READ_RPL      = 0xC7,
8662306a36Sopenharmony_ci	CPL_SMT_WRITE_REQ     = 0xC8,
8762306a36Sopenharmony_ci	CPL_SMT_WRITE_RPL     = 0xD5,
8862306a36Sopenharmony_ci	CPL_SMT_READ_REQ      = 0xC9,
8962306a36Sopenharmony_ci	CPL_SMT_READ_RPL      = 0xCA,
9062306a36Sopenharmony_ci	CPL_ARP_MISS_REQ      = 0xCD,
9162306a36Sopenharmony_ci	CPL_ARP_MISS_RPL      = 0xCE,
9262306a36Sopenharmony_ci	CPL_MIGRATE_C2T_REQ   = 0xDC,
9362306a36Sopenharmony_ci	CPL_MIGRATE_C2T_RPL   = 0xDD,
9462306a36Sopenharmony_ci	CPL_ERROR             = 0xD7,
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_ci	/* internal: driver -> TOM */
9762306a36Sopenharmony_ci	CPL_MSS_CHANGE        = 0xE1
9862306a36Sopenharmony_ci};
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ci#define NUM_CPL_CMDS 256
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_cienum CPL_error {
10362306a36Sopenharmony_ci	CPL_ERR_NONE               = 0,
10462306a36Sopenharmony_ci	CPL_ERR_TCAM_PARITY        = 1,
10562306a36Sopenharmony_ci	CPL_ERR_TCAM_FULL          = 3,
10662306a36Sopenharmony_ci	CPL_ERR_CONN_RESET         = 20,
10762306a36Sopenharmony_ci	CPL_ERR_CONN_EXIST         = 22,
10862306a36Sopenharmony_ci	CPL_ERR_ARP_MISS           = 23,
10962306a36Sopenharmony_ci	CPL_ERR_BAD_SYN            = 24,
11062306a36Sopenharmony_ci	CPL_ERR_CONN_TIMEDOUT      = 30,
11162306a36Sopenharmony_ci	CPL_ERR_XMIT_TIMEDOUT      = 31,
11262306a36Sopenharmony_ci	CPL_ERR_PERSIST_TIMEDOUT   = 32,
11362306a36Sopenharmony_ci	CPL_ERR_FINWAIT2_TIMEDOUT  = 33,
11462306a36Sopenharmony_ci	CPL_ERR_KEEPALIVE_TIMEDOUT = 34,
11562306a36Sopenharmony_ci	CPL_ERR_ABORT_FAILED       = 42,
11662306a36Sopenharmony_ci	CPL_ERR_GENERAL            = 99
11762306a36Sopenharmony_ci};
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_cienum {
12062306a36Sopenharmony_ci	CPL_CONN_POLICY_AUTO = 0,
12162306a36Sopenharmony_ci	CPL_CONN_POLICY_ASK  = 1,
12262306a36Sopenharmony_ci	CPL_CONN_POLICY_DENY = 3
12362306a36Sopenharmony_ci};
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_cienum {
12662306a36Sopenharmony_ci	ULP_MODE_NONE   = 0,
12762306a36Sopenharmony_ci	ULP_MODE_TCPDDP = 1,
12862306a36Sopenharmony_ci	ULP_MODE_ISCSI  = 2,
12962306a36Sopenharmony_ci	ULP_MODE_IWARP  = 3,
13062306a36Sopenharmony_ci	ULP_MODE_SSL    = 4
13162306a36Sopenharmony_ci};
13262306a36Sopenharmony_ci
13362306a36Sopenharmony_cienum {
13462306a36Sopenharmony_ci	CPL_PASS_OPEN_ACCEPT,
13562306a36Sopenharmony_ci	CPL_PASS_OPEN_REJECT
13662306a36Sopenharmony_ci};
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_cienum {
13962306a36Sopenharmony_ci	CPL_ABORT_SEND_RST = 0,
14062306a36Sopenharmony_ci	CPL_ABORT_NO_RST,
14162306a36Sopenharmony_ci	CPL_ABORT_POST_CLOSE_REQ = 2
14262306a36Sopenharmony_ci};
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_cienum {                // TX_PKT_LSO ethernet types
14562306a36Sopenharmony_ci	CPL_ETH_II,
14662306a36Sopenharmony_ci	CPL_ETH_II_VLAN,
14762306a36Sopenharmony_ci	CPL_ETH_802_3,
14862306a36Sopenharmony_ci	CPL_ETH_802_3_VLAN
14962306a36Sopenharmony_ci};
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ciunion opcode_tid {
15262306a36Sopenharmony_ci	u32 opcode_tid;
15362306a36Sopenharmony_ci	u8 opcode;
15462306a36Sopenharmony_ci};
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ci#define S_OPCODE 24
15762306a36Sopenharmony_ci#define V_OPCODE(x) ((x) << S_OPCODE)
15862306a36Sopenharmony_ci#define G_OPCODE(x) (((x) >> S_OPCODE) & 0xFF)
15962306a36Sopenharmony_ci#define G_TID(x)    ((x) & 0xFFFFFF)
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ci/* tid is assumed to be 24-bits */
16262306a36Sopenharmony_ci#define MK_OPCODE_TID(opcode, tid) (V_OPCODE(opcode) | (tid))
16362306a36Sopenharmony_ci
16462306a36Sopenharmony_ci#define OPCODE_TID(cmd) ((cmd)->ot.opcode_tid)
16562306a36Sopenharmony_ci
16662306a36Sopenharmony_ci/* extract the TID from a CPL command */
16762306a36Sopenharmony_ci#define GET_TID(cmd) (G_TID(ntohl(OPCODE_TID(cmd))))
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_cistruct tcp_options {
17062306a36Sopenharmony_ci	u16 mss;
17162306a36Sopenharmony_ci	u8 wsf;
17262306a36Sopenharmony_ci#if defined(__LITTLE_ENDIAN_BITFIELD)
17362306a36Sopenharmony_ci	u8 rsvd:4;
17462306a36Sopenharmony_ci	u8 ecn:1;
17562306a36Sopenharmony_ci	u8 sack:1;
17662306a36Sopenharmony_ci	u8 tstamp:1;
17762306a36Sopenharmony_ci#else
17862306a36Sopenharmony_ci	u8 tstamp:1;
17962306a36Sopenharmony_ci	u8 sack:1;
18062306a36Sopenharmony_ci	u8 ecn:1;
18162306a36Sopenharmony_ci	u8 rsvd:4;
18262306a36Sopenharmony_ci#endif
18362306a36Sopenharmony_ci};
18462306a36Sopenharmony_ci
18562306a36Sopenharmony_cistruct cpl_pass_open_req {
18662306a36Sopenharmony_ci	union opcode_tid ot;
18762306a36Sopenharmony_ci	u16 local_port;
18862306a36Sopenharmony_ci	u16 peer_port;
18962306a36Sopenharmony_ci	u32 local_ip;
19062306a36Sopenharmony_ci	u32 peer_ip;
19162306a36Sopenharmony_ci	u32 opt0h;
19262306a36Sopenharmony_ci	u32 opt0l;
19362306a36Sopenharmony_ci	u32 peer_netmask;
19462306a36Sopenharmony_ci	u32 opt1;
19562306a36Sopenharmony_ci};
19662306a36Sopenharmony_ci
19762306a36Sopenharmony_cistruct cpl_pass_open_rpl {
19862306a36Sopenharmony_ci	union opcode_tid ot;
19962306a36Sopenharmony_ci	u16 local_port;
20062306a36Sopenharmony_ci	u16 peer_port;
20162306a36Sopenharmony_ci	u32 local_ip;
20262306a36Sopenharmony_ci	u32 peer_ip;
20362306a36Sopenharmony_ci	u8 resvd[7];
20462306a36Sopenharmony_ci	u8 status;
20562306a36Sopenharmony_ci};
20662306a36Sopenharmony_ci
20762306a36Sopenharmony_cistruct cpl_pass_establish {
20862306a36Sopenharmony_ci	union opcode_tid ot;
20962306a36Sopenharmony_ci	u16 local_port;
21062306a36Sopenharmony_ci	u16 peer_port;
21162306a36Sopenharmony_ci	u32 local_ip;
21262306a36Sopenharmony_ci	u32 peer_ip;
21362306a36Sopenharmony_ci	u32 tos_tid;
21462306a36Sopenharmony_ci	u8  l2t_idx;
21562306a36Sopenharmony_ci	u8  rsvd[3];
21662306a36Sopenharmony_ci	u32 snd_isn;
21762306a36Sopenharmony_ci	u32 rcv_isn;
21862306a36Sopenharmony_ci};
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_cistruct cpl_pass_accept_req {
22162306a36Sopenharmony_ci	union opcode_tid ot;
22262306a36Sopenharmony_ci	u16 local_port;
22362306a36Sopenharmony_ci	u16 peer_port;
22462306a36Sopenharmony_ci	u32 local_ip;
22562306a36Sopenharmony_ci	u32 peer_ip;
22662306a36Sopenharmony_ci	u32 tos_tid;
22762306a36Sopenharmony_ci	struct tcp_options tcp_options;
22862306a36Sopenharmony_ci	u8  dst_mac[6];
22962306a36Sopenharmony_ci	u16 vlan_tag;
23062306a36Sopenharmony_ci	u8  src_mac[6];
23162306a36Sopenharmony_ci	u8  rsvd[2];
23262306a36Sopenharmony_ci	u32 rcv_isn;
23362306a36Sopenharmony_ci	u32 unknown_tcp_options;
23462306a36Sopenharmony_ci};
23562306a36Sopenharmony_ci
23662306a36Sopenharmony_cistruct cpl_pass_accept_rpl {
23762306a36Sopenharmony_ci	union opcode_tid ot;
23862306a36Sopenharmony_ci	u32 rsvd0;
23962306a36Sopenharmony_ci	u32 rsvd1;
24062306a36Sopenharmony_ci	u32 peer_ip;
24162306a36Sopenharmony_ci	u32 opt0h;
24262306a36Sopenharmony_ci	union {
24362306a36Sopenharmony_ci		u32 opt0l;
24462306a36Sopenharmony_ci		struct {
24562306a36Sopenharmony_ci		    u8 rsvd[3];
24662306a36Sopenharmony_ci		    u8 status;
24762306a36Sopenharmony_ci		};
24862306a36Sopenharmony_ci	};
24962306a36Sopenharmony_ci};
25062306a36Sopenharmony_ci
25162306a36Sopenharmony_cistruct cpl_act_open_req {
25262306a36Sopenharmony_ci	union opcode_tid ot;
25362306a36Sopenharmony_ci	u16 local_port;
25462306a36Sopenharmony_ci	u16 peer_port;
25562306a36Sopenharmony_ci	u32 local_ip;
25662306a36Sopenharmony_ci	u32 peer_ip;
25762306a36Sopenharmony_ci	u32 opt0h;
25862306a36Sopenharmony_ci	u32 opt0l;
25962306a36Sopenharmony_ci	u32 iff_vlantag;
26062306a36Sopenharmony_ci	u32 rsvd;
26162306a36Sopenharmony_ci};
26262306a36Sopenharmony_ci
26362306a36Sopenharmony_cistruct cpl_act_open_rpl {
26462306a36Sopenharmony_ci	union opcode_tid ot;
26562306a36Sopenharmony_ci	u16 local_port;
26662306a36Sopenharmony_ci	u16 peer_port;
26762306a36Sopenharmony_ci	u32 local_ip;
26862306a36Sopenharmony_ci	u32 peer_ip;
26962306a36Sopenharmony_ci	u32 new_tid;
27062306a36Sopenharmony_ci	u8  rsvd[3];
27162306a36Sopenharmony_ci	u8  status;
27262306a36Sopenharmony_ci};
27362306a36Sopenharmony_ci
27462306a36Sopenharmony_cistruct cpl_act_establish {
27562306a36Sopenharmony_ci	union opcode_tid ot;
27662306a36Sopenharmony_ci	u16 local_port;
27762306a36Sopenharmony_ci	u16 peer_port;
27862306a36Sopenharmony_ci	u32 local_ip;
27962306a36Sopenharmony_ci	u32 peer_ip;
28062306a36Sopenharmony_ci	u32 tos_tid;
28162306a36Sopenharmony_ci	u32 rsvd;
28262306a36Sopenharmony_ci	u32 snd_isn;
28362306a36Sopenharmony_ci	u32 rcv_isn;
28462306a36Sopenharmony_ci};
28562306a36Sopenharmony_ci
28662306a36Sopenharmony_cistruct cpl_get_tcb {
28762306a36Sopenharmony_ci	union opcode_tid ot;
28862306a36Sopenharmony_ci	u32 rsvd;
28962306a36Sopenharmony_ci};
29062306a36Sopenharmony_ci
29162306a36Sopenharmony_cistruct cpl_get_tcb_rpl {
29262306a36Sopenharmony_ci	union opcode_tid ot;
29362306a36Sopenharmony_ci	u16 len;
29462306a36Sopenharmony_ci	u8 rsvd;
29562306a36Sopenharmony_ci	u8 status;
29662306a36Sopenharmony_ci};
29762306a36Sopenharmony_ci
29862306a36Sopenharmony_cistruct cpl_set_tcb {
29962306a36Sopenharmony_ci	union opcode_tid ot;
30062306a36Sopenharmony_ci	u16 len;
30162306a36Sopenharmony_ci	u16 rsvd;
30262306a36Sopenharmony_ci};
30362306a36Sopenharmony_ci
30462306a36Sopenharmony_cistruct cpl_set_tcb_field {
30562306a36Sopenharmony_ci	union opcode_tid ot;
30662306a36Sopenharmony_ci	u8 rsvd[3];
30762306a36Sopenharmony_ci	u8 offset;
30862306a36Sopenharmony_ci	u32 mask;
30962306a36Sopenharmony_ci	u32 val;
31062306a36Sopenharmony_ci};
31162306a36Sopenharmony_ci
31262306a36Sopenharmony_cistruct cpl_set_tcb_rpl {
31362306a36Sopenharmony_ci	union opcode_tid ot;
31462306a36Sopenharmony_ci	u8 rsvd[3];
31562306a36Sopenharmony_ci	u8 status;
31662306a36Sopenharmony_ci};
31762306a36Sopenharmony_ci
31862306a36Sopenharmony_cistruct cpl_pcmd {
31962306a36Sopenharmony_ci	union opcode_tid ot;
32062306a36Sopenharmony_ci	u16 dlen_in;
32162306a36Sopenharmony_ci	u16 dlen_out;
32262306a36Sopenharmony_ci	u32 pcmd_parm[2];
32362306a36Sopenharmony_ci};
32462306a36Sopenharmony_ci
32562306a36Sopenharmony_cistruct cpl_pcmd_read {
32662306a36Sopenharmony_ci	union opcode_tid ot;
32762306a36Sopenharmony_ci	u32 rsvd1;
32862306a36Sopenharmony_ci	u16 rsvd2;
32962306a36Sopenharmony_ci	u32 addr;
33062306a36Sopenharmony_ci	u16 len;
33162306a36Sopenharmony_ci};
33262306a36Sopenharmony_ci
33362306a36Sopenharmony_cistruct cpl_pcmd_read_rpl {
33462306a36Sopenharmony_ci	union opcode_tid ot;
33562306a36Sopenharmony_ci	u16 len;
33662306a36Sopenharmony_ci};
33762306a36Sopenharmony_ci
33862306a36Sopenharmony_cistruct cpl_close_con_req {
33962306a36Sopenharmony_ci	union opcode_tid ot;
34062306a36Sopenharmony_ci	u32 rsvd;
34162306a36Sopenharmony_ci};
34262306a36Sopenharmony_ci
34362306a36Sopenharmony_cistruct cpl_close_con_rpl {
34462306a36Sopenharmony_ci	union opcode_tid ot;
34562306a36Sopenharmony_ci	u8 rsvd[3];
34662306a36Sopenharmony_ci	u8 status;
34762306a36Sopenharmony_ci	u32 snd_nxt;
34862306a36Sopenharmony_ci	u32 rcv_nxt;
34962306a36Sopenharmony_ci};
35062306a36Sopenharmony_ci
35162306a36Sopenharmony_cistruct cpl_close_listserv_req {
35262306a36Sopenharmony_ci	union opcode_tid ot;
35362306a36Sopenharmony_ci	u32 rsvd;
35462306a36Sopenharmony_ci};
35562306a36Sopenharmony_ci
35662306a36Sopenharmony_cistruct cpl_close_listserv_rpl {
35762306a36Sopenharmony_ci	union opcode_tid ot;
35862306a36Sopenharmony_ci	u8 rsvd[3];
35962306a36Sopenharmony_ci	u8 status;
36062306a36Sopenharmony_ci};
36162306a36Sopenharmony_ci
36262306a36Sopenharmony_cistruct cpl_abort_req {
36362306a36Sopenharmony_ci	union opcode_tid ot;
36462306a36Sopenharmony_ci	u32 rsvd0;
36562306a36Sopenharmony_ci	u8  rsvd1;
36662306a36Sopenharmony_ci	u8  cmd;
36762306a36Sopenharmony_ci	u8  rsvd2[6];
36862306a36Sopenharmony_ci};
36962306a36Sopenharmony_ci
37062306a36Sopenharmony_cistruct cpl_abort_rpl {
37162306a36Sopenharmony_ci	union opcode_tid ot;
37262306a36Sopenharmony_ci	u32 rsvd0;
37362306a36Sopenharmony_ci	u8  rsvd1;
37462306a36Sopenharmony_ci	u8  status;
37562306a36Sopenharmony_ci	u8  rsvd2[6];
37662306a36Sopenharmony_ci};
37762306a36Sopenharmony_ci
37862306a36Sopenharmony_cistruct cpl_peer_close {
37962306a36Sopenharmony_ci	union opcode_tid ot;
38062306a36Sopenharmony_ci	u32 rsvd;
38162306a36Sopenharmony_ci};
38262306a36Sopenharmony_ci
38362306a36Sopenharmony_cistruct cpl_tx_data {
38462306a36Sopenharmony_ci	union opcode_tid ot;
38562306a36Sopenharmony_ci	u32 len;
38662306a36Sopenharmony_ci	u32 rsvd0;
38762306a36Sopenharmony_ci	u16 urg;
38862306a36Sopenharmony_ci	u16 flags;
38962306a36Sopenharmony_ci};
39062306a36Sopenharmony_ci
39162306a36Sopenharmony_cistruct cpl_tx_data_ack {
39262306a36Sopenharmony_ci	union opcode_tid ot;
39362306a36Sopenharmony_ci	u32 ack_seq;
39462306a36Sopenharmony_ci};
39562306a36Sopenharmony_ci
39662306a36Sopenharmony_cistruct cpl_rx_data {
39762306a36Sopenharmony_ci	union opcode_tid ot;
39862306a36Sopenharmony_ci	u32 len;
39962306a36Sopenharmony_ci	u32 seq;
40062306a36Sopenharmony_ci	u16 urg;
40162306a36Sopenharmony_ci	u8  rsvd;
40262306a36Sopenharmony_ci	u8  status;
40362306a36Sopenharmony_ci};
40462306a36Sopenharmony_ci
40562306a36Sopenharmony_cistruct cpl_rx_data_ack {
40662306a36Sopenharmony_ci	union opcode_tid ot;
40762306a36Sopenharmony_ci	u32 credit;
40862306a36Sopenharmony_ci};
40962306a36Sopenharmony_ci
41062306a36Sopenharmony_cistruct cpl_rx_data_ddp {
41162306a36Sopenharmony_ci	union opcode_tid ot;
41262306a36Sopenharmony_ci	u32 len;
41362306a36Sopenharmony_ci	u32 seq;
41462306a36Sopenharmony_ci	u32 nxt_seq;
41562306a36Sopenharmony_ci	u32 ulp_crc;
41662306a36Sopenharmony_ci	u16 ddp_status;
41762306a36Sopenharmony_ci	u8  rsvd;
41862306a36Sopenharmony_ci	u8  status;
41962306a36Sopenharmony_ci};
42062306a36Sopenharmony_ci
42162306a36Sopenharmony_ci/*
42262306a36Sopenharmony_ci * We want this header's alignment to be no more stringent than 2-byte aligned.
42362306a36Sopenharmony_ci * All fields are u8 or u16 except for the length.  However that field is not
42462306a36Sopenharmony_ci * used so we break it into 2 16-bit parts to easily meet our alignment needs.
42562306a36Sopenharmony_ci */
42662306a36Sopenharmony_cistruct cpl_tx_pkt {
42762306a36Sopenharmony_ci	u8 opcode;
42862306a36Sopenharmony_ci#if defined(__LITTLE_ENDIAN_BITFIELD)
42962306a36Sopenharmony_ci	u8 iff:4;
43062306a36Sopenharmony_ci	u8 ip_csum_dis:1;
43162306a36Sopenharmony_ci	u8 l4_csum_dis:1;
43262306a36Sopenharmony_ci	u8 vlan_valid:1;
43362306a36Sopenharmony_ci	u8 rsvd:1;
43462306a36Sopenharmony_ci#else
43562306a36Sopenharmony_ci	u8 rsvd:1;
43662306a36Sopenharmony_ci	u8 vlan_valid:1;
43762306a36Sopenharmony_ci	u8 l4_csum_dis:1;
43862306a36Sopenharmony_ci	u8 ip_csum_dis:1;
43962306a36Sopenharmony_ci	u8 iff:4;
44062306a36Sopenharmony_ci#endif
44162306a36Sopenharmony_ci	u16 vlan;
44262306a36Sopenharmony_ci	u16 len_hi;
44362306a36Sopenharmony_ci	u16 len_lo;
44462306a36Sopenharmony_ci};
44562306a36Sopenharmony_ci
44662306a36Sopenharmony_cistruct cpl_tx_pkt_lso {
44762306a36Sopenharmony_ci	u8 opcode;
44862306a36Sopenharmony_ci#if defined(__LITTLE_ENDIAN_BITFIELD)
44962306a36Sopenharmony_ci	u8 iff:4;
45062306a36Sopenharmony_ci	u8 ip_csum_dis:1;
45162306a36Sopenharmony_ci	u8 l4_csum_dis:1;
45262306a36Sopenharmony_ci	u8 vlan_valid:1;
45362306a36Sopenharmony_ci	u8 :1;
45462306a36Sopenharmony_ci#else
45562306a36Sopenharmony_ci	u8 :1;
45662306a36Sopenharmony_ci	u8 vlan_valid:1;
45762306a36Sopenharmony_ci	u8 l4_csum_dis:1;
45862306a36Sopenharmony_ci	u8 ip_csum_dis:1;
45962306a36Sopenharmony_ci	u8 iff:4;
46062306a36Sopenharmony_ci#endif
46162306a36Sopenharmony_ci	u16 vlan;
46262306a36Sopenharmony_ci	__be32 len;
46362306a36Sopenharmony_ci
46462306a36Sopenharmony_ci	u8 rsvd[5];
46562306a36Sopenharmony_ci#if defined(__LITTLE_ENDIAN_BITFIELD)
46662306a36Sopenharmony_ci	u8 tcp_hdr_words:4;
46762306a36Sopenharmony_ci	u8 ip_hdr_words:4;
46862306a36Sopenharmony_ci#else
46962306a36Sopenharmony_ci	u8 ip_hdr_words:4;
47062306a36Sopenharmony_ci	u8 tcp_hdr_words:4;
47162306a36Sopenharmony_ci#endif
47262306a36Sopenharmony_ci	__be16 eth_type_mss;
47362306a36Sopenharmony_ci};
47462306a36Sopenharmony_ci
47562306a36Sopenharmony_cistruct cpl_rx_pkt {
47662306a36Sopenharmony_ci	u8 opcode;
47762306a36Sopenharmony_ci#if defined(__LITTLE_ENDIAN_BITFIELD)
47862306a36Sopenharmony_ci	u8 iff:4;
47962306a36Sopenharmony_ci	u8 csum_valid:1;
48062306a36Sopenharmony_ci	u8 bad_pkt:1;
48162306a36Sopenharmony_ci	u8 vlan_valid:1;
48262306a36Sopenharmony_ci	u8 rsvd:1;
48362306a36Sopenharmony_ci#else
48462306a36Sopenharmony_ci	u8 rsvd:1;
48562306a36Sopenharmony_ci	u8 vlan_valid:1;
48662306a36Sopenharmony_ci	u8 bad_pkt:1;
48762306a36Sopenharmony_ci	u8 csum_valid:1;
48862306a36Sopenharmony_ci	u8 iff:4;
48962306a36Sopenharmony_ci#endif
49062306a36Sopenharmony_ci	u16 csum;
49162306a36Sopenharmony_ci	u16 vlan;
49262306a36Sopenharmony_ci	u16 len;
49362306a36Sopenharmony_ci};
49462306a36Sopenharmony_ci
49562306a36Sopenharmony_cistruct cpl_l2t_write_req {
49662306a36Sopenharmony_ci	union opcode_tid ot;
49762306a36Sopenharmony_ci	u32 params;
49862306a36Sopenharmony_ci	u8 rsvd1[2];
49962306a36Sopenharmony_ci	u8 dst_mac[6];
50062306a36Sopenharmony_ci};
50162306a36Sopenharmony_ci
50262306a36Sopenharmony_cistruct cpl_l2t_write_rpl {
50362306a36Sopenharmony_ci	union opcode_tid ot;
50462306a36Sopenharmony_ci	u8 status;
50562306a36Sopenharmony_ci	u8 rsvd[3];
50662306a36Sopenharmony_ci};
50762306a36Sopenharmony_ci
50862306a36Sopenharmony_cistruct cpl_l2t_read_req {
50962306a36Sopenharmony_ci	union opcode_tid ot;
51062306a36Sopenharmony_ci	u8 rsvd[3];
51162306a36Sopenharmony_ci	u8 l2t_idx;
51262306a36Sopenharmony_ci};
51362306a36Sopenharmony_ci
51462306a36Sopenharmony_cistruct cpl_l2t_read_rpl {
51562306a36Sopenharmony_ci	union opcode_tid ot;
51662306a36Sopenharmony_ci	u32 params;
51762306a36Sopenharmony_ci	u8 rsvd1[2];
51862306a36Sopenharmony_ci	u8 dst_mac[6];
51962306a36Sopenharmony_ci};
52062306a36Sopenharmony_ci
52162306a36Sopenharmony_cistruct cpl_smt_write_req {
52262306a36Sopenharmony_ci	union opcode_tid ot;
52362306a36Sopenharmony_ci	u8 rsvd0;
52462306a36Sopenharmony_ci#if defined(__LITTLE_ENDIAN_BITFIELD)
52562306a36Sopenharmony_ci	u8 rsvd1:1;
52662306a36Sopenharmony_ci	u8 mtu_idx:3;
52762306a36Sopenharmony_ci	u8 iff:4;
52862306a36Sopenharmony_ci#else
52962306a36Sopenharmony_ci	u8 iff:4;
53062306a36Sopenharmony_ci	u8 mtu_idx:3;
53162306a36Sopenharmony_ci	u8 rsvd1:1;
53262306a36Sopenharmony_ci#endif
53362306a36Sopenharmony_ci	u16 rsvd2;
53462306a36Sopenharmony_ci	u16 rsvd3;
53562306a36Sopenharmony_ci	u8  src_mac1[6];
53662306a36Sopenharmony_ci	u16 rsvd4;
53762306a36Sopenharmony_ci	u8  src_mac0[6];
53862306a36Sopenharmony_ci};
53962306a36Sopenharmony_ci
54062306a36Sopenharmony_cistruct cpl_smt_write_rpl {
54162306a36Sopenharmony_ci	union opcode_tid ot;
54262306a36Sopenharmony_ci	u8 status;
54362306a36Sopenharmony_ci	u8 rsvd[3];
54462306a36Sopenharmony_ci};
54562306a36Sopenharmony_ci
54662306a36Sopenharmony_cistruct cpl_smt_read_req {
54762306a36Sopenharmony_ci	union opcode_tid ot;
54862306a36Sopenharmony_ci	u8 rsvd0;
54962306a36Sopenharmony_ci#if defined(__LITTLE_ENDIAN_BITFIELD)
55062306a36Sopenharmony_ci	u8 rsvd1:4;
55162306a36Sopenharmony_ci	u8 iff:4;
55262306a36Sopenharmony_ci#else
55362306a36Sopenharmony_ci	u8 iff:4;
55462306a36Sopenharmony_ci	u8 rsvd1:4;
55562306a36Sopenharmony_ci#endif
55662306a36Sopenharmony_ci	u16 rsvd2;
55762306a36Sopenharmony_ci};
55862306a36Sopenharmony_ci
55962306a36Sopenharmony_cistruct cpl_smt_read_rpl {
56062306a36Sopenharmony_ci	union opcode_tid ot;
56162306a36Sopenharmony_ci	u8 status;
56262306a36Sopenharmony_ci#if defined(__LITTLE_ENDIAN_BITFIELD)
56362306a36Sopenharmony_ci	u8 rsvd1:1;
56462306a36Sopenharmony_ci	u8 mtu_idx:3;
56562306a36Sopenharmony_ci	u8 rsvd0:4;
56662306a36Sopenharmony_ci#else
56762306a36Sopenharmony_ci	u8 rsvd0:4;
56862306a36Sopenharmony_ci	u8 mtu_idx:3;
56962306a36Sopenharmony_ci	u8 rsvd1:1;
57062306a36Sopenharmony_ci#endif
57162306a36Sopenharmony_ci	u16 rsvd2;
57262306a36Sopenharmony_ci	u16 rsvd3;
57362306a36Sopenharmony_ci	u8  src_mac1[6];
57462306a36Sopenharmony_ci	u16 rsvd4;
57562306a36Sopenharmony_ci	u8  src_mac0[6];
57662306a36Sopenharmony_ci};
57762306a36Sopenharmony_ci
57862306a36Sopenharmony_cistruct cpl_rte_delete_req {
57962306a36Sopenharmony_ci	union opcode_tid ot;
58062306a36Sopenharmony_ci	u32 params;
58162306a36Sopenharmony_ci};
58262306a36Sopenharmony_ci
58362306a36Sopenharmony_cistruct cpl_rte_delete_rpl {
58462306a36Sopenharmony_ci	union opcode_tid ot;
58562306a36Sopenharmony_ci	u8 status;
58662306a36Sopenharmony_ci	u8 rsvd[3];
58762306a36Sopenharmony_ci};
58862306a36Sopenharmony_ci
58962306a36Sopenharmony_cistruct cpl_rte_write_req {
59062306a36Sopenharmony_ci	union opcode_tid ot;
59162306a36Sopenharmony_ci	u32 params;
59262306a36Sopenharmony_ci	u32 netmask;
59362306a36Sopenharmony_ci	u32 faddr;
59462306a36Sopenharmony_ci};
59562306a36Sopenharmony_ci
59662306a36Sopenharmony_cistruct cpl_rte_write_rpl {
59762306a36Sopenharmony_ci	union opcode_tid ot;
59862306a36Sopenharmony_ci	u8 status;
59962306a36Sopenharmony_ci	u8 rsvd[3];
60062306a36Sopenharmony_ci};
60162306a36Sopenharmony_ci
60262306a36Sopenharmony_cistruct cpl_rte_read_req {
60362306a36Sopenharmony_ci	union opcode_tid ot;
60462306a36Sopenharmony_ci	u32 params;
60562306a36Sopenharmony_ci};
60662306a36Sopenharmony_ci
60762306a36Sopenharmony_cistruct cpl_rte_read_rpl {
60862306a36Sopenharmony_ci	union opcode_tid ot;
60962306a36Sopenharmony_ci	u8 status;
61062306a36Sopenharmony_ci	u8 rsvd0[2];
61162306a36Sopenharmony_ci	u8 l2t_idx;
61262306a36Sopenharmony_ci#if defined(__LITTLE_ENDIAN_BITFIELD)
61362306a36Sopenharmony_ci	u8 rsvd1:7;
61462306a36Sopenharmony_ci	u8 select:1;
61562306a36Sopenharmony_ci#else
61662306a36Sopenharmony_ci	u8 select:1;
61762306a36Sopenharmony_ci	u8 rsvd1:7;
61862306a36Sopenharmony_ci#endif
61962306a36Sopenharmony_ci	u8 rsvd2[3];
62062306a36Sopenharmony_ci	u32 addr;
62162306a36Sopenharmony_ci};
62262306a36Sopenharmony_ci
62362306a36Sopenharmony_cistruct cpl_mss_change {
62462306a36Sopenharmony_ci	union opcode_tid ot;
62562306a36Sopenharmony_ci	u32 mss;
62662306a36Sopenharmony_ci};
62762306a36Sopenharmony_ci
62862306a36Sopenharmony_ci#endif /* _CXGB_CPL5_CMD_H_ */
629