* @brief Module handler for registering device drivers * * This module handler is used to automatically register device * drivers when modules are loaded. If @p what is MOD_LOAD, it calls * devclass_add_driver() for the driver described by the * driver_module_data structure pointed to by @p arg */
| 5216 | * driver_module_data structure pointed to by @p arg |
| 5217 | */ |
| 5218 | int |
| 5219 | driver_module_handler(module_t mod, int what, void *arg) |
| 5220 | { |
| 5221 | struct driver_module_data *dmd; |
| 5222 | devclass_t bus_devclass; |
| 5223 | kobj_class_t driver; |
| 5224 | int error, pass; |
| 5225 | |
| 5226 | dmd = (struct driver_module_data *)arg; |
| 5227 | bus_devclass = devclass_find_internal(dmd->dmd_busname, NULL, TRUE); |
| 5228 | error = 0; |
| 5229 | |
| 5230 | switch (what) { |
| 5231 | case MOD_LOAD: |
| 5232 | if (dmd->dmd_chainevh) |
| 5233 | error = dmd->dmd_chainevh(mod,what,dmd->dmd_chainarg); |
| 5234 | |
| 5235 | pass = dmd->dmd_pass; |
| 5236 | driver = dmd->dmd_driver; |
| 5237 | PDEBUG(("Loading module: driver %s on bus %s (pass %d)", |
| 5238 | DRIVERNAME(driver), dmd->dmd_busname, pass)); |
| 5239 | error = devclass_add_driver(bus_devclass, driver, pass, |
| 5240 | dmd->dmd_devclass); |
| 5241 | break; |
| 5242 | |
| 5243 | case MOD_UNLOAD: |
| 5244 | PDEBUG(("Unloading module: driver %s from bus %s", |
| 5245 | DRIVERNAME(dmd->dmd_driver), |
| 5246 | dmd->dmd_busname)); |
| 5247 | error = devclass_delete_driver(bus_devclass, |
| 5248 | dmd->dmd_driver); |
| 5249 | |
| 5250 | if (!error && dmd->dmd_chainevh) |
| 5251 | error = dmd->dmd_chainevh(mod,what,dmd->dmd_chainarg); |
| 5252 | break; |
| 5253 | case MOD_QUIESCE: |
| 5254 | PDEBUG(("Quiesce module: driver %s from bus %s", |
| 5255 | DRIVERNAME(dmd->dmd_driver), |
| 5256 | dmd->dmd_busname)); |
| 5257 | error = devclass_quiesce_driver(bus_devclass, |
| 5258 | dmd->dmd_driver); |
| 5259 | |
| 5260 | if (!error && dmd->dmd_chainevh) |
| 5261 | error = dmd->dmd_chainevh(mod,what,dmd->dmd_chainarg); |
| 5262 | break; |
| 5263 | default: |
| 5264 | error = EOPNOTSUPP; |
| 5265 | break; |
| 5266 | } |
| 5267 | |
| 5268 | return (error); |
| 5269 | } |
| 5270 | |
| 5271 | /** |
| 5272 | * @brief Enumerate all hinted devices for this bus. |
nothing calls this directly
no test coverage detected