1 /* 2 * rate.c 3 * 4 * Copyright(c) 1998 - 2010 Texas Instruments. All rights reserved. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * * Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * * Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * * Neither the name Texas Instruments nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 35 /** \file rate.c 36 * \brief Rate conversion 37 * 38 * \see rate.h 39 */ 40 #define __FILE_ID__ FILE_ID_131 41 #include "tidef.h" 42 #include "rate.h" 43 44 ERate rate_NetToDrv (TI_UINT32 rate) 45 { 46 switch (rate) 47 { 48 case NET_RATE_1M: 49 case NET_RATE_1M_BASIC: 50 return DRV_RATE_1M; 51 52 case NET_RATE_2M: 53 case NET_RATE_2M_BASIC: 54 return DRV_RATE_2M; 55 56 case NET_RATE_5_5M: 57 case NET_RATE_5_5M_BASIC: 58 return DRV_RATE_5_5M; 59 60 case NET_RATE_11M: 61 case NET_RATE_11M_BASIC: 62 return DRV_RATE_11M; 63 64 case NET_RATE_22M: 65 case NET_RATE_22M_BASIC: 66 return DRV_RATE_22M; 67 68 case NET_RATE_6M: 69 case NET_RATE_6M_BASIC: 70 return DRV_RATE_6M; 71 72 case NET_RATE_9M: 73 case NET_RATE_9M_BASIC: 74 return DRV_RATE_9M; 75 76 case NET_RATE_12M: 77 case NET_RATE_12M_BASIC: 78 return DRV_RATE_12M; 79 80 case NET_RATE_18M: 81 case NET_RATE_18M_BASIC: 82 return DRV_RATE_18M; 83 84 case NET_RATE_24M: 85 case NET_RATE_24M_BASIC: 86 return DRV_RATE_24M; 87 88 case NET_RATE_36M: 89 case NET_RATE_36M_BASIC: 90 return DRV_RATE_36M; 91 92 case NET_RATE_48M: 93 case NET_RATE_48M_BASIC: 94 return DRV_RATE_48M; 95 96 case NET_RATE_54M: 97 case NET_RATE_54M_BASIC: 98 return DRV_RATE_54M; 99 100 case NET_RATE_MCS0: 101 case NET_RATE_MCS0_BASIC: 102 return DRV_RATE_MCS_0; 103 104 case NET_RATE_MCS1: 105 case NET_RATE_MCS1_BASIC: 106 return DRV_RATE_MCS_1; 107 108 case NET_RATE_MCS2: 109 case NET_RATE_MCS2_BASIC: 110 return DRV_RATE_MCS_2; 111 112 case NET_RATE_MCS3: 113 case NET_RATE_MCS3_BASIC: 114 return DRV_RATE_MCS_3; 115 116 case NET_RATE_MCS4: 117 case NET_RATE_MCS4_BASIC: 118 return DRV_RATE_MCS_4; 119 120 case NET_RATE_MCS5: 121 case NET_RATE_MCS5_BASIC: 122 return DRV_RATE_MCS_5; 123 124 case NET_RATE_MCS6: 125 case NET_RATE_MCS6_BASIC: 126 return DRV_RATE_MCS_6; 127 128 case NET_RATE_MCS7: 129 case NET_RATE_MCS7_BASIC: 130 return DRV_RATE_MCS_7; 131 132 default: 133 return DRV_RATE_INVALID; 134 } 135 } 136 137 /************************************************************************ 138 * hostToNetworkRate * 139 ************************************************************************ 140 DESCRIPTION: Translates a host rate (1, 2, 3, ....) to network rate (0x02, 0x82, 0x84, etc...) 141 142 INPUT: rate - Host rate 143 144 OUTPUT: 145 146 147 RETURN: Network rate if the input rate is valid, otherwise returns 0. 148 149 ************************************************************************/ 150 ENetRate rate_DrvToNet (ERate rate) 151 { 152 switch (rate) 153 { 154 case DRV_RATE_AUTO: 155 return NET_RATE_AUTO; 156 157 case DRV_RATE_1M: 158 return NET_RATE_1M; 159 160 case DRV_RATE_2M: 161 return NET_RATE_2M; 162 163 case DRV_RATE_5_5M: 164 return NET_RATE_5_5M; 165 166 case DRV_RATE_11M: 167 return NET_RATE_11M; 168 169 case DRV_RATE_22M: 170 return NET_RATE_22M; 171 172 case DRV_RATE_6M: 173 return NET_RATE_6M; 174 175 case DRV_RATE_9M: 176 return NET_RATE_9M; 177 178 case DRV_RATE_12M: 179 return NET_RATE_12M; 180 181 case DRV_RATE_18M: 182 return NET_RATE_18M; 183 184 case DRV_RATE_24M: 185 return NET_RATE_24M; 186 187 case DRV_RATE_36M: 188 return NET_RATE_36M; 189 190 case DRV_RATE_48M: 191 return NET_RATE_48M; 192 193 case DRV_RATE_54M: 194 return NET_RATE_54M; 195 196 case DRV_RATE_MCS_0: 197 return NET_RATE_MCS0; 198 199 case DRV_RATE_MCS_1: 200 return NET_RATE_MCS1; 201 202 case DRV_RATE_MCS_2: 203 return NET_RATE_MCS2; 204 205 case DRV_RATE_MCS_3: 206 return NET_RATE_MCS3; 207 208 case DRV_RATE_MCS_4: 209 return NET_RATE_MCS4; 210 211 case DRV_RATE_MCS_5: 212 return NET_RATE_MCS5; 213 214 case DRV_RATE_MCS_6: 215 return NET_RATE_MCS6; 216 217 case DRV_RATE_MCS_7: 218 return NET_RATE_MCS7; 219 220 default: 221 return NET_RATE_AUTO; 222 } 223 } 224 225 /*************************************************************************** 226 * getMaxActiveRatefromBitmap * 227 **************************************************************************** 228 * DESCRIPTION: 229 * 230 * INPUTS: hCtrlData - the object 231 * 232 * OUTPUT: 233 * 234 * RETURNS: 235 ***************************************************************************/ 236 ERate rate_GetMaxFromDrvBitmap (TI_UINT32 uRateBitMap) 237 { 238 if (uRateBitMap & DRV_RATE_MASK_MCS_7_OFDM) 239 { 240 return DRV_RATE_MCS_7; 241 } 242 243 if (uRateBitMap & DRV_RATE_MASK_MCS_6_OFDM) 244 { 245 return DRV_RATE_MCS_6; 246 } 247 248 if (uRateBitMap & DRV_RATE_MASK_MCS_5_OFDM) 249 { 250 return DRV_RATE_MCS_5; 251 } 252 253 if (uRateBitMap & DRV_RATE_MASK_MCS_4_OFDM) 254 { 255 return DRV_RATE_MCS_4; 256 } 257 258 if (uRateBitMap & DRV_RATE_MASK_MCS_3_OFDM) 259 { 260 return DRV_RATE_MCS_3; 261 } 262 263 if (uRateBitMap & DRV_RATE_MASK_MCS_2_OFDM) 264 { 265 return DRV_RATE_MCS_2; 266 } 267 268 if (uRateBitMap & DRV_RATE_MASK_MCS_1_OFDM) 269 { 270 return DRV_RATE_MCS_1; 271 } 272 273 if (uRateBitMap & DRV_RATE_MASK_MCS_0_OFDM) 274 { 275 return DRV_RATE_MCS_0; 276 } 277 278 if (uRateBitMap & DRV_RATE_MASK_54_OFDM) 279 { 280 return DRV_RATE_54M; 281 } 282 283 if (uRateBitMap & DRV_RATE_MASK_48_OFDM) 284 { 285 return DRV_RATE_48M; 286 } 287 288 if (uRateBitMap & DRV_RATE_MASK_36_OFDM) 289 { 290 return DRV_RATE_36M; 291 } 292 293 if (uRateBitMap & DRV_RATE_MASK_24_OFDM) 294 { 295 return DRV_RATE_24M; 296 } 297 298 if (uRateBitMap & DRV_RATE_MASK_22_PBCC) 299 { 300 return DRV_RATE_22M; 301 } 302 303 if (uRateBitMap & DRV_RATE_MASK_18_OFDM) 304 { 305 return DRV_RATE_18M; 306 } 307 308 if (uRateBitMap & DRV_RATE_MASK_12_OFDM) 309 { 310 return DRV_RATE_12M; 311 } 312 313 if (uRateBitMap & DRV_RATE_MASK_11_CCK) 314 { 315 return DRV_RATE_11M; 316 } 317 318 if (uRateBitMap & DRV_RATE_MASK_9_OFDM) 319 { 320 return DRV_RATE_9M; 321 } 322 323 if (uRateBitMap & DRV_RATE_MASK_6_OFDM) 324 { 325 return DRV_RATE_6M; 326 } 327 328 if (uRateBitMap & DRV_RATE_MASK_5_5_CCK) 329 { 330 return DRV_RATE_5_5M; 331 } 332 333 if (uRateBitMap & DRV_RATE_MASK_2_BARKER) 334 { 335 return DRV_RATE_2M; 336 } 337 338 if (uRateBitMap & DRV_RATE_MASK_1_BARKER) 339 { 340 return DRV_RATE_1M; 341 } 342 343 return DRV_RATE_INVALID; 344 } 345 346 /************************************************************************ 347 * validateNetworkRate * 348 ************************************************************************ 349 DESCRIPTION: Verify that the input nitwork rate is valid 350 351 INPUT: rate - input network rate 352 353 OUTPUT: 354 355 356 RETURN: TI_OK if valid, otherwise TI_NOK 357 358 ************************************************************************/ 359 static TI_STATUS rate_ValidateNet (ENetRate eRate) 360 { 361 switch (eRate) 362 { 363 case NET_RATE_1M: 364 case NET_RATE_1M_BASIC: 365 case NET_RATE_2M: 366 case NET_RATE_2M_BASIC: 367 case NET_RATE_5_5M: 368 case NET_RATE_5_5M_BASIC: 369 case NET_RATE_11M: 370 case NET_RATE_11M_BASIC: 371 case NET_RATE_22M: 372 case NET_RATE_22M_BASIC: 373 case NET_RATE_6M: 374 case NET_RATE_6M_BASIC: 375 case NET_RATE_9M: 376 case NET_RATE_9M_BASIC: 377 case NET_RATE_12M: 378 case NET_RATE_12M_BASIC: 379 case NET_RATE_18M: 380 case NET_RATE_18M_BASIC: 381 case NET_RATE_24M: 382 case NET_RATE_24M_BASIC: 383 case NET_RATE_36M: 384 case NET_RATE_36M_BASIC: 385 case NET_RATE_48M: 386 case NET_RATE_48M_BASIC: 387 case NET_RATE_54M: 388 case NET_RATE_54M_BASIC: 389 return TI_OK; 390 391 default: 392 return TI_NOK; 393 } 394 } 395 396 /************************************************************************ 397 * getMaxBasicRate * 398 ************************************************************************ 399 DESCRIPTION: Goes over an array of network rates and returns the max basic rate 400 401 INPUT: pRates - Rate array 402 403 OUTPUT: 404 405 406 RETURN: Max basic rate (in network units) 407 408 ************************************************************************/ 409 ENetRate rate_GetMaxBasicFromStr (TI_UINT8 *pRatesString, TI_UINT32 len, ENetRate eMaxRate) 410 { 411 TI_UINT32 i; 412 413 for (i = 0; i < len; i++) 414 { 415 if (NET_BASIC_RATE (pRatesString[i]) && rate_ValidateNet ((ENetRate)pRatesString[i]) == TI_OK) 416 { 417 eMaxRate = TI_MAX ((ENetRate)pRatesString[i], eMaxRate); 418 } 419 } 420 421 return eMaxRate; 422 } 423 424 /************************************************************************ 425 * getMaxActiveRate * 426 ************************************************************************ 427 DESCRIPTION: Goes over an array of network rates and returns the max active rate 428 429 INPUT: pRates - Rate array 430 431 OUTPUT: 432 433 434 RETURN: Max active rate (in network units) 435 436 ************************************************************************/ 437 ENetRate rate_GetMaxActiveFromStr (TI_UINT8 *pRatesString, TI_UINT32 len, ENetRate eMaxRate) 438 { 439 TI_UINT32 i; 440 441 for (i = 0; i < len; i++) 442 { 443 if (NET_ACTIVE_RATE (pRatesString[i]) && rate_ValidateNet ((ENetRate)pRatesString[i]) == TI_OK) 444 { 445 eMaxRate = TI_MAX ((ENetRate)pRatesString[i], eMaxRate); 446 } 447 } 448 449 return eMaxRate; 450 } 451 452 TI_UINT32 rate_DrvToNumber (ERate eRate) 453 { 454 switch (eRate) 455 { 456 case DRV_RATE_1M: 457 return 1; 458 459 case DRV_RATE_2M: 460 return 2; 461 462 case DRV_RATE_5_5M: 463 return 5; 464 465 case DRV_RATE_11M: 466 return 11; 467 468 case DRV_RATE_22M: 469 return 22; 470 471 case DRV_RATE_6M: 472 return 6; 473 474 case DRV_RATE_9M: 475 return 9; 476 477 case DRV_RATE_12M: 478 return 12; 479 480 case DRV_RATE_18M: 481 return 18; 482 483 case DRV_RATE_24M: 484 return 24; 485 486 case DRV_RATE_36M: 487 return 36; 488 489 case DRV_RATE_48M: 490 return 48; 491 492 case DRV_RATE_54M: 493 return 54; 494 495 case DRV_RATE_MCS_0: 496 return 6; 497 498 case DRV_RATE_MCS_1: 499 return 13; 500 501 case DRV_RATE_MCS_2: 502 return 19; 503 504 case DRV_RATE_MCS_3: 505 return 26; 506 507 case DRV_RATE_MCS_4: 508 return 39; 509 510 case DRV_RATE_MCS_5: 511 return 52; 512 513 case DRV_RATE_MCS_6: 514 return 58; 515 516 case DRV_RATE_MCS_7: 517 return 65; 518 519 default: 520 return 0; 521 } 522 } 523 524 /************************************************************************ 525 * bitMapToNetworkStringRates * 526 ************************************************************************ 527 DESCRIPTION: Converts bit map to the rates string 528 529 INPUT: suppRatesBitMap - bit map of supported rates 530 basicRatesBitMap - bit map of basic rates 531 532 OUTPUT: string - network format rates array, 533 len - rates array length 534 firstOFDMrateLoc - the index of first OFDM rate in the rates array. 535 536 537 RETURN: None 538 539 ************************************************************************/ 540 TI_STATUS rate_DrvBitmapToNetStr (TI_UINT32 uSuppRatesBitMap, 541 TI_UINT32 uBasicRatesBitMap, 542 TI_UINT8 *string, 543 TI_UINT32 *len, 544 TI_UINT32 *pFirstOfdmRate) 545 { 546 TI_UINT32 i = 0; 547 548 if (uSuppRatesBitMap & DRV_RATE_MASK_1_BARKER) 549 { 550 if (uBasicRatesBitMap & DRV_RATE_MASK_1_BARKER) 551 { 552 string[i++] = NET_RATE_1M_BASIC; 553 } 554 else 555 { 556 string[i++] = NET_RATE_1M; 557 } 558 } 559 560 if (uSuppRatesBitMap & DRV_RATE_MASK_2_BARKER) 561 { 562 if (uBasicRatesBitMap & DRV_RATE_MASK_2_BARKER) 563 { 564 string[i++] = NET_RATE_2M_BASIC; 565 } 566 else 567 { 568 string[i++] = NET_RATE_2M; 569 } 570 } 571 572 if (uSuppRatesBitMap & DRV_RATE_MASK_5_5_CCK) 573 { 574 if (uBasicRatesBitMap & DRV_RATE_MASK_5_5_CCK) 575 { 576 string[i++] = NET_RATE_5_5M_BASIC; 577 } 578 else 579 { 580 string[i++] = NET_RATE_5_5M; 581 } 582 } 583 584 if (uSuppRatesBitMap & DRV_RATE_MASK_11_CCK) 585 { 586 if (uBasicRatesBitMap & DRV_RATE_MASK_11_CCK) 587 { 588 string[i++] = NET_RATE_11M_BASIC; 589 } 590 else 591 { 592 string[i++] = NET_RATE_11M; 593 } 594 } 595 596 if (uSuppRatesBitMap & DRV_RATE_MASK_22_PBCC) 597 { 598 if (uBasicRatesBitMap & DRV_RATE_MASK_22_PBCC) 599 { 600 string[i++] = NET_RATE_22M_BASIC; 601 } 602 else 603 { 604 string[i++] = NET_RATE_22M; 605 } 606 } 607 608 *pFirstOfdmRate = i; 609 610 if (uSuppRatesBitMap & DRV_RATE_MASK_6_OFDM) 611 { 612 if (uBasicRatesBitMap & DRV_RATE_MASK_6_OFDM) 613 { 614 string[i++] = NET_RATE_6M_BASIC; 615 } 616 else 617 { 618 string[i++] = NET_RATE_6M; 619 } 620 } 621 622 if (uSuppRatesBitMap & DRV_RATE_MASK_9_OFDM) 623 { 624 if (uBasicRatesBitMap & DRV_RATE_MASK_9_OFDM) 625 { 626 string[i++] = NET_RATE_9M_BASIC; 627 } 628 else 629 { 630 string[i++] = NET_RATE_9M; 631 } 632 } 633 634 if (uSuppRatesBitMap & DRV_RATE_MASK_12_OFDM) 635 { 636 if (uBasicRatesBitMap & DRV_RATE_MASK_12_OFDM) 637 { 638 string[i++] = NET_RATE_12M_BASIC; 639 } 640 else 641 { 642 string[i++] = NET_RATE_12M; 643 } 644 } 645 646 if (uSuppRatesBitMap & DRV_RATE_MASK_18_OFDM) 647 { 648 if (uBasicRatesBitMap & DRV_RATE_MASK_18_OFDM) 649 { 650 string[i++] = NET_RATE_18M_BASIC; 651 } 652 else 653 { 654 string[i++] = NET_RATE_18M; 655 } 656 } 657 658 if (uSuppRatesBitMap & DRV_RATE_MASK_24_OFDM) 659 { 660 if (uBasicRatesBitMap & DRV_RATE_MASK_24_OFDM) 661 { 662 string[i++] = NET_RATE_24M_BASIC; 663 } 664 else 665 { 666 string[i++] = NET_RATE_24M; 667 } 668 } 669 670 if (uSuppRatesBitMap & DRV_RATE_MASK_36_OFDM) 671 { 672 if (uBasicRatesBitMap & DRV_RATE_MASK_36_OFDM) 673 { 674 string[i++] = NET_RATE_36M_BASIC; 675 } 676 else 677 { 678 string[i++] = NET_RATE_36M; 679 } 680 } 681 682 if (uSuppRatesBitMap & DRV_RATE_MASK_48_OFDM) 683 { 684 if (uBasicRatesBitMap & DRV_RATE_MASK_48_OFDM) 685 { 686 string[i++] = NET_RATE_48M_BASIC; 687 } 688 else 689 { 690 string[i++] = NET_RATE_48M; 691 } 692 } 693 694 if (uSuppRatesBitMap & DRV_RATE_MASK_54_OFDM) 695 { 696 if (uBasicRatesBitMap & DRV_RATE_MASK_54_OFDM) 697 { 698 string[i++] = NET_RATE_54M_BASIC; 699 } 700 else 701 { 702 string[i++] = NET_RATE_54M; 703 } 704 } 705 706 *len = i; 707 708 return TI_OK; 709 } 710 711 712 /************************************************************************ 713 * bitMapToNetworkStringRates * 714 ************************************************************************ 715 DESCRIPTION: Converts bit map to the rates string 716 717 INPUT: suppRatesBitMap - bit map of supported rates 718 basicRatesBitMap - bit map of basic rates 719 720 OUTPUT: string - network format rates array, 721 len - rates array length 722 firstOFDMrateLoc - the index of first OFDM rate in the rates array. 723 724 725 RETURN: None 726 727 ************************************************************************/ 728 TI_STATUS rate_DrvBitmapToNetStrIncluding11n (TI_UINT32 uSuppRatesBitMap, 729 TI_UINT32 uBasicRatesBitMap, 730 TI_UINT8 *string, 731 TI_UINT32 *pFirstOfdmRate) 732 { 733 TI_UINT32 i = 0; 734 735 736 rate_DrvBitmapToNetStr (uSuppRatesBitMap, uBasicRatesBitMap, string, &i, pFirstOfdmRate); 737 738 if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_0_OFDM) 739 { 740 if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_0_OFDM) 741 { 742 string[i++] = NET_RATE_MCS0_BASIC; 743 } 744 else 745 { 746 string[i++] = NET_RATE_MCS0; 747 } 748 } 749 750 if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_1_OFDM) 751 { 752 if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_1_OFDM) 753 { 754 string[i++] = NET_RATE_MCS1_BASIC; 755 } 756 else 757 { 758 string[i++] = NET_RATE_MCS1; 759 } 760 } 761 762 if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_2_OFDM) 763 { 764 if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_2_OFDM) 765 { 766 string[i++] = NET_RATE_MCS2_BASIC; 767 } 768 else 769 { 770 string[i++] = NET_RATE_MCS2; 771 } 772 } 773 774 if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_3_OFDM) 775 { 776 if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_3_OFDM) 777 { 778 string[i++] = NET_RATE_MCS3_BASIC; 779 } 780 else 781 { 782 string[i++] = NET_RATE_MCS3; 783 } 784 } 785 786 if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_4_OFDM) 787 { 788 if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_4_OFDM) 789 { 790 string[i++] = NET_RATE_MCS4_BASIC; 791 } 792 else 793 { 794 string[i++] = NET_RATE_MCS4; 795 } 796 } 797 798 if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_5_OFDM) 799 { 800 if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_5_OFDM) 801 { 802 string[i++] = NET_RATE_MCS5_BASIC; 803 } 804 else 805 { 806 string[i++] = NET_RATE_MCS5; 807 } 808 } 809 810 if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_6_OFDM) 811 { 812 if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_6_OFDM) 813 { 814 string[i++] = NET_RATE_MCS6_BASIC; 815 } 816 else 817 { 818 string[i++] = NET_RATE_MCS6; 819 } 820 } 821 822 if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_7_OFDM) 823 { 824 if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_7_OFDM) 825 { 826 string[i++] = NET_RATE_MCS7_BASIC; 827 } 828 else 829 { 830 string[i++] = NET_RATE_MCS7; 831 } 832 } 833 834 835 return TI_OK; 836 } 837 838 /************************************************************************ 839 * networkStringToBitMapSuppRates * 840 ************************************************************************ 841 DESCRIPTION: Converts supported rates string to the bit map 842 843 INPUT: string - array of rates in the network format 844 len - array length 845 846 OUTPUT: bitMap - bit map of rates. 847 848 RETURN: None 849 850 ************************************************************************/ 851 TI_STATUS rate_NetStrToDrvBitmap (TI_UINT32 *pBitMap, TI_UINT8 *string, TI_UINT32 len) 852 { 853 TI_UINT32 i; 854 855 *pBitMap = 0; 856 857 for (i = 0; i < len; i++) 858 { 859 switch (string[i]) 860 { 861 case NET_RATE_1M: 862 case NET_RATE_1M_BASIC: 863 *pBitMap |= DRV_RATE_MASK_1_BARKER; 864 break; 865 866 case NET_RATE_2M: 867 case NET_RATE_2M_BASIC: 868 *pBitMap |= DRV_RATE_MASK_2_BARKER; 869 break; 870 871 case NET_RATE_5_5M: 872 case NET_RATE_5_5M_BASIC: 873 *pBitMap |= DRV_RATE_MASK_5_5_CCK; 874 break; 875 876 case NET_RATE_11M: 877 case NET_RATE_11M_BASIC: 878 *pBitMap |= DRV_RATE_MASK_11_CCK; 879 break; 880 881 case NET_RATE_22M: 882 case NET_RATE_22M_BASIC: 883 *pBitMap |= DRV_RATE_MASK_22_PBCC; 884 break; 885 886 case NET_RATE_6M: 887 case NET_RATE_6M_BASIC: 888 *pBitMap |= DRV_RATE_MASK_6_OFDM; 889 break; 890 891 case NET_RATE_9M: 892 case NET_RATE_9M_BASIC: 893 *pBitMap |= DRV_RATE_MASK_9_OFDM; 894 break; 895 896 case NET_RATE_12M: 897 case NET_RATE_12M_BASIC: 898 *pBitMap |= DRV_RATE_MASK_12_OFDM; 899 break; 900 901 case NET_RATE_18M: 902 case NET_RATE_18M_BASIC: 903 *pBitMap |= DRV_RATE_MASK_18_OFDM; 904 break; 905 906 case NET_RATE_24M: 907 case NET_RATE_24M_BASIC: 908 *pBitMap |= DRV_RATE_MASK_24_OFDM; 909 break; 910 911 case NET_RATE_36M: 912 case NET_RATE_36M_BASIC: 913 *pBitMap |= DRV_RATE_MASK_36_OFDM; 914 break; 915 916 case NET_RATE_48M: 917 case NET_RATE_48M_BASIC: 918 *pBitMap |= DRV_RATE_MASK_48_OFDM; 919 break; 920 921 case NET_RATE_54M: 922 case NET_RATE_54M_BASIC: 923 *pBitMap |= DRV_RATE_MASK_54_OFDM; 924 break; 925 926 case NET_RATE_MCS0: 927 case NET_RATE_MCS0_BASIC: 928 *pBitMap |= DRV_RATE_MASK_MCS_0_OFDM; 929 break; 930 931 case NET_RATE_MCS1: 932 case NET_RATE_MCS1_BASIC: 933 *pBitMap |= DRV_RATE_MASK_MCS_1_OFDM; 934 break; 935 936 case NET_RATE_MCS2: 937 case NET_RATE_MCS2_BASIC: 938 *pBitMap |= DRV_RATE_MASK_MCS_2_OFDM; 939 break; 940 941 case NET_RATE_MCS3: 942 case NET_RATE_MCS3_BASIC: 943 *pBitMap |= DRV_RATE_MASK_MCS_3_OFDM; 944 break; 945 946 case NET_RATE_MCS4: 947 case NET_RATE_MCS4_BASIC: 948 *pBitMap |= DRV_RATE_MASK_MCS_4_OFDM; 949 break; 950 951 case NET_RATE_MCS5: 952 case NET_RATE_MCS5_BASIC: 953 *pBitMap |= DRV_RATE_MASK_MCS_5_OFDM; 954 break; 955 956 case NET_RATE_MCS6: 957 case NET_RATE_MCS6_BASIC: 958 *pBitMap |= DRV_RATE_MASK_MCS_6_OFDM; 959 break; 960 961 case NET_RATE_MCS7: 962 case NET_RATE_MCS7_BASIC: 963 *pBitMap |= DRV_RATE_MASK_MCS_7_OFDM; 964 break; 965 966 default: 967 break; 968 } 969 } 970 971 return TI_OK; 972 } 973 974 /************************************************************************ 975 * networkStringToBitMapBasicRates * 976 ************************************************************************ 977 DESCRIPTION: Converts basic rates string to the bit map 978 979 INPUT: string - array of rates in the network format 980 len - array length 981 982 OUTPUT: bitMap - bit map of rates. 983 984 RETURN: None 985 986 ************************************************************************/ 987 TI_STATUS rate_NetBasicStrToDrvBitmap (TI_UINT32 *pBitMap, TI_UINT8 *string, TI_UINT32 len) 988 { 989 TI_UINT32 i; 990 991 *pBitMap = 0; 992 993 for (i = 0; i < len; i++) 994 { 995 switch (string[i]) 996 { 997 case NET_RATE_1M_BASIC: 998 *pBitMap |= DRV_RATE_MASK_1_BARKER; 999 break; 1000 1001 case NET_RATE_2M_BASIC: 1002 *pBitMap |= DRV_RATE_MASK_2_BARKER; 1003 break; 1004 1005 case NET_RATE_5_5M_BASIC: 1006 *pBitMap |= DRV_RATE_MASK_5_5_CCK; 1007 break; 1008 1009 case NET_RATE_11M_BASIC: 1010 *pBitMap |= DRV_RATE_MASK_11_CCK; 1011 break; 1012 1013 case NET_RATE_22M_BASIC: 1014 *pBitMap |= DRV_RATE_MASK_22_PBCC; 1015 break; 1016 1017 case NET_RATE_6M_BASIC: 1018 *pBitMap |= DRV_RATE_MASK_6_OFDM; 1019 break; 1020 1021 case NET_RATE_9M_BASIC: 1022 *pBitMap |= DRV_RATE_MASK_9_OFDM; 1023 break; 1024 1025 case NET_RATE_12M_BASIC: 1026 *pBitMap |= DRV_RATE_MASK_12_OFDM; 1027 break; 1028 1029 case NET_RATE_18M_BASIC: 1030 *pBitMap |= DRV_RATE_MASK_18_OFDM; 1031 break; 1032 1033 case NET_RATE_24M_BASIC: 1034 *pBitMap |= DRV_RATE_MASK_24_OFDM; 1035 break; 1036 1037 case NET_RATE_36M_BASIC: 1038 *pBitMap |= DRV_RATE_MASK_36_OFDM; 1039 break; 1040 1041 case NET_RATE_48M_BASIC: 1042 *pBitMap |= DRV_RATE_MASK_48_OFDM; 1043 break; 1044 1045 case NET_RATE_54M_BASIC: 1046 *pBitMap |= DRV_RATE_MASK_54_OFDM; 1047 break; 1048 1049 case NET_RATE_MCS0_BASIC: 1050 *pBitMap |= DRV_RATE_MASK_MCS_0_OFDM; 1051 break; 1052 1053 case NET_RATE_MCS1_BASIC: 1054 *pBitMap |= DRV_RATE_MASK_MCS_1_OFDM; 1055 break; 1056 1057 case NET_RATE_MCS2_BASIC: 1058 *pBitMap |= DRV_RATE_MASK_MCS_2_OFDM; 1059 break; 1060 1061 case NET_RATE_MCS3_BASIC: 1062 *pBitMap |= DRV_RATE_MASK_MCS_3_OFDM; 1063 break; 1064 1065 case NET_RATE_MCS4_BASIC: 1066 *pBitMap |= DRV_RATE_MASK_MCS_4_OFDM; 1067 break; 1068 1069 case NET_RATE_MCS5_BASIC: 1070 *pBitMap |= DRV_RATE_MASK_MCS_5_OFDM; 1071 break; 1072 1073 case NET_RATE_MCS6_BASIC: 1074 *pBitMap |= DRV_RATE_MASK_MCS_6_OFDM; 1075 break; 1076 1077 case NET_RATE_MCS7_BASIC: 1078 *pBitMap |= DRV_RATE_MASK_MCS_7_OFDM; 1079 break; 1080 1081 default: 1082 break; 1083 } 1084 } 1085 1086 return TI_OK; 1087 } 1088 1089 1090 /************************************************************************ 1091 * rate_McsNetStrToDrvBitmap * 1092 ************************************************************************ 1093 DESCRIPTION: Converts MCS IEs rates bit map to driver bit map. 1094 supported only MCS0 - MCS7 1095 1096 INPUT: string - HT capabilities IE in the network format 1097 len - IE array length 1098 1099 OUTPUT: bitMap - bit map of rates. 1100 1101 RETURN: None 1102 1103 ************************************************************************/ 1104 TI_STATUS rate_McsNetStrToDrvBitmap (TI_UINT32 *pBitMap, TI_UINT8 *string) 1105 { 1106 *pBitMap = string[0]; 1107 1108 *pBitMap = *pBitMap << (DRV_RATE_MCS_0 - 1); 1109 1110 return TI_OK; 1111 } 1112 1113 1114 TI_STATUS rate_DrvBitmapToHwBitmap (TI_UINT32 uDrvBitMap, TI_UINT32 *pHwBitmap) 1115 { 1116 TI_UINT32 uHwBitMap = 0; 1117 1118 if (uDrvBitMap & DRV_RATE_MASK_1_BARKER) 1119 { 1120 uHwBitMap |= HW_BIT_RATE_1MBPS; 1121 } 1122 1123 if (uDrvBitMap & DRV_RATE_MASK_2_BARKER) 1124 { 1125 uHwBitMap |= HW_BIT_RATE_2MBPS; 1126 } 1127 1128 if (uDrvBitMap & DRV_RATE_MASK_5_5_CCK) 1129 { 1130 uHwBitMap |= HW_BIT_RATE_5_5MBPS; 1131 } 1132 1133 if (uDrvBitMap & DRV_RATE_MASK_11_CCK) 1134 { 1135 uHwBitMap |= HW_BIT_RATE_11MBPS; 1136 } 1137 1138 if (uDrvBitMap & DRV_RATE_MASK_22_PBCC) 1139 { 1140 uHwBitMap |= HW_BIT_RATE_22MBPS; 1141 } 1142 1143 if (uDrvBitMap & DRV_RATE_MASK_6_OFDM) 1144 { 1145 uHwBitMap |= HW_BIT_RATE_6MBPS; 1146 } 1147 1148 if (uDrvBitMap & DRV_RATE_MASK_9_OFDM) 1149 { 1150 uHwBitMap |= HW_BIT_RATE_9MBPS; 1151 } 1152 1153 if (uDrvBitMap & DRV_RATE_MASK_12_OFDM) 1154 { 1155 uHwBitMap |= HW_BIT_RATE_12MBPS; 1156 } 1157 1158 if (uDrvBitMap & DRV_RATE_MASK_18_OFDM) 1159 { 1160 uHwBitMap |= HW_BIT_RATE_18MBPS; 1161 } 1162 1163 if (uDrvBitMap & DRV_RATE_MASK_24_OFDM) 1164 { 1165 uHwBitMap |= HW_BIT_RATE_24MBPS; 1166 } 1167 1168 if (uDrvBitMap & DRV_RATE_MASK_36_OFDM) 1169 { 1170 uHwBitMap |= HW_BIT_RATE_36MBPS; 1171 } 1172 1173 if (uDrvBitMap & DRV_RATE_MASK_48_OFDM) 1174 { 1175 uHwBitMap |= HW_BIT_RATE_48MBPS; 1176 } 1177 1178 if (uDrvBitMap & DRV_RATE_MASK_54_OFDM) 1179 { 1180 uHwBitMap |= HW_BIT_RATE_54MBPS; 1181 } 1182 1183 if (uDrvBitMap & DRV_RATE_MASK_MCS_0_OFDM) 1184 { 1185 uHwBitMap |= HW_BIT_RATE_MCS_0; 1186 } 1187 1188 if (uDrvBitMap & DRV_RATE_MASK_MCS_1_OFDM) 1189 { 1190 uHwBitMap |= HW_BIT_RATE_MCS_1; 1191 } 1192 1193 if (uDrvBitMap & DRV_RATE_MASK_MCS_2_OFDM) 1194 { 1195 uHwBitMap |= HW_BIT_RATE_MCS_2; 1196 } 1197 1198 if (uDrvBitMap & DRV_RATE_MASK_MCS_3_OFDM) 1199 { 1200 uHwBitMap |= HW_BIT_RATE_MCS_3; 1201 } 1202 1203 if (uDrvBitMap & DRV_RATE_MASK_MCS_4_OFDM) 1204 { 1205 uHwBitMap |= HW_BIT_RATE_MCS_4; 1206 } 1207 1208 if (uDrvBitMap & DRV_RATE_MASK_MCS_5_OFDM) 1209 { 1210 uHwBitMap |= HW_BIT_RATE_MCS_5; 1211 } 1212 1213 if (uDrvBitMap & DRV_RATE_MASK_MCS_6_OFDM) 1214 { 1215 uHwBitMap |= HW_BIT_RATE_MCS_6; 1216 } 1217 1218 if (uDrvBitMap & DRV_RATE_MASK_MCS_7_OFDM) 1219 { 1220 uHwBitMap |= HW_BIT_RATE_MCS_7; 1221 } 1222 1223 *pHwBitmap = uHwBitMap; 1224 1225 return TI_OK; 1226 } 1227 1228 TI_STATUS rate_PolicyToDrv (ETxRateClassId ePolicyRate, ERate *eAppRate) 1229 { 1230 ERate Rate = DRV_RATE_AUTO; 1231 TI_STATUS status = TI_OK; 1232 1233 switch (ePolicyRate) 1234 { 1235 case txPolicy1 : Rate = DRV_RATE_1M ; break; 1236 case txPolicy2 : Rate = DRV_RATE_2M ; break; 1237 case txPolicy5_5 : Rate = DRV_RATE_5_5M ; break; 1238 case txPolicy11 : Rate = DRV_RATE_11M ; break; 1239 case txPolicy22 : Rate = DRV_RATE_22M ; break; 1240 case txPolicy6 : Rate = DRV_RATE_6M ; break; 1241 case txPolicy9 : Rate = DRV_RATE_9M ; break; 1242 case txPolicy12 : Rate = DRV_RATE_12M ; break; 1243 case txPolicy18 : Rate = DRV_RATE_18M ; break; 1244 case txPolicy24 : Rate = DRV_RATE_24M ; break; 1245 case txPolicy36 : Rate = DRV_RATE_36M ; break; 1246 case txPolicy48 : Rate = DRV_RATE_48M ; break; 1247 case txPolicy54 : Rate = DRV_RATE_54M ; break; 1248 case txPolicyMcs0 : Rate = DRV_RATE_MCS_0; break; 1249 case txPolicyMcs1 : Rate = DRV_RATE_MCS_1; break; 1250 case txPolicyMcs2 : Rate = DRV_RATE_MCS_2; break; 1251 case txPolicyMcs3 : Rate = DRV_RATE_MCS_3; break; 1252 case txPolicyMcs4 : Rate = DRV_RATE_MCS_4; break; 1253 case txPolicyMcs5 : Rate = DRV_RATE_MCS_5; break; 1254 case txPolicyMcs6 : Rate = DRV_RATE_MCS_6; break; 1255 case txPolicyMcs7 : Rate = DRV_RATE_MCS_7; break; 1256 1257 default: 1258 status = TI_NOK; 1259 break; 1260 } 1261 1262 if (status == TI_OK) 1263 *eAppRate = Rate; 1264 else 1265 *eAppRate = DRV_RATE_INVALID; 1266 1267 return status; 1268 } 1269 1270 1271 TI_UINT32 rate_BasicToDrvBitmap (EBasicRateSet eBasicRateSet, TI_BOOL bDot11a) 1272 { 1273 if (!bDot11a) 1274 { 1275 switch (eBasicRateSet) 1276 { 1277 case BASIC_RATE_SET_1_2: 1278 return DRV_RATE_MASK_1_BARKER | 1279 DRV_RATE_MASK_2_BARKER; 1280 1281 case BASIC_RATE_SET_1_2_5_5_11: 1282 return DRV_RATE_MASK_1_BARKER | 1283 DRV_RATE_MASK_2_BARKER | 1284 DRV_RATE_MASK_5_5_CCK | 1285 DRV_RATE_MASK_11_CCK; 1286 1287 case BASIC_RATE_SET_UP_TO_12: 1288 return DRV_RATE_MASK_1_BARKER | 1289 DRV_RATE_MASK_2_BARKER | 1290 DRV_RATE_MASK_5_5_CCK | 1291 DRV_RATE_MASK_11_CCK | 1292 DRV_RATE_MASK_6_OFDM | 1293 DRV_RATE_MASK_9_OFDM | 1294 DRV_RATE_MASK_12_OFDM; 1295 1296 case BASIC_RATE_SET_UP_TO_18: 1297 return DRV_RATE_MASK_1_BARKER | 1298 DRV_RATE_MASK_2_BARKER | 1299 DRV_RATE_MASK_5_5_CCK | 1300 DRV_RATE_MASK_11_CCK | 1301 DRV_RATE_MASK_6_OFDM | 1302 DRV_RATE_MASK_9_OFDM | 1303 DRV_RATE_MASK_12_OFDM | 1304 DRV_RATE_MASK_18_OFDM; 1305 1306 case BASIC_RATE_SET_UP_TO_24: 1307 return DRV_RATE_MASK_1_BARKER | 1308 DRV_RATE_MASK_2_BARKER | 1309 DRV_RATE_MASK_5_5_CCK | 1310 DRV_RATE_MASK_11_CCK | 1311 DRV_RATE_MASK_6_OFDM | 1312 DRV_RATE_MASK_9_OFDM | 1313 DRV_RATE_MASK_12_OFDM | 1314 DRV_RATE_MASK_18_OFDM | 1315 DRV_RATE_MASK_24_OFDM; 1316 1317 case BASIC_RATE_SET_UP_TO_36: 1318 return DRV_RATE_MASK_1_BARKER | 1319 DRV_RATE_MASK_2_BARKER | 1320 DRV_RATE_MASK_5_5_CCK | 1321 DRV_RATE_MASK_11_CCK | 1322 DRV_RATE_MASK_6_OFDM | 1323 DRV_RATE_MASK_9_OFDM | 1324 DRV_RATE_MASK_12_OFDM | 1325 DRV_RATE_MASK_18_OFDM | 1326 DRV_RATE_MASK_24_OFDM | 1327 DRV_RATE_MASK_36_OFDM; 1328 1329 case BASIC_RATE_SET_UP_TO_48: 1330 return DRV_RATE_MASK_1_BARKER | 1331 DRV_RATE_MASK_2_BARKER | 1332 DRV_RATE_MASK_5_5_CCK | 1333 DRV_RATE_MASK_11_CCK | 1334 DRV_RATE_MASK_6_OFDM | 1335 DRV_RATE_MASK_9_OFDM | 1336 DRV_RATE_MASK_12_OFDM | 1337 DRV_RATE_MASK_18_OFDM | 1338 DRV_RATE_MASK_24_OFDM | 1339 DRV_RATE_MASK_36_OFDM | 1340 DRV_RATE_MASK_48_OFDM; 1341 1342 case BASIC_RATE_SET_UP_TO_54: 1343 return DRV_RATE_MASK_1_BARKER | 1344 DRV_RATE_MASK_2_BARKER | 1345 DRV_RATE_MASK_5_5_CCK | 1346 DRV_RATE_MASK_11_CCK | 1347 DRV_RATE_MASK_6_OFDM | 1348 DRV_RATE_MASK_9_OFDM | 1349 DRV_RATE_MASK_12_OFDM | 1350 DRV_RATE_MASK_18_OFDM | 1351 DRV_RATE_MASK_24_OFDM | 1352 DRV_RATE_MASK_36_OFDM | 1353 DRV_RATE_MASK_48_OFDM | 1354 DRV_RATE_MASK_54_OFDM; 1355 1356 case BASIC_RATE_SET_6_12_24: 1357 return DRV_RATE_MASK_6_OFDM | 1358 DRV_RATE_MASK_12_OFDM | 1359 DRV_RATE_MASK_24_OFDM; 1360 1361 case BASIC_RATE_SET_1_2_5_5_6_11_12_24: 1362 return DRV_RATE_MASK_1_BARKER | 1363 DRV_RATE_MASK_2_BARKER | 1364 DRV_RATE_MASK_5_5_CCK | 1365 DRV_RATE_MASK_11_CCK | 1366 DRV_RATE_MASK_6_OFDM | 1367 DRV_RATE_MASK_12_OFDM | 1368 DRV_RATE_MASK_24_OFDM; 1369 1370 case BASIC_RATE_SET_ALL_MCS_RATES: 1371 return DRV_RATE_MASK_MCS_0_OFDM | 1372 DRV_RATE_MASK_MCS_1_OFDM | 1373 DRV_RATE_MASK_MCS_2_OFDM | 1374 DRV_RATE_MASK_MCS_3_OFDM | 1375 DRV_RATE_MASK_MCS_4_OFDM | 1376 DRV_RATE_MASK_MCS_5_OFDM | 1377 DRV_RATE_MASK_MCS_6_OFDM | 1378 DRV_RATE_MASK_MCS_7_OFDM | 1379 DRV_RATE_MASK_1_BARKER | 1380 DRV_RATE_MASK_2_BARKER | 1381 DRV_RATE_MASK_5_5_CCK | 1382 DRV_RATE_MASK_11_CCK; 1383 1384 1385 default: 1386 return DRV_RATE_MASK_1_BARKER | 1387 DRV_RATE_MASK_2_BARKER; 1388 } 1389 } 1390 else 1391 { 1392 switch (eBasicRateSet) 1393 { 1394 case BASIC_RATE_SET_UP_TO_12: 1395 return DRV_RATE_MASK_6_OFDM | 1396 DRV_RATE_MASK_9_OFDM | 1397 DRV_RATE_MASK_12_OFDM; 1398 1399 case BASIC_RATE_SET_UP_TO_18: 1400 return DRV_RATE_MASK_6_OFDM | 1401 DRV_RATE_MASK_9_OFDM | 1402 DRV_RATE_MASK_12_OFDM | 1403 DRV_RATE_MASK_18_OFDM; 1404 1405 case BASIC_RATE_SET_UP_TO_24: 1406 return DRV_RATE_MASK_6_OFDM | 1407 DRV_RATE_MASK_9_OFDM | 1408 DRV_RATE_MASK_12_OFDM | 1409 DRV_RATE_MASK_18_OFDM | 1410 DRV_RATE_MASK_24_OFDM; 1411 1412 case BASIC_RATE_SET_UP_TO_36: 1413 return DRV_RATE_MASK_6_OFDM | 1414 DRV_RATE_MASK_9_OFDM | 1415 DRV_RATE_MASK_12_OFDM | 1416 DRV_RATE_MASK_18_OFDM | 1417 DRV_RATE_MASK_24_OFDM | 1418 DRV_RATE_MASK_36_OFDM; 1419 1420 case BASIC_RATE_SET_UP_TO_48: 1421 return DRV_RATE_MASK_6_OFDM | 1422 DRV_RATE_MASK_9_OFDM | 1423 DRV_RATE_MASK_12_OFDM | 1424 DRV_RATE_MASK_18_OFDM | 1425 DRV_RATE_MASK_24_OFDM | 1426 DRV_RATE_MASK_36_OFDM | 1427 DRV_RATE_MASK_48_OFDM; 1428 1429 case BASIC_RATE_SET_UP_TO_54: 1430 return DRV_RATE_MASK_6_OFDM | 1431 DRV_RATE_MASK_9_OFDM | 1432 DRV_RATE_MASK_12_OFDM | 1433 DRV_RATE_MASK_18_OFDM | 1434 DRV_RATE_MASK_24_OFDM | 1435 DRV_RATE_MASK_36_OFDM | 1436 DRV_RATE_MASK_48_OFDM | 1437 DRV_RATE_MASK_54_OFDM; 1438 1439 case BASIC_RATE_SET_6_12_24: 1440 return DRV_RATE_MASK_6_OFDM | 1441 DRV_RATE_MASK_12_OFDM | 1442 DRV_RATE_MASK_24_OFDM; 1443 1444 case BASIC_RATE_SET_ALL_MCS_RATES: 1445 return DRV_RATE_MASK_MCS_0_OFDM | 1446 DRV_RATE_MASK_MCS_1_OFDM | 1447 DRV_RATE_MASK_MCS_2_OFDM | 1448 DRV_RATE_MASK_MCS_3_OFDM | 1449 DRV_RATE_MASK_MCS_4_OFDM | 1450 DRV_RATE_MASK_MCS_5_OFDM | 1451 DRV_RATE_MASK_MCS_6_OFDM | 1452 DRV_RATE_MASK_MCS_7_OFDM | 1453 DRV_RATE_MASK_6_OFDM | 1454 DRV_RATE_MASK_12_OFDM | 1455 DRV_RATE_MASK_24_OFDM; 1456 1457 default: 1458 return DRV_RATE_MASK_6_OFDM | 1459 DRV_RATE_MASK_12_OFDM | 1460 DRV_RATE_MASK_24_OFDM; 1461 } 1462 } 1463 } 1464 1465 TI_UINT32 rate_SupportedToDrvBitmap (ESupportedRateSet eSupportedRateSet, TI_BOOL bDot11a) 1466 { 1467 if (!bDot11a) 1468 { 1469 switch (eSupportedRateSet) 1470 { 1471 case SUPPORTED_RATE_SET_1_2: 1472 return DRV_RATE_MASK_1_BARKER | 1473 DRV_RATE_MASK_2_BARKER; 1474 1475 case SUPPORTED_RATE_SET_1_2_5_5_11: 1476 return DRV_RATE_MASK_1_BARKER | 1477 DRV_RATE_MASK_2_BARKER | 1478 DRV_RATE_MASK_5_5_CCK | 1479 DRV_RATE_MASK_11_CCK; 1480 1481 case SUPPORTED_RATE_SET_1_2_5_5_11_22: 1482 return DRV_RATE_MASK_1_BARKER | 1483 DRV_RATE_MASK_2_BARKER | 1484 DRV_RATE_MASK_5_5_CCK | 1485 DRV_RATE_MASK_11_CCK | 1486 DRV_RATE_MASK_22_PBCC; 1487 1488 case SUPPORTED_RATE_SET_UP_TO_18: 1489 return DRV_RATE_MASK_1_BARKER | 1490 DRV_RATE_MASK_2_BARKER | 1491 DRV_RATE_MASK_5_5_CCK | 1492 DRV_RATE_MASK_11_CCK | 1493 DRV_RATE_MASK_6_OFDM | 1494 DRV_RATE_MASK_9_OFDM | 1495 DRV_RATE_MASK_12_OFDM | 1496 DRV_RATE_MASK_18_OFDM; 1497 1498 case SUPPORTED_RATE_SET_UP_TO_24: 1499 return DRV_RATE_MASK_1_BARKER | 1500 DRV_RATE_MASK_2_BARKER | 1501 DRV_RATE_MASK_5_5_CCK | 1502 DRV_RATE_MASK_11_CCK | 1503 DRV_RATE_MASK_6_OFDM | 1504 DRV_RATE_MASK_9_OFDM | 1505 DRV_RATE_MASK_12_OFDM | 1506 DRV_RATE_MASK_18_OFDM | 1507 DRV_RATE_MASK_24_OFDM; 1508 1509 case SUPPORTED_RATE_SET_UP_TO_36: 1510 return DRV_RATE_MASK_1_BARKER | 1511 DRV_RATE_MASK_2_BARKER | 1512 DRV_RATE_MASK_5_5_CCK | 1513 DRV_RATE_MASK_11_CCK | 1514 DRV_RATE_MASK_6_OFDM | 1515 DRV_RATE_MASK_9_OFDM | 1516 DRV_RATE_MASK_12_OFDM | 1517 DRV_RATE_MASK_18_OFDM | 1518 DRV_RATE_MASK_24_OFDM | 1519 DRV_RATE_MASK_36_OFDM; 1520 1521 case SUPPORTED_RATE_SET_UP_TO_48: 1522 return DRV_RATE_MASK_1_BARKER | 1523 DRV_RATE_MASK_2_BARKER | 1524 DRV_RATE_MASK_5_5_CCK | 1525 DRV_RATE_MASK_11_CCK | 1526 DRV_RATE_MASK_6_OFDM | 1527 DRV_RATE_MASK_9_OFDM | 1528 DRV_RATE_MASK_12_OFDM | 1529 DRV_RATE_MASK_18_OFDM | 1530 DRV_RATE_MASK_24_OFDM | 1531 DRV_RATE_MASK_36_OFDM | 1532 DRV_RATE_MASK_48_OFDM; 1533 1534 case SUPPORTED_RATE_SET_UP_TO_54: 1535 return DRV_RATE_MASK_1_BARKER | 1536 DRV_RATE_MASK_2_BARKER | 1537 DRV_RATE_MASK_5_5_CCK | 1538 DRV_RATE_MASK_11_CCK | 1539 DRV_RATE_MASK_6_OFDM | 1540 DRV_RATE_MASK_9_OFDM | 1541 DRV_RATE_MASK_12_OFDM | 1542 DRV_RATE_MASK_18_OFDM | 1543 DRV_RATE_MASK_24_OFDM | 1544 DRV_RATE_MASK_36_OFDM | 1545 DRV_RATE_MASK_48_OFDM | 1546 DRV_RATE_MASK_54_OFDM; 1547 1548 case SUPPORTED_RATE_SET_ALL: 1549 return DRV_RATE_MASK_1_BARKER | 1550 DRV_RATE_MASK_2_BARKER | 1551 DRV_RATE_MASK_5_5_CCK | 1552 DRV_RATE_MASK_11_CCK | 1553 DRV_RATE_MASK_22_PBCC | 1554 DRV_RATE_MASK_6_OFDM | 1555 DRV_RATE_MASK_9_OFDM | 1556 DRV_RATE_MASK_12_OFDM | 1557 DRV_RATE_MASK_18_OFDM | 1558 DRV_RATE_MASK_24_OFDM | 1559 DRV_RATE_MASK_36_OFDM | 1560 DRV_RATE_MASK_48_OFDM | 1561 DRV_RATE_MASK_54_OFDM; 1562 1563 case SUPPORTED_RATE_SET_ALL_OFDM: 1564 return DRV_RATE_MASK_6_OFDM | 1565 DRV_RATE_MASK_9_OFDM | 1566 DRV_RATE_MASK_12_OFDM | 1567 DRV_RATE_MASK_18_OFDM | 1568 DRV_RATE_MASK_24_OFDM | 1569 DRV_RATE_MASK_36_OFDM | 1570 DRV_RATE_MASK_48_OFDM | 1571 DRV_RATE_MASK_54_OFDM; 1572 1573 case SUPPORTED_RATE_SET_ALL_MCS_RATES: 1574 return DRV_RATE_MASK_MCS_0_OFDM | 1575 DRV_RATE_MASK_MCS_1_OFDM | 1576 DRV_RATE_MASK_MCS_2_OFDM | 1577 DRV_RATE_MASK_MCS_3_OFDM | 1578 DRV_RATE_MASK_MCS_4_OFDM | 1579 DRV_RATE_MASK_MCS_5_OFDM | 1580 DRV_RATE_MASK_MCS_6_OFDM | 1581 DRV_RATE_MASK_MCS_7_OFDM | 1582 DRV_RATE_MASK_1_BARKER | 1583 DRV_RATE_MASK_2_BARKER | 1584 DRV_RATE_MASK_5_5_CCK | 1585 DRV_RATE_MASK_11_CCK | 1586 DRV_RATE_MASK_22_PBCC | 1587 DRV_RATE_MASK_6_OFDM | 1588 DRV_RATE_MASK_9_OFDM | 1589 DRV_RATE_MASK_12_OFDM | 1590 DRV_RATE_MASK_18_OFDM | 1591 DRV_RATE_MASK_24_OFDM | 1592 DRV_RATE_MASK_36_OFDM | 1593 DRV_RATE_MASK_48_OFDM | 1594 DRV_RATE_MASK_54_OFDM; 1595 1596 default: 1597 return DRV_RATE_MASK_1_BARKER | 1598 DRV_RATE_MASK_2_BARKER | 1599 DRV_RATE_MASK_5_5_CCK | 1600 DRV_RATE_MASK_11_CCK | 1601 DRV_RATE_MASK_22_PBCC | 1602 DRV_RATE_MASK_6_OFDM | 1603 DRV_RATE_MASK_9_OFDM | 1604 DRV_RATE_MASK_12_OFDM | 1605 DRV_RATE_MASK_18_OFDM | 1606 DRV_RATE_MASK_24_OFDM | 1607 DRV_RATE_MASK_36_OFDM | 1608 DRV_RATE_MASK_48_OFDM | 1609 DRV_RATE_MASK_54_OFDM; 1610 } 1611 } 1612 else 1613 { 1614 switch (eSupportedRateSet) 1615 { 1616 case SUPPORTED_RATE_SET_UP_TO_18: 1617 return DRV_RATE_MASK_6_OFDM | 1618 DRV_RATE_MASK_9_OFDM | 1619 DRV_RATE_MASK_12_OFDM | 1620 DRV_RATE_MASK_18_OFDM; 1621 1622 case SUPPORTED_RATE_SET_UP_TO_24: 1623 return DRV_RATE_MASK_6_OFDM | 1624 DRV_RATE_MASK_9_OFDM | 1625 DRV_RATE_MASK_12_OFDM | 1626 DRV_RATE_MASK_18_OFDM | 1627 DRV_RATE_MASK_24_OFDM; 1628 1629 case SUPPORTED_RATE_SET_UP_TO_36: 1630 return DRV_RATE_MASK_6_OFDM | 1631 DRV_RATE_MASK_9_OFDM | 1632 DRV_RATE_MASK_12_OFDM | 1633 DRV_RATE_MASK_18_OFDM | 1634 DRV_RATE_MASK_24_OFDM | 1635 DRV_RATE_MASK_36_OFDM; 1636 1637 case SUPPORTED_RATE_SET_UP_TO_48: 1638 return DRV_RATE_MASK_6_OFDM | 1639 DRV_RATE_MASK_9_OFDM | 1640 DRV_RATE_MASK_12_OFDM | 1641 DRV_RATE_MASK_18_OFDM | 1642 DRV_RATE_MASK_24_OFDM | 1643 DRV_RATE_MASK_36_OFDM | 1644 DRV_RATE_MASK_48_OFDM; 1645 1646 case SUPPORTED_RATE_SET_UP_TO_54: 1647 return DRV_RATE_MASK_6_OFDM | 1648 DRV_RATE_MASK_9_OFDM | 1649 DRV_RATE_MASK_12_OFDM | 1650 DRV_RATE_MASK_18_OFDM | 1651 DRV_RATE_MASK_24_OFDM | 1652 DRV_RATE_MASK_36_OFDM | 1653 DRV_RATE_MASK_48_OFDM | 1654 DRV_RATE_MASK_54_OFDM; 1655 1656 case SUPPORTED_RATE_SET_ALL: 1657 case SUPPORTED_RATE_SET_ALL_OFDM: 1658 return DRV_RATE_MASK_6_OFDM | 1659 DRV_RATE_MASK_9_OFDM | 1660 DRV_RATE_MASK_12_OFDM | 1661 DRV_RATE_MASK_18_OFDM | 1662 DRV_RATE_MASK_24_OFDM | 1663 DRV_RATE_MASK_36_OFDM | 1664 DRV_RATE_MASK_48_OFDM | 1665 DRV_RATE_MASK_54_OFDM; 1666 1667 case SUPPORTED_RATE_SET_ALL_MCS_RATES: 1668 return DRV_RATE_MASK_MCS_0_OFDM | 1669 DRV_RATE_MASK_MCS_1_OFDM | 1670 DRV_RATE_MASK_MCS_2_OFDM | 1671 DRV_RATE_MASK_MCS_3_OFDM | 1672 DRV_RATE_MASK_MCS_4_OFDM | 1673 DRV_RATE_MASK_MCS_5_OFDM | 1674 DRV_RATE_MASK_MCS_6_OFDM | 1675 DRV_RATE_MASK_MCS_7_OFDM | 1676 DRV_RATE_MASK_6_OFDM | 1677 DRV_RATE_MASK_9_OFDM | 1678 DRV_RATE_MASK_12_OFDM | 1679 DRV_RATE_MASK_18_OFDM | 1680 DRV_RATE_MASK_24_OFDM | 1681 DRV_RATE_MASK_36_OFDM | 1682 DRV_RATE_MASK_48_OFDM | 1683 DRV_RATE_MASK_54_OFDM; 1684 1685 default: 1686 return DRV_RATE_MASK_6_OFDM | 1687 DRV_RATE_MASK_9_OFDM | 1688 DRV_RATE_MASK_12_OFDM | 1689 DRV_RATE_MASK_18_OFDM | 1690 DRV_RATE_MASK_24_OFDM | 1691 DRV_RATE_MASK_36_OFDM | 1692 DRV_RATE_MASK_48_OFDM | 1693 DRV_RATE_MASK_54_OFDM; 1694 } 1695 } 1696 } 1697 1698 TI_STATUS rate_ValidateVsBand (TI_UINT32 *pSupportedMask, TI_UINT32 *pBasicMask, TI_BOOL bDot11a) 1699 { 1700 if (bDot11a) 1701 { 1702 *pSupportedMask &= ~ 1703 ( 1704 DRV_RATE_MASK_1_BARKER | 1705 DRV_RATE_MASK_2_BARKER | 1706 DRV_RATE_MASK_5_5_CCK | 1707 DRV_RATE_MASK_11_CCK | 1708 DRV_RATE_MASK_22_PBCC 1709 ); 1710 } 1711 1712 *pBasicMask &= *pSupportedMask; 1713 1714 if (*pBasicMask == 0) 1715 { 1716 if (bDot11a) 1717 { 1718 *pBasicMask = DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_24_OFDM; 1719 } 1720 else 1721 { 1722 *pBasicMask = DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER; 1723 } 1724 } 1725 1726 return TI_OK; 1727 } 1728 1729 /*----------------------------------------------------------------------------- 1730 Routine Name: RateNumberToHost 1731 Routine Description: 1732 Arguments: 1733 Return Value: None 1734 -----------------------------------------------------------------------------*/ 1735 ERate rate_NumberToDrv (TI_UINT32 rate) 1736 { 1737 switch (rate) 1738 { 1739 case 0x1: 1740 return DRV_RATE_1M; 1741 1742 case 0x2: 1743 return DRV_RATE_2M; 1744 1745 case 0x5: 1746 return DRV_RATE_5_5M; 1747 1748 case 0xB: 1749 return DRV_RATE_11M; 1750 1751 case 0x16: 1752 return DRV_RATE_22M; 1753 1754 case 0x6: 1755 return DRV_RATE_6M; 1756 1757 case 0x9: 1758 return DRV_RATE_9M; 1759 1760 case 0xC: 1761 return DRV_RATE_12M; 1762 1763 case 0x12: 1764 return DRV_RATE_18M; 1765 1766 case 0x18: 1767 return DRV_RATE_24M; 1768 1769 case 0x24: 1770 return DRV_RATE_36M; 1771 1772 case 0x30: 1773 return DRV_RATE_48M; 1774 1775 case 0x36: 1776 return DRV_RATE_54M; 1777 1778 /* MCS rate */ 1779 case 0x7: 1780 return DRV_RATE_MCS_0; 1781 1782 case 0xD: 1783 return DRV_RATE_MCS_1; 1784 1785 case 0x13: 1786 return DRV_RATE_MCS_2; 1787 1788 case 0x1A: 1789 return DRV_RATE_MCS_3; 1790 1791 case 0x27: 1792 return DRV_RATE_MCS_4; 1793 1794 case 0x34: 1795 return DRV_RATE_MCS_5; 1796 1797 case 0x3A: 1798 return DRV_RATE_MCS_6; 1799 1800 case 0x41: 1801 return DRV_RATE_MCS_7; 1802 1803 default: 1804 return DRV_RATE_6M; 1805 } 1806 } 1807 1808 TI_UINT32 rate_GetDrvBitmapForDefaultBasicSet () 1809 { 1810 return rate_BasicToDrvBitmap (BASIC_RATE_SET_1_2_5_5_11, TI_FALSE); 1811 } 1812 1813 TI_UINT32 rate_GetDrvBitmapForDefaultSupporteSet () 1814 { 1815 return rate_SupportedToDrvBitmap (SUPPORTED_RATE_SET_1_2_5_5_11, TI_FALSE); 1816 } 1817 1818