| 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,320 – 2002/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); | |
| 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,374 – 2002/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; } | |
| 2002/0606 | microdelay(4); | |
| 2001/0908 | } atadebug(cmdport, ctlport, "ataready: timeout"); | |
| 2002/0217/sys/src/9/bitsy/sdata.c:431,437 – 2002/0606/sys/src/9/bitsy/sdata.c:431,437 | ||
| 2001/0908 | return 0; outb(cmdport+Count, rwm); outb(cmdport+Command, Csm); | |
| 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,488 – 2002/0606/sys/src/9/bitsy/sdata.c:482,488 | ||
| 2001/0908 | if(as < 0) return as; outb(cmdport+Command, command); | |
| 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,610 – 2002/0606/sys/src/9/bitsy/sdata.c:600,610 | ||
| 2001/0908 | * Also, there will be problems here if overlapped commands * are ever supported. */ | |
| 2002/0606 | microdelay(20); | |
| 2001/0908 | outb(ctlport+Dc, Srst); | |
| 2002/0606 | microdelay(20); | |
| 2001/0908 | outb(ctlport+Dc, 0); | |
| 2002/0606 | microdelay(4*1000); | |
| 2001/0908 | } static SDev* | |
| 2002/0217/sys/src/9/bitsy/sdata.c:631,637 – 2002/0606/sys/src/9/bitsy/sdata.c:631,637 | ||
| 2001/0908 | dev = Dev0; if(inb(ctlport+As) & Bsy){ outb(cmdport+Dh, dev); | |
| 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,738 – 2002/0606/sys/src/9/bitsy/sdata.c:732,738 | ||
| 2001/0908 | } else{ outb(cmdport+Dh, Dev0); | |
| 2002/0606 | microdelay(1); | |
| 2001/0908 | } } #endif | |
| 2002/0217/sys/src/9/bitsy/sdata.c:846,858 – 2002/0606/sys/src/9/bitsy/sdata.c:846,858 | ||
| 2001/0908 | ctlr->command = Cnop; /* debugging */ outb(cmdport+Command, Cnop); | |
| 2002/0606 | microdelay(1); | |
| 2001/0908 | ctlport = ctlr->ctlport; for(timeo = 0; timeo < 1000; timeo++){ as = inb(ctlport+As); if(!(as & Bsy)) break; | |
| 2002/0606 | microdelay(1); | |
| 2001/0908 | } drive->error |= Abrt; } | |
| 2002/0217/sys/src/9/bitsy/sdata.c:1078,1084 – 2002/0606/sys/src/9/bitsy/sdata.c:1078,1084 | ||
| 2001/0908 | outb(cmdport+Command, Cpkt); if((drive->info[Iconfig] & 0x0060) != 0x0020){ | |
| 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,1186 – 2002/0606/sys/src/9/bitsy/sdata.c:1180,1186 | ||
| 2001/0908 | switch(drive->command){ case Cws: case Cwsm: | |
| 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,2063 – 2002/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; | |
| 2002/0615 | atairq = cf->intnum; | |
| 2001/0908 | cmdport = cf->port + try->p; ctlport = cmdport + try->c; | |
| 2002/0615 | irq = cf->intnum; | |
| 2001/0908 | rc = ataprobe(cmdport, ctlport, irq); if (rc) break; | |
| 2002/0615/sys/src/9/bitsy/sdata.c:7,13 – 2002/0718/sys/src/9/bitsy/sdata.c:7,13 (short | long) | ||
| 2001/0908 | #include "ureg.h" #include "../port/error.h" | |
| 2002/0718 | #include "sd.h" | |
| 2001/0908 | extern SDifc sdataifc; | |
| 2002/0615/sys/src/9/bitsy/sdata.c:353,369 – 2002/0718/sys/src/9/bitsy/sdata.c:353,368 | ||
| 2001/0908 | * can be used as a test for !Bsy. */ as = inb(ctlport+As); | |
| 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 | } | |
| 2002/0615/sys/src/9/bitsy/sdata.c:1581,1598 – 2002/0718/sys/src/9/bitsy/sdata.c:1580,1594 | ||
| 2001/0908 | ataid(SDev* sdev) { int i; | |
| 2002/0718 | snprint(sdev->name, KNAMELEN, "sd%c", sdev->idno); | |
| 2001/0908 | } sdev = sdev->next; } | |
| 2002/0615/sys/src/9/bitsy/sdata.c:1606,1612 – 2002/0718/sys/src/9/bitsy/sdata.c:1602,1608 | ||
| 2001/0908 | ataenable(SDev* sdev) { Ctlr *ctlr; | |
| 2002/0718 | char name[KNAMELEN]; | |
| 2001/0908 | ctlr = sdev->ctlr; | |
| 2002/0615/sys/src/9/bitsy/sdata.c:1613,1619 – 2002/0718/sys/src/9/bitsy/sdata.c:1609,1615 | ||
| 2001/0908 | if(ctlr->bmiba){ ctlr->prdt = xspanalloc(Nprd*sizeof(Prd), 4, 4*1024); } | |
| 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,2048 – 2002/0718/sys/src/9/bitsy/sdata.c:2036,2043 | ||
| 2001/0908 | }; static SDev* | |
| 2002/0718 | ataconfig(int on, char *, DevConf *cf) | |
| 2001/0908 | { | |
| 2002/0615/sys/src/9/bitsy/sdata.c:2054,2063 – 2002/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 |
| |
| 2002/0718 | atairq = cf->irq; | |
| 2001/0908 | cmdport = cf->port + try->p; ctlport = cmdport + try->c; | |
| 2002/0615 |
| |
| 2002/0718 | irq = cf->irq; | |
| 2001/0908 | rc = ataprobe(cmdport, ctlport, irq); if (rc) break; | |
| 2002/0718/sys/src/9/bitsy/sdata.c:7,13 – 2002/1112/sys/src/9/bitsy/sdata.c:7,13 (short | long) | ||
| 2001/0908 | #include "ureg.h" #include "../port/error.h" | |
| 2002/0718 |
| |
| 2002/1112 | #include "../port/sd.h" | |
| 2001/0908 | extern SDifc sdataifc; | |
| 2002/0718/sys/src/9/bitsy/sdata.c:253,263 – 2002/1112/sys/src/9/bitsy/sdata.c:253,258 | ||
| 2001/0908 | } Drive; | |
| 2002/0718/sys/src/9/bitsy/sdata.c:2036,2042 – 2002/1112/sys/src/9/bitsy/sdata.c:2031,2037 | ||
| 2001/0908 | }; static SDev* | |
| 2002/0718 |
| |
| 2002/1112 | ataprobew(DevConf *cf) | |
| 2001/0908 | { int cmdport; int ctlport; | |
| 2002/0718/sys/src/9/bitsy/sdata.c:2044,2058 – 2002/1112/sys/src/9/bitsy/sdata.c:2039,2051 | ||
| 2001/0908 | SDev* rc; struct Try *try; | |
| 2002/0718 |
| |
| 2001/0908 |
| |
| 2002/1112 | atairq = cf->intnum; cmdport = cf->ports[0].port + try->p; | |
| 2001/0908 | ctlport = cmdport + try->c; | |
| 2002/0718 |
| |
| 2002/1112 | irq = cf->intnum; | |
| 2001/0908 | rc = ataprobe(cmdport, ctlport, irq); if (rc) break; | |
| 2002/0718/sys/src/9/bitsy/sdata.c:2060,2065 – 2002/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,2081 – 2002/1112/sys/src/9/bitsy/sdata.c:2099,2107 | ||
| 2001/0908 | atarctl, /* rctl */ atawctl, /* wctl */ | |
| 2002/1112 | atabio, /* bio */ ataprobew, /* probew */ ataclear, /* clear */ atastat, /* stat */ | |
| 2001/0908 | }; | |
| 2002/1112/sys/src/9/bitsy/sdata.c:1775,1781 – 2003/0407/sys/src/9/bitsy/sdata.c:1775,1781 (short | long) | ||
| 2001/0908 | while(waserror()) ; | |
| 2003/0407 | tsleep(&up->sleep, return0, 0, 500); | |
| 2001/0908 | poperror(); scsitest(r); return 2; | |