Boot framework rework (#45)
[lunaix-os.git] / lunaix-os / includes / lunaix / sections.h
diff --git a/lunaix-os/includes/lunaix/sections.h b/lunaix-os/includes/lunaix/sections.h
new file mode 100644 (file)
index 0000000..3182825
--- /dev/null
@@ -0,0 +1,56 @@
+#ifndef __LUNAIX_SECTIONS_H
+#define __LUNAIX_SECTIONS_H
+
+#include <lunaix/types.h>
+
+#define __mark_name(n, s)   __##n##_##s
+#define __section_mark(name, suffix)    \
+    ({ extern unsigned long __mark_name(name,suffix)[]; \
+       __ptr(__mark_name(name,suffix)); })
+
+
+/*  Auto-generated data  */
+
+#define extern_autogen(name)                                         \
+            weak unsigned long __mark_name(autogen,name)[] = {};     \
+            extern unsigned long __mark_name(autogen,name)[];
+
+#define autogen_name(name)  __mark_name(autogen,name)
+
+#define autogen(type, name)     \
+            ((type*)__mark_name(autogen,name))
+
+
+/*  Common section definitions  */
+
+#define reclaimable         __section(".bss.reclaim")
+#define reclaimable_start   __section_mark(bssreclaim, start)
+#define reclaimable_end     __section_mark(bssreclaim, end)
+
+#define kernel_start        __section_mark(kexec, start)
+#define kernel_load_end     __section_mark(kexec, end)
+#define kernel_end          __section_mark(kimg, end)
+
+#ifdef CONFIG_USE_DEVICETREE
+#define dtb_start           __section_mark(dtb, start)
+#endif
+
+
+/*  kernel section mapping info  */
+
+struct ksection
+{
+    ptr_t va;
+    ptr_t pa;
+    unsigned int size;
+    unsigned int flags;
+} align(4);
+
+struct ksecmap
+{
+    unsigned int num;
+    unsigned int ksize;
+    struct ksection secs[0];
+} align(4);
+
+#endif /* __LUNAIX_SECTIONS_H */