diff options
Diffstat (limited to 'src/boucane.cc')
| -rw-r--r-- | src/boucane.cc | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/src/boucane.cc b/src/boucane.cc index 96c9ba7..caf0b8d 100644 --- a/src/boucane.cc +++ b/src/boucane.cc @@ -1,4 +1,5 @@ #include "boucane.hpp" +#include "core/apic.hpp" #include "core/paging.hpp" #include "drivers/memtext.hpp" #include "core/idt.hpp" @@ -9,6 +10,7 @@ #include "libs/stdio.hpp" #include "libs/string.hpp" #include "drivers/bmp.hpp" +#include "core/scheduler.hpp" u64 kvar_kernel_vma; u64 kvar_stack_pma; @@ -25,26 +27,35 @@ void (*printk)(char *str,...)=printf; extern u64 gdt64_tss; void configure_tss(){ - u64 tss_addr=(u64)&kvar_tss; - u32 desc1=(tss_addr&0xFFFF)<<16|(sizeof(TSS)&0xFFFF); - tss_addr>>=16; - u32 desc2=(tss_addr&0xFF)|((tss_addr>>8)<<24); - tss_addr>>=16; - u32 desc3=tss_addr; + // Get TSS physical address + u64 tss_addr=(u64)PHY(&kvar_tss); + u32 limit=sizeof(TSS); - // Options - u32 options=0b1001; // 64-bits TSS type - options|=(0b1000<<4); // Present + u32 desc1=(tss_addr&0xFFFF)<<16|(limit&0xFFFF); + u32 desc2=(tss_addr&0xFF); + desc2|=0b1001<<8; // Type + desc2|=0b111<<13; // Permission & present + u32 desc3=((limit>>8)&0xFFFF)|(limit>>24); // Configure GDT u32 *gdt_entry=(u32*)&gdt64_tss; gdt_entry[0]=desc1; - gdt_entry[1]=desc2|(options<<8); + gdt_entry[1]=desc2; gdt_entry[2]=desc3; gdt_entry[3]=0; // Configure segment kvar_tss.rsp0=(u64)VIRT(kvar_stack_pma); + asm( + "mov $0x28, %ax \n\t" + "ltr %ax" + ); +} + +void task1(){ + u64 a=0xEEEEEE; + DUMP(a); + while(1); } extern "C" void boucane(u64 mb_info){ @@ -60,11 +71,12 @@ extern "C" void boucane(u64 mb_info){ asm volatile ("movq $res_binary_res_logo_bmp_end, %0":"=m"(kvar_logo_bmp_end)); // Init data structures - configure_tss(); asm volatile ("call load_gdt"); + configure_tss(); paging_enable(); memtext_init(); idt_enable_interrupt(); + apic_enable(); // Looking for framebuffer FRAMEBUFFER fb_info; @@ -101,7 +113,7 @@ extern "C" void boucane(u64 mb_info){ printk("RAM:%dMB\n", mem); } - printk("%x",&kvar_tss); - DUMP(&gdt64_tss); + //create_task((void*)task1, 50); + //scheduler_start(); while(1); }
\ No newline at end of file |
