aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2024-06-01 16:42:55 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2024-06-01 16:42:55 +0300
commit7a1c7ed1b1c30ba4c668194a955fb414e471bade (patch)
tree2f49f04e455f004af640918abfcd6f91ce6a1323 /src
parente8f80bae97a835b6b256228d4bbeaf48ae16dcbb (diff)
downloadkmi-7a1c7ed1b1c30ba4c668194a955fb414e471bade.tar.gz
kmi-7a1c7ed1b1c30ba4c668194a955fb414e471bade.zip
add sleep syscall
+ Sets the current core to sleep
Diffstat (limited to 'src')
-rw-r--r--src/uapi/conf.c10
-rw-r--r--src/uapi/dispatch.c1
2 files changed, 10 insertions, 1 deletions
diff --git a/src/uapi/conf.c b/src/uapi/conf.c
index 894b98a..497aef0 100644
--- a/src/uapi/conf.c
+++ b/src/uapi/conf.c
@@ -108,8 +108,16 @@ SYSCALL_DEFINE1(poweroff)(struct tcb *t, sys_arg_t type)
case SHUTDOWN:
case COLD_REBOOT:
case WARM_REBOOT:
- return_args2(t, OK, poweroff(type));
+ return_args1(t, poweroff(type));
};
return_args1(t, ERR_INVAL);
}
+
+SYSCALL_DEFINE0(sleep)(struct tcb *t)
+{
+ if (!(has_cap(t->caps, CAP_POWER)))
+ return_args1(t, ERR_PERM);
+
+ return_args1(t, sleep());
+}
diff --git a/src/uapi/dispatch.c b/src/uapi/dispatch.c
index 5b523cc..f160091 100644
--- a/src/uapi/dispatch.c
+++ b/src/uapi/dispatch.c
@@ -76,6 +76,7 @@ void handle_syscall(sys_arg_t syscall, sys_arg_t a, sys_arg_t b,
case SYS_GET_CAP: sys_get_cap(t, a, b, c, d, e); break;
case SYS_CLEAR_CAP: sys_clear_cap(t, a, b, c, d, e); break;
case SYS_POWEROFF: sys_poweroff(t, a, b, c, d, e); break;
+ case SYS_SLEEP: sys_sleep(t, a, b, c, d, e); break;
case SYS_IRQ_REQ: sys_irq_req(t, a, b, c, d, e); break;
default:
error("Syscall %zu outside allowed range [0 - %i]\n", syscall,