openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

tdm_gh2_vec.h (24959B)


      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  * All Rights Reserved.$
      7  *
      8  * TDM vector library for BCM53570
      9  */
     10 
     11 #ifndef TDM_GH2_VECTOR_LIBRARY_H
     12 #define TDM_GH2_VECTOR_LIBRARY_H
     13 /**
     14 @name: tdm_gh2_vector_load
     15 @param:
     16 
     17 Generate vector at index in TDM vector map
     18  */
     19 int
     20 tdm_gh2_vec_load(unsigned short **map, int freq, int port_speed, int yy, int len)
     21 {
     22     int i, n=0;
     23     int result=1; /* 1->PASS; 0->FAIL */
     24 
     25     switch (freq){
     26         case 850:
     27             switch(port_speed){
     28                 /* Ethernet */
     29                 case 10:
     30 					for (i=0; i<len; i+=56) {
     31 						map[yy][i]    = TOKEN_10G;
     32 						n+=1; if (n==4) {break;}
     33 					}
     34                     break;
     35                 case 20:
     36 					for (i=0; i<len; i+=28) {
     37 						map[yy][i]    = TOKEN_20G;
     38 						n+=1; if (n==8) {break;}
     39 					}
     40                     break;
     41                 case 25:
     42 					for (i=0; i<len && (i+89)<len; i+=112) {
     43 						map[yy][i]    = TOKEN_25G;
     44                         map[yy][i+22] = TOKEN_25G;
     45                         map[yy][i+44] = TOKEN_25G;
     46                         map[yy][i+67] = TOKEN_25G;
     47                         map[yy][i+89] = TOKEN_25G;
     48 						n+=5; if (n==10) {break;}
     49 					}
     50                     break;
     51                 case 40:
     52 					for (i=0; i<len; i+=14) {
     53 						map[yy][i]    = TOKEN_40G;
     54 						n+=1; if (n==16) {break;}
     55 					}
     56                     break;
     57                 case 41:
     58 					for (i=0; i<len && (i+16)<len; i+=28) {
     59 						map[yy][i]    = TOKEN_40G;
     60                         map[yy][i+16] = TOKEN_40G;
     61 						n+=2; if (n==16) {break;}
     62 					}
     63                     break;
     64                 case 50:
     65 					for (i=0; i<len && (i+44)<len; i+=56) {
     66 						map[yy][i]    = TOKEN_50G;
     67                         map[yy][i+11] = TOKEN_50G;
     68                         map[yy][i+22] = TOKEN_50G;
     69                         map[yy][i+33] = TOKEN_50G;
     70                         map[yy][i+44] = TOKEN_50G;
     71 						n+=5; if (n==20) {break;}
     72 					}
     73                     break;
     74                 case 100:
     75 					for (i=0; i<len && (i+50)<len; i+=56) {
     76 						map[yy][i]    = TOKEN_100G;
     77                         map[yy][i+5]  = TOKEN_100G;
     78                         map[yy][i+11] = TOKEN_100G;
     79                         map[yy][i+16] = TOKEN_100G;
     80                         map[yy][i+22] = TOKEN_100G;
     81                         map[yy][i+28] = TOKEN_100G;
     82                         map[yy][i+33] = TOKEN_100G;
     83                         map[yy][i+39] = TOKEN_100G;
     84                         map[yy][i+44] = TOKEN_100G;
     85                         map[yy][i+50] = TOKEN_100G;
     86 						n+=10; if (n==40) {break;}
     87 					}
     88                     break;
     89                 /* HiGig */
     90                 case 11:
     91 					for (i=0; i<len; i+=54) {
     92 						map[yy][i]    = TOKEN_10G;
     93 						n+=1; if (n==4) {break;}
     94 					}
     95                     break;
     96                 case 21:
     97 					for (i=0; i<len; i+=27) {
     98 						map[yy][i]    = TOKEN_20G;
     99 						n+=1; if (n==8) {break;}
    100 					}
    101                     break;
    102                 case 27:
    103 					for (i=0; i<len && (i+22)<len; i+=43) {
    104 						map[yy][i]    = TOKEN_25G;
    105                         map[yy][i+22] = TOKEN_25G;
    106 						n+=2; if (n==10) {break;}
    107 					}
    108                     break;
    109                 case 42:
    110 					for (i=0; i<len && (i+13)<len; i+=27) {
    111 						map[yy][i]    = TOKEN_40G;
    112                         map[yy][i+13] = TOKEN_40G;
    113 						n+=2; if (n==16) {break;}
    114 					}
    115                     break;
    116                 case 43:
    117 					for (i=0; i<len && (i+84)<len; i+=113) {
    118 						map[yy][i]    = TOKEN_40G;
    119                         map[yy][i+14] = TOKEN_40G;
    120                         map[yy][i+27] = TOKEN_40G;
    121                         map[yy][i+43] = TOKEN_40G;
    122                         map[yy][i+57] = TOKEN_40G;
    123                         map[yy][i+70] = TOKEN_40G;
    124                         map[yy][i+84] = TOKEN_40G;
    125                         if (n==0 && (i+97)<len){
    126                             map[yy][i+97] = TOKEN_40G;
    127                         }
    128 						n+=8; if (n==16) {break;}
    129 					}
    130                     break;
    131                 case 53:
    132 					for (i=0; i<len && (i+33)<len; i+=43) {
    133 						map[yy][i]    = TOKEN_50G;
    134                         map[yy][i+11] = TOKEN_50G;
    135                         map[yy][i+22] = TOKEN_50G;
    136                         map[yy][i+33] = TOKEN_50G;
    137 						n+=4; if (n==20) {break;}
    138 					}
    139                     break;
    140                 case 106:
    141 					for (i=0; i<len && (i+38)<len; i+=43) {
    142 						map[yy][i]    = TOKEN_100G;
    143                         map[yy][i+5]  = TOKEN_100G;
    144                         map[yy][i+11] = TOKEN_100G;
    145                         map[yy][i+16] = TOKEN_100G;
    146                         map[yy][i+22] = TOKEN_100G;
    147                         map[yy][i+27] = TOKEN_100G;
    148                         map[yy][i+33] = TOKEN_100G;
    149                         map[yy][i+38] = TOKEN_100G;
    150 						n+=8; if (n==40) {break;}
    151 					}
    152                     break;
    153                 case 107:
    154 					for (i=0; i<len && (i+33)<len; i+=43) {
    155 						map[yy][i]    = TOKEN_100G;
    156                         map[yy][i+5]  = TOKEN_100G;
    157                         map[yy][i+11] = TOKEN_100G;
    158                         map[yy][i+16] = TOKEN_100G;
    159                         map[yy][i+22] = TOKEN_100G;
    160                         map[yy][i+27] = TOKEN_100G;
    161                         map[yy][i+33] = TOKEN_100G;
    162                         if (n<32 && (i+38)<len){
    163                             map[yy][i+38] = TOKEN_100G;
    164                         }
    165 						n+=8; if (n==40) {break;}
    166 					}
    167                     break;
    168                 default:
    169                     result = 0;
    170                     break;
    171             }
    172             break;
    173         case 765:
    174             switch(port_speed){
    175                 /* Ethernet */
    176                 case 10:
    177 					for (i=0; i<len && (i+50)<len; i+=101) {
    178 						map[yy][i]    = TOKEN_10G;
    179                         map[yy][i+50] = TOKEN_10G;
    180 						n+=2; if (n==4) {break;}
    181 					}
    182                     break;
    183                 case 20:
    184 					for (i=0; i<len && (i+75)<len; i+=101) {
    185 						map[yy][i]    = TOKEN_20G;
    186                         map[yy][i+25] = TOKEN_20G;
    187                         map[yy][i+50] = TOKEN_20G;
    188                         map[yy][i+75] = TOKEN_20G;
    189 						n+=4; if (n==8) {break;}
    190 					}
    191                     break;
    192                 case 25:
    193 					for (i=0; i<len && (i+80)<len; i+=101) {
    194 						map[yy][i]    = TOKEN_25G;
    195                         map[yy][i+20] = TOKEN_25G;
    196                         map[yy][i+40] = TOKEN_25G;
    197                         map[yy][i+60] = TOKEN_25G;
    198                         map[yy][i+80] = TOKEN_25G;
    199 						n+=5; if (n==10) {break;}
    200 					}
    201                     break;
    202                 case 40:
    203 					for (i=0; i<len && (i+88)<len; i+=101) {
    204 						map[yy][i]    = TOKEN_40G;
    205                         map[yy][i+13] = TOKEN_40G;
    206                         map[yy][i+25] = TOKEN_40G;
    207                         map[yy][i+38] = TOKEN_40G;
    208                         map[yy][i+50] = TOKEN_40G;
    209                         map[yy][i+63] = TOKEN_40G;
    210                         map[yy][i+75] = TOKEN_40G;
    211                         map[yy][i+88] = TOKEN_40G;
    212 						n+=8; if (n==16) {break;}
    213 					}
    214                     break;
    215                 case 41:
    216 					for (i=0; i<len && (i+90)<len; i+=101) {
    217 						map[yy][i]    = TOKEN_40G;
    218                         map[yy][i+15] = TOKEN_40G;
    219                         map[yy][i+25] = TOKEN_40G;
    220                         map[yy][i+40] = TOKEN_40G;
    221                         map[yy][i+50] = TOKEN_40G;
    222                         map[yy][i+65] = TOKEN_40G;
    223                         map[yy][i+75] = TOKEN_40G;
    224                         map[yy][i+90] = TOKEN_40G;
    225 						n+=8; if (n==16) {break;}
    226 					}
    227                     break;
    228                 case 50:
    229 					for (i=0; i<len && (i+90)<len; i+=101) {
    230 						map[yy][i]    = TOKEN_50G;
    231                         map[yy][i+10] = TOKEN_50G;
    232                         map[yy][i+20] = TOKEN_50G;
    233                         map[yy][i+30] = TOKEN_50G;
    234                         map[yy][i+40] = TOKEN_50G;
    235                         map[yy][i+50] = TOKEN_50G;
    236                         map[yy][i+60] = TOKEN_50G;
    237                         map[yy][i+70] = TOKEN_50G;
    238                         map[yy][i+80] = TOKEN_50G;
    239                         map[yy][i+90] = TOKEN_50G;
    240 						n+=10; if (n==20) {break;}
    241 					}
    242                     break;
    243                 case 100:
    244 					for (i=0; i<len && (i+95)<len; i+=101) {
    245 						map[yy][i]    = TOKEN_100G;
    246                         map[yy][i+5]  = TOKEN_100G;
    247                         map[yy][i+10] = TOKEN_100G;
    248                         map[yy][i+15] = TOKEN_100G;
    249                         map[yy][i+20] = TOKEN_100G;
    250                         map[yy][i+25] = TOKEN_100G;
    251                         map[yy][i+30] = TOKEN_100G;
    252                         map[yy][i+35] = TOKEN_100G;
    253                         map[yy][i+40] = TOKEN_100G;
    254                         map[yy][i+45] = TOKEN_100G;
    255                         map[yy][i+50] = TOKEN_100G;
    256                         map[yy][i+55] = TOKEN_100G;
    257                         map[yy][i+60] = TOKEN_100G;
    258                         map[yy][i+65] = TOKEN_100G;
    259                         map[yy][i+70] = TOKEN_100G;
    260                         map[yy][i+75] = TOKEN_100G;
    261                         map[yy][i+80] = TOKEN_100G;
    262                         map[yy][i+85] = TOKEN_100G;
    263                         map[yy][i+90] = TOKEN_100G;
    264                         map[yy][i+95] = TOKEN_100G;
    265 						n+=20; if (n==40) {break;}
    266 					}
    267                     break;
    268                 /* HiGig */
    269                 case 11:
    270 					for (i=0; i<len && (i+48)<len; i+=97) {
    271 						map[yy][i]    = TOKEN_10G;
    272                         map[yy][i+48] = TOKEN_10G;
    273 						n+=2; if (n==4) {break;}
    274 					}
    275                     break;
    276                 case 21:
    277 					for (i=0; i<len && (i+72)<len; i+=97) {
    278 						map[yy][i]    = TOKEN_20G;
    279                         map[yy][i+24] = TOKEN_20G;
    280                         map[yy][i+48] = TOKEN_20G;
    281                         map[yy][i+72] = TOKEN_20G;
    282 						n+=4; if (n==8) {break;}
    283 					}
    284                     break;
    285                 case 27:
    286 					for (i=0; i<len && (i+77)<len; i+=97) {
    287 						map[yy][i]    = TOKEN_25G;
    288                         map[yy][i+20] = TOKEN_25G;
    289                         map[yy][i+39] = TOKEN_25G;
    290                         map[yy][i+58] = TOKEN_25G;
    291                         map[yy][i+77] = TOKEN_25G;
    292 						n+=5; if (n==10) {break;}
    293 					}
    294                     break;
    295                 case 42:
    296 					for (i=0; i<len && (i+84)<len; i+=97) {
    297 						map[yy][i]    = TOKEN_40G;
    298                         map[yy][i+12] = TOKEN_40G;
    299                         map[yy][i+24] = TOKEN_40G;
    300                         map[yy][i+36] = TOKEN_40G;
    301                         map[yy][i+48] = TOKEN_40G;
    302                         map[yy][i+60] = TOKEN_40G;
    303                         map[yy][i+72] = TOKEN_40G;
    304                         map[yy][i+84] = TOKEN_40G;
    305 						n+=8; if (n==16) {break;}
    306 					}
    307                     break;
    308                 case 43:
    309 					for (i=0; i<len && (i+82)<len; i+=97) {
    310 						map[yy][i]    = TOKEN_40G;
    311                         map[yy][i+10] = TOKEN_40G;
    312                         map[yy][i+24] = TOKEN_40G;
    313                         map[yy][i+34] = TOKEN_40G;
    314                         map[yy][i+48] = TOKEN_40G;
    315                         map[yy][i+58] = TOKEN_40G;
    316                         map[yy][i+72] = TOKEN_40G;
    317                         map[yy][i+82] = TOKEN_40G;
    318 						n+=8; if (n==16) {break;}
    319 					}
    320                     break;
    321                 case 53:
    322 					for (i=0; i<len && (i+87)<len; i+=97) {
    323 						map[yy][i]    = TOKEN_50G;
    324                         map[yy][i+10] = TOKEN_50G;
    325                         map[yy][i+20] = TOKEN_50G;
    326                         map[yy][i+29] = TOKEN_50G;
    327                         map[yy][i+39] = TOKEN_50G;
    328                         map[yy][i+48] = TOKEN_50G;
    329                         map[yy][i+58] = TOKEN_50G;
    330                         map[yy][i+68] = TOKEN_50G;
    331                         map[yy][i+77] = TOKEN_50G;
    332                         map[yy][i+87] = TOKEN_50G;
    333 						n+=10; if (n==20) {break;}
    334 					}
    335                     break;
    336                 case 106:
    337 					for (i=0; i<len && (i+92)<len; i+=97) {
    338 						map[yy][i]    = TOKEN_100G;
    339                         map[yy][i+5]  = TOKEN_100G;
    340                         map[yy][i+10] = TOKEN_100G;
    341                         map[yy][i+15] = TOKEN_100G;
    342                         map[yy][i+20] = TOKEN_100G;
    343                         map[yy][i+24] = TOKEN_100G;
    344                         map[yy][i+29] = TOKEN_100G;
    345                         map[yy][i+34] = TOKEN_100G;
    346                         map[yy][i+39] = TOKEN_100G;
    347                         map[yy][i+44] = TOKEN_100G;
    348                         map[yy][i+48] = TOKEN_100G;
    349                         map[yy][i+53] = TOKEN_100G;
    350                         map[yy][i+58] = TOKEN_100G;
    351                         map[yy][i+63] = TOKEN_100G;
    352                         map[yy][i+68] = TOKEN_100G;
    353                         map[yy][i+72] = TOKEN_100G;
    354                         map[yy][i+77] = TOKEN_100G;
    355                         map[yy][i+82] = TOKEN_100G;
    356                         map[yy][i+87] = TOKEN_100G;
    357                         map[yy][i+92] = TOKEN_100G;
    358 						n+=20; if (n==40) {break;}
    359 					}
    360                     break;
    361                 default:
    362                     result = 0;
    363                     break;
    364             }
    365             break;
    366         case 672:
    367             switch(port_speed){
    368                 /* Ethernet */
    369                 case 10:
    370 					for (i=0; i<len; i+=44) {
    371 						map[yy][i]    = TOKEN_10G;
    372 						n+=1; if (n==4) {break;}
    373 					}
    374                     break;
    375                 case 20:
    376 					for (i=0; i<len; i+=21) {
    377 						map[yy][i]    = TOKEN_20G;
    378 						n+=1; if (n==8) {break;}
    379 					}
    380                     break;
    381                 case 25:
    382 					for (i=0; i<len && (i+71)<len; i+=88) {
    383 						map[yy][i]    = TOKEN_25G;
    384                         map[yy][i+18] = TOKEN_25G;
    385                         map[yy][i+36] = TOKEN_25G;
    386                         map[yy][i+53] = TOKEN_25G;
    387                         map[yy][i+71] = TOKEN_25G;
    388 						n+=5; if (n==10) {break;}
    389 					}
    390                     break;
    391                 case 40:
    392 					for (i=0; i<len; i+=11) {
    393 						map[yy][i]    = TOKEN_40G;
    394 						n+=1; if (n==16) {break;}
    395 					}
    396                     break;
    397                 case 41:
    398 					for (i=0; i<len && (i+13)<len; i+=22) {
    399 						map[yy][i]    = TOKEN_40G;
    400                         map[yy][i+13] = TOKEN_40G;
    401 						n+=2; if (n==16) {break;}
    402 					}
    403                     break;
    404                 case 50:
    405 					for (i=0; i<len && (i+36)<len; i+=44) {
    406 						map[yy][i]    = TOKEN_50G;
    407                         map[yy][i+9]  = TOKEN_50G;
    408                         map[yy][i+18] = TOKEN_50G;
    409                         map[yy][i+27] = TOKEN_50G;
    410                         map[yy][i+36] = TOKEN_50G;
    411 						n+=5; if (n==20) {break;}
    412 					}
    413                     break;
    414                 case 100:
    415 					for (i=0; i<len && (i+40)<len; i+=44) {
    416 						map[yy][i]    = TOKEN_100G;
    417                         map[yy][i+4]  = TOKEN_100G;
    418                         map[yy][i+9]  = TOKEN_100G;
    419                         map[yy][i+13] = TOKEN_100G;
    420                         map[yy][i+18] = TOKEN_100G;
    421                         map[yy][i+22] = TOKEN_100G;
    422                         map[yy][i+27] = TOKEN_100G;
    423                         map[yy][i+31] = TOKEN_100G;
    424                         map[yy][i+36] = TOKEN_100G;
    425                         map[yy][i+40] = TOKEN_100G;
    426 						n+=10; if (n==40) {break;}
    427 					}
    428                     break;
    429                 /* HiGig */
    430                 case 11:
    431 					for (i=0; i<len && (i+42)<len; i+=85) {
    432 						map[yy][i]    = TOKEN_10G;
    433                         map[yy][i+42] = TOKEN_10G;
    434 						n+=2; if (n==4) {break;}
    435 					}
    436                     break;
    437                 case 21:
    438 					for (i=0; i<len && (i+63)<len; i+=85) {
    439 						map[yy][i]    = TOKEN_20G;
    440                         map[yy][i+21] = TOKEN_20G;
    441                         map[yy][i+42] = TOKEN_20G;
    442                         map[yy][i+63] = TOKEN_20G;
    443 						n+=4; if (n==8) {break;}
    444 					}
    445                     break;
    446                 case 27:
    447 					for (i=0; i<len; i+=17) {
    448 						map[yy][i]    = TOKEN_25G;
    449 						n+=1; if (n==10) {break;}
    450 					}
    451                     break;
    452                 case 42:
    453 					for (i=0; i<len && (i+74)<len; i+=85) {
    454 						map[yy][i]    = TOKEN_40G;
    455                         map[yy][i+10] = TOKEN_40G;
    456                         map[yy][i+21] = TOKEN_40G;
    457                         map[yy][i+31] = TOKEN_40G;
    458                         map[yy][i+42] = TOKEN_40G;
    459                         map[yy][i+52] = TOKEN_40G;
    460                         map[yy][i+63] = TOKEN_40G;
    461                         map[yy][i+74] = TOKEN_40G;
    462 						n+=8; if (n==16) {break;}
    463 					}
    464                     break;
    465                 case 43:
    466 					for (i=0; i<len && (i+72)<len; i+=85) {
    467 						map[yy][i]    = TOKEN_40G;
    468                         map[yy][i+9] = TOKEN_40G;
    469                         map[yy][i+21] = TOKEN_40G;
    470                         map[yy][i+30] = TOKEN_40G;
    471                         map[yy][i+42] = TOKEN_40G;
    472                         map[yy][i+51] = TOKEN_40G;
    473                         map[yy][i+63] = TOKEN_40G;
    474                         map[yy][i+72] = TOKEN_40G;
    475 						n+=8; if (n==16) {break;}
    476 					}
    477                     break;
    478                 case 53:
    479 					for (i=0; i<len && (i+8)<len; i+=17) {
    480 						map[yy][i]    = TOKEN_50G;
    481                         map[yy][i+8] = TOKEN_50G;
    482 						n+=2; if (n==20) {break;}
    483 					}
    484                     break;
    485                 case 106:
    486 					for (i=0; i<len && (i+12)<len; i+=17) {
    487 						map[yy][i]    = TOKEN_100G;
    488                         map[yy][i+4]  = TOKEN_100G;
    489                         map[yy][i+8]  = TOKEN_100G;
    490                         map[yy][i+12] = TOKEN_100G;
    491 						n+=4; if (n==40) {break;}
    492 					}
    493                     break;
    494                 default:
    495                     result = 0;
    496                     break;
    497             }
    498             break;
    499         case 585:
    500             switch(port_speed){
    501                 /* Ethernet */
    502                 case 10:
    503 					for (i=0; i<len && (i+42)<len; i+=85) {
    504 						map[yy][i]    = TOKEN_10G;
    505                         map[yy][i+42] = TOKEN_10G;
    506 						n+=2; if (n==4) {break;}
    507 					}
    508                     break;
    509                 case 20:
    510 					for (i=0; i<len && (i+63)<len; i+=85) {
    511 						map[yy][i]    = TOKEN_20G;
    512                         map[yy][i+21] = TOKEN_20G;
    513                         map[yy][i+42] = TOKEN_20G;
    514                         map[yy][i+63] = TOKEN_20G;
    515 						n+=4; if (n==8) {break;}
    516 					}
    517                     break;
    518                 case 25:
    519 					for (i=0; i<len; i+=17) {
    520 						map[yy][i]    = TOKEN_25G;
    521 						n+=1; if (n==10) {break;}
    522 					}
    523                     break;
    524                 case 40:
    525 					for (i=0; i<len && (i+73)<len; i+=85) {
    526 						map[yy][i]    = TOKEN_40G;
    527                         map[yy][i+10] = TOKEN_40G;
    528                         map[yy][i+21] = TOKEN_40G;
    529                         map[yy][i+31] = TOKEN_40G;
    530                         map[yy][i+42] = TOKEN_40G;
    531                         map[yy][i+52] = TOKEN_40G;
    532                         map[yy][i+63] = TOKEN_40G;
    533                         map[yy][i+73] = TOKEN_40G;
    534 						n+=8; if (n==16) {break;}
    535 					}
    536                     break;
    537                 case 41:
    538 					for (i=0; i<len && (i+72)<len; i+=85) {
    539 						map[yy][i]    = TOKEN_40G;
    540                         map[yy][i+9] = TOKEN_40G;
    541                         map[yy][i+21] = TOKEN_40G;
    542                         map[yy][i+30] = TOKEN_40G;
    543                         map[yy][i+42] = TOKEN_40G;
    544                         map[yy][i+51] = TOKEN_40G;
    545                         map[yy][i+63] = TOKEN_40G;
    546                         map[yy][i+72] = TOKEN_40G;
    547 						n+=8; if (n==16) {break;}
    548 					}
    549                     break;
    550                 case 50:
    551 					for (i=0; i<len && (i+8)<len; i+=17) {
    552 						map[yy][i]    = TOKEN_50G;
    553                         map[yy][i+8]  = TOKEN_50G;
    554 						n+=2; if (n==20) {break;}
    555 					}
    556                     break;
    557                 case 100:
    558 					for (i=0; i<len && (i+12)<len; i+=17) {
    559 						map[yy][i]    = TOKEN_100G;
    560                         map[yy][i+4]  = TOKEN_100G;
    561                         map[yy][i+8]  = TOKEN_100G;
    562                         map[yy][i+12] = TOKEN_100G;
    563 						n+=4; if (n==40) {break;}
    564 					}
    565                     break;
    566                 /* HiGig */
    567                 case 11:
    568 					for (i=0; i<len && (i+42)<len; i+=85) {
    569 						map[yy][i]    = TOKEN_10G;
    570                         map[yy][i+42] = TOKEN_10G;
    571 						n+=2; if (n==4) {break;}
    572 					}
    573                     break;
    574                 case 21:
    575 					for (i=0; i<len && (i+63)<len; i+=85) {
    576 						map[yy][i]    = TOKEN_20G;
    577                         map[yy][i+21] = TOKEN_20G;
    578                         map[yy][i+42] = TOKEN_20G;
    579                         map[yy][i+63] = TOKEN_20G;
    580 						n+=4; if (n==8) {break;}
    581 					}
    582                     break;
    583                 case 27:
    584 					for (i=0; i<len; i+=17) {
    585 						map[yy][i]    = TOKEN_25G;
    586 						n+=1; if (n==10) {break;}
    587 					}
    588                     break;
    589                 case 42:
    590 					for (i=0; i<len && (i+74)<len; i+=85) {
    591 						map[yy][i]    = TOKEN_40G;
    592                         map[yy][i+10] = TOKEN_40G;
    593                         map[yy][i+21] = TOKEN_40G;
    594                         map[yy][i+31] = TOKEN_40G;
    595                         map[yy][i+42] = TOKEN_40G;
    596                         map[yy][i+52] = TOKEN_40G;
    597                         map[yy][i+63] = TOKEN_40G;
    598                         map[yy][i+74] = TOKEN_40G;
    599 						n+=8; if (n==16) {break;}
    600 					}
    601                     break;
    602                 case 43:
    603 					for (i=0; i<len && (i+72)<len; i+=85) {
    604 						map[yy][i]    = TOKEN_40G;
    605                         map[yy][i+9] = TOKEN_40G;
    606                         map[yy][i+21] = TOKEN_40G;
    607                         map[yy][i+30] = TOKEN_40G;
    608                         map[yy][i+42] = TOKEN_40G;
    609                         map[yy][i+51] = TOKEN_40G;
    610                         map[yy][i+63] = TOKEN_40G;
    611                         map[yy][i+72] = TOKEN_40G;
    612 						n+=8; if (n==16) {break;}
    613 					}
    614                     break;
    615                 case 53:
    616 					for (i=0; i<len && (i+8)<len; i+=17) {
    617 						map[yy][i]    = TOKEN_50G;
    618                         map[yy][i+8] = TOKEN_50G;
    619 						n+=2; if (n==20) {break;}
    620 					}
    621                     break;
    622                 case 106:
    623 					for (i=0; i<len && (i+12)<len; i+=17) {
    624 						map[yy][i]    = TOKEN_100G;
    625                         map[yy][i+4]  = TOKEN_100G;
    626                         map[yy][i+8]  = TOKEN_100G;
    627                         map[yy][i+12] = TOKEN_100G;
    628 						n+=4; if (n==40) {break;}
    629 					}
    630                     break;
    631                 default:
    632                     result = 0;
    633                     break;
    634             }
    635             break;
    636         case 545:
    637             switch(port_speed){
    638                 /* Ethernet */
    639                 case 10:
    640 					for (i=0; i<len; i+=36) {
    641 						map[yy][i]    = TOKEN_10G;
    642 						n+=1; if (n==4) {break;}
    643 					}
    644                     break;
    645                 case 20:
    646 					for (i=0; i<len && (i+17)<len; i+=36) {
    647 						map[yy][i]    = TOKEN_20G;
    648                         map[yy][i+17] = TOKEN_20G;
    649 						n+=2; if (n==8) {break;}
    650 					}
    651                     break;
    652                 case 40:
    653 					for (i=0; i<len && (i+25)<len; i+=36) {
    654 						map[yy][i]    = TOKEN_40G;
    655                         map[yy][i+8]  = TOKEN_40G;
    656                         map[yy][i+17] = TOKEN_40G;
    657                         map[yy][i+25] = TOKEN_40G;
    658 						n+=4; if (n==16) {break;}
    659 					}
    660                     break;
    661                 /* HiGig */
    662                 case 11:
    663 					for (i=0; i<len && (i+34)<len; i+=69) {
    664 						map[yy][i]    = TOKEN_10G;
    665                         map[yy][i+34] = TOKEN_10G;
    666 						n+=2; if (n==4) {break;}
    667 					}
    668                     break;
    669                 case 21:
    670 					for (i=0; i<len && (i+51)<len; i+=69) {
    671 						map[yy][i]    = TOKEN_20G;
    672                         map[yy][i+17] = TOKEN_20G;
    673                         map[yy][i+34] = TOKEN_20G;
    674                         map[yy][i+51] = TOKEN_20G;
    675 						n+=4; if (n==8) {break;}
    676 					}
    677                     break;
    678                 case 42:
    679 					for (i=0; i<len && (i+60)<len; i+=69) {
    680 						map[yy][i]    = TOKEN_40G;
    681                         map[yy][i+9]  = TOKEN_40G;
    682                         map[yy][i+17] = TOKEN_40G;
    683                         map[yy][i+26] = TOKEN_40G;
    684                         map[yy][i+34] = TOKEN_40G;
    685                         map[yy][i+43] = TOKEN_40G;
    686                         map[yy][i+51] = TOKEN_40G;
    687                         map[yy][i+60] = TOKEN_40G;
    688 						n+=8; if (n==16) {break;}
    689 					}
    690                     break;
    691                 default:
    692                     result = 0;
    693                     break;
    694             }
    695             break;
    696         default:
    697             result = 0;
    698             break;
    699     }
    700     return result;
    701 }
    702 #endif /* TDM_GH2_VECTOR_LIBRARY_H */