diff options
| author | Miguel <m.i@gmx.at> | 2018-08-19 19:39:47 +0200 |
|---|---|---|
| committer | Miguel <m.i@gmx.at> | 2018-08-19 19:39:47 +0200 |
| commit | 5055dc85c8a74fcd2ec24fbc51eba2a2da68debe (patch) | |
| tree | 6b9589c5c89c8bc5c90771ff9d630c15e670f024 /kernel/x86.c | |
| parent | 575c725f998b166f1d286a2664aa3d6061d337fe (diff) | |
cleaning up asm stuff and improving docs
Diffstat (limited to 'kernel/x86.c')
| -rw-r--r-- | kernel/x86.c | 140 |
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; -} |
