summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2013-01-03 20:46:25 +0100
committercinap_lenrek <cinap_lenrek@gmx.de>2013-01-03 20:46:25 +0100
commit8c8149965994d4122bd22d29fbcf114282175ec9 (patch)
tree52fd4f316942754e7270810de7cf7be58650d1cb /sys
parent857502c364fc281a9f5265c3192b030431768583 (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')
-rw-r--r--sys/src/9/port/sdscsi.c4
-rw-r--r--sys/src/cmd/nusb/disk/disk.c8
-rw-r--r--sys/src/cmd/nusb/disk/scsireq.c4
3 files changed, 11 insertions, 5 deletions
diff --git a/sys/src/9/port/sdscsi.c b/sys/src/9/port/sdscsi.c
index dd4188ec7..defad953e 100644
--- a/sys/src/9/port/sdscsi.c
+++ b/sys/src/9/port/sdscsi.c
@@ -45,10 +45,10 @@ scsiverify(SDunit* unit)
r->write = 0;
r->cmd[0] = 0x12;
r->cmd[1] = r->lun<<5;
- r->cmd[4] = sizeof(unit->inquiry)-1;
+ r->cmd[4] = 36;
r->clen = 6;
r->data = inquiry;
- r->dlen = sizeof(unit->inquiry)-1;
+ r->dlen = 36;
r->flags = 0;
r->status = ~0;
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;