diff options
author | Conrad Meyer <cem@FreeBSD.org> | 2019-06-16 02:30:41 -0700 |
---|---|---|
committer | Conrad Meyer <cem@FreeBSD.org> | 2019-06-16 02:54:28 -0700 |
commit | 404f6aadaeeef03fedca52a822871675a652692f (patch) | |
tree | abc2ba58f7e8471c68de0c9fb0140e5235f8597d /src | |
parent | fbed5d2b478cd33870c8eb6f0a12893193d7e32c (diff) | |
download | xorg-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>
Diffstat (limited to 'src')
-rw-r--r-- | src/freebsd_pci.c | 12 |
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, |