diff -r 000000000000 -r c40eb8fe8501 wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/inc/DataFrameMemMngr.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/inc/DataFrameMemMngr.h Tue Feb 02 02:03:13 2010 +0200 @@ -0,0 +1,191 @@ +/* +* 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 DataFrameMemMngr class. +* +*/ + +/* +* %version: 11 % +*/ + +#ifndef DATAFRAMEMMNGR_H +#define DATAFRAMEMMNGR_H + +#include "EthernetFrameMemMngr.h" + +class WlanChunk; + +/** +* Memory manager for protocol stack side client frame Rx memory +* +* @since S60 v3.1 +*/ +class DataFrameMemMngr : public DEthernetFrameMemMngr + { +public: + + /** Ctor */ + DataFrameMemMngr( + DWlanLogicalChannel& aParent, + WlanChunk*& aRxFrameMemoryPool, + TInt aTxFrameBufAllocationUnit ) : + DEthernetFrameMemMngr( aParent, aRxFrameMemoryPool ), + iFrameXferBlockProtoStack( NULL ), + iTxDataChunk( NULL ), + iTxFrameMemoryPool( NULL ), + iTxFrameBufAllocationUnit ( aTxFrameBufAllocationUnit ) + {}; + + /** Dtor */ + virtual ~DataFrameMemMngr() + { + iFrameXferBlockProtoStack = NULL; + iTxDataChunk = NULL; + iTxFrameMemoryPool = NULL; + }; + +protected: + + /** + * From DEthernetFrameMemMngr + * Opens a handle to the allocated shared memory chunk + * + * @since S60 5.0 + * @param aThread + * @param aSharedChunkInfo + * @param aSharedMemoryChunk The shared memory chunk + * @return system wide error code, KErrNone upon success + */ + virtual TInt DoOpenHandle( + DThread& aThread, + TSharedChunkInfo& aSharedChunkInfo, + DChunk* aSharedMemoryChunk ); + + /** + * From DEthernetFrameMemMngr + * Gets called when rx frame read cycle has ended. + * + * @since S60 3.1 + * @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 a pending user mode frame read request exists + * and callee should complete it, + * EFalse otherwise + */ + virtual TBool DoEthernetFrameRxComplete( + const TDataBuffer*& aBufferStart, + TUint32 aNumOfBuffers ); + + /** + * From DEthernetFrameMemMngr + * Gets start address of Rx buffers (their offset addresses) + * that are waiting for completion to user mode + * + * @since S60 3.1 + * @return see above + */ + virtual TUint32* DoGetTobeCompletedBuffersStart(); + + /** + * From DEthernetFrameMemMngr + * Gets start address of Rx buffers (their offset addresses) + * that have been completed to user mode + * + * @since S60 3.1 + * @return see above + */ + virtual TUint32* DoGetCompletedBuffersStart(); + + /** + * From DEthernetFrameMemMngr + * Gets called when user mode client issues a frame receive request + * and Rx buffers have been completed to it. The completed Rx frame + * buffers are freed. + * + * @since S60 3.1 + */ + virtual void DoFreeRxBuffers(); + + /** + * From DEthernetFrameMemMngr + * Allocates a Tx packet from the shared memory. + * + * @param aLength Length of the requested Tx buffer in bytes + * @return Pointer to the meta header attached to the allocated packet, on + * success. + * NULL, in case of failure. + */ + virtual TDataBuffer* AllocTxBuffer( TUint aLength ); + + /** + * From DEthernetFrameMemMngr + * Deallocates a Tx packet. + * + * All Tx packets allocated with AllocTxBuffer() must be deallocated using + * this method. + * + * @param aPacket Meta header of the packet to the deallocated + */ + virtual void FreeTxPacket( TDataBuffer*& aPacket ); + +private: + + /** + * From DEthernetFrameMemMngr + * Memory finalization method. + */ + virtual void OnReleaseMemory(); + + // Prohibit copy constructor. + DataFrameMemMngr( const DataFrameMemMngr& ); + // Prohibit assigment operator. + DataFrameMemMngr& operator= ( const DataFrameMemMngr& ); + +private: // Data + + /** + * array of TDataBuffer offset addresses, denoting Rx buffers, + * which are waiting here in kernel mode to be completed + * to user mode, when the next frame receive request arrives + */ + TUint32 iTobeCompletedBuffers[KMaxToBeCompletedRxBufs]; + + /** + * array of TDataBuffer offset addresses, denoting Rx buffers, that are + * currently under processing in user mode + */ + TUint32 iCompletedBuffers[KMaxCompletedRxBufs]; + + RFrameXferBlockProtocolStack* iFrameXferBlockProtoStack; + + /** + * pointer to protocol stack side Tx area start in the kernel address + * space + */ + TUint8* iTxDataChunk; + + /** + * Tx frame memory pool manager + * Own. + */ + WlanChunk* iTxFrameMemoryPool; + + /** + * size of the Tx frame buffer allocation unit in bytes + */ + TInt iTxFrameBufAllocationUnit; + }; + +#endif // DATAFRAMEMMNGR_H