diff options
| author | Loic Guegan <manzerbredes@mailbox.org> | 2021-04-28 15:07:12 +0200 |
|---|---|---|
| committer | Loic Guegan <manzerbredes@mailbox.org> | 2021-04-28 15:07:12 +0200 |
| commit | 067d6e340be698b0e26b7732215a1969e0e683f3 (patch) | |
| tree | 88cf82e14bdcfc460a18980a73e419fbb0c58763 | |
| parent | 778e43c0a2d1f1cc952c3ec0c0b9d5bd3ff4995a (diff) | |
Refactoring
| -rw-r--r-- | src/boot/multiboot2.cc | 3 | ||||
| -rw-r--r-- | src/boot/trampoline.cc | 4 | ||||
| -rw-r--r-- | src/boucane.cc | 32 | ||||
| -rw-r--r-- | src/core/paging.cc | 10 | ||||
| -rw-r--r-- | src/core/paging.hpp | 13 | ||||
| -rw-r--r-- | src/drivers/framebuffer.cc | 2 | ||||
| -rw-r--r-- | src/drivers/psf.cc | 1 | ||||
| -rw-r--r-- | src/include/boucane.hpp | 14 | ||||
| -rw-r--r-- | src/libs/string.cc | 3 |
9 files changed, 45 insertions, 37 deletions
diff --git a/src/boot/multiboot2.cc b/src/boot/multiboot2.cc index 532012e..bac1adb 100644 --- a/src/boot/multiboot2.cc +++ b/src/boot/multiboot2.cc @@ -5,7 +5,7 @@ u32* mb2_find_tag(u32 *mb2_info_addr, char type){ PAGING_MAP(mb2_info_addr); - u32 size=(u32)mb2_info_addr[0]; + u32 size=(u32)mb2_info_addr[0]; // Todo: check for size for(u64 i=0;i<size/8;i++) PAGING_MAP(mb2_info_addr+i*4096); @@ -38,6 +38,7 @@ char mb2_find_bootloader_name(u32* mb2_info_addr, char *return_name){ } return 0; } + char mb2_find_new_rsdp(u32* mb2_info_addr, u64 *return_addr, u32 *return_size){ u32* addr=mb2_find_tag(mb2_info_addr,15); if(addr){ diff --git a/src/boot/trampoline.cc b/src/boot/trampoline.cc index a75b472..68bc349 100644 --- a/src/boot/trampoline.cc +++ b/src/boot/trampoline.cc @@ -90,10 +90,6 @@ extern "C" u8* trampoline(u8* mb_infos_addr){ for(u64 i=0;i<=0x1000000;i+=4096){ trampoline_paging_allocate_addr(pml4,i,i,0x3); } - // Test - for(u64 i=0xe0000000;i<=0xef000000;i+=4096){ - trampoline_paging_allocate_addr(pml4,i,i,0x3); - } // Load new pml4 asm volatile( diff --git a/src/boucane.cc b/src/boucane.cc index 1e58d65..b298e8a 100644 --- a/src/boucane.cc +++ b/src/boucane.cc @@ -1,24 +1,30 @@ #include "boucane.hpp" #include "core/idt.hpp" #include "boot/multiboot2.hpp" -#include "core/paging.hpp" -#include "core/apic.hpp" -#include "drivers/acpi.hpp" -#include "drivers/psf.hpp" #include "drivers/framebuffer.hpp" -#include "libs/stdio.hpp" -#include "core/asm.hpp" +#include "drivers/psf.hpp" +#include "libs/string.hpp" -u64 kernel_vma,stack_pma,userspace_pma; +u64 kvar_kernel_vma; +u64 kvar_stack_pma; +u64 kvar_userspace_pma; +u64 kvar_bss_start; +u64 kvar_bss_end; +u64 kvar_terminus_psf_start; +u64 kvar_terminus_psf_end; extern "C" void boucane(u64 mb_info){ // Init linker variables - asm volatile ("movq $__kernel_vma, %0":"=m"(kernel_vma)); - asm volatile ("movq $__userspace_pma, %0":"=m"(userspace_pma)); - asm volatile ("movq $__stack_pma, %0":"=m"(stack_pma)); - asm volatile ("call load_gdt"); + asm volatile ("movq $__kernel_vma, %0":"=m"(kvar_kernel_vma)); + asm volatile ("movq $__userspace_pma, %0":"=m"(kvar_userspace_pma)); + asm volatile ("movq $__stack_pma, %0":"=m"(kvar_stack_pma)); + asm volatile ("movq $__bss_start, %0":"=m"(kvar_bss_start)); + asm volatile ("movq $__bss_end, %0":"=m"(kvar_bss_end)); + asm volatile ("movq $res_binary_res_terminus_psf_start, %0":"=m"(kvar_terminus_psf_start)); + asm volatile ("movq $res_binary_res_terminus_psf_end, %0":"=m"(kvar_terminus_psf_end)); // Init data structures + asm volatile ("call load_gdt"); paging_enable(); idt_enable_interrupt(); @@ -26,7 +32,6 @@ extern "C" void boucane(u64 mb_info){ vga_t_init(); vga_t_clear(); FRAMEBUFFER fb_info; - if(mb2_find_framebuffer((u32*)mb_info, &fb_info)){ if(fb_info.bpp>16){ FB_CFG conf; @@ -36,7 +41,7 @@ extern "C" void boucane(u64 mb_info){ conf.width=fb_info.width; conf.height=fb_info.height; framebuffer_init(conf); - psf_init((void*)&res_binary_res_terminus_psf_start); + psf_init((void*)kvar_terminus_psf_start); __putchar=psf_putchar; } } @@ -44,6 +49,5 @@ extern "C" void boucane(u64 mb_info){ // Booting! printk("Booting Boucane v%d.%d.%d\n",VERSION_MAJOR,VERSION_MINOR, VERSION_PATH); - while(1); }
\ No newline at end of file diff --git a/src/core/paging.cc b/src/core/paging.cc index da442bf..ae390ff 100644 --- a/src/core/paging.cc +++ b/src/core/paging.cc @@ -9,7 +9,7 @@ int kpages_next=1; // First page is for the pml4 u64* paging_allocate_table(){ u64 addr=(u64)kpages[kpages_next]; - u64* allocated=(u64*)(addr-kernel_vma); + u64* allocated=(u64*)(addr-kvar_kernel_vma); kpages_next++; return allocated; } @@ -29,17 +29,17 @@ void paging_enable() { // Allocate paging for the kernel (to not override the source // code during the next paging_allocate_table() calls) - paging_allocate_contiguous(userspace_pma/4096); + paging_allocate_contiguous(kvar_userspace_pma/4096); // Setting up new kernel address space for(u64 i=0;i<=0x10000000;i+=4096){ - paging_allocate_addr(kpages[0],kernel_vma+i,i, 0x3,0); // Identity map + paging_allocate_addr(kpages[0],kvar_kernel_vma+i,i, 0x3,0); // Identity map } // 4096 bytes stack - paging_allocate_addr(kpages[0],kernel_vma-4096,stack_pma,0x3,0); + paging_allocate_addr(kpages[0],kvar_kernel_vma-4096,kvar_stack_pma,0x3,0); // Load new pml4 - u64 kpage_phy=((u64)kpages[0]-kernel_vma); + u64 kpage_phy=((u64)kpages[0]-kvar_kernel_vma); asm volatile( "mov %0, %%rax \n\t" "mov %%rax, %%cr3 \n\t" diff --git a/src/core/paging.hpp b/src/core/paging.hpp index 01e45a7..5817765 100644 --- a/src/core/paging.hpp +++ b/src/core/paging.hpp @@ -2,6 +2,7 @@ #include "core/types.hpp" +#define MAX_TABLES 280 #define PAGING_MAX_PAGE (20*512) /** * Current number of page (from the beginning of the ram) used by the kernel that @@ -18,15 +19,17 @@ /// @brief Get page address that contain addr #define PAGE(addr) (addr&(~(0xFFF))) -#define PAGING_MAP(addr) paging_allocate_addr(kpages[0],(u64)(addr),(u64)(addr),PAGING_OPT_P|PAGING_OPT_RW,kernel_vma) -#define MAX_TABLES 280 +#define PAGING_MAP(addr) paging_allocate_addr(kpages[0],(u64)(addr),(u64)(addr),PAGING_OPT_P|PAGING_OPT_RW,kvar_kernel_vma) +#define PAGING_MAP_RANGE(addr, n) { \ + for(u64 i=0;i<(n);i++){ \ + paging_allocate_addr(kpages[0],((u64)(addr))+i,((u64)(addr))+i,PAGING_OPT_P|PAGING_OPT_RW,kvar_kernel_vma); \ +}} /// @brief All PAE table structures are allocated here extern u64 kpages[MAX_TABLES][512]; -/// cf boucane.hpp -extern u64 kernel_vma,stack_pma,userspace_pma; - +/// CF boucane.hpp +extern u64 kvar_kernel_vma,kvar_stack_pma,kvar_userspace_pma; /** * Setup and enable PAE paging diff --git a/src/drivers/framebuffer.cc b/src/drivers/framebuffer.cc index 2ac47db..4d5389c 100644 --- a/src/drivers/framebuffer.cc +++ b/src/drivers/framebuffer.cc @@ -7,11 +7,11 @@ FB_CFG fb_cfg; void framebuffer_init(FB_CFG config){ fb_cfg=config; + PAGING_MAP_RANGE(fb_cfg.location, fb_cfg.pitch*fb_cfg.height); } void framebuffer_draw(FB_PIXEL p){ u8 *pixel=(u8*)(fb_cfg.location+p.x*(fb_cfg.depth/8)+p.y*fb_cfg.pitch); - PAGING_MAP(pixel); pixel[0]=p.r; pixel[1]=p.g; pixel[2]=p.b; diff --git a/src/drivers/psf.cc b/src/drivers/psf.cc index 187d711..ce838e8 100644 --- a/src/drivers/psf.cc +++ b/src/drivers/psf.cc @@ -38,7 +38,6 @@ void psf_putchar(char c){ u8* glyph=(psf_status.psf_addr+psf_status.header.header_length+c*psf_status.header.glyph_size); FB_PIXEL pixel; for(int i=0;i<psf_status.header.glyph_height;i++){ - PAGING_MAP(glyph); for(int k=0;k<(psf_status.header.glyph_width/8);k++){ u8 mask=1<<7; u8 row=*(glyph+k); diff --git a/src/include/boucane.hpp b/src/include/boucane.hpp index 79975a3..fd75216 100644 --- a/src/include/boucane.hpp +++ b/src/include/boucane.hpp @@ -11,8 +11,16 @@ #include "libs/string.hpp" /// @brief Various variables from the linker -extern u64 kernel_vma,stack_pma,userspace_pma; +extern u64 kvar_kernel_vma; +extern u64 kvar_stack_pma; +extern u64 kvar_userspace_pma; +extern u64 kvar_bss_start; +extern u64 kvar_bss_end; /// @brief Binary references -extern u64 res_binary_res_terminus_psf_start; -extern u64 res_binary_res_terminus_psf_end; +extern u64 kvar_terminus_psf_start; +extern u64 kvar_terminus_psf_end; + +// ---- Debug +#define DUMP(var) asm volatile("push $0xABC; push %0; push $0xABC; _%=:; jmp _%="::"r"(var)) +#define DUMP2(var1,var2) asm volatile("push $0xABC; push %0; push %1; push $0xABC; _%=:; jmp _%="::"a"(var1),"b"(var2)) diff --git a/src/libs/string.cc b/src/libs/string.cc index 379a128..1ded406 100644 --- a/src/libs/string.cc +++ b/src/libs/string.cc @@ -1,13 +1,10 @@ #include "string.hpp" -#include "core/paging.hpp" #include "math.hpp" void memcpy(void* src, void* dst, u64 size){ u8 *c_src=(u8*)src; u8 *c_dst=(u8*)dst; for(u64 i=0;i<size;i++){ - PAGING_MAP((c_dst+i)); - PAGING_MAP((c_src+i)); *(c_dst+i)=*(c_src+i); } } |
