15103e761SPatrick Mooney /* 25103e761SPatrick Mooney * This file and its contents are supplied under the terms of the 35103e761SPatrick Mooney * Common Development and Distribution License ("CDDL"), version 1.0. 45103e761SPatrick Mooney * You may only use this file in accordance with the terms of version 55103e761SPatrick Mooney * 1.0 of the CDDL. 65103e761SPatrick Mooney * 75103e761SPatrick Mooney * A full copy of the text of the CDDL should have accompanied this 85103e761SPatrick Mooney * source. A copy of the CDDL is also available via the Internet at 95103e761SPatrick Mooney * http://www.illumos.org/license/CDDL. 105103e761SPatrick Mooney */ 115103e761SPatrick Mooney 125103e761SPatrick Mooney /* 13a1d41cf9SPatrick Mooney * Copyright 2023 Oxide Computer Company 145103e761SPatrick Mooney */ 155103e761SPatrick Mooney 165103e761SPatrick Mooney #ifndef _IN_GUEST_H_ 175103e761SPatrick Mooney #define _IN_GUEST_H_ 185103e761SPatrick Mooney 195103e761SPatrick Mooney #include "payload_common.h" 205103e761SPatrick Mooney 215103e761SPatrick Mooney struct vmctx *test_initialize(const char *); 224ac713daSLuqman Aden struct vmctx *test_initialize_flags(const char *, uint64_t); 2372473353SPatrick Mooney void test_reinitialize(struct vmctx *, uint64_t); 244ac713daSLuqman Aden void test_cleanup(bool); 25a1d41cf9SPatrick Mooney void test_fail(void); 265103e761SPatrick Mooney void test_fail_errno(int err, const char *msg); 275103e761SPatrick Mooney void test_fail_msg(const char *fmt, ...); 285103e761SPatrick Mooney void test_fail_vmexit(const struct vm_exit *vexit); 295103e761SPatrick Mooney void test_pass(void); 30a1d41cf9SPatrick Mooney const char *test_msg_get(struct vmctx *); 31a1d41cf9SPatrick Mooney void test_msg_print(struct vmctx *); 325103e761SPatrick Mooney 33*32640292SAndy Fiddaman int test_setup_vcpu(struct vcpu *, uint64_t, uint64_t); 345103e761SPatrick Mooney 355103e761SPatrick Mooney enum vm_exit_kind { 365103e761SPatrick Mooney /* Otherwise empty vmexit which should result in immediate re-entry */ 375103e761SPatrick Mooney VEK_REENTR, 385103e761SPatrick Mooney /* Write to IOP_TEST_RESULT port with success value (0) */ 395103e761SPatrick Mooney VEK_TEST_PASS, 405103e761SPatrick Mooney /* Write to IOP_TEST_RESULT port with failure value (non-zero) */ 415103e761SPatrick Mooney VEK_TEST_FAIL, 42a1d41cf9SPatrick Mooney /* Payload emitted a message via IOP_TEST_MSG port */ 43a1d41cf9SPatrick Mooney VEK_TEST_MSG, 445103e761SPatrick Mooney /* Test specific logic must handle exit data */ 455103e761SPatrick Mooney VEK_UNHANDLED, 465103e761SPatrick Mooney }; 475103e761SPatrick Mooney 48*32640292SAndy Fiddaman enum vm_exit_kind test_run_vcpu(struct vcpu *, struct vm_entry *, 495103e761SPatrick Mooney struct vm_exit *); 505103e761SPatrick Mooney 515103e761SPatrick Mooney void ventry_fulfill_inout(const struct vm_exit *, struct vm_entry *, uint32_t); 525103e761SPatrick Mooney void ventry_fulfill_mmio(const struct vm_exit *, struct vm_entry *, uint64_t); 535103e761SPatrick Mooney 545103e761SPatrick Mooney bool vexit_match_inout(const struct vm_exit *, bool, uint16_t, uint_t, 555103e761SPatrick Mooney uint32_t *); 565103e761SPatrick Mooney bool vexit_match_mmio(const struct vm_exit *, bool, uint64_t, uint_t, 575103e761SPatrick Mooney uint64_t *); 585103e761SPatrick Mooney 595103e761SPatrick Mooney #endif /* _IN_GUEST_H_ */ 60