add basic exception model and context switching for aarch64
[lunaix-os.git] / lunaix-os / includes / lunaix / sections.h
1 #ifndef __LUNAIX_SECTIONS_H
2 #define __LUNAIX_SECTIONS_H
3
4 #include <lunaix/types.h>
5
6 #define __mark_name(n, s)   __##n##_##s
7 #define __section_mark(name, suffix)    \
8     ({ extern unsigned long __mark_name(name,suffix)[]; \
9        __ptr(__mark_name(name,suffix)); })
10
11
12 /*  Auto-generated data  */
13
14 #define extern_autogen(name)                                         \
15             weak unsigned long __mark_name(autogen,name)[] = {};     \
16             extern unsigned long __mark_name(autogen,name)[];
17
18 #define autogen_name(name)  __mark_name(autogen,name)
19
20 #define autogen(type, name)     \
21             ((type*)__mark_name(autogen,name))
22
23
24 /*  Common section definitions  */
25
26 #define reclaimable         __section(".bss.reclaim")
27 #define reclaimable_start   __section_mark(bssreclaim, start)
28 #define reclaimable_end     __section_mark(bssreclaim, end)
29
30 #define boot_start          __section_mark(kboot, start)
31 #define boot_end            __section_mark(kboot, end)
32
33 #define kernel_start        __section_mark(kexec, start)
34 #define kernel_load_end     __section_mark(kexec, end)
35 #define kernel_end          __section_mark(kimg, end)
36
37 #ifdef CONFIG_USE_DEVICETREE
38 #define dtb_start           __section_mark(dtb, start)
39 #endif
40
41
42 /*  kernel section mapping info  */
43
44 struct ksection
45 {
46     ptr_t va;
47     ptr_t pa;
48     unsigned int size;
49     unsigned int flags;
50 } align(4);
51
52 struct ksecmap
53 {
54     unsigned int num;
55     unsigned int ksize;
56     struct ksection secs[0];
57 } align(4);
58
59 #endif /* __LUNAIX_SECTIONS_H */