diff options
Diffstat (limited to 'src/kernel/io/io.c')
-rw-r--r-- | src/kernel/io/io.c | 128 |
1 files changed, 0 insertions, 128 deletions
diff --git a/src/kernel/io/io.c b/src/kernel/io/io.c deleted file mode 100644 index 1ef82b6..0000000 --- a/src/kernel/io/io.c +++ /dev/null @@ -1,128 +0,0 @@ -#include <stdint.h> -#include <system.h> - -u8 inb(u16 port) -{ - u8 value; - asm volatile("inb %1, %0" : "=a"(value) : "Nd"(port)); - return value; -} - -u16 inw(u16 port) -{ - u16 value; - asm volatile("inw %1, %0" : "=a"(value) : "Nd"(port)); - return value; -} - -u32 inl(u16 port) -{ - u32 value; - asm volatile("inl %1, %0" : "=a"(value) : "Nd"(port)); - return value; -} - -u32 cpu_flags() -{ - u32 flags; - asm volatile("pushf\n" - "pop %0\n" - : "=rm"(flags)::"memory"); - return flags; -} - -int interrupts_enabled() -{ - return (cpu_flags() & 0x200) == 0x200; -} - -void interrupts_print() -{ - if (interrupts_enabled()) - log(GRN "Interrupts are enabled!" RES); - else - log(RED "Interrupts are disabled!" RES); -} - -void cli() -{ - asm volatile("cli"); -} - -void sti() -{ - asm volatile("sti"); -} - -void hlt() -{ - asm volatile("hlt"); -} - -void outb(u16 port, u8 data) -{ - asm volatile("outb %0, %1" ::"a"(data), "Nd"(port)); -} - -void outw(u16 port, u16 data) -{ - asm volatile("outw %0, %1" ::"a"(data), "Nd"(port)); -} - -void outl(u16 port, u32 data) -{ - asm volatile("outl %0, %1" ::"a"(data), "Nd"(port)); -} - -u32 cr3_get() -{ - u32 cr3; - asm volatile("movl %%cr3, %%eax" : "=a"(cr3)); - return cr3; -} - -void cr3_set(u32 cr3) -{ - asm volatile("movl %%eax, %%cr3" ::"a"(cr3)); -} - -u32 cr0_get() -{ - u32 cr0; - asm volatile("movl %%cr0, %%eax" : "=a"(cr0)); - return cr0; -} - -void cr0_set(u32 cr0) -{ - asm volatile("movl %%eax, %%cr0" ::"a"(cr0)); -} - -void invlpg(u32 addr) -{ - asm volatile("invlpg (%0)" ::"r"(addr) : "memory"); -} - -void serial_install() -{ - outb(0x3f8 + 1, 0x00); - outb(0x3f8 + 3, 0x80); - outb(0x3f8 + 0, 0x03); - outb(0x3f8 + 1, 0x00); - outb(0x3f8 + 3, 0x03); - outb(0x3f8 + 2, 0xC7); - outb(0x3f8 + 4, 0x0B); - info("Installed serial connection"); -} - -int is_transmit_empty() -{ - return inb(0x3f8 + 5) & 0x20; -} - -void serial_put(char ch) -{ - while (is_transmit_empty() == 0) - ; - outb(0x3f8, (u8)ch); -}
\ No newline at end of file |