From 1adb635303c7b58f6ea82d6f24bc73f8c8cbafef Mon Sep 17 00:00:00 2001 From: Max Wash Date: Sun, 11 Jun 2023 12:59:33 +0100 Subject: [PATCH] kexts: qemufb: update fb_baseptr in qemu_set_varinfo --- kexts/drivers/video/qemufb/main.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kexts/drivers/video/qemufb/main.c b/kexts/drivers/video/qemufb/main.c index 3874386..b3db75e 100644 --- a/kexts/drivers/video/qemufb/main.c +++ b/kexts/drivers/video/qemufb/main.c @@ -32,6 +32,7 @@ static inline uint16_t dispi_mmio_offset(int index) static kern_status_t qemufb_set_varinfo(struct device *dev, const struct framebuffer_varinfo *varinfo) { + struct framebuffer_device *fbdev = FRAMEBUFFER_DEVICE(dev); uint32_t mmio_base = pci_device_read_field(dev, PCI_REG_BAR2, 4); uint16_t *mmio = vm_phys_to_virt(mmio_base); @@ -47,6 +48,8 @@ static kern_status_t qemufb_set_varinfo(struct device *dev, const struct framebu return KERN_UNSUPPORTED; } + fbdev->fb_fixedinfo.fb_baseptr = pci_device_read_field(dev, PCI_REG_BAR0, 4) & ~(VM_PAGE_SIZE - 1); + return KERN_OK; } @@ -72,7 +75,8 @@ static kern_status_t qemufb_probe(struct pci_driver *driver, struct device *dev) varinfo->fb_xres = mmio[dispi_mmio_offset(VBE_DISPI_INDEX_XRES)]; varinfo->fb_yres = mmio[dispi_mmio_offset(VBE_DISPI_INDEX_YRES)]; varinfo->fb_bpp = mmio[dispi_mmio_offset(VBE_DISPI_INDEX_BPP)]; - fixedinfo->fb_baseptr = pci_device_read_field(dev, PCI_REG_BAR0, 4); + varinfo->fb_stride = varinfo->fb_bpp / 8; + fixedinfo->fb_baseptr = pci_device_read_field(dev, PCI_REG_BAR0, 4) & (VM_PAGE_SIZE - 1); if (!varinfo->fb_xres) { /* no mode data. assume that we're in VGA text mode */