#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; } }