PageRenderTime 55ms CodeModel.GetById 6ms RepoModel.GetById 0ms app.codeStats 0ms

/drivers/net/wireless/tiwlan1251/common/src/hal/hl_ctrl/whalCtrl.c

http://github.com/CyanogenMod/cm-kernel
C | 1567 lines | 849 code | 280 blank | 438 comment | 81 complexity | 74c2d30ff76e02cb4d34792c1663da3b MD5 | raw file
Possible License(s): AGPL-1.0, GPL-2.0, LGPL-2.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. #include "whalCommon.h"
  36. #include "whalCtrl_api.h"
  37. #include "whalCtrl.h"
  38. #include "txHwQueue_api.h"
  39. #include "txXfer_api.h"
  40. #include "txResult_api.h"
  41. #include "whalSecurity.h"
  42. #include "eventMbox_api.h"
  43. #include "whalBus_Api.h"
  44. #include "TNETW_Driver_api.h"
  45. #include "commonTypes.h"
  46. #include "TNETW_Driver.h"
  47. #include "DebugTraceXfer_api.h"
  48. #include "FwEvent_api.h"
  49. /*
  50. Rx filter field is mostly hard-coded.
  51. This filter value basically pass only valid beacons / probe responses. For exact bit description,
  52. consult either the DPG or the FPG (or both, and Yoel...)
  53. */
  54. #define CFG_RX_PRSP_EN_ 4
  55. #define CFG_RX_MGMT_EN_ 0x10
  56. #define CFG_RX_BCN_EN_ 0x200
  57. #define RX_FILTER_CFG_ (CFG_RX_PRSP_EN_ | CFG_RX_MGMT_EN_ | CFG_RX_BCN_EN_)
  58. #define SIZE_OF_HEADER 4
  59. void whalCtrl_PrintAll (TI_HANDLE hWhalCtrl);
  60. #ifdef ROAMING_TRIGGER_DBG
  61. static void whalCtrl_dbg_RSSI_LEVEL(TI_HANDLE hWhalCtrl,char* str , UINT32 strLen);
  62. TI_STATUS whalCtrl_dbg_SYNCHRONIZATION(TI_HANDLE hWhalCtrl);
  63. TI_STATUS whalCtrl_dbg_BSS_LOSE(TI_HANDLE hWhalCtrl);
  64. TI_STATUS whalCtrl_dbg_MAX_TX_RETRY(TI_HANDLE hWhalCtrl);
  65. TI_STATUS whalCtrl_dbgRegisterRoamingEventCB(TI_HANDLE hWhalCtrl);
  66. int whalCtrl_dbgRoamingCommands (TI_HANDLE hWhalCtrl);
  67. #endif
  68. static int whalCtrl_ReadTemplateFrameMib(TI_HANDLE hWhalCtrl, TI_HANDLE CB_Handle, void* CB_Func, void* CB_Buf);
  69. static int whalCtrl_WriteTemplateFrameMib(TI_HANDLE hWhalCtrl, PLT_MIB_t* pMib);
  70. static int whalCtrl_PltMibSetBeaconFilterIETable(TI_HANDLE hWhalCtrl, PLT_MIB_t* pMib);
  71. static int whalCtrl_PltMibGetBeaconFilterIETable(TI_HANDLE hWhalCtrl, TI_HANDLE CB_Handle, void* CB_Func, void* CB_Buf);
  72. static int whalCtrl_PLT_ReadMIB_TxRatePolicy(TI_HANDLE hWhalCtrl, TI_HANDLE CB_Handle, void* CB_Func, void* CB_Buf);
  73. static int whalCtrl_PLT_WriteMIB_TxRatePolicy(TI_HANDLE hWhalCtrl, PLT_MIB_t* pMib);
  74. /*
  75. * ----------------------------------------------------------------------------
  76. * Function : whalCtrl_Create
  77. *
  78. * Input :
  79. * Output :
  80. * Process :
  81. * Note(s) : Done
  82. * -----------------------------------------------------------------------------
  83. */
  84. TI_HANDLE whalCtrl_Create (TI_HANDLE hOs)
  85. {
  86. WHAL_CTRL *pWhalCtrl;
  87. WlanParams_T *pWlanParams;
  88. DmaParams_T *pDmaParams;
  89. /*
  90. allocate the HAL Ctrl
  91. */
  92. pWhalCtrl = (WHAL_CTRL *)os_memoryAlloc (hOs, sizeof(WHAL_CTRL));
  93. if (pWhalCtrl == NULL)
  94. {
  95. WLAN_OS_REPORT(("whalCtrl_Create: Error memory Allocation\n"));
  96. return NULL;
  97. }
  98. os_memoryZero (hOs, (void *)pWhalCtrl, sizeof(WHAL_CTRL));
  99. pWhalCtrl->hOs = hOs;
  100. pWhalCtrl->EncDecEnableFlag = FALSE;
  101. /*
  102. Create the Params object
  103. */
  104. pWhalCtrl->pWhalParams = whal_params_Create (hOs,TRUE);
  105. if (pWhalCtrl->pWhalParams == NULL)
  106. {
  107. WLAN_OS_REPORT(("whalCtrl_Create: Error whal_params_Create\n"));
  108. whalCtrl_Destroy(pWhalCtrl);
  109. return NULL;
  110. }
  111. /* Initialize the Params object database fields*/
  112. pWlanParams = whal_ParamsGetWlanParams(pWhalCtrl->pWhalParams);
  113. pWlanParams->hwAccessMethod = HW_ACCESS_BUS_SLAVE_INDIRECT;
  114. pWlanParams->maxSitesFragCollect = HAL_CTRL_SITE_FRAG_COLLECT_DEF;
  115. pWlanParams->RtsThreshold = HAL_CTRL_RTS_THRESHOLD_DEF;
  116. pWlanParams->bJoin = FALSE;
  117. /*soft gemini defaults*/
  118. pWlanParams->SoftGeminiEnable = SG_DISABLE;
  119. /*becon filter defaults*/
  120. pWlanParams->beaconFilterParams.desiredState = FALSE;
  121. pWlanParams->beaconFilterParams.numOfElements = DEF_NUM_STORED_FILTERS;
  122. pWlanParams->beaconFilterIETable.numberOfIEs = DEF_BEACON_FILTER_IE_TABLE_NUM;
  123. pWlanParams->beaconFilterIETable.IETableSize = BEACON_FILTER_IE_TABLE_DEF_SIZE;
  124. /* set the dma params */
  125. pDmaParams = whal_ParamsGetDmaParams(pWhalCtrl->pWhalParams);
  126. whal_ParamsSetDmaParams(pWhalCtrl->pWhalParams);
  127. /*
  128. Configure the hardware control object
  129. */
  130. pWhalCtrl->pHwCtrl = whal_hwCtrl_Create(hOs, pWhalCtrl->pWhalParams);
  131. if (pWhalCtrl->pHwCtrl == NULL)
  132. {
  133. WLAN_OS_REPORT(("whalCtrl_Create: Error whal_hwCtrl_Create\n"));
  134. whalCtrl_Destroy(pWhalCtrl);
  135. return NULL;
  136. }
  137. /* set the Roaming params */
  138. /* Configure the Low RSSI, the Low SNR and the Missed beacon Defaults */
  139. whal_ParamsSetRoamingParams(pWhalCtrl->pWhalParams);
  140. /*
  141. Create the Security Object
  142. */
  143. pWhalCtrl->pWhalSecurity = whalSecur_Create (hOs, pWhalCtrl, pDmaParams->NumStations);
  144. if (pWhalCtrl->pWhalSecurity == NULL)
  145. {
  146. WLAN_OS_REPORT(("whalCtrl_Create: Error whalSecur_Create\n"));
  147. whalCtrl_Destroy(pWhalCtrl);
  148. return NULL;
  149. }
  150. WLAN_INIT_REPORT(("whalCtrl_Create end %x\n",(TI_HANDLE)pWhalCtrl));
  151. return (pWhalCtrl);
  152. }
  153. /*
  154. * ----------------------------------------------------------------------------
  155. * Function : whalCtrl_GetSetHwAddr
  156. *
  157. * Input :
  158. * Output :
  159. * Process : Configure the hardware control object
  160. * Note(s) : Done
  161. * -----------------------------------------------------------------------------
  162. */
  163. int whalCtrl_GetSetHwAddr (WHAL_CTRL* pWhalCtrl, TI_HANDLE hMemMgr,UINT32 *pFWImage)
  164. {
  165. int Status;
  166. UINT32 AcxRegAddr;
  167. UINT32 AcxMemAddr;
  168. /*
  169. * Initiate and get the wlan hardware register and memory addresses
  170. */
  171. AcxRegAddr = (UINT32)os_hwGetRegistersAddr(pWhalCtrl->hOs);
  172. AcxMemAddr = (UINT32)os_hwGetMemoryAddr(pWhalCtrl->hOs);
  173. /* Get the handle of the Interrupt handler object */
  174. pWhalCtrl->hWhalBus = whal_hwCtrl_GetBusHandle(pWhalCtrl->pHwCtrl);
  175. /*
  176. * Configure wlan hardware control object
  177. */
  178. Status = whal_hwCtrl_Config( pWhalCtrl->pHwCtrl,(TI_HANDLE)pWhalCtrl,
  179. whal_ParamsGetWlanParams(pWhalCtrl->pWhalParams)->hwAccessMethod,
  180. AcxRegAddr,
  181. AcxMemAddr,
  182. pWhalCtrl->hReport,
  183. hMemMgr,
  184. pFWImage,
  185. pWhalCtrl->hEventMbox);
  186. if (Status == TNETWIF_ERROR)
  187. {
  188. WLAN_REPORT_ERROR(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, (" whalCtrl_GetSetHwAddr: whal_hwCtrl_Config failure \n"));
  189. }
  190. return Status;
  191. }
  192. typedef int (*fcallback_t) (TI_HANDLE);
  193. /*
  194. * ----------------------------------------------------------------------------
  195. * Function : whalCtrl_ConfigHwCb2
  196. *
  197. * Input :
  198. * Output :
  199. * Process : last configuration call to the low level hal
  200. * Note(s) : Done
  201. * -----------------------------------------------------------------------------
  202. */
  203. static int whalCtrl_ConfigHwCb2 (TI_HANDLE hWhalCtrl, TI_STATUS status)
  204. {
  205. WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
  206. if (status != OK)
  207. {
  208. return NOK;
  209. }
  210. /* Call the upper layer callback */
  211. return (*((fcallback_t)pWhalCtrl->fCb)) (pWhalCtrl->hCb);
  212. }
  213. /*
  214. * ----------------------------------------------------------------------------
  215. * Function : whalCtrl_ConfigHwCb1
  216. *
  217. * Input :
  218. * Output :
  219. * Process : last configuration call to the low level hal
  220. * Note(s) : Done
  221. * -----------------------------------------------------------------------------
  222. */
  223. static int whalCtrl_ConfigHwCb1 (TI_HANDLE hWhalCtrl, TI_STATUS status)
  224. {
  225. WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
  226. DmaParams_T *pDmaParams = whal_ParamsGetDmaParams (pWhalCtrl->pWhalParams);
  227. /*
  228. * Store the addresses of the double buffer (Rx/Tx)
  229. * and the path status and control (Tx/Rx) in the corresponding modules
  230. */
  231. FwEvent_SetHwInfo (pWhalCtrl->hFwEvent, &(pWhalCtrl->pHwCtrl->DataPathParams));
  232. txXfer_setHwInfo (pWhalCtrl->hTxXfer, &(pWhalCtrl->pHwCtrl->DataPathParams));
  233. txResult_setHwInfo (pWhalCtrl->hTxResult, &(pWhalCtrl->pHwCtrl->DataPathParams));
  234. rxXfer_SetDoubleBufferAddr (pWhalCtrl->hRxXfer, &(pWhalCtrl->pHwCtrl->DataPathParams));
  235. /* Provide number of HW Tx-blocks and descriptors to Tx-HW-Queue module */
  236. txHwQueue_setHwInfo (pWhalCtrl->hTxHwQueue, pDmaParams);
  237. #ifdef TI_DBG
  238. /* Set the debug trace addresses */
  239. debugTrace_ConfigHw (pWhalCtrl->hDebugTrace,
  240. (UINT32)pWhalCtrl->pHwCtrl->MemMap.debugBuffer1Start,
  241. (UINT32)pWhalCtrl->pHwCtrl->MemMap.debugBuffer2Start);
  242. #endif /* TI_DBG */
  243. /*
  244. * Register all health/sanityCheck/Recovery callbacks
  245. * --------------------------------------------------
  246. * DeviceError - CORE callback for full recovery
  247. * HealthReport - Event Mbox callback for extracting device error
  248. * MacStatus - Event Mbox callback for checkHwStatus FCS_ERR, RX_FREE_MEM regs
  249. * AciIndication - Event Mbox callback for accumulate SCR_PAD8 image
  250. * Mailbox error - Mailbox queue callback for case of timeout/error
  251. * Power control error - PowerMngr callback in case of power ctrl timeout
  252. * Failure event - CORE Callback in case of MailboxError or PowerCtrl error
  253. */
  254. #ifdef USE_RECOVERY
  255. whalCtrl_RegisterErrorsCallbacks (hWhalCtrl);
  256. #endif
  257. #ifdef ROAMING_TRIGGER_DBG
  258. whalCtrl_dbgRegisterRoamingEventCB (hWhalCtrl);
  259. whalCtrl_dbgRoamingCommands (hWhalCtrl);
  260. #endif
  261. return whal_hwInfoElemMiscTableGet (pWhalCtrl->pHwCtrl->pHwMboxConfig,
  262. &pWhalCtrl->misc,
  263. (void *)whalCtrl_ConfigHwCb2,
  264. hWhalCtrl);
  265. }
  266. /*
  267. * ----------------------------------------------------------------------------
  268. * Function : whalCtrl_ConfigHw
  269. *
  270. * Input :
  271. * Output :
  272. * Process : last configuration call to the low level hal
  273. * Note(s) : Done
  274. * -----------------------------------------------------------------------------
  275. */
  276. int whalCtrl_ConfigHw
  277. (
  278. TI_HANDLE hWhalCtrl,
  279. TnetwDrv_InitParams_t *pInitParams,
  280. void *fCb,
  281. TI_HANDLE hCb
  282. )
  283. {
  284. WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
  285. TxParam_t *pTxParams = whal_ParamsGetTxParams (pWhalCtrl->pWhalParams);
  286. WlanParams_T *pWlanParams = whal_ParamsGetWlanParams (pWhalCtrl->pWhalParams);
  287. UINT8 acID;
  288. int k = 0;
  289. pWhalCtrl->fCb = fCb;
  290. pWhalCtrl->hCb = hCb;
  291. if (NULL != pInitParams)
  292. {
  293. /* whalCtrl_init_t */
  294. pWlanParams->PacketDetectionThreshold = pInitParams->whalCtrl_init.packetDetectionThreshold;
  295. pWlanParams->qosNullDataTemplateSize = pInitParams->whalCtrl_init.qosNullDataTemplateSize;
  296. pWlanParams->PsPollTemplateSize = pInitParams->whalCtrl_init.PsPollTemplateSize;
  297. pWlanParams->probeResponseTemplateSize = pInitParams->whalCtrl_init.probeResponseTemplateSize;
  298. pWlanParams->probeRequestTemplateSize = pInitParams->whalCtrl_init.probeRequestTemplateSize;
  299. pWlanParams->beaconTemplateSize = pInitParams->whalCtrl_init.beaconTemplateSize;
  300. pWlanParams->nullTemplateSize = pInitParams->whalCtrl_init.nullTemplateSize;
  301. /* Beacon broadcast options */
  302. pWlanParams->BcnBrcOptions.BeaconRxTimeout = pInitParams->whalCtrl_init.BeaconRxTimeout;
  303. pWlanParams->BcnBrcOptions.BroadcastRxTimeout = pInitParams->whalCtrl_init.BroadcastRxTimeout;
  304. pWlanParams->BcnBrcOptions.RxBroadcastInPs = pInitParams->whalCtrl_init.RxBroadcastInPs;
  305. pWlanParams->ConsecutivePsPollDeliveryFailureThreshold =
  306. pInitParams->whalCtrl_init.ConsecutivePsPollDeliveryFailureThreshold;
  307. pTxParams->txCompleteTimeout = pInitParams->whalCtrl_init.txCompleteTimeout;
  308. pTxParams->txCompleteThreshold = pInitParams->whalCtrl_init.txCompleteThreshold;
  309. /* halCtrlConfigParams_t */
  310. pWlanParams->RxEnergyDetection = pInitParams->halCtrlConfigParams.halCtrlRxEnergyDetection;
  311. pWlanParams->TxEnergyDetection = pInitParams->halCtrlConfigParams.halCtrlTxEnergyDetection;
  312. pWlanParams->ACIMode = pInitParams->halCtrlConfigParams.halCtrlACIMode;
  313. pWlanParams->inputCCA = pInitParams->halCtrlConfigParams.halCtrlInputCCA;
  314. pWlanParams->qualifiedCCA = pInitParams->halCtrlConfigParams.halCtrlQualifiedCCA;
  315. pWlanParams->stompForRx = pInitParams->halCtrlConfigParams.halCtrlStompForRx;
  316. pWlanParams->stompForTx = pInitParams->halCtrlConfigParams.halCtrlStompForTx;
  317. pWlanParams->txCCA = pInitParams->halCtrlConfigParams.halCtrlTxCCA;
  318. pWlanParams->RxDisableBroadcast = pInitParams->halCtrlConfigParams.halCtrlRxDisableBroadcast;
  319. pWlanParams->calibrationChannel2_4 = pInitParams->halCtrlConfigParams.halCtrlCalibrationChannel2_4;
  320. pWlanParams->calibrationChannel5_0 = pInitParams->halCtrlConfigParams.halCtrlCalibrationChannel5_0;
  321. /* Not used but need by Palau */
  322. pWlanParams->RtsThreshold = pInitParams->halCtrlConfigParams.halCtrlRtsThreshold;
  323. pWlanParams->CtsToSelf = CTS_TO_SELF_DISABLE;
  324. pWlanParams->WiFiWmmPS = pInitParams->halCtrlConfigParams.WiFiWmmPS;
  325. pWlanParams->MaxTxMsduLifetime = pInitParams->halCtrlConfigParams.halCtrlMaxTxMsduLifetime;
  326. pWlanParams->MaxRxMsduLifetime = pInitParams->halCtrlConfigParams.halCtrlMaxRxMsduLifetime;
  327. pWlanParams->rxTimeOut.psPoll = pInitParams->halCtrlConfigParams.rxTimeOut.psPoll;
  328. pWlanParams->rxTimeOut.UPSD = pInitParams->halCtrlConfigParams.rxTimeOut.UPSD;
  329. /* No used */
  330. pWlanParams->FragmentThreshold = pInitParams->halCtrlConfigParams.halCtrlFragThreshold;
  331. pWlanParams->ListenInterval = (UINT8)pInitParams->halCtrlConfigParams.halCtrlListenInterval;
  332. pWlanParams->RateFallback = pInitParams->halCtrlConfigParams.halCtrlRateFallbackRetry;
  333. pWlanParams->MacClock = pInitParams->halCtrlConfigParams.halCtrlMacClock;
  334. pWlanParams->ArmClock = pInitParams->halCtrlConfigParams.halCtrlArmClock;
  335. pWlanParams->Enable4x = pInitParams->halCtrlConfigParams.halCtrlEnable4x;
  336. pWlanParams->TxCompleteThreshold = pInitParams->halCtrlConfigParams.halCtrlTxCompleteThreshold;
  337. /* Configure ARP IP */
  338. pWlanParams->isArpIpFilteringEnabled = pInitParams->arpIpFilterParams.isFilterEnabled ;
  339. os_memoryCopy(pWhalCtrl->hOs,(void *)pWlanParams->arp_IP_addr.addr,(void *)pInitParams->arpIpFilterParams.arpIpInitParams.addr , IP_V4_ADDR_LEN) ;
  340. /* Configure address group */
  341. pWlanParams->numGroupAddrs = pInitParams->macAddrFilterParams.numOfMacAddresses;
  342. pWlanParams->isMacAddrFilteringnabled = pInitParams->macAddrFilterParams.isFilterEnabled;
  343. for (k = 0; k < pWlanParams->numGroupAddrs; k++)
  344. {
  345. os_memoryCopy (pWhalCtrl->hOs,(void*)pWlanParams->Group_addr[k].addr, (void*)pInitParams->macAddrFilterParams.macAddrTable[k].addr, MAC_ADDR_LEN);
  346. }
  347. /* Configure beacon timing (early wakeup parmeter) */
  348. pWlanParams->earlyWakeUp = pInitParams->macPreambleParams.earlyWakeUp;
  349. /* QoS configure queue */
  350. for (acID = 0; acID < MAX_NUM_OF_AC; acID++)
  351. {
  352. /*
  353. * Setting ac queues params for AccessCategoryCfg (TNET configuration)
  354. */
  355. pWlanParams->acQueuesParams[acID].acId = acID;
  356. pWlanParams->acQueuesParams[acID].qId = acID;
  357. pWlanParams->acQueuesParams[acID].percentOfBlockHighThreshold = pInitParams->whalCtrl_init.TxBlocksHighPercentPerAc[acID];
  358. pWlanParams->acQueuesParams[acID].percentOfBlockLowThreshold = pInitParams->whalCtrl_init.TxBlocksLowPercentPerAc[acID];
  359. }
  360. }
  361. /*
  362. * Configure the WLAN hardware after config all the hardware objects
  363. */
  364. if (whal_hwCtrl_ConfigHw (pWhalCtrl->pHwCtrl, (void *)whalCtrl_ConfigHwCb1, hWhalCtrl, FALSE) != OK)
  365. return NOK;
  366. return OK;
  367. }
  368. /*
  369. * ----------------------------------------------------------------------------
  370. * Function : whalCtrl_Config
  371. *
  372. * Input :
  373. * Output :
  374. * Process :
  375. * Note(s) : Done
  376. * -----------------------------------------------------------------------------
  377. */
  378. TI_STATUS whalCtrl_Config (TI_HANDLE hWhalCtrl,TI_HANDLE hTNETW_Driver, whalCtrl_config_t* pWhalCtrlCfg,UINT32 *pFWImage)
  379. {
  380. int Stt = OK;
  381. whalSecur_config_t securCfg;
  382. WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
  383. WlanParams_T *pWlanParams = whal_ParamsGetWlanParams(pWhalCtrl->pWhalParams);
  384. /* Save config parameters */
  385. pWhalCtrl->hReport = pWhalCtrlCfg->hReport;
  386. pWhalCtrl->hFwEvent = pWhalCtrlCfg->hFwEvent;
  387. pWhalCtrl->hRxXfer = pWhalCtrlCfg->hRxXfer;
  388. pWhalCtrl->hTxXfer = pWhalCtrlCfg->hTxXfer;
  389. pWhalCtrl->hTxHwQueue = pWhalCtrlCfg->hTxHwQueue;
  390. pWhalCtrl->hTxResult = pWhalCtrlCfg->hTxResult;
  391. pWhalCtrl->hTNETW_Driver = hTNETW_Driver;
  392. pWhalCtrl->hEventMbox = pWhalCtrlCfg->hEventMbox;
  393. pWhalCtrl->hCmdQueue = pWhalCtrlCfg->hCmdQueue;
  394. #ifdef TI_DBG
  395. pWhalCtrl->hDebugTrace = pWhalCtrlCfg->hDebugTrace;
  396. #endif /* TI_DBG */
  397. /*
  398. Config the Params object
  399. */
  400. whal_params_Config (pWhalCtrl->pWhalParams, pWhalCtrl->hReport);
  401. /*
  402. Configure the security object
  403. */
  404. securCfg.hMemMgr = pWhalCtrlCfg->hMemMgr;
  405. securCfg.hReport = pWhalCtrl->hReport;
  406. if (whalSecur_Config (pWhalCtrl->pWhalSecurity, &securCfg) != OK)
  407. {
  408. WLAN_REPORT_ERROR (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, ("Error on whalSecur_Config\n"));
  409. }
  410. /*
  411. Initialize the Params object database fields
  412. */
  413. pWlanParams->FragmentationOnHal = 0;
  414. #if !defined(GWSI_DRIVER) && !defined(GWSI_LIB)
  415. /* NO pInitTableCopy in GWSI yet */
  416. pWlanParams->RecoveryEnable =
  417. ((TnetwDrv_InitParams_t*)(((TnetwDrv_t *)hTNETW_Driver)->pInitTableCopy))->halCtrlConfigParams.halCtrlRecoveryEnable;
  418. #endif /* GWSI_DRIVER */
  419. /*
  420. Call local function to configure the hardware control object
  421. */
  422. /* This will at the end call the download function */
  423. Stt = whalCtrl_GetSetHwAddr(pWhalCtrl, pWhalCtrlCfg->hMemMgr,pFWImage);
  424. /* This could return TNETWIF__ERROR,TNETWIF_COMPLETE or TNETWIF_PENDING */
  425. return (TI_STATUS)Stt;
  426. }
  427. /*
  428. * ----------------------------------------------------------------------------
  429. * Function : whalCtrl_GetTnetwifHandle
  430. *
  431. * Input :
  432. * Output :
  433. * Process :
  434. * Note(s) :
  435. * -----------------------------------------------------------------------------
  436. */
  437. TI_HANDLE whalCtrl_GetTnetwifHandle (TI_HANDLE hWhalCtrl)
  438. {
  439. WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
  440. return whal_hwCtrl_GetTnentwifHandle (pWhalCtrl->pHwCtrl);
  441. }
  442. /*
  443. * ----------------------------------------------------------------------------
  444. * Function : whalCtrl_GetTnetwifHandle
  445. *
  446. * Input :
  447. * Output :
  448. * Process :
  449. * Note(s) :
  450. * -----------------------------------------------------------------------------
  451. */
  452. TI_HANDLE whalCtrl_GetWhalParams (TI_HANDLE hWhalCtrl)
  453. {
  454. WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
  455. return (TI_HANDLE)pWhalCtrl->pWhalParams;
  456. }
  457. /****************************************************************************
  458. * whalCtrl_FinalizeDownload()
  459. ****************************************************************************
  460. * DESCRIPTION: Finalize all the remaining initialization after the download has finished
  461. *
  462. * INPUTS:
  463. *
  464. * OUTPUT: None
  465. *
  466. * RETURNS: OK or NOK
  467. ****************************************************************************/
  468. TI_STATUS whalCtrl_FinalizeDownload (TI_HANDLE hWhalCtrl)
  469. {
  470. WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
  471. /* Call the upper layer to finalize all download action and then send the InitComplete Callback */
  472. #if !defined(GWSI_DRIVER) && !defined(GWSI_LIB)
  473. return TnetwDrv_InitHw_FinalizeDownload(pWhalCtrl->hTNETW_Driver);
  474. #else
  475. /* GWSI SA deosn't suport recovery, so the normal finalize function is called directly */
  476. return TnetwDrv_FinalizeDownload (pWhalCtrl->hTNETW_Driver);
  477. #endif
  478. }
  479. /****************************************************************************
  480. * whalCtrl_FinalizeOnFailure()
  481. ****************************************************************************
  482. * DESCRIPTION: Finalize all the remaining initialization after the download has failed
  483. *
  484. * INPUTS:
  485. *
  486. * OUTPUT: None
  487. *
  488. * RETURNS: OK or NOK
  489. ****************************************************************************/
  490. TI_STATUS whalCtrl_FinalizeOnFailure (TI_HANDLE hWhalCtrl)
  491. {
  492. WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
  493. /* Call the upper layer to finalize all download */
  494. return TnetwDrv_FinalizeOnFailure (pWhalCtrl->hTNETW_Driver);
  495. }
  496. /*
  497. * ----------------------------------------------------------------------------
  498. * Function : whalCtrl_Register_CB
  499. *
  500. * Input :
  501. * Output :
  502. * Process :
  503. * Note(s) :
  504. * -----------------------------------------------------------------------------
  505. */
  506. void whalCtrl_Register_CB(TI_HANDLE hWhalCtrl,tiUINT32 CallBackID,void *CBFunc,TI_HANDLE CBObj)
  507. {
  508. WHAL_CTRL* pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
  509. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, ("whalCtrl_Register_CB (Value = 0x%x)\n", CallBackID));
  510. switch(CallBackID)
  511. {
  512. case HAL_INTERNAL_EVENT_FAILURE:
  513. pWhalCtrl->FailureEvent_CB = (failureEventCB_t)CBFunc;
  514. pWhalCtrl->FailureEvent_CB_handle = CBObj;
  515. /* Register all health/sanityCheck/Recovery callbacks
  516. DeviceError - CORE callback for full recovery
  517. HealthReport - Event Mbox callback for extracting device error
  518. MacStatus - Event Mbox callback for checkHwStatus FCS_ERR, RX_FREE_MEM regs
  519. Mailbox error - Mailbox queue callback for case of timeout/error */
  520. #ifdef USE_RECOVERY
  521. whalCtrl_RegisterErrorsCallbacks(hWhalCtrl);
  522. #else
  523. CmdQueue_RegisterForErrorCB(pWhalCtrl->hCmdQueue, CBFunc, CBObj);
  524. #endif
  525. break;
  526. case HAL_INT_COMMAND_COMPLETE:
  527. whalCtrl_RegisterCmdCompleteGenericCB(hWhalCtrl,CBFunc,CBObj);
  528. break;
  529. default:
  530. /* register to the Event MBOX the corresponding Callback */
  531. whalCtrl_EventMbox_RegisterForEvent(hWhalCtrl, (int)(CallBackID), CBFunc, CBObj);
  532. whalCtrl_EventMbox_Enable(hWhalCtrl, (int)(CallBackID));
  533. }
  534. return;
  535. }
  536. /*
  537. * ----------------------------------------------------------------------------
  538. * Function : whalCtrl_PreRecoveryProcess
  539. *
  540. * Input : TI_HANDLE hWhalCtrl
  541. * Output :
  542. * Process : prepare for recovery - save all mbox callbacks
  543. * Note(s) :
  544. * -----------------------------------------------------------------------------
  545. */
  546. void whalCtrl_PreRecoveryProcess(TI_HANDLE hWhalCtrl)
  547. {
  548. WHAL_CTRL* pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
  549. CmdQueue_StartReconfig( pWhalCtrl->hCmdQueue );
  550. }
  551. /*
  552. * ----------------------------------------------------------------------------
  553. * Function : whalCtrl_SetMacAddress
  554. *
  555. * Input :
  556. * Output :
  557. * Process :
  558. * Note(s) : Done
  559. * -----------------------------------------------------------------------------
  560. */
  561. int whalCtrl_SetMacAddress(TI_HANDLE hWhalCtrl, macAddress_t *macAddr)
  562. {
  563. WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
  564. return whal_hwCtrl_SetMacAddress(pWhalCtrl->pHwCtrl, macAddr);
  565. }
  566. /*
  567. * ----------------------------------------------------------------------------
  568. * Function : whalCtrl_SetParam
  569. *
  570. * Input :
  571. * Output :
  572. * Process :
  573. * Note(s) : Done
  574. * -----------------------------------------------------------------------------
  575. */
  576. TI_STATUS whalCtrl_SetParam (TI_HANDLE hWhalCtrl, whalParamInfo_t* pParamInfo)
  577. {
  578. WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
  579. HwMboxConfig_T *pInfoElemConfig = whal_hwCtrl_GetMboxConfig(pWhalCtrl->pHwCtrl);
  580. WlanParams_T *pWlanParams = &pWhalCtrl->pWhalParams->WlanParams;
  581. TxParam_t *pTxParams = whal_ParamsGetTxParams(pWhalCtrl->pWhalParams);
  582. WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
  583. ("whalCtrl_SetParam : paramType=0x%X\n", pParamInfo->paramType));
  584. switch ((externalParam_e)pParamInfo->paramType)
  585. {
  586. case HAL_CTRL_RTS_THRESHOLD_PARAM:
  587. if (pParamInfo->content.halCtrlRtsThreshold > HAL_CTRL_RTS_THRESHOLD_MAX)
  588. {
  589. WLAN_REPORT_ERROR(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, (" whalCtrl########HAL_CTRL_RTS_THRESHOLD_PARAM: Value out of permitted range 0x%x\n",
  590. pParamInfo->content.halCtrlRtsThreshold));
  591. return (PARAM_VALUE_NOT_VALID);
  592. }
  593. if (whal_hwInfoElemRtsThresholdSet (pInfoElemConfig,pParamInfo->content.halCtrlRtsThreshold) == OK)
  594. {
  595. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, (" whalCtrl########HAL_CTRL_RTS_THRESHOLD_PARAM 0x%x\n",
  596. pParamInfo->content.halCtrlRtsThreshold));
  597. pWlanParams->RtsThreshold = pParamInfo->content.halCtrlRtsThreshold;
  598. }
  599. break;
  600. case HAL_CTRL_CTS_TO_SELF_PARAM:
  601. if (whal_hwInfoElemCtsToSelfSet (pInfoElemConfig, pParamInfo->content.halCtrlCtsToSelf) == OK)
  602. pWlanParams->CtsToSelf = pParamInfo->content.halCtrlCtsToSelf;
  603. else
  604. return NOK;
  605. break;
  606. case HAL_CTRL_RX_TIME_OUT_PARAM:
  607. if (whal_hwInfoElemRxTimeOutSet (pInfoElemConfig, &pParamInfo->content.halCtrlRxTimeOut) == OK)
  608. {
  609. pWlanParams->rxTimeOut.psPoll = pParamInfo->content.halCtrlRxTimeOut.psPoll;
  610. pWlanParams->rxTimeOut.UPSD = pParamInfo->content.halCtrlRxTimeOut.UPSD;
  611. }
  612. break;
  613. case HAL_CTRL_FRAG_THRESHOLD_PARAM:
  614. if ((pParamInfo->content.halCtrlFragThreshold < HAL_CTRL_FRAG_THRESHOLD_MIN) ||
  615. (pParamInfo->content.halCtrlFragThreshold > HAL_CTRL_FRAG_THRESHOLD_MAX))
  616. return (PARAM_VALUE_NOT_VALID);
  617. pWlanParams->FragmentThreshold = pParamInfo->content.halCtrlFragThreshold;
  618. pWlanParams->FragmentationOnHal = 0;
  619. break;
  620. case HAL_CTRL_DOT11_MAX_RX_MSDU_LIFE_TIME:
  621. if (whal_hwInfoElemRxMsduLifeTimeSet (pInfoElemConfig, pParamInfo->content.halCtrlMaxRxMsduLifetime) == OK)
  622. pWlanParams->MaxRxMsduLifetime = (UINT32)pParamInfo->content.halCtrlMaxRxMsduLifetime;
  623. break;
  624. case HAL_CTRL_ACX_STATISTICS_PARAM:
  625. if (whal_hwInfoElemAcxStatisiticsSet (pInfoElemConfig) != OK)
  626. return (NOK);
  627. break;
  628. case HAL_CTRL_LISTEN_INTERVAL_PARAM:
  629. if ((pParamInfo->content.halCtrlListenInterval < HAL_CTRL_LISTEN_INTERVAL_MIN) ||
  630. (pParamInfo->content.halCtrlListenInterval > HAL_CTRL_LISTEN_INTERVAL_MAX))
  631. return (PARAM_VALUE_NOT_VALID);
  632. pWlanParams->ListenInterval = (UINT8)pParamInfo->content.halCtrlListenInterval;
  633. break;
  634. case HAL_CTRL_AID_PARAM:
  635. pWlanParams->Aid = pParamInfo->content.halCtrlAid;
  636. /* Configure the ACXAID info element*/
  637. if (whal_hwCtrl_AidSet (pWhalCtrl->pHwCtrl, pParamInfo->content.halCtrlAid) != OK)
  638. return (NOK);
  639. break;
  640. case HAL_CTRL_RSN_HW_ENC_DEC_ENABLE_PARAM:
  641. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
  642. (" whalCtrl########HW_ENC_DEC_ENABLE %d\n", pParamInfo->content.rsnHwEncDecrEnable));
  643. /* Set the Encryption/Decryption on the HW*/
  644. if (whalSecur_HwEncDecrEnable (pWhalCtrl->pWhalSecurity, pParamInfo->content.rsnHwEncDecrEnable) != OK)
  645. return (NOK);
  646. break;
  647. case HAL_CTRL_RSN_KEY_ADD_PARAM:
  648. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, (" whalCtrl########KEY_ADD\n"));
  649. if (whalSecur_KeyAdd (pWhalCtrl->pWhalSecurity,
  650. (securityKeys_t *) pParamInfo->content.configureCmdCBParams.CB_buf,
  651. FALSE,
  652. pParamInfo->content.configureCmdCBParams.CB_Func,
  653. pParamInfo->content.configureCmdCBParams.CB_handle) != OK)
  654. return (NOK);
  655. break;
  656. case HAL_CTRL_RSN_KEY_REMOVE_PARAM:
  657. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, (" whalCtrl########KEY_REMOVE\n"));
  658. if (whalSecur_KeyRemove (pWhalCtrl->pWhalSecurity,
  659. (securityKeys_t *) pParamInfo->content.configureCmdCBParams.CB_buf,
  660. FALSE,
  661. pParamInfo->content.configureCmdCBParams.CB_Func,
  662. pParamInfo->content.configureCmdCBParams.CB_handle) != OK)
  663. return (NOK);
  664. break;
  665. case HAL_CTRL_RSN_DEFAULT_KEY_ID_PARAM:
  666. if ((int) *pParamInfo->content.configureCmdCBParams.CB_buf > MAX_DEFAULT_KEY_ID)
  667. return (PARAM_VALUE_NOT_VALID);
  668. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, (" whalCtrl########DEFAULT_KEY_ID %d\n",
  669. (UINT8)pParamInfo->content.rsnDefaultKeyID));
  670. if (whalSecur_DefaultKeyIdSet(pWhalCtrl->pWhalSecurity,
  671. *pParamInfo->content.interogateCmdCBParams.CB_buf,
  672. pParamInfo->content.interogateCmdCBParams.CB_Func,
  673. pParamInfo->content.interogateCmdCBParams.CB_handle) != OK)
  674. return (NOK);
  675. break;
  676. case HAL_CTRL_RSN_SECURITY_MODE_PARAM:
  677. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
  678. (" whalCtrl########SECURITY_MODE_SET %d\n", pParamInfo->content.rsnEncryptionStatus));
  679. if (whalSecur_SecurModeSet (pWhalCtrl->pWhalSecurity, (cipherSuite_e)pParamInfo->content.rsnEncryptionStatus) != OK)
  680. return (NOK);
  681. break;
  682. #ifdef EXC_MODULE_INCLUDED
  683. case HAL_CTRL_RSN_EXC_SW_ENC_ENABLE_PARAM:
  684. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
  685. (" whalCtrl########EXC_SW_ENC_ENABLE %d\n", pParamInfo->content.rsnExcSwEncFlag));
  686. #ifdef CKIP_ENABLED
  687. if (whalSecur_SwEncEnable (pWhalCtrl->pWhalSecurity, pParamInfo->content.rsnExcSwEncFlag) != OK)
  688. return (NOK);
  689. #endif
  690. /* when SW encryption is ON, HW encryption should be turned OFF and vice versa */
  691. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
  692. (" whalCtrl: Set HwEncDecrEnable to %d\n", !pParamInfo->content.rsnExcSwEncFlag));
  693. /* Set the Encryption/Decryption on the HW*/
  694. if (whalSecur_HwEncDecrEnable (pWhalCtrl->pWhalSecurity, (BOOL)(!(pParamInfo->content.rsnExcSwEncFlag))) != OK)
  695. return (NOK);
  696. break;
  697. case HAL_CTRL_RSN_EXC_MIC_FIELD_ENABLE_PARAM:
  698. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
  699. (" whalCtrl########EXC_MIC_FIELD_ENABLE %d\n", pParamInfo->content.rsnExcMicFieldFlag));
  700. #ifdef CKIP_ENABLED
  701. if (whalSecur_MicFieldEnable (pWhalCtrl->pWhalSecurity, pParamInfo->content.rsnExcMicFieldFlag) != OK)
  702. return (NOK);
  703. #endif
  704. break;
  705. #endif /* EXC_MODULE_INCLUDED*/
  706. case HAL_CTRL_TX_POWER_PARAM:
  707. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
  708. (" whalCtrl########TX_POWER_LEVEL old = %d new = %d\n",
  709. pTxParams->TxPowerDbm, pParamInfo->content.halCtrlTxPowerDbm));
  710. if ( pTxParams->TxPowerDbm == pParamInfo->content.halCtrlTxPowerDbm)
  711. { /* Save up time if we set the same value */
  712. return TX_POWER_SET_SAME_VALUE;
  713. }
  714. pTxParams->TxPowerDbm = pParamInfo->content.halCtrlTxPowerDbm;
  715. /* configure the wlan hardware */
  716. if (whal_hwInfoElemTxPowerSet (pInfoElemConfig,
  717. &pTxParams->TxPowerDbm) != OK)
  718. return (NOK);
  719. break;
  720. case HAL_CTRL_SG_ENABLE_PARAM:
  721. return (TI_STATUS)whal_hwCtrl_SoftGeminiEnable(pWhalCtrl->pHwCtrl,(SoftGeminiEnableModes_e)pParamInfo->content.SoftGeminiEnable);
  722. case HAL_CTRL_SG_CONFIG_PARAM:
  723. return (TI_STATUS)whal_hwCtrl_SetSoftGeminiParams(pWhalCtrl->pHwCtrl,&(pParamInfo->content.SoftGeminiParam));
  724. case HAL_CTRL_ANTENNA_DIVERSITY_PARAMS:
  725. /* save parameters */
  726. whal_hwCtrl_SaveAntennaDiversityOptions (pWhalCtrl->pHwCtrl, &(pParamInfo->content.antennaDiversityOptions));
  727. /* Configure FW with new parameters */
  728. whal_hwCtrl_CurrentAntennaDiversitySendCmd (pWhalCtrl->pHwCtrl);
  729. break;
  730. case HAL_CTRL_TX_ANTENNA_PARAM:
  731. /* save antenna number */
  732. whal_hwCtrl_SetTxAntenna( pWhalCtrl->pHwCtrl, pParamInfo->content.antennaNum );
  733. /* Write parameters to FW */
  734. whal_hwCtrl_CurrentAntennaDiversitySendCmd( pWhalCtrl->pHwCtrl );
  735. break;
  736. case HAL_CTRL_RX_ANTENNA_PARAM:
  737. /* save antenna number */
  738. whal_hwCtrl_SetRxAntenna( pWhalCtrl->pHwCtrl, pParamInfo->content.antennaNum );
  739. /* Write parameters to FW */
  740. whal_hwCtrl_CurrentAntennaDiversitySendCmd( pWhalCtrl->pHwCtrl );
  741. break;
  742. /*
  743. * TX Parameters
  744. */
  745. case HAL_CTRL_TX_RATE_CLASS_PARAMS:
  746. return (TI_STATUS)whal_hwCtrl_TxRatePolicy(pWhalCtrl->pHwCtrl,pParamInfo->content.pTxRatePlicy);
  747. /* break; */
  748. case HAL_CTRL_QUEUES_PARAMS:
  749. os_memoryCopy (pWhalCtrl->hOs, &pWhalCtrl->pWhalParams->WlanParams.QtrafficParams,
  750. pParamInfo->content.pQueueTrafficParams, sizeof(queueTrafficParams_t));
  751. return (TI_STATUS)whal_hwCtrl_TrafficConf(pWhalCtrl->pHwCtrl,pParamInfo->content.pQueueTrafficParams);
  752. /* break; */
  753. case HAL_CTRL_AC_PARAMS:
  754. os_memoryCopy (pWhalCtrl->hOs, &pWhalCtrl->pWhalParams->WlanParams.acQosParams,
  755. pParamInfo->content.configureCmdCBParams.CB_buf, sizeof(acQosParams_t));
  756. return (TI_STATUS)whal_hwCtrl_AcParamsConf(pWhalCtrl->pHwCtrl,&pParamInfo->content.configureCmdCBParams);
  757. /* break; */
  758. #if 0
  759. /*Tx Ack/No Ack*/
  760. case HAL_CTRL_TX_ACK_POLICY:
  761. return (whal_ParamsSetAccessCategoryAckPolicy(pWhalCtrl->pWhalParams,
  762. pParamInfo->content.AcAckPolicy.AckPolicy,
  763. pParamInfo->content.AcAckPolicy.AcId));
  764. break;
  765. #endif
  766. case HAL_CTRL_MIN_POWER_LEVEL:
  767. whalCtrl_SetMinPowerLevel(pWhalCtrl,
  768. pParamInfo->content.minPowerPolicy);
  769. break;
  770. case HAL_CTRL_CLK_RUN_ENABLE:
  771. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
  772. (" whalCtrl_SetParam: CLK_RUN_ENABLE %d\n", pParamInfo->content.halCtrlClkRunEnable));
  773. /* Set the Encryption/Decryption on the HW*/
  774. if (whal_hwCtrl_ClkRunEnableSet (pWhalCtrl->pHwCtrl, pParamInfo->content.halCtrlClkRunEnable) != OK)
  775. return (NOK);
  776. break;
  777. case HAL_CTRL_EARLY_WAKEUP:
  778. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
  779. (" whalCtrl_SetParam: SET EARLY WAKEUP to %d\n", pParamInfo->content.earlyWakeup));
  780. pWlanParams->earlyWakeUp = pParamInfo->content.earlyWakeup;
  781. break;
  782. /* PLT params */
  783. case HAL_CTRL_PLT_WRITE_MIB:
  784. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, ("%s - HAL_CTRL_PLT_WRITE_MIB(0x%x) \n", __FUNCTION__, pParamInfo->paramType));
  785. return (TI_STATUS)whalCtrl_WriteMib(hWhalCtrl, &pParamInfo->content.PltMib);
  786. /* break; */
  787. case HAL_CTRL_PLT_RX_PER_START:
  788. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, ("%s - HAL_CTRL_PLT_RX_PER_START(0x%x) \n", __FUNCTION__, pParamInfo->paramType));
  789. return (TI_STATUS)whalCtrl_RxPER(pWhalCtrl, PLT_RX_PER_START,
  790. pParamInfo->content.interogateCmdCBParams.CB_handle,
  791. pParamInfo->content.interogateCmdCBParams.CB_Func);
  792. /* break; */
  793. case HAL_CTRL_PLT_RX_PER_STOP:
  794. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, ("%s - HAL_CTRL_PLT_RX_PER_STOP(0x%x) \n", __FUNCTION__, pParamInfo->paramType));
  795. return (TI_STATUS)whalCtrl_RxPER(pWhalCtrl, PLT_RX_PER_STOP,
  796. pParamInfo->content.interogateCmdCBParams.CB_handle,
  797. pParamInfo->content.interogateCmdCBParams.CB_Func);
  798. /* break; */
  799. case HAL_CTRL_PLT_RX_PER_CLEAR:
  800. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, ("%s - HAL_CTRL_PLT_RX_PER_CLEAR(0x%x) \n", __FUNCTION__, pParamInfo->paramType));
  801. return (TI_STATUS)whalCtrl_RxPER(pWhalCtrl, PLT_RX_PER_CLEAR,
  802. pParamInfo->content.interogateCmdCBParams.CB_handle,
  803. pParamInfo->content.interogateCmdCBParams.CB_Func);
  804. /* break; */
  805. case HAL_CTRL_PLT_TX_CW:
  806. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, ("%s - HAL_CTRL_PLT_TX_CW(0x%x) \n", __FUNCTION__, pParamInfo->paramType));
  807. return (TI_STATUS)whalCtrl_TxCW(pWhalCtrl, &pParamInfo->content.PltCW,
  808. NULL, NULL, NULL);
  809. /*break;*/
  810. case HAL_CTRL_PLT_TX_CONTINUES:
  811. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, ("%s - HAL_CTRL_PLT_TX_CONTINUES(0x%x) \n", __FUNCTION__, pParamInfo->paramType));
  812. return (TI_STATUS)whalCtrl_TxContinues(pWhalCtrl, &pParamInfo->content.PltTxContinues,
  813. NULL, NULL, NULL);
  814. /*break;*/
  815. case HAL_CTRL_PLT_TX_STOP:
  816. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, ("%s - HAL_CTRL_PLT_TX_STOP(0x%x) \n", __FUNCTION__, pParamInfo->paramType));
  817. return (TI_STATUS)whal_hwCmdBit_perTxStop(pWhalCtrl->pHwCtrl->pHwMboxCmdBit,
  818. NULL, NULL, NULL);
  819. /*break;*/
  820. case HAL_CTRL_PLT_WRITE_REGISTER:
  821. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, ("%s - HAL_CTRL_PLT_WRITE_REGISTER(0x%x) \n", __FUNCTION__, pParamInfo->paramType));
  822. return (TI_STATUS)whalCtrl_WriteRegister(pWhalCtrl, pParamInfo->content.interogateCmdCBParams.CB_handle, pParamInfo->content.interogateCmdCBParams.CB_Func, pParamInfo->content.interogateCmdCBParams.CB_buf);
  823. /* break; */
  824. default:
  825. WLAN_REPORT_ERROR(pWhalCtrl->hReport,
  826. HAL_CTRL_MODULE_LOG,
  827. ("%s(%d) - whalCtrl_SetParam - ERROR - Param is not supported, %d\n\n",
  828. __FILE__,__LINE__,pParamInfo->paramType));
  829. return (PARAM_NOT_SUPPORTED);
  830. }
  831. return (OK);
  832. }
  833. /*
  834. * ----------------------------------------------------------------------------
  835. * Function : whalCtrl_GetParam
  836. *
  837. * Input :
  838. * Output :
  839. * Process :
  840. * Note(s) : Done
  841. * -----------------------------------------------------------------------------
  842. */
  843. TI_STATUS whalCtrl_GetParam (TI_HANDLE hWhalCtrl, whalParamInfo_t* pParamInfo)
  844. {
  845. WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
  846. WlanParams_T *pWlanParams = &pWhalCtrl->pWhalParams->WlanParams;
  847. HwMboxConfig_T *pInfoElemConfig = whal_hwCtrl_GetMboxConfig(pWhalCtrl->pHwCtrl);
  848. TxParam_t *pTxParams = whal_ParamsGetTxParams(pWhalCtrl->pWhalParams);
  849. switch ((externalParam_e)pParamInfo->paramType)
  850. {
  851. case HAL_CTRL_RTS_THRESHOLD_PARAM:
  852. pParamInfo->content.halCtrlRtsThreshold = pWlanParams->RtsThreshold;
  853. break;
  854. case HAL_CTRL_FRAG_THRESHOLD_PARAM:
  855. pParamInfo->content.halCtrlFragThreshold = pWlanParams->FragmentThreshold;
  856. break;
  857. case HAL_CTRL_COUNTERS_PARAM:
  858. /* Constant zero because the ACX last buffer next pointer is always pointed
  859. to itself, so it's like an endless buffer*/
  860. pParamInfo->content.halCtrlCounters.RecvNoBuffer = 0;
  861. pParamInfo->content.halCtrlCounters.FragmentsRecv = 0; /* not supported;*/
  862. pParamInfo->content.halCtrlCounters.FrameDuplicates = 0;/* not supported*/
  863. pParamInfo->content.halCtrlCounters.FcsErrors = pWhalCtrl->pWhalParams->GenCounters.FcsErrCnt;
  864. pParamInfo->content.halCtrlCounters.RecvError = pWhalCtrl->pWhalParams->GenCounters.FcsErrCnt;
  865. break;
  866. case HAL_CTRL_LISTEN_INTERVAL_PARAM:
  867. pParamInfo->content.halCtrlListenInterval = pWlanParams->ListenInterval;
  868. break;
  869. case HAL_CTRL_RSN_DEFAULT_KEY_ID_PARAM:
  870. /* Not implemented */
  871. return NOK;
  872. /* break; */
  873. case HAL_CTRL_TX_POWER_PARAM:
  874. pParamInfo->content.halCtrlTxPowerDbm = pTxParams->TxPowerDbm;
  875. break;
  876. case HAL_CTRL_ACX_STATISTICS_PARAM:
  877. /* Not implemented */
  878. #if 0
  879. {
  880. acxStatisitcs_t acxStatisitics;
  881. pParamInfo->content.acxStatisitics.FWpacketReceived = acxStatisitics.FWpacketReceived;
  882. /* Not supported */
  883. pParamInfo->content.acxStatisitics.HALpacketReceived = 0;
  884. }
  885. #endif
  886. return NOK;
  887. case HAL_CTRL_MEDIUM_OCCUPANCY_PARAM:
  888. if (whal_hwInfoElemMediumOccupancyGet (pInfoElemConfig,
  889. pParamInfo->content.interogateCmdCBParams) != OK)
  890. return (NOK);
  891. break;
  892. case HAL_CTRL_TSF_DTIM_MIB:
  893. if (whal_hwInfoElemTfsDtimGet(pInfoElemConfig,
  894. pParamInfo->content.interogateCmdCBParams) != OK)
  895. return (NOK);
  896. break;
  897. case HAL_CTRL_AID_PARAM:
  898. if (whal_hwCtrl_CurrentAssociationIdGet(pWhalCtrl->pHwCtrl,
  899. &(pParamInfo->content.halCtrlAid)) != OK)
  900. return (NOK);
  901. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
  902. (" AID 2 %d\n", pParamInfo->content.halCtrlAid));
  903. break;
  904. case HAL_CTRL_NOISE_HISTOGRAM_PARAM:
  905. if (whal_hwInfoElemNoiseHistogramResultsGet (pInfoElemConfig,
  906. pParamInfo->content.interogateCmdCBParams) != OK)
  907. {
  908. return (NOK);
  909. }
  910. break;
  911. case HAL_CTRL_TX_ANTENNA_PARAM:
  912. /* get antenna number */
  913. whal_hwCtrl_GetTxAntenna( pWhalCtrl->pHwCtrl, &(pParamInfo->content.antennaNum) );
  914. break;
  915. case HAL_CTRL_RX_ANTENNA_PARAM:
  916. /* get antenna number */
  917. whal_hwCtrl_GetRxAntenna( pWhalCtrl->pHwCtrl, &(pParamInfo->content.antennaNum) );
  918. break;
  919. case HAL_CTRL_CURRENT_CHANNEL:
  920. /* get current channel number */
  921. pParamInfo->content.halCtrlCurrentChannel = whal_ParamsGetRadioChannel( pWhalCtrl->pWhalParams );
  922. case HAL_CTRL_MIN_POWER_LEVEL:
  923. whalCtrl_GetMinPowerLevel(pWhalCtrl, &pParamInfo->content.minPowerPolicy);
  924. break;
  925. /*SNR and RSSI belongs to the same MIB, and the relevant CB is passed here*/
  926. case HAL_CTRL_RSSI_LEVEL_PARAM:
  927. case HAL_CTRL_SNR_RATIO_PARAM:
  928. /* Retrive the Callback function and read buffer pointer that are in fact stored in the TIWLAN_ADAPTER and then send it to the Command Mailbox */
  929. whalCtrl_GetAsynRSSI (pWhalCtrl,pParamInfo->content.interogateCmdCBParams.CB_Func, pParamInfo->content.interogateCmdCBParams.CB_handle , pParamInfo->content.interogateCmdCBParams.CB_buf);
  930. break;
  931. case HAL_CTRL_BCN_BRC_OPTIONS:
  932. pParamInfo->content.BcnBrcOptions.BeaconRxTimeout = pWlanParams->BcnBrcOptions.BeaconRxTimeout;
  933. pParamInfo->content.BcnBrcOptions.BroadcastRxTimeout = pWlanParams->BcnBrcOptions.BroadcastRxTimeout;
  934. pParamInfo->content.BcnBrcOptions.RxBroadcastInPs = pWlanParams->BcnBrcOptions.RxBroadcastInPs;
  935. break;
  936. case HAL_CTRL_DOT11_MAX_RX_MSDU_LIFE_TIME:
  937. pParamInfo->content.halCtrlMaxRxMsduLifetime = pWlanParams->MaxRxMsduLifetime;
  938. break;
  939. /* PLT params */
  940. case HAL_CTRL_PLT_RX_PER_GET_RESULTS:
  941. return (TI_STATUS)whalCtrl_RxPER(pWhalCtrl, PLT_RX_PER_GETRESULTS,
  942. pParamInfo->content.interogateCmdCBParams.CB_handle,
  943. pParamInfo->content.interogateCmdCBParams.CB_Func);
  944. /* break; */
  945. case HAL_CTRL_PLT_READ_MIB:
  946. return (TI_STATUS)whalCtrl_ReadMib(pWhalCtrl,
  947. pParamInfo->content.interogateCmdCBParams.CB_handle,
  948. pParamInfo->content.interogateCmdCBParams.CB_Func,
  949. pParamInfo->content.interogateCmdCBParams.CB_buf);
  950. /* break; */
  951. case HAL_CTRL_PLT_READ_REGISTER:
  952. whalCtrl_ReadRegister(pWhalCtrl, pParamInfo->content.interogateCmdCBParams.CB_handle,
  953. pParamInfo->content.interogateCmdCBParams.CB_Func,
  954. pParamInfo->content.interogateCmdCBParams.CB_buf);
  955. break;
  956. case HAL_CTRL_PLT_RX_TX_CAL:
  957. WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG, ("%s - HAL_CTRL_PLT_RX_TX_CAL(0x%x) \n", __FUNCTION__, pParamInfo->paramType));
  958. return (TI_STATUS)whal_hwCmdBit_TestCmd(pWhalCtrl->pHwCtrl->pHwMboxCmdBit,
  959. pParamInfo->content.interogateCmdCBParams.CB_Func,
  960. pParamInfo->content.interogateCmdCBParams.CB_handle,
  961. (TestCmd_t*)pParamInfo->content.interogateCmdCBParams.CB_buf);
  962. /*break*/
  963. case HAL_CTRL_PLT_RX_CAL_STATUS:
  964. whal_hwCmdBit_GetPltRxCalibrationStatus( pWhalCtrl->pHwCtrl->pHwMboxCmdBit,
  965. &(pParamInfo->content.PltRxCalibrationStatus) );
  966. return OK;
  967. /* break */
  968. case HAL_CTRL_CTS_TO_SELF_PARAM:
  969. pParamInfo->content.halCtrlCtsToSelf = pWlanParams->CtsToSelf;
  970. break;
  971. case HAL_CTRL_TX_RATE_CLASS_PARAMS:
  972. pParamInfo->content.pTxRatePlicy

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