aboutsummaryrefslogtreecommitdiff
path: root/kernel/drivers
diff options
context:
space:
mode:
authorMarvin Borner2021-02-26 21:05:42 +0100
committerMarvin Borner2021-02-26 21:05:42 +0100
commit50123cd5368602f68b9650890735947eb7ec501e (patch)
treef78117baf425b341fd5c8fd38ccdfd9528d236f3 /kernel/drivers
parentdc3ae2d551ed9e427d5a99739ec30e97749bd5bc (diff)
Removed serial driver from userspace
Diffstat (limited to 'kernel/drivers')
-rw-r--r--kernel/drivers/serial.c35
1 files changed, 35 insertions, 0 deletions
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 <cpu.h>
+#include <def.h>
+#include <serial.h>
+#include <str.h>
+
+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]);
+}