ReXGlue SDK
Loading...
Searching...
No Matches
io_completion_object.h
Go to the documentation of this file.
1
17
18#pragma once
19
20#include <memory>
21#include <mutex>
22#include <queue>
23
24#include <rex/assert.h>
30#include <rex/module.h>
31#include <rex/platform.h>
32#include <rex/platform/sync.h>
33#include <rex/platform/thread.h>
34#include <rex/platform/timer.h>
35#include <rex/result.h>
36#include <rex/types.h>
37#include <rex/utility.h>
38
39namespace rex::kernel {
40
43 u32 key;
45 u32 status;
46 u32 num_bytes;
47};
48
49struct IOCompletionObject {
51 static constexpr u32 kMaxNotifications = 1024;
52
53 REX_KERNEL_API IOCompletionObject();
54
55 std::mutex notification_lock;
57 std::queue<IONotification> notifications;
59 std::unique_ptr<rex::platform::Semaphore> notification_semaphore;
60
62 REX_KERNEL_API void Queue(const IONotification& notification);
63
71 REX_KERNEL_API bool Wait(u64 wait_ticks, IONotification* out_notification);
72};
73
74} // namespace rex::kernel
Virtual memory flags and typed guest pointers.
Guest list and spin lock structures.
Interfaces, factory and module declaration.
Definition export.h:24
Platform flags, packing macros and export markers.
#define REX_KERNEL_API
Definition platform.h:297
std::queue< IONotification > notifications
Definition io_completion_object.h:57
std::unique_ptr< rex::platform::Semaphore > notification_semaphore
Definition io_completion_object.h:59
void Queue(const IONotification &notification)
static constexpr u32 kMaxNotifications
Definition io_completion_object.h:51
bool Wait(u64 wait_ticks, IONotification *out_notification)
Definition io_completion_object.h:42
u32 apc_context
Definition io_completion_object.h:44
u32 key
Definition io_completion_object.h:43
u32 status
Definition io_completion_object.h:45
Wait objects and wait functions.
Integer types, byte order wrappers and size literals.
Move only function, const propagating pointer and scope guard.