/* ##H_FILE#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FILE :          CpaMmg.h
 
DESCRIPTION :   this file contain all functions and macros used to allocate memory 
				and export the necessary structures :
		
		Initialisation of the module
		Initialisation of a static bloc
		switch between dynamic and static mode
		Allocate/ReAllocate/Free Memory
		Check function for debugging
		Destroy a static bloc
		Destroy the module
 
VERSION :       5.1.0/Pierrick Crepy/Creation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 
#ifndef __CpaMmg_H__
#define __CpaMmg_H__
 
/* For DLLs who are using this module : */ 
#undef CPA_EXPORT
#if defined(CPA_WANTS_IMPORT)
 #define CPA_EXPORT __declspec(dllimport)
#elif defined(CPA_WANTS_EXPORT)
 #define CPA_EXPORT __declspec(dllexport)
#else
 #define CPA_EXPORT
#endif
 
/* for emlulate the U64 on Pc*/
/*#define U64*/
/*#define u64 __int64*/
 
/* ##INCLUDE#----------------------------------------------------------------------------
                          Includes Files
---------------------------------------------------------------------------------------*/
#ifndef __ERRMMG_H__
#include "errMmg.h" 
#endif /*__ERRMMG_H__*/
 
/*#include <stdio.h> /*because lint ==> repeated iclude file   */
 
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
 
/*/////////////////////////*/
/* Compilation directive //  */
/*/////////////////////////*/
#define Modif4Ch /* __MULTI_THREAD_MEMORY_MANAGEMENT__*/
#define ModifMmgV5_1_0
#ifdef U64
	#ifndef FINAL_VERSION
		#define __DYNAMIC_MALLOC_ALLOWED__
	#endif /* FINAL_VERSION*/
#else /* U64 */
	#define __DYNAMIC_MALLOC_ALLOWED__
#endif /* U64 */
 
/* ##CONSTANTE#--------------------------------------------------------------------------
                          Constantes declaration
---------------------------------------------------------------------------------------*/
 
/*multi thread management*/
#define C_ucMmgDefaultChannel (0)
#define C_MaxNbPossibleChannel (255)
#define C_ucMmgDefaultGroup (0)
 
/* for __DEBUG_MALLOC_MODE__ information*/
#define C_ulDefaultMaxNbStaticMalloc (100000) /* maximum number of mallocs in a static block*/
#define C_ulDefaultMaxNbDynamicMalloc (100000) /* maximum number of dynamic malloc*/
 
#ifdef U64
/*OSMesgQueue *mq, OSMesg *msg*/
#else
#define TypeCriticalSection CRITICAL_SECTION
#endif /* U64 */
 
/* General*/
#define C_ucTrue (0xFF)
#define C_ucFalse (0)
 
/* alignment 32 bits:*/
#ifdef U64
#define C_uwAllocSize (8) /* for example here we are a 64 bits alignment*/
#define C_uwShiftAllocSize (3) /* 2^3=8*/
#define unitAlloc u64
#else /*U64*/
#define C_uwAllocSize (4) /* for example here we are a 32 bits alignment*/
#define C_uwShiftAllocSize (2) /* 2^2=4*/
#define unitAlloc unsigned long
#endif /*U64*/
 
/*XB*/
#ifdef U64
#include "ultra.h"
#endif /* U64 */
/*End XB*/
 
#define C_p_cBlockNotValidKey	((char *)(0XFFFFFFFF))
 
#define E_ucDynamic (0xFF)
 
/*mode parameter of Mmg_fn_vInitSpecificBlock*/
#define C_NoAlignement							1
 
/*mode parameter of Mmg_fn_vInitSpecificBlock*/
#define C_BlockWithFreeFlag						0
#define C_BlockWithoutFreeFlag					1
#define C_FillTheBlockWithCleanKeyFlag			2
#define C_Check_AlignementFlag					4
#define C_Check_OverflowFlag					8
 
 
 
/* ##TYPEDEF#----------------------------------------------------------------------------
                          Types definition
---------------------------------------------------------------------------------------*/
 
/* ##-########################### */
/*        tdstChannelInfo         */
/* ############################## */
typedef struct tdstChannelInfo_{
	unsigned long ulThreadId;
	unsigned char ucGroupId;
}tdstChannelInfo;
 
/* ##-########################### */
/*        tdstGeneralChannelInfo  */
/* ############################## */
typedef struct tdstGeneralChannelsInfo_{
	unsigned char ucNbchannelUsed;
	unsigned char ucMAxNbChannel;
	tdstChannelInfo * d_stTabChannelInfo;
}tdstGeneralChannelInfo;
 
/* ##-########################### */
/*        tdstCurrentModeInfo     */
/* ############################## */
typedef struct tdstCurrentModeInfo_{
        unsigned char ucModuleId;
        unsigned char ucMode;
        void *p_vTdstBlockInfoOrTdstDynInfo;
}tdstCurrentModeInfo;
 
/* ##-########################### */
/*        tdstBlockInfo           */
/* ############################## */
typedef struct tdstBlockInfo_{
        char * p_cBeginBlock;
        char * p_cEndBlock;
        char * p_cFirstFree;
        char * p_cMaxMem; 
}tdstBlockInfo;
 
 
/* ##GLOBVAR#----------------------------------------------------------------------------
                          Globale variable declaration
---------------------------------------------------------------------------------------*/
#undef __CPAMMG_EXTERN
#ifdef __DeclareGlobalVariableInCpaMmg_h__
#define __CPAMMG_EXTERN /*nothing*/
#else
#define __CPAMMG_EXTERN extern
#endif /*__DeclareGlobalVariableInCpaMmg_h__*/
 
#ifdef _DEBUG
__CPAMMG_EXTERN CPA_EXPORT  unsigned char g_ucBLockedAllocation
#if defined(__DeclareGlobalVariableInCpaMmg_h__) && !defined(CPA_WANTS_IMPORT)
= C_ucFalse
#endif /*__DeclareGlobalVariableInCpaMmg_h__ && CPA_WANTS_IMPORT*/
;
#endif /*_DEBUG*/
 
/* General table in order to access to informations about each allocation of all the module for debug mode*/
__CPAMMG_EXTERN CPA_EXPORT  struct tdstBlockInfoPriv_ *g_a_p_stMmgModuleBlocksInfo[C_ucNbOfMaxModule];
__CPAMMG_EXTERN CPA_EXPORT  unsigned char g_a_ucBlocksNbInModule[C_ucNbOfMaxModule];
 
 
#ifdef __DYNAMIC_MALLOC_ALLOWED__
#ifndef _FIRE_DEADCODE_U64_
__CPAMMG_EXTERN CPA_EXPORT  struct tdstDynInfo_ ** g_d_p_stMmgModuleDynInfo;
#endif /* _FIRE_DEADCODE_U64_ */
#endif /*__DYNAMIC_MALLOC_ALLOWED__*/
 
/* information about the current mode of allocation*/
__CPAMMG_EXTERN CPA_EXPORT  struct tdstCurrentModeInfo_ * g_d_stCurrentModeInfo;
 
/*information about channel */
#if (!defined(U64) && !defined(PSX))
__CPAMMG_EXTERN CPA_EXPORT TypeCriticalSection g_MmgCriticalSection;
#endif /*U64 || PSX*/
__CPAMMG_EXTERN CPA_EXPORT tdstGeneralChannelInfo g_stGeneralChannelInfo;
 
 
 
/*//////////*/
/* Macros //*/
/*//////////*/
 
/* ##M#===================================================================================
NAME :          Mmg_M_BigBoundSize
DESCRIPTION :   boundering of the size. the size must be a the biggest nearly 
				multiple of C_uwAllocSizeRound 
INPUT :         Size & the alignement
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_BigBoundSize(ulSize, ucAlignment) \
/*      ---------------- */\
        \
				/*lint -save -e774*/\
                if ( (ulSize) & (unsigned long)(ucAlignment-1)) {\
				/*lint -restore*/\
                /*ulSize is not a multiple of ucAlignment. */ \
                /* We round the ulSize at the next upper ucAlignment multiple. */ \
                (ulSize) = ((ulSize) & (~((unsigned long)(ucAlignment-1)))) + ucAlignment;\
                }
 
/* not used not tested*/
/* ##M#===================================================================================
NAME :          Mmg_M_ulSmallBoundSize
DESCRIPTION :   boundering of the size. the size must be a the Smallest nearly multiple of C_uwAllocSize
INPUT :         Size
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_ulSmallBoundSize(ulSize) \
/*      ------------------ */\
        \
                (ulSize) = ((ulSize) & (~((unsigned long)(C_uwAllocSize-1))));
 
/* ##M#===================================================================================
NAME :          M_Max
DESCRIPTION :   return the max between 2 values
INPUT :         Value A
				Value B
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define M_Max(a,b) ((a)>(b) ? (a) : (b))
/*      ----------*/
 
/* macro use to test */
/* ##M#===================================================================================
NAME :          Mmg_M_UpdateFatalDebugError
DESCRIPTION :   Raise an error displaying window message for debugging
				or do nothing  
INPUT :         Error Id
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#ifdef __FATAL_DEBUG_ERR_MMG__
#define Mmg_M_UpdateFatalDebugError(uwMyErrorId) Erm_M_UpdateLastError(Mmg, C_ucErmDefaultChannel, uwMyErrorId, C_lErmNoDebugData, C_ucErmOpenInfoWindow, C_ucAllowStopForDebug, NULL)
/*      ---------------------------*/
#else /*__FATAL_DEBUG_ERR_MMG__*/
#define Mmg_M_UpdateFatalDebugError(uwMyErrorId) ;/*Nothing to do*/
#endif /*__FATAL_DEBUG_ERR_MMG__*/
 
/* ##M#===================================================================================
NAME :          Mmg_M_UpdateLastError
DESCRIPTION :   Raise an error displaying window message for debugging
INPUT :         Error Id
				Error String
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_UpdateLastError(uwMyErr, szPersonalTxt) Erm_M_UpdateLastError (Mmg, C_ucErmDefaultChannel, uwMyErr, C_lErmNoDebugData, C_ucErmOpenInfoWindow, C_ucAllowStopForDebug, szPersonalTxt);
 
/* ##M#===================================================================================
NAME :          Mmg_MulGetThreadId
DESCRIPTION :   Return thread Id of a channel
INPUT :         Channel Id
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_MulGetThreadId(ucChannel) (((g_stGeneralChannelInfo.d_stTabChannelInfo)[ucChannel]).ulThreadId)
 
/* ##M#===================================================================================
NAME :          Mmg_MulGetThreadId
DESCRIPTION :   Return group Id of a channel
INPUT :         Channel Id
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_MucGetucGroupId(ucChannel) (((g_stGeneralChannelInfo.d_stTabChannelInfo)[ucChannel]).ucGroupId)
 
/* ##M#===================================================================================
NAME :          Mmg_M_szAddChannelInfoToSzInitTxt
DESCRIPTION :   Add channel info in a string
INPUT :         String
				Channel Id
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_szAddChannelInfoToSzInitTxt(szInitTxt, ucChannel)\
{\
	if (ucChannel == C_ucMmgDefaultChannel){\
		sprintf (szInitTxt, "%sMemory Channel=Default\n", szInitTxt);\
	}\
	else{\
		sprintf (szInitTxt, "%s{Memory Channel=%d [0X%X, %d]\n", szInitTxt, ucChannel, Mmg_MulGetThreadId(ucChannel), Mmg_MucGetucGroupId(ucChannel));\
	}\
}
 
#ifdef __ERROR_STRINGS__
/* ##M#===================================================================================
NAME :          Mmg_M_UpdateLastErrorWithModuleId
DESCRIPTION :   Raise an error using module Id
INPUT :         Module Id
				Error Id
				Error text
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_UpdateLastErrorWithModuleId(ucModuleId, uwMyErr, szPersonalTxt) Mmg_fn_v_UpdateLastErrorWithModuleId(ucModuleId, uwMyErr, szPersonalTxt)
#else /*__ERROR_STRINGS__*/
/* ##M#===================================================================================
NAME :          Mmg_M_UpdateLastErrorWithModuleIdAnducModeReference
DESCRIPTION :   Raise an error using module Id and allocation mode
INPUT :         Module Id
				Allocation Mode
				Error Id
				Error text
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_UpdateLastErrorWithModuleIdAnducModeReference(ucModuleId, ucMode, uwMyErr, szPersonalTxt) Erm_M_UpdateLastError (Mmg, C_ucErmDefaultChannel, uwMyErr, C_lErmNoDebugData, C_ucErmOpenInfoWindow, C_ucAllowStopForDebug, szPersonalTxt);
#endif /*__ERROR_STRINGS__*/
 
/* ##M#===================================================================================
NAME :          Mmg_M_UpdateLastErrorWithCurrentModeInfo
DESCRIPTION :   Raise an error using current mode info
INPUT :         Error Id
				Error string
				Channel Id
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#ifdef __ERROR_STRINGS__
#define Mmg_M_UpdateLastErrorWithCurrentModeInfo(uwMyErr, szPersonalTxt, ucChannel) Mmg_fn_v_UpdateLastErrorWithCurrentModeInfo(uwMyErr, szPersonalTxt, ucChannel)
#else /*__ERROR_STRINGS__*/
#define Mmg_M_UpdateLastErrorWithCurrentModeInfo(uwMyErr, szPersonalTxt, ucChannel) Erm_M_UpdateLastError (Mmg, C_ucErmDefaultChannel, uwMyErr, C_lErmNoDebugData, C_ucErmOpenInfoWindow, C_ucAllowStopForDebug, szPersonalTxt);
#endif /*__ERROR_STRINGS__*/
 
/* ##M#===================================================================================
NAME :          Mmg_M_UpdateLastErrorWithModuleIdAnducModeReference
DESCRIPTION :   Raise an error using module Id and allocation mode 
INPUT :         Module Id
				Allocation Mode
				Error Id
				Error string
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#ifdef __ERROR_STRINGS__
#define Mmg_M_UpdateLastErrorWithModuleIdAnducModeReference(ucModuleId, ucMode, uwMyErr, szPersonalTxt) Mmg_fn_v_UpdateLastErrorWithModuleIdAnducModeReference(ucModuleId, ucMode, uwMyErr, szPersonalTxt)
#else /*__ERROR_STRINGS__*/
#define Mmg_M_UpdateLastErrorWithModuleIdAnducModeReference(ucModuleId, ucMode, uwMyErr, szPersonalTxt) Erm_M_UpdateLastError (Mmg, C_ucErmDefaultChannel, uwMyErr, C_lErmNoDebugData, C_ucErmOpenInfoWindow, C_ucAllowStopForDebug, szPersonalTxt);
#endif /*__ERROR_STRINGS__*/
 
/* ##M#===================================================================================
NAME :          Mmg_M_ucIsStaticMode
DESCRIPTION :   Return true if channel is in static mode
INPUT :         Channel Id
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_ucIsStaticMode(ucChannel) ((g_d_stCurrentModeInfo[ucChannel]).ucMode!= E_ucDynamic)
/*              --------------------*/
 
/* ##M#===================================================================================
NAME :          Mmg_M_SetModeAlloc
DESCRIPTION :   Compatibility maccro using default channel
INPUT :         Module abbreviation
				New Mode
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#ifdef Modif4Ch
#define Mmg_M_SetModeAlloc(ModuleAbreviation, ucNewMode) Mmg_M_SetModeAlloc4Ch(ModuleAbreviation, ucNewMode, C_ucMmgDefaultChannel)
#endif /*Modif4Ch*/
 
/* ##M#===================================================================================
NAME :          Mmg_M_SetModeAlloc4Ch
DESCRIPTION :   Set a new allocation mode in a channel
INPUT :         Module abbreviation
				New Mode
				Channel Id
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_SetModeAlloc4Ch(ModuleAbreviation, ucNewMode, C_ucMmgDefaultChannel) Mmg_fn_v_SetModeAlloc(g_uc##ModuleAbreviation##ModuleId, ucNewMode, C_ucMmgDefaultChannel)
 
/* ##M#===================================================================================
NAME :          Mmg_M_InitMmg
DESCRIPTION :   Compatibility maccro using default max dynamic malloc
INPUT :         Module abbreviation
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#ifdef ModifMmgV5_1_0
#define Mmg_M_InitMmg(ModuleName) Mmg_M_InitMmgV5_1_0(ModuleName, C_ulDefaultMaxNbDynamicMalloc)
#endif /*ModifMmgV5_1_0*/
/* ##M#===================================================================================
NAME :          Mmg_M_InitMmgV5_1_0
DESCRIPTION :   Initialization of a module to use memory
INPUT :         Module abbreviation
				Nb max dynamic malloc
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_InitMmgV5_1_0(ModuleName, ulMaxNbDynamicMalloc) Mmg_fn_v_InitMmg(g_uc##ModuleName##ModuleId, E_uc##ModuleName##MaxBlocksNb, ulMaxNbDynamicMalloc)
 
 
/* ##M#===================================================================================
NAME :          Mmg_MCreateCriticalSection
				Mmg_MEnterCriticalSection
				Mmg_MLeaveCriticalSection
				Mmg_MDeleteCriticalSection
DESCRIPTION :   Maccros to create, lock, unlock and destroy a critical section
				Do nothing on Ultra 64
INPUT :         Module abbreviation
				Nb max dynamic malloc
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#if (defined(U64) || defined(PSX) )
#define Mmg_MCreateCriticalSection() /*Nothing to do*/
#define Mmg_MEnterCriticalSection() /*Nothing to do*/
#define Mmg_MLeaveCriticalSection() /*Nothing to do*/
#define Mmg_MDeleteCriticalSection() /*Nothing to do*/
#else /*not U64 and not PSX*/
#define Mmg_MCreateCriticalSection() InitializeCriticalSection (&g_MmgCriticalSection)
#define Mmg_MEnterCriticalSection() EnterCriticalSection (&g_MmgCriticalSection)
#define Mmg_MLeaveCriticalSection() LeaveCriticalSection (&g_MmgCriticalSection)
#define Mmg_MDeleteCriticalSection() DeleteCriticalSection (&g_MmgCriticalSection)
#endif /*u64*/
 
/* ##M#===================================================================================
NAME :          Mmg_M_InitBlock
DESCRIPTION :   Compatibility maccro using default max static malloc
INPUT :         Module abbreviation
				Block Id
				Size of the block
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#ifdef ModifMmgV5_1_0
#define Mmg_M_InitBlock(ModuleAbreviation, ucBlockId, ulSize) Mmg_M_InitBlockV5_1_0(ModuleAbreviation, ucBlockId, ulSize, C_ulDefaultMaxNbStaticMalloc)
#endif /* ModifMmgV5_1_0 */
/* ##M#===================================================================================
NAME :          Mmg_M_InitBlockV5_1_0
DESCRIPTION :   Initialization of a static block
INPUT :         Module abbreviation
				Block Id
				Size of the block
				Max static allocation
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_InitBlockV5_1_0(ModuleAbreviation, ucBlockId, ulSize, ulMaxNbStaticMalloc) Mmg_fn_vInitSpecificBlock (ucBlockId, g_uc##ModuleAbreviation##ModuleId, g_a_p_stMmgModuleBlocksInfo[g_uc##ModuleAbreviation##ModuleId], ulSize, ulMaxNbStaticMalloc, C_NoAlignement, C_BlockWithFreeFlag)
#define Mmg_M_InitSpecificBlock(ModuleAbreviation, ucBlockId, ulSize, ulMaxNbStaticMalloc, ucAlignment, ucMode) Mmg_fn_vInitSpecificBlock (ucBlockId, g_uc##ModuleAbreviation##ModuleId, g_a_p_stMmgModuleBlocksInfo[g_uc##ModuleAbreviation##ModuleId], ulSize, ulMaxNbStaticMalloc, ucAlignment, ucMode)
 
/* ##M#===================================================================================
NAME :          Mmg_M_FreeBlock
DESCRIPTION :   Free all allocation in a block
INPUT :         Module abbreviation
				Block Id
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_FreeBlock(ModuleAbreviation, ucBlockId) Mmg_fn_vFreeBlock (ucBlockId, g_uc##ModuleAbreviation##ModuleId, g_a_p_stMmgModuleBlocksInfo[g_uc##ModuleAbreviation##ModuleId])
 
/* ##M#===================================================================================
NAME :          Mmg_M_DeleteBlock
DESCRIPTION :   Destroy all resource allocate for the management of a block
INPUT :         Module abbreviation
				Block Id
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_DeleteBlock(ModuleAbreviation, ucBlockId) Mmg_fn_vDeleteBlock (ucBlockId, g_uc##ModuleAbreviation##ModuleId, g_a_p_stMmgModuleBlocksInfo[g_uc##ModuleAbreviation##ModuleId])
 
/* ##M#===================================================================================
NAME :          Mmg_M_PrintAllDynamicMalloc
DESCRIPTION :   Print all dynamic allocation done by a module
INPUT :         Module abbreviation
				Sort before print
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_PrintAllDynamicMalloc(ModuleAbreviation, ucSorted)\
        Mmg_fn_vPrintAllDynamicMalloc (g_uc##ModuleAbreviation##ModuleId, g_d_p_stMmgModuleDynInfo+g_uc##ModuleAbreviation##ModuleId, ucSorted);
 
/* ##M#===================================================================================
NAME :          Mmg_M_PrintMapOfBlock
DESCRIPTION :   Print map of static allocation done in a block
INPUT :         Module abbreviation
				Block Id
				Sort before print
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_PrintMapOfBlock(ModuleAbreviation, ucBlockId, ucSorted)\
	Mmg_fn_vPrintMapOfBlock (g_uc##ModuleAbreviation##ModuleId, g_a_p_stMmgModuleBlocksInfo[g_uc##ModuleAbreviation##ModuleId], ucBlockId, ucSorted);
 
/* ##M#===================================================================================
NAME :          Mmg_M_PrintDebugMapOfblock
DESCRIPTION :   Print map of static allocation done in a block
INPUT :         Module abbreviation
				Block Id
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_PrintDebugMapOfblock(ModuleAbreviation, ucBlockId)\
	Mmg_fn_vPrintDebugMapOfBlock (g_uc##ModuleAbreviation##ModuleId, g_a_p_stMmgModuleBlocksInfo[g_uc##ModuleAbreviation##ModuleId], ucBlockId);
 
/* ##M#===================================================================================
NAME :          Mmg_M_PrintBlockStatisticWithModuleId
DESCRIPTION :   Print statistics on a block
INPUT :         Module Id
				Block Id
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_PrintBlockStatisticWithModuleId(ucModuleId, ucBlockId) \
	Mmg_fn_vPrintBlockStatistic (ucModuleId, g_a_p_stMmgModuleBlocksInfo[ucModuleId], ucBlockId);
 
/* ##M#===================================================================================
NAME :          Mmg_M_PrintBlockStatistic
DESCRIPTION :   Print statistics on a block
INPUT :         Module abbreviation
				Block Id
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_PrintBlockStatistic(ModuleAbreviation, ucBlockId) \
	Mmg_fn_vPrintBlockStatistic (g_uc##ModuleAbreviation##ModuleId, g_a_p_stMmgModuleBlocksInfo[g_uc##ModuleAbreviation##ModuleId], ucBlockId);
 
/* ##M#===================================================================================
NAME :          Mmg_M_PrintDynamicMallocStatistic
DESCRIPTION :   Print statistics on dynamic allocation of a module
INPUT :         Module abbreviation
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_PrintDynamicMallocStatistic(ModuleAbreviation)\
        Mmg_fn_vPrintDynamicMallocStatistic (g_uc##ModuleAbreviation##ModuleId, g_d_p_stMmgModuleDynInfo+g_uc##ModuleAbreviation##ModuleId);
 
/* ##M#===================================================================================
NAME :          Mmg_M_PrintUsedStaticMemoryInModule
DESCRIPTION :   Print static memory used by a module
INPUT :         Module abbreviation
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_PrintUsedStaticMemoryInModule(ModuleName)\
	Mmg_fn_vPrintUsedStaticMemory (g_uc##ModuleName##ModuleId, g_a_p_stMmgModuleBlocksInfo[g_uc##ModuleName##ModuleId], E_uc##ModuleName##MaxBlocksNb);
 
/*XB*/
#ifdef CHECK_MEMORY
#define Mmg_M_CheckMemory(ModuleName)\
	Mmg_fn_vCheckMemory(g_uc##ModuleName##ModuleId, g_a_p_stMmgModuleBlocksInfo[g_uc##ModuleName##ModuleId], E_uc##ModuleName##MaxBlocksNb)
#endif /* CHECK_MEMORY */
/*End XB*/
 
/* XB 02/06/99 */
#ifdef U64
#ifndef FINAL_VERSION
#define Mmg_M_GetUsedStaticMemory(ModuleName)\
	Mmg_fn_ulGetUsedStaticMemory(g_uc##ModuleName##ModuleId, g_a_p_stMmgModuleBlocksInfo[g_uc##ModuleName##ModuleId], E_uc##ModuleName##MaxBlocksNb)
#endif /* !FINAL_VERSION */
/* End XB 02/06/99 */
#else /* pas u64 */
#define Mmg_M_GetUsedStaticMemory(ModuleName) 0
#endif /* u64 */

 
/*Macros in order to acces to static block information*/
/* ##M#===================================================================================
NAME :          Mmg_M_b_ucTheModuleUseStaticMemory
DESCRIPTION :   return true if a module use static memory
INPUT :         Module Id
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_b_ucTheModuleUseStaticMemory(ucModuleId) (g_a_p_stMmgModuleBlocksInfo[ucModuleId]!= NULL)
/* ##M#===================================================================================
NAME :          Mmg_M_ucGetNbOfBlocksUsedInModule
DESCRIPTION :   return the number of sttic block used in a module
INPUT :         Module Id
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#define Mmg_M_ucGetNbOfBlocksUsedInModule(ucModuleId) g_a_ucBlocksNbInModule[ucModuleId]
 
 
/* ##FUNCDEF#----------------------------------------------------------------------------
                          Functions definition
---------------------------------------------------------------------------------------*/
 
/* ##F#===================================================================================
NAME :          Mmg_fn_cCheckAlignmentValidity
DESCRIPTION :   check if alignement constant are valide
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_cCheckAlignmentValidity (void);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vTestMalloc
DESCRIPTION :   Check integrity for all allocation (only in debug mode)
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_vTestMalloc(void);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vTestMallocIntegrityAt
DESCRIPTION :   Check the integrity of an allocated zone (only in debug mode)
INPUT :			Pointer on the block structure
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_vTestMallocIntegrityAt(void *p_vMemBlock);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vPrintUsedStaticMemory
DESCRIPTION :   this function print the state of the statsic memory in 
				the file C_szErrorLogFileName
INPUT :			Module Id
				poniter on a block structure
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_vPrintUsedStaticMemory(unsigned char ucModuleId, struct tdstBlockInfoPriv_ * a_stMyBlockInfo, unsigned char ucModuleMaxBlocksNb);
 
/*XB*/
#ifdef CHECK_MEMORY
extern CPA_EXPORT void Mmg_fn_vCheckMemory(unsigned char ucModuleId, struct tdstBlockInfoPriv_ * a_stMyBlockInfo, unsigned char ucModuleMaxBlocksNb);
#endif /* CHECK_MEMORY */
/*End XB*/

/* XB 02/06/99 */
#ifndef FINAL_VERSION
extern CPA_EXPORT unsigned long Mmg_fn_ulGetUsedStaticMemory(unsigned char ucModuleId, struct tdstBlockInfoPriv_ * a_stMyBlockInfo, unsigned char ucModuleMaxBlocksNb);
#endif /* !FINAL_VERSION */
/* End XB 02/06/99 */
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vInitBlock
DESCRIPTION :   Make the real allocation and init variables for block managing
INPUT :			Block Id
				Module Id
				Block Structure 
				Size of the block
				Max number of allocation in the block (only used for debugging)
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_vInitSpecificBlock (unsigned char ucBlockId, unsigned char ucModuleId, struct tdstBlockInfoPriv_ *p_stMyBlocksInfo, unsigned long ulSize, unsigned long ulMaxNbStaticMalloc, unsigned char ucAlignment, unsigned char ucMode);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vFreeBlock
DESCRIPTION :   Re-init bloc variables to free all allocation in the block
INPUT :			Block Id
				Module Id
				Block Structure 
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_vFreeBlock (unsigned char ucBlockId, unsigned char ucModuleId, struct tdstBlockInfoPriv_ *p_stMyBlocksInfo);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vDeleteBlock
DESCRIPTION :   Free Memory and invalidate the block
INPUT :			Block Id
				Module Id
				Block Structure 
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_vDeleteBlock (unsigned char ucBlockId, unsigned char ucModuleId, struct tdstBlockInfoPriv_ *p_stMyBlocksInfo);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vPrintAllDynamicMalloc
DESCRIPTION :   Print the map of dynamic allocation for a module (only in debug mode)
INPUT :			Module Id
				Pointer on dynamic malloc info structure
				Flag to indicate that info must be sorted
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
#ifdef __DYNAMIC_MALLOC_ALLOWED__
#ifdef __DEBUG_MALLOC_MODE__
extern CPA_EXPORT void Mmg_fn_vPrintAllDynamicMalloc (unsigned char ucModuleId, struct tdstDynInfo_ *p_stMyDynInfo, unsigned char ucSorted);
#endif /*__DYNAMIC_MALLOC_ALLOWED__*/
#endif /*__DEBUG_MALLOC_MODE__*/
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vPrintMapOfBlock
DESCRIPTION :   Print the map of static allocation for a block (only in debug mode)
INPUT :			Module Id
				Pointer on block info structure
				Block Id
				Flag to indicate that info must be sorted
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_vPrintMapOfBlock (unsigned char ucModuleId, struct tdstBlockInfoPriv_ *p_stMyBlocksInfo, unsigned char ucBlockId, unsigned char ucSorted);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vPrintDebugMapOfBlock
DESCRIPTION :   Print the map of static allocation for a block (only in debug mode)
INPUT :			Module Id
				Pointer on block info structure
				Block Id
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_vPrintDebugMapOfBlock (unsigned char ucModuleId, struct tdstBlockInfoPriv_ *p_stMyBlocksInfo, unsigned char ucBlockId);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vPrintBlockStatistic 
DESCRIPTION :   Print statistic on a block  (only in debug mode)
INPUT :			Module Id
				Pointer on block info structure
				Block Id
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_vPrintBlockStatistic (unsigned char ucModuleId, struct tdstBlockInfoPriv_ *p_stMyBlocksInfo, unsigned char ucBlockId);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vPrintDynamicMallocStatistic
DESCRIPTION :   Print statistic on a dynamic allocation of a module  (only in debug mode)
INPUT :			Module Id
				Pointer on block info structure
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
#ifdef __DEBUG_MALLOC_MODE__
#ifdef __DYNAMIC_MALLOC_ALLOWED__
extern CPA_EXPORT void Mmg_fn_vPrintDynamicMallocStatistic (unsigned char ucModuleId, struct tdstDynInfo_ *p_stMyDynInfo);
#endif/* __DYNAMIC_MALLOC_ALLOWED__*/
#endif /*__DEBUG_MALLOC_MODE__*/
 
#ifdef __DYNAMIC_MALLOC_ALLOWED__
 
/* ##M#===================================================================================
NAME :          Mmg_fn_p_vAlloc Mmg_fn_vFree Mmg_fn_p_vRealloc
DESCRIPTION :   Compatibility maccro using default channel
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#ifdef Modif4Ch
#define Mmg_fn_p_vAlloc(ulSize) fn_p_vGenAlloc (ulSize, C_ucMmgDefaultChannel)
#define Mmg_fn_vFree(p_vMmgBlock) fn_vGenFree (p_vMmgBlock, C_ucMmgDefaultChannel)
#define Mmg_fn_p_vRealloc(p_vMmgBlock, ulSize) fn_p_vGenRealloc (p_vMmgBlock, ulSize, C_ucMmgDefaultChannel)
#endif /*Modif4Ch*/
 
/* ##M#===================================================================================
NAME :          Mmg_fn_p_vAlloc4Ch
DESCRIPTION :   Allocate a memory zone in the channel using the corresponding Mode
INPUT :			Size
				Channel Id
OUTPUT :		Pointeur on the zone allocated
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
#define Mmg_fn_p_vAlloc4Ch(ulSize, ucChannel) fn_p_vGenAlloc (ulSize, ucChannel)
 
/* ##M#===================================================================================
NAME :          Mmg_fn_vFree4Ch
DESCRIPTION :   Free a memory zone in the channel using the corresponding Mode
INPUT :			Pointer on the zone allocated
				Channel Id
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
#define Mmg_fn_vFree4Ch(p_vMmgBlock, ucChannel) fn_vGenFree (p_vMmgBlock, ucChannel)
 
/* ##M#===================================================================================
NAME :          Mmg_fn_p_vRealloc4Ch
DESCRIPTION :   Reallocate a memory zone in the channel using the corresponding Mode
INPUT :			Pointer on the zone allocated
				Size
				Channel Id
OUTPUT :		Pointeur on the new zone allocated
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
#define Mmg_fn_p_vRealloc4Ch(p_vMmgBlock, ulSize, ucChannel) fn_p_vGenRealloc (p_vMmgBlock, ulSize, ucChannel)
 
#else /* __DYNAMIC_MALLOC_ALLOWED__ not defined*/
 
#ifdef Modif4Ch
#define Mmg_fn_p_vAlloc(ulSize) fn_p_vStaAlloc (ulSize, C_ucMmgDefaultChannel)
#endif /*Modif4Ch*/
#define Mmg_fn_p_vAlloc4Ch(ulSize, ucChannel) fn_p_vStaAlloc (ulSize, ucChannel)
extern CPA_EXPORT void * fn_p_vStaAlloc (unsigned long ulSize, unsigned char ucChannel);
 
#ifdef Modif4Ch
#define Mmg_fn_vFree(p_vMmgBlock) fn_vStaFree (p_vMmgBlock, C_ucMmgDefaultChannel)
#endif /*Modif4Ch*/
#define Mmg_fn_vFree4Ch(p_vMmgBlock, ucChannel) fn_vStaFree (p_vMmgBlock, ucChannel)
extern CPA_EXPORT void fn_vStaFree (void *p_vMmgBlock, unsigned char ucChannel);
 
#ifdef Modif4Ch
#define Mmg_fn_p_vRealloc(p_vMmgBlock, ulSize) fn_p_vStaRealloc (p_vMmgBlock, ulSize, C_ucMmgDefaultChannel)
#endif /*Modif4Ch*/
#define Mmg_fn_p_vRealloc4Ch(p_vMmgBlock, ulSize, ucChannel) fn_p_vStaRealloc (p_vMmgBlock, ulSize, ucChannel)
extern CPA_EXPORT void * fn_p_vStaRealloc (void *p_vMmgBlock, unsigned long ulSize, unsigned char ucChannel);
 
#endif /* __DYNAMIC_MALLOC_ALLOWED__*/
 
#ifdef __DYNAMIC_MALLOC_ALLOWED__
extern CPA_EXPORT void * fn_p_vGenAlloc (unsigned long ulSize, unsigned char ucChannel);
extern CPA_EXPORT void fn_vGenFree (void *p_vMmgBlock, unsigned char ucChannel);
extern CPA_EXPORT void * fn_p_vGenRealloc (void *p_vMmgBlock, unsigned long ulSize, unsigned char ucChannel);
#endif /* __DYNAMIC_MALLOC_ALLOWED__*/
 
/* ##F#===================================================================================
NAME :          Mmg_fn_v_ClearLogFile
DESCRIPTION :   Clear the log file C_szMmgLogFileName
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_v_ClearLogFile(void);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_v_PrintInfoMalloc
DESCRIPTION :   Add a string in the log file C_szMmgLogFileName
INPUT :			String to print
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_v_PrintInfoMalloc(char *p_cTxt);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vTestNbFreeIntheCurentMode
DESCRIPTION :   Check the validity of nb frre on a channel(only in debug mode)
INPUT :			Channel Id
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
void Mmg_fn_vTestNbFreeIntheCurentMode(unsigned char ucChannel);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vTestNbFree
DESCRIPTION :   Check the validity of nb free in a static bloc (only in debug mode)
INPUT :			Module Id
				Block Id
				Pointer on a block info structure
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
void Mmg_fn_vTestNbFree(unsigned char ucModuleId, unsigned char ucBlockId, struct tdstBlockInfoPriv_ *p_stBlockInfo);
 
/* ##M#===================================================================================
NAME :          Mmg_fn_vBlockGarbageCollector
DESCRIPTION :   Compatibility maccro using default channel
=========================================================================================
CREATION : 06-11-97/Crepy Pierrick
=======================================================================================*/
#ifdef Modif4Ch
#define Mmg_fn_vBlockGarbageCollector(a, b) Mmg_fn_vBlockGarbageCollector4Ch(a, b, C_ucMmgDefaultChannel)
#endif /* Modif4Ch */
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vBlockGarbageCollector4Ch
DESCRIPTION :   Do a garbage collector on a block, beware all pointer that point into
				the bloc must be pass in parameter (even local pointer in the block)
INPUT :			Table of pointer (point into the block)
				Max Malloc in the block
				Channel Id
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_vBlockGarbageCollector4Ch(void** a_pp_vTab[], unsigned short uwMaxNbMallocInBlock, unsigned char ucChannel);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vBlockGarbageCollector4Ch
DESCRIPTION :   return Block Id & beginning address if found
INPUT :			Pointer on a zone
				pointer to stock the block Id
				pointer to stock the beginning address of the block
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_vWhereIs (void * p_vPtr, unsigned short *p_uwModuleBlockId, void ** pp_vBeginAdr);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_p_vGiveTheBeginingAddress 
DESCRIPTION :   return the beginning address of a block
INPUT :			Block Id
OUTPUT :		address of the block beginning
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void * Mmg_fn_p_vGiveTheBeginingAddress (unsigned short uwModuleBlockId);
 
#ifdef _DEBUG
/* ##F#===================================================================================
NAME :          Mmg_fn_vLockAlloaction
DESCRIPTION :   Allow blocking of all alloc operation
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_vLockAlloaction();
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vUnLockAlloaction
DESCRIPTION :   Allow unblocking of all alloc operation
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_vUnLockAlloaction();
#endif /*_DEBUG*/
 
/* ##F#===================================================================================
NAME :          Mmg_fn_ucGiveChannelId
DESCRIPTION :   Provide a unique channel identificator for a couple (Thraed,group)
				BEWARE : always use the default group
INPUT :			Thraed Id
				Group Id
OUTPUT :		Channel Id
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT unsigned char Mmg_fn_ucGiveChannelId(unsigned long ulThreadId, unsigned char ucGroupId);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vReleaseChannelId
DESCRIPTION :   release a channel previuosly return by Mmg_fn_ucGiveChannelId 
				to re-use this channel later
INPUT :			Channel Id
=========================================================================================
CREATION : 25-11-97/Carlos Torres
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_vReleaseChannelId(unsigned char ucChannelId);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vFirstInitMmgModule 
DESCRIPTION :   Initialization of the Mmg module  MUST be use before using MMG functions
INPUT :			Max number of channel authorized
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_vFirstInitMmgModule (unsigned char ucMAxNbChannel);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_v_InitMmg
DESCRIPTION :   Initialization of Mmg for another module. MUST be done before the module 
				can use MMG functions.
INPUT :			Module Id
				Max static block
				Max dynamic allocation allowed
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_v_InitMmg(unsigned char ucModuleId, unsigned char ucMaxBlocksNb, unsigned long ulMaxNbDynamicMalloc);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vStopMmgModule
DESCRIPTION :   Destroy all ressource allocated by MMG. MUST be use before the end of the program
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_vStopMmgModule();
 
/* ##F#===================================================================================
NAME :          Mmg_fn_v_SetModeAlloc
DESCRIPTION :   Set the mode dynamic or static (choosing a block) for a channel
INPUT :			Module Id
				New Mode
				Channel Id
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_v_SetModeAlloc(unsigned char ucModuleId, unsigned char ucNewMode, unsigned char ucChannel);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_v_InitMmg
DESCRIPTION :   Destroy all ressource allocated for the management of memory for a module
INPUT :			Module Id
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_v_StopMmg(unsigned char ucModuleId);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_v_PrintAllocationsUsedForMmg
DESCRIPTION :   Print statistic concerning the memory used to manage allocation
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_v_PrintAllocationsUsedForMmg();
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vGiveInformationBlock
DESCRIPTION :   Give information data on a block 
					-> address of block beginning
					-> address of block end
					-> address of the first free
					-> the maximum address reached (different of the last address used)
INPUT :			Module Id
				Block ID
				pointer on structure of block info
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_vGiveInformationBlock(unsigned char ucModuleId, unsigned char ucBlockId, struct tdstBlockInfo_ *p_stMyBlockInfo);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_vSaveInformationBlock
DESCRIPTION :   Init a block with the following info structure
					-> address of block beginning
					-> address of block end
					-> address of the first free
					-> the maximum address reached (different of the last address used)
INPUT :			Module Id
				Block ID
				pointer on structure of block info
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_vSaveInformationBlock(unsigned char ucModuleId, unsigned char ucBlockId, struct tdstBlockInfo_ *p_stMyBlockInfo);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_ulSizeOfUsefullMemory 
DESCRIPTION :   return the size of the usefull memory in a block
INPUT :			Module Id
				Block ID
OUTPUT :		size of usefull memory
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT unsigned long Mmg_fn_ulSizeOfUsefullMemory (unsigned char ucModuleId, unsigned char ucBlockId);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_ulmsize
DESCRIPTION :   return the size in byte used for the allocation of a zone
INPUT :			Pointer on the allocated zone
OUTPUT :		Real size of the zone (including the management data)
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT unsigned long Mmg_fn_ulmsize(void *p_vMemBlock);
 
#ifdef __ERROR_STRINGS__
/* ##F#===================================================================================
NAME :          Mmg_fn_v_UpdateLastErrorWithModuleId
DESCRIPTION :   raise an error using module Id
INPUT :			Module Id
				Error to raise
				Message to display
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_v_UpdateLastErrorWithModuleId(unsigned char ucModuleId,unsigned short uwMyErr, char *szPersonalTxt);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_v_UpdateLastErrorWithCurrentModeInfo
DESCRIPTION :   raise an error using channel
INPUT :			Error to raise
				Message to display
				Channel Id
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_v_UpdateLastErrorWithCurrentModeInfo(unsigned short uwMyErr,char * szPersonalTxt,unsigned char ucChannel);
 
/* ##F#===================================================================================
NAME :          Mmg_fn_v_UpdateLastErrorWithModuleIdAnducModeReference
DESCRIPTION :   raise an error using module id and allocation mode
INPUT :			Module Id
				Allocation Mode
				Error to raise
				Message to display
=========================================================================================
CREATION : 06-11-97/Pierrick Crepy
=======================================================================================*/
extern CPA_EXPORT void Mmg_fn_v_UpdateLastErrorWithModuleIdAnducModeReference(unsigned char ucModuleId, unsigned char ucMode, unsigned short uwMyErr, char *szPersonalTxt);
 
extern CPA_EXPORT void Mmg_fn_v_UpdateLastErrorWithCallingRefAndCurrentModeInfo(unsigned short uwMyErr, char *szThePersonalTxt, unsigned char ucChannel);
#endif /*__ERROR_STRINGS__*/
 
 
/*/////////////////////////////////////////////////////////*/
/* FQ OVR*/
/*/////////////////////////////////////////////////////////*/
/**/
/* Using unused code to malloc in :-)*/
/**/
/*/////////////////////////////////////////////////////////*/
 
#ifdef U64
 
#ifndef _FIRE_DEADCODE_U64_ /* Added by XB */
void MMG_fn_vReinit_FreeMemoryBlocks(void);
void MMG_fn_vAddFreeMemoryBlock(void *StartingAddress, unsigned int uiSize);
void *MMG_fn_p_vMallocInHoles(unsigned int uiSize); /* YOU MUST TEST FOR NULL RETURN !!*/
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by XB */
#endif /* U64*/
 
/* END FQ OVR*/
/*/////////////////////////////////////////////////////////*/
 
 
 
#ifdef __cplusplus
};
#endif /* __cplusplus */
 
#endif /*__CpaMmg_H__*/
