From 8c8149965994d4122bd22d29fbcf114282175ec9 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Thu, 3 Jan 2013 20:46:25 +0100 Subject: 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. --- sys/src/cmd/nusb/disk/disk.c | 8 +++++++- sys/src/cmd/nusb/disk/scsireq.c | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'sys/src/cmd/nusb/disk') 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; -- cgit v1.2.3