Home | History | Annotate | Download | only in hl_ctrl
      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  */
    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  */
    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  */
    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  */
    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  */
    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  */
    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  */
    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 
    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  */
    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  */
    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  */
    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  */
    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