git: b72e06b13ee0 - main - bhyve: make use of helper to read PCI IDs from bhyve config

From: Corvin Köhne <corvink_at_FreeBSD.org>
Date: Mon, 27 Mar 2023 08:11:40 UTC
The branch main has been updated by corvink:

URL: https://cgit.FreeBSD.org/src/commit/?id=b72e06b13ee08b94a3e74ac2473e889aeb7a3d1a

commit b72e06b13ee08b94a3e74ac2473e889aeb7a3d1a
Author:     Corvin Köhne <corvink@FreeBSD.org>
AuthorDate: 2023-02-06 10:13:56 +0000
Commit:     Corvin Köhne <corvink@FreeBSD.org>
CommitDate: 2023-03-27 08:10:24 +0000

    bhyve: make use of helper to read PCI IDs from bhyve config
    
    For compatibilty reasons, the old config values are still supported.
    
    Reviewed by:            jhb
    MFC after:              1 week
    Sponsored by:           Beckhoff Automation GmbH & Co. KG
    Differential Revision:  https://reviews.freebsd.org/D38403
---
 usr.sbin/bhyve/bhyve_config.5   | 11 +++++++----
 usr.sbin/bhyve/pci_hostbridge.c | 17 +++++++++++++++--
 2 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/usr.sbin/bhyve/bhyve_config.5 b/usr.sbin/bhyve/bhyve_config.5
index 32658c11f9e2..ddfcae8c51d3 100644
--- a/usr.sbin/bhyve/bhyve_config.5
+++ b/usr.sbin/bhyve/bhyve_config.5
@@ -412,12 +412,15 @@ to use standard input and output of the
 process.
 .El
 .Ss Host Bridge Settings
-.Bl -column "vendor" "integer" "Default"
+.Bl -column "pcireg.*" "integer" "Default"
 .It Sy Name Ta Sy Format Ta Sy Default Ta Sy Description
+.It Va pcireg.* Ta integer Ta Ta
+Values of PCI register.
+.Bl -column "device" "Default"
+.It Sy Name Ta Sy Default
 .It Va vendor Ta integer Ta 0x1275 Ta
-PCI vendor ID.
-.It Va devid Ta integer Ta 0x1275 Ta
-PCI device ID.
+.It Va device Ta integer Ta 0x1275 Ta
+.El
 .El
 .Ss AHCI Controller Settings
 AHCI controller devices contain zero or more ports each of which
diff --git a/usr.sbin/bhyve/pci_hostbridge.c b/usr.sbin/bhyve/pci_hostbridge.c
index f0878d97a77e..cbc61893961b 100644
--- a/usr.sbin/bhyve/pci_hostbridge.c
+++ b/usr.sbin/bhyve/pci_hostbridge.c
@@ -31,6 +31,7 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
+#include <err.h>
 #include <stdlib.h>
 
 #include "config.h"
@@ -48,9 +49,13 @@ pci_hostbridge_init(struct pci_devinst *pi, nvlist_t *nvl)
 	value = get_config_value_node(nvl, "vendor");
 	if (value != NULL)
 		vendor = strtol(value, NULL, 0);
+	else
+		vendor = pci_config_read_reg(NULL, nvl, PCIR_VENDOR, 2, vendor);
 	value = get_config_value_node(nvl, "devid");
 	if (value != NULL)
 		device = strtol(value, NULL, 0);
+	else
+		device = pci_config_read_reg(NULL, nvl, PCIR_DEVICE, 2, device);
 
 	/* config space */
 	pci_set_cfgdata16(pi, PCIR_VENDOR, vendor);
@@ -67,8 +72,16 @@ pci_hostbridge_init(struct pci_devinst *pi, nvlist_t *nvl)
 static int
 pci_amd_hostbridge_legacy_config(nvlist_t *nvl, const char *opts __unused)
 {
-	set_config_value_node(nvl, "vendor", "0x1022");	/* AMD */
-	set_config_value_node(nvl, "devid", "0x7432");	/* made up */
+	nvlist_t *pci_regs;
+
+	pci_regs = create_relative_config_node(nvl, "pcireg");
+	if (pci_regs == NULL) {
+		warnx("amd_hostbridge: failed to create pciregs node");
+		return (-1);
+	}
+
+	set_config_value_node(pci_regs, "vendor", "0x1022"); /* AMD */
+	set_config_value_node(pci_regs, "device", "0x7432"); /* made up */
 
 	return (0);
 }