From mboxrd@z Thu Jan 1 00:00:00 1970 From: Brijesh Singh Subject: [PATCH v9 24/29] sev/i386: add support to query PLATFORM_STATUS command Date: Thu, 15 Feb 2018 09:39:50 -0600 Message-ID: <20180215153955.3253-25-brijesh.singh@amd.com> References: <20180215153955.3253-1-brijesh.singh@amd.com> Mime-Version: 1.0 Content-Type: text/plain Cc: Alistair Francis , Christian Borntraeger , Cornelia Huck , "Daniel P . Berrange" , "Dr. David Alan Gilbert" , "Michael S. Tsirkin" , "Edgar E. Iglesias" , Eduardo Habkost , Eric Blake , kvm@vger.kernel.org, Marcel Apfelbaum , Markus Armbruster , Paolo Bonzini , Peter Crosthwaite , Peter Maydell , Richard Henderson , Stefan Hajnoczi , Thomas Lendacky , Borislav Petk To: qemu-devel@nongnu.org Return-path: Received: from mail-cys01nam02on0078.outbound.protection.outlook.com ([104.47.37.78]:12082 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1423875AbeBOPlM (ORCPT ); Thu, 15 Feb 2018 10:41:12 -0500 In-Reply-To: <20180215153955.3253-1-brijesh.singh@amd.com> Sender: kvm-owner@vger.kernel.org List-ID: The command is used to query the SEV API version and build id. Cc: Paolo Bonzini Cc: Richard Henderson Cc: Eduardo Habkost Signed-off-by: Brijesh Singh --- target/i386/sev.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/target/i386/sev.c b/target/i386/sev.c index 1fbc3beb1655..e3236f5bb7b6 100644 --- a/target/i386/sev.c +++ b/target/i386/sev.c @@ -21,6 +21,9 @@ #include "trace.h" #include "qapi-event.h" +#include +#include + #define DEFAULT_GUEST_POLICY 0x1 /* disable debug */ #define DEFAULT_SEV_DEVICE "/dev/sev" #define GUEST_POLICY_DBG_BIT 0x1 @@ -84,6 +87,22 @@ sev_ioctl(int cmd, void *data, int *error) return r; } +static int +sev_platform_ioctl(int cmd, void *data, int *error) +{ + int r; + struct sev_issue_cmd arg; + + arg.cmd = cmd; + arg.data = (unsigned long)data; + r = ioctl(sev_fd, SEV_ISSUE_CMD, &arg); + if (error) { + *error = arg.error; + } + + return r; +} + static const char * fw_error_to_str(int code) { @@ -399,6 +418,20 @@ sev_enabled(void) void sev_get_fw_version(uint8_t *major, uint8_t *minor, uint8_t *build) { + struct sev_user_data_status status = {}; + int r, err; + + r = sev_platform_ioctl(SEV_PLATFORM_STATUS, &status, &err); + if (r) { + error_report("%s: failed to get platform status ret=%d" + "fw_error='%d: %s'", __func__, r, err, + fw_error_to_str(err)); + return; + } + + *major = status.api_major; + *minor = status.api_minor; + *build = status.build; } void -- 2.14.3