[kernel] Add event syscalls

The event object was missing any syscalls. Furthermore, kobject had an
old object_signal implementation (the syscall itself no longer exists),
which was removed. User code should only be able to set signals on
events.
This commit is contained in:
Justin C. Miller
2022-01-30 20:56:44 -08:00
parent 343622d4e5
commit 5dfc6ae62e
5 changed files with 63 additions and 72 deletions

View File

@@ -53,6 +53,7 @@ kernel = module("kernel",
"syscalls.inc.cog",
"syscalls/channel.cpp",
"syscalls/endpoint.cpp",
"syscalls/event.cpp",
"syscalls/handle.cpp",
"syscalls/object.cpp",
"syscalls/process.cpp",

View File

@@ -0,0 +1,36 @@
#include <j6/errors.h>
#include <j6/signals.h>
#include "objects/event.h"
#include "syscalls/helpers.h"
using namespace obj;
namespace syscalls {
j6_status_t
event_create(j6_handle_t *self)
{
construct_handle<event>(self);
return j6_status_ok;
}
j6_status_t
event_signal(event *self, j6_signal_t signals)
{
if (signals & j6_signal_global_mask)
return j6_err_invalid_arg;
self->assert_signal(signals);
return j6_status_ok;
}
j6_status_t
event_clear(event *self, j6_signal_t mask)
{
self->deassert_signal(~mask);
return j6_status_ok;
}
} // namespace syscalls

View File

@@ -89,16 +89,6 @@ object_wait_many(j6_handle_t * handles, size_t handles_count, uint64_t mask, j6_
return j6_status_ok;
}
j6_status_t
object_signal(kobject *self, j6_signal_t signals)
{
if ((signals & j6_signal_user_mask) != signals)
return j6_err_invalid_arg;
self->assert_signal(signals);
return j6_status_ok;
}
j6_status_t
object_close(kobject *self)
{