summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kernel/arch/i386/mmu.c2
-rw-r--r--kernel/cpu/syscall.c57
2 files changed, 28 insertions, 31 deletions
diff --git a/kernel/arch/i386/mmu.c b/kernel/arch/i386/mmu.c
index 06d00cc..c38d834 100644
--- a/kernel/arch/i386/mmu.c
+++ b/kernel/arch/i386/mmu.c
@@ -550,7 +550,7 @@ void *physical_to_virtual(void *address) {
if (phys_to_virt_map[i].physical > (u32)address) {
continue;
}
- return (void *)phys_to_virt_map[i].virtual;
+ return (void *)phys_to_virt_map[i].virtual + ((uintptr_t)address & 0xFFF);
}
assert(0);
return NULL;
diff --git a/kernel/cpu/syscall.c b/kernel/cpu/syscall.c
index 6d2b150..78d35fe 100644
--- a/kernel/cpu/syscall.c
+++ b/kernel/cpu/syscall.c
@@ -21,11 +21,6 @@
#include <string.h>
#include <typedefs.h>
-typedef struct SYS_CLOCK_GETTIME_PARAMS {
- clockid_t clk;
- struct timespec *ts;
-} __attribute__((packed)) SYS_CLOCK_GETTIME_PARAMS;
-
struct two_args {
u32 a;
u32 b;
@@ -139,11 +134,12 @@ int syscall_chdir(const char *path) {
return vfs_chdir(path);
}
-int syscall_clock_gettime(SYS_CLOCK_GETTIME_PARAMS *args) {
+int syscall_clock_gettime(clockid_t clock_id, struct timespec *tp) {
// FIXME: Actually implement this
- if (args->ts) {
- args->ts->tv_sec = 0;
- args->ts->tv_nsec = 0;
+ if (tp) {
+ u64 ms = pit_num_ms();
+ tp->tv_sec = ms / 1000;
+ tp->tv_nsec = ms * 1000 * 1000;
}
return 0;
}
@@ -557,27 +553,28 @@ int syscall_fcntl(int fd, int cmd, int arg) {
}
int (*syscall_functions[])() = {
- (void(*))syscall_open, (void(*))syscall_read,
- (void(*))syscall_write, (void(*))syscall_pread,
- (void(*))syscall_pwrite, (void(*))syscall_fork,
- (void(*))syscall_exec, (void(*))syscall_getpid,
- (void(*))syscall_exit, (void(*))syscall_wait,
- (void(*))syscall_brk, (void(*))syscall_sbrk,
- (void(*))syscall_pipe, (void(*))syscall_dup2,
- (void(*))syscall_close, (void(*))syscall_openpty,
- (void(*))syscall_poll, (void(*))syscall_mmap,
- (void(*))syscall_accept, (void(*))syscall_bind,
- (void(*))syscall_socket, (void(*))syscall_shm_open,
- (void(*))syscall_ftruncate, (void(*))syscall_fstat,
- (void(*))syscall_msleep, (void(*))syscall_uptime,
- (void(*))syscall_mkdir, (void(*))syscall_recvfrom,
- (void(*))syscall_sendto, (void(*))syscall_kill,
- (void(*))syscall_sigaction, (void(*))syscall_chdir,
- (void(*))syscall_getcwd, (void(*))syscall_isatty,
- (void(*))syscall_randomfill, (void(*))syscall_munmap,
- (void(*))syscall_open_process, (void(*))syscall_lseek,
- (void(*))syscall_connect, (void(*))syscall_setsockopt,
- (void(*))syscall_getpeername, (void(*))syscall_fcntl,
+ (void(*))syscall_open, (void(*))syscall_read,
+ (void(*))syscall_write, (void(*))syscall_pread,
+ (void(*))syscall_pwrite, (void(*))syscall_fork,
+ (void(*))syscall_exec, (void(*))syscall_getpid,
+ (void(*))syscall_exit, (void(*))syscall_wait,
+ (void(*))syscall_brk, (void(*))syscall_sbrk,
+ (void(*))syscall_pipe, (void(*))syscall_dup2,
+ (void(*))syscall_close, (void(*))syscall_openpty,
+ (void(*))syscall_poll, (void(*))syscall_mmap,
+ (void(*))syscall_accept, (void(*))syscall_bind,
+ (void(*))syscall_socket, (void(*))syscall_shm_open,
+ (void(*))syscall_ftruncate, (void(*))syscall_fstat,
+ (void(*))syscall_msleep, (void(*))syscall_uptime,
+ (void(*))syscall_mkdir, (void(*))syscall_recvfrom,
+ (void(*))syscall_sendto, (void(*))syscall_kill,
+ (void(*))syscall_sigaction, (void(*))syscall_chdir,
+ (void(*))syscall_getcwd, (void(*))syscall_isatty,
+ (void(*))syscall_randomfill, (void(*))syscall_munmap,
+ (void(*))syscall_open_process, (void(*))syscall_lseek,
+ (void(*))syscall_connect, (void(*))syscall_setsockopt,
+ (void(*))syscall_getpeername, (void(*))syscall_fcntl,
+ (void(*))syscall_clock_gettime,
};
void int_syscall(reg_t *r);