summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-08-19 19:39:47 +0200
committerMiguel <m.i@gmx.at>2018-08-19 19:39:47 +0200
commit5055dc85c8a74fcd2ec24fbc51eba2a2da68debe (patch)
tree6b9589c5c89c8bc5c90771ff9d630c15e670f024 /kernel
parent575c725f998b166f1d286a2664aa3d6061d337fe (diff)
cleaning up asm stuff and improving docs
Diffstat (limited to 'kernel')
-rw-r--r--kernel/interrupts.c8
-rw-r--r--kernel/kernel.c8
-rw-r--r--kernel/mp.c2
-rw-r--r--kernel/ringbuffer.c16
-rw-r--r--kernel/smp.c4
-rw-r--r--kernel/spinlock.c2
-rw-r--r--kernel/task.c2
-rw-r--r--kernel/timer.c2
-rw-r--r--kernel/vmem.c4
-rw-r--r--kernel/x86.c140
-rw-r--r--kernel/x86.h34
11 files changed, 23 insertions, 199 deletions
diff --git a/kernel/interrupts.c b/kernel/interrupts.c
index 74599c3..41d0a9c 100644
--- a/kernel/interrupts.c
+++ b/kernel/interrupts.c
@@ -5,7 +5,7 @@
#include "asm/asm.h"
#include "driver/mouse.h"
#include "interrupts.h"
-#include "x86.h"
+#include "asm/x86.h"
void errlog(uint32_t error_code)
{
@@ -90,7 +90,7 @@ void exception_handle_14(uint32_t error_code,uint32_t eip,uint16_t cs,uint16_t u
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"error_code_U/S: %d",error_code&4?1:0);
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"error_code_RSVD: %d",error_code&8?1:0);
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"error_code_I/D: %d",error_code&16?1:0);
- log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"at addr: 0x%08X",x86_get_cr2());
+ log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"at addr: 0x%08X",x86_get_cr(2));
deflog(eip,cs,flags);
panic(FOOLOS_MODULE_NAME,"Exception: Fault: Page Fault");
@@ -166,8 +166,8 @@ void int_init(uint16_t sel)
int_install();
// now we can enable interrupts back again
- // x86_int_enable();
- x86_int_disable();
+ // x86_sti();
+ x86_cli();
}
void int_install()
diff --git a/kernel/kernel.c b/kernel/kernel.c
index 03862a9..b23a6d9 100644
--- a/kernel/kernel.c
+++ b/kernel/kernel.c
@@ -23,13 +23,11 @@
/* F00L 0S Entry point (called directly from asm/multiboot.asm */
void kernel_main(uint32_t eax,uint32_t ebx)
{
- // SERIAL PORT
serial_init();
+ log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"COM 1 - initialized");
- // PR
- log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"%s - compiled on %s at %s",
- KERNEL_NAME,__DATE__,__TIME__);
- log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"git revision: %s",GIT_REVISION);
+ log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"%s - BUILD: git-%s (%s %s)",
+ KERNEL_NAME,GIT_REVISION,__DATE__,__TIME__);
// PIT TIMER
timer_init();
diff --git a/kernel/mp.c b/kernel/mp.c
index abea5cb..76754b8 100644
--- a/kernel/mp.c
+++ b/kernel/mp.c
@@ -2,7 +2,7 @@
#include <stdbool.h>
-#include "x86.h"
+#include "asm/x86.h"
#include "lib/logger/log.h" // logger facilities
#include "smp.h"
diff --git a/kernel/ringbuffer.c b/kernel/ringbuffer.c
index 31185dc..099e96a 100644
--- a/kernel/ringbuffer.c
+++ b/kernel/ringbuffer.c
@@ -20,11 +20,11 @@ ringbuffer ringbuffer_init(uint32_t size)
bool ringbuffer_put(ringbuffer* f,uint8_t c)
{
- x86_int_disable();
+ x86_cli();
if((f->back-1+f->size)%f->size==f->front)
{
- x86_int_enable();
+ x86_sti();
return false;
}
@@ -33,30 +33,30 @@ bool ringbuffer_put(ringbuffer* f,uint8_t c)
f->back+=f->size;
f->back%=f->size;
- x86_int_enable();
+ x86_sti();
return true;
}
bool ringbuffer_has(ringbuffer* f)
{
- x86_int_disable();
+ x86_cli();
bool res=true;
if(f->front==f->back)
res=false;
- x86_int_enable();
+ x86_sti();
return res;
}
uint8_t ringbuffer_get(ringbuffer* f) // non blocking . please check first
{
- x86_int_disable();
+ x86_cli();
char c;
if(f->front==f->back)
{
- x86_int_enable();
+ x86_sti();
return ' ';
}
@@ -66,6 +66,6 @@ uint8_t ringbuffer_get(ringbuffer* f) // non blocking . please check first
f->front+=f->size;
f->front%=f->size;
- x86_int_enable();
+ x86_sti();
return c;
}
diff --git a/kernel/smp.c b/kernel/smp.c
index 08af652..a562df3 100644
--- a/kernel/smp.c
+++ b/kernel/smp.c
@@ -10,7 +10,7 @@
#include "smp.h"
#include "mem.h"
#include "spinlock.h"
-#include "x86.h"
+#include "asm/x86.h"
#define FOOLOS_APIC_SPUR_INT 0x00f0
#define FOOLOS_APIC_INT_COMMAND_LOW 0x0300
@@ -27,7 +27,7 @@ uint32_t local_apic_addr;
void smp_main()
{
- x86_int_disable();
+ x86_cli();
while(1);
// log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"local apic_addr:0x%08X",local_apic_addr);
diff --git a/kernel/spinlock.c b/kernel/spinlock.c
index f97b7db..2a546a8 100644
--- a/kernel/spinlock.c
+++ b/kernel/spinlock.c
@@ -4,7 +4,7 @@
#include "kernel.h"
#include "lib/logger/log.h"
-#include "x86.h"
+#include "asm/x86.h"
// https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html
diff --git a/kernel/task.c b/kernel/task.c
index be9ddd9..3c1e067 100644
--- a/kernel/task.c
+++ b/kernel/task.c
@@ -7,7 +7,7 @@
#include "lib/logger/log.h" // logger facilities
#include "mem.h"
#include "timer.h"
-#include "x86.h"
+#include "asm/x86.h"
#include "vmem.h"
#include "syscalls.h"
diff --git a/kernel/timer.c b/kernel/timer.c
index 3f7ab0f..e5e26b4 100644
--- a/kernel/timer.c
+++ b/kernel/timer.c
@@ -32,7 +32,7 @@
#define FOOLOS_MODULE_NAME "timer"
#include "timer.h"
-#include "x86.h"
+#include "asm/x86.h"
#include "lib/logger/log.h"
// TODO: use mutex? do we need volatile at all!??
diff --git a/kernel/vmem.c b/kernel/vmem.c
index 3d3456b..fb19e75 100644
--- a/kernel/vmem.c
+++ b/kernel/vmem.c
@@ -3,7 +3,7 @@
#include <stdlib.h>
#include "kernel.h"
-#include "x86.h"
+#include "asm/x86.h"
#include "mem.h"
#include "vmem.h"
#include "lib/logger/log.h" // logger facilities
@@ -491,7 +491,7 @@ pdirectory* vmem_new_space_dir(pdirectory *copy_dir)
void vmem_set_dir(pdirectory *dir)
{
- x86_set_pdbr(dir);
+ x86_set_page_directory(dir);
}
pdirectory* vmem_init(uint32_t kernel_blocks, uint32_t frameb_addr)
diff --git a/kernel/x86.c b/kernel/x86.c
deleted file mode 100644
index d664657..0000000
--- a/kernel/x86.c
+++ /dev/null
@@ -1,140 +0,0 @@
-#define FOOLOS_MODULE_NAME "x86"
-
-#include "x86.h"
-#include "timer.h"
-#include "lib/logger/log.h"
-
-//
-// suffix (b, w, l, q for byte, word, dword, and qword).
-//
-
-// disable interrupts
-void x86_int_disable()
-{
- asm volatile("cli");
-}
-
-// enable interrupts
-void x86_int_enable()
-{
- asm volatile("sti");
-}
-
-// get control registers (cr0-cr4)
-uint32_t x86_get_cr0()
-{
- uint32_t cr;
- asm volatile("mov %%cr0, %0": "=b"(cr));
- return cr;
-}
-
-uint32_t x86_get_cr1()
-{
- uint32_t cr=0;
-
- // reading the reserved cr1 register results in crash.
- // (at least on emulators)
- // asm volatile("mov %%cr1, %0": "=b"(cr));
-
- return cr;
-}
-
-uint32_t x86_get_cr2()
-{
- uint32_t cr;
- asm volatile("mov %%cr2, %0": "=b"(cr));
- return cr;
-}
-
-uint32_t x86_get_cr3()
-{
- uint32_t cr=0;
- asm volatile("mov %%cr3, %0": "=b"(cr));
- return cr;
-}
-
-uint32_t x86_get_cr4()
-{
- uint32_t cr;
- asm volatile("mov %%cr4, %0": "=b"(cr));
- return cr;
-}
-void x86_outb(uint32_t port, uint8_t data)
-{
- asm volatile("outb %0,%w1" : : "a" (data), "d" (port));
-}
-
-uint8_t x86_inb(uint32_t port)
-{
- uint8_t data;
- asm volatile("inb %w1,%0" : "=a" (data) : "d" (port));
- return data;
-}
-
-void x86_outw(uint32_t port, uint16_t data)
-{
- asm volatile("outw %0,%w1" : : "a" (data), "d" (port));
-}
-
-uint16_t x86_inw(uint32_t port)
-{
- uint16_t data;
- asm volatile("inw %w1,%0" : "=a" (data) : "d" (port));
- return data;
-}
-
-void x86_outl(uint32_t port, uint32_t data)
-{
- asm volatile("outl %0,%w1" : : "a" (data), "d" (port));
-}
-
-uint32_t x86_inl(uint32_t port)
-{
- uint32_t data;
- asm volatile("inl %w1,%0" : "=a" (data) : "d" (port));
- return data;
-}
-
-
-void x86_set_pdbr(uint32_t addr)
-{
- asm volatile("mov %0, %%cr3":: "b"(addr));
-
-}
-
-// enable PT bit in CR0
-void x86_paging_enable()
-{
- uint32_t cr0=x86_get_cr0();
- cr0 |= 0x80000000; // enable paging
- asm volatile("mov %0, %%cr0":: "b"(cr0));
-}
-
-// disable PT bit in CR0
-void x86_paging_disable()
-{
- uint32_t cr0=x86_get_cr0();
- cr0 &= ~0x80000000;
- asm volatile("mov %0, %%cr0":: "b"(cr0));
-}
-
-void x86_flush_tlb(uint32_t addr)
-{
- asm volatile("invlpg (%0)" ::"r" (addr) : "memory");
-}
-
-//xchg
-uint8_t x86_xchg(uint8_t *addr, uint8_t val)
-{
-
- uint8_t result;
-
- // The + in "+m" denotes a read-modify-write operand.
- asm volatile("lock xchgb %0, %1" :
- "+m" (*addr), "=a" (result) :
- "1" (val) :
- "cc");
-
- //log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"xchg val:%d with addr:0x%08X : result: %d",val,addr,result);
- return result;
-}
diff --git a/kernel/x86.h b/kernel/x86.h
deleted file mode 100644
index b634722..0000000
--- a/kernel/x86.h
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef FOOLOS_X86_H
-#define FOOLOS_X86_H
-
-#include <stdint.h>
-
-// http://wiki.osdev.org/Interrupt_Service_Routines
-
-// TODO : Real sleep()!
-
-void x86_outb(uint32_t port, uint8_t data);
-uint8_t x86_inb(uint32_t port);
-
-void x86_outw(uint32_t port, uint16_t data);
-uint16_t x86_inw(uint32_t port);
-
-void x86_outl(uint32_t port, uint32_t data);
-uint32_t x86_inl(uint32_t port);
-
-void x86_set_pdbr(uint32_t addr);
-void x86_paging_enable();
-void x86_flush_tlb(uint32_t addr);
-
-void x86_int_enable();
-void x86_int_disable();
-
-uint32_t x86_get_cr0();
-uint32_t x86_get_cr1();
-uint32_t x86_get_cr2();
-uint32_t x86_get_cr3();
-uint32_t x86_get_cr4();
-
-uint8_t x86_xchg(uint8_t *addr, uint8_t val);
-
-#endif