diff options
author | jhb <jhb@FreeBSD.org> | 2011-08-22 18:36:58 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2011-08-22 18:36:58 +0000 |
commit | 9d10e169c997a3477c1b9e10cbc342c39734acf2 (patch) | |
tree | de8bc2b28c0ac5d1d75851da25db826ba948753c /sys/sys/bus.h | |
parent | 1d94389f8f3e368db05482320ee08c9b33ef48da (diff) | |
download | FreeBSD-src-9d10e169c997a3477c1b9e10cbc342c39734acf2.zip FreeBSD-src-9d10e169c997a3477c1b9e10cbc342c39734acf2.tar.gz |
Add two new macros DRIVER_MODULE_ORDERED() and EARLY_DRIVER_MODULE_ORDERED()
that allow a module to use an order other than the default of
SI_ORDER_MIDDLE when registering a driver. This can be useful for drivers
in a kld that contain multiple new-bus drivers as part of one logical device
driver. A typical case would be to use SI_ORDER_LAST for the "main" driver
to ensure that any other "helper" drivers are registered and available
before the "main" driver attempts to attach.
Tested by: kib, Jason Harmening jason harmening / gmail
Approved by: re (kib)
MFC after: 1 week
Diffstat (limited to 'sys/sys/bus.h')
-rw-r--r-- | sys/sys/bus.h | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/sys/sys/bus.h b/sys/sys/bus.h index 09b8911..5dc92df 100644 --- a/sys/sys/bus.h +++ b/sys/sys/bus.h @@ -596,7 +596,8 @@ struct driver_module_data { int dmd_pass; }; -#define EARLY_DRIVER_MODULE(name, busname, driver, devclass, evh, arg, pass) \ +#define EARLY_DRIVER_MODULE_ORDERED(name, busname, driver, devclass, \ + evh, arg, order, pass) \ \ static struct driver_module_data name##_##busname##_driver_mod = { \ evh, arg, \ @@ -612,7 +613,16 @@ static moduledata_t name##_##busname##_mod = { \ &name##_##busname##_driver_mod \ }; \ DECLARE_MODULE(name##_##busname, name##_##busname##_mod, \ - SI_SUB_DRIVERS, SI_ORDER_MIDDLE) + SI_SUB_DRIVERS, order) + +#define EARLY_DRIVER_MODULE(name, busname, driver, devclass, evh, arg, pass) \ + EARLY_DRIVER_MODULE_ORDERED(name, busname, driver, devclass, \ + evh, arg, SI_ORDER_MIDDLE, pass) + +#define DRIVER_MODULE_ORDERED(name, busname, driver, devclass, evh, arg,\ + order) \ + EARLY_DRIVER_MODULE_ORDERED(name, busname, driver, devclass, \ + evh, arg, order, BUS_PASS_DEFAULT) #define DRIVER_MODULE(name, busname, driver, devclass, evh, arg) \ EARLY_DRIVER_MODULE(name, busname, driver, devclass, evh, arg, \ |