PageRenderTime 56ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 1ms

/drivers/net/wireless/tiwlan1251/common/src/core/data_ctrl/Ctrl/Ctrl.c

https://bitbucket.org/cyanogenmod/cm-kernel
C | 2251 lines | 1292 code | 359 blank | 600 comment | 174 complexity | 0029e10247c32a9f141d8e4d5eac7920 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0

Large files files are truncated, but you can click here to view the full file

  1. /****************************************************************************
  2. **+-----------------------------------------------------------------------+**
  3. **| |**
  4. **| Copyright(c) 1998 - 2008 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. /***************************************************************************/
  36. /* */
  37. /* MODULE: Ctrl.c */
  38. /* PURPOSE: Control module functions */
  39. /* */
  40. /***************************************************************************/
  41. #include "Ctrl.h"
  42. #include "802_11Defs.h"
  43. #include "DataCtrl_Api.h"
  44. #include "osApi.h"
  45. #include "report.h"
  46. #include "utils.h"
  47. #include "smeApi.h"
  48. #include "siteMgrApi.h"
  49. #include "Ethernet.h"
  50. #include "tx.h"
  51. #include "TrafficMonitorAPI.h"
  52. #include "TI_IPC_Api.h"
  53. #include "EvHandler.h"
  54. #include "apConn.h"
  55. #include "TNETW_Driver_api.h"
  56. #include "Core_AdaptTx.h"
  57. #include "whalCtrl_api.h"
  58. static void selectRateTable(TI_HANDLE hCtrlData, UINT32 rateMask);
  59. static void ctrlData_setTxRatePolicies(ctrlData_t *pCtrlData);
  60. static void ctrlData_resetCounters(TI_HANDLE hCtrlData);
  61. static void ctrlData_resetCounters(TI_HANDLE hCtrlData);
  62. static void ctrlData_UnregisterTrafficIntensityEvents (TI_HANDLE hCtrlData);
  63. static void ctrlData_RegisterTrafficIntensityEvents (TI_HANDLE hCtrlData);
  64. static UINT32 ctrlData_buildHwBitMapFromArray(policyClassRatesArray_t *pArray);
  65. static void ctrlData_storeTSRateSet(ctrlData_t *pCtrlData, txDataQosParams_t *tsrsParams);
  66. static rate_e ctrlData_getClosestTSRate(ctrlData_t *pCtrlData, UINT32 ac, rate_e givenRate);
  67. void ctrlData_TrafficThresholdCrossed(TI_HANDLE Context,UINT32 Cookie);
  68. /* definitions for medium usage calculations - in uSec units*/
  69. #define AVERAGE_ACK_TIME 10
  70. #define AVERAGE_CTS_TIME 20
  71. #define B_SIFS 10
  72. #define SHORT_PREAMBLE_TIME 96
  73. #define LONG_PREAMBLE_TIME 192
  74. #define OFDM_PREAMBLE 12
  75. #define OFDM_SIGNAL_EXT 6
  76. #define OFDM_PLCP_HDR 24
  77. #define OFDM_DURATION (B_SIFS + OFDM_PLCP_HDR + OFDM_SIGNAL_EXT)
  78. #define NONOFDM_SHORT_DURATION (B_SIFS + SHORT_PREAMBLE_TIME)
  79. #define NONOFDM_LONG_DURATION (B_SIFS + LONG_PREAMBLE_TIME)
  80. /*************************************************************************
  81. * ctrlData_create *
  82. **************************************************************************
  83. * DESCRIPTION: This function initializes the Ctrl data module.
  84. *
  85. * INPUT: hOs - handle to Os Abstraction Layer
  86. *
  87. * OUTPUT: TxCmplt_CB - call back function that return to configMngr
  88. * in order to register in the Hal
  89. *
  90. * RETURN: Handle to the allocated Ctrl data control block
  91. ************************************************************************/
  92. TI_HANDLE ctrlData_create(TI_HANDLE hOs)
  93. {
  94. ctrlData_t* hCtrlData;
  95. rateAdaptation_t* pRateAdaptation;
  96. #ifdef SUPPORT_4X
  97. fourX_t* pFourX;
  98. #endif
  99. classifier_t* pClsfr;
  100. if( hOs == NULL )
  101. {
  102. WLAN_OS_REPORT(("FATAL ERROR: ctrlData_create(): OS handle Error - Aborting\n"));
  103. return NULL;
  104. }
  105. /* alocate Control module control block */
  106. hCtrlData = os_memoryAlloc(hOs, (sizeof(ctrlData_t)));
  107. if(!hCtrlData)
  108. return NULL;
  109. /* create rate adaptation module */
  110. pRateAdaptation = rateAdaptation_create(hOs);
  111. #ifdef SUPPORT_4X
  112. /* create 4X module */
  113. pFourX = fourX_create(hOs);
  114. #endif
  115. /* create the classifier module */
  116. pClsfr = Classifier_create(hOs);
  117. if ( (!pRateAdaptation)
  118. #ifdef SUPPORT_4X
  119. || (!pFourX)
  120. #endif
  121. )
  122. {
  123. utils_nullMemoryFree(hOs, pRateAdaptation, sizeof(rateAdaptation_t));
  124. #ifdef SUPPORT_4X
  125. utils_nullMemoryFree(hOs, pFourX, sizeof(fourX_t));
  126. #endif
  127. utils_nullMemoryFree(hOs, hCtrlData, sizeof(ctrlData_t));
  128. WLAN_OS_REPORT(("FATAL ERROR: ctrlData_create(): Error Creating Ctrl Module - Aborting\n"));
  129. return(NULL);
  130. }
  131. /* reset control module control block */
  132. os_memoryZero(hOs, hCtrlData, (sizeof(ctrlData_t)));
  133. hCtrlData->pRateAdaptation = pRateAdaptation;
  134. #ifdef SUPPORT_4X
  135. hCtrlData->pFourX = pFourX;
  136. #endif
  137. hCtrlData->pClsfr = pClsfr;
  138. hCtrlData->hOs = hOs;
  139. return(hCtrlData);
  140. }
  141. /***************************************************************************
  142. * ctrlData_config *
  143. ****************************************************************************
  144. * DESCRIPTION: This function configures the Ctrl Data module
  145. *
  146. * INPUTS: hCtrlData - The object
  147. * hWhalCtrl - Handle to the Whal Ctrl object
  148. * hSiteMgrHandle - Handle to the Site Mngr object
  149. * hTxData - Handle to the Tx Data object
  150. * hRxData - Handle to the Rx Data object
  151. * hOs - Handle to the Os Abstraction Layer
  152. * hReport - Handle to the Report object
  153. * ctrlDataInitParams - pointer to Ctrl module init parameters
  154. * OUTPUT:
  155. *
  156. * RETURNS: OK - Configuration succesfull
  157. * NOK - Configuration unsuccesfull
  158. ***************************************************************************/
  159. TI_STATUS ctrlData_config(TI_HANDLE hCtrlData,
  160. TI_HANDLE hWhalCtrl,
  161. TI_HANDLE hSiteMgrHandle,
  162. TI_HANDLE hTxData,
  163. TI_HANDLE hRxData,
  164. TI_HANDLE hOs,
  165. TI_HANDLE hReport,
  166. TI_HANDLE hMemMngr,
  167. TI_HANDLE hEvHandler,
  168. TI_HANDLE hAPConnection,
  169. TI_HANDLE hTrafficMonitor,
  170. disassocSentCB_t disassocSentCBFunc,
  171. TI_HANDLE disassocSentCBObj,
  172. ctrlDataInitParams_t *ctrlDataInitParams)
  173. {
  174. ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
  175. TI_STATUS Status = OK;
  176. rateClassClients_e clientIDindex;
  177. txRateClassId_e TxRateIndex;
  178. UINT32 ac;
  179. /* check parameters validity */
  180. if( hCtrlData == NULL || hWhalCtrl == NULL || hSiteMgrHandle == NULL || hRxData == NULL ||
  181. hTxData == NULL || hOs == NULL || hReport == NULL || hMemMngr == NULL || ctrlDataInitParams == NULL)
  182. {
  183. WLAN_OS_REPORT(("FATAL ERROR: ctrlData_config(): Parameters Error - Aborting\n"));
  184. return NOK;
  185. }
  186. /* set objects handles */
  187. pCtrlData->hWhalCtrl = hWhalCtrl;
  188. pCtrlData->hSiteMgr = hSiteMgrHandle;
  189. pCtrlData->hTxData = hTxData;
  190. pCtrlData->hRxData = hRxData;
  191. pCtrlData->hOs = hOs;
  192. pCtrlData->hReport = hReport;
  193. pCtrlData->hAPConn = hAPConnection;
  194. pCtrlData->hEvHandler = hEvHandler;
  195. pCtrlData->hTrafficMonitor = hTrafficMonitor;
  196. pCtrlData->disassocSentCBObj = disassocSentCBObj;
  197. pCtrlData->disassocSentCBFunc = disassocSentCBFunc;
  198. /* set Control module parameters */
  199. pCtrlData->ctrlDataRateControlEnable = ctrlDataInitParams->ctrlDataRateControlEnable;
  200. pCtrlData->ctrlDataIbssProtectionType = ctrlDataInitParams->ctrlDataDesiredIbssProtection;
  201. pCtrlData->ctrlDataRtsCtsStatus = ctrlDataInitParams->ctrlDataDesiredCtsRtsStatus;
  202. #ifdef SUPPORT_4X
  203. pCtrlData->ctrlDataFourXEnable = ctrlDataInitParams->ctrlDataFourXEnable;
  204. pCtrlData->ctrlDataCerruentFourXstate = ctrlDataInitParams->ctrlDataFourXEnable;
  205. #else
  206. pCtrlData->ctrlDataFourXEnable = FALSE;
  207. pCtrlData->ctrlDataCerruentFourXstate = FALSE;
  208. #endif
  209. MAC_COPY(pCtrlData->hOs, (&pCtrlData->ctrlDataDeviceMacAddress),
  210. (&ctrlDataInitParams->ctrlDataDeviceMacAddress));
  211. pCtrlData->ctrlDataStartStoplinkControlAlg = DEF_START_STOP_LINK_CTRL_ALG;
  212. pCtrlData->ctrlDataCurrentBasicRate = DEF_BASIC_RATE;
  213. pCtrlData->ctrlDataBasicRateBitMask = DEF_BASIC_RATE_MASK;
  214. pCtrlData->ctrlDataCurrentBasicModulationType = DRV_MODULATION_QPSK;
  215. pCtrlData->ctrlDataCurrentModulationType = DEF_CURRENT_MUDULATION_TYPE;
  216. pCtrlData->ctrlDataCurrentBssType = BSS_INFRASTRUCTURE;
  217. os_memoryCopy(pCtrlData->hOs, &pCtrlData->ctrlDataRateTables,
  218. &ctrlDataInitParams->rateTable,
  219. sizeof(rateTables_t) );
  220. for (clientIDindex = (rateClassClients_e)0 ; clientIDindex < NUM_OF_RATE_CLASS_CLIENTS ; clientIDindex++)
  221. {
  222. pCtrlData->bIsClassAvailable[clientIDindex] = TRUE;
  223. /* by default all clients use all available rates */
  224. pCtrlData->currClientRateMask[clientIDindex] = ALL_RATES_AVAILABLE;
  225. pCtrlData->nextClientRateMask[clientIDindex] = ALL_RATES_AVAILABLE;
  226. /* Init Params are initialized for USER & SG policies only */
  227. /* Set short/long retry for all ACs */
  228. for (ac=0; ac < MAX_NUM_OF_AC; ac++)
  229. {
  230. pCtrlData->ctrlDataTxRatePolicy.rateClass[clientIDindex*MAX_NUM_OF_AC+ac].longRetryLimit = ctrlDataInitParams->ctrlDataTxRatePolicy[clientIDindex].longRetryLimit;
  231. pCtrlData->ctrlDataTxRatePolicy.rateClass[clientIDindex*MAX_NUM_OF_AC+ac].shortRetryLimit = ctrlDataInitParams->ctrlDataTxRatePolicy[clientIDindex].shortRetryLimit;
  232. }
  233. for (TxRateIndex = txPolicy54; TxRateIndex < MAX_NUM_OF_TX_RATES_IN_CLASS; TxRateIndex++)
  234. {
  235. pCtrlData->policyClassRatesArrayCck[clientIDindex].txRate[TxRateIndex] = ctrlDataInitParams->policyClassRatesArrayCck[clientIDindex].txRate[TxRateIndex];
  236. pCtrlData->policyClassRatesArrayPbcc[clientIDindex].txRate[TxRateIndex] = ctrlDataInitParams->policyClassRatesArrayPbcc[clientIDindex].txRate[TxRateIndex];
  237. pCtrlData->policyClassRatesArrayOfdm[clientIDindex].txRate[TxRateIndex] = ctrlDataInitParams->policyClassRatesArrayOfdm[clientIDindex].txRate[TxRateIndex];
  238. pCtrlData->policyClassRatesArrayOfdmA[clientIDindex].txRate[TxRateIndex] = ctrlDataInitParams->policyClassRatesArrayOfdmA[clientIDindex].txRate[TxRateIndex];
  239. }
  240. }
  241. /* By default use USER_RATE_CLASS */
  242. pCtrlData->currClientRateID = USER_RATE_CLASS;
  243. pCtrlData->configuredClientRateID = USER_RATE_CLASS;
  244. pCtrlData->ctrlDataCurrentRateTable = &pCtrlData->ctrlDataRateTables.ctrlDataCckRateTable;
  245. /* reset Counters */
  246. ctrlData_resetCounters(pCtrlData);
  247. /* Configure Rate Adaptation Module */
  248. rateAdaptation_config(pCtrlData->pRateAdaptation, hOs, hReport, pCtrlData, hEvHandler,
  249. hAPConnection, &ctrlDataInitParams->rateAdaptationInitParam);
  250. #ifdef SUPPORT_4X
  251. /* configure fourX Module */
  252. fourX_config(pCtrlData->pFourX, hOs, hReport, hMemMngr, hWhalCtrl, hTxData,
  253. &ctrlDataInitParams->fourXInitParams);
  254. #endif
  255. /* configure the classifier Module */
  256. Status = Classifier_config(pCtrlData->pClsfr, hOs, hReport, &ctrlDataInitParams->ClsfrInitParam);
  257. if (Status != OK)
  258. {
  259. WLAN_OS_REPORT(("FATAL ERROR: ctrlData_config(): Classifier_config() failed - Aborting\n"));
  260. return Status;
  261. }
  262. /* Initialize traffic intensity threshold parameters */
  263. pCtrlData->ctrlDataTrafficIntensityEventsEnabled = ctrlDataInitParams->ctrlDataTrafficThresholdEnabled;
  264. pCtrlData->ctrlDataTrafficIntensityThresholds.uHighThreshold = ctrlDataInitParams->ctrlDataTrafficThreshold.uHighThreshold;
  265. pCtrlData->ctrlDataTrafficIntensityThresholds.uLowThreshold = ctrlDataInitParams->ctrlDataTrafficThreshold.uLowThreshold;
  266. pCtrlData->ctrlDataTrafficIntensityThresholds.TestInterval = ctrlDataInitParams->ctrlDataTrafficThreshold.TestInterval;
  267. WLAN_REPORT_INFORMATION(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
  268. ("\nTraffic Intensity parameters:\nEvents enabled = %d\nuHighThreshold = %d\nuLowThreshold = %d\nTestInterval = %d\n\n",
  269. pCtrlData->ctrlDataTrafficIntensityEventsEnabled,
  270. pCtrlData->ctrlDataTrafficIntensityThresholds.uHighThreshold,
  271. pCtrlData->ctrlDataTrafficIntensityThresholds.uLowThreshold,
  272. pCtrlData->ctrlDataTrafficIntensityThresholds.TestInterval));
  273. /* Register the traffic intensity events with the traffic monitor */
  274. ctrlData_RegisterTrafficIntensityEvents (pCtrlData);
  275. /* If the events are enabled, start notification, if disabled - then do nothing */
  276. ctrlData_ToggleTrafficIntensityNotification (pCtrlData, pCtrlData->ctrlDataTrafficIntensityEventsEnabled);
  277. WLAN_REPORT_INIT(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
  278. (".....Ctrl Data configured successfully ...\n"));
  279. return OK;
  280. }
  281. /***************************************************************************
  282. * ctrlData_unLoad *
  283. ****************************************************************************
  284. * DESCRIPTION: This function unload the Ctrl data module.
  285. *
  286. * INPUTS: hCtrlData - the object
  287. *
  288. * OUTPUT:
  289. *
  290. * RETURNS: OK - Unload succesfull
  291. * NOK - Unload unsuccesfull
  292. ***************************************************************************/
  293. TI_STATUS ctrlData_unLoad(TI_HANDLE hCtrlData)
  294. {
  295. ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
  296. /* check parameters validity */
  297. if( pCtrlData == NULL )
  298. {
  299. WLAN_REPORT_ERROR(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
  300. (" ctrlData_unLoad() : parametrs value error \n"));
  301. return NOK;
  302. }
  303. rateAdaptation_destroy(pCtrlData->pRateAdaptation);
  304. #ifdef SUPPORT_4X
  305. fourX_destroy(pCtrlData->pFourX);
  306. #endif
  307. Classifier_destroy(pCtrlData->pClsfr);
  308. /* free timer */
  309. /* free control module controll block */
  310. os_memoryFree(pCtrlData->hOs, hCtrlData, sizeof(ctrlData_t));
  311. return OK;
  312. }
  313. /***************************************************************************
  314. * ctrlData_getParam *
  315. ****************************************************************************
  316. * DESCRIPTION: get a specific parameter
  317. *
  318. * INPUTS: hCtrlData - the object
  319. *
  320. *
  321. * OUTPUT: pParamInfo - structure which include the value of
  322. * the requested parameter
  323. *
  324. * RETURNS: OK
  325. * NOK
  326. ***************************************************************************/
  327. TI_STATUS ctrlData_getParam(TI_HANDLE hCtrlData, paramInfo_t *pParamInfo)
  328. {
  329. ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
  330. /* WLAN_REPORT_INFORMATION(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
  331. ("ctrlData_getParam() : param=0x%x \n", pParamInfo->paramType)); */
  332. switch (pParamInfo->paramType)
  333. {
  334. case CTRL_DATA_RATE_CONTROL_ENABLE_PARAM:
  335. pParamInfo->content.ctrlDataRateControlEnable = pCtrlData->ctrlDataRateControlEnable;
  336. break;
  337. case CTRL_DATA_FOUR_X_ENABLE_PARAM:
  338. pParamInfo->content.ctrlDataFourXEnable = pCtrlData->ctrlDataFourXEnable;
  339. break;
  340. case CTRL_DATA_FOUR_X_CURRRENT_STATUS_PARAM:
  341. if (pCtrlData->ctrlDataCurrentBssType == BSS_INFRASTRUCTURE)
  342. {
  343. pParamInfo->content.ctrlDataCerruentFourXstate = pCtrlData->ctrlDataCerruentFourXstate;
  344. } else {
  345. pParamInfo->content.ctrlDataCerruentFourXstate = pCtrlData->ctrlDataFourXEnable;
  346. }
  347. break;
  348. case CTRL_DATA_CURRENT_BSSID_PARAM:
  349. MAC_COPY(pCtrlData->hOs, (&pParamInfo->content.ctrlDataCurrentBSSID),
  350. (&pCtrlData->ctrlDataCurrentBSSID));
  351. break;
  352. case CTRL_DATA_CURRENT_BSS_TYPE_PARAM:
  353. pParamInfo->content.ctrlDataCurrentBssType = pCtrlData->ctrlDataCurrentBssType;
  354. break;
  355. case CTRL_DATA_CURRENT_MODULATION_TYPE_PARAM:
  356. pParamInfo->content.ctrlDataCurrentModulationType = pCtrlData->ctrlDataCurrentModulationType;
  357. break;
  358. case CTRL_DATA_CURRENT_PREAMBLE_TYPE_PARAM:
  359. pParamInfo->content.ctrlDataCurrentPreambleType = pCtrlData->ctrlDataCurrentPreambleType;
  360. break;
  361. case CTRL_DATA_MAC_ADDRESS:
  362. MAC_COPY(pCtrlData->hOs, (&pParamInfo->content.ctrlDataDeviceMacAddress), (&pCtrlData->ctrlDataDeviceMacAddress));
  363. break;
  364. case CTRL_DATA_CURRENT_BASIC_RATE_PARAM:
  365. pParamInfo->content.ctrlDataCurrentBasicRate = pCtrlData->ctrlDataCurrentBasicRate;
  366. break;
  367. case CTRL_DATA_CURRENT_BASIC_RATE_MASK_PARAM:
  368. pParamInfo->content.ctrlDataBasicRateBitMask = pCtrlData->ctrlDataBasicRateBitMask;
  369. break;
  370. case CTRL_DATA_CURRENT_BASIC_MODULATION_PARAM:
  371. pParamInfo->content.ctrlDataCurrentBasicModulationType = pCtrlData->ctrlDataCurrentBasicModulationType;
  372. break;
  373. case CTRL_DATA_COUNTERS_PARAM:
  374. os_memoryCopy(pCtrlData->hOs,&pParamInfo->content.ctrlDataCounters,
  375. &pCtrlData->ctrlDataCounters, sizeof(ctrlDataCounters_t));
  376. break;
  377. case CTRL_DATA_CURRENT_SUPPORTED_RATE_MASK_PARAM:
  378. pParamInfo->content.ctrlDataCurrentRateMask = pCtrlData->ctrlDataCurrentRateMask;
  379. break;
  380. case CTRL_DATA_CURRENT_PROTECTION_STATUS_PARAM:
  381. pParamInfo->content.ctrlDataProtectionEnabled = pCtrlData->ctrlDataProtectionEnabled;
  382. break;
  383. case CTRL_DATA_CURRENT_IBSS_PROTECTION_PARAM:
  384. pParamInfo->content.ctrlDataIbssProtecionType = pCtrlData->ctrlDataIbssProtectionType;
  385. break;
  386. case CTRL_DATA_CURRENT_RTS_CTS_STATUS_PARAM:
  387. pParamInfo->content.ctrlDataRtsCtsStatus = pCtrlData->ctrlDataRtsCtsStatus;
  388. break;
  389. case CTRL_DATA_CLSFR_TYPE:
  390. Classifier_getClsfrType (pCtrlData->pClsfr,&pParamInfo->content.ctrlDataClsfrType);
  391. break;
  392. /*
  393. * NOTE: currently supporting only USER_RATE_CLASS!!!!!!!!!
  394. */
  395. case CTRL_DATA_SHORT_RETRY_LIMIT_PARAM:
  396. pParamInfo->content.TxRatePolicy.rateClass[USER_RATE_CLASS].shortRetryLimit = pCtrlData->ctrlDataTxRatePolicy.rateClass[USER_RATE_CLASS].shortRetryLimit;
  397. break;
  398. /*
  399. * NOTE: currently supporting only ONE txRatePolicy!!!!!!!!!
  400. */
  401. case CTRL_DATA_LONG_RETRY_LIMIT_PARAM:
  402. pParamInfo->content.TxRatePolicy.rateClass[USER_RATE_CLASS].longRetryLimit = pCtrlData->ctrlDataTxRatePolicy.rateClass[USER_RATE_CLASS].longRetryLimit;
  403. break;
  404. case CTRL_DATA_TRAFFIC_INTENSITY_THRESHOLD:
  405. pParamInfo->content.ctrlDataTrafficIntensityThresholds.uHighThreshold = pCtrlData->ctrlDataTrafficIntensityThresholds.uHighThreshold;
  406. pParamInfo->content.ctrlDataTrafficIntensityThresholds.uLowThreshold = pCtrlData->ctrlDataTrafficIntensityThresholds.uLowThreshold;
  407. pParamInfo->content.ctrlDataTrafficIntensityThresholds.TestInterval = pCtrlData->ctrlDataTrafficIntensityThresholds.TestInterval;
  408. break;
  409. default:
  410. return (PARAM_NOT_SUPPORTED);
  411. /* WLAN_REPORT_ERROR(pCtrlData->hReport, TX_DATA_MODULE_LOG,
  412. (" ctrlData_getParam() : PARAMETER NOT SUPPORTED \n"));
  413. return NOK;
  414. break; - unreachable */
  415. }
  416. return (OK);
  417. }
  418. /***************************************************************************
  419. * ctrlData_getParam *
  420. ****************************************************************************
  421. * DESCRIPTION: get a specific parameter
  422. *
  423. * INPUTS: hCtrlData - the object
  424. *
  425. *
  426. * OUTPUT: pParamInfo - structure which include the value of
  427. * the requested parameter
  428. *
  429. * RETURNS: OK
  430. * NOK
  431. ***************************************************************************/
  432. /* note: ctrlData_getParamPartial() is part of ctrlData_getParam() it was implemented to reduce Stack usage */
  433. TI_STATUS ctrlData_getParamPartial(TI_HANDLE hCtrlData, paramInfoPartial_t *pParamInfo)
  434. {
  435. ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
  436. switch (pParamInfo->paramType)
  437. {
  438. case CTRL_DATA_CURRENT_PREAMBLE_TYPE_PARAM:
  439. pParamInfo->content.ctrlDataCurrentPreambleType = pCtrlData->ctrlDataCurrentPreambleType;
  440. break;
  441. default:
  442. return (PARAM_NOT_SUPPORTED);
  443. }
  444. return (OK);
  445. }
  446. /***************************************************************************
  447. * ctrlData_buildSupportedHwRates *
  448. ****************************************************************************
  449. * DESCRIPTION: builds HwRatesBitMap (supported rates) for txRatePolicy using 4 elements :
  450. * 1) AP support
  451. * 2) Driver support
  452. * 3) Client support (using currClientRateMask[clientIDindex] )
  453. * 4) Policy rates (retries per client)
  454. *
  455. * OUTPUT:
  456. *
  457. * RETURNS: OK
  458. * NOK
  459. ***************************************************************************/
  460. static UINT32 ctrlData_buildSupportedHwRates(ctrlData_rateAdapt_t *pDriverTable,
  461. UINT32 APsupport,
  462. UINT32 clientSupport,
  463. UINT32 policySupport)
  464. {
  465. UINT16 AppRateBitMap = 0;
  466. UINT32 HwRatesBitMap, DriverTableBitMap = 0;
  467. UINT32 i = 0;
  468. /* 1. Convert Rates table into bit mask */
  469. while (i <= pDriverTable->len)
  470. {
  471. DriverTableBitMap |= (1 << (pDriverTable->rateAdaptRatesTable[i++] - 1));
  472. }
  473. /* 2. AND with other masks */
  474. AppRateBitMap = (UINT16)(DriverTableBitMap & APsupport & clientSupport & policySupport);
  475. /* In case there are no mutual rates, try to ignore policy settings */
  476. if (AppRateBitMap == 0)
  477. {
  478. AppRateBitMap = (UINT16)(DriverTableBitMap & APsupport);
  479. }
  480. /* 3. Set total supported rates bit map for txRatePolicy */
  481. ConvertAppRatesToBitmap(AppRateBitMap, &HwRatesBitMap);
  482. return HwRatesBitMap;
  483. }
  484. /***************************************************************************
  485. * ctrlData_setTxRatePolicies *
  486. ****************************************************************************
  487. * DESCRIPTION: This function sets rate fallback policies to be configured to FW
  488. * If TSRS is defined to specific AC, the policy is derived from it,
  489. * otherwise it is derived from pre-defined map
  490. *
  491. * INPUTS: pCtrlData - the object
  492. *
  493. * RETURNS: -
  494. *
  495. ***************************************************************************/
  496. static void ctrlData_setTxRatePolicies(ctrlData_t *pCtrlData)
  497. {
  498. UINT32 ac, policyClassRateMask, supportedHwRatesBitMap, clientIDindex, hwRateIndex;
  499. UINT32 fwPolicyID;
  500. UINT8 shortRetryLimit, longRetryLimit;
  501. txRateClassId_e txRateIndex;
  502. whalParamInfo_t param;
  503. pCtrlData->currClientRateID = pCtrlData->configuredClientRateID;
  504. for (clientIDindex = 0, fwPolicyID = 0; clientIDindex < NUM_OF_RATE_CLASS_CLIENTS; clientIDindex++)
  505. {
  506. /* Retrieve retry limits stored in first AC of current class */
  507. shortRetryLimit = pCtrlData->ctrlDataTxRatePolicy.rateClass[fwPolicyID].shortRetryLimit;
  508. longRetryLimit = pCtrlData->ctrlDataTxRatePolicy.rateClass[fwPolicyID].longRetryLimit;
  509. /* By default assume that this class can be enabled */
  510. pCtrlData->bIsClassAvailable[clientIDindex] = TRUE;
  511. /* Update the rate mask from nextClientRateMask, where it was stored untill now */
  512. pCtrlData->currClientRateMask[clientIDindex] = pCtrlData->nextClientRateMask[clientIDindex];
  513. for (ac = 0; ac < MAX_NUM_OF_AC; ac++)
  514. {
  515. /* 1. Check if there is special rate set defined for this access category, */
  516. /* then verify that at least one rate is mutual between TSRS and class policy, */
  517. /* otherwise use default settings for this class */
  518. if (pCtrlData->tsrsParameters[ac].supportedRatesMask[clientIDindex] != 0)
  519. {
  520. /* Check if at least one rate is mutual between TSRS and current class policy, */
  521. /* otherwise use default for this class */
  522. policyClassRateMask = pCtrlData->tsrsParameters[ac].policyClassRateMask[clientIDindex];
  523. }
  524. else
  525. {
  526. policyClassRateMask = ctrlData_buildHwBitMapFromArray(&(pCtrlData->pCurrPolicyClassRatesArray[clientIDindex]));
  527. }
  528. /* 2. Build a bitMap for the supported rates */
  529. supportedHwRatesBitMap = ctrlData_buildSupportedHwRates(
  530. pCtrlData->ctrlDataCurrentRateTable, /* according to radio mode */
  531. pCtrlData->ctrlDataCurrentRateMask, /* AP supported rates */
  532. pCtrlData->currClientRateMask[clientIDindex], /* STA supported rates */
  533. policyClassRateMask); /* requested by class policy rates */
  534. if (supportedHwRatesBitMap == 0)
  535. {
  536. WLAN_REPORT_ERROR(pCtrlData->hReport,CTRL_DATA_MODULE_LOG,
  537. ("%s No supported rates for client %d, ac %d \n", __FUNCTION__, clientIDindex, ac));
  538. pCtrlData->bIsClassAvailable[clientIDindex] = FALSE;
  539. pCtrlData->currClientRateID = USER_RATE_CLASS;
  540. }
  541. /* 3. Configure retransmission for the rates */
  542. for (hwRateIndex = HW_BIT_RATE_54MBPS, txRateIndex = txPolicy54;
  543. txRateIndex < MAX_NUM_OF_TX_RATES_IN_CLASS;
  544. hwRateIndex >>= 1, txRateIndex++)
  545. {
  546. /* if supported rate */
  547. if (supportedHwRatesBitMap & hwRateIndex)
  548. {
  549. /* if rate fall back is enabled */
  550. if (pCtrlData->ctrlDataRateControlEnable)
  551. {
  552. /* Set retries as they were configured in ini file for this class; */
  553. /* make sure at least one retransmission is defined, */
  554. /* to take care of cases in which we ignored pre-defined policy */
  555. pCtrlData->ctrlDataTxRatePolicy.rateClass[fwPolicyID].txRate[txRateIndex] =
  556. (pCtrlData->pCurrPolicyClassRatesArray[clientIDindex].txRate[txRateIndex] > 1) ?
  557. pCtrlData->pCurrPolicyClassRatesArray[clientIDindex].txRate[txRateIndex] : 1;
  558. }
  559. else /* no rate fallback */
  560. {
  561. /* set max reties because no fall back is implemented */
  562. pCtrlData->ctrlDataTxRatePolicy.rateClass[fwPolicyID].txRate[txRateIndex] =
  563. (shortRetryLimit > longRetryLimit) ? shortRetryLimit : longRetryLimit;
  564. pCtrlData->ctrlDataTxRatePolicy.rateClass[fwPolicyID].flags |= TX_POLICY_FLAGS_TRUNCATE;
  565. }
  566. }
  567. else
  568. {
  569. pCtrlData->ctrlDataTxRatePolicy.rateClass[fwPolicyID].txRate[txRateIndex] = 0;
  570. }
  571. WLAN_REPORT_INFORMATION(pCtrlData->hReport,CTRL_DATA_MODULE_LOG,
  572. ("%s: AC %d, class %d, rate 0x%x[%d]\n", __FUNCTION__, ac, clientIDindex, hwRateIndex, pCtrlData->ctrlDataTxRatePolicy.rateClass[fwPolicyID].txRate[txRateIndex]));
  573. }
  574. /* Note that Long/Short retries are pre-set during configuration stage */
  575. /* 4. Finally, increase total number of policies */
  576. pCtrlData->tsrsParameters[ac].fwPolicyID[clientIDindex] = fwPolicyID++;
  577. }
  578. }
  579. /* Download policies to the FW. Num of policies is 8 - one for each AC for every class */
  580. WLAN_REPORT_INFORMATION(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
  581. ("%s: num of Rate policies: %d\n", __FUNCTION__, fwPolicyID));
  582. pCtrlData->ctrlDataTxRatePolicy.numOfRateClasses = fwPolicyID;
  583. param.paramType = HAL_CTRL_TX_RATE_CLASS_PARAMS;
  584. param.content.pTxRatePlicy = &pCtrlData->ctrlDataTxRatePolicy;
  585. whalCtrl_SetParam(pCtrlData->hWhalCtrl, &param);
  586. }
  587. /***************************************************************************
  588. * ctrlData_setParam *
  589. ****************************************************************************
  590. * DESCRIPTION: set a specific parameter
  591. *
  592. * INPUTS: hCtrlData - the object
  593. * pParamInfo - structure which include the value to set for
  594. * the requested parameter
  595. *
  596. * OUTPUT:
  597. *
  598. * RETURNS: OK
  599. * NOK
  600. ***************************************************************************/
  601. TI_STATUS ctrlData_setParam(TI_HANDLE hCtrlData, paramInfo_t *pParamInfo)
  602. {
  603. ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
  604. whalParamInfo_t param;
  605. rateClassClients_e clientID;
  606. /* WLAN_REPORT_INFORMATION(pCtrlData->hReport, CTRL_DATA_MODULE_LOG,
  607. ("ctrlData_setParam() : param=0x%x \n", pParamInfo->paramType)); */
  608. switch (pParamInfo->paramType)
  609. {
  610. case CTRL_DATA_RATE_CONTROL_ENABLE_PARAM:
  611. pCtrlData->ctrlDataRateControlEnable = pParamInfo->content.ctrlDataRateControlEnable;
  612. selectRateTable(pCtrlData, pCtrlData->ctrlDataCurrentRateMask);
  613. ctrlData_setTxRatePolicies(pCtrlData);
  614. rateAdaptation_buildRateMapTable(pCtrlData->pRateAdaptation,
  615. pCtrlData->ctrlDataCurrentRateTable,
  616. pCtrlData->ctrlDataCurrentRateMask,
  617. pCtrlData->currClientRateMask[pCtrlData->currClientRateID],
  618. pCtrlData->ctrlDataCurrentModulationType,
  619. pCtrlData->ctrlDataCerruentFourXstate,
  620. pCtrlData->ctrlDataCurrentBssType);
  621. if(pCtrlData->ctrlDataRateControlEnable == TRUE )
  622. {
  623. /* start rate adaptation algorithm */
  624. if( pCtrlData->ctrlDataStartStoplinkControlAlg == TRUE)
  625. {
  626. rateAdaptation_start(pCtrlData->pRateAdaptation);
  627. }
  628. else
  629. {
  630. /* stop rate adaptation algorithm */
  631. rateAdaptation_stop(pCtrlData->pRateAdaptation);
  632. }
  633. }
  634. else
  635. {
  636. rateAdaptation_stopTimer(pCtrlData->pRateAdaptation);
  637. }
  638. break;
  639. case CTRL_DATA_FOUR_X_ENABLE_PARAM:
  640. #ifdef SUPPORT_4X
  641. pCtrlData->ctrlDataFourXEnable = pParamInfo->content.ctrlDataFourXEnable;
  642. if(pCtrlData->ctrlDataStartStoplinkControlAlg == TRUE)
  643. {
  644. if(pCtrlData->ctrlDataFourXEnable == TRUE)
  645. {
  646. pCtrlData->ctrlDataCerruentFourXstate = TRUE;
  647. }
  648. else
  649. {
  650. pCtrlData->ctrlDataCerruentFourXstate = FALSE;
  651. }
  652. }
  653. rateAdaptation_update4xEnable(pCtrlData->pRateAdaptation,
  654. pCtrlData->ctrlDataCerruentFourXstate,
  655. pCtrlData->ctrlDataCurrentBssType );
  656. #else
  657. pCtrlData->ctrlDataFourXEnable = FALSE;
  658. pCtrlData->ctrlDataCerruentFourXstate = FALSE;
  659. #endif
  660. break;
  661. case CTRL_DATA_CURRENT_RATE_CLASS_CLIENT:
  662. /* set a new rate class client to be used on data packets */
  663. clientID = pParamInfo->content.ctrlDataRateClassID;
  664. /* always save the wanted configuration , even when not enabled */
  665. pCtrlData->configuredClientRateID = clientID;
  666. if (clientID == pCtrlData->currClientRateID)
  667. {
  668. /* Do nothing - already configured */
  669. break;
  670. }
  671. else
  672. {
  673. if (TRUE == pCtrlData->bIsClassAvailable[clientID])
  674. {
  675. /* use the new clientID + reset rateAdaptation tables */
  676. pCtrlData->currClientRateID = clientID;
  677. selectRateTable(pCtrlData, pCtrlData->ctrlDataCurrentRateMask);
  678. rateAdaptation_buildRateMapTable(pCtrlData->pRateAdaptation,
  679. pCtrlData->ctrlDataCurrentRateTable,
  680. pCtrlData->ctrlDataCurrentRateMask,
  681. pCtrlData->currClientRateMask[pCtrlData->currClientRateID],
  682. pCtrlData->ctrlDataCurrentModulationType,
  683. pCtrlData->ctrlDataCerruentFourXstate,
  684. pCtrlData->ctrlDataCurrentBssType);
  685. break;
  686. }
  687. else
  688. {
  689. /* The class could not be configured due to no rate support - don't use it */
  690. WLAN_REPORT_ERROR(pCtrlData->hReport,CTRL_DATA_MODULE_LOG,
  691. ("%s: Can't enable rate class ID %d\n",__FUNCTION__,clientID));
  692. break;
  693. }
  694. }
  695. case CTRL_DATA_NEXT_RATE_MASK_FOR_CLIENT:
  696. /* configure the next rate mask to be used for a specific client on the next connection */
  697. /* NOTE : changing USER_RATE_CLASS configuration is not advisable */
  698. pCtrlData->nextClientRateMask[pParamInfo->content.ctrlDataRateClassMask.clientID] =
  699. pParamInfo->content.ctrlDataRateClassMask.clientRateMask;
  700. break;
  701. case CTRL_DATA_FOUR_X_CURRRENT_STATUS_PARAM:
  702. #ifdef SUPPORT_4X
  703. if((pCtrlData->ctrlDataFourXEnable == TRUE) &&
  704. (pCtrlData->ctrlDataCurrentBssType == BSS_INFRASTRUCTURE))
  705. pCtrlData->ctrlDataCerruentFourXstate = pParamInfo->content.ctrlDataCerruentFourXstate;
  706. else
  707. pCtrlData->ctrlDataCerruentFourXstate = FALSE;
  708. #else
  709. pCtrlData->ctrlDataCerruentFourXstate = FALSE;
  710. #endif
  711. break;
  712. case CTRL_DATA_CURRENT_BSSID_PARAM:
  713. MAC_COPY(pCtrlData->hOs, (&pCtrlData->ctrlDataCurrentBSSID),
  714. (&pParamInfo->content.ctrlDataCurrentBSSID));
  715. break;
  716. case CTRL_DATA_CURRENT_BSS_TYPE_PARAM:
  717. if( pParamInfo->content.ctrlDataCurrentBssType != BSS_INFRASTRUCTURE &&
  718. pParamInfo->content.ctrlDataCurrentBssType != BSS_INDEPENDENT )
  719. return(PARAM_VALUE_NOT_VALID);
  720. pCtrlData->ctrlDataCurrentBssType = pParamInfo->content.ctrlDataCurrentBssType;
  721. break;
  722. case CTRL_DATA_CURRENT_MODULATION_TYPE_PARAM:
  723. pCtrlData->ctrlDataCurrentModulationType = pParamInfo->content.ctrlDataCurrentModulationType;
  724. /* update rate modulatin table for Rate adaptation algorithm */
  725. rateAdaptation_updateModulation(pCtrlData->pRateAdaptation,
  726. pCtrlData->ctrlDataCurrentModulationType,
  727. pCtrlData->ctrlDataCurrentBssType);
  728. break;
  729. case CTRL_DATA_CURRENT_PREAMBLE_TYPE_PARAM:
  730. if( pParamInfo->content.ctrlDataCurrentPreambleType != PREAMBLE_LONG &&
  731. pParamInfo->content.ctrlDataCurrentPreambleType != PREAMBLE_SHORT )
  732. return(PARAM_VALUE_NOT_VALID);
  733. pCtrlData->ctrlDataCurrentPreambleType = pParamInfo->content.ctrlDataCurrentPreambleType;
  734. break;
  735. case CTRL_DATA_MAC_ADDRESS:
  736. {
  737. int status;
  738. status = whalCtrl_SetMacAddress(pCtrlData->hWhalCtrl, &pParamInfo->content.ctrlDataDeviceMacAddress);
  739. WLAN_REPORT_ERROR(pCtrlData->hReport, TX_DATA_MODULE_LOG,
  740. (" ctrlData_setParam() : MAC ADDRESS SET STATUS: %d \n",status));
  741. if(status == OK)
  742. MAC_COPY(pCtrlData->hOs, (&pCtrlData->ctrlDataDeviceMacAddress),
  743. (&pParamInfo->content.ctrlDataDeviceMacAddress));
  744. }
  745. break;
  746. case CTRL_DATA_CURRENT_BASIC_RATE_PARAM:
  747. pCtrlData->ctrlDataCurrentBasicRate = pParamInfo->content.ctrlDataCurrentBasicRate;
  748. /* for Basic Rate Set use the USER_RATE_CLASS (otherwise we could get 0 rates) */
  749. pCtrlData->ctrlDataBasicRateBitMask = rateAdaptation_Utils_buildRateBitMap(pCtrlData->pRateAdaptation,
  750. pCtrlData->ctrlDataCurrentRateTable,
  751. pCtrlData->ctrlDataCurrentBasicRate,
  752. pCtrlData->ctrlDataCurrentRateMask,
  753. pCtrlData->currClientRateMask[USER_RATE_CLASS]);
  754. break;
  755. case CTRL_DATA_CURRENT_BASIC_RATE_MASK_PARAM:
  756. pCtrlData->ctrlDataBasicRateBitMask = pParamInfo->content.ctrlDataBasicRateBitMask;
  757. break;
  758. case CTRL_DATA_CURRENT_BASIC_MODULATION_PARAM:
  759. pCtrlData->ctrlDataCurrentBasicModulationType = pParamInfo->content.ctrlDataCurrentBasicModulationType;
  760. break;
  761. case CTRL_DATA_CURRENT_SUPPORTED_RATE_MASK_PARAM:
  762. pCtrlData->ctrlDataCurrentRateMask = pParamInfo->content.ctrlDataCurrentRateMask;
  763. selectRateTable(pCtrlData, pCtrlData->ctrlDataCurrentRateMask);
  764. rateAdaptation_buildRateMapTable(pCtrlData->pRateAdaptation,
  765. pCtrlData->ctrlDataCurrentRateTable,
  766. pCtrlData->ctrlDataCurrentRateMask,
  767. pCtrlData->currClientRateMask[pCtrlData->currClientRateID],
  768. (modulationType_e)pCtrlData->ctrlDataCerruentFourXstate,
  769. pCtrlData->ctrlDataCurrentModulationType,
  770. pCtrlData->ctrlDataCurrentBssType);
  771. break;
  772. case CTRL_DATA_CURRENT_ACTIVE_RATE_PARAM:
  773. rateAdaptation_setCurrentRate(pCtrlData->pRateAdaptation, pParamInfo->content.ctrlDataCurrentActiveRate);
  774. break;
  775. case CTRL_DATA_TSRS_PARAM:
  776. ctrlData_storeTSRateSet(pCtrlData, &pParamInfo->content.txDataQosParams);
  777. break;
  778. case CTRL_DATA_CURRENT_PROTECTION_STATUS_PARAM:
  779. if (pCtrlData->ctrlDataProtectionEnabled != pParamInfo->content.ctrlDataProtectionEnabled)
  780. {
  781. pCtrlData->ctrlDataProtectionEnabled = pParamInfo->content.ctrlDataProtectionEnabled;
  782. /* set indication also to TNET */
  783. param.paramType = HAL_CTRL_CTS_TO_SELF_PARAM;
  784. if(pCtrlData->ctrlDataProtectionEnabled == TRUE)
  785. param.content.halCtrlCtsToSelf = CTS_TO_SELF_ENABLE;
  786. else
  787. param.content.halCtrlCtsToSelf = CTS_TO_SELF_DISABLE;
  788. whalCtrl_SetParam(pCtrlData->hWhalCtrl,&param);
  789. /* In case of using protection fragmentation should be disabled */
  790. param.paramType = HAL_CTRL_FRAG_THRESHOLD_PARAM;
  791. if(pCtrlData->ctrlDataProtectionEnabled == TRUE)
  792. {
  793. /* save last non-protection mode fragmentation threshold */
  794. whalCtrl_GetParam(pCtrlData->hWhalCtrl,&param);
  795. pCtrlData->lastFragmentThreshold = param.content.halCtrlFragThreshold;
  796. /* set fragmentation threshold to max (disable) */
  797. param.content.halCtrlFragThreshold = HAL_CTRL_FRAG_THRESHOLD_MAX;
  798. }
  799. else
  800. param.content.halCtrlFragThreshold = pCtrlData->lastFragmentThreshold;
  801. whalCtrl_SetParam(pCtrlData->hWhalCtrl,&param);
  802. }
  803. break;
  804. case CTRL_DATA_CURRENT_IBSS_PROTECTION_PARAM:
  805. pCtrlData->ctrlDataIbssProtectionType = pParamInfo->content.ctrlDataIbssProtecionType;
  806. /* set indication also to TNET */
  807. param.paramType = HAL_CTRL_CTS_TO_SELF_PARAM;
  808. if(pCtrlData->ctrlDataIbssProtectionType != ERP_PROTECTION_NONE)
  809. param.content.halCtrlCtsToSelf = CTS_TO_SELF_ENABLE;
  810. else
  811. param.content.halCtrlCtsToSelf = CTS_TO_SELF_DISABLE;
  812. whalCtrl_SetParam(pCtrlData->hWhalCtrl,&param);
  813. break;
  814. case CTRL_DATA_CURRENT_RTS_CTS_STATUS_PARAM:
  815. pCtrlData->ctrlDataRtsCtsStatus = pParamInfo->content.ctrlDataRtsCtsStatus;
  816. break;
  817. case CTRL_DATA_CLSFR_TYPE:
  818. ctrlData_clsfrSetClsfrType (pCtrlData->pClsfr,pParamInfo->content.ctrlDataClsfrType);
  819. break;
  820. case CTRL_DATA_CLSFR_CONFIG:
  821. Classifier_InsertClsfrEntry(pCtrlData->pClsfr, 1, &pParamInfo->content.ctrlDataClsfrInsertTable);
  822. break;
  823. case CTRL_DATA_CLSFR_REMOVE_ENTRY:
  824. classifier_RemoveClsfrEntry(pCtrlData->pClsfr, &pParamInfo->content.ctrlDataClsfrInsertTable);
  825. break;
  826. case CTRL_DATA_GET_USER_PRIORITY_OF_STREAM:
  827. Classifier_deriveUserPriorityFromStream (pCtrlData->pClsfr,&pParamInfo->content.ctrlDataUpOfStream);
  828. break;
  829. /*
  830. * NOTE: currently supporting only ONE txRatePolicy!!!!!!!!!
  831. */
  832. case CTRL_DATA_SHORT_RETRY_LIMIT_PARAM:
  833. pCtrlData->ctrlDataTxRatePolicy.rateClass[USER_RATE_CLASS].shortRetryLimit = pParamInfo->content.TxRatePolicy.rateClass[USER_RATE_CLASS].shortRetryLimit;
  834. break;
  835. /*
  836. * NOTE: currently supporting only ONE txRatePolicy!!!!!!!!!
  837. */
  838. case CTRL_DATA_LONG_RETRY_LIMIT_PARAM:
  839. pCtrlData->ctrlDataTxRatePolicy.rateClass[USER_RATE_CLASS].longRetryLimit = pParamInfo->content.TxRatePolicy.rateClass[USER_RATE_CLASS].longRetryLimit;
  840. break;
  841. case CTRL_DATA_TOGGLE_TRAFFIC_INTENSITY_EVENTS:
  842. /* Enable or disable events according to flag */
  843. ctrlData_ToggleTrafficIntensityNotification (pCtrlData, (BOOL)pParamInfo->content.ctrlDataTrafficIntensityEventsFlag);
  844. break;
  845. case CTRL_DATA_TRAFFIC_INTENSITY_THRESHOLD:
  846. {
  847. OS_802_11_TRAFFIC_INTENSITY_THRESHOLD_PARAMS *localParams = &pParamInfo->content.ctrlDataTrafficIntensityThresholds;
  848. BOOL savedEnableFlag; /* Used to save previous enable/disable flag - before stopping/starting events for change in params */
  849. /* If any of the parameters has changed, we need to re-register with the Traffic Monitor */
  850. if ((localParams->uHighThreshold != pCtrlData->ctrlDataTrafficIntensityThresholds.uHighThreshold) ||
  851. (localParams->uLowThreshold != pCtrlData->ctrlDataTrafficIntensityThresholds.uLowThreshold) ||
  852. (localParams->TestInterval != pCtrlData->ctrlDataTrafficIntensityThresholds.TestInterval))
  853. {
  854. os_memoryCopy(pCtrlData->hOs, &pCtrlData->ctrlDataTrafficIntensityThresholds,
  855. localParams,
  856. sizeof(OS_802_11_TRAFFIC_INTENSITY_THRESHOLD_PARAMS));
  857. savedEnableFlag = pCtrlData->ctrlDataTrafficIntensityEventsEnabled;
  858. /* Turn off traffic events */
  859. ctrlData_ToggleTrafficIntensityNotification (pCtrlData, FALSE);
  860. /* Unregister current events */
  861. ctrlData_UnregisterTrafficIntensityEvents (pCtrlData);
  862. /* And re-register with new thresholds */
  863. ctrlData_RegisterTrafficIntensityEvents (pCtrlData);
  864. /* Enable events if they were enabled */
  865. ctrlData_ToggleTrafficIntensityNotification (pCtrlData, savedEnableFlag);
  866. }
  867. }
  868. break;
  869. default:
  870. WLAN_REPORT_ERROR(pCtrlData->hReport, TX_DATA_MODULE_LOG,
  871. (" ctrlData_setParam() : PARAMETER NOT SUPPORTED \n"));
  872. return (PARAM_NOT_SUPPORTED);
  873. /* break; - unrechable */
  874. }
  875. return (OK);
  876. }
  877. /***************************************************************************
  878. * ctrlData_getTspecsRateThresholds *
  879. ****************************************************************************
  880. * DESCRIPTION: The function retrieves the current low/high phy rate thresholds.
  881. *
  882. * INPUTS: hCtrlData - the object
  883. * uAC - The AC number.
  884. *
  885. * OUTPUT: pHighThreshold - The current phy rate high threshold
  886. * pHighThreshold - The current phy rate low threshold
  887. *
  888. * RETURNS:
  889. ***************************************************************************/
  890. void ctrlData_getTspecsRateThresholds(TI_HANDLE hCtrlData, UINT8 uAC, UINT32* pHighThreshold, UINT32* pLowThreshold)
  891. {
  892. ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
  893. rateAdaptation_t* pRateAdaptation = (rateAdaptation_t*)pCtrlData->pRateAdaptation;
  894. *pHighThreshold = hostToUtilityRate(RateNumberToHost(pRateAdaptation->tspecsRateParameters[uAC].highRateThreshold));
  895. *pLowThreshold = hostToUtilityRate(RateNumberToHost(pRateAdaptation->tspecsRateParameters[uAC].lowRateThreshold));
  896. }
  897. /***************************************************************************
  898. * selectRateTable *
  899. ****************************************************************************
  900. * DESCRIPTION:
  901. *
  902. * INPUTS: hCtrlData - the object
  903. *
  904. * OUTPUT:
  905. *
  906. * RETURNS:
  907. ***************************************************************************/
  908. static void selectRateTable(TI_HANDLE hCtrlData, UINT32 rateMask)
  909. {
  910. paramInfo_t param;
  911. rate_e rate;
  912. ctrlData_t *pCtrlData = (ctrlData_t *)hCtrlData;
  913. rate = getMaxRatefromBitmap(rateMask);
  914. param.paramType = SITE_MGR_OPERATIONAL_MODE_PARAM;
  915. siteMgr_getParam(pCtrlData->hSiteMgr, &param);
  916. switch(param.content.siteMgrDot11OperationalMode)
  917. {
  918. case DOT11_B_MODE:
  919. {
  920. if(rate == DRV_RATE_22M)
  921. {
  922. pCtrlData->ctrlDataCurrentRateTable = &pCtrlData->ctrlDataRateTables.ctrlDataPbccRateTable;
  923. pCtrlData->pCurrPolicyClassRatesArray = pCtrlData->policyClassRatesArrayPbcc;
  924. }
  925. else
  926. {
  927. pCtrlData->ctrlDataCurrentRateTable = &pCtrlData->ctrlDataRateTables.ctrlDataCckRateTable;
  928. pCtrlData->pCurrPolicyClassRatesArray = pCtrlData->policyClassRatesArrayCck;
  929. }
  930. }
  931. break;
  932. case DOT11_G_MODE:
  933. if( (rate == DRV_RATE_22M) ||
  934. (rate == DRV_RATE_11M) ||
  935. (rate == DRV_RATE_5_5M)||
  936. (rate == DRV_RATE_2M) ||
  937. (rate == DRV_RATE_1M) )
  938. {
  939. pCtrlData->ctrlDataCurrentRateTable = &pCtrlData->ctrlDataRateTables.ctrlDataPbccRateTable;
  940. pCtrlData->pCurrPolicyClassRatesArray = pCtrlData->policyClassRatesArrayPbcc;
  941. }
  942. else
  943. {
  944. pCtrlData->ctrlDataCurrentRateTable = &pCtrlData->ctrlDataRateTables.ctrlDataOfdmRateTable ;
  945. pCtrlData->pCurrPolicyClassRatesArra

Large files files are truncated, but you can click here to view the full file