#define FOOLOS_MODULE_NAME "kmalloc" #include "kmalloc.h" #include "kernel/config.h" #include "lib/logger/log.h" static uint8_t data[KMALLOC_MEM_SIZE]; // bytes static uint32_t next; static uint32_t first; static uint8_t init=0; // will be initialized on first call to kballoc() // static void kmallocinit() { next=&(data[0]); first=next; //TODO: optionally tell gcc to align this itself. if(next%4096) { next+=4096; next/=4096; next*=4096; } // log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"kmalloc_init: 0x%08X",next); init=1; } // kernel block memory allocation // uint32_t kballoc(uint32_t size) { size*=4096; if(!init)kmallocinit(); uint32_t old=next; next+=size; if(next>=first+KMALLOC_MEM_SIZE) { panic(FOOLOS_MODULE_NAME,"kballoc ran out of memory! maybe increase KMALLOC_MEM_SIZE in kmalloc.c?"); } log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"(%d) : 0x%08X (~%dKB left)",size,old,(KMALLOC_MEM_SIZE-next+first)/1024); return old; } //TODO: allow freeing memory!! uint32_t kbfree(uint32_t pos) { panic(FOOLOS_MODULE_NAME,"kbfree NOT IMPLEMENTED YET"); }