Lines Matching refs:bp

171 cfi_disk_read(struct cfi_softc *sc, struct bio *bp)
179 bp->bio_error = cfi_block_finish(sc);
180 if (bp->bio_error) {
181 bp->bio_flags |= BIO_ERROR;
185 if (bp->bio_offset > sc->sc_size) {
186 bp->bio_flags |= BIO_ERROR;
187 bp->bio_error = EIO;
190 resid = bp->bio_bcount;
192 uint8_t *dp = (uint8_t *)bp->bio_data;
193 while (resid > 0 && bp->bio_offset < sc->sc_size) {
194 *dp++ = cfi_read_raw(sc, bp->bio_offset);
195 bp->bio_offset += 1, resid -= 1;
198 uint16_t *dp = (uint16_t *)bp->bio_data;
199 while (resid > 0 && bp->bio_offset < sc->sc_size) {
200 *dp++ = cfi_read_raw(sc, bp->bio_offset);
201 bp->bio_offset += 2, resid -= 2;
204 uint32_t *dp = (uint32_t *)bp->bio_data;
205 while (resid > 0 && bp->bio_offset < sc->sc_size) {
206 *dp++ = cfi_read_raw(sc, bp->bio_offset);
207 bp->bio_offset += 4, resid -= 4;
210 bp->bio_resid = resid;
212 biodone(bp);
216 cfi_disk_write(struct cfi_softc *sc, struct bio *bp)
224 if (bp->bio_offset > sc->sc_size) {
225 bp->bio_flags |= BIO_ERROR;
226 bp->bio_error = EIO;
229 resid = bp->bio_bcount;
237 if (bp->bio_offset < sc->sc_wrofs ||
238 bp->bio_offset >= top)
244 bp->bio_error = cfi_block_start(sc, bp->bio_offset);
245 if (bp->bio_error) {
246 bp->bio_flags |= BIO_ERROR;
252 bcopy(bp->bio_data,
253 sc->sc_wrbuf + bp->bio_offset - sc->sc_wrofs,
254 MIN(top - bp->bio_offset, resid));
255 resid -= MIN(top - bp->bio_offset, resid);
257 bp->bio_resid = resid;
259 biodone(bp);
267 struct bio *bp;
271 bp = bioq_takefirst(&sc->bioq);
273 if (bp == NULL)
276 switch (bp->bio_cmd) {
278 cfi_disk_read(cfi, bp);
281 cfi_disk_write(cfi, bp);
288 cfi_disk_getattr(struct bio *bp)
294 if (bp->bio_disk == NULL || bp->bio_disk->d_drv1 == NULL)
297 dsc = bp->bio_disk->d_drv1;
301 if (strcmp(bp->bio_attribute, "CFI::device") == 0) {
302 if (bp->bio_length != sizeof(dev))
304 bcopy(&dev, bp->bio_data, sizeof(dev));
312 cfi_disk_strategy(struct bio *bp)
314 struct cfi_disk_softc *sc = bp->bio_disk->d_drv1;
318 if (bp->bio_bcount == 0) {
319 bp->bio_resid = bp->bio_bcount;
320 biodone(bp);
323 switch (bp->bio_cmd) {
328 bioq_insert_tail(&sc->bioq, bp);
335 bp->bio_flags |= BIO_ERROR;
336 bp->bio_error = EINVAL;
337 biodone(bp);