Lines Matching refs:part

119 	struct mmcsd_part *part[MMC_PART_MAX];  member
183 static daddr_t mmcsd_delete(struct mmcsd_part *part, struct bio *bp);
186 static int mmcsd_ioctl(struct mmcsd_part *part, u_long cmd, void *data,
188 static int mmcsd_ioctl_cmd(struct mmcsd_part *part, struct mmc_ioc_cmd *mic,
191 static daddr_t mmcsd_rw(struct mmcsd_part *part, struct bio *bp);
196 u_int part);
486 struct mmcsd_part *part; in mmcsd_add_part() local
497 part = sc->part[type] = malloc(sizeof(*part), M_DEVBUF, in mmcsd_add_part()
499 part->sc = sc; in mmcsd_add_part()
500 part->cnt = cnt; in mmcsd_add_part()
501 part->type = type; in mmcsd_add_part()
502 part->ro = ro; in mmcsd_add_part()
503 snprintf(part->name, sizeof(part->name), name, device_get_unit(dev)); in mmcsd_add_part()
505 MMCSD_IOCTL_LOCK_INIT(part); in mmcsd_add_part()
522 args.mda_si_drv1 = part; in mmcsd_add_part()
523 if (make_dev_s(&args, &sc->rpmb_dev, "%s", part->name) != 0) { in mmcsd_add_part()
525 free(part, M_DEVBUF); in mmcsd_add_part()
529 MMCSD_DISK_LOCK_INIT(part); in mmcsd_add_part()
531 d = part->disk = disk_alloc(); in mmcsd_add_part()
537 d->d_name = part->name; in mmcsd_add_part()
538 d->d_drv1 = part; in mmcsd_add_part()
555 bioq_init(&part->bio_queue); in mmcsd_add_part()
557 part->running = 1; in mmcsd_add_part()
558 kproc_create(&mmcsd_task, part, &part->p, 0, 0, in mmcsd_add_part()
559 "%s%d: mmc/sd card", part->name, cnt); in mmcsd_add_part()
566 part->name, cnt, bytes, unit, mmc_get_card_id_string(dev), in mmcsd_add_part()
571 printf("%s: %ju%sB partition %d%s at %s\n", part->name, bytes, in mmcsd_add_part()
608 part->name, cnt, bytes, unit, type, enh ? in mmcsd_add_part()
613 "(%s)%s at %s\n", part->name, cnt, bytes, unit, in mmcsd_add_part()
625 struct mmcsd_part *part; in mmcsd_slicer() local
635 part = sc->part[EXT_CSD_PART_CONFIG_ACC_DEFAULT]; in mmcsd_slicer()
636 snprintf(name, sizeof(name), "%s%d", part->disk->d_name, in mmcsd_slicer()
637 part->disk->d_unit); in mmcsd_slicer()
652 struct mmcsd_part *part; in mmcsd_detach() local
656 part = sc->part[i]; in mmcsd_detach()
657 if (part != NULL) { in mmcsd_detach()
658 if (part->disk != NULL) { in mmcsd_detach()
659 MMCSD_DISK_LOCK(part); in mmcsd_detach()
660 part->suspend = 0; in mmcsd_detach()
661 if (part->running > 0) { in mmcsd_detach()
663 part->running = 0; in mmcsd_detach()
664 wakeup(part); in mmcsd_detach()
666 while (part->running != -1) in mmcsd_detach()
667 msleep(part, &part->disk_mtx, 0, in mmcsd_detach()
670 MMCSD_DISK_UNLOCK(part); in mmcsd_detach()
672 MMCSD_IOCTL_LOCK(part); in mmcsd_detach()
673 while (part->ioctl > 0) in mmcsd_detach()
674 msleep(part, &part->ioctl_mtx, 0, in mmcsd_detach()
676 part->ioctl = -1; in mmcsd_detach()
677 MMCSD_IOCTL_UNLOCK(part); in mmcsd_detach()
685 part = sc->part[i]; in mmcsd_detach()
686 if (part != NULL) { in mmcsd_detach()
687 if (part->disk != NULL) { in mmcsd_detach()
689 bioq_flush(&part->bio_queue, NULL, ENXIO); in mmcsd_detach()
691 disk_destroy(part->disk); in mmcsd_detach()
693 MMCSD_DISK_LOCK_DESTROY(part); in mmcsd_detach()
695 MMCSD_IOCTL_LOCK_DESTROY(part); in mmcsd_detach()
696 free(part, M_DEVBUF); in mmcsd_detach()
718 struct mmcsd_part *part; in mmcsd_suspend() local
722 part = sc->part[i]; in mmcsd_suspend()
723 if (part != NULL) { in mmcsd_suspend()
724 if (part->disk != NULL) { in mmcsd_suspend()
725 MMCSD_DISK_LOCK(part); in mmcsd_suspend()
726 part->suspend = 1; in mmcsd_suspend()
727 if (part->running > 0) { in mmcsd_suspend()
729 part->running = 0; in mmcsd_suspend()
730 wakeup(part); in mmcsd_suspend()
732 while (part->running != -1) in mmcsd_suspend()
733 msleep(part, &part->disk_mtx, 0, in mmcsd_suspend()
736 MMCSD_DISK_UNLOCK(part); in mmcsd_suspend()
738 MMCSD_IOCTL_LOCK(part); in mmcsd_suspend()
739 while (part->ioctl > 0) in mmcsd_suspend()
740 msleep(part, &part->ioctl_mtx, 0, in mmcsd_suspend()
742 part->ioctl = -1; in mmcsd_suspend()
743 MMCSD_IOCTL_UNLOCK(part); in mmcsd_suspend()
755 struct mmcsd_part *part; in mmcsd_resume() local
759 part = sc->part[i]; in mmcsd_resume()
760 if (part != NULL) { in mmcsd_resume()
761 if (part->disk != NULL) { in mmcsd_resume()
762 MMCSD_DISK_LOCK(part); in mmcsd_resume()
763 part->suspend = 0; in mmcsd_resume()
764 if (part->running <= 0) { in mmcsd_resume()
765 part->running = 1; in mmcsd_resume()
766 MMCSD_DISK_UNLOCK(part); in mmcsd_resume()
767 kproc_create(&mmcsd_task, part, in mmcsd_resume()
768 &part->p, 0, 0, "%s%d: mmc/sd card", in mmcsd_resume()
769 part->name, part->cnt); in mmcsd_resume()
771 MMCSD_DISK_UNLOCK(part); in mmcsd_resume()
773 MMCSD_IOCTL_LOCK(part); in mmcsd_resume()
774 part->ioctl = 0; in mmcsd_resume()
775 MMCSD_IOCTL_UNLOCK(part); in mmcsd_resume()
797 struct mmcsd_part *part; in mmcsd_strategy() local
799 part = bp->bio_disk->d_drv1; in mmcsd_strategy()
800 MMCSD_DISK_LOCK(part); in mmcsd_strategy()
801 if (part->running > 0 || part->suspend > 0) { in mmcsd_strategy()
802 bioq_disksort(&part->bio_queue, bp); in mmcsd_strategy()
803 MMCSD_DISK_UNLOCK(part); in mmcsd_strategy()
804 wakeup(part); in mmcsd_strategy()
806 MMCSD_DISK_UNLOCK(part); in mmcsd_strategy()
828 mmcsd_ioctl(struct mmcsd_part *part, u_long cmd, void *data, int fflag, in mmcsd_ioctl() argument
847 err = mmcsd_ioctl_cmd(part, mic, fflag); in mmcsd_ioctl()
861 err = mmcsd_ioctl_cmd(part, &mic[i], fflag); in mmcsd_ioctl()
875 mmcsd_ioctl_cmd(struct mmcsd_part *part, struct mmc_ioc_cmd *mic, int fflag) in mmcsd_ioctl_cmd() argument
890 if (part->ro == TRUE && mic->write_flag != 0) in mmcsd_ioctl_cmd()
900 MMCSD_IOCTL_LOCK(part); in mmcsd_ioctl_cmd()
901 while (part->ioctl != 0) { in mmcsd_ioctl_cmd()
902 if (part->ioctl < 0) { in mmcsd_ioctl_cmd()
903 MMCSD_IOCTL_UNLOCK(part); in mmcsd_ioctl_cmd()
906 msleep(part, &part->ioctl_mtx, 0, "mmcsd IOCTL", 0); in mmcsd_ioctl_cmd()
908 part->ioctl = 1; in mmcsd_ioctl_cmd()
909 MMCSD_IOCTL_UNLOCK(part); in mmcsd_ioctl_cmd()
936 sc = part->sc; in mmcsd_ioctl_cmd()
967 EXT_CSD_PART_CONFIG_ACC_MASK) != part->type) { in mmcsd_ioctl_cmd()
975 err = mmcsd_switch_part(mmcbus, dev, rca, part->type); in mmcsd_ioctl_cmd()
978 if (part->type == EXT_CSD_PART_CONFIG_ACC_RPMB) { in mmcsd_ioctl_cmd()
990 if (part->type == EXT_CSD_PART_CONFIG_ACC_RPMB) { in mmcsd_ioctl_cmd()
1017 if (part->type == EXT_CSD_PART_CONFIG_ACC_RPMB) { in mmcsd_ioctl_cmd()
1061 MMCSD_IOCTL_LOCK(part); in mmcsd_ioctl_cmd()
1062 part->ioctl = 0; in mmcsd_ioctl_cmd()
1063 MMCSD_IOCTL_UNLOCK(part); in mmcsd_ioctl_cmd()
1064 wakeup(part); in mmcsd_ioctl_cmd()
1073 struct mmcsd_part *part; in mmcsd_getattr() local
1079 part = bp->bio_disk->d_drv1; in mmcsd_getattr()
1080 dev = part->sc->dev; in mmcsd_getattr()
1108 mmcsd_switch_part(device_t bus, device_t dev, uint16_t rca, u_int part) in mmcsd_switch_part() argument
1129 if (part == EXT_CSD_PART_CONFIG_ACC_RPMB) in mmcsd_switch_part()
1132 if (sc->part_curr == part) in mmcsd_switch_part()
1136 ~EXT_CSD_PART_CONFIG_ACC_MASK) | part; in mmcsd_switch_part()
1141 if (part == EXT_CSD_PART_CONFIG_ACC_RPMB) in mmcsd_switch_part()
1149 sc->part_curr = part; in mmcsd_switch_part()
1163 mmcsd_rw(struct mmcsd_part *part, struct bio *bp) in mmcsd_rw() argument
1175 sc = part->sc; in mmcsd_rw()
1180 sz = part->disk->d_sectorsize; in mmcsd_rw()
1238 mmcsd_delete(struct mmcsd_part *part, struct bio *bp) in mmcsd_delete() argument
1249 sc = part->sc; in mmcsd_delete()
1254 sz = part->disk->d_sectorsize; in mmcsd_delete()
1262 if (block > part->eblock && block <= part->eend) in mmcsd_delete()
1263 block = part->eblock; in mmcsd_delete()
1264 if (end >= part->eblock && end < part->eend) in mmcsd_delete()
1265 end = part->eend; in mmcsd_delete()
1277 part->eblock = block; in mmcsd_delete()
1278 part->eend = end; in mmcsd_delete()
1358 if (bp->bio_pblkno >= part->eblock || block == start) { in mmcsd_delete()
1359 part->eblock = stop; /* Predict next forward. */ in mmcsd_delete()
1360 part->eend = end; in mmcsd_delete()
1362 part->eblock = block; /* Predict next backward. */ in mmcsd_delete()
1363 part->eend = start; in mmcsd_delete()
1379 struct mmcsd_part *part; in mmcsd_dump() local
1384 part = disk->d_drv1; in mmcsd_dump()
1385 sc = part->sc; in mmcsd_dump()
1406 err = mmcsd_switch_part(mmcbus, dev, sc->rca, part->type); in mmcsd_dump()
1413 block = mmcsd_rw(part, &bp); in mmcsd_dump()
1422 struct mmcsd_part *part; in mmcsd_task() local
1428 part = arg; in mmcsd_task()
1429 sc = part->sc; in mmcsd_task()
1435 MMCSD_DISK_LOCK(part); in mmcsd_task()
1437 if (part->running == 0) in mmcsd_task()
1439 bp = bioq_takefirst(&part->bio_queue); in mmcsd_task()
1441 msleep(part, &part->disk_mtx, PRIBIO, in mmcsd_task()
1444 MMCSD_DISK_UNLOCK(part); in mmcsd_task()
1453 if (bp->bio_cmd != BIO_READ && part->ro) { in mmcsd_task()
1461 sz = part->disk->d_sectorsize; in mmcsd_task()
1464 err = mmcsd_switch_part(mmcbus, dev, sc->rca, part->type); in mmcsd_task()
1473 if (block < part->eend && end > part->eblock) in mmcsd_task()
1474 part->eblock = part->eend = 0; in mmcsd_task()
1475 block = mmcsd_rw(part, bp); in mmcsd_task()
1477 block = mmcsd_delete(part, bp); in mmcsd_task()
1492 part->running = -1; in mmcsd_task()
1493 MMCSD_DISK_UNLOCK(part); in mmcsd_task()
1494 wakeup(part); in mmcsd_task()