summaryrefslogtreecommitdiffstats
path: root/arch/x86_64/sys/serial.c
diff options
context:
space:
mode:
authorJon Santmyer <jon@jonsantmyer.com>2026-09-05 20:24:13 -0400
committerJon Santmyer <jon@jonsantmyer.com>2026-09-05 20:24:13 -0400
commit779b7fc1fe91e5a355b6e15de882d46b26ab2270 (patch)
treec62da25a0a0b02488550e856921350fd94668c2b /arch/x86_64/sys/serial.c
parent73cbb23130f634bf52ac92da063efd3e6016f8ee (diff)
downloadjove-kernel-779b7fc1fe91e5a355b6e15de882d46b26ab2270.tar.gz
jove-kernel-779b7fc1fe91e5a355b6e15de882d46b26ab2270.tar.bz2
jove-kernel-779b7fc1fe91e5a355b6e15de882d46b26ab2270.zip
working syscalls.
Diffstat (limited to 'arch/x86_64/sys/serial.c')
-rw-r--r--arch/x86_64/sys/serial.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/arch/x86_64/sys/serial.c b/arch/x86_64/sys/serial.c
new file mode 100644
index 0000000..48a14c7
--- /dev/null
+++ b/arch/x86_64/sys/serial.c
@@ -0,0 +1,41 @@
+#include "jove.h"
+#include "lib/printf.h"
+#include "syscall.h"
+#include "arch/x86_64/hal/serial_com.h"
+
+static int
+s_syscall_serial_write(
+ jove_owned_obj_t *serial_com,
+ size_t payload_bytes,
+ void *payload_data)
+{
+ if(payload_bytes < sizeof(struct syscall_serial_write)) {
+ kprintf("syscall_serial_write: message is too small for this syscall!\n");
+ return EOOB;
+ }
+ struct syscall_serial_write *payload = payload_data;
+ if(payload_bytes < sizeof(struct syscall_serial_write) + payload->len) {
+ kprintf("syscall_serial_write: message is to small for payload!\n");
+ return EOOB;
+ }
+ return serial_com_write(serial_com, payload->data, payload->len);
+}
+
+int
+_syscall_handle_serial(
+ jove_owned_obj_t *pcb_obj,
+ jove_owned_obj_t *objdir,
+ jove_owned_obj_t *message_obj,
+ jove_owned_obj_t *target_obj,
+ struct syscall_header *header,
+ size_t bytes_left,
+ void *payload_data)
+{
+ switch(header->callid) {
+ case 0:
+ return s_syscall_serial_write(target_obj, bytes_left, payload_data);
+ default:
+ kprintf("syscall_serial: serial com object does not support syscall %i\n", header->callid);
+ return EOOB;
+ }
+}