12aa5c722SRahul Lakkireddy /* SPDX-License-Identifier: BSD-3-Clause 22aa5c722SRahul Lakkireddy * Copyright(c) 2014-2018 Chelsio Communications. 33bd122eeSRahul Lakkireddy * All rights reserved. 43bd122eeSRahul Lakkireddy */ 53bd122eeSRahul Lakkireddy 63bd122eeSRahul Lakkireddy #ifndef T4_MSG_H 73bd122eeSRahul Lakkireddy #define T4_MSG_H 83bd122eeSRahul Lakkireddy 93bd122eeSRahul Lakkireddy enum { 10af44a577SShagun Agrawal CPL_ACT_OPEN_REQ = 0x3, 1141dc98b0SShagun Agrawal CPL_SET_TCB_FIELD = 0x5, 1241dc98b0SShagun Agrawal CPL_ABORT_REQ = 0xA, 1341dc98b0SShagun Agrawal CPL_ABORT_RPL = 0xB, 1423af667fSShagun Agrawal CPL_L2T_WRITE_REQ = 0x12, 15*993541b2SKarra Satwik CPL_SMT_WRITE_REQ = 0x14, 1641dc98b0SShagun Agrawal CPL_TID_RELEASE = 0x1A, 1723af667fSShagun Agrawal CPL_L2T_WRITE_RPL = 0x23, 18af44a577SShagun Agrawal CPL_ACT_OPEN_RPL = 0x25, 1941dc98b0SShagun Agrawal CPL_ABORT_RPL_RSS = 0x2D, 20*993541b2SKarra Satwik CPL_SMT_WRITE_RPL = 0x2E, 219eb2c9a4SShagun Agrawal CPL_SET_TCB_RPL = 0x3A, 22af44a577SShagun Agrawal CPL_ACT_OPEN_REQ6 = 0x83, 233bd122eeSRahul Lakkireddy CPL_SGE_EGR_UPDATE = 0xA5, 243bd122eeSRahul Lakkireddy CPL_FW4_MSG = 0xC0, 253bd122eeSRahul Lakkireddy CPL_FW6_MSG = 0xE0, 263bd122eeSRahul Lakkireddy CPL_TX_PKT_LSO = 0xED, 273bd122eeSRahul Lakkireddy CPL_TX_PKT_XT = 0xEE, 283bd122eeSRahul Lakkireddy }; 293bd122eeSRahul Lakkireddy 30af44a577SShagun Agrawal enum CPL_error { 31af44a577SShagun Agrawal CPL_ERR_NONE = 0, 32af44a577SShagun Agrawal CPL_ERR_TCAM_FULL = 3, 33af44a577SShagun Agrawal }; 34af44a577SShagun Agrawal 35af44a577SShagun Agrawal enum { 36af44a577SShagun Agrawal ULP_MODE_NONE = 0, 3748f523f6SRahul Lakkireddy ULP_MODE_TCPDDP = 5, 38af44a577SShagun Agrawal }; 39af44a577SShagun Agrawal 4041dc98b0SShagun Agrawal enum { 4141dc98b0SShagun Agrawal CPL_ABORT_SEND_RST = 0, 4241dc98b0SShagun Agrawal CPL_ABORT_NO_RST, 4341dc98b0SShagun Agrawal }; 4441dc98b0SShagun Agrawal 453bd122eeSRahul Lakkireddy enum { /* TX_PKT_XT checksum types */ 463bd122eeSRahul Lakkireddy TX_CSUM_TCPIP = 8, 473bd122eeSRahul Lakkireddy TX_CSUM_UDPIP = 9, 483bd122eeSRahul Lakkireddy TX_CSUM_TCPIP6 = 10, 493bd122eeSRahul Lakkireddy }; 503bd122eeSRahul Lakkireddy 513bd122eeSRahul Lakkireddy union opcode_tid { 523bd122eeSRahul Lakkireddy __be32 opcode_tid; 533bd122eeSRahul Lakkireddy __u8 opcode; 543bd122eeSRahul Lakkireddy }; 553bd122eeSRahul Lakkireddy 56af44a577SShagun Agrawal #define S_CPL_OPCODE 24 57af44a577SShagun Agrawal #define V_CPL_OPCODE(x) ((x) << S_CPL_OPCODE) 58af44a577SShagun Agrawal 599eb2c9a4SShagun Agrawal #define G_TID(x) ((x) & 0xFFFFFF) 609eb2c9a4SShagun Agrawal 61af44a577SShagun Agrawal /* tid is assumed to be 24-bits */ 62af44a577SShagun Agrawal #define MK_OPCODE_TID(opcode, tid) (V_CPL_OPCODE(opcode) | (tid)) 63af44a577SShagun Agrawal 649eb2c9a4SShagun Agrawal #define OPCODE_TID(cmd) ((cmd)->ot.opcode_tid) 659eb2c9a4SShagun Agrawal 669eb2c9a4SShagun Agrawal /* extract the TID from a CPL command */ 679eb2c9a4SShagun Agrawal #define GET_TID(cmd) (G_TID(be32_to_cpu(OPCODE_TID(cmd)))) 689eb2c9a4SShagun Agrawal 69af44a577SShagun Agrawal /* partitioning of TID fields that also carry a queue id */ 70af44a577SShagun Agrawal #define S_TID_TID 0 71af44a577SShagun Agrawal #define M_TID_TID 0x3fff 72af44a577SShagun Agrawal #define G_TID_TID(x) (((x) >> S_TID_TID) & M_TID_TID) 73af44a577SShagun Agrawal 7423af667fSShagun Agrawal #define S_TID_QID 14 7523af667fSShagun Agrawal #define V_TID_QID(x) ((x) << S_TID_QID) 7623af667fSShagun Agrawal 773bd122eeSRahul Lakkireddy struct rss_header { 783bd122eeSRahul Lakkireddy __u8 opcode; 793bd122eeSRahul Lakkireddy #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN 803bd122eeSRahul Lakkireddy __u8 channel:2; 813bd122eeSRahul Lakkireddy __u8 filter_hit:1; 823bd122eeSRahul Lakkireddy __u8 filter_tid:1; 833bd122eeSRahul Lakkireddy __u8 hash_type:2; 843bd122eeSRahul Lakkireddy __u8 ipv6:1; 853bd122eeSRahul Lakkireddy __u8 send2fw:1; 863bd122eeSRahul Lakkireddy #else 873bd122eeSRahul Lakkireddy __u8 send2fw:1; 883bd122eeSRahul Lakkireddy __u8 ipv6:1; 893bd122eeSRahul Lakkireddy __u8 hash_type:2; 903bd122eeSRahul Lakkireddy __u8 filter_tid:1; 913bd122eeSRahul Lakkireddy __u8 filter_hit:1; 923bd122eeSRahul Lakkireddy __u8 channel:2; 933bd122eeSRahul Lakkireddy #endif 943bd122eeSRahul Lakkireddy __be16 qid; 953bd122eeSRahul Lakkireddy __be32 hash_val; 963bd122eeSRahul Lakkireddy }; 973bd122eeSRahul Lakkireddy 983bd122eeSRahul Lakkireddy #if defined(RSS_HDR_VLD) || defined(CHELSIO_FW) 993bd122eeSRahul Lakkireddy #define RSS_HDR struct rss_header rss_hdr 1003bd122eeSRahul Lakkireddy #else 1013bd122eeSRahul Lakkireddy #define RSS_HDR 1023bd122eeSRahul Lakkireddy #endif 1033bd122eeSRahul Lakkireddy 1043bd122eeSRahul Lakkireddy #ifndef CHELSIO_FW 1053bd122eeSRahul Lakkireddy struct work_request_hdr { 1063bd122eeSRahul Lakkireddy __be32 wr_hi; 1073bd122eeSRahul Lakkireddy __be32 wr_mid; 1083bd122eeSRahul Lakkireddy __be64 wr_lo; 1093bd122eeSRahul Lakkireddy }; 1103bd122eeSRahul Lakkireddy 1113bd122eeSRahul Lakkireddy #define WR_HDR struct work_request_hdr wr 1123bd122eeSRahul Lakkireddy #define WR_HDR_SIZE sizeof(struct work_request_hdr) 1133bd122eeSRahul Lakkireddy #else 1143bd122eeSRahul Lakkireddy #define WR_HDR 1153bd122eeSRahul Lakkireddy #define WR_HDR_SIZE 0 1163bd122eeSRahul Lakkireddy #endif 1173bd122eeSRahul Lakkireddy 1189eb2c9a4SShagun Agrawal #define S_COOKIE 5 1199eb2c9a4SShagun Agrawal #define M_COOKIE 0x7 1209eb2c9a4SShagun Agrawal #define V_COOKIE(x) ((x) << S_COOKIE) 1219eb2c9a4SShagun Agrawal #define G_COOKIE(x) (((x) >> S_COOKIE) & M_COOKIE) 1229eb2c9a4SShagun Agrawal 123af44a577SShagun Agrawal /* option 0 fields */ 124281c6e7bSShagun Agrawal #define S_TX_CHAN 2 125281c6e7bSShagun Agrawal #define V_TX_CHAN(x) ((x) << S_TX_CHAN) 126281c6e7bSShagun Agrawal 127af44a577SShagun Agrawal #define S_DELACK 5 128af44a577SShagun Agrawal #define V_DELACK(x) ((x) << S_DELACK) 129af44a577SShagun Agrawal 130af44a577SShagun Agrawal #define S_NON_OFFLOAD 7 131af44a577SShagun Agrawal #define V_NON_OFFLOAD(x) ((x) << S_NON_OFFLOAD) 132af44a577SShagun Agrawal #define F_NON_OFFLOAD V_NON_OFFLOAD(1U) 133af44a577SShagun Agrawal 134af44a577SShagun Agrawal #define S_ULP_MODE 8 135af44a577SShagun Agrawal #define V_ULP_MODE(x) ((x) << S_ULP_MODE) 136af44a577SShagun Agrawal 137af44a577SShagun Agrawal #define S_SMAC_SEL 28 138af44a577SShagun Agrawal #define V_SMAC_SEL(x) ((__u64)(x) << S_SMAC_SEL) 139af44a577SShagun Agrawal 140af44a577SShagun Agrawal #define S_TCAM_BYPASS 48 141af44a577SShagun Agrawal #define V_TCAM_BYPASS(x) ((__u64)(x) << S_TCAM_BYPASS) 142af44a577SShagun Agrawal #define F_TCAM_BYPASS V_TCAM_BYPASS(1ULL) 143af44a577SShagun Agrawal 1441decc62bSShagun Agrawal #define S_L2T_IDX 36 1451decc62bSShagun Agrawal #define V_L2T_IDX(x) ((__u64)(x) << S_L2T_IDX) 1461decc62bSShagun Agrawal 1471decc62bSShagun Agrawal #define S_NAGLE 49 1481decc62bSShagun Agrawal #define V_NAGLE(x) ((__u64)(x) << S_NAGLE) 1491decc62bSShagun Agrawal 150af44a577SShagun Agrawal /* option 2 fields */ 151af44a577SShagun Agrawal #define S_RSS_QUEUE 0 152af44a577SShagun Agrawal #define V_RSS_QUEUE(x) ((x) << S_RSS_QUEUE) 153af44a577SShagun Agrawal 154af44a577SShagun Agrawal #define S_RSS_QUEUE_VALID 10 155af44a577SShagun Agrawal #define V_RSS_QUEUE_VALID(x) ((x) << S_RSS_QUEUE_VALID) 156af44a577SShagun Agrawal #define F_RSS_QUEUE_VALID V_RSS_QUEUE_VALID(1U) 157af44a577SShagun Agrawal 158af44a577SShagun Agrawal #define S_CONG_CNTRL 14 159af44a577SShagun Agrawal #define V_CONG_CNTRL(x) ((x) << S_CONG_CNTRL) 160af44a577SShagun Agrawal 161af44a577SShagun Agrawal #define S_RX_CHANNEL 26 162af44a577SShagun Agrawal #define V_RX_CHANNEL(x) ((x) << S_RX_CHANNEL) 163af44a577SShagun Agrawal #define F_RX_CHANNEL V_RX_CHANNEL(1U) 164af44a577SShagun Agrawal 165281c6e7bSShagun Agrawal #define S_CCTRL_ECN 27 166281c6e7bSShagun Agrawal #define V_CCTRL_ECN(x) ((x) << S_CCTRL_ECN) 167281c6e7bSShagun Agrawal 168f683a520SRahul Lakkireddy #define S_SACK_EN 30 169f683a520SRahul Lakkireddy #define V_SACK_EN(x) ((x) << S_SACK_EN) 170f683a520SRahul Lakkireddy 171af44a577SShagun Agrawal #define S_T5_OPT_2_VALID 31 172af44a577SShagun Agrawal #define V_T5_OPT_2_VALID(x) ((x) << S_T5_OPT_2_VALID) 173af44a577SShagun Agrawal #define F_T5_OPT_2_VALID V_T5_OPT_2_VALID(1U) 174af44a577SShagun Agrawal 175af44a577SShagun Agrawal struct cpl_t6_act_open_req { 176af44a577SShagun Agrawal WR_HDR; 177af44a577SShagun Agrawal union opcode_tid ot; 178af44a577SShagun Agrawal __be16 local_port; 179af44a577SShagun Agrawal __be16 peer_port; 180af44a577SShagun Agrawal __be32 local_ip; 181af44a577SShagun Agrawal __be32 peer_ip; 182af44a577SShagun Agrawal __be64 opt0; 183af44a577SShagun Agrawal __be32 rsvd; 184af44a577SShagun Agrawal __be32 opt2; 185af44a577SShagun Agrawal __be64 params; 186af44a577SShagun Agrawal __be32 rsvd2; 187af44a577SShagun Agrawal __be32 opt3; 188af44a577SShagun Agrawal }; 189af44a577SShagun Agrawal 190af44a577SShagun Agrawal struct cpl_t6_act_open_req6 { 191af44a577SShagun Agrawal WR_HDR; 192af44a577SShagun Agrawal union opcode_tid ot; 193af44a577SShagun Agrawal __be16 local_port; 194af44a577SShagun Agrawal __be16 peer_port; 195af44a577SShagun Agrawal __be64 local_ip_hi; 196af44a577SShagun Agrawal __be64 local_ip_lo; 197af44a577SShagun Agrawal __be64 peer_ip_hi; 198af44a577SShagun Agrawal __be64 peer_ip_lo; 199af44a577SShagun Agrawal __be64 opt0; 200af44a577SShagun Agrawal __be32 rsvd; 201af44a577SShagun Agrawal __be32 opt2; 202af44a577SShagun Agrawal __be64 params; 203af44a577SShagun Agrawal __be32 rsvd2; 204af44a577SShagun Agrawal __be32 opt3; 205af44a577SShagun Agrawal }; 206af44a577SShagun Agrawal 207af44a577SShagun Agrawal #define S_FILTER_TUPLE 24 208af44a577SShagun Agrawal #define V_FILTER_TUPLE(x) ((x) << S_FILTER_TUPLE) 209af44a577SShagun Agrawal 210af44a577SShagun Agrawal struct cpl_act_open_rpl { 211af44a577SShagun Agrawal RSS_HDR 212af44a577SShagun Agrawal union opcode_tid ot; 213af44a577SShagun Agrawal __be32 atid_status; 214af44a577SShagun Agrawal }; 215af44a577SShagun Agrawal 216af44a577SShagun Agrawal /* cpl_act_open_rpl.atid_status fields */ 217af44a577SShagun Agrawal #define S_AOPEN_STATUS 0 218af44a577SShagun Agrawal #define M_AOPEN_STATUS 0xFF 219af44a577SShagun Agrawal #define G_AOPEN_STATUS(x) (((x) >> S_AOPEN_STATUS) & M_AOPEN_STATUS) 220af44a577SShagun Agrawal 221af44a577SShagun Agrawal #define S_AOPEN_ATID 8 222af44a577SShagun Agrawal #define M_AOPEN_ATID 0xFFFFFF 223af44a577SShagun Agrawal #define G_AOPEN_ATID(x) (((x) >> S_AOPEN_ATID) & M_AOPEN_ATID) 224af44a577SShagun Agrawal 22541dc98b0SShagun Agrawal struct cpl_set_tcb_field { 22641dc98b0SShagun Agrawal WR_HDR; 22741dc98b0SShagun Agrawal union opcode_tid ot; 22841dc98b0SShagun Agrawal __be16 reply_ctrl; 22941dc98b0SShagun Agrawal __be16 word_cookie; 23041dc98b0SShagun Agrawal __be64 mask; 23141dc98b0SShagun Agrawal __be64 val; 23241dc98b0SShagun Agrawal }; 23341dc98b0SShagun Agrawal 23441dc98b0SShagun Agrawal /* cpl_set_tcb_field.word_cookie fields */ 23541dc98b0SShagun Agrawal #define S_WORD 0 23641dc98b0SShagun Agrawal #define V_WORD(x) ((x) << S_WORD) 23741dc98b0SShagun Agrawal 23841dc98b0SShagun Agrawal /* cpl_get_tcb.reply_ctrl fields */ 23941dc98b0SShagun Agrawal #define S_QUEUENO 0 24041dc98b0SShagun Agrawal #define V_QUEUENO(x) ((x) << S_QUEUENO) 24141dc98b0SShagun Agrawal 24241dc98b0SShagun Agrawal #define S_REPLY_CHAN 14 24341dc98b0SShagun Agrawal #define V_REPLY_CHAN(x) ((x) << S_REPLY_CHAN) 24441dc98b0SShagun Agrawal 24541dc98b0SShagun Agrawal #define S_NO_REPLY 15 24641dc98b0SShagun Agrawal #define V_NO_REPLY(x) ((x) << S_NO_REPLY) 24741dc98b0SShagun Agrawal 2489eb2c9a4SShagun Agrawal struct cpl_set_tcb_rpl { 2499eb2c9a4SShagun Agrawal RSS_HDR 2509eb2c9a4SShagun Agrawal union opcode_tid ot; 2519eb2c9a4SShagun Agrawal __be16 rsvd; 2529eb2c9a4SShagun Agrawal __u8 cookie; 2539eb2c9a4SShagun Agrawal __u8 status; 2549eb2c9a4SShagun Agrawal __be64 oldval; 2559eb2c9a4SShagun Agrawal }; 2569eb2c9a4SShagun Agrawal 25741dc98b0SShagun Agrawal /* cpl_abort_req status command code 25841dc98b0SShagun Agrawal */ 25941dc98b0SShagun Agrawal struct cpl_abort_req { 26041dc98b0SShagun Agrawal WR_HDR; 26141dc98b0SShagun Agrawal union opcode_tid ot; 26241dc98b0SShagun Agrawal __be32 rsvd0; 26341dc98b0SShagun Agrawal __u8 rsvd1; 26441dc98b0SShagun Agrawal __u8 cmd; 26541dc98b0SShagun Agrawal __u8 rsvd2[6]; 26641dc98b0SShagun Agrawal }; 26741dc98b0SShagun Agrawal 26841dc98b0SShagun Agrawal struct cpl_abort_rpl_rss { 26941dc98b0SShagun Agrawal RSS_HDR 27041dc98b0SShagun Agrawal union opcode_tid ot; 27141dc98b0SShagun Agrawal __u8 rsvd[3]; 27241dc98b0SShagun Agrawal __u8 status; 27341dc98b0SShagun Agrawal }; 27441dc98b0SShagun Agrawal 27541dc98b0SShagun Agrawal struct cpl_abort_rpl { 27641dc98b0SShagun Agrawal WR_HDR; 27741dc98b0SShagun Agrawal union opcode_tid ot; 27841dc98b0SShagun Agrawal __be32 rsvd0; 27941dc98b0SShagun Agrawal __u8 rsvd1; 28041dc98b0SShagun Agrawal __u8 cmd; 28141dc98b0SShagun Agrawal __u8 rsvd2[6]; 28241dc98b0SShagun Agrawal }; 28341dc98b0SShagun Agrawal 28441dc98b0SShagun Agrawal struct cpl_tid_release { 28541dc98b0SShagun Agrawal WR_HDR; 28641dc98b0SShagun Agrawal union opcode_tid ot; 28741dc98b0SShagun Agrawal __be32 rsvd; 28841dc98b0SShagun Agrawal }; 28941dc98b0SShagun Agrawal 2903bd122eeSRahul Lakkireddy struct cpl_tx_data { 2913bd122eeSRahul Lakkireddy union opcode_tid ot; 2923bd122eeSRahul Lakkireddy __be32 len; 2933bd122eeSRahul Lakkireddy __be32 rsvd; 2943bd122eeSRahul Lakkireddy __be32 flags; 2953bd122eeSRahul Lakkireddy }; 2963bd122eeSRahul Lakkireddy 2973bd122eeSRahul Lakkireddy struct cpl_tx_pkt_core { 2983bd122eeSRahul Lakkireddy __be32 ctrl0; 2993bd122eeSRahul Lakkireddy __be16 pack; 3003bd122eeSRahul Lakkireddy __be16 len; 3013bd122eeSRahul Lakkireddy __be64 ctrl1; 3023bd122eeSRahul Lakkireddy }; 3033bd122eeSRahul Lakkireddy 3043bd122eeSRahul Lakkireddy struct cpl_tx_pkt { 3053bd122eeSRahul Lakkireddy WR_HDR; 3063bd122eeSRahul Lakkireddy struct cpl_tx_pkt_core c; 3073bd122eeSRahul Lakkireddy }; 3083bd122eeSRahul Lakkireddy 3093bd122eeSRahul Lakkireddy /* cpl_tx_pkt_core.ctrl0 fields */ 3103bd122eeSRahul Lakkireddy #define S_TXPKT_PF 8 3113bd122eeSRahul Lakkireddy #define M_TXPKT_PF 0x7 3123bd122eeSRahul Lakkireddy #define V_TXPKT_PF(x) ((x) << S_TXPKT_PF) 3133bd122eeSRahul Lakkireddy #define G_TXPKT_PF(x) (((x) >> S_TXPKT_PF) & M_TXPKT_PF) 3143bd122eeSRahul Lakkireddy 3153bd122eeSRahul Lakkireddy #define S_TXPKT_INTF 16 3163bd122eeSRahul Lakkireddy #define M_TXPKT_INTF 0xF 3173bd122eeSRahul Lakkireddy #define V_TXPKT_INTF(x) ((x) << S_TXPKT_INTF) 3183bd122eeSRahul Lakkireddy #define G_TXPKT_INTF(x) (((x) >> S_TXPKT_INTF) & M_TXPKT_INTF) 3193bd122eeSRahul Lakkireddy 3203bd122eeSRahul Lakkireddy #define S_TXPKT_OPCODE 24 3213bd122eeSRahul Lakkireddy #define M_TXPKT_OPCODE 0xFF 3223bd122eeSRahul Lakkireddy #define V_TXPKT_OPCODE(x) ((x) << S_TXPKT_OPCODE) 3233bd122eeSRahul Lakkireddy #define G_TXPKT_OPCODE(x) (((x) >> S_TXPKT_OPCODE) & M_TXPKT_OPCODE) 3243bd122eeSRahul Lakkireddy 3253bd122eeSRahul Lakkireddy /* cpl_tx_pkt_core.ctrl1 fields */ 3263bd122eeSRahul Lakkireddy #define S_TXPKT_IPHDR_LEN 20 3273bd122eeSRahul Lakkireddy #define M_TXPKT_IPHDR_LEN 0x3FFF 3283bd122eeSRahul Lakkireddy #define V_TXPKT_IPHDR_LEN(x) ((__u64)(x) << S_TXPKT_IPHDR_LEN) 3293bd122eeSRahul Lakkireddy #define G_TXPKT_IPHDR_LEN(x) (((x) >> S_TXPKT_IPHDR_LEN) & M_TXPKT_IPHDR_LEN) 3303bd122eeSRahul Lakkireddy 3313bd122eeSRahul Lakkireddy #define S_TXPKT_ETHHDR_LEN 34 3323bd122eeSRahul Lakkireddy #define M_TXPKT_ETHHDR_LEN 0x3F 3333bd122eeSRahul Lakkireddy #define V_TXPKT_ETHHDR_LEN(x) ((__u64)(x) << S_TXPKT_ETHHDR_LEN) 3343bd122eeSRahul Lakkireddy #define G_TXPKT_ETHHDR_LEN(x) (((x) >> S_TXPKT_ETHHDR_LEN) & M_TXPKT_ETHHDR_LEN) 3353bd122eeSRahul Lakkireddy 3363bd122eeSRahul Lakkireddy #define S_T6_TXPKT_ETHHDR_LEN 32 3373bd122eeSRahul Lakkireddy #define M_T6_TXPKT_ETHHDR_LEN 0xFF 3383bd122eeSRahul Lakkireddy #define V_T6_TXPKT_ETHHDR_LEN(x) ((__u64)(x) << S_T6_TXPKT_ETHHDR_LEN) 3393bd122eeSRahul Lakkireddy #define G_T6_TXPKT_ETHHDR_LEN(x) \ 3403bd122eeSRahul Lakkireddy (((x) >> S_T6_TXPKT_ETHHDR_LEN) & M_T6_TXPKT_ETHHDR_LEN) 3413bd122eeSRahul Lakkireddy 3423bd122eeSRahul Lakkireddy #define S_TXPKT_CSUM_TYPE 40 3433bd122eeSRahul Lakkireddy #define M_TXPKT_CSUM_TYPE 0xF 3443bd122eeSRahul Lakkireddy #define V_TXPKT_CSUM_TYPE(x) ((__u64)(x) << S_TXPKT_CSUM_TYPE) 3453bd122eeSRahul Lakkireddy #define G_TXPKT_CSUM_TYPE(x) (((x) >> S_TXPKT_CSUM_TYPE) & M_TXPKT_CSUM_TYPE) 3463bd122eeSRahul Lakkireddy 3473bd122eeSRahul Lakkireddy #define S_TXPKT_VLAN 44 3483bd122eeSRahul Lakkireddy #define M_TXPKT_VLAN 0xFFFF 3493bd122eeSRahul Lakkireddy #define V_TXPKT_VLAN(x) ((__u64)(x) << S_TXPKT_VLAN) 3503bd122eeSRahul Lakkireddy #define G_TXPKT_VLAN(x) (((x) >> S_TXPKT_VLAN) & M_TXPKT_VLAN) 3513bd122eeSRahul Lakkireddy 3523bd122eeSRahul Lakkireddy #define S_TXPKT_VLAN_VLD 60 3533bd122eeSRahul Lakkireddy #define V_TXPKT_VLAN_VLD(x) ((__u64)(x) << S_TXPKT_VLAN_VLD) 3543bd122eeSRahul Lakkireddy #define F_TXPKT_VLAN_VLD V_TXPKT_VLAN_VLD(1ULL) 3553bd122eeSRahul Lakkireddy 3563bd122eeSRahul Lakkireddy #define S_TXPKT_IPCSUM_DIS 62 3573bd122eeSRahul Lakkireddy #define V_TXPKT_IPCSUM_DIS(x) ((__u64)(x) << S_TXPKT_IPCSUM_DIS) 3583bd122eeSRahul Lakkireddy #define F_TXPKT_IPCSUM_DIS V_TXPKT_IPCSUM_DIS(1ULL) 3593bd122eeSRahul Lakkireddy 3603bd122eeSRahul Lakkireddy #define S_TXPKT_L4CSUM_DIS 63 3613bd122eeSRahul Lakkireddy #define V_TXPKT_L4CSUM_DIS(x) ((__u64)(x) << S_TXPKT_L4CSUM_DIS) 3623bd122eeSRahul Lakkireddy #define F_TXPKT_L4CSUM_DIS V_TXPKT_L4CSUM_DIS(1ULL) 3633bd122eeSRahul Lakkireddy 3643bd122eeSRahul Lakkireddy struct cpl_tx_pkt_lso_core { 3653bd122eeSRahul Lakkireddy __be32 lso_ctrl; 3663bd122eeSRahul Lakkireddy __be16 ipid_ofst; 3673bd122eeSRahul Lakkireddy __be16 mss; 3683bd122eeSRahul Lakkireddy __be32 seqno_offset; 3693bd122eeSRahul Lakkireddy __be32 len; 3703bd122eeSRahul Lakkireddy /* encapsulated CPL (TX_PKT, TX_PKT_XT or TX_DATA) follows here */ 3713bd122eeSRahul Lakkireddy }; 3723bd122eeSRahul Lakkireddy 3733bd122eeSRahul Lakkireddy struct cpl_tx_pkt_lso { 3743bd122eeSRahul Lakkireddy WR_HDR; 3753bd122eeSRahul Lakkireddy struct cpl_tx_pkt_lso_core c; 3763bd122eeSRahul Lakkireddy /* encapsulated CPL (TX_PKT, TX_PKT_XT or TX_DATA) follows here */ 3773bd122eeSRahul Lakkireddy }; 3783bd122eeSRahul Lakkireddy 3793bd122eeSRahul Lakkireddy /* cpl_tx_pkt_lso_core.lso_ctrl fields */ 3803bd122eeSRahul Lakkireddy #define S_LSO_TCPHDR_LEN 0 3813bd122eeSRahul Lakkireddy #define M_LSO_TCPHDR_LEN 0xF 3823bd122eeSRahul Lakkireddy #define V_LSO_TCPHDR_LEN(x) ((x) << S_LSO_TCPHDR_LEN) 3833bd122eeSRahul Lakkireddy #define G_LSO_TCPHDR_LEN(x) (((x) >> S_LSO_TCPHDR_LEN) & M_LSO_TCPHDR_LEN) 3843bd122eeSRahul Lakkireddy 3853bd122eeSRahul Lakkireddy #define S_LSO_IPHDR_LEN 4 3863bd122eeSRahul Lakkireddy #define M_LSO_IPHDR_LEN 0xFFF 3873bd122eeSRahul Lakkireddy #define V_LSO_IPHDR_LEN(x) ((x) << S_LSO_IPHDR_LEN) 3883bd122eeSRahul Lakkireddy #define G_LSO_IPHDR_LEN(x) (((x) >> S_LSO_IPHDR_LEN) & M_LSO_IPHDR_LEN) 3893bd122eeSRahul Lakkireddy 3903bd122eeSRahul Lakkireddy #define S_LSO_ETHHDR_LEN 16 3913bd122eeSRahul Lakkireddy #define M_LSO_ETHHDR_LEN 0xF 3923bd122eeSRahul Lakkireddy #define V_LSO_ETHHDR_LEN(x) ((x) << S_LSO_ETHHDR_LEN) 3933bd122eeSRahul Lakkireddy #define G_LSO_ETHHDR_LEN(x) (((x) >> S_LSO_ETHHDR_LEN) & M_LSO_ETHHDR_LEN) 3943bd122eeSRahul Lakkireddy 3953bd122eeSRahul Lakkireddy #define S_LSO_IPV6 20 3963bd122eeSRahul Lakkireddy #define V_LSO_IPV6(x) ((x) << S_LSO_IPV6) 3973bd122eeSRahul Lakkireddy #define F_LSO_IPV6 V_LSO_IPV6(1U) 3983bd122eeSRahul Lakkireddy 3993bd122eeSRahul Lakkireddy #define S_LSO_LAST_SLICE 22 4003bd122eeSRahul Lakkireddy #define V_LSO_LAST_SLICE(x) ((x) << S_LSO_LAST_SLICE) 4013bd122eeSRahul Lakkireddy #define F_LSO_LAST_SLICE V_LSO_LAST_SLICE(1U) 4023bd122eeSRahul Lakkireddy 4033bd122eeSRahul Lakkireddy #define S_LSO_FIRST_SLICE 23 4043bd122eeSRahul Lakkireddy #define V_LSO_FIRST_SLICE(x) ((x) << S_LSO_FIRST_SLICE) 4053bd122eeSRahul Lakkireddy #define F_LSO_FIRST_SLICE V_LSO_FIRST_SLICE(1U) 4063bd122eeSRahul Lakkireddy 4073bd122eeSRahul Lakkireddy #define S_LSO_OPCODE 24 4083bd122eeSRahul Lakkireddy #define M_LSO_OPCODE 0xFF 4093bd122eeSRahul Lakkireddy #define V_LSO_OPCODE(x) ((x) << S_LSO_OPCODE) 4103bd122eeSRahul Lakkireddy #define G_LSO_OPCODE(x) (((x) >> S_LSO_OPCODE) & M_LSO_OPCODE) 4113bd122eeSRahul Lakkireddy 4123bd122eeSRahul Lakkireddy #define S_LSO_T5_XFER_SIZE 0 4133bd122eeSRahul Lakkireddy #define M_LSO_T5_XFER_SIZE 0xFFFFFFF 4143bd122eeSRahul Lakkireddy #define V_LSO_T5_XFER_SIZE(x) ((x) << S_LSO_T5_XFER_SIZE) 4153bd122eeSRahul Lakkireddy #define G_LSO_T5_XFER_SIZE(x) (((x) >> S_LSO_T5_XFER_SIZE) & M_LSO_T5_XFER_SIZE) 4163bd122eeSRahul Lakkireddy 4173bd122eeSRahul Lakkireddy struct cpl_rx_pkt { 4183bd122eeSRahul Lakkireddy RSS_HDR; 4193bd122eeSRahul Lakkireddy __u8 opcode; 4203bd122eeSRahul Lakkireddy #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN 4213bd122eeSRahul Lakkireddy __u8 iff:4; 4223bd122eeSRahul Lakkireddy __u8 csum_calc:1; 4233bd122eeSRahul Lakkireddy __u8 ipmi_pkt:1; 4243bd122eeSRahul Lakkireddy __u8 vlan_ex:1; 4253bd122eeSRahul Lakkireddy __u8 ip_frag:1; 4263bd122eeSRahul Lakkireddy #else 4273bd122eeSRahul Lakkireddy __u8 ip_frag:1; 4283bd122eeSRahul Lakkireddy __u8 vlan_ex:1; 4293bd122eeSRahul Lakkireddy __u8 ipmi_pkt:1; 4303bd122eeSRahul Lakkireddy __u8 csum_calc:1; 4313bd122eeSRahul Lakkireddy __u8 iff:4; 4323bd122eeSRahul Lakkireddy #endif 4333bd122eeSRahul Lakkireddy __be16 csum; 4343bd122eeSRahul Lakkireddy __be16 vlan; 4353bd122eeSRahul Lakkireddy __be16 len; 4363bd122eeSRahul Lakkireddy __be32 l2info; 4373bd122eeSRahul Lakkireddy __be16 hdr_len; 4383bd122eeSRahul Lakkireddy __be16 err_vec; 4393bd122eeSRahul Lakkireddy }; 4403bd122eeSRahul Lakkireddy 44123af667fSShagun Agrawal struct cpl_l2t_write_req { 44223af667fSShagun Agrawal WR_HDR; 44323af667fSShagun Agrawal union opcode_tid ot; 44423af667fSShagun Agrawal __be16 params; 44523af667fSShagun Agrawal __be16 l2t_idx; 44623af667fSShagun Agrawal __be16 vlan; 44723af667fSShagun Agrawal __u8 dst_mac[6]; 44823af667fSShagun Agrawal }; 44923af667fSShagun Agrawal 45023af667fSShagun Agrawal /* cpl_l2t_write_req.params fields */ 45123af667fSShagun Agrawal #define S_L2T_W_PORT 8 45223af667fSShagun Agrawal #define V_L2T_W_PORT(x) ((x) << S_L2T_W_PORT) 45323af667fSShagun Agrawal 45423af667fSShagun Agrawal #define S_L2T_W_LPBK 10 45523af667fSShagun Agrawal #define V_L2T_W_LPBK(x) ((x) << S_L2T_W_LPBK) 45623af667fSShagun Agrawal 45723af667fSShagun Agrawal #define S_L2T_W_ARPMISS 11 45823af667fSShagun Agrawal #define V_L2T_W_ARPMISS(x) ((x) << S_L2T_W_ARPMISS) 45923af667fSShagun Agrawal 46023af667fSShagun Agrawal #define S_L2T_W_NOREPLY 15 46123af667fSShagun Agrawal #define V_L2T_W_NOREPLY(x) ((x) << S_L2T_W_NOREPLY) 46223af667fSShagun Agrawal 46323af667fSShagun Agrawal struct cpl_l2t_write_rpl { 46423af667fSShagun Agrawal RSS_HDR 46523af667fSShagun Agrawal union opcode_tid ot; 46623af667fSShagun Agrawal __u8 status; 46723af667fSShagun Agrawal __u8 rsvd[3]; 46823af667fSShagun Agrawal }; 46923af667fSShagun Agrawal 470*993541b2SKarra Satwik struct cpl_smt_write_req { 471*993541b2SKarra Satwik WR_HDR; 472*993541b2SKarra Satwik union opcode_tid ot; 473*993541b2SKarra Satwik __be32 params; 474*993541b2SKarra Satwik __be16 pfvf1; 475*993541b2SKarra Satwik __u8 src_mac1[6]; 476*993541b2SKarra Satwik __be16 pfvf0; 477*993541b2SKarra Satwik __u8 src_mac0[6]; 478*993541b2SKarra Satwik }; 479*993541b2SKarra Satwik 480*993541b2SKarra Satwik struct cpl_t6_smt_write_req { 481*993541b2SKarra Satwik WR_HDR; 482*993541b2SKarra Satwik union opcode_tid ot; 483*993541b2SKarra Satwik __be32 params; 484*993541b2SKarra Satwik __be64 tag; 485*993541b2SKarra Satwik __be16 pfvf0; 486*993541b2SKarra Satwik __u8 src_mac0[6]; 487*993541b2SKarra Satwik __be32 local_ip; 488*993541b2SKarra Satwik __be32 rsvd; 489*993541b2SKarra Satwik }; 490*993541b2SKarra Satwik 491*993541b2SKarra Satwik struct cpl_smt_write_rpl { 492*993541b2SKarra Satwik RSS_HDR 493*993541b2SKarra Satwik union opcode_tid ot; 494*993541b2SKarra Satwik u8 status; 495*993541b2SKarra Satwik u8 rsvd[3]; 496*993541b2SKarra Satwik }; 497*993541b2SKarra Satwik 498*993541b2SKarra Satwik /* cpl_smt_{read,write}_req.params fields */ 499*993541b2SKarra Satwik #define S_SMTW_OVLAN_IDX 16 500*993541b2SKarra Satwik #define V_SMTW_OVLAN_IDX(x) ((x) << S_SMTW_OVLAN_IDX) 501*993541b2SKarra Satwik 502*993541b2SKarra Satwik #define S_SMTW_IDX 20 503*993541b2SKarra Satwik #define V_SMTW_IDX(x) ((x) << S_SMTW_IDX) 504*993541b2SKarra Satwik 505*993541b2SKarra Satwik #define S_SMTW_NORPL 31 506*993541b2SKarra Satwik #define V_SMTW_NORPL(x) ((x) << S_SMTW_NORPL) 507*993541b2SKarra Satwik 5083bd122eeSRahul Lakkireddy /* rx_pkt.l2info fields */ 5093bd122eeSRahul Lakkireddy #define S_RXF_UDP 22 5103bd122eeSRahul Lakkireddy #define V_RXF_UDP(x) ((x) << S_RXF_UDP) 5113bd122eeSRahul Lakkireddy #define F_RXF_UDP V_RXF_UDP(1U) 5123bd122eeSRahul Lakkireddy 5133bd122eeSRahul Lakkireddy #define S_RXF_TCP 23 5143bd122eeSRahul Lakkireddy #define V_RXF_TCP(x) ((x) << S_RXF_TCP) 5153bd122eeSRahul Lakkireddy #define F_RXF_TCP V_RXF_TCP(1U) 5163bd122eeSRahul Lakkireddy 5173bd122eeSRahul Lakkireddy #define S_RXF_IP 24 5183bd122eeSRahul Lakkireddy #define V_RXF_IP(x) ((x) << S_RXF_IP) 5193bd122eeSRahul Lakkireddy #define F_RXF_IP V_RXF_IP(1U) 5203bd122eeSRahul Lakkireddy 5213bd122eeSRahul Lakkireddy #define S_RXF_IP6 25 5223bd122eeSRahul Lakkireddy #define V_RXF_IP6(x) ((x) << S_RXF_IP6) 5233bd122eeSRahul Lakkireddy #define F_RXF_IP6 V_RXF_IP6(1U) 5243bd122eeSRahul Lakkireddy 525cd9ce8c3SRahul Lakkireddy /* rx_pkt.err_vec fields */ 526cd9ce8c3SRahul Lakkireddy /* In T6, rx_pkt.err_vec indicates 527cd9ce8c3SRahul Lakkireddy * RxError Error vector (16b) or 528cd9ce8c3SRahul Lakkireddy * Encapsulating header length (8b), 529cd9ce8c3SRahul Lakkireddy * Outer encapsulation type (2b) and 530cd9ce8c3SRahul Lakkireddy * compressed error vector (6b) if CRxPktEnc is 531cd9ce8c3SRahul Lakkireddy * enabled in TP_OUT_CONFIG 532cd9ce8c3SRahul Lakkireddy */ 533cd9ce8c3SRahul Lakkireddy #define S_T6_COMPR_RXERR_VEC 0 534cd9ce8c3SRahul Lakkireddy #define M_T6_COMPR_RXERR_VEC 0x3F 535cd9ce8c3SRahul Lakkireddy #define V_T6_COMPR_RXERR_VEC(x) ((x) << S_T6_COMPR_RXERR_VEC) 536cd9ce8c3SRahul Lakkireddy #define G_T6_COMPR_RXERR_VEC(x) \ 537cd9ce8c3SRahul Lakkireddy (((x) >> S_T6_COMPR_RXERR_VEC) & M_T6_COMPR_RXERR_VEC) 538cd9ce8c3SRahul Lakkireddy 5393bd122eeSRahul Lakkireddy /* cpl_fw*.type values */ 5403bd122eeSRahul Lakkireddy enum { 5413bd122eeSRahul Lakkireddy FW_TYPE_RSSCPL = 4, 5423bd122eeSRahul Lakkireddy }; 5433bd122eeSRahul Lakkireddy 5443bd122eeSRahul Lakkireddy struct cpl_fw4_msg { 5453bd122eeSRahul Lakkireddy RSS_HDR; 5463bd122eeSRahul Lakkireddy u8 opcode; 5473bd122eeSRahul Lakkireddy u8 type; 5483bd122eeSRahul Lakkireddy __be16 rsvd0; 5493bd122eeSRahul Lakkireddy __be32 rsvd1; 5503bd122eeSRahul Lakkireddy __be64 data[2]; 5513bd122eeSRahul Lakkireddy }; 5523bd122eeSRahul Lakkireddy 5533bd122eeSRahul Lakkireddy struct cpl_fw6_msg { 5543bd122eeSRahul Lakkireddy RSS_HDR; 5553bd122eeSRahul Lakkireddy u8 opcode; 5563bd122eeSRahul Lakkireddy u8 type; 5573bd122eeSRahul Lakkireddy __be16 rsvd0; 5583bd122eeSRahul Lakkireddy __be32 rsvd1; 5593bd122eeSRahul Lakkireddy __be64 data[4]; 5603bd122eeSRahul Lakkireddy }; 5613bd122eeSRahul Lakkireddy 56241dc98b0SShagun Agrawal /* ULP_TX opcodes */ 5633bd122eeSRahul Lakkireddy enum { 56441dc98b0SShagun Agrawal ULP_TX_PKT = 4 56541dc98b0SShagun Agrawal }; 56641dc98b0SShagun Agrawal 56741dc98b0SShagun Agrawal enum { 56841dc98b0SShagun Agrawal ULP_TX_SC_NOOP = 0x80, 5693bd122eeSRahul Lakkireddy ULP_TX_SC_IMM = 0x81, 5703bd122eeSRahul Lakkireddy ULP_TX_SC_DSGL = 0x82, 5713bd122eeSRahul Lakkireddy ULP_TX_SC_ISGL = 0x83 5723bd122eeSRahul Lakkireddy }; 5733bd122eeSRahul Lakkireddy 5743bd122eeSRahul Lakkireddy #define S_ULPTX_CMD 24 5753bd122eeSRahul Lakkireddy #define M_ULPTX_CMD 0xFF 5763bd122eeSRahul Lakkireddy #define V_ULPTX_CMD(x) ((x) << S_ULPTX_CMD) 5773bd122eeSRahul Lakkireddy 5783bd122eeSRahul Lakkireddy #define S_ULP_TX_SC_MORE 23 5793bd122eeSRahul Lakkireddy #define V_ULP_TX_SC_MORE(x) ((x) << S_ULP_TX_SC_MORE) 5803bd122eeSRahul Lakkireddy #define F_ULP_TX_SC_MORE V_ULP_TX_SC_MORE(1U) 5813bd122eeSRahul Lakkireddy 5823bd122eeSRahul Lakkireddy struct ulptx_sge_pair { 5833bd122eeSRahul Lakkireddy __be32 len[2]; 5843bd122eeSRahul Lakkireddy __be64 addr[2]; 5853bd122eeSRahul Lakkireddy }; 5863bd122eeSRahul Lakkireddy 5873bd122eeSRahul Lakkireddy struct ulptx_sgl { 5883bd122eeSRahul Lakkireddy __be32 cmd_nsge; 5893bd122eeSRahul Lakkireddy __be32 len0; 5903bd122eeSRahul Lakkireddy __be64 addr0; 5913bd122eeSRahul Lakkireddy 5923bd122eeSRahul Lakkireddy #if !(defined C99_NOT_SUPPORTED) 5933bd122eeSRahul Lakkireddy struct ulptx_sge_pair sge[0]; 5943bd122eeSRahul Lakkireddy #endif 5953bd122eeSRahul Lakkireddy 5963bd122eeSRahul Lakkireddy }; 5973bd122eeSRahul Lakkireddy 5983bd122eeSRahul Lakkireddy struct ulptx_idata { 5993bd122eeSRahul Lakkireddy __be32 cmd_more; 6003bd122eeSRahul Lakkireddy __be32 len; 6013bd122eeSRahul Lakkireddy }; 6023bd122eeSRahul Lakkireddy 6033bd122eeSRahul Lakkireddy #define S_ULPTX_NSGE 0 6043bd122eeSRahul Lakkireddy #define M_ULPTX_NSGE 0xFFFF 6053bd122eeSRahul Lakkireddy #define V_ULPTX_NSGE(x) ((x) << S_ULPTX_NSGE) 6063bd122eeSRahul Lakkireddy 6073bd122eeSRahul Lakkireddy struct ulp_txpkt { 6083bd122eeSRahul Lakkireddy __be32 cmd_dest; 6093bd122eeSRahul Lakkireddy __be32 len; 6103bd122eeSRahul Lakkireddy }; 6113bd122eeSRahul Lakkireddy 6123bd122eeSRahul Lakkireddy /* ulp_txpkt.cmd_dest fields */ 6133bd122eeSRahul Lakkireddy #define S_ULP_TXPKT_DEST 16 6143bd122eeSRahul Lakkireddy #define M_ULP_TXPKT_DEST 0x3 6153bd122eeSRahul Lakkireddy #define V_ULP_TXPKT_DEST(x) ((x) << S_ULP_TXPKT_DEST) 6163bd122eeSRahul Lakkireddy 6173bd122eeSRahul Lakkireddy #define S_ULP_TXPKT_FID 4 6183bd122eeSRahul Lakkireddy #define M_ULP_TXPKT_FID 0x7ff 6193bd122eeSRahul Lakkireddy #define V_ULP_TXPKT_FID(x) ((x) << S_ULP_TXPKT_FID) 6203bd122eeSRahul Lakkireddy 6213bd122eeSRahul Lakkireddy #define S_ULP_TXPKT_RO 3 6223bd122eeSRahul Lakkireddy #define V_ULP_TXPKT_RO(x) ((x) << S_ULP_TXPKT_RO) 6233bd122eeSRahul Lakkireddy #define F_ULP_TXPKT_RO V_ULP_TXPKT_RO(1U) 6243bd122eeSRahul Lakkireddy 6253bd122eeSRahul Lakkireddy #endif /* T4_MSG_H */ 626