alpm_th3_acc.h (87773B)
1 /* 2 * 3 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 4 * 5 * Copyright 2007-2020 Broadcom Inc. All rights reserved. 6 * 7 * File: alpm_th3_acc.h 8 * Purpose: Function declarations for ALPM Internal functions. 9 */ 10 11 #ifndef _BCM_INT_ALPM_TH3_ACC_H_ 12 #define _BCM_INT_ALPM_TH3_ACC_H_ 13 14 typedef struct { 15 #ifdef LE_HOST 16 uint32 DEST_TYPE:1, 17 DESTINATION:15, 18 PRI:4, 19 RPE:1, 20 DST_DISCARD:1, 21 CLASS_ID:6, 22 FLEX_CTR_POOL_NUMBER:4; 23 #else 24 uint32 FLEX_CTR_POOL_NUMBER:4, 25 CLASS_ID:6, 26 DST_DISCARD:1, 27 RPE:1, 28 PRI:4, 29 DESTINATION:15, 30 DEST_TYPE:1; 31 #endif /* LE_HOST */ 32 33 #ifdef LE_HOST 34 uint32 FLEX_CTR_OFFSET_MODE:2, 35 FLEX_CTR_BASE_COUNTER_IDX:12, 36 __PAD0:18; 37 #else 38 uint32 __PAD0:18, 39 FLEX_CTR_BASE_COUNTER_IDX:12, 40 FLEX_CTR_OFFSET_MODE:2; 41 #endif /* LE_HOST */ 42 } th3_fmt_ASSOC_DATA_FULL_t; 43 44 typedef struct { 45 #ifdef LE_HOST 46 uint32 DEST_TYPE:1, 47 DESTINATION:15, 48 __PAD0:16; 49 #else 50 uint32 __PAD0:16, 51 DESTINATION:15, 52 DEST_TYPE:1; 53 #endif /* LE_HOST */ 54 55 } th3_fmt_ASSOC_DATA_REDUCED_t; 56 57 typedef struct { 58 #ifdef LE_HOST 59 uint32 SUB_DB_PRIORITY:2, 60 __PAD0:30; 61 #else 62 uint32 __PAD0:30, 63 SUB_DB_PRIORITY:2; 64 #endif /* LE_HOST */ 65 } th3_fmt_FIXED_DATA_t; 66 67 typedef struct { 68 #ifdef LE_HOST 69 uint32 KEY_MODE:2, 70 KEY_TYPE:1, 71 IP_ADDR_0_28:29; 72 #else 73 uint32 IP_ADDR_0_28:29, 74 KEY_TYPE:1, 75 KEY_MODE:2; 76 #endif /* LE_HOST */ 77 78 #ifdef LE_HOST 79 uint32 IP_ADDR_29_31:3, 80 VRF_ID:12, 81 RESERVED:1, 82 __PAD0:16; 83 #else 84 uint32 __PAD0:16, 85 RESERVED:1, 86 VRF_ID:12, 87 IP_ADDR_29_31:3; 88 #endif /* LE_HOST */ 89 } th3_fmt_L3_DEFIP_TCAM_KEY_t; 90 91 typedef struct { 92 #ifdef LE_HOST 93 uint32 DEFAULT_MISS:1, 94 DIRECT_ROUTE:1, 95 BKT_PTR:10, 96 KSHIFT:7, 97 ROFS:3, 98 FMT0:4, 99 FMT1:4, 100 FMT2_0_1:2; 101 #else 102 uint32 FMT2_0_1:2, 103 FMT1:4, 104 FMT0:4, 105 ROFS:3, 106 KSHIFT:7, 107 BKT_PTR:10, 108 DIRECT_ROUTE:1, 109 DEFAULT_MISS:1; 110 #endif /* LE_HOST */ 111 112 #ifdef LE_HOST 113 uint32 FMT2_2_3:2, 114 FMT3:4, 115 FMT4:4, 116 __PAD0:22; 117 #else 118 uint32 __PAD0:22, 119 FMT4:4, 120 FMT3:4, 121 FMT2_2_3:2; 122 #endif /* LE_HOST */ 123 } th3_fmt_ALPM1_DATA_t; 124 125 typedef struct { 126 #ifdef LE_HOST 127 uint32 DEFAULT_MISS:1, 128 BKT_PTR:13, 129 KSHIFT:7, 130 ROFS:3, 131 FMT0:4, 132 FMT1:4; 133 #else 134 uint32 FMT1:4, 135 FMT0:4, 136 ROFS:3, 137 KSHIFT:7, 138 BKT_PTR:13, 139 DEFAULT_MISS:1; 140 #endif /* LE_HOST */ 141 142 #ifdef LE_HOST 143 uint32 FMT2:4, 144 FMT3:4, 145 FMT4:4, 146 FMT5:4, 147 FMT6:4, 148 FMT7:4, 149 __PAD0:8; 150 #else 151 uint32 __PAD0:8, 152 FMT7:4, 153 FMT6:4, 154 FMT5:4, 155 FMT4:4, 156 FMT3:4, 157 FMT2:4; 158 #endif /* LE_HOST */ 159 } th3_fmt_ALPM2_DATA_t; 160 161 #if 0 162 /* L3_DEFIP_ALPM_PIVOT_FMT type */ 163 typedef struct { 164 #ifdef LE_HOST 165 uint32 PREFIX:8, 166 ASSOC_DATA:16, 167 ALPM2_DATA_0_7:8; 168 #else 169 uint32 ALPM2_DATA_0_7:8, 170 ASSOC_DATA:16, 171 PREFIX:8; 172 #endif /* LE_HOST */ 173 174 uint32 ALPM2_DATA_8_39; 175 176 #ifdef LE_HOST 177 uint32 ALPM2_DATA_40_55:16, 178 __PAD0:16; 179 #else 180 uint32 __PAD0:16, 181 ALPM2_DATA_40_55:16; 182 #endif /* LE_HOST */ 183 } th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT1_t; 184 185 typedef struct { 186 #ifdef LE_HOST 187 uint32 PREFIX:24, 188 ASSOC_DATA_0_7:8; 189 #else 190 uint32 ASSOC_DATA_0_7:8, 191 PREFIX:24; 192 #endif /* LE_HOST */ 193 194 #ifdef LE_HOST 195 uint32 ASSOC_DATA_8_15:8, 196 ALPM2_DATA_0_23:24; 197 #else 198 uint32 ALPM2_DATA_0_23:24, 199 ASSOC_DATA_8_15:8; 200 #endif /* LE_HOST */ 201 202 uint32 ALPM2_DATA_24_55; 203 } th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT2_t; 204 205 typedef struct { 206 uint32 PREFIX_0_31; 207 208 #ifdef LE_HOST 209 uint32 PREFIX_32_47:16, 210 ASSOC_DATA:16; 211 #else 212 uint32 ASSOC_DATA:16, 213 PREFIX_32_47:16; 214 #endif /* LE_HOST */ 215 216 uint32 ALPM2_DATA_0_31; 217 218 #ifdef LE_HOST 219 uint32 ALPM2_DATA_32_55:24, 220 __PAD0:8; 221 #else 222 uint32 __PAD0:8, 223 ALPM2_DATA_32_55:24; 224 #endif /* LE_HOST */ 225 226 } th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT3_t; 227 228 typedef struct { 229 uint32 PREFIX_0_31; 230 uint32 PREFIX_32_63; 231 232 #ifdef LE_HOST 233 uint32 PREFIX_64_87:24, 234 ASSOC_DATA_0_7:8; 235 #else 236 uint32 ASSOC_DATA_0_7:8, 237 PREFIX_64_87:24; 238 #endif /* LE_HOST */ 239 240 #ifdef LE_HOST 241 uint32 ASSOC_DATA_8_15:8, 242 ALPM2_DATA_0_23:24; 243 #else 244 uint32 ALPM2_DATA_0_23:24, 245 ASSOC_DATA_8_15:8; 246 #endif /* LE_HOST */ 247 248 uint32 ALPM2_DATA_24_55; 249 250 } th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT4_t; 251 252 typedef struct { 253 uint32 PREFIX_0_31; 254 uint32 PREFIX_32_63; 255 uint32 PREFIX_64_95; 256 uint32 PREFIX_96_127; 257 258 #ifdef LE_HOST 259 uint32 PREFIX_128:1, 260 RESERVED:7, 261 ASSOC_DATA:16, 262 ALPM2_DATA_0_7:8; 263 #else 264 uint32 ALPM2_DATA_0_7:8, 265 ASSOC_DATA:16, 266 RESERVED:7, 267 PREFIX_128:1; 268 #endif /* LE_HOST */ 269 270 uint32 ALPM2_DATA_8_39; 271 272 #ifdef LE_HOST 273 uint32 ALPM2_DATA_40_55:16, 274 __PAD0:16; 275 #else 276 uint32 __PAD0:16, 277 ALPM2_DATA_40_55:16; 278 #endif /* LE_HOST */ 279 280 } th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT5_t; 281 282 typedef struct { 283 #ifdef LE_HOST 284 uint32 PREFIX:18, 285 ASSOC_DATA_0_13:14; 286 #else 287 uint32 ASSOC_DATA_0_13:14, 288 PREFIX:18; 289 #endif /* LE_HOST */ 290 291 uint32 ASSOC_DATA_14_45; 292 uint32 ALPM2_DATA_0_31; 293 294 #ifdef LE_HOST 295 uint32 ALPM2_DATA_32_55:24, 296 __PAD0:8; 297 #else 298 uint32 __PAD0:8, 299 ALPM2_DATA_32_55:24; 300 #endif /* LE_HOST */ 301 302 } th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT6_t; 303 304 typedef struct { 305 uint32 PREFIX_0_31; 306 #ifdef LE_HOST 307 uint32 PREFIX_32_57:26, 308 ASSOC_DATA_0_5:6; 309 #else 310 uint32 ASSOC_DATA_0_5:6, 311 PREFIX_32_57:26; 312 #endif /* LE_HOST */ 313 314 uint32 ASSOC_DATA_6_37; 315 316 #ifdef LE_HOST 317 uint32 ASSOC_DATA_38_45:8, 318 ALPM2_DATA_0_23:24; 319 #else 320 uint32 ALPM2_DATA_0_23:24, 321 ASSOC_DATA_38_45:8; 322 #endif /* LE_HOST */ 323 uint32 ALPM2_DATA_24_55; 324 325 } th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT7_t; 326 327 typedef struct { 328 uint32 PREFIX_0_31; 329 uint32 PREFIX_32_63; 330 uint32 PREFIX_64_95; 331 uint32 PREFIX_96_127; 332 333 #ifdef LE_HOST 334 uint32 PREFIX_128:1, 335 RESERVED:1, 336 ASSOC_DATA_0_29:30; 337 #else 338 uint32 ASSOC_DATA_0_29:30, 339 RESERVED:1, 340 PREFIX_128:1; 341 #endif /* LE_HOST */ 342 343 #ifdef LE_HOST 344 uint32 ASSOC_DATA_30_45:16, 345 ALPM2_DATA_0_15:16; 346 #else 347 uint32 ALPM2_DATA_0_15:16, 348 ASSOC_DATA_30_45:16; 349 #endif /* LE_HOST */ 350 351 uint32 ALPM2_DATA_16_47; 352 353 #ifdef LE_HOST 354 uint32 ALPM2_DATA_48_55:8, 355 __PAD0:24; 356 #else 357 uint32 __PAD0:24, 358 ALPM2_DATA_48_55:8; 359 #endif /* LE_HOST */ 360 361 } th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT8_t; 362 363 /* L3_DEFIP_ALPM_ROUTE_FMT type */ 364 typedef struct { 365 #ifdef LE_HOST 366 uint32 PREFIX:16, 367 ASSOC_DATA:16; 368 #else 369 uint32 ASSOC_DATA:16, 370 PREFIX:16; 371 #endif /* LE_HOST */ 372 } th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT1_t; 373 374 typedef struct { 375 #ifdef LE_HOST 376 uint32 PREFIX:24, 377 ASSOC_DATA_0_7:8; 378 #else 379 uint32 ASSOC_DATA_0_7:8, 380 PREFIX:24; 381 #endif /* LE_HOST */ 382 383 #ifdef LE_HOST 384 uint32 ASSOC_DATA_8_15:8, 385 __PAD0:24; 386 #else 387 uint32 __PAD0:24, 388 ASSOC_DATA_8_15:8; 389 #endif /* LE_HOST */ 390 } th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT2_t; 391 392 typedef struct { 393 uint32 PREFIX; 394 395 #ifdef LE_HOST 396 uint32 ASSOC_DATA:16, 397 __PAD0:16; 398 #else 399 uint32 __PAD0:16, 400 ASSOC_DATA:16; 401 #endif /* LE_HOST */ 402 } th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT3_t; 403 404 typedef struct { 405 uint32 PREFIX_0_31; 406 407 #ifdef LE_HOST 408 uint32 PREFIX_32_39:8, 409 ASSOC_DATA:16, 410 __PAD0:8; 411 #else 412 uint32 __PAD0:8, 413 ASSOC_DATA:16, 414 PREFIX_32_39:8; 415 #endif /* LE_HOST */ 416 } th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT4_t; 417 418 typedef struct { 419 uint32 PREFIX_0_31; 420 421 #ifdef LE_HOST 422 uint32 PREFIX_32_47:16, 423 ASSOC_DATA:16; 424 #else 425 uint32 ASSOC_DATA:16, 426 PREFIX_32_47:16; 427 #endif /* LE_HOST */ 428 } th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT5_t; 429 430 typedef struct { 431 uint32 PREFIX_0_31; 432 uint32 PREFIX_32_63; 433 434 #ifdef LE_HOST 435 uint32 ASSOC_DATA:16, 436 __PAD0:16; 437 #else 438 uint32 __PAD0:16, 439 ASSOC_DATA:16; 440 #endif /* LE_HOST */ 441 } th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT6_t; 442 443 typedef struct { 444 uint32 PREFIX_0_31; 445 uint32 PREFIX_32_63; 446 447 #ifdef LE_HOST 448 uint32 PREFIX_64_79:16, 449 ASSOC_DATA:16; 450 #else 451 uint32 ASSOC_DATA:16, 452 PREFIX_64_79:16; 453 #endif /* LE_HOST */ 454 } th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT7_t; 455 456 typedef struct { 457 uint32 PREFIX_0_31; 458 uint32 PREFIX_32_63; 459 uint32 PREFIX_64_95; 460 461 #ifdef LE_HOST 462 uint32 PREFIX_96_103:8, 463 ASSOC_DATA:16, 464 __PAD0:8; 465 #else 466 uint32 __PAD0:8, 467 ASSOC_DATA:16, 468 PREFIX_96_103:8; 469 #endif /* LE_HOST */ 470 } th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT8_t; 471 472 typedef struct { 473 uint32 PREFIX_0_31; 474 uint32 PREFIX_32_63; 475 uint32 PREFIX_64_95; 476 uint32 PREFIX_96_127; 477 478 #ifdef LE_HOST 479 uint32 PREFIX_128:1, 480 RESERVED:7, 481 ASSOC_DATA:16, 482 __PAD0:8; 483 #else 484 uint32 __PAD0:8, 485 ASSOC_DATA:16, 486 RESERVED:7, 487 PREFIX_128:1; 488 #endif /* LE_HOST */ 489 } th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT9_t; 490 491 typedef struct { 492 uint32 PREFIX_0_31; 493 494 #ifdef LE_HOST 495 uint32 PREFIX_32_33:2, 496 ASSOC_DATA_0_29:30; 497 #else 498 uint32 ASSOC_DATA_0_29:30, 499 PREFIX_32_33:2; 500 #endif /* LE_HOST */ 501 502 #ifdef LE_HOST 503 uint32 ASSOC_DATA_30_45:16, 504 __PAD0:16; 505 #else 506 uint32 __PAD0:16, 507 ASSOC_DATA_30_45:16; 508 #endif /* LE_HOST */ 509 510 } th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT10_t; 511 512 typedef struct { 513 uint32 PREFIX_0_31; 514 uint32 PREFIX_32_63; 515 516 #ifdef LE_HOST 517 uint32 PREFIX_64_73:10, 518 ASSOC_DATA_0_21:22; 519 #else 520 uint32 ASSOC_DATA_0_21:22, 521 PREFIX_64_73:10; 522 #endif /* LE_HOST */ 523 524 #ifdef LE_HOST 525 uint32 ASSOC_DATA_22_45:24, 526 __PAD0:8; 527 #else 528 uint32 __PAD0:8, 529 ASSOC_DATA_22_45:24; 530 #endif /* LE_HOST */ 531 532 } th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT11_t; 533 534 typedef struct { 535 uint32 PREFIX_0_31; 536 uint32 PREFIX_32_63; 537 uint32 PREFIX_64_95; 538 uint32 PREFIX_96_127; 539 540 #ifdef LE_HOST 541 uint32 PREFIX_128:1, 542 RESERVED:1, 543 ASSOC_DATA_0_29:30; 544 #else 545 uint32 ASSOC_DATA_0_29:30, 546 RESERVED:1, 547 PREFIX_128:1; 548 #endif /* LE_HOST */ 549 550 #ifdef LE_HOST 551 uint32 ASSOC_DATA_30_45:16, 552 __PAD0:16; 553 #else 554 uint32 __PAD0:16, 555 ASSOC_DATA_30_45:16; 556 #endif /* LE_HOST */ 557 558 } th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT12_t; 559 560 561 /* PIVOT FULL */ 562 typedef struct { 563 uint32 ENTRY_0_0_31; 564 uint32 ENTRY_0_32_63; 565 566 #ifdef LE_HOST 567 uint32 ENTRY_0_64_79:16, 568 ENTRY_1_0_15:16; 569 #else 570 uint32 ENTRY_1_0_15:16, 571 ENTRY_0_64_79:16; 572 #endif /* LE_HOST */ 573 574 uint32 ENTRY_1_16_47; 575 uint32 ENTRY_1_48_79; 576 uint32 ENTRY_2_0_31; 577 uint32 ENTRY_2_32_63; 578 579 #ifdef LE_HOST 580 uint32 ENTRY_2_64_79:16, 581 ENTRY_3_0_15:16; 582 #else 583 uint32 ENTRY_3_0_15:16, 584 ENTRY_2_64_79:16; 585 #endif /* LE_HOST */ 586 587 uint32 ENTRY_3_16_47; 588 uint32 ENTRY_3_48_79; 589 uint32 ENTRY_4_0_31; 590 uint32 ENTRY_4_32_63; 591 592 #ifdef LE_HOST 593 uint32 ENTRY_4_64_79:16, 594 ENTRY_5_0_15:16; 595 #else 596 uint32 ENTRY_5_0_15:16, 597 ENTRY_4_64_79:16; 598 #endif /* LE_HOST */ 599 uint32 ENTRY_5_16_47; 600 uint32 ENTRY_5_48_79; 601 602 } th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT1_FULL_t; 603 604 typedef struct { 605 uint32 ENTRY_0_0_31; 606 uint32 ENTRY_0_32_63; 607 uint32 ENTRY_0_64_95; 608 609 uint32 ENTRY_1_0_31; 610 uint32 ENTRY_1_32_63; 611 uint32 ENTRY_1_64_95; 612 613 uint32 ENTRY_2_0_31; 614 uint32 ENTRY_2_32_63; 615 uint32 ENTRY_2_64_95; 616 617 uint32 ENTRY_3_0_31; 618 uint32 ENTRY_3_32_63; 619 uint32 ENTRY_3_64_95; 620 621 uint32 ENTRY_4_0_31; 622 uint32 ENTRY_4_32_63; 623 uint32 ENTRY_4_64_95; 624 } th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT2_FULL_t; 625 626 typedef struct { 627 uint32 ENTRY_0_0_31; 628 uint32 ENTRY_0_32_63; 629 uint32 ENTRY_0_64_95; 630 631 #ifdef LE_HOST 632 uint32 ENTRY_0_96_119:24, 633 ENTRY_1_0_7:8; 634 #else 635 uint32 ENTRY_1_0_7:8, 636 ENTRY_0_96_119:24; 637 #endif /* LE_HOST */ 638 639 uint32 ENTRY_1_8_39; 640 uint32 ENTRY_1_40_71; 641 uint32 ENTRY_1_72_103; 642 643 #ifdef LE_HOST 644 uint32 ENTRY_1_104_119:16, 645 ENTRY_2_0_15:16; 646 #else 647 uint32 ENTRY_2_0_15:16, 648 ENTRY_1_104_119:16; 649 #endif /* LE_HOST */ 650 651 uint32 ENTRY_2_16_47; 652 uint32 ENTRY_2_48_79; 653 uint32 ENTRY_2_80_111; 654 655 #ifdef LE_HOST 656 uint32 ENTRY_2_112_119:8, 657 ENTRY_3_0_23:24; 658 #else 659 uint32 ENTRY_3_0_23:24, 660 ENTRY_2_112_119:8; 661 #endif /* LE_HOST */ 662 663 uint32 ENTRY_3_24_55; 664 uint32 ENTRY_3_56_87; 665 uint32 ENTRY_3_88_119; 666 667 } th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT3_FULL_t; 668 669 typedef struct { 670 uint32 ENTRY_0_0_31; 671 uint32 ENTRY_0_32_63; 672 uint32 ENTRY_0_64_95; 673 uint32 ENTRY_0_96_127; 674 uint32 ENTRY_0_128_159; 675 676 uint32 ENTRY_1_0_31; 677 uint32 ENTRY_1_32_63; 678 uint32 ENTRY_1_64_95; 679 uint32 ENTRY_1_96_127; 680 uint32 ENTRY_1_128_159; 681 682 uint32 ENTRY_2_0_31; 683 uint32 ENTRY_2_32_63; 684 uint32 ENTRY_2_64_95; 685 uint32 ENTRY_2_96_127; 686 uint32 ENTRY_2_128_159; 687 } th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT4_FULL_t; 688 689 typedef struct { 690 uint32 ENTRY_0_0_31; 691 uint32 ENTRY_0_32_63; 692 uint32 ENTRY_0_64_95; 693 uint32 ENTRY_0_96_127; 694 uint32 ENTRY_0_128_159; 695 uint32 ENTRY_0_160_191; 696 697 #ifdef LE_HOST 698 uint32 ENTRY_0_192_207:16, 699 ENTRY_1_0_15:16; 700 #else 701 uint32 ENTRY_1_0_15:16, 702 ENTRY_0_192_207:16; 703 #endif /* LE_HOST */ 704 705 uint32 ENTRY_1_16_47; 706 uint32 ENTRY_1_48_79; 707 uint32 ENTRY_1_80_111; 708 uint32 ENTRY_1_112_143; 709 uint32 ENTRY_1_144_175; 710 uint32 ENTRY_1_176_207; 711 712 uint32 RESERVED_0_31; 713 uint32 RESERVED_32_63; 714 } th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT5_FULL_t; 715 716 typedef th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT3_FULL_t th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT6_FULL_t; 717 typedef th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT4_FULL_t th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT7_FULL_t; 718 719 typedef struct { 720 uint32 ENTRY_0_0_31; 721 uint32 ENTRY_0_32_63; 722 uint32 ENTRY_0_64_95; 723 uint32 ENTRY_0_96_127; 724 uint32 ENTRY_0_128_159; 725 uint32 ENTRY_0_160_191; 726 uint32 ENTRY_0_192_223; 727 728 #ifdef LE_HOST 729 uint32 ENTRY_0_224_231:8, 730 ENTRY_1_0_23:24; 731 #else 732 uint32 ENTRY_1_0_23:24, 733 ENTRY_0_224_231:8; 734 #endif /* LE_HOST */ 735 736 uint32 ENTRY_1_24_55; 737 uint32 ENTRY_1_56_87; 738 uint32 ENTRY_1_88_119; 739 uint32 ENTRY_1_120_151; 740 uint32 ENTRY_1_152_183; 741 uint32 ENTRY_1_184_215; 742 743 #ifdef LE_HOST 744 uint32 ENTRY_1_216_231:16, 745 RESERVED:16; 746 #else 747 uint32 RESERVED:24, 748 ENTRY_1_216_231:8; 749 #endif /* LE_HOST */ 750 } th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT8_FULL_t; 751 752 /* ROUTE FULL fmt */ 753 typedef struct { 754 uint32 ENTRY_0; 755 uint32 ENTRY_1; 756 uint32 ENTRY_2; 757 uint32 ENTRY_3; 758 uint32 ENTRY_4; 759 uint32 ENTRY_5; 760 uint32 ENTRY_6; 761 uint32 ENTRY_7; 762 uint32 ENTRY_8; 763 uint32 ENTRY_9; 764 uint32 ENTRY_10; 765 uint32 ENTRY_11; 766 uint32 ENTRY_12; 767 uint32 ENTRY_13; 768 uint32 ENTRY_14; 769 } th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT1_FULL_t; 770 771 typedef struct { 772 uint32 ENTRY_0_0_31; 773 #ifdef LE_HOST 774 uint32 ENTRY_0_32_39:8, 775 ENTRY_1_0_23:24; 776 #else 777 uint32 ENTRY_1_0_23:24, 778 ENTRY_0_32_39:8; 779 #endif /* LE_HOST */ 780 781 #ifdef LE_HOST 782 uint32 ENTRY_1_24_39:16, 783 ENTRY_2_0_15:16; 784 #else 785 uint32 ENTRY_2_0_15:16, 786 ENTRY_1_24_39:16; 787 #endif /* LE_HOST */ 788 789 #ifdef LE_HOST 790 uint32 ENTRY_2_16_39:24, 791 ENTRY_3_0_7:8; 792 #else 793 uint32 ENTRY_3_0_7:8, 794 ENTRY_2_16_39:24; 795 #endif /* LE_HOST */ 796 797 uint32 ENTRY_3_8_39; 798 799 uint32 ENTRY_4_0_31; 800 #ifdef LE_HOST 801 uint32 ENTRY_4_32_39:8, 802 ENTRY_5_0_23:24; 803 #else 804 uint32 ENTRY_5_0_23:24, 805 ENTRY_4_32_39:8; 806 #endif /* LE_HOST */ 807 808 #ifdef LE_HOST 809 uint32 ENTRY_5_24_39:16, 810 ENTRY_6_0_15:16; 811 #else 812 uint32 ENTRY_6_0_15:16, 813 ENTRY_5_24_39:16; 814 #endif /* LE_HOST */ 815 816 #ifdef LE_HOST 817 uint32 ENTRY_6_16_39:24, 818 ENTRY_7_0_7:8; 819 #else 820 uint32 ENTRY_7_0_7:8, 821 ENTRY_6_16_39:24; 822 #endif /* LE_HOST */ 823 824 uint32 ENTRY_7_8_39; 825 826 uint32 ENTRY_8_0_31; 827 #ifdef LE_HOST 828 uint32 ENTRY_8_32_39:8, 829 ENTRY_9_0_23:24; 830 #else 831 uint32 ENTRY_9_0_23:24, 832 ENTRY_8_32_39:8; 833 #endif /* LE_HOST */ 834 835 #ifdef LE_HOST 836 uint32 ENTRY_9_24_39:16, 837 ENTRY_10_0_15:16; 838 #else 839 uint32 ENTRY_10_0_15:16, 840 ENTRY_9_24_39:16; 841 #endif /* LE_HOST */ 842 843 #ifdef LE_HOST 844 uint32 ENTRY_10_16_39:24, 845 ENTRY_11_0_7:8; 846 #else 847 uint32 ENTRY_11_0_7:8, 848 ENTRY_10_16_39:24; 849 #endif /* LE_HOST */ 850 uint32 ENTRY_11_8_39; 851 } th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT2_FULL_t; 852 853 typedef struct { 854 uint32 ENTRY_0_0_31; 855 #ifdef LE_HOST 856 uint32 ENTRY_0_32_47:16, 857 ENTRY_1_0_15:16; 858 #else 859 uint32 ENTRY_1_0_15:16, 860 ENTRY_0_32_47:16; 861 #endif /* LE_HOST */ 862 uint32 ENTRY_1_16_47; 863 864 uint32 ENTRY_2_0_31; 865 #ifdef LE_HOST 866 uint32 ENTRY_2_32_47:16, 867 ENTRY_3_0_15:16; 868 #else 869 uint32 ENTRY_3_0_15:16, 870 ENTRY_2_32_47:16; 871 #endif /* LE_HOST */ 872 uint32 ENTRY_3_16_47; 873 874 uint32 ENTRY_4_0_31; 875 #ifdef LE_HOST 876 uint32 ENTRY_4_32_47:16, 877 ENTRY_5_0_15:16; 878 #else 879 uint32 ENTRY_5_0_15:16, 880 ENTRY_4_32_47:16; 881 #endif /* LE_HOST */ 882 uint32 ENTRY_5_16_47; 883 884 uint32 ENTRY_6_0_31; 885 #ifdef LE_HOST 886 uint32 ENTRY_6_32_47:16, 887 ENTRY_7_0_15:16; 888 #else 889 uint32 ENTRY_7_0_15:16, 890 ENTRY_6_32_47:16; 891 #endif /* LE_HOST */ 892 uint32 ENTRY_7_16_47; 893 894 uint32 ENTRY_8_0_31; 895 #ifdef LE_HOST 896 uint32 ENTRY_8_32_47:16, 897 ENTRY_9_0_15:16; 898 #else 899 uint32 ENTRY_9_0_15:16, 900 ENTRY_8_32_47:16; 901 #endif /* LE_HOST */ 902 uint32 ENTRY_9_16_47; 903 } th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT3_FULL_t; 904 905 typedef struct { 906 uint32 ENTRY_0_0_31; 907 #ifdef LE_HOST 908 uint32 ENTRY_0_32_55:24, 909 ENTRY_1_0_7:8; 910 #else 911 uint32 ENTRY_1_0_7:8, 912 ENTRY_0_32_55:24; 913 #endif /* LE_HOST */ 914 uint32 ENTRY_1_8_39; 915 #ifdef LE_HOST 916 uint32 ENTRY_1_40_55:16, 917 ENTRY_2_0_15:16; 918 #else 919 uint32 ENTRY_2_0_15:16, 920 ENTRY_1_40_55:16; 921 #endif /* LE_HOST */ 922 uint32 ENTRY_2_16_47; 923 #ifdef LE_HOST 924 uint32 ENTRY_2_48_55:8, 925 ENTRY_3_0_23:24; 926 #else 927 uint32 ENTRY_3_0_23:24, 928 ENTRY_2_48_55:8; 929 #endif /* LE_HOST */ 930 uint32 ENTRY_3_24_55; 931 932 uint32 ENTRY_4_0_31; 933 #ifdef LE_HOST 934 uint32 ENTRY_4_32_55:24, 935 ENTRY_5_0_7:8; 936 #else 937 uint32 ENTRY_5_0_7:8, 938 ENTRY_4_32_55:24; 939 #endif /* LE_HOST */ 940 uint32 ENTRY_5_8_39; 941 #ifdef LE_HOST 942 uint32 ENTRY_5_40_55:16, 943 ENTRY_6_0_15:16; 944 #else 945 uint32 ENTRY_6_0_15:16, 946 ENTRY_5_40_55:16; 947 #endif /* LE_HOST */ 948 uint32 ENTRY_6_16_47; 949 #ifdef LE_HOST 950 uint32 ENTRY_6_48_55:8, 951 ENTRY_7_0_23:24; 952 #else 953 uint32 ENTRY_7_0_23:24, 954 ENTRY_6_48_55:8; 955 #endif /* LE_HOST */ 956 uint32 ENTRY_7_24_55; 957 958 uint32 RESERVED; 959 } th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT4_FULL_t; 960 961 typedef struct { 962 uint32 ENTRY_0_0_31; 963 uint32 ENTRY_0_32_63; 964 965 uint32 ENTRY_1_0_31; 966 uint32 ENTRY_1_32_63; 967 968 uint32 ENTRY_2_0_31; 969 uint32 ENTRY_2_32_63; 970 971 uint32 ENTRY_3_0_31; 972 uint32 ENTRY_3_32_63; 973 974 uint32 ENTRY_4_0_31; 975 uint32 ENTRY_4_32_63; 976 977 uint32 ENTRY_5_0_31; 978 uint32 ENTRY_5_32_63; 979 980 uint32 ENTRY_6_0_31; 981 uint32 ENTRY_6_32_63; 982 983 uint32 RESERVED; 984 } th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT5_FULL_t; 985 986 typedef th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT1_FULL_t th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT6_FULL_t; 987 typedef th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT2_FULL_t th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT7_FULL_t; 988 typedef th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT3_FULL_t th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT8_FULL_t; 989 990 typedef struct { 991 uint32 ENTRY_0_0_31; 992 uint32 ENTRY_0_32_63; 993 uint32 ENTRY_0_64_95; 994 uint32 ENTRY_0_96_127; 995 996 #ifdef LE_HOST 997 uint32 ENTRY_0_128_151:24, 998 ENTRY_1_0_7:8; 999 #else 1000 uint32 ENTRY_1_0_7:8, 1001 ENTRY_0_128_151:24; 1002 #endif /* LE_HOST */ 1003 1004 uint32 ENTRY_1_8_39; 1005 uint32 ENTRY_1_40_71; 1006 uint32 ENTRY_1_72_103; 1007 uint32 ENTRY_1_104_135; 1008 1009 #ifdef LE_HOST 1010 uint32 ENTRY_1_136_151:16, 1011 ENTRY_2_0_15:16; 1012 #else 1013 uint32 ENTRY_2_0_15:16, 1014 ENTRY_1_136_151:16; 1015 #endif /* LE_HOST */ 1016 1017 uint32 ENTRY_2_16_47; 1018 uint32 ENTRY_2_48_79; 1019 uint32 ENTRY_2_80_111; 1020 uint32 ENTRY_2_112_143; 1021 1022 #ifdef LE_HOST 1023 uint32 ENTRY_2_144_151:8, 1024 RESERVED:24; 1025 #else 1026 uint32 RESERVED:24, 1027 ENTRY_2_144_151:8; 1028 #endif /* LE_HOST */ 1029 } th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT9_FULL_t; 1030 1031 typedef th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT1_FULL_t th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT10_FULL_t; 1032 typedef th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT3_FULL_t th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT11_FULL_t; 1033 1034 typedef struct { 1035 uint32 ENTRY_0_0_31; 1036 uint32 ENTRY_0_32_63; 1037 uint32 ENTRY_0_64_95; 1038 uint32 ENTRY_0_96_127; 1039 uint32 ENTRY_0_128_159; 1040 1041 #ifdef LE_HOST 1042 uint32 ENTRY_0_160_175:16, 1043 ENTRY_1_0_15:16; 1044 #else 1045 uint32 ENTRY_1_0_15:16, 1046 ENTRY_0_160_175:16; 1047 #endif /* LE_HOST */ 1048 1049 uint32 ENTRY_1_16_47; 1050 uint32 ENTRY_1_48_79; 1051 uint32 ENTRY_1_80_111; 1052 uint32 ENTRY_1_112_143; 1053 uint32 ENTRY_1_144_175; 1054 1055 uint32 RESERVED_0_31; 1056 uint32 RESERVED_32_63; 1057 uint32 RESERVED_64_95; 1058 uint32 RESERVED_96_127; 1059 } th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT12_FULL_t; 1060 1061 static void 1062 th3_format_field_get(int unit, soc_format_t format, const uint32 *entbuf, 1063 soc_field_t field, uint32 *fldbuf) 1064 { 1065 switch (format) { 1066 /* PIVOT format */ 1067 case L3_DEFIP_ALPM_PIVOT_FMT1fmt: { 1068 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT1_t *fmt1 = (void *)entbuf; 1069 if (field == PREFIXf) { 1070 fldbuf[0] = fmt1->PREFIX; 1071 } else if (field == ASSOC_DATAf) { 1072 fldbuf[0] = fmt1->ASSOC_DATA; 1073 } else if (field == ALPM2_DATAf) { 1074 fldbuf[0] = ((fmt1->ALPM2_DATA_8_39 & 0xffffff) << 8 ) | fmt1->ALPM2_DATA_0_7; 1075 fldbuf[1] = (fmt1->ALPM2_DATA_40_55 << 8) | ((fmt1->ALPM2_DATA_8_39 >> 24) & 0xff); 1076 } 1077 } 1078 break; 1079 case L3_DEFIP_ALPM_PIVOT_FMT2fmt: { 1080 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT2_t *fmt2 = (void *)entbuf; 1081 if (field == PREFIXf) { 1082 fldbuf[0] = fmt2->PREFIX; 1083 } else if (field == ASSOC_DATAf) { 1084 fldbuf[0] = (fmt2->ASSOC_DATA_8_15 << 8) | fmt2->ASSOC_DATA_0_7; 1085 } else if (field == ALPM2_DATAf) { 1086 fldbuf[0] = ((fmt2->ALPM2_DATA_24_55 & 0xff) << 24) | fmt2->ALPM2_DATA_0_23; 1087 fldbuf[1] = (fmt2->ALPM2_DATA_24_55 >> 8) & 0xffffff; 1088 } 1089 } 1090 break; 1091 case L3_DEFIP_ALPM_PIVOT_FMT3fmt: { 1092 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT3_t *fmt3 = (void *)entbuf; 1093 if (field == PREFIXf) { 1094 fldbuf[0] = fmt3->PREFIX_0_31; 1095 fldbuf[1] = fmt3->PREFIX_32_47; 1096 } else if (field == ASSOC_DATAf) { 1097 fldbuf[0] = fmt3->ASSOC_DATA; 1098 } else if (field == ALPM2_DATAf) { 1099 fldbuf[0] = fmt3->ALPM2_DATA_0_31; 1100 fldbuf[1] = fmt3->ALPM2_DATA_32_55; 1101 } 1102 } 1103 break; 1104 case L3_DEFIP_ALPM_PIVOT_FMT4fmt: { 1105 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT4_t *fmt4 = (void *)entbuf; 1106 if (field == PREFIXf) { 1107 fldbuf[0] = fmt4->PREFIX_0_31; 1108 fldbuf[1] = fmt4->PREFIX_32_63; 1109 fldbuf[2] = fmt4->PREFIX_64_87; 1110 } else if (field == ASSOC_DATAf) { 1111 fldbuf[0] = (fmt4->ASSOC_DATA_8_15 << 8) | fmt4->ASSOC_DATA_0_7; 1112 } else if (field == ALPM2_DATAf) { 1113 fldbuf[0] = ((fmt4->ALPM2_DATA_24_55 & 0xff) << 24) | fmt4->ALPM2_DATA_0_23; 1114 fldbuf[1] = (fmt4->ALPM2_DATA_24_55 >> 8) & 0xffffff; 1115 } 1116 } 1117 break; 1118 case L3_DEFIP_ALPM_PIVOT_FMT5fmt: { 1119 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT5_t *fmt5 = (void *)entbuf; 1120 if (field == PREFIXf) { 1121 fldbuf[0] = fmt5->PREFIX_0_31; 1122 fldbuf[1] = fmt5->PREFIX_32_63; 1123 fldbuf[2] = fmt5->PREFIX_64_95; 1124 fldbuf[3] = fmt5->PREFIX_96_127; 1125 fldbuf[4] = fmt5->PREFIX_128; 1126 } else if (field == ASSOC_DATAf) { 1127 fldbuf[0] = fmt5->ASSOC_DATA; 1128 } else if (field == ALPM2_DATAf) { 1129 fldbuf[0] = ((fmt5->ALPM2_DATA_8_39 & 0xffffff) << 8) | fmt5->ALPM2_DATA_0_7; 1130 fldbuf[1] = ((fmt5->ALPM2_DATA_40_55 & 0xffff) << 8) | ((fmt5->ALPM2_DATA_8_39 >> 24) & 0xff); 1131 } 1132 } 1133 break; 1134 case L3_DEFIP_ALPM_PIVOT_FMT6fmt: { 1135 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT6_t *fmt6 = (void *)entbuf; 1136 if (field == PREFIXf) { 1137 fldbuf[0] = fmt6->PREFIX; 1138 } else if (field == ASSOC_DATAf) { 1139 fldbuf[0] = ((fmt6->ASSOC_DATA_14_45 & 0x3ffff) << 14) | fmt6->ASSOC_DATA_0_13; 1140 fldbuf[1] = (fmt6->ASSOC_DATA_14_45 >> 18) & 0x3fff; 1141 } else if (field == ALPM2_DATAf) { 1142 fldbuf[0] = fmt6->ALPM2_DATA_0_31; 1143 fldbuf[1] = fmt6->ALPM2_DATA_32_55; 1144 } 1145 } 1146 break; 1147 case L3_DEFIP_ALPM_PIVOT_FMT7fmt: { 1148 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT7_t *fmt7 = (void *)entbuf; 1149 if (field == PREFIXf) { 1150 fldbuf[0] = fmt7->PREFIX_0_31; 1151 fldbuf[1] = fmt7->PREFIX_32_57; 1152 } else if (field == ASSOC_DATAf) { 1153 fldbuf[0] = ((fmt7->ASSOC_DATA_6_37 & 0x3ffffff) << 6) | fmt7->ASSOC_DATA_0_5; 1154 fldbuf[1] = (fmt7->ASSOC_DATA_6_37 >> 26) & 0x3f; 1155 } else if (field == ALPM2_DATAf) { 1156 fldbuf[0] = ((fmt7->ALPM2_DATA_24_55 & 0xff) << 24) | fmt7->ALPM2_DATA_0_23; 1157 fldbuf[1] = (fmt7->ALPM2_DATA_24_55 >> 8) & 0xffffff; 1158 } 1159 } 1160 break; 1161 case L3_DEFIP_ALPM_PIVOT_FMT8fmt: { 1162 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT8_t *fmt8 = (void *)entbuf; 1163 if (field == PREFIXf) { 1164 fldbuf[0] = fmt8->PREFIX_0_31; 1165 fldbuf[1] = fmt8->PREFIX_32_63; 1166 fldbuf[2] = fmt8->PREFIX_64_95; 1167 fldbuf[3] = fmt8->PREFIX_96_127; 1168 fldbuf[4] = fmt8->PREFIX_128; 1169 } else if (field == ASSOC_DATAf) { 1170 fldbuf[0] = ((fmt8->ASSOC_DATA_30_45 & 0x3) << 30) | fmt8->ASSOC_DATA_0_29; 1171 fldbuf[1] = (fmt8->ASSOC_DATA_30_45 >> 2) & 0x3fff; 1172 } else if (field == ALPM2_DATAf) { 1173 fldbuf[0] = ((fmt8->ALPM2_DATA_16_47 & 0xffff) << 16) | fmt8->ALPM2_DATA_0_15; 1174 fldbuf[1] = ((fmt8->ALPM2_DATA_48_55 & 0xff) << 16) | ((fmt8->ALPM2_DATA_16_47 >> 16) & 0xffff); 1175 } 1176 } 1177 break; 1178 1179 /* ROUTE format */ 1180 case L3_DEFIP_ALPM_ROUTE_FMT1fmt: { 1181 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT1_t *fmt1 = (void *)entbuf; 1182 if (field == PREFIXf) { 1183 fldbuf[0] = fmt1->PREFIX; 1184 } else if (field == ASSOC_DATAf) { 1185 fldbuf[0] = fmt1->ASSOC_DATA; 1186 } 1187 } 1188 break; 1189 case L3_DEFIP_ALPM_ROUTE_FMT2fmt: { 1190 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT2_t *fmt2 = (void *)entbuf; 1191 if (field == PREFIXf) { 1192 fldbuf[0] = fmt2->PREFIX; 1193 } else if (field == ASSOC_DATAf) { 1194 fldbuf[0] = ((fmt2->ASSOC_DATA_8_15 & 0xff) << 8) | fmt2->ASSOC_DATA_0_7; 1195 } 1196 } 1197 break; 1198 case L3_DEFIP_ALPM_ROUTE_FMT3fmt: { 1199 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT3_t *fmt3 = (void *)entbuf; 1200 if (field == PREFIXf) { 1201 fldbuf[0] = fmt3->PREFIX; 1202 } else if (field == ASSOC_DATAf) { 1203 fldbuf[0] = fmt3->ASSOC_DATA; 1204 } 1205 } 1206 break; 1207 case L3_DEFIP_ALPM_ROUTE_FMT4fmt: { 1208 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT4_t *fmt4 = (void *)entbuf; 1209 if (field == PREFIXf) { 1210 fmt4->PREFIX_0_31 = fldbuf[0]; 1211 fmt4->PREFIX_32_39 = fldbuf[1] & 0xff; 1212 } else if (field == ASSOC_DATAf) { 1213 fmt4->ASSOC_DATA = fldbuf[0]; 1214 } 1215 } 1216 break; 1217 case L3_DEFIP_ALPM_ROUTE_FMT5fmt: { 1218 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT5_t *fmt5 = (void *)entbuf; 1219 if (field == PREFIXf) { 1220 fldbuf[0] = fmt5->PREFIX_0_31; 1221 fldbuf[1] = fmt5->PREFIX_32_47; 1222 } else if (field == ASSOC_DATAf) { 1223 fldbuf[0] = fmt5->ASSOC_DATA; 1224 } 1225 } 1226 break; 1227 case L3_DEFIP_ALPM_ROUTE_FMT6fmt: { 1228 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT6_t *fmt6 = (void *)entbuf; 1229 if (field == PREFIXf) { 1230 fldbuf[0] = fmt6->PREFIX_0_31; 1231 fldbuf[1] = fmt6->PREFIX_32_63; 1232 } else if (field == ASSOC_DATAf) { 1233 fldbuf[0] = fmt6->ASSOC_DATA; 1234 } 1235 } 1236 break; 1237 case L3_DEFIP_ALPM_ROUTE_FMT7fmt: { 1238 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT7_t *fmt7 = (void *)entbuf; 1239 if (field == PREFIXf) { 1240 fldbuf[0] = fmt7->PREFIX_0_31; 1241 fldbuf[1] = fmt7->PREFIX_32_63; 1242 fldbuf[2] = fmt7->PREFIX_64_79; 1243 } else if (field == ASSOC_DATAf) { 1244 fldbuf[0] = fmt7->ASSOC_DATA; 1245 } 1246 } 1247 break; 1248 case L3_DEFIP_ALPM_ROUTE_FMT8fmt: { 1249 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT8_t *fmt8 = (void *)entbuf; 1250 if (field == PREFIXf) { 1251 fldbuf[0] = fmt8->PREFIX_0_31; 1252 fldbuf[1] = fmt8->PREFIX_32_63; 1253 fldbuf[2] = fmt8->PREFIX_64_95; 1254 fldbuf[3] = fmt8->PREFIX_96_103; 1255 } else if (field == ASSOC_DATAf) { 1256 fldbuf[0] = fmt8->ASSOC_DATA; 1257 } 1258 } 1259 break; 1260 case L3_DEFIP_ALPM_ROUTE_FMT9fmt: { 1261 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT9_t *fmt9 = (void *)entbuf; 1262 if (field == PREFIXf) { 1263 fldbuf[0] = fmt9->PREFIX_0_31; 1264 fldbuf[1] = fmt9->PREFIX_32_63; 1265 fldbuf[2] = fmt9->PREFIX_64_95; 1266 fldbuf[3] = fmt9->PREFIX_96_127; 1267 fldbuf[4] = fmt9->PREFIX_128; 1268 } else if (field == ASSOC_DATAf) { 1269 fldbuf[0] = fmt9->ASSOC_DATA; 1270 } 1271 } 1272 break; 1273 case L3_DEFIP_ALPM_ROUTE_FMT10fmt: { 1274 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT10_t *fmt10 = (void *)entbuf; 1275 if (field == PREFIXf) { 1276 fldbuf[0] = fmt10->PREFIX_0_31; 1277 fldbuf[1] = fmt10->PREFIX_32_33; 1278 } else if (field == ASSOC_DATAf) { 1279 fldbuf[0] = ((fmt10->ASSOC_DATA_30_45 & 0x3) << 30) | fmt10->ASSOC_DATA_0_29; 1280 fldbuf[1] = (fmt10->ASSOC_DATA_30_45 >> 2) & 0x3fff; 1281 } 1282 } 1283 break; 1284 case L3_DEFIP_ALPM_ROUTE_FMT11fmt: { 1285 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT11_t *fmt11 = (void *)entbuf; 1286 if (field == PREFIXf) { 1287 fldbuf[0] = fmt11->PREFIX_0_31; 1288 fldbuf[1] = fmt11->PREFIX_32_63; 1289 fldbuf[2] = fmt11->PREFIX_64_73; 1290 } else if (field == ASSOC_DATAf) { 1291 fldbuf[0] = ((fmt11->ASSOC_DATA_22_45 & 0x3ff) << 22) | fmt11->ASSOC_DATA_0_21; 1292 fldbuf[1] = (fmt11->ASSOC_DATA_22_45 >> 10) & 0x3fff; 1293 } 1294 } 1295 break; 1296 case L3_DEFIP_ALPM_ROUTE_FMT12fmt: { 1297 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT12_t *fmt12 = (void *)entbuf; 1298 if (field == PREFIXf) { 1299 fldbuf[0] = fmt12->PREFIX_0_31; 1300 fldbuf[1] = fmt12->PREFIX_32_63; 1301 fldbuf[2] = fmt12->PREFIX_64_95; 1302 fldbuf[3] = fmt12->PREFIX_96_127; 1303 fldbuf[4] = fmt12->PREFIX_128; 1304 } else if (field == ASSOC_DATAf) { 1305 fldbuf[0] = ((fmt12->ASSOC_DATA_30_45 & 0x3) << 30) | fmt12->ASSOC_DATA_0_29; 1306 fldbuf[1] = (fmt12->ASSOC_DATA_30_45 >> 2) & 0x3fff; 1307 } 1308 } 1309 break; 1310 1311 /* PIVOT FULL format */ 1312 case L3_DEFIP_ALPM_PIVOT_FMT1_FULLfmt: 1313 case L3_DEFIP_ALPM_ROUTE_FMT6_FULLfmt: 1314 case L3_DEFIP_ALPM_ROUTE_FMT10_FULLfmt: { 1315 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT1_FULL_t *fmt1pf = (void *)entbuf; 1316 if (field == ENTRY_0f) { 1317 fldbuf[0] = fmt1pf->ENTRY_0_0_31; 1318 fldbuf[1] = fmt1pf->ENTRY_0_32_63; 1319 fldbuf[2] = fmt1pf->ENTRY_0_64_79; 1320 } else if (field == ENTRY_1f) { 1321 fldbuf[0] = ((fmt1pf->ENTRY_1_16_47 & 0xffff) << 16) | fmt1pf->ENTRY_1_0_15; 1322 fldbuf[1] = ((fmt1pf->ENTRY_1_48_79 & 0xffff) << 16) | ((fmt1pf->ENTRY_1_16_47 >> 16) & 0xffff); 1323 fldbuf[2] = (fmt1pf->ENTRY_1_48_79 >> 16) & 0xffff; 1324 } else if (field == ENTRY_2f) { 1325 fldbuf[0] = fmt1pf->ENTRY_2_0_31; 1326 fldbuf[1] = fmt1pf->ENTRY_2_32_63; 1327 fldbuf[2] = fmt1pf->ENTRY_2_64_79; 1328 } else if (field == ENTRY_3f) { 1329 fldbuf[0] = ((fmt1pf->ENTRY_3_16_47 & 0xffff) << 16) | fmt1pf->ENTRY_3_0_15; 1330 fldbuf[1] = ((fmt1pf->ENTRY_3_48_79 & 0xffff) << 16) | ((fmt1pf->ENTRY_3_16_47 >> 16) & 0xffff); 1331 fldbuf[2] = (fmt1pf->ENTRY_3_48_79 >> 16) & 0xffff; 1332 } else if (field == ENTRY_4f) { 1333 fldbuf[0] = fmt1pf->ENTRY_4_0_31; 1334 fldbuf[1] = fmt1pf->ENTRY_4_32_63; 1335 fldbuf[2] = fmt1pf->ENTRY_4_64_79; 1336 } else if (field == ENTRY_5f) { 1337 fldbuf[0] = ((fmt1pf->ENTRY_5_16_47 & 0xffff) << 16) | fmt1pf->ENTRY_5_0_15; 1338 fldbuf[1] = ((fmt1pf->ENTRY_5_48_79 & 0xffff) << 16) | ((fmt1pf->ENTRY_5_16_47 >> 16) & 0xffff); 1339 fldbuf[2] = (fmt1pf->ENTRY_5_48_79 >> 16) & 0xffff; 1340 } 1341 } 1342 break; 1343 1344 case L3_DEFIP_ALPM_PIVOT_FMT2_FULLfmt: 1345 case L3_DEFIP_ALPM_ROUTE_FMT7_FULLfmt: { 1346 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT2_FULL_t *fmt2pf = (void *)entbuf; 1347 if (field == ENTRY_0f) { 1348 fldbuf[0] = fmt2pf->ENTRY_0_0_31; 1349 fldbuf[1] = fmt2pf->ENTRY_0_32_63; 1350 fldbuf[2] = fmt2pf->ENTRY_0_64_95; 1351 } else if (field == ENTRY_1f) { 1352 fldbuf[0] = fmt2pf->ENTRY_1_0_31; 1353 fldbuf[1] = fmt2pf->ENTRY_1_32_63; 1354 fldbuf[2] = fmt2pf->ENTRY_1_64_95; 1355 } else if (field == ENTRY_2f) { 1356 fldbuf[0] = fmt2pf->ENTRY_2_0_31; 1357 fldbuf[1] = fmt2pf->ENTRY_2_32_63; 1358 fldbuf[2] = fmt2pf->ENTRY_2_64_95; 1359 } else if (field == ENTRY_3f) { 1360 fldbuf[0] = fmt2pf->ENTRY_3_0_31; 1361 fldbuf[1] = fmt2pf->ENTRY_3_32_63; 1362 fldbuf[2] = fmt2pf->ENTRY_3_64_95; 1363 } else if (field == ENTRY_4f) { 1364 fldbuf[0] = fmt2pf->ENTRY_4_0_31; 1365 fldbuf[1] = fmt2pf->ENTRY_4_32_63; 1366 fldbuf[2] = fmt2pf->ENTRY_4_64_95; 1367 } 1368 } 1369 break; 1370 1371 case L3_DEFIP_ALPM_PIVOT_FMT3_FULLfmt: 1372 case L3_DEFIP_ALPM_PIVOT_FMT6_FULLfmt: 1373 case L3_DEFIP_ALPM_ROUTE_FMT8_FULLfmt: 1374 case L3_DEFIP_ALPM_ROUTE_FMT11_FULLfmt: { 1375 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT3_FULL_t *fmt3pf = (void *)entbuf; 1376 if (field == ENTRY_0f) { 1377 fldbuf[0] = fmt3pf->ENTRY_0_0_31; 1378 fldbuf[1] = fmt3pf->ENTRY_0_32_63; 1379 fldbuf[2] = fmt3pf->ENTRY_0_64_95; 1380 fldbuf[3] = fmt3pf->ENTRY_0_96_119; 1381 } else if (field == ENTRY_1f) { 1382 fldbuf[0] = ((fmt3pf->ENTRY_1_8_39 & 0xffffff) << 8) | fmt3pf->ENTRY_1_0_7; 1383 fldbuf[1] = ((fmt3pf->ENTRY_1_40_71 & 0xffffff) << 8) | ((fmt3pf->ENTRY_1_8_39 >> 24) & 0xff); 1384 fldbuf[2] = ((fmt3pf->ENTRY_1_72_103 & 0xffffff) << 8) | ((fmt3pf->ENTRY_1_40_71 >> 24) & 0xff); 1385 fldbuf[3] = (fmt3pf->ENTRY_1_104_119 << 8) | ((fmt3pf->ENTRY_1_72_103 >> 24) & 0xff); 1386 } else if (field == ENTRY_2f) { 1387 fldbuf[0] = ((fmt3pf->ENTRY_2_16_47 & 0xffff) << 16) | fmt3pf->ENTRY_2_0_15; 1388 fldbuf[1] = ((fmt3pf->ENTRY_2_48_79 & 0xffff) << 16) | ((fmt3pf->ENTRY_2_16_47 >> 16) & 0xffff); 1389 fldbuf[2] = ((fmt3pf->ENTRY_2_80_111 & 0xffff) << 16) | ((fmt3pf->ENTRY_2_48_79 >> 16) & 0xffff); 1390 fldbuf[3] = (fmt3pf->ENTRY_2_112_119 << 16) | ((fmt3pf->ENTRY_2_80_111 >> 16) & 0xffff); 1391 } else if (field == ENTRY_3f) { 1392 fldbuf[0] = ((fmt3pf->ENTRY_3_24_55 & 0xff) << 24) | fmt3pf->ENTRY_3_0_23; 1393 fldbuf[1] = ((fmt3pf->ENTRY_3_56_87 & 0xff) << 24) | ((fmt3pf->ENTRY_3_24_55 >> 8) & 0xffffff); 1394 fldbuf[2] = ((fmt3pf->ENTRY_3_88_119 & 0xff) << 24) | ((fmt3pf->ENTRY_3_56_87 >> 8) & 0xffffff); 1395 fldbuf[3] = (fmt3pf->ENTRY_3_88_119 >> 8) & 0xffffff; 1396 } 1397 } 1398 break; 1399 1400 case L3_DEFIP_ALPM_PIVOT_FMT4_FULLfmt: 1401 case L3_DEFIP_ALPM_PIVOT_FMT7_FULLfmt: { 1402 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT4_FULL_t *fmt4pf = (void *)entbuf; 1403 if (field == ENTRY_0f) { 1404 fldbuf[0] = fmt4pf->ENTRY_0_0_31; 1405 fldbuf[1] = fmt4pf->ENTRY_0_32_63; 1406 fldbuf[2] = fmt4pf->ENTRY_0_64_95; 1407 fldbuf[3] = fmt4pf->ENTRY_0_96_127; 1408 fldbuf[4] = fmt4pf->ENTRY_0_128_159; 1409 } else if (field == ENTRY_1f) { 1410 fldbuf[0] = fmt4pf->ENTRY_1_0_31; 1411 fldbuf[1] = fmt4pf->ENTRY_1_32_63; 1412 fldbuf[2] = fmt4pf->ENTRY_1_64_95; 1413 fldbuf[3] = fmt4pf->ENTRY_1_96_127; 1414 fldbuf[4] = fmt4pf->ENTRY_1_128_159; 1415 } else if (field == ENTRY_2f) { 1416 fldbuf[0] = fmt4pf->ENTRY_2_0_31; 1417 fldbuf[1] = fmt4pf->ENTRY_2_32_63; 1418 fldbuf[2] = fmt4pf->ENTRY_2_64_95; 1419 fldbuf[3] = fmt4pf->ENTRY_2_96_127; 1420 fldbuf[4] = fmt4pf->ENTRY_2_128_159; 1421 } 1422 } 1423 break; 1424 1425 case L3_DEFIP_ALPM_PIVOT_FMT5_FULLfmt: { 1426 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT5_FULL_t *fmt5pf = (void *)entbuf; 1427 if (field == ENTRY_0f) { 1428 fldbuf[0] = fmt5pf->ENTRY_0_0_31; 1429 fldbuf[1] = fmt5pf->ENTRY_0_32_63; 1430 fldbuf[2] = fmt5pf->ENTRY_0_64_95; 1431 fldbuf[3] = fmt5pf->ENTRY_0_96_127; 1432 fldbuf[4] = fmt5pf->ENTRY_0_128_159; 1433 fldbuf[5] = fmt5pf->ENTRY_0_160_191; 1434 fldbuf[6] = fmt5pf->ENTRY_0_192_207; 1435 } else if (field == ENTRY_1f) { 1436 fldbuf[0] = ((fmt5pf->ENTRY_1_16_47 & 0xffff) >> 16) | fmt5pf->ENTRY_1_0_15; 1437 fldbuf[1] = ((fmt5pf->ENTRY_1_48_79 & 0xffff) >> 16) | ((fmt5pf->ENTRY_1_16_47 >> 16) & 0xffff); 1438 fldbuf[2] = ((fmt5pf->ENTRY_1_80_111 & 0xffff) >> 16) | ((fmt5pf->ENTRY_1_48_79 >> 16) & 0xffff); 1439 fldbuf[3] = ((fmt5pf->ENTRY_1_112_143 & 0xffff) >> 16) | ((fmt5pf->ENTRY_1_80_111 >> 16) & 0xffff); 1440 fldbuf[4] = ((fmt5pf->ENTRY_1_144_175 & 0xffff) >> 16) | ((fmt5pf->ENTRY_1_112_143 >> 16) & 0xffff); 1441 fldbuf[5] = ((fmt5pf->ENTRY_1_176_207 & 0xffff) >> 16) | ((fmt5pf->ENTRY_1_144_175 >> 16) & 0xffff); 1442 fldbuf[6] = (fmt5pf->ENTRY_1_176_207 >> 16) & 0xffff; 1443 } 1444 } 1445 break; 1446 1447 case L3_DEFIP_ALPM_PIVOT_FMT8_FULLfmt: { 1448 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT8_FULL_t *fmt8pf = (void *)entbuf; 1449 if (field == ENTRY_0f) { 1450 fldbuf[0] = fmt8pf->ENTRY_0_0_31; 1451 fldbuf[1] = fmt8pf->ENTRY_0_32_63; 1452 fldbuf[2] = fmt8pf->ENTRY_0_64_95; 1453 fldbuf[3] = fmt8pf->ENTRY_0_96_127; 1454 fldbuf[4] = fmt8pf->ENTRY_0_128_159; 1455 fldbuf[5] = fmt8pf->ENTRY_0_160_191; 1456 fldbuf[6] = fmt8pf->ENTRY_0_192_223; 1457 fldbuf[7] = fmt8pf->ENTRY_0_224_231; 1458 } else if (field == ENTRY_1f) { 1459 fldbuf[0] = ((fmt8pf->ENTRY_1_24_55 & 0xff) << 24) | fmt8pf->ENTRY_1_0_23; 1460 fldbuf[1] = ((fmt8pf->ENTRY_1_56_87 & 0xff) << 24) | ((fmt8pf->ENTRY_1_24_55 >> 8) & 0xffffff); 1461 fldbuf[2] = ((fmt8pf->ENTRY_1_88_119 & 0xff) << 24) | ((fmt8pf->ENTRY_1_56_87 >> 8) & 0xffffff); 1462 fldbuf[3] = ((fmt8pf->ENTRY_1_120_151 & 0xff) << 24) | ((fmt8pf->ENTRY_1_88_119 >> 8) & 0xffffff); 1463 fldbuf[4] = ((fmt8pf->ENTRY_1_152_183 & 0xff) << 24) | ((fmt8pf->ENTRY_1_120_151 >> 8) & 0xffffff); 1464 fldbuf[5] = ((fmt8pf->ENTRY_1_184_215 & 0xff) << 24) | ((fmt8pf->ENTRY_1_152_183 >> 8) & 0xffffff); 1465 fldbuf[6] = ((fmt8pf->ENTRY_1_216_231 & 0xff) << 24) | ((fmt8pf->ENTRY_1_184_215 >> 8) & 0xffffff); 1466 fldbuf[7] = (fmt8pf->ENTRY_1_216_231 >> 8) & 0xff; 1467 } 1468 } 1469 break; 1470 1471 /* ROUTE FULL fmt */ 1472 case L3_DEFIP_ALPM_ROUTE_FMT1_FULLfmt: { 1473 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT1_FULL_t *fmt1rf = (void *)entbuf; 1474 if (field == ENTRY_0f) { 1475 fldbuf[0] = fmt1rf->ENTRY_0; 1476 } else if (field == ENTRY_1f) { 1477 fldbuf[0] = fmt1rf->ENTRY_1; 1478 } else if (field == ENTRY_2f) { 1479 fldbuf[0] = fmt1rf->ENTRY_2; 1480 } else if (field == ENTRY_3f) { 1481 fldbuf[0] = fmt1rf->ENTRY_3; 1482 } else if (field == ENTRY_4f) { 1483 fldbuf[0] = fmt1rf->ENTRY_4; 1484 } else if (field == ENTRY_5f) { 1485 fldbuf[0] = fmt1rf->ENTRY_5; 1486 } else if (field == ENTRY_6f) { 1487 fldbuf[0] = fmt1rf->ENTRY_6; 1488 } else if (field == ENTRY_7f) { 1489 fldbuf[0] = fmt1rf->ENTRY_7; 1490 } else if (field == ENTRY_8f) { 1491 fldbuf[0] = fmt1rf->ENTRY_8; 1492 } else if (field == ENTRY_9f) { 1493 fldbuf[0] = fmt1rf->ENTRY_9; 1494 } else if (field == ENTRY_10f) { 1495 fldbuf[0] = fmt1rf->ENTRY_10; 1496 } else if (field == ENTRY_11f) { 1497 fldbuf[0] = fmt1rf->ENTRY_11; 1498 } else if (field == ENTRY_12f) { 1499 fldbuf[0] = fmt1rf->ENTRY_12; 1500 } else if (field == ENTRY_13f) { 1501 fldbuf[0] = fmt1rf->ENTRY_13; 1502 } else if (field == ENTRY_14f) { 1503 fldbuf[0] = fmt1rf->ENTRY_14; 1504 } 1505 } 1506 break; 1507 1508 case L3_DEFIP_ALPM_ROUTE_FMT2_FULLfmt: { 1509 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT2_FULL_t *fmt2rf = (void *)entbuf; 1510 if (field == ENTRY_0f) { 1511 fldbuf[0] = fmt2rf->ENTRY_0_0_31; 1512 fldbuf[1] = fmt2rf->ENTRY_0_32_39; 1513 } else if (field == ENTRY_1f) { 1514 fldbuf[0] = ((fmt2rf->ENTRY_1_24_39 & 0xff) << 24) | fmt2rf->ENTRY_1_0_23; 1515 fldbuf[1] = (fmt2rf->ENTRY_1_24_39 >> 8) & 0xff; 1516 } else if (field == ENTRY_2f) { 1517 fldbuf[0] = ((fmt2rf->ENTRY_2_16_39 & 0xffff) << 16) | fmt2rf->ENTRY_2_0_15; 1518 fldbuf[1] = (fmt2rf->ENTRY_2_16_39 >> 16) & 0xff; 1519 } else if (field == ENTRY_3f) { 1520 fldbuf[0] = ((fmt2rf->ENTRY_3_8_39 & 0xffffff) << 8) | fmt2rf->ENTRY_3_0_7; 1521 fldbuf[1] = (fmt2rf->ENTRY_3_8_39 >> 24) & 0xff; 1522 } else if (field == ENTRY_4f) { 1523 fldbuf[0] = fmt2rf->ENTRY_4_0_31; 1524 fldbuf[1] = fmt2rf->ENTRY_4_32_39; 1525 } else if (field == ENTRY_5f) { 1526 fldbuf[0] = ((fmt2rf->ENTRY_5_24_39 & 0xff) << 24) | fmt2rf->ENTRY_5_0_23; 1527 fldbuf[1] = (fmt2rf->ENTRY_5_24_39 >> 8) & 0xff; 1528 } else if (field == ENTRY_6f) { 1529 fldbuf[0] = ((fmt2rf->ENTRY_6_16_39 & 0xffff) << 16) | fmt2rf->ENTRY_6_0_15; 1530 fldbuf[1] = (fmt2rf->ENTRY_6_16_39 >> 16) & 0xff; 1531 } else if (field == ENTRY_7f) { 1532 fldbuf[0] = ((fmt2rf->ENTRY_7_8_39 & 0xffffff) << 8) | fmt2rf->ENTRY_7_0_7; 1533 fldbuf[1] = (fmt2rf->ENTRY_7_8_39 >> 24) & 0xff; 1534 } else if (field == ENTRY_8f) { 1535 fldbuf[0] = fmt2rf->ENTRY_8_0_31; 1536 fldbuf[1] = fmt2rf->ENTRY_8_32_39; 1537 } else if (field == ENTRY_9f) { 1538 fldbuf[0] = ((fmt2rf->ENTRY_9_24_39 & 0xff) << 24) | fmt2rf->ENTRY_9_0_23; 1539 fldbuf[1] = (fmt2rf->ENTRY_9_24_39 >> 8) & 0xff; 1540 } else if (field == ENTRY_10f) { 1541 fldbuf[0] = ((fmt2rf->ENTRY_10_16_39 & 0xffff) << 16) | fmt2rf->ENTRY_10_0_15; 1542 fldbuf[1] = (fmt2rf->ENTRY_10_16_39 >> 16) & 0xff; 1543 } else if (field == ENTRY_11f) { 1544 fldbuf[0] = ((fmt2rf->ENTRY_11_8_39 & 0xffffff) << 8) | fmt2rf->ENTRY_11_0_7; 1545 fldbuf[1] = (fmt2rf->ENTRY_11_8_39 >> 24) & 0xff; 1546 } 1547 } 1548 break; 1549 1550 case L3_DEFIP_ALPM_ROUTE_FMT3_FULLfmt: { 1551 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT3_FULL_t *fmt3rf = (void *)entbuf; 1552 if (field == ENTRY_0f) { 1553 fldbuf[0] = fmt3rf->ENTRY_0_0_31; 1554 fldbuf[1] = fmt3rf->ENTRY_0_32_47; 1555 } else if (field == ENTRY_1f) { 1556 fldbuf[0] = ((fmt3rf->ENTRY_1_16_47 & 0xffff) << 16) | ((fmt3rf->ENTRY_1_0_15 >> 16) & 0xffff); 1557 fldbuf[1] = (fmt3rf->ENTRY_1_16_47 >> 16) & 0xffff; 1558 } else if (field == ENTRY_2f) { 1559 fldbuf[0] = fmt3rf->ENTRY_2_0_31; 1560 fldbuf[1] = fmt3rf->ENTRY_2_32_47; 1561 } else if (field == ENTRY_3f) { 1562 fldbuf[0] = ((fmt3rf->ENTRY_3_16_47 & 0xffff) << 16) | ((fmt3rf->ENTRY_3_0_15 >> 16) & 0xffff); 1563 fldbuf[1] = (fmt3rf->ENTRY_3_16_47 >> 16) & 0xffff; 1564 } else if (field == ENTRY_4f) { 1565 fldbuf[0] = fmt3rf->ENTRY_4_0_31; 1566 fldbuf[1] = fmt3rf->ENTRY_4_32_47; 1567 } else if (field == ENTRY_5f) { 1568 fldbuf[0] = ((fmt3rf->ENTRY_5_16_47 & 0xffff) << 16) | ((fmt3rf->ENTRY_5_0_15 >> 16) & 0xffff); 1569 fldbuf[1] = (fmt3rf->ENTRY_5_16_47 >> 16) & 0xffff; 1570 } else if (field == ENTRY_6f) { 1571 fldbuf[0] = fmt3rf->ENTRY_6_0_31; 1572 fldbuf[1] = fmt3rf->ENTRY_6_32_47; 1573 } else if (field == ENTRY_7f) { 1574 fldbuf[0] = ((fmt3rf->ENTRY_7_16_47 & 0xffff) << 16) | ((fmt3rf->ENTRY_7_0_15 >> 16) & 0xffff); 1575 fldbuf[1] = (fmt3rf->ENTRY_7_16_47 >> 16) & 0xffff; 1576 } else if (field == ENTRY_8f) { 1577 fldbuf[0] = fmt3rf->ENTRY_8_0_31; 1578 fldbuf[1] = fmt3rf->ENTRY_8_32_47; 1579 } else if (field == ENTRY_9f) { 1580 fldbuf[0] = ((fmt3rf->ENTRY_9_16_47 & 0xffff) << 16) | ((fmt3rf->ENTRY_9_0_15 >> 16) & 0xffff); 1581 fldbuf[1] = (fmt3rf->ENTRY_9_16_47 >> 16) & 0xffff; 1582 } 1583 } 1584 break; 1585 1586 case L3_DEFIP_ALPM_ROUTE_FMT4_FULLfmt: { 1587 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT4_FULL_t *fmt4rf = (void *)entbuf; 1588 if (field == ENTRY_0f) { 1589 fldbuf[0] = fmt4rf->ENTRY_0_0_31; 1590 fldbuf[1] = fmt4rf->ENTRY_0_32_55; 1591 } else if (field == ENTRY_1f) { 1592 fldbuf[0] = ((fmt4rf->ENTRY_1_8_39 & 0xffffff) << 8) | fmt4rf->ENTRY_1_0_7; 1593 fldbuf[1] = (fmt4rf->ENTRY_1_40_55 << 8) | ((fmt4rf->ENTRY_1_8_39 >> 24) & 0xff); 1594 } else if (field == ENTRY_2f) { 1595 fldbuf[0] = ((fmt4rf->ENTRY_2_16_47 & 0xffff) << 16) | fmt4rf->ENTRY_2_0_15; 1596 fldbuf[1] = (fmt4rf->ENTRY_2_48_55 << 16) | ((fmt4rf->ENTRY_2_16_47 >> 16) & 0xffff); 1597 } else if (field == ENTRY_3f) { 1598 fldbuf[0] = ((fmt4rf->ENTRY_3_24_55 & 0xff) << 24) | fmt4rf->ENTRY_3_0_23; 1599 fldbuf[1] = (fmt4rf->ENTRY_3_24_55 >> 8) & 0xffffff; 1600 } else if (field == ENTRY_4f) { 1601 fldbuf[0] = fmt4rf->ENTRY_4_0_31; 1602 fldbuf[1] = fmt4rf->ENTRY_4_32_55; 1603 } else if (field == ENTRY_5f) { 1604 fldbuf[0] = ((fmt4rf->ENTRY_5_8_39 & 0xffffff) << 8) | fmt4rf->ENTRY_5_0_7; 1605 fldbuf[1] = (fmt4rf->ENTRY_5_40_55 << 8) | ((fmt4rf->ENTRY_5_8_39 >> 24) & 0xff); 1606 } else if (field == ENTRY_6f) { 1607 fldbuf[0] = ((fmt4rf->ENTRY_6_16_47 & 0xffff) << 16) | fmt4rf->ENTRY_6_0_15; 1608 fldbuf[1] = (fmt4rf->ENTRY_6_48_55 << 16) | ((fmt4rf->ENTRY_6_16_47 >> 16) & 0xffff); 1609 } else if (field == ENTRY_7f) { 1610 fldbuf[0] = ((fmt4rf->ENTRY_7_24_55 & 0xff) << 24) | fmt4rf->ENTRY_7_0_23; 1611 fldbuf[1] = (fmt4rf->ENTRY_7_24_55 >> 8) & 0xffffff; 1612 } 1613 } 1614 break; 1615 1616 case L3_DEFIP_ALPM_ROUTE_FMT5_FULLfmt: { 1617 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT5_FULL_t *fmt5rf = (void *)entbuf; 1618 if (field == ENTRY_0f) { 1619 fldbuf[0] = fmt5rf->ENTRY_0_0_31; 1620 fldbuf[1] = fmt5rf->ENTRY_0_32_63; 1621 } else if (field == ENTRY_1f) { 1622 fldbuf[0] = fmt5rf->ENTRY_1_0_31; 1623 fldbuf[1] = fmt5rf->ENTRY_1_32_63; 1624 } else if (field == ENTRY_2f) { 1625 fldbuf[0] = fmt5rf->ENTRY_2_0_31; 1626 fldbuf[1] = fmt5rf->ENTRY_2_32_63; 1627 } else if (field == ENTRY_3f) { 1628 fldbuf[0] = fmt5rf->ENTRY_3_0_31; 1629 fldbuf[1] = fmt5rf->ENTRY_3_32_63; 1630 } else if (field == ENTRY_4f) { 1631 fldbuf[0] = fmt5rf->ENTRY_4_0_31; 1632 fldbuf[1] = fmt5rf->ENTRY_4_32_63; 1633 } else if (field == ENTRY_5f) { 1634 fldbuf[0] = fmt5rf->ENTRY_5_0_31; 1635 fldbuf[1] = fmt5rf->ENTRY_5_32_63; 1636 } else if (field == ENTRY_6f) { 1637 fldbuf[0] = fmt5rf->ENTRY_6_0_31; 1638 fldbuf[1] = fmt5rf->ENTRY_6_32_63; 1639 } 1640 } 1641 break; 1642 1643 case L3_DEFIP_ALPM_ROUTE_FMT9_FULLfmt: { 1644 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT9_FULL_t *fmt9rf = (void *)entbuf; 1645 if (field == ENTRY_0f) { 1646 fldbuf[0] = fmt9rf->ENTRY_0_0_31; 1647 fldbuf[1] = fmt9rf->ENTRY_0_32_63; 1648 fldbuf[2] = fmt9rf->ENTRY_0_64_95; 1649 fldbuf[3] = fmt9rf->ENTRY_0_96_127; 1650 fldbuf[4] = fmt9rf->ENTRY_0_128_151; 1651 } else if (field == ENTRY_1f) { 1652 fldbuf[0] = ((fmt9rf->ENTRY_1_8_39 & 0xffffff) << 8) | fmt9rf->ENTRY_1_0_7; 1653 fldbuf[1] = ((fmt9rf->ENTRY_1_40_71 & 0xffffff) << 8) | ((fmt9rf->ENTRY_1_8_39 << 24) & 0xff); 1654 fldbuf[2] = ((fmt9rf->ENTRY_1_72_103 & 0xffffff) << 8) | ((fmt9rf->ENTRY_1_40_71 << 24) & 0xff); 1655 fldbuf[3] = ((fmt9rf->ENTRY_1_104_135 & 0xffffff) << 8) | ((fmt9rf->ENTRY_1_72_103 << 24) & 0xff); 1656 fldbuf[4] = (fmt9rf->ENTRY_1_136_151 << 8) | ((fmt9rf->ENTRY_1_104_135 << 24) & 0xff); 1657 } else if (field == ENTRY_2f) { 1658 fldbuf[0] = ((fmt9rf->ENTRY_2_16_47 & 0xffff) << 16) | fmt9rf->ENTRY_2_0_15; 1659 fldbuf[1] = ((fmt9rf->ENTRY_2_48_79 & 0xffff) << 16) | ((fmt9rf->ENTRY_2_16_47 << 16) & 0xffff); 1660 fldbuf[2] = ((fmt9rf->ENTRY_2_80_111 & 0xffff) << 16) | ((fmt9rf->ENTRY_2_48_79 << 16) & 0xffff); 1661 fldbuf[3] = ((fmt9rf->ENTRY_2_112_143 & 0xffff) << 16) | ((fmt9rf->ENTRY_2_80_111 << 16) & 0xffff); 1662 fldbuf[4] = (fmt9rf->ENTRY_2_144_151 << 16) | ((fmt9rf->ENTRY_2_112_143 << 16) & 0xffff); 1663 } 1664 } 1665 break; 1666 1667 case L3_DEFIP_ALPM_ROUTE_FMT12_FULLfmt: { 1668 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT12_FULL_t *fmt12rf = (void *)entbuf; 1669 if (field == ENTRY_0f) { 1670 fldbuf[0] = fmt12rf->ENTRY_0_0_31; 1671 fldbuf[1] = fmt12rf->ENTRY_0_32_63; 1672 fldbuf[2] = fmt12rf->ENTRY_0_64_95; 1673 fldbuf[3] = fmt12rf->ENTRY_0_96_127; 1674 fldbuf[4] = fmt12rf->ENTRY_0_128_159; 1675 fldbuf[5] = fmt12rf->ENTRY_0_160_175; 1676 } else if (field == ENTRY_1f) { 1677 fldbuf[0] = ((fmt12rf->ENTRY_1_16_47 & 0xffff) >> 16) | fmt12rf->ENTRY_1_0_15; 1678 fldbuf[1] = ((fmt12rf->ENTRY_1_48_79 & 0xffff) >> 16) | ((fmt12rf->ENTRY_1_16_47 >> 16) & 0xffff); 1679 fldbuf[2] = ((fmt12rf->ENTRY_1_80_111 & 0xffff) >> 16) | ((fmt12rf->ENTRY_1_48_79 >> 16) & 0xffff); 1680 fldbuf[3] = ((fmt12rf->ENTRY_1_112_143 & 0xffff) >> 16) | ((fmt12rf->ENTRY_1_80_111 >> 16) & 0xffff); 1681 fldbuf[4] = ((fmt12rf->ENTRY_1_144_175 & 0xffff) >> 16) | ((fmt12rf->ENTRY_1_112_143 >> 16) & 0xffff); 1682 fldbuf[5] = (fmt12rf->ENTRY_1_144_175 >> 16) & 0xffff; 1683 } 1684 } 1685 break; 1686 1687 default: 1688 assert(0); 1689 break; 1690 } 1691 } 1692 1693 static void 1694 th3_format_field_set(int u, soc_format_t format, uint32 *entbuf, soc_field_t field, uint32 *fldbuf) 1695 { 1696 switch (format) { 1697 /* PIVOT format */ 1698 case L3_DEFIP_ALPM_PIVOT_FMT1fmt: { 1699 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT1_t *fmt1 = (void *)entbuf; 1700 if (field == PREFIXf) { 1701 fmt1->PREFIX = fldbuf[0]; 1702 } else if (field == ASSOC_DATAf) { 1703 fmt1->ASSOC_DATA = fldbuf[0]; 1704 } else if (field == ALPM2_DATAf) { 1705 fmt1->ALPM2_DATA_0_7 = fldbuf[0] & 0xff; 1706 fmt1->ALPM2_DATA_8_39 = ((fldbuf[1] & 0xff) << 24) | ((fldbuf[0] >> 8) & 0xffffff); 1707 fmt1->ALPM2_DATA_40_55 = (fldbuf[1] >> 8) & 0xffff; 1708 } 1709 } 1710 break; 1711 case L3_DEFIP_ALPM_PIVOT_FMT2fmt: { 1712 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT2_t *fmt2 = (void *)entbuf; 1713 if (field == PREFIXf) { 1714 fmt2->PREFIX = fldbuf[0]; 1715 } else if (field == ASSOC_DATAf) { 1716 fmt2->ASSOC_DATA_0_7 = fldbuf[0] & 0xff; 1717 fmt2->ASSOC_DATA_8_15 = (fldbuf[0] >> 8) & 0xff; 1718 } else if (field == ALPM2_DATAf) { 1719 fmt2->ALPM2_DATA_0_23 = fldbuf[0] & 0xffffff; 1720 fmt2->ALPM2_DATA_24_55 = ((fldbuf[1] & 0xffffff) << 8) | ((fldbuf[0] >> 24) & 0xff); 1721 } 1722 } 1723 break; 1724 case L3_DEFIP_ALPM_PIVOT_FMT3fmt: { 1725 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT3_t *fmt3 = (void *)entbuf; 1726 if (field == PREFIXf) { 1727 fmt3->PREFIX_0_31 = fldbuf[0]; 1728 fmt3->PREFIX_32_47 = fldbuf[1] & 0xffff; 1729 } else if (field == ASSOC_DATAf) { 1730 fmt3->ASSOC_DATA = fldbuf[0]; 1731 } else if (field == ALPM2_DATAf) { 1732 fmt3->ALPM2_DATA_0_31 = fldbuf[0]; 1733 fmt3->ALPM2_DATA_32_55 = fldbuf[1] & 0xffffff; 1734 } 1735 } 1736 break; 1737 case L3_DEFIP_ALPM_PIVOT_FMT4fmt: { 1738 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT4_t *fmt4 = (void *)entbuf; 1739 if (field == PREFIXf) { 1740 fmt4->PREFIX_0_31 = fldbuf[0]; 1741 fmt4->PREFIX_32_63 = fldbuf[1]; 1742 fmt4->PREFIX_64_87 = fldbuf[2] & 0xffffff; 1743 } else if (field == ASSOC_DATAf) { 1744 fmt4->ASSOC_DATA_0_7 = fldbuf[0] & 0xff; 1745 fmt4->ASSOC_DATA_8_15 = (fldbuf[0] >> 8) & 0xff; 1746 } else if (field == ALPM2_DATAf) { 1747 fmt4->ALPM2_DATA_0_23 = fldbuf[0] & 0xffffff; 1748 fmt4->ALPM2_DATA_24_55 = ((fldbuf[1] & 0xffffff) << 8) | ((fldbuf[0] >> 24) & 0xff); 1749 } 1750 } 1751 break; 1752 case L3_DEFIP_ALPM_PIVOT_FMT5fmt: { 1753 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT5_t *fmt5 = (void *)entbuf; 1754 if (field == PREFIXf) { 1755 fmt5->PREFIX_0_31 = fldbuf[0]; 1756 fmt5->PREFIX_32_63 = fldbuf[1]; 1757 fmt5->PREFIX_64_95 = fldbuf[2]; 1758 fmt5->PREFIX_96_127 = fldbuf[3]; 1759 fmt5->PREFIX_128 = fldbuf[4] & 0x1; 1760 } else if (field == ASSOC_DATAf) { 1761 fmt5->ASSOC_DATA = fldbuf[0]; 1762 } else if (field == ALPM2_DATAf) { 1763 fmt5->ALPM2_DATA_0_7 = fldbuf[0] & 0xff; 1764 fmt5->ALPM2_DATA_8_39 = ((fldbuf[1] & 0xff) << 24) | ((fldbuf[0] >> 8) & 0xffffff); 1765 fmt5->ALPM2_DATA_40_55 = (fldbuf[1] >> 8) & 0xffff; 1766 } 1767 } 1768 break; 1769 case L3_DEFIP_ALPM_PIVOT_FMT6fmt: { 1770 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT6_t *fmt6 = (void *)entbuf; 1771 if (field == PREFIXf) { 1772 fmt6->PREFIX = fldbuf[0]; 1773 } else if (field == ASSOC_DATAf) { 1774 fmt6->ASSOC_DATA_0_13 = fldbuf[0] & 0x3fff; 1775 fmt6->ASSOC_DATA_14_45 = ((fldbuf[1] & 0x3fff) << 18) | ((fldbuf[0] >> 14) & 0x3ffff); 1776 } else if (field == ALPM2_DATAf) { 1777 fmt6->ALPM2_DATA_0_31 = fldbuf[0]; 1778 fmt6->ALPM2_DATA_32_55 = fldbuf[1] & 0xffffff; 1779 } 1780 } 1781 break; 1782 case L3_DEFIP_ALPM_PIVOT_FMT7fmt: { 1783 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT7_t *fmt7 = (void *)entbuf; 1784 if (field == PREFIXf) { 1785 fmt7->PREFIX_0_31 = fldbuf[0]; 1786 fmt7->PREFIX_32_57 = fldbuf[1] & 0xffffff; 1787 } else if (field == ASSOC_DATAf) { 1788 fmt7->ASSOC_DATA_0_5 = fldbuf[0] & 0x3f; 1789 fmt7->ASSOC_DATA_6_37 = ((fldbuf[1] & 0x3f) << 26) | ((fldbuf[0] >> 6) & 0x3ffffff); 1790 } else if (field == ALPM2_DATAf) { 1791 fmt7->ALPM2_DATA_0_23 = fldbuf[0] & 0xffffff; 1792 fmt7->ALPM2_DATA_24_55 = ((fldbuf[1] & 0xffffff) << 8) | ((fldbuf[0] >> 24) & 0xff); 1793 } 1794 } 1795 break; 1796 case L3_DEFIP_ALPM_PIVOT_FMT8fmt: { 1797 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT8_t *fmt8 = (void *)entbuf; 1798 if (field == PREFIXf) { 1799 fmt8->PREFIX_0_31 = fldbuf[0]; 1800 fmt8->PREFIX_32_63 = fldbuf[1]; 1801 fmt8->PREFIX_64_95 = fldbuf[2]; 1802 fmt8->PREFIX_96_127 = fldbuf[3]; 1803 fmt8->PREFIX_128 = fldbuf[4] & 0x1; 1804 } else if (field == ASSOC_DATAf) { 1805 fmt8->ASSOC_DATA_0_29 = fldbuf[0] & 0x3fffffff; 1806 fmt8->ASSOC_DATA_30_45 = ((fldbuf[1] & 0x3fff) << 2) | ((fldbuf[0] >> 30) & 0x3); 1807 } else if (field == ALPM2_DATAf) { 1808 fmt8->ALPM2_DATA_0_15 = fldbuf[0] & 0xffff; 1809 fmt8->ALPM2_DATA_16_47 = ((fldbuf[1] & 0xffff) << 16) | ((fldbuf[0] >> 16) & 0xffff); 1810 fmt8->ALPM2_DATA_48_55 = (fldbuf[1] >> 16) & 0xff; 1811 } 1812 } 1813 break; 1814 1815 /* ROUTE format */ 1816 case L3_DEFIP_ALPM_ROUTE_FMT1fmt: { 1817 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT1_t *fmt1 = (void *)entbuf; 1818 if (field == PREFIXf) { 1819 fmt1->PREFIX = fldbuf[0] & 0xffff; 1820 } else if (field == ASSOC_DATAf) { 1821 fmt1->ASSOC_DATA = fldbuf[0] & 0xffff; 1822 } 1823 } 1824 break; 1825 case L3_DEFIP_ALPM_ROUTE_FMT2fmt: { 1826 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT2_t *fmt2 = (void *)entbuf; 1827 if (field == PREFIXf) { 1828 fmt2->PREFIX = fldbuf[0] & 0xffffff; 1829 } else if (field == ASSOC_DATAf) { 1830 fmt2->ASSOC_DATA_0_7 = fldbuf[0] & 0xff; 1831 fmt2->ASSOC_DATA_8_15 = (fldbuf[0] >> 8) & 0xff; 1832 } 1833 } 1834 break; 1835 case L3_DEFIP_ALPM_ROUTE_FMT3fmt: { 1836 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT3_t *fmt3 = (void *)entbuf; 1837 if (field == PREFIXf) { 1838 fmt3->PREFIX = fldbuf[0]; 1839 } else if (field == ASSOC_DATAf) { 1840 fmt3->ASSOC_DATA = fldbuf[0] & 0xffff; 1841 } 1842 } 1843 break; 1844 case L3_DEFIP_ALPM_ROUTE_FMT4fmt: { 1845 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT4_t *fmt4 = (void *)entbuf; 1846 if (field == PREFIXf) { 1847 fmt4->PREFIX_0_31 = fldbuf[0]; 1848 fmt4->PREFIX_32_39 = fldbuf[1] & 0xff; 1849 } else if (field == ASSOC_DATAf) { 1850 fmt4->ASSOC_DATA = fldbuf[0] & 0xffff; 1851 } 1852 } 1853 break; 1854 case L3_DEFIP_ALPM_ROUTE_FMT5fmt: { 1855 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT5_t *fmt5 = (void *)entbuf; 1856 if (field == PREFIXf) { 1857 fmt5->PREFIX_0_31 = fldbuf[0]; 1858 fmt5->PREFIX_32_47 = fldbuf[1] & 0xffff; 1859 } else if (field == ASSOC_DATAf) { 1860 fmt5->ASSOC_DATA = fldbuf[0] & 0xffff; 1861 } 1862 } 1863 break; 1864 case L3_DEFIP_ALPM_ROUTE_FMT6fmt: { 1865 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT6_t *fmt6 = (void *)entbuf; 1866 if (field == PREFIXf) { 1867 fmt6->PREFIX_0_31 = fldbuf[0]; 1868 fmt6->PREFIX_32_63 = fldbuf[1]; 1869 } else if (field == ASSOC_DATAf) { 1870 fmt6->ASSOC_DATA = fldbuf[0] & 0xffff; 1871 } 1872 } 1873 break; 1874 case L3_DEFIP_ALPM_ROUTE_FMT7fmt: { 1875 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT7_t *fmt7 = (void *)entbuf; 1876 if (field == PREFIXf) { 1877 fmt7->PREFIX_0_31 = fldbuf[0]; 1878 fmt7->PREFIX_32_63 = fldbuf[1]; 1879 fmt7->PREFIX_64_79 = fldbuf[2] & 0xffff; 1880 } else if (field == ASSOC_DATAf) { 1881 fmt7->ASSOC_DATA = fldbuf[0] & 0xffff; 1882 } 1883 } 1884 break; 1885 case L3_DEFIP_ALPM_ROUTE_FMT8fmt: { 1886 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT8_t *fmt8 = (void *)entbuf; 1887 if (field == PREFIXf) { 1888 fmt8->PREFIX_0_31 = fldbuf[0]; 1889 fmt8->PREFIX_32_63 = fldbuf[1]; 1890 fmt8->PREFIX_64_95 = fldbuf[2]; 1891 fmt8->PREFIX_96_103 = fldbuf[3] & 0xff; 1892 } else if (field == ASSOC_DATAf) { 1893 fmt8->ASSOC_DATA = fldbuf[0] & 0xffff; 1894 } 1895 } 1896 break; 1897 case L3_DEFIP_ALPM_ROUTE_FMT9fmt: { 1898 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT9_t *fmt9 = (void *)entbuf; 1899 if (field == PREFIXf) { 1900 fmt9->PREFIX_0_31 = fldbuf[0]; 1901 fmt9->PREFIX_32_63 = fldbuf[1]; 1902 fmt9->PREFIX_64_95 = fldbuf[2]; 1903 fmt9->PREFIX_96_127 = fldbuf[3]; 1904 fmt9->PREFIX_128 = fldbuf[4] & 0x1; 1905 } else if (field == ASSOC_DATAf) { 1906 fmt9->ASSOC_DATA = fldbuf[0] & 0xffff; 1907 } 1908 } 1909 break; 1910 case L3_DEFIP_ALPM_ROUTE_FMT10fmt: { 1911 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT10_t *fmt10 = (void *)entbuf; 1912 if (field == PREFIXf) { 1913 fmt10->PREFIX_0_31 = fldbuf[0]; 1914 fmt10->PREFIX_32_33 = fldbuf[1] & 0x3; 1915 } else if (field == ASSOC_DATAf) { 1916 fmt10->ASSOC_DATA_0_29 = fldbuf[0] & 0x3fffffff; 1917 fmt10->ASSOC_DATA_30_45 = ((fldbuf[1] & 0x3fff) << 2) | ((fldbuf[0] >> 30) & 0x3); 1918 } 1919 } 1920 break; 1921 case L3_DEFIP_ALPM_ROUTE_FMT11fmt: { 1922 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT11_t *fmt11 = (void *)entbuf; 1923 if (field == PREFIXf) { 1924 fmt11->PREFIX_0_31 = fldbuf[0]; 1925 fmt11->PREFIX_32_63 = fldbuf[1]; 1926 fmt11->PREFIX_64_73 = fldbuf[2] & 0x3ff; 1927 } else if (field == ASSOC_DATAf) { 1928 fmt11->ASSOC_DATA_0_21 = fldbuf[0] & 0x3fffff; 1929 fmt11->ASSOC_DATA_22_45 = ((fldbuf[1] & 0x3fff) << 10) | ((fldbuf[0] >> 22) & 0x3ff); 1930 } 1931 } 1932 break; 1933 case L3_DEFIP_ALPM_ROUTE_FMT12fmt: { 1934 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT12_t *fmt12 = (void *)entbuf; 1935 if (field == PREFIXf) { 1936 fmt12->PREFIX_0_31 = fldbuf[0]; 1937 fmt12->PREFIX_32_63 = fldbuf[1]; 1938 fmt12->PREFIX_64_95 = fldbuf[2]; 1939 fmt12->PREFIX_96_127 = fldbuf[3]; 1940 fmt12->PREFIX_128 = fldbuf[4] & 0x1; 1941 } else if (field == ASSOC_DATAf) { 1942 fmt12->ASSOC_DATA_0_29 = fldbuf[0] & 0x3fffffff; 1943 fmt12->ASSOC_DATA_30_45 = ((fldbuf[1] & 0x3fff) << 2) | ((fldbuf[0] >> 30) & 0x3); 1944 } 1945 } 1946 break; 1947 1948 /* PIVOT FULL format */ 1949 case L3_DEFIP_ALPM_PIVOT_FMT1_FULLfmt: 1950 case L3_DEFIP_ALPM_ROUTE_FMT6_FULLfmt: 1951 case L3_DEFIP_ALPM_ROUTE_FMT10_FULLfmt: { 1952 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT1_FULL_t *fmt1pf = (void *)entbuf; 1953 if (field == ENTRY_0f) { 1954 fmt1pf->ENTRY_0_0_31 = fldbuf[0]; 1955 fmt1pf->ENTRY_0_32_63 = fldbuf[1]; 1956 fmt1pf->ENTRY_0_64_79 = fldbuf[2] & 0xffff; 1957 } else if (field == ENTRY_1f) { 1958 fmt1pf->ENTRY_1_0_15 = fldbuf[0] & 0xffff; 1959 fmt1pf->ENTRY_1_16_47 = ((fldbuf[1] & 0xffff) << 16) | ((fldbuf[0] >> 16) & 0xffff); 1960 fmt1pf->ENTRY_1_48_79 = ((fldbuf[2] & 0xffff) << 16) | ((fldbuf[1] >> 16) & 0xffff); 1961 } else if (field == ENTRY_2f) { 1962 fmt1pf->ENTRY_2_0_31 = fldbuf[0]; 1963 fmt1pf->ENTRY_2_32_63 = fldbuf[1]; 1964 fmt1pf->ENTRY_2_64_79 = fldbuf[2] & 0xffff; 1965 } else if (field == ENTRY_3f) { 1966 fmt1pf->ENTRY_3_0_15 = fldbuf[0] & 0xffff; 1967 fmt1pf->ENTRY_3_16_47 = ((fldbuf[1] & 0xffff) << 16) | ((fldbuf[0] >> 16) & 0xffff); 1968 fmt1pf->ENTRY_3_48_79 = ((fldbuf[2] & 0xffff) << 16) | ((fldbuf[1] >> 16) & 0xffff); 1969 } else if (field == ENTRY_4f) { 1970 fmt1pf->ENTRY_4_0_31 = fldbuf[0]; 1971 fmt1pf->ENTRY_4_32_63 = fldbuf[1]; 1972 fmt1pf->ENTRY_4_64_79 = fldbuf[2] & 0xffff; 1973 } else if (field == ENTRY_5f) { 1974 fmt1pf->ENTRY_5_0_15 = fldbuf[0] & 0xffff; 1975 fmt1pf->ENTRY_5_16_47 = ((fldbuf[1] & 0xffff) << 16) | ((fldbuf[0] >> 16) & 0xffff); 1976 fmt1pf->ENTRY_5_48_79 = ((fldbuf[2] & 0xffff) << 16) | ((fldbuf[1] >> 16) & 0xffff); 1977 } 1978 } 1979 break; 1980 1981 case L3_DEFIP_ALPM_PIVOT_FMT2_FULLfmt: 1982 case L3_DEFIP_ALPM_ROUTE_FMT7_FULLfmt: { 1983 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT2_FULL_t *fmt2pf = (void *)entbuf; 1984 if (field == ENTRY_0f) { 1985 fmt2pf->ENTRY_0_0_31 = fldbuf[0]; 1986 fmt2pf->ENTRY_0_32_63 = fldbuf[1]; 1987 fmt2pf->ENTRY_0_64_95 = fldbuf[2]; 1988 } else if (field == ENTRY_1f) { 1989 fmt2pf->ENTRY_1_0_31 = fldbuf[0]; 1990 fmt2pf->ENTRY_1_32_63 = fldbuf[1]; 1991 fmt2pf->ENTRY_1_64_95 = fldbuf[2]; 1992 } else if (field == ENTRY_2f) { 1993 fmt2pf->ENTRY_2_0_31 = fldbuf[0]; 1994 fmt2pf->ENTRY_2_32_63 = fldbuf[1]; 1995 fmt2pf->ENTRY_2_64_95 = fldbuf[2]; 1996 } else if (field == ENTRY_3f) { 1997 fmt2pf->ENTRY_3_0_31 = fldbuf[0]; 1998 fmt2pf->ENTRY_3_32_63 = fldbuf[1]; 1999 fmt2pf->ENTRY_3_64_95 = fldbuf[2]; 2000 } else if (field == ENTRY_4f) { 2001 fmt2pf->ENTRY_4_0_31 = fldbuf[0]; 2002 fmt2pf->ENTRY_4_32_63 = fldbuf[1]; 2003 fmt2pf->ENTRY_4_64_95 = fldbuf[2]; 2004 } 2005 } 2006 break; 2007 2008 case L3_DEFIP_ALPM_PIVOT_FMT3_FULLfmt: 2009 case L3_DEFIP_ALPM_PIVOT_FMT6_FULLfmt: 2010 case L3_DEFIP_ALPM_ROUTE_FMT8_FULLfmt: 2011 case L3_DEFIP_ALPM_ROUTE_FMT11_FULLfmt: { 2012 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT3_FULL_t *fmt3pf = (void *)entbuf; 2013 if (field == ENTRY_0f) { 2014 fmt3pf->ENTRY_0_0_31 = fldbuf[0]; 2015 fmt3pf->ENTRY_0_32_63 = fldbuf[1]; 2016 fmt3pf->ENTRY_0_64_95 = fldbuf[2]; 2017 fmt3pf->ENTRY_0_96_119 = fldbuf[3] & 0xffffff; 2018 } else if (field == ENTRY_1f) { 2019 fmt3pf->ENTRY_1_0_7 = fldbuf[0] & 0xff; 2020 fmt3pf->ENTRY_1_8_39 = ((fldbuf[1] & 0xff) << 24) | ((fldbuf[0] >> 8) & 0xffffff); 2021 fmt3pf->ENTRY_1_40_71 = ((fldbuf[2] & 0xff) << 24) | ((fldbuf[1] >> 8) & 0xffffff); 2022 fmt3pf->ENTRY_1_72_103 = ((fldbuf[3] & 0xff) << 24) | ((fldbuf[2] >> 8) & 0xffffff); 2023 fmt3pf->ENTRY_1_104_119 = ((fldbuf[3] >> 8) & 0xffff); 2024 } else if (field == ENTRY_2f) { 2025 fmt3pf->ENTRY_2_0_15 = fldbuf[0] & 0xffff; 2026 fmt3pf->ENTRY_2_16_47 = ((fldbuf[1] & 0xffff) << 16) | ((fldbuf[0] >> 16) & 0xffff); 2027 fmt3pf->ENTRY_2_48_79 = ((fldbuf[2] & 0xffff) << 16) | ((fldbuf[1] >> 16) & 0xffff); 2028 fmt3pf->ENTRY_2_80_111 = ((fldbuf[3] & 0xffff) << 16) | ((fldbuf[2] >> 16) & 0xffff); 2029 fmt3pf->ENTRY_2_112_119 = ((fldbuf[3] >> 16) & 0xff); 2030 } else if (field == ENTRY_3f) { 2031 fmt3pf->ENTRY_3_0_23 = fldbuf[0] & 0xffffff; 2032 fmt3pf->ENTRY_3_24_55 = ((fldbuf[1] & 0xffffff) << 8) | ((fldbuf[0] >> 24) & 0xff); 2033 fmt3pf->ENTRY_3_56_87 = ((fldbuf[2] & 0xffffff) << 8) | ((fldbuf[1] >> 24) & 0xff); 2034 fmt3pf->ENTRY_3_88_119 = ((fldbuf[3] & 0xffffff) << 8) | ((fldbuf[2] >> 24) & 0xff); 2035 } 2036 } 2037 break; 2038 2039 case L3_DEFIP_ALPM_PIVOT_FMT4_FULLfmt: 2040 case L3_DEFIP_ALPM_PIVOT_FMT7_FULLfmt: { 2041 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT4_FULL_t *fmt4pf = (void *)entbuf; 2042 if (field == ENTRY_0f) { 2043 fmt4pf->ENTRY_0_0_31 = fldbuf[0]; 2044 fmt4pf->ENTRY_0_32_63 = fldbuf[1]; 2045 fmt4pf->ENTRY_0_64_95 = fldbuf[2]; 2046 fmt4pf->ENTRY_0_96_127 = fldbuf[3]; 2047 fmt4pf->ENTRY_0_128_159 = fldbuf[4]; 2048 } else if (field == ENTRY_1f) { 2049 fmt4pf->ENTRY_1_0_31 = fldbuf[0]; 2050 fmt4pf->ENTRY_1_32_63 = fldbuf[1]; 2051 fmt4pf->ENTRY_1_64_95 = fldbuf[2]; 2052 fmt4pf->ENTRY_1_96_127 = fldbuf[3]; 2053 fmt4pf->ENTRY_1_128_159 = fldbuf[4]; 2054 } else if (field == ENTRY_2f) { 2055 fmt4pf->ENTRY_2_0_31 = fldbuf[0]; 2056 fmt4pf->ENTRY_2_32_63 = fldbuf[1]; 2057 fmt4pf->ENTRY_2_64_95 = fldbuf[2]; 2058 fmt4pf->ENTRY_2_96_127 = fldbuf[3]; 2059 fmt4pf->ENTRY_2_128_159 = fldbuf[4]; 2060 } 2061 } 2062 break; 2063 2064 case L3_DEFIP_ALPM_PIVOT_FMT5_FULLfmt: { 2065 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT5_FULL_t *fmt5pf = (void *)entbuf; 2066 if (field == ENTRY_0f) { 2067 fmt5pf->ENTRY_0_0_31 = fldbuf[0]; 2068 fmt5pf->ENTRY_0_32_63 = fldbuf[1]; 2069 fmt5pf->ENTRY_0_64_95 = fldbuf[2]; 2070 fmt5pf->ENTRY_0_96_127 = fldbuf[3]; 2071 fmt5pf->ENTRY_0_128_159 = fldbuf[4]; 2072 fmt5pf->ENTRY_0_160_191 = fldbuf[5]; 2073 fmt5pf->ENTRY_0_192_207 = fldbuf[6] & 0xffff; 2074 } else if (field == ENTRY_1f) { 2075 fmt5pf->ENTRY_1_0_15 = fldbuf[0] & 0xffff; 2076 fmt5pf->ENTRY_1_16_47 = ((fldbuf[1] & 0xffff) << 16) | ((fldbuf[0] >> 16) & 0xffff); 2077 fmt5pf->ENTRY_1_48_79 = ((fldbuf[2] & 0xffff) << 16) | ((fldbuf[1] >> 16) & 0xffff); 2078 fmt5pf->ENTRY_1_80_111 = ((fldbuf[3] & 0xffff) << 16) | ((fldbuf[2] >> 16) & 0xffff); 2079 fmt5pf->ENTRY_1_112_143 = ((fldbuf[4] & 0xffff) << 16) | ((fldbuf[3] >> 16) & 0xffff); 2080 fmt5pf->ENTRY_1_144_175 = ((fldbuf[5] & 0xffff) << 16) | ((fldbuf[4] >> 16) & 0xffff); 2081 fmt5pf->ENTRY_1_176_207 = ((fldbuf[6] & 0xffff) << 16) | ((fldbuf[5] >> 16) & 0xffff); 2082 } 2083 } 2084 break; 2085 2086 case L3_DEFIP_ALPM_PIVOT_FMT8_FULLfmt: { 2087 th3_fmt_L3_DEFIP_ALPM_PIVOT_FMT8_FULL_t *fmt8pf = (void *)entbuf; 2088 if (field == ENTRY_0f) { 2089 fmt8pf->ENTRY_0_0_31 = fldbuf[0]; 2090 fmt8pf->ENTRY_0_32_63 = fldbuf[1]; 2091 fmt8pf->ENTRY_0_64_95 = fldbuf[2]; 2092 fmt8pf->ENTRY_0_96_127 = fldbuf[3]; 2093 fmt8pf->ENTRY_0_128_159 = fldbuf[4]; 2094 fmt8pf->ENTRY_0_160_191 = fldbuf[5]; 2095 fmt8pf->ENTRY_0_192_223 = fldbuf[6]; 2096 fmt8pf->ENTRY_0_224_231 = fldbuf[7] & 0xff; 2097 } else if (field == ENTRY_1f) { 2098 fmt8pf->ENTRY_1_0_23 = fldbuf[0] & 0xffffff; 2099 fmt8pf->ENTRY_1_24_55 = ((fldbuf[1] & 0xffffff) << 8) | ((fldbuf[0] >> 24) & 0xff); 2100 fmt8pf->ENTRY_1_56_87 = ((fldbuf[2] & 0xffffff) << 8) | ((fldbuf[1] >> 24) & 0xff); 2101 fmt8pf->ENTRY_1_88_119 = ((fldbuf[3] & 0xffffff) << 8) | ((fldbuf[2] >> 24) & 0xff); 2102 fmt8pf->ENTRY_1_120_151 = ((fldbuf[4] & 0xffffff) << 8) | ((fldbuf[3] >> 24) & 0xff); 2103 fmt8pf->ENTRY_1_152_183 = ((fldbuf[5] & 0xffffff) << 8) | ((fldbuf[4] >> 24) & 0xff); 2104 fmt8pf->ENTRY_1_184_215 = ((fldbuf[6] & 0xffffff) << 8) | ((fldbuf[5] >> 24) & 0xff); 2105 fmt8pf->ENTRY_1_216_231 = ((fldbuf[7] & 0xff) << 8) | ((fldbuf[6] >> 24) & 0xff); 2106 } 2107 } 2108 break; 2109 2110 /* ROUTE FULL fmt */ 2111 case L3_DEFIP_ALPM_ROUTE_FMT1_FULLfmt: { 2112 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT1_FULL_t *fmt1rf = (void *)entbuf; 2113 if (field == ENTRY_0f) { 2114 fmt1rf->ENTRY_0 = fldbuf[0]; 2115 } else if (field == ENTRY_1f) { 2116 fmt1rf->ENTRY_1 = fldbuf[0]; 2117 } else if (field == ENTRY_2f) { 2118 fmt1rf->ENTRY_2 = fldbuf[0]; 2119 } else if (field == ENTRY_3f) { 2120 fmt1rf->ENTRY_3 = fldbuf[0]; 2121 } else if (field == ENTRY_4f) { 2122 fmt1rf->ENTRY_4 = fldbuf[0]; 2123 } else if (field == ENTRY_5f) { 2124 fmt1rf->ENTRY_5 = fldbuf[0]; 2125 } else if (field == ENTRY_6f) { 2126 fmt1rf->ENTRY_6 = fldbuf[0]; 2127 } else if (field == ENTRY_7f) { 2128 fmt1rf->ENTRY_7 = fldbuf[0]; 2129 } else if (field == ENTRY_8f) { 2130 fmt1rf->ENTRY_8 = fldbuf[0]; 2131 } else if (field == ENTRY_9f) { 2132 fmt1rf->ENTRY_9 = fldbuf[0]; 2133 } else if (field == ENTRY_10f) { 2134 fmt1rf->ENTRY_10 = fldbuf[0]; 2135 } else if (field == ENTRY_11f) { 2136 fmt1rf->ENTRY_11 = fldbuf[0]; 2137 } else if (field == ENTRY_12f) { 2138 fmt1rf->ENTRY_12 = fldbuf[0]; 2139 } else if (field == ENTRY_13f) { 2140 fmt1rf->ENTRY_13 = fldbuf[0]; 2141 } else if (field == ENTRY_14f) { 2142 fmt1rf->ENTRY_14 = fldbuf[0]; 2143 } 2144 } 2145 break; 2146 2147 case L3_DEFIP_ALPM_ROUTE_FMT2_FULLfmt: { 2148 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT2_FULL_t *fmt2rf = (void *)entbuf; 2149 if (field == ENTRY_0f) { 2150 fmt2rf->ENTRY_0_0_31 = fldbuf[0]; 2151 fmt2rf->ENTRY_0_32_39 = fldbuf[1] & 0xff; 2152 } else if (field == ENTRY_1f) { 2153 fmt2rf->ENTRY_1_0_23 = fldbuf[0] & 0xffffff; 2154 fmt2rf->ENTRY_1_24_39 = ((fldbuf[1] & 0xff) << 8) | ((fldbuf[0] >> 24) & 0xff); 2155 } else if (field == ENTRY_2f) { 2156 fmt2rf->ENTRY_2_0_15 = fldbuf[0] & 0xffff; 2157 fmt2rf->ENTRY_2_16_39 = ((fldbuf[1] & 0xff) << 16) | ((fldbuf[0] >> 16) & 0xffff); 2158 } else if (field == ENTRY_3f) { 2159 fmt2rf->ENTRY_3_0_7 = fldbuf[0] & 0xff; 2160 fmt2rf->ENTRY_3_8_39 = ((fldbuf[1] & 0xff) << 24) | ((fldbuf[0] >> 8) & 0xffffff); 2161 } else if (field == ENTRY_4f) { 2162 fmt2rf->ENTRY_4_0_31 = fldbuf[0]; 2163 fmt2rf->ENTRY_4_32_39 = fldbuf[1] & 0xff; 2164 } else if (field == ENTRY_5f) { 2165 fmt2rf->ENTRY_5_0_23 = fldbuf[0] & 0xffffff; 2166 fmt2rf->ENTRY_5_24_39 = ((fldbuf[1] & 0xff) << 8) | ((fldbuf[0] >> 24) & 0xff); 2167 } else if (field == ENTRY_6f) { 2168 fmt2rf->ENTRY_6_0_15 = fldbuf[0] & 0xffff; 2169 fmt2rf->ENTRY_6_16_39 = ((fldbuf[1] & 0xff) << 16) | ((fldbuf[0] >> 16) & 0xffff); 2170 } else if (field == ENTRY_7f) { 2171 fmt2rf->ENTRY_7_0_7 = fldbuf[0] & 0xff; 2172 fmt2rf->ENTRY_7_8_39 = ((fldbuf[1] & 0xff) << 24) | ((fldbuf[0] >> 8) & 0xffffff); 2173 } else if (field == ENTRY_8f) { 2174 fmt2rf->ENTRY_8_0_31 = fldbuf[0]; 2175 fmt2rf->ENTRY_8_32_39 = fldbuf[1] & 0xff; 2176 } else if (field == ENTRY_9f) { 2177 fmt2rf->ENTRY_9_0_23 = fldbuf[0] & 0xffffff; 2178 fmt2rf->ENTRY_9_24_39 = ((fldbuf[1] & 0xff) << 8) | ((fldbuf[0] >> 24) & 0xff); 2179 } else if (field == ENTRY_10f) { 2180 fmt2rf->ENTRY_10_0_15 = fldbuf[0] & 0xffff; 2181 fmt2rf->ENTRY_10_16_39 = ((fldbuf[1] & 0xff) << 16) | ((fldbuf[0] >> 16) & 0xffff); 2182 } else if (field == ENTRY_11f) { 2183 fmt2rf->ENTRY_11_0_7 = fldbuf[0] & 0xff; 2184 fmt2rf->ENTRY_11_8_39 = ((fldbuf[1] & 0xff) << 24) | ((fldbuf[0] >> 8) & 0xffffff); 2185 } 2186 } 2187 break; 2188 2189 case L3_DEFIP_ALPM_ROUTE_FMT3_FULLfmt: { 2190 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT3_FULL_t *fmt3rf = (void *)entbuf; 2191 if (field == ENTRY_0f) { 2192 fmt3rf->ENTRY_0_0_31 = fldbuf[0]; 2193 fmt3rf->ENTRY_0_32_47 = fldbuf[1] & 0xff; 2194 } else if (field == ENTRY_1f) { 2195 fmt3rf->ENTRY_1_0_15 = fldbuf[0] & 0xffff; 2196 fmt3rf->ENTRY_1_16_47 = ((fldbuf[1] & 0xffff) << 16) | ((fldbuf[0] >> 16) & 0xffff); 2197 } else if (field == ENTRY_2f) { 2198 fmt3rf->ENTRY_2_0_31 = fldbuf[0]; 2199 fmt3rf->ENTRY_2_32_47 = fldbuf[1] & 0xff; 2200 } else if (field == ENTRY_3f) { 2201 fmt3rf->ENTRY_3_0_15 = fldbuf[0] & 0xffff; 2202 fmt3rf->ENTRY_3_16_47 = ((fldbuf[1] & 0xffff) << 16) | ((fldbuf[0] >> 16) & 0xffff); 2203 } else if (field == ENTRY_4f) { 2204 fmt3rf->ENTRY_4_0_31 = fldbuf[0]; 2205 fmt3rf->ENTRY_4_32_47 = fldbuf[1] & 0xff; 2206 } else if (field == ENTRY_5f) { 2207 fmt3rf->ENTRY_5_0_15 = fldbuf[0] & 0xffff; 2208 fmt3rf->ENTRY_5_16_47 = ((fldbuf[1] & 0xffff) << 16) | ((fldbuf[0] >> 16) & 0xffff); 2209 } else if (field == ENTRY_6f) { 2210 fmt3rf->ENTRY_6_0_31 = fldbuf[0]; 2211 fmt3rf->ENTRY_6_32_47 = fldbuf[1] & 0xff; 2212 } else if (field == ENTRY_7f) { 2213 fmt3rf->ENTRY_7_0_15 = fldbuf[0] & 0xffff; 2214 fmt3rf->ENTRY_7_16_47 = ((fldbuf[1] & 0xffff) << 16) | ((fldbuf[0] >> 16) & 0xffff); 2215 } else if (field == ENTRY_8f) { 2216 fmt3rf->ENTRY_8_0_31 = fldbuf[0]; 2217 fmt3rf->ENTRY_8_32_47 = fldbuf[1] & 0xff; 2218 } else if (field == ENTRY_9f) { 2219 fmt3rf->ENTRY_9_0_15 = fldbuf[0] & 0xffff; 2220 fmt3rf->ENTRY_9_16_47 = ((fldbuf[1] & 0xffff) << 16) | ((fldbuf[0] >> 16) & 0xffff); 2221 } 2222 } 2223 break; 2224 2225 case L3_DEFIP_ALPM_ROUTE_FMT4_FULLfmt: { 2226 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT4_FULL_t *fmt4rf = (void *)entbuf; 2227 if (field == ENTRY_0f) { 2228 fmt4rf->ENTRY_0_0_31 = fldbuf[0]; 2229 fmt4rf->ENTRY_0_32_55 = fldbuf[1] & 0xffffff; 2230 } else if (field == ENTRY_1f) { 2231 fmt4rf->ENTRY_1_0_7 = fldbuf[0] & 0xff; 2232 fmt4rf->ENTRY_1_8_39 = ((fldbuf[1] & 0xff) << 24) | ((fldbuf[0] >> 8) & 0xffffff); 2233 fmt4rf->ENTRY_1_40_55 = ((fldbuf[1] >> 8) & 0xffff); 2234 } else if (field == ENTRY_2f) { 2235 fmt4rf->ENTRY_2_0_15 = fldbuf[0] & 0xffff; 2236 fmt4rf->ENTRY_2_16_47 = ((fldbuf[1] & 0xffff) << 16) | ((fldbuf[0] >> 16) & 0xffff); 2237 fmt4rf->ENTRY_2_48_55 = (fldbuf[1] >> 16) & 0xff; 2238 } else if (field == ENTRY_3f) { 2239 fmt4rf->ENTRY_3_0_23 = fldbuf[0] & 0xffffff; 2240 fmt4rf->ENTRY_3_24_55 = ((fldbuf[1] & 0xffffff) << 8) | ((fldbuf[0] >> 24) & 0xff); 2241 } else if (field == ENTRY_4f) { 2242 fmt4rf->ENTRY_4_0_31 = fldbuf[0]; 2243 fmt4rf->ENTRY_4_32_55 = fldbuf[1] & 0xffffff; 2244 } else if (field == ENTRY_5f) { 2245 fmt4rf->ENTRY_5_0_7 = fldbuf[0] & 0xff; 2246 fmt4rf->ENTRY_5_8_39 = ((fldbuf[1] & 0xff) << 24) | ((fldbuf[0] >> 8) & 0xffffff); 2247 fmt4rf->ENTRY_5_40_55 = ((fldbuf[1] >> 8) & 0xffff); 2248 } else if (field == ENTRY_6f) { 2249 fmt4rf->ENTRY_6_0_15 = fldbuf[0] & 0xffff; 2250 fmt4rf->ENTRY_6_16_47 = ((fldbuf[1] & 0xffff) << 16) | ((fldbuf[0] >> 16) & 0xffff); 2251 fmt4rf->ENTRY_6_48_55 = (fldbuf[1] >> 16) & 0xff; 2252 } else if (field == ENTRY_7f) { 2253 fmt4rf->ENTRY_7_0_23 = fldbuf[0] & 0xffffff; 2254 fmt4rf->ENTRY_7_24_55 = ((fldbuf[1] & 0xffffff) << 8) | ((fldbuf[0] >> 24) & 0xff); 2255 } 2256 } 2257 break; 2258 2259 case L3_DEFIP_ALPM_ROUTE_FMT5_FULLfmt: { 2260 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT5_FULL_t *fmt5rf = (void *)entbuf; 2261 if (field == ENTRY_0f) { 2262 fmt5rf->ENTRY_0_0_31 = fldbuf[0]; 2263 fmt5rf->ENTRY_0_32_63 = fldbuf[1]; 2264 } else if (field == ENTRY_1f) { 2265 fmt5rf->ENTRY_1_0_31 = fldbuf[0]; 2266 fmt5rf->ENTRY_1_32_63 = fldbuf[1]; 2267 } else if (field == ENTRY_2f) { 2268 fmt5rf->ENTRY_2_0_31 = fldbuf[0]; 2269 fmt5rf->ENTRY_2_32_63 = fldbuf[1]; 2270 } else if (field == ENTRY_3f) { 2271 fmt5rf->ENTRY_3_0_31 = fldbuf[0]; 2272 fmt5rf->ENTRY_3_32_63 = fldbuf[1]; 2273 } else if (field == ENTRY_4f) { 2274 fmt5rf->ENTRY_4_0_31 = fldbuf[0]; 2275 fmt5rf->ENTRY_4_32_63 = fldbuf[1]; 2276 } else if (field == ENTRY_5f) { 2277 fmt5rf->ENTRY_5_0_31 = fldbuf[0]; 2278 fmt5rf->ENTRY_5_32_63 = fldbuf[1]; 2279 } else if (field == ENTRY_6f) { 2280 fmt5rf->ENTRY_6_0_31 = fldbuf[0]; 2281 fmt5rf->ENTRY_6_32_63 = fldbuf[1]; 2282 } 2283 } 2284 break; 2285 2286 case L3_DEFIP_ALPM_ROUTE_FMT9_FULLfmt: { 2287 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT9_FULL_t *fmt9rf = (void *)entbuf; 2288 if (field == ENTRY_0f) { 2289 fmt9rf->ENTRY_0_0_31 = fldbuf[0]; 2290 fmt9rf->ENTRY_0_32_63 = fldbuf[1]; 2291 fmt9rf->ENTRY_0_64_95 = fldbuf[2]; 2292 fmt9rf->ENTRY_0_96_127 = fldbuf[3]; 2293 fmt9rf->ENTRY_0_128_151 = fldbuf[4] & 0xffffff; 2294 } else if (field == ENTRY_1f) { 2295 fmt9rf->ENTRY_1_0_7 = fldbuf[0] & 0xff; 2296 fmt9rf->ENTRY_1_8_39 = ((fldbuf[1] & 0xff) << 24) | ((fldbuf[0] >> 8) & 0xffffff); 2297 fmt9rf->ENTRY_1_40_71 = ((fldbuf[2] & 0xff) << 24) | ((fldbuf[1] >> 8) & 0xffffff); 2298 fmt9rf->ENTRY_1_72_103 = ((fldbuf[3] & 0xff) << 24) | ((fldbuf[2] >> 8) & 0xffffff); 2299 fmt9rf->ENTRY_1_104_135 = ((fldbuf[4] & 0xff) << 24) | ((fldbuf[3] >> 8) & 0xffffff); 2300 fmt9rf->ENTRY_1_136_151 = (fldbuf[4] >> 8) & 0xffff; 2301 } else if (field == ENTRY_2f) { 2302 fmt9rf->ENTRY_2_0_15 = fldbuf[0] & 0xffff; 2303 fmt9rf->ENTRY_2_16_47 = ((fldbuf[1] & 0xffff) << 16) | ((fldbuf[0] >> 16) & 0xffff); 2304 fmt9rf->ENTRY_2_48_79 = ((fldbuf[2] & 0xffff) << 16) | ((fldbuf[1] >> 16) & 0xffff); 2305 fmt9rf->ENTRY_2_80_111 = ((fldbuf[3] & 0xffff) << 16) | ((fldbuf[2] >> 16) & 0xffff); 2306 fmt9rf->ENTRY_2_112_143 = ((fldbuf[4] & 0xffff) << 16) | ((fldbuf[3] >> 16) & 0xffff); 2307 fmt9rf->ENTRY_2_144_151 = (fldbuf[4] >> 16) & 0xff; 2308 } 2309 } 2310 break; 2311 2312 case L3_DEFIP_ALPM_ROUTE_FMT12_FULLfmt: { 2313 th3_fmt_L3_DEFIP_ALPM_ROUTE_FMT12_FULL_t *fmt12rf = (void *)entbuf; 2314 if (field == ENTRY_0f) { 2315 fmt12rf->ENTRY_0_0_31 = fldbuf[0]; 2316 fmt12rf->ENTRY_0_32_63 = fldbuf[1]; 2317 fmt12rf->ENTRY_0_64_95 = fldbuf[2]; 2318 fmt12rf->ENTRY_0_96_127 = fldbuf[3]; 2319 fmt12rf->ENTRY_0_128_159 = fldbuf[4]; 2320 fmt12rf->ENTRY_0_160_175 = fldbuf[5] & 0xffff; 2321 } else if (field == ENTRY_1f) { 2322 fmt12rf->ENTRY_1_0_15 = fldbuf[0] & 0xffff; 2323 fmt12rf->ENTRY_1_16_47 = ((fldbuf[1] & 0xffff) << 16) | ((fldbuf[0] >> 16) & 0xffff); 2324 fmt12rf->ENTRY_1_48_79 = ((fldbuf[2] & 0xffff) << 16) | ((fldbuf[1] >> 16) & 0xffff); 2325 fmt12rf->ENTRY_1_80_111 = ((fldbuf[3] & 0xffff) << 16) | ((fldbuf[2] >> 16) & 0xffff); 2326 fmt12rf->ENTRY_1_112_143 = ((fldbuf[4] & 0xffff) << 16) | ((fldbuf[3] >> 16) & 0xffff); 2327 fmt12rf->ENTRY_1_144_175 = ((fldbuf[5] & 0xffff) << 16) | ((fldbuf[4] >> 16) & 0xffff); 2328 } 2329 } 2330 break; 2331 2332 default: 2333 assert(0); 2334 break; 2335 } 2336 } 2337 #endif 2338 2339 typedef struct { 2340 #ifdef LE_HOST 2341 uint32 VLAN_ID:12, 2342 __PAD0:2, 2343 PORT_NUM:8, 2344 COPY_TO_CPU:1, 2345 DROP:1, 2346 ENTRY_TYPE:2, 2347 T:1, 2348 __PAD1:5; 2349 #else 2350 uint32 __PAD1:5, 2351 T:1, 2352 ENTRY_TYPE:2, 2353 DROP:1, 2354 COPY_TO_CPU:1, 2355 PORT_NUM:8, 2356 __PAD0:2, 2357 VLAN_ID:12; 2358 #endif /* LE_HOST */ 2359 2360 uint32 __WORD_PAD0; 2361 } th3_mem_ING_L3_NEXT_HOP_t; 2362 2363 typedef struct { 2364 /* Word0: bit 0 - bit 31 */ 2365 #ifdef LE_HOST 2366 uint32 ENTRY_TYPE:2, 2367 __PAD0:8, 2368 L3__CLASS_ID:7, 2369 __PAD1:5, 2370 IFP_ACTIONS__L3_UC_DA_DISABLE:1, 2371 IFP_ACTIONS__L3_UC_SA_DISABLE:1, 2372 IFP_ACTIONS__L3_UC_TTL_DISABLE:1, 2373 IFP_ACTIONS__L3_UC_VLAN_DISABLE:1, 2374 __PAD2:6; 2375 #else 2376 uint32 __PAD2:6, 2377 IFP_ACTIONS__L3_UC_VLAN_DISABLE:1, 2378 IFP_ACTIONS__L3_UC_TTL_DISABLE:1, 2379 IFP_ACTIONS__L3_UC_SA_DISABLE:1, 2380 IFP_ACTIONS__L3_UC_DA_DISABLE:1, 2381 __PAD1:5, 2382 L3__CLASS_ID:7, 2383 __PAD0:8, 2384 ENTRY_TYPE:2; 2385 #endif /* LE_HOST */ 2386 2387 /* Word1: bit 32 - bit 63 */ 2388 #ifdef LE_HOST 2389 uint32 __PAD3:1, 2390 L3__L3_UC_DA_DISABLE:1, 2391 L3__L3_UC_SA_DISABLE:1, 2392 L3__L3_UC_TTL_DISABLE:1, 2393 L3__L3_UC_VLAN_DISABLE:1, 2394 __PAD4:11, 2395 MPLS__MAC_DA_PROFILE_INDEX:9, 2396 __PAD5:5, 2397 MPLS__MPLS_LABEL_0_1:2; 2398 #else 2399 uint32 MPLS__MPLS_LABEL_0_1:2, 2400 __PAD5:5, 2401 MPLS__MAC_DA_PROFILE_INDEX:9, 2402 __PAD4:11, 2403 L3__L3_UC_VLAN_DISABLE:1, 2404 L3__L3_UC_TTL_DISABLE:1, 2405 L3__L3_UC_SA_DISABLE:1, 2406 L3__L3_UC_DA_DISABLE:1, 2407 __PAD3:1; 2408 #endif /* LE_HOST */ 2409 2410 /* Word2: bit 64 - bit 95 */ 2411 #ifdef LE_HOST 2412 uint32 MPLS__MPLS_LABEL_2_19:18, 2413 __PAD6:14; 2414 #else 2415 uint32 __PAD6:14, 2416 MPLS__MPLS_LABEL_2_19:18; 2417 #endif /* LE_HOST */ 2418 2419 /* Word3 */ 2420 uint32 __WORD_PAD0; 2421 } th3_mem_EGR_L3_NEXT_HOP_t; 2422 2423 typedef struct { 2424 #ifdef LE_HOST 2425 uint32 INTF_NUM:13, 2426 __PAD0:19; 2427 #else 2428 uint32 __PAD0:19, 2429 INTF_NUM:13; 2430 #endif /* LE_HOST */ 2431 } th3_mem_EGR_L3_NEXT_HOP_2_t; 2432 2433 #endif /* _BCM_INT_ALPM_TH3_ACC_H_ */ 2434