physical page list mapping
[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 bootsec_start       __section_mark(kboot, start)
31 #define bootsec_end         __section_mark(kboot, end)
32
33 #define kernel_start        __section_mark(kexec, start)
34 #define kernel_load_start   __section_mark(kload, start)
35 #define kernel_load_end     __section_mark(kload, end)
36 #define kernel_end          __section_mark(kimg, end)
37
38 #ifdef CONFIG_USE_DEVICETREE
39 #define dtb_start           __section_mark(dtb, start)
40 #endif
41
42
43 /*  kernel section mapping info  */
44
45 struct ksection
46 {
47     ptr_t va;
48     ptr_t pa;
49     unsigned int size;
50     unsigned int flags;
51 } align(4);
52
53 struct ksecmap
54 {
55     unsigned int num;
56     unsigned int ksize;
57     struct ksection secs[0];
58 } align(4);
59
60 #endif /* __LUNAIX_SECTIONS_H */