$OpenBSD: patch-src_fw_paravirt_c,v 1.5 2021/09/01 11:04:21 sthen Exp $

- Don't use 'rep insb' to read IO ports, vmm does not support that yet.
- Allow detection of >4GB RAM. Normally seabios only allows this with the
  QEMU config device which VMM does not have.

Index: src/fw/paravirt.c
--- src/fw/paravirt.c.orig
+++ src/fw/paravirt.c
@@ -310,7 +310,9 @@ qemu_cfg_read(void *buf, int len)
     if (qemu_cfg_dma_enabled()) {
         qemu_cfg_dma_transfer(buf, len, QEMU_CFG_DMA_CTL_READ);
     } else {
-        insb(PORT_QEMU_CFG_DATA, buf, len);
+	u8 *d = buf;
+	while (len-- > 0)
+		*d++ = inb(PORT_QEMU_CFG_DATA);
     }
 }
 
@@ -515,6 +517,18 @@ qemu_cfg_e820(void)
         e820_add(0xfffbc000, 4*4096, E820_RESERVED);
     }
 
+    // Check for memory over 4Gig in cmos
+    u64 high = ((rtc_read(CMOS_MEM_HIGHMEM_LOW) << 16)
+                | ((u32)rtc_read(CMOS_MEM_HIGHMEM_MID) << 24)
+                | ((u64)rtc_read(CMOS_MEM_HIGHMEM_HIGH) << 32));
+    RamSizeOver4G = high;
+    e820_add(0x100000000ull, high, E820_RAM);
+    dprintf(1, "RamSizeOver4G: 0x%016llx [cmos]\n", RamSizeOver4G);
+}
+
+void
+vmm_check_high_mem(void)
+{
     // Check for memory over 4Gig in cmos
     u64 high = ((rtc_read(CMOS_MEM_HIGHMEM_LOW) << 16)
                 | ((u32)rtc_read(CMOS_MEM_HIGHMEM_MID) << 24)
