/*
* HealthMonitorDbg.c
*
* Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name Texas Instruments nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/** \file HealthMonitorDbg.c
* \brief This file include the HealthMonitordebug module implementation
* \
* \date 2-Apr-2006
*/
#include "tidef.h"
#include "MacServices.h"
#include "ScanCncn.h"
#include "scanCncnDbg.h"
#include "healthMonitor.h"
#include "ScanSrv.h"
#include "ScanSrvSM.h"
#include "TWDriver.h"
#include "conn.h"
#include "PowerSrv.h"
#include "PowerSrvSM.h"
#include "MacServices_api.h"
#include "HealthMonitorDbg.h"
#include "report.h"
#include "timer.h"
#include "DrvMain.h"
#include "DrvMainModules.h"
static void noScanCompleteTimer (TI_HANDLE hTWD);
/** \file HealthMonitorDbg.c
* \
* \date 2-Apr-2006
* \brief Main Recovery debug function
*
* Function Scope \e Public.\n
* \param pStadHandles - modules handles list.\n
* \param funcType - the specific debug function.\n
* \param pParam - parameters for the debug function.\n
*/
void healthMonitorDebugFunction (TStadHandlesList *pStadHandles, TI_UINT32 funcType, void *pParam)
{
TI_HANDLE hHealthMonitor = pStadHandles->hHealthMonitor;
TI_HANDLE hTWD = pStadHandles->hTWD;
MacServices_t *pMacServices = ((TTwd *)hTWD)->hMacServices;
TI_HANDLE hMeasurementSRV = pMacServices->hMeasurementSRV;
scanSRV_t *pScanSRV = (scanSRV_t *)pMacServices->hScanSRV;
PowerSrvSM_t *pPowerSrvSM = (PowerSrvSM_t*)((powerSrv_t*)pMacServices->hPowerSrv)->hPowerSrvSM;
switch (funcType)
{
case DBG_HM_PRINT_HELP:
printHealthMonitorDbgFunctions();
break;
case DBG_HM_RECOVERY_NO_SCAN_COMPLETE:
/* check if the no scan complete timer is running. if so - we can stop the timer and trigger recovery */
if (pScanSRV->bTimerRunning)
{
/* perform the recovery directly */
noScanCompleteTimer (hTWD);
}
else /* scan Srv is probably entering/exiting PowerSave. We won't handle this case since it happens rarely */
{
WLAN_OS_REPORT(("Scan isn't running at the moment, so try again (make sure it is enabled)\n"));
}
break;
case DBG_HM_RECOVERY_MBOX_FAILURE:
TWD_CheckMailboxCb (hTWD, TI_NOK, NULL);
break;
case DBG_HM_RECOVERY_HW_AWAKE_FAILURE:
healthMonitor_sendFailureEvent (hHealthMonitor, HW_AWAKE_FAILURE);
break;
case DBG_HM_RECOVERY_TX_STUCK:
healthMonitor_sendFailureEvent (hHealthMonitor, TX_STUCK);
break;
case DBG_HM_DISCONNECT_TIMEOUT:
healthMonitor_sendFailureEvent (hHealthMonitor, DISCONNECT_TIMEOUT);
break;
case DBG_HM_RECOVERY_POWER_SAVE_FAILURE:
tmr_StopTimer (pPowerSrvSM->hPwrSrvSmTimer); /* stop the PS guard timer */
healthMonitor_sendFailureEvent (hHealthMonitor, POWER_SAVE_FAILURE);
break;
case DBG_HM_RECOVERY_MEASUREMENT_FAILURE:
MacServices_measurementSRV_startStopTimerExpired (hMeasurementSRV, TI_FALSE);
break;
case DBG_HM_RECOVERY_BUS_FAILURE:
healthMonitor_sendFailureEvent (hHealthMonitor, BUS_FAILURE);
break;
case DBG_HM_RECOVERY_FROM_CLI:
drvMain_Recovery (pStadHandles->hDrvMain);
break;
case DBG_HM_RECOVERY_FROM_HW_WD_EXPIRE:
healthMonitor_sendFailureEvent (hHealthMonitor, HW_WD_EXPIRE);
break;
case DBG_HM_RECOVERY_RX_XFER_FAILURE:
healthMonitor_sendFailureEvent (hHealthMonitor, RX_XFER_FAILURE);
break;
default:
WLAN_OS_REPORT(("Invalid function type in health monitor debug function: %d\n", funcType));
break;
}
}
/** \file HealthMonitorDbg.c
* \
* \date 2-Apr-2006
* \brief Prints Recovery debug menu
*
* Function Scope \e Public.\n
*/
void printHealthMonitorDbgFunctions(void)
{
WLAN_OS_REPORT((" HealthMonitor Debug Functions \n"));
WLAN_OS_REPORT(("---------------------------------------\n"));
WLAN_OS_REPORT(("2000 - Print HealthMonitor Debug Help \n"));
WLAN_OS_REPORT(("2001 - Trigger NO_SCAN_COMPLETE \n"));
WLAN_OS_REPORT(("2002 - Trigger MBOX_FAILURE \n"));
WLAN_OS_REPORT(("2003 - Trigger HW_AWAKE_FAILURE \n"));
WLAN_OS_REPORT(("2004 - Trigger TX_STUCK \n"));
WLAN_OS_REPORT(("2005 - Trigger DISCONNECT_TIMEOUT \n"));
WLAN_OS_REPORT(("2006 - Trigger POWER_SAVE_FAILURE \n"));
WLAN_OS_REPORT(("2007 - Trigger MEASUREMENT_FAILURE \n"));
WLAN_OS_REPORT(("2008 - Trigger BUS_FAILURE \n"));
WLAN_OS_REPORT(("2009 - Start RECOVERY_FROM_CLI \n"));
WLAN_OS_REPORT(("2010 - Trigger HW_WD_EXPIRE \n"));
WLAN_OS_REPORT(("2011 - Trigger RX_XFER_FAILURE \n"));
}
static void noScanCompleteTimer (TI_HANDLE hTWD)
{
MacServices_t *pMacServices = ((TTwd *)hTWD)->hMacServices;
scanSRV_t *pScanSRV = (scanSRV_t *)pMacServices->hScanSRV;
/* stop the no scan complete timer in the scan SRV */
tmr_StopTimer (pScanSRV->hScanSrvTimer);
pScanSRV->bTimerRunning = TI_FALSE;
/* simulate the timer expiry */
MacServices_scanSRV_scanTimerExpired ((TI_HANDLE)pScanSRV, TI_FALSE);
}