summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorConrad Meyer <cem@FreeBSD.org>2019-06-16 02:30:41 -0700
committerConrad Meyer <cem@FreeBSD.org>2019-06-16 02:54:28 -0700
commit404f6aadaeeef03fedca52a822871675a652692f (patch)
treeabc2ba58f7e8471c68de0c9fb0140e5235f8597d
parentfbed5d2b478cd33870c8eb6f0a12893193d7e32c (diff)
downloadxorg-lib-libpciaccess-404f6aadaeeef03fedca52a822871675a652692f.tar.gz
freebsd: Add !legacy open_device_io implementation
Some drivers, such as QXL, rely on this method and do not check for errors when it is unavailable. FreeBSD's legacy method can enumerate any d/b/s/f just fine, so it should be adequate for the !legacy API, as far as I can tell. With this change, QXL doesn't crash on startup on FreeBSD. Signed-off-by: Conrad Meyer <cem@FreeBSD.org>
-rw-r--r--src/freebsd_pci.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/freebsd_pci.c b/src/freebsd_pci.c
index f9c1476..e85ac25 100644
--- a/src/freebsd_pci.c
+++ b/src/freebsd_pci.c
@@ -599,6 +599,17 @@ pci_device_freebsd_open_legacy_io(struct pci_io_handle *ret,
#endif
}
+static struct pci_io_handle *
+pci_device_freebsd_open_io( struct pci_io_handle *ret,
+ struct pci_device *dev, int bar,
+ pciaddr_t base, pciaddr_t size )
+{
+ ret = pci_device_freebsd_open_legacy_io( ret, dev, base, size );
+ if ( ret != NULL )
+ ret->is_legacy = 0;
+ return ret;
+}
+
#if defined(__i386__) || defined(__amd64__)
static void
pci_device_freebsd_close_io(struct pci_device *dev, struct pci_io_handle *handle)
@@ -710,6 +721,7 @@ static const struct pci_system_methods freebsd_pci_methods = {
.read = pci_device_freebsd_read,
.write = pci_device_freebsd_write,
.fill_capabilities = pci_fill_capabilities_generic,
+ .open_device_io = pci_device_freebsd_open_io,
.open_legacy_io = pci_device_freebsd_open_legacy_io,
#if defined(__i386__) || defined(__amd64__)
.close_io = pci_device_freebsd_close_io,