From: Ryan Harper <ryanh@us.ibm.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: kvm-devel@lists.sourceforge.net, Ryan Harper <ryanh@us.ibm.com>,
qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: [kvm-devel] [PATCH 1 of 3] export SMBIOS/DMI tables to PC machines
Date: Fri, 7 Dec 2007 14:52:50 -0600 [thread overview]
Message-ID: <20071207205250.GF23913@us.ibm.com> (raw)
In-Reply-To: <4759B1A9.5080302@codemonkey.ws>
* Anthony Liguori <anthony@codemonkey.ws> [2007-12-07 14:49]:
> Ryan Harper wrote:
> >5 files changed, 754 insertions(+), 2 deletions(-)
> >Makefile.target | 4
> >hw/pc.c | 47 ++++
> >smbios.c | 519
> >+++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >smbios_types.h | 182 +++++++++++++++++++
> >sysemu.h | 4
> >
> >
> ># HG changeset patch
> ># User Ryan Harper <ryanh@us.ibm.com>
> ># Date 1197058922 21600
> ># Node ID 37bf559ffcf74bfe62ec038c5818e4cf29b817f5
> ># Parent 25082b761acbe8b7fa535dedb4a53e02ef74128d
> >export SMBIOS/DMI tables to PC machines.
> >
> >This patch introduces code to generate PC SMBIOS/DMI tables and load them
> >into machine memory. The resultant machine can use standard tools like
> >dmidecode to examine the in-memory generated table.
> >
> >Signed-off-by: Ryan Harper <ryanh@us.ibm.com>
> >
> >diff -r 25082b761acb -r 37bf559ffcf7 Makefile.target
> >--- a/Makefile.target Wed Dec 05 03:23:38 2007 +0000
> >+++ b/Makefile.target Fri Dec 07 14:22:02 2007 -0600
> >@@ -396,7 +396,7 @@ endif
> > endif
> >
> > # must use static linking to avoid leaving stuff in virtual address space
> >-VL_OBJS=vl.o osdep.o monitor.o pci.o loader.o isa_mmio.o
> >+VL_OBJS=vl.o osdep.o monitor.o pci.o loader.o isa_mmio.o smbios.o
> >
>
> smbios is x86 specific so you should move this down to one of the ifeq
> ($(TARGET_BASE_ARCH), i386) guards.
>
OK
> > # XXX: suppress QEMU_TOOL tests
> > VL_OBJS+=block-raw.o
> >
> >@@ -535,7 +535,7 @@ ifndef CONFIG_DARWIN
> > ifndef CONFIG_DARWIN
> > ifndef CONFIG_WIN32
> > ifndef CONFIG_SOLARIS
> >-VL_LIBS+=-lutil
> >+VL_LIBS+=-lutil -luuid
> > endif
> > endif
> > endif
> >diff -r 25082b761acb -r 37bf559ffcf7 hw/pc.c
> >--- a/hw/pc.c Wed Dec 05 03:23:38 2007 +0000
> >+++ b/hw/pc.c Fri Dec 07 14:22:02 2007 -0600
> >@@ -44,6 +44,13 @@
> >
> > #define MAX_IDE_BUS 2
> >
> >+/* Hole in BIOS space between 0xF0000 and 0xFFF0 for DMI entry point */
> >+#define SMBIOS_ENTRY 0x000fac00
> >+
> >+/* ensure SMBIOS tables have enough room to support MAX_CPUS number of
> >+ * processor entries */
> >+#define SMBIOS_EXTRA (5 << 12)
> >+
> > static fdctrl_t *floppy_controller;
> > static RTCState *rtc_state;
> > static PITState *pit;
> >@@ -832,6 +839,46 @@ static void pc_init1(int ram_size, int v
> > }
> > }
> >
> >+ {
> >+ ram_addr_t smbios_offset, entrypoint_offset, smbios_base;
> >+ uint32_t smbios_phys;
> >+ int smbios_size
> >
>
> It's better to not have these open segments in the middle of functions.
> You can either move the variable declarations to the top of the function
> or split out into a separate function.
Easy enough, I'll adjust.
> >+ /* phys_ram_base + bios_offset implies 0xe0000 in guest ram */
> >+ smbios_base = (ram_addr_t)phys_ram_base + bios_offset;
> >+
> >+ /* take a guess at smbios size */
> >+ smbios_size = (SMBIOS_EXTRA-1) & ~4095;
> >+
> >+ /* we only have 32k of space between rombios32 and rombios16 */
> >+ if (smbios_size > SMBIOS_MAXIMUM_SIZE) {
> >+ fprintf(stderr, "qemu: SMBIOS image size too big (%u), max
> >%u\n",
> >+ smbios_size, SMBIOS_MAXIMUM_SIZE);
> >+ exit(1);
> >+ }
> >+
> >+ /* smbios is composed of two regions, an entry point table and
> >+ * a second table of all of the data. These regions will live
> >+ * at different phyiscal addresses so we need to reserve space
> >+ * for two locations
> >+ * NB: Entry point is a fixed size (0x1f)
> >+ */
> >+
> >+ /* use the hole between end of rombios32 and start of
> >+ * rombios16 @ 0xf0000 */
> >+ smbios_phys = 0xf0000 - smbios_size;
> >+ smbios_offset = (ram_addr_t)(smbios_phys - 0xe0000);
> >+ entrypoint_offset = (ram_addr_t)(SMBIOS_ENTRY - 0xe0000);
> >+
> >+ ret = load_smbios_tables((uint8_t *)smbios_base +
> >entrypoint_offset,
> >+ (uint8_t *)smbios_base + smbios_offset,
> >+ smbios_phys);
> >+ if (ret < 0) {
> >+ fprintf(stderr, "qemu: could not generate SMBIOS\n");
> >+ exit(1);
> >+ }
> >+ }
> >+
> > /* map all the bios at the top of memory */
> > cpu_register_physical_memory((uint32_t)(-bios_size),
> > bios_size, bios_offset | IO_MEM_ROM);
> >diff -r 25082b761acb -r 37bf559ffcf7 smbios.c
> >--- /dev/null Thu Jan 01 00:00:00 1970 +0000
> >+++ b/smbios.c Fri Dec 07 14:22:02 2007 -0600
> >@@ -0,0 +1,519 @@
> >+/*
> >+ * smbios.c - Generate SMBIOS tables for Xen HVM domU's.
> >+ * - Adapted for QEMU/KVM
> >+ *
> >+ * This program is free software; you can redistribute it and/or modify
> >+ * it under the terms of the GNU General Public License as published by
> >+ * the Free Software Foundation; either version 2 of the License, or
> >+ * (at your option) any later version.
> >+ *
> >+ * This program is distributed in the hope that it will be useful,
> >+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
> >+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> >+ * GNU General Public License for more details.
> >+ *
> >+ * You should have received a copy of the GNU General Public License
> >+ * along with this program; if not, write to the Free Software
> >+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
> >USA.
> >+ *
> >+ * Copyright (C) IBM Corporation, 2006, 2007
> >+ *
> >+ * Authors: Andrew D. Ball <aball@us.ibm.com>
> >+ * Ryan Harper <ryanh@us.ibm.com>
> >+ */
> >+
> >+#include <stdio.h>
> >+#include <stdint.h>
> >+#include <string.h>
> >+#include <uuid/uuid.h>
> >+#include "hw/hw.h"
> >+#include "sysemu.h"
> >+#include "smbios_types.h"
> >+#include "config-host.h"
> >+
> >+CPUState *first_cpu;
> >
>
> This should probably be static.
doh, should be extern actually since it's defined elsewhere.
--
Ryan Harper
Software Engineer; Linux Technology Center
IBM Corp., Austin, Tx
(512) 838-9253 T/L: 678-9253
ryanh@us.ibm.com
next prev parent reply other threads:[~2007-12-07 20:52 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <37bf559ffcf74bfe62ec.1197059815@localhost.localdomain>
2007-12-07 20:48 ` [Qemu-devel] Re: [kvm-devel] [PATCH 1 of 3] export SMBIOS/DMI tables to PC machines Anthony Liguori
2007-12-07 20:52 ` Ryan Harper [this message]
2007-12-07 21:04 ` Anthony Liguori
2007-12-07 21:13 ` Ryan Harper
2007-12-07 21:24 ` Anthony Liguori
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20071207205250.GF23913@us.ibm.com \
--to=ryanh@us.ibm.com \
--cc=anthony@codemonkey.ws \
--cc=kvm-devel@lists.sourceforge.net \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).