Lines Matching refs:cs

231 ccdinit(struct gctl_req *req, struct ccd_s *cs)  in ccdinit()  argument
241 cs->sc_size = 0; in ccdinit()
246 if (cs->sc_flags & CCDF_LINUX) { in ccdinit()
247 cs->sc_offset = 0; in ccdinit()
248 cs->sc_ileave *= 2; in ccdinit()
249 if (cs->sc_flags & CCDF_MIRROR && cs->sc_ndisks != 2) in ccdinit()
253 if (cs->sc_flags & CCDF_NO_OFFSET) in ccdinit()
254 cs->sc_offset = 0; in ccdinit()
256 cs->sc_offset = CCD_OFFSET; in ccdinit()
258 for (ix = 0; ix < cs->sc_ndisks; ix++) { in ccdinit()
259 ci = &cs->sc_cinfo[ix]; in ccdinit()
265 size = mediasize / DEV_BSIZE - cs->sc_offset; in ccdinit()
269 if (cs->sc_ileave > 1) in ccdinit()
270 size -= size % cs->sc_ileave; in ccdinit()
281 cs->sc_size += size; in ccdinit()
288 if ((cs->sc_ileave > 0) && in ccdinit()
289 (cs->sc_ileave < (maxsecsize / DEV_BSIZE))) { in ccdinit()
303 if (cs->sc_flags & CCDF_UNIFORM) { in ccdinit()
304 for (ix = 0; ix < cs->sc_ndisks; ix++) { in ccdinit()
305 ci = &cs->sc_cinfo[ix]; in ccdinit()
308 cs->sc_size = cs->sc_ndisks * minsize; in ccdinit()
311 if (cs->sc_flags & CCDF_MIRROR) { in ccdinit()
318 if (cs->sc_ndisks % 2) { in ccdinit()
323 if (cs->sc_ileave == 0) { in ccdinit()
328 cs->sc_size = (cs->sc_ndisks/2) * minsize; in ccdinit()
334 ccdinterleave(cs); in ccdinit()
340 cs->sc_secsize = maxsecsize; in ccdinit()
346 ccdinterleave(struct ccd_s *cs) in ccdinterleave() argument
361 size = (cs->sc_ndisks + 1) * sizeof(struct ccdiinfo); in ccdinterleave()
362 cs->sc_itable = g_malloc(size, M_WAITOK | M_ZERO); in ccdinterleave()
370 if (cs->sc_ileave == 0) { in ccdinterleave()
372 ii = cs->sc_itable; in ccdinterleave()
374 for (ix = 0; ix < cs->sc_ndisks; ix++) { in ccdinterleave()
381 bn += cs->sc_cinfo[ix].ci_size; in ccdinterleave()
393 for (ii = cs->sc_itable; ; ii++) { in ccdinterleave()
398 ii->ii_index = g_malloc((sizeof(int) * cs->sc_ndisks), in ccdinterleave()
405 for (ci = cs->sc_cinfo; ci < &cs->sc_cinfo[cs->sc_ndisks]; in ccdinterleave()
427 ii->ii_startblk = bn / cs->sc_ileave; in ccdinterleave()
441 for (ci = cs->sc_cinfo; in ccdinterleave()
442 ci < &cs->sc_cinfo[cs->sc_ndisks]; ci++) { in ccdinterleave()
444 ii->ii_index[ix++] = ci - cs->sc_cinfo; in ccdinterleave()
449 lbn = smallci->ci_size / cs->sc_ileave; in ccdinterleave()
462 struct ccd_s *cs; in g_ccd_start() local
464 cs = bp->bio_to->geom->softc; in g_ccd_start()
479 bn = bp->bio_offset / cs->sc_secsize; in g_ccd_start()
486 err = ccdbuffer(cbp, cs, bp, bn, addr, bcount); in g_ccd_start()
497 if (cs->sc_flags & CCDF_MIRROR) { in g_ccd_start()
511 int pick = cs->sc_pick; in g_ccd_start()
512 daddr_t range = cs->sc_size / 16; in g_ccd_start()
514 if (bn < cs->sc_blk[pick] - range || in g_ccd_start()
515 bn > cs->sc_blk[pick] + range in g_ccd_start()
517 cs->sc_pick = pick = 1 - pick; in g_ccd_start()
519 cs->sc_blk[pick] = bn + btodb(rcount); in g_ccd_start()
537 ccdbuffer(struct bio **cb, struct ccd_s *cs, struct bio *bp, daddr_t bn, caddr_t addr, long bcount) in ccdbuffer() argument
550 if (cs->sc_ileave == 0) { in ccdbuffer()
558 for (ci = cs->sc_cinfo; cbn >= sblk + ci->ci_size; ci++) in ccdbuffer()
570 cboff = cbn % cs->sc_ileave; /* DEV_BSIZE gran */ in ccdbuffer()
571 cbn = cbn / cs->sc_ileave; /* DEV_BSIZE * ileave gran */ in ccdbuffer()
576 for (ii = cs->sc_itable; ii->ii_ndisk; ii++) { in ccdbuffer()
606 if (cs->sc_flags & CCDF_MIRROR) { in ccdbuffer()
622 ci2 = &cs->sc_cinfo[ccdisk + ndisk2]; in ccdbuffer()
629 ci = &cs->sc_cinfo[ccdisk]; in ccdbuffer()
636 cbn *= cs->sc_ileave; in ccdbuffer()
646 cbp->bio_offset = dbtob(cbn + cboff + cs->sc_offset); in ccdbuffer()
648 if (cs->sc_ileave == 0) in ccdbuffer()
651 cbc = dbtob((off_t)(cs->sc_ileave - cboff)); in ccdbuffer()
657 if (cs->sc_flags & CCDF_MIRROR) { in ccdbuffer()
871 struct ccd_s *cs; in g_ccd_list() local
883 cs = gp->softc; in g_ccd_list()
884 if (cs == NULL || (unit >= 0 && unit != cs->sc_unit)) in g_ccd_list()
887 cs->sc_unit, cs->sc_ileave, cs->sc_flags & CCDF_USERMASK); in g_ccd_list()
889 for (i = 0; i < cs->sc_ndisks; ++i) { in g_ccd_list()
891 cs->sc_cinfo[i].ci_provider->name); in g_ccd_list()