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