Index | Thread | Search

From:
Dave Voutila <dv@sisu.io>
Subject:
move pci mmio defs from vmm to vmd
To:
tech@openbsd.org
Date:
Wed, 02 Oct 2024 10:12:04 -0400

Download raw body.

Thread
No need for the kernel headers to contain this information nowadays as
vmd is responsible for telling vmm what memory regions should be treated
as "mmio" regions.

This doesn't change the values used. Yes, in real hardware this isn't
all PCI in this region...that's a future detail to work on.

ok?

diffstat refs/heads/master refs/heads/vmm-mmio-headers
 M  sys/arch/amd64/include/vmmvar.h  |  0+  3-
 M  usr.sbin/vmd/pci.c               |  2+  2-
 M  usr.sbin/vmd/pci.h               |  3+  0-
 M  usr.sbin/vmd/x86_vm.c            |  7+  7-

4 files changed, 12 insertions(+), 12 deletions(-)

diff refs/heads/master refs/heads/vmm-mmio-headers
commit - c1e5f9e355c15e0953a568e8d696ee94ac23c40f
commit + a28ee5a6fe5626edec1fed2ca1b1c68d79755ca6
blob - 6bc63d5ae3f470c12fecea910e7be247f82ac548
blob + 1e9333b82cef44d380f5f6d6a1d0af3d8ffe1216
--- sys/arch/amd64/include/vmmvar.h
+++ sys/arch/amd64/include/vmmvar.h
@@ -23,9 +23,6 @@
 
 #define VMM_HV_SIGNATURE 	"OpenBSDVMM58"
 
-#define VMM_PCI_MMIO_BAR_BASE	0xF0000000ULL
-#define VMM_PCI_MMIO_BAR_END	0xFFDFFFFFULL		/* 2 MiB below 4 GiB */
-
 /* VMX: Basic Exit Reasons */
 #define VMX_EXIT_NMI				0
 #define VMX_EXIT_EXTINT				1
blob - b159977f464c48f7e7e1f3c1fc664b2025c794c9
blob + 7c3b4acc0ccc762c189cd1022c4b939c241e40be
--- usr.sbin/vmd/pci.c
+++ usr.sbin/vmd/pci.c
@@ -73,7 +73,7 @@ pci_add_bar(uint8_t id, uint32_t type, void *barfn, vo
 	/* Compute BAR address and add */
 	bar_reg_idx = (PCI_MAPREG_START + (bar_ct * 4)) / 4;
 	if (type == PCI_MAPREG_TYPE_MEM) {
-		if (pci.pci_next_mmio_bar >= VMM_PCI_MMIO_BAR_END)
+		if (pci.pci_next_mmio_bar >= PCI_MMIO_BAR_END)
 			return (1);
 
 		pci.pci_devices[id].pd_cfg_space[bar_reg_idx] =
@@ -216,7 +216,7 @@ pci_init(void)
 	uint8_t id;
 
 	memset(&pci, 0, sizeof(pci));
-	pci.pci_next_mmio_bar = VMM_PCI_MMIO_BAR_BASE;
+	pci.pci_next_mmio_bar = PCI_MMIO_BAR_BASE;
 
 #ifdef __amd64__
 	pci.pci_next_io_bar = VM_PCI_IO_BAR_BASE;
blob - 0b05a9298d16296d5a155dc6d7657f8ad21491d2
blob + 48b1a8dbcdd7d1946aef9b1aced4ff3947d7a83a
--- usr.sbin/vmd/pci.h
+++ usr.sbin/vmd/pci.h
@@ -34,6 +34,9 @@
 #define PCI_BAR_TYPE_IO		0x0
 #define PCI_BAR_TYPE_MMIO	0x1
 
+#define PCI_MMIO_BAR_BASE	0xF0000000ULL
+#define PCI_MMIO_BAR_END	0xFFDFFFFFULL		/* 2 MiB below 4 GiB */
+
 #define PCI_MAX_PIC_IRQS	10
 
 typedef int (*pci_cs_fn_t)(int dir, uint8_t reg, uint32_t *data);
blob - 729e0c5f9bd1aa7e99b896834be02b23354902a1
blob + 4481f2bb099307dd0071141de1d9077027be14fb
--- usr.sbin/vmd/x86_vm.c
+++ usr.sbin/vmd/x86_vm.c
@@ -192,7 +192,7 @@ create_memory_map(struct vm_create_params *vcp)
 
 	/* If we have less than 2MB remaining, still create a 2nd BIOS area. */
 	if (mem_bytes <= MB(2)) {
-		vcp->vcp_memranges[2].vmr_gpa = VMM_PCI_MMIO_BAR_END;
+		vcp->vcp_memranges[2].vmr_gpa = PCI_MMIO_BAR_END;
 		vcp->vcp_memranges[2].vmr_size = MB(2);
 		vcp->vcp_memranges[2].vmr_type = VM_MEM_RESERVED;
 		vcp->vcp_nmemranges = 3;
@@ -204,8 +204,8 @@ create_memory_map(struct vm_create_params *vcp)
 	 * boundary while making sure we do not place physical memory into
 	 * MMIO ranges.
 	 */
-	if (mem_bytes > VMM_PCI_MMIO_BAR_BASE - MB(1)) {
-		above_1m = VMM_PCI_MMIO_BAR_BASE - MB(1);
+	if (mem_bytes > PCI_MMIO_BAR_BASE - MB(1)) {
+		above_1m = PCI_MMIO_BAR_BASE - MB(1);
 		above_4g = mem_bytes - above_1m;
 	} else {
 		above_1m = mem_bytes;
@@ -218,13 +218,13 @@ create_memory_map(struct vm_create_params *vcp)
 	vcp->vcp_memranges[2].vmr_type = VM_MEM_RAM;
 
 	/* Fourth region: PCI MMIO range */
-	vcp->vcp_memranges[3].vmr_gpa = VMM_PCI_MMIO_BAR_BASE;
-	vcp->vcp_memranges[3].vmr_size = VMM_PCI_MMIO_BAR_END -
-	    VMM_PCI_MMIO_BAR_BASE + 1;
+	vcp->vcp_memranges[3].vmr_gpa = PCI_MMIO_BAR_BASE;
+	vcp->vcp_memranges[3].vmr_size = PCI_MMIO_BAR_END -
+	    PCI_MMIO_BAR_BASE + 1;
 	vcp->vcp_memranges[3].vmr_type = VM_MEM_MMIO;
 
 	/* Fifth region: 2nd copy of BIOS above MMIO ending at 4GB */
-	vcp->vcp_memranges[4].vmr_gpa = VMM_PCI_MMIO_BAR_END + 1;
+	vcp->vcp_memranges[4].vmr_gpa = PCI_MMIO_BAR_END + 1;
 	vcp->vcp_memranges[4].vmr_size = MB(2);
 	vcp->vcp_memranges[4].vmr_type = VM_MEM_RESERVED;