gdt
[3sys] / sys1 / kern / src / mem.c
diff --git a/sys1/kern/src/mem.c b/sys1/kern/src/mem.c
new file mode 100644 (file)
index 0000000..898ef3f
--- /dev/null
@@ -0,0 +1,22 @@
+#include "mem.h"
+#include "desc.h"
+
+void set_gdt(void *addr, uint16_t limit);
+
+enum {
+       SEG_NULL        = 0,
+       SEG_KCODE       = 1,
+       SEG_KDATA       = 2
+};
+
+#define NUM_SEG                3
+static struct desc gdt[NUM_SEG] __attribute__((aligned(8)));
+
+void mem_init(void)
+{
+       desc_seg(gdt, SEG_NULL, 0, 0, 0);
+       desc_seg(gdt + SEG_KCODE, SEG_CODE, 0, 0xffffffff, 0);
+       desc_seg(gdt + SEG_KDATA, SEG_DATA, 0, 0xffffffff, 0);
+
+       set_gdt(gdt, sizeof gdt - 1);
+}