> 

Sorry to reply to myself, but. 
I reverted to the 2.5.75 version of isd200.c and 
things now appear to work. Brute force..
Patch at end
cliffw
----------
> System: Via C3 
> Mini-itx
> VIA USB controller on motherboard
> 
> Device: Archos jukebox
> ISD-200 
> (also using a CD-ROM via firewire, that works fine, tested
> with/witout)
> 
> Life was good using <= linux-2.5.75. The 2.6.0-test* kernels are not happy.
> If the usb_storage module is compiled in, boot is normal, when
> device is plugged in, things stop here:
> --
> Aug 31 17:27:03 tinyOne kernel: hub 4-0:0: 2 ports detected
> Aug 31 17:27:03 tinyOne kernel: Initializing USB Mass Storage driver...
> Aug 31 17:27:03 tinyOne kernel: drivers/usb/core/usb.c: registered new driver 
> usb-storage
> Aug 31 17:27:03 tinyOne kernel: USB Mass Storage support registered.
> ---
> No /dev/sd*, no good.
> 
> < 2.5.75 i normally see this:
> -----------
> Aug 31 17:27:29 tinyOne kernel: scsi1 : SCSI emulation for USB Mass Storage devices
> Aug 31 17:27:29 tinyOne kernel:   Vendor: HITACHI_  Model: DK23CA-20         Rev: 
> 00H1
> ....and on
> ------------
> Device looks fine in /proc/scsi/usb-storage/1
> 
> Host scsi1: usb-storage
>        Vendor: In-System Design
>       Product: USB Storage Adapter
> Serial Number: 4804A07970A2FFA1
>      Protocol: Transparent SCSI
>     Transport: Bulk
>        Quirks:
> 
> 
> /sbin/rescan-scsi-bus.sh no longer detects the firewire device,
> echo 'scsi add-single-device 1 0 1 0' >/proc/scsi/scsi
> never returns. 
> 
> If usb_storage is compiled as a module, insmod usb_storage never returns.
> The system is useable otherwise. -test4 requires me to use 'acpi=off' (via-rhine)
> so i've tested that also :( Symptoms unchanged since -test1, have tried various -mm* 
> patches also. 
> 
> I though i'd seen mention of this problem elsewhere, but i haven't been able to
> search out any email's with my problem. This involves possibly ide-scsi,scsi or 
> usb_storage,
> so if someone could point me somewhere, i'd appreciate
> 
> cliffw
----------
patch to revert isd200.c -> 2.5.75 
-----------------

--- linux-2.6.0-test4-stk/drivers/usb/storage/isd200.c  2003-08-22 16:55:45.000000000 
-0700
+++ linux-2.6.0-test4-old/drivers/usb/storage/isd200.c  2003-09-02 21:11:05.000000000 
-0700
@@ -280,7 +280,6 @@
 
        /* maximum number of LUNs supported */
        unsigned char MaxLUNs;
-       struct scsi_cmnd srb;
 };
 
 
@@ -405,15 +404,15 @@
                          void* pointer, int value )
 {
        union ata_cdb ata;
+       struct scsi_cmnd srb;
        struct scsi_device srb_dev;
        struct isd200_info *info = (struct isd200_info *)us->extra;
-       struct scsi_cmnd *srb = &info->srb;
        int status;
 
        memset(&ata, 0, sizeof(ata));
+       memset(&srb, 0, sizeof(srb));
        memset(&srb_dev, 0, sizeof(srb_dev));
-       srb->device = &srb_dev;
-       ++srb->serial_number;
+       srb.device = &srb_dev;
 
        ata.generic.SignatureByte0 = info->ConfigData.ATAMajorCommand;
        ata.generic.SignatureByte1 = info->ConfigData.ATAMinorCommand;
@@ -426,9 +425,9 @@
                ata.generic.RegisterSelect =
                  REG_CYLINDER_LOW | REG_CYLINDER_HIGH |
                  REG_STATUS | REG_ERROR;
-               srb->sc_data_direction = SCSI_DATA_READ;
-               srb->request_buffer = pointer;
-               srb->request_bufflen = value;
+               srb.sc_data_direction = SCSI_DATA_READ;
+               srb.request_buffer = pointer;
+               srb.request_bufflen = value;
                break;
 
        case ACTION_ENUM:
@@ -438,7 +437,7 @@
                                           ACTION_SELECT_5;
                ata.generic.RegisterSelect = REG_DEVICE_HEAD;
                ata.write.DeviceHeadByte = value;
-               srb->sc_data_direction = SCSI_DATA_NONE;
+               srb.sc_data_direction = SCSI_DATA_NONE;
                break;
 
        case ACTION_RESET:
@@ -447,7 +446,7 @@
                                           ACTION_SELECT_3|ACTION_SELECT_4;
                ata.generic.RegisterSelect = REG_DEVICE_CONTROL;
                ata.write.DeviceControlByte = ATA_DC_RESET_CONTROLLER;
-               srb->sc_data_direction = SCSI_DATA_NONE;
+               srb.sc_data_direction = SCSI_DATA_NONE;
                break;
 
        case ACTION_REENABLE:
@@ -456,7 +455,7 @@
                                           ACTION_SELECT_3|ACTION_SELECT_4;
                ata.generic.RegisterSelect = REG_DEVICE_CONTROL;
                ata.write.DeviceControlByte = ATA_DC_REENABLE_CONTROLLER;
-               srb->sc_data_direction = SCSI_DATA_NONE;
+               srb.sc_data_direction = SCSI_DATA_NONE;
                break;
 
        case ACTION_SOFT_RESET:
@@ -465,16 +464,16 @@
                ata.generic.RegisterSelect = REG_DEVICE_HEAD | REG_COMMAND;
                ata.write.DeviceHeadByte = info->DeviceHead;
                ata.write.CommandByte = WIN_SRST;
-               srb->sc_data_direction = SCSI_DATA_NONE;
+               srb.sc_data_direction = SCSI_DATA_NONE;
                break;
 
        case ACTION_IDENTIFY:
                US_DEBUGP("   isd200_action(IDENTIFY)\n");
                ata.generic.RegisterSelect = REG_COMMAND;
                ata.write.CommandByte = WIN_IDENTIFY;
-               srb->sc_data_direction = SCSI_DATA_READ;
-               srb->request_buffer = (void *)&info->drive;
-               srb->request_bufflen = sizeof(struct hd_driveid);
+               srb.sc_data_direction = SCSI_DATA_READ;
+               srb.request_buffer = (void *)&info->drive;
+               srb.request_bufflen = sizeof(struct hd_driveid);
                break;
 
        default:
@@ -482,9 +481,9 @@
                break;
        }
 
-       memcpy(srb->cmnd, &ata, sizeof(ata.generic));
-       srb->cmd_len = sizeof(ata.generic);
-       status = usb_stor_Bulk_transport(srb, us);
+       memcpy(srb.cmnd, &ata, sizeof(ata.generic));
+       srb.cmd_len = sizeof(ata.generic);
+       status = usb_stor_Bulk_transport(&srb, us);
        if (status == USB_STOR_TRANSPORT_GOOD)
                status = ISD200_GOOD;
        else {
@@ -835,7 +834,7 @@
                           int detect )
 {
        int status = ISD200_GOOD;
-       unsigned char *regs = us->iobuf;
+       unsigned char regs[8];
        unsigned long endTime;
        struct isd200_info *info = (struct isd200_info *)us->extra;
        int recheckAsMaster = FALSE;
@@ -857,7 +856,7 @@
                        break;
 
                status = isd200_action( us, ACTION_READ_STATUS, 
-                                       regs, 8 );
+                                       regs, sizeof(regs) );
                if ( status != ISD200_GOOD )
                        break;
 
-------------
> 
> 
> 
> 
> 
> -------------------------------------------------------
> This sf.net email is sponsored by:ThinkGeek
> Welcome to geek heaven.
> http://thinkgeek.com/sf
> _______________________________________________
> [EMAIL PROTECTED]
> To unsubscribe, use the last form field at:
> https://lists.sourceforge.net/lists/listinfo/linux-usb-users
> 


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-users

Reply via email to