qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Gerd Hoffmann <kraxel@redhat.com>
To: qemu-devel@nongnu.org
Cc: qemu-arm@nongnu.org, "Ard Biesheuvel" <ardb@kernel.org>,
	"Michael Roth" <michael.roth@amd.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Thomas Huth" <thuth@redhat.com>,
	"Eduardo Habkost" <eduardo@habkost.net>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Gerd Hoffmann" <kraxel@redhat.com>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Eric Blake" <eblake@redhat.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	graf@amazon.com, "Markus Armbruster" <armbru@redhat.com>
Subject: [PATCH v4 01/24] Add support for etc/hardware-info fw_cfg file
Date: Wed, 19 Feb 2025 08:14:03 +0100	[thread overview]
Message-ID: <20250219071431.50626-2-kraxel@redhat.com> (raw)
In-Reply-To: <20250219071431.50626-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         | 33 +++++++++++++++++++++++++++++++
 hw/uefi/meson.build             |  1 +
 3 files changed, 69 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..19a83f377ccd
--- /dev/null
+++ b/hw/uefi/hardware-info.c
@@ -0,0 +1,33 @@
+/*
+ * 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 = type,
+        .size       = infosize,
+    };
+    void *ptr;
+
+    blob = g_realloc(blob, blobsize + sizeof(hdr) + infosize);
+    memcpy(blob + blobsize, &hdr, sizeof(hdr));
+    blobsize += sizeof(hdr);
+    memcpy(blob + blobsize, info, infosize);
+    blobsize += infosize;
+
+    ptr = fw_cfg_modify_file(fw_cfg_find(), "etc/hardware-info", blob, blobsize);
+    g_free(ptr);
+}
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-19  7:16 UTC|newest]

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

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=20250219071431.50626-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).