selectors, descriptors, more interrupt init
[3sys] / sys1 / kern / src / mem.c
index 92d6de9..b801a7d 100644 (file)
@@ -3,19 +3,21 @@
 
 void set_gdt(void *addr, uint16_t limit);
 
-enum {
-       SEG_KCODE       = 1,
-       SEG_KDATA       = 2
-};
-
-#define NUM_SEG                3
+#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);
+       desc_seg(gdt + SEL_KCODE, SEG_CODE, 0, 0xffffffff, 0);
+       desc_seg(gdt + SEL_KDATA, SEG_DATA, 0, 0xffffffff, 0);
 
        set_gdt(gdt, sizeof gdt - 1);
+
+       setup_selectors(selector(SEL_KCODE, 0), selector(SEL_KDATA, 0));
+}
+
+uint16_t selector(int idx, int rpl)
+{
+       return (idx << 3) | (rpl & 3);
 }