Lines Matching refs:md
173 struct mmc_blk_data *md; member
195 struct mmc_blk_data *md; in mmc_blk_get() local
198 md = disk->private_data; in mmc_blk_get()
199 if (md && !kref_get_unless_zero(&md->kref)) in mmc_blk_get()
200 md = NULL; in mmc_blk_get()
203 return md; in mmc_blk_get()
214 struct mmc_blk_data *md = container_of(ref, struct mmc_blk_data, kref); in mmc_blk_kref_release() local
217 devidx = mmc_get_devidx(md->disk); in mmc_blk_kref_release()
221 md->disk->private_data = NULL; in mmc_blk_kref_release()
224 put_disk(md->disk); in mmc_blk_kref_release()
225 kfree(md); in mmc_blk_kref_release()
228 static void mmc_blk_put(struct mmc_blk_data *md) in mmc_blk_put() argument
230 kref_put(&md->kref, mmc_blk_kref_release); in mmc_blk_put()
237 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in power_ro_lock_show() local
238 struct mmc_card *card = md->queue.card; in power_ro_lock_show()
248 mmc_blk_put(md); in power_ro_lock_show()
257 struct mmc_blk_data *md, *part_md; in power_ro_lock_store() local
268 md = mmc_blk_get(dev_to_disk(dev)); in power_ro_lock_store()
269 mq = &md->queue; in power_ro_lock_store()
285 md->disk->disk_name); in power_ro_lock_store()
286 set_disk_ro(md->disk, 1); in power_ro_lock_store()
288 list_for_each_entry(part_md, &md->part, part) in power_ro_lock_store()
295 mmc_blk_put(md); in power_ro_lock_store()
306 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in force_ro_show() local
310 md->read_only); in force_ro_show()
311 mmc_blk_put(md); in force_ro_show()
319 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in force_ro_store() local
327 set_disk_ro(dev_to_disk(dev), set || md->read_only); in force_ro_store()
330 mmc_blk_put(md); in force_ro_store()
346 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in mmc_disk_attrs_is_visible() local
350 (md->area_type & MMC_BLK_DATA_AREA_BOOT) && in mmc_disk_attrs_is_visible()
351 md->queue.card->ext_csd.boot_ro_lockable) { in mmc_disk_attrs_is_visible()
353 if (!(md->queue.card->ext_csd.boot_ro_lock & in mmc_disk_attrs_is_visible()
358 mmc_blk_put(md); in mmc_disk_attrs_is_visible()
374 struct mmc_blk_data *md = mmc_blk_get(disk); in mmc_blk_open() local
378 if (md) { in mmc_blk_open()
380 if ((mode & BLK_OPEN_WRITE) && md->read_only) { in mmc_blk_open()
381 mmc_blk_put(md); in mmc_blk_open()
392 struct mmc_blk_data *md = disk->private_data; in mmc_blk_release() local
395 mmc_blk_put(md); in mmc_blk_release()
480 static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md, in __mmc_blk_ioctl_cmd() argument
494 if (!card || !md || !idata) in __mmc_blk_ioctl_cmd()
514 target_part = md->part_type; in __mmc_blk_ioctl_cmd()
666 static int mmc_blk_ioctl_cmd(struct mmc_blk_data *md, in mmc_blk_ioctl_cmd() argument
683 card = md->queue.card; in mmc_blk_ioctl_cmd()
692 mq = &md->queue; in mmc_blk_ioctl_cmd()
716 static int mmc_blk_ioctl_multi_cmd(struct mmc_blk_data *md, in mmc_blk_ioctl_multi_cmd() argument
755 card = md->queue.card; in mmc_blk_ioctl_multi_cmd()
765 mq = &md->queue; in mmc_blk_ioctl_multi_cmd()
810 struct mmc_blk_data *md; in mmc_blk_ioctl() local
818 md = mmc_blk_get(bdev->bd_disk); in mmc_blk_ioctl()
819 if (!md) in mmc_blk_ioctl()
821 ret = mmc_blk_ioctl_cmd(md, in mmc_blk_ioctl()
824 mmc_blk_put(md); in mmc_blk_ioctl()
830 md = mmc_blk_get(bdev->bd_disk); in mmc_blk_ioctl()
831 if (!md) in mmc_blk_ioctl()
833 ret = mmc_blk_ioctl_multi_cmd(md, in mmc_blk_ioctl()
836 mmc_blk_put(md); in mmc_blk_ioctl()
854 struct mmc_blk_data *md; in mmc_blk_alternative_gpt_sector() local
857 md = mmc_blk_get(disk); in mmc_blk_alternative_gpt_sector()
858 if (!md) in mmc_blk_alternative_gpt_sector()
861 if (md->queue.card) in mmc_blk_alternative_gpt_sector()
862 ret = mmc_card_alternative_gpt_sector(md->queue.card, sector); in mmc_blk_alternative_gpt_sector()
866 mmc_blk_put(md); in mmc_blk_alternative_gpt_sector()
1049 static int mmc_blk_reset(struct mmc_blk_data *md, struct mmc_host *host, in mmc_blk_reset() argument
1055 if (md->reset_done & type) in mmc_blk_reset()
1058 md->reset_done |= type; in mmc_blk_reset()
1069 if (mmc_blk_part_switch(host->card, md->part_type)) in mmc_blk_reset()
1078 static inline void mmc_blk_reset_success(struct mmc_blk_data *md, int type) in mmc_blk_reset_success() argument
1080 md->reset_done &= ~type; in mmc_blk_reset_success()
1106 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_issue_drv_op() local
1131 ret = __mmc_blk_ioctl_cmd(card, md, idata, i); in mmc_blk_issue_drv_op()
1148 md->disk->disk_name, ret); in mmc_blk_issue_drv_op()
1164 md->disk->disk_name); in mmc_blk_issue_drv_op()
1175 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_issue_erase_rq() local
1176 struct mmc_card *card = md->queue.card; in mmc_blk_issue_erase_rq()
1202 } while (err == -EIO && !mmc_blk_reset(md, card->host, type)); in mmc_blk_issue_erase_rq()
1206 mmc_blk_reset_success(md, type); in mmc_blk_issue_erase_rq()
1218 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_issue_discard_rq() local
1219 struct mmc_card *card = md->queue.card; in mmc_blk_issue_discard_rq()
1231 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_issue_secdiscard_rq() local
1232 struct mmc_card *card = md->queue.card; in mmc_blk_issue_secdiscard_rq()
1291 if (err && !mmc_blk_reset(md, card->host, type)) in mmc_blk_issue_secdiscard_rq()
1294 mmc_blk_reset_success(md, type); in mmc_blk_issue_secdiscard_rq()
1301 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_issue_flush() local
1302 struct mmc_card *card = md->queue.card; in mmc_blk_issue_flush()
1390 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_data_prep() local
1391 struct mmc_card *card = md->queue.card; in mmc_blk_data_prep()
1402 (md->flags & MMC_BLK_REL_WR); in mmc_blk_data_prep()
1449 get_capacity(md->disk))) in mmc_blk_data_prep()
1683 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_rw_rq_prep() local
1729 if ((md->flags & MMC_BLK_CMD23) && mmc_op_multi(brq->cmd.opcode) && in mmc_blk_rw_rq_prep()
1895 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_mq_rw_recovery() local
1944 err && mmc_blk_reset(md, card->host, type)) { in mmc_blk_mq_rw_recovery()
1959 mmc_blk_reset(md, card->host, type)) in mmc_blk_mq_rw_recovery()
2411 struct mmc_blk_data *md = mq->blkdata; in mmc_blk_mq_issue_rq() local
2412 struct mmc_card *card = md->queue.card; in mmc_blk_mq_issue_rq()
2416 ret = mmc_blk_part_switch(card, md->part_type); in mmc_blk_mq_issue_rq()
2544 struct mmc_blk_data *md; in mmc_blk_alloc_req() local
2565 md = kzalloc(sizeof(*md), GFP_KERNEL); in mmc_blk_alloc_req()
2566 if (!md) { in mmc_blk_alloc_req()
2571 md->area_type = area_type; in mmc_blk_alloc_req()
2577 md->read_only = mmc_blk_readonly(card); in mmc_blk_alloc_req()
2580 md->flags |= MMC_BLK_CMD23; in mmc_blk_alloc_req()
2582 if (md->flags & MMC_BLK_CMD23 && in mmc_blk_alloc_req()
2585 md->flags |= MMC_BLK_REL_WR; in mmc_blk_alloc_req()
2591 md->disk = mmc_init_queue(&md->queue, card, features); in mmc_blk_alloc_req()
2592 if (IS_ERR(md->disk)) { in mmc_blk_alloc_req()
2593 ret = PTR_ERR(md->disk); in mmc_blk_alloc_req()
2597 INIT_LIST_HEAD(&md->part); in mmc_blk_alloc_req()
2598 INIT_LIST_HEAD(&md->rpmbs); in mmc_blk_alloc_req()
2599 kref_init(&md->kref); in mmc_blk_alloc_req()
2601 md->queue.blkdata = md; in mmc_blk_alloc_req()
2602 md->part_type = part_type; in mmc_blk_alloc_req()
2604 md->disk->major = MMC_BLOCK_MAJOR; in mmc_blk_alloc_req()
2605 md->disk->minors = perdev_minors; in mmc_blk_alloc_req()
2606 md->disk->first_minor = devidx * perdev_minors; in mmc_blk_alloc_req()
2607 md->disk->fops = &mmc_bdops; in mmc_blk_alloc_req()
2608 md->disk->private_data = md; in mmc_blk_alloc_req()
2609 md->parent = parent; in mmc_blk_alloc_req()
2610 set_disk_ro(md->disk, md->read_only || default_ro); in mmc_blk_alloc_req()
2612 md->disk->flags |= GENHD_FL_NO_PART; in mmc_blk_alloc_req()
2626 snprintf(md->disk->disk_name, sizeof(md->disk->disk_name), in mmc_blk_alloc_req()
2629 set_capacity(md->disk, size); in mmc_blk_alloc_req()
2634 md->disk->disk_name, mmc_card_id(card), mmc_card_name(card), in mmc_blk_alloc_req()
2635 cap_str, md->read_only ? " (ro)" : ""); in mmc_blk_alloc_req()
2639 dev_set_drvdata(&card->dev, md); in mmc_blk_alloc_req()
2641 ret = add_disk_fwnode(md->parent, md->disk, mmc_disk_attr_groups, in mmc_blk_alloc_req()
2645 return md; in mmc_blk_alloc_req()
2648 put_disk(md->disk); in mmc_blk_alloc_req()
2649 blk_mq_free_tag_set(&md->queue.tag_set); in mmc_blk_alloc_req()
2651 kfree(md); in mmc_blk_alloc_req()
2681 struct mmc_blk_data *md, in mmc_blk_alloc_part() argument
2690 part_md = mmc_blk_alloc_req(card, disk_to_dev(md->disk), size, default_ro, in mmc_blk_alloc_part()
2694 list_add(&part_md->part, &md->part); in mmc_blk_alloc_part()
2716 ret = mmc_blk_ioctl_cmd(rpmb->md, in mmc_rpmb_ioctl()
2721 ret = mmc_blk_ioctl_multi_cmd(rpmb->md, in mmc_rpmb_ioctl()
2777 mmc_blk_put(rpmb->md); in mmc_blk_rpmb_device_release()
2837 struct mmc_blk_data *md = rpmb->md; in mmc_route_rpmb_frames() local
2846 if (IS_ERR(md->queue.card)) in mmc_route_rpmb_frames()
2847 return PTR_ERR(md->queue.card); in mmc_route_rpmb_frames()
2908 rq = blk_mq_alloc_request(md->queue.queue, REQ_OP_DRV_OUT, 0); in mmc_route_rpmb_frames()
2930 struct mmc_blk_data *md, in mmc_blk_alloc_rpmb_part() argument
2963 mmc_blk_get(md->disk); in mmc_blk_alloc_rpmb_part()
2964 rpmb->md = md; in mmc_blk_alloc_rpmb_part()
2974 list_add(&rpmb->node, &md->rpmbs); in mmc_blk_alloc_rpmb_part()
3003 static int mmc_blk_alloc_parts(struct mmc_card *card, struct mmc_blk_data *md) in mmc_blk_alloc_parts() argument
3018 ret = mmc_blk_alloc_rpmb_part(card, md, in mmc_blk_alloc_parts()
3025 ret = mmc_blk_alloc_part(card, md, in mmc_blk_alloc_parts()
3039 static void mmc_blk_remove_req(struct mmc_blk_data *md) in mmc_blk_remove_req() argument
3045 del_gendisk(md->disk); in mmc_blk_remove_req()
3046 mmc_cleanup_queue(&md->queue); in mmc_blk_remove_req()
3047 mmc_blk_put(md); in mmc_blk_remove_req()
3051 struct mmc_blk_data *md) in mmc_blk_remove_parts() argument
3058 list_for_each_safe(pos, q, &md->rpmbs) { in mmc_blk_remove_parts()
3064 list_for_each_safe(pos, q, &md->part) { in mmc_blk_remove_parts()
3076 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in mmc_dbg_card_status_get() local
3077 struct mmc_queue *mq = &md->queue; in mmc_dbg_card_status_get()
3106 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in mmc_ext_csd_open() local
3107 struct mmc_queue *mq = &md->queue; in mmc_ext_csd_open()
3176 static void mmc_blk_add_debugfs(struct mmc_card *card, struct mmc_blk_data *md) in mmc_blk_add_debugfs() argument
3186 md->status_dentry = in mmc_blk_add_debugfs()
3193 md->ext_csd_dentry = in mmc_blk_add_debugfs()
3200 struct mmc_blk_data *md) in mmc_blk_remove_debugfs() argument
3205 debugfs_remove(md->status_dentry); in mmc_blk_remove_debugfs()
3206 md->status_dentry = NULL; in mmc_blk_remove_debugfs()
3208 debugfs_remove(md->ext_csd_dentry); in mmc_blk_remove_debugfs()
3209 md->ext_csd_dentry = NULL; in mmc_blk_remove_debugfs()
3214 static void mmc_blk_add_debugfs(struct mmc_card *card, struct mmc_blk_data *md) in mmc_blk_add_debugfs() argument
3219 struct mmc_blk_data *md) in mmc_blk_remove_debugfs() argument
3227 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in mmc_blk_rpmb_add() local
3250 list_for_each_entry(rpmb, &md->rpmbs, node) { in mmc_blk_rpmb_add()
3263 struct mmc_blk_data *md; in mmc_blk_probe() local
3282 md = mmc_blk_alloc(card); in mmc_blk_probe()
3283 if (IS_ERR(md)) { in mmc_blk_probe()
3284 ret = PTR_ERR(md); in mmc_blk_probe()
3288 ret = mmc_blk_alloc_parts(card, md); in mmc_blk_probe()
3293 mmc_blk_add_debugfs(card, md); in mmc_blk_probe()
3312 mmc_blk_remove_parts(card, md); in mmc_blk_probe()
3313 mmc_blk_remove_req(md); in mmc_blk_probe()
3321 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in mmc_blk_remove() local
3323 mmc_blk_remove_debugfs(card, md); in mmc_blk_remove()
3324 mmc_blk_remove_parts(card, md); in mmc_blk_remove()
3326 if (md->part_curr != md->part_type) { in mmc_blk_remove()
3328 mmc_blk_part_switch(card, md->part_type); in mmc_blk_remove()
3334 mmc_blk_remove_req(md); in mmc_blk_remove()
3341 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in _mmc_blk_suspend() local
3343 if (md) { in _mmc_blk_suspend()
3344 mmc_queue_suspend(&md->queue); in _mmc_blk_suspend()
3345 list_for_each_entry(part_md, &md->part, part) { in _mmc_blk_suspend()
3368 struct mmc_blk_data *md = dev_get_drvdata(dev); in mmc_blk_resume() local
3370 if (md) { in mmc_blk_resume()
3375 md->part_curr = md->part_type; in mmc_blk_resume()
3376 mmc_queue_resume(&md->queue); in mmc_blk_resume()
3377 list_for_each_entry(part_md, &md->part, part) { in mmc_blk_resume()