Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Aug 2023 07:41:44 GMT
From:      Corvin =?utf-8?Q?K=C3=B6hne?= <corvink@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: 7ffa1d667f74 - stable/13 - bhyve: add helper for passthru specific mmio ranges
Message-ID:  <202308180741.37I7fi3E065752@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by corvink:

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

commit 7ffa1d667f748bc6dd84a63ff5f805a1d99c9124
Author:     Corvin Köhne <corvink@FreeBSD.org>
AuthorDate: 2023-05-10 10:22:33 +0000
Commit:     Corvin Köhne <corvink@FreeBSD.org>
CommitDate: 2023-08-18 07:29:26 +0000

    bhyve: add helper for passthru specific mmio ranges
    
    Intel GPUs have two special memory regions. They are called Graphics
    Stolen Memory and OpRegion. bhyve has to emulate both of them. In order
    to keep track of those special regions, add generic mmio ranges to the
    passthru emulation.
    
    Reviewed by:            markj
    MFC after:              1 week
    Sponsored by:           Beckhoff Automation GmbH & Co. KG
    Differential Revision:  https://reviews.freebsd.org/D40036
    
    (cherry picked from commit 93cf93179c505cebbcdbeef196d523d36890ed4a)
---
 usr.sbin/bhyve/pci_passthru.c | 12 ++++++++++++
 usr.sbin/bhyve/pci_passthru.h | 10 ++++++++++
 2 files changed, 22 insertions(+)

diff --git a/usr.sbin/bhyve/pci_passthru.c b/usr.sbin/bhyve/pci_passthru.c
index 10e77990c283..d6978a1be822 100644
--- a/usr.sbin/bhyve/pci_passthru.c
+++ b/usr.sbin/bhyve/pci_passthru.c
@@ -78,6 +78,8 @@ __FBSDID("$FreeBSD$");
 #define MSIX_TABLE_COUNT(ctrl) (((ctrl) & PCIM_MSIXCTRL_TABLE_SIZE) + 1)
 #define MSIX_CAPLEN 12
 
+#define PASSTHRU_MMIO_MAX 2
+
 static int pcifd = -1;
 
 struct passthru_softc {
@@ -94,6 +96,7 @@ struct passthru_softc {
 	} psc_msix;
 	struct pcisel psc_sel;
 
+	struct passthru_mmio_mapping psc_mmio_map[PASSTHRU_MMIO_MAX];
 	cfgread_handler psc_pcir_rhandler[PCI_REGMAX + 1];
 	cfgwrite_handler psc_pcir_whandler[PCI_REGMAX + 1];
 };
@@ -660,6 +663,15 @@ done:
 	return (error);
 }
 
+struct passthru_mmio_mapping *
+passthru_get_mmio(struct passthru_softc *sc, int num)
+{
+	assert(sc != NULL);
+	assert(num < PASSTHRU_MMIO_MAX);
+
+	return (&sc->psc_mmio_map[num]);
+}
+
 struct pcisel *
 passthru_get_sel(struct passthru_softc *sc)
 {
diff --git a/usr.sbin/bhyve/pci_passthru.h b/usr.sbin/bhyve/pci_passthru.h
index 9b9293cdba7b..7ce12a27bba4 100644
--- a/usr.sbin/bhyve/pci_passthru.h
+++ b/usr.sbin/bhyve/pci_passthru.h
@@ -11,6 +11,14 @@
 
 #include "pci_emul.h"
 
+struct passthru_mmio_mapping {
+	vm_paddr_t gpa; /* guest physical address */
+	void *gva;	/* guest virtual address */
+	vm_paddr_t hpa; /* host physical address */
+	void *hva;	/* guest virtual address */
+	vm_paddr_t len;
+};
+
 struct passthru_softc;
 
 typedef int (*cfgread_handler)(struct passthru_softc *sc,
@@ -24,6 +32,8 @@ int passthru_cfgread_emulate(struct passthru_softc *sc, struct pci_devinst *pi,
     int coff, int bytes, uint32_t *rv);
 int passthru_cfgwrite_emulate(struct passthru_softc *sc, struct pci_devinst *pi,
     int coff, int bytes, uint32_t val);
+struct passthru_mmio_mapping *passthru_get_mmio(struct passthru_softc *sc,
+    int num);
 struct pcisel *passthru_get_sel(struct passthru_softc *sc);
 int set_pcir_handler(struct passthru_softc *sc, int reg, int len,
     cfgread_handler rhandler, cfgwrite_handler whandler);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202308180741.37I7fi3E065752>