static int i915drm_modcmd(modcmd_t cmd, void *arg) { int err; switch (cmd) { case MODULE_CMD_INIT: err = config_cfdriver_attach(&i915drm_cd); if (err) return err; err = config_cfattach_attach("i915drm", &i915drm_ca); if (err) { config_cfdriver_detach(&i915drm_cd); return err; } err = config_cfdata_attach(i915drm_cfdata, 1); if (err) { config_cfattach_detach("i915drm", &i915drm_ca); config_cfdriver_detach(&i915drm_cd); return err; } return 0; case MODULE_CMD_FINI: err = config_cfdata_detach(i915drm_cfdata); if (err) return err; config_cfattach_detach("i915drm", &i915drm_ca); config_cfdriver_detach(&i915drm_cd); return 0; default: return ENOTTY; } }
static int iscsi_modcmd(modcmd_t cmd, void *arg) { #ifdef _MODULE devmajor_t cmajor = NODEVMAJOR, bmajor = NODEVMAJOR; int error; #endif switch (cmd) { case MODULE_CMD_INIT: #ifdef _MODULE error = config_cfdriver_attach(&iscsi_cd); if (error) { return error; } error = config_cfattach_attach(iscsi_cd.cd_name, &iscsi_ca); if (error) { config_cfdriver_detach(&iscsi_cd); aprint_error("%s: unable to register cfattach\n", iscsi_cd.cd_name); return error; } error = config_cfdata_attach(iscsi_cfdata, 1); if (error) { aprint_error("%s: unable to attach cfdata\n", iscsi_cd.cd_name); config_cfattach_detach(iscsi_cd.cd_name, &iscsi_ca); config_cfdriver_detach(&iscsi_cd); return error; } error = devsw_attach(iscsi_cd.cd_name, NULL, &bmajor, &iscsi_cdevsw, &cmajor); if (error) { aprint_error("%s: unable to register devsw\n", iscsi_cd.cd_name); config_cfdata_detach(iscsi_cfdata); config_cfattach_detach(iscsi_cd.cd_name, &iscsi_ca); config_cfdriver_detach(&iscsi_cd); return error; } if (config_attach_pseudo(iscsi_cfdata) == NULL) { aprint_error("%s: config_attach_pseudo failed\n", iscsi_cd.cd_name); config_cfattach_detach(iscsi_cd.cd_name, &iscsi_ca); config_cfdriver_detach(&iscsi_cd); return ENXIO; } #endif return 0; break; case MODULE_CMD_FINI: #ifdef _MODULE error = config_cfdata_detach(iscsi_cfdata); if (error) return error; config_cfattach_detach(iscsi_cd.cd_name, &iscsi_ca); config_cfdriver_detach(&iscsi_cd); devsw_detach(NULL, &iscsi_cdevsw); #endif return 0; break; case MODULE_CMD_AUTOUNLOAD: return EBUSY; break; default: return ENOTTY; break; } }