#include "allocator.h"
#include <stdio.h>
#include <string.h>
static page_t *free_lists[MAX_ORDER + 1];
void buddy_init(void *memory_pool, size_t pool_size) {
memset(free_lists, 0, sizeof(free_lists));
printf("[Kernel Allocator] Initialized with %zu bytes at %p\n", pool_size, memory_pool);
}
page_t *buddy_alloc_pages(uint32_t order) {
if (order > MAX_ORDER) return NULL;
for (uint32_t current_order = order; current_order <= MAX_ORDER; current_order++) {
if (free_lists[current_order] != NULL) {
page_t *allocated = free_lists[current_order];
free_lists[current_order] = allocated->next;
// Split buddy blocks down to target order
while (current_order > order) {
current_order--;
page_t *buddy = allocated + (1 << current_order);
buddy->order = current_order;
buddy->next = free_lists[current_order];
free_lists[current_order] = buddy;
}
allocated->order = order;
return allocated;
}
}
return NULL;
}