PageRenderTime 54ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 1ms

/drivers/net/wireless/tiwlan1251/common/src/hal/hw_ctrl/whalHwMboxCmd.c

http://github.com/CyanogenMod/cm-kernel
C | 947 lines | 323 code | 123 blank | 501 comment | 23 complexity | 3674cf215add76e305775571fed9beae MD5 | raw file
Possible License(s): AGPL-1.0, GPL-2.0, LGPL-2.0
  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: whalHwMboxCmd.c
  38. * PURPOSE: wlan hardware commands handler
  39. *
  40. ****************************************************************************/
  41. #include "whalCommon.h"
  42. #include "whalHwMboxCmd.h"
  43. #include "whalBus_Api.h"
  44. #include "CmdQueue_api.h"
  45. /* Local Macros */
  46. #define MAC_TO_VENDOR_PREAMBLE(mac) ((mac[0] << 16) | (mac[1] << 8) | mac[2])
  47. /****************************************************************************
  48. * whal_hwMboxCmd_Create()
  49. ****************************************************************************
  50. * DESCRIPTION: Create the mailbox commands object
  51. *
  52. * INPUTS:
  53. *
  54. * OUTPUT: None
  55. *
  56. * RETURNS: The Created object
  57. ****************************************************************************/
  58. HwMboxCmd_T *whal_hwMboxCmd_Create(TI_HANDLE hOs, WhalParams_T *pWhalParams)
  59. {
  60. HwMboxCmd_T *pObj;
  61. pObj = os_memoryAlloc(hOs, sizeof(HwMboxCmd_T));
  62. if (pObj == NULL)
  63. return NULL;
  64. os_memoryZero(hOs, (void *)pObj, sizeof(HwMboxCmd_T));
  65. pObj->hOs = hOs;
  66. pObj->pWhalParams = pWhalParams;
  67. return(pObj);
  68. }
  69. /****************************************************************************
  70. * whal_hwMboxCmd_Destroy()
  71. ****************************************************************************
  72. * DESCRIPTION: Destroy the object
  73. *
  74. * INPUTS:
  75. * pHwMboxCmd The object to free
  76. *
  77. * OUTPUT: None
  78. *
  79. * RETURNS: OK or NOK
  80. ****************************************************************************/
  81. int whal_hwMboxCmd_Destroy(HwMboxCmd_T *pHwMboxCmd)
  82. {
  83. if (pHwMboxCmd)
  84. os_memoryFree(pHwMboxCmd->hOs, pHwMboxCmd, sizeof(HwMboxCmd_T));
  85. return OK;
  86. }
  87. /****************************************************************************
  88. * whal_hwMboxCmd_Config()
  89. ****************************************************************************
  90. * DESCRIPTION: Configure the object
  91. *
  92. * INPUTS:
  93. *
  94. * OUTPUT: None
  95. *
  96. * RETURNS: OK or NOK
  97. ****************************************************************************/
  98. int whal_hwMboxCmd_Config(HwMboxCmd_T *pHwMboxCmd, TI_HANDLE hCmdMboxQueue, TI_HANDLE hReport)
  99. {
  100. pHwMboxCmd->hReport = hReport;
  101. pHwMboxCmd->hCmdMboxQueue = hCmdMboxQueue;
  102. return OK;
  103. }
  104. /****************************************************************************
  105. * whal_hwMboxCmd_StartBss()
  106. ****************************************************************************
  107. * DESCRIPTION: Construct the StartBss command fileds and send it to the mailbox
  108. *
  109. * INPUTS: None
  110. *
  111. * OUTPUT: None
  112. *
  113. * RETURNS: OK or NOK
  114. ****************************************************************************/
  115. int whal_hwMboxCmd_StartBss(HwMboxCmd_T *pHwMboxCmd, BSS_e BssType, void *JoinCompleteCB, TI_HANDLE CB_handle)
  116. {
  117. StartJoinRequest_t AcxCmd_StartBss;
  118. StartJoinRequest_t *pCmd = &AcxCmd_StartBss;
  119. dot11_SSID_t *pWlanElm_Ssid = whal_ParamsGetElm_Ssid(pHwMboxCmd->pWhalParams);
  120. BssInfoParams_T *pBssInfoParams = whal_ParamsGetBssInfoParams(pHwMboxCmd->pWhalParams);
  121. UINT8 *BssId;
  122. UINT8 *cmdBssId;
  123. UINT16 HwBasicRatesBitmap;
  124. UINT16 HwSupportedRatesBitmap;
  125. int i;
  126. os_memoryZero(pHwMboxCmd->hOs, (void *)pCmd, sizeof(StartJoinRequest_t));
  127. /*
  128. * Set RxCfg and RxFilterCfg values
  129. */
  130. pCmd->rxFilter.ConfigOptions = ENDIAN_HANDLE_LONG( pHwMboxCmd->pWhalParams->WlanParams.RxConfigOption );
  131. pCmd->rxFilter.FilterOptions = ENDIAN_HANDLE_LONG( pHwMboxCmd->pWhalParams->WlanParams.RxFilterOption );
  132. pCmd->beaconInterval = ENDIAN_HANDLE_WORD(whal_ParamsGetBeaconInterval(pHwMboxCmd->pWhalParams));
  133. pCmd->dtimInterval = whal_ParamsGetDtimCount(pHwMboxCmd->pWhalParams);
  134. pCmd->channelNumber = whal_ParamsGetRadioChannel(pHwMboxCmd->pWhalParams);
  135. pCmd->bssType = BssType;
  136. /* Add radio band */
  137. pCmd->bssType |= whal_ParamsGetRadioBand (pHwMboxCmd->pWhalParams) << 4;
  138. pCmd->ctrl = pBssInfoParams->Ctrl; /* Only bit 7 is currently in use in the Ctrl field, bit 7 indicates if to flash the Tx queues */
  139. /*
  140. * BasicRateSet
  141. * The wlan hardware uses pHwMboxCmd field to determine the rate at which to transmit
  142. * control frame responses (such as ACK or CTS frames)
  143. */
  144. whalUtils_ConvertAppRatesBitmap(pBssInfoParams->BasicRateSet, 0, &HwBasicRatesBitmap);
  145. /*
  146. * SupportedRateSet
  147. * The wlan hardware uses pHwMboxCmd information to determine which rates are allowed
  148. * when rate fallback is enabled
  149. */
  150. whalUtils_ConvertAppRatesBitmap(pBssInfoParams->SupportedRateSet, 0, &HwSupportedRatesBitmap);
  151. pCmd->basicRateSet = ENDIAN_HANDLE_WORD(HwBasicRatesBitmap);
  152. /*
  153. * ACX100_Frm_Rate
  154. * pHwMboxCmd field indicates the rate at which the wlan hardware transmits
  155. * Beacon, Probe Response, RTS, and PS-Poll frames
  156. */
  157. pCmd->txCtrlFrmRate = pBssInfoParams->txCtrlFrmRate;
  158. WLAN_REPORT_INFORMATION(pHwMboxCmd->hReport, HAL_HW_CTRL_MODULE_LOG,
  159. ("txCtrlFrmRate = 0x%x\n", pCmd->txCtrlFrmRate));
  160. /*
  161. * PreambleOpt
  162. * indicates the PLCP preamble type to use when transmitting
  163. * Beacon, Probe Response, RTS, and PS-Poll frames.
  164. */
  165. pCmd->txCtrlFrmMod = pBssInfoParams->txCtrlFrmModulation;
  166. /* BSS ID - reversed order (see wlan hardware spec) */
  167. BssId = whal_ParamsGetBssId(pHwMboxCmd->pWhalParams);
  168. cmdBssId = (UINT8*)&pCmd->bssIdL;
  169. for (i=0; i<MAC_ADDR_SIZE; i++)
  170. cmdBssId[i] = BssId[MAC_ADDR_SIZE-1-i];
  171. /* SSID string */
  172. pCmd->ssidLength = pWlanElm_Ssid->hdr.eleLen;
  173. os_memoryCopy(pHwMboxCmd->hOs, (void *)(pCmd->ssidStr),(void *)pWlanElm_Ssid->serviceSetId, pWlanElm_Ssid->hdr.eleLen);
  174. /* Set the Frame Rate and The Frame Mode */
  175. pCmd->txMgmtFrmRate = pBssInfoParams->txMgmtFrmRate;
  176. pCmd->txMgmtFrmMod = pBssInfoParams->txMgmtFrmModulation;
  177. /* Send the command */
  178. if(JoinCompleteCB == NULL)
  179. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_START_JOIN, (char *)pCmd, sizeof(*pCmd)));
  180. else
  181. return (CmdQueue_CommandWithCb(pHwMboxCmd->hCmdMboxQueue, CMD_START_JOIN, (char *)pCmd, sizeof(*pCmd), (void *)JoinCompleteCB, CB_handle, NULL));
  182. }
  183. /****************************************************************************
  184. * whal_hwMboxCmd_LNAControl()
  185. ****************************************************************************
  186. * DESCRIPTION: Construct the LNA control command fileds and send it to the mailbox
  187. *
  188. * INPUTS: None
  189. *
  190. * OUTPUT: None
  191. *
  192. * RETURNS: OK or NOK
  193. ****************************************************************************/
  194. int whal_hwMboxCmd_LNAControl(HwMboxCmd_T *pHwMboxCmd, UINT8 LNAControlField)
  195. {
  196. LNAControl_t AcxCmd_LNAControl;
  197. LNAControl_t *pCmd = &AcxCmd_LNAControl;
  198. pCmd->LNAControlField = LNAControlField;
  199. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_LNA_CONTROL , (char *)pCmd, sizeof(*pCmd)));
  200. }
  201. /****************************************************************************
  202. * whal_hwMboxCmd_Reset()
  203. ****************************************************************************
  204. * DESCRIPTION: Reset the Rx wlan hardware
  205. *
  206. * INPUTS: None
  207. *
  208. * OUTPUT: None
  209. *
  210. * RETURNS: OK or NOK
  211. ****************************************************************************/
  212. int whal_hwMboxCmd_RxReset(HwMboxCmd_T *pHwMboxCmd)
  213. {
  214. /*
  215. * no parameters
  216. */
  217. /*
  218. * Send the command
  219. */
  220. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_RX_RESET, NULL, 0));
  221. }
  222. /****************************************************************************
  223. * whal_hwMboxCmd_Reset()
  224. ****************************************************************************
  225. * DESCRIPTION: Reset the wlan hardware
  226. *
  227. * INPUTS: None
  228. *
  229. * OUTPUT: None
  230. *
  231. * RETURNS: OK or NOK
  232. ****************************************************************************/
  233. int whal_hwMboxCmd_Reset(HwMboxCmd_T *pHwMboxCmd)
  234. {
  235. /*
  236. * no parameters
  237. */
  238. /*
  239. * Send the command
  240. */
  241. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_RESET, NULL, 0));
  242. }
  243. /****************************************************************************
  244. * whal_hwMboxCmd_EnableRx()
  245. ****************************************************************************
  246. * DESCRIPTION: Construct the EnableRx command fileds and send it to the mailbox
  247. *
  248. * INPUTS: None
  249. *
  250. * OUTPUT: None
  251. *
  252. * RETURNS: OK or NOK
  253. ****************************************************************************/
  254. int whal_hwMboxCmd_EnableRx(HwMboxCmd_T *pHwMboxCmd)
  255. {
  256. UINT8 ChannelNumber;
  257. ChannelNumber = whal_ParamsGetDefaultChannel(pHwMboxCmd->pWhalParams);
  258. /*
  259. * Send the command
  260. */
  261. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_ENABLE_RX, (char *)&ChannelNumber, sizeof(UINT8)));
  262. }
  263. /****************************************************************************
  264. * whal_hwMboxCmd_EnableTx()
  265. ****************************************************************************
  266. * DESCRIPTION: Construct the EnableTx command fileds and send it to the mailbox
  267. * Note: This Enable_TX command is used also for changing the serving
  268. * channel.
  269. *
  270. * INPUTS: None
  271. *
  272. * OUTPUT: None
  273. *
  274. * RETURNS: OK or NOK
  275. ****************************************************************************/
  276. int whal_hwMboxCmd_EnableTx(HwMboxCmd_T *pHwMboxCmd ,UINT8 defaultChannel)
  277. {
  278. UINT8 ChannelNumber;
  279. ChannelNumber = defaultChannel;
  280. /*
  281. * Send the command
  282. */
  283. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_ENABLE_TX, (char *)&ChannelNumber, sizeof(UINT8)));
  284. }
  285. /****************************************************************************
  286. * whal_hwMboxCmd_DisableRx()
  287. ****************************************************************************
  288. * DESCRIPTION: Construct the DisableRx command fileds and send it to the mailbox
  289. *
  290. * INPUTS: None
  291. *
  292. * OUTPUT: None
  293. *
  294. * RETURNS: OK or NOK
  295. ****************************************************************************/
  296. int whal_hwMboxCmd_DisableRx(HwMboxCmd_T *pHwMboxCmd)
  297. {
  298. /*
  299. * no parameters
  300. */
  301. /*
  302. * Send the command
  303. */
  304. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_DISABLE_RX, NULL, 0));
  305. }
  306. /****************************************************************************
  307. * whal_hwMboxCmd_DisableTx()
  308. ****************************************************************************
  309. * DESCRIPTION: Construct the DisableTx command fileds and send it to the mailbox
  310. *
  311. * INPUTS: None
  312. *
  313. * OUTPUT: None
  314. *
  315. * RETURNS: OK or NOK
  316. ****************************************************************************/
  317. int whal_hwMboxCmd_DisableTx(HwMboxCmd_T *pHwMboxCmd)
  318. {
  319. /*
  320. * no parameters
  321. */
  322. /*
  323. * Send the command
  324. */
  325. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_DISABLE_TX, NULL, 0));
  326. }
  327. /****************************************************************************
  328. * whal_hwMboxCmd_ConfigureTemplateFrame()
  329. ****************************************************************************
  330. * DESCRIPTION: Generic function which sets the Fw with a template frame according
  331. * to the given template type.
  332. *
  333. * INPUTS: templateType - CMD_BEACON, CMD_PROBE_REQ, CMD_PROBE_RESP etc.
  334. *
  335. * OUTPUT: None
  336. *
  337. * RETURNS: OK or NOK
  338. ****************************************************************************/
  339. int whal_hwMboxCmd_ConfigureTemplateFrame(HwMboxCmd_T *pHwMboxCmd, UINT8 *pFrame, UINT16 FrameSize,
  340. Command_e templateType, void *CBFunc,TI_HANDLE CBObj)
  341. {
  342. PktTemplate_t AcxCmd_PktTemplate;
  343. PktTemplate_t *pCmd = &AcxCmd_PktTemplate;
  344. /* if the frame size is too big - we truncate the frame template */
  345. if (FrameSize > MAX_TEMPLATES_SIZE)
  346. {
  347. WLAN_REPORT_ERROR(pHwMboxCmd->hReport, HAL_HW_CTRL_MODULE_LOG,
  348. ("%s: Frame size (=%d) is bigger than MAX_TEMPLATES_SIZE(=%d) !!!\n",
  349. __FUNCTION__,FrameSize,MAX_TEMPLATES_SIZE));
  350. FrameSize = MAX_TEMPLATES_SIZE;
  351. }
  352. /* if pFrame is NULL than it means that we just want to reserve place in Fw, and there is no need to copy */
  353. if (pFrame != NULL)
  354. {
  355. /* Set configuration fields */
  356. os_memoryCopy(pHwMboxCmd->hOs, (void *)&pCmd->templateStart, (void *)pFrame, FrameSize);
  357. }
  358. pCmd->len = ENDIAN_HANDLE_WORD(FrameSize);
  359. if (NULL == CBFunc)
  360. {
  361. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, templateType, (char *)pCmd, FrameSize + sizeof(pCmd->len)));
  362. }
  363. else
  364. {
  365. return (CmdQueue_CommandWithCb(pHwMboxCmd->hCmdMboxQueue, templateType, (char *)pCmd, FrameSize + sizeof(pCmd->len),
  366. CBFunc,CBObj,NULL));
  367. }
  368. }
  369. /****************************************************************************
  370. * whal_hwMboxCmd_TimTemplate()
  371. ****************************************************************************
  372. * DESCRIPTION: Build the tim template fileds and send it to the mailbox
  373. *
  374. * INPUTS: None
  375. *
  376. * OUTPUT: None
  377. *
  378. * RETURNS: OK or NOK
  379. ****************************************************************************/
  380. int whal_hwMboxCmd_TimTemplate(HwMboxCmd_T *pHwMboxCmd, char BmapControl, char *PartialBmapVec, int PartialBmapLen)
  381. {
  382. VBMUpdateRequest_t AcxCmd_ConfTim;
  383. VBMUpdateRequest_t *pCmd = &AcxCmd_ConfTim;
  384. /*
  385. * Set command fields
  386. */
  387. os_memoryZero(pHwMboxCmd->hOs, (void *)pCmd, sizeof(*pCmd));
  388. /*
  389. * Copy the fields and set sizes
  390. */
  391. pCmd->tim.BitMap_ctrl = BmapControl;
  392. /* dtimCount and dtimPeriod will be filled by the wlan hardware */
  393. os_memoryCopy(pHwMboxCmd->hOs, (void *)pCmd->tim.PVB_field, (void *)PartialBmapVec, PartialBmapLen);
  394. pCmd->tim.identity = DOT11_TIM_ELE_ID;
  395. pCmd->tim.length = 3+PartialBmapLen;
  396. pCmd->len = ENDIAN_HANDLE_WORD(5+PartialBmapLen);
  397. /*
  398. * Send the command
  399. */
  400. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_VBM, (char *)pCmd, sizeof(*pCmd)));
  401. }
  402. /****************************************************************************
  403. * whal_hwMboxCmd_SetKey()
  404. ****************************************************************************
  405. * DESCRIPTION: Construct the SetKey command fileds and send it to the mailbox
  406. *
  407. * INPUTS:
  408. * Action - add/remove key
  409. * MacAddr - relevant only for mapping keys
  410. * KeySize - key size
  411. * KeyType - default/mapping/TKIP
  412. * KeyId - relevant only for default keys
  413. * Key - key data
  414. *
  415. * OUTPUT: None
  416. *
  417. * RETURNS: OK or NOK
  418. ****************************************************************************/
  419. int whal_hwMboxCmd_SetKey(HwMboxCmd_T *pHwMboxCmd, int Action, char *MacAddr, int KeySize,
  420. int KeyType, int KeyId, char *Key, UINT16 SecuritySeqNumLow, UINT32 SecuritySeqNumHigh,
  421. void *CB_Func, TI_HANDLE CB_handle)
  422. {
  423. SetKey_t AcxCmd_SetKey;
  424. SetKey_t *pCmd = &AcxCmd_SetKey;
  425. /*
  426. * Set command fields
  427. */
  428. os_memoryZero(pHwMboxCmd->hOs, (void *)pCmd, sizeof(*pCmd));
  429. /*
  430. * Command fields
  431. */
  432. os_memoryCopy(pHwMboxCmd->hOs, (void *)pCmd->addr, (void *)MacAddr, MAC_ADDR_SIZE);
  433. if (KeySize > MAX_KEY_SIZE)
  434. {
  435. os_memoryCopy(pHwMboxCmd->hOs, (void *)pCmd->key, (void *)Key, MAX_KEY_SIZE);
  436. } else {
  437. os_memoryCopy(pHwMboxCmd->hOs, (void *)pCmd->key, (void *)Key, KeySize);
  438. }
  439. pCmd->action = (UINT8)Action;
  440. pCmd->keySize = (UINT8)KeySize;
  441. pCmd->type = (UINT8)KeyType;
  442. pCmd->id = (UINT8)KeyId;
  443. pCmd->ssidProfile = 0;
  444. /*
  445. * Preserve TKIP/AES security sequence number after recovery.
  446. * Note that our STA Tx is currently using only one sequence-counter
  447. * for all ACs (unlike the Rx which is separated per AC).
  448. */
  449. pCmd->AcSeqNum16[0] = SecuritySeqNumLow;
  450. pCmd->AcSeqNum16[1] = 0;
  451. pCmd->AcSeqNum16[2] = 0;
  452. pCmd->AcSeqNum16[3] = 0;
  453. pCmd->AcSeqNum32[0] = SecuritySeqNumHigh;
  454. pCmd->AcSeqNum32[1] = 0;
  455. pCmd->AcSeqNum32[2] = 0;
  456. pCmd->AcSeqNum32[3] = 0;
  457. WLAN_REPORT_WARNING(pHwMboxCmd->hReport, HAL_HW_CTRL_MODULE_LOG,
  458. ("*********************** \n"));
  459. WLAN_REPORT_WARNING(pHwMboxCmd->hReport, HAL_HW_CTRL_MODULE_LOG,
  460. ("whal_hwMboxCmd_SetKey \n"));
  461. WLAN_REPORT_WARNING(pHwMboxCmd->hReport, HAL_HW_CTRL_MODULE_LOG,
  462. ("*********************** \n"));
  463. WLAN_REPORT_WARNING(pHwMboxCmd->hReport, HAL_HW_CTRL_MODULE_LOG,
  464. ("addr = %x:%x:%x:%x:%x:%x \n",
  465. pCmd->addr[0], pCmd->addr[1], pCmd->addr[2], pCmd->addr[3], pCmd->addr[4], pCmd->addr[5] ));
  466. WLAN_REPORT_WARNING(pHwMboxCmd->hReport, HAL_HW_CTRL_MODULE_LOG,
  467. (" key= %x\n, action= %d\n keySize= %d\n type= %d\n id= %d\n AcSeqNum16[0]= %d\n AcSeqNum32[0]= %d\n",
  468. pCmd->key,pCmd->action,pCmd->keySize,pCmd->type, pCmd->id, pCmd->AcSeqNum16[0], pCmd->AcSeqNum32[0] ));
  469. WLAN_REPORT_WARNING(pHwMboxCmd->hReport, HAL_HW_CTRL_MODULE_LOG,
  470. ("*********************** \n"));
  471. /*
  472. * Send the command
  473. */
  474. if((CB_Func == NULL) || (CB_handle == NULL))
  475. {
  476. WLAN_REPORT_WARNING(pHwMboxCmd->hReport, HAL_HW_CTRL_MODULE_LOG,
  477. ("*** whal_hwMboxCmd_SetKey:Calling CmdQueue_Command *** \n"));
  478. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_SET_KEYS, (char *)pCmd, sizeof(*pCmd)));
  479. }
  480. else
  481. {
  482. WLAN_REPORT_WARNING(pHwMboxCmd->hReport, HAL_HW_CTRL_MODULE_LOG,
  483. ("!!! whal_hwMboxCmd_SetKey:CmdQueue_CommandwithCB !!! \n"));
  484. return (CmdQueue_CommandWithCb(pHwMboxCmd->hCmdMboxQueue, CMD_SET_KEYS, (char *)pCmd, sizeof(*pCmd), CB_Func, CB_handle, NULL));
  485. }
  486. }
  487. /****************************************************************************
  488. * whal_hwMboxCmd_Test()
  489. ****************************************************************************
  490. * DESCRIPTION: Test NO WAIT (use EnableRx command)
  491. *
  492. * INPUTS: None
  493. *
  494. * OUTPUT: None
  495. *
  496. * RETURNS: OK or NOK
  497. ****************************************************************************/
  498. int whal_hwMboxCmd_Test(HwMboxCmd_T *pHwMboxCmd)
  499. {
  500. UINT8 ChannelNumber = whal_ParamsGetRadioChannel(pHwMboxCmd->pWhalParams);
  501. /*
  502. * Send the command
  503. */
  504. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_ENABLE_RX, (char *)&ChannelNumber, sizeof(UINT8)));
  505. }
  506. /****************************************************************************
  507. * whal_hwMboxCmd_StartScan ()
  508. ****************************************************************************
  509. * DESCRIPTION: Send SCAN Command
  510. *
  511. * INPUTS: None
  512. *
  513. * OUTPUT: None
  514. *
  515. * RETURNS: OK or NOK
  516. ****************************************************************************/
  517. int whal_hwMboxCmd_StartScan (HwMboxCmd_T *pHwMboxCmd, ScanParameters_t* pScanParams ,void* ScanCommandResponseCB, TI_HANDLE CB_handle)
  518. {
  519. return CmdQueue_CommandWithCb(pHwMboxCmd->hCmdMboxQueue,CMD_SCAN, (char *)pScanParams, sizeof(ScanParameters_t),
  520. (void *)ScanCommandResponseCB, CB_handle, NULL /* void* CB_Buf */);
  521. }
  522. /****************************************************************************
  523. * whal_hwMboxCmd_StartSPSScan ()
  524. ****************************************************************************
  525. * DESCRIPTION: Send SPS SCAN Command
  526. *
  527. * INPUTS: None
  528. *
  529. * OUTPUT: None
  530. *
  531. * RETURNS: OK or NOK
  532. ****************************************************************************/
  533. int whal_hwMboxCmd_StartSPSScan (HwMboxCmd_T *pHwMboxCmd, ScheduledScanParameters_t* pScanParams, void* ScanCommandResponseCB, TI_HANDLE CB_handle)
  534. {
  535. return (CmdQueue_CommandWithCb(pHwMboxCmd->hCmdMboxQueue, CMD_SPS_SCAN, (char *)pScanParams, sizeof(ScheduledScanParameters_t),
  536. (void *)ScanCommandResponseCB, CB_handle, NULL ));
  537. }
  538. /****************************************************************************
  539. * whal_hwMboxCmd_StopScan ()
  540. ****************************************************************************
  541. * DESCRIPTION: Construct the STOP_SCAN command fields and send it to the
  542. * mailbox
  543. *
  544. * INPUTS: None
  545. *
  546. * OUTPUT: None
  547. *
  548. * RETURNS: OK or NOK
  549. ****************************************************************************/
  550. int whal_hwMboxCmd_StopScan (HwMboxCmd_T *pHwMboxCmd, void *ScanCommandResponseCB, TI_HANDLE CB_handle)
  551. {
  552. WLAN_REPORT_INFORMATION(pHwMboxCmd->hReport, HAL_HW_CTRL_MODULE_LOG,
  553. ("whal_hwMboxCmd_StopScan: -------------- \n"));
  554. if (NULL != ScanCommandResponseCB)
  555. return (CmdQueue_CommandWithCb(pHwMboxCmd->hCmdMboxQueue, CMD_STOP_SCAN, 0, 0, (void *)ScanCommandResponseCB,CB_handle,NULL));
  556. else
  557. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_STOP_SCAN, 0, 0));
  558. }
  559. /****************************************************************************
  560. * whal_hwMboxCmd_StopSPSScan ()
  561. ****************************************************************************
  562. * DESCRIPTION: Construct the STOP_SPS_SCAN command fields and send it to the
  563. * mailbox
  564. *
  565. * INPUTS: None
  566. *
  567. * OUTPUT: None
  568. *
  569. * RETURNS: OK or NOK
  570. ****************************************************************************/
  571. int whal_hwMboxCmd_StopSPSScan (HwMboxCmd_T *pHwMboxCmd, void* ScanCommandResponseCB, TI_HANDLE CB_handle)
  572. {
  573. WLAN_REPORT_INFORMATION(pHwMboxCmd->hReport, HAL_HW_CTRL_MODULE_LOG,
  574. ("whal_hwMboxCmd_StopSPSScan: -------------- \n"));
  575. if (NULL != ScanCommandResponseCB)
  576. return (CmdQueue_CommandWithCb(pHwMboxCmd->hCmdMboxQueue, CMD_STOP_SPS_SCAN, 0, 0, (void *)ScanCommandResponseCB, CB_handle, NULL ));
  577. else
  578. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_STOP_SPS_SCAN, 0, 0));
  579. }
  580. /****************************************************************************
  581. * whal_hwMboxCmd_GenCmd ()
  582. ****************************************************************************
  583. * DESCRIPTION: Send any command
  584. * INPUTS: None
  585. *
  586. * OUTPUT: None
  587. *
  588. * RETURNS: OK or NOK
  589. ****************************************************************************/
  590. int whal_hwMboxCmd_GenCmd(HwMboxCmd_T *pHwMboxCmd,short CmdId, char* pBuf, UINT32 Length)
  591. {
  592. WLAN_REPORT_INFORMATION(pHwMboxCmd->hReport, HAL_HW_CTRL_MODULE_LOG,
  593. ("whal_hwMboxCmd_GenCmd: -------------- \n"));
  594. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CmdId, pBuf, Length));
  595. }
  596. /****************************************************************************
  597. * whal_hwMboxCmd_NoiseHistogramCmd ()
  598. ****************************************************************************
  599. * DESCRIPTION: Send NOISE_HISTOGRAM Command
  600. *
  601. * INPUTS: None
  602. *
  603. * OUTPUT: None
  604. *
  605. * RETURNS: OK or NOK
  606. ****************************************************************************/
  607. int whal_hwMboxCmd_NoiseHistogramCmd (HwMboxCmd_T *pHwMboxCmd, whalCtrl_noiseHistogram_t* pNoiseHistParams)
  608. {
  609. NoiseHistRequest_t AcxCmd_NoiseHistogram;
  610. NoiseHistRequest_t *pCmd = &AcxCmd_NoiseHistogram;
  611. os_memoryZero(pHwMboxCmd->hOs, (void *)pCmd, sizeof(*pCmd));
  612. pCmd->mode = (uint16)pNoiseHistParams->cmd;
  613. pCmd->sampleIntervalUSec = pNoiseHistParams->sampleInterval;
  614. os_memoryCopy(pHwMboxCmd->hOs, (void *)&(pCmd->thresholds[0]), (void *)&(pNoiseHistParams->ranges[0]), MEASUREMENT_NOISE_HISTOGRAM_NUM_OF_RANGES);
  615. /* Send the command */
  616. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_NOISE_HIST, (char *)pCmd, sizeof(*pCmd)));
  617. }
  618. /****************************************************************************
  619. * whal_hwMboxCmd_PowerMgmtConfiguration()
  620. ****************************************************************************
  621. * DESCRIPTION: send Command for Power Management configuration
  622. * to the mailbox
  623. *
  624. * INPUTS: None
  625. *
  626. * OUTPUT: None
  627. *
  628. * RETURNS: OK or NOK
  629. ****************************************************************************/
  630. int whal_hwMboxCmd_PowerMgmtConfiguration (HwMboxCmd_T *pHwMboxCmd,whalCtrl_powerSaveParams_t* powerSaveParams)
  631. /*whalCtrl_powerMgmtConfig_t* pPowerMgmtParams)*/
  632. {
  633. PSModeParameters_t Cmd_PowerMgmtCnf;
  634. PSModeParameters_t * pCmd = &Cmd_PowerMgmtCnf;
  635. os_memoryZero(pHwMboxCmd->hOs, (void *)pCmd, sizeof(*pCmd));
  636. if(powerSaveParams->ps802_11Enable == TRUE)
  637. pCmd->mode = 1;
  638. else
  639. pCmd->mode = 0;
  640. pCmd->hangOverPeriod = powerSaveParams->hangOverPeriod;
  641. pCmd->needToSendNullData = powerSaveParams->needToSendNullData;
  642. pCmd->rateToTransmitNullData = ENDIAN_HANDLE_WORD(powerSaveParams->NullPktRateModulation);
  643. pCmd->numberOfRetries = powerSaveParams->numNullPktRetries;
  644. /*
  645. * Send the command
  646. */
  647. return (CmdQueue_CommandWithCb(pHwMboxCmd->hCmdMboxQueue, CMD_SET_PS_MODE, (char *)pCmd, sizeof(*pCmd),(void *)powerSaveParams->powerSavecmdResponseCB,powerSaveParams->powerSaveCBObject,NULL));
  648. }
  649. /****************************************************************************
  650. * whal_hwMboxCmd_SwitchChannelCmd ()
  651. ****************************************************************************
  652. * DESCRIPTION: Send CMD_SWITCH_CHANNEL Command
  653. *
  654. * INPUTS: None
  655. *
  656. * OUTPUT: None
  657. *
  658. * RETURNS: OK or NOK
  659. ****************************************************************************/
  660. int whal_hwMboxCmd_SwitchChannelCmd (HwMboxCmd_T *pHwMboxCmd, whalCtrl_switchChannelCmd_t *pSwitchChannelCmd)
  661. {
  662. ChannelSwitchParameters_t AcxCmd_SwitchChannel;
  663. ChannelSwitchParameters_t *pCmd = &AcxCmd_SwitchChannel;
  664. os_memoryZero(pHwMboxCmd->hOs, (void *)pCmd, sizeof(*pCmd));
  665. pCmd->channel = pSwitchChannelCmd->channelNumber;
  666. pCmd->switchTime = pSwitchChannelCmd->switchTime;
  667. pCmd->txSuspend = pSwitchChannelCmd->txFlag;
  668. pCmd->flush = pSwitchChannelCmd->flush;
  669. /* Send the command */
  670. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_CHANNEL_SWITCH, (char *)pCmd, sizeof(*pCmd)));
  671. }
  672. /****************************************************************************
  673. * whal_hwMboxCmd_SwitchChannelCancelCmd ()
  674. ****************************************************************************
  675. * DESCRIPTION: Send CMD_SWITCH_CHANNEL_CANCEL Command
  676. *
  677. * INPUTS: None
  678. *
  679. * OUTPUT: None
  680. *
  681. * RETURNS: OK or NOK
  682. ****************************************************************************/
  683. int whal_hwMboxCmd_SwitchChannelCancelCmd (HwMboxCmd_T *pHwMboxCmd)
  684. {
  685. /* Send the command */
  686. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_STOP_CHANNEL_SWICTH, 0, 0));
  687. }
  688. /****************************************************************************
  689. * whal_hwMboxCmd_FwDisconnect()
  690. ****************************************************************************
  691. * DESCRIPTION: Construct the Disconnect command fileds and send it to the mailbox
  692. *
  693. * INPUTS: None
  694. *
  695. * OUTPUT: None
  696. *
  697. * RETURNS: OK or NOK
  698. ****************************************************************************/
  699. int whal_hwMboxCmd_FwDisconnect(HwMboxCmd_T *pHwMboxCmd, uint32 ConfigOptions, uint32 FilterOptions)
  700. {
  701. DisconnectParameters_t AcxCmd_Disconnect;
  702. AcxCmd_Disconnect.rxFilter.ConfigOptions = ConfigOptions;
  703. AcxCmd_Disconnect.rxFilter.FilterOptions = FilterOptions;
  704. /*
  705. * Send the command
  706. */
  707. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_DISCONNECT, (char *)&AcxCmd_Disconnect, sizeof(AcxCmd_Disconnect)));
  708. } /* whal_hwMboxCmd_FWDisconnect()*/
  709. /****************************************************************************
  710. * whal_hwMboxCmd_measurementParams()
  711. ****************************************************************************
  712. * DESCRIPTION: send Command for measurement configuration
  713. * to the mailbox
  714. *
  715. * INPUTS: None
  716. *
  717. * OUTPUT: None
  718. *
  719. * RETURNS: OK or NOK
  720. ****************************************************************************/
  721. int whal_hwMboxCmd_measurement (HwMboxCmd_T *pHwMboxCmd, whalCtrl_MeasurementParameters_t* pMeasurementParams,
  722. void* MeasureCommandResponseCB, TI_HANDLE CB_handle)
  723. {
  724. MeasurementParameters_t Cmd_MeasurementParam;
  725. MeasurementParameters_t *pCmd = &Cmd_MeasurementParam;
  726. os_memoryZero(pHwMboxCmd->hOs, (void *)pCmd, sizeof(*pCmd));
  727. pCmd->band = pMeasurementParams->band;
  728. pCmd->channel = pMeasurementParams->channel;
  729. pCmd->duration = ENDIAN_HANDLE_LONG(pMeasurementParams->duration);
  730. pCmd->rxFilter.ConfigOptions = ENDIAN_HANDLE_LONG(pMeasurementParams->ConfigOptions);
  731. pCmd->rxFilter.FilterOptions = ENDIAN_HANDLE_LONG(pMeasurementParams->FilterOptions);
  732. /*
  733. * Send the command
  734. */
  735. return (CmdQueue_CommandWithCb(pHwMboxCmd->hCmdMboxQueue, CMD_MEASUREMENT, (char *)pCmd, sizeof(*pCmd),
  736. (void *)MeasureCommandResponseCB, CB_handle, NULL));
  737. }
  738. /****************************************************************************
  739. * whal_hwMboxCmd_measurementStop()
  740. ****************************************************************************
  741. * DESCRIPTION: send Command for stoping measurement
  742. *
  743. * INPUTS: None
  744. *
  745. * OUTPUT: None
  746. *
  747. * RETURNS: OK or NOK
  748. ****************************************************************************/
  749. int whal_hwMboxCmd_measurementStop (HwMboxCmd_T *pHwMboxCmd, void* MeasureCommandResponseCB, TI_HANDLE CB_handle)
  750. {
  751. /*
  752. * Send the command
  753. */
  754. return (CmdQueue_CommandWithCb(pHwMboxCmd->hCmdMboxQueue, CMD_STOP_MEASUREMENT, 0, 0,
  755. (void *)MeasureCommandResponseCB, CB_handle, NULL));
  756. }
  757. /****************************************************************************
  758. * whal_hwMboxCmd_ApDiscovery()
  759. ****************************************************************************
  760. * DESCRIPTION: send Command for AP Discovery
  761. * to the mailbox
  762. *
  763. * INPUTS: None
  764. *
  765. * OUTPUT: None
  766. *
  767. * RETURNS: OK or NOK
  768. ****************************************************************************/
  769. int whal_hwMboxCmd_ApDiscovery (HwMboxCmd_T *pHwMboxCmd, whalCtrl_ApDiscoveryParameters_t* pApDiscoveryParams)
  770. {
  771. ApDiscoveryParameters_t Cmd_ApDiscovery;
  772. ApDiscoveryParameters_t *pCmd = &Cmd_ApDiscovery;
  773. os_memoryZero(pHwMboxCmd->hOs, (void *)pCmd, sizeof(*pCmd));
  774. pCmd->txPowerAttenuation = pApDiscoveryParams->txPowerDbm;
  775. pCmd->numOfProbRqst = pApDiscoveryParams->numOfProbRqst;
  776. pCmd->scanDuration = ENDIAN_HANDLE_LONG(pApDiscoveryParams->scanDuration);
  777. pCmd->scanOptions = ENDIAN_HANDLE_WORD(pApDiscoveryParams->scanOptions);
  778. pCmd->txdRateSet = ENDIAN_HANDLE_WORD(pApDiscoveryParams->txdRateSet);
  779. pCmd->rxFilter.ConfigOptions = ENDIAN_HANDLE_LONG(pApDiscoveryParams->ConfigOptions);
  780. pCmd->rxFilter.FilterOptions = ENDIAN_HANDLE_LONG(pApDiscoveryParams->FilterOptions);
  781. /*
  782. * Send the command
  783. */
  784. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_AP_DISCOVERY, (char *)pCmd, sizeof(*pCmd)));
  785. }
  786. /****************************************************************************
  787. * whal_hwMboxCmd_ApDiscoveryStop()
  788. ****************************************************************************
  789. * DESCRIPTION: send Command for stoping AP Discovery
  790. *
  791. * INPUTS: None
  792. *
  793. * OUTPUT: None
  794. *
  795. * RETURNS: OK or NOK
  796. ****************************************************************************/
  797. int whal_hwMboxCmd_ApDiscoveryStop (HwMboxCmd_T *pHwMboxCmd)
  798. {
  799. /*
  800. * Send the command
  801. */
  802. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_STOP_AP_DISCOVERY, 0, 0));
  803. }
  804. /****************************************************************************
  805. * whal_hwMboxCmd_HealthCheck()
  806. ****************************************************************************
  807. * DESCRIPTION:
  808. *
  809. * INPUTS:
  810. *
  811. * OUTPUT:
  812. *
  813. * RETURNS:
  814. ****************************************************************************/
  815. int whal_hwMboxCmd_HealthCheck(HwMboxCmd_T *pHwMboxCmd)
  816. {
  817. /*
  818. * no parameters
  819. */
  820. /*
  821. * Send the command
  822. */
  823. return (CmdQueue_Command(pHwMboxCmd->hCmdMboxQueue, CMD_HEALTH_CHECK, NULL, 0));
  824. }