wait: Rename UsermodeEvent and UsermodeTimer

This commit is contained in:
plutooo 2018-12-13 22:56:11 +01:00 committed by fincs
parent 376add30a4
commit eb7d835a79
8 changed files with 46 additions and 46 deletions

View File

@ -2,9 +2,9 @@
#pragma once #pragma once
#include "../kernel/wait.h" #include "../kernel/wait.h"
typedef struct UsermodeEvent UsermodeEvent; typedef struct UEvent UEvent;
struct UsermodeEvent struct UEvent
{ {
Waitable waitable; Waitable waitable;
bool signal; bool signal;
@ -13,19 +13,19 @@ struct UsermodeEvent
/** /**
* @brief Creates a usermode event. * @brief Creates a usermode event.
* @param[out] e UsermodeEvent object. * @param[out] e UEvent object.
* @param[in] bool auto_clear Whether to automatically clear the event. * @param[in] bool auto_clear Whether to automatically clear the event.
* @note It is safe to wait on this event with several threads simultaneously. * @note It is safe to wait on this event with several threads simultaneously.
* @note If more than one thread is listening on it, at least one thread will get the signal. No other guarantees. * @note If more than one thread is listening on it, at least one thread will get the signal. No other guarantees.
*/ */
void ueventCreate(UsermodeEvent* e, bool auto_clear); void ueventCreate(UEvent* e, bool auto_clear);
/** /**
* @brief Clears the event signal. * @brief Clears the event signal.
* @param[in] e UsermodeEvent object. * @param[in] e UEvent object.
*/ */
void ueventClear(UsermodeEvent* e); void ueventClear(UEvent* e);
/** /**
* @brief Signals the event. * @brief Signals the event.
* @param[in] e UsermodeEvent object. * @param[in] e UEvent object.
*/ */
void ueventSignal(UsermodeEvent* e); void ueventSignal(UEvent* e);

View File

@ -2,14 +2,14 @@
#pragma once #pragma once
#include "../kernel/wait.h" #include "../kernel/wait.h"
typedef struct UsermodeTimer UsermodeTimer; typedef struct UTimer UTimer;
typedef enum { typedef enum {
TimerType_OneShot, TimerType_OneShot,
TimerType_Repeating TimerType_Repeating
} TimerType; } TimerType;
struct UsermodeTimer struct UTimer
{ {
Waitable waitable; Waitable waitable;
TimerType type; TimerType type;
@ -19,21 +19,21 @@ struct UsermodeTimer
/** /**
* @brief Creates a usermode timer. * @brief Creates a usermode timer.
* @param[out] t UsermodeTimer object. * @param[out] t UTimer object.
* @param[in] interval Interval (in nanoseconds). * @param[in] interval Interval (in nanoseconds).
* @param[in] type Timer type (repeating or one-shot) * @param[in] type Timer type (repeating or one-shot)
* @note It is safe to wait on this timer with several threads simultaneously. * @note It is safe to wait on this timer with several threads simultaneously.
* @note If more than one thread is listening on it, at least one thread will get the signal. No other guarantees. * @note If more than one thread is listening on it, at least one thread will get the signal. No other guarantees.
* @note For a repeating timer: If the timer triggers twice before you wait on it, you will only get one signal. * @note For a repeating timer: If the timer triggers twice before you wait on it, you will only get one signal.
*/ */
void utimerCreate(UsermodeTimer* t, u64 interval, TimerType type); void utimerCreate(UTimer* t, u64 interval, TimerType type);
/** /**
* @brief Starts the timer. * @brief Starts the timer.
* @param[in] t UsermodeTimer object. * @param[in] t UTimer object.
*/ */
void utimerStart(UsermodeTimer* t); void utimerStart(UTimer* t);
/** /**
* @brief Stops the timer. * @brief Stops the timer.
* @param[in] t UsermodeTimer object. * @param[in] t UTimer object.
*/ */
void utimerStop(UsermodeTimer* t); void utimerStop(UTimer* t);

View File

@ -5,8 +5,8 @@
#include "../kernel/thread.h" #include "../kernel/thread.h"
// Implementation details. // Implementation details.
typedef struct UsermodeEvent UsermodeEvent; typedef struct UEvent UEvent;
typedef struct UsermodeTimer UsermodeTimer; typedef struct UTimer UTimer;
typedef enum { typedef enum {
WaiterNodeType_Event, WaiterNodeType_Event,
@ -28,8 +28,8 @@ typedef struct {
Handle thread; Handle thread;
union { union {
Waitable* parent; Waitable* parent;
UsermodeEvent* parent_event; UEvent* parent_event;
UsermodeTimer* parent_timer; UTimer* parent_timer;
}; };
size_t idx; size_t idx;
size_t* idx_out; size_t* idx_out;
@ -44,8 +44,8 @@ struct Waitable
// User-facing API starts here. // User-facing API starts here.
typedef enum { typedef enum {
WaiterType_Handle, WaiterType_Handle,
WaiterType_UsermodeTimer, WaiterType_UTimer,
WaiterType_UsermodeEvent, WaiterType_UEvent,
} WaiterType; } WaiterType;
typedef struct { typedef struct {
@ -53,8 +53,8 @@ typedef struct {
union { union {
Handle handle; Handle handle;
UsermodeTimer* timer; UTimer* timer;
UsermodeEvent* event; UEvent* event;
}; };
} Waiter; } Waiter;
@ -68,19 +68,19 @@ static inline Waiter waiterForHandle(Handle h)
} }
/// Creates a waiter for a usermode timer. /// Creates a waiter for a usermode timer.
static inline Waiter waiterForUtimer(UsermodeTimer* t) static inline Waiter waiterForUTimer(UTimer* t)
{ {
Waiter wait_obj; Waiter wait_obj;
wait_obj.type = WaiterType_UsermodeTimer; wait_obj.type = WaiterType_UTimer;
wait_obj.timer = t; wait_obj.timer = t;
return wait_obj; return wait_obj;
} }
/// Creates a waiter for a usermode event. /// Creates a waiter for a usermode event.
static inline Waiter waiterForUevent(UsermodeEvent* e) static inline Waiter waiterForUEvent(UEvent* e)
{ {
Waiter wait_obj; Waiter wait_obj;
wait_obj.type = WaiterType_UsermodeEvent; wait_obj.type = WaiterType_UEvent;
wait_obj.event = e; wait_obj.event = e;
return wait_obj; return wait_obj;
} }

View File

@ -5,7 +5,7 @@
#include "wait.h" #include "wait.h"
#include "uevent.h" #include "uevent.h"
void ueventCreate(UsermodeEvent* e, bool auto_clear) void ueventCreate(UEvent* e, bool auto_clear)
{ {
_waitableInitialize(&e->waitable); _waitableInitialize(&e->waitable);
@ -13,14 +13,14 @@ void ueventCreate(UsermodeEvent* e, bool auto_clear)
e->auto_clear = auto_clear; e->auto_clear = auto_clear;
} }
void ueventClear(UsermodeEvent* e) void ueventClear(UEvent* e)
{ {
mutexLock(&e->waitable.mutex); mutexLock(&e->waitable.mutex);
e->signal = false; e->signal = false;
mutexUnlock(&e->waitable.mutex); mutexUnlock(&e->waitable.mutex);
} }
void ueventSignal(UsermodeEvent* e) void ueventSignal(UEvent* e)
{ {
mutexLock(&e->waitable.mutex); mutexLock(&e->waitable.mutex);
e->signal = true; e->signal = true;
@ -28,7 +28,7 @@ void ueventSignal(UsermodeEvent* e)
mutexUnlock(&e->waitable.mutex); mutexUnlock(&e->waitable.mutex);
} }
void _ueventTryAutoClear(UsermodeEvent* e) void _ueventTryAutoClear(UEvent* e)
{ {
mutexLock(&e->waitable.mutex); mutexLock(&e->waitable.mutex);
if (e->auto_clear) { if (e->auto_clear) {
@ -37,7 +37,7 @@ void _ueventTryAutoClear(UsermodeEvent* e)
mutexUnlock(&e->waitable.mutex); mutexUnlock(&e->waitable.mutex);
} }
bool _ueventAddListener(UsermodeEvent* e, WaiterNode* w, size_t idx, size_t* idx_out, Handle thread) bool _ueventAddListener(UEvent* e, WaiterNode* w, size_t idx, size_t* idx_out, Handle thread)
{ {
_waiterNodeCreate(w, WaiterNodeType_Event, &e->waitable, thread, idx, idx_out); _waiterNodeCreate(w, WaiterNodeType_Event, &e->waitable, thread, idx, idx_out);

View File

@ -2,5 +2,5 @@
#pragma once #pragma once
#include "kernel/uevent.h" #include "kernel/uevent.h"
void _ueventTryAutoClear(UsermodeEvent* e); void _ueventTryAutoClear(UEvent* e);
bool _ueventAddListener(UsermodeEvent* e, WaiterNode* w, size_t idx, size_t* idx_out, Handle thread); bool _ueventAddListener(UEvent* e, WaiterNode* w, size_t idx, size_t* idx_out, Handle thread);

View File

@ -7,7 +7,7 @@
#define STOPPED 0 #define STOPPED 0
void utimerCreate(UsermodeTimer* t, u64 interval, TimerType type) void utimerCreate(UTimer* t, u64 interval, TimerType type)
{ {
_waitableInitialize(&t->waitable); _waitableInitialize(&t->waitable);
@ -16,7 +16,7 @@ void utimerCreate(UsermodeTimer* t, u64 interval, TimerType type)
t->type = type; t->type = type;
} }
void utimerStart(UsermodeTimer* t) void utimerStart(UTimer* t)
{ {
mutexLock(&t->waitable.mutex); mutexLock(&t->waitable.mutex);
@ -30,7 +30,7 @@ void utimerStart(UsermodeTimer* t)
mutexUnlock(&t->waitable.mutex); mutexUnlock(&t->waitable.mutex);
} }
void utimerStop(UsermodeTimer* t) void utimerStop(UTimer* t)
{ {
mutexLock(&t->waitable.mutex); mutexLock(&t->waitable.mutex);
@ -43,7 +43,7 @@ void utimerStop(UsermodeTimer* t)
mutexUnlock(&t->waitable.mutex); mutexUnlock(&t->waitable.mutex);
} }
void _utimerRecalculate(UsermodeTimer* t, u64 old_tick) void _utimerRecalculate(UTimer* t, u64 old_tick)
{ {
mutexLock(&t->waitable.mutex); mutexLock(&t->waitable.mutex);
@ -68,7 +68,7 @@ void _utimerRecalculate(UsermodeTimer* t, u64 old_tick)
mutexUnlock(&t->waitable.mutex); mutexUnlock(&t->waitable.mutex);
} }
u64 _utimerGetNextTick(UsermodeTimer* t) u64 _utimerGetNextTick(UTimer* t)
{ {
u64 ret; u64 ret;
@ -79,7 +79,7 @@ u64 _utimerGetNextTick(UsermodeTimer* t)
return ret; return ret;
} }
void _utimerAddListener(UsermodeTimer* t, WaiterNode* w, size_t idx, size_t* idx_out, Handle thread) void _utimerAddListener(UTimer* t, WaiterNode* w, size_t idx, size_t* idx_out, Handle thread)
{ {
_waiterNodeCreate(w, WaiterNodeType_Timer, &t->waitable, thread, idx, idx_out); _waiterNodeCreate(w, WaiterNodeType_Timer, &t->waitable, thread, idx, idx_out);

View File

@ -2,6 +2,6 @@
#pragma once #pragma once
#include "kernel/utimer.h" #include "kernel/utimer.h"
void _utimerRecalculate(UsermodeTimer* t, u64 old_tick); void _utimerRecalculate(UTimer* t, u64 old_tick);
u64 _utimerGetNextTick(UsermodeTimer* t); u64 _utimerGetNextTick(UTimer* t);
void _utimerAddListener(UsermodeTimer* t, WaiterNode* w, size_t idx, size_t* idx_out, Handle thread); void _utimerAddListener(UTimer* t, WaiterNode* w, size_t idx, size_t* idx_out, Handle thread);

View File

@ -45,7 +45,7 @@ static Result waitImpl(s32* idx_out, Waiter* objects, size_t num_objects, u64 ti
switch (obj->type) switch (obj->type)
{ {
case WaiterType_UsermodeTimer: case WaiterType_UTimer:
timer_tick = _utimerGetNextTick(obj->timer); timer_tick = _utimerGetNextTick(obj->timer);
@ -79,7 +79,7 @@ static Result waitImpl(s32* idx_out, Waiter* objects, size_t num_objects, u64 ti
num_waiters++; num_waiters++;
break; break;
case WaiterType_UsermodeEvent: case WaiterType_UEvent:
// Try to add a listener to the event, if it hasn't already signalled. // Try to add a listener to the event, if it hasn't already signalled.
added = _ueventAddListener( added = _ueventAddListener(