X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/47c4e0c19ae8526b14ce4e0d7b243f7a4dc6fafd..bffa3430fbbaaad29bec0b5bee9c1f0bfc7fd068:/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 index 0000000..3182825 --- /dev/null +++ b/lunaix-os/includes/lunaix/sections.h @@ -0,0 +1,56 @@ +#ifndef __LUNAIX_SECTIONS_H +#define __LUNAIX_SECTIONS_H + +#include + +#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 */