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, &param) == 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, &param);
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, &param);
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,&param);
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,&param);
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,&param);
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