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 *
38 * MODULE: whalRecovery.c
39 * PURPOSE: Handle Recovery and ACI in the Hal
40 *
41 * Recovery
42 * CheckHwStatus - called periodically from the CORE to check the following triggers:
43 * Consecutive fcs error
44 * CheckMailbox - call interrogate with callback (only print)
45 * RxFreeMem register image
46 * TxQueue
47 * TxQueue
48 * Mailbox error - call the CORE failure event MBOX_FAILURE
49 * Event mailbox
50 * MacStatus event - receive the register value for CONS_FCS_ERR and Rx_FREE_MEM triggers
51 * Health event - device error callback to CORE
52 * PowerCtrl timeout fail - call the CORE failure event HW_AWAKE_FAILURE
53 * StopHal - called from the CORE as first step in the recovery process
54 * Reconfig - called from the CORE as second step in the recovery process
55 * LNA/ACI
56 * ACI event - get SCR_PAD8 value, accumulate it locally for later read/write by the CORE
57 * Rx reset
58 * API to access the RX_RESET register
59 *
60 * Issues
61 * Add API to
62 * Move the whalCtrl_hwStatus_t from HwCtrl into Recovery object
63 * Remove CheckMailbox in CheckHwStatus
64 * Device error is not enabled
65 *
66 ****************************************************************************/
67
68 #include "whalCommon.h"
69 #include "whalCtrl_api.h"
70 #include "whalCtrl.h"
71 #include "whalSecurity.h"
72 #include "eventMbox_api.h"
73 #include "CmdQueue_api.h"
74 #include "whalBus_Api.h"
75 #include "shmBus.h"
76 #include "whalHwAccess.h"
77 #include "TNETW_Driver.h"
78 #include "FwEvent_api.h"
79
80 #ifdef USE_RECOVERY
81
82 /* Aci Indication Callback */
83 /* typedef void (*AciIndicationCB_t)(TI_HANDLE handle, char* str , UINT32 strLen);*/
84
85
86 void whalCtrl_HealthReoprt_CB(TI_HANDLE hWhalCtrl, char* Report , UINT32 strLen);
87 void whalCtrl_MacStatus_CB(TI_HANDLE hWhalCtrl, char* Status , UINT32 strLen);
88 int whalCtrl_PeriodicCheckMailboxCb(TI_HANDLE hWhalCtrl, UINT16 MboxStatus,char *InterrogateParamsBuf);
89
90 /*
91 * ----------------------------------------------------------------------------
92 * Function : whalCtrl_RegisterCallbacks
93 *
94 * Input :
95 * Output :
96 * Process :
97 * Register all health/sanityCheck/Recovery callbacks
98 * --------------------------------------------------
99 * DeviceError - CORE callback for full recovery
100 * HealthReport - Event Mbox callback for extracting device error
101 * MacStatus - Event Mbox callback for checkHwStatus FCS_ERR, RX_FREE_MEM regs
102 * AciIndication - Event Mbox callback for accumulate SCR_PAD8 image
103 * Mailbox error - Mailbox queue callback for case of timeout/error
104 * Power control error - PowerMngr callback in case of power ctrl timeout
105 * Failure event - CORE Callback in case of MailboxError or PowerCtrl error
106 *
107 * Note(s) : Done
108 * -----------------------------------------------------------------------------
109 */
whalCtrl_RegisterErrorsCallbacks(TI_HANDLE hWhalCtrl)110 int whalCtrl_RegisterErrorsCallbacks(TI_HANDLE hWhalCtrl)
111 {
112 WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
113 /*FW events : BUS_ERROR and DEVICE_ERROR*/
114 pWhalCtrl->HealthReportCB_CB = whalCtrl_HealthReoprt_CB;
115 pWhalCtrl->HealthReportCB_handle = pWhalCtrl;
116
117 eventMbox_RegisterEventCB (pWhalCtrl->hEventMbox, HAL_EVENT_HEALTH_REPORT,(void*)pWhalCtrl->HealthReportCB_CB, pWhalCtrl);
118 /* The health report event will be enabled in the ConfigHw stage */
119
120
121
122 /*FW events : FCS_ERROR and HEALTH_TEST_OK*/
123 pWhalCtrl->MacStatusCB_CB = whalCtrl_MacStatus_CB;
124 pWhalCtrl->MacStatusCB_CB_handle = pWhalCtrl;
125
126 eventMbox_RegisterEventCB(pWhalCtrl->hEventMbox, HAL_EVENT_MAC_STATUS, (void*)pWhalCtrl->MacStatusCB_CB, pWhalCtrl);
127 eventMbox_EvUnMask(pWhalCtrl->hEventMbox, HAL_EVENT_MAC_STATUS);
128
129
130 /* Register For Error Of Mailbox in case of timeout */
131 CmdQueue_RegisterForErrorCB(((TnetwDrv_t*)pWhalCtrl->hTNETW_Driver)->hCmdQueue, (void *)whalCtrl_CheckMailboxCb, hWhalCtrl);
132
133 #ifdef HW_ACCESS_SDIO
134 TNETWIF_RegisterBusFailureEventCB(((whalBus_T *)(pWhalCtrl->pHwCtrl->hWhalBus))->hTNETWIF,
135 (void *)whalCtrl_HealthReoprt_CB,pWhalCtrl);
136 #endif
137
138 return OK;
139 }
140
141 /*
142 * ----------------------------------------------------------------------------
143 * Function : whalCtrl_CheckHwStatus
144 *
145 * Input :
146 * Output :
147 * Process :
148 * CheckFcsError
149 * Test the register CONS_FCR_ERR value that came periodically in event
150 * Try to recover by setting RX_RESET
151 * Disable full recovery by StaDk_4.1 team !!!!!!!!!!!
152 * CheckMailbox
153 * Call interrogate (with callback) to StationId IE
154 * The callback is just for print
155 * There is no need for this trigger because of the event mechanizm
156 * CheckRxFreeMem
157 * Test the register RX_FREE_MEM value that came periodically in event
158 * CheckTxQueue
159 * Check the queue is not empty and no tx complete
160 * CheckRxQueue
161 * Disabled
162 *
163 * Note(s) : Done
164 * -----------------------------------------------------------------------------
165 */
whalCtrl_CheckHwStatus(TI_HANDLE hWhalCtrl)166 int whalCtrl_CheckHwStatus(TI_HANDLE hWhalCtrl)
167 {
168 WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
169
170 #if 0
171 WLAN_REPORT_FATAL_ERROR(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
172 ("whalCtrl_CheckHwStatus: Start test\n"));
173 #endif
174 /*
175 * Trigger the FW health test command and wait for results.
176 * -------------------------------------------------------
177 */
178 whal_hwCtrl_healthCheck(pWhalCtrl->pHwCtrl);
179
180 return OK;
181 }
182
183 /*
184 * ----------------------------------------------------------------------------
185 * Function : whalCtrl_RecoveryEnded
186 *
187 * Input :
188 * Output :
189 * Process :
190 * aanouce all the modules about the end of the recovery proccess.
191 * Note(s) : Done
192 * -----------------------------------------------------------------------------
193 */
whalCtrl_RecoveryEnded(TI_HANDLE hWhalCtrl)194 void whalCtrl_RecoveryEnded(TI_HANDLE hWhalCtrl)
195 {
196 WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
197
198 /*Change the State of the mboxQueue and the interrupt Module and
199 After recovery we should enable back all interrupts according to the last interrupt shadow mask*/
200 whalCtrl_exitFromInitMode(hWhalCtrl);
201
202 /*
203 Indicates the MboxQueue that Reconfig Ended in Order To Call the CallBacks
204 That Was saved before the recovery process started
205 */
206 CmdQueue_EndReconfig(((TnetwDrv_t*)pWhalCtrl->hTNETW_Driver)->hCmdQueue);
207
208 WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
209 ("whalCtrl_ReConfig: End (%d)\n", os_timeStampMs(pWhalCtrl->hOs)));
210 }
211
212
213 /*
214 * ----------------------------------------------------------------------------
215 * Function : whalCtrl_ReConfigCb
216 *
217 * Input :
218 * Output :
219 * Process :
220 * Do firmware download
221 * Run the firmware
222 * Configure stage (ConfigHw)
223 * Re-Join if needed
224 * Note(s) : Done
225 * -----------------------------------------------------------------------------
226 */
whalCtrl_ReConfigCb(TI_HANDLE hWhalCtrl,TI_STATUS status)227 static int whalCtrl_ReConfigCb (TI_HANDLE hWhalCtrl, TI_STATUS status)
228 {
229 WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
230 WlanParams_T *pWlanParams = whal_ParamsGetWlanParams (pWhalCtrl->pWhalParams);
231 whalParamInfo_t param;
232
233
234 if (status != OK)
235 {
236 WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
237 ("whalCtrl_ReConfig: whal_hwCtrl_ConfigHw failed\n"));
238 return NOK;
239 }
240
241 whalSecur_HwEncDecrEnable (pWhalCtrl->pWhalSecurity, 1);
242
243 /* Re-config roaming thresholds */
244 /* SNR */
245 whal_hwCtrl_SetSNRParams(pWhalCtrl->pHwCtrl, &pWhalCtrl->pWhalParams->WlanParams.roamTriggers);
246
247 /* RSSI */
248 whalCtrl_SetRSSIParamsCmd (pWhalCtrl, &pWhalCtrl->pWhalParams->WlanParams.roamTriggers);
249 /* Max consecutive NACK */
250 whalCtrl_SetMaxTxRetryParamsCmd (pWhalCtrl, &pWhalCtrl->pWhalParams->WlanParams.roamTriggers);
251 /* Out of sync */
252 whalCtrl_SetBssLossTsfThresholdParamsCmd (pWhalCtrl, &pWhalCtrl->pWhalParams->WlanParams.roamTriggers);
253
254
255 #ifdef DO_CALIBRATION_IN_DRIVER
256 /* Perform single calibration for APP scan usage. */
257 whalCtrl_sendRadioAction (pWhalCtrl, MANUAL_CALIB);
258 #endif /* DO_CALIBRATION_IN_DRIVER */
259
260 /* Join (use the local parameters), otherwise the core will reconnect */
261 if (pWlanParams->bJoin)
262 {
263 /* Set TxRatePolicy */
264 param.paramType = HAL_CTRL_TX_RATE_CLASS_PARAMS;
265 param.content.pTxRatePlicy = &pWhalCtrl->pWhalParams->BssInfoParams.TxRateClassParams;
266
267 whalCtrl_SetParam (pWhalCtrl->pHwCtrl, ¶m);
268
269 status = (TI_STATUS)whalCtrl_ReJoinBss (hWhalCtrl);
270 if (status != OK)
271 {
272 WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
273 ("whalCtrl_ReConfig: whalCtrl_ReJoinBss failed\n"));
274 return NOK;
275 }
276 whal_hwCtrl_AidSet (pWhalCtrl->pHwCtrl, pWhalCtrl->pWhalParams->WlanParams.Aid);
277
278 /* Slot time must be setting after doing join */
279 whal_hwCtrl_SetSlotTime (pWhalCtrl->pHwCtrl, (slotTime_e)pWhalCtrl->pWhalParams->WlanParams.SlotTime);
280
281 /* Re-config security keys, default key Id and encryption/decryption control to the FW */
282 if (whalSecur_KeysReconfig (pWhalCtrl->pWhalSecurity) != OK)
283 {
284 WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
285 ("whalCtrl_ReConfig: ## whalSecur_KeysReconfig failed\n"));
286 return NOK;
287 }
288 }
289
290 return OK;
291 }
292
293
294 /*
295 * ----------------------------------------------------------------------------
296 * Function : whalCtrl_ReConfig
297 *
298 * Input :
299 * Output :
300 * Process :
301 * Do firmware download
302 * Run the firmware
303 * Configure stage (ConfigHw)
304 * Re-Join if needed
305 * Note(s) : Done
306 * -----------------------------------------------------------------------------
307 */
whalCtrl_ReConfig(TI_HANDLE hWhalCtrl,int DoReJoin)308 int whalCtrl_ReConfig (TI_HANDLE hWhalCtrl, int DoReJoin)
309 {
310 WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
311 WlanParams_T *pWlanParams = whal_ParamsGetWlanParams (pWhalCtrl->pWhalParams);
312 int Stt;
313
314 if (!pWlanParams->RecoveryEnable)
315 {
316 WLAN_OS_REPORT(("Recovery is disabled in registry, abort recovery process\n"));
317 return OK;
318 }
319
320 #if 0
321 /* L.M. PATCH for card eject */
322 if (!whalBus_FwCtrl_isCardIn (pWhalCtrl->pHwCtrl->hWhalBus))
323 {
324 WLAN_REPORT_REPLY (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
325 ("whalCtrl_ReConfig: card was removed => not proceeding\n"));
326 return OK;
327 }
328 #endif/*_WINDOWS*/
329
330 /*
331 * Initiate the wlan hardware (FW download).
332 * -----------------------------------------
333 */
334 WLAN_REPORT_INFORMATION (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
335 ("whalCtrl_ReConfig: Start(%d)\n", os_timeStampMs (pWhalCtrl->hOs)));
336 Stt = whal_hwCtrl_Initiate (pWhalCtrl->pHwCtrl);
337 if (Stt != OK)
338 {
339 WLAN_REPORT_ERROR (pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
340 ("whalCtrl_ReConfig: whal_hwCtrl_Initiate failed\n"));
341 return NOK;
342 }
343
344 /* Configure the WLAN hardware */
345 Stt = whal_hwCtrl_ConfigHw (pWhalCtrl->pHwCtrl, (void *)whalCtrl_ReConfigCb, hWhalCtrl, TRUE);
346
347 return OK;
348 }
349
350
351 /*
352 * ----------------------------------------------------------------------------
353 * Function : whalCtrl_CheckMailboxCb
354 *
355 * Input :
356 * Output :
357 * Process :
358 * When the command mailbox queue identify mailbox error or timeout, it will call
359 * to this function to handle the error.
360 * Call the CORE callback with MBOX_FAILURE type to do the recovery
361 *
362 * Note(s) : Done
363 * -----------------------------------------------------------------------------
364 */
whalCtrl_CheckMailboxCb(TI_HANDLE hWhalCtrl,UINT16 MboxStatus,char * InterrogateParamsBuf)365 int whalCtrl_CheckMailboxCb(TI_HANDLE hWhalCtrl,UINT16 MboxStatus, char *InterrogateParamsBuf)
366 {
367
368 WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
369 whalCtrl_hwStatus_t *pHwStatus = &pWhalCtrl->pHwCtrl->HwStatus;
370
371 if(MboxStatus != OK)
372 {
373 ++pHwStatus->NumMboxFailures;
374 WLAN_REPORT_WARNING(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
375 ("whalCtrl_PeriodicCheckMailboxCb: Periodic intorregate check - Command mailbox failure was occur \n errors failure # %d "
376 ,pHwStatus->NumMboxFailures));
377
378 /* Indicating Upper Layer about Mbox Error */
379 pWhalCtrl->FailureEvent_CB(pWhalCtrl->FailureEvent_CB_handle,MBOX_FAILURE);
380 }
381
382 return OK;
383 }
384
385 /*
386 * ----------------------------------------------------------------------------
387 * Function : whalCtrl_MacStatus_CB
388 * : Callback from the EventMbox in case Mac status Event Occur
389 * Input :
390 * Output :
391 * Process :
392 * Note(s) : Done
393 * -----------------------------------------------------------------------------
394 */
whalCtrl_MacStatus_CB(TI_HANDLE hWhalCtrl,char * Status,UINT32 strLen)395 void whalCtrl_MacStatus_CB(TI_HANDLE hWhalCtrl, char* Status , UINT32 strLen)
396 {
397 WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
398 UINT32 currFcsCounter;
399
400
401 /* The FCS error is updated by the MacStatus event from the firmware */
402 currFcsCounter = (*(UINT32*)Status);
403
404 WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
405 ("whalCtrl_MacStatus_CB: Mac Status report currFcsCounter=%d LastConsFcsCounter=%d\n",
406 currFcsCounter));
407
408 /* This event shouldn't be received, so it is not passed on to anybody */
409 }
410
411 #define HEALTH_REPORT_DEVICE_ERROR_BIT BIT_0
412 #define HEALTH_REPORT_HOST2FW_SEQ_ERROR BIT_1
413
414
415 /*
416 * ----------------------------------------------------------------------------
417 * Function : whalCtrl_HealthReoprt_CB
418 * : Callback from the EventMbox in case HealthReport Event Occur
419 * Input :
420 * Output :
421 * Process :
422 * Note(s) : Done
423 * -----------------------------------------------------------------------------
424 */
425
whalCtrl_HealthReoprt_CB(TI_HANDLE hWhalCtrl,char * Report,UINT32 strLen)426 void whalCtrl_HealthReoprt_CB(TI_HANDLE hWhalCtrl, char* Report , UINT32 strLen)
427 {
428 WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
429 UINT16 HealthReport = *((UINT16*)Report);
430
431 if(HealthReport & HEALTH_REPORT_DEVICE_ERROR_BIT)
432 {
433 WLAN_REPORT_ERROR(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
434 ("whalCtrl_HealthReoprt_CB: Firmware reports about DEVICE_ERROR, handle by callback"));
435 /* Indicating Upper Layer about Device Error */
436 pWhalCtrl->FailureEvent_CB(pWhalCtrl->FailureEvent_CB_handle, DEVICE_ERROR);
437 }
438 else
439 if(HealthReport & HEALTH_REPORT_HOST2FW_SEQ_ERROR)
440 /* For USB Health Check */
441 {
442 WLAN_REPORT_ERROR(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
443 ("whalCtrl_HealthReoprt_CB: Firmware reports about HOST2FW_SEQ_ERROR"));
444 /* This shall invoke softice, if occure we will handle this case locally*/
445 /* ASSERT(0);*/
446 }
447 else
448 if (HealthReport & HEALTH_REPORT_BUS_ERROR)
449 {
450 WLAN_REPORT_ERROR(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
451 ("whalCtrl_HealthReoprt_CB: Low level bus driver reported bus error. Performing hardware reset of the bus\n"));
452
453 pWhalCtrl->FailureEvent_CB(pWhalCtrl->FailureEvent_CB_handle, BUS_ERROR);
454 }
455 else
456 {
457 WLAN_REPORT_ERROR(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,
458 ("whalCtrl_HealthReoprt_CB: UnKnown Health report ID 0x%x ", (int)HealthReport));
459 }
460 }
461
462 /*
463 * ----------------------------------------------------------------------------
464 * Function : whalCtrl_resetMacRx
465 *
466 * Input :
467 * Output :
468 * Process : Reset the Rx.
469 * Note(s) : Done
470 * -----------------------------------------------------------------------------
471 */
whalCtrl_resetMacRx(TI_HANDLE hWhalCtrl)472 int whalCtrl_resetMacRx (TI_HANDLE hWhalCtrl)
473 {
474 WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
475
476 WLAN_REPORT_ERROR(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,("whalCtrl_resetMacRx:\n"));
477
478 return whal_HwCtrl_resetMacRx (pWhalCtrl->pHwCtrl);
479 }
480
481 /*
482 * ----------------------------------------------------------------------------
483 * Function : whalCtrl_PrintHwStatus
484 *
485 * Input :
486 * Output :
487 * Process :
488 * Print the Recovery status
489 * Note(s) : Done
490 * -----------------------------------------------------------------------------
491 */
whalCtrl_PrintHwStatus(TI_HANDLE hWhalCtrl)492 int whalCtrl_PrintHwStatus(TI_HANDLE hWhalCtrl)
493 {
494 #ifdef REPORT_LOG
495
496 WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
497 whalCtrl_hwStatus_t *pHwStatus = &pWhalCtrl->pHwCtrl->HwStatus;
498
499 WLAN_OS_REPORT(("--------------- whalCtrl_PrintHwStatus ---------------\n\n"));
500 WLAN_OS_REPORT(("NumMboxErrDueToPeriodicBuiltInTestCheck = %d\n", pHwStatus->NumMboxErrDueToPeriodicBuiltInTestCheck));
501 WLAN_OS_REPORT(("NumMboxFailures = %d\n", pHwStatus->NumMboxFailures));
502
503 #endif
504
505 return OK;
506 }
507
508
509 /*
510 * ----------------------------------------------------------------------------
511 * Function : whalCtrl_ResetBusAfterHardBoot
512 *
513 * Input :
514 * Output :
515 * Process :
516 * Restart the buss access layer after hard boot.
517 * Note(s) : Done
518 * -----------------------------------------------------------------------------
519 */
whalCtrl_ResetBusAfterHardBoot(TI_HANDLE hWhalCtrl)520 void whalCtrl_ResetBusAfterHardBoot(TI_HANDLE hWhalCtrl)
521 {
522
523 #ifdef HW_ACCESS_SDIO
524 WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
525 whalBus_ReConfig( pWhalCtrl->hWhalBus );
526 #endif
527
528 }
529
530 #endif /* USE_RECOVERY */
531
532
533 /*
534 * ----------------------------------------------------------------------------
535 * Function : whalCtrl_LNAControl
536 *
537 * Input : LNAControlField, 0=> Turn Off , 1=> Turn On
538 * Output :
539 * Process :
540 * Call the mailbox (need to be called directly without HwCtrl)
541 * Note(s) : Done
542 * -----------------------------------------------------------------------------
543 */
whalCtrl_LNAControl(TI_HANDLE hWhalCtrl,UINT8 LNAControlField)544 int whalCtrl_LNAControl (TI_HANDLE hWhalCtrl, UINT8 LNAControlField)
545 {
546 WHAL_CTRL *pWhalCtrl = (WHAL_CTRL *)hWhalCtrl;
547
548 WLAN_REPORT_INFORMATION(pWhalCtrl->hReport, HAL_CTRL_MODULE_LOG,("whalCtrl_LNAControl: Set LAN to %d\n",LNAControlField));
549
550 return whal_HwCtrl_LNAControl (pWhalCtrl->pHwCtrl, LNAControlField);
551 }
552
553