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

2001/0728/alphapc/sd53c8xx.c (diff list | history)

2001/0727/sys/src/9/alphapc/sd53c8xx.c:200,2192001/0728/sys/src/9/alphapc/sd53c8xx.c:200,211 (short | long | prev | next)
2000/0515    
} State; 
 
typedef struct Dsa { 
	union { 
		uchar state[4]; 
		struct { 
			uchar stateb; 
			uchar result; 
			uchar dmablks; 
			uchar flag;	/* setbyte(state,3,...) */ 
		}; 
	}; 
2001/0728    
	uchar stateb; 
	uchar result; 
	uchar dmablks; 
	uchar flag;	/* setbyte(state,3,...) */ 
2000/0515    
 
	union { 
		ulong dmancr;		/* For block transfer: NCR order (little-endian) */ 
		uchar dmaaddr[4]; 
	}; 
2001/0728    
	uchar dmaaddr[4]; 
2000/0515    
 
	uchar target;			/* Target */ 
	uchar pad0[3]; 
2001/0727/sys/src/9/alphapc/sd53c8xx.c:397,4032001/0728/sys/src/9/alphapc/sd53c8xx.c:389,395
2000/0515    
		if (DEBUG(1)) 
2001/0314    
			KPRINT(PRINTPREFIX "%d/%d: allocated new dsa %lux\n", target, lun, (ulong)d); 
2000/0515    
		lesetl(d->next, 0); 
		lesetl(d->state, A_STATE_ALLOCATED); 
2001/0728    
		lesetl(&d->stateb, A_STATE_ALLOCATED); 
2000/0515    
		if (legetl(c->dsalist.head) == 0) 
			lesetl(c->dsalist.head, DMASEG(d));	/* ATOMIC?!? */ 
		else 
2001/0727/sys/src/9/alphapc/sd53c8xx.c:408,4142001/0728/sys/src/9/alphapc/sd53c8xx.c:400,406
2000/0515    
		if (DEBUG(1)) 
2001/0314    
			KPRINT(PRINTPREFIX "%d/%d: reused dsa %lux\n", target, lun, (ulong)d); 
		c->dsalist.freechain = d->freechain; 
2000/0515    
		lesetl(d->state, A_STATE_ALLOCATED); 
2001/0728    
		lesetl(&d->stateb, A_STATE_ALLOCATED); 
2000/0515    
	} 
	iunlock(&c->dsalist); 
	d->target = target; 
2001/0727/sys/src/9/alphapc/sd53c8xx.c:422,4282001/0728/sys/src/9/alphapc/sd53c8xx.c:414,420
2000/0515    
	ilock(&c->dsalist); 
2001/0314    
	d->freechain = c->dsalist.freechain; 
	c->dsalist.freechain = d; 
2000/0515    
	lesetl(d->state, A_STATE_FREE); 
2001/0728    
	lesetl(&d->stateb, A_STATE_FREE); 
2000/0515    
	iunlock(&c->dsalist); 
} 
 
2001/0727/sys/src/9/alphapc/sd53c8xx.c:1204,12102001/0728/sys/src/9/alphapc/sd53c8xx.c:1196,1202
2000/0515    
				    dsa->dmablks, legetl(dsa->dmaaddr), 
				    legetl(dsa->data_buf.pa), legetl(dsa->data_buf.dbc)); 
				n->scratcha[2] = dsa->dmablks; 
				lesetl(n->scratchb, dsa->dmancr); 
2001/0728    
				lesetl(n->scratchb, *(ulong*)dsa->dmaaddr); 
2000/0515    
				cont = E_data_block_mismatch_recover; 
			} 
			else if (sa == E_data_out_mismatch) { 
2001/0727/sys/src/9/alphapc/sd53c8xx.c:1231,12372001/0728/sys/src/9/alphapc/sd53c8xx.c:1223,1229
2000/0515    
				    dmablks * A_BSIZE - tbc + legetl(dsa->data_buf.dbc)); 
				/* copy changes into scratch registers */ 
				n->scratcha[2] = dsa->dmablks; 
				lesetl(n->scratchb, dsa->dmancr); 
2001/0728    
				lesetl(n->scratchb, *(ulong*)dsa->dmaaddr); 
2000/0515    
				cont = E_data_block_mismatch_recover; 
			} 
			else if (sa == E_id_out_mismatch) { 
2001/0727/sys/src/9/alphapc/sd53c8xx.c:1442,14472001/0728/sys/src/9/alphapc/sd53c8xx.c:1434,1445
2000/0515    
				    dsa->target, dsa->lun); 
				cont = -2; 
				break; 
2001/0728    
			case A_error_reselected:		/* dsa isn't valid here */ 
				print(PRINTPREFIX "reselection error\n"); 
				dumpncrregs(c, 1); 
				for (dsa = KPTR(legetl(c->dsalist.head)); dsa; dsa = KPTR(legetl(dsa->next))) 
					IPRINT(PRINTPREFIX "dsa target %d lun %d state %d\n", dsa->target, dsa->lun, dsa->stateb); 
				break; 
2000/0515    
			default: 
2001/0314    
				IPRINT(PRINTPREFIX "%d/%d: script error %ld\n", 
2000/0515    
					dsa->target, dsa->lun, legetl(n->dsps)); 
2001/0727/sys/src/9/alphapc/sd53c8xx.c:1752,17582001/0728/sys/src/9/alphapc/sd53c8xx.c:1750,1756
2000/0515    
		 * Clear out the microcode state 
		 * so the Dsa can be re-used. 
		 */ 
		lesetl(d->state, A_STATE_ALLOCATED); 
2001/0728    
		lesetl(&d->stateb, A_STATE_ALLOCATED); 
2000/0515    
		goto docheck; 
	} 
	qunlock(&c->q[target]); 


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