diff options
Diffstat (limited to 'wl1271/stad/src/Sta_Management/PowerMgr.c')
-rw-r--r-- | wl1271/stad/src/Sta_Management/PowerMgr.c | 1410 |
1 files changed, 0 insertions, 1410 deletions
diff --git a/wl1271/stad/src/Sta_Management/PowerMgr.c b/wl1271/stad/src/Sta_Management/PowerMgr.c deleted file mode 100644 index 117820c..0000000 --- a/wl1271/stad/src/Sta_Management/PowerMgr.c +++ /dev/null @@ -1,1410 +0,0 @@ -/* - * PowerMgr.c - * - * Copyright(c) 1998 - 2010 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 PowerMgr.c - * \brief This is the PowerMgr module implementation. - * \ - * \date 24-Oct-2005 - */ - -/**************************************************************************** - * * - * MODULE: PowerMgr * - * PURPOSE: PowerMgr Module implementation. * - * * - ****************************************************************************/ - -#define __FILE_ID__ FILE_ID_71 -#include "tidef.h" -#include "osApi.h" -#include "timer.h" -#include "paramOut.h" -#include "report.h" -#include "PowerMgr.h" -#include "PowerMgr_API.h" -#include "TrafficMonitorAPI.h" -#include "qosMngr_API.h" -#include "siteMgrApi.h" -#include "TWDriver.h" -#include "SoftGeminiApi.h" -#include "DrvMainModules.h" -#include "PowerMgrKeepAlive.h" -#include "CmdBld.h" - - -/***************************************************************************** - ** Defines ** - *****************************************************************************/ -#define DEFAULT_LISTEN_INTERVAL (1) -#define BET_DISABLE 0 -#define BET_ENABLE 1 - - -/***************************************************************************** - ** Private Function prototypes ** - *****************************************************************************/ - -static void powerSaveCompleteCB(TI_HANDLE hPowerMgr,TI_UINT8 PSMode,TI_UINT8 transStatus); -static void PowerMgrTMThresholdCrossCB( TI_HANDLE hPowerMgr, TI_UINT32 cookie ); -static void powerMgrDisableThresholdsIndications(TI_HANDLE hPowerMgr); -static void powerMgrEnableThresholdsIndications(TI_HANDLE hPowerMgr); -static void powerMgrStartAutoPowerMode(TI_HANDLE hPowerMgr); -static void powerMgrRetryPsTimeout(TI_HANDLE hPowerMgr, TI_BOOL bTwdInitOccured); -static void powerMgrPowerProfileConfiguration(TI_HANDLE hPowerMgr, PowerMgr_PowerMode_e desiredPowerMode); -static void PowerMgr_setDozeModeInAuto(TI_HANDLE hPowerMgr,PowerMgr_PowerMode_e dozeMode); -static void PowerMgrConfigBetToFw( TI_HANDLE hPowerMgr, TI_UINT32 cookie ); -static void PowerMgr_PsPollFailureCB( TI_HANDLE hPowerMgr ); -static void powerMgr_PsPollFailureTimeout( TI_HANDLE hPowerMgr, TI_BOOL bTwdInitOccured ); -static void powerMgr_SGSetUserDesiredwakeUpCond( TI_HANDLE hPowerMgr ); -static TI_STATUS powerMgrSendMBXWakeUpConditions(TI_HANDLE hPowerMgr,TI_UINT8 listenInterval, ETnetWakeOn tnetWakeupOn); -static TI_STATUS powerMgrNullPacketRateConfiguration(TI_HANDLE hPowerMgr); -static PowerMgr_PowerMode_e powerMgrGetHighestPriority(TI_HANDLE hPowerMgr); - - -/***************************************************************************** - ** Public Function prototypes ** - *****************************************************************************/ - - -/**************************************************************************************** - * PowerMgr_create * - **************************************************************************************** -DESCRIPTION: Creates the object of the power Manager. - performs the following: - - Allocate the Power Manager handle - - Creates the retry timer - -INPUT: - hOs - Handle to OS -OUTPUT: -RETURN: Handle to the Power Manager module on success, NULL otherwise -****************************************************************************************/ -TI_HANDLE PowerMgr_create(TI_HANDLE hOs) -{ - - PowerMgr_t * pPowerMgr = NULL; - pPowerMgr = (PowerMgr_t*) os_memoryAlloc (hOs, sizeof(PowerMgr_t)); - if ( pPowerMgr == NULL ) - { - WLAN_OS_REPORT(("PowerMgr_create - Memory Allocation Error!\n")); - return NULL; - } - - os_memoryZero (hOs, pPowerMgr, sizeof(PowerMgr_t)); - - pPowerMgr->hOS = hOs; - - /* create the power manager keep-alive sub module */ - pPowerMgr->hPowerMgrKeepAlive = powerMgrKL_create (hOs); - - return pPowerMgr; - -} - - -/**************************************************************************************** -* powerSrv_destroy * -**************************************************************************************** -DESCRIPTION: Destroy the object of the power Manager. - - delete Power Manager alocation - - call the destroy function of the timer - -INPUT: - hPowerMgr - Handle to the Power Manager -OUTPUT: -RETURN: TI_STATUS - TI_OK on success else TI_NOK. -****************************************************************************************/ -TI_STATUS PowerMgr_destroy(TI_HANDLE hPowerMgr) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - - /* destroy the power manager keep-alive sub module */ - powerMgrKL_destroy (pPowerMgr->hPowerMgrKeepAlive); - - if (pPowerMgr->hRetryPsTimer) - { - tmr_DestroyTimer (pPowerMgr->hRetryPsTimer); - } - - if ( pPowerMgr->hPsPollFailureTimer != NULL ) - { - tmr_DestroyTimer(pPowerMgr->hPsPollFailureTimer); - } - os_memoryFree(pPowerMgr->hOS, pPowerMgr, sizeof(PowerMgr_t)); - - return TI_OK; -} - - -/**************************************************************************************** -* PowerMgr_init * -**************************************************************************************** -DESCRIPTION: Power Manager init function, called in init phase. - -INPUT: pStadHandles - The driver modules handles - -OUTPUT: - -RETURN: void -****************************************************************************************/ -void PowerMgr_init (TStadHandlesList *pStadHandles) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)(pStadHandles->hPowerMgr); - - pPowerMgr->hReport = pStadHandles->hReport; - pPowerMgr->hTrafficMonitor = pStadHandles->hTrafficMon; - pPowerMgr->hSiteMgr = pStadHandles->hSiteMgr; - pPowerMgr->hTWD = pStadHandles->hTWD; - pPowerMgr->hSoftGemini = pStadHandles->hSoftGemini; - pPowerMgr->hTimer = pStadHandles->hTimer; - pPowerMgr->psEnable = TI_FALSE; - - /* initialize the power manager keep-alive sub module */ - powerMgrKL_init (pPowerMgr->hPowerMgrKeepAlive, pStadHandles); - -} - - -TI_STATUS PowerMgr_SetDefaults (TI_HANDLE hPowerMgr, PowerMgrInitParams_t* pPowerMgrInitParams) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - TI_UINT8 index; - /* used to initialize the Traffic Monitor for Auto Ps events */ - TrafficAlertRegParm_t tmRegParam; - TI_STATUS status; - - pPowerMgr->reAuthActivePriority = pPowerMgrInitParams->reAuthActivePriority; - - /* init power management options */ - pPowerMgr->beaconListenInterval = pPowerMgrInitParams->beaconListenInterval; - pPowerMgr->dtimListenInterval = pPowerMgrInitParams->dtimListenInterval; - pPowerMgr->defaultPowerLevel = pPowerMgrInitParams->defaultPowerLevel; - pPowerMgr->PowerSavePowerLevel = pPowerMgrInitParams->PowerSavePowerLevel; - pPowerMgr->powerMngPriority = POWER_MANAGER_USER_PRIORITY; - pPowerMgr->maxFullBeaconInterval = pPowerMgrInitParams->MaximalFullBeaconReceptionInterval; - pPowerMgr->PsPollDeliveryFailureRecoveryPeriod = pPowerMgrInitParams->PsPollDeliveryFailureRecoveryPeriod; - - /* - set AUTO PS parameters - */ - pPowerMgr->autoModeInterval = pPowerMgrInitParams->autoModeInterval; - pPowerMgr->autoModeActiveTH = pPowerMgrInitParams->autoModeActiveTH; - pPowerMgr->autoModeDozeTH = pPowerMgrInitParams->autoModeDozeTH; - pPowerMgr->autoModeDozeMode = pPowerMgrInitParams->autoModeDozeMode; - - /* - register threshold in the traffic monitor. - */ - pPowerMgr->betEnable = pPowerMgrInitParams->BetEnable; /* save BET enable flag for CLI configuration */ - pPowerMgr->betTrafficEnable = TI_FALSE; /* starting without BET */ - - /* BET thresholds */ - /* general parameters */ - tmRegParam.Context = pPowerMgr; - tmRegParam.TimeIntervalMs = BET_INTERVAL_VALUE; - tmRegParam.Trigger = TRAFF_EDGE; - tmRegParam.MonitorType = TX_RX_ALL_802_11_DATA_FRAMES; - tmRegParam.CallBack = PowerMgrConfigBetToFw; - - /* BET enable event */ - tmRegParam.Direction = TRAFF_DOWN; - tmRegParam.Threshold = pPowerMgrInitParams->BetEnableThreshold; - pPowerMgr->BetEnableThreshold = pPowerMgrInitParams->BetEnableThreshold; - tmRegParam.Cookie = (TI_UINT32)BET_ENABLE; - pPowerMgr->betEnableTMEvent = TrafficMonitor_RegEvent (pPowerMgr->hTrafficMonitor, - &tmRegParam, - TI_FALSE); - /* BET disable event */ - tmRegParam.Direction = TRAFF_UP; - tmRegParam.Threshold = pPowerMgrInitParams->BetDisableThreshold; - pPowerMgr->BetDisableThreshold = pPowerMgrInitParams->BetDisableThreshold; - tmRegParam.Cookie = (TI_UINT32)BET_DISABLE; - pPowerMgr->betDisableTMEvent = TrafficMonitor_RegEvent (pPowerMgr->hTrafficMonitor, - &tmRegParam, - TI_FALSE); - - if ( (pPowerMgr->betDisableTMEvent == NULL) || - (pPowerMgr->betEnableTMEvent == NULL)) - { - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_INIT, "PowerMgr_init - TM - ERROR registering BET events - ABROTING init!\n"); - return TI_NOK; - } - /* - set the events as resets for one another - */ - status = TrafficMonitor_SetRstCondition (pPowerMgr->hTrafficMonitor, - pPowerMgr->betDisableTMEvent, - pPowerMgr->betEnableTMEvent, - TI_TRUE); - if ( status != TI_OK ) - { - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_INIT, "PowerMgr_init - PowerMgr_init - ERROR binding BET events - ABROTING init!\n"); - return TI_NOK; - } - - /* general parameters */ - tmRegParam.Context = pPowerMgr; - - tmRegParam.Cookie = (TI_UINT32)POWER_MODE_ACTIVE; - tmRegParam.TimeIntervalMs = pPowerMgr->autoModeInterval; - tmRegParam.Trigger = TRAFF_EDGE; - tmRegParam.MonitorType = TX_RX_ALL_802_11_DATA_FRAMES; - - /* Active threshold */ - tmRegParam.CallBack = PowerMgrTMThresholdCrossCB; - tmRegParam.Direction = TRAFF_UP; - tmRegParam.Threshold = pPowerMgr->autoModeActiveTH; - pPowerMgr->passToActiveTMEvent = TrafficMonitor_RegEvent (pPowerMgr->hTrafficMonitor, - &tmRegParam, - TI_FALSE); - /* Doze threshold */ - tmRegParam.Direction = TRAFF_DOWN; - tmRegParam.Threshold = pPowerMgr->autoModeDozeTH; - tmRegParam.Cookie = (TI_UINT32)POWER_MODE_SHORT_DOZE; /* diffrentiation between long / short doze is done at the - CB, according to configuration at time of CB invokation */ - pPowerMgr->passToDozeTMEvent = TrafficMonitor_RegEvent (pPowerMgr->hTrafficMonitor, - &tmRegParam, - TI_FALSE); - - if ( (pPowerMgr->passToActiveTMEvent == NULL) || - (pPowerMgr->passToDozeTMEvent == NULL)) - { - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_INIT, "PowerMgr_init - PowerMgr_init - ERROR registering Auto mode events - ABROTING init!\n"); - return TI_NOK; - } - - /* - set the events as resets for one another - */ - status = TrafficMonitor_SetRstCondition (pPowerMgr->hTrafficMonitor, - pPowerMgr->passToActiveTMEvent, - pPowerMgr->passToDozeTMEvent, - TI_TRUE); - if ( status != TI_OK ) - { - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_INIT, "PowerMgr_init - PowerMgr_init - ERROR binding Auto mode events - ABROTING init!\n"); - return TI_NOK; - } - - /* - configure the initialize power mode - */ - pPowerMgr->desiredPowerModeProfile = pPowerMgrInitParams->powerMode; - for ( index = 0;index < POWER_MANAGER_MAX_PRIORITY;index++ ) - { - pPowerMgr->powerMngModePriority[index].powerMode = pPowerMgr->desiredPowerModeProfile; - pPowerMgr->powerMngModePriority[index].priorityEnable = TI_FALSE; - } - pPowerMgr->powerMngModePriority[POWER_MANAGER_USER_PRIORITY].priorityEnable = TI_TRUE; - - if (pPowerMgr->reAuthActivePriority) - pPowerMgr->powerMngModePriority[POWER_MANAGER_REAUTH_PRIORITY].powerMode = POWER_MODE_ACTIVE; - - /* set the defualt power policy */ - TWD_CfgSleepAuth (pPowerMgr->hTWD, pPowerMgr->defaultPowerLevel); - - - /*create the timers */ - pPowerMgr->hRetryPsTimer = tmr_CreateTimer(pPowerMgr->hTimer); - - pPowerMgr->hPsPollFailureTimer = tmr_CreateTimer(pPowerMgr->hTimer); - - if ( (pPowerMgr->hPsPollFailureTimer == NULL) || (pPowerMgr->hRetryPsTimer == NULL)) - { -TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_INIT, "PowerMgr_SetDefaults - ERROR creating timers - ABROTING init!\n"); - return TI_NOK; - } - - /* Register and Enable the PsPoll failure */ - TWD_RegisterEvent (pPowerMgr->hTWD, - TWD_OWN_EVENT_PSPOLL_DELIVERY_FAILURE, - (void *)PowerMgr_PsPollFailureCB, - hPowerMgr); - TWD_EnableEvent (pPowerMgr->hTWD, TWD_OWN_EVENT_PSPOLL_DELIVERY_FAILURE); - - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_INIT, "PowerMgr_init - PowerMgr Initialized\n"); - - /* set defaults for the power manager keep-alive sub module */ - powerMgrKL_setDefaults (pPowerMgr->hPowerMgrKeepAlive); - - return TI_OK; -} - -/**************************************************************************************** - * PowerMgr_startPS * - **************************************************************************************** -DESCRIPTION: Start the power save algorithm of the driver and also the 802.11 PS. - -INPUT: - hPowerMgr - Handle to the Power Manager - -OUTPUT: -RETURN: TI_STATUS - TI_OK or PENDING on success else TI_NOK.\n -****************************************************************************************/ -TI_STATUS PowerMgr_startPS(TI_HANDLE hPowerMgr) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - int frameCount; - - - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, "PowerMgr_startPS - called\n"); - - if ( pPowerMgr->psEnable == TI_TRUE ) - { - TRACE1(pPowerMgr->hReport, REPORT_SEVERITY_ERROR, "PowerMgr_startPS - PS mechanism is already Enable! Aborting psEnable=%d !\n", pPowerMgr->psEnable); - /* - this is a FATAL ERROR of the power manager! - already enable power-save! thus return TI_OK, but there is an error in the upper - layer that call tp PowerMgr_startPS() twice - should know that power-save - is already enable therefor print the Error message. - or - the state machine while NOT in PS can be only in ACTIVE state and in some cases in - PS_PENDING state. therefore the state machine is out of sync from it logic! - */ - return TI_OK; - } - - pPowerMgr->psEnable = TI_TRUE; - /*set the correct rate after connection*/ - powerMgrNullPacketRateConfiguration(hPowerMgr); - /* - if in auto mode then need to refer to the threshold cross indication from the traffic monitor, - else it need to refer to the configured power mode profile from the user. - */ - pPowerMgr->desiredPowerModeProfile = powerMgrGetHighestPriority(hPowerMgr); - - if ( pPowerMgr->desiredPowerModeProfile == POWER_MODE_AUTO ) - { - powerMgrStartAutoPowerMode(hPowerMgr); - } - else /*not auto mode - according to the current profle*/ - { - powerMgrPowerProfileConfiguration(hPowerMgr, pPowerMgr->desiredPowerModeProfile); - } - - TWD_CfgSleepAuth (pPowerMgr->hTWD, pPowerMgr->PowerSavePowerLevel); - - if ((pPowerMgr->betEnable)&&( pPowerMgr->desiredPowerModeProfile != POWER_MODE_ACTIVE )) - { - TrafficMonitor_StartEventNotif(pPowerMgr->hTrafficMonitor, - pPowerMgr->betEnableTMEvent); - - TrafficMonitor_StartEventNotif(pPowerMgr->hTrafficMonitor, - pPowerMgr->betDisableTMEvent); - - - frameCount = TrafficMonitor_GetFrameBandwidth(pPowerMgr->hTrafficMonitor); - - if (frameCount < pPowerMgr->BetEnableThreshold) - { - pPowerMgr->betTrafficEnable = TI_TRUE; - - } - else if (frameCount > pPowerMgr->BetDisableThreshold) - { - pPowerMgr->betTrafficEnable = TI_FALSE; - } - - PowerMgrConfigBetToFw(hPowerMgr,pPowerMgr->betTrafficEnable); - } - - /* also start the power manager keep-alive sub module */ - powerMgrKL_start (pPowerMgr->hPowerMgrKeepAlive); - - return TI_OK; -} - - -/**************************************************************************************** - * PowerMgr_stopPS * - **************************************************************************************** -DESCRIPTION: Stop the power save algorithm of the driver and also the 802.11 PS. - -INPUT: - hPowerMgr - Handle to the Power Manager - -OUTPUT: -RETURN: TI_STATUS - TI_OK or PENDING on success else TI_NOK.\n -****************************************************************************************/ -TI_STATUS PowerMgr_stopPS(TI_HANDLE hPowerMgr, TI_BOOL bDisconnect) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - /*TI_STATUS status;*/ - - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, "PowerMgr_stopPS - called\n"); - - if ( pPowerMgr->psEnable == TI_FALSE ) - { - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, "PowerMgr_stopPS - PS is already Disable! Aborting!\n"); - /* - Print Info message incase callng PowerMgr_stopPS() more than once in a row, without - calling to PowerMgr_startPS() in the middle. - this will return with TI_OK and not doing the Stop action! - */ - return TI_OK; - } - - pPowerMgr->psEnable = TI_FALSE; - tmr_StopTimer (pPowerMgr->hRetryPsTimer); - - /* Check if PsPoll work-around is currently enabled */ - if ( pPowerMgr->powerMngModePriority[POWER_MANAGER_PS_POLL_FAILURE_PRIORITY].priorityEnable == TI_TRUE) - { - tmr_StopTimer(pPowerMgr->hPsPollFailureTimer); - /* Exit the PsPoll work-around */ - powerMgr_PsPollFailureTimeout( hPowerMgr, TI_FALSE ); - } - - if ( pPowerMgr->desiredPowerModeProfile == POWER_MODE_AUTO ) - { - powerMgrDisableThresholdsIndications(hPowerMgr); - } - - TWD_SetPsMode (pPowerMgr->hTWD, POWER_SAVE_OFF, TI_FALSE, NULL, NULL, NULL); - - /* set the power policy of the system */ - TWD_CfgSleepAuth (pPowerMgr->hTWD, pPowerMgr->defaultPowerLevel); - if ((pPowerMgr->betEnable)&&( pPowerMgr->desiredPowerModeProfile != POWER_MODE_ACTIVE )) - { - TrafficMonitor_StopEventNotif(pPowerMgr->hTrafficMonitor, - pPowerMgr->betEnableTMEvent); - - TrafficMonitor_StopEventNotif(pPowerMgr->hTrafficMonitor, - pPowerMgr->betDisableTMEvent); - } - - /* also stop the power manager keep-alive sub module */ - powerMgrKL_stop (pPowerMgr->hPowerMgrKeepAlive, bDisconnect); - - return TI_OK; -} - - -/**************************************************************************************** - * PowerMgr_getPsStatus * - **************************************************************************************** -DESCRIPTION: returns the 802.11 power save status (enable / disable). - -INPUT: - hPowerMgr - Handle to the Power Manager - -OUTPUT: -RETURN: TI_BOOL - TI_TRUE if enable else TI_FALSE.\n -****************************************************************************************/ -TI_BOOL PowerMgr_getPsStatus(TI_HANDLE hPowerMgr) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - - return TWD_GetPsStatus (pPowerMgr->hTWD); -} - - -/**************************************************************************************** - * PowerMgr_setPowerMode * - **************************************************************************************** -DESCRIPTION: Configure of the PowerMode profile (auto / active / short doze / long doze). - -INPUT: - hPowerMgr - Handle to the Power Manager - - thePowerMode - the requested power mode (auto / active / short doze / long doze). -OUTPUT: -RETURN: TI_STATUS - TI_OK on success else TI_NOK.\n -****************************************************************************************/ -TI_STATUS PowerMgr_setPowerMode(TI_HANDLE hPowerMgr) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - PowerMgr_PowerMode_e powerMode; - - /*in this way we will run with the highest priority that is enabled*/ - powerMode = powerMgrGetHighestPriority(hPowerMgr); - - /* sanity checking */ - if ( powerMode >= POWER_MODE_MAX) - { - TRACE1(pPowerMgr->hReport, REPORT_SEVERITY_ERROR, "PowerMgr_setPowerMode - unknown parameter: %d\n", powerMode); - return TI_NOK; - } - - TRACE1( pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, "PowerMgr_setPowerMode, power mode = %d\n", powerMode); - - if ( pPowerMgr->desiredPowerModeProfile != powerMode ) - { - PowerMgr_PowerMode_e previousPowerModeProfile; - previousPowerModeProfile = pPowerMgr->desiredPowerModeProfile; - pPowerMgr->desiredPowerModeProfile = powerMode; - - if ( pPowerMgr->desiredPowerModeProfile == POWER_MODE_AUTO ) - { - if ( pPowerMgr->psEnable == TI_TRUE ) - { - powerMgrStartAutoPowerMode(hPowerMgr); - } - - /* - the transitions of state will be done according to the events from the - traffic monitor - therefor abort and wait event from the traffic monitor. - */ - return TI_OK; - } - else if ( previousPowerModeProfile == POWER_MODE_AUTO ) - { - /* - if the old power mode is AUTO and the new power mode is NOT then need - to disable the thresholds indications from the traffic monitor. - */ - powerMgrDisableThresholdsIndications(hPowerMgr); - } - if ( pPowerMgr->psEnable == TI_TRUE ) - { - powerMgrPowerProfileConfiguration(hPowerMgr, powerMode); - } - } - else - { - /* - the power mode is already configure to the module - don't need to do anything! - */ - TRACE1(pPowerMgr->hReport, REPORT_SEVERITY_WARNING, "PowerMgr_setPowerMode - desiredPowerModeProfile == thePowerMode (=%d), ABORTING!\n", powerMode); - } - - return TI_OK; -} - - -/**************************************************************************************** - * PowerMgr_setDozeModeInAuto * - **************************************************************************************** -DESCRIPTION: Configure the doze mode (short-doze / long-doze) that auto mode will toggle between doze vs active. -INPUT: - hPowerMgr - Handle to the Power Manager - - dozeMode - the requested doze mode when Mgr is in Auto mode (short-doze / long-doze) -OUTPUT: -RETURN: -****************************************************************************************/ -void PowerMgr_setDozeModeInAuto(TI_HANDLE hPowerMgr, PowerMgr_PowerMode_e dozeMode) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - PowerMgr_PowerMode_e powerMode = powerMgrGetHighestPriority(hPowerMgr); - - /* check if we are trying to configure the same Doze mode */ - if ( dozeMode != pPowerMgr->autoModeDozeMode ) - { - TRACE1(pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, "PowerMgr_setDozeModeInAuto - autoModeDozeMode == %d \n", dozeMode); - - pPowerMgr->autoModeDozeMode = dozeMode; - - /* in case we are already in Auto mode, we have to set the wake up condition MIB */ - if ( powerMode == POWER_MODE_AUTO ) - { - if ( dozeMode == POWER_MODE_SHORT_DOZE ) - { - if ( pPowerMgr->beaconListenInterval > 1 ) - { - powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->beaconListenInterval,TNET_WAKE_ON_N_BEACON); - } - else - { - powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->beaconListenInterval,TNET_WAKE_ON_BEACON); - } - } - else /* POWER_MODE_LONG_DOZE */ - { - if ( pPowerMgr->dtimListenInterval > 1 ) - { - powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->dtimListenInterval,TNET_WAKE_ON_N_DTIM); - } - else - { - powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->dtimListenInterval,TNET_WAKE_ON_DTIM); - } - } - - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, "PowerMgr_setDozeModeInAuto - already in Auto\n"); - } - } - else - { - TRACE1(pPowerMgr->hReport, REPORT_SEVERITY_WARNING, "PowerMgr_setDozeModeInAuto - autoModeDozeMode == %d (same same ...)\n", dozeMode); - } -} - -/**************************************************************************************** - * PowerMgr_getPowerMode * - **************************************************************************************** -DESCRIPTION: Get the current PowerMode of the PowerMgr module. - -INPUT: - hPowerMgr - Handle to the Power Manager -OUTPUT: -RETURN: PowerMgr_PowerMode_e - (auto / active / short doze / long doze).\n -****************************************************************************************/ -PowerMgr_PowerMode_e PowerMgr_getPowerMode(TI_HANDLE hPowerMgr) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - - return pPowerMgr->desiredPowerModeProfile; -} - - -TI_STATUS powerMgr_setParam(TI_HANDLE thePowerMgrHandle, - paramInfo_t *theParamP) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)thePowerMgrHandle; - - switch ( theParamP->paramType ) - { - case POWER_MGR_POWER_MODE: - pPowerMgr->powerMngModePriority[theParamP->content.powerMngPowerMode.PowerMngPriority].powerMode - = theParamP->content.powerMngPowerMode.PowerMode; - PowerMgr_setPowerMode(thePowerMgrHandle); - if (pPowerMgr->betEnable) - PowerMgrConfigBetToFw(thePowerMgrHandle, pPowerMgr->betEnable ); - break; - - case POWER_MGR_DISABLE_PRIORITY: - pPowerMgr->powerMngModePriority[theParamP->content.powerMngPriority].priorityEnable = TI_FALSE; - PowerMgr_setPowerMode(thePowerMgrHandle); - break; - - case POWER_MGR_ENABLE_PRIORITY: - pPowerMgr->powerMngModePriority[theParamP->content.powerMngPriority].priorityEnable = TI_TRUE; - PowerMgr_setPowerMode(thePowerMgrHandle); - break; - - case POWER_MGR_POWER_LEVEL_PS: - pPowerMgr->PowerSavePowerLevel = theParamP->content.PowerSavePowerLevel; - /* If we are connected, config the new power level (this param is for connected state) */ - if (pPowerMgr->psEnable) - { - TWD_CfgSleepAuth (pPowerMgr->hTWD, pPowerMgr->PowerSavePowerLevel); - } - break; - - case POWER_MGR_POWER_LEVEL_DEFAULT: - pPowerMgr->defaultPowerLevel = theParamP->content.DefaultPowerLevel; - /* If we are NOT connected, config the new power level (this param is for disconnected state) */ - if (!pPowerMgr->psEnable) - { - TWD_CfgSleepAuth (pPowerMgr->hTWD, pPowerMgr->defaultPowerLevel); - } - break; - - case POWER_MGR_POWER_LEVEL_DOZE_MODE: - PowerMgr_setDozeModeInAuto(thePowerMgrHandle,theParamP->content.powerMngDozeMode); - if (pPowerMgr->betEnable) - PowerMgrConfigBetToFw(thePowerMgrHandle, pPowerMgr->betEnable ); - break; - - case POWER_MGR_KEEP_ALIVE_ENA_DIS: - case POWER_MGR_KEEP_ALIVE_ADD_REM: - return powerMgrKL_setParam (pPowerMgr->hPowerMgrKeepAlive, theParamP); - - default: - TRACE1(pPowerMgr->hReport, REPORT_SEVERITY_ERROR, "PowerMgr_setParam - ERROR - Param is not supported, %d\n\n", theParamP->paramType); - - return PARAM_NOT_SUPPORTED; - } - - return TI_OK; -} - - - -TI_STATUS powerMgr_getParam(TI_HANDLE thePowerMgrHandle, - paramInfo_t *theParamP) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)thePowerMgrHandle; - - switch ( theParamP->paramType ) - { - case POWER_MGR_POWER_MODE: - theParamP->content.PowerMode = PowerMgr_getPowerMode(thePowerMgrHandle); - break; - - case POWER_MGR_POWER_LEVEL_PS: - theParamP->content.PowerSavePowerLevel = pPowerMgr->PowerSavePowerLevel; - break; - - case POWER_MGR_POWER_LEVEL_DEFAULT: - theParamP->content.DefaultPowerLevel = pPowerMgr->defaultPowerLevel; - break; - - case POWER_MGR_POWER_LEVEL_DOZE_MODE: - theParamP->content.powerMngDozeMode = pPowerMgr->autoModeDozeMode; - break; - - case POWER_MGR_KEEP_ALIVE_GET_CONFIG: - return powerMgrKL_getParam (pPowerMgr->hPowerMgrKeepAlive, theParamP); - - case POWER_MGR_GET_POWER_CONSUMPTION_STATISTICS: - - return cmdBld_ItrPowerConsumptionstat (pPowerMgr->hTWD, - theParamP->content.interogateCmdCBParams.fCb, - theParamP->content.interogateCmdCBParams.hCb, - (void*)theParamP->content.interogateCmdCBParams.pCb); - - - - - - default: - TRACE1(pPowerMgr->hReport, REPORT_SEVERITY_ERROR, "PowerMgr_getParam - ERROR - Param is not supported, %d\n\n", theParamP->paramType); - return PARAM_NOT_SUPPORTED; - } - - return TI_OK; -} - - -/***************************************************************************** - ** Private Function prototypes ** - *****************************************************************************/ - - -/**************************************************************************************** - * powerSaveCompleteCB * - **************************************************************************************** -DESCRIPTION: Callback for the Power server complete - gets the result of the request - for PS or exit PS. - -INPUT: - hPowerMgr - Handle to the Power Manager - - PSMode - - trasStatus - result string form the FW. -OUTPUT: -RETURN: void.\n -****************************************************************************************/ -static void powerSaveCompleteCB(TI_HANDLE hPowerMgr,TI_UINT8 PSMode,TI_UINT8 transStatus) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - - TRACE1( pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, "powerSaveCompleteCB, statud = %d\n", transStatus); - - /* Handling the event*/ - switch ( (EventsPowerSave_e)transStatus ) - { - case ENTER_POWER_SAVE_FAIL: - case EXIT_POWER_SAVE_FAIL: - pPowerMgr->lastPsTransaction = transStatus; - tmr_StartTimer (pPowerMgr->hRetryPsTimer, - powerMgrRetryPsTimeout, - (TI_HANDLE)pPowerMgr, - RE_ENTER_PS_TIMEOUT, - TI_FALSE); - break; - - case ENTER_POWER_SAVE_SUCCESS: - case EXIT_POWER_SAVE_SUCCESS: - break; - - default: - TRACE1( pPowerMgr->hReport, REPORT_SEVERITY_ERROR, "powerSaveCompleteCB: invliad status: %d\n", transStatus); - break; - } -} - -/** - * \\n - * \date 30-Aug-2006\n - * \brief Power manager callback fro TM event notification - * - * Function Scope \e Public.\n - * \param hPowerMgr - handle to the power maanger object.\n - * \param cookie - values supplied during event registration (active / doze).\n - */ -static void PowerMgrTMThresholdCrossCB( TI_HANDLE hPowerMgr, TI_UINT32 cookie ) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - - TRACE1(pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, "PowerMgrTMThresholdCrossCB - TM notified threshold crossed, cookie: %d\n", cookie); - - /* sanity cehcking - TM notifications should only be received when PM is enabled and in auto mode */ - if ( (pPowerMgr->psEnable == TI_TRUE) && (pPowerMgr->desiredPowerModeProfile == POWER_MODE_AUTO)) - { - switch ((PowerMgr_PowerMode_e)cookie) - { - case POWER_MODE_ACTIVE: - powerMgrPowerProfileConfiguration( hPowerMgr, POWER_MODE_ACTIVE ); - break; - - /* threshold crossed down - need to enter configured doze mode */ - case POWER_MODE_SHORT_DOZE: - powerMgrPowerProfileConfiguration( hPowerMgr, pPowerMgr->autoModeDozeMode ); - break; - - default: - TRACE1( pPowerMgr->hReport, REPORT_SEVERITY_ERROR, "PowerMgrTMThresholdCrossCB: TM notification with invalid cookie: %d!\n", cookie); - break; - } - } - else - { - TRACE2( pPowerMgr->hReport, REPORT_SEVERITY_ERROR, "PowerMgrTMThresholdCrossCB: TM motification when psEnable is :%d or desired profile is: %d\n", pPowerMgr->psEnable, pPowerMgr->desiredPowerModeProfile); - } - -} - -/**************************************************************************************** -* powerMgrDisableThresholdsIndications * -***************************************************************************************** -DESCRIPTION: This will send a disable message to the traffic monitor, - to stop sending indications on threshold pass. - - -INPUT: - hPowerMgr - Handle to the Power Manager -OUTPUT: -RETURN: void.\n -****************************************************************************************/ -static void powerMgrDisableThresholdsIndications(TI_HANDLE hPowerMgr) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - - /* - auto is not a static/fix state, else its a dynamic state that flows between - the 3 static/fix states: active, short-doze and long-doze. - */ - TrafficMonitor_StopEventNotif(pPowerMgr->hTrafficMonitor, - pPowerMgr->passToActiveTMEvent); - - TrafficMonitor_StopEventNotif(pPowerMgr->hTrafficMonitor, - pPowerMgr->passToDozeTMEvent); - -} - - -/**************************************************************************************** -* powerMgrEnableThresholdsIndications * -***************************************************************************************** -DESCRIPTION: TThis will send an enable message to the traffic monitor, - to start sending indications on threshold pass. - - -INPUT: - hPowerMgr - Handle to the Power Manager -OUTPUT: -RETURN: void.\n -****************************************************************************************/ -static void powerMgrEnableThresholdsIndications(TI_HANDLE hPowerMgr) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - - TRACE0( pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, "powerMgrEnableThresholdsIndications called\n"); - /* - auto is not a static/fix state, but rather a dynamic state that flows between - the 3 static/fix states: active, short-doze and long-doze. - */ - TrafficMonitor_StartEventNotif(pPowerMgr->hTrafficMonitor, - pPowerMgr->passToActiveTMEvent); - - TrafficMonitor_StartEventNotif(pPowerMgr->hTrafficMonitor, - pPowerMgr->passToDozeTMEvent); - -} - - -/**************************************************************************************** -* powerMgrStartAutoPowerMode * -***************************************************************************************** -DESCRIPTION: configure the power manager to enter into AUTO power mode. - The power manager will deside what power level will be applied - acording to the traffic monitor. - -INPUT: - hPowerMgr - Handle to the Power Manager -OUTPUT: -RETURN: void.\n -****************************************************************************************/ -static void powerMgrStartAutoPowerMode(TI_HANDLE hPowerMgr) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - int frameCount; - - frameCount = TrafficMonitor_GetFrameBandwidth(pPowerMgr->hTrafficMonitor); - - TRACE0( pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, "powerMgrStartAutoPowerMode: Starting auto power mode,"); - - /*Activates the correct profile*/ - if ( frameCount >= pPowerMgr->autoModeActiveTH ) - { - powerMgrPowerProfileConfiguration(hPowerMgr, POWER_MODE_ACTIVE); - } - else - { - powerMgrPowerProfileConfiguration(hPowerMgr, pPowerMgr->autoModeDozeMode); - - } - /* Activates the Trafic monitoe Events*/ - powerMgrEnableThresholdsIndications(hPowerMgr); -} - -/**************************************************************************************** -* powerMgrRetryPsTimeout * -***************************************************************************************** -DESCRIPTION: Retry function if a PS/exit PS request failed - -INPUT: hPowerMgr - Handle to the Power Manager - bTwdInitOccured - Indicates if TWDriver recovery occured since timer started - -OUTPUT: - -RETURN: void.\n -****************************************************************************************/ -static void powerMgrRetryPsTimeout(TI_HANDLE hPowerMgr, TI_BOOL bTwdInitOccured) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - - TRACE0( pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, "powerMgrRetryPsTimeout: timer expired.\n"); - - if ( pPowerMgr->lastPsTransaction == ENTER_POWER_SAVE_FAIL ) - { - TWD_SetPsMode (pPowerMgr->hTWD, POWER_SAVE_ON, TI_TRUE, hPowerMgr,powerSaveCompleteCB, NULL);/*NULL as GWSI callback*/ - } - else - { - TWD_SetPsMode (pPowerMgr->hTWD, POWER_SAVE_OFF, TI_TRUE, hPowerMgr, powerSaveCompleteCB, NULL);/*NULL as GWSI callback*/ - } - return; -} - - -/**************************************************************************************** -* powerMgrPowerProfileConfiguration * -***************************************************************************************** -DESCRIPTION: This function is the " builder " of the Power Save profiles. - acording to the desired Power mode. - -INPUT: - hPowerMgr - Handle to the Power Manager -OUTPUT: -RETURN: void.\n -****************************************************************************************/ -static void powerMgrPowerProfileConfiguration(TI_HANDLE hPowerMgr, PowerMgr_PowerMode_e desiredPowerMode) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - - tmr_StopTimer (pPowerMgr->hRetryPsTimer); - - pPowerMgr->lastPowerModeProfile = desiredPowerMode; - - switch ( desiredPowerMode ) - { - case POWER_MODE_AUTO: - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, "PowerMode==AUTO - This mode should not be sent to the GWSI - we send AUTO instead\n"); - break; - - case POWER_MODE_ACTIVE: - /* set AWAKE through */ - TWD_SetPsMode (pPowerMgr->hTWD, - POWER_SAVE_OFF, - TI_TRUE, - hPowerMgr, - powerSaveCompleteCB, - NULL); - - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, "PowerMode==ACTIVE\n"); - break; - - case POWER_MODE_SHORT_DOZE: - if ( pPowerMgr->beaconListenInterval > 1 ) - { - powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->beaconListenInterval,TNET_WAKE_ON_N_BEACON); - } - else - { - powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->beaconListenInterval,TNET_WAKE_ON_BEACON); - } - - TWD_SetPsMode (pPowerMgr->hTWD, - POWER_SAVE_ON, - TI_TRUE, - hPowerMgr, - powerSaveCompleteCB, - NULL); - - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, "PowerMode==SHORT_DOZE\n"); - break; - - case POWER_MODE_LONG_DOZE: - if ( pPowerMgr->dtimListenInterval > 1 ) - { - powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->dtimListenInterval,TNET_WAKE_ON_N_DTIM); - } - else - { - powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->dtimListenInterval,TNET_WAKE_ON_DTIM); - } - TWD_SetPsMode (pPowerMgr->hTWD, - POWER_SAVE_ON, - TI_TRUE, - hPowerMgr, - powerSaveCompleteCB, - NULL); - - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, "PowerMode==LONG_DOZE\n"); - break; - - case POWER_MODE_PS_ONLY: - /* When in SG PS mode, configure the user desired wake-up condition */ - powerMgr_SGSetUserDesiredwakeUpCond(pPowerMgr); - - TWD_SetPsMode (pPowerMgr->hTWD, - POWER_SAVE_ON, - TI_TRUE, - hPowerMgr, - powerSaveCompleteCB, - NULL); - - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, "PowerMode==PS_ONLY\n"); - break; - - default: - TRACE1(pPowerMgr->hReport, REPORT_SEVERITY_ERROR, "PowerMgr_setWakeUpConfiguration - ERROR - PowerMode - unknown parameter: %d\n", desiredPowerMode); - return; - } - -} - - -/**************************************************************************************** -* powerMgrSendMBXWakeUpConditions * -***************************************************************************************** -DESCRIPTION: Tsend configuration of the power management option that holds in the command - mailbox inner sturcture. - -INPUT: - hPowerMgr - Handle to the Power Manager -OUTPUT: -RETURN: TI_STATUS - TI_OK on success else TI_NOK.\n -****************************************************************************************/ -static TI_STATUS powerMgrSendMBXWakeUpConditions(TI_HANDLE hPowerMgr, - TI_UINT8 listenInterval, - ETnetWakeOn tnetWakeupOn) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - TPowerMgmtConfig powerMgmtConfig; - TI_STATUS status = TI_OK; - - powerMgmtConfig.listenInterval = listenInterval; - powerMgmtConfig.tnetWakeupOn = tnetWakeupOn; - - TRACE2(pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, "powerMgrSendMBXWakeUpConditions: listenInterval = %d, tnetWakeupOn = %d\n", listenInterval,tnetWakeupOn); - - status = TWD_CfgWakeUpCondition (pPowerMgr->hTWD, &powerMgmtConfig); - - if ( status != TI_OK ) - { - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_ERROR, "powerMgrSendMBXWakeUpConditions - Error in wae up condition IE!\n"); - } - return status; -} - - - - -static TI_STATUS powerMgrNullPacketRateConfiguration(TI_HANDLE hPowerMgr) -{ - paramInfo_t param; - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - - param.paramType = SITE_MGR_CURRENT_RATE_PAIR_PARAM; - if ( siteMgr_getParam(pPowerMgr->hSiteMgr, ¶m) == TI_OK ) - { - TWD_SetNullRateModulation (pPowerMgr->hTWD, (TI_UINT16)param.content.siteMgrCurrentRateMask.basicRateMask); - } - else - { - TWD_SetNullRateModulation (pPowerMgr->hTWD, (DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER)); - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_ERROR, "powerMgrNullPacketRateConfiguration: error - faild to set rate so default was seted!\n"); - } - return TI_OK; - -} - - -static PowerMgr_PowerMode_e powerMgrGetHighestPriority(TI_HANDLE hPowerMgr) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - int index; - for ( index = POWER_MANAGER_MAX_PRIORITY-1;index >= 0;index-- ) - { - if ( pPowerMgr->powerMngModePriority[index].priorityEnable ) - { - - return pPowerMgr->powerMngModePriority[index].powerMode; - } - - } - - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_ERROR, "powerMgrGetHighestPriority - error - faild to get highest priority! sefault deseired mode was returned !!!\n"); - return pPowerMgr->desiredPowerModeProfile; -} - - - /**************************************************************************************** - * PowerMgr_notifyFWReset * - **************************************************************************************** -DESCRIPTION: Notify the object of the power Manager about FW reset (recovery). - Calls PowerSrv module to Set Ps Mode - -INPUT: - hPowerMgr - Handle to the Power Manager -OUTPUT: -RETURN: TI_STATUS - TI_OK on success else TI_NOK. -****************************************************************************************/ -TI_STATUS PowerMgr_notifyFWReset(TI_HANDLE hPowerMgr) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - - TRACE2(pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, "PowerMgr_notifyFWReset(): psEnable = %d, lastPowerModeProfile = %d\n", pPowerMgr->psEnable, pPowerMgr->lastPowerModeProfile); - - if (pPowerMgr->psEnable) - { - powerMgrPowerProfileConfiguration(hPowerMgr, pPowerMgr->lastPowerModeProfile); - } - - return TI_OK; -} - - -/**************************************************************************************** - * PowerMgrConfigBetToFw * - **************************************************************************************** -DESCRIPTION: callback from TM event notification. - - call PowerSrv module to Set Ps Mode - -INPUT: - hPowerMgr - Handle to the Power Manager - - BetEnable - cookie:values supplied during event registration -OUTPUT: -RETURN: None. -****************************************************************************************/ -static void PowerMgrConfigBetToFw( TI_HANDLE hPowerMgr, TI_UINT32 BetEnable ) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - TI_UINT8 MaximumConsecutiveET; - TI_UINT32 listenInterval; - paramInfo_t param; - TI_UINT32 beaconInterval; - TI_UINT32 dtimPeriod; - PowerMgr_PowerMode_e powerMode; - - param.paramType = SITE_MGR_BEACON_INTERVAL_PARAM; - siteMgr_getParam(pPowerMgr->hSiteMgr, ¶m); - beaconInterval = param.content.beaconInterval; - - param.paramType = SITE_MGR_DTIM_PERIOD_PARAM; - siteMgr_getParam(pPowerMgr->hSiteMgr, ¶m); - dtimPeriod = param.content.siteMgrDtimPeriod; - - /* get actual Power Mode */ - if (pPowerMgr->desiredPowerModeProfile == POWER_MODE_AUTO) - { - powerMode = pPowerMgr->autoModeDozeMode; - } - else - { - powerMode = pPowerMgr->lastPowerModeProfile; - } - - /* calc ListenInterval */ - if (powerMode == POWER_MODE_SHORT_DOZE) - { - listenInterval = beaconInterval * pPowerMgr->beaconListenInterval; - } - else if (powerMode == POWER_MODE_LONG_DOZE) - { - listenInterval = dtimPeriod * beaconInterval * pPowerMgr->dtimListenInterval; - } - else - { - listenInterval = beaconInterval; - } - - if (listenInterval == 0) - { - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_WARNING, "PowerMgrConfigBetToFw: listenInterval is ZERO\n"); - return; - } - - /* MaximumConsecutiveET = MaximalFullBeaconReceptionInterval / MAX( BeaconInterval, ListenInterval) */ - MaximumConsecutiveET = pPowerMgr->maxFullBeaconInterval / listenInterval; - - TRACE5(pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, "PowerMgrConfigBetToFw:\n Power Mode = %d\n beaconInterval = %d\n listenInterval = %d\n Bet Enable = %d\n MaximumConsecutiveET = %d\n", powerMode, beaconInterval, listenInterval, BetEnable, MaximumConsecutiveET); - - pPowerMgr->betEnable = BetEnable; /* save BET enable flag for CLI configuration */ - - TWD_CfgBet(pPowerMgr->hTWD, BetEnable, MaximumConsecutiveET); -} - -/** - * \date 10-April-2007\n - * \brief Returns to the configured wakeup condition, when SG protective mode is done - * - * Function Scope \e Public.\n - * Parameters:\n - * 1) TI_HANDLE - handle to the PowerMgr object.\n - * Return Value: void.\n - */ -static void powerMgr_SGSetUserDesiredwakeUpCond( TI_HANDLE hPowerMgr ) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - - if (pPowerMgr->psEnable) - { - /* set wakeup condition according to user mode power save profile */ - switch ( pPowerMgr->powerMngModePriority[ POWER_MANAGER_USER_PRIORITY ].powerMode ) - { - case POWER_MODE_AUTO: - /*set wakeup condition according to doze mode in auto and wakup interval */ - if ( pPowerMgr->autoModeDozeMode == POWER_MODE_SHORT_DOZE ) - { - /* short doze */ - if ( pPowerMgr->beaconListenInterval > 1 ) - { - powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->beaconListenInterval,TNET_WAKE_ON_N_BEACON); - } - else - { - powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->beaconListenInterval,TNET_WAKE_ON_BEACON); - } - } - else - { - /* long doze */ - if ( pPowerMgr->dtimListenInterval > 1 ) - { - powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->dtimListenInterval,TNET_WAKE_ON_N_DTIM); - } - else - { - powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->dtimListenInterval,TNET_WAKE_ON_DTIM); - } - } - break; - - case POWER_MODE_ACTIVE: - break; - - case POWER_MODE_SHORT_DOZE: - if ( pPowerMgr->beaconListenInterval > 1 ) - { - powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->beaconListenInterval,TNET_WAKE_ON_N_BEACON); - } - else - { - powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->beaconListenInterval,TNET_WAKE_ON_BEACON); - } - break; - - case POWER_MODE_LONG_DOZE: - if ( pPowerMgr->dtimListenInterval > 1 ) - { - powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->dtimListenInterval,TNET_WAKE_ON_N_DTIM); - } - else - { - powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->dtimListenInterval,TNET_WAKE_ON_DTIM); - } - break; - - default: -TRACE1(pPowerMgr->hReport, REPORT_SEVERITY_ERROR, ": ERROR - PowerMode for user prioirty is: %d\n", pPowerMgr->powerMngModePriority[ POWER_MANAGER_USER_PRIORITY ].powerMode); - } - }/*end of if (psEnable)*/ -} - - - -/**************************************************************************************** -* PowerMgr_PsPollFailureCB * -**************************************************************************************** -DESCRIPTION: Work around to solve AP bad behavior. - Some old AP's have trouble with Ps-Poll - The solution will be to exit PS for a - period of time - -INPUT: - hPowerMgr - Handle to the Power Manager -OUTPUT: -RETURN: -****************************************************************************************/ -static void PowerMgr_PsPollFailureCB( TI_HANDLE hPowerMgr ) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - - if ( pPowerMgr->PsPollDeliveryFailureRecoveryPeriod ) - { - paramInfo_t param; - - TRACE1(pPowerMgr->hReport, REPORT_SEVERITY_WARNING, " Oh boy, AP is not answering Ps-Poll's. enter active PS for %d Ms\n", pPowerMgr->PsPollDeliveryFailureRecoveryPeriod); - - /* - * Set the system to Active power save - */ - param.paramType = POWER_MGR_POWER_MODE; - param.content.powerMngPowerMode.PowerMode = POWER_MODE_ACTIVE; - param.content.powerMngPowerMode.PowerMngPriority = POWER_MANAGER_PS_POLL_FAILURE_PRIORITY; - powerMgr_setParam(hPowerMgr,¶m); - - param.paramType = POWER_MGR_ENABLE_PRIORITY; - param.content.powerMngPriority = POWER_MANAGER_PS_POLL_FAILURE_PRIORITY; - powerMgr_setParam(hPowerMgr,¶m); - - /* - * Set timer to exit the active mode - */ - tmr_StartTimer(pPowerMgr->hPsPollFailureTimer, - powerMgr_PsPollFailureTimeout, - (TI_HANDLE)pPowerMgr, - pPowerMgr->PsPollDeliveryFailureRecoveryPeriod, - TI_FALSE); - } - else /* Work-around is disabled */ - { - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_WARNING, " Oh boy, AP is not answering Ps-Poll's !!!\n"); - } - return; -} - -/**************************************************************************************** -* powerMgr_PsPollFailureTimeout * -**************************************************************************************** -DESCRIPTION: After the timeout of ps-poll failure - return to normal behavior - -INPUT: - hPowerMgr - Handle to the Power Manager -OUTPUT: -RETURN: -****************************************************************************************/ -static void powerMgr_PsPollFailureTimeout( TI_HANDLE hPowerMgr, TI_BOOL bTwdInitOccured ) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; - paramInfo_t param; - - TRACE0(pPowerMgr->hReport, REPORT_SEVERITY_INFORMATION, " \n"); - - /* disable Ps-Poll priority */ - param.paramType = POWER_MGR_DISABLE_PRIORITY; - param.content.powerMngPriority = POWER_MANAGER_PS_POLL_FAILURE_PRIORITY; - powerMgr_setParam(hPowerMgr,¶m); - - return; -} - -TI_BOOL PowerMgr_getReAuthActivePriority(TI_HANDLE thePowerMgrHandle) -{ - PowerMgr_t *pPowerMgr = (PowerMgr_t*)thePowerMgrHandle; - return pPowerMgr->reAuthActivePriority; -} |