wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/inc/WlanLogicalChannel.h
changeset 0 c40eb8fe8501
child 11 a9473894c0f1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/inc/WlanLogicalChannel.h	Tue Feb 02 02:03:13 2010 +0200
@@ -0,0 +1,798 @@
+/*
+* Copyright (c) 2005-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 DWlanLogicalChannel class.
+*
+*/
+
+/*
+* %version: 31 %
+*/
+
+#ifndef DWLANLOGICALCHANNEL_H
+#define DWLANLOGICALCHANNEL_H
+
+#include "UmacManagementSideUmacCb.h"
+#include "UmacProtocolStackSideUmacCb.h"
+#include "wllddlogicalchannelbase.h"
+#include "RWlanLogicalChannel.h"
+
+#include "wllddoidmsgstorage.h"
+#include "wlldddmausablememory.h"
+#include "wllddpowerindicator.h"
+#include "wllddpowerhandler.h"
+
+#include "EtherCardApi.h"
+#include "FrameXferBlock.h"
+
+class DWlanLogicalDevice;
+class Umac;
+
+#ifdef RD_WLAN_DDK
+class WlanOsa;
+#endif
+
+class DEthernetFrameMemMngr;
+class RFrameXferBlock;
+class WlanChunk;
+
+class DWlanLogicalChannel : 
+    public DWlanLogicalChannelBase,
+    public WlanManagementSideUmacCb,
+    public WlanProtocolStackSideUmacCb,
+    public MWlanPowerIndicator
+    {
+    // type definitions
+    // linked list entry for storing indications
+    struct TIndicationListEntry
+        {
+        TIndication indication;        
+        struct TIndicationListEntry *next;
+        };
+
+    /** max number of indication list entries */
+    enum { KMaxIndicationListEntries = 6 };
+
+public:
+
+#ifndef RD_WLAN_DDK
+    DWlanLogicalChannel( 
+        DWlanLogicalDevice& aParent, 
+        Umac& aUmac,
+        TDynamicDfcQue& aDfcQ,
+        DMutex& aMutex, 
+        DChunk*& aSharedMemoryChunk,
+        WlanChunk*& aRxFrameMemoryPool );
+#else        
+    DWlanLogicalChannel( 
+        DWlanLogicalDevice& aParent,
+        Umac& aUmac,
+        TDynamicDfcQue& aDfcQ,
+        WlanOsa*& aOsa,
+        DChunk*& aSharedMemoryChunk,
+        WlanChunk*& aRxFrameMemoryPool );
+#endif        
+
+    virtual ~DWlanLogicalChannel();
+
+    /**
+    * Returns a reference to a pointer pointing to the only shared memory
+    * chunk instance
+    *
+    * @return See above
+    */
+	DChunk*& SharedMemoryChunk();
+
+    /**
+    * Sets the number of extra bytes required to align Rx buffer start
+    * address, to be returned to WHA layer, to allocation unit boundary
+    */
+    void SetRxBufAlignmentPadding( TInt aRxBufAlignmentPadding );
+    
+    /**
+    * Returns the number of extra bytes required to align Rx buffer start
+    * address, to be returned to WHA layer, to allocation unit boundary
+    * @return See above
+    */
+    TInt RxBufAlignmentPadding() const;
+	
+    /**	
+    * Second phase constructor for DLogicalChannelBase objects.
+    *
+    * It is called in creating thread context in a critical section with
+    * no fast mutexes	held.
+    * The default implementation does nothing.
+    *
+    * @since S60 3.1
+    * @param	aUnit	Requested unit number
+    * @param	aInfo	Additional info supplied by client
+    * @param	aVer	Requested interface version
+    *
+    * @return	KErrNone if construction was successful,
+    *           otherwise one of the other system-wide error codes.
+    */
+	virtual TInt DoCreate(TInt aUnit, const TDesC8* aInfo, const TVersion& aVer);
+
+	/**
+	* Processes a message for this logical channel.
+	* This function is called in the context of a DFC thread.
+    *
+    * @since S60 3.1
+	* @param aMsg     The message to process.
+	*                 The iValue member of this distinguishes the message type:
+	*                 iValue==ECloseMsg, channel close message
+	*                 iValue==KMaxTInt, a 'DoCancel' message
+	*                 iValue>=0, a 'DoControl' message with function number equal to iValue
+	*                 iValue<0, a 'DoRequest' message with function number equal to ~iValue
+	*/
+	virtual void HandleMsg(TMessageBase* aMsg);
+	
+    /**
+     * Process a function for this logical channel.
+     * This function is executed in the context of client's thread in 
+     * supervisor mode. All code executed in this mode MUST NOT
+     * take a lot of time and MUST NOT access the WHA layer.
+     * @param aFunction Defines the operation/function to be performed.
+     * @param param     Function specific parameter
+     * @return function specific return value.
+     */
+	virtual TAny* DoControlFast( TInt aFunction, TAny* param );
+	
+private:
+
+    /**
+    * Called from statemachine when oid has been completed. 
+    * Triggers handling of a new oid
+    * @param aOid OID handled
+    * @param aReason completion code
+    */
+    virtual void OnOidCompleted( 
+        TInt aReason, 
+        SOidOutputData& OidOutputData );
+
+    /**
+    * Sets the Tx offset for every frame type which can be transmitted
+    *
+    * @since S60 5.0
+    * @param aEthernetFrameTxOffset Tx offset for Ethernet frames and Ethernet
+    *        Test frames
+    * @param aDot11FrameTxOffset Tx offset for 802.11 frames
+    * @param aSnapFrameTxOffset Tx offset for SNAP frames
+    */
+    virtual void SetMgmtSideTxOffsets( 
+        TUint32 aEthernetFrameTxOffset,
+        TUint32 aDot11FrameTxOffset,
+        TUint32 aSnapFrameTxOffset );
+
+    /**
+    * Gets buffer for Rx data
+    * @param aLengthinBytes Requested buffer length
+    * @return buffer for Rx data upon success
+    *         NULL otherwise
+    */
+    virtual TUint8* GetBufferForRxData( TUint aLengthinBytes );
+    
+    /**
+    * Completes a data read operation from management side
+    *
+    * @param aBufferStart first element of the array that holds pointers to
+    *        Rx frame meta headers
+    * @param aNumOfBuffers number of meta header pointers in the array
+    */
+    virtual void MgmtDataReceiveComplete( 
+        const TDataBuffer*& aBufferStart, 
+        TUint32 aNumOfBuffers );
+
+    /**
+    * Completes a data write operation from management side
+    * @param aErr completion code 
+    */
+    virtual void MgmtPathWriteComplete ( TInt aErr );
+
+    /**
+    * Sends a indication to the management side
+    * @param aIndication indication code 
+    */
+    virtual void OnInDicationEvent( TIndication aIndication );
+
+    /**
+    * Frees the specified Rx frame buffer
+    *
+    * @param aBufferToFree The buffer to free
+    */
+    virtual void MarkRxBufFree( TUint8* aBufferToFree );
+
+    /**
+    * Sets the Tx offset for every frame type which can be transmitted
+    *
+    * @since S60 5.0
+    * @param aEthernetFrameTxOffset Tx offset for Ethernet frames
+    */
+    virtual void SetProtocolStackTxOffset( 
+        TUint32 aEthernetFrameTxOffset );
+
+    /**
+    * Called when the Tx packet in question has been trasferred to the WLAN
+    * device.
+    * 
+    * @param aCompletionCode Status of the operation.
+    * @param aMetaHeader Meta header associated with the related Tx packet
+    */
+    virtual void OnTxProtocolStackDataComplete( 
+        TInt aCompletionCode,
+        TDataBuffer* aMetaHeader );
+
+    /**
+    * Called when a Tx packet - submitted by someone else than the Protocol
+    * Stack Side Client - has been trasferred to the WLAN device.
+    */
+    virtual void OnOtherTxDataComplete();
+    
+    /**
+    * Called when the Tx of a frame has completed (either successfully or
+    * unsuccessfully). 
+    */
+    virtual void OnTxDataSent();
+    
+    virtual TUint8* DmaPrivateTxMemory();
+
+    /**
+    * Completes a data read operation from protocol stack side
+    *
+    * @param aBufferStart first element of the array that holds pointers to
+    *        Rx frame meta headers
+    * @param aNumOfBuffers number of meta header pointers in the array
+    * @return ETrue if this event was processed successfully
+    *         EFalse otherwise
+    */
+    virtual TBool ProtocolStackDataReceiveComplete( 
+        const TDataBuffer*& aBufferStart, 
+        TUint32 aNumOfBuffers );
+
+    /**
+    * Determines if the Protocol Stack Side client is ready to handle any
+    * callbacks from UMAC
+    *
+    * @return ETrue if the client is ready
+    *         EFalse if the client is not ready
+    */
+    virtual TBool ProtocolStackSideClientReady() const;
+    
+    /**
+    * From WlanProtocolStackSideUmacCb.
+    * Indicates that WLAN Mgmt Client has (re-)enabled protocol stack side
+    * user data Tx.
+    */
+    virtual void UserDataReEnabled();
+    
+    virtual void RegisterTimeout( 
+        TUint32 aTimeoutInMicroSeconds, 
+        TWlanTimer aTimer );
+    virtual void CancelTimeout( TWlanTimer aTimer );
+
+    virtual void RegisterDfc( TAny* aCntx );
+    virtual void CancelDfc();
+
+    /**
+    * Allocates Rx frame meta header
+    * @return Rx frame meta header upon success
+    *         NULL otherwise
+    */
+    virtual TDataBuffer* GetRxFrameMetaHeader();
+
+    /**
+    * Deallocates Rx frame meta header
+    * @param aMetaHeader Meta header to deallocate
+    */
+    virtual void FreeRxFrameMetaHeader( TDataBuffer* aMetaHeader );
+    
+    void DoCancel( TInt aMask );
+
+    TInt DoRequest( 
+        TInt aReqNo, 
+        TRequestStatus* aStatus, 
+        TAny* a1, 
+        TAny* a2 );
+    TInt OnMgmtSideDoRequest( 
+        TInt aReqNo, 
+        TRequestStatus* aStatus, 
+        TAny* a1, 
+        TAny* a2 );
+    TInt OnEthernetSideRequest( 
+        TInt aReqNo, 
+        TRequestStatus* aStatus, 
+        TAny* a1, 
+        TAny* a2 );
+
+    TInt DoControl( TInt aFunction, TAny* a1, TAny* a2);
+    TInt OnMgmtSideControl( TInt aFunction, TAny* a1, TAny* a2 );
+    TInt OnEthernetSideControl( TInt aFunction, TAny* a1, TAny* a2 );
+
+    TInt OnInitialiseEthernetFrameBuffers( 
+        TSharedChunkInfo* aSharedChunkInfo );
+
+    void OnReleaseEthernetFrameBuffers();
+
+    void TxProtocolStackData();
+    void TxManagementData();
+
+    TBool OnReadEthernetFrameRequest();
+
+    /**
+    * Stores a indication to indication list
+    * @param aIndication indication to be stored
+    */
+    void StoreIndication( TIndication aIndication );
+
+    /**
+    * Gets first stored indication and assigns it to indication buffer
+    * @return ETrue a stored indication existed, otherwise EFalse
+    */
+    TBool GetStoredIndication();
+
+    /**
+    * Calls GetStoredIndication() and after that 
+    * completes the outstanding request
+    */
+    void TryToCompleteIndicationRequest();
+
+    /**
+    * Relases a indication list entry
+    * @param entry to be relased
+    */
+    void ReleaseIndicationListEntry( TIndicationListEntry* aEntry );
+
+    /**
+    * Gets a next free indication list entry
+    * @return a next free indication list entry
+    */
+    TIndicationListEntry* GetFreeIndicationListEntry();
+
+    /**
+    * Deallocates the indication list and marks all pointers NULL
+    */
+    void FreeIndicationList();
+
+    /**
+    * Clears all indication list entrys
+    */
+    void PurgeIndicationList();
+
+    /**
+    * From CWlanPhy
+    * Registers the notification to the PDD.
+    * This request is used for registering indication buffer to PDD
+    * @param aBuffer pointer to TIndication 
+    */
+    void IndicationRequest( TIndication* aBuffer );
+
+    /**
+    * From CWlanPhy
+    * Releases indication buffer from PDD
+    */
+	void CancelIndicationRequest();
+    
+    /**
+    * Called by the PDD when a notification is received.
+    */
+    void IndicationComplete();
+
+    TBool InitIndicationListEntries();
+
+    /**
+    * Default Timer timeout callback function
+    *
+    * @since S60 3.1
+    * @param aPtr A pointer passed to the callback function when called.
+    *             This pointer was given to the timer in timer construction.
+    */
+    static void OnTimeOut( TAny *aPtr );
+
+    /**
+    * Voice Call Entry Timer timeout DFC callback method
+    *
+    * @since S60 3.2
+    */
+    void RealVoiceCallEntryTimerDfc();
+
+    /**
+    * Voice Call Entry Timer timeout DFC callback function
+    *
+    * @since S60 3.2
+    * @param aPtr this pointer (pointer to this object instance)
+    */
+    static void VoiceCallEntryTimerDfcDoToggle( TAny* aPtr );
+
+    /**
+    * Voice Call Entry Timer timeout callback function
+    *
+    * @since S60 3.2
+    * @param aPtr A pointer passed to the callback function when called.
+    *             This pointer was given to the timer in timer construction.
+    */
+    static void OnVoiceCallEntryTimerTimeOut( TAny *aPtr );
+
+    /**
+    * Null Timer timeout DFC callback method
+    *
+    * @since S60 3.2
+    */
+    void RealNullTimerDfc();
+
+    /**
+    * Null Timer timeout DFC callback function
+    *
+    * @since S60 3.2
+    * @param aPtr this pointer (pointer to this object instance)
+    */
+    static void NullTimerDfcDoToggle( TAny* aPtr );
+
+    /**
+    * Null Timer timeout callback function
+    *
+    * @since S60 3.2
+    * @param aPtr A pointer passed to the callback function when called.
+    *             This pointer was given to the timer in timer construction.
+    */
+    static void OnNullTimerTimeOut( TAny *aPtr );
+
+    /**
+    * No Voice Timer timeout DFC callback method
+    *
+    * @since S60 3.2
+    */
+    void RealNoVoiceTimerDfc();
+
+    /**
+    * No Voice Timer timeout DFC callback function
+    *
+    * @since S60 3.2
+    * @param aPtr this pointer (pointer to this object instance)
+    */
+    static void NoVoiceTimerDfcDoToggle( TAny* aPtr );
+
+    /**
+    * No Voice Timer timeout callback function
+    *
+    * @since S60 3.2
+    * @param aPtr A pointer passed to the callback function when called.
+    *             This pointer was given to the timer in timer construction.
+    */
+    static void OnNoVoiceTimerTimeOut( TAny *aPtr );
+
+    /**
+    * Keep Alive Timer timeout DFC callback method
+    *
+    * @since S60 3.2
+    */
+    void RealKeepAliveTimerDfc();
+
+    /**
+    * Keep Alive Timer timeout DFC callback function
+    *
+    * @since S60 3.2
+    * @param aPtr this pointer (pointer to this object instance)
+    */
+    static void KeepAliveTimerDfcDoToggle( TAny* aPtr );
+
+    /**
+    * Keep Alive Timer timeout callback function
+    *
+    * @since S60 3.2
+    * @param aPtr A pointer passed to the callback function when called.
+    *             This pointer was given to the timer in timer construction.
+    */
+    static void OnKeepAliveTimerTimeOut( TAny *aPtr );
+
+    /**
+    * Active to Light PS Timer timeout DFC callback method
+    *
+    * @since S60 5.1
+    */
+    void RealActiveToLightPsTimerDfc();
+
+    /**
+    * Active to Light PS Timer timeout DFC callback function
+    *
+    * @since S60 5.1
+    * @param aPtr this pointer (pointer to this object instance)
+    */
+    static void ActiveToLightPsTimerDfcDoToggle( TAny* aPtr );
+
+    /**
+    * Active to Light PS Timer timeout callback function
+    *
+    * @since S60 5.1
+    * @param aPtr A pointer passed to the callback function when called.
+    *             This pointer was given to the timer in timer construction.
+    */
+    static void OnActiveToLightPsTimerTimeOut( TAny *aPtr );
+    
+    /**
+    * Light PS to Active Timer timeout DFC callback method
+    *
+    * @since S60 5.1
+    */
+    void RealLightPsToActiveTimerDfc();
+
+    /**
+    * Light PS to Active Timer timeout DFC callback function
+    *
+    * @since S60 5.1
+    * @param aPtr this pointer (pointer to this object instance)
+    */
+    static void LightPsToActiveTimerDfcDoToggle( TAny* aPtr );
+
+    /**
+    * Light PS to Active Timer timeout callback function
+    *
+    * @since S60 5.1
+    * @param aPtr A pointer passed to the callback function when called.
+    *             This pointer was given to the timer in timer construction.
+    */
+    static void OnLightPsToActiveTimerTimeOut( TAny *aPtr );
+    
+    /**
+    * Light PS to Deep PS Timer timeout DFC callback method
+    *
+    * @since S60 5.1
+    */
+    void RealLightPsToDeepPsTimerDfc();
+
+    /**
+    * Light PS to Deep PS Timer timeout DFC callback function
+    *
+    * @since S60 5.1
+    * @param aPtr this pointer (pointer to this object instance)
+    */
+    static void LightPsToDeepPsTimerDfcDoToggle( TAny* aPtr );
+
+    /**
+    * Light PS to Deep PS Timer timeout callback function
+    *
+    * @since S60 5.1
+    * @param aPtr A pointer passed to the callback function when called.
+    *             This pointer was given to the timer in timer construction.
+    */
+    static void OnLightPsToDeepPsTimerTimeOut( TAny *aPtr );
+    
+    /**
+    * Default Timer timeout DFC callback method
+    *
+    * @since S60 3.1
+    */
+    void RealTimerDfc();
+
+    void RealDfc();
+
+    /**
+    * Default Timer timeout DFC callback function
+    *
+    * @since S60 3.1
+    * @param aPtr this pointer (pointer to this object instance)
+    */
+    static void TimerDfcDoToggle( TAny* aPtr );
+
+    static void DfcDoToggle( TAny* aPtr );
+    
+    /**
+    * Protocol Stack Side Tx Trigger DFC callback method
+    */
+    void RealTxTriggerDfc();
+    
+    /**
+    * Protocol Stack Side Tx Trigger DFC callback function
+    *
+    * @param aPtr this pointer (pointer to this object instance)
+    */
+    static void TxTriggerDfcDoToggle( TAny* aPtr );
+
+    void FinitSystem();
+    void InitSystem( TAny* aInputBuffer, TUint aInputLength );
+
+    /**
+    * Allocates kernel mode storage for actual parameters pointed to by
+    * pointers in an OID command
+    *
+    * @since S60 3.1
+    * @return ETrue if the operation succeeds;
+    *         EFalse otherwise
+    */
+    TBool HandlePointerParameters();
+
+    /**
+    * Allocates kernel mode storage for scan response frame body and copies 
+    * it from user side to kernel side from the connect command parameters
+    *
+    * @since S60 3.2
+    * @return ETrue if the operation succeeds;
+    *         EFalse otherwise
+    */
+    TBool HandleScanResponseFrameBodyCase();
+    
+    /**
+    * Allocates kernel mode storage for IE(s) and copies it (them) from user 
+    * side to kernel side when there is IE(s) present in the connect command
+    *
+    * @since S60 3.2
+    * @return ETrue if the operation succeeds;
+    *         EFalse otherwise
+    */
+    TBool CheckAndHandleIeDataCase();
+    
+    /**
+    * Frees kernel mode storage allocated for scan response frame body
+    *
+    * @since S60 3.2
+    */
+    void FreeScanResponseFramebody();
+    
+    /**
+    * Frees kernel mode storage allocated for IE(s)
+    *
+    * @since S60 3.2
+    */
+    void FreeIeData();
+    
+    /**
+    * From MWlanPowerIndicator
+    * Indicates that power up notification has been received from kernel 
+    * side Power Manager.
+    */
+    virtual void OnPowerUp();
+
+    /**
+    * From MWlanPowerIndicator
+    * Indicates that power down request has been received from kernel 
+    * side Power Manager.
+    *
+    * @since S60 3.1
+    */
+    virtual void OnPowerDown();
+        
+    // Prohibit copy constructor.
+    DWlanLogicalChannel ( const DWlanLogicalChannel & );
+    // Prohibit assigment operator.
+    DWlanLogicalChannel & operator= ( const DWlanLogicalChannel & );
+
+private:    // data
+
+    const TUint32   KFreeOpenParamsMask            = ( 1 << 0 );
+    const TUint32   KFreeScanResponseFramebodyMask = ( 1 << 1 );    
+    const TUint32   KDfcCancelledMask              = ( 1 << 2 );
+    const TUint32   KFreeIeDataMask                = ( 1 << 3 );
+    const TUint32   KPowerHandlerRegistered        = ( 1 << 4 );
+    const TUint32   KTxTriggerArmed                = ( 1 << 5 );
+
+    TOpenParam      iOpenParam;
+
+    DThread*        iClient;   
+    TInt            iUnit;
+    Umac&           iUmac;
+    /** pointer to our DFC queue. Not own */
+    TDynamicDfcQue* iDfcQ;
+    DWlanLogicalDevice& iParent;
+
+    /** management side requests */
+    TRequestStatus* iWlanGeneralRequestStatus;
+    TRequestStatus* iWlanRequestNotifyStatus;
+    TRequestStatus* iWlanReceiveFrameStatus;
+    TRequestStatus* iWlanSendFrameStatus;    
+
+    /** indication request buffer to USER mode */
+	TIndication*	        iIndicationBuffer;
+    /** pointer to first stored indication */
+	TIndicationListEntry*   iIndicationListHead;
+    /** pointer to the first free indication list entry */
+	TIndicationListEntry*	iFreeIndicationListHead;
+
+    /** protocol stack side requests */
+    TRequestStatus* iResumeTxStatus;
+    TRequestStatus* iEthernetReceiveFrameStatus;
+
+    /** Pointer to ethernet memory manager */
+    DEthernetFrameMemMngr*  iEthernetFrameMemMngr;
+
+    /** Default Timer DFC object */
+    TDfc                    iTimerDfc;
+    /** Default Timer object */
+    NTimer                  iTimer;
+    /** Voice Call Entry Timer object */
+    NTimer                  iVoiceCallEntryTimer;
+    /** Voice Call Entry Timer DFC object */
+    TDfc                    iVoiceCallEntryTimerDfc;
+    /** NULL Timer object */
+    NTimer                  iNullTimer;
+    /** NULL Timer DFC object */
+    TDfc                    iNullTimerDfc;
+    /** No Voice Timer object */
+    NTimer                  iNoVoiceTimer;
+    /** No Voice Timer DFC object */
+    TDfc                    iNoVoiceTimerDfc;
+    /** Keep Alive Timer object */
+    NTimer                  iKeepAliveTimer;
+    /** Keep Alive Timer DFC object */
+    TDfc                    iKeepAliveTimerDfc;
+    /** Active to Light PS Timer object */
+    NTimer                  iActiveToLightPsTimer;
+    /** Active to Light PS Timer DFC object */
+    TDfc                    iActiveToLightPsTimerDfc;
+    /** Light PS to Active Timer object */
+    NTimer                  iLightPsToActiveTimer;
+    /** Light PS to Active Timer DFC object */
+    TDfc                    iLightPsToActiveTimerDfc;
+    /** Light PS to Deep PS Timer object */
+    NTimer                  iLightPsToDeepPsTimer;
+    /** Light PS to Deep PS DFC object */
+    TDfc                    iLightPsToDeepPsTimerDfc;
+    
+    TDfc                    iDfc;
+    /** Protocol Stack Side Tx Trigger DFC object */
+    TDfc                    iTxTriggerDfc;
+
+    SOidMsgStorage          iOidMsgStorage;
+    TUint32                 iFlags;
+    
+    /** our power handler */
+    DWlanPowerHandler       iPowerHandler;
+    /** 
+    * ETrue if we are powering down because power manager has requested us
+    * to do so
+    */
+    TBool                   iPoweringDown;
+
+    TAny*                   iDfcCtx;
+
+    WlanDmaUsableMemory     iDmaTxMemory;
+
+#ifndef RD_WLAN_DDK
+    /** 
+    * reference to mutex used to protect LDD from simultaneous execution 
+    * by several different threads. 
+    */
+    DMutex&                 iMutex;
+#else
+    /** 
+    * OS abstraction object reference
+    */
+    WlanOsa*&               iOsa;
+#endif    
+
+    /** 
+    * reference to shared memory chunk for frame transfer between user and
+    * kernel address spaces
+    */
+    DChunk*&                iSharedMemoryChunk;
+
+    /** 
+    * reference to Rx frame memory pool manager
+    */
+    WlanChunk*&             iRxFrameMemoryPool;
+    
+    /** 
+     * ETrue if the Tx packet submission loop is active. 
+     * Is used to deny calling UMAC TxProtocolStackData() if the loop is
+     * already active. This prevents also recursive call stack growth.
+     */
+    TBool                   iTxActive;
+    
+    /** 
+    * ETrue if the user mode client is allowed to add new frames to Tx
+    * queues 
+    */
+    TBool                   iAddTxFrameAllowed;
+    };
+
+
+#endif // DWLANLOGICALCHANNEL_H
+