Lines Matching full:part

118 	struct mmcsd_part *part[MMC_PART_MAX];
182 static daddr_t mmcsd_delete(struct mmcsd_part *part, struct bio *bp);
185 static int mmcsd_ioctl(struct mmcsd_part *part, u_long cmd, void *data,
187 static int mmcsd_ioctl_cmd(struct mmcsd_part *part, struct mmc_ioc_cmd *mic,
190 static daddr_t mmcsd_rw(struct mmcsd_part *part, struct bio *bp);
195 u_int part);
485 struct mmcsd_part *part;
496 part = sc->part[type] = malloc(sizeof(*part), M_DEVBUF,
498 part->sc = sc;
499 part->cnt = cnt;
500 part->type = type;
501 part->ro = ro;
502 snprintf(part->name, sizeof(part->name), name, device_get_unit(dev));
504 MMCSD_IOCTL_LOCK_INIT(part);
521 args.mda_si_drv1 = part;
522 if (make_dev_s(&args, &sc->rpmb_dev, "%s", part->name) != 0) {
524 free(part, M_DEVBUF);
528 MMCSD_DISK_LOCK_INIT(part);
530 d = part->disk = disk_alloc();
536 d->d_name = part->name;
537 d->d_drv1 = part;
554 bioq_init(&part->bio_queue);
556 part->running = 1;
557 kproc_create(&mmcsd_task, part, &part->p, 0, 0,
558 "%s%d: mmc/sd card", part->name, cnt);
565 part->name, cnt, bytes, unit, mmc_get_card_id_string(dev),
570 printf("%s: %ju%sB partition %d%s at %s\n", part->name, bytes,
607 part->name, cnt, bytes, unit, type, enh ?
612 "(%s)%s at %s\n", part->name, cnt, bytes, unit,
624 struct mmcsd_part *part;
634 part = sc->part[EXT_CSD_PART_CONFIG_ACC_DEFAULT];
635 snprintf(name, sizeof(name), "%s%d", part->disk->d_name,
636 part->disk->d_unit);
651 struct mmcsd_part *part;
655 part = sc->part[i];
656 if (part != NULL) {
657 if (part->disk != NULL) {
658 MMCSD_DISK_LOCK(part);
659 part->suspend = 0;
660 if (part->running > 0) {
662 part->running = 0;
663 wakeup(part);
665 while (part->running != -1)
666 msleep(part, &part->disk_mtx, 0,
669 MMCSD_DISK_UNLOCK(part);
671 MMCSD_IOCTL_LOCK(part);
672 while (part->ioctl > 0)
673 msleep(part, &part->ioctl_mtx, 0,
675 part->ioctl = -1;
676 MMCSD_IOCTL_UNLOCK(part);
684 part = sc->part[i];
685 if (part != NULL) {
686 if (part->disk != NULL) {
688 bioq_flush(&part->bio_queue, NULL, ENXIO);
690 disk_destroy(part->disk);
692 MMCSD_DISK_LOCK_DESTROY(part);
694 MMCSD_IOCTL_LOCK_DESTROY(part);
695 free(part, M_DEVBUF);
717 struct mmcsd_part *part;
721 part = sc->part[i];
722 if (part != NULL) {
723 if (part->disk != NULL) {
724 MMCSD_DISK_LOCK(part);
725 part->suspend = 1;
726 if (part->running > 0) {
728 part->running = 0;
729 wakeup(part);
731 while (part->running != -1)
732 msleep(part, &part->disk_mtx, 0,
735 MMCSD_DISK_UNLOCK(part);
737 MMCSD_IOCTL_LOCK(part);
738 while (part->ioctl > 0)
739 msleep(part, &part->ioctl_mtx, 0,
741 part->ioctl = -1;
742 MMCSD_IOCTL_UNLOCK(part);
754 struct mmcsd_part *part;
758 part = sc->part[i];
759 if (part != NULL) {
760 if (part->disk != NULL) {
761 MMCSD_DISK_LOCK(part);
762 part->suspend = 0;
763 if (part->running <= 0) {
764 part->running = 1;
765 MMCSD_DISK_UNLOCK(part);
766 kproc_create(&mmcsd_task, part,
767 &part->p, 0, 0, "%s%d: mmc/sd card",
768 part->name, part->cnt);
770 MMCSD_DISK_UNLOCK(part);
772 MMCSD_IOCTL_LOCK(part);
773 part->ioctl = 0;
774 MMCSD_IOCTL_UNLOCK(part);
796 struct mmcsd_part *part;
798 part = bp->bio_disk->d_drv1;
799 MMCSD_DISK_LOCK(part);
800 if (part->running > 0 || part->suspend > 0) {
801 bioq_disksort(&part->bio_queue, bp);
802 MMCSD_DISK_UNLOCK(part);
803 wakeup(part);
805 MMCSD_DISK_UNLOCK(part);
827 mmcsd_ioctl(struct mmcsd_part *part, u_long cmd, void *data, int fflag,
846 err = mmcsd_ioctl_cmd(part, mic, fflag);
860 err = mmcsd_ioctl_cmd(part, &mic[i], fflag);
874 mmcsd_ioctl_cmd(struct mmcsd_part *part, struct mmc_ioc_cmd *mic, int fflag)
889 if (part->ro == TRUE && mic->write_flag != 0)
899 MMCSD_IOCTL_LOCK(part);
900 while (part->ioctl != 0) {
901 if (part->ioctl < 0) {
902 MMCSD_IOCTL_UNLOCK(part);
905 msleep(part, &part->ioctl_mtx, 0, "mmcsd IOCTL", 0);
907 part->ioctl = 1;
908 MMCSD_IOCTL_UNLOCK(part);
935 sc = part->sc;
966 EXT_CSD_PART_CONFIG_ACC_MASK) != part->type) {
974 err = mmcsd_switch_part(mmcbus, dev, rca, part->type);
977 if (part->type == EXT_CSD_PART_CONFIG_ACC_RPMB) {
989 if (part->type == EXT_CSD_PART_CONFIG_ACC_RPMB) {
1016 if (part->type == EXT_CSD_PART_CONFIG_ACC_RPMB) {
1060 MMCSD_IOCTL_LOCK(part);
1061 part->ioctl = 0;
1062 MMCSD_IOCTL_UNLOCK(part);
1063 wakeup(part);
1072 struct mmcsd_part *part;
1078 part = bp->bio_disk->d_drv1;
1079 dev = part->sc->dev;
1107 mmcsd_switch_part(device_t bus, device_t dev, uint16_t rca, u_int part)
1128 if (part == EXT_CSD_PART_CONFIG_ACC_RPMB)
1131 if (sc->part_curr == part)
1135 ~EXT_CSD_PART_CONFIG_ACC_MASK) | part;
1140 if (part == EXT_CSD_PART_CONFIG_ACC_RPMB)
1148 sc->part_curr = part;
1162 mmcsd_rw(struct mmcsd_part *part, struct bio *bp)
1174 sc = part->sc;
1179 sz = part->disk->d_sectorsize;
1237 mmcsd_delete(struct mmcsd_part *part, struct bio *bp)
1248 sc = part->sc;
1253 sz = part->disk->d_sectorsize;
1261 if (block > part->eblock && block <= part->eend)
1262 block = part->eblock;
1263 if (end >= part->eblock && end < part->eend)
1264 end = part->eend;
1276 part->eblock = block;
1277 part->eend = end;
1357 if (bp->bio_pblkno >= part->eblock || block == start) {
1358 part->eblock = stop; /* Predict next forward. */
1359 part->eend = end;
1361 part->eblock = block; /* Predict next backward. */
1362 part->eend = start;
1378 struct mmcsd_part *part;
1383 part = disk->d_drv1;
1384 sc = part->sc;
1405 err = mmcsd_switch_part(mmcbus, dev, sc->rca, part->type);
1412 block = mmcsd_rw(part, &bp);
1421 struct mmcsd_part *part;
1427 part = arg;
1428 sc = part->sc;
1434 MMCSD_DISK_LOCK(part);
1436 if (part->running == 0)
1438 bp = bioq_takefirst(&part->bio_queue);
1440 msleep(part, &part->disk_mtx, PRIBIO,
1443 MMCSD_DISK_UNLOCK(part);
1452 if (bp->bio_cmd != BIO_READ && part->ro) {
1460 sz = part->disk->d_sectorsize;
1463 err = mmcsd_switch_part(mmcbus, dev, sc->rca, part->type);
1472 if (block < part->eend && end > part->eblock)
1473 part->eblock = part->eend = 0;
1474 block = mmcsd_rw(part, bp);
1476 block = mmcsd_delete(part, bp);
1491 part->running = -1;
1492 MMCSD_DISK_UNLOCK(part);
1493 wakeup(part);