aboutsummaryrefslogtreecommitdiff
path: root/src/boucane.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/boucane.cc')
-rw-r--r--src/boucane.cc38
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