1 /* 2 * Copyright 2014-2017 Cavium, Inc. 3 * The contents of this file are subject to the terms of the Common Development 4 * and Distribution License, v.1, (the "License"). 5 * 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the License at available 9 * at http://opensource.org/licenses/CDDL-1.0 10 * 11 * See the License for the specific language governing permissions and 12 * limitations under the License. 13 */ 14 15 #ifndef _l2_ftq_h_ 16 #define _l2_ftq_h_ 17 18 #include "l2_defs.h" 19 20 // This is to avoid compiling error for drivers compilation 21 #if !defined (TARGET_CHIP) 22 #define TARGET_CHIP 5709 23 #endif 24 25 26 27 28 /* 29 * rxp cmd enqueue definition 30 * offset: 0000 31 */ 32 33 34 #if defined(LITTLE_ENDIAN) 35 typedef struct rxpcq_l 36 { 37 u32_t cid; 38 union{ 39 u32_t host_opaque; 40 u32_t generic1; 41 }u1; 42 union{ 43 struct { 44 u16_t status; 45 u8_t opcode; 46 u8_t flags; 47 }s1; 48 u32_t generic2; 49 }u2; 50 } rxpcq_l_t; 51 52 typedef rxpcq_l_t rxpcq_t; 53 #elif defined(BIG_ENDIAN) 54 typedef struct rxpcq_b 55 { 56 u32_t cid; 57 union{ 58 u32_t host_opaque; 59 u32_t generic1; 60 } u1; 61 union{ 62 struct { 63 u8_t flags; 64 u8_t opcode; 65 u16_t status; 66 } s1; 67 u32_t generic2; 68 } u2; 69 } rxpcq_b_t; 70 71 typedef rxpcq_b_t rxpcq_t; 72 #endif 73 74 75 /* 76 * rxp enqueue definition 77 * offset: 0000 78 */ 79 typedef struct rxpq_b 80 { 81 u32_t bits_errors; 82 u32_t bits_status; 83 84 u8_t bit_mcast_hash_idx; 85 u8_t bits_acpi_pat; 86 u8_t knum; 87 u8_t unused1; 88 89 u16_t rule_tag; 90 u16_t pkt_len; 91 92 u16_t vlan_tag; 93 u8_t ip_hdr_offset; 94 u8_t rx_qid; 95 96 u16_t ip_xsum; 97 // this field has been extended to 2-byte in Xinan 98 #if (TARGET_CHIP == 5706) 99 u8_t tcp_udp_hdr_offset; 100 u8_t unused2; 101 #else 102 u16_t tcp_udp_hdr_offset; 103 #endif 104 u16_t tcp_udp_xsum; 105 u16_t tcp_payload_len; 106 107 u16_t pseud_xsum; 108 u16_t l2_payload_raw_xsum; 109 // this field has been extended to 2-byte in Xinan 110 #if (TARGET_CHIP == 5706) 111 u8_t data_offset; 112 u8_t unused3; 113 #else 114 u16_t data_offset; 115 #endif 116 u16_t l3_payload_raw_xsum; 117 118 u32_t mbuf_cluster; 119 u32_t cid; 120 121 u16_t cs16; 122 u16_t unused4; 123 124 u16_t ext_status; 125 u16_t unused5; 126 127 } rxpq_b_t; 128 129 typedef struct rxpq_l 130 { 131 u32_t bits_errors; 132 u32_t bits_status; 133 134 u8_t unused1; 135 u8_t knum; 136 u8_t bits_acpi_pat; 137 u8_t bit_mcast_hash_idx; 138 139 u16_t pkt_len; 140 u16_t rule_tag; 141 142 u8_t rx_qid; 143 u8_t ip_hdr_offset; 144 u16_t vlan_tag; 145 146 // this field has been extended to 2-byte in Xinan 147 #if (TARGET_CHIP == 5706) 148 u8_t unused2; 149 u8_t tcp_udp_hdr_offset; 150 #else 151 u16_t tcp_udp_hdr_offset; 152 #endif 153 u16_t ip_xsum; 154 155 u16_t tcp_payload_len; 156 u16_t tcp_udp_xsum; 157 158 u16_t l2_payload_raw_xsum; 159 u16_t pseud_xsum; 160 161 u16_t l3_payload_raw_xsum; 162 // this field has been extended to 2-byte in Xinan 163 #if (TARGET_CHIP == 5706) 164 u8_t unused3; 165 u8_t data_offset; 166 #else 167 u16_t data_offset; 168 #endif 169 u32_t mbuf_cluster; 170 u32_t cid; 171 172 u16_t unused4; 173 u16_t cs16; 174 175 u16_t unused5; 176 u16_t ext_status; 177 178 } rxpq_l_t; 179 180 #if defined(LITTLE_ENDIAN) 181 typedef rxpq_l_t rxpq_t; 182 #elif defined(BIG_ENDIAN) 183 typedef rxpq_b_t rxpq_t; 184 #endif 185 186 /* 187 * rv2ppq_generic definition 188 */ 189 typedef struct rv2ppq_generic_b 190 { 191 u32_t cid; 192 u32_t mbuf_cluster; 193 u16_t operand_flags; 194 u8_t knum; 195 u8_t opcode; 196 #define GENERIC_OPCODE_RV2PPQ_VALUE_UNUSED 0 197 #define GENERIC_OPCODE_RV2PPQ_VALUE_NOP 1 198 #define GENERIC_OPCODE_RV2PPQ_VALUE_OPAQUE 2 199 #define GENERIC_OPCODE_RV2PPQ_VALUE_L2_PLACE 3 200 #define GENERIC_OPCODE_RV2PPQ_VALUE_L4_PLACE 4 201 #define GENERIC_OPCODE_RV2PPQ_VALUE_L4_FLUSH 5 202 #define GENERIC_OPCODE_RV2PPQ_VALUE_L5_PLACE 10 203 #define GENERIC_OPCODE_RV2PPQ_VALUE_L5_FLUSH 14 204 #define GENERIC_OPCODE_RV2PPQ_VALUE_DBG_RDMA 17 205 #define GENERIC_OPCODE_RV2PPQ_VALUE_DBG_RV2P 18 206 #define GENERIC_OPCODE_RV2PPQ_VALUE_L4_INDICATE_TIMEOUT 20 207 #define GENERIC_OPCODE_RV2PPQ_VALUE_L2_JUMBO_PLACE 26 208 #define GENERIC_OPCODE_RV2PPQ_VALUE_L2_FLUSH_BD_CHAIN 28 209 #define GENERIC_OPCODE_RV2PPQ_VALUE_FLR 29 // X1V only 210 211 u16_t operand16_0; // Note that 16_0 and 16_1 will be absorbed 212 u16_t operand16_1; // by RDMA and won't be passed to COM 213 u16_t operand16_2; 214 u16_t operand16_3; 215 u16_t operand16_4; 216 u16_t operand16_5; 217 u16_t operand16_6; 218 u16_t operand16_7; 219 u32_t operand32_0; // Note that 32_0 and 32_1 will be absorbed 220 u32_t operand32_1; // by RDMA and won't be passed to COM 221 u32_t operand32_2; 222 u32_t operand32_3; 223 u32_t operand32_4; 224 u8_t rdma_action; // no need to be cleared by RXP, RV2P will do it 225 u8_t cs16_pkt_len; 226 u16_t cs16; 227 } rv2ppq_generic_b_t; 228 229 typedef struct rv2ppq_generic_l 230 { 231 u32_t cid; 232 u32_t mbuf_cluster; 233 u8_t opcode; 234 u8_t knum; 235 u16_t operand_flags; 236 u16_t operand16_1; // by RDMA and won't be passed to COM 237 u16_t operand16_0; // Note that 16_0 and 16_1 will be absorbed 238 u16_t operand16_3; 239 u16_t operand16_2; 240 u16_t operand16_5; 241 u16_t operand16_4; 242 u16_t operand16_7; 243 u16_t operand16_6; 244 u32_t operand32_0; // Note that 32_0 and 32_1 will be absorbed 245 u32_t operand32_1; // by RDMA and won't be passed to COM 246 u32_t operand32_2; 247 u32_t operand32_3; 248 u32_t operand32_4; 249 u16_t cs16; 250 u8_t cs16_pkt_len; 251 u8_t rdma_action; // no need to be cleared by RXP, RV2P will do it 252 } rv2ppq_generic_l_t; 253 254 #if defined(LITTLE_ENDIAN) 255 typedef rv2ppq_generic_l_t rv2ppq_generic_t; 256 #elif defined(BIG_ENDIAN) 257 typedef rv2ppq_generic_b_t rv2ppq_generic_t; 258 #endif 259 260 261 262 /* 263 * rv2ppq_l2_place definition 264 */ 265 typedef struct rv2ppq_l2_place_b 266 { 267 u32_t cid; 268 u32_t mbuf_cluster; 269 u16_t operand_flags; 270 #define L2_OPERAND_FLAGS_PREPEND_L2_FRAME_HEADER (1<<0) 271 #define L2_OPERAND_FLAGS_LAST (1<<1) 272 #define L2_OPERAND_FLAGS_ENQUEUE_TO_MCP (1<<2) 273 #define L2_OPERAND_FLAGS_DROP_PKT (1<<3) 274 #define L2_OPERAND_FLAGS_MCAST (1<<4) 275 #define L2_OPERAND_FLAGS_BCAST (1<<5) 276 #define L2_OPERAND_FLAGS_VMQ (1<<6) 277 #define L2_OPERAND_FLAGS_OOO_PLACE (1<<7) 278 #define L2_OPERAND_FLAGS_CU_PKT (1<<14) 279 280 u8_t knum; 281 u8_t opcode; 282 u16_t offset; 283 u16_t length; // represent look-ahead_hdr length if VMQ flag is set (total pkt len otherwise) 284 u16_t bits_status; 285 u16_t vlan_tag; 286 u16_t ip_xsum; 287 u16_t udp_tcp_xsum; 288 u16_t unused_0; 289 u16_t packet_length; // represent total packet length 290 u32_t unused_1[2]; 291 u16_t unused_2; 292 u16_t error_flags; 293 #define L2_ERROR_FLAGS_CRC_ERROR (1<<1) 294 #define L2_ERROR_FLAGS_PHY_DECODE_ERROR (1<<2) 295 #define L2_ERROR_FLAGS_ALIGNMENT_ERROR (1<<3) 296 #define L2_ERROR_FLAGS_TOO_SHORT_ERROR (1<<4) 297 #define L2_ERROR_FLAGS_GIANT_FRAME_ERROR (1<<5) 298 299 u32_t hash; 300 u32_t rt_bt; 301 u8_t rdma_action; // no need to be cleared by RXP, RV2P will do it 302 u8_t cs16_pkt_len; 303 u16_t cs16; 304 305 } rv2ppq_l2_place_b_t; 306 307 typedef struct rv2ppq_l2_place_l 308 { 309 u32_t cid; 310 u32_t mbuf_cluster; 311 u8_t opcode; 312 u8_t knum; 313 u16_t operand_flags; 314 u16_t length; // represent look-ahead_hdr_length if VMQ flag is set (total pkt len otherwise) 315 u16_t offset; 316 u16_t vlan_tag; 317 u16_t bits_status; 318 u16_t udp_tcp_xsum; 319 u16_t ip_xsum; 320 u16_t packet_length; // represent total packet length if VMQ flag is set 321 u16_t unused_0; 322 u32_t unused_1[2]; 323 u16_t error_flags; 324 u16_t unused_2; 325 u32_t hash; 326 u32_t rt_bt; 327 u16_t cs16; 328 u8_t cs16_pkt_len; 329 u8_t rdma_action; // no need to be cleared by RXP, RV2P will do it 330 331 } rv2ppq_l2_place_l_t; 332 333 #if defined(LITTLE_ENDIAN) 334 typedef rv2ppq_l2_place_l_t rv2ppq_l2_place_t; 335 #elif defined(BIG_ENDIAN) 336 typedef rv2ppq_l2_place_b_t rv2ppq_l2_place_t; 337 #endif 338 339 340 /* 341 * rv2ppq_l2_flush_bd_chain definition 342 */ 343 typedef struct rv2ppq_l2_flush_bd_chain_b 344 { 345 u32_t cid; 346 u32_t unused_0; 347 u16_t unused_1; 348 u8_t unused_2; 349 u8_t opcode; 350 u32_t unused_3[9]; 351 u8_t rdma_action; // no need to be cleared by RXP, RV2P will do it 352 u8_t cs16_pkt_len; 353 u16_t cs16; 354 355 } rv2ppq_l2_flush_bd_chain_b_t; 356 357 typedef struct rv2ppq_l2_flush_bd_chain_l 358 { 359 u32_t cid; 360 u32_t unused_0; 361 u8_t opcode; 362 u8_t unused_2; 363 u16_t unused_1; 364 u32_t unused_3[9]; 365 u16_t cs16; 366 u8_t cs16_pkt_len; 367 u8_t rdma_action; // no need to be cleared by RXP, RV2P will do it 368 369 } rv2ppq_l2_flush_bd_chain_l_t; 370 371 #if defined(LITTLE_ENDIAN) 372 typedef rv2ppq_l2_flush_bd_chain_l_t rv2ppq_l2_flush_bd_chain_t; 373 #elif defined(BIG_ENDIAN) 374 typedef rv2ppq_l2_flush_bd_chain_b_t rv2ppq_l2_flush_bd_chain_t; 375 #endif 376 377 /* 378 * comq_generic definition 379 */ 380 typedef enum 381 { 382 GENERIC_OPCODE_COMQ_VALUE_UNUSED = 0, 383 GENERIC_OPCODE_COMQ_VALUE_NOP = GENERIC_OPCODE_RV2PPQ_VALUE_NOP , 384 GENERIC_OPCODE_COMQ_VALUE_OPAQUE = GENERIC_OPCODE_RV2PPQ_VALUE_OPAQUE , 385 GENERIC_OPCODE_COMQ_VALUE_L2_COMPLETION = GENERIC_OPCODE_RV2PPQ_VALUE_L2_PLACE , 386 GENERIC_OPCODE_COMQ_VALUE_L4_COMPLETION = GENERIC_OPCODE_RV2PPQ_VALUE_L4_PLACE , 387 GENERIC_OPCODE_COMQ_VALUE_L4_FLUSH = GENERIC_OPCODE_RV2PPQ_VALUE_L4_FLUSH , 388 GENERIC_OPCODE_COMQ_VALUE_L4_STARTGEN = 6, 389 GENERIC_OPCODE_COMQ_VALUE_L4_ADDGEN = 7, 390 GENERIC_OPCODE_COMQ_VALUE_L4_PLACE = 8, 391 GENERIC_OPCODE_COMQ_VALUE_L4_DISCARDGEN = 9, 392 GENERIC_OPCODE_COMQ_VALUE_L5_PLACE = GENERIC_OPCODE_RV2PPQ_VALUE_L5_PLACE, 393 GENERIC_OPCODE_COMQ_VALUE_L2_NOBUFFER = 11, 394 GENERIC_OPCODE_COMQ_VALUE_L4_ARMPUSH = 12, 395 GENERIC_OPCODE_COMQ_VALUE_L4_RWINUPDATE = 13, 396 GENERIC_OPCODE_COMQ_VALUE_L5_FLUSH = GENERIC_OPCODE_RV2PPQ_VALUE_L5_FLUSH, 397 GENERIC_OPCODE_COMQ_VALUE_L4_INDICATE = 15, 398 GENERIC_OPCODE_COMQ_VALUE_L4_COPYGEN = 16, 399 GENERIC_OPCODE_COMQ_VALUE_DBG_RDMA = GENERIC_OPCODE_RV2PPQ_VALUE_DBG_RDMA, 400 GENERIC_OPCODE_COMQ_VALUE_DBG_RV2P = GENERIC_OPCODE_RV2PPQ_VALUE_DBG_RV2P, 401 GENERIC_OPCODE_COMQ_VALUE_L4_MQUPLOAD = 19, 402 GENERIC_OPCODE_COMQ_VALUE_ISCSI_SGL_PLACE = 22, 403 GENERIC_OPCODE_COMQ_VALUE_ISCSI_RQ_PLACE = 23, 404 GENERIC_OPCODE_COMQ_VALUE_ISCSI_RQ_FLUSH = 24, 405 GENERIC_OPCODE_COMQ_VALUE_ISCSI_SGL_FLUSH = 25, 406 407 // Jumbo mode and L2 FLUSH are for Linux only 408 GENERIC_OPCODE_COMQ_VALUE_L2_JUMBO_COMPLETION = GENERIC_OPCODE_RV2PPQ_VALUE_L2_JUMBO_PLACE, 409 GENERIC_OPCODE_COMQ_VALUE_L2_JUMBO_NOBUFFER = 27, 410 GENERIC_OPCODE_COMQ_VALUE_L2_FLUSH_BD_CHAIN = GENERIC_OPCODE_RV2PPQ_VALUE_L2_FLUSH_BD_CHAIN, 411 GENERIC_OPCODE_COMQ_VALUE_FLR = GENERIC_OPCODE_RV2PPQ_VALUE_FLR, 412 MAX_COMQ_OPCODE 413 }GENERIC_OPCODE_COMQ_t ; 414 415 416 typedef struct comq_generic_b 417 { 418 u32_t cid; 419 u32_t mbuf_cluster; 420 u16_t operand_flags; 421 u8_t knum; 422 u8_t opcode; 423 #define GENERIC_OPCODE_COMQ_VALUE (0xff<<0) 424 u16_t operand16_2; 425 u16_t operand16_3; 426 u16_t operand16_4; 427 u16_t operand16_5; 428 u16_t operand16_6; 429 u16_t operand16_7; 430 u32_t operand32_2; 431 u32_t operand32_3; 432 u32_t operand32_4; 433 u8_t rdma_action; 434 u8_t cs16_pkt_len; 435 u16_t cs16; 436 } comq_generic_b_t; 437 438 typedef struct comq_generic_l 439 { 440 u32_t cid; 441 u32_t mbuf_cluster; 442 u8_t opcode; 443 u8_t knum; 444 u16_t operand_flags; 445 u16_t operand16_3; 446 u16_t operand16_2; 447 u16_t operand16_5; 448 u16_t operand16_4; 449 u16_t operand16_7; 450 u16_t operand16_6; 451 u32_t operand32_2; 452 u32_t operand32_3; 453 u32_t operand32_4; 454 u16_t cs16; 455 u8_t cs16_pkt_len; 456 u8_t rdma_action; 457 } comq_generic_l_t; 458 459 #if defined(LITTLE_ENDIAN) 460 typedef comq_generic_l_t comq_generic_t; 461 #elif defined(BIG_ENDIAN) 462 typedef comq_generic_b_t comq_generic_t; 463 #endif 464 465 466 /* 467 * comq_l2_completion definition 468 */ 469 typedef struct comq_l2_completion_b 470 { 471 u32_t cid; 472 u32_t mbuf_cluster; 473 u16_t operand_flags; 474 u8_t knum; 475 u8_t opcode; 476 u16_t bits_status; 477 u16_t vlan_tag; 478 u16_t ip_xsum; 479 u16_t udp_tcp_xsum; 480 u16_t nx_bidx; 481 u16_t packet_length; // total pkt len (MCP will need this info) 482 u16_t unused_0; 483 u16_t error_flags; 484 u32_t hash; 485 u32_t rt_bt; 486 u8_t rdma_action; 487 u8_t cs16_pkt_len; 488 u16_t cs16; 489 490 } comq_l2_completion_b_t; 491 492 typedef struct comq_l2_completion_l 493 { 494 u32_t cid; 495 u32_t mbuf_cluster; 496 u8_t opcode; 497 u8_t knum; 498 u16_t operand_flags; 499 u16_t vlan_tag; 500 u16_t bits_status; 501 u16_t udp_tcp_xsum; 502 u16_t ip_xsum; 503 u16_t packet_length; // total pkt len (MCP will need this info) 504 u16_t nx_bidx; 505 u16_t error_flags; 506 u16_t unused_0; 507 u32_t hash; 508 u32_t rt_bt; 509 u16_t cs16; 510 u8_t cs16_pkt_len; 511 u8_t rdma_action; 512 513 } comq_l2_completion_l_t; 514 515 #if defined(LITTLE_ENDIAN) 516 typedef comq_l2_completion_l_t comq_l2_completion_t; 517 #elif defined(BIG_ENDIAN) 518 typedef comq_l2_completion_b_t comq_l2_completion_t; 519 #endif 520 521 /* 522 * comq_l2_nobuffer definition 523 */ 524 typedef struct comq_l2_nobuffer_b 525 { 526 u32_t l2_nobuff_cid; 527 u32_t l2_nobuff_mbuf_cluster; 528 u16_t l2_nobuff_operand_flags; 529 u8_t l2_nobuff_knum; 530 u8_t l2_nobuff_opcode; 531 u16_t l2_nobuff_bits_status; 532 u16_t l2_nobuff_vlan_tag; 533 u16_t l2_nobuff_ip_xsum; 534 u16_t l2_nobuff_udp_tcp_xsum; 535 u16_t l2_nobuff_nx_bidx; 536 u16_t l2_nobuff_packet_length; // total pkt len (MCP will need this info) 537 u16_t unused_1; 538 u16_t l2_nobuff_error_flags; 539 u32_t l2_nobuff_hash; 540 u32_t unused_2; 541 u8_t l2_nobuff_rdma_action; 542 u8_t l2_nobuff_cs16_pkt_len; 543 u16_t l2_nobuff_cs16; 544 545 } comq_l2_nobuffer_b_t; 546 547 typedef struct comq_l2_nobuffer_l 548 { 549 u32_t l2_nobuff_cid; 550 u32_t l2_nobuff_mbuf_cluster; 551 u8_t l2_nobuff_opcode; 552 u8_t l2_nobuff_knum; 553 u16_t l2_nobuff_operand_flags; 554 u16_t l2_nobuff_vlan_tag; 555 u16_t l2_nobuff_bits_status; 556 u16_t l2_nobuff_udp_tcp_xsum; 557 u16_t l2_nobuff_ip_xsum; 558 u16_t l2_nobuff_packet_length; // total pkt len (MCP will need this info) 559 u16_t l2_nobuff_nx_bidx; 560 u16_t l2_nobuff_error_flags; 561 u16_t unused_1; 562 u32_t l2_nobuff_hash; 563 u32_t unused_2; 564 u16_t l2_nobuff_cs16; 565 u8_t l2_nobuff_cs16_pkt_len; 566 u8_t l2_nobuff_rdma_action; 567 568 } comq_l2_nobuffer_l_t; 569 570 #if defined(LITTLE_ENDIAN) 571 typedef comq_l2_nobuffer_l_t comq_l2_nobuffer_t; 572 #elif defined(BIG_ENDIAN) 573 typedef comq_l2_nobuffer_b_t comq_l2_nobuffer_t; 574 #endif 575 576 577 /* 578 * comq_l2_flr definition 579 */ 580 typedef struct comq_l2_flr_b 581 { 582 u32_t cid; 583 u32_t mbuf_cluster; 584 u16_t operand_flags; 585 u8_t knum; 586 u8_t opcode; 587 u16_t bits_status; 588 u16_t vlan_tag; 589 u16_t ip_xsum; 590 u16_t udp_tcp_xsum; 591 u16_t nx_bidx; 592 u16_t unused_0; 593 u16_t unused_1; 594 u16_t error_flags; 595 u32_t hash; 596 u32_t unused_2; 597 u8_t rdma_action; 598 u8_t cs16_pkt_len; 599 u16_t cs16; 600 601 } comq_l2_flr_b_t; 602 603 typedef struct comq_l2_flr_l 604 { 605 u32_t cid; 606 u32_t mbuf_cluster; 607 u8_t opcode; 608 u8_t knum; 609 u16_t operand_flags; 610 u16_t vlan_tag; 611 u16_t bits_status; 612 u16_t udp_tcp_xsum; 613 u16_t ip_xsum; 614 u16_t unused_0; 615 u16_t nx_bidx; 616 u16_t error_flags; 617 u16_t unused_1; 618 u32_t hash; 619 u32_t unused_2; 620 u16_t cs16; 621 u8_t cs16_pkt_len; 622 u8_t rdma_action; 623 624 } comq_l2_flr_l_t; 625 626 #if defined(LITTLE_ENDIAN) 627 typedef comq_l2_flr_l_t comq_l2_flr_t; 628 #elif defined(BIG_ENDIAN) 629 typedef comq_l2_flr_b_t comq_l2_flr_t; 630 #endif 631 632 /* 633 * comxq_t 634 */ 635 typedef struct comxq_b 636 { 637 u32_t cid; 638 u16_t flags; 639 u16_t unused1; 640 u32_t snd_next; 641 }comxq_b_t; 642 643 typedef struct comxq_l 644 { 645 u32_t cid; 646 u16_t unused1; 647 u16_t flags; 648 u32_t snd_next; 649 }comxq_l_t; 650 651 #if defined(LITTLE_ENDIAN) 652 typedef comxq_l_t comxq_t; 653 #elif defined(BIG_ENDIAN) 654 typedef comxq_b_t comxq_t; 655 #endif 656 657 /* 658 * comtq_t 659 */ 660 typedef struct comtq_b 661 { 662 u32_t cid; 663 u32_t val; 664 u8_t type; 665 u8_t unused[3]; 666 }comtq_b_t; 667 668 typedef struct comtq_l 669 { 670 u32_t cid; 671 u32_t val; 672 u8_t unused[3]; 673 u8_t type; 674 }comtq_l_t; 675 676 #if defined(LITTLE_ENDIAN) 677 typedef comtq_l_t comtq_t; 678 #elif defined(BIG_ENDIAN) 679 typedef comtq_b_t comtq_t; 680 #endif 681 682 /* 683 * csq_t 684 */ 685 typedef struct csq_b 686 { 687 u32_t cid; 688 // bit 7 lsb of CID is always 0, but CSQ can be enqueued by MQ or COM. 689 // For L4, we can use this bit to indicate the source 690 // Note that 7 lsb is ALWAYS masked out to be zero by HW 691 #define CSQ_SRC_MQ 0 692 #define CSQ_SRC_COM 0x80 693 #define CSQ_SRC_MASK 0xFF 694 u8_t flags; 695 u8_t unused[3]; 696 }csq_b_t; 697 698 typedef struct csq_l 699 { 700 u32_t cid; 701 u8_t unused[3]; 702 u8_t flags; 703 }csq_l_t; 704 705 #if defined(LITTLE_ENDIAN) 706 typedef csq_l_t csq_t; 707 #elif defined(BIG_ENDIAN) 708 typedef csq_b_t csq_t; 709 #endif 710 711 /* 712 * cpq_t 713 */ 714 typedef struct cpq_b 715 { 716 u32_t cid; 717 }cpq_b_t; 718 719 typedef struct cpq_l 720 { 721 u32_t cid; 722 }cpq_l_t; 723 724 #if defined(LITTLE_ENDIAN) 725 typedef cpq_l_t cpq_t; 726 #elif defined(BIG_ENDIAN) 727 typedef cpq_b_t cpq_t; 728 #endif 729 730 /* 731 * rv2ptq_t 732 */ 733 typedef struct rv2ptq_b 734 { 735 u32_t cid; 736 }rv2ptq_b_t; 737 738 typedef struct rv2ptq_l 739 { 740 u32_t cid; 741 }rv2ptq_l_t; 742 743 #if defined(LITTLE_ENDIAN) 744 typedef rv2ptq_l_t rv2ptq_t; 745 #elif defined(BIG_ENDIAN) 746 typedef rv2ptq_b_t rv2ptq_t; 747 #endif 748 749 750 /* TX FTQs */ 751 752 typedef struct tschq_b 753 { 754 u32_t cid; 755 u8_t flags; 756 u8_t unused[3]; 757 }tschq_b_t; 758 759 typedef struct tschq_l 760 { 761 u32_t cid; 762 u8_t unused[3]; 763 u8_t flags; 764 }tschq_l_t; 765 766 #if defined(LITTLE_ENDIAN) 767 typedef tschq_l_t tschq_t; 768 #elif defined(BIG_ENDIAN) 769 typedef tschq_b_t tschq_t; 770 #endif 771 772 typedef struct txpq_b 773 { 774 u32_t cid; 775 u32_t bseq; 776 u8_t flags_flags; 777 u8_t cmd; 778 u8_t xnum; 779 u8_t protocol_flags; 780 u32_t tcp_rcv_nxt; 781 }txpq_b_t; 782 783 typedef struct txpq_l 784 { 785 u32_t cid; 786 u32_t bseq; 787 u8_t protocol_flags; 788 u8_t xnum; 789 u8_t cmd; 790 u8_t flags_flags; 791 u32_t tcp_rcv_nxt; 792 }txpq_l_t; 793 794 #if defined(LITTLE_ENDIAN) 795 typedef txpq_l_t txpq_t; 796 #elif defined(BIG_ENDIAN) 797 typedef txpq_b_t txpq_t; 798 #endif 799 800 typedef struct tdmaq_b 801 { 802 u32_t cid; 803 tx_bidx_boff_t bidx_boff; 804 u32_t bseq; 805 u32_t snd_next; 806 u8_t cmd; 807 u8_t xnum; 808 u8_t knum; 809 u8_t unused1; 810 u32_t flags_flags; 811 u16_t nbytes; 812 u16_t hole0_boff; 813 u16_t hole1_boff; 814 u16_t hole2_boff; 815 u32_t hole0_fill; 816 u32_t hole1_fill; 817 u32_t hole2_fill; 818 u8_t fnum; 819 u8_t txp_act_cmd; 820 u16_t unused2; 821 }tdmaq_b_t; 822 823 typedef struct tdmaq_l 824 { 825 u32_t cid; 826 tx_bidx_boff_t bidx_boff; 827 u32_t bseq; 828 u32_t snd_next; 829 u8_t unused1; 830 u8_t knum; 831 u8_t xnum; 832 u8_t cmd; 833 u32_t flags_flags; 834 u16_t hole0_boff; 835 u16_t nbytes; 836 u16_t hole2_boff; 837 u16_t hole1_boff; 838 u32_t hole0_fill; 839 u32_t hole1_fill; 840 u32_t hole2_fill; 841 u16_t unused2; 842 u8_t txp_act_cmd; 843 u8_t fnum; 844 }tdmaq_l_t; 845 846 #if defined(LITTLE_ENDIAN) 847 typedef tdmaq_l_t tdmaq_t; 848 #elif defined(BIG_ENDIAN) 849 typedef tdmaq_b_t tdmaq_t; 850 #endif 851 852 typedef struct tpatq_b 853 { 854 u32_t cid; 855 u16_t nbytes; 856 u8_t xnum; 857 u8_t knum; 858 u32_t flags_flags; 859 u16_t raw_chksum; 860 u16_t tpat_bidx; 861 }tpatq_b_t; 862 863 typedef struct tpatq_l 864 { 865 u32_t cid; 866 u8_t knum; 867 u8_t xnum; 868 u16_t nbytes; 869 u32_t flags_flags; 870 u16_t tpat_bidx; 871 u16_t raw_chksum; 872 }tpatq_l_t; 873 874 #if defined(LITTLE_ENDIAN) 875 typedef tpatq_l_t tpatq_t; 876 #elif defined(BIG_ENDIAN) 877 typedef tpatq_b_t tpatq_t; 878 #endif 879 880 typedef struct taspq_b 881 { 882 u16_t taspq_hdr_skip; 883 u16_t taspq_hdr_post_skip; 884 u16_t taspq_hdr_size; 885 u16_t taspq_payload_skip; 886 u16_t taspq_payload_size; 887 u16_t taspq_flags; 888 #if (TARGET_CHIP == 5709) 889 #define TASPQ_FLAGS_PKT_END TPATF_TASQ_FLAGS_PKT_END 890 #define TASPQ_FLAGS_MGMT_PACKET TPATF_TASQ_FLAGS_MGMT_PACKET 891 #define TASPQ_FLAGS_DEST_RPC_CATCHUP TPATF_TASQ_FLAGS_CATCHUP_PACKET 892 #define TASPQ_FLAGS_DONT_GEN_CRC TPATF_TASQ_FLAGS_DONT_GEN_CRC 893 #define TASPQ_FLAGS_RESERVED TPATF_TASQ_FLAGS_RESERVED 894 #define TASPQ_FLAGS_DEST_EMAC TPATF_TASQ_FLAGS_DEST_EMAC 895 #define TASPQ_FLAGS_DEST_RPC_MIRROR TPATF_TASQ_FLAGS_DEST_RPC_MIRROR 896 #define TASPQ_FLAGS_DEST_RPC_LOOPBACK TPATF_TASQ_FLAGS_DEST_RPC_LOOPBACK 897 #define TASPQ_FLAGS_MGMT_PKT_TAG TPATF_TASQ_FLAGS_MGMT_PKT_TAG 898 #define TASPQ_FLAGS_CS16_VLD TPATF_TASQ_FLAGS_CS16_VLD 899 #else 900 #define TASPQ_FLAGS_PKT_END TPATF_TASPQ_FLAGS_PKT_END 901 #define TASPQ_FLAGS_MGMT_PACKET TPATF_TASPQ_FLAGS_MGMT_PACKET 902 #define TASPQ_FLAGS_DEST_RPC_CATCHUP TPATF_TASPQ_FLAGS_DEST_RPC_CATCHUP 903 #define TASPQ_FLAGS_DONT_GEN_CRC TPATF_TASPQ_FLAGS_DONT_GEN_CRC 904 #define TASPQ_FLAGS_RESERVED TPATF_TASPQ_FLAGS_RESERVED 905 #define TASPQ_FLAGS_DEST_EMAC TPATF_TASPQ_FLAGS_DEST_EMAC 906 #define TASPQ_FLAGS_DEST_RPC_MIRROR TPATF_TASPQ_FLAGS_DEST_RPC_MIRROR 907 #define TASPQ_FLAGS_DEST_RPC_LOOPBACK TPATF_TASPQ_FLAGS_DEST_RPC_LOOPBACK 908 #define TASPQ_FLAGS_MGMT_PKT_TAG TPATF_TASPQ_FLAGS_MGMT_PKT_TAG 909 #define TASPQ_FLAGS_CS16_VLD TPATF_TASPQ_FLAGS_CS16_VLD 910 #endif 911 u16_t taspq_cs16; 912 u16_t taspq_uftq_cmd; /* Only the upper 16 bit of the ftq cmd is used */ 913 #if (TARGET_CHIP == 5709) 914 #define TASPQ_FTQ_CMD_CPY_DATA TPATF_TASQ_FTQ_CMD_CPY_DATA 915 #define TASPQ_FTQ_CMD_ADD_INTERVEN TPATF_TASQ_FTQ_CMD_ADD_INTERVEN 916 #define TASPQ_FTQ_CMD_ADD_DATA TPATF_TASQ_FTQ_CMD_ADD_DATA 917 #define TASPQ_FTQ_CMD_BUSY TPATF_TASQ_FTQ_CMD_BUSY 918 #else 919 #define TASPQ_FTQ_CMD_CPY_DATA TPATF_TASPQ_FTQ_CMD_CPY_DATA 920 #define TASPQ_FTQ_CMD_ADD_INTERVEN TPATF_TASPQ_FTQ_CMD_ADD_INTERVEN 921 #define TASPQ_FTQ_CMD_ADD_DATA TPATF_TASPQ_FTQ_CMD_ADD_DATA 922 #define TASPQ_FTQ_CMD_BUSY TPATF_TASPQ_FTQ_CMD_BUSY 923 #endif 924 } taspq_b_t; 925 926 typedef struct taspq_l 927 { 928 u16_t taspq_hdr_post_skip; 929 u16_t taspq_hdr_skip; 930 u16_t taspq_payload_skip; 931 u16_t taspq_hdr_size; 932 u16_t taspq_flags; 933 #if (TARGET_CHIP == 5709) 934 #define TASPQ_FLAGS_PKT_END TPATF_TASQ_FLAGS_PKT_END 935 #define TASPQ_FLAGS_MGMT_PACKET TPATF_TASQ_FLAGS_MGMT_PACKET 936 #define TASPQ_FLAGS_DEST_RPC_CATCHUP TPATF_TASQ_FLAGS_CATCHUP_PACKET 937 #define TASPQ_FLAGS_DONT_GEN_CRC TPATF_TASQ_FLAGS_DONT_GEN_CRC 938 #define TASPQ_FLAGS_RESERVED TPATF_TASQ_FLAGS_RESERVED 939 #define TASPQ_FLAGS_DEST_EMAC TPATF_TASQ_FLAGS_DEST_EMAC 940 #define TASPQ_FLAGS_DEST_RPC_MIRROR TPATF_TASQ_FLAGS_DEST_RPC_MIRROR 941 #define TASPQ_FLAGS_DEST_RPC_LOOPBACK TPATF_TASQ_FLAGS_DEST_RPC_LOOPBACK 942 #define TASPQ_FLAGS_MGMT_PKT_TAG TPATF_TASQ_FLAGS_MGMT_PKT_TAG 943 #define TASPQ_FLAGS_CS16_VLD TPATF_TASQ_FLAGS_CS16_VLD 944 #else 945 #define TASPQ_FLAGS_PKT_END TPATF_TASPQ_FLAGS_PKT_END 946 #define TASPQ_FLAGS_MGMT_PACKET TPATF_TASPQ_FLAGS_MGMT_PACKET 947 #define TASPQ_FLAGS_DEST_RPC_CATCHUP TPATF_TASPQ_FLAGS_DEST_RPC_CATCHUP 948 #define TASPQ_FLAGS_DONT_GEN_CRC TPATF_TASPQ_FLAGS_DONT_GEN_CRC 949 #define TASPQ_FLAGS_RESERVED TPATF_TASPQ_FLAGS_RESERVED 950 #define TASPQ_FLAGS_DEST_EMAC TPATF_TASPQ_FLAGS_DEST_EMAC 951 #define TASPQ_FLAGS_DEST_RPC_MIRROR TPATF_TASPQ_FLAGS_DEST_RPC_MIRROR 952 #define TASPQ_FLAGS_DEST_RPC_LOOPBACK TPATF_TASPQ_FLAGS_DEST_RPC_LOOPBACK 953 #define TASPQ_FLAGS_MGMT_PKT_TAG TPATF_TASPQ_FLAGS_MGMT_PKT_TAG 954 #define TASPQ_FLAGS_CS16_VLD TPATF_TASPQ_FLAGS_CS16_VLD 955 #endif 956 u16_t taspq_payload_size; 957 u16_t taspq_uftq_cmd; /* Only the upper 16 bit of the ftq cmd is used */ 958 #if (TARGET_CHIP == 5709) 959 #define TASPQ_FTQ_CMD_CPY_DATA TPATF_TASQ_FTQ_CMD_CPY_DATA 960 #define TASPQ_FTQ_CMD_ADD_INTERVEN TPATF_TASQ_FTQ_CMD_ADD_INTERVEN 961 #define TASPQ_FTQ_CMD_ADD_DATA TPATF_TASQ_FTQ_CMD_ADD_DATA 962 #define TASPQ_FTQ_CMD_BUSY TPATF_TASQ_FTQ_CMD_BUSY 963 #else 964 #define TASPQ_FTQ_CMD_CPY_DATA TPATF_TASPQ_FTQ_CMD_CPY_DATA 965 #define TASPQ_FTQ_CMD_ADD_INTERVEN TPATF_TASPQ_FTQ_CMD_ADD_INTERVEN 966 #define TASPQ_FTQ_CMD_ADD_DATA TPATF_TASPQ_FTQ_CMD_ADD_DATA 967 #define TASPQ_FTQ_CMD_BUSY TPATF_TASPQ_FTQ_CMD_BUSY 968 #endif 969 u16_t taspq_cs16; 970 } taspq_l_t; 971 972 #if defined(LITTLE_ENDIAN) 973 typedef taspq_l_t taspq_t; 974 #elif defined(BIG_ENDIAN) 975 typedef taspq_b_t taspq_t; 976 #endif 977 978 #endif /* _l2_ftq_h_ */ 979