898ef3f8a6ae31d0ff80e69cb997a268e13937ba
[3sys] / sys1 / kern / src / mem.c
1 #include "mem.h"
2 #include "desc.h"
3
4 void set_gdt(void *addr, uint16_t limit);
5
6 enum {
7         SEG_NULL        = 0,
8         SEG_KCODE       = 1,
9         SEG_KDATA       = 2
10 };
11
12 #define NUM_SEG         3
13 static struct desc gdt[NUM_SEG] __attribute__((aligned(8)));
14
15 void mem_init(void)
16 {
17         desc_seg(gdt, SEG_NULL, 0, 0, 0);
18         desc_seg(gdt + SEG_KCODE, SEG_CODE, 0, 0xffffffff, 0);
19         desc_seg(gdt + SEG_KDATA, SEG_DATA, 0, 0xffffffff, 0);
20
21         set_gdt(gdt, sizeof gdt - 1);
22 }