PageRenderTime 52ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/drivers/net/wireless/tiwlan1251/common/src/TNETW_Driver/TNETWIF/TNETWIF.c

http://github.com/CyanogenMod/cm-kernel
C | 1123 lines | 477 code | 211 blank | 435 comment | 25 complexity | 02c9bf038933988aa79042c9ce701912 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: GWSI_Synchronizer.c
  38. * PURPOSE: GWSI Synchronizer used to synchronize between the CMD,INT,TX
  39. *
  40. ****************************************************************************/
  41. #include "commonTypes.h"
  42. #include "report.h"
  43. #include "osApi.h"
  44. /* Need tthe TNETWARB API Function to create and confit it */
  45. #include "TNETWArb.h"
  46. #include "TNETWIF.h"
  47. /* Need the HwAcess API Function to create and confit it */
  48. #include "whalHwAccess.h"
  49. /* Need the ELP Control API Function to create and confit it */
  50. #include "ElpCtrl.h"
  51. /*
  52. * Special debug mode to trace all calls to TNETWIF_XXX
  53. */
  54. #ifdef TNETWIF_DEBUG
  55. typedef enum
  56. {
  57. No_FUNC,
  58. Start_FUNC,
  59. Restart_FUNC,
  60. Finish_FUNC,
  61. WriteMem_FUNC,
  62. ReadMem_FUNC,
  63. WriteReg_FUNC,
  64. ReadReg_FUNC,
  65. WriteElp_FUNC,
  66. ReadElp_FUNC,
  67. BusComplete_FUNC,
  68. UnMux_FUNC
  69. } ETNETIF_Functions;
  70. typedef struct
  71. {
  72. UINT32 uData;
  73. UINT32 uModule;
  74. UINT32 uTS;
  75. ETNETIF_Functions eFunc;
  76. } TTNETWIF_DEBUG;
  77. /* Should be the max value of uDebugCounter */
  78. #define TNETWIF_SIZE_OF_DEBUG_ARRAY 256
  79. /* Global variables for debug */
  80. UINT8 uDebugCounter ;
  81. TTNETWIF_DEBUG tDebug[TNETWIF_SIZE_OF_DEBUG_ARRAY];
  82. #define TNETWIF_TRACE(hOs,func,module,data) \
  83. tDebug[uDebugCounter].uData = (UINT32)(data); \
  84. tDebug[uDebugCounter].uModule = module; \
  85. tDebug[uDebugCounter].uTS = os_timeStampUs(hOs); \
  86. tDebug[uDebugCounter].eFunc = func; \
  87. uDebugCounter++;
  88. /****************************************************************************
  89. * TNETWIF_FuncEnumdToString()
  90. *****************************************************************************/
  91. char* TNETWIF_FuncEnumToString(ETNETIF_Functions eFunc)
  92. {
  93. switch (eFunc)
  94. {
  95. case No_FUNC: return "(No_FUNC) ";
  96. case Start_FUNC: return "(Start_FUNC) ";
  97. case Restart_FUNC: return "(Restart_FUNC) ";
  98. case Finish_FUNC: return "(Finish_FUNC) ";
  99. case WriteMem_FUNC: return "(WriteMem_FUNC) ";
  100. case ReadMem_FUNC: return "(ReadMem_FUNC) ";
  101. case WriteReg_FUNC: return "(WriteReg_FUNC) ";
  102. case ReadReg_FUNC: return "(ReadReg_FUNC) ";
  103. case WriteElp_FUNC: return "(WriteElp_FUNC) ";
  104. case ReadElp_FUNC: return "(ReadElp_FUNC) ";
  105. case BusComplete_FUNC: return "(BusComplete_FUNC) ";
  106. case UnMux_FUNC: return "(UnMux_FUNC) ";
  107. default :
  108. return " No_FUNC???)";
  109. }
  110. }
  111. /****************************************************************************
  112. * TNETWIF_printErrorLog()
  113. *****************************************************************************/
  114. void TNETWIF_printErrorLog(void)
  115. {
  116. int i;
  117. WLAN_OS_REPORT(("\n%s\n",__FUNCTION__));
  118. WLAN_OS_REPORT(("Counter at %d (i.e. last operation is %d)\n",uDebugCounter,uDebugCounter-1));
  119. for ( i = 0 ; i < TNETWIF_SIZE_OF_DEBUG_ARRAY ; i++)
  120. {
  121. WLAN_OS_REPORT(("%03d %s: %s TS(Diff) = %07d data = 0x%x\n",i,
  122. TNETWIF_FuncEnumToString(tDebug[i].eFunc),
  123. TNETWIF_ModuleIdToString(tDebug[i].uModule),
  124. tDebug[i].uTS - tDebug[(UINT8)(i-1)].uTS,
  125. tDebug[i].uData));
  126. }
  127. }
  128. #else /* TNETWIF_DEBUG */
  129. #define TNETWIF_TRACE(hOs,func,module_id,data)
  130. void TNETWIF_printErrorLog(void) { WLAN_OS_REPORT(("%s define TNETWIF_DEBUG to debug error\n",__FUNCTION__)); }
  131. #endif
  132. extern void os_TNETWIF_BusTxn_Complete(TI_HANDLE OsContext,int status);
  133. /***********************************************************************************
  134. Internal TNETWIF function use
  135. **************************************************************************************/
  136. /****************************************************************************/
  137. /* TNETWIF_Create()
  138. ****************************************************************************
  139. * DESCRIPTION: Request The Bus
  140. *
  141. * INPUTS:
  142. *
  143. * OUTPUT: String the name of the Queue
  144. *
  145. * RETURNS:
  146. ****************************************************************************/
  147. TI_HANDLE TNETWIF_Create (TI_HANDLE hOs)
  148. {
  149. TNETWIF_t *pTNETWIF;
  150. /* Allocate the TNETWIF module */
  151. pTNETWIF = os_memoryAlloc (hOs, sizeof(TNETWIF_t));
  152. if (pTNETWIF == NULL)
  153. return NULL;
  154. os_memoryZero (hOs, pTNETWIF, sizeof(TNETWIF_t));
  155. pTNETWIF->hOs = hOs;
  156. /* Create the TNETW Arbiter module */
  157. pTNETWIF->hTNETWArb = TNETWArb_Init (hOs);
  158. /* Create the Hw Access module */
  159. pTNETWIF->hHwAccess = whal_hwAccess_Create (hOs);
  160. /* Create the ELP Controller module */
  161. pTNETWIF->hELPCtrl = elpCtrl_Create (hOs);
  162. return (TI_HANDLE)pTNETWIF;
  163. }
  164. /****************************************************************************/
  165. /* TNETWIF_Destroy()
  166. ****************************************************************************
  167. * DESCRIPTION: Destroy The TNETWIF Module
  168. *
  169. * INPUTS:
  170. *
  171. * OUTPUT: String the name of the Queue
  172. *
  173. * RETURNS:
  174. ****************************************************************************/
  175. TI_STATUS TNETWIF_Destroy (TI_HANDLE hTNETWIF)
  176. {
  177. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  178. /* Destroy the ELP Controller module */
  179. elpCtrl_Destroy (pTNETWIF->hELPCtrl);
  180. /* Destroy the HwAccess Module */
  181. whal_hwAccess_Destroy (pTNETWIF->hHwAccess);
  182. /* Destroy the TNETW Arbiter */
  183. TNETWArb_Destroy (pTNETWIF->hTNETWArb);
  184. /* Free the TNETWIF Memory */
  185. os_memoryFree (pTNETWIF->hOs, pTNETWIF, sizeof(TNETWIF_t));
  186. return OK;
  187. }
  188. /****************************************************************************/
  189. /* TNETWIF_ConfigCb()
  190. ****************************************************************************
  191. * DESCRIPTION: TNETWIF module configuration state machine
  192. *
  193. * INPUTS:
  194. *
  195. * OUTPUT:
  196. *
  197. * RETURNS:
  198. ****************************************************************************/
  199. static void TNETWIF_ConfigCb (TI_HANDLE hTNETWIF, UINT8 module_id, TI_STATUS status)
  200. {
  201. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  202. switch (pTNETWIF->uInitStage)
  203. {
  204. case 0:
  205. pTNETWIF->uInitStage ++;
  206. #ifdef GWSI_SPI_TEST
  207. /*
  208. * This is a special build meant only for testing the SPI bus. We don't need anything
  209. * but initiating the TNETWIF. That's why we skip partition and ELP phase
  210. */
  211. pTNETWIF->uInitStage = 3;
  212. #endif /* GWSI_SPI_TEST */
  213. /* Register the arbiter callback */
  214. TNETWArb_register_handler (pTNETWIF->hTNETWArb,
  215. HAL_INIT_MODULE_ID,
  216. TNETWIF_ConfigCb,
  217. hTNETWIF);
  218. /* Configure the HwAccess with the DMA Done callback */
  219. status = (TI_STATUS)whal_hwAccess_Config (pTNETWIF->hHwAccess,
  220. pTNETWIF->hReport,
  221. pTNETWIF->uRegBaseAddr,
  222. pTNETWIF->uMemBaseAddr,
  223. os_TNETWIF_BusTxn_Complete,
  224. pTNETWIF->hOs);
  225. if (status == TNETWIF_PENDING)
  226. {
  227. pTNETWIF->status = TNETWIF_PENDING;
  228. return;
  229. }
  230. else if (status == TNETWIF_ERROR)
  231. { /* This case is mainly used for the SPI test */
  232. pTNETWIF->status = TNETWIF_ERROR;
  233. }
  234. else
  235. {
  236. pTNETWIF->status = TNETWIF_COMPLETE;
  237. }
  238. case 1:
  239. pTNETWIF->uInitStage ++;
  240. #if defined(HW_ACCESS_SDIO) || defined(HW_ACCESS_WSPI)
  241. status = TNETWIF_SetPartitionsOpt (hTNETWIF,
  242. HW_ACCESS_DOWNLOAD,
  243. HW_ACCESS_DOWN_PART0_ADDR,
  244. module_id,
  245. (TNETWIF_callback_t)TNETWIF_ConfigCb,
  246. hTNETWIF);
  247. if (status == TNETWIF_PENDING)
  248. {
  249. pTNETWIF->status = TNETWIF_PENDING;
  250. return;
  251. }
  252. else
  253. {
  254. pTNETWIF->status = TNETWIF_COMPLETE;
  255. }
  256. #endif
  257. case 2:
  258. pTNETWIF->uInitStage ++;
  259. /* Awake firmware */
  260. if (TNETWIF_WriteELPOpt (hTNETWIF,
  261. ELPCTRL_WAKE_UP,
  262. HAL_INIT_MODULE_ID,
  263. TNETWIF_ConfigCb,
  264. hTNETWIF,
  265. TRUE) == TNETWIF_PENDING)
  266. {
  267. pTNETWIF->status = TNETWIF_PENDING;
  268. return;
  269. }
  270. else
  271. {
  272. pTNETWIF->status = TNETWIF_COMPLETE;
  273. }
  274. case 3:
  275. /* Call upper module callback */
  276. pTNETWIF->fCb (pTNETWIF->hCb, module_id, pTNETWIF->status);
  277. pTNETWIF->uInitStage = 0;
  278. WLAN_REPORT_INIT (pTNETWIF->hReport, TNETW_IF_MODULE_LOG,
  279. ("%s(%d) - TNETWIF Initialized\n", __FILE__, __LINE__));
  280. }
  281. }
  282. /****************************************************************************/
  283. /* TNETWIF_Config()
  284. ****************************************************************************
  285. * DESCRIPTION: Configure the TNETWIF module
  286. *
  287. * INPUTS:
  288. *
  289. * OUTPUT:
  290. *
  291. * RETURNS:
  292. ****************************************************************************/
  293. TI_STATUS TNETWIF_Config (TI_HANDLE hTNETWIF, TI_HANDLE hReport, UINT32 uRegBaseAddr, UINT32 uMemBaseAddr, TNETWIF_callback_t fCb, TI_HANDLE hCb)
  294. {
  295. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  296. pTNETWIF->hReport = hReport;
  297. pTNETWIF->uInitStage = 0;
  298. pTNETWIF->uRegBaseAddr = uRegBaseAddr;
  299. pTNETWIF->uMemBaseAddr = uMemBaseAddr;
  300. pTNETWIF->fCb = fCb;
  301. pTNETWIF->hCb = hCb;
  302. pTNETWIF->status = TNETWIF_PENDING;
  303. #ifdef TNETWIF_DEBUG
  304. uDebugCounter = 0;
  305. os_memoryZero(pTNETWIF->hOs, (void*)tDebug, sizeof(tDebug));
  306. WLAN_OS_REPORT(("Using Debug Arbiter\n"));
  307. #endif
  308. /* Send the ELP Controller handle to the TNETW Arbiter */
  309. TNETWArb_Config (pTNETWIF->hTNETWArb, hReport, pTNETWIF->hELPCtrl);
  310. /* Configure ELP control before the 1st TNETWIF_Start call */
  311. elpCtrl_Configure (pTNETWIF->hELPCtrl, hTNETWIF, TNETWArb_TxnCb);
  312. /* Start TNETWIF config state machine */
  313. TNETWIF_Start (hTNETWIF, HAL_INIT_MODULE_ID, hTNETWIF, TNETWIF_ConfigCb);
  314. return pTNETWIF->status;
  315. }
  316. /****************************************************************************/
  317. /* TNETWIF_ReConfig()
  318. ****************************************************************************
  319. * DESCRIPTION: stop the SDIO in Recovery process
  320. *
  321. * INPUTS:
  322. *
  323. * OUTPUT: status
  324. *
  325. * RETURNS:
  326. ****************************************************************************/
  327. TI_STATUS TNETWIF_ReConfig (TI_HANDLE hTNETWIF)
  328. {
  329. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  330. TI_STATUS status = OK;
  331. #if (defined(_WINDOWS) && defined(HW_ACCESS_SDIO))
  332. #else
  333. whal_hwAccess_Stop (pTNETWIF->hHwAccess);
  334. #endif
  335. return (status);
  336. }
  337. /****************************************************************************/
  338. /* TNETWIF_Start()
  339. ****************************************************************************
  340. * DESCRIPTION: Request The Bus
  341. *
  342. * INPUTS:
  343. *
  344. * OUTPUT: String the name of the Queue
  345. *
  346. * RETURNS:
  347. ****************************************************************************/
  348. TI_STATUS TNETWIF_Start (TI_HANDLE hTNETWIF, UINT8 module_id, TI_HANDLE hCb, TNETWIF_callback_t fCb)
  349. {
  350. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  351. TI_STATUS status;
  352. TNETWIF_TRACE(pTNETWIF->hOs,Start_FUNC,module_id,fCb)
  353. /* Call the TNETW Arbiter for the start operation - the client requests access the bus */
  354. status = TNETWArb_Start (pTNETWIF->hTNETWArb, module_id, hCb, fCb);
  355. return status;
  356. }
  357. /****************************************************************************/
  358. /* TNETWIF_Restart()
  359. ****************************************************************************
  360. * DESCRIPTION: Re-Request The Bus
  361. *
  362. * INPUTS:
  363. *
  364. * OUTPUT:
  365. *
  366. * RETURNS:
  367. ****************************************************************************/
  368. TI_STATUS TNETWIF_Restart (TI_HANDLE hTNETWIF, UINT8 module_id, TI_HANDLE hCb, TNETWIF_callback_t fCb)
  369. {
  370. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  371. TI_STATUS status;
  372. TNETWIF_TRACE(pTNETWIF->hOs,Restart_FUNC,module_id,fCb)
  373. /* Call the TNETW Arbiter for the restart operation - the client requests access to the bus */
  374. status = TNETWArb_Restart (pTNETWIF->hTNETWArb, module_id, hCb, fCb);
  375. return status;
  376. }
  377. /****************************************************************************/
  378. /* TNETWIF_Finish()
  379. ****************************************************************************
  380. * DESCRIPTION: Release The Bus
  381. *
  382. * INPUTS:
  383. *
  384. * OUTPUT:
  385. *
  386. * RETURNS:
  387. ****************************************************************************/
  388. TI_STATUS TNETWIF_Finish (TI_HANDLE hTNETWIF, UINT8 module_id, TI_HANDLE hCb, TNETWIF_callback_t fCb)
  389. {
  390. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  391. TI_STATUS status;
  392. TNETWIF_TRACE(pTNETWIF->hOs,Finish_FUNC,module_id,fCb)
  393. /* Call the TNETW Arbiter for the finish operation - the client frees the bus */
  394. status = TNETWArb_Finish (pTNETWIF->hTNETWArb, module_id, hCb, fCb);
  395. return status;
  396. }
  397. /******************************************************************************
  398. ** **
  399. ** Function Name: TNETWIF_UnMux **
  400. ** **
  401. ** Description: This should be called FwEvent to switch MUX from WLAN_READY to FwEvent. **
  402. ** **
  403. ******************************************************************************/
  404. TI_STATUS TNETWIF_UnMux (TI_HANDLE hTNETWIF)
  405. {
  406. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  407. TNETWIF_TRACE(pTNETWIF->hOs,UnMux_FUNC,0xFF,0)
  408. return (TI_STATUS)elpCtrl_UnMux(pTNETWIF->hELPCtrl);
  409. }
  410. /******************************************************************************
  411. ** **
  412. ** Function Name: TNETWIF_BusTxn_Complete **
  413. ** **
  414. ** Description: This should be called now from the tasklet
  415. Distribute SPI interrupt to all running modules . **
  416. ** **
  417. ******************************************************************************/
  418. void TNETWIF_BusTxn_Complete (TI_HANDLE hTNETWIF)
  419. {
  420. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  421. TNETWIF_TRACE(pTNETWIF->hOs,BusComplete_FUNC,0xFF,0)
  422. TNETWArb_CallTxnCb (pTNETWIF->hTNETWArb);
  423. }
  424. /******************************************************************************
  425. ** **
  426. ** Function Name: TNETWIF_ElpCtrl_Mode **
  427. ** **
  428. ** Description: this function changes the mode of the ElpCtrl **
  429. ** **
  430. ******************************************************************************/
  431. int TNETWIF_ElpCtrl_Mode (TI_HANDLE hTNETWIF, elpCtrl_Mode_e mode)
  432. {
  433. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  434. elpCtrl_Mode (pTNETWIF->hELPCtrl, mode);
  435. return OK;
  436. }
  437. /******************************************************************************
  438. ** **
  439. ** Function Name: TNETWIF_ElpCtrl_HostIF_required **
  440. ** **
  441. ** Description:
  442. ** **
  443. ******************************************************************************/
  444. int TNETWIF_ElpCtrl_HostIF_required (TI_HANDLE hTNETWIF, int flag)
  445. {
  446. /* TODO: what is the purpose of this API? */
  447. return OK;
  448. }
  449. /******************************************************************************
  450. IO Operations : There are 3 modes of operation:
  451. 1) Synchronous mode : The caller context is blocked till the Transcation has finished
  452. 2) Asynchronous mode : The caller context is unblocked and the Transcation will end later by DMA
  453. ******************************************************************************/
  454. #ifdef USE_SYNC_API
  455. /******* Synchronous IO mode **************************************************/
  456. /****************************************************************************
  457. * TNETWIF_WriteMemSync()
  458. ****************************************************************************
  459. * DESCRIPTION: Request an Synchronous IO with the Bus
  460. *
  461. * INPUTS:
  462. *
  463. * OUTPUT:
  464. *
  465. * RETURNS:
  466. ****************************************************************************/
  467. TI_STATUS TNETWIF_WriteMemSync (TI_HANDLE hTNETWIF, UINT32 addr, UINT8* data, UINT32 len)
  468. {
  469. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  470. int status;
  471. /* Then Call the HwAccess to operate the I/O */
  472. status = whal_hwAccess_WriteMem (pTNETWIF->hHwAccess, addr, data, len);
  473. /* The return status could be TNETWIF_COMPLETE in case of Success
  474. TNETWIF_ERROR in case of ERROR */
  475. if (status == OK)
  476. return TNETWIF_COMPLETE;
  477. else
  478. return TNETWIF_ERROR;
  479. }
  480. /****************************************************************************
  481. * TNETWIF_ReadMemSync()
  482. ****************************************************************************
  483. * DESCRIPTION: Request an Synchronous IO with the Bus
  484. *
  485. * INPUTS:
  486. *
  487. * OUTPUT:
  488. *
  489. * RETURNS:
  490. ****************************************************************************/
  491. TI_STATUS TNETWIF_ReadMemSync (TI_HANDLE hTNETWIF, UINT32 addr, UINT8* data, UINT32 len)
  492. {
  493. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  494. TI_STATUS status;
  495. /* Then Call the HwAccess to operate the I/O */
  496. status = (TI_STATUS)whal_hwAccess_ReadMem (pTNETWIF->hHwAccess, addr, data, len);
  497. /* The return status could be TNETWIF_COMPLETE in case of Success
  498. TNETWIF_ERROR in case of ERROR */
  499. return status;
  500. }
  501. /****************************************************************************
  502. * TNETWIF_ReadRegSync()
  503. ****************************************************************************
  504. * DESCRIPTION: Request an Synchronous IO with the Bus
  505. *
  506. * INPUTS:
  507. *
  508. * OUTPUT:
  509. *
  510. * RETURNS:
  511. ****************************************************************************/
  512. TI_STATUS TNETWIF_ReadRegSync (TI_HANDLE hTNETWIF, UINT32 addr, UINT32* data)
  513. {
  514. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  515. TI_STATUS status;
  516. /* Then Call the HwAccess to operate the I/O */
  517. status = (TI_STATUS)whal_hwAccess_ReadReg (pTNETWIF->hHwAccess, addr, data);
  518. /* The return status could be TNETWIF_COMPLETE in case of Success
  519. TNETWIF_ERROR in case of ERROR */
  520. return status;
  521. }
  522. /****************************************************************************
  523. * TNETWIF_WriteRegSync()
  524. ****************************************************************************
  525. * DESCRIPTION: Request an Synchronous IO with the Bus
  526. *
  527. * INPUTS:
  528. *
  529. * OUTPUT: TI_STATUS TNETWIF_COMPLETE or TNETWIF_ERROR
  530. *
  531. * RETURNS:
  532. ****************************************************************************/
  533. TI_STATUS TNETWIF_WriteRegSync (TI_HANDLE hTNETWIF, UINT32 addr, UINT32 data)
  534. {
  535. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  536. TI_STATUS status;
  537. /* Then Call the HwAccess to operate the I/O */
  538. status = (TI_STATUS)whal_hwAccess_WriteReg (pTNETWIF->hHwAccess, addr, data);
  539. /* The return status could be TNETWIF_COMPLETE in case of Success
  540. TNETWIF_ERROR in case of ERROR */
  541. return status;
  542. }
  543. #endif /* USE_SYNC_API */
  544. /******* Optimized IO mode : In this mode the SDIO/SPI Driver will decide with its inner thresholds if to make a DMA or not **************************************************/
  545. /****************************************************************************
  546. * TNETWIF_ReadMemOpt()
  547. ****************************************************************************
  548. * DESCRIPTION: Request an Unspecified Read Memory IO with the Bus
  549. * Note: Currently, only Sync read is implemented!
  550. *
  551. * INPUTS:
  552. *
  553. * OUTPUT: TI_STATUS TNETWIF_COMPLETE or TNETWIF_ERROR
  554. *
  555. * RETURNS:
  556. ****************************************************************************/
  557. TI_STATUS TNETWIF_ReadMemOpt
  558. (
  559. TI_HANDLE hTNETWIF,
  560. UINT32 addr,
  561. UINT8 *data,
  562. UINT32 len,
  563. UINT8 module_id,
  564. TNETWIF_callback_t fCb,
  565. TI_HANDLE hCb)
  566. {
  567. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  568. TNETWIF_TRACE(pTNETWIF->hOs,ReadMem_FUNC,module_id,data)
  569. /* First Register the Callback to the TNET Arbiter where the DMA DONE Callback will be received */
  570. TNETWArb_register_handler (pTNETWIF->hTNETWArb, module_id, fCb, hCb);
  571. /* Call the HwAccess to operate the I/O */
  572. return (TI_STATUS)whal_hwAccess_ReadMemAsync (pTNETWIF->hHwAccess, addr, data, len);
  573. }
  574. /****************************************************************************
  575. * TNETWIF_WriteMemOpt()
  576. ****************************************************************************
  577. * DESCRIPTION: Request an Unspecified Write Memory IO with the Bus
  578. *
  579. * INPUTS:
  580. *
  581. * OUTPUT: TI_STATUS TNETWIF_COMPLETE or TNETWIF_ERROR
  582. *
  583. * RETURNS:
  584. ****************************************************************************/
  585. TI_STATUS TNETWIF_WriteMemOpt
  586. (
  587. TI_HANDLE hTNETWIF,
  588. UINT32 addr,
  589. UINT8 *data,
  590. UINT32 len,
  591. UINT8 module_id,
  592. TNETWIF_callback_t fCb,
  593. TI_HANDLE hCb)
  594. {
  595. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  596. TNETWIF_TRACE(pTNETWIF->hOs,WriteMem_FUNC,module_id,*(UINT32*)(data + TNETWIF_WRITE_OFFSET_BYTES))
  597. /* First Register the Callback to the TNET Arbiter where the DMA DONE Callback will be received */
  598. TNETWArb_register_handler (pTNETWIF->hTNETWArb, module_id, fCb, hCb);
  599. /* Then Call the HwAccess to operate the I/O */
  600. return whal_hwAccess_WriteMemAsync (pTNETWIF->hHwAccess, addr, data, len);
  601. }
  602. /****************************************************************************
  603. * TNETWIF_ReadRegOpt()
  604. ****************************************************************************
  605. * DESCRIPTION: Request an Unspecified Read Register IO with the Bus
  606. *
  607. * INPUTS:
  608. *
  609. * OUTPUT: TI_STATUS TNETWIF_COMPLETE or TNETWIF_ERROR or TNETWIF_PENDING
  610. *
  611. * RETURNS:
  612. ****************************************************************************/
  613. TI_STATUS TNETWIF_ReadRegOpt (TI_HANDLE hTNETWIF, UINT32 addr, UINT32* data, UINT8 module_id, TNETWIF_callback_t fCb, TI_HANDLE hCb)
  614. {
  615. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  616. TNETWIF_TRACE(pTNETWIF->hOs,ReadReg_FUNC,module_id,data)
  617. /* First Register the Callback to the TNET Arbiter where the DMA DONE Callback will be received */
  618. TNETWArb_register_handler (pTNETWIF->hTNETWArb, module_id, fCb, hCb);
  619. /* Call the HwAccess to operate the I/O */
  620. return (TI_STATUS)whal_hwAccess_ReadRegAsync (pTNETWIF->hHwAccess, addr, data);
  621. }
  622. /****************************************************************************
  623. * TNETWIF_WriteRegOpt()
  624. ****************************************************************************
  625. * DESCRIPTION: Request an Unspecified Read Register IO with the Bus
  626. *
  627. * INPUTS:
  628. *
  629. * OUTPUT: TI_STATUS TNETWIF_COMPLETE or TNETWIF_ERROR or TNETWIF_PENDING
  630. *
  631. * RETURNS:
  632. ****************************************************************************/
  633. TI_STATUS TNETWIF_WriteRegOpt (TI_HANDLE hTNETWIF, UINT32 addr, UINT32 data, UINT8 module_id, TNETWIF_callback_t fCb, TI_HANDLE hCb)
  634. {
  635. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  636. TNETWIF_TRACE(pTNETWIF->hOs,WriteReg_FUNC,module_id,data)
  637. /* First Register the Callback to the TNET Arbiter where the DMA DONE Callback will be received */
  638. TNETWArb_register_handler (pTNETWIF->hTNETWArb, module_id, fCb, hCb);
  639. /* Then Call the HwAccess to operate the I/O */
  640. return (TI_STATUS)whal_hwAccess_WriteRegAsync (pTNETWIF->hHwAccess, addr, data);
  641. }
  642. #ifdef USE_SYNC_API
  643. /****************************************************************************
  644. * TNETWIF_WriteELPSync()
  645. ****************************************************************************
  646. * DESCRIPTION: Request an Unspecified Read Register IO with the Bus
  647. *
  648. * INPUTS:
  649. *
  650. * OUTPUT: TI_STATUS TNETWIF_COMPLETE or TNETWIF_ERROR or TNETWIF_PENDING
  651. *
  652. * RETURNS:
  653. ****************************************************************************/
  654. TI_STATUS TNETWIF_WriteELPSync (TI_HANDLE hTNETWIF, UINT32 data)
  655. {
  656. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  657. /* Call the HwAccess to operate the I/O */
  658. return (TI_STATUS)whal_hwAccess_WriteELP (pTNETWIF->hHwAccess, data);
  659. }
  660. #endif /* USE_SYNC_API */
  661. /****************************************************************************
  662. * TNETWIF_WriteELPOpt()
  663. ****************************************************************************
  664. * DESCRIPTION: Request an Unspecified Read Register IO with the Bus
  665. *
  666. * INPUTS: bMore - indicate whether more txn on the bus are about to happen
  667. *
  668. * OUTPUT: TI_STATUS TNETWIF_COMPLETE or TNETWIF_ERROR or TNETWIF_PENDING
  669. *
  670. * RETURNS:
  671. ****************************************************************************/
  672. TI_STATUS TNETWIF_WriteELPOpt (TI_HANDLE hTNETWIF, UINT32 data, UINT8 module_id, TNETWIF_callback_t fCb, TI_HANDLE hCb, BOOL bMore)
  673. {
  674. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  675. TNETWIF_TRACE(pTNETWIF->hOs,WriteElp_FUNC,module_id,data)
  676. /* Register a callback */
  677. if(fCb)
  678. TNETWArb_register_handler (pTNETWIF->hTNETWArb, module_id, fCb, hCb);
  679. /* Call the HwAccess to operate the I/O */
  680. return (TI_STATUS)whal_hwAccess_WriteELPAsync (pTNETWIF->hHwAccess, data, fCb != NULL, bMore);
  681. }
  682. /****************************************************************************
  683. * TNETWIF_ReadELPOpt()
  684. ****************************************************************************
  685. * DESCRIPTION: Request an Unspecified Read Register IO with the Bus
  686. *
  687. * INPUTS: bMore - indicate whether more txn on the bus are about to happen
  688. *
  689. * OUTPUT: TI_STATUS TNETWIF_COMPLETE or TNETWIF_ERROR or TNETWIF_PENDING
  690. *
  691. * RETURNS:
  692. ****************************************************************************/
  693. TI_STATUS TNETWIF_ReadELPOpt (TI_HANDLE hTNETWIF, UINT8 *data, UINT8 module_id, TNETWIF_callback_t fCb, TI_HANDLE hCb, BOOL bMore)
  694. {
  695. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  696. TNETWIF_TRACE(pTNETWIF->hOs,ReadElp_FUNC,module_id,data)
  697. /* Register a callback */
  698. if(fCb)
  699. TNETWArb_register_handler (pTNETWIF->hTNETWArb, module_id, fCb, hCb);
  700. /* Call the HwAccess to operate the I/O */
  701. return (TI_STATUS)whal_hwAccess_ReadELPAsync (pTNETWIF->hHwAccess, data, fCb != NULL, bMore);
  702. }
  703. /*****************************************************************************************************
  704. * Registers API : All the following API are synchronous only and the return value can be:
  705. ** TNEDTWIF_ERROR - In case the action did not succeed
  706. ** TNETWIF_COMPLETE - In case the action succeeded
  707. *******************************************************************************************************/
  708. #ifdef USE_SYNC_API
  709. /****************************************************************************
  710. * TNETWIF_GetU08()
  711. ****************************************************************************
  712. * DESCRIPTION: Request an U8 Value from the Hw Access
  713. *
  714. * INPUTS:
  715. *
  716. * OUTPUT: String the name of the Queue
  717. *
  718. * RETURNS:
  719. ****************************************************************************/
  720. UINT8 TNETWIF_GetU08 (TI_HANDLE hTNETWIF, UINT32 Addr)
  721. {
  722. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  723. UINT8 Value;
  724. Value = whal_hwAccess_GetU08 (pTNETWIF->hHwAccess, Addr);
  725. return Value;
  726. }
  727. /****************************************************************************
  728. * TNETWIF_SetU08()
  729. ****************************************************************************
  730. * DESCRIPTION: Set an U8 Value from the Hw Access
  731. *
  732. * INPUTS:
  733. *
  734. * OUTPUT: String the name of the Queue
  735. *
  736. * RETURNS:
  737. ****************************************************************************/
  738. void TNETWIF_SetU08 (TI_HANDLE hTNETWIF, UINT32 Addr, UINT8 Val)
  739. {
  740. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  741. whal_hwAccess_SetU08 (pTNETWIF->hHwAccess, Addr, Val);
  742. }
  743. void TNETWIF_ResetU08_Bits (TI_HANDLE hTNETWIF, UINT32 Addr, UINT8 BitsVal)
  744. {
  745. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  746. whal_hwAccess_ResetU08_Bits (pTNETWIF->hHwAccess, Addr, BitsVal);
  747. }
  748. UINT16 TNETWIF_GetU16 (TI_HANDLE hTNETWIF, UINT32 Addr)
  749. {
  750. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  751. UINT16 U16Value;
  752. U16Value = whal_hwAccess_GetU16 (pTNETWIF->hHwAccess,Addr);
  753. return U16Value;
  754. }
  755. void TNETWIF_SetU16 (TI_HANDLE hTNETWIF, UINT32 Addr, UINT16 Val)
  756. {
  757. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  758. whal_hwAccess_SetU16 (pTNETWIF->hHwAccess, Addr, Val);
  759. }
  760. void TNETWIF_SetU16_Bits (TI_HANDLE hTNETWIF, UINT32 Addr, UINT16 BitsVal)
  761. {
  762. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  763. whal_hwAccess_SetU16_Bits (pTNETWIF->hHwAccess,Addr,BitsVal);
  764. }
  765. void TNETWIF_ResetU16_Bits (TI_HANDLE hTNETWIF, UINT32 Addr, UINT16 BitsVal)
  766. {
  767. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  768. whal_hwAccess_ResetU16_Bits (pTNETWIF->hHwAccess, Addr, BitsVal);
  769. }
  770. UINT32 TNETWIF_GetU32 (TI_HANDLE hTNETWIF, UINT32 Addr)
  771. {
  772. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  773. UINT32 U32Value;
  774. U32Value = whal_hwAccess_GetU32 (pTNETWIF->hHwAccess, Addr);
  775. return U32Value;
  776. }
  777. void TNETWIF_SetU32 (TI_HANDLE hTNETWIF, UINT32 Addr, UINT32 Val)
  778. {
  779. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  780. whal_hwAccess_SetU32 (pTNETWIF->hHwAccess ,Addr, Val);
  781. }
  782. void TNETWIF_SetU32_Bits (TI_HANDLE hTNETWIF, UINT32 Addr, UINT32 BitsVal)
  783. {
  784. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  785. whal_hwAccess_SetU32_Bits (pTNETWIF->hHwAccess, Addr, BitsVal);
  786. }
  787. void TNETWIF_ResetU32_Bits (TI_HANDLE hTNETWIF, UINT32 Addr, UINT32 BitsVal)
  788. {
  789. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  790. whal_hwAccess_ResetU32_Bits (pTNETWIF->hHwAccess, Addr, BitsVal);
  791. }
  792. /*
  793. * Hardware Registers Api
  794. */
  795. void TNETWIF_RegSetBitVal (TI_HANDLE hTNETWIF, UINT32 RegAddr, UINT32 BitVal)
  796. {
  797. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  798. whal_hwAccess_RegSetBitVal (pTNETWIF->hHwAccess, RegAddr, BitVal);
  799. }
  800. void TNETWIF_RegResetBitVal (TI_HANDLE hTNETWIF, UINT32 RegAddr, UINT32 BitVal)
  801. {
  802. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  803. whal_hwAccess_RegResetBitVal (pTNETWIF->hHwAccess, RegAddr, BitVal);
  804. }
  805. int TNETWIF_RegIsBitSet (TI_HANDLE hTNETWIF, UINT32 RegAddr, UINT32 BitVal)
  806. {
  807. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  808. int status;
  809. status = whal_hwAccess_RegIsBitSet (pTNETWIF->hHwAccess, RegAddr, BitVal);
  810. return status;
  811. }
  812. #endif /* USE_SYNC_API */
  813. /***********************************************************************************
  814. ** Client implementation
  815. ***********************************************************************************/
  816. /******************************************************************************
  817. ** **
  818. ** Function Name: gwsi_rx_start_instance **
  819. ** **
  820. ** Description: GWSI Rx Data Path Start Instance. **
  821. ** **
  822. ******************************************************************************/
  823. void TNETWIF_rx_start_instance (TI_HANDLE CB_Handle, TI_HANDLE module_id, TI_STATUS status)
  824. {
  825. /* WLAN_REPORT_ERROR (GWSI_handle->hReport, TNETW_IF_MODULE_LOG,
  826. ("\n gwsi_rx_start_instance() : Not implemented Yet !!! \n\n"));*/
  827. return;
  828. }
  829. #ifdef USE_SYNC_API
  830. TI_STATUS TNETWIF_SetPartitions (TI_HANDLE hTNETWIF, TNETIF_HwAccess_SetPartition_mode_e partitionMode, UINT32 partition_start)
  831. {
  832. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  833. return (TI_STATUS)whal_hwAccess_SetPartitions (pTNETWIF->hHwAccess, partitionMode, partition_start);
  834. }
  835. #endif /* USE_SYNC_API */
  836. TI_STATUS TNETWIF_SetPartitionsOpt (TI_HANDLE hTNETWIF, TNETIF_HwAccess_SetPartition_mode_e partitionMode, UINT32 partition_start, UINT8 module_id, TNETWIF_callback_t fCb, TI_HANDLE hCb)
  837. {
  838. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  839. /* Register a callback */
  840. TNETWArb_register_handler (pTNETWIF->hTNETWArb, module_id, fCb, hCb);
  841. return (TI_STATUS)whal_hwAccess_SetPartitionsAsync (pTNETWIF->hHwAccess, partitionMode, partition_start);
  842. }
  843. /****************************************************************************************
  844. * TNETWIF_RegisterFailureEventCB *
  845. ****************************************************************************************
  846. DESCRIPTION: Registers a failure event callback to the elp controler.
  847. INPUT: - hTNETWIF - handle to the TNETWIF object.
  848. - failureEventCB - the failure event callback function.\n
  849. - hFailureEventObj - handle to the object passed to the failure event callback function.
  850. OUTPUT:
  851. RETURN: void.
  852. ****************************************************************************************/
  853. void TNETWIF_RegisterFailureEventCB (TI_HANDLE hTNETWIF,
  854. void *failureEventCB,
  855. TI_HANDLE hFailureEventObj )
  856. {
  857. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  858. elpCtrl_RegisterFailureEventCB (pTNETWIF->hELPCtrl, failureEventCB, hFailureEventObj);
  859. }
  860. /****************************************************************************************
  861. * TNETWIF_RegisterBusFailureEventCB *
  862. ****************************************************************************************
  863. DESCRIPTION: Registers a failure event to the hal ctrl for case of SDIO bus fail.
  864. INPUT: - hTNETWIF - handle to the TNETWIF object.
  865. - failureEventCB - the failure event callback function.\n
  866. - hFailureEventObj - handle to the object passed to the failure event callback function.
  867. OUTPUT:
  868. RETURN: void.
  869. ****************************************************************************************/
  870. void TNETWIF_RegisterBusFailureEventCB (TI_HANDLE hTNETWIF,
  871. void *failureEventCB,
  872. TI_HANDLE hFailureEventObj)
  873. {
  874. TNETWIF_t *pTNETWIF = (TNETWIF_t *)hTNETWIF;
  875. whal_hwAccess_RegisterForErrorCB (pTNETWIF->hHwAccess, failureEventCB, hFailureEventObj);
  876. }
  877. /****************************************************************************
  878. * TNETWIF_ModuleIdToString()
  879. ****************************************************************************
  880. * DESCRIPTION: Convert the module ID to the Name of the module in string
  881. *
  882. * INPUTS: UINT32 module_id
  883. *
  884. * OUTPUT: String the name of the module
  885. *
  886. * RETURNS:
  887. ****************************************************************************/
  888. char* TNETWIF_ModuleIdToString(UINT32 module_id)
  889. {
  890. switch (module_id)
  891. {
  892. case DEFAULT_MODULE_ID: return "(DEFAULT_MODULE_ID) ";
  893. case TX_XFER_MODULE_ID: return "(TX_XFER_MODULE_ID) ";
  894. case HAL_RX_MODULE_ID: return "(HAL_RX_MODULE_ID ) ";
  895. case HAL_INT_MODULE_ID: return "(HAL_INT_MODULE_ID) ";
  896. case HAL_CMD_MODULE_ID: return "(HAL_CMD_MODULE_ID ) ";
  897. case FW_EVENT_MODULE_ID: return "(FW_EVENT_MODULE_ID) ";
  898. case HAL_INIT_MODULE_ID: return "(HAL_INIT_MODULE_ID )";
  899. default :
  900. return "(NOT_SUPPORTED) ";
  901. }
  902. }