From nobody Tue Feb 10 00:40:01 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1493000520958919.5653200602511; Sun, 23 Apr 2017 19:22:00 -0700 (PDT) Received: from localhost ([::1]:41407 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d2TdX-00023z-72 for importer@patchew.org; Sun, 23 Apr 2017 22:21:59 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56613) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d2TIH-0001cP-HK for qemu-devel@nongnu.org; Sun, 23 Apr 2017 22:00:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d2TIG-0003VN-AL for qemu-devel@nongnu.org; Sun, 23 Apr 2017 22:00:01 -0400 Received: from ozlabs.org ([2401:3900:2:1::2]:39919) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d2TIF-0003SE-R8; Sun, 23 Apr 2017 22:00:00 -0400 Received: by ozlabs.org (Postfix, from userid 1007) id 3wB8ff2mXkz9sCX; Mon, 24 Apr 2017 11:59:37 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gibson.dropbear.id.au; s=201602; t=1492999178; bh=2Dzu3rjFSjnE3ZDyJs/5fmMTNNGwYuxAMEVvy1WPkyc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FwYtmPFBq3XqwhcFGFGiF81qpLXz2N8q6INgSyHNC/jeM7yAGjOCtJWb5INZ6UYvp SaJfwvZfdc2aYYMpW3I+UyhxKjZWKc3QrmMbkr37Z+wMV50A7rVToCg/c/jLnzhIvz 5LeEXOma6Y2jx78l/7EZWzlsPrCBOQbPT6R/W1ZU= From: David Gibson To: peter.maydell@linaro.org Date: Mon, 24 Apr 2017 11:59:10 +1000 Message-Id: <20170424015927.8933-31-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170424015927.8933-1-david@gibson.dropbear.id.au> References: <20170424015927.8933-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2401:3900:2:1::2 Subject: [Qemu-devel] [PULL 30/47] ipmi: use a file to load SDRs X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: mdroth@linux.vnet.ibm.com, aik@ozlabs.ru, qemu-devel@nongnu.org, agraf@suse.de, qemu-ppc@nongnu.org, clg@kaod.org, David Gibson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" From: C=C3=A9dric Le Goater The IPMI BMC simulator populates the sdr/sensor tables with a minimal set of entries (Watchdog). But some qemu platforms might want to use extra entries for their custom needs. This patch modifies slighty the initializing routine to take into account a larger set read from a file. The name of the file to use is defined through a new 'sdr' property of the simulator device. Signed-off-by: C=C3=A9dric Le Goater Acked-by: Corey Minyard Reviewed-by: Marcel Apfelbaum Signed-off-by: David Gibson --- hw/ipmi/ipmi_bmc_sim.c | 23 +++++++++++++++++++++-- qemu-options.hx | 11 ++++++++++- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/hw/ipmi/ipmi_bmc_sim.c b/hw/ipmi/ipmi_bmc_sim.c index c7883d6..1142c0c 100644 --- a/hw/ipmi/ipmi_bmc_sim.c +++ b/hw/ipmi/ipmi_bmc_sim.c @@ -27,6 +27,7 @@ #include "qemu/timer.h" #include "hw/ipmi/ipmi.h" #include "qemu/error-report.h" +#include "hw/loader.h" =20 #define IPMI_NETFN_CHASSIS 0x00 =20 @@ -213,6 +214,7 @@ struct IPMIBmcSim { IPMISel sel; IPMISdr sdr; IPMISensor sensors[MAX_SENSORS]; + char *sdr_filename; =20 /* Odd netfns are for responses, so we only need the even ones. */ const IPMINetfn *netfns[MAX_NETFNS / 2]; @@ -1696,22 +1698,33 @@ static void ipmi_sdr_init(IPMIBmcSim *ibs) =20 sdrs_size =3D sizeof(init_sdrs); sdrs =3D init_sdrs; + if (ibs->sdr_filename && + !g_file_get_contents(ibs->sdr_filename, (gchar **) &sdrs, &sdrs_si= ze, + NULL)) { + error_report("failed to load sdr file '%s'", ibs->sdr_filename); + sdrs_size =3D sizeof(init_sdrs); + sdrs =3D init_sdrs; + } =20 for (i =3D 0; i < sdrs_size; i +=3D len) { struct ipmi_sdr_header *sdrh; =20 if (i + IPMI_SDR_HEADER_SIZE > sdrs_size) { error_report("Problem with recid 0x%4.4x", i); - return; + break; } sdrh =3D (struct ipmi_sdr_header *) &sdrs[i]; len =3D ipmi_sdr_length(sdrh); if (i + len > sdrs_size) { error_report("Problem with recid 0x%4.4x", i); - return; + break; } sdr_add_entry(ibs, sdrh, len, NULL); } + + if (sdrs !=3D init_sdrs) { + g_free(sdrs); + } } =20 static const VMStateDescription vmstate_ipmi_sim =3D { @@ -1780,6 +1793,11 @@ static void ipmi_sim_realize(DeviceState *dev, Error= **errp) vmstate_register(NULL, 0, &vmstate_ipmi_sim, ibs); } =20 +static Property ipmi_sim_properties[] =3D { + DEFINE_PROP_STRING("sdrfile", IPMIBmcSim, sdr_filename), + DEFINE_PROP_END_OF_LIST(), +}; + static void ipmi_sim_class_init(ObjectClass *oc, void *data) { DeviceClass *dc =3D DEVICE_CLASS(oc); @@ -1787,6 +1805,7 @@ static void ipmi_sim_class_init(ObjectClass *oc, void= *data) =20 dc->hotpluggable =3D false; dc->realize =3D ipmi_sim_realize; + dc->props =3D ipmi_sim_properties; bk->handle_command =3D ipmi_sim_handle_command; } =20 diff --git a/qemu-options.hx b/qemu-options.hx index 9171bd5..366b088 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -425,7 +425,7 @@ possible drivers and properties, use @code{-device help= } and @code{-device @var{driver},help}. =20 Some drivers are: -@item -device ipmi-bmc-sim,id=3D@var{id}[,slave_addr=3D@var{val}] +@item -device ipmi-bmc-sim,id=3D@var{id}[,slave_addr=3D@var{val}][,sdrfile= =3D@var{file}] =20 Add an IPMI BMC. This is a simulation of a hardware management interface processor that normally sits on a system. It provides @@ -437,6 +437,15 @@ This address is the BMC's address on the I2C network o= f management controllers. If you don't know what this means, it is safe to ignore it. =20 +@table @option +@item bmc=3D@var{id} +The BMC to connect to, one of ipmi-bmc-sim or ipmi-bmc-extern above. +@item slave_addr=3D@var{val} +Define slave address to use for the BMC. The default is 0x20. +@item sdrfile=3D@var{file} +file containing raw Sensor Data Records (SDR) data. The default is none. +@end table + @item -device ipmi-bmc-extern,id=3D@var{id},chardev=3D@var{id}[,slave_addr= =3D@var{val}] =20 Add a connection to an external IPMI BMC simulator. Instead of --=20 2.9.3