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_ap_vec.h (10888B)


      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 BCM56860
      9  */
     10 
     11 #ifndef TDM_AP_VECTOR_LIBRARY_H
     12 #define TDM_AP_VECTOR_LIBRARY_H
     13 /**
     14 @name: tdm_ap_vector_load
     15 @param:
     16 
     17 Generate vector at index in TDM vector map
     18  */
     19 int
     20 tdm_ap_vec_load(unsigned short **map, int bw, int port_speed, int yy, int len, int num_ext_ports)
     21 {
     22 	int i, n=0;
     23 	
     24 	switch (bw)
     25 	{
     26 /* ################################################################################################################## */
     27     case 933: /*NAK AP*/
     28 			switch (port_speed)
     29 			{
     30 					case 1:
     31 						map[yy][0] = TOKEN_1G;
     32 						break;
     33 					case 10:
     34 					case 11:
     35 				/*		n=0;
     36 						for (i=0; i<len; i+=(len/4)) {
     37 							map[yy][i] = TOKEN_10G;
     38 							if ((++n)==4) {
     39 								break;
     40 							}
     41 						}*/
     42 							map[yy][0] = TOKEN_10G;
     43 							map[yy][58] = TOKEN_10G;
     44 							map[yy][116] = TOKEN_10G;
     45 							map[yy][175] = TOKEN_10G;
     46 						break;
     47 					case 12:
     48 						n=0;
     49 						for (i=0; i<len; i+=(len/5)) {
     50 							map[yy][i] = TOKEN_12G;
     51 							if ((++n)==5) {
     52 								break;
     53 							}
     54 						}
     55 						break;
     56 					case 20:
     57 					case 21:
     58 						n=0;
     59 						for (i=0; i<len; i+=(len/8)) {
     60 							map[yy][i] = TOKEN_20G;
     61 							if ((++n)==8) {
     62 								break;
     63 							}	
     64 						}
     65 						break;					
     66 					case 40:
     67 					case 41:
     68 					case 42:
     69 					/*	n=0;
     70 						for (i=0; i<len; i+=(len/16)) {
     71 							map[yy][i] = TOKEN_40G;
     72 							if ((++n)==16) {
     73 								break;
     74 							}
     75 						}*/
     76 							map[yy][0] = TOKEN_40G;
     77 							map[yy][15] = TOKEN_40G;
     78 							map[yy][29] = TOKEN_40G;
     79 							map[yy][44] = TOKEN_40G;
     80 							map[yy][58] = TOKEN_40G;
     81 							map[yy][73] = TOKEN_40G;
     82 							map[yy][87] = TOKEN_40G;
     83 							map[yy][102] = TOKEN_40G;
     84 							map[yy][116] = TOKEN_40G;
     85 							map[yy][131] = TOKEN_40G;
     86 							map[yy][145] = TOKEN_40G;
     87 							map[yy][160] = TOKEN_40G;
     88 							map[yy][174] = TOKEN_40G;
     89 							map[yy][189] = TOKEN_40G;
     90 							map[yy][203] = TOKEN_40G;
     91 							map[yy][218] = TOKEN_40G;
     92 						break;
     93 					case 100:
     94 					case 106:
     95 					case 107:
     96 						n=0;
     97 						for (i=0; i<len; i+=(len/40)) {
     98 							map[yy][i] = TOKEN_100G;
     99 							if ((++n)==40) {
    100 								break;
    101 							}
    102 						}
    103 						break;					
    104 					case 120:
    105 						n=0;
    106 						for (i=0; i<len; i+=(len/48)) {
    107 							map[yy][i] = TOKEN_120G;
    108 							if ((++n)==48) {
    109 								break;
    110 							}
    111 						}
    112 						break;
    113 				case 150: /* for ancl slots*/
    114 						map[yy][0] = AP_ANCL_TOKEN;
    115 						map[yy][26] = AP_ANCL_TOKEN;
    116 						map[yy][52] = AP_ANCL_TOKEN;
    117 						map[yy][78] = AP_ANCL_TOKEN;
    118 						map[yy][104] = AP_ANCL_TOKEN;
    119 						map[yy][129] = AP_ANCL_TOKEN;
    120 						map[yy][155] = AP_ANCL_TOKEN;
    121 						map[yy][181] = AP_ANCL_TOKEN;						
    122 						map[yy][207] = AP_ANCL_TOKEN;						
    123 						break;
    124 					default:
    125 						return 0;
    126 						break;
    127 			}
    128 			break;
    129 		case 793: /* TD2/+ */
    130 		case 794: 
    131 		case 795: 
    132 		case 796: 
    133 		case 797: 
    134 			switch (port_speed)
    135 			{
    136 				case 1:
    137 					map[yy][0] = TOKEN_1G;
    138 					break;
    139 				case 10:
    140 				case 11:
    141 					map[yy][0] = TOKEN_10G;
    142 					map[yy][50] = TOKEN_10G;
    143 					map[yy][100] = TOKEN_10G;
    144 					map[yy][150] = TOKEN_10G;
    145 					break;
    146 				case 12:
    147 					map[yy][0] = TOKEN_12G;
    148 					map[yy][36] = TOKEN_12G;
    149 					map[yy][72] = TOKEN_12G;
    150 					map[yy][120] = TOKEN_12G;
    151 					map[yy][156] = TOKEN_12G;
    152 					break;
    153 				case 20:
    154 				case 21:
    155 					for (i=0; i<len; i+=(VECTOR_QUANTA_S*6)) {
    156 						map[yy][i] = TOKEN_20G;
    157 					}
    158 					break;
    159 				case 25:
    160 					map[yy][0] = TOKEN_25G;
    161 					map[yy][20] = TOKEN_25G;
    162 					map[yy][40] = TOKEN_25G;
    163 					map[yy][60] = TOKEN_25G;
    164 					map[yy][80] = TOKEN_25G;
    165 					map[yy][100] = TOKEN_25G;
    166 					map[yy][120] = TOKEN_25G;
    167 					map[yy][140] = TOKEN_25G;
    168 					map[yy][160] = TOKEN_25G;
    169 					map[yy][180] = TOKEN_25G;
    170 					break;
    171 				case 40:
    172 				case 41:
    173 				case 42:
    174 				/*	for (i=0; i<len; i+=(VECTOR_QUANTA_S*3)) {
    175 						map[yy][i] = TOKEN_40G;
    176 					}*/			
    177 		      map[yy][0] = TOKEN_40G;
    178 		      map[yy][12] = TOKEN_40G;
    179 		      map[yy][25] = TOKEN_40G;
    180 		      map[yy][37] = TOKEN_40G;
    181 		      map[yy][50] = TOKEN_40G;
    182 		      map[yy][62] = TOKEN_40G;
    183 		      map[yy][75] = TOKEN_40G;
    184 		      map[yy][87] = TOKEN_40G;
    185 		      map[yy][100] = TOKEN_40G;
    186 		      map[yy][112] = TOKEN_40G;
    187 		      map[yy][125] = TOKEN_40G;
    188 		      map[yy][137] = TOKEN_40G;
    189 		      map[yy][150] = TOKEN_40G;
    190 		      map[yy][162] = TOKEN_40G;
    191 		      map[yy][175] = TOKEN_40G;
    192 		      map[yy][187] = TOKEN_40G;
    193 					break;
    194 				case 100:
    195 				case 106:
    196 				case 107:
    197 			/*for (i=0; i<len; i+=(VECTOR_QUANTA_S*6)) {
    198 						map[yy][i] = TOKEN_100G;
    199 						map[yy][i+5] = TOKEN_100G;
    200 						map[yy][i+10] = TOKEN_100G;
    201 						map[yy][i+15] = TOKEN_100G;
    202 						map[yy][i+19] = TOKEN_100G;
    203 					}
    204 					break;*/
    205 						n=0;
    206 						for (i=0; i<len; i+=(len/40)) {
    207 							map[yy][i] = TOKEN_100G;
    208 							if ((++n)==40) {
    209 								break;
    210 							}
    211 						}
    212           break;
    213 				case 108:
    214 					for (i=0; i<len; i+=(VECTOR_QUANTA_S)) {
    215 						map[yy][i] = TOKEN_100G;
    216 					}
    217 					break;
    218 				case 109:
    219 					for (i=0; i<len; i+=(VECTOR_QUANTA_S)) {
    220 						map[yy][i] = TOKEN_100G;
    221 					}
    222 					for (i=(VECTOR_QUANTA_S*5); i<len; i+=(VECTOR_QUANTA_S*6)) {
    223 						map[yy][i] = num_ext_ports;
    224 					}
    225 					break;				
    226 				case 120:
    227 					for (i=0; i<len; i+=(VECTOR_QUANTA_S)) {
    228 						map[yy][i] = TOKEN_120G;
    229 					}
    230 					break;
    231 				case 150: /* for ancl slots*/
    232 						map[yy][0] = AP_ANCL_TOKEN;
    233 						map[yy][25] = AP_ANCL_TOKEN;
    234 						map[yy][50] = AP_ANCL_TOKEN;
    235 						map[yy][75] = AP_ANCL_TOKEN;
    236 						map[yy][100] = AP_ANCL_TOKEN;
    237 						map[yy][150] = AP_ANCL_TOKEN;
    238 						map[yy][175] = AP_ANCL_TOKEN;						
    239 						map[yy][199] = AP_ANCL_TOKEN;						
    240 						break;
    241 				default:
    242 					return 0;
    243 					break;
    244 			}
    245 			break;			
    246 		case 575:
    247 			switch (port_speed)
    248 			{
    249 					case 1:
    250 						map[yy][0] = TOKEN_1G;
    251 						break;
    252 					case 10:
    253 					case 11:
    254 						map[yy][0] = TOKEN_10G;
    255 						map[yy][36] = TOKEN_10G;
    256 						map[yy][72] = TOKEN_10G;
    257 						map[yy][108] = TOKEN_10G;
    258 						break;
    259 					case 12:
    260 						n=0;
    261 						for (i=0; i<len; i+=(len/5)) {
    262 							map[yy][i] = TOKEN_40G;
    263 							if ((++n)==5) {
    264 								break;
    265 							}	
    266 						}
    267 						break;
    268 					case 20:
    269 					case 21:
    270 						map[yy][0] = TOKEN_20G;
    271 						map[yy][36] = TOKEN_20G;
    272 						map[yy][72] = TOKEN_20G;
    273 						map[yy][109] = TOKEN_20G;
    274 						map[yy][18] = TOKEN_20G;
    275 						map[yy][54] = TOKEN_20G;
    276 						map[yy][90] = TOKEN_20G;
    277 						map[yy][127] = TOKEN_20G;
    278 						break;					
    279 					case 40:
    280 					case 41:
    281 					case 42:
    282 					/*n=0;
    283 						for (i=0; i<len; i+=(len/16)) {
    284 							map[yy][i] = TOKEN_40G;
    285 							if ((++n)==16) {
    286 								break;
    287 							}	
    288 						}*/
    289 						map[yy][0] = TOKEN_40G; /*use 9 and 10*/
    290 						map[yy][9] = TOKEN_40G;
    291 						map[yy][18] = TOKEN_40G;
    292 						map[yy][27] = TOKEN_40G;
    293 						map[yy][36] = TOKEN_40G;
    294 						map[yy][45] = TOKEN_40G;
    295 						map[yy][54] = TOKEN_40G;
    296 						map[yy][63] = TOKEN_40G;
    297 						map[yy][72] = TOKEN_40G;
    298 						map[yy][81] = TOKEN_40G;
    299 						map[yy][90] = TOKEN_40G;
    300 						map[yy][99] = TOKEN_40G;
    301 						map[yy][108] = TOKEN_40G;
    302 						map[yy][117] = TOKEN_40G;
    303 						map[yy][126] = TOKEN_40G;
    304 						map[yy][135] = TOKEN_40G;
    305 						break;
    306 					case 100:
    307 						n=0;
    308 						for (i=0; i<len; i+=(len/40)) {
    309 							map[yy][i] = TOKEN_100G;
    310 							if ((++n)==40) {
    311 								break;
    312 							}
    313 						}
    314 						break;					
    315 					case 120:
    316 						n=0;
    317 						for (i=0; i<len; i+=(len/48)) {
    318 							map[yy][i] = TOKEN_120G;
    319 							if ((++n)==48) {
    320 								break;
    321 							}
    322 						}
    323 						break;
    324 					case 150: /* for ancl slots*/
    325 						map[yy][17] = AP_ANCL_TOKEN;
    326 						map[yy][26] = AP_ANCL_TOKEN;
    327 						map[yy][53] = AP_ANCL_TOKEN;
    328 						map[yy][62] = AP_ANCL_TOKEN;
    329 						map[yy][89] = AP_ANCL_TOKEN;						
    330 						map[yy][98] = AP_ANCL_TOKEN;						
    331 						map[yy][125] = AP_ANCL_TOKEN;						
    332 						map[yy][134] = AP_ANCL_TOKEN;						
    333 						map[yy][144] = AP_ANCL_TOKEN;						
    334 						break;
    335 					default:
    336 						return 0;
    337 						break;
    338 			}
    339 			break;
    340 		case 510:
    341 			switch (port_speed)
    342 			{
    343 					case 1:
    344 						map[yy][0] = TOKEN_1G;
    345 						break;
    346 					case 10:
    347 					case 11:
    348 						n=0;
    349 						for (i=0; i<len; i+=(len/4)) {
    350 							map[yy][i] = TOKEN_10G;
    351 							if ((++n)==4) {
    352 								break;
    353 							}
    354 						}
    355 						break;
    356 					case 12:
    357 						n=0;
    358 						for (i=0; i<len; i+=(len/5)) {
    359 							map[yy][i] = TOKEN_12G;
    360 							if ((++n)==5) {
    361 								break;
    362 							}
    363 						}
    364 						break;
    365 					case 20:
    366 					case 21:
    367 						n=0;
    368 						for (i=0; i<len; i+=(len/8)) {
    369 							map[yy][i] = TOKEN_20G;
    370 							if ((++n)==8) {
    371 								break;
    372 							}	
    373 						}
    374 						break;					
    375 					case 40:
    376 					case 41:
    377 					case 42:
    378 					case 43:
    379 					case 44:
    380 					case 45:
    381 						n=0;
    382 						for (i=0; i<len; i+=(len/16)) {
    383 							map[yy][i] = TOKEN_40G;
    384 							if ((++n)==16) {
    385 								break;
    386 							}
    387 						}
    388 						break;
    389 					default:
    390 						return 0;
    391 						break;
    392 			}
    393 			break;
    394 		case 435:
    395 			switch (port_speed)
    396 			{
    397 					case 1:
    398 						map[yy][0] = TOKEN_1G;
    399 						break;
    400 					case 10:
    401 					case 11:
    402 						map[yy][0] = TOKEN_10G;
    403 						map[yy][27] = TOKEN_10G;
    404 						map[yy][55] = TOKEN_10G;
    405 						map[yy][82] = TOKEN_10G;
    406 						break;
    407 					case 12:
    408 						map[yy][0] = TOKEN_12G;
    409 						map[yy][19] = TOKEN_12G;
    410 						map[yy][39] = TOKEN_12G;
    411 						map[yy][58] = TOKEN_12G;
    412 						map[yy][78] = TOKEN_12G;
    413 						break;
    414 					case 20:
    415 					case 21:
    416 						map[yy][0] = TOKEN_20G;
    417 						map[yy][14] = TOKEN_20G;
    418 						map[yy][28] = TOKEN_20G;
    419 						map[yy][41] = TOKEN_20G;
    420 						map[yy][55] = TOKEN_20G;
    421 						map[yy][69] = TOKEN_20G;
    422 						map[yy][82] = TOKEN_20G;
    423 						map[yy][96] = TOKEN_20G;						
    424 						break;
    425 					case 40:
    426 					case 41:
    427 					case 42:
    428 						map[yy][0] = TOKEN_40G; /*use 7 and 5*/
    429 						map[yy][7] = TOKEN_40G;
    430 						map[yy][14] = TOKEN_40G;
    431 						map[yy][21] = TOKEN_40G;
    432 						map[yy][28] = TOKEN_40G;
    433 						map[yy][35] = TOKEN_40G;
    434 						map[yy][42] = TOKEN_40G;
    435 						map[yy][49] = TOKEN_40G;
    436 						map[yy][56] = TOKEN_40G;
    437 						map[yy][63] = TOKEN_40G;
    438 						map[yy][70] = TOKEN_40G;
    439 						map[yy][77] = TOKEN_40G;
    440 						map[yy][82] = TOKEN_40G;
    441 						map[yy][89] = TOKEN_40G;
    442 						map[yy][96] = TOKEN_40G;
    443 						map[yy][103] = TOKEN_40G;						
    444 						break;
    445 					case 150: /* for ancl slots*/
    446 						map[yy][6] = AP_ANCL_TOKEN;
    447 						map[yy][13] = AP_ANCL_TOKEN;
    448 						map[yy][33] = AP_ANCL_TOKEN;
    449 						map[yy][40] = AP_ANCL_TOKEN;
    450 						map[yy][54] = AP_ANCL_TOKEN;
    451 						map[yy][61] = AP_ANCL_TOKEN;
    452 						map[yy][68] = AP_ANCL_TOKEN;
    453 						map[yy][88] = AP_ANCL_TOKEN;						
    454 						map[yy][95] = AP_ANCL_TOKEN;						
    455 						map[yy][109] = AP_ANCL_TOKEN;						
    456 						break;
    457 					default:
    458 						return 0;
    459 						break;
    460 			}
    461 			break;			
    462 		default:
    463 			switch (port_speed)
    464 			{
    465 				default:
    466 					return 0;
    467 					break;
    468 			}
    469 	}
    470 	
    471 	return 1;
    472 	
    473 }
    474 #endif /* TDM_AP_VECTOR_LIBRARY_H */