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_th_vec.h (22794B)


      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 BCM56960
      9  */
     10 
     11 #ifndef TDM_TH_VECTOR_LIBRARY_H
     12 #define TDM_TH_VECTOR_LIBRARY_H
     13 /**
     14 @name: tdm_th_vector_load
     15 @param:
     16 
     17 Generate vector at index in TDM vector map
     18  */
     19 int
     20 tdm_th_vec_load(unsigned short **map, int bw, int port_speed, int yy, int len, int num_ext_ports)
     21 {
     22 	int i, j=0, n=0;
     23 	
     24 	switch (bw)
     25 	{
     26 		case 850: /* TH */
     27 			switch (port_speed)
     28 			{
     29 				case 10:
     30 					map[yy][0] = TOKEN_10G; 
     31 					map[yy][53] = TOKEN_10G; 
     32 					map[yy][107] = TOKEN_10G; 
     33 					map[yy][160] = TOKEN_10G;
     34 					break;
     35 				case 11:
     36 					map[yy][0] = TOKEN_10G; 
     37 					map[yy][51] = TOKEN_10G; 
     38 					map[yy][102] = TOKEN_10G;
     39 					map[yy][153] = TOKEN_10G;
     40 					break;
     41 				case 20:
     42 					map[yy][0] = TOKEN_20G; 
     43 					map[yy][26] = TOKEN_20G; 
     44 					map[yy][53] = TOKEN_20G; 
     45 					map[yy][80] = TOKEN_20G;
     46 					map[yy][107] = TOKEN_20G; 
     47 					map[yy][133] = TOKEN_20G; 
     48 					map[yy][160] = TOKEN_20G; 
     49 					map[yy][187] = TOKEN_20G;
     50 					break;
     51 				case 21:
     52 					map[yy][0] = TOKEN_20G; 
     53 					map[yy][25] = TOKEN_20G; 
     54 					map[yy][51] = TOKEN_20G; 
     55 					map[yy][76] = TOKEN_20G;
     56 					map[yy][102] = TOKEN_20G; 
     57 					map[yy][127] = TOKEN_20G; 
     58 					map[yy][153] = TOKEN_20G; 
     59 					map[yy][179] = TOKEN_20G;
     60 					break;
     61 				case 25:
     62 					map[yy][0] = TOKEN_25G;
     63 					map[yy][20] = TOKEN_25G;
     64 					map[yy][42] = TOKEN_25G;
     65 					map[yy][64] = TOKEN_25G;
     66 					map[yy][86] = TOKEN_25G;
     67 					map[yy][107] = TOKEN_25G;
     68 					map[yy][127] = TOKEN_25G;
     69 					map[yy][149] = TOKEN_25G;
     70 					map[yy][171] = TOKEN_25G;
     71 					map[yy][193] = TOKEN_25G;
     72 					break;
     73 				case 27:
     74 					map[yy][0] = TOKEN_25G;
     75 					map[yy][20] = TOKEN_25G;
     76 					map[yy][41] = TOKEN_25G;
     77 					map[yy][61] = TOKEN_25G;
     78 					map[yy][82] = TOKEN_25G;
     79 					map[yy][102] = TOKEN_25G;
     80 					map[yy][122] = TOKEN_25G;
     81 					map[yy][143] = TOKEN_25G;
     82 					map[yy][164] = TOKEN_25G;
     83 					map[yy][185] = TOKEN_25G;
     84 					break;
     85 				case 40:
     86 					map[yy][0] = TOKEN_40G;
     87 					map[yy][13] = TOKEN_40G;
     88 					map[yy][26] = TOKEN_40G;
     89 					map[yy][39] = TOKEN_40G;
     90 					map[yy][53] = TOKEN_40G;
     91 					map[yy][66] = TOKEN_40G;
     92 					map[yy][80] = TOKEN_40G;
     93 					map[yy][93] = TOKEN_40G;
     94 					map[yy][107] = TOKEN_40G;
     95 					map[yy][120] = TOKEN_40G;
     96 					map[yy][133] = TOKEN_40G;
     97 					map[yy][146] = TOKEN_40G;
     98 					map[yy][160] = TOKEN_40G;
     99 					map[yy][173] = TOKEN_40G;
    100 					map[yy][187] = TOKEN_40G;
    101 					map[yy][200] = TOKEN_40G;
    102 					break;
    103 				case 42:
    104 					map[yy][0] = TOKEN_40G;
    105 					map[yy][12] = TOKEN_40G;
    106 					map[yy][25] = TOKEN_40G;
    107 					map[yy][38] = TOKEN_40G;
    108 					map[yy][51] = TOKEN_40G;
    109 					map[yy][63] = TOKEN_40G;
    110 					map[yy][76] = TOKEN_40G;
    111 					map[yy][89] = TOKEN_40G;
    112 					map[yy][102] = TOKEN_40G;
    113 					map[yy][114] = TOKEN_40G;
    114 					map[yy][127] = TOKEN_40G;
    115 					map[yy][140] = TOKEN_40G;
    116 					map[yy][153] = TOKEN_40G;
    117 					map[yy][166] = TOKEN_40G;
    118 					map[yy][179] = TOKEN_40G;
    119 					map[yy][192] = TOKEN_40G;
    120 					break;
    121 				case 43:
    122 					map[yy][4] = TOKEN_40G;
    123 					map[yy][11] = TOKEN_40G;
    124 					map[yy][18] = TOKEN_40G;
    125 					map[yy][25] = TOKEN_40G;
    126 					map[yy][40] = TOKEN_40G;
    127 					map[yy][55] = TOKEN_40G;
    128 					map[yy][70] = TOKEN_40G;
    129 					map[yy][85] = TOKEN_40G;
    130 					map[yy][100] = TOKEN_40G;
    131 					map[yy][115] = TOKEN_40G;
    132 					map[yy][130] = TOKEN_40G;
    133 					map[yy][145] = TOKEN_40G;
    134 					map[yy][160] = TOKEN_40G;
    135 					map[yy][175] = TOKEN_40G;
    136 					map[yy][190] = TOKEN_40G;
    137 					break;
    138 				case 44:
    139 					map[yy][5] = TOKEN_40G;
    140 					map[yy][12] = TOKEN_40G;
    141 					map[yy][19] = TOKEN_40G;
    142 					map[yy][30] = TOKEN_40G;
    143 					map[yy][45] = TOKEN_40G;
    144 					map[yy][60] = TOKEN_40G;
    145 					map[yy][75] = TOKEN_40G;
    146 					map[yy][90] = TOKEN_40G;
    147 					map[yy][105] = TOKEN_40G;
    148 					map[yy][120] = TOKEN_40G;
    149 					map[yy][135] = TOKEN_40G;
    150 					map[yy][150] = TOKEN_40G;
    151 					map[yy][165] = TOKEN_40G;
    152 					map[yy][180] = TOKEN_40G;
    153 					map[yy][195] = TOKEN_40G;
    154 					break;
    155 				case 45:
    156 					map[yy][6] = TOKEN_40G;
    157 					map[yy][13] = TOKEN_40G;
    158 					map[yy][20] = TOKEN_40G;
    159 					map[yy][35] = TOKEN_40G;
    160 					map[yy][50] = TOKEN_40G;
    161 					map[yy][65] = TOKEN_40G;
    162 					map[yy][80] = TOKEN_40G;
    163 					map[yy][95] = TOKEN_40G;
    164 					map[yy][110] = TOKEN_40G;
    165 					map[yy][125] = TOKEN_40G;
    166 					map[yy][140] = TOKEN_40G;
    167 					map[yy][155] = TOKEN_40G;
    168 					map[yy][170] = TOKEN_40G;
    169 					map[yy][185] = TOKEN_40G;
    170 					map[yy][200] = TOKEN_40G;
    171 					break;
    172 				case 50:
    173 					map[yy][0] = TOKEN_50G;
    174 					map[yy][10] = TOKEN_50G;
    175 					map[yy][20] = TOKEN_50G;
    176 					map[yy][32] = TOKEN_50G;
    177 					map[yy][42] = TOKEN_50G;
    178 					map[yy][53] = TOKEN_50G;
    179 					map[yy][64] = TOKEN_50G;
    180 					map[yy][74] = TOKEN_50G;
    181 					map[yy][86] = TOKEN_50G;
    182 					map[yy][96] = TOKEN_50G;
    183 					map[yy][107] = TOKEN_50G;
    184 					map[yy][117] = TOKEN_50G;
    185 					map[yy][127] = TOKEN_50G;
    186 					map[yy][139] = TOKEN_50G;
    187 					map[yy][149] = TOKEN_50G;
    188 					map[yy][160] = TOKEN_50G;					
    189 					map[yy][171] = TOKEN_50G;
    190 					map[yy][181] = TOKEN_50G;
    191 					map[yy][193] = TOKEN_50G;
    192 					map[yy][203] = TOKEN_50G;
    193 					break;
    194 				case 53:
    195 					map[yy][0] = TOKEN_50G;
    196 					map[yy][10] = TOKEN_50G;
    197 					map[yy][20] = TOKEN_50G;
    198 					map[yy][31] = TOKEN_50G;
    199 					map[yy][41] = TOKEN_50G;
    200 					map[yy][51] = TOKEN_50G;
    201 					map[yy][61] = TOKEN_50G;
    202 					map[yy][71] = TOKEN_50G;
    203 					map[yy][82] = TOKEN_50G;
    204 					map[yy][92] = TOKEN_50G;
    205 					map[yy][102] = TOKEN_50G;
    206 					map[yy][112] = TOKEN_50G;
    207 					map[yy][122] = TOKEN_50G;
    208 					map[yy][133] = TOKEN_50G;
    209 					map[yy][143] = TOKEN_50G;
    210 					map[yy][153] = TOKEN_50G;					
    211 					map[yy][164] = TOKEN_50G;
    212 					map[yy][174] = TOKEN_50G;
    213 					map[yy][185] = TOKEN_50G;
    214 					map[yy][195] = TOKEN_50G;
    215 					break;					
    216 				case 100:
    217 					for (i=0; i<len; i+=VECTOR_QUANTA_F) {
    218 						map[yy][i] = TOKEN_100G;
    219 						n++;
    220 						if ( (j==4)||(j==5)||(j==9)||(j==10)||(j==14)||(j==15)||(j==19)||(j==24)||(j==25)||(j==29)||(j==30)||(j==34)||(j==35) ) {
    221 							i++;
    222 						}
    223 						j++;
    224 						if (n==((port_speed*10)/BW_QUANTA)) {
    225 							break;
    226 						}
    227 					}				
    228 					break;
    229 				case 106:
    230 					for (i=0; i<len; i+=VECTOR_QUANTA_F) {
    231 						map[yy][i] = TOKEN_100G;
    232 						n++;
    233 						if ( (j==5)||(j==15)||(j==25)||(j==30)||(j==35) ) {
    234 							i++;
    235 						}
    236 						j++;
    237 						if (n==((100*10)/BW_QUANTA)) {
    238 							break;
    239 						}
    240 					}
    241 					break;
    242 				case 107:
    243 					for (i=0; i<len; i+=VECTOR_QUANTA_F) {
    244 						map[yy][i] = TOKEN_100G;
    245 						n++;
    246 						if ( (j==0)||(j==1)||(j==2) ) {
    247 							i+=2;
    248 						}
    249 						j++;
    250 						if (n==39) {
    251 							break;
    252 						}
    253 					}
    254 					break;
    255 				default:
    256 					return 0;
    257 					break;
    258 			}
    259 			break;
    260 		case 766:
    261 		case 765: /* TH */
    262 			switch (port_speed)
    263 			{
    264 				case 10:
    265 					for (i=0; i<len; i+=(VECTOR_QUANTA_S*12)) {
    266 						map[yy][i] = TOKEN_10G;
    267 						n++;
    268 						if (n==((port_speed*10)/BW_QUANTA)) {
    269 							break;
    270 						}
    271 					}
    272 					break;			
    273 				case 11:
    274 					for (i=0; i<len; i+=((VECTOR_QUANTA_F*9)+1)) {
    275 						map[yy][i] = TOKEN_10G;
    276 						n++;
    277 						if (n==((10*10)/BW_QUANTA)) {
    278 							break;
    279 						}
    280 					}
    281 					break;
    282 				case 20:
    283 					for (i=0; i<len; i+=(VECTOR_QUANTA_S*6)) {
    284 						map[yy][i] = TOKEN_20G;
    285 						n++;
    286 						if (n==((port_speed*10)/BW_QUANTA)) {
    287 							break;
    288 						}
    289 					}
    290 					break;					
    291 				case 21:
    292 					for (i=0; i<len; i+=((VECTOR_QUANTA_F*4)+3)) {
    293 						map[yy][i] = TOKEN_20G;
    294 						n++;
    295 						if (n==((20*10)/BW_QUANTA)) {
    296 							break;
    297 						}
    298 					}
    299 					break;
    300 				case 25:
    301 					map[yy][0] = TOKEN_25G;
    302 					map[yy][20] = TOKEN_25G;
    303 					map[yy][39] = TOKEN_25G;
    304 					map[yy][58] = TOKEN_25G;
    305 					map[yy][77] = TOKEN_25G;
    306 					map[yy][96] = TOKEN_25G;
    307 					map[yy][116] = TOKEN_25G;
    308 					map[yy][135] = TOKEN_25G;
    309 					map[yy][154] = TOKEN_25G;
    310 					map[yy][173] = TOKEN_25G;
    311 					break;				
    312 				case 27:
    313 					for (i=0; i<len; i+=((VECTOR_QUANTA_S*4)+2)) {
    314 						map[yy][i] = TOKEN_25G;
    315 						n++;
    316 						if ( (j==1)||(j==2)||(j==6)||(j==7) ) {
    317 							i++;
    318 						}
    319 						j++;						
    320 						if (n==((25*10)/BW_QUANTA)) {
    321 							break;
    322 						}
    323 					}
    324 					break;
    325 				case 40:
    326 					for (i=0; i<len; i+=(VECTOR_QUANTA_S*3)) {
    327 						map[yy][i] = TOKEN_40G;
    328 						n++;
    329 						if (n==((port_speed*10)/BW_QUANTA)) {
    330 							break;
    331 						}
    332 					}
    333 					break;					
    334 				case 42:
    335 					for (i=0; i<len; i+=((VECTOR_QUANTA_F*2)+1)) {
    336 						map[yy][i] = TOKEN_40G;
    337 						n++;
    338 						if ((j%2)==0) {
    339 							i++; j=0;
    340 						}
    341 						j++;						
    342 						if (n==((port_speed*10)/BW_QUANTA)) {
    343 							break;
    344 						}
    345 					}
    346 					break;
    347 				case 50:
    348 					for (i=0; i<len; i+=(VECTOR_QUANTA_F*2)) {
    349 						map[yy][i] = TOKEN_50G;
    350 						n++;
    351 						if ( (j==2)||(j==4)||(j==7)||(j==9)||(j==12)||(j==14)||(j==17) ) {
    352 							i--;
    353 						}
    354 						j++;						
    355 						if (n==((port_speed*10)/BW_QUANTA)) {
    356 							break;
    357 						}
    358 					}
    359 					break;
    360 				case 53:
    361 					map[yy][0] = TOKEN_50G;
    362 					map[yy][10] = TOKEN_50G;
    363 					map[yy][19] = TOKEN_50G;
    364 					map[yy][28] = TOKEN_50G;
    365 					map[yy][38] = TOKEN_50G;
    366 					map[yy][46] = TOKEN_50G;
    367 					map[yy][56] = TOKEN_50G;
    368 					map[yy][65] = TOKEN_50G;
    369 					map[yy][74] = TOKEN_50G;
    370 					map[yy][84] = TOKEN_50G;
    371 					map[yy][92] = TOKEN_50G;
    372 					map[yy][102] = TOKEN_50G;
    373 					map[yy][111] = TOKEN_50G;
    374 					map[yy][120] = TOKEN_50G;
    375 					map[yy][130] = TOKEN_50G;
    376 					map[yy][138] = TOKEN_50G;
    377 					map[yy][148] = TOKEN_50G;
    378 					map[yy][157] = TOKEN_50G;
    379 					map[yy][166] = TOKEN_50G;
    380 					map[yy][176] = TOKEN_50G;
    381 					break;
    382 				case 100:
    383 					for (i=0; i<len; i+=(VECTOR_QUANTA_F)) {
    384 						map[yy][i] = TOKEN_100G;
    385 						n++;
    386 						if ((((j+1)%5)==0)&&(j<40)) {
    387 							i--;
    388 						}
    389 						j++;						
    390 						if (n==((port_speed*10)/BW_QUANTA)) {
    391 							break;
    392 						}
    393 					}
    394 					break;				
    395 				case 106:
    396 					for (i=0; i<len; i+=VECTOR_QUANTA_S) {
    397 						map[yy][i] = TOKEN_100G;
    398 						n++; j++;
    399 						if (j==1||j==2||j==3) {
    400 							i++;
    401 						}
    402 						if (j==5) {
    403 							j=0;
    404 						}
    405 						if (n==((100*10)/BW_QUANTA)) {
    406 							break;
    407 						}
    408 					}
    409 					break;
    410 				default:
    411 					return 0;
    412 					break;
    413 			}
    414 			break;
    415 		case 672: /* TH */
    416 			switch (port_speed)
    417 			{
    418 				case 100:
    419 					for (i=0; i<len; i+=VECTOR_QUANTA_S) {
    420 						map[yy][i] = TOKEN_100G;
    421 						n++;
    422 						if ( ((j+1)%5==0)&&(j<40)) {
    423 							i++;
    424 						}
    425 						j++;
    426 						if (n==((port_speed*10)/BW_QUANTA)) {
    427 							break;
    428 						}
    429 					}
    430 					break;
    431 				case 106:
    432 					for (i=0; i<len; i+=VECTOR_QUANTA_S) {
    433 						map[yy][i] = TOKEN_100G;
    434 						n++;
    435 						if (n==((100*10)/BW_QUANTA)) {
    436 							break;
    437 						}
    438 					}
    439 					break;
    440 				case 50:
    441 					map[yy][0] = TOKEN_50G;
    442 					map[yy][8] = TOKEN_50G;
    443 					map[yy][16] = TOKEN_50G;
    444 					map[yy][25] = TOKEN_50G;
    445 					map[yy][33] = TOKEN_50G;
    446 					map[yy][42] = TOKEN_50G;
    447 					map[yy][50] = TOKEN_50G;
    448 					map[yy][58] = TOKEN_50G;
    449 					map[yy][67] = TOKEN_50G;
    450 					map[yy][75] = TOKEN_50G;
    451 					map[yy][84] = TOKEN_50G;
    452 					map[yy][92] = TOKEN_50G;
    453 					map[yy][100] = TOKEN_50G;
    454 					map[yy][109] = TOKEN_50G;
    455 					map[yy][117] = TOKEN_50G;
    456 					map[yy][126] = TOKEN_50G;
    457 					map[yy][134] = TOKEN_50G;
    458 					map[yy][142] = TOKEN_50G;
    459 					map[yy][151] = TOKEN_50G;
    460 					map[yy][159] = TOKEN_50G;
    461 					break;
    462 				case 53:
    463 					for (i=0; i<len; i+=(VECTOR_QUANTA_S*2)) {
    464 						map[yy][i] = TOKEN_50G;
    465 						n++;
    466 						if (n==((50*10)/BW_QUANTA)) {
    467 							break;
    468 						}
    469 					}
    470 					break;
    471 				case 40:
    472 					map[yy][0] = TOKEN_40G;
    473 					map[yy][10] = TOKEN_40G;
    474 					map[yy][21] = TOKEN_40G;
    475 					map[yy][31] = TOKEN_40G;
    476 					map[yy][42] = TOKEN_40G;
    477 					map[yy][52] = TOKEN_40G;
    478 					map[yy][63] = TOKEN_40G;
    479 					map[yy][73] = TOKEN_40G;
    480 					map[yy][84] = TOKEN_40G;
    481 					map[yy][94] = TOKEN_40G;
    482 					map[yy][105] = TOKEN_40G;
    483 					map[yy][115] = TOKEN_40G;
    484 					map[yy][126] = TOKEN_40G;
    485 					map[yy][136] = TOKEN_40G;
    486 					map[yy][147] = TOKEN_40G;
    487 					map[yy][157] = TOKEN_40G;
    488 					break;
    489 				case 42:
    490 					for (i=0; i<len; i+=(VECTOR_QUANTA_F*2)) {
    491 						map[yy][i] = TOKEN_40G;
    492 						n++;
    493 						if (n==((40*10)/BW_QUANTA)) {
    494 							break;
    495 						}
    496 					}
    497 					break;
    498 				case 25:
    499 					map[yy][0] = TOKEN_25G;
    500 					map[yy][16] = TOKEN_25G;
    501 					map[yy][33] = TOKEN_25G;
    502 					map[yy][50] = TOKEN_25G;
    503 					map[yy][67] = TOKEN_25G;
    504 					map[yy][84] = TOKEN_25G;
    505 					map[yy][100] = TOKEN_25G;
    506 					map[yy][117] = TOKEN_25G;
    507 					map[yy][134] = TOKEN_25G;
    508 					map[yy][151] = TOKEN_25G;
    509 					break;
    510 				case 27:
    511 					for (i=0; i<len; i+=(VECTOR_QUANTA_S*4)) {
    512 						map[yy][i] = TOKEN_25G;
    513 						n++;
    514 						if (n==((25*10)/BW_QUANTA)) {
    515 							break;
    516 						}
    517 					}
    518 					break;
    519 				case 20:
    520 					map[yy][0] = TOKEN_20G;
    521 					map[yy][21] = TOKEN_20G;
    522 					map[yy][42] = TOKEN_20G;
    523 					map[yy][63] = TOKEN_20G;
    524 					map[yy][84] = TOKEN_20G;
    525 					map[yy][105] = TOKEN_20G;
    526 					map[yy][126] = TOKEN_20G;
    527 					map[yy][147] = TOKEN_20G;
    528 					break;					
    529 				case 21:
    530 					for (i=0; i<len; i+=(VECTOR_QUANTA_F*4)) {
    531 						map[yy][i] = TOKEN_20G;
    532 						n++;
    533 						if (n==((20*10)/BW_QUANTA)) {
    534 							break;
    535 						}
    536 					}
    537 					break;	
    538 				case 10:
    539 					map[yy][0] = TOKEN_10G;
    540 					map[yy][42] = TOKEN_10G;
    541 					map[yy][84] = TOKEN_10G;
    542 					map[yy][126] = TOKEN_10G;
    543 					break;						
    544 				case 11:
    545 					for (i=0; i<len; i+=(VECTOR_QUANTA_S*10)) {
    546 						map[yy][i] = TOKEN_10G;
    547 						n++;
    548 						if (n==((10*10)/BW_QUANTA)) {
    549 							break;
    550 						}
    551 					}
    552 					break;
    553 				default:
    554 					return 0;
    555 					break;
    556 			}
    557 			break;
    558 		case 645: /* TH */
    559 			switch (port_speed)
    560 			{
    561 				case 100:
    562 					for (i=0; i<len; i+=VECTOR_QUANTA_S) {
    563 						map[yy][i] = TOKEN_100G;
    564 						n++;
    565 						if (n==((port_speed*10)/BW_QUANTA)) {
    566 							break;
    567 						}
    568 					}
    569 					break;	
    570 				case 50:
    571 					for (i=0; i<len; i+=(VECTOR_QUANTA_S*2)) {
    572 						map[yy][i] = TOKEN_50G;
    573 						n++;
    574 						if (n==((port_speed*10)/BW_QUANTA)) {
    575 							break;
    576 						}
    577 					}
    578 					break;
    579 				case 42:
    580 					map[yy][0] = TOKEN_40G;
    581 					map[yy][9] = TOKEN_40G;
    582 					map[yy][19] = TOKEN_40G;
    583 					map[yy][28] = TOKEN_40G;
    584 					map[yy][38] = TOKEN_40G;
    585 					map[yy][47] = TOKEN_40G;
    586 					map[yy][57] = TOKEN_40G;
    587 					map[yy][66] = TOKEN_40G;
    588 					map[yy][76] = TOKEN_40G;
    589 					map[yy][85] = TOKEN_40G;
    590 					map[yy][95] = TOKEN_40G;
    591 					map[yy][104] = TOKEN_40G;
    592 					map[yy][114] = TOKEN_40G;
    593 					map[yy][124] = TOKEN_40G;
    594 					map[yy][134] = TOKEN_40G;
    595 					map[yy][144] = TOKEN_40G;
    596 					break;					
    597 				case 40:
    598 					for (i=0; i<len; i+=(VECTOR_QUANTA_F*2)) {
    599 						map[yy][i] = TOKEN_40G;
    600 						n++;
    601 						if (n==((port_speed*10)/BW_QUANTA)) {
    602 							break;
    603 						}
    604 					}
    605 					break;
    606 				case 25:
    607 					for (i=0; i<len; i+=(VECTOR_QUANTA_S*4)) {
    608 						map[yy][i] = TOKEN_25G;
    609 						n++;
    610 						if (n==((port_speed*10)/BW_QUANTA)) {
    611 							break;
    612 						}
    613 					}
    614 					break;
    615 				case 21:
    616 					map[yy][0] = TOKEN_20G;
    617 					map[yy][19] = TOKEN_20G;
    618 					map[yy][38] = TOKEN_20G;
    619 					map[yy][57] = TOKEN_20G;
    620 					map[yy][76] = TOKEN_20G;
    621 					map[yy][95] = TOKEN_20G;
    622 					map[yy][114] = TOKEN_20G;
    623 					map[yy][134] = TOKEN_20G;
    624 					break;						
    625 				case 20:
    626 					for (i=0; i<len; i+=(VECTOR_QUANTA_F*4)) {
    627 						map[yy][i] = TOKEN_20G;
    628 						n++;
    629 						if (n==((port_speed*10)/BW_QUANTA)) {
    630 							break;
    631 						}
    632 					}
    633 					break;
    634 				case 11:
    635 					map[yy][0] = TOKEN_10G;
    636 					map[yy][38] = TOKEN_10G;
    637 					map[yy][76] = TOKEN_10G;
    638 					map[yy][114] = TOKEN_10G;
    639 					break;					
    640 				case 10:
    641 					for (i=0; i<len; i+=(VECTOR_QUANTA_S*10)) {
    642 						map[yy][i] = TOKEN_10G;
    643 						n++;
    644 						if (n==((port_speed*10)/BW_QUANTA)) {
    645 							break;
    646 						}
    647 					}
    648 					break;
    649 				default:
    650 					return 0;
    651 					break;					
    652 			}
    653 			break;
    654 		case 545: /* TH */
    655 			switch (port_speed)
    656 			{
    657 				case 10:
    658 					for (i=0; i<len; i+=((VECTOR_QUANTA_F*6)+3)) {
    659 						map[yy][i] = TOKEN_10G;
    660 						n++;
    661 						if (n==((port_speed*10)/BW_QUANTA)) {
    662 							break;
    663 						}
    664 					}
    665 					break;			
    666 				case 11:
    667 					for (i=0; i<len; i+=((VECTOR_QUANTA_F*6)+2)) {
    668 						map[yy][i] = TOKEN_10G;
    669 						n++;
    670 						if (n==((10*10)/BW_QUANTA)) {
    671 							break;
    672 						}
    673 					}
    674 					break;
    675 				case 20:
    676 					map[yy][0] = TOKEN_20G;
    677 					map[yy][16] = TOKEN_20G;
    678 					map[yy][33] = TOKEN_20G;
    679 					map[yy][49] = TOKEN_20G;
    680 					map[yy][66] = TOKEN_20G;
    681 					map[yy][82] = TOKEN_20G;
    682 					map[yy][99] = TOKEN_20G;
    683 					map[yy][116] = TOKEN_20G;
    684 					break;						
    685 				case 21:
    686 					for (i=0; i<len; i+=((VECTOR_QUANTA_F*3)+1)) {
    687 						map[yy][i] = TOKEN_20G;
    688 						n++;
    689 						if (n==((port_speed*10)/BW_QUANTA)) {
    690 							break;
    691 						}
    692 					}
    693 					break;
    694 				case 40:
    695 					map[yy][0] = TOKEN_40G;
    696 					map[yy][8] = TOKEN_40G;
    697 					map[yy][16] = TOKEN_40G;
    698 					map[yy][24] = TOKEN_40G;
    699 					map[yy][33] = TOKEN_40G;
    700 					map[yy][41] = TOKEN_40G;
    701 					map[yy][49] = TOKEN_40G;
    702 					map[yy][57] = TOKEN_40G;
    703 					map[yy][66] = TOKEN_40G;
    704 					map[yy][74] = TOKEN_40G;
    705 					map[yy][82] = TOKEN_40G;
    706 					map[yy][90] = TOKEN_40G;
    707 					map[yy][99] = TOKEN_40G;
    708 					map[yy][108] = TOKEN_40G;
    709 					map[yy][116] = TOKEN_40G;
    710 					map[yy][125] = TOKEN_40G;
    711 					break;						
    712 				case 42:
    713 					for (i=0; i<len; i+=((VECTOR_QUANTA_F)+3)) {
    714 						map[yy][i] = TOKEN_40G;
    715 						n++;
    716 						if (n==((port_speed*10)/BW_QUANTA)) {
    717 							break;
    718 						}
    719 					}
    720 					break;
    721 				default:
    722 					return 0;
    723 					break;
    724 			}
    725 			break;
    726 /* ################################################################################################################## */
    727 		case 760: /* TD2/+ */
    728 			switch (port_speed)
    729 			{
    730 				case 1:
    731 					map[yy][0] = TOKEN_1G;
    732 					break;
    733 				case 10:
    734 				case 11:
    735 					map[yy][0] = TOKEN_10G;
    736 					map[yy][48] = TOKEN_10G;
    737 					map[yy][96] = TOKEN_10G;
    738 					map[yy][144] = TOKEN_10G;
    739 					break;
    740 				case 12:
    741 					map[yy][0] = TOKEN_12G;
    742 					map[yy][36] = TOKEN_12G;
    743 					map[yy][72] = TOKEN_12G;
    744 					map[yy][120] = TOKEN_12G;
    745 					map[yy][156] = TOKEN_12G;
    746 					break;
    747 				case 20:
    748 				case 21:
    749 					for (i=0; i<len; i+=(VECTOR_QUANTA_S*6)) {
    750 						map[yy][i] = TOKEN_20G;
    751 					}
    752 					break;
    753 				case 40:
    754 				case 41:
    755 				case 42:
    756 				case 43:
    757 				case 44:
    758 				case 45:
    759 					for (i=0; i<len; i+=(VECTOR_QUANTA_S*3)) {
    760 						map[yy][i] = TOKEN_40G;
    761 					}					
    762 					break;
    763 				case 100:
    764 				case 106:
    765 				case 107:
    766 					for (i=0; i<len; i+=(VECTOR_QUANTA_S*6)) {
    767 						map[yy][i] = TOKEN_100G;
    768 						map[yy][i+5] = TOKEN_100G;
    769 						map[yy][i+10] = TOKEN_100G;
    770 						map[yy][i+15] = TOKEN_100G;
    771 						map[yy][i+19] = TOKEN_100G;
    772 					}
    773 					break;
    774 				case 108:
    775 					for (i=0; i<len; i+=(VECTOR_QUANTA_S)) {
    776 						map[yy][i] = TOKEN_100G;
    777 					}
    778 					break;
    779 				case 109:
    780 					for (i=0; i<len; i+=(VECTOR_QUANTA_S)) {
    781 						map[yy][i] = TOKEN_100G;
    782 					}
    783 					for (i=(VECTOR_QUANTA_S*5); i<len; i+=(VECTOR_QUANTA_S*6)) {
    784 						map[yy][i] = num_ext_ports;
    785 					}
    786 					break;				
    787 				case 120:
    788 					for (i=0; i<len; i+=(VECTOR_QUANTA_S)) {
    789 						map[yy][i] = TOKEN_120G;
    790 					}
    791 					break;
    792 				default:
    793 					return 0;
    794 					break;
    795 			}
    796 			break;			
    797 		case 609: /* TD2/+ */
    798 		case 608:
    799 			switch (port_speed)
    800 			{
    801 					case 1:
    802 						map[yy][0] = TOKEN_1G;
    803 						break;
    804 					case 10:
    805 					case 11:
    806 						map[yy][0] = TOKEN_10G;
    807 						map[yy][36] = TOKEN_10G;
    808 						map[yy][72] = TOKEN_10G;
    809 						map[yy][108] = TOKEN_10G;
    810 						break;
    811 					case 12:
    812 						n=0;
    813 						for (i=0; i<len; i+=(len/5)) {
    814 							map[yy][i] = TOKEN_40G;
    815 							if ((++n)==5) {
    816 								break;
    817 							}	
    818 						}
    819 						break;
    820 					case 20:
    821 					case 21:
    822 						map[yy][0] = TOKEN_20G;
    823 						map[yy][36] = TOKEN_20G;
    824 						map[yy][72] = TOKEN_20G;
    825 						map[yy][108] = TOKEN_20G;
    826 						map[yy][18] = TOKEN_20G;
    827 						map[yy][54] = TOKEN_20G;
    828 						map[yy][90] = TOKEN_20G;
    829 						map[yy][126] = TOKEN_20G;
    830 						break;					
    831 					case 40:
    832 					case 41:
    833 					case 42:
    834 					case 43:
    835 					case 44:
    836 					case 45:
    837 						n=0;
    838 						for (i=0; i<len; i+=(len/16)) {
    839 							map[yy][i] = TOKEN_40G;
    840 							if ((++n)==16) {
    841 								break;
    842 							}	
    843 						}
    844 						break;
    845 					case 100:
    846 					case 106:
    847 					case 107:
    848 						n=0;
    849 						for (i=0; i<len; i+=(len/40)) {
    850 							map[yy][i] = TOKEN_100G;
    851 							if ((++n)==40) {
    852 								break;
    853 							}
    854 						}
    855 						break;					
    856 					case 120:
    857 						n=0;
    858 						for (i=0; i<len; i+=(len/48)) {
    859 							map[yy][i] = TOKEN_120G;
    860 							if ((++n)==48) {
    861 								break;
    862 							}
    863 						}
    864 						break;
    865 					default:
    866 						return 0;
    867 						break;
    868 			}
    869 			break;
    870 		case 518: /* TD2/+ */
    871 		case 517:
    872 			switch (port_speed)
    873 			{
    874 					case 1:
    875 						map[yy][0] = TOKEN_1G;
    876 						break;
    877 					case 10:
    878 					case 11:
    879 						n=0;
    880 						for (i=0; i<len; i+=(len/4)) {
    881 							map[yy][i] = TOKEN_10G;
    882 							if ((++n)==4) {
    883 								break;
    884 							}
    885 						}
    886 						break;
    887 					case 12:
    888 						n=0;
    889 						for (i=0; i<len; i+=(len/5)) {
    890 							map[yy][i] = TOKEN_12G;
    891 							if ((++n)==5) {
    892 								break;
    893 							}
    894 						}
    895 						break;
    896 					case 20:
    897 					case 21:
    898 						n=0;
    899 						for (i=0; i<len; i+=(len/8)) {
    900 							map[yy][i] = TOKEN_20G;
    901 							if ((++n)==8) {
    902 								break;
    903 							}	
    904 						}
    905 						break;					
    906 					case 40:
    907 					case 41:
    908 					case 42:
    909 					case 43:
    910 					case 44:
    911 					case 45:
    912 						n=0;
    913 						for (i=0; i<len; i+=(len/16)) {
    914 							map[yy][i] = TOKEN_40G;
    915 							if ((++n)==16) {
    916 								break;
    917 							}
    918 						}
    919 						break;
    920 					default:
    921 						return 0;
    922 						break;
    923 			}
    924 			break;
    925 		case 415: /* TD2/+ */
    926 		case 416:
    927 			switch (port_speed)
    928 			{
    929 					case 1:
    930 						map[yy][0] = TOKEN_1G;
    931 						break;
    932 					case 10:
    933 					case 11:
    934 						map[yy][0] = TOKEN_10G;
    935 						map[yy][24] = TOKEN_10G;
    936 						map[yy][48] = TOKEN_10G;
    937 						map[yy][72] = TOKEN_10G;
    938 						break;
    939 					case 12:
    940 						map[yy][0] = TOKEN_12G;
    941 						map[yy][19] = TOKEN_12G;
    942 						map[yy][39] = TOKEN_12G;
    943 						map[yy][58] = TOKEN_12G;
    944 						map[yy][78] = TOKEN_12G;
    945 						break;
    946 					case 20:
    947 					case 21:
    948 						map[yy][0] = TOKEN_20G;
    949 						map[yy][12] = TOKEN_20G;
    950 						map[yy][24] = TOKEN_20G;
    951 						map[yy][36] = TOKEN_20G;
    952 						map[yy][48] = TOKEN_20G;
    953 						map[yy][60] = TOKEN_20G;
    954 						map[yy][72] = TOKEN_20G;
    955 						map[yy][84] = TOKEN_20G;						
    956 						break;					
    957 					case 40:
    958 					case 41:
    959 					case 42:
    960 					case 43:
    961 					case 44:
    962 					case 45:
    963 						map[yy][0] = TOKEN_40G;
    964 						map[yy][6] = TOKEN_40G;
    965 						map[yy][12] = TOKEN_40G;
    966 						map[yy][18] = TOKEN_40G;
    967 						map[yy][24] = TOKEN_40G;
    968 						map[yy][30] = TOKEN_40G;
    969 						map[yy][36] = TOKEN_40G;
    970 						map[yy][42] = TOKEN_40G;
    971 						map[yy][48] = TOKEN_40G;
    972 						map[yy][54] = TOKEN_40G;
    973 						map[yy][60] = TOKEN_40G;
    974 						map[yy][66] = TOKEN_40G;
    975 						map[yy][72] = TOKEN_40G;
    976 						map[yy][78] = TOKEN_40G;
    977 						map[yy][84] = TOKEN_40G;
    978 						map[yy][90] = TOKEN_40G;						
    979 						break;
    980 					default:
    981 						return 0;
    982 						break;
    983 			}
    984 			break;			
    985 		default:
    986 			switch (port_speed)
    987 			{
    988 				default:
    989 					return 0;
    990 					break;
    991 			}
    992 	}
    993 	
    994 	return 1;
    995 	
    996 }
    997 #endif /* TDM_TH_VECTOR_LIBRARY_H */