The command is used to retrieve status information about an SEV-enabled guest.
Signed-off-by: Brijesh Singh <brijesh.si...@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;