Lines Matching refs:md
160 struct mmc_blk_data *md; member
174 struct mmc_blk_data *md; in mmc_blk_get() local
177 md = disk->private_data; in mmc_blk_get()
178 if (md && md->usage == 0) in mmc_blk_get()
179 md = NULL; in mmc_blk_get()
180 if (md) in mmc_blk_get()
181 md->usage++; in mmc_blk_get()
184 return md; in mmc_blk_get()
193 static void mmc_blk_put(struct mmc_blk_data *md) in mmc_blk_put() argument
196 md->usage--; in mmc_blk_put()
197 if (md->usage == 0) { in mmc_blk_put()
198 int devidx = mmc_get_devidx(md->disk); in mmc_blk_put()
199 blk_put_queue(md->queue.queue); in mmc_blk_put()
201 put_disk(md->disk); in mmc_blk_put()
202 kfree(md); in mmc_blk_put()
211 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in power_ro_lock_show() local
212 struct mmc_card *card = md->queue.card; in power_ro_lock_show()
222 mmc_blk_put(md); in power_ro_lock_show()
231 struct mmc_blk_data *md, *part_md; in power_ro_lock_store() local
242 md = mmc_blk_get(dev_to_disk(dev)); in power_ro_lock_store()
243 mq = &md->queue; in power_ro_lock_store()
258 md->disk->disk_name); in power_ro_lock_store()
259 set_disk_ro(md->disk, 1); in power_ro_lock_store()
261 list_for_each_entry(part_md, &md->part, part) in power_ro_lock_store()
268 mmc_blk_put(md); in power_ro_lock_store()
276 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in force_ro_show() local
280 md->read_only); in force_ro_show()
281 mmc_blk_put(md); in force_ro_show()
290 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in force_ro_store() local
297 set_disk_ro(dev_to_disk(dev), set || md->read_only); in force_ro_store()
300 mmc_blk_put(md); in force_ro_store()
306 struct mmc_blk_data *md = mmc_blk_get(bdev->bd_disk); in mmc_blk_open() local
310 if (md) { in mmc_blk_open()
311 if (md->usage == 2) in mmc_blk_open()
315 if ((mode & FMODE_WRITE) && md->read_only) { in mmc_blk_open()
316 mmc_blk_put(md); in mmc_blk_open()
327 struct mmc_blk_data *md = disk->private_data; in mmc_blk_release() local
330 mmc_blk_put(md); in mmc_blk_release()
471 static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md, in __mmc_blk_ioctl_cmd() argument
482 if (!card || !md || !idata) in __mmc_blk_ioctl_cmd()
496 target_part = md->part_type; in __mmc_blk_ioctl_cmd()
629 static int mmc_blk_ioctl_cmd(struct mmc_blk_data *md, in mmc_blk_ioctl_cmd() argument
646 card = md->queue.card; in mmc_blk_ioctl_cmd()
655 mq = &md->queue; in mmc_blk_ioctl_cmd()
678 static int mmc_blk_ioctl_multi_cmd(struct mmc_blk_data *md, in mmc_blk_ioctl_multi_cmd() argument
715 card = md->queue.card; in mmc_blk_ioctl_multi_cmd()
725 mq = &md->queue; in mmc_blk_ioctl_multi_cmd()
769 struct mmc_blk_data *md; in mmc_blk_ioctl() local
777 md = mmc_blk_get(bdev->bd_disk); in mmc_blk_ioctl()
778 if (!md) in mmc_blk_ioctl()
780 ret = mmc_blk_ioctl_cmd(md, in mmc_blk_ioctl()
783 mmc_blk_put(md); in mmc_blk_ioctl()
789 md = mmc_blk_get(bdev->bd_disk); in mmc_blk_ioctl()
790 if (!md) in mmc_blk_ioctl()
792 ret = mmc_blk_ioctl_multi_cmd(md, in mmc_blk_ioctl()
795 mmc_blk_put(md); in mmc_blk_ioctl()
1025 static int mmc_blk_reset(struct mmc_blk_data *md, struct mmc_host *host, in mmc_blk_reset() argument
1030 if (md->reset_done & type) in mmc_blk_reset()
1033 md->reset_done |= type; in mmc_blk_reset()
1042 part_err = mmc_blk_part_switch(host->card, md->part_type); in mmc_blk_reset()
1054 static inline void mmc_blk_reset_success(struct mmc_blk_data *md, int type) in mmc_blk_reset_success() argument
1056 md->reset_done &= ~type; in mmc_blk_reset_success()
1068 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_issue_drv_op() local
1084 ret = __mmc_blk_ioctl_cmd(card, md, idata[i]); in mmc_blk_issue_drv_op()
1099 md->disk->disk_name, ret); in mmc_blk_issue_drv_op()
1115 md->disk->disk_name); in mmc_blk_issue_drv_op()
1125 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_issue_discard_rq() local
1126 struct mmc_card *card = md->queue.card; in mmc_blk_issue_discard_rq()
1151 } while (err == -EIO && !mmc_blk_reset(md, card->host, type)); in mmc_blk_issue_discard_rq()
1155 mmc_blk_reset_success(md, type); in mmc_blk_issue_discard_rq()
1163 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_issue_secdiscard_rq() local
1164 struct mmc_card *card = md->queue.card; in mmc_blk_issue_secdiscard_rq()
1222 if (err && !mmc_blk_reset(md, card->host, type)) in mmc_blk_issue_secdiscard_rq()
1225 mmc_blk_reset_success(md, type); in mmc_blk_issue_secdiscard_rq()
1232 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_issue_flush() local
1233 struct mmc_card *card = md->queue.card; in mmc_blk_issue_flush()
1321 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_data_prep() local
1322 struct mmc_card *card = md->queue.card; in mmc_blk_data_prep()
1333 (md->flags & MMC_BLK_REL_WR); in mmc_blk_data_prep()
1378 get_capacity(md->disk))) in mmc_blk_data_prep()
1589 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_rw_rq_prep() local
1635 if ((md->flags & MMC_BLK_CMD23) && mmc_op_multi(brq->cmd.opcode) && in mmc_blk_rw_rq_prep()
1796 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_mq_rw_recovery() local
1845 err && mmc_blk_reset(md, card->host, type)) { in mmc_blk_mq_rw_recovery()
1860 mmc_blk_reset(md, card->host, type); in mmc_blk_mq_rw_recovery()
2217 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_mq_issue_rq() local
2218 struct mmc_card *card = md->queue.card; in mmc_blk_mq_issue_rq()
2222 ret = mmc_blk_part_switch(card, md->part_type); in mmc_blk_mq_issue_rq()
2289 struct mmc_blk_data *md; in mmc_blk_alloc_req() local
2308 md = kzalloc(sizeof(struct mmc_blk_data), GFP_KERNEL); in mmc_blk_alloc_req()
2309 if (!md) { in mmc_blk_alloc_req()
2314 md->area_type = area_type; in mmc_blk_alloc_req()
2320 md->read_only = mmc_blk_readonly(card); in mmc_blk_alloc_req()
2322 md->disk = alloc_disk(perdev_minors); in mmc_blk_alloc_req()
2323 if (md->disk == NULL) { in mmc_blk_alloc_req()
2328 INIT_LIST_HEAD(&md->part); in mmc_blk_alloc_req()
2329 INIT_LIST_HEAD(&md->rpmbs); in mmc_blk_alloc_req()
2330 md->usage = 1; in mmc_blk_alloc_req()
2332 ret = mmc_init_queue(&md->queue, card); in mmc_blk_alloc_req()
2336 md->queue.blkdata = md; in mmc_blk_alloc_req()
2344 if (!blk_get_queue(md->queue.queue)) { in mmc_blk_alloc_req()
2345 mmc_cleanup_queue(&md->queue); in mmc_blk_alloc_req()
2350 md->disk->major = MMC_BLOCK_MAJOR; in mmc_blk_alloc_req()
2351 md->disk->first_minor = devidx * perdev_minors; in mmc_blk_alloc_req()
2352 md->disk->fops = &mmc_bdops; in mmc_blk_alloc_req()
2353 md->disk->private_data = md; in mmc_blk_alloc_req()
2354 md->disk->queue = md->queue.queue; in mmc_blk_alloc_req()
2355 md->parent = parent; in mmc_blk_alloc_req()
2356 set_disk_ro(md->disk, md->read_only || default_ro); in mmc_blk_alloc_req()
2357 md->disk->flags = GENHD_FL_EXT_DEVT; in mmc_blk_alloc_req()
2359 md->disk->flags |= GENHD_FL_NO_PART_SCAN in mmc_blk_alloc_req()
2374 snprintf(md->disk->disk_name, sizeof(md->disk->disk_name), in mmc_blk_alloc_req()
2377 set_capacity(md->disk, size); in mmc_blk_alloc_req()
2384 md->flags |= MMC_BLK_CMD23; in mmc_blk_alloc_req()
2388 md->flags & MMC_BLK_CMD23 && in mmc_blk_alloc_req()
2391 md->flags |= MMC_BLK_REL_WR; in mmc_blk_alloc_req()
2392 blk_queue_write_cache(md->queue.queue, true, true); in mmc_blk_alloc_req()
2395 return md; in mmc_blk_alloc_req()
2398 put_disk(md->disk); in mmc_blk_alloc_req()
2400 kfree(md); in mmc_blk_alloc_req()
2430 struct mmc_blk_data *md, in mmc_blk_alloc_part() argument
2440 part_md = mmc_blk_alloc_req(card, disk_to_dev(md->disk), size, default_ro, in mmc_blk_alloc_part()
2445 list_add(&part_md->part, &md->part); in mmc_blk_alloc_part()
2472 ret = mmc_blk_ioctl_cmd(rpmb->md, in mmc_rpmb_ioctl()
2477 ret = mmc_blk_ioctl_multi_cmd(rpmb->md, in mmc_rpmb_ioctl()
2504 mmc_blk_get(rpmb->md->disk); in mmc_rpmb_chrdev_open()
2515 mmc_blk_put(rpmb->md); in mmc_rpmb_chrdev_release()
2540 struct mmc_blk_data *md, in mmc_blk_alloc_rpmb_part() argument
2573 rpmb->md = md; in mmc_blk_alloc_rpmb_part()
2583 list_add(&rpmb->node, &md->rpmbs); in mmc_blk_alloc_rpmb_part()
2613 static int mmc_blk_alloc_parts(struct mmc_card *card, struct mmc_blk_data *md) in mmc_blk_alloc_parts() argument
2628 ret = mmc_blk_alloc_rpmb_part(card, md, in mmc_blk_alloc_parts()
2635 ret = mmc_blk_alloc_part(card, md, in mmc_blk_alloc_parts()
2649 static void mmc_blk_remove_req(struct mmc_blk_data *md) in mmc_blk_remove_req() argument
2653 if (md) { in mmc_blk_remove_req()
2659 card = md->queue.card; in mmc_blk_remove_req()
2660 if (md->disk->flags & GENHD_FL_UP) { in mmc_blk_remove_req()
2661 device_remove_file(disk_to_dev(md->disk), &md->force_ro); in mmc_blk_remove_req()
2662 if ((md->area_type & MMC_BLK_DATA_AREA_BOOT) && in mmc_blk_remove_req()
2664 device_remove_file(disk_to_dev(md->disk), in mmc_blk_remove_req()
2665 &md->power_ro_lock); in mmc_blk_remove_req()
2667 del_gendisk(md->disk); in mmc_blk_remove_req()
2669 mmc_cleanup_queue(&md->queue); in mmc_blk_remove_req()
2670 mmc_blk_put(md); in mmc_blk_remove_req()
2675 struct mmc_blk_data *md) in mmc_blk_remove_parts() argument
2682 list_for_each_safe(pos, q, &md->rpmbs) { in mmc_blk_remove_parts()
2688 list_for_each_safe(pos, q, &md->part) { in mmc_blk_remove_parts()
2695 static int mmc_add_disk(struct mmc_blk_data *md) in mmc_add_disk() argument
2698 struct mmc_card *card = md->queue.card; in mmc_add_disk()
2700 device_add_disk(md->parent, md->disk, NULL); in mmc_add_disk()
2701 md->force_ro.show = force_ro_show; in mmc_add_disk()
2702 md->force_ro.store = force_ro_store; in mmc_add_disk()
2703 sysfs_attr_init(&md->force_ro.attr); in mmc_add_disk()
2704 md->force_ro.attr.name = "force_ro"; in mmc_add_disk()
2705 md->force_ro.attr.mode = S_IRUGO | S_IWUSR; in mmc_add_disk()
2706 ret = device_create_file(disk_to_dev(md->disk), &md->force_ro); in mmc_add_disk()
2710 if ((md->area_type & MMC_BLK_DATA_AREA_BOOT) && in mmc_add_disk()
2719 md->power_ro_lock.show = power_ro_lock_show; in mmc_add_disk()
2720 md->power_ro_lock.store = power_ro_lock_store; in mmc_add_disk()
2721 sysfs_attr_init(&md->power_ro_lock.attr); in mmc_add_disk()
2722 md->power_ro_lock.attr.mode = mode; in mmc_add_disk()
2723 md->power_ro_lock.attr.name = in mmc_add_disk()
2725 ret = device_create_file(disk_to_dev(md->disk), in mmc_add_disk()
2726 &md->power_ro_lock); in mmc_add_disk()
2733 device_remove_file(disk_to_dev(md->disk), &md->force_ro); in mmc_add_disk()
2735 del_gendisk(md->disk); in mmc_add_disk()
2745 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in mmc_dbg_card_status_get() local
2746 struct mmc_queue *mq = &md->queue; in mmc_dbg_card_status_get()
2774 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in mmc_ext_csd_open() local
2775 struct mmc_queue *mq = &md->queue; in mmc_ext_csd_open()
2843 static int mmc_blk_add_debugfs(struct mmc_card *card, struct mmc_blk_data *md) in mmc_blk_add_debugfs() argument
2853 md->status_dentry = in mmc_blk_add_debugfs()
2857 if (!md->status_dentry) in mmc_blk_add_debugfs()
2862 md->ext_csd_dentry = in mmc_blk_add_debugfs()
2865 if (!md->ext_csd_dentry) in mmc_blk_add_debugfs()
2873 struct mmc_blk_data *md) in mmc_blk_remove_debugfs() argument
2878 if (!IS_ERR_OR_NULL(md->status_dentry)) { in mmc_blk_remove_debugfs()
2879 debugfs_remove(md->status_dentry); in mmc_blk_remove_debugfs()
2880 md->status_dentry = NULL; in mmc_blk_remove_debugfs()
2883 if (!IS_ERR_OR_NULL(md->ext_csd_dentry)) { in mmc_blk_remove_debugfs()
2884 debugfs_remove(md->ext_csd_dentry); in mmc_blk_remove_debugfs()
2885 md->ext_csd_dentry = NULL; in mmc_blk_remove_debugfs()
2891 static int mmc_blk_add_debugfs(struct mmc_card *card, struct mmc_blk_data *md) in mmc_blk_add_debugfs() argument
2897 struct mmc_blk_data *md) in mmc_blk_remove_debugfs() argument
2905 struct mmc_blk_data *md, *part_md; in mmc_blk_probe() local
2923 md = mmc_blk_alloc(card); in mmc_blk_probe()
2924 if (IS_ERR(md)) in mmc_blk_probe()
2925 return PTR_ERR(md); in mmc_blk_probe()
2927 string_get_size((u64)get_capacity(md->disk), 512, STRING_UNITS_2, in mmc_blk_probe()
2930 md->disk->disk_name, mmc_card_id(card), mmc_card_name(card), in mmc_blk_probe()
2931 cap_str, md->read_only ? "(ro)" : ""); in mmc_blk_probe()
2933 if (mmc_blk_alloc_parts(card, md)) in mmc_blk_probe()
2936 dev_set_drvdata(&card->dev, md); in mmc_blk_probe()
2938 if (mmc_add_disk(md)) in mmc_blk_probe()
2941 list_for_each_entry(part_md, &md->part, part) { in mmc_blk_probe()
2947 mmc_blk_add_debugfs(card, md); in mmc_blk_probe()
2964 mmc_blk_remove_parts(card, md); in mmc_blk_probe()
2965 mmc_blk_remove_req(md); in mmc_blk_probe()
2971 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in mmc_blk_remove() local
2973 mmc_blk_remove_debugfs(card, md); in mmc_blk_remove()
2974 mmc_blk_remove_parts(card, md); in mmc_blk_remove()
2976 if (md->part_curr != md->part_type) { in mmc_blk_remove()
2978 mmc_blk_part_switch(card, md->part_type); in mmc_blk_remove()
2984 mmc_blk_remove_req(md); in mmc_blk_remove()
2992 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in _mmc_blk_suspend() local
2994 if (md) { in _mmc_blk_suspend()
2995 mmc_queue_suspend(&md->queue); in _mmc_blk_suspend()
2996 list_for_each_entry(part_md, &md->part, part) { in _mmc_blk_suspend()
3019 struct mmc_blk_data *md = dev_get_drvdata(dev); in mmc_blk_resume() local
3021 if (md) { in mmc_blk_resume()
3026 md->part_curr = md->part_type; in mmc_blk_resume()
3027 mmc_queue_resume(&md->queue); in mmc_blk_resume()
3028 list_for_each_entry(part_md, &md->part, part) { in mmc_blk_resume()