Newer
Older
ubixos-old / src / sys / mm / kmalloc.c
#include <mm/vmm.h>
#include <ubixos/types.h>
#include <ubixos/kpanic.h>
#include <ubixos/sched.h>

void *kmalloc(size_t size)
{
	mMap *tmp, *tmp2;
	double pages, p;
	uInt32 retAddr;

	if(size <= 0)
		kpanic("kmalloc: trying to allocate zero sized page\n");

	pages = size / 4096.0;
	tmp2 = NULL;

	for(p = 1.0 ; p < pages ; p += 1.0)
	{
		if(tmp2 != NULL)
			tmp->Link = (mMap *)tmp2;
		tmp = (mMap *)mmGetFreeVirtualPage(_current);
		if(tmp == NULL)
			kpanic("kmalloc: out of memory\n");
		if(tmp2 == NULL)
			retAddr = tmp->pageAddr;
		tmp2 = tmp;
	}
	return (void *)retAddr;
}