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

1999/0506/alphapc/devfloppy.c (diff list | history)

1999/0504/sys/src/9/alphapc/devfloppy.c:39,451999/0506/sys/src/9/alphapc/devfloppy.c:39,45 (short | long | prev | next)
1999/0415    
}; 
 
#define DPRINT if(floppydebug)print 
1999/0501    
int floppydebug = 1; 
1999/0506    
int floppydebug = 0; 
1999/0415    
 
/* 
 *  types of drive (from PC equipment byte) 
1999/0504/sys/src/9/alphapc/devfloppy.c:106,1121999/0506/sys/src/9/alphapc/devfloppy.c:106,113
1999/0415    
static long	floppyxfer(FDrive*, int, void*, long, long); 
 
Dirtab floppydir[]={ 
	"fd0disk",		{Qdata + 0},	0,	0660, 
1999/0506    
//	"fd0disk",		{Qdata + 0},	0,	0660, 
	"fd0disk",		{Qdata + 0},	0,	0666, 
1999/0415    
	"fd0ctl",		{Qctl + 0},	0,	0660, 
	"fd1disk",		{Qdata + 1},	0,	0660, 
	"fd1ctl",		{Qctl + 1},	0,	0660, 
1999/0504/sys/src/9/alphapc/devfloppy.c:535,5411999/0506/sys/src/9/alphapc/devfloppy.c:536,541
1999/0415    
			microdelay(8);	/* for machine independence */ 
		} 
		outb(Pfdata, fl.cmd[i]); 
1999/0501    
microdelay(8);	/* for machine independence */ 
1999/0415    
	} 
	return 0; 
} 
1999/0504/sys/src/9/alphapc/devfloppy.c:639,6491999/0506/sys/src/9/alphapc/devfloppy.c:639,645
1999/0415    
static void 
floppywait(void) 
{ 
1999/0501    
vlong t0, t1; 
t0 = fastticks(nil); 
1999/0415    
	tsleep(&fl.r, cmddone, 0, 5000); 
1999/0501    
t1 = fastticks(nil); 
print("wait %lld ticks\n", t1-t0); 
1999/0415    
	if(!cmddone(0)){ 
		floppyintr(0); 
		fl.confused = 1; 
1999/0504/sys/src/9/alphapc/devfloppy.c:688,6931999/0506/sys/src/9/alphapc/devfloppy.c:684,709
1999/0415    
} 
 
1999/0501    
static void 
1999/0506    
dumpreg(void) 
{ 
	int i; 
 
	fl.ncmd = 0; 
	fl.cmd[fl.ncmd++] = Fdumpreg; 
	if(floppycmd() < 0) 
		return; 
	floppywait(); 
	if(fl.nstat < 0){ 
		print("dumpreg bad %d\n", fl.nstat); 
		fldump(); 
		return; 
	} 
	for(i = 0; i < fl.nstat; i++) 
		print(" %2.2uX", fl.stat[i]); 
	print("\n"); 
} 
 
static void 
1999/0501    
specify(void) 
{ 
	fl.ncmd = 0; 
1999/0504/sys/src/9/alphapc/devfloppy.c:794,8001999/0506/sys/src/9/alphapc/devfloppy.c:810,816
1999/0415    
	/* retry on error (until it gets ridiculous) */ 
	tries = 0; 
	while(waserror()){ 
1999/0501    
		if(tries++ > 2/*0*/) 
1999/0506    
		if(tries++ > 20) 
1999/0415    
			nexterror(); 
		DPRINT("floppyxfer: retrying\n"); 
		/*floppyon(dp);*/ 
1999/0504/sys/src/9/alphapc/devfloppy.c:840,8481999/0506/sys/src/9/alphapc/devfloppy.c:856,861
1999/0415    
	/* 
	 *  give bus to DMA, floppyintr() will read result 
	 */ 
1999/0501    
delay(10); 
print("msr 0x%2.2uX\n", inb(Pmsr)); 
1999/0504    
xdmastatus(DMAchan); 
1999/0415    
	floppywait(); 
	dmaend(DMAchan); 
	poperror(); 


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