1 /************************************************************************** 2 SPDX-License-Identifier: BSD-2-Clause 3 4 Copyright (c) 2007-2009 Chelsio Inc. 5 All rights reserved. 6 7 Redistribution and use in source and binary forms, with or without 8 modification, are permitted provided that the following conditions are met: 9 10 1. Redistributions of source code must retain the above copyright notice, 11 this list of conditions and the following disclaimer. 12 13 2. Neither the name of the Chelsio Corporation nor the names of its 14 contributors may be used to endorse or promote products derived from 15 this software without specific prior written permission. 16 17 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 21 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27 POSSIBILITY OF SUCH DAMAGE. 28 29 $FreeBSD$ 30 31 ***************************************************************************/ 32 #ifndef T3_CPL_H 33 #define T3_CPL_H 34 35 enum CPL_opcode { 36 CPL_PASS_OPEN_REQ = 0x1, 37 CPL_PASS_ACCEPT_RPL = 0x2, 38 CPL_ACT_OPEN_REQ = 0x3, 39 CPL_SET_TCB = 0x4, 40 CPL_SET_TCB_FIELD = 0x5, 41 CPL_GET_TCB = 0x6, 42 CPL_PCMD = 0x7, 43 CPL_CLOSE_CON_REQ = 0x8, 44 CPL_CLOSE_LISTSRV_REQ = 0x9, 45 CPL_ABORT_REQ = 0xA, 46 CPL_ABORT_RPL = 0xB, 47 CPL_TX_DATA = 0xC, 48 CPL_RX_DATA_ACK = 0xD, 49 CPL_TX_PKT = 0xE, 50 CPL_RTE_DELETE_REQ = 0xF, 51 CPL_RTE_WRITE_REQ = 0x10, 52 CPL_RTE_READ_REQ = 0x11, 53 CPL_L2T_WRITE_REQ = 0x12, 54 CPL_L2T_READ_REQ = 0x13, 55 CPL_SMT_WRITE_REQ = 0x14, 56 CPL_SMT_READ_REQ = 0x15, 57 CPL_TX_PKT_LSO = 0x16, 58 CPL_PCMD_READ = 0x17, 59 CPL_BARRIER = 0x18, 60 CPL_TID_RELEASE = 0x1A, 61 62 CPL_CLOSE_LISTSRV_RPL = 0x20, 63 CPL_ERROR = 0x21, 64 CPL_GET_TCB_RPL = 0x22, 65 CPL_L2T_WRITE_RPL = 0x23, 66 CPL_PCMD_READ_RPL = 0x24, 67 CPL_PCMD_RPL = 0x25, 68 CPL_PEER_CLOSE = 0x26, 69 CPL_RTE_DELETE_RPL = 0x27, 70 CPL_RTE_WRITE_RPL = 0x28, 71 CPL_RX_DDP_COMPLETE = 0x29, 72 CPL_RX_PHYS_ADDR = 0x2A, 73 CPL_RX_PKT = 0x2B, 74 CPL_RX_URG_NOTIFY = 0x2C, 75 CPL_SET_TCB_RPL = 0x2D, 76 CPL_SMT_WRITE_RPL = 0x2E, 77 CPL_TX_DATA_ACK = 0x2F, 78 79 CPL_ABORT_REQ_RSS = 0x30, 80 CPL_ABORT_RPL_RSS = 0x31, 81 CPL_CLOSE_CON_RPL = 0x32, 82 CPL_ISCSI_HDR = 0x33, 83 CPL_L2T_READ_RPL = 0x34, 84 CPL_RDMA_CQE = 0x35, 85 CPL_RDMA_CQE_READ_RSP = 0x36, 86 CPL_RDMA_CQE_ERR = 0x37, 87 CPL_RTE_READ_RPL = 0x38, 88 CPL_RX_DATA = 0x39, 89 90 CPL_ACT_OPEN_RPL = 0x40, 91 CPL_PASS_OPEN_RPL = 0x41, 92 CPL_RX_DATA_DDP = 0x42, 93 CPL_SMT_READ_RPL = 0x43, 94 95 CPL_ACT_ESTABLISH = 0x50, 96 CPL_PASS_ESTABLISH = 0x51, 97 98 CPL_PASS_ACCEPT_REQ = 0x70, 99 100 CPL_ASYNC_NOTIF = 0x80, /* fake opcode for async notifications */ 101 102 CPL_TX_DMA_ACK = 0xA0, 103 CPL_RDMA_READ_REQ = 0xA1, 104 CPL_RDMA_TERMINATE = 0xA2, 105 CPL_TRACE_PKT = 0xA3, 106 CPL_RDMA_EC_STATUS = 0xA5, 107 CPL_SGE_EC_CR_RETURN = 0xA6, 108 109 NUM_CPL_CMDS /* must be last and previous entries must be sorted */ 110 }; 111 112 enum CPL_error { 113 CPL_ERR_NONE = 0, 114 CPL_ERR_TCAM_PARITY = 1, 115 CPL_ERR_TCAM_FULL = 3, 116 CPL_ERR_CONN_RESET = 20, 117 CPL_ERR_CONN_EXIST = 22, 118 CPL_ERR_ARP_MISS = 23, 119 CPL_ERR_BAD_SYN = 24, 120 CPL_ERR_CONN_TIMEDOUT = 30, 121 CPL_ERR_XMIT_TIMEDOUT = 31, 122 CPL_ERR_PERSIST_TIMEDOUT = 32, 123 CPL_ERR_FINWAIT2_TIMEDOUT = 33, 124 CPL_ERR_KEEPALIVE_TIMEDOUT = 34, 125 CPL_ERR_RTX_NEG_ADVICE = 35, 126 CPL_ERR_PERSIST_NEG_ADVICE = 36, 127 CPL_ERR_ABORT_FAILED = 42, 128 CPL_ERR_GENERAL = 99 129 }; 130 131 enum { 132 CPL_CONN_POLICY_AUTO = 0, 133 CPL_CONN_POLICY_ASK = 1, 134 CPL_CONN_POLICY_FILTER = 2, 135 CPL_CONN_POLICY_DENY = 3 136 }; 137 138 enum { 139 ULP_MODE_NONE = 0, 140 ULP_MODE_TCP_DDP = 1, 141 ULP_MODE_ISCSI = 2, 142 ULP_MODE_RDMA = 4, 143 ULP_MODE_TCPDDP = 5 144 }; 145 146 enum { 147 ULP_CRC_HEADER = 1 << 0, 148 ULP_CRC_DATA = 1 << 1 149 }; 150 151 enum { 152 CPL_PASS_OPEN_ACCEPT, 153 CPL_PASS_OPEN_REJECT, 154 CPL_PASS_OPEN_ACCEPT_TNL 155 }; 156 157 enum { 158 CPL_ABORT_SEND_RST = 0, 159 CPL_ABORT_NO_RST, 160 CPL_ABORT_POST_CLOSE_REQ = 2 161 }; 162 163 enum { /* TX_PKT_LSO ethernet types */ 164 CPL_ETH_II, 165 CPL_ETH_II_VLAN, 166 CPL_ETH_802_3, 167 CPL_ETH_802_3_VLAN 168 }; 169 170 enum { /* TCP congestion control algorithms */ 171 CONG_ALG_RENO, 172 CONG_ALG_TAHOE, 173 CONG_ALG_NEWRENO, 174 CONG_ALG_HIGHSPEED 175 }; 176 177 enum { /* RSS hash type */ 178 RSS_HASH_NONE = 0, 179 RSS_HASH_2_TUPLE = 1, 180 RSS_HASH_4_TUPLE = 2, 181 RSS_HASH_TCPV6 = 3 182 }; 183 184 union opcode_tid { 185 __be32 opcode_tid; 186 __u8 opcode; 187 }; 188 189 #define S_OPCODE 24 190 #define V_OPCODE(x) ((x) << S_OPCODE) 191 #define G_OPCODE(x) (((x) >> S_OPCODE) & 0xFF) 192 #define G_TID(x) ((x) & 0xFFFFFF) 193 194 /* tid is assumed to be 24-bits */ 195 #define MK_OPCODE_TID(opcode, tid) (V_OPCODE(opcode) | (tid)) 196 197 #define OPCODE_TID(cmd) ((cmd)->ot.opcode_tid) 198 199 /* extract the TID from a CPL command */ 200 #define GET_TID(cmd) (G_TID(ntohl(OPCODE_TID(cmd)))) 201 202 struct tcp_options { 203 __be16 mss; 204 __u8 wsf; 205 #if defined(__LITTLE_ENDIAN_BITFIELD) 206 __u8 :5; 207 __u8 ecn:1; 208 __u8 sack:1; 209 __u8 tstamp:1; 210 #else 211 __u8 tstamp:1; 212 __u8 sack:1; 213 __u8 ecn:1; 214 __u8 :5; 215 #endif 216 }; 217 218 struct rss_header { 219 __u8 opcode; 220 #if defined(__LITTLE_ENDIAN_BITFIELD) 221 __u8 cpu_idx:6; 222 __u8 hash_type:2; 223 #else 224 __u8 hash_type:2; 225 __u8 cpu_idx:6; 226 #endif 227 __be16 cq_idx; 228 __be32 rss_hash_val; 229 }; 230 231 #define S_HASHTYPE 22 232 #define M_HASHTYPE 0x3 233 #define G_HASHTYPE(x) (((x) >> S_HASHTYPE) & M_HASHTYPE) 234 235 #define S_QNUM 0 236 #define M_QNUM 0xFFFF 237 #define G_QNUM(x) (((x) >> S_QNUM) & M_QNUM) 238 239 #ifndef CHELSIO_FW 240 struct work_request_hdr { 241 union { 242 struct { 243 __be32 wr_hi; 244 __be32 wr_lo; 245 } ilp32; 246 struct { 247 __be64 wr_hilo; 248 } lp64; 249 } u; 250 }; 251 252 #define wrh_hi u.ilp32.wr_hi 253 #define wrh_lo u.ilp32.wr_lo 254 #define wrh_hilo u.lp64.wr_hilo 255 256 /* wr_hi fields */ 257 #define S_WR_SGE_CREDITS 0 258 #define M_WR_SGE_CREDITS 0xFF 259 #define V_WR_SGE_CREDITS(x) ((x) << S_WR_SGE_CREDITS) 260 #define G_WR_SGE_CREDITS(x) (((x) >> S_WR_SGE_CREDITS) & M_WR_SGE_CREDITS) 261 262 #define S_WR_SGLSFLT 8 263 #define M_WR_SGLSFLT 0xFF 264 #define V_WR_SGLSFLT(x) ((x) << S_WR_SGLSFLT) 265 #define G_WR_SGLSFLT(x) (((x) >> S_WR_SGLSFLT) & M_WR_SGLSFLT) 266 267 #define S_WR_BCNTLFLT 16 268 #define M_WR_BCNTLFLT 0xF 269 #define V_WR_BCNTLFLT(x) ((x) << S_WR_BCNTLFLT) 270 #define G_WR_BCNTLFLT(x) (((x) >> S_WR_BCNTLFLT) & M_WR_BCNTLFLT) 271 272 /* 273 * Applicable to BYPASS WRs only: the uP will add a CPL_BARRIER before 274 * and after the BYPASS WR if the ATOMIC bit is set. 275 */ 276 #define S_WR_ATOMIC 16 277 #define V_WR_ATOMIC(x) ((x) << S_WR_ATOMIC) 278 #define F_WR_ATOMIC V_WR_ATOMIC(1U) 279 280 /* 281 * Applicable to BYPASS WRs only: the uP will flush buffered non abort 282 * related WRs. 283 */ 284 #define S_WR_FLUSH 17 285 #define V_WR_FLUSH(x) ((x) << S_WR_FLUSH) 286 #define F_WR_FLUSH V_WR_FLUSH(1U) 287 288 #define S_WR_CHN 18 289 #define V_WR_CHN(x) ((x) << S_WR_CHN) 290 #define F_WR_CHN V_WR_CHN(1U) 291 292 #define S_WR_CHN_VLD 19 293 #define V_WR_CHN_VLD(x) ((x) << S_WR_CHN_VLD) 294 #define F_WR_CHN_VLD V_WR_CHN_VLD(1U) 295 296 #define S_WR_DATATYPE 20 297 #define V_WR_DATATYPE(x) ((x) << S_WR_DATATYPE) 298 #define F_WR_DATATYPE V_WR_DATATYPE(1U) 299 300 #define S_WR_COMPL 21 301 #define V_WR_COMPL(x) ((x) << S_WR_COMPL) 302 #define F_WR_COMPL V_WR_COMPL(1U) 303 304 #define S_WR_EOP 22 305 #define V_WR_EOP(x) ((x) << S_WR_EOP) 306 #define F_WR_EOP V_WR_EOP(1U) 307 308 #define S_WR_SOP 23 309 #define V_WR_SOP(x) ((x) << S_WR_SOP) 310 #define F_WR_SOP V_WR_SOP(1U) 311 312 #define S_WR_OP 24 313 #define M_WR_OP 0xFF 314 #define V_WR_OP(x) ((x) << S_WR_OP) 315 #define G_WR_OP(x) (((x) >> S_WR_OP) & M_WR_OP) 316 317 /* wr_lo fields */ 318 #define S_WR_LEN 0 319 #define M_WR_LEN 0xFF 320 #define V_WR_LEN(x) ((x) << S_WR_LEN) 321 #define G_WR_LEN(x) (((x) >> S_WR_LEN) & M_WR_LEN) 322 323 #define S_WR_TID 8 324 #define M_WR_TID 0xFFFFF 325 #define V_WR_TID(x) ((x) << S_WR_TID) 326 #define G_WR_TID(x) (((x) >> S_WR_TID) & M_WR_TID) 327 328 #define S_WR_CR_FLUSH 30 329 #define V_WR_CR_FLUSH(x) ((x) << S_WR_CR_FLUSH) 330 #define F_WR_CR_FLUSH V_WR_CR_FLUSH(1U) 331 332 #define S_WR_GEN 31 333 #define V_WR_GEN(x) ((x) << S_WR_GEN) 334 #define F_WR_GEN V_WR_GEN(1U) 335 #define G_WR_GEN(x) ((x) >> S_WR_GEN) 336 337 # define WR_HDR struct work_request_hdr wr 338 # define RSS_HDR 339 #else 340 # define WR_HDR 341 # define RSS_HDR struct rss_header rss_hdr; 342 #endif 343 344 /* option 0 lower-half fields */ 345 #define S_CPL_STATUS 0 346 #define M_CPL_STATUS 0xFF 347 #define V_CPL_STATUS(x) ((x) << S_CPL_STATUS) 348 #define G_CPL_STATUS(x) (((x) >> S_CPL_STATUS) & M_CPL_STATUS) 349 350 #define S_INJECT_TIMER 6 351 #define V_INJECT_TIMER(x) ((x) << S_INJECT_TIMER) 352 #define F_INJECT_TIMER V_INJECT_TIMER(1U) 353 354 #define S_NO_OFFLOAD 7 355 #define V_NO_OFFLOAD(x) ((x) << S_NO_OFFLOAD) 356 #define F_NO_OFFLOAD V_NO_OFFLOAD(1U) 357 358 #define S_ULP_MODE 8 359 #define M_ULP_MODE 0xF 360 #define V_ULP_MODE(x) ((x) << S_ULP_MODE) 361 #define G_ULP_MODE(x) (((x) >> S_ULP_MODE) & M_ULP_MODE) 362 363 #define S_RCV_BUFSIZ 12 364 #define M_RCV_BUFSIZ 0x3FFF 365 #define V_RCV_BUFSIZ(x) ((x) << S_RCV_BUFSIZ) 366 #define G_RCV_BUFSIZ(x) (((x) >> S_RCV_BUFSIZ) & M_RCV_BUFSIZ) 367 368 #define S_TOS 26 369 #define M_TOS 0x3F 370 #define V_TOS(x) ((x) << S_TOS) 371 #define G_TOS(x) (((x) >> S_TOS) & M_TOS) 372 373 /* option 0 upper-half fields */ 374 #define S_DELACK 0 375 #define V_DELACK(x) ((x) << S_DELACK) 376 #define F_DELACK V_DELACK(1U) 377 378 #define S_NO_CONG 1 379 #define V_NO_CONG(x) ((x) << S_NO_CONG) 380 #define F_NO_CONG V_NO_CONG(1U) 381 382 #define S_SRC_MAC_SEL 2 383 #define M_SRC_MAC_SEL 0x3 384 #define V_SRC_MAC_SEL(x) ((x) << S_SRC_MAC_SEL) 385 #define G_SRC_MAC_SEL(x) (((x) >> S_SRC_MAC_SEL) & M_SRC_MAC_SEL) 386 387 #define S_L2T_IDX 4 388 #define M_L2T_IDX 0x7FF 389 #define V_L2T_IDX(x) ((x) << S_L2T_IDX) 390 #define G_L2T_IDX(x) (((x) >> S_L2T_IDX) & M_L2T_IDX) 391 392 #define S_TX_CHANNEL 15 393 #define V_TX_CHANNEL(x) ((x) << S_TX_CHANNEL) 394 #define F_TX_CHANNEL V_TX_CHANNEL(1U) 395 396 #define S_TCAM_BYPASS 16 397 #define V_TCAM_BYPASS(x) ((x) << S_TCAM_BYPASS) 398 #define F_TCAM_BYPASS V_TCAM_BYPASS(1U) 399 400 #define S_NAGLE 17 401 #define V_NAGLE(x) ((x) << S_NAGLE) 402 #define F_NAGLE V_NAGLE(1U) 403 404 #define S_WND_SCALE 18 405 #define M_WND_SCALE 0xF 406 #define V_WND_SCALE(x) ((x) << S_WND_SCALE) 407 #define G_WND_SCALE(x) (((x) >> S_WND_SCALE) & M_WND_SCALE) 408 409 #define S_KEEP_ALIVE 22 410 #define V_KEEP_ALIVE(x) ((x) << S_KEEP_ALIVE) 411 #define F_KEEP_ALIVE V_KEEP_ALIVE(1U) 412 413 #define S_MAX_RETRANS 23 414 #define M_MAX_RETRANS 0xF 415 #define V_MAX_RETRANS(x) ((x) << S_MAX_RETRANS) 416 #define G_MAX_RETRANS(x) (((x) >> S_MAX_RETRANS) & M_MAX_RETRANS) 417 418 #define S_MAX_RETRANS_OVERRIDE 27 419 #define V_MAX_RETRANS_OVERRIDE(x) ((x) << S_MAX_RETRANS_OVERRIDE) 420 #define F_MAX_RETRANS_OVERRIDE V_MAX_RETRANS_OVERRIDE(1U) 421 422 #define S_MSS_IDX 28 423 #define M_MSS_IDX 0xF 424 #define V_MSS_IDX(x) ((x) << S_MSS_IDX) 425 #define G_MSS_IDX(x) (((x) >> S_MSS_IDX) & M_MSS_IDX) 426 427 /* option 1 fields */ 428 #define S_RSS_ENABLE 0 429 #define V_RSS_ENABLE(x) ((x) << S_RSS_ENABLE) 430 #define F_RSS_ENABLE V_RSS_ENABLE(1U) 431 432 #define S_RSS_MASK_LEN 1 433 #define M_RSS_MASK_LEN 0x7 434 #define V_RSS_MASK_LEN(x) ((x) << S_RSS_MASK_LEN) 435 #define G_RSS_MASK_LEN(x) (((x) >> S_RSS_MASK_LEN) & M_RSS_MASK_LEN) 436 437 #define S_CPU_IDX 4 438 #define M_CPU_IDX 0x3F 439 #define V_CPU_IDX(x) ((x) << S_CPU_IDX) 440 #define G_CPU_IDX(x) (((x) >> S_CPU_IDX) & M_CPU_IDX) 441 442 #define S_OPT1_VLAN 6 443 #define M_OPT1_VLAN 0xFFF 444 #define V_OPT1_VLAN(x) ((x) << S_OPT1_VLAN) 445 #define G_OPT1_VLAN(x) (((x) >> S_OPT1_VLAN) & M_OPT1_VLAN) 446 447 #define S_MAC_MATCH_VALID 18 448 #define V_MAC_MATCH_VALID(x) ((x) << S_MAC_MATCH_VALID) 449 #define F_MAC_MATCH_VALID V_MAC_MATCH_VALID(1U) 450 451 #define S_CONN_POLICY 19 452 #define M_CONN_POLICY 0x3 453 #define V_CONN_POLICY(x) ((x) << S_CONN_POLICY) 454 #define G_CONN_POLICY(x) (((x) >> S_CONN_POLICY) & M_CONN_POLICY) 455 456 #define S_SYN_DEFENSE 21 457 #define V_SYN_DEFENSE(x) ((x) << S_SYN_DEFENSE) 458 #define F_SYN_DEFENSE V_SYN_DEFENSE(1U) 459 460 #define S_VLAN_PRI 22 461 #define M_VLAN_PRI 0x3 462 #define V_VLAN_PRI(x) ((x) << S_VLAN_PRI) 463 #define G_VLAN_PRI(x) (((x) >> S_VLAN_PRI) & M_VLAN_PRI) 464 465 #define S_VLAN_PRI_VALID 24 466 #define V_VLAN_PRI_VALID(x) ((x) << S_VLAN_PRI_VALID) 467 #define F_VLAN_PRI_VALID V_VLAN_PRI_VALID(1U) 468 469 #define S_PKT_TYPE 25 470 #define M_PKT_TYPE 0x3 471 #define V_PKT_TYPE(x) ((x) << S_PKT_TYPE) 472 #define G_PKT_TYPE(x) (((x) >> S_PKT_TYPE) & M_PKT_TYPE) 473 474 #define S_MAC_MATCH 27 475 #define M_MAC_MATCH 0x1F 476 #define V_MAC_MATCH(x) ((x) << S_MAC_MATCH) 477 #define G_MAC_MATCH(x) (((x) >> S_MAC_MATCH) & M_MAC_MATCH) 478 479 /* option 2 fields */ 480 #define S_CPU_INDEX 0 481 #define M_CPU_INDEX 0x7F 482 #define V_CPU_INDEX(x) ((x) << S_CPU_INDEX) 483 #define G_CPU_INDEX(x) (((x) >> S_CPU_INDEX) & M_CPU_INDEX) 484 485 #define S_CPU_INDEX_VALID 7 486 #define V_CPU_INDEX_VALID(x) ((x) << S_CPU_INDEX_VALID) 487 #define F_CPU_INDEX_VALID V_CPU_INDEX_VALID(1U) 488 489 #define S_RX_COALESCE 8 490 #define M_RX_COALESCE 0x3 491 #define V_RX_COALESCE(x) ((x) << S_RX_COALESCE) 492 #define G_RX_COALESCE(x) (((x) >> S_RX_COALESCE) & M_RX_COALESCE) 493 494 #define S_RX_COALESCE_VALID 10 495 #define V_RX_COALESCE_VALID(x) ((x) << S_RX_COALESCE_VALID) 496 #define F_RX_COALESCE_VALID V_RX_COALESCE_VALID(1U) 497 498 #define S_CONG_CONTROL_FLAVOR 11 499 #define M_CONG_CONTROL_FLAVOR 0x3 500 #define V_CONG_CONTROL_FLAVOR(x) ((x) << S_CONG_CONTROL_FLAVOR) 501 #define G_CONG_CONTROL_FLAVOR(x) (((x) >> S_CONG_CONTROL_FLAVOR) & M_CONG_CONTROL_FLAVOR) 502 503 #define S_PACING_FLAVOR 13 504 #define M_PACING_FLAVOR 0x3 505 #define V_PACING_FLAVOR(x) ((x) << S_PACING_FLAVOR) 506 #define G_PACING_FLAVOR(x) (((x) >> S_PACING_FLAVOR) & M_PACING_FLAVOR) 507 508 #define S_FLAVORS_VALID 15 509 #define V_FLAVORS_VALID(x) ((x) << S_FLAVORS_VALID) 510 #define F_FLAVORS_VALID V_FLAVORS_VALID(1U) 511 512 #define S_RX_FC_DISABLE 16 513 #define V_RX_FC_DISABLE(x) ((x) << S_RX_FC_DISABLE) 514 #define F_RX_FC_DISABLE V_RX_FC_DISABLE(1U) 515 516 #define S_RX_FC_VALID 17 517 #define V_RX_FC_VALID(x) ((x) << S_RX_FC_VALID) 518 #define F_RX_FC_VALID V_RX_FC_VALID(1U) 519 520 struct cpl_pass_open_req { 521 WR_HDR; 522 union opcode_tid ot; 523 __be16 local_port; 524 __be16 peer_port; 525 __be32 local_ip; 526 __be32 peer_ip; 527 __be32 opt0h; 528 __be32 opt0l; 529 __be32 peer_netmask; 530 __be32 opt1; 531 }; 532 533 struct cpl_pass_open_rpl { 534 RSS_HDR 535 union opcode_tid ot; 536 __be16 local_port; 537 __be16 peer_port; 538 __be32 local_ip; 539 __be32 peer_ip; 540 __u8 resvd[7]; 541 __u8 status; 542 }; 543 544 struct cpl_pass_establish { 545 RSS_HDR 546 union opcode_tid ot; 547 __be16 local_port; 548 __be16 peer_port; 549 __be32 local_ip; 550 __be32 peer_ip; 551 __be32 tos_tid; 552 __be16 l2t_idx; 553 __be16 tcp_opt; 554 __be32 snd_isn; 555 __be32 rcv_isn; 556 }; 557 558 /* cpl_pass_establish.tos_tid fields */ 559 #define S_PASS_OPEN_TID 0 560 #define M_PASS_OPEN_TID 0xFFFFFF 561 #define V_PASS_OPEN_TID(x) ((x) << S_PASS_OPEN_TID) 562 #define G_PASS_OPEN_TID(x) (((x) >> S_PASS_OPEN_TID) & M_PASS_OPEN_TID) 563 564 #define S_PASS_OPEN_TOS 24 565 #define M_PASS_OPEN_TOS 0xFF 566 #define V_PASS_OPEN_TOS(x) ((x) << S_PASS_OPEN_TOS) 567 #define G_PASS_OPEN_TOS(x) (((x) >> S_PASS_OPEN_TOS) & M_PASS_OPEN_TOS) 568 569 /* cpl_pass_establish.l2t_idx fields */ 570 #define S_L2T_IDX16 5 571 #define M_L2T_IDX16 0x7FF 572 #define V_L2T_IDX16(x) ((x) << S_L2T_IDX16) 573 #define G_L2T_IDX16(x) (((x) >> S_L2T_IDX16) & M_L2T_IDX16) 574 575 /* cpl_pass_establish.tcp_opt fields (also applies act_open_establish) */ 576 #define G_TCPOPT_WSCALE_OK(x) (((x) >> 5) & 1) 577 #define G_TCPOPT_SACK(x) (((x) >> 6) & 1) 578 #define G_TCPOPT_TSTAMP(x) (((x) >> 7) & 1) 579 #define G_TCPOPT_SND_WSCALE(x) (((x) >> 8) & 0xf) 580 #define G_TCPOPT_MSS(x) (((x) >> 12) & 0xf) 581 582 struct cpl_pass_accept_req { 583 RSS_HDR 584 union opcode_tid ot; 585 __be16 local_port; 586 __be16 peer_port; 587 __be32 local_ip; 588 __be32 peer_ip; 589 __be32 tos_tid; 590 struct tcp_options tcp_options; 591 __u8 dst_mac[6]; 592 __be16 vlan_tag; 593 __u8 src_mac[6]; 594 #if defined(__LITTLE_ENDIAN_BITFIELD) 595 __u8 :3; 596 __u8 addr_idx:3; 597 __u8 port_idx:1; 598 __u8 exact_match:1; 599 #else 600 __u8 exact_match:1; 601 __u8 port_idx:1; 602 __u8 addr_idx:3; 603 __u8 :3; 604 #endif 605 __u8 rsvd; 606 __be32 rcv_isn; 607 __be32 rsvd2; 608 }; 609 610 struct cpl_pass_accept_rpl { 611 WR_HDR; 612 union opcode_tid ot; 613 __be32 opt2; 614 __be32 rsvd; 615 __be32 peer_ip; 616 __be32 opt0h; 617 __be32 opt0l_status; 618 }; 619 620 struct cpl_act_open_req { 621 WR_HDR; 622 union opcode_tid ot; 623 __be16 local_port; 624 __be16 peer_port; 625 __be32 local_ip; 626 __be32 peer_ip; 627 __be32 opt0h; 628 __be32 opt0l; 629 __be32 params; 630 __be32 opt2; 631 }; 632 633 /* cpl_act_open_req.params fields */ 634 #define S_AOPEN_VLAN_PRI 9 635 #define M_AOPEN_VLAN_PRI 0x3 636 #define V_AOPEN_VLAN_PRI(x) ((x) << S_AOPEN_VLAN_PRI) 637 #define G_AOPEN_VLAN_PRI(x) (((x) >> S_AOPEN_VLAN_PRI) & M_AOPEN_VLAN_PRI) 638 639 #define S_AOPEN_VLAN_PRI_VALID 11 640 #define V_AOPEN_VLAN_PRI_VALID(x) ((x) << S_AOPEN_VLAN_PRI_VALID) 641 #define F_AOPEN_VLAN_PRI_VALID V_AOPEN_VLAN_PRI_VALID(1U) 642 643 #define S_AOPEN_PKT_TYPE 12 644 #define M_AOPEN_PKT_TYPE 0x3 645 #define V_AOPEN_PKT_TYPE(x) ((x) << S_AOPEN_PKT_TYPE) 646 #define G_AOPEN_PKT_TYPE(x) (((x) >> S_AOPEN_PKT_TYPE) & M_AOPEN_PKT_TYPE) 647 648 #define S_AOPEN_MAC_MATCH 14 649 #define M_AOPEN_MAC_MATCH 0x1F 650 #define V_AOPEN_MAC_MATCH(x) ((x) << S_AOPEN_MAC_MATCH) 651 #define G_AOPEN_MAC_MATCH(x) (((x) >> S_AOPEN_MAC_MATCH) & M_AOPEN_MAC_MATCH) 652 653 #define S_AOPEN_MAC_MATCH_VALID 19 654 #define V_AOPEN_MAC_MATCH_VALID(x) ((x) << S_AOPEN_MAC_MATCH_VALID) 655 #define F_AOPEN_MAC_MATCH_VALID V_AOPEN_MAC_MATCH_VALID(1U) 656 657 #define S_AOPEN_IFF_VLAN 20 658 #define M_AOPEN_IFF_VLAN 0xFFF 659 #define V_AOPEN_IFF_VLAN(x) ((x) << S_AOPEN_IFF_VLAN) 660 #define G_AOPEN_IFF_VLAN(x) (((x) >> S_AOPEN_IFF_VLAN) & M_AOPEN_IFF_VLAN) 661 662 struct cpl_act_open_rpl { 663 RSS_HDR 664 union opcode_tid ot; 665 __be16 local_port; 666 __be16 peer_port; 667 __be32 local_ip; 668 __be32 peer_ip; 669 __be32 atid; 670 __u8 rsvd[3]; 671 __u8 status; 672 }; 673 674 struct cpl_act_establish { 675 RSS_HDR 676 union opcode_tid ot; 677 __be16 local_port; 678 __be16 peer_port; 679 __be32 local_ip; 680 __be32 peer_ip; 681 __be32 tos_tid; 682 __be16 l2t_idx; 683 __be16 tcp_opt; 684 __be32 snd_isn; 685 __be32 rcv_isn; 686 }; 687 688 struct cpl_get_tcb { 689 WR_HDR; 690 union opcode_tid ot; 691 __be16 cpuno; 692 __be16 rsvd; 693 }; 694 695 struct cpl_get_tcb_rpl { 696 RSS_HDR 697 union opcode_tid ot; 698 __u8 rsvd; 699 __u8 status; 700 __be16 len; 701 }; 702 703 struct cpl_set_tcb { 704 WR_HDR; 705 union opcode_tid ot; 706 __u8 reply; 707 __u8 cpu_idx; 708 __be16 len; 709 }; 710 711 /* cpl_set_tcb.reply fields */ 712 #define S_NO_REPLY 7 713 #define V_NO_REPLY(x) ((x) << S_NO_REPLY) 714 #define F_NO_REPLY V_NO_REPLY(1U) 715 716 struct cpl_set_tcb_field { 717 WR_HDR; 718 union opcode_tid ot; 719 __u8 reply; 720 __u8 cpu_idx; 721 __be16 word; 722 __be64 mask; 723 __be64 val; 724 }; 725 726 struct cpl_set_tcb_rpl { 727 RSS_HDR 728 union opcode_tid ot; 729 __u8 rsvd[3]; 730 __u8 status; 731 }; 732 733 struct cpl_pcmd { 734 WR_HDR; 735 union opcode_tid ot; 736 __u8 rsvd[3]; 737 #if defined(__LITTLE_ENDIAN_BITFIELD) 738 __u8 src:1; 739 __u8 bundle:1; 740 __u8 channel:1; 741 __u8 :5; 742 #else 743 __u8 :5; 744 __u8 channel:1; 745 __u8 bundle:1; 746 __u8 src:1; 747 #endif 748 __be32 pcmd_parm[2]; 749 }; 750 751 struct cpl_pcmd_reply { 752 RSS_HDR 753 union opcode_tid ot; 754 __u8 status; 755 __u8 rsvd; 756 __be16 len; 757 }; 758 759 struct cpl_close_con_req { 760 WR_HDR; 761 union opcode_tid ot; 762 __be32 rsvd; 763 }; 764 765 struct cpl_close_con_rpl { 766 RSS_HDR 767 union opcode_tid ot; 768 __u8 rsvd[3]; 769 __u8 status; 770 __be32 snd_nxt; 771 __be32 rcv_nxt; 772 }; 773 774 struct cpl_close_listserv_req { 775 WR_HDR; 776 union opcode_tid ot; 777 __u8 rsvd0; 778 __u8 cpu_idx; 779 __be16 rsvd1; 780 }; 781 782 struct cpl_close_listserv_rpl { 783 RSS_HDR 784 union opcode_tid ot; 785 __u8 rsvd[3]; 786 __u8 status; 787 }; 788 789 struct cpl_abort_req_rss { 790 RSS_HDR 791 union opcode_tid ot; 792 __be32 rsvd0; 793 __u8 rsvd1; 794 __u8 status; 795 __u8 rsvd2[6]; 796 }; 797 798 struct cpl_abort_req { 799 WR_HDR; 800 union opcode_tid ot; 801 __be32 rsvd0; 802 __u8 rsvd1; 803 __u8 cmd; 804 __u8 rsvd2[6]; 805 }; 806 807 struct cpl_abort_rpl_rss { 808 RSS_HDR 809 union opcode_tid ot; 810 __be32 rsvd0; 811 __u8 rsvd1; 812 __u8 status; 813 __u8 rsvd2[6]; 814 }; 815 816 struct cpl_abort_rpl { 817 WR_HDR; 818 union opcode_tid ot; 819 __be32 rsvd0; 820 __u8 rsvd1; 821 __u8 cmd; 822 __u8 rsvd2[6]; 823 }; 824 825 struct cpl_peer_close { 826 RSS_HDR 827 union opcode_tid ot; 828 __be32 rcv_nxt; 829 }; 830 831 struct tx_data_wr { 832 WR_HDR; 833 __be32 len; 834 __be32 flags; 835 __be32 sndseq; 836 __be32 param; 837 }; 838 839 /* tx_data_wr.flags fields */ 840 #define S_TX_ACK_PAGES 21 841 #define M_TX_ACK_PAGES 0x7 842 #define V_TX_ACK_PAGES(x) ((x) << S_TX_ACK_PAGES) 843 #define G_TX_ACK_PAGES(x) (((x) >> S_TX_ACK_PAGES) & M_TX_ACK_PAGES) 844 845 /* tx_data_wr.param fields */ 846 #define S_TX_PORT 0 847 #define M_TX_PORT 0x7 848 #define V_TX_PORT(x) ((x) << S_TX_PORT) 849 #define G_TX_PORT(x) (((x) >> S_TX_PORT) & M_TX_PORT) 850 851 #define S_TX_MSS 4 852 #define M_TX_MSS 0xF 853 #define V_TX_MSS(x) ((x) << S_TX_MSS) 854 #define G_TX_MSS(x) (((x) >> S_TX_MSS) & M_TX_MSS) 855 856 #define S_TX_QOS 8 857 #define M_TX_QOS 0xFF 858 #define V_TX_QOS(x) ((x) << S_TX_QOS) 859 #define G_TX_QOS(x) (((x) >> S_TX_QOS) & M_TX_QOS) 860 861 #define S_TX_SNDBUF 16 862 #define M_TX_SNDBUF 0xFFFF 863 #define V_TX_SNDBUF(x) ((x) << S_TX_SNDBUF) 864 #define G_TX_SNDBUF(x) (((x) >> S_TX_SNDBUF) & M_TX_SNDBUF) 865 866 struct cpl_tx_data { 867 union opcode_tid ot; 868 __be32 len; 869 __be32 rsvd; 870 __be16 urg; 871 __be16 flags; 872 }; 873 874 /* cpl_tx_data.flags fields */ 875 #define S_TX_ULP_SUBMODE 6 876 #define M_TX_ULP_SUBMODE 0xF 877 #define V_TX_ULP_SUBMODE(x) ((x) << S_TX_ULP_SUBMODE) 878 #define G_TX_ULP_SUBMODE(x) (((x) >> S_TX_ULP_SUBMODE) & M_TX_ULP_SUBMODE) 879 880 #define S_TX_ULP_MODE 10 881 #define M_TX_ULP_MODE 0xF 882 #define V_TX_ULP_MODE(x) ((x) << S_TX_ULP_MODE) 883 #define G_TX_ULP_MODE(x) (((x) >> S_TX_ULP_MODE) & M_TX_ULP_MODE) 884 885 #define S_TX_SHOVE 14 886 #define V_TX_SHOVE(x) ((x) << S_TX_SHOVE) 887 #define F_TX_SHOVE V_TX_SHOVE(1U) 888 889 #define S_TX_MORE 15 890 #define V_TX_MORE(x) ((x) << S_TX_MORE) 891 #define F_TX_MORE V_TX_MORE(1U) 892 893 /* additional tx_data_wr.flags fields */ 894 #define S_TX_CPU_IDX 0 895 #define M_TX_CPU_IDX 0x3F 896 #define V_TX_CPU_IDX(x) ((x) << S_TX_CPU_IDX) 897 #define G_TX_CPU_IDX(x) (((x) >> S_TX_CPU_IDX) & M_TX_CPU_IDX) 898 899 #define S_TX_URG 16 900 #define V_TX_URG(x) ((x) << S_TX_URG) 901 #define F_TX_URG V_TX_URG(1U) 902 903 #define S_TX_CLOSE 17 904 #define V_TX_CLOSE(x) ((x) << S_TX_CLOSE) 905 #define F_TX_CLOSE V_TX_CLOSE(1U) 906 907 #define S_TX_INIT 18 908 #define V_TX_INIT(x) ((x) << S_TX_INIT) 909 #define F_TX_INIT V_TX_INIT(1U) 910 911 #define S_TX_IMM_ACK 19 912 #define V_TX_IMM_ACK(x) ((x) << S_TX_IMM_ACK) 913 #define F_TX_IMM_ACK V_TX_IMM_ACK(1U) 914 915 #define S_TX_IMM_DMA 20 916 #define V_TX_IMM_DMA(x) ((x) << S_TX_IMM_DMA) 917 #define F_TX_IMM_DMA V_TX_IMM_DMA(1U) 918 919 struct cpl_tx_data_ack { 920 RSS_HDR 921 union opcode_tid ot; 922 __be32 ack_seq; 923 }; 924 925 struct cpl_wr_ack { 926 RSS_HDR 927 union opcode_tid ot; 928 __be16 credits; 929 __be16 rsvd; 930 __be32 snd_nxt; 931 __be32 snd_una; 932 }; 933 934 struct cpl_sge_ec_cr_return { 935 RSS_HDR 936 union opcode_tid ot; 937 __be16 sge_ec_id; 938 __u8 cr; 939 __u8 rsvd; 940 }; 941 942 struct cpl_rdma_ec_status { 943 RSS_HDR 944 union opcode_tid ot; 945 __u8 rsvd[3]; 946 __u8 status; 947 }; 948 949 struct mngt_pktsched_wr { 950 WR_HDR; 951 __u8 mngt_opcode; 952 __u8 rsvd[7]; 953 __u8 sched; 954 __u8 idx; 955 __u8 min; 956 __u8 max; 957 __u8 binding; 958 __u8 rsvd1[3]; 959 }; 960 961 struct cpl_iscsi_hdr { 962 RSS_HDR 963 union opcode_tid ot; 964 __be16 pdu_len_ddp; 965 __be16 len; 966 __be32 seq; 967 __be16 urg; 968 __u8 rsvd; 969 __u8 status; 970 }; 971 972 /* cpl_iscsi_hdr.pdu_len_ddp fields */ 973 #define S_ISCSI_PDU_LEN 0 974 #define M_ISCSI_PDU_LEN 0x7FFF 975 #define V_ISCSI_PDU_LEN(x) ((x) << S_ISCSI_PDU_LEN) 976 #define G_ISCSI_PDU_LEN(x) (((x) >> S_ISCSI_PDU_LEN) & M_ISCSI_PDU_LEN) 977 978 #define S_ISCSI_DDP 15 979 #define V_ISCSI_DDP(x) ((x) << S_ISCSI_DDP) 980 #define F_ISCSI_DDP V_ISCSI_DDP(1U) 981 982 struct cpl_rx_data { 983 RSS_HDR 984 union opcode_tid ot; 985 __be16 rsvd; 986 __be16 len; 987 __be32 seq; 988 __be16 urg; 989 #if defined(__LITTLE_ENDIAN_BITFIELD) 990 __u8 dack_mode:2; 991 __u8 psh:1; 992 __u8 heartbeat:1; 993 __u8 ddp_off:1; 994 __u8 :3; 995 #else 996 __u8 :3; 997 __u8 ddp_off:1; 998 __u8 heartbeat:1; 999 __u8 psh:1; 1000 __u8 dack_mode:2; 1001 #endif 1002 __u8 status; 1003 }; 1004 1005 struct cpl_rx_data_ack { 1006 WR_HDR; 1007 union opcode_tid ot; 1008 __be32 credit_dack; 1009 }; 1010 1011 /* cpl_rx_data_ack.ack_seq fields */ 1012 #define S_RX_CREDITS 0 1013 #define M_RX_CREDITS 0x7FFFFFF 1014 #define V_RX_CREDITS(x) ((x) << S_RX_CREDITS) 1015 #define G_RX_CREDITS(x) (((x) >> S_RX_CREDITS) & M_RX_CREDITS) 1016 1017 #define S_RX_MODULATE 27 1018 #define V_RX_MODULATE(x) ((x) << S_RX_MODULATE) 1019 #define F_RX_MODULATE V_RX_MODULATE(1U) 1020 1021 #define S_RX_FORCE_ACK 28 1022 #define V_RX_FORCE_ACK(x) ((x) << S_RX_FORCE_ACK) 1023 #define F_RX_FORCE_ACK V_RX_FORCE_ACK(1U) 1024 1025 #define S_RX_DACK_MODE 29 1026 #define M_RX_DACK_MODE 0x3 1027 #define V_RX_DACK_MODE(x) ((x) << S_RX_DACK_MODE) 1028 #define G_RX_DACK_MODE(x) (((x) >> S_RX_DACK_MODE) & M_RX_DACK_MODE) 1029 1030 #define S_RX_DACK_CHANGE 31 1031 #define V_RX_DACK_CHANGE(x) ((x) << S_RX_DACK_CHANGE) 1032 #define F_RX_DACK_CHANGE V_RX_DACK_CHANGE(1U) 1033 1034 struct cpl_rx_urg_notify { 1035 RSS_HDR 1036 union opcode_tid ot; 1037 __be32 seq; 1038 }; 1039 1040 struct cpl_rx_ddp_complete { 1041 RSS_HDR 1042 union opcode_tid ot; 1043 __be32 ddp_report; 1044 }; 1045 1046 struct cpl_rx_data_ddp { 1047 RSS_HDR 1048 union opcode_tid ot; 1049 __be16 urg; 1050 __be16 len; 1051 __be32 seq; 1052 union { 1053 __be32 nxt_seq; 1054 __be32 ddp_report; 1055 } u; 1056 __be32 ulp_crc; 1057 __be32 ddpvld_status; 1058 }; 1059 1060 /* cpl_rx_data_ddp.ddpvld_status fields */ 1061 #define S_DDP_STATUS 0 1062 #define M_DDP_STATUS 0xFF 1063 #define V_DDP_STATUS(x) ((x) << S_DDP_STATUS) 1064 #define G_DDP_STATUS(x) (((x) >> S_DDP_STATUS) & M_DDP_STATUS) 1065 1066 #define S_DDP_VALID 15 1067 #define M_DDP_VALID 0x1FFFF 1068 #define V_DDP_VALID(x) ((x) << S_DDP_VALID) 1069 #define G_DDP_VALID(x) (((x) >> S_DDP_VALID) & M_DDP_VALID) 1070 1071 #define S_DDP_PPOD_MISMATCH 15 1072 #define V_DDP_PPOD_MISMATCH(x) ((x) << S_DDP_PPOD_MISMATCH) 1073 #define F_DDP_PPOD_MISMATCH V_DDP_PPOD_MISMATCH(1U) 1074 1075 #define S_DDP_PDU 16 1076 #define V_DDP_PDU(x) ((x) << S_DDP_PDU) 1077 #define F_DDP_PDU V_DDP_PDU(1U) 1078 1079 #define S_DDP_LLIMIT_ERR 17 1080 #define V_DDP_LLIMIT_ERR(x) ((x) << S_DDP_LLIMIT_ERR) 1081 #define F_DDP_LLIMIT_ERR V_DDP_LLIMIT_ERR(1U) 1082 1083 #define S_DDP_PPOD_PARITY_ERR 18 1084 #define V_DDP_PPOD_PARITY_ERR(x) ((x) << S_DDP_PPOD_PARITY_ERR) 1085 #define F_DDP_PPOD_PARITY_ERR V_DDP_PPOD_PARITY_ERR(1U) 1086 1087 #define S_DDP_PADDING_ERR 19 1088 #define V_DDP_PADDING_ERR(x) ((x) << S_DDP_PADDING_ERR) 1089 #define F_DDP_PADDING_ERR V_DDP_PADDING_ERR(1U) 1090 1091 #define S_DDP_HDRCRC_ERR 20 1092 #define V_DDP_HDRCRC_ERR(x) ((x) << S_DDP_HDRCRC_ERR) 1093 #define F_DDP_HDRCRC_ERR V_DDP_HDRCRC_ERR(1U) 1094 1095 #define S_DDP_DATACRC_ERR 21 1096 #define V_DDP_DATACRC_ERR(x) ((x) << S_DDP_DATACRC_ERR) 1097 #define F_DDP_DATACRC_ERR V_DDP_DATACRC_ERR(1U) 1098 1099 #define S_DDP_INVALID_TAG 22 1100 #define V_DDP_INVALID_TAG(x) ((x) << S_DDP_INVALID_TAG) 1101 #define F_DDP_INVALID_TAG V_DDP_INVALID_TAG(1U) 1102 1103 #define S_DDP_ULIMIT_ERR 23 1104 #define V_DDP_ULIMIT_ERR(x) ((x) << S_DDP_ULIMIT_ERR) 1105 #define F_DDP_ULIMIT_ERR V_DDP_ULIMIT_ERR(1U) 1106 1107 #define S_DDP_OFFSET_ERR 24 1108 #define V_DDP_OFFSET_ERR(x) ((x) << S_DDP_OFFSET_ERR) 1109 #define F_DDP_OFFSET_ERR V_DDP_OFFSET_ERR(1U) 1110 1111 #define S_DDP_COLOR_ERR 25 1112 #define V_DDP_COLOR_ERR(x) ((x) << S_DDP_COLOR_ERR) 1113 #define F_DDP_COLOR_ERR V_DDP_COLOR_ERR(1U) 1114 1115 #define S_DDP_TID_MISMATCH 26 1116 #define V_DDP_TID_MISMATCH(x) ((x) << S_DDP_TID_MISMATCH) 1117 #define F_DDP_TID_MISMATCH V_DDP_TID_MISMATCH(1U) 1118 1119 #define S_DDP_INVALID_PPOD 27 1120 #define V_DDP_INVALID_PPOD(x) ((x) << S_DDP_INVALID_PPOD) 1121 #define F_DDP_INVALID_PPOD V_DDP_INVALID_PPOD(1U) 1122 1123 #define S_DDP_ULP_MODE 28 1124 #define M_DDP_ULP_MODE 0xF 1125 #define V_DDP_ULP_MODE(x) ((x) << S_DDP_ULP_MODE) 1126 #define G_DDP_ULP_MODE(x) (((x) >> S_DDP_ULP_MODE) & M_DDP_ULP_MODE) 1127 1128 /* cpl_rx_data_ddp.ddp_report fields */ 1129 #define S_DDP_OFFSET 0 1130 #define M_DDP_OFFSET 0x3FFFFF 1131 #define V_DDP_OFFSET(x) ((x) << S_DDP_OFFSET) 1132 #define G_DDP_OFFSET(x) (((x) >> S_DDP_OFFSET) & M_DDP_OFFSET) 1133 1134 #define S_DDP_DACK_MODE 22 1135 #define M_DDP_DACK_MODE 0x3 1136 #define V_DDP_DACK_MODE(x) ((x) << S_DDP_DACK_MODE) 1137 #define G_DDP_DACK_MODE(x) (((x) >> S_DDP_DACK_MODE) & M_DDP_DACK_MODE) 1138 1139 #define S_DDP_URG 24 1140 #define V_DDP_URG(x) ((x) << S_DDP_URG) 1141 #define F_DDP_URG V_DDP_URG(1U) 1142 1143 #define S_DDP_PSH 25 1144 #define V_DDP_PSH(x) ((x) << S_DDP_PSH) 1145 #define F_DDP_PSH V_DDP_PSH(1U) 1146 1147 #define S_DDP_BUF_COMPLETE 26 1148 #define V_DDP_BUF_COMPLETE(x) ((x) << S_DDP_BUF_COMPLETE) 1149 #define F_DDP_BUF_COMPLETE V_DDP_BUF_COMPLETE(1U) 1150 1151 #define S_DDP_BUF_TIMED_OUT 27 1152 #define V_DDP_BUF_TIMED_OUT(x) ((x) << S_DDP_BUF_TIMED_OUT) 1153 #define F_DDP_BUF_TIMED_OUT V_DDP_BUF_TIMED_OUT(1U) 1154 1155 #define S_DDP_BUF_IDX 28 1156 #define V_DDP_BUF_IDX(x) ((x) << S_DDP_BUF_IDX) 1157 #define F_DDP_BUF_IDX V_DDP_BUF_IDX(1U) 1158 1159 struct cpl_tx_pkt { 1160 WR_HDR; 1161 __be32 cntrl; 1162 __be32 len; 1163 }; 1164 1165 struct cpl_tx_pkt_coalesce { 1166 __be32 cntrl; 1167 __be32 len; 1168 __be64 addr; 1169 }; 1170 1171 struct tx_pkt_coalesce_wr { 1172 WR_HDR; 1173 struct cpl_tx_pkt_coalesce cpl[0]; 1174 }; 1175 1176 struct cpl_tx_pkt_lso { 1177 WR_HDR; 1178 __be32 cntrl; 1179 __be32 len; 1180 1181 __be32 rsvd; 1182 __be32 lso_info; 1183 }; 1184 1185 struct cpl_tx_pkt_batch_entry { 1186 __be32 cntrl; 1187 __be32 len; 1188 __be64 addr; 1189 }; 1190 1191 struct cpl_tx_pkt_batch { 1192 WR_HDR; 1193 struct cpl_tx_pkt_batch_entry pkt_entry[7]; 1194 }; 1195 1196 1197 /* cpl_tx_pkt*.cntrl fields */ 1198 #define S_TXPKT_VLAN 0 1199 #define M_TXPKT_VLAN 0xFFFF 1200 #define V_TXPKT_VLAN(x) ((x) << S_TXPKT_VLAN) 1201 #define G_TXPKT_VLAN(x) (((x) >> S_TXPKT_VLAN) & M_TXPKT_VLAN) 1202 1203 #define S_TXPKT_INTF 16 1204 #define M_TXPKT_INTF 0xF 1205 #define V_TXPKT_INTF(x) ((x) << S_TXPKT_INTF) 1206 #define G_TXPKT_INTF(x) (((x) >> S_TXPKT_INTF) & M_TXPKT_INTF) 1207 1208 #define S_TXPKT_IPCSUM_DIS 20 1209 #define V_TXPKT_IPCSUM_DIS(x) ((x) << S_TXPKT_IPCSUM_DIS) 1210 #define F_TXPKT_IPCSUM_DIS V_TXPKT_IPCSUM_DIS(1U) 1211 1212 #define S_TXPKT_L4CSUM_DIS 21 1213 #define V_TXPKT_L4CSUM_DIS(x) ((x) << S_TXPKT_L4CSUM_DIS) 1214 #define F_TXPKT_L4CSUM_DIS V_TXPKT_L4CSUM_DIS(1U) 1215 1216 #define S_TXPKT_VLAN_VLD 22 1217 #define V_TXPKT_VLAN_VLD(x) ((x) << S_TXPKT_VLAN_VLD) 1218 #define F_TXPKT_VLAN_VLD V_TXPKT_VLAN_VLD(1U) 1219 1220 #define S_TXPKT_LOOPBACK 23 1221 #define V_TXPKT_LOOPBACK(x) ((x) << S_TXPKT_LOOPBACK) 1222 #define F_TXPKT_LOOPBACK V_TXPKT_LOOPBACK(1U) 1223 1224 #define S_TXPKT_OPCODE 24 1225 #define M_TXPKT_OPCODE 0xFF 1226 #define V_TXPKT_OPCODE(x) ((x) << S_TXPKT_OPCODE) 1227 #define G_TXPKT_OPCODE(x) (((x) >> S_TXPKT_OPCODE) & M_TXPKT_OPCODE) 1228 1229 /* cpl_tx_pkt_lso.lso_info fields */ 1230 #define S_LSO_MSS 0 1231 #define M_LSO_MSS 0x3FFF 1232 #define V_LSO_MSS(x) ((x) << S_LSO_MSS) 1233 #define G_LSO_MSS(x) (((x) >> S_LSO_MSS) & M_LSO_MSS) 1234 1235 #define S_LSO_ETH_TYPE 14 1236 #define M_LSO_ETH_TYPE 0x3 1237 #define V_LSO_ETH_TYPE(x) ((x) << S_LSO_ETH_TYPE) 1238 #define G_LSO_ETH_TYPE(x) (((x) >> S_LSO_ETH_TYPE) & M_LSO_ETH_TYPE) 1239 1240 #define S_LSO_TCPHDR_WORDS 16 1241 #define M_LSO_TCPHDR_WORDS 0xF 1242 #define V_LSO_TCPHDR_WORDS(x) ((x) << S_LSO_TCPHDR_WORDS) 1243 #define G_LSO_TCPHDR_WORDS(x) (((x) >> S_LSO_TCPHDR_WORDS) & M_LSO_TCPHDR_WORDS) 1244 1245 #define S_LSO_IPHDR_WORDS 20 1246 #define M_LSO_IPHDR_WORDS 0xF 1247 #define V_LSO_IPHDR_WORDS(x) ((x) << S_LSO_IPHDR_WORDS) 1248 #define G_LSO_IPHDR_WORDS(x) (((x) >> S_LSO_IPHDR_WORDS) & M_LSO_IPHDR_WORDS) 1249 1250 #define S_LSO_IPV6 24 1251 #define V_LSO_IPV6(x) ((x) << S_LSO_IPV6) 1252 #define F_LSO_IPV6 V_LSO_IPV6(1U) 1253 1254 struct cpl_trace_pkt { 1255 #ifdef CHELSIO_FW 1256 __u8 rss_opcode; 1257 #if defined(__LITTLE_ENDIAN_BITFIELD) 1258 __u8 err:1; 1259 __u8 :7; 1260 #else 1261 __u8 :7; 1262 __u8 err:1; 1263 #endif 1264 __u8 rsvd0; 1265 #if defined(__LITTLE_ENDIAN_BITFIELD) 1266 __u8 qid:4; 1267 __u8 :4; 1268 #else 1269 __u8 :4; 1270 __u8 qid:4; 1271 #endif 1272 __be32 tstamp; 1273 #endif /* CHELSIO_FW */ 1274 1275 __u8 opcode; 1276 #if defined(__LITTLE_ENDIAN_BITFIELD) 1277 __u8 iff:4; 1278 __u8 :4; 1279 #else 1280 __u8 :4; 1281 __u8 iff:4; 1282 #endif 1283 __u8 rsvd[4]; 1284 __be16 len; 1285 }; 1286 1287 struct cpl_rx_pkt { 1288 RSS_HDR 1289 __u8 opcode; 1290 #if defined(__LITTLE_ENDIAN_BITFIELD) 1291 __u8 iff:4; 1292 __u8 csum_valid:1; 1293 __u8 ipmi_pkt:1; 1294 __u8 vlan_valid:1; 1295 __u8 fragment:1; 1296 #else 1297 __u8 fragment:1; 1298 __u8 vlan_valid:1; 1299 __u8 ipmi_pkt:1; 1300 __u8 csum_valid:1; 1301 __u8 iff:4; 1302 #endif 1303 __be16 csum; 1304 __be16 vlan; 1305 __be16 len; 1306 }; 1307 1308 struct cpl_l2t_write_req { 1309 WR_HDR; 1310 union opcode_tid ot; 1311 __be32 params; 1312 __u8 rsvd; 1313 __u8 port_idx; 1314 __u8 dst_mac[6]; 1315 }; 1316 1317 /* cpl_l2t_write_req.params fields */ 1318 #define S_L2T_W_IDX 0 1319 #define M_L2T_W_IDX 0x7FF 1320 #define V_L2T_W_IDX(x) ((x) << S_L2T_W_IDX) 1321 #define G_L2T_W_IDX(x) (((x) >> S_L2T_W_IDX) & M_L2T_W_IDX) 1322 1323 #define S_L2T_W_VLAN 11 1324 #define M_L2T_W_VLAN 0xFFF 1325 #define V_L2T_W_VLAN(x) ((x) << S_L2T_W_VLAN) 1326 #define G_L2T_W_VLAN(x) (((x) >> S_L2T_W_VLAN) & M_L2T_W_VLAN) 1327 1328 #define S_L2T_W_IFF 23 1329 #define M_L2T_W_IFF 0xF 1330 #define V_L2T_W_IFF(x) ((x) << S_L2T_W_IFF) 1331 #define G_L2T_W_IFF(x) (((x) >> S_L2T_W_IFF) & M_L2T_W_IFF) 1332 1333 #define S_L2T_W_PRIO 27 1334 #define M_L2T_W_PRIO 0x7 1335 #define V_L2T_W_PRIO(x) ((x) << S_L2T_W_PRIO) 1336 #define G_L2T_W_PRIO(x) (((x) >> S_L2T_W_PRIO) & M_L2T_W_PRIO) 1337 1338 struct cpl_l2t_write_rpl { 1339 RSS_HDR 1340 union opcode_tid ot; 1341 __u8 status; 1342 __u8 rsvd[3]; 1343 }; 1344 1345 struct cpl_l2t_read_req { 1346 WR_HDR; 1347 union opcode_tid ot; 1348 __be16 rsvd; 1349 __be16 l2t_idx; 1350 }; 1351 1352 struct cpl_l2t_read_rpl { 1353 RSS_HDR 1354 union opcode_tid ot; 1355 __be32 params; 1356 __u8 rsvd[2]; 1357 __u8 dst_mac[6]; 1358 }; 1359 1360 /* cpl_l2t_read_rpl.params fields */ 1361 #define S_L2T_R_PRIO 0 1362 #define M_L2T_R_PRIO 0x7 1363 #define V_L2T_R_PRIO(x) ((x) << S_L2T_R_PRIO) 1364 #define G_L2T_R_PRIO(x) (((x) >> S_L2T_R_PRIO) & M_L2T_R_PRIO) 1365 1366 #define S_L2T_R_VLAN 8 1367 #define M_L2T_R_VLAN 0xFFF 1368 #define V_L2T_R_VLAN(x) ((x) << S_L2T_R_VLAN) 1369 #define G_L2T_R_VLAN(x) (((x) >> S_L2T_R_VLAN) & M_L2T_R_VLAN) 1370 1371 #define S_L2T_R_IFF 20 1372 #define M_L2T_R_IFF 0xF 1373 #define V_L2T_R_IFF(x) ((x) << S_L2T_R_IFF) 1374 #define G_L2T_R_IFF(x) (((x) >> S_L2T_R_IFF) & M_L2T_R_IFF) 1375 1376 #define S_L2T_STATUS 24 1377 #define M_L2T_STATUS 0xFF 1378 #define V_L2T_STATUS(x) ((x) << S_L2T_STATUS) 1379 #define G_L2T_STATUS(x) (((x) >> S_L2T_STATUS) & M_L2T_STATUS) 1380 1381 struct cpl_smt_write_req { 1382 WR_HDR; 1383 union opcode_tid ot; 1384 __u8 rsvd0; 1385 #if defined(__LITTLE_ENDIAN_BITFIELD) 1386 __u8 mtu_idx:4; 1387 __u8 iff:4; 1388 #else 1389 __u8 iff:4; 1390 __u8 mtu_idx:4; 1391 #endif 1392 __be16 rsvd2; 1393 __be16 rsvd3; 1394 __u8 src_mac1[6]; 1395 __be16 rsvd4; 1396 __u8 src_mac0[6]; 1397 }; 1398 1399 struct cpl_smt_write_rpl { 1400 RSS_HDR 1401 union opcode_tid ot; 1402 __u8 status; 1403 __u8 rsvd[3]; 1404 }; 1405 1406 struct cpl_smt_read_req { 1407 WR_HDR; 1408 union opcode_tid ot; 1409 __u8 rsvd0; 1410 #if defined(__LITTLE_ENDIAN_BITFIELD) 1411 __u8 :4; 1412 __u8 iff:4; 1413 #else 1414 __u8 iff:4; 1415 __u8 :4; 1416 #endif 1417 __be16 rsvd2; 1418 }; 1419 1420 struct cpl_smt_read_rpl { 1421 RSS_HDR 1422 union opcode_tid ot; 1423 __u8 status; 1424 #if defined(__LITTLE_ENDIAN_BITFIELD) 1425 __u8 mtu_idx:4; 1426 __u8 :4; 1427 #else 1428 __u8 :4; 1429 __u8 mtu_idx:4; 1430 #endif 1431 __be16 rsvd2; 1432 __be16 rsvd3; 1433 __u8 src_mac1[6]; 1434 __be16 rsvd4; 1435 __u8 src_mac0[6]; 1436 }; 1437 1438 struct cpl_rte_delete_req { 1439 WR_HDR; 1440 union opcode_tid ot; 1441 __be32 params; 1442 }; 1443 1444 /* { cpl_rte_delete_req, cpl_rte_read_req }.params fields */ 1445 #define S_RTE_REQ_LUT_IX 8 1446 #define M_RTE_REQ_LUT_IX 0x7FF 1447 #define V_RTE_REQ_LUT_IX(x) ((x) << S_RTE_REQ_LUT_IX) 1448 #define G_RTE_REQ_LUT_IX(x) (((x) >> S_RTE_REQ_LUT_IX) & M_RTE_REQ_LUT_IX) 1449 1450 #define S_RTE_REQ_LUT_BASE 19 1451 #define M_RTE_REQ_LUT_BASE 0x7FF 1452 #define V_RTE_REQ_LUT_BASE(x) ((x) << S_RTE_REQ_LUT_BASE) 1453 #define G_RTE_REQ_LUT_BASE(x) (((x) >> S_RTE_REQ_LUT_BASE) & M_RTE_REQ_LUT_BASE) 1454 1455 #define S_RTE_READ_REQ_SELECT 31 1456 #define V_RTE_READ_REQ_SELECT(x) ((x) << S_RTE_READ_REQ_SELECT) 1457 #define F_RTE_READ_REQ_SELECT V_RTE_READ_REQ_SELECT(1U) 1458 1459 struct cpl_rte_delete_rpl { 1460 RSS_HDR 1461 union opcode_tid ot; 1462 __u8 status; 1463 __u8 rsvd[3]; 1464 }; 1465 1466 struct cpl_rte_write_req { 1467 WR_HDR; 1468 union opcode_tid ot; 1469 #if defined(__LITTLE_ENDIAN_BITFIELD) 1470 __u8 :6; 1471 __u8 write_tcam:1; 1472 __u8 write_l2t_lut:1; 1473 #else 1474 __u8 write_l2t_lut:1; 1475 __u8 write_tcam:1; 1476 __u8 :6; 1477 #endif 1478 __u8 rsvd[3]; 1479 __be32 lut_params; 1480 __be16 rsvd2; 1481 __be16 l2t_idx; 1482 __be32 netmask; 1483 __be32 faddr; 1484 }; 1485 1486 /* cpl_rte_write_req.lut_params fields */ 1487 #define S_RTE_WRITE_REQ_LUT_IX 10 1488 #define M_RTE_WRITE_REQ_LUT_IX 0x7FF 1489 #define V_RTE_WRITE_REQ_LUT_IX(x) ((x) << S_RTE_WRITE_REQ_LUT_IX) 1490 #define G_RTE_WRITE_REQ_LUT_IX(x) (((x) >> S_RTE_WRITE_REQ_LUT_IX) & M_RTE_WRITE_REQ_LUT_IX) 1491 1492 #define S_RTE_WRITE_REQ_LUT_BASE 21 1493 #define M_RTE_WRITE_REQ_LUT_BASE 0x7FF 1494 #define V_RTE_WRITE_REQ_LUT_BASE(x) ((x) << S_RTE_WRITE_REQ_LUT_BASE) 1495 #define G_RTE_WRITE_REQ_LUT_BASE(x) (((x) >> S_RTE_WRITE_REQ_LUT_BASE) & M_RTE_WRITE_REQ_LUT_BASE) 1496 1497 struct cpl_rte_write_rpl { 1498 RSS_HDR 1499 union opcode_tid ot; 1500 __u8 status; 1501 __u8 rsvd[3]; 1502 }; 1503 1504 struct cpl_rte_read_req { 1505 WR_HDR; 1506 union opcode_tid ot; 1507 __be32 params; 1508 }; 1509 1510 struct cpl_rte_read_rpl { 1511 RSS_HDR 1512 union opcode_tid ot; 1513 __u8 status; 1514 __u8 rsvd0; 1515 __be16 l2t_idx; 1516 #if defined(__LITTLE_ENDIAN_BITFIELD) 1517 __u8 :7; 1518 __u8 select:1; 1519 #else 1520 __u8 select:1; 1521 __u8 :7; 1522 #endif 1523 __u8 rsvd2[3]; 1524 __be32 addr; 1525 }; 1526 1527 struct cpl_tid_release { 1528 WR_HDR; 1529 union opcode_tid ot; 1530 __be32 rsvd; 1531 }; 1532 1533 struct cpl_barrier { 1534 WR_HDR; 1535 __u8 opcode; 1536 __u8 rsvd[7]; 1537 }; 1538 1539 struct cpl_rdma_read_req { 1540 __u8 opcode; 1541 __u8 rsvd[15]; 1542 }; 1543 1544 struct cpl_rdma_terminate { 1545 #ifdef CHELSIO_FW 1546 __u8 opcode; 1547 __u8 rsvd[2]; 1548 #if defined(__LITTLE_ENDIAN_BITFIELD) 1549 __u8 rspq:3; 1550 __u8 :5; 1551 #else 1552 __u8 :5; 1553 __u8 rspq:3; 1554 #endif 1555 __be32 tid_len; 1556 #endif 1557 __be32 msn; 1558 __be32 mo; 1559 __u8 data[0]; 1560 }; 1561 1562 /* cpl_rdma_terminate.tid_len fields */ 1563 #define S_FLIT_CNT 0 1564 #define M_FLIT_CNT 0xFF 1565 #define V_FLIT_CNT(x) ((x) << S_FLIT_CNT) 1566 #define G_FLIT_CNT(x) (((x) >> S_FLIT_CNT) & M_FLIT_CNT) 1567 1568 #define S_TERM_TID 8 1569 #define M_TERM_TID 0xFFFFF 1570 #define V_TERM_TID(x) ((x) << S_TERM_TID) 1571 #define G_TERM_TID(x) (((x) >> S_TERM_TID) & M_TERM_TID) 1572 1573 /* ULP_TX opcodes */ 1574 enum { ULP_MEM_READ = 2, ULP_MEM_WRITE = 3, ULP_TXPKT = 4 }; 1575 1576 #define S_ULPTX_CMD 28 1577 #define M_ULPTX_CMD 0xF 1578 #define V_ULPTX_CMD(x) ((x) << S_ULPTX_CMD) 1579 1580 #define S_ULPTX_NFLITS 0 1581 #define M_ULPTX_NFLITS 0xFF 1582 #define V_ULPTX_NFLITS(x) ((x) << S_ULPTX_NFLITS) 1583 1584 struct ulp_mem_io { 1585 WR_HDR; 1586 __be32 cmd_lock_addr; 1587 __be32 len; 1588 }; 1589 1590 /* ulp_mem_io.cmd_lock_addr fields */ 1591 #define S_ULP_MEMIO_ADDR 0 1592 #define M_ULP_MEMIO_ADDR 0x7FFFFFF 1593 #define V_ULP_MEMIO_ADDR(x) ((x) << S_ULP_MEMIO_ADDR) 1594 1595 #define S_ULP_MEMIO_LOCK 27 1596 #define V_ULP_MEMIO_LOCK(x) ((x) << S_ULP_MEMIO_LOCK) 1597 #define F_ULP_MEMIO_LOCK V_ULP_MEMIO_LOCK(1U) 1598 1599 /* ulp_mem_io.len fields */ 1600 #define S_ULP_MEMIO_DATA_LEN 28 1601 #define M_ULP_MEMIO_DATA_LEN 0xF 1602 #define V_ULP_MEMIO_DATA_LEN(x) ((x) << S_ULP_MEMIO_DATA_LEN) 1603 1604 struct ulp_txpkt { 1605 __be32 cmd_dest; 1606 __be32 len; 1607 }; 1608 1609 /* ulp_txpkt.cmd_dest fields */ 1610 #define S_ULP_TXPKT_DEST 24 1611 #define M_ULP_TXPKT_DEST 0xF 1612 #define V_ULP_TXPKT_DEST(x) ((x) << S_ULP_TXPKT_DEST) 1613 1614 #endif /* T3_CPL_H */ 1615