1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* Marvell OcteonTx2 RVU Admin Function driver 3 * 4 * Copyright (C) 2018 Marvell International Ltd. 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 */ 10 11 #ifndef RVU_STRUCT_H 12 #define RVU_STRUCT_H 13 14 /* RVU Block revision IDs */ 15 #define RVU_BLK_RVUM_REVID 0x01 16 17 #define RVU_MULTI_BLK_VER 0x7ULL 18 19 /* RVU Block Address Enumeration */ 20 enum rvu_block_addr_e { 21 BLKADDR_RVUM = 0x0ULL, 22 BLKADDR_LMT = 0x1ULL, 23 BLKADDR_MSIX = 0x2ULL, 24 BLKADDR_NPA = 0x3ULL, 25 BLKADDR_NIX0 = 0x4ULL, 26 BLKADDR_NIX1 = 0x5ULL, 27 BLKADDR_NPC = 0x6ULL, 28 BLKADDR_SSO = 0x7ULL, 29 BLKADDR_SSOW = 0x8ULL, 30 BLKADDR_TIM = 0x9ULL, 31 BLKADDR_CPT0 = 0xaULL, 32 BLKADDR_CPT1 = 0xbULL, 33 BLKADDR_NDC_NIX0_RX = 0xcULL, 34 BLKADDR_NDC_NIX0_TX = 0xdULL, 35 BLKADDR_NDC_NPA0 = 0xeULL, 36 BLKADDR_NDC_NIX1_RX = 0x10ULL, 37 BLKADDR_NDC_NIX1_TX = 0x11ULL, 38 BLK_COUNT = 0x12ULL, 39 }; 40 41 /* RVU Block Type Enumeration */ 42 enum rvu_block_type_e { 43 BLKTYPE_RVUM = 0x0, 44 BLKTYPE_MSIX = 0x1, 45 BLKTYPE_LMT = 0x2, 46 BLKTYPE_NIX = 0x3, 47 BLKTYPE_NPA = 0x4, 48 BLKTYPE_NPC = 0x5, 49 BLKTYPE_SSO = 0x6, 50 BLKTYPE_SSOW = 0x7, 51 BLKTYPE_TIM = 0x8, 52 BLKTYPE_CPT = 0x9, 53 BLKTYPE_NDC = 0xa, 54 BLKTYPE_MAX = 0xa, 55 }; 56 57 /* RVU Admin function Interrupt Vector Enumeration */ 58 enum rvu_af_int_vec_e { 59 RVU_AF_INT_VEC_POISON = 0x0, 60 RVU_AF_INT_VEC_PFFLR = 0x1, 61 RVU_AF_INT_VEC_PFME = 0x2, 62 RVU_AF_INT_VEC_GEN = 0x3, 63 RVU_AF_INT_VEC_MBOX = 0x4, 64 RVU_AF_INT_VEC_CNT = 0x5, 65 }; 66 67 /* NPA Admin function Interrupt Vector Enumeration */ 68 enum npa_af_int_vec_e { 69 NPA_AF_INT_VEC_RVU = 0x0, 70 NPA_AF_INT_VEC_GEN = 0x1, 71 NPA_AF_INT_VEC_AQ_DONE = 0x2, 72 NPA_AF_INT_VEC_AF_ERR = 0x3, 73 NPA_AF_INT_VEC_POISON = 0x4, 74 NPA_AF_INT_VEC_CNT = 0x5, 75 }; 76 77 /** 78 * RVU PF Interrupt Vector Enumeration 79 */ 80 enum rvu_pf_int_vec_e { 81 RVU_PF_INT_VEC_VFFLR0 = 0x0, 82 RVU_PF_INT_VEC_VFFLR1 = 0x1, 83 RVU_PF_INT_VEC_VFME0 = 0x2, 84 RVU_PF_INT_VEC_VFME1 = 0x3, 85 RVU_PF_INT_VEC_VFPF_MBOX0 = 0x4, 86 RVU_PF_INT_VEC_VFPF_MBOX1 = 0x5, 87 RVU_PF_INT_VEC_AFPF_MBOX = 0x6, 88 RVU_PF_INT_VEC_CNT = 0x7, 89 }; 90 91 /* NPA admin queue completion enumeration */ 92 enum npa_aq_comp { 93 NPA_AQ_COMP_NOTDONE = 0x0, 94 NPA_AQ_COMP_GOOD = 0x1, 95 NPA_AQ_COMP_SWERR = 0x2, 96 NPA_AQ_COMP_CTX_POISON = 0x3, 97 NPA_AQ_COMP_CTX_FAULT = 0x4, 98 NPA_AQ_COMP_LOCKERR = 0x5, 99 }; 100 101 /* NPA admin queue context types */ 102 enum npa_aq_ctype { 103 NPA_AQ_CTYPE_AURA = 0x0, 104 NPA_AQ_CTYPE_POOL = 0x1, 105 }; 106 107 /* NPA admin queue instruction opcodes */ 108 enum npa_aq_instop { 109 NPA_AQ_INSTOP_NOP = 0x0, 110 NPA_AQ_INSTOP_INIT = 0x1, 111 NPA_AQ_INSTOP_WRITE = 0x2, 112 NPA_AQ_INSTOP_READ = 0x3, 113 NPA_AQ_INSTOP_LOCK = 0x4, 114 NPA_AQ_INSTOP_UNLOCK = 0x5, 115 }; 116 117 /* ALLOC/FREE input queues Enumeration from coprocessors */ 118 enum npa_inpq { 119 NPA_INPQ_NIX0_RX = 0x0, 120 NPA_INPQ_NIX0_TX = 0x1, 121 NPA_INPQ_NIX1_RX = 0x2, 122 NPA_INPQ_NIX1_TX = 0x3, 123 NPA_INPQ_SSO = 0x4, 124 NPA_INPQ_TIM = 0x5, 125 NPA_INPQ_DPI = 0x6, 126 NPA_INPQ_AURA_OP = 0xe, 127 NPA_INPQ_INTERNAL_RSV = 0xf, 128 }; 129 130 /* NPA admin queue instruction structure */ 131 struct npa_aq_inst_s { 132 #if defined(__BIG_ENDIAN_BITFIELD) 133 u64 doneint : 1; /* W0 */ 134 u64 reserved_44_62 : 19; 135 u64 cindex : 20; 136 u64 reserved_17_23 : 7; 137 u64 lf : 9; 138 u64 ctype : 4; 139 u64 op : 4; 140 #else 141 u64 op : 4; 142 u64 ctype : 4; 143 u64 lf : 9; 144 u64 reserved_17_23 : 7; 145 u64 cindex : 20; 146 u64 reserved_44_62 : 19; 147 u64 doneint : 1; 148 #endif 149 u64 res_addr; /* W1 */ 150 }; 151 152 /* NPA admin queue result structure */ 153 struct npa_aq_res_s { 154 #if defined(__BIG_ENDIAN_BITFIELD) 155 u64 reserved_17_63 : 47; /* W0 */ 156 u64 doneint : 1; 157 u64 compcode : 8; 158 u64 ctype : 4; 159 u64 op : 4; 160 #else 161 u64 op : 4; 162 u64 ctype : 4; 163 u64 compcode : 8; 164 u64 doneint : 1; 165 u64 reserved_17_63 : 47; 166 #endif 167 u64 reserved_64_127; /* W1 */ 168 }; 169 170 struct npa_aura_s { 171 u64 pool_addr; /* W0 */ 172 #if defined(__BIG_ENDIAN_BITFIELD) /* W1 */ 173 u64 avg_level : 8; 174 u64 reserved_118_119 : 2; 175 u64 shift : 6; 176 u64 aura_drop : 8; 177 u64 reserved_98_103 : 6; 178 u64 bp_ena : 2; 179 u64 aura_drop_ena : 1; 180 u64 pool_drop_ena : 1; 181 u64 reserved_93 : 1; 182 u64 avg_con : 9; 183 u64 pool_way_mask : 16; 184 u64 pool_caching : 1; 185 u64 reserved_65 : 2; 186 u64 ena : 1; 187 #else 188 u64 ena : 1; 189 u64 reserved_65 : 2; 190 u64 pool_caching : 1; 191 u64 pool_way_mask : 16; 192 u64 avg_con : 9; 193 u64 reserved_93 : 1; 194 u64 pool_drop_ena : 1; 195 u64 aura_drop_ena : 1; 196 u64 bp_ena : 2; 197 u64 reserved_98_103 : 6; 198 u64 aura_drop : 8; 199 u64 shift : 6; 200 u64 reserved_118_119 : 2; 201 u64 avg_level : 8; 202 #endif 203 #if defined(__BIG_ENDIAN_BITFIELD) /* W2 */ 204 u64 reserved_189_191 : 3; 205 u64 nix1_bpid : 9; 206 u64 reserved_177_179 : 3; 207 u64 nix0_bpid : 9; 208 u64 reserved_164_167 : 4; 209 u64 count : 36; 210 #else 211 u64 count : 36; 212 u64 reserved_164_167 : 4; 213 u64 nix0_bpid : 9; 214 u64 reserved_177_179 : 3; 215 u64 nix1_bpid : 9; 216 u64 reserved_189_191 : 3; 217 #endif 218 #if defined(__BIG_ENDIAN_BITFIELD) /* W3 */ 219 u64 reserved_252_255 : 4; 220 u64 fc_hyst_bits : 4; 221 u64 fc_stype : 2; 222 u64 fc_up_crossing : 1; 223 u64 fc_ena : 1; 224 u64 reserved_240_243 : 4; 225 u64 bp : 8; 226 u64 reserved_228_231 : 4; 227 u64 limit : 36; 228 #else 229 u64 limit : 36; 230 u64 reserved_228_231 : 4; 231 u64 bp : 8; 232 u64 reserved_240_243 : 4; 233 u64 fc_ena : 1; 234 u64 fc_up_crossing : 1; 235 u64 fc_stype : 2; 236 u64 fc_hyst_bits : 4; 237 u64 reserved_252_255 : 4; 238 #endif 239 u64 fc_addr; /* W4 */ 240 #if defined(__BIG_ENDIAN_BITFIELD) /* W5 */ 241 u64 reserved_379_383 : 5; 242 u64 err_qint_idx : 7; 243 u64 reserved_371 : 1; 244 u64 thresh_qint_idx : 7; 245 u64 reserved_363 : 1; 246 u64 thresh_up : 1; 247 u64 thresh_int_ena : 1; 248 u64 thresh_int : 1; 249 u64 err_int_ena : 8; 250 u64 err_int : 8; 251 u64 update_time : 16; 252 u64 pool_drop : 8; 253 #else 254 u64 pool_drop : 8; 255 u64 update_time : 16; 256 u64 err_int : 8; 257 u64 err_int_ena : 8; 258 u64 thresh_int : 1; 259 u64 thresh_int_ena : 1; 260 u64 thresh_up : 1; 261 u64 reserved_363 : 1; 262 u64 thresh_qint_idx : 7; 263 u64 reserved_371 : 1; 264 u64 err_qint_idx : 7; 265 u64 reserved_379_383 : 5; 266 #endif 267 #if defined(__BIG_ENDIAN_BITFIELD) /* W6 */ 268 u64 reserved_420_447 : 28; 269 u64 thresh : 36; 270 #else 271 u64 thresh : 36; 272 u64 reserved_420_447 : 28; 273 #endif 274 u64 reserved_448_511; /* W7 */ 275 }; 276 277 struct npa_pool_s { 278 u64 stack_base; /* W0 */ 279 #if defined(__BIG_ENDIAN_BITFIELD) /* W1 */ 280 u64 reserved_115_127 : 13; 281 u64 buf_size : 11; 282 u64 reserved_100_103 : 4; 283 u64 buf_offset : 12; 284 u64 stack_way_mask : 16; 285 u64 reserved_70_71 : 3; 286 u64 stack_caching : 1; 287 u64 reserved_66_67 : 2; 288 u64 nat_align : 1; 289 u64 ena : 1; 290 #else 291 u64 ena : 1; 292 u64 nat_align : 1; 293 u64 reserved_66_67 : 2; 294 u64 stack_caching : 1; 295 u64 reserved_70_71 : 3; 296 u64 stack_way_mask : 16; 297 u64 buf_offset : 12; 298 u64 reserved_100_103 : 4; 299 u64 buf_size : 11; 300 u64 reserved_115_127 : 13; 301 #endif 302 #if defined(__BIG_ENDIAN_BITFIELD) /* W2 */ 303 u64 stack_pages : 32; 304 u64 stack_max_pages : 32; 305 #else 306 u64 stack_max_pages : 32; 307 u64 stack_pages : 32; 308 #endif 309 #if defined(__BIG_ENDIAN_BITFIELD) /* W3 */ 310 u64 reserved_240_255 : 16; 311 u64 op_pc : 48; 312 #else 313 u64 op_pc : 48; 314 u64 reserved_240_255 : 16; 315 #endif 316 #if defined(__BIG_ENDIAN_BITFIELD) /* W4 */ 317 u64 reserved_316_319 : 4; 318 u64 update_time : 16; 319 u64 reserved_297_299 : 3; 320 u64 fc_up_crossing : 1; 321 u64 fc_hyst_bits : 4; 322 u64 fc_stype : 2; 323 u64 fc_ena : 1; 324 u64 avg_con : 9; 325 u64 avg_level : 8; 326 u64 reserved_270_271 : 2; 327 u64 shift : 6; 328 u64 reserved_260_263 : 4; 329 u64 stack_offset : 4; 330 #else 331 u64 stack_offset : 4; 332 u64 reserved_260_263 : 4; 333 u64 shift : 6; 334 u64 reserved_270_271 : 2; 335 u64 avg_level : 8; 336 u64 avg_con : 9; 337 u64 fc_ena : 1; 338 u64 fc_stype : 2; 339 u64 fc_hyst_bits : 4; 340 u64 fc_up_crossing : 1; 341 u64 reserved_297_299 : 3; 342 u64 update_time : 16; 343 u64 reserved_316_319 : 4; 344 #endif 345 u64 fc_addr; /* W5 */ 346 u64 ptr_start; /* W6 */ 347 u64 ptr_end; /* W7 */ 348 #if defined(__BIG_ENDIAN_BITFIELD) /* W8 */ 349 u64 reserved_571_575 : 5; 350 u64 err_qint_idx : 7; 351 u64 reserved_563 : 1; 352 u64 thresh_qint_idx : 7; 353 u64 reserved_555 : 1; 354 u64 thresh_up : 1; 355 u64 thresh_int_ena : 1; 356 u64 thresh_int : 1; 357 u64 err_int_ena : 8; 358 u64 err_int : 8; 359 u64 reserved_512_535 : 24; 360 #else 361 u64 reserved_512_535 : 24; 362 u64 err_int : 8; 363 u64 err_int_ena : 8; 364 u64 thresh_int : 1; 365 u64 thresh_int_ena : 1; 366 u64 thresh_up : 1; 367 u64 reserved_555 : 1; 368 u64 thresh_qint_idx : 7; 369 u64 reserved_563 : 1; 370 u64 err_qint_idx : 7; 371 u64 reserved_571_575 : 5; 372 #endif 373 #if defined(__BIG_ENDIAN_BITFIELD) /* W9 */ 374 u64 reserved_612_639 : 28; 375 u64 thresh : 36; 376 #else 377 u64 thresh : 36; 378 u64 reserved_612_639 : 28; 379 #endif 380 u64 reserved_640_703; /* W10 */ 381 u64 reserved_704_767; /* W11 */ 382 u64 reserved_768_831; /* W12 */ 383 u64 reserved_832_895; /* W13 */ 384 u64 reserved_896_959; /* W14 */ 385 u64 reserved_960_1023; /* W15 */ 386 }; 387 388 /* NIX admin queue completion status */ 389 enum nix_aq_comp { 390 NIX_AQ_COMP_NOTDONE = 0x0, 391 NIX_AQ_COMP_GOOD = 0x1, 392 NIX_AQ_COMP_SWERR = 0x2, 393 NIX_AQ_COMP_CTX_POISON = 0x3, 394 NIX_AQ_COMP_CTX_FAULT = 0x4, 395 NIX_AQ_COMP_LOCKERR = 0x5, 396 NIX_AQ_COMP_SQB_ALLOC_FAIL = 0x6, 397 }; 398 399 /* NIX admin queue context types */ 400 enum nix_aq_ctype { 401 NIX_AQ_CTYPE_RQ = 0x0, 402 NIX_AQ_CTYPE_SQ = 0x1, 403 NIX_AQ_CTYPE_CQ = 0x2, 404 NIX_AQ_CTYPE_MCE = 0x3, 405 NIX_AQ_CTYPE_RSS = 0x4, 406 NIX_AQ_CTYPE_DYNO = 0x5, 407 }; 408 409 /* NIX admin queue instruction opcodes */ 410 enum nix_aq_instop { 411 NIX_AQ_INSTOP_NOP = 0x0, 412 NIX_AQ_INSTOP_INIT = 0x1, 413 NIX_AQ_INSTOP_WRITE = 0x2, 414 NIX_AQ_INSTOP_READ = 0x3, 415 NIX_AQ_INSTOP_LOCK = 0x4, 416 NIX_AQ_INSTOP_UNLOCK = 0x5, 417 }; 418 419 /* NIX admin queue instruction structure */ 420 struct nix_aq_inst_s { 421 #if defined(__BIG_ENDIAN_BITFIELD) 422 u64 doneint : 1; /* W0 */ 423 u64 reserved_44_62 : 19; 424 u64 cindex : 20; 425 u64 reserved_15_23 : 9; 426 u64 lf : 7; 427 u64 ctype : 4; 428 u64 op : 4; 429 #else 430 u64 op : 4; 431 u64 ctype : 4; 432 u64 lf : 7; 433 u64 reserved_15_23 : 9; 434 u64 cindex : 20; 435 u64 reserved_44_62 : 19; 436 u64 doneint : 1; 437 #endif 438 u64 res_addr; /* W1 */ 439 }; 440 441 /* NIX admin queue result structure */ 442 struct nix_aq_res_s { 443 #if defined(__BIG_ENDIAN_BITFIELD) 444 u64 reserved_17_63 : 47; /* W0 */ 445 u64 doneint : 1; 446 u64 compcode : 8; 447 u64 ctype : 4; 448 u64 op : 4; 449 #else 450 u64 op : 4; 451 u64 ctype : 4; 452 u64 compcode : 8; 453 u64 doneint : 1; 454 u64 reserved_17_63 : 47; 455 #endif 456 u64 reserved_64_127; /* W1 */ 457 }; 458 459 /* NIX Completion queue context structure */ 460 struct nix_cq_ctx_s { 461 u64 base; 462 #if defined(__BIG_ENDIAN_BITFIELD) /* W1 */ 463 u64 wrptr : 20; 464 u64 avg_con : 9; 465 u64 cint_idx : 7; 466 u64 cq_err : 1; 467 u64 qint_idx : 7; 468 u64 rsvd_81_83 : 3; 469 u64 bpid : 9; 470 u64 rsvd_69_71 : 3; 471 u64 bp_ena : 1; 472 u64 rsvd_64_67 : 4; 473 #else 474 u64 rsvd_64_67 : 4; 475 u64 bp_ena : 1; 476 u64 rsvd_69_71 : 3; 477 u64 bpid : 9; 478 u64 rsvd_81_83 : 3; 479 u64 qint_idx : 7; 480 u64 cq_err : 1; 481 u64 cint_idx : 7; 482 u64 avg_con : 9; 483 u64 wrptr : 20; 484 #endif 485 #if defined(__BIG_ENDIAN_BITFIELD) /* W2 */ 486 u64 update_time : 16; 487 u64 avg_level : 8; 488 u64 head : 20; 489 u64 tail : 20; 490 #else 491 u64 tail : 20; 492 u64 head : 20; 493 u64 avg_level : 8; 494 u64 update_time : 16; 495 #endif 496 #if defined(__BIG_ENDIAN_BITFIELD) /* W3 */ 497 u64 cq_err_int_ena : 8; 498 u64 cq_err_int : 8; 499 u64 qsize : 4; 500 u64 rsvd_233_235 : 3; 501 u64 caching : 1; 502 u64 substream : 20; 503 u64 rsvd_210_211 : 2; 504 u64 ena : 1; 505 u64 drop_ena : 1; 506 u64 drop : 8; 507 u64 bp : 8; 508 #else 509 u64 bp : 8; 510 u64 drop : 8; 511 u64 drop_ena : 1; 512 u64 ena : 1; 513 u64 rsvd_210_211 : 2; 514 u64 substream : 20; 515 u64 caching : 1; 516 u64 rsvd_233_235 : 3; 517 u64 qsize : 4; 518 u64 cq_err_int : 8; 519 u64 cq_err_int_ena : 8; 520 #endif 521 }; 522 523 /* NIX Receive queue context structure */ 524 struct nix_rq_ctx_s { 525 #if defined(__BIG_ENDIAN_BITFIELD) /* W0 */ 526 u64 wqe_aura : 20; 527 u64 substream : 20; 528 u64 cq : 20; 529 u64 ena_wqwd : 1; 530 u64 ipsech_ena : 1; 531 u64 sso_ena : 1; 532 u64 ena : 1; 533 #else 534 u64 ena : 1; 535 u64 sso_ena : 1; 536 u64 ipsech_ena : 1; 537 u64 ena_wqwd : 1; 538 u64 cq : 20; 539 u64 substream : 20; 540 u64 wqe_aura : 20; 541 #endif 542 #if defined(__BIG_ENDIAN_BITFIELD) /* W1 */ 543 u64 rsvd_127_122 : 6; 544 u64 lpb_drop_ena : 1; 545 u64 spb_drop_ena : 1; 546 u64 xqe_drop_ena : 1; 547 u64 wqe_caching : 1; 548 u64 pb_caching : 2; 549 u64 sso_tt : 2; 550 u64 sso_grp : 10; 551 u64 lpb_aura : 20; 552 u64 spb_aura : 20; 553 #else 554 u64 spb_aura : 20; 555 u64 lpb_aura : 20; 556 u64 sso_grp : 10; 557 u64 sso_tt : 2; 558 u64 pb_caching : 2; 559 u64 wqe_caching : 1; 560 u64 xqe_drop_ena : 1; 561 u64 spb_drop_ena : 1; 562 u64 lpb_drop_ena : 1; 563 u64 rsvd_127_122 : 6; 564 #endif 565 #if defined(__BIG_ENDIAN_BITFIELD) /* W2 */ 566 u64 xqe_hdr_split : 1; 567 u64 xqe_imm_copy : 1; 568 u64 rsvd_189_184 : 6; 569 u64 xqe_imm_size : 6; 570 u64 later_skip : 6; 571 u64 rsvd_171 : 1; 572 u64 first_skip : 7; 573 u64 lpb_sizem1 : 12; 574 u64 spb_ena : 1; 575 u64 rsvd_150_148 : 3; 576 u64 wqe_skip : 2; 577 u64 spb_sizem1 : 6; 578 u64 rsvd_139_128 : 12; 579 #else 580 u64 rsvd_139_128 : 12; 581 u64 spb_sizem1 : 6; 582 u64 wqe_skip : 2; 583 u64 rsvd_150_148 : 3; 584 u64 spb_ena : 1; 585 u64 lpb_sizem1 : 12; 586 u64 first_skip : 7; 587 u64 rsvd_171 : 1; 588 u64 later_skip : 6; 589 u64 xqe_imm_size : 6; 590 u64 rsvd_189_184 : 6; 591 u64 xqe_imm_copy : 1; 592 u64 xqe_hdr_split : 1; 593 #endif 594 #if defined(__BIG_ENDIAN_BITFIELD) /* W3 */ 595 u64 spb_pool_pass : 8; 596 u64 spb_pool_drop : 8; 597 u64 spb_aura_pass : 8; 598 u64 spb_aura_drop : 8; 599 u64 wqe_pool_pass : 8; 600 u64 wqe_pool_drop : 8; 601 u64 xqe_pass : 8; 602 u64 xqe_drop : 8; 603 #else 604 u64 xqe_drop : 8; 605 u64 xqe_pass : 8; 606 u64 wqe_pool_drop : 8; 607 u64 wqe_pool_pass : 8; 608 u64 spb_aura_drop : 8; 609 u64 spb_aura_pass : 8; 610 u64 spb_pool_drop : 8; 611 u64 spb_pool_pass : 8; 612 #endif 613 #if defined(__BIG_ENDIAN_BITFIELD) /* W4 */ 614 u64 rsvd_319_315 : 5; 615 u64 qint_idx : 7; 616 u64 rq_int_ena : 8; 617 u64 rq_int : 8; 618 u64 rsvd_291_288 : 4; 619 u64 lpb_pool_pass : 8; 620 u64 lpb_pool_drop : 8; 621 u64 lpb_aura_pass : 8; 622 u64 lpb_aura_drop : 8; 623 #else 624 u64 lpb_aura_drop : 8; 625 u64 lpb_aura_pass : 8; 626 u64 lpb_pool_drop : 8; 627 u64 lpb_pool_pass : 8; 628 u64 rsvd_291_288 : 4; 629 u64 rq_int : 8; 630 u64 rq_int_ena : 8; 631 u64 qint_idx : 7; 632 u64 rsvd_319_315 : 5; 633 #endif 634 #if defined(__BIG_ENDIAN_BITFIELD) /* W5 */ 635 u64 rsvd_383_366 : 18; 636 u64 flow_tagw : 6; 637 u64 bad_utag : 8; 638 u64 good_utag : 8; 639 u64 ltag : 24; 640 #else 641 u64 ltag : 24; 642 u64 good_utag : 8; 643 u64 bad_utag : 8; 644 u64 flow_tagw : 6; 645 u64 rsvd_383_366 : 18; 646 #endif 647 #if defined(__BIG_ENDIAN_BITFIELD) /* W6 */ 648 u64 rsvd_447_432 : 16; 649 u64 octs : 48; 650 #else 651 u64 octs : 48; 652 u64 rsvd_447_432 : 16; 653 #endif 654 #if defined(__BIG_ENDIAN_BITFIELD) /* W7 */ 655 u64 rsvd_511_496 : 16; 656 u64 pkts : 48; 657 #else 658 u64 pkts : 48; 659 u64 rsvd_511_496 : 16; 660 #endif 661 #if defined(__BIG_ENDIAN_BITFIELD) /* W8 */ 662 u64 rsvd_575_560 : 16; 663 u64 drop_octs : 48; 664 #else 665 u64 drop_octs : 48; 666 u64 rsvd_575_560 : 16; 667 #endif 668 #if defined(__BIG_ENDIAN_BITFIELD) /* W9 */ 669 u64 rsvd_639_624 : 16; 670 u64 drop_pkts : 48; 671 #else 672 u64 drop_pkts : 48; 673 u64 rsvd_639_624 : 16; 674 #endif 675 #if defined(__BIG_ENDIAN_BITFIELD) /* W10 */ 676 u64 rsvd_703_688 : 16; 677 u64 re_pkts : 48; 678 #else 679 u64 re_pkts : 48; 680 u64 rsvd_703_688 : 16; 681 #endif 682 u64 rsvd_767_704; /* W11 */ 683 u64 rsvd_831_768; /* W12 */ 684 u64 rsvd_895_832; /* W13 */ 685 u64 rsvd_959_896; /* W14 */ 686 u64 rsvd_1023_960; /* W15 */ 687 }; 688 689 /* NIX sqe sizes */ 690 enum nix_maxsqesz { 691 NIX_MAXSQESZ_W16 = 0x0, 692 NIX_MAXSQESZ_W8 = 0x1, 693 }; 694 695 /* NIX SQB caching type */ 696 enum nix_stype { 697 NIX_STYPE_STF = 0x0, 698 NIX_STYPE_STT = 0x1, 699 NIX_STYPE_STP = 0x2, 700 }; 701 702 /* NIX Send queue context structure */ 703 struct nix_sq_ctx_s { 704 #if defined(__BIG_ENDIAN_BITFIELD) /* W0 */ 705 u64 sqe_way_mask : 16; 706 u64 cq : 20; 707 u64 sdp_mcast : 1; 708 u64 substream : 20; 709 u64 qint_idx : 6; 710 u64 ena : 1; 711 #else 712 u64 ena : 1; 713 u64 qint_idx : 6; 714 u64 substream : 20; 715 u64 sdp_mcast : 1; 716 u64 cq : 20; 717 u64 sqe_way_mask : 16; 718 #endif 719 #if defined(__BIG_ENDIAN_BITFIELD) /* W1 */ 720 u64 sqb_count : 16; 721 u64 default_chan : 12; 722 u64 smq_rr_quantum : 24; 723 u64 sso_ena : 1; 724 u64 xoff : 1; 725 u64 cq_ena : 1; 726 u64 smq : 9; 727 #else 728 u64 smq : 9; 729 u64 cq_ena : 1; 730 u64 xoff : 1; 731 u64 sso_ena : 1; 732 u64 smq_rr_quantum : 24; 733 u64 default_chan : 12; 734 u64 sqb_count : 16; 735 #endif 736 #if defined(__BIG_ENDIAN_BITFIELD) /* W2 */ 737 u64 rsvd_191 : 1; 738 u64 sqe_stype : 2; 739 u64 sq_int_ena : 8; 740 u64 sq_int : 8; 741 u64 sqb_aura : 20; 742 u64 smq_rr_count : 25; 743 #else 744 u64 smq_rr_count : 25; 745 u64 sqb_aura : 20; 746 u64 sq_int : 8; 747 u64 sq_int_ena : 8; 748 u64 sqe_stype : 2; 749 u64 rsvd_191 : 1; 750 #endif 751 #if defined(__BIG_ENDIAN_BITFIELD) /* W3 */ 752 u64 rsvd_255_253 : 3; 753 u64 smq_next_sq_vld : 1; 754 u64 smq_pend : 1; 755 u64 smenq_next_sqb_vld : 1; 756 u64 head_offset : 6; 757 u64 smenq_offset : 6; 758 u64 tail_offset : 6; 759 u64 smq_lso_segnum : 8; 760 u64 smq_next_sq : 20; 761 u64 mnq_dis : 1; 762 u64 lmt_dis : 1; 763 u64 cq_limit : 8; 764 u64 max_sqe_size : 2; 765 #else 766 u64 max_sqe_size : 2; 767 u64 cq_limit : 8; 768 u64 lmt_dis : 1; 769 u64 mnq_dis : 1; 770 u64 smq_next_sq : 20; 771 u64 smq_lso_segnum : 8; 772 u64 tail_offset : 6; 773 u64 smenq_offset : 6; 774 u64 head_offset : 6; 775 u64 smenq_next_sqb_vld : 1; 776 u64 smq_pend : 1; 777 u64 smq_next_sq_vld : 1; 778 u64 rsvd_255_253 : 3; 779 #endif 780 u64 next_sqb : 64;/* W4 */ 781 u64 tail_sqb : 64;/* W5 */ 782 u64 smenq_sqb : 64;/* W6 */ 783 u64 smenq_next_sqb : 64;/* W7 */ 784 u64 head_sqb : 64;/* W8 */ 785 #if defined(__BIG_ENDIAN_BITFIELD) /* W9 */ 786 u64 rsvd_639_630 : 10; 787 u64 vfi_lso_vld : 1; 788 u64 vfi_lso_vlan1_ins_ena : 1; 789 u64 vfi_lso_vlan0_ins_ena : 1; 790 u64 vfi_lso_mps : 14; 791 u64 vfi_lso_sb : 8; 792 u64 vfi_lso_sizem1 : 3; 793 u64 vfi_lso_total : 18; 794 u64 rsvd_583_576 : 8; 795 #else 796 u64 rsvd_583_576 : 8; 797 u64 vfi_lso_total : 18; 798 u64 vfi_lso_sizem1 : 3; 799 u64 vfi_lso_sb : 8; 800 u64 vfi_lso_mps : 14; 801 u64 vfi_lso_vlan0_ins_ena : 1; 802 u64 vfi_lso_vlan1_ins_ena : 1; 803 u64 vfi_lso_vld : 1; 804 u64 rsvd_639_630 : 10; 805 #endif 806 #if defined(__BIG_ENDIAN_BITFIELD) /* W10 */ 807 u64 rsvd_703_658 : 46; 808 u64 scm_lso_rem : 18; 809 #else 810 u64 scm_lso_rem : 18; 811 u64 rsvd_703_658 : 46; 812 #endif 813 #if defined(__BIG_ENDIAN_BITFIELD) /* W11 */ 814 u64 rsvd_767_752 : 16; 815 u64 octs : 48; 816 #else 817 u64 octs : 48; 818 u64 rsvd_767_752 : 16; 819 #endif 820 #if defined(__BIG_ENDIAN_BITFIELD) /* W12 */ 821 u64 rsvd_831_816 : 16; 822 u64 pkts : 48; 823 #else 824 u64 pkts : 48; 825 u64 rsvd_831_816 : 16; 826 #endif 827 u64 rsvd_895_832 : 64;/* W13 */ 828 #if defined(__BIG_ENDIAN_BITFIELD) /* W14 */ 829 u64 rsvd_959_944 : 16; 830 u64 dropped_octs : 48; 831 #else 832 u64 dropped_octs : 48; 833 u64 rsvd_959_944 : 16; 834 #endif 835 #if defined(__BIG_ENDIAN_BITFIELD) /* W15 */ 836 u64 rsvd_1023_1008 : 16; 837 u64 dropped_pkts : 48; 838 #else 839 u64 dropped_pkts : 48; 840 u64 rsvd_1023_1008 : 16; 841 #endif 842 }; 843 844 /* NIX Receive side scaling entry structure*/ 845 struct nix_rsse_s { 846 #if defined(__BIG_ENDIAN_BITFIELD) 847 uint32_t reserved_20_31 : 12; 848 uint32_t rq : 20; 849 #else 850 uint32_t rq : 20; 851 uint32_t reserved_20_31 : 12; 852 853 #endif 854 }; 855 856 /* NIX receive multicast/mirror entry structure */ 857 struct nix_rx_mce_s { 858 #if defined(__BIG_ENDIAN_BITFIELD) /* W0 */ 859 uint64_t next : 16; 860 uint64_t pf_func : 16; 861 uint64_t rsvd_31_24 : 8; 862 uint64_t index : 20; 863 uint64_t eol : 1; 864 uint64_t rsvd_2 : 1; 865 uint64_t op : 2; 866 #else 867 uint64_t op : 2; 868 uint64_t rsvd_2 : 1; 869 uint64_t eol : 1; 870 uint64_t index : 20; 871 uint64_t rsvd_31_24 : 8; 872 uint64_t pf_func : 16; 873 uint64_t next : 16; 874 #endif 875 }; 876 877 enum nix_lsoalg { 878 NIX_LSOALG_NOP, 879 NIX_LSOALG_ADD_SEGNUM, 880 NIX_LSOALG_ADD_PAYLEN, 881 NIX_LSOALG_ADD_OFFSET, 882 NIX_LSOALG_TCP_FLAGS, 883 }; 884 885 enum nix_txlayer { 886 NIX_TXLAYER_OL3, 887 NIX_TXLAYER_OL4, 888 NIX_TXLAYER_IL3, 889 NIX_TXLAYER_IL4, 890 }; 891 892 struct nix_lso_format { 893 #if defined(__BIG_ENDIAN_BITFIELD) 894 u64 rsvd_19_63 : 45; 895 u64 alg : 3; 896 u64 rsvd_14_15 : 2; 897 u64 sizem1 : 2; 898 u64 rsvd_10_11 : 2; 899 u64 layer : 2; 900 u64 offset : 8; 901 #else 902 u64 offset : 8; 903 u64 layer : 2; 904 u64 rsvd_10_11 : 2; 905 u64 sizem1 : 2; 906 u64 rsvd_14_15 : 2; 907 u64 alg : 3; 908 u64 rsvd_19_63 : 45; 909 #endif 910 }; 911 912 struct nix_rx_flowkey_alg { 913 #if defined(__BIG_ENDIAN_BITFIELD) 914 u64 reserved_35_63 :29; 915 u64 ltype_match :4; 916 u64 ltype_mask :4; 917 u64 sel_chan :1; 918 u64 ena :1; 919 u64 reserved_24_24 :1; 920 u64 lid :3; 921 u64 bytesm1 :5; 922 u64 hdr_offset :8; 923 u64 fn_mask :1; 924 u64 ln_mask :1; 925 u64 key_offset :6; 926 #else 927 u64 key_offset :6; 928 u64 ln_mask :1; 929 u64 fn_mask :1; 930 u64 hdr_offset :8; 931 u64 bytesm1 :5; 932 u64 lid :3; 933 u64 reserved_24_24 :1; 934 u64 ena :1; 935 u64 sel_chan :1; 936 u64 ltype_mask :4; 937 u64 ltype_match :4; 938 u64 reserved_35_63 :29; 939 #endif 940 }; 941 942 /* NIX VTAG size */ 943 enum nix_vtag_size { 944 VTAGSIZE_T4 = 0x0, 945 VTAGSIZE_T8 = 0x1, 946 }; 947 948 enum nix_tx_vtag_op { 949 NOP = 0x0, 950 VTAG_INSERT = 0x1, 951 VTAG_REPLACE = 0x2, 952 }; 953 954 /* NIX RX VTAG actions */ 955 #define VTAG_STRIP BIT_ULL(4) 956 #define VTAG_CAPTURE BIT_ULL(5) 957 958 #endif /* RVU_STRUCT_H */ 959