From patchwork Tue May 13 15:00:05 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Gabriel L. Somlo" X-Patchwork-Id: 348375 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3B7091400B8 for ; Wed, 14 May 2014 01:01:06 +1000 (EST) Received: from localhost ([::1]:45615 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WkECW-0007WF-5r for incoming@patchwork.ozlabs.org; Tue, 13 May 2014 11:01:04 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59857) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WkEBi-0006SA-9V for qemu-devel@nongnu.org; Tue, 13 May 2014 11:00:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WkEBc-0002Fw-JN for qemu-devel@nongnu.org; Tue, 13 May 2014 11:00:14 -0400 Received: from mail-qc0-x229.google.com ([2607:f8b0:400d:c01::229]:52292) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WkEBc-0002Fk-FV for qemu-devel@nongnu.org; Tue, 13 May 2014 11:00:08 -0400 Received: by mail-qc0-f169.google.com with SMTP id e16so559653qcx.14 for ; Tue, 13 May 2014 08:00:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:mime-version:content-type :content-disposition:user-agent; bh=EMG8KnQkf6/D3yKoCqFrWbMO5DkvMZo1osTzDzCYWI8=; b=ALZHefhzBymdhWpZrst5o5b8S1qICPHmEEDgCYZBd7hChcCZ69UHvqykcgFxz3HdtD 2MnxYgOgxF6UkoH68Hmf7oEOogJhu6iitu1LZnhX2n1cHLcZcif9Ud/Q3gSi4RdYPCZN oGLUqDNQ4Y0GhTtAzfsGDbVYsl3QcNeT+suKIM1v1jEY1dvMOx8rnqfVCwMOL7+rEoN4 zxGeV8OKsUxqGFvDWW5e31RcdKUJrKF93kG1veJmwpyS/mpBmiDBel35HPYBTd8XS3R8 AGJlfLSTbnn7ypk7UYizoUhtGqvsBESw9GwQaLhHmp5UuV0svrlWq4PgG3SK6TVBvc3K 8kNA== X-Received: by 10.140.28.198 with SMTP id 64mr46234066qgz.49.1399993207563; Tue, 13 May 2014 08:00:07 -0700 (PDT) Received: from ERROL.INI.CMU.EDU (ERROL.INI.CMU.EDU. [128.2.16.43]) by mx.google.com with ESMTPSA id l61sm12117399qge.11.2014.05.13.08.00.06 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 13 May 2014 08:00:07 -0700 (PDT) Date: Tue, 13 May 2014 11:00:05 -0400 From: "Gabriel L. Somlo" To: qemu-devel@nongnu.org Message-ID: <20140513150003.GK30030@ERROL.INI.CMU.EDU> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:400d:c01::229 Cc: pbonzini@redhat.com, lersek@redhat.com, kraxel@redhat.com Subject: [Qemu-devel] [PATCH] SMBIOS: Update Type 0 struct generator for machines >= 2.1 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org A type 0 (bios info) smbios structure is only generated if explicitly requested on the command line. This patch updates the mechanism for generating this type of structure as follows: - convert bios_characteristics field to uin64_t (instead of uint8_t[8]) as described in the current smbios spec (v2.8) - enable "virtual machine" bit in bios_characteristics_extension_bits - add command line option to enable "uefi supported" bit in bios_characteristics_extension_bits These updates should make this optional smbios structure more useful when used with edk2/ovmf. Only pc machines 2.1 and newer are affected, and only when the user explicitly requests that a type 0 struct be generated. Signed-off-by: Gabriel Somlo --- On Mon, May 12, 2014 at 11:20:15PM +0200, Laszlo Ersek wrote: > I think exposing the bios extension bytes on the qemu > command line (for saying "virtual machine" and "UEFI supported") is more > important [...] I think the "virtual machine" bit shouldn't be negotiable. I added an option to flip the "uefi" bit from the command line. Also cleaned up the bios_characteristics field in the process. Let me know what you all think. Thanks, Gabriel hw/i386/smbios.c | 18 +++++++++++------- include/hw/i386/smbios.h | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/hw/i386/smbios.c b/hw/i386/smbios.c index 7660718..b91d45e 100644 --- a/hw/i386/smbios.c +++ b/hw/i386/smbios.c @@ -67,7 +67,7 @@ static DECLARE_BITMAP(have_fields_bitmap, SMBIOS_MAX_TYPE+1); static struct { const char *vendor, *version, *date; - bool have_major_minor; + bool have_major_minor, uefi; uint8_t major, minor; } type0; @@ -134,6 +134,10 @@ static const QemuOptDesc qemu_smbios_type0_opts[] = { .name = "release", .type = QEMU_OPT_STRING, .help = "revision number", + },{ + .name = "uefi", + .type = QEMU_OPT_BOOL, + .help = "uefi support", }, { /* end of list */ } }; @@ -497,13 +501,12 @@ static void smbios_build_type_0_table(void) t->bios_rom_size = 0; /* hardcoded in SeaBIOS with FIXME comment */ - /* BIOS characteristics not supported */ - memset(t->bios_characteristics, 0, 8); - t->bios_characteristics[0] = 0x08; - - /* Enable targeted content distribution (needed for SVVP, per SeaBIOS) */ + t->bios_characteristics = 0x08; /* Not supported */ t->bios_characteristics_extension_bytes[0] = 0; - t->bios_characteristics_extension_bytes[1] = 4; + t->bios_characteristics_extension_bytes[1] = 0x14; /* TCD/SVVP | VM */ + if (type0.uefi) { + t->bios_characteristics_extension_bytes[1] |= 0x08; /* |= UEFI */ + } if (type0.have_major_minor) { t->system_bios_major_release = type0.major; @@ -977,6 +980,7 @@ void smbios_entry_add(QemuOpts *opts) save_opt(&type0.vendor, opts, "vendor"); save_opt(&type0.version, opts, "version"); save_opt(&type0.date, opts, "date"); + type0.uefi = qemu_opt_get_bool(opts, "uefi", false); val = qemu_opt_get(opts, "release"); if (val) { diff --git a/include/hw/i386/smbios.h b/include/hw/i386/smbios.h index 6d854b7..5583f60 100644 --- a/include/hw/i386/smbios.h +++ b/include/hw/i386/smbios.h @@ -64,7 +64,7 @@ struct smbios_type_0 { uint16_t bios_starting_address_segment; uint8_t bios_release_date_str; uint8_t bios_rom_size; - uint8_t bios_characteristics[8]; + uint64_t bios_characteristics; uint8_t bios_characteristics_extension_bytes[2]; uint8_t system_bios_major_release; uint8_t system_bios_minor_release;