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