summaryrefslogtreecommitdiff
path: root/src/kernel/drivers
diff options
context:
space:
mode:
authorBrett Weiland <brett_weiland@bpcspace.com>2021-03-24 15:42:20 -0500
committerBrett Weiland <brett_weiland@bpcspace.com>2021-03-24 15:42:20 -0500
commitf90c075d5061b3a89316d6bf3d5b190d49049ccd (patch)
tree36265da568b852ca5c0a8b4affe706cda80c4a9d /src/kernel/drivers
parent14b109ea24dc5cb1db948de57a2a44c80ef4622e (diff)
renamed: kernel/include/acpi.h -> include/acpi.h
renamed: kernel/include/libc.h -> include/libc.h renamed: kernel/include/paging.h -> include/paging.h renamed: kernel/include/printf.h -> include/printf.h renamed: kernel/include/serial.h -> include/serial.h renamed: kernel/include/video.h -> include/video.h new file: indigo_os renamed: kernel/libs/acpi.c -> kernel/acpi.c renamed: kernel/libs/drivers/serial.c -> kernel/drivers/serial.c renamed: kernel/libs/drivers/video.c -> kernel/drivers/video.c renamed: kernel/libs/libc.c -> kernel/libc.c renamed: kernel/libs/page.c -> kernel/page.c renamed: kernel/libs/printf.c -> kernel/printf.c renamed: kernel/libs/printf.h -> kernel/printf.h modified: makefile
Diffstat (limited to 'src/kernel/drivers')
-rw-r--r--src/kernel/drivers/serial.c39
-rw-r--r--src/kernel/drivers/video.c9
2 files changed, 48 insertions, 0 deletions
diff --git a/src/kernel/drivers/serial.c b/src/kernel/drivers/serial.c
new file mode 100644
index 0000000..25f89ad
--- /dev/null
+++ b/src/kernel/drivers/serial.c
@@ -0,0 +1,39 @@
+#include <stdint.h>
+#include <serial.h>
+static inline void outb(uint16_t port, uint8_t value) {
+ asm volatile(
+ "outb %0, %1" :: "a"(value), "Nd"(port)
+ );
+}
+
+static inline uint8_t inb(uint16_t port) {
+ uint8_t ret;
+ asm volatile(
+ "inb %1, %0" : "=a"(ret) : "Nd"(port)
+ );
+ return(ret);
+}
+
+int init_serial(uint16_t port) {
+ outb(port + 1, 0x00);
+ outb(port + 3, 0x80);
+ outb(port + 0, 0x06);
+ outb(port + 1, 0x00);
+ outb(port + 3, 0x03);
+ outb(port + 2, 0xc7);
+ outb(port + 4, 0x0b);
+ outb(port + 4, 0x1e);
+
+ outb(port + 0, 0xae); // test char
+
+ if(inb(port + 0) != 0xae)
+ return 1;
+
+ outb(port + 4, 0x0f); // dissable interupts
+ return 0;
+}
+
+void _putchar_serial(uint16_t port, char msg) {
+ while(!(inb(port + 5) & 0x20)); //wait for transmit to be done
+ outb(port, msg);
+}
diff --git a/src/kernel/drivers/video.c b/src/kernel/drivers/video.c
new file mode 100644
index 0000000..ab73bb0
--- /dev/null
+++ b/src/kernel/drivers/video.c
@@ -0,0 +1,9 @@
+#include <printf.h>
+#include <video.h>
+
+//to be implimented when paging is set up
+
+void dump_video() {
+ struct mode_info *video = (struct mode_info *)0x600;
+ printf("Video info:\nx:\t%u\ny:\t%u\nbbp:\t%u\nloc:\t0x%p\n", video->width, video->height, video->bpp, video->framebuffer);
+}