The command is used to retrieve status information about an SEV-enabled guest.
Signed-off-by: Brijesh Singh <brijesh.singh@amd.com>
---
include/sysemu/sev.h | 9 +++++++++
sev.c | 28 ++++++++++++++++++++++++++++
2 files changed, 37 insertions(+)
diff --git a/include/sysemu/sev.h b/include/sysemu/sev.h
index 747fe87..88cbea5 100644
--- a/include/sysemu/sev.h
+++ b/include/sysemu/sev.h
@@ -82,6 +82,15 @@ struct SEVState {
typedef struct SEVState SEVState;
+enum {
+ SEV_STATE_INVALID = 0,
+ SEV_STATE_LAUNCHING,
+ SEV_STATE_SECRET,
+ SEV_STATE_RUNNING,
+ SEV_STATE_RECEIVING,
+ SEV_STATE_SENDING,
+ SEV_STATE_MAX
+};
bool sev_enabled(void);
void *sev_guest_init(const char *keyid);
diff --git a/sev.c b/sev.c
index 4b3f39a..c13bbfd 100644
--- a/sev.c
+++ b/sev.c
@@ -197,6 +197,34 @@ err:
}
static int
+sev_get_current_state(SEVState *s)
+{
+ int error;
+ int ret = SEV_STATE_INVALID;
+ struct kvm_sev_guest_status *status;
+
+ if (!s) {
+ return ret;
+ }
+
+ status = g_malloc(sizeof(*status));
+ if (!status) {
+ return ret;
+ }
+
+ ret = sev_ioctl(KVM_SEV_GUEST_STATUS, status, &error);
+ if (ret) {
+ fprintf(stderr, "failed GUEST_STATUS %d (%#x)\n", ret, error);
+ goto err;
+ }
+
+ ret = status->state;
+err:
+ g_free(status);
+ return ret;
+}
+
+static int
sev_mem_write(uint8_t *dst, const uint8_t *src, uint32_t len, MemTxAttrs attrs)
{
return 0;