OSDN Git Service

original
[gb-231r1-is01/GB_2.3_IS01.git] / system / wlan / ti / sta_dk_4_0_4_32 / common / inc / memMngrEx.h
diff --git a/system/wlan/ti/sta_dk_4_0_4_32/common/inc/memMngrEx.h b/system/wlan/ti/sta_dk_4_0_4_32/common/inc/memMngrEx.h
new file mode 100644 (file)
index 0000000..6ae50e7
--- /dev/null
@@ -0,0 +1,501 @@
+/****************************************************************************
+**+-----------------------------------------------------------------------+**
+**|                                                                       |**
+**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
+**| All rights reserved.                                                  |**
+**|                                                                       |**
+**| Redistribution and use in source and binary forms, with or without    |**
+**| modification, are permitted provided that the following conditions    |**
+**| are met:                                                              |**
+**|                                                                       |**
+**|  * Redistributions of source code must retain the above copyright     |**
+**|    notice, this list of conditions and the following disclaimer.      |**
+**|  * Redistributions in binary form must reproduce the above copyright  |**
+**|    notice, this list of conditions and the following disclaimer in    |**
+**|    the documentation and/or other materials provided with the         |**
+**|    distribution.                                                      |**
+**|  * Neither the name Texas Instruments nor the names of its            |**
+**|    contributors may be used to endorse or promote products derived    |**
+**|    from this software without specific prior written permission.      |**
+**|                                                                       |**
+**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
+**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
+**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
+**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
+**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
+**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
+**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
+**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
+**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
+**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
+**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
+**|                                                                       |**
+**+-----------------------------------------------------------------------+**
+****************************************************************************/
+
+/**************************************************************************/
+/*                                                                        */
+/*     MODULE:         memMngr.h                                         */
+/*      PURPOSE:        Driver memory management                          */
+/*                                                                        */
+/**************************************************************************/
+#ifndef _MEM_MNGR_H_
+#define _MEM_MNGR_H_
+
+#include "osTIType.h"
+#include "commonTypes.h"
+#include "osApi.h"
+#include "TNETW_Driver_types.h"
+
+/*Ronnie: set # of MSDUs and BDs to be used in memMngrEx.c*/
+#define                DEF_NUMBER_OF_MSDUS                                                     200  /* Total number of packets queued in driver. */
+#define                DEF_NUMBER_OF_BDS                                                       400  /* Assuming typical MSDU uses 2 or 3 BDs. */
+
+#define                MIN_NUMBER_OF_BUF_POOLS                                         1
+#define                MAX_NUMBER_OF_BUF_POOLS                                         3
+
+#ifdef SUPPORT_4X
+#define                DEF_NUMBER_OF_BUF_POOLS                                         3
+#define                DEF_BUFFER_LENGTH_POOL_1                                        64
+#define                DEF_BUFFER_LENGTH_POOL_2                                        2048
+#define                DEF_BUFFER_LENGTH_POOL_3                                        4096
+#else
+#define                DEF_NUMBER_OF_BUF_POOLS                                         3
+#define                DEF_BUFFER_LENGTH_POOL_1                                        64
+#define                DEF_BUFFER_LENGTH_POOL_2                                        256
+#define                DEF_BUFFER_LENGTH_POOL_3                                        2048
+#endif
+
+#define                MIN_BUFFER_LENGTH                                                       64
+#define                MAX_BUFFER_LENGTH                                                       4096
+#define                DEF_NUMBER_OF_BUFFERS_IN_POOL_1                         160
+#define                DEF_NUMBER_OF_BUFFERS_IN_POOL_2                         160
+#define                DEF_NUMBER_OF_BUFFERS_IN_POOL_3                         160
+
+
+#define WLAN_DRV_NULL_MEM_HANDLE                                               0xffffffff 
+       
+#define NUM_OF_FREE_ARGS                                                               5
+
+#define MAX_NUM_OF_TIME_STAMPS                          8 
+
+#define memMgr_BufLength(BufAddr) ( ((mem_BD_T *)BufAddr)->length   )
+#define memMgr_BufOffset(BufAddr) ( ((mem_BD_T *)BufAddr)->dataOffset )
+#define memMgr_BufData(BufAddr)   ( ((mem_BD_T *)BufAddr)->data )
+#define memMgr_BufNext(BufAddr)   ( ((mem_BD_T *)BufAddr)->nextBDPtr )
+
+#define memMgr_MsduHdrLen(MsduAddr)            ( ((mem_MSDU_T *)MsduAddr)->headerLen )
+#define memMgr_MsduFirstLen(MsduAddr)  ( ((mem_MSDU_T *)MsduAddr)->firstBDPtr->length )
+#define memMgr_MsduHandle(MsduAddr)            ( ((mem_MSDU_T *)MsduAddr)->handle )
+/*
+ * Header resides after the Descriptor
+ */
+#define memMgr_MsduHdrAddr(MsduAddr)    ( memMgr_BufData(((mem_MSDU_T *)MsduAddr)->firstBDPtr) + \
+                                          memMgr_BufOffset(((mem_MSDU_T *)MsduAddr)->firstBDPtr) + sizeof(DbTescriptor))
+
+#define memMgr_MsduNextAddr(MsduAddr)  ( ((mem_MSDU_T *)MsduAddr)->firstBDPtr->nextBDPtr )
+#define memMgr_MsduDataAddr(MsduAddr)  ( ((mem_MSDU_T *)MsduAddr)->firstBDPtr )
+#define memMgr_MsduDataSize(MsduAddr)  ( ((mem_MSDU_T *)MsduAddr)->dataLen )
+#define memMgr_MsduNextGet(MsduAddr)   ( ((mem_MSDU_T *)MsduAddr)->nextMSDUinList)
+#define memMgr_MsduFreeFuncGet(MsduAddr)( ((mem_MSDU_T *)MsduAddr)->freeFunc)
+#define memMgr_MsduFreeArg0Get(MsduAddr)( ((mem_MSDU_T *)MsduAddr)->freeArgs[0])
+#define memMgr_MsduFreeArg1Get(MsduAddr)( ((mem_MSDU_T *)MsduAddr)->freeArgs[1])
+#define memMgr_MsduFreeArg2Get(MsduAddr)( ((mem_MSDU_T *)MsduAddr)->freeArgs[2])
+#define memMgr_MsduFreeArg3Get(MsduAddr)( ((mem_MSDU_T *)MsduAddr)->freeArgs[3])
+#define memMgr_MsduFreeArg4Get(MsduAddr)( ((mem_MSDU_T *)MsduAddr)->freeArgs[4])
+
+typedef enum
+{
+       /*
+        * Allocate on Tx
+        */
+       MLME_MODULE             = 0,
+       OS_ABS_TX_MODULE,
+       RSN_MODULE,
+       HAL_TX_MODULE,
+       CONCAT_MODULE,
+       DE_CONCAT_MODULE,
+       ACK_EMUL_MODULE,
+       TX_MODULE,
+       MEASUREMENT_MODULE,
+       SITE_MGR_MODULE,
+       EXC_MANAGER_MODULE,
+       TRACE_BUFFER_MODULE,
+       ADM_CTRL_QOS_MODULE,
+       CURRENT_BSS_MODULE,
+       /*
+        * Allocate on Rx
+        */
+       HAL_RX_MODULE,
+       CORE_RX_MODULE,
+       MLME_RX_MODULE,    
+       OS_ABS_RX_MODULE, 
+       RSN_RX_MODULE,  
+       MEASUREMENT_RX_MODULE, 
+       SITE_MGR_RX_MODULE,    
+       EXC_MANAGER_RX_MODULE, 
+
+       HAL_WEP1_RX,
+       HAL_WEP2_RX,
+       HAL_DEFRAG_RX,
+       HAL_DUPLICA_RX,
+
+       /*
+    DO NOT TOUCH - MODULE_FREE_MSDU, MAX_NUMBER_OF_MODULE!
+    */
+       MODULE_FREE_MSDU,
+    MAX_NUMBER_OF_MODULE
+
+}allocatingModule_e;
+
+
+typedef void (*ap_FreeMemFunc)(TI_HANDLE, TI_HANDLE, TI_STATUS);
+
+#ifdef TNETW_MASTER_MODE
+typedef void (*bd_FreeMemFunc)( UINT32 , UINT32, UINT32, UINT32, UINT32 );
+#endif
+
+typedef struct mem_DataBuf_T mem_DataBuf_T;
+struct mem_DataBuf_T {
+    /* READ ONLY */
+       /* The user MUST not change the following fields */
+       UINT32                  handle;                         /* Hanlde of this Data Buffer Structure */
+    mem_DataBuf_T*  nextDataBuf;    /* pointer to the next free DataBuf
+                                           when this DataBuf is in Free mode */
+       UINT32                  refCount;                       /* number of instances of this Data Buf */
+       /* PUBLIC - For the use of the User */
+       UINT32                  poolIndex;              /* the buffer pool index */
+       UINT8                   *data;                  /* pointer to the Data */
+#if defined TNETW_MASTER_MODE
+       OS_PHYSICAL_ADDRESS     data_physical; /* Physical address of the data */
+#endif
+};
+
+typedef struct mem_BD_T mem_BD_T;
+struct mem_BD_T {
+    /* READ ONLY */
+       /* The user MUST not change the following fields */
+       UINT32                  handle;                 /* Hanlde of this BD Data Structure */
+       UINT32                  refCount;               /* number of instances of this BD */
+       mem_DataBuf_T*  dataBuf;        /* pointer to the Data Buffer */
+       /* PUBLIC - For the use of the User */
+    char*           data;           /* Pointer to the Data */
+       UINT32                  dataOffset;             /* offset of the data */
+       UINT32                  length;                 /* Tx : the length of the entire data (including TxDescriptor,TNETWIF_WRITE_OFFSET_BYTES etc..) */
+                                                                       /* Rx : the length of the data (excluding TNETWIF_READ_OFFSET_BYTES)                                                    */                                      
+       mem_BD_T*               nextBDPtr;              /* pointer to the next BD */
+
+#if defined TNETW_MASTER_MODE
+       UINT32  data_physical_low;              /* Physical address (low) of the data */
+    bd_FreeMemFunc     freeFunc;               /* pointer to the Data Buffer free function */
+       UINT32                  freeArgs[NUM_OF_FREE_ARGS];     /* arguments to be send with the free function */
+#endif
+
+};
+
+typedef struct mem_MSDU_T mem_MSDU_T;
+struct mem_MSDU_T {
+    /* READ ONLY */
+       /* The user MUST not change the following fields */
+       UINT32                          handle;                 /* handle of this MSDU data structure */
+       mem_MSDU_T *            nextFreeMSDU;   /* pointer to the next Free MSDU when
+                                                                          this MSDU Buffer is in Free mode */
+       /* PUBLIC - For the use of the User */
+    UINT32                             headerLen;      /* the length of the 802.11 header */
+       mem_BD_T *                      firstBDPtr;             /* pointer to the first BD */
+       mem_BD_T *                      lastBDPtr;              /* pointer to the last BD */
+       ap_FreeMemFunc          freeFunc;               /* pointer to the Data Buffer free function */
+       UINT32                          freeArgs[NUM_OF_FREE_ARGS];     /* arguments to be send with the free function */
+       UINT32                          dataLen;                /* length of the data (only data) of the firstBDPtr */
+       allocatingModule_e      module;                 /* the allocating module */
+
+       /* support Msdu List */
+    mem_MSDU_T *               nextMSDUinList; /* pointer to the next MSDU in Tx queue link list. */
+    mem_MSDU_T *               prevMSDUinList; /* pointer to the previos MSDU in Tx queue link list. */
+       
+       
+       UINT32                          txFlags;                /* Tx flags */
+       UINT8                           txCompleteFlags;                /* Tx complete flags */
+       UINT32              insertionTime;  /* time of msdu insersion to driver. */
+       UINT8               qosTag;         /* 802.11d qos tag */
+#ifdef DM_USE_WORKQUEUE
+    mem_MSDU_T *        msdu_next;      /* Used for Workqueue list */
+#endif /* DM_USE_WORKQUEUE */
+#ifdef TI_DBG
+    UINT32              timeStamp [MAX_NUM_OF_TIME_STAMPS];   
+                                        /* array of time stamps */ 
+    UINT32              timeStampNum;   /* number of time stamps */ 
+#endif
+};
+
+typedef struct
+{
+       UINT32                  buffersSize;            /* the size of the buffers in the pool */
+       UINT32                  numFreeDataBuf;         /* number of free data buffers */
+       UINT32                  dataBufMaxNumber;       /* maximum number of buffers */
+       mem_DataBuf_T*  firstFreeDataBuf;       /* pointer to the first free Data Buffer */
+       mem_DataBuf_T*  dataBufPool;            /* list of Data Buffers */
+#ifdef TNETW_MASTER_MODE
+       OS_PHYSICAL_ADDRESS     physicalDataBufPoolPtr;
+#endif
+       UINT8*                          dataBufPoolPtr;
+
+}buffersPool_t;
+
+/* structures for initialization of Memory manager */
+typedef struct
+{
+       UINT32  numOfbuffers;
+       UINT32  buffersSize;
+}bufPoolInit_t;
+
+typedef struct
+{
+       UINT8   numOfPools;
+       bufPoolInit_t   bufPoolInit[MAX_NUMBER_OF_BUF_POOLS];
+}memMngrInit_t;
+
+/* MemMngr Control Block */
+typedef struct 
+{
+       TI_HANDLE               hReport;                        /* report handle                */
+       TI_HANDLE               hOs;                            /* Os handle                    */
+       TI_HANDLE               hCriticalSectionProtect;
+
+       UINT32                  currentNumberOfPools;
+
+       UINT32                  msduMaxNumber;          /* maximum number of MSDUs */
+       UINT32                  bdMaxNumber;            /* maximum number of BD;s */
+
+       mem_MSDU_T*     msduPool;                       /* list of MSDU Buffer Desciptors       */
+       mem_BD_T*               bdPool;                         /* list of BD Buffer Descriptors        */
+
+       mem_MSDU_T*     firstFreeMSDU;          /* pointer to the first free MSDU       */
+       mem_BD_T*               firstFreeBD;            /* pointer to the first free BD         */
+
+       UINT32                  numFreeMSDU;            /* number of free MSDU's */
+       UINT32                  numFreeBD;                      /* number of free BD's */
+
+       UINT32                  moduleAllocCount[MAX_NUMBER_OF_MODULE]; /* counters of allocated */
+                                                                                                                       /* msdu per module               */
+
+       buffersPool_t   buffersPool[MAX_NUMBER_OF_BUF_POOLS];   /* Pools of Data Buffers */
+
+}memMngr_t;
+
+typedef struct 
+{
+       UINT32 numOfFreeBufPool1;
+       UINT32 numOfFreeBufPool2;
+       UINT32 numOfFreeBufPool3;
+       UINT32 numOfFreeBDs;
+       UINT32 numOfFreeMsdu;
+}memMgrResources_t;
+
+/*************************************************************************
+ *                        wlan_memMngrInit                                  *
+ *************************************************************************
+DESCRIPTION: Init of the Memory Manager module
+
+INPUT:
+OUTPUT:
+RETURN:      OK/NOK
+**************************************************************************/
+TI_HANDLE wlan_memMngrInit(TI_HANDLE hOs);
+
+/*************************************************************************
+ *                        wlan_memMngrDestroy                            *
+ *************************************************************************
+DESCRIPTION:
+
+
+
+INPUT:      
+OUTPUT:     
+
+RETURN:     OK/NOK
+**************************************************************************/
+TI_STATUS wlan_memMngrDestroy(TI_HANDLE hMemMngr);
+
+/*************************************************************************
+ *                        wlan_memMngrConfigure                           *
+ *************************************************************************
+DESCRIPTION:
+
+
+
+INPUT:      
+OUTPUT:    
+
+RETURN:     OK/NOK
+**************************************************************************/
+TI_STATUS wlan_memMngrConfigure(TI_HANDLE hMemMngr, TI_HANDLE hOs, TI_HANDLE hReport);
+
+/*************************************************************************
+ *                        wlan_memMngrAllocDataBuf                           *
+ *************************************************************************
+DESCRIPTION:This function allocates BDs and Data Buffers according to the
+                       required length. The memory manager will allocate the Data
+                       Buffers, update the buffer pointer in the BD structure and link
+                       the BDs when more than one Data Buffer is required.
+
+INPUT:      len - the length of the required data buffer
+OUTPUT:     BDPtr - a pointer in which this function will return a pointer
+                                       to the allocated BD
+RETURN:     OK/NOK
+**************************************************************************/
+TI_STATUS wlan_memMngrAllocDataBuf(TI_HANDLE hMemMngr, mem_BD_T** bdPtr, UINT32 len);
+
+/*************************************************************************
+ *                        wlan_memMngrAllocBDs                                  *
+ *************************************************************************
+DESCRIPTION:This function allocates and returns a pointer to an array of BDs.
+                       This function does not allocate any memory buffers.
+
+INPUT:      BDsNumber - number of required BDs
+OUTPUT:     BDsPtr - a pointer in which this function will return a pointer
+                                        to an array of BD pointers
+RETURN:     OK/NOK
+**************************************************************************/
+TI_STATUS wlan_memMngrAllocBDs(TI_HANDLE hMemMngr, UINT32 bdNumber, mem_BD_T** bdPtr);
+
+/*************************************************************************
+ *                        wlan_memMngrAllocMSDU                          *
+ *************************************************************************
+DESCRIPTION:This function allocates MPDU structure.
+
+INPUT:         len - the length of the required data buffer
+                    if len=0, than only MSDU buffer will be allocated
+OUTPUT:     MSDUPtr - a pointer in which this function will return a pointer
+                                         to the MSDU structure
+RETURN:     OK/NOK
+**************************************************************************/
+TI_STATUS wlan_memMngrAllocMSDU (TI_HANDLE hMemMngr, mem_MSDU_T** MSDUPtr,     
+                                                         UINT32 len, allocatingModule_e module);
+
+/*************************************************************************
+ *                        wlan_memMngrAllocMSDUBufferOnly                   *
+ *************************************************************************
+DESCRIPTION:This function allocates MPDU structure - without Data Buffers
+
+INPUT:
+OUTPUT:     MSDUPtr - a pointer in which this function will return a pointer
+                                         to the MSDU structure
+RETURN:     OK/NOK
+**************************************************************************/
+TI_STATUS wlan_memMngrAllocMSDUBufferOnly(TI_HANDLE hMemMngr, mem_MSDU_T** MSDUPtr, 
+                                                                          allocatingModule_e module);
+
+/*************************************************************************
+ *                        wlan_memMngrDuplicateMSDU                      *
+ *************************************************************************
+DESCRIPTION:This function duplicates the MSDU.
+
+INPUT:      handle - handle of the MSDU the user want to duplicate
+OUTPUT:     newHandle - pointer in which this function sets the handle of
+                    the duplicated MSDU.
+RETURN:     OK/NOK
+**************************************************************************/
+TI_STATUS wlan_memMngrDuplicateMSDU(TI_HANDLE hMemMngr, UINT32 handle, UINT32* newHandle);
+
+/*************************************************************************
+ *                        wlan_memMngrFreeMSDU                                  *
+ *************************************************************************
+DESCRIPTION:Free MSDU structure. This function will free all BDs and Data
+                       Buffers that are bind to this MSDU.
+
+INPUT:      handle - handle of this MSDU
+OUTPUT:
+RETURN:     OK/NOK
+**************************************************************************/
+TI_STATUS wlan_memMngrFreeMSDU(TI_HANDLE hMemMngr, UINT32 handle);
+
+/*************************************************************************
+ *                                                                                                                              *
+ *************************************************************************
+DESCRIPTION:
+INPUT:      
+OUTPUT:
+RETURN:     OK/NOK
+**************************************************************************/
+TI_STATUS wlan_memMngrFreeListOfMSDU(TI_HANDLE hMemMngr, UINT32 handle);
+
+
+/*************************************************************************
+ *                        wlan_memMngrFreeBD                            *
+ *************************************************************************
+DESCRIPTION:Free BD structure. This function will free a list of BD
+                       structures and the Data Buffer that is being pointed by these BD
+                       if any. (e.g. - free MPDU)
+
+INPUT:      handle - handle of this BD
+OUTPUT:
+RETURN:     freeFlag - return TRUE if this BD list was freed
+                       return FALSE if this BD list was not freed (refCount>0)
+**************************************************************************/
+UINT32 wlan_memMngrFreeBD(TI_HANDLE hMemMngr, UINT32 handle);
+
+/*************************************************************************
+ *                                                                                              *
+ *************************************************************************
+DESCRIPTION:
+
+INPUT:      
+OUTPUT:
+RETURN:     
+**************************************************************************/
+TI_STATUS wlan_memMngrFreeAllOsAlocatesBuffer(TI_HANDLE hMemMngr);
+
+/*************************************************************************
+ *                                                                                              *
+ *************************************************************************
+DESCRIPTION:
+
+INPUT:      
+OUTPUT:
+RETURN:     
+**************************************************************************/
+TI_STATUS wlan_memMngrCopyMsduFreeFunc(TI_HANDLE hMemMngr, UINT32 destMsduHandle, UINT32 sourceMsduHandle);
+
+/*************************************************************************
+ *                                                                                              *
+ *************************************************************************
+DESCRIPTION:
+
+INPUT:      
+OUTPUT:
+RETURN:     
+**************************************************************************/
+TI_STATUS wlan_memMngrGetMemMgrResources(TI_HANDLE hMemMngr, memMgrResources_t* memMgrResources);
+
+/*************************************************************************
+ *                                                                                              *
+ *************************************************************************
+DESCRIPTION:
+
+INPUT:      
+OUTPUT:
+RETURN:     
+**************************************************************************/
+TI_STATUS wlan_memMngrChangeMsduOwner(TI_HANDLE hMemMngr,allocatingModule_e newModule,mem_MSDU_T *pMsdu);
+
+
+TI_STATUS wlan_memMngrSwapMsdu(TI_HANDLE hMemMngr, mem_MSDU_T *pMsdu_1, mem_MSDU_T *pMsdu_2);
+
+
+TI_STATUS wlan_memMngrAddTimeStamp (TI_HANDLE hMemMngr, mem_MSDU_T *pMsdu);
+
+/*************************************************************************
+ *                                               TEST_FUNCTIONS                                 *
+ *************************************************************************/
+void memMngrPrintHandle(TI_HANDLE hMemMngr, UINT32 handle);
+void memMngrFullPrint(TI_HANDLE hMemMngr);
+void memMngrPrint(TI_HANDLE hMemMngr);
+
+/*test function*/
+TI_STATUS txDataSTUB_txSendMsdu(TI_HANDLE hMemMngr, mem_MSDU_T *pMsdu);
+void print_MsduDataHeader(TI_HANDLE hMemMngr, mem_MSDU_T *pMsdu);
+void memMngrPrintMSDUWithItsBds(mem_MSDU_T* pMsdu );
+
+
+#endif