You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
891 B
62 lines
891 B
4 years ago
|
#pragma once
|
||
|
#include "mm.hpp"
|
||
|
|
||
|
namespace command
|
||
|
{
|
||
|
enum class vmcall_option
|
||
|
{
|
||
|
translate,
|
||
|
copy_virt,
|
||
|
write_phys,
|
||
|
read_phys,
|
||
|
dirbase
|
||
|
};
|
||
|
|
||
|
typedef struct _vmcall_command_t
|
||
|
{
|
||
|
bool present;
|
||
|
bool result;
|
||
|
vmcall_option option;
|
||
|
|
||
|
union
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
u64 dirbase;
|
||
|
u64 virt_addr;
|
||
|
u64 phys_addr;
|
||
|
} translate;
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
u64 virt_src;
|
||
|
u64 dirbase_src;
|
||
|
u64 virt_dest;
|
||
|
u64 dirbase_dest;
|
||
|
u64 size;
|
||
|
} copy_virt;
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
u64 virt_src;
|
||
|
u64 dirbase_src;
|
||
|
u64 phys_dest;
|
||
|
u64 size;
|
||
|
} write_phys;
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
u64 phys_src;
|
||
|
u64 dirbase_dest;
|
||
|
u64 virt_dest;
|
||
|
u64 size;
|
||
|
} read_phys;
|
||
|
|
||
|
u64 dirbase;
|
||
|
};
|
||
|
|
||
|
} vmcall_command_t, * pvmcall_command_t;
|
||
|
|
||
|
auto get(u64 dirbase, u64 command_ptr)->vmcall_command_t;
|
||
|
auto set(u64 dirbase, u64 command_ptr, const vmcall_command_t& vmcall_command) -> void;
|
||
|
}
|