From: Oliver Steffen <osteffen@redhat.com>
Move QIgvm and QIgvmParameter struct definitions from the source file
into an IGVM internal header file to allow implementing architecture
specific IGVM code in other places, for example target/i386/igvm.c.
Signed-off-by: Oliver Steffen <osteffen@redhat.com>
Message-ID: <20260130054714.715928-5-osteffen@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
include/system/igvm-internal.h | 40 ++++++++++++++++++++++++++++++++++
backends/igvm.c | 37 -------------------------------
2 files changed, 40 insertions(+), 37 deletions(-)
diff --git a/include/system/igvm-internal.h b/include/system/igvm-internal.h
index 171cec8d0f6c..9c8e887d6f60 100644
--- a/include/system/igvm-internal.h
+++ b/include/system/igvm-internal.h
@@ -9,10 +9,12 @@
#ifndef QEMU_IGVM_INTERNAL_H
#define QEMU_IGVM_INTERNAL_H
+#include "qemu/queue.h"
#include "qemu/typedefs.h"
#include "qom/object.h"
#include "hw/core/resettable.h"
+#include "system/confidential-guest-support.h"
#include <igvm/igvm.h>
struct IgvmCfg {
@@ -28,6 +30,44 @@ struct IgvmCfg {
ResettableState reset_state;
};
+typedef struct QIgvmParameterData {
+ QTAILQ_ENTRY(QIgvmParameterData) next;
+ uint8_t *data;
+ uint32_t size;
+ uint32_t index;
+} QIgvmParameterData;
+
+/*
+ * QIgvm contains the information required during processing of a single IGVM
+ * file.
+ */
+typedef struct QIgvm {
+ IgvmHandle file;
+ ConfidentialGuestSupport *cgs;
+ ConfidentialGuestSupportClass *cgsc;
+ uint32_t compatibility_mask;
+ unsigned current_header_index;
+ QTAILQ_HEAD(, QIgvmParameterData) parameter_data;
+ IgvmPlatformType platform_type;
+
+ /*
+ * SEV-SNP platforms can contain an ID block and authentication
+ * that should be verified by the guest.
+ */
+ struct sev_id_block *id_block;
+ struct sev_id_authentication *id_auth;
+
+ /* Define the guest policy for SEV guests */
+ uint64_t sev_policy;
+
+ /* These variables keep track of contiguous page regions */
+ IGVM_VHS_PAGE_DATA region_prev_page_data;
+ uint64_t region_start;
+ unsigned region_start_index;
+ unsigned region_last_index;
+ unsigned region_page_count;
+} QIgvm;
+
IgvmHandle qigvm_file_init(char *filename, Error **errp);
#endif
diff --git a/backends/igvm.c b/backends/igvm.c
index 4cf7b572347c..3a3832dc2dde 100644
--- a/backends/igvm.c
+++ b/backends/igvm.c
@@ -25,12 +25,6 @@
#include <igvm/igvm.h>
#include <igvm/igvm_defs.h>
-typedef struct QIgvmParameterData {
- QTAILQ_ENTRY(QIgvmParameterData) next;
- uint8_t *data;
- uint32_t size;
- uint32_t index;
-} QIgvmParameterData;
/*
* Some directives are specific to particular confidential computing platforms.
@@ -66,37 +60,6 @@ struct QEMU_PACKED sev_id_authentication {
#define IGVM_SEV_ID_BLOCK_VERSION 1
-/*
- * QIgvm contains the information required during processing
- * of a single IGVM file.
- */
-typedef struct QIgvm {
- IgvmHandle file;
- ConfidentialGuestSupport *cgs;
- ConfidentialGuestSupportClass *cgsc;
- uint32_t compatibility_mask;
- unsigned current_header_index;
- QTAILQ_HEAD(, QIgvmParameterData) parameter_data;
- IgvmPlatformType platform_type;
-
- /*
- * SEV-SNP platforms can contain an ID block and authentication
- * that should be verified by the guest.
- */
- struct sev_id_block *id_block;
- struct sev_id_authentication *id_auth;
-
- /* Define the guest policy for SEV guests */
- uint64_t sev_policy;
-
- /* These variables keep track of contiguous page regions */
- IGVM_VHS_PAGE_DATA region_prev_page_data;
- uint64_t region_start;
- unsigned region_start_index;
- unsigned region_last_index;
- unsigned region_page_count;
-} QIgvm;
-
static int qigvm_directive_page_data(QIgvm *ctx, const uint8_t *header_data,
Error **errp);
static int qigvm_directive_vp_context(QIgvm *ctx, const uint8_t *header_data,
--
2.52.0