| plan 9 kernel history: overview | file list | diff list |
1995/0405/pc/scsi.c (diff list | history)
| 1995/0404/sys/src/9/pc/scsi.c:136,142 – 1995/0405/sys/src/9/pc/scsi.c:136,144 (short | long | prev | next) | ||
| 1994/0908 | * Determine if the drive exists and is not ready or * is simply not responding */ | |
| 1995/0324 |
| |
| 1995/0405 | nbytes = Nscratch; s = scsireqsense(t, 0, t->scratch, &nbytes, 0); if(s != STok){ | |
| 1995/0324 | print("scsi%d: unit %d unavailable, status %d\n", t->ctlrno, i, s); | |
| 1994/0908 | continue; } | |
| 1995/0404/sys/src/9/pc/scsi.c:152,158 – 1995/0405/sys/src/9/pc/scsi.c:154,160 | ||
| 1995/0324 | print("scsi%d: unit %d inquire failed, status %d\n", t->ctlrno, i, s); | |
| 1994/0908 | continue; } | |
| 1995/0403 |
| |
| 1995/0405 | print("scsi%d: unit %d: %s\n", t->ctlrno, i, t->inq+8); | |
| 1995/0324 | t->ok = 1; | |
| 1994/0908 | } | |
| 1993/0915 | } | |
| 1995/0404/sys/src/9/pc/scsi.c:260,274 – 1995/0405/sys/src/9/pc/scsi.c:262,273 | ||
| 1994/0908 | return -1; nbytes = 8; | |
| 1995/0405 | if((s = scsiexec(t, SCSIread, cmd, sizeof(cmd), d, &nbytes)) == STok){ *size = (d[0]<<24)|(d[1]<<16)|(d[2]<<8)|(d[3]<<0); *bsize = (d[4]<<24)|(d[5]<<16)|(d[6]<<8)|(d[7]<<0); | |
| 1994/0908 | } | |
| 1995/0405 | return s; | |
| 1993/0915 | } | |
| 1994/0908 | int | |
| 1995/0404/sys/src/9/pc/scsi.c:304,310 – 1995/0405/sys/src/9/pc/scsi.c:303,310 | ||
| 1994/0908 | nbytes = n*bsize; s = scsiexec(t, dir, cmd, cdbsiz, b, &nbytes); if(s < 0) { | |
| 1995/0405 | nbytes = Nscratch; scsireqsense(t, lun, t->scratch, &nbytes, 0); | |
| 1994/0908 | return -1; } return nbytes; | |
| 1995/0404/sys/src/9/pc/scsi.c:331,367 – 1995/0405/sys/src/9/pc/scsi.c:331,374 | ||
| 1994/0908 | }; int | |
| 1995/0324 |
| |
| 1995/0405 | scsireqsense(Target *t, char lun, void *data, int *nbytes, int quiet) | |
| 1994/0908 | { char *s; | |
| 1995/0405 | int status, try; | |
| 1994/0908 | uchar cmd[6], *sense; | |
| 1995/0324 |
| |
| 1995/0405 | sense = malloc(*nbytes); | |
| 1994/0908 | for(try = 0; try < 5; try++) { memset(cmd, 0, sizeof(cmd)); cmd[0] = CMDreqsense; cmd[1] = lun<<5; | |
| 1995/0405 | cmd[4] = *nbytes; memset(sense, 0, *nbytes); | |
| 1994/0908 |
| |
| 1995/0324 |
| |
| 1994/0908 |
| |
| 1995/0405 | status = scsiexec(t, SCSIread, cmd, sizeof(cmd), sense, nbytes); if(status != STok){ free(sense); return status; } *nbytes = sense[0x07]+8; memmove(data, sense, *nbytes); | |
| 1994/0908 | /* * Unit attention. We can handle that. */ | |
| 1995/0405 | if((sense[2] & 0x0F) == 0x00 || (sense[2] & 0x0F) == 0x06){ free(sense); | |
| 1994/0908 | return STok; | |
| 1995/0405 | } | |
| 1994/0908 | /* * Recovered error. Why bother telling me. */ | |
| 1995/0405 | if((sense[2] & 0x0F) == 0x01){ free(sense); | |
| 1994/0908 | return STok; | |
| 1995/0405 | } | |
| 1994/0908 | /* * Unit is becoming ready | |
| 1995/0404/sys/src/9/pc/scsi.c:372,383 – 1995/0405/sys/src/9/pc/scsi.c:379,390 | ||
| 1994/0908 | delay(5000); } | |
| 1995/0324 |
| |
| 1995/0405 | if(quiet == 0){ s = key[sense[2]&0x0F]; print("scsi%d: unit %d reqsense: '%s' code #%2.2ux #%2.2ux\n", t->ctlrno, t->target, s, sense[12], sense[13]); } free(sense); | |
| 1994/0908 | return STcheck; } | |