-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmem.h
42 lines (31 loc) · 997 Bytes
/
mem.h
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
33
34
35
36
37
38
39
40
41
42
#ifndef MEM_H
#define MEM_H
#include "types.h"
// Access permission flags (first: privileged, second: user)
#define SECT_RW_NO 0<<15 | 1<<10
#define SECT_RW_RO 0<<15 | 2<<10
#define SECT_RW_RW 0<<15 | 3<<10
#define SECT_RO_NO 1<<15 | 1<<10
#define SECT_RO_RO 1<<15 | 2<<10
#define PAGE_RW_NO 0<<9 | 1<<4
#define PAGE_RW_RO 0<<9 | 2<<4
#define PAGE_RW_RW 0<<9 | 3<<4
#define PAGE_RO_NO 1<<9 | 1<<4
#define PAGE_RO_RO 1<<9 | 2<<4
// Disable execution
#define SECT_XN 1<<4
#define PAGE_XN 1<<0
// kmalloc flags
#define KMALLOC_CONT 1 // contiguous physical memory
struct kheap_chunk {
size_t prev_size;
size_t size; // -1 for wilderness chunk, bit 0 high if free
struct kheap_chunk *next_free;
};
void mem_init();
void *kmalloc(size_t bytes, unsigned int flags);
void *alloc_phy_pages(size_t num);
void *virt_to_phy(void *va);
void map_section(unsigned int phy, unsigned int virt, unsigned int flags);
int map_page(unsigned int phy, unsigned int virt, unsigned int flags);
#endif