2.4.x USB and 1394 hotplug
Subsystems (3)
PATCH 1/1 2.4.x USB and 1394 hotplug
This patch has been in use locally for quite some time now and makes working with USB and 1394 mass-storage devices in 2.4.x a much less painful experience. When devices are plugged in, they are automagically connected up to the scsi subsystem without the need to rescan all scsi busses or echo things into /proc/scsi/scsi. When devices are unplugged, they are automagically removed from the scsi subsystem, instead of hanging around registered but with no media actually present.
-Erik
--
Erik B. Andersen http://codepoet-consulting.com/
--This message was written using 73% post-consumer electrons--
Signed-off-by Erik Andersen <[email protected]>
drivers/usb/storage/usb.c +11 -0
@@ -744,6 +744,11 @@/* unlock the device pointers */ up (&(ss->dev_semaphore)); +/* Try to re-connect ourselves to the SCSI subsystem */ +if (scsi_add_single_device (ss->host,0 ,0 ,0 )) +printk (KERN_WARNING "Unable to connect USB device to the SCSI subsystem\n" ); +else +printk (KERN_WARNING "USB device connected to the SCSI subsystem\n" ); }else {/* New device -- allocate memory and initialize */ US_DEBUGP ("New GUID " GUID_FORMAT "\n" ,GUID_ARGS (guid));
@@ -1057,6 +1062,12 @@/* lock access to the device data structure */ down (&(ss->dev_semaphore)); +/* Try to un-hook ourselves from the SCSI subsystem */ +if (scsi_remove_single_device (ss->host,0 ,0 ,0 )) +printk (KERN_WARNING "Unable to disconnect USB device from the SCSI subsystem\n" ); +else +printk (KERN_WARNING "USB device disconnected from the SCSI subsystem\n" ); +/* release the IRQ, if we have one */ if (ss->irq_urb) {US_DEBUGP ("-- releasing irq URB\n" );
drivers/ieee1394/sbp2.c +1 -1
@@ -231,7 +231,7 @@* enable this define to make use of it. This provides better hotplug * support. The mentioned patch is not part of the kernel proper though, * because it is considered somewhat of a hack. */ -//#define SBP2_USE_SCSI_ADDREM_HACK +#define SBP2_USE_SCSI_ADDREM_HACK /*
drivers/scsi/scsi_syms.c +6 -0
@@ -104,3 +104,9 @@extern int scsi_delete_timer (Scsi_Cmnd *);EXPORT_SYMBOL (scsi_add_timer);EXPORT_SYMBOL (scsi_delete_timer); + +/* Support for hot plugging and unplugging devices -- safe for +* ieee1394 or USB devices, but probably not for normal SCSI... */ +EXPORT_SYMBOL (scsi_add_single_device); +EXPORT_SYMBOL (scsi_remove_single_device); +
drivers/scsi/hosts.h +7 -0
@@ -535,6 +535,13 @@int scsi_register_device (struct Scsi_Device_Template * sdpnt);void scsi_deregister_device (struct Scsi_Device_Template * tpnt); +/* Support for hot plugging and unplugging devices -- safe for +* ieee1394 or USB devices, but probably not for normal SCSI... */ +extern int scsi_add_single_device (struct Scsi_Host *shpnt, +int channel,int id,int lun); +extern int scsi_remove_single_device (struct Scsi_Host *shpnt, +int channel,int id,int lun); +/* These are used by loadable modules */ extern int scsi_register_module (int ,void *);extern int scsi_unregister_module (int ,void *);
drivers/scsi/scsi.c +159 -85
284 lines not on this page · raw message