diff --git a/kernel/dev/dev.c b/kernel/dev/dev.c index b5d49db..9cead81 100644 --- a/kernel/dev/dev.c +++ b/kernel/dev/dev.c @@ -3,7 +3,6 @@ #include "spinlock/spinlock.h" #include "std/string.h" #include "dev/dev.h" -#include "dev/termdev.h" #include "dev/ps2kbdev.h" #include "dev/serialdev.h" #include "dev/fbdev.h" @@ -15,7 +14,6 @@ void dev_init(void) { memset(&DEVTABLE, 0, sizeof(DEVTABLE)); spinlock_init(&DEVTABLE.spinlock); - termdev_init(); ps2kbdev_init(); serialdev_init(); fbdev_init(); diff --git a/kernel/dev/termdev.c b/kernel/dev/termdev.c deleted file mode 100644 index 305388d..0000000 --- a/kernel/dev/termdev.c +++ /dev/null @@ -1,22 +0,0 @@ -#include -#include -#include "dev/termdev.h" -#include "dev/dev.h" -#include "util/util.h" -#include "sysdefs/dev.h" -#include "kprintf.h" -#include "hshtb.h" -#include "errors.h" - -int32_t termdev_putch(struct Dev *dev, uint8_t *buffer, size_t len, uint64_t pid) { - (void)dev; (void)pid; - kprintf("%.*s", (int)len, (char *)buffer); - return E_OK; -} - -void termdev_init(void) { - Dev *termdev = NULL; - HSHTB_ALLOC(DEVTABLE.devs, ident, "termdev", termdev); - termdev->fns[DEV_TERMDEV_PUTCH] = &termdev_putch; - spinlock_init(&termdev->spinlock); -} diff --git a/kernel/dev/termdev.h b/kernel/dev/termdev.h deleted file mode 100644 index ded223f..0000000 --- a/kernel/dev/termdev.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef DEV_TERMDEV_H_ -#define DEV_TERMDEV_H_ - -#include -#include -#include "dev.h" - -void termdev_init(void); - -#endif // DEV_TERMDEV_H_ diff --git a/kernel/syscall/syscall.c b/kernel/syscall/syscall.c index a2ae82b..47c4d2e 100644 --- a/kernel/syscall/syscall.c +++ b/kernel/syscall/syscall.c @@ -11,6 +11,7 @@ #include "syscall/dev.h" #include "syscall/time.h" #include "syscall/ipcmbus.h" +#include "syscall/term.h" #include "errors.h" #include "kprintf.h" @@ -75,4 +76,6 @@ SyscallFn SYSCALL_TABLE[SYSCALLS_MAX] = { [SYS_IPC_MBUSCONSUME] = &sys_ipc_mbusconsume, [SYS_IPC_MBUSATTCH] = &sys_ipc_mbusattch, [SYS_IPC_MBUSDTTCH] = &sys_ipc_mbusdttch, + + [SYS_TERM_WRITE] = &sys_term_write, }; diff --git a/kernel/syscall/term.c b/kernel/syscall/term.c new file mode 100644 index 0000000..bf4e050 --- /dev/null +++ b/kernel/syscall/term.c @@ -0,0 +1,18 @@ +#include +#include +#include "syscall/syscall.h" +#include "kprintf.h" +#include "errors.h" + +int32_t SYSCALL2(sys_term_write, buffer1, len1) { + const char *buffer = (const char *)buffer1; + size_t len = len1; + + if (buffer == NULL) { + return E_INVALIDARGUMENT; + } + + kprintf("%.*s", (int)len, buffer); + + return E_OK; +} diff --git a/kernel/syscall/term.h b/kernel/syscall/term.h new file mode 100644 index 0000000..1f6db9c --- /dev/null +++ b/kernel/syscall/term.h @@ -0,0 +1,10 @@ +#ifndef SYSCALL_TERM_H_ +#define SYSCALL_TERM_H_ + +#include +#include +#include "syscall/syscall.h" + +int32_t SYSCALL2(sys_term_write, buffer1, len1); + +#endif // SYSCALL_TERM_H_ diff --git a/share/sysdefs/dev.h b/share/sysdefs/dev.h index c42edd7..551f2c3 100644 --- a/share/sysdefs/dev.h +++ b/share/sysdefs/dev.h @@ -4,8 +4,6 @@ #include #include -#define DEV_TERMDEV_PUTCH 0 - #define DEV_SERIALDEV_SENDB 0 #define DEV_SERIALDEV_SENDREADY 1 #define DEV_SERIALDEV_RECVB 2 diff --git a/share/sysdefs/syscall.h b/share/sysdefs/syscall.h index af652fc..c3deb8e 100644 --- a/share/sysdefs/syscall.h +++ b/share/sysdefs/syscall.h @@ -45,5 +45,6 @@ #define SYS_IPC_MBUSCONSUME 43 #define SYS_IPC_MBUSATTCH 44 #define SYS_IPC_MBUSDTTCH 45 +#define SYS_TERM_WRITE 46 #endif // SHARE_HDRS_SYSCALL_H_