diff options
author | n_hibma <n_hibma@FreeBSD.org> | 1999-02-21 16:36:30 +0000 |
---|---|---|
committer | n_hibma <n_hibma@FreeBSD.org> | 1999-02-21 16:36:30 +0000 |
commit | 97e0e8232bf6bb3338a482595365e442b0a56381 (patch) | |
tree | 3d6a1ad6d4e872f02857cf4e7c2cdf40cc0f6d15 | |
parent | d95d4d33291bd884f40d02e2ad2c16bceb3d858d (diff) | |
download | FreeBSD-src-97e0e8232bf6bb3338a482595365e442b0a56381.zip FreeBSD-src-97e0e8232bf6bb3338a482595365e442b0a56381.tar.gz |
Device unload code is broken, disabled. Requires a bit of redesign on the
part of the uhub driver to be able to fix it. Modules should not be
unloaded as they unload partially. Not easy to fix either.
-rw-r--r-- | sys/dev/usb/usbdi.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/sys/dev/usb/usbdi.c b/sys/dev/usb/usbdi.c index 4f69d1e..e051c8b 100644 --- a/sys/dev/usb/usbdi.c +++ b/sys/dev/usb/usbdi.c @@ -1224,18 +1224,26 @@ usbd_print_child(device_t parent, device_t child) int usbd_driver_load(module_t mod, int what, void *arg) { +#if 1 + return 0; +#else devclass_t usb_devclass = devclass_find("usb"); devclass_t ugen_devclass = devclass_find("ugen"); device_t *devlist; int devcount; int error; - switch (what) { - case MOD_LOAD: - case MOD_UNLOAD: + if ( what == MOD_LOAD || what == MOD_UNLOAD ) { if (!usb_devclass) return 0; /* just ignore call */ + /* Detach all the generic devices and do a reconfigure + * of the bus. This should attach the new driver to anything + * that is already connected and it can handle. + * XXX For the moment disabled. The detach does not remove + * the device from the list of devices attached to the hub. + * Legacy of converting from NetBSD to FreeBSD. + */ if (ugen_devclass) { /* detach devices from generic driver if possible */ error = devclass_get_devices(ugen_devclass, &devlist, @@ -1243,8 +1251,11 @@ usbd_driver_load(module_t mod, int what, void *arg) if (!error) for (devcount--; devcount >= 0; devcount--) (void)DEVICE_DETACH(devlist[devcount]); + free(devlist, M_TEMP); } + /* Reconfigure the busses, possibly attaching something to the + * new driver */ error = devclass_get_devices(usb_devclass, &devlist, &devcount); if (error) return 0; /* XXX maybe transient, or error? */ @@ -1253,10 +1264,10 @@ usbd_driver_load(module_t mod, int what, void *arg) USB_RECONFIGURE(devlist[devcount]); free(devlist, M_TEMP); - return 0; } - return 0; /* nothing to do by us */ + return 0; /* nothing to do */ +#endif } /* Set the description of the device including a malloc and copy. */ |