forked from Bananymous/banan-os
Kernel: Add SYS_SLEEP
This commit is contained in:
parent
282bf24f65
commit
0c316ebfb2
|
@ -106,6 +106,12 @@ namespace Kernel
|
||||||
return ret.value()->pid();
|
return ret.value()->pid();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long sys_sleep(unsigned int seconds)
|
||||||
|
{
|
||||||
|
PIT::sleep(seconds * 1000);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" long sys_fork_trampoline();
|
extern "C" long sys_fork_trampoline();
|
||||||
|
|
||||||
extern "C" long cpp_syscall_handler(int syscall, uintptr_t arg1, uintptr_t arg2, uintptr_t arg3, uintptr_t arg4, uintptr_t arg5)
|
extern "C" long cpp_syscall_handler(int syscall, uintptr_t arg1, uintptr_t arg2, uintptr_t arg3, uintptr_t arg4, uintptr_t arg5)
|
||||||
|
@ -162,6 +168,9 @@ namespace Kernel
|
||||||
case SYS_FORK:
|
case SYS_FORK:
|
||||||
ret = sys_fork_trampoline();
|
ret = sys_fork_trampoline();
|
||||||
break;
|
break;
|
||||||
|
case SYS_SLEEP:
|
||||||
|
ret = sys_sleep((unsigned int)arg1);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
Kernel::panic("Unknown syscall {}", syscall);
|
Kernel::panic("Unknown syscall {}", syscall);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ __BEGIN_DECLS
|
||||||
#define SYS_GET_TERMIOS 11
|
#define SYS_GET_TERMIOS 11
|
||||||
#define SYS_SET_TERMIOS 12
|
#define SYS_SET_TERMIOS 12
|
||||||
#define SYS_FORK 13
|
#define SYS_FORK 13
|
||||||
|
#define SYS_SLEEP 14
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
|
|
||||||
|
|
|
@ -108,6 +108,12 @@ long syscall(long syscall, ...)
|
||||||
ret = Kernel::syscall(SYS_FORK);
|
ret = Kernel::syscall(SYS_FORK);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case SYS_SLEEP:
|
||||||
|
{
|
||||||
|
unsigned int seconds = va_arg(args, unsigned int);
|
||||||
|
ret = Kernel::syscall(SYS_SLEEP, seconds);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
puts("LibC: Unhandeled syscall");
|
puts("LibC: Unhandeled syscall");
|
||||||
ret = -ENOSYS;
|
ret = -ENOSYS;
|
||||||
|
@ -129,3 +135,8 @@ pid_t fork(void)
|
||||||
{
|
{
|
||||||
return syscall(SYS_FORK);
|
return syscall(SYS_FORK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int sleep(unsigned int seconds)
|
||||||
|
{
|
||||||
|
return syscall(SYS_SLEEP, seconds);
|
||||||
|
}
|
Loading…
Reference in New Issue