aboutsummaryrefslogtreecommitdiff
path: root/memory.h
blob: 1c9ae358985c992024d56e1581987fd2de72b490 (plain)
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
43
44
45
46
47
48
49
#ifndef MEMORY_H
#define MEMORY_H

#include "paging.h"

#define SECTION_SIZE (((uint32_t) 1) << 20)

#define INTERRUPT_VECTOR_TABLE_START ((uint32_t) 0x0)

#define STACK_START ((uint32_t) 0x4000)
#define STACK_END   ((uint32_t) 0x8000)

extern const char __end;
extern const char __start;

#define KERNEL_START ((uint32_t) &__start)
#define KERNEL_END   ((uint32_t) &__end)

// first 2^14 aligned address after the kernel
#define TRANSLATION_TABLE_BASE						\
  (((KERNEL_END - (uint32_t) 1) & ~((uint32_t) 0x3fff))			\
   + (uint32_t) 0x4000)

#define TRANSLATION_TABLE_END				\
  (TRANSLATION_TABLE_BASE + (uint32_t) (4096 * 4))

#define LIBKERNEL_SECTION_START					\
  (((TRANSLATION_TABLE_END - (uint32_t) 1) & ~((uint32_t) 0xfffff))	\
   + SECTION_SIZE)

#define LIBKERNEL_SECTION_END			\
  (LIBKERNEL_SECTION_START + SECTION_SIZE)

// section for libkernel is flat-mapped
#define LIBKERNEL_SECTION_NUMBER (LIBKERNEL_SECTION_START >> 20)

#define PRIVILEGED_MEMORY_END LIBKERNEL_SECTION_END

#define UNPRIVILEGED_MEMORY_START PRIVILEGED_MEMORY_END
#define UNPRIVILEGED_MEMORY_END			\
  (UNPRIVILEGED_MEMORY_START + SECTION_SIZE)

#define PL0_SECTION_NUMBER     ((uint32_t) 0b101010101010)
#define PL0_SECTION_NUMBER_STR "0b101010101010"

#define VIRTUAL_PL0_MEMORY_START (PL0_SECTION_NUMBER << 20)

#endif // MEMORY_H