qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Gerd Hoffmann <kraxel@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Markus Armbruster" <armbru@redhat.com>,
	"Eduardo Habkost" <eduardo@habkost.net>,
	qemu-arm@nongnu.org, "Ard Biesheuvel" <ardb@kernel.org>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Thomas Huth" <thuth@redhat.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	graf@amazon.com, "Eric Blake" <eblake@redhat.com>,
	"Michael Roth" <michael.roth@amd.com>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"Gerd Hoffmann" <kraxel@redhat.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>
Subject: [PATCH v5 01/24] Add support for etc/hardware-info fw_cfg file
Date: Tue, 25 Feb 2025 17:30:05 +0100	[thread overview]
Message-ID: <20250225163031.1409078-2-kraxel@redhat.com> (raw)
In-Reply-To: <20250225163031.1409078-1-kraxel@redhat.com>

edk2 looks for the etc/hardware-info fw_cfg file to discover hardware
which can not easily be found in other ways.  Entries consist of a
header with hardware type and entry size (HARDWARE_INFO_HEADER),
followed by the actual hardware description (which is type specific).
The file can have multiple entries.

This patch adds the infrastructure to add entries to the file and an
entry struct for simple devices (HARDWARE_INFO_SIMPLE_DEVICE) which have
an mmio address only.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/hw/uefi/hardware-info.h | 35 +++++++++++++++++++++++++++++++++
 hw/uefi/hardware-info.c         | 31 +++++++++++++++++++++++++++++
 hw/uefi/meson.build             |  1 +
 3 files changed, 67 insertions(+)
 create mode 100644 include/hw/uefi/hardware-info.h
 create mode 100644 hw/uefi/hardware-info.c
 create mode 100644 hw/uefi/meson.build

diff --git a/include/hw/uefi/hardware-info.h b/include/hw/uefi/hardware-info.h
new file mode 100644
index 000000000000..94c38cff2007
--- /dev/null
+++ b/include/hw/uefi/hardware-info.h
@@ -0,0 +1,35 @@
+/*
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
+ * pass hardware information to uefi
+ *
+ * see OvmfPkg/Library/HardwareInfoLib/ in edk2
+ */
+#ifndef QEMU_UEFI_HARDWARE_INFO_H
+#define QEMU_UEFI_HARDWARE_INFO_H
+
+/* data structures */
+
+typedef enum {
+    HardwareInfoTypeUndefined  = 0,
+    HardwareInfoTypeHostBridge = 1,
+    HardwareInfoQemuUefiVars   = 2,
+} HARDWARE_INFO_TYPE;
+
+typedef struct {
+    union {
+        uint64_t            uint64;
+        HARDWARE_INFO_TYPE  value;
+    } type;
+    uint64_t  size;
+} HARDWARE_INFO_HEADER;
+
+typedef struct {
+    uint64_t  mmio_address;
+} HARDWARE_INFO_SIMPLE_DEVICE;
+
+/* qemu functions */
+
+void hardware_info_register(HARDWARE_INFO_TYPE type, void *info, uint64_t size);
+
+#endif /* QEMU_UEFI_HARDWARE_INFO_H */
diff --git a/hw/uefi/hardware-info.c b/hw/uefi/hardware-info.c
new file mode 100644
index 000000000000..930502a4df3a
--- /dev/null
+++ b/hw/uefi/hardware-info.c
@@ -0,0 +1,31 @@
+/*
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
+ * pass hardware information to uefi
+ *
+ * see OvmfPkg/Library/HardwareInfoLib/ in edk2
+ */
+
+#include "qemu/osdep.h"
+
+#include "hw/nvram/fw_cfg.h"
+#include "hw/uefi/hardware-info.h"
+
+static void      *blob;
+static uint64_t  blobsize;
+
+void hardware_info_register(HARDWARE_INFO_TYPE type, void *info, uint64_t infosize)
+{
+    HARDWARE_INFO_HEADER hdr = {
+        .type.value = cpu_to_le64(type),
+        .size       = cpu_to_le64(infosize),
+    };
+
+    blob = g_realloc(blob, blobsize + sizeof(hdr) + infosize);
+    memcpy(blob + blobsize, &hdr, sizeof(hdr));
+    blobsize += sizeof(hdr);
+    memcpy(blob + blobsize, info, infosize);
+    blobsize += infosize;
+
+    fw_cfg_modify_file(fw_cfg_find(), "etc/hardware-info", blob, blobsize);
+}
diff --git a/hw/uefi/meson.build b/hw/uefi/meson.build
new file mode 100644
index 000000000000..a8b168941255
--- /dev/null
+++ b/hw/uefi/meson.build
@@ -0,0 +1 @@
+system_ss.add(files('hardware-info.c'))
-- 
2.48.1



  reply	other threads:[~2025-02-25 16:42 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-25 16:30 [PATCH v5 00/24] hw/uefi: add uefi variable service Gerd Hoffmann
2025-02-25 16:30 ` Gerd Hoffmann [this message]
2025-02-25 16:30 ` [PATCH v5 02/24] hw/uefi: add include/hw/uefi/var-service-api.h Gerd Hoffmann
2025-02-25 16:30 ` [PATCH v5 03/24] hw/uefi: add include/hw/uefi/var-service-edk2.h Gerd Hoffmann
2025-02-25 16:30 ` [PATCH v5 04/24] hw/uefi: add include/hw/uefi/var-service.h Gerd Hoffmann
2025-02-25 16:30 ` [PATCH v5 05/24] hw/uefi: add var-service-guid.c Gerd Hoffmann
2025-02-25 16:30 ` [PATCH v5 06/24] hw/uefi: add var-service-utils.c Gerd Hoffmann
2025-02-25 16:30 ` [PATCH v5 07/24] hw/uefi: add var-service-vars.c Gerd Hoffmann
2025-02-25 16:30 ` [PATCH v5 08/24] hw/uefi: add var-service-auth.c Gerd Hoffmann
2025-02-25 16:30 ` [PATCH v5 09/24] hw/uefi: add var-service-policy.c Gerd Hoffmann
2025-02-25 16:30 ` [PATCH v5 10/24] hw/uefi: add var-service-core.c Gerd Hoffmann
2025-02-25 16:30 ` [PATCH v5 11/24] hw/uefi: add var-service-pkcs7.c Gerd Hoffmann
2025-02-25 16:30 ` [PATCH v5 12/24] hw/uefi: add var-service-pkcs7-stub.c Gerd Hoffmann
2025-02-25 16:30 ` [PATCH v5 13/24] hw/uefi: add var-service-siglist.c Gerd Hoffmann
2025-02-25 16:30 ` [PATCH v5 14/24] hw/uefi: add var-service-json.c + qapi for NV vars Gerd Hoffmann
2025-02-26  5:43   ` Markus Armbruster
2025-02-26  7:47     ` Gerd Hoffmann
2025-02-26  8:30       ` Markus Armbruster
2025-02-26  9:12         ` Gerd Hoffmann
2025-02-26  9:49           ` Markus Armbruster
2025-02-25 16:30 ` [PATCH v5 15/24] hw/uefi: add trace-events Gerd Hoffmann
2025-02-25 16:30 ` [PATCH v5 16/24] hw/uefi: add UEFI_VARS to Kconfig Gerd Hoffmann
2025-02-25 16:30 ` [PATCH v5 17/24] hw/uefi: add to meson Gerd Hoffmann
2025-03-20  5:40   ` Michael Tokarev
2025-02-25 16:30 ` [PATCH v5 18/24] hw/uefi: add uefi-vars-sysbus device Gerd Hoffmann
2025-02-25 16:30 ` [PATCH v5 19/24] hw/uefi-vars-sysbus: qemu platform bus support Gerd Hoffmann
2025-02-25 16:30 ` [PATCH v5 20/24] hw/uefi-vars-sysbus: add x64 variant Gerd Hoffmann
2025-02-25 16:30 ` [PATCH v5 21/24] hw/uefi-vars-sysbus: allow for arm virt Gerd Hoffmann
2025-02-25 16:30 ` [PATCH v5 22/24] hw/uefi-vars-sysbus: allow for pc and q35 Gerd Hoffmann
2025-02-25 16:30 ` [PATCH v5 23/24] hw/uefi: add MAINTAINERS entry Gerd Hoffmann
2025-03-20  7:42   ` Philippe Mathieu-Daudé
2025-02-25 16:30 ` [PATCH v5 24/24] docs: add uefi variable service documentation Gerd Hoffmann
2025-03-20  7:41   ` Philippe Mathieu-Daudé
2025-09-16 11:41   ` Peter Maydell

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=20250225163031.1409078-2-kraxel@redhat.com \
    --to=kraxel@redhat.com \
    --cc=ardb@kernel.org \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=eblake@redhat.com \
    --cc=eduardo@habkost.net \
    --cc=graf@amazon.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=michael.roth@amd.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=thuth@redhat.com \
    /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).