/* * rate.c * * Copyright(c) 1998 - 2010 Texas Instruments. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * Neither the name Texas Instruments nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** \file rate.c * \brief Rate conversion * * \see rate.h */ #define __FILE_ID__ FILE_ID_131 #include "tidef.h" #include "rate.h" ERate rate_NetToDrv (TI_UINT32 rate) { switch (rate) { case NET_RATE_1M: case NET_RATE_1M_BASIC: return DRV_RATE_1M; case NET_RATE_2M: case NET_RATE_2M_BASIC: return DRV_RATE_2M; case NET_RATE_5_5M: case NET_RATE_5_5M_BASIC: return DRV_RATE_5_5M; case NET_RATE_11M: case NET_RATE_11M_BASIC: return DRV_RATE_11M; case NET_RATE_22M: case NET_RATE_22M_BASIC: return DRV_RATE_22M; case NET_RATE_6M: case NET_RATE_6M_BASIC: return DRV_RATE_6M; case NET_RATE_9M: case NET_RATE_9M_BASIC: return DRV_RATE_9M; case NET_RATE_12M: case NET_RATE_12M_BASIC: return DRV_RATE_12M; case NET_RATE_18M: case NET_RATE_18M_BASIC: return DRV_RATE_18M; case NET_RATE_24M: case NET_RATE_24M_BASIC: return DRV_RATE_24M; case NET_RATE_36M: case NET_RATE_36M_BASIC: return DRV_RATE_36M; case NET_RATE_48M: case NET_RATE_48M_BASIC: return DRV_RATE_48M; case NET_RATE_54M: case NET_RATE_54M_BASIC: return DRV_RATE_54M; case NET_RATE_MCS0: case NET_RATE_MCS0_BASIC: return DRV_RATE_MCS_0; case NET_RATE_MCS1: case NET_RATE_MCS1_BASIC: return DRV_RATE_MCS_1; case NET_RATE_MCS2: case NET_RATE_MCS2_BASIC: return DRV_RATE_MCS_2; case NET_RATE_MCS3: case NET_RATE_MCS3_BASIC: return DRV_RATE_MCS_3; case NET_RATE_MCS4: case NET_RATE_MCS4_BASIC: return DRV_RATE_MCS_4; case NET_RATE_MCS5: case NET_RATE_MCS5_BASIC: return DRV_RATE_MCS_5; case NET_RATE_MCS6: case NET_RATE_MCS6_BASIC: return DRV_RATE_MCS_6; case NET_RATE_MCS7: case NET_RATE_MCS7_BASIC: return DRV_RATE_MCS_7; default: return DRV_RATE_INVALID; } } /************************************************************************ * hostToNetworkRate * ************************************************************************ DESCRIPTION: Translates a host rate (1, 2, 3, ....) to network rate (0x02, 0x82, 0x84, etc...) INPUT: rate - Host rate OUTPUT: RETURN: Network rate if the input rate is valid, otherwise returns 0. ************************************************************************/ ENetRate rate_DrvToNet (ERate rate) { switch (rate) { case DRV_RATE_AUTO: return NET_RATE_AUTO; case DRV_RATE_1M: return NET_RATE_1M; case DRV_RATE_2M: return NET_RATE_2M; case DRV_RATE_5_5M: return NET_RATE_5_5M; case DRV_RATE_11M: return NET_RATE_11M; case DRV_RATE_22M: return NET_RATE_22M; case DRV_RATE_6M: return NET_RATE_6M; case DRV_RATE_9M: return NET_RATE_9M; case DRV_RATE_12M: return NET_RATE_12M; case DRV_RATE_18M: return NET_RATE_18M; case DRV_RATE_24M: return NET_RATE_24M; case DRV_RATE_36M: return NET_RATE_36M; case DRV_RATE_48M: return NET_RATE_48M; case DRV_RATE_54M: return NET_RATE_54M; case DRV_RATE_MCS_0: return NET_RATE_MCS0; case DRV_RATE_MCS_1: return NET_RATE_MCS1; case DRV_RATE_MCS_2: return NET_RATE_MCS2; case DRV_RATE_MCS_3: return NET_RATE_MCS3; case DRV_RATE_MCS_4: return NET_RATE_MCS4; case DRV_RATE_MCS_5: return NET_RATE_MCS5; case DRV_RATE_MCS_6: return NET_RATE_MCS6; case DRV_RATE_MCS_7: return NET_RATE_MCS7; default: return NET_RATE_AUTO; } } /*************************************************************************** * getMaxActiveRatefromBitmap * **************************************************************************** * DESCRIPTION: * * INPUTS: hCtrlData - the object * * OUTPUT: * * RETURNS: ***************************************************************************/ ERate rate_GetMaxFromDrvBitmap (TI_UINT32 uRateBitMap) { if (uRateBitMap & DRV_RATE_MASK_MCS_7_OFDM) { return DRV_RATE_MCS_7; } if (uRateBitMap & DRV_RATE_MASK_MCS_6_OFDM) { return DRV_RATE_MCS_6; } if (uRateBitMap & DRV_RATE_MASK_MCS_5_OFDM) { return DRV_RATE_MCS_5; } if (uRateBitMap & DRV_RATE_MASK_MCS_4_OFDM) { return DRV_RATE_MCS_4; } if (uRateBitMap & DRV_RATE_MASK_MCS_3_OFDM) { return DRV_RATE_MCS_3; } if (uRateBitMap & DRV_RATE_MASK_MCS_2_OFDM) { return DRV_RATE_MCS_2; } if (uRateBitMap & DRV_RATE_MASK_MCS_1_OFDM) { return DRV_RATE_MCS_1; } if (uRateBitMap & DRV_RATE_MASK_MCS_0_OFDM) { return DRV_RATE_MCS_0; } if (uRateBitMap & DRV_RATE_MASK_54_OFDM) { return DRV_RATE_54M; } if (uRateBitMap & DRV_RATE_MASK_48_OFDM) { return DRV_RATE_48M; } if (uRateBitMap & DRV_RATE_MASK_36_OFDM) { return DRV_RATE_36M; } if (uRateBitMap & DRV_RATE_MASK_24_OFDM) { return DRV_RATE_24M; } if (uRateBitMap & DRV_RATE_MASK_22_PBCC) { return DRV_RATE_22M; } if (uRateBitMap & DRV_RATE_MASK_18_OFDM) { return DRV_RATE_18M; } if (uRateBitMap & DRV_RATE_MASK_12_OFDM) { return DRV_RATE_12M; } if (uRateBitMap & DRV_RATE_MASK_11_CCK) { return DRV_RATE_11M; } if (uRateBitMap & DRV_RATE_MASK_9_OFDM) { return DRV_RATE_9M; } if (uRateBitMap & DRV_RATE_MASK_6_OFDM) { return DRV_RATE_6M; } if (uRateBitMap & DRV_RATE_MASK_5_5_CCK) { return DRV_RATE_5_5M; } if (uRateBitMap & DRV_RATE_MASK_2_BARKER) { return DRV_RATE_2M; } if (uRateBitMap & DRV_RATE_MASK_1_BARKER) { return DRV_RATE_1M; } return DRV_RATE_INVALID; } /************************************************************************ * validateNetworkRate * ************************************************************************ DESCRIPTION: Verify that the input nitwork rate is valid INPUT: rate - input network rate OUTPUT: RETURN: TI_OK if valid, otherwise TI_NOK ************************************************************************/ static TI_STATUS rate_ValidateNet (ENetRate eRate) { switch (eRate) { case NET_RATE_1M: case NET_RATE_1M_BASIC: case NET_RATE_2M: case NET_RATE_2M_BASIC: case NET_RATE_5_5M: case NET_RATE_5_5M_BASIC: case NET_RATE_11M: case NET_RATE_11M_BASIC: case NET_RATE_22M: case NET_RATE_22M_BASIC: case NET_RATE_6M: case NET_RATE_6M_BASIC: case NET_RATE_9M: case NET_RATE_9M_BASIC: case NET_RATE_12M: case NET_RATE_12M_BASIC: case NET_RATE_18M: case NET_RATE_18M_BASIC: case NET_RATE_24M: case NET_RATE_24M_BASIC: case NET_RATE_36M: case NET_RATE_36M_BASIC: case NET_RATE_48M: case NET_RATE_48M_BASIC: case NET_RATE_54M: case NET_RATE_54M_BASIC: return TI_OK; default: return TI_NOK; } } /************************************************************************ * getMaxBasicRate * ************************************************************************ DESCRIPTION: Goes over an array of network rates and returns the max basic rate INPUT: pRates - Rate array OUTPUT: RETURN: Max basic rate (in network units) ************************************************************************/ ENetRate rate_GetMaxBasicFromStr (TI_UINT8 *pRatesString, TI_UINT32 len, ENetRate eMaxRate) { TI_UINT32 i; for (i = 0; i < len; i++) { if (NET_BASIC_RATE (pRatesString[i]) && rate_ValidateNet ((ENetRate)pRatesString[i]) == TI_OK) { eMaxRate = TI_MAX ((ENetRate)pRatesString[i], eMaxRate); } } return eMaxRate; } /************************************************************************ * getMaxActiveRate * ************************************************************************ DESCRIPTION: Goes over an array of network rates and returns the max active rate INPUT: pRates - Rate array OUTPUT: RETURN: Max active rate (in network units) ************************************************************************/ ENetRate rate_GetMaxActiveFromStr (TI_UINT8 *pRatesString, TI_UINT32 len, ENetRate eMaxRate) { TI_UINT32 i; for (i = 0; i < len; i++) { if (NET_ACTIVE_RATE (pRatesString[i]) && rate_ValidateNet ((ENetRate)pRatesString[i]) == TI_OK) { eMaxRate = TI_MAX ((ENetRate)pRatesString[i], eMaxRate); } } return eMaxRate; } TI_UINT32 rate_DrvToNumber (ERate eRate) { switch (eRate) { case DRV_RATE_1M: return 1; case DRV_RATE_2M: return 2; case DRV_RATE_5_5M: return 5; case DRV_RATE_11M: return 11; case DRV_RATE_22M: return 22; case DRV_RATE_6M: return 6; case DRV_RATE_9M: return 9; case DRV_RATE_12M: return 12; case DRV_RATE_18M: return 18; case DRV_RATE_24M: return 24; case DRV_RATE_36M: return 36; case DRV_RATE_48M: return 48; case DRV_RATE_54M: return 54; case DRV_RATE_MCS_0: return 6; case DRV_RATE_MCS_1: return 13; case DRV_RATE_MCS_2: return 19; case DRV_RATE_MCS_3: return 26; case DRV_RATE_MCS_4: return 39; case DRV_RATE_MCS_5: return 52; case DRV_RATE_MCS_6: return 58; case DRV_RATE_MCS_7: return 65; default: return 0; } } /************************************************************************ * bitMapToNetworkStringRates * ************************************************************************ DESCRIPTION: Converts bit map to the rates string INPUT: suppRatesBitMap - bit map of supported rates basicRatesBitMap - bit map of basic rates OUTPUT: string - network format rates array, len - rates array length firstOFDMrateLoc - the index of first OFDM rate in the rates array. RETURN: None ************************************************************************/ TI_STATUS rate_DrvBitmapToNetStr (TI_UINT32 uSuppRatesBitMap, TI_UINT32 uBasicRatesBitMap, TI_UINT8 *string, TI_UINT32 *len, TI_UINT32 *pFirstOfdmRate) { TI_UINT32 i = 0; if (uSuppRatesBitMap & DRV_RATE_MASK_1_BARKER) { if (uBasicRatesBitMap & DRV_RATE_MASK_1_BARKER) { string[i++] = NET_RATE_1M_BASIC; } else { string[i++] = NET_RATE_1M; } } if (uSuppRatesBitMap & DRV_RATE_MASK_2_BARKER) { if (uBasicRatesBitMap & DRV_RATE_MASK_2_BARKER) { string[i++] = NET_RATE_2M_BASIC; } else { string[i++] = NET_RATE_2M; } } if (uSuppRatesBitMap & DRV_RATE_MASK_5_5_CCK) { if (uBasicRatesBitMap & DRV_RATE_MASK_5_5_CCK) { string[i++] = NET_RATE_5_5M_BASIC; } else { string[i++] = NET_RATE_5_5M; } } if (uSuppRatesBitMap & DRV_RATE_MASK_11_CCK) { if (uBasicRatesBitMap & DRV_RATE_MASK_11_CCK) { string[i++] = NET_RATE_11M_BASIC; } else { string[i++] = NET_RATE_11M; } } if (uSuppRatesBitMap & DRV_RATE_MASK_22_PBCC) { if (uBasicRatesBitMap & DRV_RATE_MASK_22_PBCC) { string[i++] = NET_RATE_22M_BASIC; } else { string[i++] = NET_RATE_22M; } } *pFirstOfdmRate = i; if (uSuppRatesBitMap & DRV_RATE_MASK_6_OFDM) { if (uBasicRatesBitMap & DRV_RATE_MASK_6_OFDM) { string[i++] = NET_RATE_6M_BASIC; } else { string[i++] = NET_RATE_6M; } } if (uSuppRatesBitMap & DRV_RATE_MASK_9_OFDM) { if (uBasicRatesBitMap & DRV_RATE_MASK_9_OFDM) { string[i++] = NET_RATE_9M_BASIC; } else { string[i++] = NET_RATE_9M; } } if (uSuppRatesBitMap & DRV_RATE_MASK_12_OFDM) { if (uBasicRatesBitMap & DRV_RATE_MASK_12_OFDM) { string[i++] = NET_RATE_12M_BASIC; } else { string[i++] = NET_RATE_12M; } } if (uSuppRatesBitMap & DRV_RATE_MASK_18_OFDM) { if (uBasicRatesBitMap & DRV_RATE_MASK_18_OFDM) { string[i++] = NET_RATE_18M_BASIC; } else { string[i++] = NET_RATE_18M; } } if (uSuppRatesBitMap & DRV_RATE_MASK_24_OFDM) { if (uBasicRatesBitMap & DRV_RATE_MASK_24_OFDM) { string[i++] = NET_RATE_24M_BASIC; } else { string[i++] = NET_RATE_24M; } } if (uSuppRatesBitMap & DRV_RATE_MASK_36_OFDM) { if (uBasicRatesBitMap & DRV_RATE_MASK_36_OFDM) { string[i++] = NET_RATE_36M_BASIC; } else { string[i++] = NET_RATE_36M; } } if (uSuppRatesBitMap & DRV_RATE_MASK_48_OFDM) { if (uBasicRatesBitMap & DRV_RATE_MASK_48_OFDM) { string[i++] = NET_RATE_48M_BASIC; } else { string[i++] = NET_RATE_48M; } } if (uSuppRatesBitMap & DRV_RATE_MASK_54_OFDM) { if (uBasicRatesBitMap & DRV_RATE_MASK_54_OFDM) { string[i++] = NET_RATE_54M_BASIC; } else { string[i++] = NET_RATE_54M; } } *len = i; return TI_OK; } /************************************************************************ * bitMapToNetworkStringRates * ************************************************************************ DESCRIPTION: Converts bit map to the rates string INPUT: suppRatesBitMap - bit map of supported rates basicRatesBitMap - bit map of basic rates OUTPUT: string - network format rates array, len - rates array length firstOFDMrateLoc - the index of first OFDM rate in the rates array. RETURN: None ************************************************************************/ TI_STATUS rate_DrvBitmapToNetStrIncluding11n (TI_UINT32 uSuppRatesBitMap, TI_UINT32 uBasicRatesBitMap, TI_UINT8 *string, TI_UINT32 *pFirstOfdmRate) { TI_UINT32 i = 0; rate_DrvBitmapToNetStr (uSuppRatesBitMap, uBasicRatesBitMap, string, &i, pFirstOfdmRate); if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_0_OFDM) { if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_0_OFDM) { string[i++] = NET_RATE_MCS0_BASIC; } else { string[i++] = NET_RATE_MCS0; } } if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_1_OFDM) { if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_1_OFDM) { string[i++] = NET_RATE_MCS1_BASIC; } else { string[i++] = NET_RATE_MCS1; } } if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_2_OFDM) { if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_2_OFDM) { string[i++] = NET_RATE_MCS2_BASIC; } else { string[i++] = NET_RATE_MCS2; } } if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_3_OFDM) { if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_3_OFDM) { string[i++] = NET_RATE_MCS3_BASIC; } else { string[i++] = NET_RATE_MCS3; } } if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_4_OFDM) { if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_4_OFDM) { string[i++] = NET_RATE_MCS4_BASIC; } else { string[i++] = NET_RATE_MCS4; } } if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_5_OFDM) { if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_5_OFDM) { string[i++] = NET_RATE_MCS5_BASIC; } else { string[i++] = NET_RATE_MCS5; } } if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_6_OFDM) { if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_6_OFDM) { string[i++] = NET_RATE_MCS6_BASIC; } else { string[i++] = NET_RATE_MCS6; } } if (uSuppRatesBitMap & DRV_RATE_MASK_MCS_7_OFDM) { if (uBasicRatesBitMap & DRV_RATE_MASK_MCS_7_OFDM) { string[i++] = NET_RATE_MCS7_BASIC; } else { string[i++] = NET_RATE_MCS7; } } return TI_OK; } /************************************************************************ * networkStringToBitMapSuppRates * ************************************************************************ DESCRIPTION: Converts supported rates string to the bit map INPUT: string - array of rates in the network format len - array length OUTPUT: bitMap - bit map of rates. RETURN: None ************************************************************************/ TI_STATUS rate_NetStrToDrvBitmap (TI_UINT32 *pBitMap, TI_UINT8 *string, TI_UINT32 len) { TI_UINT32 i; *pBitMap = 0; for (i = 0; i < len; i++) { switch (string[i]) { case NET_RATE_1M: case NET_RATE_1M_BASIC: *pBitMap |= DRV_RATE_MASK_1_BARKER; break; case NET_RATE_2M: case NET_RATE_2M_BASIC: *pBitMap |= DRV_RATE_MASK_2_BARKER; break; case NET_RATE_5_5M: case NET_RATE_5_5M_BASIC: *pBitMap |= DRV_RATE_MASK_5_5_CCK; break; case NET_RATE_11M: case NET_RATE_11M_BASIC: *pBitMap |= DRV_RATE_MASK_11_CCK; break; case NET_RATE_22M: case NET_RATE_22M_BASIC: *pBitMap |= DRV_RATE_MASK_22_PBCC; break; case NET_RATE_6M: case NET_RATE_6M_BASIC: *pBitMap |= DRV_RATE_MASK_6_OFDM; break; case NET_RATE_9M: case NET_RATE_9M_BASIC: *pBitMap |= DRV_RATE_MASK_9_OFDM; break; case NET_RATE_12M: case NET_RATE_12M_BASIC: *pBitMap |= DRV_RATE_MASK_12_OFDM; break; case NET_RATE_18M: case NET_RATE_18M_BASIC: *pBitMap |= DRV_RATE_MASK_18_OFDM; break; case NET_RATE_24M: case NET_RATE_24M_BASIC: *pBitMap |= DRV_RATE_MASK_24_OFDM; break; case NET_RATE_36M: case NET_RATE_36M_BASIC: *pBitMap |= DRV_RATE_MASK_36_OFDM; break; case NET_RATE_48M: case NET_RATE_48M_BASIC: *pBitMap |= DRV_RATE_MASK_48_OFDM; break; case NET_RATE_54M: case NET_RATE_54M_BASIC: *pBitMap |= DRV_RATE_MASK_54_OFDM; break; case NET_RATE_MCS0: case NET_RATE_MCS0_BASIC: *pBitMap |= DRV_RATE_MASK_MCS_0_OFDM; break; case NET_RATE_MCS1: case NET_RATE_MCS1_BASIC: *pBitMap |= DRV_RATE_MASK_MCS_1_OFDM; break; case NET_RATE_MCS2: case NET_RATE_MCS2_BASIC: *pBitMap |= DRV_RATE_MASK_MCS_2_OFDM; break; case NET_RATE_MCS3: case NET_RATE_MCS3_BASIC: *pBitMap |= DRV_RATE_MASK_MCS_3_OFDM; break; case NET_RATE_MCS4: case NET_RATE_MCS4_BASIC: *pBitMap |= DRV_RATE_MASK_MCS_4_OFDM; break; case NET_RATE_MCS5: case NET_RATE_MCS5_BASIC: *pBitMap |= DRV_RATE_MASK_MCS_5_OFDM; break; case NET_RATE_MCS6: case NET_RATE_MCS6_BASIC: *pBitMap |= DRV_RATE_MASK_MCS_6_OFDM; break; case NET_RATE_MCS7: case NET_RATE_MCS7_BASIC: *pBitMap |= DRV_RATE_MASK_MCS_7_OFDM; break; default: break; } } return TI_OK; } /************************************************************************ * networkStringToBitMapBasicRates * ************************************************************************ DESCRIPTION: Converts basic rates string to the bit map INPUT: string - array of rates in the network format len - array length OUTPUT: bitMap - bit map of rates. RETURN: None ************************************************************************/ TI_STATUS rate_NetBasicStrToDrvBitmap (TI_UINT32 *pBitMap, TI_UINT8 *string, TI_UINT32 len) { TI_UINT32 i; *pBitMap = 0; for (i = 0; i < len; i++) { switch (string[i]) { case NET_RATE_1M_BASIC: *pBitMap |= DRV_RATE_MASK_1_BARKER; break; case NET_RATE_2M_BASIC: *pBitMap |= DRV_RATE_MASK_2_BARKER; break; case NET_RATE_5_5M_BASIC: *pBitMap |= DRV_RATE_MASK_5_5_CCK; break; case NET_RATE_11M_BASIC: *pBitMap |= DRV_RATE_MASK_11_CCK; break; case NET_RATE_22M_BASIC: *pBitMap |= DRV_RATE_MASK_22_PBCC; break; case NET_RATE_6M_BASIC: *pBitMap |= DRV_RATE_MASK_6_OFDM; break; case NET_RATE_9M_BASIC: *pBitMap |= DRV_RATE_MASK_9_OFDM; break; case NET_RATE_12M_BASIC: *pBitMap |= DRV_RATE_MASK_12_OFDM; break; case NET_RATE_18M_BASIC: *pBitMap |= DRV_RATE_MASK_18_OFDM; break; case NET_RATE_24M_BASIC: *pBitMap |= DRV_RATE_MASK_24_OFDM; break; case NET_RATE_36M_BASIC: *pBitMap |= DRV_RATE_MASK_36_OFDM; break; case NET_RATE_48M_BASIC: *pBitMap |= DRV_RATE_MASK_48_OFDM; break; case NET_RATE_54M_BASIC: *pBitMap |= DRV_RATE_MASK_54_OFDM; break; case NET_RATE_MCS0_BASIC: *pBitMap |= DRV_RATE_MASK_MCS_0_OFDM; break; case NET_RATE_MCS1_BASIC: *pBitMap |= DRV_RATE_MASK_MCS_1_OFDM; break; case NET_RATE_MCS2_BASIC: *pBitMap |= DRV_RATE_MASK_MCS_2_OFDM; break; case NET_RATE_MCS3_BASIC: *pBitMap |= DRV_RATE_MASK_MCS_3_OFDM; break; case NET_RATE_MCS4_BASIC: *pBitMap |= DRV_RATE_MASK_MCS_4_OFDM; break; case NET_RATE_MCS5_BASIC: *pBitMap |= DRV_RATE_MASK_MCS_5_OFDM; break; case NET_RATE_MCS6_BASIC: *pBitMap |= DRV_RATE_MASK_MCS_6_OFDM; break; case NET_RATE_MCS7_BASIC: *pBitMap |= DRV_RATE_MASK_MCS_7_OFDM; break; default: break; } } return TI_OK; } /************************************************************************ * rate_McsNetStrToDrvBitmap * ************************************************************************ DESCRIPTION: Converts MCS IEs rates bit map to driver bit map. supported only MCS0 - MCS7 INPUT: string - HT capabilities IE in the network format len - IE array length OUTPUT: bitMap - bit map of rates. RETURN: None ************************************************************************/ TI_STATUS rate_McsNetStrToDrvBitmap (TI_UINT32 *pBitMap, TI_UINT8 *string) { *pBitMap = string[0]; *pBitMap = *pBitMap << (DRV_RATE_MCS_0 - 1); return TI_OK; } TI_STATUS rate_DrvBitmapToHwBitmap (TI_UINT32 uDrvBitMap, TI_UINT32 *pHwBitmap) { TI_UINT32 uHwBitMap = 0; if (uDrvBitMap & DRV_RATE_MASK_1_BARKER) { uHwBitMap |= HW_BIT_RATE_1MBPS; } if (uDrvBitMap & DRV_RATE_MASK_2_BARKER) { uHwBitMap |= HW_BIT_RATE_2MBPS; } if (uDrvBitMap & DRV_RATE_MASK_5_5_CCK) { uHwBitMap |= HW_BIT_RATE_5_5MBPS; } if (uDrvBitMap & DRV_RATE_MASK_11_CCK) { uHwBitMap |= HW_BIT_RATE_11MBPS; } if (uDrvBitMap & DRV_RATE_MASK_22_PBCC) { uHwBitMap |= HW_BIT_RATE_22MBPS; } if (uDrvBitMap & DRV_RATE_MASK_6_OFDM) { uHwBitMap |= HW_BIT_RATE_6MBPS; } if (uDrvBitMap & DRV_RATE_MASK_9_OFDM) { uHwBitMap |= HW_BIT_RATE_9MBPS; } if (uDrvBitMap & DRV_RATE_MASK_12_OFDM) { uHwBitMap |= HW_BIT_RATE_12MBPS; } if (uDrvBitMap & DRV_RATE_MASK_18_OFDM) { uHwBitMap |= HW_BIT_RATE_18MBPS; } if (uDrvBitMap & DRV_RATE_MASK_24_OFDM) { uHwBitMap |= HW_BIT_RATE_24MBPS; } if (uDrvBitMap & DRV_RATE_MASK_36_OFDM) { uHwBitMap |= HW_BIT_RATE_36MBPS; } if (uDrvBitMap & DRV_RATE_MASK_48_OFDM) { uHwBitMap |= HW_BIT_RATE_48MBPS; } if (uDrvBitMap & DRV_RATE_MASK_54_OFDM) { uHwBitMap |= HW_BIT_RATE_54MBPS; } if (uDrvBitMap & DRV_RATE_MASK_MCS_0_OFDM) { uHwBitMap |= HW_BIT_RATE_MCS_0; } if (uDrvBitMap & DRV_RATE_MASK_MCS_1_OFDM) { uHwBitMap |= HW_BIT_RATE_MCS_1; } if (uDrvBitMap & DRV_RATE_MASK_MCS_2_OFDM) { uHwBitMap |= HW_BIT_RATE_MCS_2; } if (uDrvBitMap & DRV_RATE_MASK_MCS_3_OFDM) { uHwBitMap |= HW_BIT_RATE_MCS_3; } if (uDrvBitMap & DRV_RATE_MASK_MCS_4_OFDM) { uHwBitMap |= HW_BIT_RATE_MCS_4; } if (uDrvBitMap & DRV_RATE_MASK_MCS_5_OFDM) { uHwBitMap |= HW_BIT_RATE_MCS_5; } if (uDrvBitMap & DRV_RATE_MASK_MCS_6_OFDM) { uHwBitMap |= HW_BIT_RATE_MCS_6; } if (uDrvBitMap & DRV_RATE_MASK_MCS_7_OFDM) { uHwBitMap |= HW_BIT_RATE_MCS_7; } *pHwBitmap = uHwBitMap; return TI_OK; } TI_STATUS rate_PolicyToDrv (ETxRateClassId ePolicyRate, ERate *eAppRate) { ERate Rate = DRV_RATE_AUTO; TI_STATUS status = TI_OK; switch (ePolicyRate) { case txPolicy1 : Rate = DRV_RATE_1M ; break; case txPolicy2 : Rate = DRV_RATE_2M ; break; case txPolicy5_5 : Rate = DRV_RATE_5_5M ; break; case txPolicy11 : Rate = DRV_RATE_11M ; break; case txPolicy22 : Rate = DRV_RATE_22M ; break; case txPolicy6 : Rate = DRV_RATE_6M ; break; case txPolicy9 : Rate = DRV_RATE_9M ; break; case txPolicy12 : Rate = DRV_RATE_12M ; break; case txPolicy18 : Rate = DRV_RATE_18M ; break; case txPolicy24 : Rate = DRV_RATE_24M ; break; case txPolicy36 : Rate = DRV_RATE_36M ; break; case txPolicy48 : Rate = DRV_RATE_48M ; break; case txPolicy54 : Rate = DRV_RATE_54M ; break; case txPolicyMcs0 : Rate = DRV_RATE_MCS_0; break; case txPolicyMcs1 : Rate = DRV_RATE_MCS_1; break; case txPolicyMcs2 : Rate = DRV_RATE_MCS_2; break; case txPolicyMcs3 : Rate = DRV_RATE_MCS_3; break; case txPolicyMcs4 : Rate = DRV_RATE_MCS_4; break; case txPolicyMcs5 : Rate = DRV_RATE_MCS_5; break; case txPolicyMcs6 : Rate = DRV_RATE_MCS_6; break; case txPolicyMcs7 : Rate = DRV_RATE_MCS_7; break; default: status = TI_NOK; break; } if (status == TI_OK) *eAppRate = Rate; else *eAppRate = DRV_RATE_INVALID; return status; } TI_UINT32 rate_BasicToDrvBitmap (EBasicRateSet eBasicRateSet, TI_BOOL bDot11a) { if (!bDot11a) { switch (eBasicRateSet) { case BASIC_RATE_SET_1_2: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER; case BASIC_RATE_SET_1_2_5_5_11: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK; case BASIC_RATE_SET_UP_TO_12: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK | DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM; case BASIC_RATE_SET_UP_TO_18: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK | DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM; case BASIC_RATE_SET_UP_TO_24: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK | DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM; case BASIC_RATE_SET_UP_TO_36: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK | DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM | DRV_RATE_MASK_36_OFDM; case BASIC_RATE_SET_UP_TO_48: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK | DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM | DRV_RATE_MASK_36_OFDM | DRV_RATE_MASK_48_OFDM; case BASIC_RATE_SET_UP_TO_54: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK | DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM | DRV_RATE_MASK_36_OFDM | DRV_RATE_MASK_48_OFDM | DRV_RATE_MASK_54_OFDM; case BASIC_RATE_SET_6_12_24: return DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_24_OFDM; case BASIC_RATE_SET_1_2_5_5_6_11_12_24: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK | DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_24_OFDM; case BASIC_RATE_SET_ALL_MCS_RATES: return DRV_RATE_MASK_MCS_0_OFDM | DRV_RATE_MASK_MCS_1_OFDM | DRV_RATE_MASK_MCS_2_OFDM | DRV_RATE_MASK_MCS_3_OFDM | DRV_RATE_MASK_MCS_4_OFDM | DRV_RATE_MASK_MCS_5_OFDM | DRV_RATE_MASK_MCS_6_OFDM | DRV_RATE_MASK_MCS_7_OFDM | DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK; default: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER; } } else { switch (eBasicRateSet) { case BASIC_RATE_SET_UP_TO_12: return DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM; case BASIC_RATE_SET_UP_TO_18: return DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM; case BASIC_RATE_SET_UP_TO_24: return DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM; case BASIC_RATE_SET_UP_TO_36: return DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM | DRV_RATE_MASK_36_OFDM; case BASIC_RATE_SET_UP_TO_48: return DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM | DRV_RATE_MASK_36_OFDM | DRV_RATE_MASK_48_OFDM; case BASIC_RATE_SET_UP_TO_54: return DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM | DRV_RATE_MASK_36_OFDM | DRV_RATE_MASK_48_OFDM | DRV_RATE_MASK_54_OFDM; case BASIC_RATE_SET_6_12_24: return DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_24_OFDM; case BASIC_RATE_SET_ALL_MCS_RATES: return DRV_RATE_MASK_MCS_0_OFDM | DRV_RATE_MASK_MCS_1_OFDM | DRV_RATE_MASK_MCS_2_OFDM | DRV_RATE_MASK_MCS_3_OFDM | DRV_RATE_MASK_MCS_4_OFDM | DRV_RATE_MASK_MCS_5_OFDM | DRV_RATE_MASK_MCS_6_OFDM | DRV_RATE_MASK_MCS_7_OFDM | DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_24_OFDM; default: return DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_24_OFDM; } } } TI_UINT32 rate_SupportedToDrvBitmap (ESupportedRateSet eSupportedRateSet, TI_BOOL bDot11a) { if (!bDot11a) { switch (eSupportedRateSet) { case SUPPORTED_RATE_SET_1_2: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER; case SUPPORTED_RATE_SET_1_2_5_5_11: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK; case SUPPORTED_RATE_SET_1_2_5_5_11_22: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK | DRV_RATE_MASK_22_PBCC; case SUPPORTED_RATE_SET_UP_TO_18: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK | DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM; case SUPPORTED_RATE_SET_UP_TO_24: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK | DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM; case SUPPORTED_RATE_SET_UP_TO_36: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK | DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM | DRV_RATE_MASK_36_OFDM; case SUPPORTED_RATE_SET_UP_TO_48: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK | DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM | DRV_RATE_MASK_36_OFDM | DRV_RATE_MASK_48_OFDM; case SUPPORTED_RATE_SET_UP_TO_54: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK | DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM | DRV_RATE_MASK_36_OFDM | DRV_RATE_MASK_48_OFDM | DRV_RATE_MASK_54_OFDM; case SUPPORTED_RATE_SET_ALL: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK | DRV_RATE_MASK_22_PBCC | DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM | DRV_RATE_MASK_36_OFDM | DRV_RATE_MASK_48_OFDM | DRV_RATE_MASK_54_OFDM; case SUPPORTED_RATE_SET_ALL_OFDM: return DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM | DRV_RATE_MASK_36_OFDM | DRV_RATE_MASK_48_OFDM | DRV_RATE_MASK_54_OFDM; case SUPPORTED_RATE_SET_ALL_MCS_RATES: return DRV_RATE_MASK_MCS_0_OFDM | DRV_RATE_MASK_MCS_1_OFDM | DRV_RATE_MASK_MCS_2_OFDM | DRV_RATE_MASK_MCS_3_OFDM | DRV_RATE_MASK_MCS_4_OFDM | DRV_RATE_MASK_MCS_5_OFDM | DRV_RATE_MASK_MCS_6_OFDM | DRV_RATE_MASK_MCS_7_OFDM | DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK | DRV_RATE_MASK_22_PBCC | DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM | DRV_RATE_MASK_36_OFDM | DRV_RATE_MASK_48_OFDM | DRV_RATE_MASK_54_OFDM; default: return DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK | DRV_RATE_MASK_22_PBCC | DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM | DRV_RATE_MASK_36_OFDM | DRV_RATE_MASK_48_OFDM | DRV_RATE_MASK_54_OFDM; } } else { switch (eSupportedRateSet) { case SUPPORTED_RATE_SET_UP_TO_18: return DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM; case SUPPORTED_RATE_SET_UP_TO_24: return DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM; case SUPPORTED_RATE_SET_UP_TO_36: return DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM | DRV_RATE_MASK_36_OFDM; case SUPPORTED_RATE_SET_UP_TO_48: return DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM | DRV_RATE_MASK_36_OFDM | DRV_RATE_MASK_48_OFDM; case SUPPORTED_RATE_SET_UP_TO_54: return DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM | DRV_RATE_MASK_36_OFDM | DRV_RATE_MASK_48_OFDM | DRV_RATE_MASK_54_OFDM; case SUPPORTED_RATE_SET_ALL: case SUPPORTED_RATE_SET_ALL_OFDM: return DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM | DRV_RATE_MASK_36_OFDM | DRV_RATE_MASK_48_OFDM | DRV_RATE_MASK_54_OFDM; case SUPPORTED_RATE_SET_ALL_MCS_RATES: return DRV_RATE_MASK_MCS_0_OFDM | DRV_RATE_MASK_MCS_1_OFDM | DRV_RATE_MASK_MCS_2_OFDM | DRV_RATE_MASK_MCS_3_OFDM | DRV_RATE_MASK_MCS_4_OFDM | DRV_RATE_MASK_MCS_5_OFDM | DRV_RATE_MASK_MCS_6_OFDM | DRV_RATE_MASK_MCS_7_OFDM | DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM | DRV_RATE_MASK_36_OFDM | DRV_RATE_MASK_48_OFDM | DRV_RATE_MASK_54_OFDM; default: return DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_9_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_18_OFDM | DRV_RATE_MASK_24_OFDM | DRV_RATE_MASK_36_OFDM | DRV_RATE_MASK_48_OFDM | DRV_RATE_MASK_54_OFDM; } } } TI_STATUS rate_ValidateVsBand (TI_UINT32 *pSupportedMask, TI_UINT32 *pBasicMask, TI_BOOL bDot11a) { if (bDot11a) { *pSupportedMask &= ~ ( DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER | DRV_RATE_MASK_5_5_CCK | DRV_RATE_MASK_11_CCK | DRV_RATE_MASK_22_PBCC ); } *pBasicMask &= *pSupportedMask; if (*pBasicMask == 0) { if (bDot11a) { *pBasicMask = DRV_RATE_MASK_6_OFDM | DRV_RATE_MASK_12_OFDM | DRV_RATE_MASK_24_OFDM; } else { *pBasicMask = DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER; } } return TI_OK; } /*----------------------------------------------------------------------------- Routine Name: RateNumberToHost Routine Description: Arguments: Return Value: None -----------------------------------------------------------------------------*/ ERate rate_NumberToDrv (TI_UINT32 rate) { switch (rate) { case 0x1: return DRV_RATE_1M; case 0x2: return DRV_RATE_2M; case 0x5: return DRV_RATE_5_5M; case 0xB: return DRV_RATE_11M; case 0x16: return DRV_RATE_22M; case 0x6: return DRV_RATE_6M; case 0x9: return DRV_RATE_9M; case 0xC: return DRV_RATE_12M; case 0x12: return DRV_RATE_18M; case 0x18: return DRV_RATE_24M; case 0x24: return DRV_RATE_36M; case 0x30: return DRV_RATE_48M; case 0x36: return DRV_RATE_54M; /* MCS rate */ case 0x7: return DRV_RATE_MCS_0; case 0xD: return DRV_RATE_MCS_1; case 0x13: return DRV_RATE_MCS_2; case 0x1A: return DRV_RATE_MCS_3; case 0x27: return DRV_RATE_MCS_4; case 0x34: return DRV_RATE_MCS_5; case 0x3A: return DRV_RATE_MCS_6; case 0x41: return DRV_RATE_MCS_7; default: return DRV_RATE_6M; } } TI_UINT32 rate_GetDrvBitmapForDefaultBasicSet () { return rate_BasicToDrvBitmap (BASIC_RATE_SET_1_2_5_5_11, TI_FALSE); } TI_UINT32 rate_GetDrvBitmapForDefaultSupporteSet () { return rate_SupportedToDrvBitmap (SUPPORTED_RATE_SET_1_2_5_5_11, TI_FALSE); }