Home | History | Annotate | Download | only in Test
      1 /*
      2  * HealthMonitorDbg.c
      3  *
      4  * Copyright(c) 1998 - 2009 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 /** \file HealthMonitorDbg.c
     35  *  \brief This file include the HealthMonitordebug module implementation
     36  *  \
     37  *  \date 2-Apr-2006
     38  */
     39 
     40 #include "tidef.h"
     41 #include "MacServices.h"
     42 #include "ScanCncn.h"
     43 #include "scanCncnDbg.h"
     44 #include "healthMonitor.h"
     45 #include "ScanSrv.h"
     46 #include "ScanSrvSM.h"
     47 #include "TWDriver.h"
     48 #include "conn.h"
     49 #include "PowerSrv.h"
     50 #include "PowerSrvSM.h"
     51 #include "MacServices_api.h"
     52 #include "HealthMonitorDbg.h"
     53 #include "report.h"
     54 #include "timer.h"
     55 #include "DrvMain.h"
     56 #include "DrvMainModules.h"
     57 
     58 
     59 static void noScanCompleteTimer (TI_HANDLE hTWD);
     60 
     61 
     62 /** \file HealthMonitorDbg.c
     63  *  \
     64  *  \date 2-Apr-2006
     65  * \brief Main Recovery debug function
     66  *
     67  * Function Scope \e Public.\n
     68  * \param pStadHandles - modules handles list.\n
     69  * \param funcType       - the specific debug function.\n
     70  * \param pParam         - parameters for the debug function.\n
     71  */
     72 void healthMonitorDebugFunction (TStadHandlesList *pStadHandles, TI_UINT32 funcType, void *pParam)
     73 {
     74     TI_HANDLE       hHealthMonitor  = pStadHandles->hHealthMonitor;
     75     TI_HANDLE       hTWD            = pStadHandles->hTWD;
     76     MacServices_t  *pMacServices    = ((TTwd *)hTWD)->hMacServices;
     77     TI_HANDLE       hMeasurementSRV = pMacServices->hMeasurementSRV;
     78     scanSRV_t      *pScanSRV        = (scanSRV_t *)pMacServices->hScanSRV;
     79     PowerSrvSM_t   *pPowerSrvSM     = (PowerSrvSM_t*)((powerSrv_t*)pMacServices->hPowerSrv)->hPowerSrvSM;
     80 
     81     switch (funcType)
     82     {
     83     case DBG_HM_PRINT_HELP:
     84         printHealthMonitorDbgFunctions();
     85         break;
     86 
     87     case DBG_HM_RECOVERY_NO_SCAN_COMPLETE:
     88         /* check if the no scan complete timer is running. if so - we can stop the timer and trigger recovery */
     89         if (pScanSRV->bTimerRunning)
     90         {
     91             /* perform the recovery directly */
     92             noScanCompleteTimer (hTWD);
     93         }
     94         else /* scan Srv is probably entering/exiting PowerSave. We won't handle this case since it happens rarely */
     95         {
     96             WLAN_OS_REPORT(("Scan isn't running at the moment, so try again (make sure it is enabled)\n"));
     97         }
     98         break;
     99 
    100     case DBG_HM_RECOVERY_MBOX_FAILURE:
    101         TWD_CheckMailboxCb (hTWD, TI_NOK, NULL);
    102         break;
    103 
    104     case DBG_HM_RECOVERY_HW_AWAKE_FAILURE:
    105         healthMonitor_sendFailureEvent (hHealthMonitor, HW_AWAKE_FAILURE);
    106         break;
    107 
    108     case DBG_HM_RECOVERY_TX_STUCK:
    109         healthMonitor_sendFailureEvent (hHealthMonitor, TX_STUCK);
    110         break;
    111 
    112     case DBG_HM_DISCONNECT_TIMEOUT:
    113         healthMonitor_sendFailureEvent (hHealthMonitor, DISCONNECT_TIMEOUT);
    114         break;
    115 
    116     case DBG_HM_RECOVERY_POWER_SAVE_FAILURE:
    117         tmr_StopTimer (pPowerSrvSM->hPwrSrvSmTimer);  /* stop the PS guard timer */
    118         healthMonitor_sendFailureEvent (hHealthMonitor, POWER_SAVE_FAILURE);
    119         break;
    120 
    121     case DBG_HM_RECOVERY_MEASUREMENT_FAILURE:
    122         MacServices_measurementSRV_startStopTimerExpired (hMeasurementSRV, TI_FALSE);
    123         break;
    124 
    125     case DBG_HM_RECOVERY_BUS_FAILURE:
    126         healthMonitor_sendFailureEvent (hHealthMonitor, BUS_FAILURE);
    127         break;
    128 
    129     case DBG_HM_RECOVERY_FROM_CLI:
    130         drvMain_Recovery (pStadHandles->hDrvMain);
    131         break;
    132 
    133 	case DBG_HM_RECOVERY_FROM_HW_WD_EXPIRE:
    134         healthMonitor_sendFailureEvent (hHealthMonitor, HW_WD_EXPIRE);
    135         break;
    136 
    137 	case DBG_HM_RECOVERY_RX_XFER_FAILURE:
    138         healthMonitor_sendFailureEvent (hHealthMonitor, RX_XFER_FAILURE);
    139         break;
    140 
    141     default:
    142         WLAN_OS_REPORT(("Invalid function type in health monitor debug function: %d\n", funcType));
    143         break;
    144     }
    145 }
    146 
    147 
    148 /** \file HealthMonitorDbg.c
    149  *  \
    150  *  \date 2-Apr-2006
    151  * \brief Prints Recovery debug menu
    152  *
    153  * Function Scope \e Public.\n
    154  */
    155 void printHealthMonitorDbgFunctions(void)
    156 {
    157     WLAN_OS_REPORT(("   HealthMonitor Debug Functions       \n"));
    158     WLAN_OS_REPORT(("---------------------------------------\n"));
    159     WLAN_OS_REPORT(("2000 - Print HealthMonitor Debug Help  \n"));
    160     WLAN_OS_REPORT(("2001 - Trigger NO_SCAN_COMPLETE        \n"));
    161     WLAN_OS_REPORT(("2002 - Trigger MBOX_FAILURE            \n"));
    162     WLAN_OS_REPORT(("2003 - Trigger HW_AWAKE_FAILURE        \n"));
    163     WLAN_OS_REPORT(("2004 - Trigger TX_STUCK                \n"));
    164     WLAN_OS_REPORT(("2005 - Trigger DISCONNECT_TIMEOUT      \n"));
    165     WLAN_OS_REPORT(("2006 - Trigger POWER_SAVE_FAILURE      \n"));
    166     WLAN_OS_REPORT(("2007 - Trigger MEASUREMENT_FAILURE     \n"));
    167     WLAN_OS_REPORT(("2008 - Trigger BUS_FAILURE             \n"));
    168     WLAN_OS_REPORT(("2009 - Start RECOVERY_FROM_CLI         \n"));
    169     WLAN_OS_REPORT(("2010 - Trigger HW_WD_EXPIRE            \n"));
    170     WLAN_OS_REPORT(("2011 - Trigger RX_XFER_FAILURE         \n"));
    171 }
    172 
    173 static void noScanCompleteTimer (TI_HANDLE hTWD)
    174 {
    175     MacServices_t *pMacServices = ((TTwd *)hTWD)->hMacServices;
    176     scanSRV_t     *pScanSRV     = (scanSRV_t *)pMacServices->hScanSRV;
    177 
    178 
    179     /* stop the no scan complete timer in the scan SRV */
    180     tmr_StopTimer (pScanSRV->hScanSrvTimer);
    181     pScanSRV->bTimerRunning = TI_FALSE;
    182 
    183     /* simulate the timer expiry */
    184     MacServices_scanSRV_scanTimerExpired ((TI_HANDLE)pScanSRV, TI_FALSE);
    185 }
    186