Lines Matching refs:md
211 struct mmc_blk_data *md; member
233 struct mmc_blk_data *md; in mmc_blk_get() local
236 md = disk->private_data; in mmc_blk_get()
237 if (md && !kref_get_unless_zero(&md->kref)) in mmc_blk_get()
238 md = NULL; in mmc_blk_get()
241 return md; in mmc_blk_get()
252 struct mmc_blk_data *md = container_of(ref, struct mmc_blk_data, kref); in mmc_blk_kref_release() local
255 devidx = mmc_get_devidx(md->disk); in mmc_blk_kref_release()
259 md->disk->private_data = NULL; in mmc_blk_kref_release()
262 put_disk(md->disk); in mmc_blk_kref_release()
263 kfree(md); in mmc_blk_kref_release()
266 static void mmc_blk_put(struct mmc_blk_data *md) in mmc_blk_put() argument
268 kref_put(&md->kref, mmc_blk_kref_release); in mmc_blk_put()
275 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in power_ro_lock_show() local
276 struct mmc_card *card = md->queue.card; in power_ro_lock_show()
286 mmc_blk_put(md); in power_ro_lock_show()
295 struct mmc_blk_data *md, *part_md; in power_ro_lock_store() local
306 md = mmc_blk_get(dev_to_disk(dev)); in power_ro_lock_store()
307 mq = &md->queue; in power_ro_lock_store()
323 md->disk->disk_name); in power_ro_lock_store()
324 set_disk_ro(md->disk, 1); in power_ro_lock_store()
326 list_for_each_entry(part_md, &md->part, part) in power_ro_lock_store()
333 mmc_blk_put(md); in power_ro_lock_store()
344 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in force_ro_show() local
348 md->read_only); in force_ro_show()
349 mmc_blk_put(md); in force_ro_show()
357 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in force_ro_store() local
365 set_disk_ro(dev_to_disk(dev), set || md->read_only); in force_ro_store()
368 mmc_blk_put(md); in force_ro_store()
384 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in mmc_disk_attrs_is_visible() local
388 (md->area_type & MMC_BLK_DATA_AREA_BOOT) && in mmc_disk_attrs_is_visible()
389 md->queue.card->ext_csd.boot_ro_lockable) { in mmc_disk_attrs_is_visible()
391 if (!(md->queue.card->ext_csd.boot_ro_lock & in mmc_disk_attrs_is_visible()
396 mmc_blk_put(md); in mmc_disk_attrs_is_visible()
412 struct mmc_blk_data *md = mmc_blk_get(disk); in mmc_blk_open() local
416 if (md) { in mmc_blk_open()
418 if ((mode & BLK_OPEN_WRITE) && md->read_only) { in mmc_blk_open()
419 mmc_blk_put(md); in mmc_blk_open()
430 struct mmc_blk_data *md = disk->private_data; in mmc_blk_release() local
433 mmc_blk_put(md); in mmc_blk_release()
518 static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md, in __mmc_blk_ioctl_cmd() argument
532 if (!card || !md || !idata) in __mmc_blk_ioctl_cmd()
552 target_part = md->part_type; in __mmc_blk_ioctl_cmd()
704 static int mmc_blk_ioctl_cmd(struct mmc_blk_data *md, in mmc_blk_ioctl_cmd() argument
721 card = md->queue.card; in mmc_blk_ioctl_cmd()
730 mq = &md->queue; in mmc_blk_ioctl_cmd()
754 static int mmc_blk_ioctl_multi_cmd(struct mmc_blk_data *md, in mmc_blk_ioctl_multi_cmd() argument
793 card = md->queue.card; in mmc_blk_ioctl_multi_cmd()
803 mq = &md->queue; in mmc_blk_ioctl_multi_cmd()
848 struct mmc_blk_data *md; in mmc_blk_ioctl() local
856 md = mmc_blk_get(bdev->bd_disk); in mmc_blk_ioctl()
857 if (!md) in mmc_blk_ioctl()
859 ret = mmc_blk_ioctl_cmd(md, in mmc_blk_ioctl()
862 mmc_blk_put(md); in mmc_blk_ioctl()
868 md = mmc_blk_get(bdev->bd_disk); in mmc_blk_ioctl()
869 if (!md) in mmc_blk_ioctl()
871 ret = mmc_blk_ioctl_multi_cmd(md, in mmc_blk_ioctl()
874 mmc_blk_put(md); in mmc_blk_ioctl()
892 struct mmc_blk_data *md; in mmc_blk_alternative_gpt_sector() local
895 md = mmc_blk_get(disk); in mmc_blk_alternative_gpt_sector()
896 if (!md) in mmc_blk_alternative_gpt_sector()
899 if (md->queue.card) in mmc_blk_alternative_gpt_sector()
900 ret = mmc_card_alternative_gpt_sector(md->queue.card, sector); in mmc_blk_alternative_gpt_sector()
904 mmc_blk_put(md); in mmc_blk_alternative_gpt_sector()
1090 static int mmc_blk_reset(struct mmc_blk_data *md, struct mmc_host *host, in mmc_blk_reset() argument
1096 if (md->reset_done & type) in mmc_blk_reset()
1099 md->reset_done |= type; in mmc_blk_reset()
1110 if (mmc_blk_part_switch(host->card, md->part_type)) in mmc_blk_reset()
1119 static inline void mmc_blk_reset_success(struct mmc_blk_data *md, int type) in mmc_blk_reset_success() argument
1121 md->reset_done &= ~type; in mmc_blk_reset_success()
1147 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_issue_drv_op() local
1172 ret = __mmc_blk_ioctl_cmd(card, md, idata, i); in mmc_blk_issue_drv_op()
1189 md->disk->disk_name, ret); in mmc_blk_issue_drv_op()
1205 md->disk->disk_name); in mmc_blk_issue_drv_op()
1216 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_issue_erase_rq() local
1217 struct mmc_card *card = md->queue.card; in mmc_blk_issue_erase_rq()
1243 } while (err == -EIO && !mmc_blk_reset(md, card->host, type)); in mmc_blk_issue_erase_rq()
1247 mmc_blk_reset_success(md, type); in mmc_blk_issue_erase_rq()
1259 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_issue_discard_rq() local
1260 struct mmc_card *card = md->queue.card; in mmc_blk_issue_discard_rq()
1272 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_issue_secdiscard_rq() local
1273 struct mmc_card *card = md->queue.card; in mmc_blk_issue_secdiscard_rq()
1332 if (err && !mmc_blk_reset(md, card->host, type)) in mmc_blk_issue_secdiscard_rq()
1335 mmc_blk_reset_success(md, type); in mmc_blk_issue_secdiscard_rq()
1342 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_issue_flush() local
1343 struct mmc_card *card = md->queue.card; in mmc_blk_issue_flush()
1431 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_data_prep() local
1432 struct mmc_card *card = md->queue.card; in mmc_blk_data_prep()
1443 (md->flags & MMC_BLK_REL_WR); in mmc_blk_data_prep()
1490 get_capacity(md->disk))) in mmc_blk_data_prep()
1724 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_rw_rq_prep() local
1770 if ((md->flags & MMC_BLK_CMD23) && mmc_op_multi(brq->cmd.opcode) && in mmc_blk_rw_rq_prep()
1937 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_mq_rw_recovery() local
1986 err && mmc_blk_reset(md, card->host, type)) { in mmc_blk_mq_rw_recovery()
2001 mmc_blk_reset(md, card->host, type)) in mmc_blk_mq_rw_recovery()
2453 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_mq_issue_rq() local
2454 struct mmc_card *card = md->queue.card; in mmc_blk_mq_issue_rq()
2458 ret = mmc_blk_part_switch(card, md->part_type); in mmc_blk_mq_issue_rq()
2586 struct mmc_blk_data *md; in mmc_blk_alloc_req() local
2607 md = kzalloc(sizeof(*md), GFP_KERNEL); in mmc_blk_alloc_req()
2608 if (!md) { in mmc_blk_alloc_req()
2613 md->area_type = area_type; in mmc_blk_alloc_req()
2619 md->read_only = mmc_blk_readonly(card); in mmc_blk_alloc_req()
2626 md->flags |= MMC_BLK_CMD23; in mmc_blk_alloc_req()
2629 if (md->flags & MMC_BLK_CMD23 && in mmc_blk_alloc_req()
2632 md->flags |= MMC_BLK_REL_WR; in mmc_blk_alloc_req()
2638 md->disk = mmc_init_queue(&md->queue, card, features); in mmc_blk_alloc_req()
2639 if (IS_ERR(md->disk)) { in mmc_blk_alloc_req()
2640 ret = PTR_ERR(md->disk); in mmc_blk_alloc_req()
2644 INIT_LIST_HEAD(&md->part); in mmc_blk_alloc_req()
2645 INIT_LIST_HEAD(&md->rpmbs); in mmc_blk_alloc_req()
2646 kref_init(&md->kref); in mmc_blk_alloc_req()
2648 md->queue.blkdata = md; in mmc_blk_alloc_req()
2649 md->part_type = part_type; in mmc_blk_alloc_req()
2651 md->disk->major = MMC_BLOCK_MAJOR; in mmc_blk_alloc_req()
2652 md->disk->minors = perdev_minors; in mmc_blk_alloc_req()
2653 md->disk->first_minor = devidx * perdev_minors; in mmc_blk_alloc_req()
2654 md->disk->fops = &mmc_bdops; in mmc_blk_alloc_req()
2655 md->disk->private_data = md; in mmc_blk_alloc_req()
2656 md->parent = parent; in mmc_blk_alloc_req()
2657 set_disk_ro(md->disk, md->read_only || default_ro); in mmc_blk_alloc_req()
2659 md->disk->flags |= GENHD_FL_NO_PART; in mmc_blk_alloc_req()
2673 snprintf(md->disk->disk_name, sizeof(md->disk->disk_name), in mmc_blk_alloc_req()
2676 set_capacity(md->disk, size); in mmc_blk_alloc_req()
2681 md->disk->disk_name, mmc_card_id(card), mmc_card_name(card), in mmc_blk_alloc_req()
2682 cap_str, md->read_only ? " (ro)" : ""); in mmc_blk_alloc_req()
2686 dev_set_drvdata(&card->dev, md); in mmc_blk_alloc_req()
2688 ret = add_disk_fwnode(md->parent, md->disk, mmc_disk_attr_groups, in mmc_blk_alloc_req()
2692 return md; in mmc_blk_alloc_req()
2695 put_disk(md->disk); in mmc_blk_alloc_req()
2696 blk_mq_free_tag_set(&md->queue.tag_set); in mmc_blk_alloc_req()
2698 kfree(md); in mmc_blk_alloc_req()
2728 struct mmc_blk_data *md, in mmc_blk_alloc_part() argument
2737 part_md = mmc_blk_alloc_req(card, disk_to_dev(md->disk), size, default_ro, in mmc_blk_alloc_part()
2741 list_add(&part_md->part, &md->part); in mmc_blk_alloc_part()
2763 ret = mmc_blk_ioctl_cmd(rpmb->md, in mmc_rpmb_ioctl()
2768 ret = mmc_blk_ioctl_multi_cmd(rpmb->md, in mmc_rpmb_ioctl()
2824 mmc_blk_put(rpmb->md); in mmc_blk_rpmb_device_release()
2884 struct mmc_blk_data *md = rpmb->md; in mmc_route_rpmb_frames() local
2893 if (IS_ERR(md->queue.card)) in mmc_route_rpmb_frames()
2894 return PTR_ERR(md->queue.card); in mmc_route_rpmb_frames()
2961 rq = blk_mq_alloc_request(md->queue.queue, REQ_OP_DRV_OUT, 0); in mmc_route_rpmb_frames()
2983 struct mmc_blk_data *md, in mmc_blk_alloc_rpmb_part() argument
3016 mmc_blk_get(md->disk); in mmc_blk_alloc_rpmb_part()
3017 rpmb->md = md; in mmc_blk_alloc_rpmb_part()
3027 list_add(&rpmb->node, &md->rpmbs); in mmc_blk_alloc_rpmb_part()
3056 static int mmc_blk_alloc_parts(struct mmc_card *card, struct mmc_blk_data *md) in mmc_blk_alloc_parts() argument
3071 ret = mmc_blk_alloc_rpmb_part(card, md, in mmc_blk_alloc_parts()
3078 ret = mmc_blk_alloc_part(card, md, in mmc_blk_alloc_parts()
3092 static void mmc_blk_remove_req(struct mmc_blk_data *md) in mmc_blk_remove_req() argument
3098 del_gendisk(md->disk); in mmc_blk_remove_req()
3099 mmc_cleanup_queue(&md->queue); in mmc_blk_remove_req()
3100 mmc_blk_put(md); in mmc_blk_remove_req()
3104 struct mmc_blk_data *md) in mmc_blk_remove_parts() argument
3111 list_for_each_safe(pos, q, &md->rpmbs) { in mmc_blk_remove_parts()
3117 list_for_each_safe(pos, q, &md->part) { in mmc_blk_remove_parts()
3129 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in mmc_dbg_card_status_get() local
3130 struct mmc_queue *mq = &md->queue; in mmc_dbg_card_status_get()
3159 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in mmc_ext_csd_open() local
3160 struct mmc_queue *mq = &md->queue; in mmc_ext_csd_open()
3229 static void mmc_blk_add_debugfs(struct mmc_card *card, struct mmc_blk_data *md) in mmc_blk_add_debugfs() argument
3239 md->status_dentry = in mmc_blk_add_debugfs()
3246 md->ext_csd_dentry = in mmc_blk_add_debugfs()
3253 struct mmc_blk_data *md) in mmc_blk_remove_debugfs() argument
3258 debugfs_remove(md->status_dentry); in mmc_blk_remove_debugfs()
3259 md->status_dentry = NULL; in mmc_blk_remove_debugfs()
3261 debugfs_remove(md->ext_csd_dentry); in mmc_blk_remove_debugfs()
3262 md->ext_csd_dentry = NULL; in mmc_blk_remove_debugfs()
3267 static void mmc_blk_add_debugfs(struct mmc_card *card, struct mmc_blk_data *md) in mmc_blk_add_debugfs() argument
3272 struct mmc_blk_data *md) in mmc_blk_remove_debugfs() argument
3280 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in mmc_blk_rpmb_add() local
3303 list_for_each_entry(rpmb, &md->rpmbs, node) { in mmc_blk_rpmb_add()
3316 struct mmc_blk_data *md; in mmc_blk_probe() local
3334 md = mmc_blk_alloc(card); in mmc_blk_probe()
3335 if (IS_ERR(md)) { in mmc_blk_probe()
3336 ret = PTR_ERR(md); in mmc_blk_probe()
3340 ret = mmc_blk_alloc_parts(card, md); in mmc_blk_probe()
3345 mmc_blk_add_debugfs(card, md); in mmc_blk_probe()
3364 mmc_blk_remove_parts(card, md); in mmc_blk_probe()
3365 mmc_blk_remove_req(md); in mmc_blk_probe()
3373 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in mmc_blk_remove() local
3375 mmc_blk_remove_debugfs(card, md); in mmc_blk_remove()
3376 mmc_blk_remove_parts(card, md); in mmc_blk_remove()
3378 if (md->part_curr != md->part_type) { in mmc_blk_remove()
3380 mmc_blk_part_switch(card, md->part_type); in mmc_blk_remove()
3386 mmc_blk_remove_req(md); in mmc_blk_remove()
3393 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in _mmc_blk_suspend() local
3395 if (md) { in _mmc_blk_suspend()
3396 mmc_queue_suspend(&md->queue); in _mmc_blk_suspend()
3397 list_for_each_entry(part_md, &md->part, part) { in _mmc_blk_suspend()
3420 struct mmc_blk_data *md = dev_get_drvdata(dev); in mmc_blk_resume() local
3422 if (md) { in mmc_blk_resume()
3427 md->part_curr = md->part_type; in mmc_blk_resume()
3428 mmc_queue_resume(&md->queue); in mmc_blk_resume()
3429 list_for_each_entry(part_md, &md->part, part) { in mmc_blk_resume()