diff -r 000000000000 -r c40eb8fe8501 wlan_bearer/wlanldd/wlan_common/osa_common/inc/osamemorypool.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlan_bearer/wlanldd/wlan_common/osa_common/inc/osamemorypool.h Tue Feb 02 02:03:13 2010 +0200 @@ -0,0 +1,190 @@ +/* +* Copyright (c) 2007-2008 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: WlanMemoryPool declaration +* +*/ + +/* +* %version: 6 % +*/ + +#ifndef WLANMEMORYPOOL_H +#define WLANMEMORYPOOL_H + +#include "wlanobject.h" + +#include "osaplatformhwchunk.h" +#include "osalist.h" +#include "osahandle.h" + +struct SMemHeader; + +/** + * memory pool for managing memory + * + * + * @lib wlanosa.lib + * @since S60 v3.2 + */ +class WlanMemoryPool : public DBase, public WlanObject + { + + typedef Handle HwChunkHandle; + +public: + + /** + * ctor + * NOTE: call IsValid() member from super class + * to validate object after ctor + * + * @since S60 v3.2 + * @param aUseCachedMemory ETrue if cached memory shall be used + * EFalse otherwise + * @param aAllocationUnit allocation unit size for interconnect memory in + * bytes + */ + explicit WlanMemoryPool( TBool aUseCachedMemory, TInt aAllocationUnit ); + + /** + * Destructor. + * + * @since S60 v3.2 + */ + virtual ~WlanMemoryPool(); + + /** + * Memory allocation. + * Correct alignment guaranteed + * + * @since S60 v3.2 + * @param aOsaMemoryType memory type to be allocated + * @param aSize size of the buffer to be allocated in bytes. + * Must be positive otherwise the allocation fails + * @param aZeroStamp zero stamp the memory or not + * @return begin of the allocated memory, NULL upon failure + */ + void* Alloc( MWlanOsa::TOsaMemoryType aOsaMemoryType, + TInt aSize, + TBool aZeroStamp ); + + /** + * Releases memory allocated by the Alloc method + * + * @since S60 v3.2 + * @param aPtr begin of the buffer to be freed + */ + void Free( void* aPtr ); + +private: + + /** + * Init pool + * + * @since S60 v3.2 + * @return ETrue upon success any other for failure + */ + TBool InitPool(); + + /** + * Appends hw chunk handle to the back of the list + * + * @since S60 v3.2 + * @param aHwChunkHandle hw chunk handle to be appended + * @return ETrue upon success any other for failure + */ + TBool PushBack( const HwChunkHandle& aHwChunkHandle ); + + /** + * Creates a new hw chunk and allocates memory from it + * + * @since S60 v3.2 + * @param aSize size of the buffer to be allocated in bytes. + * Must be positive otherwise the allocation fails + * @param aHwChunkId unique chunk identifier used when freeing the memory + * @param aZeroStamp zero stamp memory or not + * @return begin of the allocated memory, NULL upon failure + */ + void* HwChunkAllocWithCreate( const TInt aSize, + TInt& aHwChunkId, + TBool aZeroStamp ); + + /** + * Allocates memory from a hw chunk + * + * @since S60 v3.2 + * @param aSize size of the buffer to be allocated in bytes. Must be + * positive otherwise the allocation fails + * @param aHwChunkId unique chunk identifier used when freeing the memory + * @param aZeroStamp zero stamp memory or not + * @return begin of the allocated memory, NULL upon failure + */ + void* HwChunkAlloc( const TInt aSize, TInt& aHwChunkId, TBool aZeroStamp ); + + /** + * Evaluates is a chunk the initial chunk. + * The intial chunk is the one created at object creation time and its + * lifetime is equal to the lifetime of this object itself + * + * @since S60 v3.2 + * @param aChunk chunk to be evaluated against the intial chunk + * @return ETrue when aChunk is the intial chunk, any other if not + */ + inline TBool IsInitialChunk( WlanPlatformHwChunk* aChunk ); + + /** + * Frees memory from a hw chunk + * + * @since S60 v3.2 + * @param aMemHeader begin of the buffer to be freed + */ + void HwChunkFree( SMemHeader& aMemHeader ); + + // Prohibit copy constructor. + WlanMemoryPool( const WlanMemoryPool& ); + // Prohibit assigment operator. + WlanMemoryPool& operator= ( const WlanMemoryPool& ); + +private: // data + + typedef list HwChunkHandleList; + + typedef HwChunkHandleList::iterator iterator; + typedef HwChunkHandleList::const_iterator const_iterator; + typedef HwChunkHandleList::size_type size_type; + + /** + * list of hw chunks + */ + HwChunkHandleList iHwChunkHandles; + + /** + * ETrue if cached memory shall be used, + * EFalse otherwise + */ + TBool iUseCachedMemory; + + /** + * Allocation unit size in bytes + */ + TInt iAllocationUnit; + + /** + * Number of extra bytes required to align interconnect memory buffer + * start address returned to the requester to allocation unit boundary + */ + TInt iExtraPadding; + }; + +#endif // WLANMEMORYPOOL_H