Fri Jul 25 01:39:32 2014 UTC ()
implement the kernel_has_driver() method.  this has the benefit of
stopping the "vesa" driver from loading on hardware that has been
claimed by a kernel driver and thus shouldn't be using "vesa".


(mrg)
diff -r1.13 -r1.14 xsrc/external/mit/libpciaccess/dist/src/netbsd_pci.c

cvs diff -r1.13 -r1.14 xsrc/external/mit/libpciaccess/dist/src/netbsd_pci.c (expand / switch to unified diff)

--- xsrc/external/mit/libpciaccess/dist/src/netbsd_pci.c 2014/03/17 02:42:09 1.13
+++ xsrc/external/mit/libpciaccess/dist/src/netbsd_pci.c 2014/07/25 01:39:32 1.14
@@ -831,50 +831,74 @@ pci_device_netbsd_map_legacy(struct pci_ @@ -831,50 +831,74 @@ pci_device_netbsd_map_legacy(struct pci_
831 831
832static int 832static int
833pci_device_netbsd_unmap_legacy(struct pci_device *dev, void *addr, 833pci_device_netbsd_unmap_legacy(struct pci_device *dev, void *addr,
834 pciaddr_t size) 834 pciaddr_t size)
835{ 835{
836 struct pci_device_mapping map; 836 struct pci_device_mapping map;
837 837
838 map.memory = addr; 838 map.memory = addr;
839 map.size = size; 839 map.size = size;
840 map.flags = 0; 840 map.flags = 0;
841 return pci_device_netbsd_unmap_range(dev, &map); 841 return pci_device_netbsd_unmap_range(dev, &map);
842} 842}
843 843
 844static int
 845pci_device_netbsd_has_kernel_driver(struct pci_device *dev)
 846{
 847#ifdef PCI_IOC_DRVNAME
 848 /*
 849 * NetBSD PCI_IOC_DRVNAME appears at the same time as pci_drvname(3)
 850 */
 851 char drvname[16];
 852
 853 if (dev->bus >= nbuses)
 854 return 0;
 855
 856 /*
 857 * vga(4) should be considered "not bound".
 858 */
 859 if (pci_drvname(buses[dev->bus].fd, dev->dev, dev->func,
 860 drvname, sizeof drvname) == 0 &&
 861 strncmp(drvname, "vga", 3) != 0)
 862 return 1;
 863#endif
 864 return 0;
 865}
 866
844static const struct pci_system_methods netbsd_pci_methods = { 867static const struct pci_system_methods netbsd_pci_methods = {
845 .destroy = pci_system_netbsd_destroy, 868 .destroy = pci_system_netbsd_destroy,
846 .destroy_device = NULL, 869 .destroy_device = NULL,
847 .read_rom = pci_device_netbsd_read_rom, 870 .read_rom = pci_device_netbsd_read_rom,
848 .probe = pci_device_netbsd_probe, 871 .probe = pci_device_netbsd_probe,
849 .map_range = pci_device_netbsd_map_range, 872 .map_range = pci_device_netbsd_map_range,
850 .unmap_range = pci_device_netbsd_unmap_range, 873 .unmap_range = pci_device_netbsd_unmap_range,
851 .read = pci_device_netbsd_read, 874 .read = pci_device_netbsd_read,
852 .write = pci_device_netbsd_write, 875 .write = pci_device_netbsd_write,
853 .fill_capabilities = pci_fill_capabilities_generic, 876 .fill_capabilities = pci_fill_capabilities_generic,
854#if defined(WSDISPLAYIO_GET_BUSID) 877#if defined(WSDISPLAYIO_GET_BUSID)
855 .boot_vga = pci_device_netbsd_boot_vga, 878 .boot_vga = pci_device_netbsd_boot_vga,
856#else 879#else
857 .boot_vga = NULL, 880 .boot_vga = NULL,
858#endif 881#endif
859 .open_legacy_io = pci_device_netbsd_open_legacy_io, 882 .open_legacy_io = pci_device_netbsd_open_legacy_io,
860 .read32 = pci_device_netbsd_read32, 883 .read32 = pci_device_netbsd_read32,
861 .read16 = pci_device_netbsd_read16, 884 .read16 = pci_device_netbsd_read16,
862 .read8 = pci_device_netbsd_read8, 885 .read8 = pci_device_netbsd_read8,
863 .write32 = pci_device_netbsd_write32, 886 .write32 = pci_device_netbsd_write32,
864 .write16 = pci_device_netbsd_write16, 887 .write16 = pci_device_netbsd_write16,
865 .write8 = pci_device_netbsd_write8, 888 .write8 = pci_device_netbsd_write8,
866 .map_legacy = pci_device_netbsd_map_legacy, 889 .map_legacy = pci_device_netbsd_map_legacy,
867 .unmap_legacy = pci_device_netbsd_unmap_legacy, 890 .unmap_legacy = pci_device_netbsd_unmap_legacy,
 891 .has_kernel_driver = pci_device_netbsd_has_kernel_driver,
868}; 892};
869 893
870int 894int
871pci_system_netbsd_create(void) 895pci_system_netbsd_create(void)
872{ 896{
873 struct pci_device_private *device; 897 struct pci_device_private *device;
874 int bus, dev, func, ndevs, nfuncs, domain, pcifd; 898 int bus, dev, func, ndevs, nfuncs, domain, pcifd;
875 uint32_t reg; 899 uint32_t reg;
876 char netbsd_devname[32]; 900 char netbsd_devname[32];
877 struct pciio_businfo businfo; 901 struct pciio_businfo businfo;
878 902
879 pci_sys = calloc(1, sizeof(struct pci_system)); 903 pci_sys = calloc(1, sizeof(struct pci_system));
880 904