wlan_bearer/wlanldd/wlan_common/umac_common/inc/umacdynamicpowermodemgmtcntx.h
changeset 0 c40eb8fe8501
child 25 a0fdcd0e4c56
child 34 13838cf40350
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlan_bearer/wlanldd/wlan_common/umac_common/inc/umacdynamicpowermodemgmtcntx.h	Tue Feb 02 02:03:13 2010 +0200
@@ -0,0 +1,416 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   Declaration of the WlanDynamicPowerModeMgmtCntx class
+*
+*/
+
+/*
+* %version: 12 %
+*/
+
+#ifndef WLAN_DYNAMIC_POWER_MODE_MGMT_CNTX
+#define WLAN_DYNAMIC_POWER_MODE_MGMT_CNTX
+
+#include "umacinternaldefinitions.h"
+#include "umacactivemodepowermodemgr.h"
+#include "umaclightpsmodepowermodemgr.h"
+#include "umacdeeppsmodepowermodemgr.h"
+
+class WlanContextImpl;
+class WlanPowerModeMgrBase;
+
+/*
+* Context for implementing dynamic power mode transition algorithm in 
+* infrastructure mode between PS and active power management mode
+*/
+class WlanDynamicPowerModeMgmtCntx
+    {    
+
+public:
+    
+    /** Ctor */
+    explicit WlanDynamicPowerModeMgmtCntx( WlanContextImpl& aWlanCtxImpl );
+    
+    /** Dtor */
+    ~WlanDynamicPowerModeMgmtCntx();
+
+    /**
+    * Starts dynamic power mode management
+    *
+    * @since S60 3.1
+    */
+    void StartPowerModeManagement();
+
+    /**
+    * Stops dynamic power mode management
+    *
+    * @since S60 3.1
+    */
+    void StopPowerModeManagement();
+                    
+    /**
+    * To be called before frame Tx
+    * Determines the need to make a power mode transition
+    *
+    * @since S60 3.1
+    * @param aQueueId Id of the queue/AC via which the frame will be transmitted
+    * @param aEtherType Ethernet type of the frame
+    * @return To which power management mode to change; if any at all
+    */
+    TPowerMgmtModeChange OnFrameTx( 
+        WHA::TQueueId aQueueId, 
+        TUint16 aEtherType );
+
+    /** 
+    * To be called when accepting an Rx frame
+    *
+    * @since S60 3.1
+    * @param aAccessCategory AC/Queue via which the frame has beeen transmitted
+    * @param aEtherType Ethernet type of the received frame
+    * @param aPayloadLength length of the ethernet frame payload
+    * @param aDaType DA type (Unicast, Multicast or Broadcast) of the frame
+    * @return To which power management mode to change; if any at all
+    */
+    TPowerMgmtModeChange OnFrameRx(
+        WHA::TQueueId aAccessCategory,
+        TUint16 aEtherType,
+        TUint aPayloadLength,
+        TDaType aDaType );
+                        
+    /**
+    * To be called upon Active to Light PS timer timeout
+    *
+    * @since S60 v5.1
+    * @return ETrue if power mode transition should be done, 
+    *         EFalse otherwise
+    */
+    TBool OnActiveToLightPsTimerTimeout();
+
+    /**
+    * To be called upon Light PS to Active timer timeout
+    *
+    * @since S60 v5.1
+    * @return ETrue if power mode transition should be done, 
+    *         EFalse otherwise
+    */
+    TBool OnLightPsToActiveTimerTimeout();
+
+    /**
+    * To be called upon Light PS to Deep PS timer timeout
+    *
+    * @since S60 v5.1
+    * @return ETrue if power mode transition should be done, 
+    *         EFalse otherwise
+    */
+    TBool OnLightPsToDeepPsTimerTimeout();
+    
+    /**
+    * Sets the dynamic power mode transition algorithm parameters
+    *
+    * @since S60 3.1
+    * @param aToLightPsTimeout time interval in microseconds after which 
+    *        transition from Active mode to Light PS mode is considered
+    * @param aToLightPsFrameThreshold frame count threshold used when 
+    *        considering transition from Active to Light PS mode 
+    * @param aToActiveTimeout time interval in microseconds after which the 
+    *        frame counter used when considering transition from Light PS 
+    *        to Active mode is reset
+    * @param aToActiveFrameThreshold frame count threshold used when 
+    *        considering transition from Light PS to Active mode
+    * @param aToDeepPsTimeout time interval in microseconds after which 
+    *        transition from Light PS mode to Deep PS mode is considered
+    * @param aToDeepPsFrameThreshold frame count threshold used when 
+    *        considering transition from Light PS to Deep PS mode
+    * @param aUapsdRxFrameLengthThreshold received frame 
+    *        payload length (in bytes) threshold in U-APSD network for
+    *        Best Effort Access Category
+    */
+    void SetParameters(
+        TUint32 aToLightPsTimeout,
+        TUint16 aToLightPsFrameThreshold,
+        TUint32 aToActiveTimeout,
+        TUint16 aToActiveFrameThreshold,
+        TUint32 aToDeepPsTimeout,
+        TUint16 aToDeepPsFrameThreshold,
+        TUint16 aUapsdRxFrameLengthThreshold );
+
+    /**
+    * Configures dynamic power mode management traffic override
+    *
+    * The settings here become effective once using the PS mode has been 
+    * allowed by WLAN Mgmt Client.
+    * When a setting below is ETrue, any amount of Rx or Tx traffic via
+    * the AC in question won't cause a change from PS to CAM mode once PS
+    * mode has been entered, and traffic via that AC won't make us to 
+    * stay in CAM either.
+    * Every AC has a separate setting for U-APSD and legacy PS.
+    * The U-APSD setting is used if U-APSD is used for the AC in question.
+    * Otherwise the corresponding legacy setting is used.
+    *    
+    * @since S60 3.2
+    * @param aCtxImpl statemachine context
+    * @param aStayInPsDespiteUapsdVoiceTraffic U-APSD Voice AC setting
+    * @param aStayInPsDespiteUapsdVideoTraffic U-APSD Video AC setting
+    * @param aStayInPsDespiteUapsdBestEffortTraffic U-APSD Best Effort AC 
+    *                                               setting
+    * @param aStayInPsDespiteUapsdBackgroundTraffic U-APSD Background AC 
+    *                                               setting
+    * @param aStayInPsDespiteLegacyVoiceTraffic legacy Voice AC setting
+    * @param aStayInPsDespiteLegacyVideoTraffic legacy Video AC setting
+    * @param aStayInPsDespiteLegacyBestEffortTraffic legacy Best Effort AC 
+    *                                                setting
+    * @param aStayInPsDespiteLegacyBackgroundTraffic legacy Background AC 
+    *                                                setting
+    * @return ETrue if a state change occurred
+    *         EFalse otherwise
+    */
+    void ConfigureTrafficOverride( 
+        TBool aStayInPsDespiteUapsdVoiceTraffic,
+        TBool aStayInPsDespiteUapsdVideoTraffic,
+        TBool aStayInPsDespiteUapsdBestEffortTraffic, 
+        TBool aStayInPsDespiteUapsdBackgroundTraffic,
+        TBool aStayInPsDespiteLegacyVoiceTraffic,
+        TBool aStayInPsDespiteLegacyVideoTraffic,
+        TBool aStayInPsDespiteLegacyBestEffortTraffic,
+        TBool aStayInPsDespiteLegacyBackgroundTraffic );
+
+    /**
+    * Freezes the dynamic power mode management traffic override settings 
+    * provided earlier with the ConfigureTrafficOverride() method and based 
+    * on whether U-APSD is used for the different ACs/Tx queues
+    *
+    * @since S60 3.2
+    */
+    void FreezeTrafficOverride();
+
+private:
+    
+    /** 
+    * Starts ToLightPsTimer 
+    *
+    * @since S60 5.1
+    * @param aTimeout timeout in microseconds
+    */
+    void RegisterToLightPsTimeout();
+
+    /** 
+    * Starts ToActiveTimer 
+    *
+    * @since S60 5.1
+    * @param aTimeout timeout in microseconds
+    */
+    void RegisterToActiveTimeout();
+
+    /** 
+    * Starts ToDeepPsTimer 
+    *
+    * @since S60 5.1
+    * @param aTimeout timeout in microseconds
+    */
+    void RegisterToDeepPsTimeout();
+
+    /** 
+    * Cancels ToLightPsTimer 
+    *
+    * @since S60 5.1
+    * @param aTimeout timeout in microseconds
+    */
+    void CancelToLightPsTimeout();
+
+    /** 
+    * Cancels ToActiveTimer 
+    *
+    * @since S60 5.1
+    * @param aTimeout timeout in microseconds
+    */
+    void CancelToActiveTimeout();
+    
+    /** 
+    * Cancels ToDeepPsTimer 
+    *
+    * @since S60 5.1
+    * @param aTimeout timeout in microseconds
+    */
+    void CancelToDeepPsTimeout();
+    
+    /** 
+    * Cancels all running timers
+    *
+    * @since S60 5.1
+    */
+    inline void CancelTimeouts();
+    
+    /** 
+    * Returns data traffic override setting for Voice AC
+    * regarding U-APSD traffic
+    *
+    * @since S60 3.1
+    * @return ETrue if Voice AC traffic shall be ignored
+    */
+    inline TBool StayInPsDespiteUapsdVoiceTraffic() const;
+    
+    /** 
+    * Returns data traffic override setting for Video AC
+    * regarding U-APSD traffic
+    *
+    * @since S60 3.1
+    * @return ETrue if Video AC traffic shall be ignored
+    */
+    inline TBool StayInPsDespiteUapsdVideoTraffic() const;
+
+    /** 
+    * Returns data traffic override setting for Best Effort AC
+    * regarding U-APSD traffic
+    *
+    * @since S60 3.1
+    * @return ETrue if Best Effort AC traffic shall be ignored
+    */
+    inline TBool StayInPsDespiteUapsdBestEffortTraffic() const;
+
+    /** 
+    * Returns data traffic override setting for Background AC
+    * regarding U-APSD traffic
+    *
+    * @since S60 3.1
+    * @return ETrue if Background AC traffic shall be ignored
+    */
+    inline TBool StayInPsDespiteUapsdBackgroundTraffic() const;
+
+    /** 
+    * Returns data traffic override setting for Voice AC
+    * regarding legacy, i.e. non-U-APSD, traffic
+    *
+    * @since S60 3.1
+    * @return ETrue if Voice AC traffic shall be ignored
+    */
+    inline TBool StayInPsDespiteLegacyVoiceTraffic() const;
+    
+    /** 
+    * Returns data traffic override setting for Video AC
+    * regarding legacy, i.e. non-U-APSD, traffic
+    *
+    * @since S60 3.1
+    * @return ETrue if Video AC traffic shall be ignored
+    */
+    inline TBool StayInPsDespiteLegacyVideoTraffic() const;
+
+    /** 
+    * Returns data traffic override setting for Best Effort AC
+    * regarding legacy, i.e. non-U-APSD, traffic
+    *
+    * @since S60 3.1
+    * @return ETrue if Best Effort AC traffic shall be ignored
+    */
+    inline TBool StayInPsDespiteLegacyBestEffortTraffic() const;
+
+    /** 
+    * Returns data traffic override setting for Background AC
+    * regarding legacy, i.e. non-U-APSD, traffic
+    *
+    * @since S60 3.1
+    * @return ETrue if Background AC traffic shall be ignored
+    */
+    inline TBool StayInPsDespiteLegacyBackgroundTraffic() const;
+        
+    // Prohibit copy constructor
+    WlanDynamicPowerModeMgmtCntx( 
+        const WlanDynamicPowerModeMgmtCntx& );
+    // Prohibit assigment operator
+    WlanDynamicPowerModeMgmtCntx& operator= 
+        ( const WlanDynamicPowerModeMgmtCntx& );
+
+private:    // Data
+        
+    /** flag value to store state transition need internally */
+    TBool                       iStateChange; 
+    /** stores the flags defined below */
+    TUint32                     iFlags;
+    /** 
+    * any amount of U-APSD Voice AC Rx or Tx traffic won't cause a 
+    * change from PS to CAM mode once PS mode has been entered 
+    */
+    static const TUint32 KStayInPsDespiteUapsdVoiceTraffic = ( 1 << 0 );
+    /** 
+    * any amount of U-APSD Video AC Rx or Tx traffic won't cause a 
+    * change from PS to CAM mode once PS mode has been entered 
+    */
+    static const TUint32 KStayInPsDespiteUapsdVideoTraffic = ( 1 << 1 );
+    /** 
+    * any amount of U-APSD Best Effort AC Rx or Tx traffic won't cause a 
+    * change from PS to CAM mode once PS mode has been entered 
+    */
+    static const TUint32 KStayInPsDespiteUapsdBestEffortTraffic = ( 1 << 2 );
+    /** 
+    * any amount of U-APSD Background AC Rx or Tx traffic won't cause a 
+    * change from PS to CAM mode once PS mode has been entered 
+    */
+    static const TUint32 KStayInPsDespiteUapsdBackgroundTraffic = ( 1 << 3 );
+    /** 
+    * any amount of legacy, i.e. non U-APSD, Voice AC Rx or Tx traffic 
+    * won't cause a change from PS to CAM mode once PS mode has been entered
+    */
+    static const TUint32 KStayInPsDespiteLegacyVoiceTraffic = ( 1 << 4 );
+    /** 
+    * any amount of legacy, i.e. non U-APSD, Video AC Rx or Tx traffic 
+    * won't cause a change from PS to CAM mode once PS mode has been entered
+    */
+    static const TUint32 KStayInPsDespiteLegacyVideoTraffic = ( 1 << 5 );
+    /** 
+    * any amount of legacy, i.e. non U-APSD, Best Effort AC Rx or Tx traffic 
+    * won't cause a change from PS to CAM mode once PS mode has been entered
+    */
+    static const TUint32 KStayInPsDespiteLegacyBestEffortTraffic = ( 1 << 6 );
+    /** 
+    * any amount of legacy, i.e. non U-APSD, Background AC Rx or Tx traffic 
+    * won't cause a change from PS to CAM mode once PS mode has been entered
+    */
+    static const TUint32 KStayInPsDespiteLegacyBackgroundTraffic = ( 1 << 7 );
+    /** ToLightPsTimer started */
+    static const TUint32 KToLightPsTimerStarted = ( 1 << 8 );
+    /** ToActiveTimer started */
+    static const TUint32 KToActiveTimerStarted = ( 1 << 9 );
+    /** ToDeepPsTimer started */
+    static const TUint32 KToDeepPsTimerStarted = ( 1 << 10 );
+    
+    // time interval in microseconds after which transition from Active
+    // mode to Light PS mode is considered. 
+    TUint32 iToLightPsTimeout;
+
+    // time interval in microseconds after which the frame counter
+    // used when considering transition from Light PS to Active mode is reset.
+    TUint32 iToActiveTimeout;
+
+    // time interval in microseconds after which transition from Light PS
+    // mode to Deep PS mode is considered. 
+    TUint32 iToDeepPsTimeout;
+
+    /** currently active power management mode context */
+    WlanPowerModeMgrBase*       iActiveCntx;
+    /** context for active mode */
+    WlanActiveModePowerModeMgr  iActiveModeCntx;
+    /** context for Light PS mode */
+    WlanLightPsModePowerModeMgr iLightPsModeCntx;
+    /** context for Deep PS mode */
+    WlanDeepPsModePowerModeMgr  iDeepPsModeCntx;
+    /** global state machine context reference */
+    WlanContextImpl&            iWlanContextImpl;
+    /** 
+    * the frozen Rx & Tx traffic ignoration setting for every AC
+    */
+    TBool iIgnoreTraffic[WHA::EQueueIdMax];    
+    };
+
+#include "umacdynamicpowermodemgmtcntx.inl"
+
+#endif // WLAN_DYNAMIC_POWER_MODE_MGMT_CNTX