diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-01-03 20:46:25 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-01-03 20:46:25 +0100 |
commit | 8c8149965994d4122bd22d29fbcf114282175ec9 (patch) | |
tree | 52fd4f316942754e7270810de7cf7be58650d1cb /sys/src/cmd/nusb/disk | |
parent | 857502c364fc281a9f5265c3192b030431768583 (diff) |
scsi: do only 36 byte inquiry
some devices freeze up with inqiry allocation length
other than 36 bytes. as we do not really care about
the vendor specific part of the inquiry, lets only do
36 byte inquiry for now.
Diffstat (limited to 'sys/src/cmd/nusb/disk')
-rw-r--r-- | sys/src/cmd/nusb/disk/disk.c | 8 | ||||
-rw-r--r-- | sys/src/cmd/nusb/disk/scsireq.c | 4 |
2 files changed, 9 insertions, 3 deletions
diff --git a/sys/src/cmd/nusb/disk/disk.c b/sys/src/cmd/nusb/disk/disk.c index 41260aacd..60052922b 100644 --- a/sys/src/cmd/nusb/disk/disk.c +++ b/sys/src/cmd/nusb/disk/disk.c @@ -341,7 +341,13 @@ umsinit(void) i, lun->inquiry[0]); continue; } - SRstart(lun, 1); + + if(SRready(lun) < 0 && SRready(lun) < 0 && SRready(lun) < 0) + dprint(2, "disk: lun %d not ready\n", i); + + if((lun->inquiry[0] & 0x1F) == 0) + SRstart(lun, 1); + /* * we ignore the device type reported by inquiry. * Some devices return a wrong value but would still work. diff --git a/sys/src/cmd/nusb/disk/scsireq.c b/sys/src/cmd/nusb/disk/scsireq.c index f9994e286..683dc7b8c 100644 --- a/sys/src/cmd/nusb/disk/scsireq.c +++ b/sys/src/cmd/nusb/disk/scsireq.c @@ -404,12 +404,12 @@ SRinquiry(ScsiReq *rp) memset(cmd, 0, sizeof cmd); cmd[0] = ScmdInq; - cmd[4] = sizeof rp->inquiry; + cmd[4] = 36; rp->cmd.p = cmd; rp->cmd.count = sizeof cmd; memset(rp->inquiry, 0, sizeof rp->inquiry); rp->data.p = rp->inquiry; - rp->data.count = sizeof rp->inquiry; + rp->data.count = 36; rp->data.write = 0; if(SRrequest(rp) >= 0){ rp->flags |= Finqok; |