Home | History | Annotate | Download | only in inc
      1 /****************************************************************************
      2 **+-----------------------------------------------------------------------+**
      3 **|                                                                       |**
      4 **| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
      5 **| All rights reserved.                                                  |**
      6 **|                                                                       |**
      7 **| Redistribution and use in source and binary forms, with or without    |**
      8 **| modification, are permitted provided that the following conditions    |**
      9 **| are met:                                                              |**
     10 **|                                                                       |**
     11 **|  * Redistributions of source code must retain the above copyright     |**
     12 **|    notice, this list of conditions and the following disclaimer.      |**
     13 **|  * Redistributions in binary form must reproduce the above copyright  |**
     14 **|    notice, this list of conditions and the following disclaimer in    |**
     15 **|    the documentation and/or other materials provided with the         |**
     16 **|    distribution.                                                      |**
     17 **|  * Neither the name Texas Instruments nor the names of its            |**
     18 **|    contributors may be used to endorse or promote products derived    |**
     19 **|    from this software without specific prior written permission.      |**
     20 **|                                                                       |**
     21 **| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
     22 **| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
     23 **| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
     24 **| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
     25 **| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
     26 **| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
     27 **| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
     28 **| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
     29 **| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
     30 **| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
     31 **| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
     32 **|                                                                       |**
     33 **+-----------------------------------------------------------------------+**
     34 ****************************************************************************/
     35 
     36 /**************************************************************************/
     37 /*                                                                        */
     38 /*	MODULE:		memMngr.h                                         */
     39 /*      PURPOSE:        Driver memory management                          */
     40 /*                                                                        */
     41 /**************************************************************************/
     42 #ifndef _MEM_MNGR_H_
     43 #define _MEM_MNGR_H_
     44 
     45 #include "osTIType.h"
     46 #include "commonTypes.h"
     47 #include "osApi.h"
     48 #include "TNETW_Driver_types.h"
     49 
     50 /*Ronnie: set # of MSDUs and BDs to be used in memMngrEx.c*/
     51 #define		DEF_NUMBER_OF_MSDUS							200  /* Total number of packets queued in driver. */
     52 #define		DEF_NUMBER_OF_BDS							400  /* Assuming typical MSDU uses 2 or 3 BDs. */
     53 
     54 #define		MIN_NUMBER_OF_BUF_POOLS						1
     55 #define		MAX_NUMBER_OF_BUF_POOLS						3
     56 
     57 #ifdef SUPPORT_4X
     58 #define		DEF_NUMBER_OF_BUF_POOLS						3
     59 #define		DEF_BUFFER_LENGTH_POOL_1					64
     60 #define		DEF_BUFFER_LENGTH_POOL_2					2048
     61 #define		DEF_BUFFER_LENGTH_POOL_3					4096
     62 #else
     63 #define		DEF_NUMBER_OF_BUF_POOLS						3
     64 #define		DEF_BUFFER_LENGTH_POOL_1					64
     65 #define		DEF_BUFFER_LENGTH_POOL_2					256
     66 #define		DEF_BUFFER_LENGTH_POOL_3					2048
     67 #endif
     68 
     69 #define		MIN_BUFFER_LENGTH							64
     70 #define		MAX_BUFFER_LENGTH							4096
     71 #define		DEF_NUMBER_OF_BUFFERS_IN_POOL_1				160
     72 #define		DEF_NUMBER_OF_BUFFERS_IN_POOL_2				160
     73 #define		DEF_NUMBER_OF_BUFFERS_IN_POOL_3				160
     74 
     75 
     76 #define WLAN_DRV_NULL_MEM_HANDLE						0xffffffff
     77 
     78 #define NUM_OF_FREE_ARGS								5
     79 
     80 #define MAX_NUM_OF_TIME_STAMPS                          8
     81 
     82 #define memMgr_BufLength(BufAddr) ( ((mem_BD_T *)BufAddr)->length   )
     83 #define memMgr_BufOffset(BufAddr) ( ((mem_BD_T *)BufAddr)->dataOffset )
     84 #define memMgr_BufData(BufAddr)   ( ((mem_BD_T *)BufAddr)->data )
     85 #define memMgr_BufNext(BufAddr)   ( ((mem_BD_T *)BufAddr)->nextBDPtr )
     86 
     87 #define memMgr_MsduHdrLen(MsduAddr)		( ((mem_MSDU_T *)MsduAddr)->headerLen )
     88 #define memMgr_MsduFirstLen(MsduAddr)	( ((mem_MSDU_T *)MsduAddr)->firstBDPtr->length )
     89 #define memMgr_MsduHandle(MsduAddr)		( ((mem_MSDU_T *)MsduAddr)->handle )
     90 /*
     91  * Header resides after the Descriptor
     92  */
     93 #define memMgr_MsduHdrAddr(MsduAddr)    ( memMgr_BufData(((mem_MSDU_T *)MsduAddr)->firstBDPtr) + \
     94                                           memMgr_BufOffset(((mem_MSDU_T *)MsduAddr)->firstBDPtr) + sizeof(DbTescriptor))
     95 
     96 #define memMgr_MsduNextAddr(MsduAddr)	( ((mem_MSDU_T *)MsduAddr)->firstBDPtr->nextBDPtr )
     97 #define memMgr_MsduDataAddr(MsduAddr)	( ((mem_MSDU_T *)MsduAddr)->firstBDPtr )
     98 #define memMgr_MsduDataSize(MsduAddr)	( ((mem_MSDU_T *)MsduAddr)->dataLen )
     99 #define memMgr_MsduNextGet(MsduAddr)	( ((mem_MSDU_T *)MsduAddr)->nextMSDUinList)
    100 #define memMgr_MsduFreeFuncGet(MsduAddr)( ((mem_MSDU_T *)MsduAddr)->freeFunc)
    101 #define memMgr_MsduFreeArg0Get(MsduAddr)( ((mem_MSDU_T *)MsduAddr)->freeArgs[0])
    102 #define memMgr_MsduFreeArg1Get(MsduAddr)( ((mem_MSDU_T *)MsduAddr)->freeArgs[1])
    103 #define memMgr_MsduFreeArg2Get(MsduAddr)( ((mem_MSDU_T *)MsduAddr)->freeArgs[2])
    104 #define memMgr_MsduFreeArg3Get(MsduAddr)( ((mem_MSDU_T *)MsduAddr)->freeArgs[3])
    105 #define memMgr_MsduFreeArg4Get(MsduAddr)( ((mem_MSDU_T *)MsduAddr)->freeArgs[4])
    106 
    107 typedef enum
    108 {
    109 	/*
    110 	 * Allocate on Tx
    111 	 */
    112 	MLME_MODULE		= 0,
    113 	OS_ABS_TX_MODULE,
    114 	RSN_MODULE,
    115 	HAL_TX_MODULE,
    116 	CONCAT_MODULE,
    117 	DE_CONCAT_MODULE,
    118 	ACK_EMUL_MODULE,
    119 	TX_MODULE,
    120 	MEASUREMENT_MODULE,
    121 	SITE_MGR_MODULE,
    122 	EXC_MANAGER_MODULE,
    123 	TRACE_BUFFER_MODULE,
    124 	ADM_CTRL_QOS_MODULE,
    125 	CURRENT_BSS_MODULE,
    126 	/*
    127 	 * Allocate on Rx
    128 	 */
    129 	HAL_RX_MODULE,
    130 	CORE_RX_MODULE,
    131 	MLME_RX_MODULE,
    132 	OS_ABS_RX_MODULE,
    133 	RSN_RX_MODULE,
    134 	MEASUREMENT_RX_MODULE,
    135 	SITE_MGR_RX_MODULE,
    136 	EXC_MANAGER_RX_MODULE,
    137 
    138 	HAL_WEP1_RX,
    139 	HAL_WEP2_RX,
    140 	HAL_DEFRAG_RX,
    141 	HAL_DUPLICA_RX,
    142 
    143 	/*
    144     DO NOT TOUCH - MODULE_FREE_MSDU, MAX_NUMBER_OF_MODULE!
    145     */
    146 	MODULE_FREE_MSDU,
    147     MAX_NUMBER_OF_MODULE
    148 
    149 }allocatingModule_e;
    150 
    151 
    152 typedef void (*ap_FreeMemFunc)(TI_HANDLE, TI_HANDLE, TI_STATUS);
    153 
    154 #ifdef TNETW_MASTER_MODE
    155 typedef void (*bd_FreeMemFunc)( UINT32 , UINT32, UINT32, UINT32, UINT32 );
    156 #endif
    157 
    158 typedef struct mem_DataBuf_T mem_DataBuf_T;
    159 struct mem_DataBuf_T {
    160     /* READ ONLY */
    161 	/* The user MUST not change the following fields */
    162 	UINT32			handle;				/* Hanlde of this Data Buffer Structure */
    163     mem_DataBuf_T*  nextDataBuf;    /* pointer to the next free DataBuf
    164                                            when this DataBuf is in Free mode */
    165 	UINT32			refCount;			/* number of instances of this Data Buf */
    166 	/* PUBLIC - For the use of the User */
    167 	UINT32			poolIndex;		/* the buffer pool index */
    168 	UINT8			*data;			/* pointer to the Data */
    169 #if defined TNETW_MASTER_MODE
    170 	OS_PHYSICAL_ADDRESS	data_physical; /* Physical address of the data */
    171 #endif
    172 };
    173 
    174 typedef struct mem_BD_T mem_BD_T;
    175 struct mem_BD_T {
    176     /* READ ONLY */
    177 	/* The user MUST not change the following fields */
    178 	UINT32			handle;			/* Hanlde of this BD Data Structure */
    179 	UINT32			refCount;		/* number of instances of this BD */
    180 	mem_DataBuf_T*  dataBuf;        /* pointer to the Data Buffer */
    181 	/* PUBLIC - For the use of the User */
    182     char*           data;           /* Pointer to the Data */
    183 	UINT32			dataOffset;		/* offset of the data */
    184 	UINT32			length;			/* Tx : the length of the entire data (including TxDescriptor,TNETWIF_WRITE_OFFSET_BYTES etc..) */
    185 									/* Rx : the length of the data (excluding TNETWIF_READ_OFFSET_BYTES)							*/
    186 	mem_BD_T*		nextBDPtr;		/* pointer to the next BD */
    187 
    188 #if defined TNETW_MASTER_MODE
    189 	UINT32	data_physical_low;		/* Physical address (low) of the data */
    190     bd_FreeMemFunc	freeFunc;		/* pointer to the Data Buffer free function */
    191 	UINT32			freeArgs[NUM_OF_FREE_ARGS];	/* arguments to be send with the free function */
    192 #endif
    193 
    194 };
    195 
    196 typedef struct mem_MSDU_T mem_MSDU_T;
    197 struct mem_MSDU_T {
    198     /* READ ONLY */
    199 	/* The user MUST not change the following fields */
    200 	UINT32				handle;			/* handle of this MSDU data structure */
    201 	mem_MSDU_T *		nextFreeMSDU;   /* pointer to the next Free MSDU when
    202 									   this MSDU Buffer is in Free mode */
    203 	/* PUBLIC - For the use of the User */
    204     UINT32				headerLen;      /* the length of the 802.11 header */
    205 	mem_BD_T *			firstBDPtr;		/* pointer to the first BD */
    206  	mem_BD_T *			lastBDPtr;		/* pointer to the last BD */
    207 	ap_FreeMemFunc		freeFunc;		/* pointer to the Data Buffer free function */
    208 	UINT32				freeArgs[NUM_OF_FREE_ARGS];	/* arguments to be send with the free function */
    209 	UINT32				dataLen;		/* length of the data (only data) of the firstBDPtr */
    210 	allocatingModule_e	module;			/* the allocating module */
    211 
    212 	/* support Msdu List */
    213     mem_MSDU_T *		nextMSDUinList; /* pointer to the next MSDU in Tx queue link list. */
    214     mem_MSDU_T *		prevMSDUinList; /* pointer to the previos MSDU in Tx queue link list. */
    215 
    216 
    217 	UINT32				txFlags;		/* Tx flags */
    218 	UINT8				txCompleteFlags;		/* Tx complete flags */
    219 	UINT32              insertionTime;  /* time of msdu insersion to driver. */
    220 	UINT8               qosTag;         /* 802.11d qos tag */
    221 #ifdef DM_USE_WORKQUEUE
    222     mem_MSDU_T *        msdu_next;      /* Used for Workqueue list */
    223 #endif /* DM_USE_WORKQUEUE */
    224 #ifdef TI_DBG
    225     UINT32              timeStamp [MAX_NUM_OF_TIME_STAMPS];
    226                                         /* array of time stamps */
    227     UINT32              timeStampNum;   /* number of time stamps */
    228 #endif
    229 };
    230 
    231 typedef struct
    232 {
    233 	UINT32			buffersSize;		/* the size of the buffers in the pool */
    234 	UINT32			numFreeDataBuf;		/* number of free data buffers */
    235 	UINT32			dataBufMaxNumber;	/* maximum number of buffers */
    236 	mem_DataBuf_T* 	firstFreeDataBuf;	/* pointer to the first free Data Buffer */
    237 	mem_DataBuf_T*	dataBufPool;		/* list of Data Buffers */
    238 #ifdef TNETW_MASTER_MODE
    239 	OS_PHYSICAL_ADDRESS	physicalDataBufPoolPtr;
    240 #endif
    241 	UINT8*				dataBufPoolPtr;
    242 
    243 }buffersPool_t;
    244 
    245 /* structures for initialization of Memory manager */
    246 typedef struct
    247 {
    248 	UINT32	numOfbuffers;
    249 	UINT32	buffersSize;
    250 }bufPoolInit_t;
    251 
    252 typedef struct
    253 {
    254 	UINT8	numOfPools;
    255 	bufPoolInit_t	bufPoolInit[MAX_NUMBER_OF_BUF_POOLS];
    256 }memMngrInit_t;
    257 
    258 /* MemMngr Control Block */
    259 typedef struct
    260 {
    261 	TI_HANDLE		hReport;			/* report handle		*/
    262 	TI_HANDLE		hOs;				/* Os handle			*/
    263 	TI_HANDLE		hCriticalSectionProtect;
    264 
    265 	UINT32			currentNumberOfPools;
    266 
    267 	UINT32			msduMaxNumber;		/* maximum number of MSDUs */
    268 	UINT32			bdMaxNumber;		/* maximum number of BD;s */
    269 
    270 	mem_MSDU_T* 	msduPool;			/* list of MSDU Buffer Desciptors	*/
    271 	mem_BD_T* 		bdPool;				/* list of BD Buffer Descriptors	*/
    272 
    273 	mem_MSDU_T* 	firstFreeMSDU; 		/* pointer to the first free MSDU	*/
    274 	mem_BD_T* 		firstFreeBD;		/* pointer to the first free BD		*/
    275 
    276 	UINT32			numFreeMSDU;		/* number of free MSDU's */
    277 	UINT32			numFreeBD;			/* number of free BD's */
    278 
    279 	UINT32			moduleAllocCount[MAX_NUMBER_OF_MODULE]; /* counters of allocated */
    280 															/* msdu per module		 */
    281 
    282 	buffersPool_t	buffersPool[MAX_NUMBER_OF_BUF_POOLS];	/* Pools of Data Buffers */
    283 
    284 }memMngr_t;
    285 
    286 typedef struct
    287 {
    288 	UINT32 numOfFreeBufPool1;
    289 	UINT32 numOfFreeBufPool2;
    290 	UINT32 numOfFreeBufPool3;
    291 	UINT32 numOfFreeBDs;
    292 	UINT32 numOfFreeMsdu;
    293 }memMgrResources_t;
    294 
    295 /*************************************************************************
    296  *                        wlan_memMngrInit          		             *
    297  *************************************************************************
    298 DESCRIPTION: Init of the Memory Manager module
    299 
    300 INPUT:
    301 OUTPUT:
    302 RETURN:      OK/NOK
    303 **************************************************************************/
    304 TI_HANDLE wlan_memMngrInit(TI_HANDLE hOs);
    305 
    306 /*************************************************************************
    307  *                        wlan_memMngrDestroy                            *
    308  *************************************************************************
    309 DESCRIPTION:
    310 
    311 
    312 
    313 INPUT:
    314 OUTPUT:
    315 
    316 RETURN:     OK/NOK
    317 **************************************************************************/
    318 TI_STATUS wlan_memMngrDestroy(TI_HANDLE hMemMngr);
    319 
    320 /*************************************************************************
    321  *                        wlan_memMngrConfigure                           *
    322  *************************************************************************
    323 DESCRIPTION:
    324 
    325 
    326 
    327 INPUT:
    328 OUTPUT:
    329 
    330 RETURN:     OK/NOK
    331 **************************************************************************/
    332 TI_STATUS wlan_memMngrConfigure(TI_HANDLE hMemMngr, TI_HANDLE hOs, TI_HANDLE hReport);
    333 
    334 /*************************************************************************
    335  *                        wlan_memMngrAllocDataBuf                           *
    336  *************************************************************************
    337 DESCRIPTION:This function allocates BDs and Data Buffers according to the
    338 			required length. The memory manager will allocate the Data
    339 			Buffers, update the buffer pointer in the BD structure and link
    340 			the BDs when more than one Data Buffer is required.
    341 
    342 INPUT:      len - the length of the required data buffer
    343 OUTPUT:     BDPtr - a pointer in which this function will return a pointer
    344 					to the allocated BD
    345 RETURN:     OK/NOK
    346 **************************************************************************/
    347 TI_STATUS wlan_memMngrAllocDataBuf(TI_HANDLE hMemMngr, mem_BD_T** bdPtr, UINT32 len);
    348 
    349 /*************************************************************************
    350  *                        wlan_memMngrAllocBDs                        		 *
    351  *************************************************************************
    352 DESCRIPTION:This function allocates and returns a pointer to an array of BDs.
    353 			This function does not allocate any memory buffers.
    354 
    355 INPUT:      BDsNumber - number of required BDs
    356 OUTPUT:     BDsPtr - a pointer in which this function will return a pointer
    357 					 to an array of BD pointers
    358 RETURN:     OK/NOK
    359 **************************************************************************/
    360 TI_STATUS wlan_memMngrAllocBDs(TI_HANDLE hMemMngr, UINT32 bdNumber, mem_BD_T** bdPtr);
    361 
    362 /*************************************************************************
    363  *                        wlan_memMngrAllocMSDU                          *
    364  *************************************************************************
    365 DESCRIPTION:This function allocates MPDU structure.
    366 
    367 INPUT:		len - the length of the required data buffer
    368                     if len=0, than only MSDU buffer will be allocated
    369 OUTPUT:     MSDUPtr - a pointer in which this function will return a pointer
    370 					  to the MSDU structure
    371 RETURN:     OK/NOK
    372 **************************************************************************/
    373 TI_STATUS wlan_memMngrAllocMSDU (TI_HANDLE hMemMngr, mem_MSDU_T** MSDUPtr,
    374 							  UINT32 len, allocatingModule_e module);
    375 
    376 /*************************************************************************
    377  *                        wlan_memMngrAllocMSDUBufferOnly	             *
    378  *************************************************************************
    379 DESCRIPTION:This function allocates MPDU structure - without Data Buffers
    380 
    381 INPUT:
    382 OUTPUT:     MSDUPtr - a pointer in which this function will return a pointer
    383 					  to the MSDU structure
    384 RETURN:     OK/NOK
    385 **************************************************************************/
    386 TI_STATUS wlan_memMngrAllocMSDUBufferOnly(TI_HANDLE hMemMngr, mem_MSDU_T** MSDUPtr,
    387 									   allocatingModule_e module);
    388 
    389 /*************************************************************************
    390  *                        wlan_memMngrDuplicateMSDU                      *
    391  *************************************************************************
    392 DESCRIPTION:This function duplicates the MSDU.
    393 
    394 INPUT:      handle - handle of the MSDU the user want to duplicate
    395 OUTPUT:     newHandle - pointer in which this function sets the handle of
    396                     the duplicated MSDU.
    397 RETURN:     OK/NOK
    398 **************************************************************************/
    399 TI_STATUS wlan_memMngrDuplicateMSDU(TI_HANDLE hMemMngr, UINT32 handle, UINT32* newHandle);
    400 
    401 /*************************************************************************
    402  *                        wlan_memMngrFreeMSDU         	                 *
    403  *************************************************************************
    404 DESCRIPTION:Free MSDU structure. This function will free all BDs and Data
    405 			Buffers that are bind to this MSDU.
    406 
    407 INPUT:      handle - handle of this MSDU
    408 OUTPUT:
    409 RETURN:     OK/NOK
    410 **************************************************************************/
    411 TI_STATUS wlan_memMngrFreeMSDU(TI_HANDLE hMemMngr, UINT32 handle);
    412 
    413 /*************************************************************************
    414  *														                 *
    415  *************************************************************************
    416 DESCRIPTION:
    417 INPUT:
    418 OUTPUT:
    419 RETURN:     OK/NOK
    420 **************************************************************************/
    421 TI_STATUS wlan_memMngrFreeListOfMSDU(TI_HANDLE hMemMngr, UINT32 handle);
    422 
    423 
    424 /*************************************************************************
    425  *                        wlan_memMngrFreeBD          	                 *
    426  *************************************************************************
    427 DESCRIPTION:Free BD structure. This function will free a list of BD
    428 			structures and the Data Buffer that is being pointed by these BD
    429 			if any. (e.g. - free MPDU)
    430 
    431 INPUT:      handle - handle of this BD
    432 OUTPUT:
    433 RETURN:     freeFlag - return TRUE if this BD list was freed
    434                        return FALSE if this BD list was not freed (refCount>0)
    435 **************************************************************************/
    436 UINT32 wlan_memMngrFreeBD(TI_HANDLE hMemMngr, UINT32 handle);
    437 
    438 /*************************************************************************
    439  *                                  							         *
    440  *************************************************************************
    441 DESCRIPTION:
    442 
    443 INPUT:
    444 OUTPUT:
    445 RETURN:
    446 **************************************************************************/
    447 TI_STATUS wlan_memMngrFreeAllOsAlocatesBuffer(TI_HANDLE hMemMngr);
    448 
    449 /*************************************************************************
    450  *                                  							         *
    451  *************************************************************************
    452 DESCRIPTION:
    453 
    454 INPUT:
    455 OUTPUT:
    456 RETURN:
    457 **************************************************************************/
    458 TI_STATUS wlan_memMngrCopyMsduFreeFunc(TI_HANDLE hMemMngr, UINT32 destMsduHandle, UINT32 sourceMsduHandle);
    459 
    460 /*************************************************************************
    461  *                                  							         *
    462  *************************************************************************
    463 DESCRIPTION:
    464 
    465 INPUT:
    466 OUTPUT:
    467 RETURN:
    468 **************************************************************************/
    469 TI_STATUS wlan_memMngrGetMemMgrResources(TI_HANDLE hMemMngr, memMgrResources_t* memMgrResources);
    470 
    471 /*************************************************************************
    472  *                                  							         *
    473  *************************************************************************
    474 DESCRIPTION:
    475 
    476 INPUT:
    477 OUTPUT:
    478 RETURN:
    479 **************************************************************************/
    480 TI_STATUS wlan_memMngrChangeMsduOwner(TI_HANDLE hMemMngr,allocatingModule_e newModule,mem_MSDU_T *pMsdu);
    481 
    482 
    483 TI_STATUS wlan_memMngrSwapMsdu(TI_HANDLE hMemMngr, mem_MSDU_T *pMsdu_1, mem_MSDU_T *pMsdu_2);
    484 
    485 
    486 TI_STATUS wlan_memMngrAddTimeStamp (TI_HANDLE hMemMngr, mem_MSDU_T *pMsdu);
    487 
    488 /*************************************************************************
    489  *					          TEST_FUNCTIONS         	                 *
    490  *************************************************************************/
    491 void memMngrPrintHandle(TI_HANDLE hMemMngr, UINT32 handle);
    492 void memMngrFullPrint(TI_HANDLE hMemMngr);
    493 void memMngrPrint(TI_HANDLE hMemMngr);
    494 
    495 /*test function*/
    496 TI_STATUS txDataSTUB_txSendMsdu(TI_HANDLE hMemMngr, mem_MSDU_T *pMsdu);
    497 void print_MsduDataHeader(TI_HANDLE hMemMngr, mem_MSDU_T *pMsdu);
    498 void memMngrPrintMSDUWithItsBds(mem_MSDU_T* pMsdu );
    499 
    500 
    501 #endif
    502