The branch main has been updated by dumbbell:

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

commit 33595d4ae01c10c436a83e7f5afd2c07a7fbd2c5
Author:     Jean-Sébastien Pédron <[email protected]>
AuthorDate: 2026-06-12 10:24:02 +0000
Commit:     Jean-Sébastien Pédron <[email protected]>
CommitDate: 2026-09-09 20:01:30 +0000

    linuxkpi: Add `pci_map_rom()` and `pci_unmap_rom()`
    
    They were already defined as macros in various places in DRM drivers,
    aliasing the `vga_pci_map_bios()` and `vga_pci_unmap_bios()` functions.
    Let's move them to linuxkpi and avoid copies everywhere.
    
    Because they use the `vga_pci` code internally, `pci_map_rom()` checks
    whether the given device is a video card. If it is not, it logs a "TODO"
    and returns NULL.
    
    Reviewed by:    bz
    Sponsored by:   The FreeBSD Foundation
    Differential Revision: https://reviews.freebsd.org/D57573
---
 sys/compat/linuxkpi/common/include/linux/pci.h |  5 +++++
 sys/compat/linuxkpi/common/src/linux_pci.c     | 27 ++++++++++++++++++++++++++
 2 files changed, 32 insertions(+)

diff --git a/sys/compat/linuxkpi/common/include/linux/pci.h 
b/sys/compat/linuxkpi/common/include/linux/pci.h
index 8cd52707a7bd..12ca790f8811 100644
--- a/sys/compat/linuxkpi/common/include/linux/pci.h
+++ b/sys/compat/linuxkpi/common/include/linux/pci.h
@@ -892,6 +892,11 @@ pci_reset_function(struct pci_dev *pdev)
 #define        pci_unmap_len           dma_unmap_len
 #define        pci_unmap_len_set       dma_unmap_len_set
 
+void *linuxkpi_pci_map_rom(struct pci_dev *pdev, size_t *size);
+void linuxkpi_pci_unmap_rom(struct pci_dev *pdev, void *rom);
+#define        pci_map_rom(pdev, size)         linuxkpi_pci_map_rom(pdev, size)
+#define        pci_unmap_rom(pdev, rom)        linuxkpi_pci_unmap_rom(pdev, 
rom)
+
 typedef unsigned int __bitwise pci_channel_state_t;
 typedef unsigned int __bitwise pci_ers_result_t;
 
diff --git a/sys/compat/linuxkpi/common/src/linux_pci.c 
b/sys/compat/linuxkpi/common/src/linux_pci.c
index 44082e6ecaa6..c1ab63b6c902 100644
--- a/sys/compat/linuxkpi/common/src/linux_pci.c
+++ b/sys/compat/linuxkpi/common/src/linux_pci.c
@@ -1663,6 +1663,33 @@ pci_device_is_present(struct pci_dev *pdev)
        return (bus_child_present(dev));
 }
 
+void *
+linuxkpi_pci_map_rom(struct pci_dev *pdev, size_t *size)
+{
+       device_t dev;
+
+       dev = pdev->dev.bsddev;
+
+       if (pci_get_class(dev) != PCIC_DISPLAY &&
+           (pci_get_class(dev) != PCIC_OLD ||
+            pci_get_subclass(dev) != PCIS_OLD_VGA)) {
+               pr_debug("%s: TODO\n", __func__);
+               return (NULL);
+       }
+
+       return (vga_pci_map_bios(device_get_parent(dev), size));
+}
+
+void
+linuxkpi_pci_unmap_rom(struct pci_dev *pdev, void *rom)
+{
+       device_t dev;
+
+       dev = pdev->dev.bsddev;
+
+       vga_pci_unmap_bios(device_get_parent(dev), rom);
+}
+
 CTASSERT(sizeof(dma_addr_t) <= sizeof(uint64_t));
 
 struct linux_dma_obj {

Reply via email to