diff options
Diffstat (limited to 'src/user')
-rw-r--r-- | src/user/syscalls.h | 146 | ||||
-rw-r--r-- | src/user/user.c | 26 |
2 files changed, 12 insertions, 160 deletions
diff --git a/src/user/syscalls.h b/src/user/syscalls.h deleted file mode 100644 index c6a0c61..0000000 --- a/src/user/syscalls.h +++ /dev/null @@ -1,146 +0,0 @@ -#ifndef SYSCALLS_H_ -#define SYSCALLS_H_ - -#include <stdint.h> - -// -// Task-related calls - -inline void _exit(int code) -{ - register uint32_t r1 __asm("r1") = code; - __asm("\ - mov r0, 0; \ - mov r1, %0; \ - svc 0; \ - " :: "r" (r1)); -} - -inline int fork(void) -{ - int ret = 0; - register uint32_t r1 __asm("r1") = (uint32_t)&ret; - __asm("\ - mov r0, 1; \ - mov r1, %0; \ - svc 0; \ - " :: "r" (r1)); - return ret; -} - -inline int getpid(void) -{ - int ret = 0; - register uint32_t r1 __asm("r1") = (uint32_t)&ret; - __asm("\ - mov r0, 2; \ - mov r1, %0; \ - svc 0; \ - " :: "r" (r1)); - return ret; -} - -inline void *sbrk(unsigned int bytes) -{ - void *ret = 0; - register uint32_t r1 __asm("r1") = bytes; - register uint32_t r2 __asm("r2") = (uint32_t)&ret; - __asm("\ - mov r0, 4; \ - mov r1, %0; \ - mov r2, %1; \ - svc 0; \ - " :: "r" (r1), "r" (r2)); - return ret; -} - -// -// File-related calls - -// Indicates mounted volume -#define VFS_MOUNTED (1 << 0) -// Set if filesystem is read-only -#define VFS_READONLY (1 << 1) - -// Indicates an opened file -#define VFS_FILE_OPEN (1 << 0) -// Indicates read permission on file -#define VFS_FILE_READ (1 << 1) -// Indicates write permission on file -#define VFS_FILE_WRITE (1 << 2) -// Set if EOF has been reached -#define VFS_EOF (1 << 3) - -#define EOF (-1) - -struct dirent { - char name[32]; -}; - -struct vfs_volume_funcs_t; -typedef struct vfs_volume_funcs_t vfs_volume_funcs; - -inline int mount(vfs_volume_funcs *funcs, uint32_t flags) -{ - int ret = 0; - register uint32_t r1 __asm("r1") = (uint32_t)funcs; - register uint32_t r2 __asm("r2") = flags; - register uint32_t r3 __asm("r3") = (uint32_t)&ret; - __asm("\ - mov r0, 0; \ - mov r1, %0; \ - mov r2, %1; \ - mov r3, %2; \ - svc 3; \ - " :: "r" (r1), "r" (r2), "r" (r3)); - return ret; -} - -inline int open(const char *path, uint32_t flags) -{ - int ret = 0; - register uint32_t r1 __asm("r1") = (uint32_t)path; - register uint32_t r2 __asm("r2") = flags; - register uint32_t r3 __asm("r3") = (uint32_t)&ret; - __asm("\ - mov r0, 1; \ - mov r1, %0; \ - mov r2, %1; \ - mov r3, %2; \ - svc 3; \ - " :: "r" (r1), "r" (r2), "r" (r3)); - return ret; -} - -inline int close(int fd) -{ - int ret = 0; - register uint32_t r1 __asm("r1") = fd; - register uint32_t r2 __asm("r2") = (uint32_t)&ret; - __asm("\ - mov r0, 2; \ - mov r1, %0; \ - mov r2, %1; \ - svc 3; \ - " :: "r" (r1), "r" (r2)); -} - -inline int read(int fd, uint32_t count, uint8_t *buffer) -{ - int ret = 0; - register uint32_t r1 __asm("r1") = fd; - register uint32_t r2 __asm("r2") = count; - register uint32_t r3 __asm("r3") = (uint32_t)buffer; - register uint32_t r4 __asm("r4") = (uint32_t)&ret; - __asm("\ - mov r0, 3; \ - mov r1, %0; \ - mov r2, %1; \ - mov r3, %2; \ - mov r4, %3; \ - svc 3; \ - " :: "r" (r1), "r" (r2), "r" (r3), "r" (r4)); - return ret; -} - -#endif // SYSCALLS_H_ diff --git a/src/user/user.c b/src/user/user.c index 218ac97..dd1aa54 100644 --- a/src/user/user.c +++ b/src/user/user.c @@ -4,8 +4,6 @@ #include <kernel/heap.h> #include <kernel/vfs.h> -#include "syscalls.h" - void user_delay(uint32_t ms) { register uint32_t r1 asm("r1") = ms; @@ -26,17 +24,17 @@ void user_main(void) int count = vfs_read(test, 20, (uint8_t *)buf); (void)count; - if (fork() == 0) { - while (1) { - gpio(GPIO_OUT, 5, 1); - user_delay(2000); - } - } else { - while (1) { - user_delay(1000); - gpio(GPIO_OUT, 5, 0); - user_delay(1000); - } - } +// if (fork() == 0) { +// while (1) { +// gpio(GPIO_OUT, 5, 1); +// user_delay(2000); +// } +// } else { +// while (1) { +// user_delay(1000); +// gpio(GPIO_OUT, 5, 0); +// user_delay(1000); +// } +// } } |