--- /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