Lines Matching refs:md
159 struct mmc_blk_data *md; member
178 struct mmc_blk_data *md; in mmc_blk_get() local
181 md = disk->private_data; in mmc_blk_get()
182 if (md && md->usage == 0) in mmc_blk_get()
183 md = NULL; in mmc_blk_get()
184 if (md) in mmc_blk_get()
185 md->usage++; in mmc_blk_get()
188 return md; in mmc_blk_get()
197 static void mmc_blk_put(struct mmc_blk_data *md) in mmc_blk_put() argument
200 md->usage--; in mmc_blk_put()
201 if (md->usage == 0) { in mmc_blk_put()
202 int devidx = mmc_get_devidx(md->disk); in mmc_blk_put()
203 blk_put_queue(md->queue.queue); in mmc_blk_put()
205 put_disk(md->disk); in mmc_blk_put()
206 kfree(md); in mmc_blk_put()
215 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in power_ro_lock_show() local
216 struct mmc_card *card = md->queue.card; in power_ro_lock_show()
226 mmc_blk_put(md); in power_ro_lock_show()
235 struct mmc_blk_data *md, *part_md; in power_ro_lock_store() local
246 md = mmc_blk_get(dev_to_disk(dev)); in power_ro_lock_store()
247 mq = &md->queue; in power_ro_lock_store()
262 md->disk->disk_name); in power_ro_lock_store()
263 set_disk_ro(md->disk, 1); in power_ro_lock_store()
265 list_for_each_entry(part_md, &md->part, part) in power_ro_lock_store()
272 mmc_blk_put(md); in power_ro_lock_store()
280 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in force_ro_show() local
284 md->read_only); in force_ro_show()
285 mmc_blk_put(md); in force_ro_show()
294 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in force_ro_store() local
301 set_disk_ro(dev_to_disk(dev), set || md->read_only); in force_ro_store()
304 mmc_blk_put(md); in force_ro_store()
310 struct mmc_blk_data *md = mmc_blk_get(bdev->bd_disk); in mmc_blk_open() local
314 if (md) { in mmc_blk_open()
316 if ((mode & FMODE_WRITE) && md->read_only) { in mmc_blk_open()
317 mmc_blk_put(md); in mmc_blk_open()
328 struct mmc_blk_data *md = disk->private_data; in mmc_blk_release() local
331 mmc_blk_put(md); in mmc_blk_release()
448 static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md, in __mmc_blk_ioctl_cmd() argument
458 if (!card || !md || !idata) in __mmc_blk_ioctl_cmd()
472 target_part = md->part_type; in __mmc_blk_ioctl_cmd()
594 static int mmc_blk_ioctl_cmd(struct mmc_blk_data *md, in mmc_blk_ioctl_cmd() argument
611 card = md->queue.card; in mmc_blk_ioctl_cmd()
620 mq = &md->queue; in mmc_blk_ioctl_cmd()
643 static int mmc_blk_ioctl_multi_cmd(struct mmc_blk_data *md, in mmc_blk_ioctl_multi_cmd() argument
680 card = md->queue.card; in mmc_blk_ioctl_multi_cmd()
690 mq = &md->queue; in mmc_blk_ioctl_multi_cmd()
734 struct mmc_blk_data *md; in mmc_blk_ioctl() local
742 md = mmc_blk_get(bdev->bd_disk); in mmc_blk_ioctl()
743 if (!md) in mmc_blk_ioctl()
745 ret = mmc_blk_ioctl_cmd(md, in mmc_blk_ioctl()
748 mmc_blk_put(md); in mmc_blk_ioctl()
754 md = mmc_blk_get(bdev->bd_disk); in mmc_blk_ioctl()
755 if (!md) in mmc_blk_ioctl()
757 ret = mmc_blk_ioctl_multi_cmd(md, in mmc_blk_ioctl()
760 mmc_blk_put(md); in mmc_blk_ioctl()
938 static int mmc_blk_reset(struct mmc_blk_data *md, struct mmc_host *host, in mmc_blk_reset() argument
943 if (md->reset_done & type) in mmc_blk_reset()
946 md->reset_done |= type; in mmc_blk_reset()
955 part_err = mmc_blk_part_switch(host->card, md->part_type); in mmc_blk_reset()
967 static inline void mmc_blk_reset_success(struct mmc_blk_data *md, int type) in mmc_blk_reset_success() argument
969 md->reset_done &= ~type; in mmc_blk_reset_success()
981 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_issue_drv_op() local
997 ret = __mmc_blk_ioctl_cmd(card, md, idata[i]); in mmc_blk_issue_drv_op()
1012 md->disk->disk_name, ret); in mmc_blk_issue_drv_op()
1028 md->disk->disk_name); in mmc_blk_issue_drv_op()
1038 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_issue_discard_rq() local
1039 struct mmc_card *card = md->queue.card; in mmc_blk_issue_discard_rq()
1064 } while (err == -EIO && !mmc_blk_reset(md, card->host, type)); in mmc_blk_issue_discard_rq()
1068 mmc_blk_reset_success(md, type); in mmc_blk_issue_discard_rq()
1076 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_issue_secdiscard_rq() local
1077 struct mmc_card *card = md->queue.card; in mmc_blk_issue_secdiscard_rq()
1135 if (err && !mmc_blk_reset(md, card->host, type)) in mmc_blk_issue_secdiscard_rq()
1138 mmc_blk_reset_success(md, type); in mmc_blk_issue_secdiscard_rq()
1145 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_issue_flush() local
1146 struct mmc_card *card = md->queue.card; in mmc_blk_issue_flush()
1234 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_data_prep() local
1235 struct mmc_card *card = md->queue.card; in mmc_blk_data_prep()
1246 (md->flags & MMC_BLK_REL_WR); in mmc_blk_data_prep()
1291 get_capacity(md->disk))) in mmc_blk_data_prep()
1524 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_rw_rq_prep() local
1570 if ((md->flags & MMC_BLK_CMD23) && mmc_op_multi(brq->cmd.opcode) && in mmc_blk_rw_rq_prep()
1731 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_mq_rw_recovery() local
1780 err && mmc_blk_reset(md, card->host, type)) { in mmc_blk_mq_rw_recovery()
1795 mmc_blk_reset(md, card->host, type); in mmc_blk_mq_rw_recovery()
2187 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_mq_issue_rq() local
2188 struct mmc_card *card = md->queue.card; in mmc_blk_mq_issue_rq()
2192 ret = mmc_blk_part_switch(card, md->part_type); in mmc_blk_mq_issue_rq()
2259 struct mmc_blk_data *md; in mmc_blk_alloc_req() local
2278 md = kzalloc(sizeof(struct mmc_blk_data), GFP_KERNEL); in mmc_blk_alloc_req()
2279 if (!md) { in mmc_blk_alloc_req()
2284 md->area_type = area_type; in mmc_blk_alloc_req()
2290 md->read_only = mmc_blk_readonly(card); in mmc_blk_alloc_req()
2292 md->disk = alloc_disk(perdev_minors); in mmc_blk_alloc_req()
2293 if (md->disk == NULL) { in mmc_blk_alloc_req()
2298 INIT_LIST_HEAD(&md->part); in mmc_blk_alloc_req()
2299 INIT_LIST_HEAD(&md->rpmbs); in mmc_blk_alloc_req()
2300 md->usage = 1; in mmc_blk_alloc_req()
2302 ret = mmc_init_queue(&md->queue, card); in mmc_blk_alloc_req()
2306 md->queue.blkdata = md; in mmc_blk_alloc_req()
2314 if (!blk_get_queue(md->queue.queue)) { in mmc_blk_alloc_req()
2315 mmc_cleanup_queue(&md->queue); in mmc_blk_alloc_req()
2320 md->disk->major = MMC_BLOCK_MAJOR; in mmc_blk_alloc_req()
2321 md->disk->first_minor = devidx * perdev_minors; in mmc_blk_alloc_req()
2322 md->disk->fops = &mmc_bdops; in mmc_blk_alloc_req()
2323 md->disk->private_data = md; in mmc_blk_alloc_req()
2324 md->disk->queue = md->queue.queue; in mmc_blk_alloc_req()
2325 md->parent = parent; in mmc_blk_alloc_req()
2326 set_disk_ro(md->disk, md->read_only || default_ro); in mmc_blk_alloc_req()
2327 md->disk->flags = GENHD_FL_EXT_DEVT; in mmc_blk_alloc_req()
2329 md->disk->flags |= GENHD_FL_NO_PART_SCAN in mmc_blk_alloc_req()
2344 snprintf(md->disk->disk_name, sizeof(md->disk->disk_name), in mmc_blk_alloc_req()
2347 set_capacity(md->disk, size); in mmc_blk_alloc_req()
2354 md->flags |= MMC_BLK_CMD23; in mmc_blk_alloc_req()
2358 md->flags & MMC_BLK_CMD23 && in mmc_blk_alloc_req()
2361 md->flags |= MMC_BLK_REL_WR; in mmc_blk_alloc_req()
2362 blk_queue_write_cache(md->queue.queue, true, true); in mmc_blk_alloc_req()
2365 return md; in mmc_blk_alloc_req()
2368 put_disk(md->disk); in mmc_blk_alloc_req()
2370 kfree(md); in mmc_blk_alloc_req()
2400 struct mmc_blk_data *md, in mmc_blk_alloc_part() argument
2410 part_md = mmc_blk_alloc_req(card, disk_to_dev(md->disk), size, default_ro, in mmc_blk_alloc_part()
2415 list_add(&part_md->part, &md->part); in mmc_blk_alloc_part()
2442 ret = mmc_blk_ioctl_cmd(rpmb->md, in mmc_rpmb_ioctl()
2447 ret = mmc_blk_ioctl_multi_cmd(rpmb->md, in mmc_rpmb_ioctl()
2474 mmc_blk_get(rpmb->md->disk); in mmc_rpmb_chrdev_open()
2484 mmc_blk_put(rpmb->md); in mmc_rpmb_chrdev_release()
2510 struct mmc_blk_data *md, in mmc_blk_alloc_rpmb_part() argument
2543 rpmb->md = md; in mmc_blk_alloc_rpmb_part()
2553 list_add(&rpmb->node, &md->rpmbs); in mmc_blk_alloc_rpmb_part()
2583 static int mmc_blk_alloc_parts(struct mmc_card *card, struct mmc_blk_data *md) in mmc_blk_alloc_parts() argument
2598 ret = mmc_blk_alloc_rpmb_part(card, md, in mmc_blk_alloc_parts()
2605 ret = mmc_blk_alloc_part(card, md, in mmc_blk_alloc_parts()
2619 static void mmc_blk_remove_req(struct mmc_blk_data *md) in mmc_blk_remove_req() argument
2623 if (md) { in mmc_blk_remove_req()
2629 card = md->queue.card; in mmc_blk_remove_req()
2630 if (md->disk->flags & GENHD_FL_UP) { in mmc_blk_remove_req()
2631 device_remove_file(disk_to_dev(md->disk), &md->force_ro); in mmc_blk_remove_req()
2632 if ((md->area_type & MMC_BLK_DATA_AREA_BOOT) && in mmc_blk_remove_req()
2634 device_remove_file(disk_to_dev(md->disk), in mmc_blk_remove_req()
2635 &md->power_ro_lock); in mmc_blk_remove_req()
2637 del_gendisk(md->disk); in mmc_blk_remove_req()
2639 mmc_cleanup_queue(&md->queue); in mmc_blk_remove_req()
2640 mmc_blk_put(md); in mmc_blk_remove_req()
2645 struct mmc_blk_data *md) in mmc_blk_remove_parts() argument
2652 list_for_each_safe(pos, q, &md->rpmbs) { in mmc_blk_remove_parts()
2658 list_for_each_safe(pos, q, &md->part) { in mmc_blk_remove_parts()
2665 static int mmc_add_disk(struct mmc_blk_data *md) in mmc_add_disk() argument
2668 struct mmc_card *card = md->queue.card; in mmc_add_disk()
2670 device_add_disk(md->parent, md->disk, NULL); in mmc_add_disk()
2671 md->force_ro.show = force_ro_show; in mmc_add_disk()
2672 md->force_ro.store = force_ro_store; in mmc_add_disk()
2673 sysfs_attr_init(&md->force_ro.attr); in mmc_add_disk()
2674 md->force_ro.attr.name = "force_ro"; in mmc_add_disk()
2675 md->force_ro.attr.mode = S_IRUGO | S_IWUSR; in mmc_add_disk()
2676 ret = device_create_file(disk_to_dev(md->disk), &md->force_ro); in mmc_add_disk()
2680 if ((md->area_type & MMC_BLK_DATA_AREA_BOOT) && in mmc_add_disk()
2689 md->power_ro_lock.show = power_ro_lock_show; in mmc_add_disk()
2690 md->power_ro_lock.store = power_ro_lock_store; in mmc_add_disk()
2691 sysfs_attr_init(&md->power_ro_lock.attr); in mmc_add_disk()
2692 md->power_ro_lock.attr.mode = mode; in mmc_add_disk()
2693 md->power_ro_lock.attr.name = in mmc_add_disk()
2695 ret = device_create_file(disk_to_dev(md->disk), in mmc_add_disk()
2696 &md->power_ro_lock); in mmc_add_disk()
2703 device_remove_file(disk_to_dev(md->disk), &md->force_ro); in mmc_add_disk()
2705 del_gendisk(md->disk); in mmc_add_disk()
2715 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in mmc_dbg_card_status_get() local
2716 struct mmc_queue *mq = &md->queue; in mmc_dbg_card_status_get()
2744 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in mmc_ext_csd_open() local
2745 struct mmc_queue *mq = &md->queue; in mmc_ext_csd_open()
2813 static int mmc_blk_add_debugfs(struct mmc_card *card, struct mmc_blk_data *md) in mmc_blk_add_debugfs() argument
2823 md->status_dentry = in mmc_blk_add_debugfs()
2827 if (!md->status_dentry) in mmc_blk_add_debugfs()
2832 md->ext_csd_dentry = in mmc_blk_add_debugfs()
2835 if (!md->ext_csd_dentry) in mmc_blk_add_debugfs()
2843 struct mmc_blk_data *md) in mmc_blk_remove_debugfs() argument
2848 if (!IS_ERR_OR_NULL(md->status_dentry)) { in mmc_blk_remove_debugfs()
2849 debugfs_remove(md->status_dentry); in mmc_blk_remove_debugfs()
2850 md->status_dentry = NULL; in mmc_blk_remove_debugfs()
2853 if (!IS_ERR_OR_NULL(md->ext_csd_dentry)) { in mmc_blk_remove_debugfs()
2854 debugfs_remove(md->ext_csd_dentry); in mmc_blk_remove_debugfs()
2855 md->ext_csd_dentry = NULL; in mmc_blk_remove_debugfs()
2861 static int mmc_blk_add_debugfs(struct mmc_card *card, struct mmc_blk_data *md) in mmc_blk_add_debugfs() argument
2867 struct mmc_blk_data *md) in mmc_blk_remove_debugfs() argument
2875 struct mmc_blk_data *md, *part_md; in mmc_blk_probe() local
2893 md = mmc_blk_alloc(card); in mmc_blk_probe()
2894 if (IS_ERR(md)) in mmc_blk_probe()
2895 return PTR_ERR(md); in mmc_blk_probe()
2897 string_get_size((u64)get_capacity(md->disk), 512, STRING_UNITS_2, in mmc_blk_probe()
2900 md->disk->disk_name, mmc_card_id(card), mmc_card_name(card), in mmc_blk_probe()
2901 cap_str, md->read_only ? "(ro)" : ""); in mmc_blk_probe()
2903 if (mmc_blk_alloc_parts(card, md)) in mmc_blk_probe()
2906 dev_set_drvdata(&card->dev, md); in mmc_blk_probe()
2908 if (mmc_add_disk(md)) in mmc_blk_probe()
2911 list_for_each_entry(part_md, &md->part, part) { in mmc_blk_probe()
2917 mmc_blk_add_debugfs(card, md); in mmc_blk_probe()
2934 mmc_blk_remove_parts(card, md); in mmc_blk_probe()
2935 mmc_blk_remove_req(md); in mmc_blk_probe()
2941 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in mmc_blk_remove() local
2943 mmc_blk_remove_debugfs(card, md); in mmc_blk_remove()
2944 mmc_blk_remove_parts(card, md); in mmc_blk_remove()
2946 if (md->part_curr != md->part_type) { in mmc_blk_remove()
2948 mmc_blk_part_switch(card, md->part_type); in mmc_blk_remove()
2954 mmc_blk_remove_req(md); in mmc_blk_remove()
2962 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in _mmc_blk_suspend() local
2964 if (md) { in _mmc_blk_suspend()
2965 mmc_queue_suspend(&md->queue); in _mmc_blk_suspend()
2966 list_for_each_entry(part_md, &md->part, part) { in _mmc_blk_suspend()
2989 struct mmc_blk_data *md = dev_get_drvdata(dev); in mmc_blk_resume() local
2991 if (md) { in mmc_blk_resume()
2996 md->part_curr = md->part_type; in mmc_blk_resume()
2997 mmc_queue_resume(&md->queue); in mmc_blk_resume()
2998 list_for_each_entry(part_md, &md->part, part) { in mmc_blk_resume()