#ifndef _IN_GUEST_H_
#define _IN_GUEST_H_
#include "payload_common.h"
struct vmctx *test_initialize(const char *);
struct vmctx *test_initialize_plain(const char *);
struct vmctx *test_initialize_flags(const char *, uint64_t);
void test_reinitialize(struct vmctx *, uint64_t);
void test_cleanup(bool);
void test_fail(void);
void test_fail_errno(int err, const char *msg);
void test_fail_msg(const char *fmt, ...);
void test_fail_vmexit(const struct vm_exit *vexit);
void test_pass(void);
const char *test_msg_get(struct vmctx *);
void test_msg_print(struct vmctx *);
int test_setup_vcpu(struct vcpu *, uint64_t, uint64_t);
enum vm_exit_kind {
VEK_REENTR,
VEK_TEST_PASS,
VEK_TEST_FAIL,
VEK_TEST_MSG,
VEK_UNHANDLED,
};
enum vm_exit_kind test_run_vcpu(struct vcpu *, struct vm_entry *,
struct vm_exit *);
void ventry_fulfill_inout(const struct vm_exit *, struct vm_entry *, uint32_t);
void ventry_fulfill_mmio(const struct vm_exit *, struct vm_entry *, uint64_t);
bool vexit_match_inout(const struct vm_exit *, bool, uint16_t, uint_t,
uint32_t *);
bool vexit_match_mmio(const struct vm_exit *, bool, uint64_t, uint_t,
uint64_t *);
#endif