| plan 9 kernel history: overview | file list | diff list |
1995/1208/pc/devata.c (diff list | history)
| 1995/1206/sys/src/9/pc/devata.c:76,82 – 1995/1208/sys/src/9/pc/devata.c:76,82 (short | long | prev | next) | ||
| 1995/1206 | Npart= 20+2, /* 8 sub partitions, disk, and partition */ | |
| 1995/0213 | Nrepl= 64, /* maximum replacement blocks */ | |
| 1995/0818 | ||
| 1995/1206 |
| |
| 1995/1208 | Hardtimeout= 6000, /* disk access timeout (ms) */ | |
| 1995/1206 | NCtlr= 4, NDrive= NCtlr*2, | |
| 1995/1206/sys/src/9/pc/devata.c:339,346 – 1995/1208/sys/src/9/pc/devata.c:339,348 | ||
| 1995/1206 | if(driveno & 0x01) drive->dh |= DHslave; drive->vers = 1; | |
| 1995/1208 | if(atapi){ sprint(drive->vol, "atapi%d", drive->driveno); | |
| 1995/1206 | drive->atapi = 1; | |
| 1995/1208 | } | |
| 1995/1206 | atadrive[driveno] = drive; } | |
| 1995/1206/sys/src/9/pc/devata.c:384,390 – 1995/1208/sys/src/9/pc/devata.c:386,392 | ||
| 1995/1206 | * will be left on the interrupt call chain even if there are no * drives found. * At least one controller/ATAPI-drive combination doesn't respond | |
| 1995/1208 | * to the Cedd (Micronics M54Li + Sanyo CRD-254P) so let's check for the | |
| 1995/1206 | * ATAPI signature straight off. If we find it there will be no probe * done for a slave. Tough. */ | |
| 1995/1206/sys/src/9/pc/devata.c:401,406 – 1995/1208/sys/src/9/pc/devata.c:403,410 | ||
| 1995/1206 | goto skipedd; } if(atactlrwait(ctlr, DHmagic, 0, MS2TK(1)) || waserror()){ | |
| 1995/1208 | DPRINT("ata%d: Cedd status %ux/%ux/%ux\n", ctlrno, inb(port+Pstatus), inb(port+Pcylmsb), inb(port+Pcyllsb)); | |
| 1995/1206 | xfree(ctlr); return -1; } | |
| 1995/1206/sys/src/9/pc/devata.c:1069,1086 – 1995/1208/sys/src/9/pc/devata.c:1073,1079 | ||
| 1995/0213 | nexterror(); } | |
| 1995/1206 |
| |
| 1995/0213 | ||
| 1995/1208 | cmd = Cident; | |
| 1995/1206 | retryatapi: ILOCK(&cp->reglock); | |
| 1995/0213 | cp->nsecs = 1; | |
| 1995/1206/sys/src/9/pc/devata.c:1092,1103 – 1995/1208/sys/src/9/pc/devata.c:1085,1096 | ||
| 1995/1206 | outb(cp->pbase+Pcmd, cmd); IUNLOCK(&cp->reglock); | |
| 1995/0213 | ||
| 1995/1208 | DPRINT("%s: ident command %ux sent\n", dp->vol, cmd); | |
| 1995/0818 | atasleep(cp); | |
| 1995/0213 | if(cp->status & Serr){ | |
| 1995/1206 | DPRINT("%s: bad disk ident status\n", dp->vol); | |
| 1995/1208 | if(cp->error & Eabort){ | |
| 1995/1206 | if(isatapi(dp)){ cmd = Cidentd; goto retryatapi; | |
| 1995/1206/sys/src/9/pc/devata.c:1134,1140 – 1995/1208/sys/src/9/pc/devata.c:1127,1133 | ||
| 1995/1206 | dp->cyl = ip->cyls; dp->heads = ip->heads; dp->sectors = ip->s2t; | |
| 1995/1208 | XPRINT("%s: %s %d/%d/%d CHS %d bytes\n", | |
| 1995/1206 | dp->vol, id, dp->cyl, dp->heads, dp->sectors, dp->cap); if(ip->cvalid&(1<<0)){ | |
| 1995/1206/sys/src/9/pc/devata.c:1142,1148 – 1995/1208/sys/src/9/pc/devata.c:1135,1141 | ||
| 1995/1206 | dp->cyl = ip->ccyls; dp->heads = ip->cheads; dp->sectors = ip->cs2t; | |
| 1995/1208 | XPRINT("%s: changed to %d cyl %d head %d sec\n", | |
| 1995/1206 | dp->vol, dp->cyl, dp->heads, dp->sectors); } | |
| 1995/1206/sys/src/9/pc/devata.c:1151,1157 – 1995/1208/sys/src/9/pc/devata.c:1144,1150 | ||
| 1995/0213 | dp->lba = 1; | |
| 1995/1206 | dp->lbasecs = lbasecs; dp->cap = dp->bytes * dp->lbasecs; | |
| 1995/1208 | XPRINT("%s: LBA: %s %d sectors %d bytes\n", | |
| 1995/1206 | dp->vol, id, dp->lbasecs, dp->cap); | |
| 1995/0213 | } else { dp->lba = 0; | |
| 1995/1206/sys/src/9/pc/devata.c:1534,1548 – 1995/1208/sys/src/9/pc/devata.c:1527,1544 | ||
| 1995/1206 | print("%s: intr %d %d\n", dp->vol, cp->sofar, cp->nsecs); | |
| 1995/0213 | if(cp->sofar >= cp->nsecs){ cp->lastcmd = cp->cmd; | |
| 1995/1208 | #ifdef notdef | |
| 1995/1206 | if(cp->cmd == Cidentd) | |
| 1995/0213 | cp->cmd = Cident2; | |
| 1995/1206 | else if(cp->cmd == Cident && (cp->status & Sready) == 0) cp->cmd = Cident2; | |
| 1995/1208 | #else if(cp->cmd != Cread && (cp->status & (Sbusy|Sready)) != Sready) cp->cmd = Cident2; #endif /* notdef */ | |
| 1995/1206 | else cp->cmd = 0; inb(cp->pbase+Pstatus); | |
| 1995/0213 | wakeup(&cp->r); } break; | |
| 1995/1206/sys/src/9/pc/devata.c:1614,1622 – 1995/1208/sys/src/9/pc/devata.c:1610,1619 | ||
| 1995/1206 | cp = dp->cp; outb(cp->pbase+Pdh, dp->dh); DPRINT("%s: isatapi %d\n", dp->vol, dp->atapi); | |
| 1995/1208 | outb(cp->pbase+Pcmd, 0x08); if(atactlrwait(dp->cp, DHmagic, 0, MS2TK(100))){ DPRINT("%s: isatapi ctlrwait status %ux\n", dp->vol, inb(cp->pbase+Pstatus)); return 0; | |
| 1995/1206 | } dp->atapi = 0; dp->bytes = 512; | |
| 1995/1206/sys/src/9/pc/devata.c:1688,1694 – 1995/1208/sys/src/9/pc/devata.c:1685,1691 | ||
| 1995/1206 | nexterror(); if(cp->status & Serr){ | |
| 1995/1208 | DPRINT("%s: Bad packet command %ux, error %ux\n", dp->vol, cp->cmdblk[0], cp->error); | |
| 1995/1206 | error(Eio); } } | |
| 1995/1206/sys/src/9/pc/devata.c:1705,1711 – 1995/1208/sys/src/9/pc/devata.c:1702,1708 | ||
| 1995/1206 | buf = smalloc(Maxxfer); qlock(cp->ctlrlock); | |
| 1995/1208 | retrycount = 2; | |
| 1995/1206 | retry: if(waserror()){ dp->partok = 0; | |
| 1995/1206/sys/src/9/pc/devata.c:1804,1810 – 1995/1208/sys/src/9/pc/devata.c:1801,1807 | ||
| 1995/1206 | buf = smalloc(Maxxfer); qlock(cp->ctlrlock); | |
| 1995/1208 | retrycount = 2; | |
| 1995/1206 | retry: if(waserror()){ if((cp->status & Serr) && (cp->error & 0xF0) == 0x60){ | |
| 1995/1206/sys/src/9/pc/devata.c:1817,1823 – 1995/1208/sys/src/9/pc/devata.c:1814,1820 | ||
| 1995/1206 | cp->dp = 0; free(buf); if((cp->status & Serr) && (cp->error & 0xF0) == 0x20) | |
| 1995/1208 | err = cp->error & 0xF0; | |
| 1995/1206 | else err = 0; qunlock(cp->ctlrlock); | |