summaryrefslogtreecommitdiff
path: root/kernel/x86.c
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/x86.c
parent575c725f998b166f1d286a2664aa3d6061d337fe (diff)
cleaning up asm stuff and improving docs
Diffstat (limited to 'kernel/x86.c')
-rw-r--r--kernel/x86.c140
1 files changed, 0 insertions, 140 deletions
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;
-}