ReXGlue SDK
Toggle main menu visibility
Loading...
Searching...
No Matches
guest.h
Go to the documentation of this file.
1
11
12
#pragma once
13
14
#include <cstddef>
15
#include <span>
16
#include <stop_token>
17
#include <string_view>
18
19
#include <
rex/platform.h
>
20
#include <
rex/result.h
>
21
#include <
rex/types.h
>
22
#include <
rex/utility.h
>
23
24
namespace
rex
{
25
26
struct
PhysicalRange
{
27
u32 address = 0;
28
u32 length = 0;
29
};
30
31
class
IPhysicalWriteListener
{
32
public
:
33
virtual
~IPhysicalWriteListener
() =
default
;
34
43
virtual
PhysicalRange
OnPhysicalWrite
(
PhysicalRange
range,
bool
exact) = 0;
44
};
45
50
class
IPhysicalMemory
{
51
public
:
52
virtual
~IPhysicalMemory
() =
default
;
53
60
[[nodiscard]]
virtual
Result<void>
CopyFromPhysical
(u32 address, std::span<std::byte> out) = 0;
61
68
[[nodiscard]]
virtual
Result<void>
CopyToPhysical
(u32 address,
69
std::span<const std::byte> data) = 0;
70
74
[[nodiscard]]
virtual
Result<std::span<const std::byte>
>
GetReadOnlyPhysicalSpan
(
75
PhysicalRange
range) = 0;
76
81
[[nodiscard]]
virtual
Result<std::span<std::byte>
>
GetWritablePhysicalSpan
(
82
PhysicalRange
range) = 0;
83
90
[[nodiscard]]
virtual
Result<void>
StoreRelease32
(u32 address, u32 value) = 0;
91
98
[[nodiscard]]
virtual
Result<u32>
LoadAcquire32
(u32 address) = 0;
99
};
100
101
class
IPhysicalWriteWatch
{
102
public
:
103
virtual
~IPhysicalWriteWatch
() =
default
;
104
111
[[nodiscard]]
virtual
ScopeGuard
AddWriteListener
(
IPhysicalWriteListener
& listener) = 0;
112
116
virtual
void
WatchPhysicalWrites
(
PhysicalRange
range) = 0;
117
123
[[nodiscard]]
virtual
ScopeGuard
LockWriteWatches
() = 0;
124
};
125
127
class
IGuestInterrupts
{
128
public
:
129
virtual
~IGuestInterrupts
() =
default
;
130
138
[[nodiscard]]
virtual
Result<void>
RaiseGraphicsInterrupt
(u32 source, u32 cpu) = 0;
139
146
[[nodiscard]]
virtual
Result<ScopeGuard>
StartHostThread
(
147
std::string_view name,
MoveOnlyFunction
<
void
(std::stop_token)> fn) = 0;
148
};
149
150
}
// namespace rex
rex::IGuestInterrupts
Definition
guest.h:127
rex::IGuestInterrupts::StartHostThread
virtual Result< ScopeGuard > StartHostThread(std::string_view name, MoveOnlyFunction< void(std::stop_token)> fn)=0
rex::IGuestInterrupts::RaiseGraphicsInterrupt
virtual Result< void > RaiseGraphicsInterrupt(u32 source, u32 cpu)=0
rex::IPhysicalMemory
Definition
guest.h:50
rex::IPhysicalMemory::CopyToPhysical
virtual Result< void > CopyToPhysical(u32 address, std::span< const std::byte > data)=0
rex::IPhysicalMemory::LoadAcquire32
virtual Result< u32 > LoadAcquire32(u32 address)=0
rex::IPhysicalMemory::GetReadOnlyPhysicalSpan
virtual Result< std::span< const std::byte > > GetReadOnlyPhysicalSpan(PhysicalRange range)=0
rex::IPhysicalMemory::StoreRelease32
virtual Result< void > StoreRelease32(u32 address, u32 value)=0
rex::IPhysicalMemory::GetWritablePhysicalSpan
virtual Result< std::span< std::byte > > GetWritablePhysicalSpan(PhysicalRange range)=0
rex::IPhysicalMemory::CopyFromPhysical
virtual Result< void > CopyFromPhysical(u32 address, std::span< std::byte > out)=0
rex::IPhysicalWriteListener
Definition
guest.h:31
rex::IPhysicalWriteListener::OnPhysicalWrite
virtual PhysicalRange OnPhysicalWrite(PhysicalRange range, bool exact)=0
rex::IPhysicalWriteWatch
Definition
guest.h:101
rex::IPhysicalWriteWatch::LockWriteWatches
virtual ScopeGuard LockWriteWatches()=0
rex::IPhysicalWriteWatch::WatchPhysicalWrites
virtual void WatchPhysicalWrites(PhysicalRange range)=0
rex::IPhysicalWriteWatch::AddWriteListener
virtual ScopeGuard AddWriteListener(IPhysicalWriteListener &listener)=0
rex::ScopeGuard
Definition
utility.h:305
rex
Definition
app.h:36
rex::MoveOnlyFunction
typename detail::MoveOnlyFunctionFor< Signature >::type MoveOnlyFunction
Definition
utility.h:254
rex::Result
std::expected< T, Error > Result
Definition
result.h:98
platform.h
Platform flags, packing macros and export markers.
result.h
rex::PhysicalRange
Definition
guest.h:26
types.h
Integer types, byte order wrappers and size literals.
utility.h
Move only function, const propagating pointer and scope guard.
rex
guest.h
Generated by
1.18.0