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,1421995/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    
		if((s = scsireqsense(t, 0, 0)) != STok){ 
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,1581995/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    
		print("scsi%d: unit %d:%2.2ux: %s\n", t->ctlrno, i, t->inq[0], t->inq+8); 
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,2741995/0405/sys/src/9/pc/scsi.c:262,273
1994/0908    
		return -1; 
 
	nbytes = 8; 
	s = scsiexec(t, SCSIread, cmd, sizeof(cmd), d, &nbytes); 
	if(s < 0) { 
		free(d); 
		return s; 
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    
	} 
	*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); 
	free(d); 
	return 0; 
1995/0405    
	return s; 
1993/0915    
} 
1994/0908    
 
int 
1995/0404/sys/src/9/pc/scsi.c:304,3101995/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) { 
		scsireqsense(t, lun, 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,3671995/0405/sys/src/9/pc/scsi.c:331,374
1994/0908    
}; 
 
int 
1995/0324    
scsireqsense(Target *t, char lun, int quiet) 
1995/0405    
scsireqsense(Target *t, char lun, void *data, int *nbytes, int quiet) 
1994/0908    
{ 
	char *s; 
	int sr, try, nbytes; 
1995/0405    
	int status, try; 
1994/0908    
	uchar cmd[6], *sense; 
 
1995/0324    
	sense = t->scratch; 
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; 
		cmd[4] = Nscratch; 
		memset(sense, 0, sizeof(sense)); 
1995/0405    
		cmd[4] = *nbytes; 
		memset(sense, 0, *nbytes); 
1994/0908    
 
		nbytes = Nscratch; 
1995/0324    
		sr = scsiexec(t, SCSIread, cmd, sizeof(cmd), sense, &nbytes); 
1994/0908    
		if(sr != STok) 
			return sr; 
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. 
		 */ 
		if((sense[2] & 0x0F) == 0x00 || (sense[2] & 0x0F) == 0x06) 
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. 
		 */ 
		if((sense[2] & 0x0F) == 0x01) 
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,3831995/0405/sys/src/9/pc/scsi.c:379,390
1994/0908    
		delay(5000); 
	} 
 
	if(quiet) 
		return STcheck; 
                 
	s = key[sense[2]&0xf]; 
	print("scsi%d: unit %d reqsense: '%s' code #%2.2ux #%2.2ux\n", 
1995/0324    
		t->ctlrno, t->target, s, sense[12], sense[13]); 
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; 
} 
 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)