From 50123cd5368602f68b9650890735947eb7ec501e Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Fri, 26 Feb 2021 21:05:42 +0100 Subject: Removed serial driver from userspace --- kernel/Makefile | 1 + kernel/drivers/serial.c | 35 +++++++++++++++++++++++++++++++++++ kernel/inc/serial.h | 10 ++++++++++ 3 files changed, 46 insertions(+) create mode 100644 kernel/drivers/serial.c create mode 100644 kernel/inc/serial.h (limited to 'kernel') diff --git a/kernel/Makefile b/kernel/Makefile index 5e5b752..9cf18e5 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -3,6 +3,7 @@ COBJS = main.o \ drivers/interrupts.o \ drivers/interrupts_asm.o \ + drivers/serial.o \ drivers/keyboard.o \ drivers/mouse.o \ drivers/pci.o \ diff --git a/kernel/drivers/serial.c b/kernel/drivers/serial.c new file mode 100644 index 0000000..98108eb --- /dev/null +++ b/kernel/drivers/serial.c @@ -0,0 +1,35 @@ +// MIT License, Copyright (c) 2020 Marvin Borner + +#include +#include +#include +#include + +void serial_install(void) +{ + 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); +} + +static int is_transmit_empty(void) +{ + 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]); +} diff --git a/kernel/inc/serial.h b/kernel/inc/serial.h new file mode 100644 index 0000000..7ca5ac2 --- /dev/null +++ b/kernel/inc/serial.h @@ -0,0 +1,10 @@ +// MIT License, Copyright (c) 2020 Marvin Borner + +#ifndef SERIAL_H +#define SERIAL_H + +void serial_install(void); +void serial_print(const char *data); +void serial_put(char ch); + +#endif -- cgit v1.2.3