aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/serial.c
diff options
context:
space:
mode:
authorMarvin Borner2020-07-22 18:26:56 +0200
committerMarvin Borner2020-07-22 18:26:56 +0200
commit40cc5e32663cd0350b791b8e54825f564489343f (patch)
tree3561c2f379b98ac3c3005f9048bb5535a0d3952d /src/drivers/serial.c
parentc0a2074864e668b005eea8f50c6719bceb66bf20 (diff)
Imported some things from master
Diffstat (limited to 'src/drivers/serial.c')
-rw-r--r--src/drivers/serial.c32
1 files changed, 32 insertions, 0 deletions
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 <cpu.h>
+#include <def.h>
+#include <string.h>
+
+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]);
+}