62#define UMM_MALLOC_CFG_HEAP_SIZE default_umm_heap_size
63#define UMM_MALLOC_CFG_HEAP_ADDR default_umm_heap
67#define DBGLOG_DEBUG(format, ...) do { } while (0)
68#define DBGLOG_TRACE(froamt, ...) do { } while (0)
70#define UMM_CRITICAL_ENTRY()
71#define UMM_CRITICAL_EXIT()
94#define UMM_FREELIST_MASK (0x80000000)
95#define UMM_BLOCKNO_MASK (0x7FFFFFFF)
102#define UMM_NUMBLOCKS (umm_numblocks)
106#define UMM_BLOCK(b) (umm_heap[b])
108#define UMM_NBLOCK(b) (UMM_BLOCK(b).header.used.next)
109#define UMM_PBLOCK(b) (UMM_BLOCK(b).header.used.prev)
110#define UMM_NFREE(b) (UMM_BLOCK(b).body.free.next)
111#define UMM_PFREE(b) (UMM_BLOCK(b).body.free.prev)
112#define UMM_DATA(b) (UMM_BLOCK(b).body.data)
151 UINT32 new_freemask ) {
186 DBGLOG_DEBUG(
"Assimilate up to next block, which is FREE\n" );
227 CONST UINT32 block_0th = 0;
229 CONST UINT32 block_1th = 1;
293 UINT8 *cptr = (UINT8 *)ptr;
301 if( (VOID *)0 == ptr ) {
338 DBGLOG_DEBUG(
"Assimilate down to next block, which is FREE\n" );
367 UINT32 blockSize = 0;
386 DBGLOG_DEBUG(
"malloc a block of 0 bytes -> do nothing\n" );
388 return( (VOID *)NULL );
407 bestSize = 0x7FFFFFFF;
412 DBGLOG_TRACE(
"Looking at block %6i size %6i\n", cf, blockSize );
414#if defined UMM_BEST_FIT
415 if( (blockSize >= blocks) && (blockSize < bestSize) ) {
417 bestSize = blockSize;
419#elif defined UMM_FIRST_FIT
421 if( (blockSize >= blocks) )
424# error "No UMM_*_FIT is defined - check umm_malloc_cfg.h"
430 if( 0x7FFFFFFF != bestSize ) {
432 blockSize = bestSize;
443 if( blockSize == blocks ) {
445 DBGLOG_DEBUG(
"Allocating %6i blocks starting at %6i - exact\n", blocks, cf );
453 DBGLOG_DEBUG(
"Allocating %6i blocks starting at %6i - existing\n", blocks, cf );
484 return( (VOID *)NULL );
#define DBGLOG_DEBUG(format,...)
BOOLEAN UmmFree(VOID *ptr)
#define UMM_FREELIST_MASK
STATIC VOID umm_assimilate_up(UINT32 c)
#define UMM_CRITICAL_ENTRY()
STATIC UINT8 * default_umm_heap
STATIC UINT32 umm_blocks(UINT32 size)
struct umm_block_t umm_block
#define UMM_MALLOC_CFG_HEAP_ADDR
VOID UmmSetHeap(VOID *heap, UINT32 size)
#define UMM_CRITICAL_EXIT()
STATIC UINT32 umm_assimilate_down(UINT32 c, UINT32 freemask)
#define UMM_MALLOC_CFG_HEAP_SIZE
STATIC VOID umm_split_block(UINT32 c, UINT32 blocks, UINT32 new_freemask)
#define DBGLOG_TRACE(froamt,...)
STATIC VOID umm_disconnect_from_free_list(UINT32 c)
STATIC UINT32 default_umm_heap_size
VOID * UmmMalloc(UINT32 size)
BOOLEAN UmmInitialized(VOID)
union umm_block_t::@96 header
union umm_block_t::@97 body