From 40cc5e32663cd0350b791b8e54825f564489343f Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Wed, 22 Jul 2020 18:26:56 +0200 Subject: Imported some things from master --- src/drivers/cpu.c | 40 ++++++++++++++++++++++++++++++++++++++++ src/drivers/serial.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 src/drivers/cpu.c create mode 100644 src/drivers/serial.c (limited to 'src/drivers') diff --git a/src/drivers/cpu.c b/src/drivers/cpu.c new file mode 100644 index 0000000..eb96562 --- /dev/null +++ b/src/drivers/cpu.c @@ -0,0 +1,40 @@ +// MIT License, Copyright (c) 2020 Marvin Borner +// This file is a wrapper around some CPU asm calls + +#include + +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; +} + +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)); +} diff --git a/src/drivers/serial.c b/src/drivers/serial.c new file mode 100644 index 0000000..1ef424a --- /dev/null +++ b/src/drivers/serial.c @@ -0,0 +1,32 @@ +#include +#include +#include + +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); +} + +int is_transmit_empty() +{ + return inb(0x3f8 + 5) & 0x20; +} + +void serial_put(char ch) +{ + while (is_transmit_empty() == 0) + ; + outb(0x3f8, (u8)ch); +} + +void serial_print(const char *data) +{ + for (u32 i = 0; i < strlen(data); i++) + serial_put(data[i]); +} -- cgit v1.2.3