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

2002/0606/bitsy/sdata.c (diff list | history)

2001/0908/sys/src/9/bitsy/sdata.c:314,3202002/0217/sys/src/9/bitsy/sdata.c:314,320 (short | long)
Convert to new fmt library.
rsc Fri Mar 4 12:44:25 2005
2001/0908    
	} 
 
	va_start(arg, fmt); 
	n = doprint(buf, buf+sizeof(buf), fmt, arg) - buf; 
2002/0217    
	n = vseprint(buf, buf+sizeof(buf), fmt, arg) - buf; 
2001/0908    
	va_end(arg); 
 
	if(cmdport){ 
2002/0217/sys/src/9/bitsy/sdata.c:368,3742002/0606/sys/src/9/bitsy/sdata.c:368,374 (short | long)
2001/0908    
			atadebug(0, 0, "ataready: %d 0x%2.2uX\n", micro, as); 
			break; 
		} 
		µdelay(4); 
2002/0606    
		microdelay(4); 
2001/0908    
	} 
	atadebug(cmdport, ctlport, "ataready: timeout"); 
 
2002/0217/sys/src/9/bitsy/sdata.c:431,4372002/0606/sys/src/9/bitsy/sdata.c:431,437
2001/0908    
		return 0; 
	outb(cmdport+Count, rwm); 
	outb(cmdport+Command, Csm); 
	µdelay(4); 
2002/0606    
	microdelay(4); 
2001/0908    
	as = ataready(cmdport, ctlport, 0, Bsy, Drdy|Df|Err, 1000); 
	inb(cmdport+Status); 
	if(as < 0 || (as & (Df|Err))) 
2002/0217/sys/src/9/bitsy/sdata.c:482,4882002/0606/sys/src/9/bitsy/sdata.c:482,488
2001/0908    
	if(as < 0) 
		return as; 
	outb(cmdport+Command, command); 
	µdelay(4); 
2002/0606    
	microdelay(4); 
2001/0908    
 
	as = ataready(cmdport, ctlport, 0, Bsy, Drq|Err, 400*1000); 
	if(as < 0) 
2002/0217/sys/src/9/bitsy/sdata.c:600,6102002/0606/sys/src/9/bitsy/sdata.c:600,610
2001/0908    
	 * Also, there will be problems here if overlapped commands 
	 * are ever supported. 
	 */ 
	µdelay(20); 
2002/0606    
	microdelay(20); 
2001/0908    
	outb(ctlport+Dc, Srst); 
	µdelay(20); 
2002/0606    
	microdelay(20); 
2001/0908    
	outb(ctlport+Dc, 0); 
	µdelay(4*1000); 
2002/0606    
	microdelay(4*1000); 
2001/0908    
} 
 
static SDev* 
2002/0217/sys/src/9/bitsy/sdata.c:631,6372002/0606/sys/src/9/bitsy/sdata.c:631,637
2001/0908    
	dev = Dev0; 
	if(inb(ctlport+As) & Bsy){ 
		outb(cmdport+Dh, dev); 
		µdelay(5); 
2002/0606    
		microdelay(5); 
2001/0908    
trydev1: 
		atadebug(cmdport, ctlport, "ataprobe bsy"); 
		outb(cmdport+Cyllo, 0xAA); 
2002/0217/sys/src/9/bitsy/sdata.c:732,7382002/0606/sys/src/9/bitsy/sdata.c:732,738
2001/0908    
			} 
			else{ 
				outb(cmdport+Dh, Dev0); 
				µdelay(1); 
2002/0606    
				microdelay(1); 
2001/0908    
			} 
		} 
#endif 
2002/0217/sys/src/9/bitsy/sdata.c:846,8582002/0606/sys/src/9/bitsy/sdata.c:846,858
2001/0908    
	ctlr->command = Cnop;		/* debugging */ 
	outb(cmdport+Command, Cnop); 
 
	µdelay(1); 
2002/0606    
	microdelay(1); 
2001/0908    
	ctlport = ctlr->ctlport; 
	for(timeo = 0; timeo < 1000; timeo++){ 
		as = inb(ctlport+As); 
		if(!(as & Bsy)) 
			break; 
		µdelay(1); 
2002/0606    
		microdelay(1); 
2001/0908    
	} 
	drive->error |= Abrt; 
} 
2002/0217/sys/src/9/bitsy/sdata.c:1078,10842002/0606/sys/src/9/bitsy/sdata.c:1078,1084
2001/0908    
	outb(cmdport+Command, Cpkt); 
 
	if((drive->info[Iconfig] & 0x0060) != 0x0020){ 
		µdelay(1); 
2002/0606    
		microdelay(1); 
2001/0908    
		as = ataready(cmdport, ctlport, 0, Bsy, Drq|Chk, 4*1000); 
		if(as < 0) 
			r = SDtimeout; 
2002/0217/sys/src/9/bitsy/sdata.c:1180,11862002/0606/sys/src/9/bitsy/sdata.c:1180,1186
2001/0908    
	switch(drive->command){ 
	case Cws: 
	case Cwsm: 
		µdelay(1); 
2002/0606    
		microdelay(1); 
2001/0908    
		as = ataready(cmdport, ctlport, 0, Bsy, Drq|Err, 1000); 
		if(as < 0 || (as & Err)){ 
			iunlock(ctlr); 
2002/0606/sys/src/9/bitsy/sdata.c:2054,20632002/0615/sys/src/9/bitsy/sdata.c:2054,2063 (short | long)
2001/0908    
	rc = nil; 
	for (try = &tries[0]; try->p != 0 || try->c != 0; try++){ 
		ataitype = cf->itype; 
		atairq  = cf->interrupt; 
2002/0615    
		atairq  = cf->intnum; 
2001/0908    
		cmdport = cf->port + try->p; 
		ctlport = cmdport + try->c; 
		irq = cf->interrupt; 
2002/0615    
		irq = cf->intnum; 
2001/0908    
		rc = ataprobe(cmdport, ctlport, irq); 
		if (rc) 
			break; 
2002/0615/sys/src/9/bitsy/sdata.c:7,132002/0718/sys/src/9/bitsy/sdata.c:7,13 (short | long)
2001/0908    
#include "ureg.h" 
#include "../port/error.h" 
 
#include "../port/sd.h" 
2002/0718    
#include "sd.h" 
2001/0908    
 
 
extern SDifc sdataifc; 
2002/0615/sys/src/9/bitsy/sdata.c:353,3692002/0718/sys/src/9/bitsy/sdata.c:353,368
2001/0908    
		 * can be used as a test for !Bsy. 
		 */ 
		as = inb(ctlport+As); 
		if(as & reset) 
			; 
		else if(dev){ 
			outb(cmdport+Dh, dev); 
			dev = 0; 
2002/0718    
		if((as & reset) == 0){ 
			if(dev){ 
				outb(cmdport+Dh, dev); 
				dev = 0; 
			} 
			else if(ready == 0 || (as & ready)){ 
				atadebug(0, 0, "ataready: %d 0x%2.2uX\n", micro, as); 
				return as; 
			} 
2001/0908    
		} 
		else if(ready == 0 || (as & ready)){ 
			atadebug(0, 0, "ataready: %d 0x%2.2uX\n", micro, as); 
			return as; 
		} 
                 
		if(micro-- <= 0){ 
			atadebug(0, 0, "ataready: %d 0x%2.2uX\n", micro, as); 
			break; 
2002/0615/sys/src/9/bitsy/sdata.c:1581,15982002/0718/sys/src/9/bitsy/sdata.c:1580,1594
2001/0908    
ataid(SDev* sdev) 
{ 
	int i; 
	Ctlr *ctlr; 
 
	if(sdev == nil) 
		return nil; 
	ctlr = sdev->ctlr; 
	i = 0; 
	while(sdev){ 
		if(sdev->ifc == &sdataifc){ 
			ctlr = sdev->ctlr; 
			sdev->idno = 'C'+i; 
			i++; 
			snprint(sdev->name, NAMELEN, "sd%c", sdev->idno); 
2002/0718    
			snprint(sdev->name, KNAMELEN, "sd%c", sdev->idno); 
2001/0908    
		} 
		sdev = sdev->next; 
	} 
2002/0615/sys/src/9/bitsy/sdata.c:1606,16122002/0718/sys/src/9/bitsy/sdata.c:1602,1608
2001/0908    
ataenable(SDev* sdev) 
{ 
	Ctlr *ctlr; 
	char name[NAMELEN]; 
2002/0718    
	char name[KNAMELEN]; 
2001/0908    
 
	ctlr = sdev->ctlr; 
 
2002/0615/sys/src/9/bitsy/sdata.c:1613,16192002/0718/sys/src/9/bitsy/sdata.c:1609,1615
2001/0908    
	if(ctlr->bmiba){ 
		ctlr->prdt = xspanalloc(Nprd*sizeof(Prd), 4, 4*1024); 
	} 
	snprint(name, NAMELEN, "%s (%s)", sdev->name, sdev->ifc->name); 
2002/0718    
	snprint(name, KNAMELEN, "%s (%s)", sdev->name, sdev->ifc->name); 
2001/0908    
//	intrenable(ctlr->irq, atainterrupt, ctlr, ctlr->tbdf, name); 
	outb(ctlr->ctlport+Dc, 0); 
	intrenable(ataitype, atairq, atainterrupt, ctlr, name); 
2002/0615/sys/src/9/bitsy/sdata.c:2040,20482002/0718/sys/src/9/bitsy/sdata.c:2036,2043
2001/0908    
}; 
 
static SDev* 
ataconfig(int on, char *, void *pf) 
2002/0718    
ataconfig(int on, char *, DevConf *cf) 
2001/0908    
{ 
	DevConf* cf = pf; 
	int	cmdport; 
	int	ctlport; 
	int	irq; 
2002/0615/sys/src/9/bitsy/sdata.c:2054,20632002/0718/sys/src/9/bitsy/sdata.c:2049,2058
2001/0908    
	rc = nil; 
	for (try = &tries[0]; try->p != 0 || try->c != 0; try++){ 
		ataitype = cf->itype; 
2002/0615    
		atairq  = cf->intnum; 
2002/0718    
		atairq  = cf->irq; 
2001/0908    
		cmdport = cf->port + try->p; 
		ctlport = cmdport + try->c; 
2002/0615    
		irq = cf->intnum; 
2002/0718    
		irq = cf->irq; 
2001/0908    
		rc = ataprobe(cmdport, ctlport, irq); 
		if (rc) 
			break; 
2002/0718/sys/src/9/bitsy/sdata.c:7,132002/1112/sys/src/9/bitsy/sdata.c:7,13 (short | long)
2001/0908    
#include "ureg.h" 
#include "../port/error.h" 
 
2002/0718    
#include "sd.h" 
2002/1112    
#include "../port/sd.h" 
2001/0908    
 
 
extern SDifc sdataifc; 
2002/0718/sys/src/9/bitsy/sdata.c:253,2632002/1112/sys/src/9/bitsy/sdata.c:253,258
2001/0908    
} Drive; 
 
 
char* 
getconf(char*) 
{ 
	return nil; 
} 
 
static void 
atadumpstate(Drive* drive, uchar* cmd, int lba, int count) 
2002/0718/sys/src/9/bitsy/sdata.c:2036,20422002/1112/sys/src/9/bitsy/sdata.c:2031,2037
2001/0908    
}; 
 
static SDev* 
2002/0718    
ataconfig(int on, char *, DevConf *cf) 
2002/1112    
ataprobew(DevConf *cf) 
2001/0908    
{ 
	int	cmdport; 
	int	ctlport; 
2002/0718/sys/src/9/bitsy/sdata.c:2044,20582002/1112/sys/src/9/bitsy/sdata.c:2039,2051
2001/0908    
	SDev*	rc; 
	struct Try *try; 
 
	if(on == 0) 
		return nil; 
	rc = nil; 
	for (try = &tries[0]; try->p != 0 || try->c != 0; try++){ 
		ataitype = cf->itype; 
2002/0718    
		atairq  = cf->irq; 
2001/0908    
		cmdport = cf->port + try->p; 
2002/1112    
		atairq  = cf->intnum; 
		cmdport = cf->ports[0].port + try->p; 
2001/0908    
		ctlport = cmdport + try->c; 
2002/0718    
		irq = cf->irq; 
2002/1112    
		irq = cf->intnum; 
2001/0908    
		rc = ataprobe(cmdport, ctlport, irq); 
		if (rc) 
			break; 
2002/0718/sys/src/9/bitsy/sdata.c:2060,20652002/1112/sys/src/9/bitsy/sdata.c:2053,2089
2001/0908    
	return rc; 
} 
 
2002/1112    
static void 
ataclear(SDev *sdev) 
{ 
	Ctlr* ctlr; 
 
	ctlr = sdev->ctlr; 
 
	if (ctlr->drive[0]) 
		free(ctlr->drive[0]); 
	if (ctlr->drive[1]) 
		free(ctlr->drive[1]); 
	if (sdev->name) 
		free(sdev->name); 
	if (sdev->unitflg) 
		free(sdev->unitflg); 
	if (sdev->unit) 
		free(sdev->unit); 
	free(ctlr); 
	free(sdev); 
} 
 
static char * 
atastat(SDev *sdev, char *p, char *e) 
{ 
	Ctlr *ctlr = sdev->ctlr; 
 
	return seprint(p, e, "%s ata port %X ctl %X irq %d\n",  
		    	       sdev->name, ctlr->cmdport, ctlr->ctlport, ctlr->irq); 
} 
 
 
2001/0908    
SDifc sdataifc = { 
	"ata",				/* name */ 
 
2002/0718/sys/src/9/bitsy/sdata.c:2075,20812002/1112/sys/src/9/bitsy/sdata.c:2099,2107
2001/0908    
	atarctl,			/* rctl */ 
	atawctl,			/* wctl */ 
 
	atabio,			/* bio */ 
	ataconfig,		/* config */ 
2002/1112    
	atabio,				/* bio */ 
	ataprobew,			/* probew */ 
	ataclear,			/* clear */ 
	atastat,			/* stat */ 
2001/0908    
}; 
 
2002/1112/sys/src/9/bitsy/sdata.c:1775,17812003/0407/sys/src/9/bitsy/sdata.c:1775,1781 (short | long)
2001/0908    
 
			while(waserror()) 
				; 
			tsleep(&r->unit->rendez, return0, 0, 500); 
2003/0407    
			tsleep(&up->sleep, return0, 0, 500); 
2001/0908    
			poperror(); 
			scsitest(r); 
			return 2; 


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