plan 9 kernel history: overview | file list | diff list

1995/0723/pc/scsi.c (diff list | history)

1995/0722/sys/src/9/pc/scsi.c:30,361995/0723/sys/src/9/pc/scsi.c:30,36 (short | long | prev | next)
1994/0908    
	Target	target[NTarget]; 
} Ctlr; 
 
static Ctlr *scsi[MaxScsi]; 
1995/0723    
static	Ctlr*	scsi[MaxScsi]; 
1994/0908    
 
1995/0328    
typedef struct Link Link; 
1995/0722    
typedef struct Link 
1995/0722/sys/src/9/pc/scsi.c:260,2751995/0723/sys/src/9/pc/scsi.c:260,276
1994/0908    
	cmd[0] = 0x25; 
	cmd[1] = lun<<5; 
 
	d = malloc(8); 
1995/0723    
	nbytes = 8; 
	d = scsialloc(nbytes); 
1994/0908    
	if(d == 0) 
		return -1; 
1995/0723    
		error(Enomem); 
1994/0908    
 
	nbytes = 8; 
1995/0405    
	if((s = scsiexec(t, SCSIread, cmd, sizeof(cmd), d, &nbytes)) == STok){ 
1995/0723    
	s = scsiexec(t, SCSIread, cmd, sizeof(cmd), d, &nbytes); 
	if(s == STok) { 
1995/0405    
		*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    
	} 
	free(d); 
1995/0723    
	scsifree(d); 
1995/0405    
	return s; 
1993/0915    
} 
1994/0908    
 
1995/0722/sys/src/9/pc/scsi.c:394,4191995/0723/sys/src/9/pc/scsi.c:395,419
1995/0722    
int 
scsidiskinfo(Target *t, char lun, uchar *data) 
{ 
	int s, nbytes, try; 
	uchar cmd[10]; 
1995/0723    
	int s, nbytes; 
	uchar cmd[10], *d; 
1995/0722    
 
	for(try=0; try<3; try++) { 
1995/0723    
	nbytes = 4; 
1995/0722    
 
		nbytes = 4; 
1995/0723    
	memset(cmd, 0, sizeof(cmd)); 
	cmd[0] = 0x43; 
	cmd[1] = lun<<5; 
	cmd[7] = nbytes>>8; 
	cmd[8] = nbytes>>0; 
1995/0722    
 
		memset(cmd, 0, sizeof(cmd)); 
		cmd[0] = 0x43; 
		cmd[1] = lun<<5; 
		cmd[7] = nbytes>>8; 
		cmd[8] = nbytes>>0; 
1995/0723    
	d = scsialloc(nbytes); 
	if(d == 0) 
		error(Enomem); 
1995/0722    
 
		s = scsiexec(t, SCSIread, cmd, sizeof(cmd), data, &nbytes); 
		if(s == STok) 
			break; 
                 
		nbytes = Nscratch; 
		scsireqsense(t, lun, t->scratch, &nbytes, 0); 
	} 
1995/0723    
	memset(d, 0, nbytes); 
	s = scsiexec(t, SCSIread, cmd, sizeof(cmd), d, &nbytes); 
	memmove(data, d, 4); 
	scsifree(d); 
1995/0722    
	return s; 
} 
 
1995/0722/sys/src/9/pc/scsi.c:421,4271995/0723/sys/src/9/pc/scsi.c:421,427
1995/0722    
scsitrackinfo(Target *t, char lun, int track, uchar *data) 
{ 
	int s, nbytes; 
	uchar cmd[10]; 
1995/0723    
	uchar cmd[10], *d; 
1995/0722    
 
	nbytes = 12; 
 
1995/0722/sys/src/9/pc/scsi.c:432,4371995/0723/sys/src/9/pc/scsi.c:432,503
1995/0722    
	cmd[7] = nbytes>>8; 
	cmd[8] = nbytes>>0; 
 
	s = scsiexec(t, SCSIread, cmd, sizeof(cmd), data, &nbytes); 
1995/0723    
	d = scsialloc(nbytes); 
	if(d == 0) 
		error(Enomem); 
 
	memset(d, 0, nbytes); 
	s = scsiexec(t, SCSIread, cmd, sizeof(cmd), d, &nbytes); 
	memmove(data, d, 12); 
	scsifree(d); 
 
1995/0722    
	return s; 
1995/0723    
} 
 
int 
scsibufsize(Target *t, char lun, int size) 
{ 
	int s, nbytes; 
	uchar cmd[6], *d; 
 
 
	nbytes = 12; 
 
	memset(cmd, 0, sizeof(cmd)); 
	cmd[0] = 0x15; 
	cmd[1] = lun<<5; 
	cmd[4] = nbytes; 
 
	d = scsialloc(nbytes); 
	if(d == 0) 
		error(Enomem); 
 
	memset(d, 0, nbytes); 
	d[3] = 8; 
	d[9] = size>>16; 
	d[10] = size>>8; 
	d[11] = size>>0; 
 
	s = scsiexec(t, SCSIwrite, cmd, sizeof(cmd), d, &nbytes); 
	scsifree(d); 
	return s; 
} 
 
int 
scsireadcdda(Target *t, char lun, void *b, long n, long bsize, long bno) 
{ 
	uchar cmd[10]; 
	int s, nbytes; 
 
	memset(cmd, 0, sizeof(cmd)); 
 
	cmd[0] = 0xd8; 
	cmd[1] = (lun<<5); 
	cmd[2] = bno >> 24; 
	cmd[3] = bno >> 16; 
	cmd[4] = bno >> 8; 
	cmd[5] = bno; 
	cmd[6] = n>>24; 
	cmd[7] = n>>16; 
	cmd[8] = n>>8; 
	cmd[9] = n; 
 
	nbytes = n*bsize; 
	s = scsiexec(t, SCSIread, cmd, sizeof(cmd), b, &nbytes); 
	if(s < 0) { 
		nbytes = Nscratch; 
		scsireqsense(t, lun, t->scratch, &nbytes, 0); 
		return -1; 
	} 
	return nbytes; 
1995/0722    
} 


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