wlan_bearer/wlanldd/wlan_common/osa_common/inc/osamemorypool.h
changeset 0 c40eb8fe8501
--- /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