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