• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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, &param);
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