bb8f488a30c53b7259834d11bb6a01ba0860bd69
[monolithium.git] / kernel / include / heap.h
1 /*
2  * heap.h
3  *
4  * Copyright (C) 2013 Aleksandar Andrejevic <theflash@sdf.lonestar.org>
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Affero General Public License as
8  * published by the Free Software Foundation, either version 3 of the
9  * License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU Affero General Public License for more details.
15  *
16  * You should have received a copy of the GNU Affero General Public License
17  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #ifndef _HEAP_H_
21 #define _HEAP_H_
22
23 #include <common.h>
24 #include <lock.h>
25 #include <crt/include/malloc.h>
26
27 #define SYSTEM_HEAP_START    0x90000000
28 #define SYSTEM_HEAP_END      (EVICTABLE_HEAP_START - 1)
29 #define EVICTABLE_HEAP_START 0xA0000000
30 #define EVICTABLE_HEAP_END   KERNEL_POOL_END
31
32 #define SYSTEM_HEAP_MAGIC    0x74737953 // Syst
33 #define EVICTABLE_HEAP_MAGIC 0x63697645 // Evic
34
35 #define HEAP_ZEROFILL  (1 << 0)
36 #define HEAP_EVICTABLE (1 << 1)
37
38 typedef struct _heap_header_t
39 {
40     dword_t length;
41     bool_t free;
42     dword_t magic;
43 } heap_header_t;
44
45 typedef struct
46 {
47     __crt_heap_t crt;
48     lock_t lock;
49 } heap_t;
50
51 extern heap_t system_heap;
52 extern heap_t evictable_heap;
53
54 void *heap_alloc(heap_t *heap, uintptr_t size);
55 void heap_free(heap_t *heap, void *ptr);
56 void *heap_realloc(heap_t *heap, void *ptr, uintptr_t size);
57 dword_t heap_create(heap_t *heap, uintptr_t start, uintptr_t end, dword_t flags, dword_t magic);
58 dword_t heap_destroy(heap_t *heap);
59 void heap_init(void);
60
61 #endif