nic_rate.c 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. /*
  2. **
  3. */
  4. /*! \file "nic_rate.c"
  5. \brief This file contains the transmission rate handling routines.
  6. This file contains the transmission rate handling routines for setting up
  7. ACK/CTS Rate, Highest Tx Rate, Lowest Tx Rate, Initial Tx Rate and do
  8. conversion between Rate Set and Data Rates.
  9. */
  10. /*
  11. ** Log: rate.c
  12. **
  13. ** 07 12 2013 terry.wu
  14. ** [BORA00002207] [MT6630 Wi-Fi] TXM & MQM Implementation
  15. ** 1. Update VHT IE composing function
  16. ** 2. disable bow
  17. ** 3. Exchange bss/sta rec update sequence for temp solution
  18. **
  19. ** 11 06 2012 eason.tsai
  20. ** [BORA00002255] [MT6630 Wi-Fi][Driver] develop
  21. ** .
  22. **
  23. ** 09 17 2012 cm.chang
  24. ** [BORA00002149] [MT6630 Wi-Fi] Initial software development
  25. ** Duplicate source from MT6620 v2.3 driver branch
  26. ** (Davinci label: MT6620_WIFI_Driver_V2_3_120913_1942_As_MT6630_Base)
  27. *
  28. * 07 08 2010 cp.wu
  29. *
  30. * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
  31. *
  32. * 06 08 2010 cp.wu
  33. * [WPD00003833][MT6620 and MT5931] Driver migration
  34. * add rate.c.
  35. *
  36. * 03 16 2010 kevin.huang
  37. * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support
  38. * Add AdHoc Mode
  39. *
  40. * 12 18 2009 cm.chang
  41. * [BORA00000018]Integrate WIFI part into BORA for the 1st time
  42. * .
  43. *
  44. * Nov 23 2009 mtk01461
  45. * [BORA00000018] Integrate WIFI part into BORA for the 1st time
  46. * Update comments
  47. *
  48. * Nov 16 2009 mtk01461
  49. * [BORA00000018] Integrate WIFI part into BORA for the 1st time
  50. * Fix DBGLOG
  51. *
  52. * Nov 5 2009 mtk01461
  53. * [BORA00000018] Integrate WIFI part into BORA for the 1st time
  54. *
  55. ** \main\maintrunk.MT5921\12 2008-12-19 17:19:32 GMT mtk01461
  56. ** Fix the problem that do not ASSERT the length of Supported Rate IE == 8
  57. ** \main\maintrunk.MT5921\11 2008-12-01 18:17:42 GMT mtk01088
  58. ** fixed the lint "possible using null pointer" warning
  59. ** \main\maintrunk.MT5921\10 2008-08-20 00:16:36 GMT mtk01461
  60. ** Update for Driver Review
  61. ** \main\maintrunk.MT5921\9 2008-04-13 21:17:13 GMT mtk01461
  62. ** Revise GEN Link Speed OID
  63. ** \main\maintrunk.MT5921\8 2008-03-28 10:40:13 GMT mtk01461
  64. ** Add rateGetRateSetFromDataRates() for set desired rate OID
  65. ** \main\maintrunk.MT5921\7 2008-03-26 09:16:20 GMT mtk01461
  66. ** Add adopt operational rate as ACK rate if BasicRateSet was not found
  67. ** Add comments
  68. ** \main\maintrunk.MT5921\6 2008-02-21 15:01:39 GMT mtk01461
  69. ** Add initial rate according rx signal quality support
  70. ** \main\maintrunk.MT5921\5 2008-01-07 15:06:44 GMT mtk01461
  71. ** Fix typo of rate adaptation of CtrlResp Frame
  72. ** \main\maintrunk.MT5921\4 2007-10-25 18:05:12 GMT mtk01461
  73. ** Add VOIP SCAN Support & Refine Roaming
  74. */
  75. /*******************************************************************************
  76. * C O M P I L E R F L A G S
  77. ********************************************************************************
  78. */
  79. /*******************************************************************************
  80. * E X T E R N A L R E F E R E N C E S
  81. ********************************************************************************
  82. */
  83. #include "precomp.h"
  84. /*******************************************************************************
  85. * C O N S T A N T S
  86. ********************************************************************************
  87. */
  88. const UINT_16 au2RateCCKLong[CCK_RATE_NUM] = {
  89. RATE_CCK_1M_LONG, /* RATE_1M_INDEX = 0 */
  90. RATE_CCK_2M_LONG, /* RATE_2M_INDEX */
  91. RATE_CCK_5_5M_LONG, /* RATE_5_5M_INDEX */
  92. RATE_CCK_11M_LONG /* RATE_11M_INDEX */
  93. };
  94. const UINT_16 au2RateCCKShort[CCK_RATE_NUM] = {
  95. RATE_CCK_1M_LONG, /* RATE_1M_INDEX = 0 */
  96. RATE_CCK_2M_SHORT, /* RATE_2M_INDEX */
  97. RATE_CCK_5_5M_SHORT, /* RATE_5_5M_INDEX */
  98. RATE_CCK_11M_SHORT /* RATE_11M_INDEX */
  99. };
  100. const UINT_16 au2RateOFDM[OFDM_RATE_NUM] = {
  101. RATE_OFDM_6M, /* RATE_6M_INDEX */
  102. RATE_OFDM_9M, /* RATE_9M_INDEX */
  103. RATE_OFDM_12M, /* RATE_12M_INDEX */
  104. RATE_OFDM_18M, /* RATE_18M_INDEX */
  105. RATE_OFDM_24M, /* RATE_24M_INDEX */
  106. RATE_OFDM_36M, /* RATE_36M_INDEX */
  107. RATE_OFDM_48M, /* RATE_48M_INDEX */
  108. RATE_OFDM_54M /* RATE_54M_INDEX */
  109. };
  110. const UINT_16 au2RateHTMixed[HT_RATE_NUM] = {
  111. RATE_MM_MCS_32, /* RATE_MCS32_INDEX, */
  112. RATE_MM_MCS_0, /* RATE_MCS0_INDEX, */
  113. RATE_MM_MCS_1, /* RATE_MCS1_INDEX, */
  114. RATE_MM_MCS_2, /* RATE_MCS2_INDEX, */
  115. RATE_MM_MCS_3, /* RATE_MCS3_INDEX, */
  116. RATE_MM_MCS_4, /* RATE_MCS4_INDEX, */
  117. RATE_MM_MCS_5, /* RATE_MCS5_INDEX, */
  118. RATE_MM_MCS_6, /* RATE_MCS6_INDEX, */
  119. RATE_MM_MCS_7 /* RATE_MCS7_INDEX, */
  120. };
  121. const UINT_16 au2RateHTGreenField[HT_RATE_NUM] = {
  122. RATE_GF_MCS_32, /* RATE_MCS32_INDEX, */
  123. RATE_GF_MCS_0, /* RATE_MCS0_INDEX, */
  124. RATE_GF_MCS_1, /* RATE_MCS1_INDEX, */
  125. RATE_GF_MCS_2, /* RATE_MCS2_INDEX, */
  126. RATE_GF_MCS_3, /* RATE_MCS3_INDEX, */
  127. RATE_GF_MCS_4, /* RATE_MCS4_INDEX, */
  128. RATE_GF_MCS_5, /* RATE_MCS5_INDEX, */
  129. RATE_GF_MCS_6, /* RATE_MCS6_INDEX, */
  130. RATE_GF_MCS_7, /* RATE_MCS7_INDEX, */
  131. };
  132. const UINT_16 au2RateVHT[VHT_RATE_NUM] = {
  133. RATE_VHT_MCS_0, /* RATE_MCS0_INDEX, */
  134. RATE_VHT_MCS_1, /* RATE_MCS1_INDEX, */
  135. RATE_VHT_MCS_2, /* RATE_MCS2_INDEX, */
  136. RATE_VHT_MCS_3, /* RATE_MCS3_INDEX, */
  137. RATE_VHT_MCS_4, /* RATE_MCS4_INDEX, */
  138. RATE_VHT_MCS_5, /* RATE_MCS5_INDEX, */
  139. RATE_VHT_MCS_6, /* RATE_MCS6_INDEX, */
  140. RATE_VHT_MCS_7, /* RATE_MCS7_INDEX, */
  141. RATE_VHT_MCS_8, /* RATE_MCS8_INDEX, */
  142. RATE_VHT_MCS_9 /* RATE_MCS9_INDEX, */
  143. };
  144. /*******************************************************************************
  145. * D A T A T Y P E S
  146. ********************************************************************************
  147. */
  148. /*******************************************************************************
  149. * P U B L I C D A T A
  150. ********************************************************************************
  151. */
  152. /*******************************************************************************
  153. * P R I V A T E D A T A
  154. ********************************************************************************
  155. */
  156. /*******************************************************************************
  157. * M A C R O S
  158. ********************************************************************************
  159. */
  160. /*******************************************************************************
  161. * F U N C T I O N D E C L A R A T I O N S
  162. ********************************************************************************
  163. */
  164. /*******************************************************************************
  165. * F U N C T I O N S
  166. ********************************************************************************
  167. */
  168. WLAN_STATUS nicRateIndex2RateCode(IN UINT_8 ucPreambleOption, IN UINT_8 ucRateIndex, OUT PUINT_16 pu2RateCode)
  169. {
  170. switch (ucPreambleOption) {
  171. case PREAMBLE_DEFAULT_LONG_NONE:
  172. if (ucRateIndex >= CCK_RATE_NUM)
  173. return WLAN_STATUS_INVALID_DATA;
  174. *pu2RateCode = au2RateCCKLong[ucRateIndex];
  175. break;
  176. case PREAMBLE_OPTION_SHORT:
  177. if (ucRateIndex >= CCK_RATE_NUM)
  178. return WLAN_STATUS_INVALID_DATA;
  179. *pu2RateCode = au2RateCCKShort[ucRateIndex];
  180. break;
  181. case PREAMBLE_OFDM_MODE:
  182. if (ucRateIndex >= OFDM_RATE_NUM)
  183. return WLAN_STATUS_INVALID_DATA;
  184. *pu2RateCode = au2RateOFDM[ucRateIndex];
  185. break;
  186. case PREAMBLE_HT_MIXED_MODE:
  187. if (ucRateIndex >= HT_RATE_NUM)
  188. return WLAN_STATUS_INVALID_DATA;
  189. *pu2RateCode = au2RateHTMixed[ucRateIndex];
  190. break;
  191. case PREAMBLE_HT_GREEN_FIELD:
  192. if (ucRateIndex >= HT_RATE_NUM)
  193. return WLAN_STATUS_INVALID_DATA;
  194. *pu2RateCode = au2RateHTGreenField[ucRateIndex];
  195. break;
  196. case PREAMBLE_VHT_FIELD:
  197. if (ucRateIndex >= VHT_RATE_NUM)
  198. return WLAN_STATUS_INVALID_DATA;
  199. *pu2RateCode = au2RateVHT[ucRateIndex];
  200. break;
  201. default:
  202. return WLAN_STATUS_INVALID_DATA;
  203. }
  204. return WLAN_STATUS_SUCCESS;
  205. }