Move the `hv_vp_register_page` structure definition from `hvgdk_mini.h` to
`hvhdk.h`.
Fixes: 8afb40b7fe
Signed-off-by: Doru Blânzeanu <dblanzeanu@linux.microsoft.com>
---
include/hw/hyperv/hvgdk.h | 2 +
include/hw/hyperv/hvgdk_mini.h | 103 --------------------------------
include/hw/hyperv/hvhdk.h | 106 +++++++++++++++++++++++++++++++++
3 files changed, 108 insertions(+), 103 deletions(-)
diff --git a/include/hw/hyperv/hvgdk.h b/include/hw/hyperv/hvgdk.h
index 71161f477c..e4be861716 100644
--- a/include/hw/hyperv/hvgdk.h
+++ b/include/hw/hyperv/hvgdk.h
@@ -9,6 +9,8 @@
#ifndef HW_HYPERV_HVGDK_H
#define HW_HYPERV_HVGDK_H
+#include "hvgdk_mini.h"
+
#define HVGDK_H_VERSION (25125)
enum hv_unimplemented_msr_action {
diff --git a/include/hw/hyperv/hvgdk_mini.h b/include/hw/hyperv/hvgdk_mini.h
index f8838a31bb..c6749a9525 100644
--- a/include/hw/hyperv/hvgdk_mini.h
+++ b/include/hw/hyperv/hvgdk_mini.h
@@ -504,109 +504,6 @@ struct hv_input_assert_virtual_interrupt {
uint16_t rsvd_z1;
} QEMU_PACKED;
-/* Flags for dirty mask of hv_vp_register_page */
-enum hv_x64_register_class_type {
- HV_X64_REGISTER_CLASS_GENERAL = 0,
- HV_X64_REGISTER_CLASS_IP = 1,
- HV_X64_REGISTER_CLASS_XMM = 2,
- HV_X64_REGISTER_CLASS_SEGMENT = 3,
- HV_X64_REGISTER_CLASS_FLAGS = 4,
-};
-
-#define HV_VP_REGISTER_PAGE_MAX_VECTOR_COUNT 7
-
-union hv_vp_register_page_interrupt_vectors {
- uint64_t as_uint64;
- struct {
- uint8_t vector_count;
- uint8_t vector[HV_VP_REGISTER_PAGE_MAX_VECTOR_COUNT];
- };
-};
-
-struct hv_vp_register_page {
- uint16_t version;
- uint8_t isvalid;
- uint8_t rsvdz;
- uint32_t dirty;
-
- union {
- struct {
- /* General purpose registers (HV_X64_REGISTER_CLASS_GENERAL) */
- union {
- struct {
- uint64_t rax;
- uint64_t rcx;
- uint64_t rdx;
- uint64_t rbx;
- uint64_t rsp;
- uint64_t rbp;
- uint64_t rsi;
- uint64_t rdi;
- uint64_t r8;
- uint64_t r9;
- uint64_t r10;
- uint64_t r11;
- uint64_t r12;
- uint64_t r13;
- uint64_t r14;
- uint64_t r15;
- } QEMU_PACKED;
-
- uint64_t gp_registers[16];
- };
- /* Instruction pointer (HV_X64_REGISTER_CLASS_IP) */
- uint64_t rip;
- /* Flags (HV_X64_REGISTER_CLASS_FLAGS) */
- uint64_t rflags;
- } QEMU_PACKED;
-
- uint64_t registers[18];
- };
- uint8_t reserved[8];
- /* Volatile XMM registers (HV_X64_REGISTER_CLASS_XMM) */
- union {
- struct {
- struct hv_u128 xmm0;
- struct hv_u128 xmm1;
- struct hv_u128 xmm2;
- struct hv_u128 xmm3;
- struct hv_u128 xmm4;
- struct hv_u128 xmm5;
- } QEMU_PACKED;
-
- struct hv_u128 xmm_registers[6];
- };
- /* Segment registers (HV_X64_REGISTER_CLASS_SEGMENT) */
- union {
- struct {
- struct hv_x64_segment_register es;
- struct hv_x64_segment_register cs;
- struct hv_x64_segment_register ss;
- struct hv_x64_segment_register ds;
- struct hv_x64_segment_register fs;
- struct hv_x64_segment_register gs;
- } QEMU_PACKED;
-
- struct hv_x64_segment_register segment_registers[6];
- };
- /* Misc. control registers (cannot be set via this interface) */
- uint64_t cr0;
- uint64_t cr3;
- uint64_t cr4;
- uint64_t cr8;
- uint64_t efer;
- uint64_t dr7;
- union hv_x64_pending_interruption_register pending_interruption;
- union hv_x64_interrupt_state_register interrupt_state;
- uint64_t instruction_emulation_hints;
- uint64_t xfem;
-
- uint8_t reserved1[0x100];
-
- /* Interrupts injected as part of HvCallDispatchVp. */
- union hv_vp_register_page_interrupt_vectors interrupt_vectors;
-} QEMU_PACKED;
-
/* /dev/mshv */
#define MSHV_CREATE_PARTITION _IOW(MSHV_IOCTL, 0x00, struct mshv_create_partition)
#define MSHV_CREATE_VP _IOW(MSHV_IOCTL, 0x01, struct mshv_create_vp)
diff --git a/include/hw/hyperv/hvhdk.h b/include/hw/hyperv/hvhdk.h
index 9e6dcb22f6..b9b76cf93c 100644
--- a/include/hw/hyperv/hvhdk.h
+++ b/include/hw/hyperv/hvhdk.h
@@ -9,7 +9,12 @@
#ifndef HW_HYPERV_HVHDK_H
#define HW_HYPERV_HVHDK_H
+#include "hvgdk.h"
+#include "hvhdk_mini.h"
+
#define HV_PARTITION_SYNTHETIC_PROCESSOR_FEATURES_BANKS 1
+#define HV_VP_REGISTER_PAGE_VERSION_1 1u
+#define HV_VP_REGISTER_PAGE_MAX_VECTOR_COUNT 7
struct hv_input_get_partition_property {
uint64_t partition_id;
@@ -441,4 +446,105 @@ typedef struct hv_input_register_intercept_result {
union hv_register_intercept_result_parameters parameters;
} QEMU_PACKED hv_input_register_intercept_result;
+/* Flags for dirty mask of hv_vp_register_page */
+enum hv_x64_register_class_type {
+ HV_X64_REGISTER_CLASS_GENERAL = 0,
+ HV_X64_REGISTER_CLASS_IP = 1,
+ HV_X64_REGISTER_CLASS_XMM = 2,
+ HV_X64_REGISTER_CLASS_SEGMENT = 3,
+ HV_X64_REGISTER_CLASS_FLAGS = 4,
+};
+
+union hv_vp_register_page_interrupt_vectors {
+ uint64_t as_uint64;
+ struct {
+ uint8_t vector_count;
+ uint8_t vector[HV_VP_REGISTER_PAGE_MAX_VECTOR_COUNT];
+ };
+};
+
+struct hv_vp_register_page {
+ uint16_t version;
+ uint8_t isvalid;
+ uint8_t rsvdz;
+ uint32_t dirty;
+
+ union {
+ struct {
+ /* General purpose registers (HV_X64_REGISTER_CLASS_GENERAL) */
+ union {
+ struct {
+ uint64_t rax;
+ uint64_t rcx;
+ uint64_t rdx;
+ uint64_t rbx;
+ uint64_t rsp;
+ uint64_t rbp;
+ uint64_t rsi;
+ uint64_t rdi;
+ uint64_t r8;
+ uint64_t r9;
+ uint64_t r10;
+ uint64_t r11;
+ uint64_t r12;
+ uint64_t r13;
+ uint64_t r14;
+ uint64_t r15;
+ } QEMU_PACKED;
+
+ uint64_t gp_registers[16];
+ };
+ /* Instruction pointer (HV_X64_REGISTER_CLASS_IP) */
+ uint64_t rip;
+ /* Flags (HV_X64_REGISTER_CLASS_FLAGS) */
+ uint64_t rflags;
+ } QEMU_PACKED;
+
+ uint64_t registers[18];
+ };
+ uint8_t reserved[8];
+ /* Volatile XMM registers (HV_X64_REGISTER_CLASS_XMM) */
+ union {
+ struct {
+ struct hv_u128 xmm0;
+ struct hv_u128 xmm1;
+ struct hv_u128 xmm2;
+ struct hv_u128 xmm3;
+ struct hv_u128 xmm4;
+ struct hv_u128 xmm5;
+ } QEMU_PACKED;
+
+ struct hv_u128 xmm_registers[6];
+ };
+ /* Segment registers (HV_X64_REGISTER_CLASS_SEGMENT) */
+ union {
+ struct {
+ struct hv_x64_segment_register es;
+ struct hv_x64_segment_register cs;
+ struct hv_x64_segment_register ss;
+ struct hv_x64_segment_register ds;
+ struct hv_x64_segment_register fs;
+ struct hv_x64_segment_register gs;
+ } QEMU_PACKED;
+
+ struct hv_x64_segment_register segment_registers[6];
+ };
+ /* Misc. control registers (cannot be set via this interface) */
+ uint64_t cr0;
+ uint64_t cr3;
+ uint64_t cr4;
+ uint64_t cr8;
+ uint64_t efer;
+ uint64_t dr7;
+ union hv_x64_pending_interruption_register pending_interruption;
+ union hv_x64_interrupt_state_register interrupt_state;
+ uint64_t instruction_emulation_hints;
+ uint64_t xfem;
+
+ uint8_t reserved1[0x100];
+
+ /* Interrupts injected as part of HvCallDispatchVp. */
+ union hv_vp_register_page_interrupt_vectors interrupt_vectors;
+} QEMU_PACKED;
+
#endif /* HW_HYPERV_HVHDK_H */
--
2.53.0
© 2016 - 2026 Red Hat, Inc.