summaryrefslogtreecommitdiff
path: root/src/kernel/mem/heap.std.h
blob: 20185086b38257b7140272a94e59ad8bd60223d6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#ifndef DEF_HEAP_H
#define DEF_HEAP_H

/*	The heap is the data structure that permits allocating and freeing memory easily.
	The functions in this file are only used by mem.c, which provides kmalloc and kfree.
	The heap algorithm used is based on the one described here : 
	http://www.jamesmolloy.co.uk/tutorial_html/7.-The%20Heap.html */

#include <types.h>

struct heap_header {
	uint32_t magic;
	uint32_t is_hole;
	size_t size;
};

struct heap_footer {
	uint32_t magic;
	struct heap_header *header;
};

struct heap {
	struct heap_header **idx;
	uint32_t idxused;
	size_t start_addr, end_addr, max_end;
};

void heap_create(struct heap *heap, size_t start, size_t idxsize, size_t datasize, size_t maxdatasize);
void* heap_alloc(struct heap *heap, size_t sz);
void heap_free(struct heap *heap, void* ptr);

#endif