164064216a8433360745f69edddce19a606659163The Android Open Source Project/** \file PowerMgr.c 264064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief This is the PowerMgr module implementation. 364064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Assaf Azulay 464064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 24-Oct-2005 564064216a8433360745f69edddce19a606659163The Android Open Source Project */ 664064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************** 764064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+** 864064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 964064216a8433360745f69edddce19a606659163The Android Open Source Project**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved. |** 1064064216a8433360745f69edddce19a606659163The Android Open Source Project**| All rights reserved. |** 1164064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 1264064216a8433360745f69edddce19a606659163The Android Open Source Project**| Redistribution and use in source and binary forms, with or without |** 1364064216a8433360745f69edddce19a606659163The Android Open Source Project**| modification, are permitted provided that the following conditions |** 1464064216a8433360745f69edddce19a606659163The Android Open Source Project**| are met: |** 1564064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 1664064216a8433360745f69edddce19a606659163The Android Open Source Project**| * Redistributions of source code must retain the above copyright |** 1764064216a8433360745f69edddce19a606659163The Android Open Source Project**| notice, this list of conditions and the following disclaimer. |** 1864064216a8433360745f69edddce19a606659163The Android Open Source Project**| * Redistributions in binary form must reproduce the above copyright |** 1964064216a8433360745f69edddce19a606659163The Android Open Source Project**| notice, this list of conditions and the following disclaimer in |** 2064064216a8433360745f69edddce19a606659163The Android Open Source Project**| the documentation and/or other materials provided with the |** 2164064216a8433360745f69edddce19a606659163The Android Open Source Project**| distribution. |** 2264064216a8433360745f69edddce19a606659163The Android Open Source Project**| * Neither the name Texas Instruments nor the names of its |** 2364064216a8433360745f69edddce19a606659163The Android Open Source Project**| contributors may be used to endorse or promote products derived |** 2464064216a8433360745f69edddce19a606659163The Android Open Source Project**| from this software without specific prior written permission. |** 2564064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 2664064216a8433360745f69edddce19a606659163The Android Open Source Project**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |** 2764064216a8433360745f69edddce19a606659163The Android Open Source Project**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |** 2864064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |** 2964064216a8433360745f69edddce19a606659163The Android Open Source Project**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |** 3064064216a8433360745f69edddce19a606659163The Android Open Source Project**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |** 3164064216a8433360745f69edddce19a606659163The Android Open Source Project**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |** 3264064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |** 3364064216a8433360745f69edddce19a606659163The Android Open Source Project**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |** 3464064216a8433360745f69edddce19a606659163The Android Open Source Project**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |** 3564064216a8433360745f69edddce19a606659163The Android Open Source Project**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |** 3664064216a8433360745f69edddce19a606659163The Android Open Source Project**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |** 3764064216a8433360745f69edddce19a606659163The Android Open Source Project**| |** 3864064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+** 3964064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************/ 4064064216a8433360745f69edddce19a606659163The Android Open Source Project 4164064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************** 4264064216a8433360745f69edddce19a606659163The Android Open Source Project * * 4364064216a8433360745f69edddce19a606659163The Android Open Source Project * MODULE: PowerMgr * 4464064216a8433360745f69edddce19a606659163The Android Open Source Project * PURPOSE: PowerMgr Module implementation. * 4564064216a8433360745f69edddce19a606659163The Android Open Source Project * * 4664064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/ 4764064216a8433360745f69edddce19a606659163The Android Open Source Project 4864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osTIType.h" 4964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osApi.h" 5064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "paramOut.h" 5164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "report.h" 5264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "PowerMgr.h" 5364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "PowerMgr_API.h" 5464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "TrafficMonitorAPI.h" 5564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "qosMngr_API.h" 5664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "siteMgrApi.h" 5764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "SoftGeminiApi.h" 5864064216a8433360745f69edddce19a606659163The Android Open Source Project 5964064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************** 6064064216a8433360745f69edddce19a606659163The Android Open Source Project ** Defines ** 6164064216a8433360745f69edddce19a606659163The Android Open Source Project *****************************************************************************/ 6264064216a8433360745f69edddce19a606659163The Android Open Source Project#define DEFAULT_LISTEN_INTERVAL (1) 6364064216a8433360745f69edddce19a606659163The Android Open Source Project 6464064216a8433360745f69edddce19a606659163The Android Open Source Project#define BET_DISABLE 0 6564064216a8433360745f69edddce19a606659163The Android Open Source Project#define BET_ENABLE 1 6664064216a8433360745f69edddce19a606659163The Android Open Source Project 6764064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************** 6864064216a8433360745f69edddce19a606659163The Android Open Source Project ** Private Function prototypes ** 6964064216a8433360745f69edddce19a606659163The Android Open Source Project *****************************************************************************/ 7064064216a8433360745f69edddce19a606659163The Android Open Source Project 7164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void powerSaveCompleteCB(TI_HANDLE hPowerMgr,UINT8 PSMode,UINT8 transStatus); 7264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void PowerMgrTMThresholdCrossCB( TI_HANDLE hPowerMgr, UINT32 cookie ); 7364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void powerMgrDisableThresholdsIndications(TI_HANDLE hPowerMgr); 7464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void powerMgrEnableThresholdsIndications(TI_HANDLE hPowerMgr); 7564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void powerMgrStartAutoPowerMode(TI_HANDLE hPowerMgr); 7664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void powerMgrRetryPsTimeout(TI_HANDLE hPowerMgr); 7764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void powerMgrPowerProfileConfiguration(TI_HANDLE hPowerMgr, PowerMgr_PowerMode_e desiredPowerMode); 7864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS powerMgrSendMBXWakeUpConditions(TI_HANDLE hPowerMgr,UINT8 listenInterval, PowerMgr_TnetWakeOn_e tnetWakeupOn); 7964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS powerMgrNullPacketRateConfiguration(TI_HANDLE hPowerMgr); 8064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic PowerMgr_PowerMode_e powerMgrGetHighestPriority(TI_HANDLE hPowerMgr); 8164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void PowerMgr_setDozeModeInAuto(TI_HANDLE hPowerMgr,PowerMgr_PowerMode_e dozeMode); 8264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void PowerMgrConfigBetToFw( TI_HANDLE hPowerMgr, UINT32 cookie ); 8364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void PowerMgr_PsPollFailureCB( TI_HANDLE hPowerMgr ); 8464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void powerMgr_PsPollFailureTimeout(TI_HANDLE hPowerMgr); 8564064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef CPU_LOAD 8664064216a8433360745f69edddce19a606659163The Android Open Source Project static void powerMgr_CpuLoadTimeout(TI_HANDLE hPowerMgr); 8764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 8864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void powerMgr_SGSetUserDesiredwakeUpCond( TI_HANDLE hPowerMgr ); 8964064216a8433360745f69edddce19a606659163The Android Open Source Project 9064064216a8433360745f69edddce19a606659163The Android Open Source Project 9164064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************** 9264064216a8433360745f69edddce19a606659163The Android Open Source Project ** Public Function prototypes ** 9364064216a8433360745f69edddce19a606659163The Android Open Source Project *****************************************************************************/ 9464064216a8433360745f69edddce19a606659163The Android Open Source Project 9564064216a8433360745f69edddce19a606659163The Android Open Source Project 9664064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************************** 9764064216a8433360745f69edddce19a606659163The Android Open Source Project * PowerMgr_create * 9864064216a8433360745f69edddce19a606659163The Android Open Source Project **************************************************************************************** 9964064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Creates the object of the power Manager. 10064064216a8433360745f69edddce19a606659163The Android Open Source Project performs the following: 10164064216a8433360745f69edddce19a606659163The Android Open Source Project - Allocate the Power Manager handle 10264064216a8433360745f69edddce19a606659163The Android Open Source Project - Creates the retry timer 10364064216a8433360745f69edddce19a606659163The Android Open Source Project 10464064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hOs - Handle to OS 10564064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 10664064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: Handle to the Power Manager module on success, NULL otherwise 10764064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 10864064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_HANDLE PowerMgr_create(TI_HANDLE hOs) 10964064216a8433360745f69edddce19a606659163The Android Open Source Project{ 11064064216a8433360745f69edddce19a606659163The Android Open Source Project 11164064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t * pPowerMgr = NULL; 11264064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr = (PowerMgr_t*) os_memoryAlloc (hOs, sizeof(PowerMgr_t)); 11364064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr == NULL ) 11464064216a8433360745f69edddce19a606659163The Android Open Source Project { 11564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("PowerMgr_create - Memory Allocation Error!\n")); 11664064216a8433360745f69edddce19a606659163The Android Open Source Project return NULL; 11764064216a8433360745f69edddce19a606659163The Android Open Source Project } 11864064216a8433360745f69edddce19a606659163The Android Open Source Project 11964064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryZero (hOs, pPowerMgr, sizeof(PowerMgr_t)); 12064064216a8433360745f69edddce19a606659163The Android Open Source Project 12164064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->hOS = hOs; 12264064216a8433360745f69edddce19a606659163The Android Open Source Project 12364064216a8433360745f69edddce19a606659163The Android Open Source Project /*create the timers */ 12464064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->hRetryPsTimer = os_timerCreate(pPowerMgr->hOS, 12564064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrRetryPsTimeout, 12664064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr); 12764064216a8433360745f69edddce19a606659163The Android Open Source Project 12864064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->hPsPollFailureTimer = os_timerCreate(pPowerMgr->hOS, 12964064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgr_PsPollFailureTimeout, 13064064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr); 13164064216a8433360745f69edddce19a606659163The Android Open Source Project 13264064216a8433360745f69edddce19a606659163The Android Open Source Project #ifdef CPU_LOAD 13364064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->hCpuLoadTimer = os_timerCreate(pPowerMgr->hOS, 13464064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgr_CpuLoadTimeout, 13564064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr); 13664064216a8433360745f69edddce19a606659163The Android Open Source Project #endif 13764064216a8433360745f69edddce19a606659163The Android Open Source Project 13864064216a8433360745f69edddce19a606659163The Android Open Source Project 13964064216a8433360745f69edddce19a606659163The Android Open Source Project if ( (pPowerMgr->hPsPollFailureTimer == NULL) || (pPowerMgr->hRetryPsTimer == NULL) ) 14064064216a8433360745f69edddce19a606659163The Android Open Source Project { 14164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("PowerMgr_create - Error in creating timer!\n")); 14264064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_destroy(pPowerMgr); 14364064216a8433360745f69edddce19a606659163The Android Open Source Project return NULL; 14464064216a8433360745f69edddce19a606659163The Android Open Source Project } 14564064216a8433360745f69edddce19a606659163The Android Open Source Project 14664064216a8433360745f69edddce19a606659163The Android Open Source Project return pPowerMgr; 14764064216a8433360745f69edddce19a606659163The Android Open Source Project 14864064216a8433360745f69edddce19a606659163The Android Open Source Project} 14964064216a8433360745f69edddce19a606659163The Android Open Source Project 15064064216a8433360745f69edddce19a606659163The Android Open Source Project 15164064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************************** 15264064216a8433360745f69edddce19a606659163The Android Open Source Project* powerSrv_destroy * 15364064216a8433360745f69edddce19a606659163The Android Open Source Project**************************************************************************************** 15464064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Destroy the object of the power Manager. 15564064216a8433360745f69edddce19a606659163The Android Open Source Project - delete Power Manager alocation 15664064216a8433360745f69edddce19a606659163The Android Open Source Project - call the destroy function of the timer 15764064216a8433360745f69edddce19a606659163The Android Open Source Project 15864064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 15964064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 16064064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: TI_STATUS - OK on success else NOK. 16164064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 16264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS PowerMgr_destroy(TI_HANDLE hPowerMgr) 16364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 16464064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 16564064216a8433360745f69edddce19a606659163The Android Open Source Project 16664064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->hRetryPsTimer != NULL ) 16764064216a8433360745f69edddce19a606659163The Android Open Source Project { 16864064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerDestroy(pPowerMgr->hOS, 16964064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->hRetryPsTimer); 17064064216a8433360745f69edddce19a606659163The Android Open Source Project } 17164064216a8433360745f69edddce19a606659163The Android Open Source Project 17264064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->hPsPollFailureTimer != NULL ) 17364064216a8433360745f69edddce19a606659163The Android Open Source Project { 17464064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerDestroy(pPowerMgr->hOS, 17564064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->hPsPollFailureTimer); 17664064216a8433360745f69edddce19a606659163The Android Open Source Project } 17764064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryFree(pPowerMgr->hOS , pPowerMgr , sizeof(PowerMgr_t)); 17864064216a8433360745f69edddce19a606659163The Android Open Source Project 17964064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 18064064216a8433360745f69edddce19a606659163The Android Open Source Project} 18164064216a8433360745f69edddce19a606659163The Android Open Source Project 18264064216a8433360745f69edddce19a606659163The Android Open Source Project 18364064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************************** 18464064216a8433360745f69edddce19a606659163The Android Open Source Project* PowerMgr_init * 18564064216a8433360745f69edddce19a606659163The Android Open Source Project**************************************************************************************** 18664064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Power Manager init function, called in configure phase. 18764064216a8433360745f69edddce19a606659163The Android Open Source Project 18864064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 18964064216a8433360745f69edddce19a606659163The Android Open Source Project - hReport - Handle to report. 19064064216a8433360745f69edddce19a606659163The Android Open Source Project - hSiteMgr - Handle to site manager 19164064216a8433360745f69edddce19a606659163The Android Open Source Project - trafficMonitor - Handle to Trrafic monitor 19264064216a8433360745f69edddce19a606659163The Android Open Source Project - pPowerMgrInitParams - initi parameters 19364064216a8433360745f69edddce19a606659163The Android Open Source Project 19464064216a8433360745f69edddce19a606659163The Android Open Source Project 19564064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 19664064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: TI_STATUS - OK on success else NOK. 19764064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 19864064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS PowerMgr_init( TI_HANDLE hPowerMgr, 19964064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hMacServices, 20064064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hReport, 20164064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hSiteMgr, 20264064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hWhalCtrl, 20364064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hTrafficMonitor, 20464064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hSoftGemini, 20564064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgrInitParams_t * pPowerMgrInitParams) 20664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 20764064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 20864064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 index; 20964064216a8433360745f69edddce19a606659163The Android Open Source Project /* used to initialize the Traffic Monitor for Auto Ps events */ 21064064216a8433360745f69edddce19a606659163The Android Open Source Project TrafficAlertRegParm_t tmRegParam; 21164064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 21264064216a8433360745f69edddce19a606659163The Android Open Source Project 21364064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->hReport = hReport; 21464064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->hTrafficMonitor = hTrafficMonitor; 21564064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->hSiteMgr = hSiteMgr; 21664064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->hWhalCtrl = hWhalCtrl; 21764064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->hMacServices= hMacServices; 21864064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->hSoftGemini = hSoftGemini; 21964064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->psEnable = FALSE; 22064064216a8433360745f69edddce19a606659163The Android Open Source Project 22164064216a8433360745f69edddce19a606659163The Android Open Source Project /* init power management options */ 22264064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->beaconListenInterval = pPowerMgrInitParams->beaconListenInterval; 22364064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->dtimListenInterval = pPowerMgrInitParams->dtimListenInterval; 22464064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->defaultPowerLevel = pPowerMgrInitParams->defaultPowerLevel; 22564064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->PowerSavePowerLevel = pPowerMgrInitParams->PowerSavePowerLevel; 22664064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->powerMngPriority = POWER_MANAGER_USER_PRIORITY; 22764064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->maxFullBeaconInterval = pPowerMgrInitParams->MaximalFullBeaconReceptionInterval; 22864064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->PsPollDeliveryFailureRecoveryPeriod = pPowerMgrInitParams->PsPollDeliveryFailureRecoveryPeriod; 22964064216a8433360745f69edddce19a606659163The Android Open Source Project 23064064216a8433360745f69edddce19a606659163The Android Open Source Project /* 23164064216a8433360745f69edddce19a606659163The Android Open Source Project set AUTO PS parameters 23264064216a8433360745f69edddce19a606659163The Android Open Source Project */ 23364064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->autoModeInterval = pPowerMgrInitParams->autoModeInterval; 23464064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->autoModeActiveTH = pPowerMgrInitParams->autoModeActiveTH; 23564064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->autoModeDozeTH = pPowerMgrInitParams->autoModeDozeTH; 23664064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->autoModeDozeMode = pPowerMgrInitParams->autoModeDozeMode; 23764064216a8433360745f69edddce19a606659163The Android Open Source Project 23864064216a8433360745f69edddce19a606659163The Android Open Source Project /* 23964064216a8433360745f69edddce19a606659163The Android Open Source Project register threshold in the traffic monitor. 24064064216a8433360745f69edddce19a606659163The Android Open Source Project */ 24164064216a8433360745f69edddce19a606659163The Android Open Source Project 24264064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->betEnable = pPowerMgrInitParams->BetEnable; /* save BET enable flag for CLI configuration */ 24364064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->betTrafficEnable = FALSE; /* starting without BET */ 24464064216a8433360745f69edddce19a606659163The Android Open Source Project 24564064216a8433360745f69edddce19a606659163The Android Open Source Project /* BET thresholds */ 24664064216a8433360745f69edddce19a606659163The Android Open Source Project /* general parameters */ 24764064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.Context = pPowerMgr; 24864064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.TimeIntervalMs = BET_INTERVAL_VALUE; 24964064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.Trigger = TRAFF_EDGE; 25064064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.MonitorType = TX_RX_ALL_802_11_DATA_FRAMES; 25164064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.CallBack = PowerMgrConfigBetToFw; 25264064216a8433360745f69edddce19a606659163The Android Open Source Project 25364064216a8433360745f69edddce19a606659163The Android Open Source Project /* BET enable event */ 25464064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.Direction = TRAFF_DOWN; 25564064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.Threshold = pPowerMgrInitParams->BetEnableThreshold; 25664064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->BetEnableThreshold = pPowerMgrInitParams->BetEnableThreshold; 25764064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.Cookie = (UINT32)BET_ENABLE; 25864064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->betEnableTMEvent = TrafficMonitor_RegEvent(hTrafficMonitor, 25964064216a8433360745f69edddce19a606659163The Android Open Source Project &tmRegParam, 26064064216a8433360745f69edddce19a606659163The Android Open Source Project FALSE); 26164064216a8433360745f69edddce19a606659163The Android Open Source Project /* BET disable event */ 26264064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.Direction = TRAFF_UP; 26364064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.Threshold = pPowerMgrInitParams->BetDisableThreshold; 26464064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->BetDisableThreshold = pPowerMgrInitParams->BetDisableThreshold; 26564064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.Cookie = (UINT32)BET_DISABLE; 26664064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->betDisableTMEvent = TrafficMonitor_RegEvent(hTrafficMonitor, 26764064216a8433360745f69edddce19a606659163The Android Open Source Project &tmRegParam, 26864064216a8433360745f69edddce19a606659163The Android Open Source Project FALSE); 26964064216a8433360745f69edddce19a606659163The Android Open Source Project 27064064216a8433360745f69edddce19a606659163The Android Open Source Project if ( (pPowerMgr->betDisableTMEvent == NULL) || 27164064216a8433360745f69edddce19a606659163The Android Open Source Project (pPowerMgr->betEnableTMEvent == NULL) ) 27264064216a8433360745f69edddce19a606659163The Android Open Source Project { 27364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INIT(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 27464064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgr_init - TM - ERROR registering BET events - ABROTING init!\n")); 27564064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 27664064216a8433360745f69edddce19a606659163The Android Open Source Project } 27764064216a8433360745f69edddce19a606659163The Android Open Source Project /* 27864064216a8433360745f69edddce19a606659163The Android Open Source Project set the events as resets for one another 27964064216a8433360745f69edddce19a606659163The Android Open Source Project */ 28064064216a8433360745f69edddce19a606659163The Android Open Source Project status = TrafficMonitor_SetRstCondition(hTrafficMonitor, 28164064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->betDisableTMEvent, 28264064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->betEnableTMEvent, 28364064216a8433360745f69edddce19a606659163The Android Open Source Project TRUE); 28464064216a8433360745f69edddce19a606659163The Android Open Source Project if ( status != OK ) 28564064216a8433360745f69edddce19a606659163The Android Open Source Project { 28664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INIT(pPowerMgr->hReport, 28764064216a8433360745f69edddce19a606659163The Android Open Source Project POWER_MANAGER_MODULE_LOG, 28864064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgr_init - PowerMgr_init - ERROR binding BET events - ABROTING init!\n")); 28964064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 29064064216a8433360745f69edddce19a606659163The Android Open Source Project } 29164064216a8433360745f69edddce19a606659163The Android Open Source Project 29264064216a8433360745f69edddce19a606659163The Android Open Source Project /* general parameters */ 29364064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.Context = pPowerMgr; 29464064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.Cookie = (UINT32)POWER_MODE_ACTIVE; 29564064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.TimeIntervalMs = pPowerMgr->autoModeInterval; 29664064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.Trigger = TRAFF_EDGE; 29764064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.MonitorType = TX_RX_ALL_802_11_DATA_FRAMES; 29864064216a8433360745f69edddce19a606659163The Android Open Source Project 29964064216a8433360745f69edddce19a606659163The Android Open Source Project /* Active threshold */ 30064064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.CallBack = PowerMgrTMThresholdCrossCB; 30164064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.Direction = TRAFF_UP; 30264064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.Threshold = pPowerMgr->autoModeActiveTH; 30364064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->passToActiveTMEvent = TrafficMonitor_RegEvent(hTrafficMonitor, 30464064216a8433360745f69edddce19a606659163The Android Open Source Project &tmRegParam, 30564064216a8433360745f69edddce19a606659163The Android Open Source Project FALSE); 30664064216a8433360745f69edddce19a606659163The Android Open Source Project /* Doze threshold */ 30764064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.Direction = TRAFF_DOWN; 30864064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.Threshold = pPowerMgr->autoModeDozeTH; 30964064216a8433360745f69edddce19a606659163The Android Open Source Project tmRegParam.Cookie = (UINT32)POWER_MODE_SHORT_DOZE; /* diffrentiation between long / short doze is done at the 31064064216a8433360745f69edddce19a606659163The Android Open Source Project CB, according to configuration at time of CB invokation */ 31164064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->passToDozeTMEvent = TrafficMonitor_RegEvent(hTrafficMonitor, 31264064216a8433360745f69edddce19a606659163The Android Open Source Project &tmRegParam, 31364064216a8433360745f69edddce19a606659163The Android Open Source Project FALSE); 31464064216a8433360745f69edddce19a606659163The Android Open Source Project 31564064216a8433360745f69edddce19a606659163The Android Open Source Project if ( (pPowerMgr->passToActiveTMEvent == NULL) || 31664064216a8433360745f69edddce19a606659163The Android Open Source Project (pPowerMgr->passToDozeTMEvent == NULL) ) 31764064216a8433360745f69edddce19a606659163The Android Open Source Project { 31864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INIT(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 31964064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgr_init - PowerMgr_init - ERROR registering Auto mode events - ABROTING init!\n")); 32064064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 32164064216a8433360745f69edddce19a606659163The Android Open Source Project } 32264064216a8433360745f69edddce19a606659163The Android Open Source Project 32364064216a8433360745f69edddce19a606659163The Android Open Source Project /* 32464064216a8433360745f69edddce19a606659163The Android Open Source Project set the events as resets for one another 32564064216a8433360745f69edddce19a606659163The Android Open Source Project */ 32664064216a8433360745f69edddce19a606659163The Android Open Source Project status = TrafficMonitor_SetRstCondition(hTrafficMonitor, 32764064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->passToActiveTMEvent, 32864064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->passToDozeTMEvent, 32964064216a8433360745f69edddce19a606659163The Android Open Source Project TRUE); 33064064216a8433360745f69edddce19a606659163The Android Open Source Project if ( status != OK ) 33164064216a8433360745f69edddce19a606659163The Android Open Source Project { 33264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INIT(pPowerMgr->hReport, 33364064216a8433360745f69edddce19a606659163The Android Open Source Project POWER_MANAGER_MODULE_LOG, 33464064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgr_init - PowerMgr_init - ERROR binding Auto mode events - ABROTING init!\n")); 33564064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 33664064216a8433360745f69edddce19a606659163The Android Open Source Project } 33764064216a8433360745f69edddce19a606659163The Android Open Source Project 33864064216a8433360745f69edddce19a606659163The Android Open Source Project /* 33964064216a8433360745f69edddce19a606659163The Android Open Source Project configure the initialize power mode 34064064216a8433360745f69edddce19a606659163The Android Open Source Project */ 34164064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->desiredPowerModeProfile = pPowerMgrInitParams->powerMode; 34264064216a8433360745f69edddce19a606659163The Android Open Source Project for ( index = 0;index < POWER_MANAGER_MAX_PRIORITY;index++ ) 34364064216a8433360745f69edddce19a606659163The Android Open Source Project { 34464064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->powerMngModePriority[index].powerMode = pPowerMgr->desiredPowerModeProfile; 34564064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->powerMngModePriority[index].priorityEnable = FALSE; 34664064216a8433360745f69edddce19a606659163The Android Open Source Project } 34764064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->powerMngModePriority[POWER_MANAGER_USER_PRIORITY].priorityEnable = TRUE; 34864064216a8433360745f69edddce19a606659163The Android Open Source Project /* set the defualt power policy */ 34964064216a8433360745f69edddce19a606659163The Android Open Source Project MacServices_powerAutho_PowerPolicyUpdate(pPowerMgr->hMacServices, pPowerMgr->defaultPowerLevel); 35064064216a8433360745f69edddce19a606659163The Android Open Source Project 35164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Register and Enable the PsPoll failure */ 35264064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_EventMbox_RegisterForEvent( pPowerMgr->hWhalCtrl, 35364064216a8433360745f69edddce19a606659163The Android Open Source Project HAL_EVENT_PSPOLL_DELIVERY_FAILURE, 35464064216a8433360745f69edddce19a606659163The Android Open Source Project (void *)PowerMgr_PsPollFailureCB, 35564064216a8433360745f69edddce19a606659163The Android Open Source Project hPowerMgr ); 35664064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_EventMbox_Enable( pPowerMgr->hWhalCtrl, HAL_EVENT_PSPOLL_DELIVERY_FAILURE ); 35764064216a8433360745f69edddce19a606659163The Android Open Source Project 35864064216a8433360745f69edddce19a606659163The Android Open Source Project 35964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INIT(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 36064064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgr_init - PowerMgr Initialized\n")); 36164064216a8433360745f69edddce19a606659163The Android Open Source Project 36264064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 36364064216a8433360745f69edddce19a606659163The Android Open Source Project} 36464064216a8433360745f69edddce19a606659163The Android Open Source Project 36564064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************************** 36664064216a8433360745f69edddce19a606659163The Android Open Source Project * PowerMgr_startPS * 36764064216a8433360745f69edddce19a606659163The Android Open Source Project **************************************************************************************** 36864064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Start the power save algorithm of the driver and also the 802.11 PS. 36964064216a8433360745f69edddce19a606659163The Android Open Source Project 37064064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 37164064216a8433360745f69edddce19a606659163The Android Open Source Project 37264064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 37364064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: TI_STATUS - OK or PENDING on success else NOK.\n 37464064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 37564064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS PowerMgr_startPS(TI_HANDLE hPowerMgr) 37664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 37764064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 37864064216a8433360745f69edddce19a606659163The Android Open Source Project int frameCount; 37964064216a8433360745f69edddce19a606659163The Android Open Source Project 38064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 38164064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgr_startPS - called\n")); 38264064216a8433360745f69edddce19a606659163The Android Open Source Project 38364064216a8433360745f69edddce19a606659163The Android Open Source Project 38464064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->psEnable == TRUE ) 38564064216a8433360745f69edddce19a606659163The Android Open Source Project { 38664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 38764064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgr_startPS - PS mechanism is already Enable! Aborting psEnable=%d !\n", 38864064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->psEnable)); 38964064216a8433360745f69edddce19a606659163The Android Open Source Project /* 39064064216a8433360745f69edddce19a606659163The Android Open Source Project this is a FATAL ERROR of the power manager! 39164064216a8433360745f69edddce19a606659163The Android Open Source Project already enable power-save! thus return OK, but there is an error in the upper 39264064216a8433360745f69edddce19a606659163The Android Open Source Project layer that call tp PowerMgr_startPS() twice - should know that power-save 39364064216a8433360745f69edddce19a606659163The Android Open Source Project is already enable therefor print the Error message. 39464064216a8433360745f69edddce19a606659163The Android Open Source Project or 39564064216a8433360745f69edddce19a606659163The Android Open Source Project the state machine while NOT in PS can be only in ACTIVE state and in some cases in 39664064216a8433360745f69edddce19a606659163The Android Open Source Project PS_PENDING state. therefore the state machine is out of sync from it logic! 39764064216a8433360745f69edddce19a606659163The Android Open Source Project */ 39864064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 39964064216a8433360745f69edddce19a606659163The Android Open Source Project } 40064064216a8433360745f69edddce19a606659163The Android Open Source Project 40164064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->psEnable = TRUE; 40264064216a8433360745f69edddce19a606659163The Android Open Source Project /*set the correct rate after connection*/ 40364064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrNullPacketRateConfiguration(hPowerMgr); 40464064216a8433360745f69edddce19a606659163The Android Open Source Project /* 40564064216a8433360745f69edddce19a606659163The Android Open Source Project if in auto mode then need to refer to the threshold cross indication from the traffic monitor, 40664064216a8433360745f69edddce19a606659163The Android Open Source Project else it need to refer to the configured power mode profile from the user. 40764064216a8433360745f69edddce19a606659163The Android Open Source Project */ 40864064216a8433360745f69edddce19a606659163The Android Open Source Project 40964064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->desiredPowerModeProfile = powerMgrGetHighestPriority(hPowerMgr); 41064064216a8433360745f69edddce19a606659163The Android Open Source Project 41164064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->desiredPowerModeProfile == POWER_MODE_AUTO ) 41264064216a8433360745f69edddce19a606659163The Android Open Source Project { 41364064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrStartAutoPowerMode(hPowerMgr); 41464064216a8433360745f69edddce19a606659163The Android Open Source Project } 41564064216a8433360745f69edddce19a606659163The Android Open Source Project else /*not auto mode - according to the current profle*/ 41664064216a8433360745f69edddce19a606659163The Android Open Source Project { 41764064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrPowerProfileConfiguration(hPowerMgr, pPowerMgr->desiredPowerModeProfile); 41864064216a8433360745f69edddce19a606659163The Android Open Source Project } 41964064216a8433360745f69edddce19a606659163The Android Open Source Project 42064064216a8433360745f69edddce19a606659163The Android Open Source Project 42164064216a8433360745f69edddce19a606659163The Android Open Source Project if (pPowerMgr->betEnable) 42264064216a8433360745f69edddce19a606659163The Android Open Source Project { 42364064216a8433360745f69edddce19a606659163The Android Open Source Project TrafficMonitor_StartEventNotif(pPowerMgr->hTrafficMonitor, 42464064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->betEnableTMEvent); 42564064216a8433360745f69edddce19a606659163The Android Open Source Project 42664064216a8433360745f69edddce19a606659163The Android Open Source Project TrafficMonitor_StartEventNotif(pPowerMgr->hTrafficMonitor, 42764064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->betDisableTMEvent); 42864064216a8433360745f69edddce19a606659163The Android Open Source Project 42964064216a8433360745f69edddce19a606659163The Android Open Source Project 43064064216a8433360745f69edddce19a606659163The Android Open Source Project frameCount = TrafficMonitor_GetFrameBandwidth(pPowerMgr->hTrafficMonitor); 43164064216a8433360745f69edddce19a606659163The Android Open Source Project 43264064216a8433360745f69edddce19a606659163The Android Open Source Project if (frameCount < pPowerMgr->BetEnableThreshold) 43364064216a8433360745f69edddce19a606659163The Android Open Source Project { 43464064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->betTrafficEnable = TRUE; 43564064216a8433360745f69edddce19a606659163The Android Open Source Project } 43664064216a8433360745f69edddce19a606659163The Android Open Source Project else if (frameCount > pPowerMgr->BetDisableThreshold) 43764064216a8433360745f69edddce19a606659163The Android Open Source Project { 43864064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->betTrafficEnable = FALSE; 43964064216a8433360745f69edddce19a606659163The Android Open Source Project } 44064064216a8433360745f69edddce19a606659163The Android Open Source Project 44164064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgrConfigBetToFw(hPowerMgr,pPowerMgr->betTrafficEnable); 44264064216a8433360745f69edddce19a606659163The Android Open Source Project } 44364064216a8433360745f69edddce19a606659163The Android Open Source Project 44464064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 44564064216a8433360745f69edddce19a606659163The Android Open Source Project} 44664064216a8433360745f69edddce19a606659163The Android Open Source Project 44764064216a8433360745f69edddce19a606659163The Android Open Source Project 44864064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************************** 44964064216a8433360745f69edddce19a606659163The Android Open Source Project * PowerMgr_stopPS * 45064064216a8433360745f69edddce19a606659163The Android Open Source Project **************************************************************************************** 45164064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Stop the power save algorithm of the driver and also the 802.11 PS. 45264064216a8433360745f69edddce19a606659163The Android Open Source Project 45364064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 45464064216a8433360745f69edddce19a606659163The Android Open Source Project 45564064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 45664064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: TI_STATUS - OK or PENDING on success else NOK.\n 45764064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 45864064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS PowerMgr_stopPS(TI_HANDLE hPowerMgr) 45964064216a8433360745f69edddce19a606659163The Android Open Source Project{ 46064064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 46164064216a8433360745f69edddce19a606659163The Android Open Source Project /*TI_STATUS status;*/ 46264064216a8433360745f69edddce19a606659163The Android Open Source Project 46364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 46464064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgr_stopPS - called\n")); 46564064216a8433360745f69edddce19a606659163The Android Open Source Project 46664064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->psEnable == FALSE ) 46764064216a8433360745f69edddce19a606659163The Android Open Source Project { 46864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 46964064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgr_stopPS - PS is already Disable! Aborting!\n")); 47064064216a8433360745f69edddce19a606659163The Android Open Source Project /* 47164064216a8433360745f69edddce19a606659163The Android Open Source Project Print Info message incase callng PowerMgr_stopPS() more than once in a row, without 47264064216a8433360745f69edddce19a606659163The Android Open Source Project calling to PowerMgr_startPS() in the middle. 47364064216a8433360745f69edddce19a606659163The Android Open Source Project this will return with OK and not doing the Stop action! 47464064216a8433360745f69edddce19a606659163The Android Open Source Project */ 47564064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 47664064216a8433360745f69edddce19a606659163The Android Open Source Project } 47764064216a8433360745f69edddce19a606659163The Android Open Source Project 47864064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->psEnable = FALSE; 47964064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerStop(pPowerMgr->hOS, pPowerMgr->hRetryPsTimer); 48064064216a8433360745f69edddce19a606659163The Android Open Source Project 48164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Check if PsPoll work-around is currently enabled */ 48264064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->powerMngModePriority[POWER_MANAGER_PS_POLL_FAILURE_PRIORITY].priorityEnable == TRUE) 48364064216a8433360745f69edddce19a606659163The Android Open Source Project { 48464064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerStop(pPowerMgr->hOS, pPowerMgr->hPsPollFailureTimer); 48564064216a8433360745f69edddce19a606659163The Android Open Source Project /* Exit the PsPoll work-around */ 48664064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgr_PsPollFailureTimeout( hPowerMgr ); 48764064216a8433360745f69edddce19a606659163The Android Open Source Project } 48864064216a8433360745f69edddce19a606659163The Android Open Source Project 48964064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->desiredPowerModeProfile == POWER_MODE_AUTO ) 49064064216a8433360745f69edddce19a606659163The Android Open Source Project { 49164064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrDisableThresholdsIndications(hPowerMgr); 49264064216a8433360745f69edddce19a606659163The Android Open Source Project } 49364064216a8433360745f69edddce19a606659163The Android Open Source Project 49464064216a8433360745f69edddce19a606659163The Android Open Source Project MacServices_powerSrv_SetPsMode(pPowerMgr->hMacServices, POWER_SAVE_OFF, FALSE,NULL, NULL, NULL); 49564064216a8433360745f69edddce19a606659163The Android Open Source Project 49664064216a8433360745f69edddce19a606659163The Android Open Source Project /* set the power policy of the system */ 49764064216a8433360745f69edddce19a606659163The Android Open Source Project MacServices_powerAutho_PowerPolicyUpdate(pPowerMgr->hMacServices, pPowerMgr->defaultPowerLevel); 49864064216a8433360745f69edddce19a606659163The Android Open Source Project 49964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pPowerMgr->betEnable) 50064064216a8433360745f69edddce19a606659163The Android Open Source Project { 50164064216a8433360745f69edddce19a606659163The Android Open Source Project TrafficMonitor_StopEventNotif(pPowerMgr->hTrafficMonitor, 50264064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->betEnableTMEvent); 50364064216a8433360745f69edddce19a606659163The Android Open Source Project 50464064216a8433360745f69edddce19a606659163The Android Open Source Project TrafficMonitor_StopEventNotif(pPowerMgr->hTrafficMonitor, 50564064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->betDisableTMEvent); 50664064216a8433360745f69edddce19a606659163The Android Open Source Project } 50764064216a8433360745f69edddce19a606659163The Android Open Source Project 50864064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 50964064216a8433360745f69edddce19a606659163The Android Open Source Project} 51064064216a8433360745f69edddce19a606659163The Android Open Source Project 51164064216a8433360745f69edddce19a606659163The Android Open Source Project 51264064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************************** 51364064216a8433360745f69edddce19a606659163The Android Open Source Project * PowerMgr_getPsStatus * 51464064216a8433360745f69edddce19a606659163The Android Open Source Project **************************************************************************************** 51564064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: returns the 802.11 power save status (enable / disable). 51664064216a8433360745f69edddce19a606659163The Android Open Source Project 51764064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 51864064216a8433360745f69edddce19a606659163The Android Open Source Project 51964064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 52064064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: BOOLEAN - TRUE if enable else FALSE.\n 52164064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 52264064216a8433360745f69edddce19a606659163The Android Open Source ProjectBOOLEAN PowerMgr_getPsStatus(TI_HANDLE hPowerMgr) 52364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 52464064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 52564064216a8433360745f69edddce19a606659163The Android Open Source Project return MacServices_powerSrv_getPsStatus(pPowerMgr->hMacServices); 52664064216a8433360745f69edddce19a606659163The Android Open Source Project 52764064216a8433360745f69edddce19a606659163The Android Open Source Project} 52864064216a8433360745f69edddce19a606659163The Android Open Source Project 52964064216a8433360745f69edddce19a606659163The Android Open Source Project 53064064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************************** 53164064216a8433360745f69edddce19a606659163The Android Open Source Project * PowerMgr_setPowerMode * 53264064216a8433360745f69edddce19a606659163The Android Open Source Project **************************************************************************************** 53364064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Configure of the PowerMode profile (auto / active / short doze / long doze). 53464064216a8433360745f69edddce19a606659163The Android Open Source Project 53564064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 53664064216a8433360745f69edddce19a606659163The Android Open Source Project - thePowerMode - the requested power mode (auto / active / short doze / long doze). 53764064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 53864064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: TI_STATUS - OK on success else NOK.\n 53964064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 54064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS PowerMgr_setPowerMode(TI_HANDLE hPowerMgr) 54164064216a8433360745f69edddce19a606659163The Android Open Source Project{ 54264064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 54364064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_PowerMode_e powerMode; 54464064216a8433360745f69edddce19a606659163The Android Open Source Project 54564064216a8433360745f69edddce19a606659163The Android Open Source Project /*in this way we will run with the highest priority that is enabled*/ 54664064216a8433360745f69edddce19a606659163The Android Open Source Project powerMode = powerMgrGetHighestPriority(hPowerMgr); 54764064216a8433360745f69edddce19a606659163The Android Open Source Project 54864064216a8433360745f69edddce19a606659163The Android Open Source Project /* sanity checking */ 54964064216a8433360745f69edddce19a606659163The Android Open Source Project if ( powerMode >= POWER_MODE_MAX) 55064064216a8433360745f69edddce19a606659163The Android Open Source Project { 55164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 55264064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgr_setPowerMode - unknown parameter: %d\n", powerMode)); 55364064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 55464064216a8433360745f69edddce19a606659163The Android Open Source Project } 55564064216a8433360745f69edddce19a606659163The Android Open Source Project 55664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION( pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 55764064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgr_setPowerMode, power mode = %d\n", powerMode) ); 55864064216a8433360745f69edddce19a606659163The Android Open Source Project 55964064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->desiredPowerModeProfile != powerMode ) 56064064216a8433360745f69edddce19a606659163The Android Open Source Project { 56164064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_PowerMode_e previousPowerModeProfile; 56264064216a8433360745f69edddce19a606659163The Android Open Source Project previousPowerModeProfile = pPowerMgr->desiredPowerModeProfile; 56364064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->desiredPowerModeProfile = powerMode; 56464064216a8433360745f69edddce19a606659163The Android Open Source Project 56564064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->desiredPowerModeProfile == POWER_MODE_AUTO ) 56664064216a8433360745f69edddce19a606659163The Android Open Source Project { 56764064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->psEnable == TRUE ) 56864064216a8433360745f69edddce19a606659163The Android Open Source Project { 56964064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrStartAutoPowerMode(hPowerMgr); 57064064216a8433360745f69edddce19a606659163The Android Open Source Project } 57164064216a8433360745f69edddce19a606659163The Android Open Source Project 57264064216a8433360745f69edddce19a606659163The Android Open Source Project /* 57364064216a8433360745f69edddce19a606659163The Android Open Source Project the transitions of state will be done according to the events from the 57464064216a8433360745f69edddce19a606659163The Android Open Source Project traffic monitor - therefor abort and wait event from the traffic monitor. 57564064216a8433360745f69edddce19a606659163The Android Open Source Project */ 57664064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 57764064216a8433360745f69edddce19a606659163The Android Open Source Project } 57864064216a8433360745f69edddce19a606659163The Android Open Source Project else if ( previousPowerModeProfile == POWER_MODE_AUTO ) 57964064216a8433360745f69edddce19a606659163The Android Open Source Project { 58064064216a8433360745f69edddce19a606659163The Android Open Source Project /* 58164064216a8433360745f69edddce19a606659163The Android Open Source Project if the old power mode is AUTO and the new power mode is NOT then need 58264064216a8433360745f69edddce19a606659163The Android Open Source Project to disable the thresholds indications from the traffic monitor. 58364064216a8433360745f69edddce19a606659163The Android Open Source Project */ 58464064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrDisableThresholdsIndications(hPowerMgr); 58564064216a8433360745f69edddce19a606659163The Android Open Source Project } 58664064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->psEnable == TRUE ) 58764064216a8433360745f69edddce19a606659163The Android Open Source Project { 58864064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrPowerProfileConfiguration(hPowerMgr, powerMode); 58964064216a8433360745f69edddce19a606659163The Android Open Source Project } 59064064216a8433360745f69edddce19a606659163The Android Open Source Project } 59164064216a8433360745f69edddce19a606659163The Android Open Source Project else 59264064216a8433360745f69edddce19a606659163The Android Open Source Project { 59364064216a8433360745f69edddce19a606659163The Android Open Source Project /* 59464064216a8433360745f69edddce19a606659163The Android Open Source Project the power mode is already configure to the module - don't need to do anything! 59564064216a8433360745f69edddce19a606659163The Android Open Source Project */ 59664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_WARNING(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 59764064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgr_setPowerMode - desiredPowerModeProfile == thePowerMode (=%d), ABORTING!\n", 59864064216a8433360745f69edddce19a606659163The Android Open Source Project powerMode)); 59964064216a8433360745f69edddce19a606659163The Android Open Source Project } 60064064216a8433360745f69edddce19a606659163The Android Open Source Project 60164064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 60264064216a8433360745f69edddce19a606659163The Android Open Source Project} 60364064216a8433360745f69edddce19a606659163The Android Open Source Project 60464064216a8433360745f69edddce19a606659163The Android Open Source Project 60564064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************************** 60664064216a8433360745f69edddce19a606659163The Android Open Source Project * PowerMgr_reloadPowerMode * 60764064216a8433360745f69edddce19a606659163The Android Open Source Project **************************************************************************************** 60864064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Sends the current power mode configuration to the firmware. 60964064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 61064064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 61164064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: 61264064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 61364064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid PowerMgr_reloadPowerMode(TI_HANDLE hPowerMgr) 61464064216a8433360745f69edddce19a606659163The Android Open Source Project{ 61564064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t * pPowerMgr = (PowerMgr_t *) hPowerMgr; 61664064216a8433360745f69edddce19a606659163The Android Open Source Project 61764064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->desiredPowerModeProfile = powerMgrGetHighestPriority(hPowerMgr); 61864064216a8433360745f69edddce19a606659163The Android Open Source Project 61964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pPowerMgr->psEnable == TRUE) 62064064216a8433360745f69edddce19a606659163The Android Open Source Project { 62164064216a8433360745f69edddce19a606659163The Android Open Source Project if (pPowerMgr->desiredPowerModeProfile == POWER_MODE_AUTO) 62264064216a8433360745f69edddce19a606659163The Android Open Source Project { 62364064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrStartAutoPowerMode(hPowerMgr); 62464064216a8433360745f69edddce19a606659163The Android Open Source Project } 62564064216a8433360745f69edddce19a606659163The Android Open Source Project else 62664064216a8433360745f69edddce19a606659163The Android Open Source Project { 62764064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrPowerProfileConfiguration(hPowerMgr, pPowerMgr->desiredPowerModeProfile); 62864064216a8433360745f69edddce19a606659163The Android Open Source Project } 62964064216a8433360745f69edddce19a606659163The Android Open Source Project } 63064064216a8433360745f69edddce19a606659163The Android Open Source Project} 63164064216a8433360745f69edddce19a606659163The Android Open Source Project 63264064216a8433360745f69edddce19a606659163The Android Open Source Project 63364064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************************** 63464064216a8433360745f69edddce19a606659163The Android Open Source Project * PowerMgr_setDozeModeInAuto * 63564064216a8433360745f69edddce19a606659163The Android Open Source Project **************************************************************************************** 63664064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Configure the doze mode (short-doze / long-doze) that auto mode will toggle between doze vs active. 63764064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 63864064216a8433360745f69edddce19a606659163The Android Open Source Project - dozeMode - the requested doze mode when Mgr is in Auto mode (short-doze / long-doze) 63964064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 64064064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: 64164064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 64264064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid PowerMgr_setDozeModeInAuto(TI_HANDLE hPowerMgr, PowerMgr_PowerMode_e dozeMode) 64364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 64464064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 64564064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_PowerMode_e powerMode = powerMgrGetHighestPriority(hPowerMgr); 64664064216a8433360745f69edddce19a606659163The Android Open Source Project 64764064216a8433360745f69edddce19a606659163The Android Open Source Project /* check if we are trying to configure the same Doze mode */ 64864064216a8433360745f69edddce19a606659163The Android Open Source Project if ( dozeMode != pPowerMgr->autoModeDozeMode ) 64964064216a8433360745f69edddce19a606659163The Android Open Source Project { 65064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 65164064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgr_setDozeModeInAuto - autoModeDozeMode == %d \n", 65264064216a8433360745f69edddce19a606659163The Android Open Source Project dozeMode)); 65364064216a8433360745f69edddce19a606659163The Android Open Source Project 65464064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->autoModeDozeMode = dozeMode; 65564064216a8433360745f69edddce19a606659163The Android Open Source Project 65664064216a8433360745f69edddce19a606659163The Android Open Source Project /* in case we are already in Auto mode, we have to set the wake up condition MIB */ 65764064216a8433360745f69edddce19a606659163The Android Open Source Project if ( powerMode == POWER_MODE_AUTO ) 65864064216a8433360745f69edddce19a606659163The Android Open Source Project { 65964064216a8433360745f69edddce19a606659163The Android Open Source Project if ( dozeMode == POWER_MODE_SHORT_DOZE ) 66064064216a8433360745f69edddce19a606659163The Android Open Source Project { 66164064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->beaconListenInterval > 1 ) 66264064216a8433360745f69edddce19a606659163The Android Open Source Project { 66364064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->beaconListenInterval,TNET_WAKE_ON_N_BEACON); 66464064216a8433360745f69edddce19a606659163The Android Open Source Project } 66564064216a8433360745f69edddce19a606659163The Android Open Source Project else 66664064216a8433360745f69edddce19a606659163The Android Open Source Project { 66764064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->beaconListenInterval,TNET_WAKE_ON_BEACON); 66864064216a8433360745f69edddce19a606659163The Android Open Source Project } 66964064216a8433360745f69edddce19a606659163The Android Open Source Project } 67064064216a8433360745f69edddce19a606659163The Android Open Source Project else /* POWER_MODE_LONG_DOZE */ 67164064216a8433360745f69edddce19a606659163The Android Open Source Project { 67264064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->dtimListenInterval > 1 ) 67364064216a8433360745f69edddce19a606659163The Android Open Source Project { 67464064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->dtimListenInterval,TNET_WAKE_ON_N_DTIM); 67564064216a8433360745f69edddce19a606659163The Android Open Source Project } 67664064216a8433360745f69edddce19a606659163The Android Open Source Project else 67764064216a8433360745f69edddce19a606659163The Android Open Source Project { 67864064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->dtimListenInterval,TNET_WAKE_ON_DTIM); 67964064216a8433360745f69edddce19a606659163The Android Open Source Project } 68064064216a8433360745f69edddce19a606659163The Android Open Source Project } 68164064216a8433360745f69edddce19a606659163The Android Open Source Project 68264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 68364064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgr_setDozeModeInAuto - already in Auto\n")); 68464064216a8433360745f69edddce19a606659163The Android Open Source Project } 68564064216a8433360745f69edddce19a606659163The Android Open Source Project } 68664064216a8433360745f69edddce19a606659163The Android Open Source Project else 68764064216a8433360745f69edddce19a606659163The Android Open Source Project { 68864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_WARNING(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 68964064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgr_setDozeModeInAuto - autoModeDozeMode == %d (same same ...)\n", 69064064216a8433360745f69edddce19a606659163The Android Open Source Project dozeMode)); 69164064216a8433360745f69edddce19a606659163The Android Open Source Project } 69264064216a8433360745f69edddce19a606659163The Android Open Source Project} 69364064216a8433360745f69edddce19a606659163The Android Open Source Project 69464064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************************** 69564064216a8433360745f69edddce19a606659163The Android Open Source Project * PowerMgr_getPowerMode * 69664064216a8433360745f69edddce19a606659163The Android Open Source Project **************************************************************************************** 69764064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Get the current PowerMode of the PowerMgr module. 69864064216a8433360745f69edddce19a606659163The Android Open Source Project 69964064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 70064064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 70164064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: PowerMgr_PowerMode_e - (auto / active / short doze / long doze).\n 70264064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 70364064216a8433360745f69edddce19a606659163The Android Open Source ProjectPowerMgr_PowerMode_e PowerMgr_getPowerMode(TI_HANDLE hPowerMgr) 70464064216a8433360745f69edddce19a606659163The Android Open Source Project{ 70564064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 70664064216a8433360745f69edddce19a606659163The Android Open Source Project 70764064216a8433360745f69edddce19a606659163The Android Open Source Project return pPowerMgr->desiredPowerModeProfile; 70864064216a8433360745f69edddce19a606659163The Android Open Source Project} 70964064216a8433360745f69edddce19a606659163The Android Open Source Project 71064064216a8433360745f69edddce19a606659163The Android Open Source Project 71164064216a8433360745f69edddce19a606659163The Android Open Source Project/** 71264064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Yossi Peery 71364064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 2-August-2004\n 71464064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief reset the power manager module due to recovry event. 71564064216a8433360745f69edddce19a606659163The Android Open Source Project * 71664064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n 71764064216a8433360745f69edddce19a606659163The Android Open Source Project * Parameters:\n 71864064216a8433360745f69edddce19a606659163The Android Open Source Project * 1) TI_HANDLE - handle to the PowerMgr object.\n 71964064216a8433360745f69edddce19a606659163The Android Open Source Project * Return Value: TI_STATUS - OK on success else NOK.\n 72064064216a8433360745f69edddce19a606659163The Android Open Source Project * \b Description:\n 72164064216a8433360745f69edddce19a606659163The Android Open Source Project * simulate the stop power save function without writing to the HW. just doing the 72264064216a8433360745f69edddce19a606659163The Android Open Source Project * logic parts of stop power save from the power manager to it state machine. 72364064216a8433360745f69edddce19a606659163The Android Open Source Project * the power controller and it state machine are reset in the whalCtrl recovry proccess. 72464064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 72564064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS PowerMgr_swReset(TI_HANDLE hPowerMgr) 72664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 72764064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 72864064216a8433360745f69edddce19a606659163The Android Open Source Project 72964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 73064064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgr_swReset() called\n")); 73164064216a8433360745f69edddce19a606659163The Android Open Source Project 73264064216a8433360745f69edddce19a606659163The Android Open Source Project 73364064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->psEnable = FALSE; 73464064216a8433360745f69edddce19a606659163The Android Open Source Project 73564064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->desiredPowerModeProfile == POWER_MODE_AUTO ) 73664064216a8433360745f69edddce19a606659163The Android Open Source Project { 73764064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrDisableThresholdsIndications(hPowerMgr); 73864064216a8433360745f69edddce19a606659163The Android Open Source Project } 73964064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerStop(pPowerMgr->hOS, pPowerMgr->hRetryPsTimer); 74064064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 74164064216a8433360745f69edddce19a606659163The Android Open Source Project} 74264064216a8433360745f69edddce19a606659163The Android Open Source Project 74364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS powerMgr_setParam(TI_HANDLE thePowerMgrHandle, 74464064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t *theParamP) 74564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 74664064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)thePowerMgrHandle; 74764064216a8433360745f69edddce19a606659163The Android Open Source Project 74864064216a8433360745f69edddce19a606659163The Android Open Source Project switch ( theParamP->paramType ) 74964064216a8433360745f69edddce19a606659163The Android Open Source Project { 75064064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MGR_POWER_MODE: 75164064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->powerMngModePriority[theParamP->content.powerMngPowerMode.powerMngPriority].powerMode 75264064216a8433360745f69edddce19a606659163The Android Open Source Project = theParamP->content.powerMngPowerMode.PowerMode; 75364064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_setPowerMode(thePowerMgrHandle); 75464064216a8433360745f69edddce19a606659163The Android Open Source Project if (pPowerMgr->betEnable) 75564064216a8433360745f69edddce19a606659163The Android Open Source Project { 75664064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgrConfigBetToFw(thePowerMgrHandle, pPowerMgr->betTrafficEnable ); 75764064216a8433360745f69edddce19a606659163The Android Open Source Project } 75864064216a8433360745f69edddce19a606659163The Android Open Source Project break; 75964064216a8433360745f69edddce19a606659163The Android Open Source Project 76064064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MGR_DISABLE_PRIORITY: 76164064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->powerMngModePriority[theParamP->content.powerMngPriority].priorityEnable = FALSE; 76264064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_setPowerMode(thePowerMgrHandle); 76364064216a8433360745f69edddce19a606659163The Android Open Source Project break; 76464064216a8433360745f69edddce19a606659163The Android Open Source Project 76564064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MGR_ENABLE_PRIORITY: 76664064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->powerMngModePriority[theParamP->content.powerMngPriority].priorityEnable = TRUE; 76764064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_setPowerMode(thePowerMgrHandle); 76864064216a8433360745f69edddce19a606659163The Android Open Source Project break; 76964064216a8433360745f69edddce19a606659163The Android Open Source Project 77064064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MGR_POWER_LEVEL_PS: 77164064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->PowerSavePowerLevel = theParamP->content.PowerSavePowerLevel; 77264064216a8433360745f69edddce19a606659163The Android Open Source Project /* set the power policy of the system */ 77364064216a8433360745f69edddce19a606659163The Android Open Source Project if (pPowerMgr->psEnable && (pPowerMgr->desiredPowerModeProfile!=POWER_MODE_AUTO)) 77464064216a8433360745f69edddce19a606659163The Android Open Source Project { /* If Connected and not in AUTO mode */ 77564064216a8433360745f69edddce19a606659163The Android Open Source Project MacServices_powerAutho_PowerPolicyUpdate(pPowerMgr->hMacServices, pPowerMgr->PowerSavePowerLevel); 77664064216a8433360745f69edddce19a606659163The Android Open Source Project } 77764064216a8433360745f69edddce19a606659163The Android Open Source Project break; 77864064216a8433360745f69edddce19a606659163The Android Open Source Project 77964064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MGR_POWER_LEVEL_DEFAULT: 78064064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->defaultPowerLevel = theParamP->content.DefaultPowerLevel; 78164064216a8433360745f69edddce19a606659163The Android Open Source Project /* set the power policy of the system */ 78264064216a8433360745f69edddce19a606659163The Android Open Source Project if (!pPowerMgr->psEnable) 78364064216a8433360745f69edddce19a606659163The Android Open Source Project { /* If not Connected */ 78464064216a8433360745f69edddce19a606659163The Android Open Source Project MacServices_powerAutho_PowerPolicyUpdate(pPowerMgr->hMacServices, pPowerMgr->defaultPowerLevel); 78564064216a8433360745f69edddce19a606659163The Android Open Source Project } 78664064216a8433360745f69edddce19a606659163The Android Open Source Project break; 78764064216a8433360745f69edddce19a606659163The Android Open Source Project 78864064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MGR_POWER_LEVEL_DOZE_MODE: 78964064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_setDozeModeInAuto(thePowerMgrHandle,theParamP->content.powerMngDozeMode); 79064064216a8433360745f69edddce19a606659163The Android Open Source Project if (pPowerMgr->betEnable) 79164064216a8433360745f69edddce19a606659163The Android Open Source Project { 79264064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgrConfigBetToFw(thePowerMgrHandle, pPowerMgr->betTrafficEnable ); 79364064216a8433360745f69edddce19a606659163The Android Open Source Project } 79464064216a8433360745f69edddce19a606659163The Android Open Source Project break; 79564064216a8433360745f69edddce19a606659163The Android Open Source Project 79664064216a8433360745f69edddce19a606659163The Android Open Source Project default: 79764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 79864064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgr_setParam - ERROR - Param is not supported, %d\n\n", 79964064216a8433360745f69edddce19a606659163The Android Open Source Project theParamP->paramType)); 80064064216a8433360745f69edddce19a606659163The Android Open Source Project 80164064216a8433360745f69edddce19a606659163The Android Open Source Project return PARAM_NOT_SUPPORTED; 80264064216a8433360745f69edddce19a606659163The Android Open Source Project } 80364064216a8433360745f69edddce19a606659163The Android Open Source Project 80464064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 80564064216a8433360745f69edddce19a606659163The Android Open Source Project} 80664064216a8433360745f69edddce19a606659163The Android Open Source Project 80764064216a8433360745f69edddce19a606659163The Android Open Source Project 80864064216a8433360745f69edddce19a606659163The Android Open Source Project 80964064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS powerMgr_getParam(TI_HANDLE thePowerMgrHandle, 81064064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t *theParamP) 81164064216a8433360745f69edddce19a606659163The Android Open Source Project{ 81264064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)thePowerMgrHandle; 81364064216a8433360745f69edddce19a606659163The Android Open Source Project 81464064216a8433360745f69edddce19a606659163The Android Open Source Project switch ( theParamP->paramType ) 81564064216a8433360745f69edddce19a606659163The Android Open Source Project { 81664064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MGR_POWER_MODE: 81764064216a8433360745f69edddce19a606659163The Android Open Source Project theParamP->content.PowerMode = PowerMgr_getPowerMode(thePowerMgrHandle); 81864064216a8433360745f69edddce19a606659163The Android Open Source Project break; 81964064216a8433360745f69edddce19a606659163The Android Open Source Project 82064064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MGR_POWER_LEVEL_PS: 82164064216a8433360745f69edddce19a606659163The Android Open Source Project theParamP->content.PowerSavePowerLevel = pPowerMgr->PowerSavePowerLevel; 82264064216a8433360745f69edddce19a606659163The Android Open Source Project break; 82364064216a8433360745f69edddce19a606659163The Android Open Source Project 82464064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MGR_POWER_LEVEL_DEFAULT: 82564064216a8433360745f69edddce19a606659163The Android Open Source Project theParamP->content.DefaultPowerLevel = pPowerMgr->defaultPowerLevel; 82664064216a8433360745f69edddce19a606659163The Android Open Source Project break; 82764064216a8433360745f69edddce19a606659163The Android Open Source Project 82864064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MGR_POWER_LEVEL_DOZE_MODE: 82964064216a8433360745f69edddce19a606659163The Android Open Source Project theParamP->content.powerMngDozeMode = pPowerMgr->autoModeDozeMode; 83064064216a8433360745f69edddce19a606659163The Android Open Source Project break; 83164064216a8433360745f69edddce19a606659163The Android Open Source Project 83264064216a8433360745f69edddce19a606659163The Android Open Source Project default: 83364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 83464064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgr_getParam - ERROR - Param is not supported, %d\n\n", 83564064216a8433360745f69edddce19a606659163The Android Open Source Project theParamP->paramType)); 83664064216a8433360745f69edddce19a606659163The Android Open Source Project return PARAM_NOT_SUPPORTED; 83764064216a8433360745f69edddce19a606659163The Android Open Source Project } 83864064216a8433360745f69edddce19a606659163The Android Open Source Project 83964064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 84064064216a8433360745f69edddce19a606659163The Android Open Source Project} 84164064216a8433360745f69edddce19a606659163The Android Open Source Project 84264064216a8433360745f69edddce19a606659163The Android Open Source Project 84364064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************** 84464064216a8433360745f69edddce19a606659163The Android Open Source Project ** Private Function prototypes ** 84564064216a8433360745f69edddce19a606659163The Android Open Source Project *****************************************************************************/ 84664064216a8433360745f69edddce19a606659163The Android Open Source Project 84764064216a8433360745f69edddce19a606659163The Android Open Source Project 84864064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************************** 84964064216a8433360745f69edddce19a606659163The Android Open Source Project * powerSaveCompleteCB * 85064064216a8433360745f69edddce19a606659163The Android Open Source Project **************************************************************************************** 85164064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Callback for the Power server complete - gets the result of the request 85264064216a8433360745f69edddce19a606659163The Android Open Source Project for PS or exit PS. 85364064216a8433360745f69edddce19a606659163The Android Open Source Project 85464064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 85564064216a8433360745f69edddce19a606659163The Android Open Source Project - PSMode 85664064216a8433360745f69edddce19a606659163The Android Open Source Project - trasStatus - result string form the FW. 85764064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 85864064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: void.\n 85964064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 86064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void powerSaveCompleteCB(TI_HANDLE hPowerMgr,UINT8 PSMode,UINT8 transStatus) 86164064216a8433360745f69edddce19a606659163The Android Open Source Project{ 86264064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 86364064216a8433360745f69edddce19a606659163The Android Open Source Project 86464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION( pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 86564064216a8433360745f69edddce19a606659163The Android Open Source Project ("powerSaveCompleteCB, statud = %d\n", transStatus) ); 86664064216a8433360745f69edddce19a606659163The Android Open Source Project 86764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Handling the event*/ 86864064216a8433360745f69edddce19a606659163The Android Open Source Project switch ( (EventsPowerSave_e)transStatus ) 86964064216a8433360745f69edddce19a606659163The Android Open Source Project { 87064064216a8433360745f69edddce19a606659163The Android Open Source Project case ENTER_POWER_SAVE_FAIL: 87164064216a8433360745f69edddce19a606659163The Android Open Source Project case EXIT_POWER_SAVE_FAIL: 87264064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->lastPsTransaction = transStatus; 87364064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerStart(pPowerMgr->hOS, 87464064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->hRetryPsTimer, 87564064216a8433360745f69edddce19a606659163The Android Open Source Project RE_ENTER_PS_TIMEOUT, 87664064216a8433360745f69edddce19a606659163The Android Open Source Project FALSE); 87764064216a8433360745f69edddce19a606659163The Android Open Source Project break; 87864064216a8433360745f69edddce19a606659163The Android Open Source Project 87964064216a8433360745f69edddce19a606659163The Android Open Source Project case ENTER_POWER_SAVE_SUCCESS: 88064064216a8433360745f69edddce19a606659163The Android Open Source Project if ( (pPowerMgr->lastPowerModeProfile == POWER_MODE_SHORT_DOZE) || 88164064216a8433360745f69edddce19a606659163The Android Open Source Project (pPowerMgr->lastPowerModeProfile == POWER_MODE_LONG_DOZE) || 88264064216a8433360745f69edddce19a606659163The Android Open Source Project (pPowerMgr->lastPowerModeProfile == POWER_MODE_PS_ONLY)) 88364064216a8433360745f69edddce19a606659163The Android Open Source Project { 88464064216a8433360745f69edddce19a606659163The Android Open Source Project MacServices_powerAutho_PowerPolicyUpdate(pPowerMgr->hMacServices, pPowerMgr->PowerSavePowerLevel); 88564064216a8433360745f69edddce19a606659163The Android Open Source Project } 88664064216a8433360745f69edddce19a606659163The Android Open Source Project 88764064216a8433360745f69edddce19a606659163The Android Open Source Project case EXIT_POWER_SAVE_SUCCESS: 88864064216a8433360745f69edddce19a606659163The Android Open Source Project break; 88964064216a8433360745f69edddce19a606659163The Android Open Source Project 89064064216a8433360745f69edddce19a606659163The Android Open Source Project default: 89164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR( pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 89264064216a8433360745f69edddce19a606659163The Android Open Source Project ("powerSaveCompleteCB: invliad status: %d\n", transStatus) ); 89364064216a8433360745f69edddce19a606659163The Android Open Source Project break; 89464064216a8433360745f69edddce19a606659163The Android Open Source Project } 89564064216a8433360745f69edddce19a606659163The Android Open Source Project} 89664064216a8433360745f69edddce19a606659163The Android Open Source Project 89764064216a8433360745f69edddce19a606659163The Android Open Source Project/** 89864064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n 89964064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 30-Aug-2006\n 90064064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Power manager callback fro TM event notification 90164064216a8433360745f69edddce19a606659163The Android Open Source Project * 90264064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n 90364064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hPowerMgr - handle to the power maanger object.\n 90464064216a8433360745f69edddce19a606659163The Android Open Source Project * \param cookie - values supplied during event registration (active / doze).\n 90564064216a8433360745f69edddce19a606659163The Android Open Source Project */ 90664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void PowerMgrTMThresholdCrossCB( TI_HANDLE hPowerMgr, UINT32 cookie ) 90764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 90864064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 90964064216a8433360745f69edddce19a606659163The Android Open Source Project 91064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 91164064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgrTMThresholdCrossCB - TM notified threshold crossed, cookie: %d\n", 91264064216a8433360745f69edddce19a606659163The Android Open Source Project cookie)); 91364064216a8433360745f69edddce19a606659163The Android Open Source Project 91464064216a8433360745f69edddce19a606659163The Android Open Source Project /* sanity cehcking - TM notifications should only be received when PM is enabled and in auto mode */ 91564064216a8433360745f69edddce19a606659163The Android Open Source Project if ( (pPowerMgr->psEnable == TRUE) && (pPowerMgr->desiredPowerModeProfile == POWER_MODE_AUTO) ) 91664064216a8433360745f69edddce19a606659163The Android Open Source Project { 91764064216a8433360745f69edddce19a606659163The Android Open Source Project switch ((PowerMgr_PowerMode_e)cookie) 91864064216a8433360745f69edddce19a606659163The Android Open Source Project { 91964064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MODE_ACTIVE: 92064064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrPowerProfileConfiguration( hPowerMgr, POWER_MODE_ACTIVE ); 92164064216a8433360745f69edddce19a606659163The Android Open Source Project break; 92264064216a8433360745f69edddce19a606659163The Android Open Source Project 92364064216a8433360745f69edddce19a606659163The Android Open Source Project /* threshold crossed down - need to enter configured doze mode */ 92464064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MODE_SHORT_DOZE: 92564064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrPowerProfileConfiguration( hPowerMgr, pPowerMgr->autoModeDozeMode ); 92664064216a8433360745f69edddce19a606659163The Android Open Source Project break; 92764064216a8433360745f69edddce19a606659163The Android Open Source Project 92864064216a8433360745f69edddce19a606659163The Android Open Source Project default: 92964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR( pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 93064064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgrTMThresholdCrossCB: TM notification with invalid cookie: %d!\n", 93164064216a8433360745f69edddce19a606659163The Android Open Source Project cookie) ); 93264064216a8433360745f69edddce19a606659163The Android Open Source Project break; 93364064216a8433360745f69edddce19a606659163The Android Open Source Project } 93464064216a8433360745f69edddce19a606659163The Android Open Source Project } 93564064216a8433360745f69edddce19a606659163The Android Open Source Project else 93664064216a8433360745f69edddce19a606659163The Android Open Source Project { 93764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR( pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 93864064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgrTMThresholdCrossCB: TM motification when psEnable is :%d or desired profile is: %d\n", 93964064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->psEnable, pPowerMgr->desiredPowerModeProfile) ); 94064064216a8433360745f69edddce19a606659163The Android Open Source Project } 94164064216a8433360745f69edddce19a606659163The Android Open Source Project 94264064216a8433360745f69edddce19a606659163The Android Open Source Project} 94364064216a8433360745f69edddce19a606659163The Android Open Source Project 94464064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************************** 94564064216a8433360745f69edddce19a606659163The Android Open Source Project* powerMgrDisableThresholdsIndications * 94664064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************************** 94764064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: This will send a disable message to the traffic monitor, 94864064216a8433360745f69edddce19a606659163The Android Open Source Project to stop sending indications on threshold pass. 94964064216a8433360745f69edddce19a606659163The Android Open Source Project 95064064216a8433360745f69edddce19a606659163The Android Open Source Project 95164064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 95264064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 95364064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: void.\n 95464064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 95564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void powerMgrDisableThresholdsIndications(TI_HANDLE hPowerMgr) 95664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 95764064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 95864064216a8433360745f69edddce19a606659163The Android Open Source Project 95964064216a8433360745f69edddce19a606659163The Android Open Source Project /* 96064064216a8433360745f69edddce19a606659163The Android Open Source Project auto is not a static/fix state, else its a dynamic state that flows between 96164064216a8433360745f69edddce19a606659163The Android Open Source Project the 3 static/fix states: active, short-doze and long-doze. 96264064216a8433360745f69edddce19a606659163The Android Open Source Project */ 96364064216a8433360745f69edddce19a606659163The Android Open Source Project TrafficMonitor_StopEventNotif(pPowerMgr->hTrafficMonitor, 96464064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->passToActiveTMEvent); 96564064216a8433360745f69edddce19a606659163The Android Open Source Project 96664064216a8433360745f69edddce19a606659163The Android Open Source Project TrafficMonitor_StopEventNotif(pPowerMgr->hTrafficMonitor, 96764064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->passToDozeTMEvent); 96864064216a8433360745f69edddce19a606659163The Android Open Source Project 96964064216a8433360745f69edddce19a606659163The Android Open Source Project} 97064064216a8433360745f69edddce19a606659163The Android Open Source Project 97164064216a8433360745f69edddce19a606659163The Android Open Source Project 97264064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************************** 97364064216a8433360745f69edddce19a606659163The Android Open Source Project* powerMgrEnableThresholdsIndications * 97464064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************************** 97564064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: TThis will send an enable message to the traffic monitor, 97664064216a8433360745f69edddce19a606659163The Android Open Source Project to start sending indications on threshold pass. 97764064216a8433360745f69edddce19a606659163The Android Open Source Project 97864064216a8433360745f69edddce19a606659163The Android Open Source Project 97964064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 98064064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 98164064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: void.\n 98264064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 98364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void powerMgrEnableThresholdsIndications(TI_HANDLE hPowerMgr) 98464064216a8433360745f69edddce19a606659163The Android Open Source Project{ 98564064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 98664064216a8433360745f69edddce19a606659163The Android Open Source Project 98764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION( pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 98864064216a8433360745f69edddce19a606659163The Android Open Source Project ("powerMgrEnableThresholdsIndications called\n") ); 98964064216a8433360745f69edddce19a606659163The Android Open Source Project /* 99064064216a8433360745f69edddce19a606659163The Android Open Source Project auto is not a static/fix state, but rather a dynamic state that flows between 99164064216a8433360745f69edddce19a606659163The Android Open Source Project the 3 static/fix states: active, short-doze and long-doze. 99264064216a8433360745f69edddce19a606659163The Android Open Source Project */ 99364064216a8433360745f69edddce19a606659163The Android Open Source Project TrafficMonitor_StartEventNotif(pPowerMgr->hTrafficMonitor, 99464064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->passToActiveTMEvent); 99564064216a8433360745f69edddce19a606659163The Android Open Source Project 99664064216a8433360745f69edddce19a606659163The Android Open Source Project TrafficMonitor_StartEventNotif(pPowerMgr->hTrafficMonitor, 99764064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->passToDozeTMEvent); 99864064216a8433360745f69edddce19a606659163The Android Open Source Project 99964064216a8433360745f69edddce19a606659163The Android Open Source Project} 100064064216a8433360745f69edddce19a606659163The Android Open Source Project 100164064216a8433360745f69edddce19a606659163The Android Open Source Project 100264064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************************** 100364064216a8433360745f69edddce19a606659163The Android Open Source Project* powerMgrStartAutoPowerMode * 100464064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************************** 100564064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: configure the power manager to enter into AUTO power mode. 100664064216a8433360745f69edddce19a606659163The Android Open Source Project The power manager will deside what power level will be applied 100764064216a8433360745f69edddce19a606659163The Android Open Source Project acording to the traffic monitor. 100864064216a8433360745f69edddce19a606659163The Android Open Source Project 100964064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 101064064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 101164064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: void.\n 101264064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 101364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void powerMgrStartAutoPowerMode(TI_HANDLE hPowerMgr) 101464064216a8433360745f69edddce19a606659163The Android Open Source Project{ 101564064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 101664064216a8433360745f69edddce19a606659163The Android Open Source Project int frameCount; 101764064216a8433360745f69edddce19a606659163The Android Open Source Project 101864064216a8433360745f69edddce19a606659163The Android Open Source Project frameCount = TrafficMonitor_GetFrameBandwidth(pPowerMgr->hTrafficMonitor); 101964064216a8433360745f69edddce19a606659163The Android Open Source Project 102064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION( pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 102164064216a8433360745f69edddce19a606659163The Android Open Source Project ("powerMgrStartAutoPowerMode: Starting auto power mode," 102264064216a8433360745f69edddce19a606659163The Android Open Source Project "frame count=%d, TH=%d\n", frameCount, pPowerMgr->autoModeActiveTH) ); 102364064216a8433360745f69edddce19a606659163The Android Open Source Project 102464064216a8433360745f69edddce19a606659163The Android Open Source Project /*Activates the correct profile*/ 102564064216a8433360745f69edddce19a606659163The Android Open Source Project if ( frameCount >= pPowerMgr->autoModeActiveTH ) 102664064216a8433360745f69edddce19a606659163The Android Open Source Project { 102764064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrPowerProfileConfiguration(hPowerMgr, POWER_MODE_ACTIVE); 102864064216a8433360745f69edddce19a606659163The Android Open Source Project } 102964064216a8433360745f69edddce19a606659163The Android Open Source Project else 103064064216a8433360745f69edddce19a606659163The Android Open Source Project { 103164064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrPowerProfileConfiguration(hPowerMgr, pPowerMgr->autoModeDozeMode); 103264064216a8433360745f69edddce19a606659163The Android Open Source Project 103364064216a8433360745f69edddce19a606659163The Android Open Source Project } 103464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Activates the Trafic monitoe Events*/ 103564064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrEnableThresholdsIndications(hPowerMgr); 103664064216a8433360745f69edddce19a606659163The Android Open Source Project} 103764064216a8433360745f69edddce19a606659163The Android Open Source Project 103864064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************************** 103964064216a8433360745f69edddce19a606659163The Android Open Source Project* powerMgrRetryPsTimeout * 104064064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************************** 104164064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Retry function if a PS/exit PS request failed 104264064216a8433360745f69edddce19a606659163The Android Open Source Project 104364064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 104464064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 104564064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: void.\n 104664064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 104764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void powerMgrRetryPsTimeout(TI_HANDLE hPowerMgr) 104864064216a8433360745f69edddce19a606659163The Android Open Source Project{ 104964064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 105064064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS powerStatus; 105164064216a8433360745f69edddce19a606659163The Android Open Source Project 105264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION( pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 105364064216a8433360745f69edddce19a606659163The Android Open Source Project ("powerMgrRetryPsTimeout: timer expired.\n") ); 105464064216a8433360745f69edddce19a606659163The Android Open Source Project 105564064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->lastPsTransaction == ENTER_POWER_SAVE_FAIL ) 105664064216a8433360745f69edddce19a606659163The Android Open Source Project { 105764064216a8433360745f69edddce19a606659163The Android Open Source Project powerStatus = MacServices_powerSrv_SetPsMode(pPowerMgr->hMacServices, POWER_SAVE_ON, TRUE , hPowerMgr,powerSaveCompleteCB,NULL);/*NULL as GWSI callback*/ 105864064216a8433360745f69edddce19a606659163The Android Open Source Project if ( powerStatus == POWER_SAVE_802_11_IS_CURRENT ) 105964064216a8433360745f69edddce19a606659163The Android Open Source Project { 106064064216a8433360745f69edddce19a606659163The Android Open Source Project if ( (pPowerMgr->lastPowerModeProfile == POWER_MODE_SHORT_DOZE) || 106164064216a8433360745f69edddce19a606659163The Android Open Source Project (pPowerMgr->lastPowerModeProfile == POWER_MODE_LONG_DOZE) || 106264064216a8433360745f69edddce19a606659163The Android Open Source Project (pPowerMgr->lastPowerModeProfile == POWER_MODE_PS_ONLY)) 106364064216a8433360745f69edddce19a606659163The Android Open Source Project { 106464064216a8433360745f69edddce19a606659163The Android Open Source Project MacServices_powerAutho_PowerPolicyUpdate(pPowerMgr->hMacServices, pPowerMgr->PowerSavePowerLevel); 106564064216a8433360745f69edddce19a606659163The Android Open Source Project } 106664064216a8433360745f69edddce19a606659163The Android Open Source Project } 106764064216a8433360745f69edddce19a606659163The Android Open Source Project } 106864064216a8433360745f69edddce19a606659163The Android Open Source Project else 106964064216a8433360745f69edddce19a606659163The Android Open Source Project { 107064064216a8433360745f69edddce19a606659163The Android Open Source Project powerStatus = MacServices_powerSrv_SetPsMode(pPowerMgr->hMacServices, POWER_SAVE_OFF, TRUE , hPowerMgr,powerSaveCompleteCB,NULL);/*NULL as GWSI callback*/ 107164064216a8433360745f69edddce19a606659163The Android Open Source Project } 107264064216a8433360745f69edddce19a606659163The Android Open Source Project 107364064216a8433360745f69edddce19a606659163The Android Open Source Project} 107464064216a8433360745f69edddce19a606659163The Android Open Source Project 107564064216a8433360745f69edddce19a606659163The Android Open Source Project 107664064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************************** 107764064216a8433360745f69edddce19a606659163The Android Open Source Project* powerMgrPowerProfileConfiguration * 107864064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************************** 107964064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: This function is the " builder " of the Power Save profiles. 108064064216a8433360745f69edddce19a606659163The Android Open Source Project acording to the desired Power mode. 108164064216a8433360745f69edddce19a606659163The Android Open Source Project 108264064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 108364064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 108464064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: void.\n 108564064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 108664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void powerMgrPowerProfileConfiguration(TI_HANDLE hPowerMgr, PowerMgr_PowerMode_e desiredPowerMode) 108764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 108864064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 108964064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS powerStatus; 109064064216a8433360745f69edddce19a606659163The Android Open Source Project 109164064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerStop(pPowerMgr->hOS, pPowerMgr->hRetryPsTimer); 109264064216a8433360745f69edddce19a606659163The Android Open Source Project 109364064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->lastPowerModeProfile = desiredPowerMode; 109464064216a8433360745f69edddce19a606659163The Android Open Source Project 109564064216a8433360745f69edddce19a606659163The Android Open Source Project switch ( desiredPowerMode ) 109664064216a8433360745f69edddce19a606659163The Android Open Source Project { 109764064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MODE_AUTO: 109864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 109964064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMode==AUTO - This mode should not be sent to the GWSI - we send AUTO instead\n")); 110064064216a8433360745f69edddce19a606659163The Android Open Source Project break; 110164064216a8433360745f69edddce19a606659163The Android Open Source Project 110264064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MODE_ACTIVE: 110364064216a8433360745f69edddce19a606659163The Android Open Source Project /* set AWAKE through */ 110464064216a8433360745f69edddce19a606659163The Android Open Source Project MacServices_powerAutho_PowerPolicyUpdate(pPowerMgr->hMacServices, POWERAUTHO_POLICY_AWAKE); 110564064216a8433360745f69edddce19a606659163The Android Open Source Project powerStatus = MacServices_powerSrv_SetPsMode(pPowerMgr->hMacServices, 110664064216a8433360745f69edddce19a606659163The Android Open Source Project POWER_SAVE_OFF, 110764064216a8433360745f69edddce19a606659163The Android Open Source Project TRUE , 110864064216a8433360745f69edddce19a606659163The Android Open Source Project hPowerMgr, 110964064216a8433360745f69edddce19a606659163The Android Open Source Project powerSaveCompleteCB, 111064064216a8433360745f69edddce19a606659163The Android Open Source Project NULL); 111164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 111264064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMode==ACTIVE\n")); 111364064216a8433360745f69edddce19a606659163The Android Open Source Project break; 111464064216a8433360745f69edddce19a606659163The Android Open Source Project 111564064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MODE_SHORT_DOZE: 111664064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->beaconListenInterval > 1 ) 111764064216a8433360745f69edddce19a606659163The Android Open Source Project { 111864064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->beaconListenInterval,TNET_WAKE_ON_N_BEACON); 111964064216a8433360745f69edddce19a606659163The Android Open Source Project } 112064064216a8433360745f69edddce19a606659163The Android Open Source Project else 112164064216a8433360745f69edddce19a606659163The Android Open Source Project { 112264064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->beaconListenInterval,TNET_WAKE_ON_BEACON); 112364064216a8433360745f69edddce19a606659163The Android Open Source Project } 112464064216a8433360745f69edddce19a606659163The Android Open Source Project 112564064216a8433360745f69edddce19a606659163The Android Open Source Project powerStatus = MacServices_powerSrv_SetPsMode(pPowerMgr->hMacServices, 112664064216a8433360745f69edddce19a606659163The Android Open Source Project POWER_SAVE_ON, 112764064216a8433360745f69edddce19a606659163The Android Open Source Project TRUE , 112864064216a8433360745f69edddce19a606659163The Android Open Source Project hPowerMgr, 112964064216a8433360745f69edddce19a606659163The Android Open Source Project powerSaveCompleteCB, 113064064216a8433360745f69edddce19a606659163The Android Open Source Project NULL); 113164064216a8433360745f69edddce19a606659163The Android Open Source Project if ( powerStatus == POWER_SAVE_802_11_IS_CURRENT ) 113264064216a8433360745f69edddce19a606659163The Android Open Source Project { 113364064216a8433360745f69edddce19a606659163The Android Open Source Project MacServices_powerAutho_PowerPolicyUpdate(pPowerMgr->hMacServices, pPowerMgr->PowerSavePowerLevel); 113464064216a8433360745f69edddce19a606659163The Android Open Source Project } 113564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 113664064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMode==SHORT_DOZE\n")); 113764064216a8433360745f69edddce19a606659163The Android Open Source Project break; 113864064216a8433360745f69edddce19a606659163The Android Open Source Project 113964064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MODE_LONG_DOZE: 114064064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->dtimListenInterval > 1 ) 114164064216a8433360745f69edddce19a606659163The Android Open Source Project { 114264064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->dtimListenInterval,TNET_WAKE_ON_N_DTIM); 114364064216a8433360745f69edddce19a606659163The Android Open Source Project } 114464064216a8433360745f69edddce19a606659163The Android Open Source Project else 114564064216a8433360745f69edddce19a606659163The Android Open Source Project { 114664064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->dtimListenInterval,TNET_WAKE_ON_DTIM); 114764064216a8433360745f69edddce19a606659163The Android Open Source Project } 114864064216a8433360745f69edddce19a606659163The Android Open Source Project powerStatus = MacServices_powerSrv_SetPsMode(pPowerMgr->hMacServices, 114964064216a8433360745f69edddce19a606659163The Android Open Source Project POWER_SAVE_ON, 115064064216a8433360745f69edddce19a606659163The Android Open Source Project TRUE , 115164064216a8433360745f69edddce19a606659163The Android Open Source Project hPowerMgr, 115264064216a8433360745f69edddce19a606659163The Android Open Source Project powerSaveCompleteCB, 115364064216a8433360745f69edddce19a606659163The Android Open Source Project NULL); 115464064216a8433360745f69edddce19a606659163The Android Open Source Project if ( powerStatus == POWER_SAVE_802_11_IS_CURRENT ) 115564064216a8433360745f69edddce19a606659163The Android Open Source Project { 115664064216a8433360745f69edddce19a606659163The Android Open Source Project MacServices_powerAutho_PowerPolicyUpdate(pPowerMgr->hMacServices, pPowerMgr->PowerSavePowerLevel); 115764064216a8433360745f69edddce19a606659163The Android Open Source Project } 115864064216a8433360745f69edddce19a606659163The Android Open Source Project 115964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 116064064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMode==LONG_DOZE\n")); 116164064216a8433360745f69edddce19a606659163The Android Open Source Project break; 116264064216a8433360745f69edddce19a606659163The Android Open Source Project 116364064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MODE_PS_ONLY: 116464064216a8433360745f69edddce19a606659163The Android Open Source Project /* When in SG PS mode, configure the user desired wake-up condition */ 116564064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgr_SGSetUserDesiredwakeUpCond(hPowerMgr); 116664064216a8433360745f69edddce19a606659163The Android Open Source Project powerStatus = MacServices_powerSrv_SetPsMode(pPowerMgr->hMacServices, 116764064216a8433360745f69edddce19a606659163The Android Open Source Project POWER_SAVE_ON, 116864064216a8433360745f69edddce19a606659163The Android Open Source Project TRUE , 116964064216a8433360745f69edddce19a606659163The Android Open Source Project hPowerMgr, 117064064216a8433360745f69edddce19a606659163The Android Open Source Project powerSaveCompleteCB, 117164064216a8433360745f69edddce19a606659163The Android Open Source Project NULL); 117264064216a8433360745f69edddce19a606659163The Android Open Source Project 117364064216a8433360745f69edddce19a606659163The Android Open Source Project /* In PS_ONLY we will use the last powerAutho policy of SHORT or LONG DOZE or ACTIVE */ 117464064216a8433360745f69edddce19a606659163The Android Open Source Project if ( powerStatus == POWER_SAVE_802_11_IS_CURRENT ) 117564064216a8433360745f69edddce19a606659163The Android Open Source Project { 117664064216a8433360745f69edddce19a606659163The Android Open Source Project MacServices_powerAutho_PowerPolicyUpdate(pPowerMgr->hMacServices, pPowerMgr->PowerSavePowerLevel); 117764064216a8433360745f69edddce19a606659163The Android Open Source Project } 117864064216a8433360745f69edddce19a606659163The Android Open Source Project 117964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 118064064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMode==PS_ONLY\n")); 118164064216a8433360745f69edddce19a606659163The Android Open Source Project break; 118264064216a8433360745f69edddce19a606659163The Android Open Source Project 118364064216a8433360745f69edddce19a606659163The Android Open Source Project default: 118464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pPowerMgr->hReport, 118564064216a8433360745f69edddce19a606659163The Android Open Source Project POWER_MANAGER_MODULE_LOG, 118664064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgr_setWakeUpConfiguration - ERROR - PowerMode - unknown parameter: %d\n", 118764064216a8433360745f69edddce19a606659163The Android Open Source Project desiredPowerMode)); 118864064216a8433360745f69edddce19a606659163The Android Open Source Project return; 118964064216a8433360745f69edddce19a606659163The Android Open Source Project } 119064064216a8433360745f69edddce19a606659163The Android Open Source Project 119164064216a8433360745f69edddce19a606659163The Android Open Source Project} 119264064216a8433360745f69edddce19a606659163The Android Open Source Project 119364064216a8433360745f69edddce19a606659163The Android Open Source Project 119464064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************************** 119564064216a8433360745f69edddce19a606659163The Android Open Source Project* powerMgrSendMBXWakeUpConditions * 119664064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************************************** 119764064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Tsend configuration of the power management option that holds in the command 119864064216a8433360745f69edddce19a606659163The Android Open Source Project mailbox inner sturcture. 119964064216a8433360745f69edddce19a606659163The Android Open Source Project 120064064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 120164064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 120264064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: TI_STATUS - OK on success else NOK.\n 120364064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 120464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS powerMgrSendMBXWakeUpConditions(TI_HANDLE hPowerMgr, 120564064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 listenInterval, 120664064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_TnetWakeOn_e tnetWakeupOn) 120764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 120864064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 120964064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_powerMgmtConfig_t powerMgmtConfig; 121064064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status = OK; 121164064216a8433360745f69edddce19a606659163The Android Open Source Project 121264064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgmtConfig.listenInterval = listenInterval; 121364064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgmtConfig.tnetWakeupOn = tnetWakeupOn; 121464064216a8433360745f69edddce19a606659163The Android Open Source Project 121564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 121664064216a8433360745f69edddce19a606659163The Android Open Source Project ("powerMgrSendMBXWakeUpConditions: listenInterval = %d, tnetWakeupOn = %d\n", 121764064216a8433360745f69edddce19a606659163The Android Open Source Project listenInterval,tnetWakeupOn)); 121864064216a8433360745f69edddce19a606659163The Android Open Source Project 121964064216a8433360745f69edddce19a606659163The Android Open Source Project status = whalCtrl_wakeUpCondition(pPowerMgr->hWhalCtrl, 122064064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgmtConfig); 122164064216a8433360745f69edddce19a606659163The Android Open Source Project if ( status != OK ) 122264064216a8433360745f69edddce19a606659163The Android Open Source Project { 122364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 122464064216a8433360745f69edddce19a606659163The Android Open Source Project ("powerMgrSendMBXWakeUpConditions - Error in wae up condition IE!\n")); 122564064216a8433360745f69edddce19a606659163The Android Open Source Project } 122664064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 122764064216a8433360745f69edddce19a606659163The Android Open Source Project} 122864064216a8433360745f69edddce19a606659163The Android Open Source Project 122964064216a8433360745f69edddce19a606659163The Android Open Source Project 123064064216a8433360745f69edddce19a606659163The Android Open Source Project 123164064216a8433360745f69edddce19a606659163The Android Open Source Project 123264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS powerMgrNullPacketRateConfiguration(TI_HANDLE hPowerMgr) 123364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 123464064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 123564064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 123664064216a8433360745f69edddce19a606659163The Android Open Source Project 123764064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = SITE_MGR_CURRENT_RATE_PAIR_PARAM; 123864064216a8433360745f69edddce19a606659163The Android Open Source Project if ( siteMgr_getParam(pPowerMgr->hSiteMgr, ¶m) == OK ) 123964064216a8433360745f69edddce19a606659163The Android Open Source Project { 124064064216a8433360745f69edddce19a606659163The Android Open Source Project MacServices_powerSrv_SetRateModulation(pPowerMgr->hMacServices, (UINT16)param.content.siteMgrCurrentRateMask.basicRateMask); 124164064216a8433360745f69edddce19a606659163The Android Open Source Project } 124264064216a8433360745f69edddce19a606659163The Android Open Source Project else 124364064216a8433360745f69edddce19a606659163The Android Open Source Project { 124464064216a8433360745f69edddce19a606659163The Android Open Source Project MacServices_powerSrv_SetRateModulation(pPowerMgr->hMacServices, (DRV_RATE_MASK_1_BARKER | DRV_RATE_MASK_2_BARKER)); 124564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 124664064216a8433360745f69edddce19a606659163The Android Open Source Project ("powerMgrNullPacketRateConfiguration: error - faild to set rate so default was seted!\n")); 124764064216a8433360745f69edddce19a606659163The Android Open Source Project } 124864064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 124964064216a8433360745f69edddce19a606659163The Android Open Source Project 125064064216a8433360745f69edddce19a606659163The Android Open Source Project} 125164064216a8433360745f69edddce19a606659163The Android Open Source Project 125264064216a8433360745f69edddce19a606659163The Android Open Source Project 125364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic PowerMgr_PowerMode_e powerMgrGetHighestPriority(TI_HANDLE hPowerMgr) 125464064216a8433360745f69edddce19a606659163The Android Open Source Project{ 125564064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 125664064216a8433360745f69edddce19a606659163The Android Open Source Project int index; 125764064216a8433360745f69edddce19a606659163The Android Open Source Project for ( index = POWER_MANAGER_MAX_PRIORITY-1;index >= 0;index-- ) 125864064216a8433360745f69edddce19a606659163The Android Open Source Project { 125964064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->powerMngModePriority[index].priorityEnable ) 126064064216a8433360745f69edddce19a606659163The Android Open Source Project { 126164064216a8433360745f69edddce19a606659163The Android Open Source Project 126264064216a8433360745f69edddce19a606659163The Android Open Source Project return pPowerMgr->powerMngModePriority[index].powerMode; 126364064216a8433360745f69edddce19a606659163The Android Open Source Project } 126464064216a8433360745f69edddce19a606659163The Android Open Source Project 126564064216a8433360745f69edddce19a606659163The Android Open Source Project } 126664064216a8433360745f69edddce19a606659163The Android Open Source Project 126764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 126864064216a8433360745f69edddce19a606659163The Android Open Source Project ("powerMgrGetHighestPriority - error - faild to get highest priority! sefault deseired mode was returned !!!\n")); 126964064216a8433360745f69edddce19a606659163The Android Open Source Project return pPowerMgr->desiredPowerModeProfile; 127064064216a8433360745f69edddce19a606659163The Android Open Source Project} 127164064216a8433360745f69edddce19a606659163The Android Open Source Project 127264064216a8433360745f69edddce19a606659163The Android Open Source Project /**************************************************************************************** 127364064216a8433360745f69edddce19a606659163The Android Open Source Project * PowerMgr_notifyFWReset * 127464064216a8433360745f69edddce19a606659163The Android Open Source Project **************************************************************************************** 127564064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Notify the object of the power Manager about FW reset (recovery). 127664064216a8433360745f69edddce19a606659163The Android Open Source Project - call PowerSrv module to Set Ps Mode 127764064216a8433360745f69edddce19a606659163The Android Open Source Project - call PowerAutho Power Policy Update 127864064216a8433360745f69edddce19a606659163The Android Open Source Project 127964064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 128064064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 128164064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: TI_STATUS - OK on success else NOK. 128264064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 128364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS PowerMgr_notifyFWReset(TI_HANDLE hPowerMgr) 128464064216a8433360745f69edddce19a606659163The Android Open Source Project{ 128564064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 128664064216a8433360745f69edddce19a606659163The Android Open Source Project 128764064216a8433360745f69edddce19a606659163The Android Open Source Project if (pPowerMgr->psEnable) 128864064216a8433360745f69edddce19a606659163The Android Open Source Project { 128964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pPowerMgr->lastPowerModeProfile == POWER_MODE_SHORT_DOZE || 129064064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->lastPowerModeProfile == POWER_MODE_LONG_DOZE) 129164064216a8433360745f69edddce19a606659163The Android Open Source Project { 129264064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrPowerProfileConfiguration(hPowerMgr, pPowerMgr->lastPowerModeProfile); 129364064216a8433360745f69edddce19a606659163The Android Open Source Project } 129464064216a8433360745f69edddce19a606659163The Android Open Source Project } 129564064216a8433360745f69edddce19a606659163The Android Open Source Project 129664064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 129764064216a8433360745f69edddce19a606659163The Android Open Source Project} 129864064216a8433360745f69edddce19a606659163The Android Open Source Project 129964064216a8433360745f69edddce19a606659163The Android Open Source Project /**************************************************************************************** 130064064216a8433360745f69edddce19a606659163The Android Open Source Project * PowerMgrConfigBetToFw * 130164064216a8433360745f69edddce19a606659163The Android Open Source Project **************************************************************************************** 130264064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: callback from TM event notification. 130364064216a8433360745f69edddce19a606659163The Android Open Source Project - call PowerSrv module to Set Ps Mode 130464064216a8433360745f69edddce19a606659163The Android Open Source Project - call PowerAutho Power Policy Update 130564064216a8433360745f69edddce19a606659163The Android Open Source Project 130664064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 130764064216a8433360745f69edddce19a606659163The Android Open Source Project - BetEnable - cookie:values supplied during event registration 130864064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 130964064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: None. 131064064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 131164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void PowerMgrConfigBetToFw( TI_HANDLE hPowerMgr, UINT32 BetEnable ) 131264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 131364064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 131464064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 MaximumConsecutiveET; 131564064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 listenInterval; 131664064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 131764064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 beaconInterval; 131864064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 dtimPeriod; 131964064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_PowerMode_e powerMode; 132064064216a8433360745f69edddce19a606659163The Android Open Source Project 132164064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = SITE_MGR_BEACON_INTERVAL_PARAM; 132264064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_getParam(pPowerMgr->hSiteMgr, ¶m); 132364064216a8433360745f69edddce19a606659163The Android Open Source Project beaconInterval = param.content.beaconInterval; 132464064216a8433360745f69edddce19a606659163The Android Open Source Project 132564064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = SITE_MGR_DTIM_PERIOD_PARAM; 132664064216a8433360745f69edddce19a606659163The Android Open Source Project siteMgr_getParam(pPowerMgr->hSiteMgr, ¶m); 132764064216a8433360745f69edddce19a606659163The Android Open Source Project dtimPeriod = param.content.siteMgrDtimPeriod; 132864064216a8433360745f69edddce19a606659163The Android Open Source Project 132964064216a8433360745f69edddce19a606659163The Android Open Source Project /* get actual Power Mode */ 133064064216a8433360745f69edddce19a606659163The Android Open Source Project if (pPowerMgr->desiredPowerModeProfile == POWER_MODE_AUTO) 133164064216a8433360745f69edddce19a606659163The Android Open Source Project { 133264064216a8433360745f69edddce19a606659163The Android Open Source Project powerMode = pPowerMgr->autoModeDozeMode; 133364064216a8433360745f69edddce19a606659163The Android Open Source Project } 133464064216a8433360745f69edddce19a606659163The Android Open Source Project else 133564064216a8433360745f69edddce19a606659163The Android Open Source Project { 133664064216a8433360745f69edddce19a606659163The Android Open Source Project powerMode = pPowerMgr->lastPowerModeProfile; 133764064216a8433360745f69edddce19a606659163The Android Open Source Project } 133864064216a8433360745f69edddce19a606659163The Android Open Source Project 133964064216a8433360745f69edddce19a606659163The Android Open Source Project /* calc ListenInterval */ 134064064216a8433360745f69edddce19a606659163The Android Open Source Project if (powerMode == POWER_MODE_SHORT_DOZE) 134164064216a8433360745f69edddce19a606659163The Android Open Source Project { 134264064216a8433360745f69edddce19a606659163The Android Open Source Project listenInterval = beaconInterval * pPowerMgr->beaconListenInterval; 134364064216a8433360745f69edddce19a606659163The Android Open Source Project } 134464064216a8433360745f69edddce19a606659163The Android Open Source Project else if (powerMode == POWER_MODE_LONG_DOZE) 134564064216a8433360745f69edddce19a606659163The Android Open Source Project { 134664064216a8433360745f69edddce19a606659163The Android Open Source Project listenInterval = dtimPeriod * beaconInterval * pPowerMgr->dtimListenInterval; 134764064216a8433360745f69edddce19a606659163The Android Open Source Project } 134864064216a8433360745f69edddce19a606659163The Android Open Source Project else 134964064216a8433360745f69edddce19a606659163The Android Open Source Project { 135064064216a8433360745f69edddce19a606659163The Android Open Source Project listenInterval = beaconInterval; 135164064216a8433360745f69edddce19a606659163The Android Open Source Project } 135264064216a8433360745f69edddce19a606659163The Android Open Source Project 135364064216a8433360745f69edddce19a606659163The Android Open Source Project if (listenInterval == 0) 135464064216a8433360745f69edddce19a606659163The Android Open Source Project { 135564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_WARNING(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 135664064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgrConfigBetToFw: listenInterval is ZERO\n")); 135764064216a8433360745f69edddce19a606659163The Android Open Source Project return; 135864064216a8433360745f69edddce19a606659163The Android Open Source Project } 135964064216a8433360745f69edddce19a606659163The Android Open Source Project 136064064216a8433360745f69edddce19a606659163The Android Open Source Project /* MaximumConsecutiveET = MaximalFullBeaconReceptionInterval / MAX( BeaconInterval, ListenInterval) */ 136164064216a8433360745f69edddce19a606659163The Android Open Source Project MaximumConsecutiveET = pPowerMgr->maxFullBeaconInterval / listenInterval; 136264064216a8433360745f69edddce19a606659163The Android Open Source Project 136364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 136464064216a8433360745f69edddce19a606659163The Android Open Source Project ("PowerMgrConfigBetToFw:\n \ 136564064216a8433360745f69edddce19a606659163The Android Open Source Project Power Mode = %d\n \ 136664064216a8433360745f69edddce19a606659163The Android Open Source Project beaconInterval = %d\n \ 136764064216a8433360745f69edddce19a606659163The Android Open Source Project listenInterval = %d\n \ 136864064216a8433360745f69edddce19a606659163The Android Open Source Project Bet Enable = %d\n \ 136964064216a8433360745f69edddce19a606659163The Android Open Source Project MaximumConsecutiveET = %d\n", 137064064216a8433360745f69edddce19a606659163The Android Open Source Project powerMode, 137164064216a8433360745f69edddce19a606659163The Android Open Source Project beaconInterval, 137264064216a8433360745f69edddce19a606659163The Android Open Source Project listenInterval, 137364064216a8433360745f69edddce19a606659163The Android Open Source Project BetEnable, 137464064216a8433360745f69edddce19a606659163The Android Open Source Project MaximumConsecutiveET)); 137564064216a8433360745f69edddce19a606659163The Android Open Source Project 137664064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->betTrafficEnable = BetEnable; /* save BET enable flag for CLI configuration */ 137764064216a8433360745f69edddce19a606659163The Android Open Source Project 137864064216a8433360745f69edddce19a606659163The Android Open Source Project whalCtrl_setBetParams (pPowerMgr->hWhalCtrl, BetEnable, MaximumConsecutiveET); 137964064216a8433360745f69edddce19a606659163The Android Open Source Project 138064064216a8433360745f69edddce19a606659163The Android Open Source Project} 138164064216a8433360745f69edddce19a606659163The Android Open Source Project 138264064216a8433360745f69edddce19a606659163The Android Open Source Project 138364064216a8433360745f69edddce19a606659163The Android Open Source Project/** 138464064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 10-April-2007\n 138564064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Returns to the configured wakeup condition, when SG protective mode is done 138664064216a8433360745f69edddce19a606659163The Android Open Source Project * 138764064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n 138864064216a8433360745f69edddce19a606659163The Android Open Source Project * Parameters:\n 138964064216a8433360745f69edddce19a606659163The Android Open Source Project * 1) TI_HANDLE - handle to the PowerMgr object.\n 139064064216a8433360745f69edddce19a606659163The Android Open Source Project * Return Value: void.\n 139164064216a8433360745f69edddce19a606659163The Android Open Source Project */ 139264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void powerMgr_SGSetUserDesiredwakeUpCond( TI_HANDLE hPowerMgr ) 139364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 139464064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 139564064216a8433360745f69edddce19a606659163The Android Open Source Project 139664064216a8433360745f69edddce19a606659163The Android Open Source Project 139764064216a8433360745f69edddce19a606659163The Android Open Source Project if (pPowerMgr->psEnable) 139864064216a8433360745f69edddce19a606659163The Android Open Source Project { 139964064216a8433360745f69edddce19a606659163The Android Open Source Project /* set wakeup condition according to user mode power save profile */ 140064064216a8433360745f69edddce19a606659163The Android Open Source Project switch ( pPowerMgr->powerMngModePriority[ POWER_MANAGER_USER_PRIORITY ].powerMode ) 140164064216a8433360745f69edddce19a606659163The Android Open Source Project { 140264064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MODE_AUTO: 140364064216a8433360745f69edddce19a606659163The Android Open Source Project /*set wakeup condition according to doze mode in auto and wakup interval */ 140464064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->autoModeDozeMode == POWER_MODE_SHORT_DOZE ) 140564064216a8433360745f69edddce19a606659163The Android Open Source Project { 140664064216a8433360745f69edddce19a606659163The Android Open Source Project /* short doze */ 140764064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->beaconListenInterval > 1 ) 140864064216a8433360745f69edddce19a606659163The Android Open Source Project { 140964064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->beaconListenInterval,TNET_WAKE_ON_N_BEACON); 141064064216a8433360745f69edddce19a606659163The Android Open Source Project } 141164064216a8433360745f69edddce19a606659163The Android Open Source Project else 141264064216a8433360745f69edddce19a606659163The Android Open Source Project { 141364064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->beaconListenInterval,TNET_WAKE_ON_BEACON); 141464064216a8433360745f69edddce19a606659163The Android Open Source Project } 141564064216a8433360745f69edddce19a606659163The Android Open Source Project } 141664064216a8433360745f69edddce19a606659163The Android Open Source Project else 141764064216a8433360745f69edddce19a606659163The Android Open Source Project { 141864064216a8433360745f69edddce19a606659163The Android Open Source Project /* long doze */ 141964064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->dtimListenInterval > 1 ) 142064064216a8433360745f69edddce19a606659163The Android Open Source Project { 142164064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->dtimListenInterval,TNET_WAKE_ON_N_DTIM); 142264064216a8433360745f69edddce19a606659163The Android Open Source Project } 142364064216a8433360745f69edddce19a606659163The Android Open Source Project else 142464064216a8433360745f69edddce19a606659163The Android Open Source Project { 142564064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->dtimListenInterval,TNET_WAKE_ON_DTIM); 142664064216a8433360745f69edddce19a606659163The Android Open Source Project } 142764064216a8433360745f69edddce19a606659163The Android Open Source Project } 142864064216a8433360745f69edddce19a606659163The Android Open Source Project break; 142964064216a8433360745f69edddce19a606659163The Android Open Source Project 143064064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MODE_ACTIVE: 143164064216a8433360745f69edddce19a606659163The Android Open Source Project break; 143264064216a8433360745f69edddce19a606659163The Android Open Source Project 143364064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MODE_SHORT_DOZE: 143464064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->beaconListenInterval > 1 ) 143564064216a8433360745f69edddce19a606659163The Android Open Source Project { 143664064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->beaconListenInterval,TNET_WAKE_ON_N_BEACON); 143764064216a8433360745f69edddce19a606659163The Android Open Source Project } 143864064216a8433360745f69edddce19a606659163The Android Open Source Project else 143964064216a8433360745f69edddce19a606659163The Android Open Source Project { 144064064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->beaconListenInterval,TNET_WAKE_ON_BEACON); 144164064216a8433360745f69edddce19a606659163The Android Open Source Project } 144264064216a8433360745f69edddce19a606659163The Android Open Source Project break; 144364064216a8433360745f69edddce19a606659163The Android Open Source Project 144464064216a8433360745f69edddce19a606659163The Android Open Source Project case POWER_MODE_LONG_DOZE: 144564064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->dtimListenInterval > 1 ) 144664064216a8433360745f69edddce19a606659163The Android Open Source Project { 144764064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->dtimListenInterval,TNET_WAKE_ON_N_DTIM); 144864064216a8433360745f69edddce19a606659163The Android Open Source Project } 144964064216a8433360745f69edddce19a606659163The Android Open Source Project else 145064064216a8433360745f69edddce19a606659163The Android Open Source Project { 145164064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgrSendMBXWakeUpConditions(hPowerMgr,pPowerMgr->dtimListenInterval,TNET_WAKE_ON_DTIM); 145264064216a8433360745f69edddce19a606659163The Android Open Source Project } 145364064216a8433360745f69edddce19a606659163The Android Open Source Project break; 145464064216a8433360745f69edddce19a606659163The Android Open Source Project 145564064216a8433360745f69edddce19a606659163The Android Open Source Project default: 145664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 145764064216a8433360745f69edddce19a606659163The Android Open Source Project ("powerMgr_SGExitShortDoze - ERROR - PowerMode for user prioirty is: %d\n", 145864064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->powerMngModePriority[ POWER_MANAGER_USER_PRIORITY ].powerMode)); 145964064216a8433360745f69edddce19a606659163The Android Open Source Project } 146064064216a8433360745f69edddce19a606659163The Android Open Source Project }/*end of if (psEnable)*/ 146164064216a8433360745f69edddce19a606659163The Android Open Source Project} 146264064216a8433360745f69edddce19a606659163The Android Open Source Project 146364064216a8433360745f69edddce19a606659163The Android Open Source Project 146464064216a8433360745f69edddce19a606659163The Android Open Source Project 146564064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************************** 146664064216a8433360745f69edddce19a606659163The Android Open Source Project* PowerMgr_PsPollFailureCB * 146764064216a8433360745f69edddce19a606659163The Android Open Source Project**************************************************************************************** 146864064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Work around to solve AP bad behavior. 146964064216a8433360745f69edddce19a606659163The Android Open Source Project Some old AP's have trouble with Ps-Poll - The solution will be to exit PS for a 147064064216a8433360745f69edddce19a606659163The Android Open Source Project period of time 147164064216a8433360745f69edddce19a606659163The Android Open Source Project 147264064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 147364064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 147464064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: 147564064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 147664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void PowerMgr_PsPollFailureCB( TI_HANDLE hPowerMgr ) 147764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 147864064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 147964064216a8433360745f69edddce19a606659163The Android Open Source Project 148064064216a8433360745f69edddce19a606659163The Android Open Source Project if ( pPowerMgr->PsPollDeliveryFailureRecoveryPeriod ) 148164064216a8433360745f69edddce19a606659163The Android Open Source Project { 148264064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 148364064216a8433360745f69edddce19a606659163The Android Open Source Project 148464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_WARNING(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 148564064216a8433360745f69edddce19a606659163The Android Open Source Project ("%s Oh boy, AP is not answering Ps-Poll's. enter active PS for %d Ms\n", 148664064216a8433360745f69edddce19a606659163The Android Open Source Project __FUNCTION__, pPowerMgr->PsPollDeliveryFailureRecoveryPeriod)); 148764064216a8433360745f69edddce19a606659163The Android Open Source Project 148864064216a8433360745f69edddce19a606659163The Android Open Source Project /* Disable Soft Gemini */ 148964064216a8433360745f69edddce19a606659163The Android Open Source Project SoftGemini_startPsPollFailure(pPowerMgr->hSoftGemini); 149064064216a8433360745f69edddce19a606659163The Android Open Source Project 149164064216a8433360745f69edddce19a606659163The Android Open Source Project /* 149264064216a8433360745f69edddce19a606659163The Android Open Source Project * Set the system to Active power save 149364064216a8433360745f69edddce19a606659163The Android Open Source Project */ 149464064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = POWER_MGR_POWER_MODE; 149564064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.powerMngPowerMode.PowerMode = POWER_MODE_ACTIVE; 149664064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.powerMngPowerMode.powerMngPriority = POWER_MANAGER_PS_POLL_FAILURE_PRIORITY; 149764064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgr_setParam(hPowerMgr,¶m); 149864064216a8433360745f69edddce19a606659163The Android Open Source Project 149964064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = POWER_MGR_ENABLE_PRIORITY; 150064064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.powerMngPriority = POWER_MANAGER_PS_POLL_FAILURE_PRIORITY; 150164064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgr_setParam(hPowerMgr,¶m); 150264064216a8433360745f69edddce19a606659163The Android Open Source Project 150364064216a8433360745f69edddce19a606659163The Android Open Source Project /* 150464064216a8433360745f69edddce19a606659163The Android Open Source Project * Set timer to exit the active mode 150564064216a8433360745f69edddce19a606659163The Android Open Source Project */ 150664064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerStart(pPowerMgr->hOS, 150764064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->hPsPollFailureTimer, 150864064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->PsPollDeliveryFailureRecoveryPeriod, 150964064216a8433360745f69edddce19a606659163The Android Open Source Project FALSE); 151064064216a8433360745f69edddce19a606659163The Android Open Source Project } 151164064216a8433360745f69edddce19a606659163The Android Open Source Project else /* Work-around is disabled */ 151264064216a8433360745f69edddce19a606659163The Android Open Source Project { 151364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_WARNING(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 151464064216a8433360745f69edddce19a606659163The Android Open Source Project ("%s Oh boy, AP is not answering Ps-Poll's !!!\n",__FUNCTION__)); 151564064216a8433360745f69edddce19a606659163The Android Open Source Project } 151664064216a8433360745f69edddce19a606659163The Android Open Source Project 151764064216a8433360745f69edddce19a606659163The Android Open Source Project} 151864064216a8433360745f69edddce19a606659163The Android Open Source Project 151964064216a8433360745f69edddce19a606659163The Android Open Source Project/**************************************************************************************** 152064064216a8433360745f69edddce19a606659163The Android Open Source Project* powerMgr_PsPollFailureTimeout * 152164064216a8433360745f69edddce19a606659163The Android Open Source Project**************************************************************************************** 152264064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: After the timeout of ps-poll failure - return to normal behavior 152364064216a8433360745f69edddce19a606659163The Android Open Source Project 152464064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT: - hPowerMgr - Handle to the Power Manager 152564064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT: 152664064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN: 152764064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/ 152864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void powerMgr_PsPollFailureTimeout(TI_HANDLE hPowerMgr) 152964064216a8433360745f69edddce19a606659163The Android Open Source Project{ 153064064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 153164064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 153264064216a8433360745f69edddce19a606659163The Android Open Source Project 153364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 153464064216a8433360745f69edddce19a606659163The Android Open Source Project ("%s \n",__FUNCTION__)); 153564064216a8433360745f69edddce19a606659163The Android Open Source Project 153664064216a8433360745f69edddce19a606659163The Android Open Source Project /* disable Ps-Poll priority */ 153764064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = POWER_MGR_DISABLE_PRIORITY; 153864064216a8433360745f69edddce19a606659163The Android Open Source Project param.content.powerMngPriority = POWER_MANAGER_PS_POLL_FAILURE_PRIORITY; 153964064216a8433360745f69edddce19a606659163The Android Open Source Project powerMgr_setParam(hPowerMgr,¶m); 154064064216a8433360745f69edddce19a606659163The Android Open Source Project 154164064216a8433360745f69edddce19a606659163The Android Open Source Project /* return to normal Soft Gemini */ 154264064216a8433360745f69edddce19a606659163The Android Open Source Project SoftGemini_endPsPollFailure(pPowerMgr->hSoftGemini); 154364064216a8433360745f69edddce19a606659163The Android Open Source Project} 154464064216a8433360745f69edddce19a606659163The Android Open Source Project 154564064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid powerMgr_setCpuLoad(TI_HANDLE hPowerMgr, UINT32 uCpuLoad) 154664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 154764064216a8433360745f69edddce19a606659163The Android Open Source Project #ifdef CPU_LOAD 154864064216a8433360745f69edddce19a606659163The Android Open Source Project 154964064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 155064064216a8433360745f69edddce19a606659163The Android Open Source Project 155164064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->uCpuLoad = uCpuLoad; 155264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("\n PowerMgr_setCpuLoad - Cpu Load = %d \n", 155364064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->uCpuLoad)); 155464064216a8433360745f69edddce19a606659163The Android Open Source Project 155564064216a8433360745f69edddce19a606659163The Android Open Source Project if (pPowerMgr->uCpuLoad > 0) 155664064216a8433360745f69edddce19a606659163The Android Open Source Project { 155764064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerStart(pPowerMgr->hOS, 155864064216a8433360745f69edddce19a606659163The Android Open Source Project pPowerMgr->hCpuLoadTimer, 155964064216a8433360745f69edddce19a606659163The Android Open Source Project RE_ENTER_CPU_LOAD_TIMEOUT, 156064064216a8433360745f69edddce19a606659163The Android Open Source Project TRUE); 156164064216a8433360745f69edddce19a606659163The Android Open Source Project } 156264064216a8433360745f69edddce19a606659163The Android Open Source Project else 156364064216a8433360745f69edddce19a606659163The Android Open Source Project { 156464064216a8433360745f69edddce19a606659163The Android Open Source Project os_timerStop(pPowerMgr->hOS, pPowerMgr->hCpuLoadTimer); 156564064216a8433360745f69edddce19a606659163The Android Open Source Project } 156664064216a8433360745f69edddce19a606659163The Android Open Source Project #endif 156764064216a8433360745f69edddce19a606659163The Android Open Source Project} 156864064216a8433360745f69edddce19a606659163The Android Open Source Project 156964064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef CPU_LOAD 157064064216a8433360745f69edddce19a606659163The Android Open Source Project /**************************************************************************************** 157164064216a8433360745f69edddce19a606659163The Android Open Source Project * powerMgr_CpuLoadTimeout * 157264064216a8433360745f69edddce19a606659163The Android Open Source Project **************************************************************************************** 157364064216a8433360745f69edddce19a606659163The Android Open Source Project DESCRIPTION: After the timeout of cpu load - run in idle loop to simulate cpu load 157464064216a8433360745f69edddce19a606659163The Android Open Source Project 157564064216a8433360745f69edddce19a606659163The Android Open Source Project INPUT: - hPowerMgr - Handle to the Power Manager 157664064216a8433360745f69edddce19a606659163The Android Open Source Project OUTPUT: 157764064216a8433360745f69edddce19a606659163The Android Open Source Project RETURN: 157864064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************************/ 157964064216a8433360745f69edddce19a606659163The Android Open Source Project static void powerMgr_CpuLoadTimeout(TI_HANDLE hPowerMgr) 158064064216a8433360745f69edddce19a606659163The Android Open Source Project { 158164064216a8433360745f69edddce19a606659163The Android Open Source Project PowerMgr_t *pPowerMgr = (PowerMgr_t*)hPowerMgr; 158264064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 uStallTime=0; 158364064216a8433360745f69edddce19a606659163The Android Open Source Project 158464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pPowerMgr->hReport, POWER_MANAGER_MODULE_LOG, 158564064216a8433360745f69edddce19a606659163The Android Open Source Project ("CpuLoadTimeout : cpu= %d\n", pPowerMgr->uCpuLoad)); 158664064216a8433360745f69edddce19a606659163The Android Open Source Project 158764064216a8433360745f69edddce19a606659163The Android Open Source Project #ifdef _WINDOWS 158864064216a8433360745f69edddce19a606659163The Android Open Source Project #else 158964064216a8433360745f69edddce19a606659163The Android Open Source Project while(uStallTime < (pPowerMgr->uCpuLoad * CPU_LOAD_MUL)) 159064064216a8433360745f69edddce19a606659163The Android Open Source Project { 159164064216a8433360745f69edddce19a606659163The Android Open Source Project uStallTime++; 159264064216a8433360745f69edddce19a606659163The Android Open Source Project } 159364064216a8433360745f69edddce19a606659163The Android Open Source Project #endif 159464064216a8433360745f69edddce19a606659163The Android Open Source Project } 159564064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 159664064216a8433360745f69edddce19a606659163The Android Open Source Project 1597