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