From e240255ffc03934754a4a3e9940dfb3f59ff0ffe Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Wed, 27 Apr 2016 17:49:42 +0000 Subject: [PATCH] Add a bus_null_rescan() method that always fails with an error. Use this in place of kobj_error_method to disable BUS_RESCAN() on PCI drivers that do not use the "standard" scanning algorithm. --- sys/dev/cardbus/cardbus.c | 2 +- sys/kern/subr_bus.c | 13 +++++++++++++ sys/mips/nlm/xlp_pci.c | 2 +- sys/powerpc/ofw/ofw_pcibus.c | 2 +- sys/sparc64/pci/ofw_pcibus.c | 2 +- sys/sys/bus.h | 1 + 6 files changed, 18 insertions(+), 4 deletions(-) diff --git a/sys/dev/cardbus/cardbus.c b/sys/dev/cardbus/cardbus.c index 765c1700dd2..400475379d9 100644 --- a/sys/dev/cardbus/cardbus.c +++ b/sys/dev/cardbus/cardbus.c @@ -346,7 +346,7 @@ static device_method_t cardbus_methods[] = { DEVMETHOD(bus_get_dma_tag, bus_generic_get_dma_tag), DEVMETHOD(bus_read_ivar, cardbus_read_ivar), DEVMETHOD(bus_driver_added, cardbus_driver_added), - DEVMETHOD(bus_rescan, kobj_error_method), + DEVMETHOD(bus_rescan, bus_null_rescan), /* Card Interface */ DEVMETHOD(card_attach_card, cardbus_attach_card), diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c index 968cb99f8e5..6ee7e18c860 100644 --- a/sys/kern/subr_bus.c +++ b/sys/kern/subr_bus.c @@ -4289,6 +4289,19 @@ bus_generic_get_domain(device_t dev, device_t child, int *domain) return (ENOENT); } +/** + * @brief Helper function for implementing BUS_RESCAN(). + * + * This null implementation of BUS_RESCAN() always fails to indicate + * the bus does not support rescanning. + */ +int +bus_null_rescan(device_t dev) +{ + + return (ENXIO); +} + /* * Some convenience functions to make it easier for drivers to use the * resource-management functions. All these really do is hide the diff --git a/sys/mips/nlm/xlp_pci.c b/sys/mips/nlm/xlp_pci.c index 43b1574ae83..51ae2b746c0 100644 --- a/sys/mips/nlm/xlp_pci.c +++ b/sys/mips/nlm/xlp_pci.c @@ -154,7 +154,7 @@ static device_method_t xlp_pci_methods[] = { /* Device interface */ DEVMETHOD(device_probe, xlp_pci_probe), DEVMETHOD(device_attach, xlp_pci_attach), - DEVMETHOD(bus_rescan, kobj_error_method), + DEVMETHOD(bus_rescan, bus_null_rescan), DEVMETHOD_END }; diff --git a/sys/powerpc/ofw/ofw_pcibus.c b/sys/powerpc/ofw/ofw_pcibus.c index 05aa06c3961..92022b50416 100644 --- a/sys/powerpc/ofw/ofw_pcibus.c +++ b/sys/powerpc/ofw/ofw_pcibus.c @@ -77,7 +77,7 @@ static device_method_t ofw_pcibus_methods[] = { /* Bus interface */ DEVMETHOD(bus_child_deleted, ofw_pcibus_child_deleted), DEVMETHOD(bus_child_pnpinfo_str, ofw_pcibus_child_pnpinfo_str_method), - DEVMETHOD(bus_rescan, kobj_error_method), + DEVMETHOD(bus_rescan, bus_null_rescan), /* PCI interface */ DEVMETHOD(pci_alloc_devinfo, ofw_pcibus_alloc_devinfo), diff --git a/sys/sparc64/pci/ofw_pcibus.c b/sys/sparc64/pci/ofw_pcibus.c index 2fa289fa6b9..51d89565d53 100644 --- a/sys/sparc64/pci/ofw_pcibus.c +++ b/sys/sparc64/pci/ofw_pcibus.c @@ -81,7 +81,7 @@ static device_method_t ofw_pcibus_methods[] = { /* Bus interface */ DEVMETHOD(bus_child_deleted, ofw_pcibus_child_deleted), DEVMETHOD(bus_child_pnpinfo_str, ofw_pcibus_pnpinfo_str), - DEVMETHOD(bus_rescan, kobj_error_method), + DEVMETHOD(bus_rescan, bus_null_rescan), /* PCI interface */ DEVMETHOD(pci_alloc_devinfo, ofw_pcibus_alloc_devinfo), diff --git a/sys/sys/bus.h b/sys/sys/bus.h index 85cfb0ec4ae..4992cdb4847 100644 --- a/sys/sys/bus.h +++ b/sys/sys/bus.h @@ -430,6 +430,7 @@ int bus_generic_teardown_intr(device_t dev, device_t child, struct resource *irq, void *cookie); int bus_generic_write_ivar(device_t dev, device_t child, int which, uintptr_t value); +int bus_null_rescan(device_t dev); /* * Wrapper functions for the BUS_*_RESOURCE methods to make client code