Lines Matching refs:unit
74 sdaddpart(SDunit* unit, char* name, uvlong start, uvlong end) in sdaddpart() argument
83 if(unit->part != nil){ in sdaddpart()
85 for(i = 0; i < unit->npart; i++){ in sdaddpart()
86 pp = &unit->part[i]; in sdaddpart()
100 if((unit->part = malloc(sizeof(SDpart)*SDnpart)) == nil) in sdaddpart()
102 unit->npart = SDnpart; in sdaddpart()
111 if(unit->npart >= NPart) in sdaddpart()
113 if((pp = malloc(sizeof(SDpart)*(unit->npart+SDnpart))) == nil) in sdaddpart()
115 memmove(pp, unit->part, sizeof(SDpart)*unit->npart); in sdaddpart()
116 free(unit->part); in sdaddpart()
117 unit->part = pp; in sdaddpart()
118 partno = unit->npart; in sdaddpart()
119 unit->npart += SDnpart; in sdaddpart()
125 if(start > end || end > unit->sectors) in sdaddpart()
127 pp = &unit->part[partno]; in sdaddpart()
137 sddelpart(SDunit* unit, char* name) in sddelpart() argument
146 pp = unit->part; in sddelpart()
147 for(i = 0; i < unit->npart; i++){ in sddelpart()
152 if(i >= unit->npart) in sddelpart()
161 sdincvers(SDunit *unit) in sdincvers() argument
165 unit->vers++; in sdincvers()
166 if(unit->part){ in sdincvers()
167 for(i = 0; i < unit->npart; i++){ in sdincvers()
168 unit->part[i].valid = 0; in sdincvers()
169 unit->part[i].vers++; in sdincvers()
175 sdinitpart(SDunit* unit) in sdinitpart() argument
181 if(unit->sectors > 0){ in sdinitpart()
182 unit->sectors = unit->secsize = 0; in sdinitpart()
183 sdincvers(unit); in sdinitpart()
187 if(unit->inquiry[0] & 0xC0) /* see SDinq0periphqual */ in sdinitpart()
189 switch(unit->inquiry[0] & SDinq0periphtype){ in sdinitpart()
199 if(unit->dev->ifc->online) in sdinitpart()
200 unit->dev->ifc->online(unit); in sdinitpart()
201 if(unit->sectors){ in sdinitpart()
202 sdincvers(unit); in sdinitpart()
203 sdaddpart(unit, "data", 0, unit->sectors); in sdinitpart()
213 snprint(buf, sizeof buf, "%spart", unit->name); in sdinitpart()
224 sdaddpart(unit, f[0], start, end); in sdinitpart()
263 SDunit *unit; in sdgetunit() local
278 unit = sdev->unit[subno]; in sdgetunit()
279 if(unit == nil){ in sdgetunit()
288 if((unit = malloc(sizeof(SDunit))) == nil){ in sdgetunit()
295 kstrdup(&unit->name, buf); in sdgetunit()
296 kstrdup(&unit->user, eve); in sdgetunit()
297 unit->perm = 0555; in sdgetunit()
298 unit->subno = subno; in sdgetunit()
299 unit->dev = sdev; in sdgetunit()
310 if(unit->dev->ifc->verify(unit) == 0){ in sdgetunit()
312 free(unit); in sdgetunit()
315 sdev->unit[subno] = unit; in sdgetunit()
318 return unit; in sdgetunit()
346 sdev->unit = (SDunit**)malloc(sdev->nunit * sizeof(SDunit*)); in sdadddevs()
348 if(sdev->unit == nil || sdev->unitflg == nil){ in sdadddevs()
351 free(sdev->unit); in sdadddevs()
398 (*addconf)(sdev->unit[u]); in sdaddallconfs()
408 SDunit *unit; in sd2gen() local
414 unit = sdev->unit[UNIT(c->qid)]; in sd2gen()
420 unit->vers, QTFILE); in sd2gen()
421 perm = &unit->ctlperm; in sd2gen()
432 unit->vers, QTFILE); in sd2gen()
433 perm = &unit->rawperm; in sd2gen()
443 pp = &unit->part[PART(c->qid)]; in sd2gen()
444 l = (pp->end - pp->start) * unit->secsize; in sd2gen()
446 unit->vers+pp->vers, QTFILE); in sd2gen()
479 SDunit *unit; in sdgen() local
519 if((unit = sdev->unit[s]) == nil) in sdgen()
520 if((unit = sdgetunit(sdev, s)) == nil){ in sdgen()
526 if(emptystr(unit->user)) in sdgen()
527 kstrdup(&unit->user, eve); in sdgen()
528 devdir(c, q, unit->name, 0, unit->user, unit->perm, dp); in sdgen()
546 unit = sdev->unit[UNIT(c->qid)]; in sdgen()
547 qlock(&unit->ctl); in sdgen()
556 if(unit->sectors == 0 in sdgen()
557 || (unit->dev->ifc->online && unit->dev->ifc->online(unit) > 1)) in sdgen()
558 sdinitpart(unit); in sdgen()
563 qunlock(&unit->ctl); in sdgen()
568 if(unit->part == nil || i >= unit->npart){ in sdgen()
569 qunlock(&unit->ctl); in sdgen()
573 pp = &unit->part[i]; in sdgen()
575 qunlock(&unit->ctl); in sdgen()
579 l = (pp->end - pp->start) * unit->secsize; in sdgen()
581 unit->vers+pp->vers, QTFILE); in sdgen()
585 qunlock(&unit->ctl); in sdgen()
595 unit = sdev->unit[UNIT(c->qid)]; in sdgen()
596 qlock(&unit->ctl); in sdgen()
598 qunlock(&unit->ctl); in sdgen()
661 SDunit *unit; in sdopen() local
673 unit = sdev->unit[UNIT(c->qid)]; in sdopen()
677 c->qid.vers = unit->vers; in sdopen()
680 c->qid.vers = unit->vers; in sdopen()
681 if(tas(&unit->rawinuse) != 0){ in sdopen()
686 unit->state = Rawcmd; in sdopen()
689 qlock(&unit->ctl); in sdopen()
691 qunlock(&unit->ctl); in sdopen()
696 pp = &unit->part[PART(c->qid)]; in sdopen()
697 c->qid.vers = unit->vers+pp->vers; in sdopen()
698 qunlock(&unit->ctl); in sdopen()
709 SDunit *unit; in sdclose() local
723 unit = sdev->unit[UNIT(c->qid)]; in sdclose()
724 unit->rawinuse = 0; in sdclose()
738 SDunit *unit; in sdbio() local
748 unit = sdev->unit[UNIT(c->qid)]; in sdbio()
749 if(unit == nil) in sdbio()
753 qlock(&unit->ctl); in sdbio()
756 if(strcmp(up->errstr, Eio) == 0 && unit->sectors == 0 && nchange++ == 0){ in sdbio()
757 sdinitpart(unit); in sdbio()
762 qunlock(&unit->ctl); in sdbio()
766 pp = &unit->part[PART(c->qid)]; in sdbio()
767 if(unit->vers+pp->vers != c->qid.vers) in sdbio()
781 bno = (off/unit->secsize) + pp->start; in sdbio()
782 nb = ((off+len+unit->secsize-1)/unit->secsize) + pp->start - bno; in sdbio()
783 max = SDmaxio/unit->secsize; in sdbio()
791 qunlock(&unit->ctl); in sdbio()
796 if(!(unit->inquiry[1] & SDinq1removable)){ in sdbio()
797 qunlock(&unit->ctl); in sdbio()
801 b = sdmalloc(nb*unit->secsize); in sdbio()
806 if(!(unit->inquiry[1] & SDinq1removable)) in sdbio()
811 offset = off%unit->secsize; in sdbio()
812 if(offset+len > nb*unit->secsize) in sdbio()
813 len = nb*unit->secsize - offset; in sdbio()
815 if(offset || (len%unit->secsize)){ in sdbio()
816 l = unit->dev->ifc->bio(unit, 0, 0, b, nb, bno); in sdbio()
819 if(l < (nb*unit->secsize)){ in sdbio()
820 nb = l/unit->secsize; in sdbio()
821 l = nb*unit->secsize - offset; in sdbio()
827 l = unit->dev->ifc->bio(unit, 0, 1, b, nb, bno); in sdbio()
836 l = unit->dev->ifc->bio(unit, 0, 0, b, nb, bno); in sdbio()
848 if(unit->inquiry[1] & SDinq1removable){ in sdbio()
849 qunlock(&unit->ctl); in sdbio()
881 if(r->unit->dev->ifc->rio(r) != SDok) in sdrio()
900 SDunit *unit; in sdsetsense() local
902 unit = r->unit; in sdsetsense()
903 unit->sense[2] = key; in sdsetsense()
904 unit->sense[12] = asc; in sdsetsense()
905 unit->sense[13] = ascq; in sdsetsense()
910 len = sizeof unit->sense; in sdsetsense()
913 memmove(r->sense, unit->sense, len); in sdsetsense()
914 unit->sense[2] = 0; in sdsetsense()
915 unit->sense[12] = 0; in sdsetsense()
916 unit->sense[13] = 0; in sdsetsense()
957 SDunit *unit; in sdfakescsi() local
961 unit = r->unit; in sdfakescsi()
998 if(cmd[4] < sizeof unit->sense) in sdfakescsi()
1001 len = sizeof unit->sense; in sdfakescsi()
1003 memmove(r->data, unit->sense, len); in sdfakescsi()
1009 if(cmd[4] < sizeof unit->inquiry) in sdfakescsi()
1012 len = sizeof unit->inquiry; in sdfakescsi()
1014 memmove(r->data, unit->inquiry, len); in sdfakescsi()
1034 len = unit->sectors - 1; in sdfakescsi()
1056 len = unit->sectors - 1; in sdfakescsi()
1090 SDunit *unit; in sdread() local
1125 unit = sdev->unit[UNIT(c->qid)]; in sdread()
1131 (char*)unit->inquiry+8); in sdread()
1132 qlock(&unit->ctl); in sdread()
1138 if(unit->dev->ifc->rctl) in sdread()
1139 l += unit->dev->ifc->rctl(unit, p+l, m-l); in sdread()
1140 if(unit->sectors == 0) in sdread()
1141 sdinitpart(unit); in sdread()
1142 if(unit->sectors){ in sdread()
1143 if(unit->dev->ifc->rctl == nil) in sdread()
1146 unit->sectors, unit->secsize); in sdread()
1147 pp = unit->part; in sdread()
1148 for(i = 0; i < unit->npart; i++){ in sdread()
1156 qunlock(&unit->ctl); in sdread()
1167 unit = sdev->unit[UNIT(c->qid)]; in sdread()
1168 qlock(&unit->raw); in sdread()
1170 qunlock(&unit->raw); in sdread()
1174 if(unit->state == Rawdata){ in sdread()
1175 unit->state = Rawstatus; in sdread()
1176 i = sdrio(unit->req, a, n); in sdread()
1178 else if(unit->state == Rawstatus){ in sdread()
1179 status = unit->req->status; in sdread()
1180 unit->state = Rawcmd; in sdread()
1181 free(unit->req); in sdread()
1182 unit->req = nil; in sdread()
1186 qunlock(&unit->raw); in sdread()
1207 SDunit *unit; in sdwrite() local
1279 unit = sdev->unit[UNIT(c->qid)]; in sdwrite()
1281 qlock(&unit->ctl); in sdwrite()
1283 qunlock(&unit->ctl); in sdwrite()
1288 if(unit->vers != c->qid.vers) in sdwrite()
1296 if(unit->sectors == 0 && !sdinitpart(unit)) in sdwrite()
1300 sdaddpart(unit, cb->f[1], start, end); in sdwrite()
1303 if(cb->nf != 2 || unit->part == nil) in sdwrite()
1305 sddelpart(unit, cb->f[1]); in sdwrite()
1307 else if(unit->dev->ifc->wctl) in sdwrite()
1308 unit->dev->ifc->wctl(unit, cb); in sdwrite()
1311 qunlock(&unit->ctl); in sdwrite()
1321 unit = sdev->unit[UNIT(c->qid)]; in sdwrite()
1322 qlock(&unit->raw); in sdwrite()
1324 qunlock(&unit->raw); in sdwrite()
1328 switch(unit->state){ in sdwrite()
1334 req->unit = unit; in sdwrite()
1340 unit->req = req; in sdwrite()
1341 unit->state = Rawdata; in sdwrite()
1345 unit->state = Rawcmd; in sdwrite()
1346 free(unit->req); in sdwrite()
1347 unit->req = nil; in sdwrite()
1351 unit->state = Rawstatus; in sdwrite()
1352 unit->req->write = 1; in sdwrite()
1353 n = sdrio(unit->req, a, n); in sdwrite()
1355 qunlock(&unit->raw); in sdwrite()
1372 SDunit *unit; in sdwstat() local
1381 unit = sdev->unit[UNIT(c->qid)]; in sdwstat()
1382 qlock(&unit->ctl); in sdwstat()
1386 qunlock(&unit->ctl); in sdwstat()
1395 perm = &unit->ctlperm; in sdwstat()
1398 perm = &unit->rawperm; in sdwstat()
1401 pp = &unit->part[PART(c->qid)]; in sdwstat()
1402 if(unit->vers+pp->vers != c->qid.vers) in sdwstat()
1421 qunlock(&unit->ctl); in sdwstat()
1463 SDunit *unit; in unconfigure() local
1485 if(unit = sdev->unit[i]){ in unconfigure()
1486 free(unit->name); in unconfigure()
1487 free(unit->user); in unconfigure()
1488 free(unit); in unconfigure()