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 */