X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/9406e904ddad5db2ba2dd550e21bbb224899fd79..12293ed1d71cd306ed9a5d021a79ba945fe4e680:/lunaix-os/includes/lunaix/mm/dmm.h diff --git a/lunaix-os/includes/lunaix/mm/dmm.h b/lunaix-os/includes/lunaix/mm/dmm.h index e8c3b6f..0a79cdc 100644 --- a/lunaix-os/includes/lunaix/mm/dmm.h +++ b/lunaix-os/includes/lunaix/mm/dmm.h @@ -2,22 +2,48 @@ #define __LUNAIX_DMM_H // Dynamic Memory (i.e., heap) Manager +#include +#include #include +#define M_ALLOCATED 0x1 +#define M_PREV_FREE 0x2 + +#define M_NOT_ALLOCATED 0x0 +#define M_PREV_ALLOCATED 0x0 + +#define CHUNK_S(header) ((header) & ~0x3) +#define CHUNK_PF(header) ((header)&M_PREV_FREE) +#define CHUNK_A(header) ((header)&M_ALLOCATED) + +#define PACK(size, flags) (((size) & ~0x3) | (flags)) + +#define SW(p, w) (*((uint32_t*)(p)) = w) +#define LW(p) (*((uint32_t*)(p))) + +#define HPTR(bp) ((uint32_t*)(bp)-1) +#define BPTR(bp) ((uint8_t*)(bp) + WSIZE) +#define FPTR(hp, size) ((uint32_t*)(hp + size - WSIZE)) +#define NEXT_CHK(hp) ((uint8_t*)(hp) + CHUNK_S(LW(hp))) + +#define BOUNDARY 4 +#define WSIZE 4 + #define HEAP_INIT_SIZE 4096 int -dmm_init(); +dmm_init(heap_context_t* heap); int -lxsbrk(void* addr); +lxbrk(heap_context_t* heap, void* addr, int user); + void* -lxbrk(size_t size); +lxsbrk(heap_context_t* heap, size_t size, int user); void* -lx_malloc(size_t size); +lx_malloc_internal(heap_context_t* heap, size_t size); void -lx_free(void* ptr); +lx_free_internal(void* ptr); #endif /* __LUNAIX_DMM_H */