MCPcopy Create free account
hub / github.com/F-Stack/f-stack / driver_module_handler

Function driver_module_handler

freebsd/kern/subr_bus.c:5218–5269  ·  view source on GitHub ↗

* @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 */

Source from the content-addressed store, hash-verified

5216 * driver_module_data structure pointed to by @p arg
5217 */
5218int
5219driver_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.

Callers

nothing calls this directly

Calls 4

devclass_find_internalFunction · 0.85
devclass_add_driverFunction · 0.85
devclass_delete_driverFunction · 0.85
devclass_quiesce_driverFunction · 0.85

Tested by

no test coverage detected