aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchell Horne <mhorne@FreeBSD.org>2022-06-21 13:29:53 +0000
committerMitchell Horne <mhorne@FreeBSD.org>2022-06-23 18:15:10 +0000
commit36a8572ee8f5db7ecb64bedc5738a363ec7cad36 (patch)
treef9ccf6ed28d6f2873d7b92a6e87a42ca5fe394fa
parent8757d0fca9e6a9e174bc87728e296e5338d30eb7 (diff)
downloadsrc-36a8572ee8f5db7ecb64bedc5738a363ec7cad36.tar.gz
src-36a8572ee8f5db7ecb64bedc5738a363ec7cad36.zip
bus_if: provide a default null rescan method
There is an existing helper method in subr_bus.c, but almost no drivers know to use it. It also returns the same error as an empty method, making it not very useful. Move this to bus_if.m and return a more sensible error code. This gives a slightly more meaningful error message when attempting 'devctl rescan' on buses and devices alike: "Device not configured" --> "Operation not supported by device" Reviewed by: imp MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D35501
-rw-r--r--sys/dev/cardbus/cardbus.c1
-rw-r--r--sys/kern/bus_if.m13
-rw-r--r--sys/kern/subr_bus.c13
-rw-r--r--sys/powerpc/ofw/ofw_pcibus.c1
-rw-r--r--sys/sys/bus.h1
5 files changed, 10 insertions, 19 deletions
diff --git a/sys/dev/cardbus/cardbus.c b/sys/dev/cardbus/cardbus.c
index c28b1558f28e..d0661e0473be 100644
--- a/sys/dev/cardbus/cardbus.c
+++ b/sys/dev/cardbus/cardbus.c
@@ -351,7 +351,6 @@ 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, bus_null_rescan),
/* Card Interface */
DEVMETHOD(card_attach_card, cardbus_attach_card),
diff --git a/sys/kern/bus_if.m b/sys/kern/bus_if.m
index 1e4102e52d29..9862f87aac64 100644
--- a/sys/kern/bus_if.m
+++ b/sys/kern/bus_if.m
@@ -67,16 +67,23 @@ CODE {
panic("bus_add_child is not implemented");
}
- static int null_reset_post(device_t bus, device_t dev)
+ static int
+ null_reset_post(device_t bus, device_t dev)
{
return (0);
}
- static int null_reset_prepare(device_t bus, device_t dev)
+ static int
+ null_reset_prepare(device_t bus, device_t dev)
{
return (0);
}
+ static int
+ null_rescan(device_t dev)
+ {
+ return (ENODEV);
+ }
};
/**
@@ -253,7 +260,7 @@ METHOD device_t add_child {
*/
METHOD int rescan {
device_t _dev;
-}
+} DEFAULT null_rescan;
/**
* @brief Allocate a system resource
diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c
index 3be468fd7c43..eeecd4b189a2 100644
--- a/sys/kern/subr_bus.c
+++ b/sys/kern/subr_bus.c
@@ -4708,19 +4708,6 @@ bus_generic_get_device_path(device_t bus, device_t child, const char *locator,
return (0);
}
-
-/**
- * @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/powerpc/ofw/ofw_pcibus.c b/sys/powerpc/ofw/ofw_pcibus.c
index c0e99817888b..202adf11d53b 100644
--- a/sys/powerpc/ofw/ofw_pcibus.c
+++ b/sys/powerpc/ofw/ofw_pcibus.c
@@ -81,7 +81,6 @@ static device_method_t ofw_pcibus_methods[] = {
/* Bus interface */
DEVMETHOD(bus_child_deleted, ofw_pcibus_child_deleted),
DEVMETHOD(bus_child_pnpinfo, ofw_pcibus_child_pnpinfo_method),
- DEVMETHOD(bus_rescan, bus_null_rescan),
DEVMETHOD(bus_get_cpus, ofw_pcibus_get_cpus),
DEVMETHOD(bus_get_domain, ofw_pcibus_get_domain),
diff --git a/sys/sys/bus.h b/sys/sys/bus.h
index a1d11138a1cc..adb6a0ac57d4 100644
--- a/sys/sys/bus.h
+++ b/sys/sys/bus.h
@@ -513,7 +513,6 @@ int bus_generic_get_device_path(device_t bus, device_t child, const char *locato
struct sbuf *sb);
int bus_helper_reset_post(device_t dev, int flags);
int bus_helper_reset_prepare(device_t dev, int flags);
-int bus_null_rescan(device_t dev);
/*
* Wrapper functions for the BUS_*_RESOURCE methods to make client code