--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wlan_bearer/wlanldd/wlan_common/umac_common/inc/UmacContextImpl.h Tue Feb 02 02:03:13 2010 +0200
@@ -0,0 +1,2122 @@
+/*
+* Copyright (c) 2002-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 UmacContextImpl class
+*
+*/
+
+/*
+* %version: 102 %
+*/
+
+#ifndef WLANCONTEXTIMPL_H
+#define WLANCONTEXTIMPL_H
+
+#ifndef RD_WLAN_DDK
+#include <wha_types.h>
+#else
+#include <wlanwha_types.h>
+#endif
+
+#include "Umac.h"
+#include "FrameXferBlock.h"
+
+#include "802dot11.h"
+#include "umacinternaldefinitions.h"
+#include "UmacMib.h"
+#include "UmacAuthSeqNmbrExpected.h"
+#include "umaceventdispatcher.h"
+#include "umacpacketscheduler.h"
+#include "umacpacketschedulerclient.h"
+#include "umacnullsender.h"
+
+#include "UmacDot11MacError.h"
+#include "UmacDot11InitPhase1.h"
+#include "UmacDot11Idle.h"
+
+#include "UmacDot11PrepareForBssMode.h"
+#include "UmacDot11DisassociationPending.h"
+#include "UmacDot11Synchronize.h"
+#include "umacdot11idlescanningmode.h"
+
+#include "UmacDot11ReassociationPending.h"
+#include "UmacDot11SoftReset.h"
+#include "UmacDot11OpenAuthPending.h"
+#include "UmacDot11SharedAuthPending.h"
+#include "UmacDot11AssociationPending.h"
+#include "UmacDot11DeauthPending.h"
+#include "UmacDot11InfrastructureModeInit.h"
+#include "UmacDot11PrepareForIbssMode.h"
+#include "umacdot11ibssnormalmode.h"
+#include "umacdot11ibssscanningmode.h"
+#include "umacdot11infrastructurenormalmode.h"
+#include "umacdot11infrastructurescanningmode.h"
+#include "umacdot11pwrmgmttransitionmode.h"
+#include "UmacDot11MibDefaultConfigure.h"
+
+#include "umacconnectcontext.h"
+#include "umacprivacymodefilters.h"
+#include "UmacTxRateAdaptation.h"
+#include "UmacPRNGenerator.h"
+#include "umacusertxdatacntx.h"
+#include "umacdynamicpowermodemgmtcntx.h"
+#include "umacnullsendcontroller.h"
+#include "umacsignalpredictor.h"
+
+class WlanMacState;
+class WlanConnectContext;
+class UmacManagementSideUmacCb;
+class WlanAddBroadcastWepKey;
+class WlanConfigureTxQueueParams;
+class WlanConfigureTxAutoRatePolicy;
+class WlanWsaInitiliaze;
+class WlanWsaConfigure;
+class WlanWsaJoin;
+class WlanWsaScan;
+class WlanWhaStopScan;
+class WlanWsaReadMib;
+class WlanWsaWriteMib;
+class WlanWsaDisconnect;
+class WlanWsaSetBssParameters;
+class WlanWsaAddKey;
+class WlanWsaRemoveKey;
+class WlanWsaSetPsMode;
+class WlanWhaConfigureQueue;
+class WlanWhaConfigureAc;
+class WlanWhaRelease;
+
+struct SWsaCommands;
+
+
+/**
+* WLAN context implementation
+*/
+class WlanContextImpl :
+ public WHA::MWhaCb,
+ public MWlanPacketSchedulerClient,
+ public MWlanNullSender
+ {
+
+public:
+
+ /**
+ * Return value type for AddMulticastAddress() method
+ */
+ enum TGroupAddStatus
+ {
+ EOk,
+ EFull,
+ EAlreadyExists
+ };
+
+ /**
+ * Lookup table to map 802.11 rate defintions
+ */
+ class SupportedRateLookUp
+ {
+ public: // Methods
+
+ /** Ctor */
+ SupportedRateLookUp() :
+ // these initial values don't really matter as they are always
+ // overwritten
+ iSupportedRate( E802Dot11Rate1MBit ), iWsaRate( 0 ) {};
+
+ private: // Methods
+
+ // Prohibit copy constructor
+ SupportedRateLookUp( const SupportedRateLookUp& );
+ // Prohibit assigment operator
+ SupportedRateLookUp& operator== ( const SupportedRateLookUp&);
+
+ public: // Data
+
+ /** 802.11 rate defintions */
+ T802Dot11SupportedRate iSupportedRate;
+ /** corresponding WHA rate */
+ TUint32 iWsaRate;
+ };
+
+protected:
+
+ /**
+ * The states of the statemachine
+ */
+ struct States
+ {
+ public: // Methods
+
+ /**
+ * Ctor
+ */
+ States() {};
+
+ private: // Methods
+
+ // Prohibit assignment operator
+ States& operator= ( const States& );
+ // Prohibit copy constructor
+ States( const States& );
+
+ public: // Data
+ WlanDot11InitPhase1 iInitPhase1State;
+ WlanDot11MibDefaultConfigure iMibDefaultConfigure;
+ WlanDot11Idle iIdleState;
+ WlanDot11PrepareForBssMode iPrepareForBssMode;
+ WlanDot11PrepareForIbssMode iPrepareForIbssMode;
+ WlanDot11OpenAuthPending iOpenAuthPendingState;
+ WlanDot11SharedAuthPending iSharedAuthPending;
+ WlanDot11AssociationPending iAssociationPendingState;
+ WlanDot11InfrastructureModeInit iInfrastructureModeInit;
+ WlanDot11IdleScanningMode iIdleScanningMode;
+ WlanDot11IbssNormalMode iIbssNormalMode;
+ WlanDot11IbssScanningMode iIbssScanningMode;
+ WlanDot11InfrastructureScanningMode
+ iInfrastructureScanningMode;
+ WlanDot11InfrastructureNormalMode
+ iInfrastructureNormalMode;
+ WlanDot11PwrMgmtTransitionMode iPwrMgmtTransitionMode;
+ WlanDot11DisassociationPending iDisassociationPendingState;
+ WlanDot11Synchronize iSynchronizeState;
+ WlanDot11ReassociationPending iReassociationPendingState;
+ WlanDot11DeauthPending iDeauthPendingState;
+ WlanDot11SoftReset iSoftResetState;
+ WlanDot11MacError iMacError;
+ };
+
+ /**
+ * 802.11 management frame templates
+ */
+ class ManagementFrameTemplates
+ {
+ public: // Methods
+
+ /** Ctor */
+ ManagementFrameTemplates() :
+ ialign1( 0 ),
+ ialign2( 0 ),
+ ialign3( 0 ),
+ ialign4( 0 ),
+ ialign5( 0 ),
+ ialign6( 0 ),
+ ialign7( 0 ),
+ ialign8( 0 ),
+ ialign9( 0 )
+ {};
+
+ private: // Methdods
+
+ // Prohibit copy constructor
+ ManagementFrameTemplates( const ManagementFrameTemplates& );
+ // Prohibit assigment operator
+ ManagementFrameTemplates& operator== (
+ const ManagementFrameTemplates& );
+
+ public: // Data
+
+ /** authenticate frame template */
+ SAuthenticationFrame iAuthenticationFrame;
+ /**
+ * 32-bit align
+ * only needed because these structs are packed
+ */
+ TUint32 ialign1;
+ /** authenticate frame template with HT Control field */
+ SHtAuthenticationFrame iHtAuthenticationFrame;
+ /**
+ * 32-bit align
+ * only needed because these structs are packed
+ */
+ TUint32 ialign2;
+ /** association frame template */
+ SAssociationRequestFrame iAssociationRequestFrame;
+ /**
+ * 32-bit align
+ * only needed because these structs are packed
+ */
+ TUint32 ialign3;
+ /** association frame template with HT Control field */
+ SHtAssociationRequestFrame iHtAssociationRequestFrame;
+ /**
+ * 32-bit align
+ * only needed because these structs are packed
+ */
+ TUint32 ialign4;
+ /** deauthenticate frame template */
+ SDeauthenticateFrame iDeauthenticateFrame;
+ /**
+ * 32-bit align
+ * only needed because these structs are packed
+ */
+ TUint32 ialign5;
+ /** deauthenticate frame template with HT Control field */
+ SHtDeauthenticateFrame iHtDeauthenticateFrame;
+ /**
+ * 32-bit align
+ * only needed because these structs are packed
+ */
+ TUint32 ialign6;
+ /** disassociation frame template */
+ SDisassociateFrame iDisassociationFrame;
+ /**
+ * 32-bit align
+ * only needed because these structs are packed
+ */
+ TUint32 ialign7;
+ /** disassociation frame template with HT Control field */
+ SHtDisassociateFrame iHtDisassociationFrame;
+ /**
+ * 32-bit align
+ * only needed because these structs are packed
+ */
+ TUint32 ialign8;
+ /** resassociation frame template */
+ SReassociationRequestFrame iReassociationRequestFrame;
+ /**
+ * 32-bit align
+ * only needed because these structs are packed
+ */
+ TUint32 ialign9;
+ /** resassociation frame template with HT Control field */
+ SHtReassociationRequestFrame iHtReassociationRequestFrame;
+ };
+
+ /**
+ * Container for multicast groups (specified by group mac addresses)
+ * that we have joined.
+ *
+ * When we have joined any multicast groups
+ * we would like to receive only multicast packets that have been
+ * sent to those groups.
+ */
+ class JoinedMulticastGroups
+ {
+ public:
+
+ /** Ctor */
+ JoinedMulticastGroups();
+
+ /**
+ * Adds a group.
+ * @param
+ * @return ETrue if aGroup was not fou
+ */
+ TGroupAddStatus AddGroup( const TMacAddress& aGroup );
+
+ /**
+ * Removes a group.
+ * @param aGroup Group to be removed
+ * @return ETrue if aGroup was found (and hence removed)
+ * EFalse otherwise
+ */
+ TBool RemoveGroup( const TMacAddress& aGroup );
+
+ /**
+ * Returns the number of groups that we are joined into
+ * currently.
+ * @return The number of groups joined currently.
+ */
+ TUint8 Count() const;
+
+ /**
+ * Gets all the groups by passing back a pointer to the 1st
+ * group which is followed by all the other groups that
+ * we are joined into.
+ * @return The number of groups (group addresses) returned
+ */
+ TUint8 GetGroups( const TMacAddress*& aGroups ) const;
+
+ /**
+ * Clears the whole container by removing all groups from it
+ */
+ void Reset();
+
+ private:
+
+ /**
+ * Finds aGroup
+ * @param aGroup Group to be located
+ * @param aIndex Index pointing to aGroup if aGroup was found
+ * @return ETrue if aGroup was found
+ * EFalse otherwise
+ */
+ TBool FindGroup(
+ const TMacAddress& aGroup,
+ TUint& aIndex ) const;
+
+ // Prohibit copy constructor
+ JoinedMulticastGroups( const JoinedMulticastGroups& );
+ // Prohibit assigment operator
+ JoinedMulticastGroups& operator=
+ ( const JoinedMulticastGroups& );
+
+ private: // Data
+
+ /**
+ * The maximum number of multicast groups that we allow.
+ * Note that the adaptation layer may support also
+ * any smaller number of addresses, including zero
+ */
+ enum { KMaxNbrOfGroups = 32 };
+
+ /** storage for group entries */
+ TMacAddress iStorage[KMaxNbrOfGroups];
+
+ /** is the corresponding storage entry free */
+ TBool iFree[KMaxNbrOfGroups];
+
+ /**
+ * 1st free index. As there are no empty storage entries in
+ * the middle, this is also the number of groups that we are
+ * joined into currently */
+ TUint8 iFirstFreeIndex;
+ };
+
+public:
+
+ /**
+ * C++ constructor.
+ * @param WlanContext context that owns us
+ */
+ explicit WlanContextImpl( Umac& aUmac );
+
+ /**
+ * Dtor
+ */
+ virtual ~WlanContextImpl();
+
+ /**
+ * Constructs our supported rates lookup table
+ */
+ void MakeLookUpTable();
+
+ void AttachWsa( WHA::Wha* aWha );
+ void BootUp(
+ const TUint8* aPda,
+ TUint32 aPdaLength,
+ const TUint8* aFw,
+ TUint32 aFwLength );
+ inline WlanManagementSideUmacCb& WlanManagementSideCb() { return iUmac; }
+ inline WHA::Wha& Wha() { return *iWha; }
+ inline WlanMacState& CurrentState();
+
+ TBool OnDeferredWhaCommandComplete(
+ WHA::TCompleteCommandId aCompleteCommandId,
+ WHA::TStatus aStatus,
+ const WHA::UCommandCompletionParams& aCommandCompletionParams );
+
+ TBool OnDeferredInternalEvent( TInternalEvent aInternalEvent );
+
+ inline void RegisterEvent( const TOIDHeader& aOid );
+
+ inline void RegisterEvent( TInternalEvent aInternalEvent );
+
+ inline TBool ChannelEnabled( WlanEventDispatcher::TChannel aChannel ) const;
+
+ inline void Enable( WlanEventDispatcher::TChannel aChannelMask );
+ inline void Disable( WlanEventDispatcher::TChannel aChannelMask );
+
+ inline TBool DispatchEvent();
+
+ /**
+ * Determines if a command completion event for the specified
+ * command is registered
+ *
+ * @param aCommandId Id of the command to check
+ * @return ETrue if command completion event is registered
+ * EFalse otherwise
+ */
+ inline TBool CommandCompletionEventRegistered(
+ WHA::TCompleteCommandId aCommandId ) const;
+
+ /**
+ * Dispatches a single command completion event
+ *
+ * @since S60 3.1
+ * @return ETrue If a global state change occurred as a result of the event
+ * dispatching
+ * EFalse otherwise
+ */
+ inline TBool DispatchCommandCompletionEvent();
+
+ inline TBool ProtocolStackTxDataAllowed() const;
+
+ /**
+ * Second level initializer. Does statemachine initialization
+ * @return ETrue success EFalse failure
+ */
+ TBool Initialize();
+
+ WlanAddBroadcastWepKey& AddBroadcastWepKey();
+ WlanConfigureTxQueueParams& ConfigureTxQueueParams();
+ WlanConfigureTxAutoRatePolicy& ConfigureTxAutoRatePolicy();
+ WlanWsaInitiliaze& WsaInitiliaze();
+ WlanWsaConfigure& WsaConfigure();
+ WlanWsaReadMib& WsaReadMib();
+ WlanWsaWriteMib& WsaWriteMib();
+ WlanWsaJoin& WsaJoin();
+ WlanWsaScan& WsaScan();
+ WlanWhaStopScan& WhaStopScan();
+ WlanWsaDisconnect& WsaDisconnect();
+ WlanWsaSetBssParameters& WsaSetBssParameters();
+ WlanWsaAddKey& WsaAddKey();
+ WlanWhaConfigureQueue& WhaConfigureQueue();
+ WlanWsaSetPsMode& WsaSetPsMode();
+ WlanWhaConfigureAc& WhaConfigureAc();
+ WlanWhaRelease& WlanWhaRelease();
+
+ inline void WHASettings( const WHA::SSettings& aSettings );
+ inline WHA::SSettings& WHASettings();
+ inline const WHA::SSettings& WHASettings() const;
+
+ /**
+ * Gets authentication frame template
+ * @return authentication frame template
+ */
+ inline SAuthenticationFrame& GetAuthenticationFrame();
+
+ /**
+ * Gets authentication frame template with HT Control field
+ * @return authentication frame template
+ */
+ inline SHtAuthenticationFrame& GetHtAuthenticationFrame();
+
+ /**
+ * Gets association request frame template
+ * @return association request frame template
+ */
+ inline SAssociationRequestFrame& GetAssociationRequestFrame();
+
+ /**
+ * Gets association request frame template with HT Control field
+ * @return association request frame template
+ */
+ inline SHtAssociationRequestFrame& GetHtAssociationRequestFrame();
+
+ /**
+ * Gets deauthenticate frame template
+ * @return deauthenticate frame template
+ */
+ inline SDeauthenticateFrame& GetDeauthenticateFrame();
+
+ /**
+ * Gets deauthenticate frame template with HT Control field
+ * @return deauthenticate frame template
+ */
+ inline SHtDeauthenticateFrame& GetHtDeauthenticateFrame();
+
+ /**
+ * Gets disassociation frame template
+ * @return disassociation frame template
+ */
+ inline SDisassociateFrame& GetDisassociationFrame();
+
+ /**
+ * Gets disassociation frame template with HT Control field
+ * @return disassociation frame template
+ */
+ inline SHtDisassociateFrame& GetHtDisassociationFrame();
+
+ /**
+ * Gets resassociation frame template
+ * @return resassociation frame template
+ */
+ inline SReassociationRequestFrame& GetReassociationRequestFrame();
+
+ /**
+ * Gets resassociation frame template with HT Control field
+ * @return resassociation frame template
+ */
+ inline SHtReassociationRequestFrame& GetHtReassociationRequestFrame();
+
+ /**
+ * Gets null data frame template
+ * @return resassociation frame template
+ */
+ inline SNullDataFrame& NullDataFrame();
+
+ /**
+ * Gets QoS Null data frame template
+ * @return QoS Null data frame template
+ */
+ inline SHtQosNullDataFrame& QosNullDataFrame();
+
+ /**
+ * Returns the length of the QoS Null data frame template when we
+ * know our current/target network.
+ * It's the length of a HT QoS Null data frame in case of a HT nw
+ * and otherwise the length of a regular (non-HT) QoS Null data frame
+ * @return Length of the currently relevant QoS Null data frame
+ */
+ inline TUint16 QosNullDataFrameLength() const;
+
+ /**
+ * Gets data frame template
+ * @return data frame template
+ */
+ inline SDataFrameHeader& GetDataFrameHeader();
+
+ /**
+ * Gets protocol stack side ethernet tx context
+ * @return protocol stack side ethernet write context
+ */
+ inline TWlanUserTxDataCntx& GetTxDataCntx();
+ inline const TWlanUserTxDataCntx& GetTxDataCntx() const;
+
+ /**
+ * Gets EAPOL stack side ethernet tx context
+ * @return EAPOL stack side ethernet write context
+ */
+ inline TWlanUserTxDataCntx& GetMgmtTxDataCntx();
+ inline const TWlanUserTxDataCntx& GetMgmtTxDataCntx() const;
+
+ /**
+ * Resets authentication sequnece expected counter to initial state
+ */
+ inline void ResetAuthSeqNmbrExpected();
+
+ /**
+ * Gets the current Tx rate and related rate policy associated with the
+ * specified Tx queue
+ *
+ * @param aQueueId id of the Tx queue
+ * @param aUseSpecialRatePolicy If ETrue, the use of the special Tx rate
+ * policy is requested
+ * If EFalse, the use of the special Tx rate policy is not requested
+ * @param aRate initial max Tx rate to use; if relevant
+ * @param aPolicyId ID of the rate class / policy to use
+ */
+ inline void TxRatePolicy(
+ WHA::TQueueId aQueueId,
+ TBool aUseSpecialRatePolicy,
+ WHA::TRate& aRate,
+ TUint8& aPolicyId ) const;
+
+ /**
+ * Gets BSSID
+ * @return BSSID
+ */
+ inline TMacAddress& GetBssId();
+
+ inline void Aid( const TUint32 aAid );
+ inline TUint32 Aid() const;
+
+ inline void AtimWindow( const TUint32 aAtimWindow );
+ inline TUint32 AtimWindow() const;
+
+ /**
+ * Gets SSID
+ * @return SSID
+ */
+ inline TSSID& GetSsId();
+
+ /**
+ * Gets used privacy mode
+ * @return used privacy mode
+ */
+ inline TEncryptionStatus& EncryptionStatus();
+
+ inline WHA::TOperationMode NetworkOperationMode() const;
+ inline void NetworkOperationMode(
+ WHA::TOperationMode aOperationMode );
+
+ // setters and getters for key type
+ inline void GroupKeyType( WHA::TKeyType aKeyType );
+ inline WHA::TKeyType GroupKeyType() const;
+ inline void PairWiseKeyType( WHA::TKeyType aKeyType );
+ inline WHA::TKeyType PairWiseKeyType() const;
+
+ inline void PairwiseCipher( TWlanCipherSuite aCipherSuite );
+ inline TWlanCipherSuite PairwiseCipher() const;
+
+ inline WHA::TChannelNumber NetworkChannelNumeber() const;
+ inline void NetworkChannelNumeber( WHA::TChannelNumber aChannelNumber );
+
+ inline TUint32 NetworkBeaconInterval() const;
+ inline void NetworkBeaconInterval( TUint32 aBeaconInterval );
+
+ inline WHA::TPsMode DesiredDot11PwrMgmtMode() const;
+ inline void DesiredDot11PwrMgmtMode( WHA::TPsMode aPsMode );
+
+ inline WHA::TPsMode CurrentDot11PwrMgmtMode() const;
+ inline void CurrentDot11PwrMgmtMode( WHA::TPsMode aPsMode );
+
+ inline const TDot11PsModeWakeupSetting& DesiredPsModeConfig() const;
+ inline void SetDesiredPsModeConfig(
+ const TDot11PsModeWakeupSetting& aPsModeWakeupSetting );
+
+ TPowerMgmtMode CurrentPwrMgmtMode() const;
+
+ inline WHA::TPsMode ClientDot11PwrMgmtMode() const;
+ inline void ClientDot11PwrMgmtMode( TPowerMode aPsMode );
+
+ inline const TDot11PsModeWakeupSetting& ClientLightPsModeConfig() const;
+ inline void SetClientLightPsModeConfig(
+ TWlanWakeUpInterval aWakeupMode,
+ TUint8 aListenInterval );
+
+ inline const TDot11PsModeWakeupSetting& ClientDeepPsModeConfig() const;
+ inline void SetClientDeepPsModeConfig(
+ TWlanWakeUpInterval aWakeupMode,
+ TUint8 aListenInterval );
+
+ inline TBool DynamicPwrModeMgtDisabled() const;
+ void DynamicPwrModeMgtDisabled( TBool aValue );
+
+ inline TBool UseShortPreamble() const;
+ void UseShortPreamble( TBool aValue );
+
+ inline TBool Reassociate() const;
+ void Reassociate( TBool aValue );
+
+ inline TBool UseShortSlotTime() const;
+ void UseShortSlotTime( TBool aValue );
+
+ inline TBool ProtectionBitSet() const;
+ void ProtectionBitSet( TBool aValue );
+
+ inline TBool QosEnabled() const;
+ void QosEnabled( TBool aValue );
+
+ inline TBool UapsdEnabled() const;
+ void UapsdEnabled( TBool aValue );
+
+ inline TBool MulticastFilteringDisAllowed() const;
+ void MulticastFilteringDisAllowed( TBool aValue );
+
+ inline TBool ErpIePresent() const;
+ void ErpIePresent( TBool aValue );
+
+ inline TBool DisassociatedByAp() const;
+ void DisassociatedByAp( TBool aValue );
+
+ inline TBool UapsdRequestedForVoice() const;
+ void UapsdRequestedForVoice( TBool aValue );
+
+ inline TBool UapsdRequestedForVideo() const;
+ void UapsdRequestedForVideo( TBool aValue );
+
+ inline TBool UapsdRequestedForBestEffort() const;
+ void UapsdRequestedForBestEffort( TBool aValue );
+
+ inline TBool UapsdRequestedForBackground() const;
+ void UapsdRequestedForBackground( TBool aValue );
+
+ inline TBool UapsdUsedForVoice() const;
+ void UapsdUsedForVoice( TBool aValue );
+
+ inline TBool UapsdUsedForVideo() const;
+ void UapsdUsedForVideo( TBool aValue );
+
+ inline TBool UapsdUsedForBestEffort() const;
+ void UapsdUsedForBestEffort( TBool aValue );
+
+ inline TBool UapsdUsedForBackground() const;
+ void UapsdUsedForBackground( TBool aValue );
+
+ inline TBool ApTestOpportunitySeekStarted() const;
+ void ApTestOpportunitySeekStarted( TBool aValue );
+
+ inline TBool ApTestOpportunityIndicated() const;
+ void ApTestOpportunityIndicated( TBool aValue );
+
+ inline TBool HtSupportedByNw() const;
+ void HtSupportedByNw( TBool aValue );
+
+ inline TUint8 WmmParameterSetCount() const;
+ inline void WmmParameterSetCount( TUint8 aValue );
+
+ inline TUint32 RateBitMask() const;
+ inline void RateBitMask( TUint32 aValue );
+
+ inline TCwMinVector& CwMinVector();
+ inline TCwMaxVector& CwMaxVector();
+ inline TAifsVector& AifsVector();
+ inline TTxOplimitVector& TxOplimitVector();
+ inline TAcmVector& AcmVector();
+ /**
+ * Returns our Wmm IE
+ * @return WMM IE
+ */
+ inline STxWmmIE& OurWmmIe();
+
+ /**
+ * Returns the WLAN Mgmt client provided Tx rate policy
+ *
+ * @since S60 3.1
+ * @return Tx rate policy
+ */
+ inline TTxRatePolicy& RatePolicy();
+
+ /**
+ * Returns the WLAN Mgmt client provided Tx queue to Tx rate policy mapping
+ *
+ * @since S60 3.1
+ * @return Tx queue to Tx rate policy mapping
+ */
+ inline TQueue2RateClass& Queue2RateClass();
+
+ /**
+ * Returns the WLAN Mgmt client provided initial max Tx rate for every
+ * Mgmt client provided rate policy object
+ *
+ * @since S60 3.1
+ * @return initial max Tx rate for every relevant Tx rate policy object
+ */
+ inline TInitialMaxTxRate4RateClass& InitialMaxTxRate4RateClass();
+
+ /**
+ * Returns the WLAN Mgmt client provided Tx auto rate policy
+ *
+ * @return Tx auto rate policy
+ */
+ inline TTxAutoRatePolicy& AutoRatePolicy();
+
+ /**
+ * Returns the ID of the special Tx auto rate policy
+ * Returns zero if a special Tx auto rate policy is not available
+ *
+ * @return the ID of the special Tx auto rate policy, or zero
+ */
+ inline TUint8 SpecialTxAutoRatePolicy() const;
+
+ /**
+ * Sets the ID of the special Tx auto rate policy
+ *
+ * @param aPolicyId the ID of the special Tx auto rate policy. Zero
+ * if a special Tx auto rate policy is not available
+ */
+ inline void SpecialTxAutoRatePolicy( TUint8 aPolicyId );
+
+ /**
+ * Returns the WLAN Mgmt client provided HT MCS policy
+ *
+ * @since S60 3.1
+ * @return Tx rate policy
+ */
+ inline THtMcsPolicy& HtMcsPolicy();
+
+ /**
+ * Returns the WLAN Mgmt client provided Maximum U-APSD Service Period
+ * length
+ *
+ * @since S60 3.2
+ * @return Maximum U-APSD Service Period length
+ */
+ inline TQosInfoUapsdMaxSpLen& UapsdMaxSpLen();
+
+ inline TUint32 WhaCommandAct() const;
+ inline void WhaCommandAct( TUint32 aAct );
+
+ inline TUint32 Random();
+
+ /**
+ * Returns reference to the authentication algorithm number to be used
+ * @return authentication algorithm number
+ */
+ inline TUint16& AuthenticationAlgorithmNumber();
+
+ /**
+ * To be called upon every Tx frame send completion
+ * @param aRate actual rate transmitted
+ * @param aSuccess was the frame transmitted successfully or not
+ * @param aRequestedRate Tx rate that was originally requested
+ */
+ inline void OnTxCompleted(
+ const TUint32 aRate,
+ const TBool aSuccess,
+ WHA::TQueueId aQueueId,
+ WHA::TRate aRequestedRate );
+
+ /**
+ * Gets buffer for Rx data
+ *
+ * @param aLengthinBytes Requested length of the buffer
+ * @param aInternal ETrue if the buffer request was triggered inside UMAC
+ * EFalse if it was triggered from WHA layer
+ * @return Pointer to the beginning of the buffer on success
+ * NULL if a buffer couldn't be allocated
+ */
+ TUint8* GetRxBuffer(
+ const TUint16 aLengthinBytes,
+ TBool aInternal = EFalse );
+
+ /**
+ * Allocates Rx frame meta header
+ * @return Rx frame meta header upon success
+ * NULL otherwise
+ */
+ TDataBuffer* GetRxFrameMetaHeader();
+
+ /**
+ * Deallocates Rx frame meta header
+ * @param aMetaHeader Meta header to deallocate
+ */
+ void FreeRxFrameMetaHeader( TDataBuffer* aMetaHeader );
+
+ TUint8* TxBuffer( TBool aWaitIfNotFree = EFalse );
+
+ /**
+ * Cancels the default timer
+ */
+ inline void CancelTimer();
+
+ /**
+ * Gets the authentication sequence number expected
+ * @return authentication sequence number expected
+ */
+ inline TUint8 GetAuthSeqNmbrExpected() const;
+
+ /**
+ * Gets our supported rates IE
+ * @return supported rates IE
+ */
+ inline SSupportedRatesIE& GetOurSupportedRatesIE();
+
+ /**
+ * Gets our extended supported rates IE
+ * @return extended supported rates IE
+ */
+ inline SExtendedSupportedRatesIE& GetOurExtendedSupportedRatesIE();
+
+ /**
+ * Stores a Beacon or Probe Response frame body from the
+ * network we are going to connect to
+ *
+ * @since S60 3.2
+ * @param aBody pointer to the frame body
+ */
+ inline void SetScanResponseFrameBody( const TUint8* aBody );
+
+ /**
+ * Returns a pointer to a Beacon or Probe Response frame body from the
+ * network we are going to connect to
+ *
+ * @since S60 3.2
+ * @return pointer to the frame body
+ */
+ inline const TUint8* ScanResponseFrameBody() const;
+
+ /**
+ * Stores a Beacon or Probe Response frame body length
+ *
+ * @since S60 3.2
+ * @param aLength frame body length
+ */
+ inline void SetScanResponseFrameBodyLength( TUint16 aLength );
+
+ /**
+ * Returns the length of a Beacon or Probe Response frame body from the
+ * network we are going to connect to
+ *
+ * @since S60 3.2
+ * @return length of the frame body
+ */
+ inline const TUint16 ScanResponseFrameBodyLength() const;
+
+ /**
+ * Stores the IE(s) to be included into the (re-)association request.
+ *
+ * @since S60 3.2
+ * @param aIeData pointer to the IE(s). NULL, if none to be included
+ */
+ inline void IeData( const TUint8* aIeData );
+
+ /**
+ * Returns the IE(s) to be included into the (re-)association request.
+ *
+ * @since S60 3.2
+ * @return pointer to the IE(s). NULL, if none to be included
+ */
+ inline const TUint8* IeData() const;
+
+ /**
+ * Stores the length of the IE(s) to be included into the (re-)association
+ * request.
+ *
+ * @since S60 3.2
+ * @param aIeDataLength length of the IE(s)
+ */
+ inline void IeDataLength( TUint16 aIeDataLength );
+
+ /**
+ * Returns the length of the IE(s) to be included into the (re-)association
+ * request.
+ *
+ * @since S60 3.2
+ * @return length of the IE(s)
+ */
+ inline TUint16 IeDataLength() const;
+
+ /**
+ * Stores the Radio Measurement value to be included into the (re-)association
+ * request.
+ *
+ * @since S60 9.2
+ * @param aRadioMeasurement True if Measurement on, otherwise false
+ */
+ inline void RadioMeasurement( TBool aRadioMeasurement );
+
+ /**
+ * Returns the Radio Measurement value to be included into the (re-)association
+ * request.
+ *
+ * @since S60 9.2
+ * @return Radio Measurement setting
+ */
+ inline TBool RadioMeasurement() const;
+
+ /**
+ * Sets desired privacy mode filter
+ * @param aEncryptionStatus desired privacy mode
+ */
+ inline void SetActivePrivacyModeFilter(
+ WlanContextImpl& aCtxImpl,
+ TEncryptionStatus aEncryptionStatus );
+
+ /**
+ * Executes current privacy mode filter
+ * @param aFrameheader Header of the received frame
+ * @param aUserDataEnabled is protocol stack side datapath
+ * enabled or not
+ * @param aEthernetType Ethernet Type of the received frame
+ * @param aUnicastKeyExists AP <-> client unicast key
+ * is configured or not
+ * @param aAesOrTkipOrWapiEncrypted ETrue if the frame is encrypted with AES,
+ * TKIP or WAPI, EFalse otherwise
+ * @return ETrue if frame can be accepted, EFalse otherwise
+ */
+ inline TBool ExecuteActivePrivacyModeFilter(
+ const SDataFrameHeader& aFrameheader,
+ TBool aUserDataEnabled,
+ TUint16 aEthernetType,
+ TBool aUnicastKeyExists,
+ TBool aAesOrTkipOrWapiEncrypted ) const;
+
+ /**
+ * Gets capability information field
+ * @return capability information field
+ */
+ inline SCapabilityInformationField& GetCapabilityInformation();
+
+ /**
+ * Resets BSS loss indication flags.
+ */
+ inline void ResetBssLossIndications();
+
+ /**
+ * Gets AP advertised supported rates IE
+ * @return supported rates IE
+ */
+ inline SSupportedRatesIE& GetApSupportedRatesIE();
+
+ /**
+ * Gets AP advertised extended supported rates IE
+ * @return extended supported rates IE
+ */
+ inline SExtendedSupportedRatesIE& GetApExtendedSupportedRatesIE();
+
+ /** Resets Tx rate adaptation object */
+ inline void ResetTxRateAdaptation();
+
+ /**
+ * Gets min basic rate of BSS
+ * @return min basic rate of BSS
+ */
+ inline TUint32& GetMinBasicRate();
+
+ inline TUint32& GetMaxBasicRate();
+
+ inline void ClearBasicRateSet();
+ inline void BasicRateSetBitSet( const TUint32 aRateBitToSet );
+ inline TUint32 BasicRateSet() const;
+
+ inline TBool WsaCmdActive() const;
+ inline void ActivateWsaCmd();
+ inline void DeActivateWsaCmd();
+
+ /**
+ * Increments authentication sequnece expected counter
+ * to next expected sequence number
+ */
+ inline void IncrementAuthSeqNmbrExpected();
+
+ /**
+ * Sets the rate adaptation object
+ */
+ inline TBool SetTxRateAdaptationRates(
+ TUint8 aPolicyId,
+ WHA::TRate aRateBitmask );
+
+ /**
+ * Sets the Tx rate adaptation policy to be used with the specified Tx queue
+ * @param aQueueId id of the Tx queue
+ * @param aPolicyId id of the Tx rate policy
+ */
+ inline void SetTxRatePolicy( WHA::TQueueId aQueueId, TUint8 aPolicyId );
+
+ /**
+ * Sets the current max Tx rate which should be initially used when sending
+ * frames using the specified Tx rate policy.
+ * If this rate is not present in the specified rate policy, or if
+ * it is not supported either by the nw or by WHA layer, the next possible
+ * lower rate will be used instead.
+ * However, if the specified rate is lower that any rate in the specified
+ * rate policy, the lowest rate in the policy will be used.
+ *
+ * @since S60 3.1
+ * @param aPolicyId id of the Tx rate policy
+ * @param aRate initial max Tx rate
+ */
+ inline void SetCurrentMaxTxRate( TUint8 aPolicyId, WHA::TRate aRate );
+
+ /**
+ * Sets the Tx rate adaptation algorithm parameters
+ *
+ * @since S60 3.1
+ * @param aMinStepUpCheckpoint minimum and initial rate increase
+ * checkpoint in units of frames
+ * Range: [aStepDownCheckpoint,aMaxStepUpCheckpoint]
+ * @param aMaxStepUpCheckpoint maximum rate increase checkpoint in units
+ * of frames
+ * Range: [aStepDownCheckpoint,UCHAR_MAX]
+ * @param aStepUpCheckpointFactor StepUpCheckpoint is multiplied with this
+ * value if sending a probe frame fails
+ * Range: [1,aMaxStepUpCheckpoint]
+ * @param aStepDownCheckpoint after this many frames the need to decrease
+ * the rate is checked
+ * Range: [2,UCHAR_MAX]
+ * @param aMinStepUpThreshold minimum and initial StepUpThreshold
+ * percentage
+ * Range: [1,aMaxStepUpThreshold]
+ * @param aMaxStepUpThreshold maximum StepUpThreshold percentage
+ * Range: [1,100]
+ * @param aStepUpThresholdIncrement StepUpThreshold is incremented by this
+ * value if sending a probe frame fails
+ * Range: [0,aMaxStepUpThreshold]
+ * @param aStepDownThreshold if the percentage of frames which failed to
+ * be transmitted at the originally requested rate is at least
+ * aStepDownThreshold at the aStepDownCheckpoint, the rate will
+ * be decreased
+ * Range: [1,100]
+ * @param aDisableProbeHandling if EFalse, the rate adaptation algorithm
+ * handles the first frame transmitted after a rate increase in a
+ * special way. Otherwise the special handling is disabled
+ */
+ inline void SetTxRateAdaptationAlgorithmParams(
+ TUint8 aMinStepUpCheckpoint,
+ TUint8 aMaxStepUpCheckpoint,
+ TUint8 aStepUpCheckpointFactor,
+ TUint8 aStepDownCheckpoint,
+ TUint8 aMinStepUpThreshold,
+ TUint8 aMaxStepUpThreshold,
+ TUint8 aStepUpThresholdIncrement,
+ TUint8 aStepDownThreshold,
+ TBool aDisableProbeHandling );
+
+ /**
+ * To be called when BSS Lost indication is received from WLAN PDD
+ *
+ * @since S60 5.0
+ * @return ETrue if Consecutive Beacons Lost indication needs to be sent to
+ * WLAN Mgmt Client
+ * EFalse otherwise
+ */
+ inline TBool OnConsecutiveBeaconsLost();
+
+ /**
+ * To be called after more than threshold number of consecutive Tx failures
+ *
+ * @since S60 5.0
+ * @return ETrue if Consecutive Tx Failures indication needs to be sent to
+ * WLAN Mgmt Client
+ * EFalse otherwise
+ */
+ inline TBool OnConsecutiveTxFailures();
+
+ /**
+ * To be called after more than threshold number of consecutive 802.11 Power
+ * Mgmt Mode setting failures
+ *
+ * @since S60 5.0
+ * @return ETrue if Consecutive Power Mode Set Failures indication needs to
+ * be sent to WLAN Mgmt Client
+ * EFalse otherwise
+ */
+ inline TBool OnConsecutivePwrModeSetFailures();
+
+ /**
+ * To be called when we have successfully communicated with the current AP
+ *
+ * @since S60 3.1
+ * @return ETrue if BSS Regained indication needs to be sent to WLAN Mgmt
+ * Client
+ * EFalse otherwise
+ */
+ TBool OnBssRegained();
+
+ /**
+ * Pushes a packet to the packet scheduler
+ *
+ * @since S60 3.1
+ * @param aPacket the packet to transmit
+ * @param aLength length of the packet
+ * @param aQueueId id of the queue to use when sending the packet
+ * @param aPacketId frame type
+ * @param aMetaHeader frame meta header
+ * @param aMore ETrue if another frame is also ready to be transmitted
+ * EFalse otherwise
+ * @param aMulticastData ETrue if this is a multicast data frame
+ * @param aUseSpecialRatePolicy ETrue if use of the special Tx rate
+ * policy is requested for this frame Tx
+ * @return ETrue packet was accepted, EFalse otherwise
+ */
+ inline TBool PushPacketToPacketScheduler(
+ const TAny* aPacket,
+ TUint32 aLength,
+ WHA::TQueueId aQueueId,
+ TUint32 aPacketId,
+ const TDataBuffer* aMetaHeader,
+ TBool aMore,
+ TBool aMulticastData,
+ TBool aUseSpecialRatePolicy = EFalse );
+
+ /**
+ * Removes all pending packet transmission entrys from
+ * the packet scheduler
+ *
+ * @since S60 3.1
+ */
+ inline void FlushPacketScheduler();
+
+ /**
+ * Schedules a packet and sends it if possible.
+ * If no packets to schedule exists does nothing
+ * If packet was send it is removed from the storage
+ *
+ * @since S60 3.1
+ * @param aMore ETrue if another frame is also ready to be transmitted
+ * EFalse otherwise
+ */
+ inline void SchedulePackets( TBool aMore );
+
+ /**
+ * Are there unsent Tx packets, i.e. packets not yet completed by WHA
+ * layer
+ *
+ * @since S60 3.2
+ * @return ETrue if there are packets not yet completed by WHA layer
+ * EFalse otherwise
+ */
+ inline TBool UnsentTxPackets() const;
+
+ /**
+ * Increments the failed Tx packet counter
+ *
+ * @since S60 3.1
+ */
+ inline void IncrementFailedTxPacketCount();
+
+ /**
+ * Returns the value of failed Tx packet counter
+ *
+ * @since S60 3.1
+ */
+ inline TUint8 FailedTxPacketCount() const;
+
+ /**
+ * Resets the failed Tx packet counter
+ *
+ * @since S60 3.1
+ */
+ inline void ResetFailedTxPacketCount();
+
+ /**
+ * Initializes the set power mgmt mode counter
+ *
+ * @since S60 3.1
+ */
+ inline void InitializeSetPsModeCount();
+
+ /**
+ * Decrements the set power mgmt mode counter by one
+ *
+ * @since S60 3.1
+ */
+ inline void DecrementSetPsModeCount();
+
+ /**
+ * Returns the value of the set power mgmt mode counter
+ *
+ * @since S60 3.1
+ * @return Set power mgmt mode counter value
+ */
+ inline TUint SetPsModeCount() const;
+
+ /**
+ * Starts dynamic power mode management
+ *
+ * @since S60 3.1
+ */
+ inline void StartPowerModeManagement();
+
+ /**
+ * Stops dynamic power mode management
+ *
+ * @since S60 3.1
+ */
+ inline void StopPowerModeManagement();
+
+ /**
+ * To be called when transmitting a user data or WLAN Management Client frame
+ *
+ * Informs Dynamic Power Mode Manager about 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
+ */
+ inline 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
+ */
+ inline TPowerMgmtModeChange OnFrameRx(
+ WHA::TQueueId aAccessCategory,
+ TUint16 aEtherType,
+ TUint aPayloadLength,
+ TDaType aDaType );
+
+ /**
+ * Sets the dynamic power mode transition algorithm parameters
+ *
+ * @since S60 3.1
+ * @param aCtxImpl statemachine context
+ * @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
+ * @return ETrue if a state change occurred
+ * EFalse otherwise
+ */
+ inline void SetPowerModeManagementParameters(
+ 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
+ */
+ inline void ConfigurePwrModeMgmtTrafficOverride(
+ 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 ConfigurePwrModeMgmtTrafficOverride() method
+ * and based on whether U-APSD is used for the different ACs/Tx queues
+ *
+ * @since S60 3.2
+ */
+ inline void FreezePwrModeMgmtTrafficOverride();
+
+ /**
+ * 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
+ */
+ inline 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
+ */
+ inline 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
+ */
+ inline TBool OnLightPsToDeepPsTimerTimeout();
+
+ /**
+ * Adds a multicast (Rx) address to our internal bookkeeping.
+ * @param aMacAddress Address to be added
+ * @return See TGroupAddStatus definition.
+ */
+ inline TGroupAddStatus AddMulticastAddress(
+ const TMacAddress& aMacAddress );
+
+ /**
+ * Removes a multicast (Rx) address from our internal bookkeeping.
+ * @param aMacAddress MAC address to be removed
+ * @return ETrue if address was found (and hence removed)
+ * EFalse otherwise
+ */
+ inline TBool RemoveMulticastAddress( const TMacAddress& aMacAddress );
+
+ /**
+ * Returns the number of multicast (Rx) addresses that exist in our
+ * internal bookkeeping currently
+ * @return Address count
+ */
+ inline TUint8 MulticastAddressCount() const;
+
+ /**
+ * Gets all the multicast (Rx) addresses from our internal bookkeeping
+ * by passing back a pointer to the 1st address which is followed by
+ * all the other addresses.
+ * @return The number of addresses returned.
+ */
+ inline TUint8 GetMulticastAddresses(
+ const TMacAddress*& aMacAddresses ) const;
+
+ /**
+ * Clears our internal multicast (Rx) address bookkeeping by removing
+ * all addresses.
+ */
+ inline void ResetMulticastAddresses();
+
+ inline void MarkInternalTxBufFree();
+
+ inline TBool InternalTxBufBeingWaited() const;
+
+ inline void ClearInternalTxBufBeingWaitedFlag();
+
+ /**
+ * Resets frame statistics
+ *
+ * @since S60 3.2
+ */
+ inline void ResetFrameStatistics();
+
+ /**
+ * Increments Rx unicast data frame count by one
+ *
+ * @since S60 3.2
+ * @param aAccessCategory AC/Queue via which the frame was transmitted
+ */
+ inline void IncrementRxUnicastDataFrameCount(
+ WHA::TQueueId aAccessCategory );
+
+ /**
+ * Increments Tx unicast data frame count by one
+ *
+ * @since S60 3.2
+ * @param aAccessCategory AC/Queue via which the frame was transmitted
+ */
+ inline void IncrementTxUnicastDataFrameCount(
+ WHA::TQueueId aAccessCategory );
+
+ /**
+ * Increments Rx multicast data frame count by one
+ *
+ * @since S60 3.2
+ * @param aAccessCategory AC/Queue via which the frame was transmitted
+ */
+ inline void IncrementRxMulticastDataFrameCount(
+ WHA::TQueueId aAccessCategory );
+
+ /**
+ * Increments Tx multicast data frame count by one
+ *
+ * @since S60 3.2
+ * @param aAccessCategory AC/Queue via which the frame was transmitted
+ */
+ inline void IncrementTxMulticastDataFrameCount(
+ WHA::TQueueId aAccessCategory );
+
+ /**
+ * Increments Tx frame retry count by aCount
+ *
+ * @since S60 3.2
+ * @param aAccessCategory AC/Queue via which the frame was transmitted
+ * @param aCount number to add to the current count
+ */
+ inline void IncrementTxRetryCount(
+ WHA::TQueueId aAccessCategory,
+ TUint aCount );
+
+ /**
+ * Increments Tx error count by one
+ *
+ * @since S60 3.2
+ * @param aAccessCategory AC/Queue via which the frame was transmitted
+ */
+ inline void IncrementTxErrorCount(WHA::TQueueId aAccessCategory );
+
+ /**
+ * Increments cumulative Tx Media Delay by aDelay
+ *
+ * @since S60 3.2
+ * @param aAccessCategory AC/Queue via which the frame was transmitted
+ * @param aDelay Amount of delay to add to the current cumulative delay
+ */
+ inline void IncrementTxMediaDelay(
+ WHA::TQueueId aAccessCategory,
+ TUint aDelay );
+
+ /**
+ * Returns the average Tx Media Delay of the specified Access Category
+ *
+ * Note! When this method is called the txMediaDelay field shall contain
+ * the cumulative Tx Media Delay.
+ *
+ * @since S60 3.2
+ * @param aAccessCategory AC/Queue for which the average is requested
+ * @return Average Tx Media Delay
+ */
+ TUint AverageTxMediaDelay( WHA::TQueueId aAccessCategory ) const;
+
+ /**
+ * Calculates the average Tx Media Delay for all Access Categories
+ * and stores the results into frame statistics results
+ *
+ * @since S60 3.2
+ */
+ void CalculateAverageTxMediaDelays();
+
+ /**
+ * Increments cumulative Total Tx Delay by aDelay
+ *
+ * @since S60 3.2
+ * @param aAccessCategory AC/Queue via which the frame was transmitted
+ * @param aDelay Amount of delay to add to the current cumulative delay
+ */
+ inline void IncrementTotalTxDelay(
+ WHA::TQueueId aAccessCategory,
+ TUint aDelay );
+
+ /**
+ * Updates Total Tx Delay histogram
+ *
+ * @since S60 3.2
+ * @param aAccessCategory AC/Queue via which the frame was transmitted
+ * @param aDelay Total Tx Delay of the frame
+ */
+ void UpdateTotalTxDelayHistogram(
+ WHA::TQueueId aAccessCategory,
+ TUint aDelay );
+
+ /**
+ * Returns the average Total Tx Delay of the specified Access Category
+ *
+ * Note! When this method is called the totalTxDelay field shall contain
+ * the cumulative Total Tx Delay.
+
+ * @since S60 3.2
+ * @param aAccessCategory AC/Queue for which the average is requested
+ * @return Average Total Tx Delay
+ */
+ TUint AverageTotalTxDelay( WHA::TQueueId aAccessCategory ) const;
+
+ /**
+ * Calculates the average Total Tx Delay for all Access Categories
+ * and stores the results into frame statistics results
+ *
+ * @since S60 3.2
+ */
+ void CalculateAverageTotalTxDelays();
+
+ /**
+ * Stores FCS error count recorded in received MPDUs
+ *
+ * @since S60 3.2
+ * @param aCount the value to set
+ */
+ inline void StoreFcsErrorCount( TUint aCount );
+
+ /**
+ * Returns frame statistics
+ *
+ * @since S60 3.2
+ * @return reference to frame statistics
+ */
+ inline const TStatisticsResponse& FrameStatistics() const;
+
+ /**
+ * Sets Null Frame Send Controller parameters
+ *
+ * @since S60 3.2
+ * @param aVoiceCallEntryTimeout when we are not in Voice over WLAN Call
+ * state and we transmit at least aVoiceCallEntryTxThreshold
+ * Voice priority frames during the time period (microseconds)
+ * denoted by this parameter, we enter Voice over WLAN Call state
+ * @param aVoiceCallEntryTxThreshold Threshold value for the number of
+ * Voice priority Tx frames to enter Voice over WLAN Call state
+ * @param aNullTimeout NULL frame sending interval
+ * @param aNoVoiceTimeout after this long time of no Voice priority data
+ * Tx, exit voice call state
+ * @param aKeepAliveTimeout Keep Alive frame sending interval in
+ * infrastructure mode
+ */
+ inline void SetNullSendControllerParameters(
+ TUint32 aVoiceCallEntryTimeout,
+ TUint32 aVoiceCallEntryTxThreshold,
+ TUint32 aNullTimeout,
+ TUint32 aNoVoiceTimeout,
+ TUint32 aKeepAliveTimeout );
+
+ /**
+ * Starts Voice over WLAN Call maintenance
+ *
+ * @since S60 3.2
+ */
+ inline void StartVoiceOverWlanCallMaintenance();
+
+ /**
+ * Stops Voice over WLAN Call maintenance
+ *
+ * @since S60 3.2
+ */
+ inline void StopVoiceOverWlanCallMaintenance();
+
+ /**
+ * Terminates Voice over WLAN Call maintenance
+ */
+ inline void TerminateVoiceOverWlanCallMaintenance();
+
+ /**
+ * Resumes QoS null frame sending, if relevant.
+ * Doesn't change the Voice over WLAN Call state
+ *
+ * @since S60 3.2
+ */
+ inline void ResumeQosNullSending();
+
+ /**
+ * Starts Keep Alive frame sending
+ *
+ * @since S60 3.2
+ */
+ inline void StartKeepAlive();
+
+ /**
+ * Stops Keep Alive frame sending
+ *
+ * @since S60 3.2
+ */
+ inline void StopKeepAlive();
+
+ /**
+ * To be called upon every RX Data frame (other than Null and QoS Null Data)
+ *
+ * @since S60 3.2
+ * @param aQueueId Id of the queue/AC via which the frame will be transmitted
+ * @param aPayloadLength length of the ethernet frame payload
+ */
+ inline void OnDataRxCompleted(
+ WHA::TQueueId aQueueId,
+ TUint aPayloadLength );
+
+ /**
+ * To be called upon every Data frame (other than Null and QoS Null Data)
+ * send completion
+ *
+ * @since S60 3.2
+ * @param aQueueId Id of the queue/AC via which the frame will be transmitted
+ */
+ inline void OnDataTxCompleted( WHA::TQueueId aQueueId );
+
+ /**
+ * To be called upon every QoS Null Data frame send completion
+ *
+ * @since S60 3.2
+ */
+ inline void OnQosNullDataTxCompleted();
+
+ /**
+ * To be called upon every Null Data frame send completion
+ *
+ * @since S60 3.2
+ */
+ inline void OnNullDataTxCompleted();
+
+ /**
+ * To be called upon Voice Call Entry Timer timeout
+ *
+ * @since S60 3.2
+ */
+ inline void OnVoiceCallEntryTimerTimeout();
+
+ /**
+ * To be called upon Null Timer timeout
+ *
+ * @since S60 3.2
+ */
+ inline void OnNullTimerTimeout();
+
+ /**
+ * To be called upon Voice Timer timeout
+ *
+ * @since S60 3.2
+ */
+ inline void OnNoVoiceTimerTimeout();
+
+ /**
+ * To be called upon Keep Alive Timer timeout
+ *
+ * @since S60 3.2
+ */
+ void OnKeepAliveTimerTimeout();
+
+ /**
+ * Insert new RCPI value into the Signal Predictor.
+ *
+ * @since S60 3.2
+ * @param aTimestamp Current time (in microseconds)
+ * @param aRcpi RCPI value from HW
+ * @return ETrue if an indication about weakening signal should be created
+ * EFalse otherwise
+ */
+ inline TBool InsertNewRcpiIntoPredictor( TInt64 aTimestamp, WHA::TRcpi aRcpi );
+
+ /**
+ * Gets the latest median RCPI value from Signal Predictor.
+ *
+ * @since S60 v3.2
+ * @param aTimestamp Current time (in microseconds).
+ * @param aLatestMedian reference to the median.
+ * @return ETrue if median RCPI value is available.
+ * EFalse otherwise
+ */
+ inline TBool GetLatestMedianRcpiFromPredictor(
+ TInt64 aTimestamp,
+ WHA::TRcpi& aLatestMedian ) const;
+
+ /**
+ * Configures the Signal Predictor.
+ *
+ * @since S60 v5.0
+ * @param aTimeToWarnLevel Specifies the time (in microseconds)
+ * how far into the future signal prediction is done.
+ * @param aTimeToNextInd The minimum time difference (in
+ * microseconds) between two signal loss prediction indications.
+ * @param aRcpiWarnLevel If this RCPI level is predicted to be
+ * reached within the time specified by aSpTimeToCountPrediction,
+ * a signal loss prediction indication is sent.
+ */
+ inline void ConfigureWlanSignalPredictor(
+ TUint32 aTimeToWarnLevel,
+ TUint32 aTimeToNextInd,
+ WHA::TRcpi aRcpiWarnLevel );
+
+ /**
+ * Adds a WLAN feature supported by us to the list of those supported
+ * features which are indicated in BSS membership selector
+ *
+ * @param aFeature Feature to add
+ */
+ void AddBssMembershipFeature( T802Dot11BssMembershipSelector aFeature );
+
+ /**
+ * Checks if the specified item is a WLAN feature indicated in BSS
+ * membership selector and if it is supported by us
+ *
+ * @param aItem Item to check
+ * @return ETrue if supported
+ * EFalse otherwise
+ */
+ TBool BssMembershipFeatureSupported( TUint8 aItem ) const;
+
+ /**
+ * Gets our HT Capabilities element
+ * @return HT Capabilities element
+ */
+ inline SHtCapabilitiesIE& GetOurHtCapabilitiesIe();
+
+ /**
+ * Gets target/current network's HT Capabilities element
+ * @return HT Capabilities element
+ */
+ inline SHtCapabilitiesIE& GetNwHtCapabilitiesIe();
+
+ /**
+ * Gets target/current network's HT Operation element
+ * @return HT Operation element
+ */
+ inline SHtOperationIE& GetNwHtOperationIe();
+
+ /**
+ * Gets HT Block Ack configuration provided by WLAN Mgmt client
+ * @return HT Block Ack configuration
+ */
+ inline WHA::ShtBlockAckConfigure& GetHtBlockAckConfigure();
+
+ /**
+ * Gets proprietary SNAP header provided by WLAN Mgmt client
+ * @return Proprieatary SNAP header
+ */
+ inline SSnapHeader& GetProprietarySnapHeader();
+
+ /**
+ * Gets WHA layer transmission status
+ *
+ * @param aTxQueueState State (full / not full) of every WHA transmit queue
+ * @return ETrue if the Tx pipeline is active, i.e. Tx frame submission
+ * is allowed
+ * EFalse if the Tx pipeline is not active, i.e. Tx frame submission
+ * is not allowed
+ */
+ inline TBool GetWhaTxStatus( TWhaTxQueueState& aTxQueueState ) const;
+
+protected:
+
+ /**
+ * Method called when packet has been transferred to the WLAN device
+ *
+ * @since S60 3.1
+ * @param aCtxImpl global state machine context
+ * @param aPacketId packet whose transfer is complete
+ * @param aMetaHeader frame meta header
+ */
+ virtual void OnPacketTransferComplete(
+ WlanContextImpl& aCtxImpl,
+ TUint32 aPacketId,
+ TDataBuffer* aMetaHeader );
+
+ virtual void OnPacketSendComplete(
+ WlanContextImpl& aCtxImpl,
+ WHA::TStatus aStatus,
+ TUint32 aPacketId,
+ WHA::TRate aRate,
+ TUint32 aPacketQueueDelay,
+ TUint32 aMediaDelay,
+ TUint aTotalTxDelay,
+ TUint8 aAckFailures,
+ WHA::TQueueId aQueueId,
+ WHA::TRate aRequestedRate,
+ TBool aMulticastData );
+
+ /**
+ * Method called when packet has been flushed (removed)
+ * from packet scheduler
+ *
+ * @since S60 3.1
+ * @param aCtxImpl global state machine context
+ * @param aPacketId packet that was flushed
+ * @param aMetaHeader frame meta header
+ */
+ virtual void OnPacketFlushEvent(
+ WlanContextImpl& aCtxImpl,
+ TUint32 aPacketId,
+ TDataBuffer* aMetaHeader );
+
+ /**
+ * Method called when Packet Scheduler's packet scheduling method
+ * should be called, as there exists a packet that is suitable for
+ * transmission.
+ * NOTE: if any other Packet Scheduler method is called within this
+ * context the result is undefined.
+ *
+ * @param aCtxImpl global state machine context
+ * @param aMore ETrue if another frame is also ready to be transmitted
+ * EFalse otherwise
+ */
+ virtual void CallPacketSchedule(
+ WlanContextImpl& aCtxImpl,
+ TBool aMore );
+
+ virtual void OnPacketPushPossible( WlanContextImpl& aCtxImpl );
+
+ virtual void CommandResponse(
+ WHA::TCommandId aCommandId,
+ WHA::TStatus aStatus,
+ const WHA::UCommandResponseParams& aCommandResponseParams );
+
+ virtual void CommandComplete(
+ WHA::TCompleteCommandId aCompleteCommandId,
+ WHA::TStatus aStatus,
+ const WHA::UCommandCompletionParams& aCommandCompletionParams );
+
+ virtual void Indication(
+ WHA::TIndicationId aIndicationId,
+ const WHA::UIndicationParams& aIndicationParams );
+
+ // Frame sending callbacks
+
+ virtual void SendPacketTransfer(
+ WHA::TPacketId aPacketId );
+
+ virtual void SendPacketComplete(
+ WHA::TStatus aStatus,
+ WHA::TPacketId aPacketId,
+ WHA::TRate aRate,
+ TUint32 aPacketQueueDelay,
+ TUint32 aMediaDelay,
+ TUint8 aAckFailures,
+ TUint16 aSequenceNumber );
+
+
+ // Frame receive
+
+ virtual TAny* RequestForBuffer( TUint16 aLength );
+
+ virtual void ReceivePacket(
+ WHA::TStatus aStatus,
+ const void* aFrame,
+ TUint16 aLength,
+ WHA::TRate aRate,
+ WHA::TRcpi aRcpi,
+ WHA::TChannelNumber aChannel,
+ void* aBuffer,
+ TUint32 aFlags );
+
+ /**
+ * Request to send a Null Data Frame
+ *
+ * @since S60 v3.2
+ * @param aCtxImpl statemachine context
+ * @param aQosNull ETrue if a QoS Null Data frame should be transmitted
+ * EFalse if a regular Null Data frame should be transmitted
+ * @return ETrue if the send request was successfully submitted
+ * EFalse otherwise
+ */
+ virtual TBool TxNullDataFrame(
+ WlanContextImpl& aCtxImpl,
+ TBool aQosNull );
+
+ // Prohibit copy constructor
+ WlanContextImpl( const WlanContextImpl& aCntx );
+ // Prohibit assigment operator
+ WlanContextImpl& operator= ( const WlanContextImpl& );
+
+public: // data
+
+ WlanMacState* iCurrentMacState;
+ Umac& iUmac;
+
+
+ /** The states of the statemachine */
+ States iStates;
+ /** 802.11 MIB */
+ SWlanMib iWlanMib;
+ /** supported rates lookup table */
+ SupportedRateLookUp
+ iSupportedRatesLookUpTable[KMaxNumberOfDot11bAndgRates];
+ /** is protocol stack side datapath enabled or not */
+ TBool iEnableUserData;
+
+ TUint8* iCurrentRxBuffer;
+
+private: // definitions
+
+ /**
+ * max number of features in our WLAN feature array (see below)
+ */
+ static const TUint KMaxNumOfWlanFeatures = 1;
+
+ /**
+ * value used in WLAN feature array for unallocated elements
+ */
+ static const TUint8 KUnallocated = 0;
+
+ /**
+ * container type for IDs of those WLAN features which are indicated in BSS
+ * membership selector
+ */
+ typedef TUint8 TWlanFeatureArray[KMaxNumOfWlanFeatures];
+
+private: // data
+
+ /**
+ * ETrue if the Tx data buffer for frames created internally in this
+ * component is free (applies both to the DMA and the non-DMA Tx buffer).
+ * EFalse if it is in use
+ */
+ TBool iInternalTxBufFree;
+
+ /**
+ * ETrue if someone if waiting for the internal Tx Buffer to become
+ * available. EFalse othwerwise
+ */
+ TBool iInternalTxBufBeingWaited;
+
+ TWlanUserTxDataCntx iTxDataCntx;
+ TWlanUserTxDataCntx iMgmtTxDataCntx;
+
+ /** data frame header template */
+ SDataFrameHeader iDataFrameHeader;
+
+ TUint32 iAlignNullData;
+ SNullDataFrame iNullDataFrame;
+
+ TUint32 iAlignQosNullData;
+ SHtQosNullDataFrame iQosNullDataFrame;
+
+ /** authentication sequence expected counter */
+ WlanAuthSeqNmbrExpected iAuthSeqNmbrExpected;
+ /** connection state info */
+
+ WlanConnectContext iConnectContext;
+ /** available privacy mode filters */
+ WlanPrivacyModeFilters iPrivacyModeFilters;
+ /**
+ * container for joined multicast (Rx) groups. Contains the
+ * multicast MAC addresses denoting the groups.
+ */
+ JoinedMulticastGroups iJoinedMulticastGroups;
+ /**
+ * has Consecutive Beacons Lost indication already been sent to
+ * WLAN Mgmt Client
+ */
+ TBool iConsecutiveBeaconsLostIndicated;
+ /**
+ * has Consecutive Tx Failures indication already been sent to
+ * WLAN Mgmt Client
+ */
+ TBool iConsecutiveTxFailuresIndicated;
+ /**
+ * has Consecutive 802.11 Power Mgmt Mode Set Failures indication already
+ * been sent to WLAN Mgmt Client
+ */
+ TBool iConsecutivePwrModeSetFailuresIndicated;
+ /**
+ * failed Tx packet counter used to determine if we should indicate
+ * Consecutive Tx Failures
+ */
+ TUint8 iFailedTxPacketCount;
+ /**
+ * counter which states how many times we will still try to change the
+ * 802.11 power management mode before indicating Consecutive 802.11
+ * Power Mgmt Mode Set Failures, if we continue to be unsuccessful in
+ * the power management mode changing
+ */
+ TUint iSetPsModeCount;
+
+ /** is a WHA cmd active */
+ TBool iWsaCmdActive;
+
+ WlanTxRateAdaptation iTxRateAdaptation;
+
+ WlanPRNGenerator iPrnGenerator;
+
+ // Asynchronous Completion Token for WHA command
+ TUint32 iWhaCommandAct;
+
+ /** 802.11 management frame templates */
+ ManagementFrameTemplates iManagementFrameTemplates;
+
+ WHA::Wha* iWha;
+ WHA::SSettings iWHASettings;
+
+ SWsaCommands* iWsaCommands;
+
+ WlanEventDispatcher iEventDispatcher;
+ WlanPacketScheduler iPacketScheduler;
+ /** dynamic power mode context */
+ WlanDynamicPowerModeMgmtCntx iDynamicPowerModeCntx;
+
+ /** frame statistics counters */
+ TStatisticsResponse iFrameStatistics;
+
+ /** Null Data Frame sending controller */
+ WlanNullSendController iNullSendController;
+
+ /** WLAN signal predictor */
+ WlanSignalPredictor iWlanSignalPredictor;
+
+ /**
+ * includes IDs of those WLAN features which are indicated in BSS membership
+ * selector and which we support
+ */
+ TWlanFeatureArray iOurBssMembershipFeatureArray;
+
+ /**
+ * HT Capabilities element which we use to inform about our static HT
+ * capabilities
+ */
+ SHtCapabilitiesIE iOurHtCapabilitiesIe;
+
+ /** HT Block Ack configuration provided by WLAN Mgmt Client */
+ WHA::ShtBlockAckConfigure iHtBlockAckConfigure;
+
+ /**
+ * Otherwise valid received 802.11 Data frames containing this SNAP header
+ * are accepted and forwarded to the WLAN Management Client.
+ */
+ SSnapHeader iProprietarySnapHeader;
+ };
+
+#include "UmacContextImpl.inl"
+
+#endif // WLANCONTEXTIMPL_H