X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=3sys;a=blobdiff_plain;f=sys1%2Fkern%2Fsrc%2Fmem.c;fp=sys1%2Fkern%2Fsrc%2Fmem.c;h=b801a7dd5f828fd10697c8fcc551210f084b2c94;hp=92d6de9307b4177c29fde5f192ffb0ea6b9bae4f;hb=e05574a9511e724651361905620f96666c7acb04;hpb=aac04321fda4094e8623a10ed39d2916ada40ccf diff --git a/sys1/kern/src/mem.c b/sys1/kern/src/mem.c index 92d6de9..b801a7d 100644 --- a/sys1/kern/src/mem.c +++ b/sys1/kern/src/mem.c @@ -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); }