diff options
author | Marvin Borner | 2019-12-10 21:47:41 +0100 |
---|---|---|
committer | Marvin Borner | 2019-12-10 21:47:41 +0100 |
commit | 68915f46e66ed65ce2d32009fdfa2f5dca116842 (patch) | |
tree | 7d6df3e4dc6219422cc4b1faf909ff32a74b6edf /src/kernel/syscall/actions | |
parent | 33bdf18dad2539aca21727e95e04bfedecd37a76 (diff) |
Some syscalls and userspace stuff
sorry for the worse-getting commit messages...
Diffstat (limited to 'src/kernel/syscall/actions')
-rw-r--r-- | src/kernel/syscall/actions/sys_paging_alloc.c | 10 | ||||
-rw-r--r-- | src/kernel/syscall/actions/sys_paging_free.c | 8 | ||||
-rw-r--r-- | src/kernel/syscall/actions/sys_read.c | 8 | ||||
-rw-r--r-- | src/kernel/syscall/actions/sys_write.c | 8 |
4 files changed, 27 insertions, 7 deletions
diff --git a/src/kernel/syscall/actions/sys_paging_alloc.c b/src/kernel/syscall/actions/sys_paging_alloc.c new file mode 100644 index 0000000..fb4e415 --- /dev/null +++ b/src/kernel/syscall/actions/sys_paging_alloc.c @@ -0,0 +1,10 @@ +#include <stdint.h> +#include <kernel/paging/paging.h> +#include <kernel/io/io.h> + +uint32_t sys_paging_alloc(uint32_t count) +{ + uint32_t ptr = paging_alloc_pages((uint32_t) count); + paging_set_user(ptr, count); + return ptr; +}
\ No newline at end of file diff --git a/src/kernel/syscall/actions/sys_paging_free.c b/src/kernel/syscall/actions/sys_paging_free.c new file mode 100644 index 0000000..cdf7bb1 --- /dev/null +++ b/src/kernel/syscall/actions/sys_paging_free.c @@ -0,0 +1,8 @@ +#include <stdint.h> +#include <kernel/paging/paging.h> + +uint32_t sys_paging_free(uint32_t virt, uint32_t count) +{ + paging_set_free(virt, count); + return count; +}
\ No newline at end of file diff --git a/src/kernel/syscall/actions/sys_read.c b/src/kernel/syscall/actions/sys_read.c index f04f3ef..02960f6 100644 --- a/src/kernel/syscall/actions/sys_read.c +++ b/src/kernel/syscall/actions/sys_read.c @@ -3,6 +3,7 @@ #include <kernel/input/input.h> #include <kernel/lib/lib.h> #include <kernel/lib/string.h> +#include <kernel/io/io.h> uint32_t sys_read(char *buf) { @@ -15,7 +16,10 @@ uint32_t sys_read(char *buf) return strlen(buf); } -uint32_t sys_readc() +uint32_t sys_readc(char *ch) { - return getch(); + char buf = getch(); + ch = &buf; + serial_put(*ch); + return (uint32_t) ch; }
\ No newline at end of file diff --git a/src/kernel/syscall/actions/sys_write.c b/src/kernel/syscall/actions/sys_write.c index 554ac5f..8531e85 100644 --- a/src/kernel/syscall/actions/sys_write.c +++ b/src/kernel/syscall/actions/sys_write.c @@ -9,12 +9,10 @@ uint32_t sys_write(char *buf) return strlen((const char *) buf); } -uint32_t sys_writec(char ch) +uint32_t sys_writec(char *ch) { - serial_write_hex(ch); - serial_write("\n"); - serial_put(ch); + serial_write_hex(*ch); serial_write("\n\n"); - writec(ch); + writec((char) *ch); return 0; }
\ No newline at end of file |