fix dependency check logic cause config always disabled
[lunaix-os.git] / lunaix-os / arch / x86 / boot / i386 / kremap32.c
1 #define __BOOT_CODE__
2
3 #include <asm/boot_stage.h>
4 #include <asm/mm_defs.h>
5 #include <asm-generic/init_pagetable.h>
6
7 // define the initial page table layout
8 struct kernel_map 
9 {
10     struct {
11         pte_t _lft[_PAGE_LEVEL_SIZE];
12     } kernel_lfts[16];
13 } align(4);
14
15 static struct kernel_map kernel_pt __section(".kpg");
16 export_symbol(debug, boot, kernel_pt);
17
18 static ptr_t boot_text
19 do_remap()
20 {
21     struct pt_alloc alloc;
22     struct ptw_state ptw;
23     pte_t pte;
24
25     init_pt_alloc(&alloc, to_kphysical(&kernel_pt), sizeof(kernel_pt));
26     init_ptw_state(&ptw, &alloc, kpt_alloc_table(&alloc));
27
28     pte = pte_mkhuge(mkpte_prot(KERNEL_DATA));
29     kpt_set_ptes(&ptw, 0, pte, L0T_SIZE, 1);
30
31     kpt_mktable_at(&ptw, KMAP, L0T_SIZE);
32     kpt_mktable_at(&ptw, VMAP, L0T_SIZE);
33
34     kpt_migrate_highmem(&ptw);
35
36     pte = mkpte(__ptr(ptw.root), KERNEL_PGTAB);
37     kpt_set_ptes(&ptw, VMS_SELF, pte, L0T_SIZE, 1);
38
39     return __ptr(ptw.root);
40 }
41
42 ptr_t boot_text
43 remap_kernel()
44 {
45     ptr_t kmap_pa = to_kphysical(&kernel_pt);
46     for (size_t i = 0; i < sizeof(kernel_pt); i++) {
47         ((u8_t*)kmap_pa)[i] = 0;
48     }
49
50     return do_remap();
51 }