Lines Matching refs:md

141 				      struct mmc_blk_data *md);
159 struct mmc_blk_data *md; in mmc_blk_get() local
162 md = disk->private_data; in mmc_blk_get()
163 if (md && md->usage == 0) in mmc_blk_get()
164 md = NULL; in mmc_blk_get()
165 if (md) in mmc_blk_get()
166 md->usage++; in mmc_blk_get()
169 return md; in mmc_blk_get()
182 static void mmc_blk_put(struct mmc_blk_data *md) in mmc_blk_put() argument
185 md->usage--; in mmc_blk_put()
186 if (md->usage == 0) { in mmc_blk_put()
187 int devidx = mmc_get_devidx(md->disk); in mmc_blk_put()
188 blk_cleanup_queue(md->queue.queue); in mmc_blk_put()
192 put_disk(md->disk); in mmc_blk_put()
193 kfree(md); in mmc_blk_put()
202 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in power_ro_lock_show() local
203 struct mmc_card *card = md->queue.card; in power_ro_lock_show()
213 mmc_blk_put(md); in power_ro_lock_show()
222 struct mmc_blk_data *md, *part_md; in power_ro_lock_store() local
232 md = mmc_blk_get(dev_to_disk(dev)); in power_ro_lock_store()
233 card = md->queue.card; in power_ro_lock_store()
242 …pr_err("%s: Locking boot partition ro until next power on failed: %d\n", md->disk->disk_name, ret); in power_ro_lock_store()
250 md->disk->disk_name); in power_ro_lock_store()
251 set_disk_ro(md->disk, 1); in power_ro_lock_store()
253 list_for_each_entry(part_md, &md->part, part) in power_ro_lock_store()
260 mmc_blk_put(md); in power_ro_lock_store()
268 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in force_ro_show() local
272 md->read_only); in force_ro_show()
273 mmc_blk_put(md); in force_ro_show()
282 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in force_ro_store() local
289 set_disk_ro(dev_to_disk(dev), set || md->read_only); in force_ro_store()
292 mmc_blk_put(md); in force_ro_store()
298 struct mmc_blk_data *md = mmc_blk_get(bdev->bd_disk); in mmc_blk_open() local
302 if (md) { in mmc_blk_open()
303 if (md->usage == 2) in mmc_blk_open()
307 if ((mode & FMODE_WRITE) && md->read_only) { in mmc_blk_open()
308 mmc_blk_put(md); in mmc_blk_open()
319 struct mmc_blk_data *md = disk->private_data; in mmc_blk_release() local
322 mmc_blk_put(md); in mmc_blk_release()
467 static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md, in __mmc_blk_ioctl_cmd() argument
478 if (!card || !md || !idata) in __mmc_blk_ioctl_cmd()
481 if (md->area_type & MMC_BLK_DATA_AREA_RPMB) in __mmc_blk_ioctl_cmd()
526 err = mmc_blk_part_switch(card, md); in __mmc_blk_ioctl_cmd()
595 struct mmc_blk_data *md; in mmc_blk_ioctl_cmd() local
611 md = mmc_blk_get(bdev->bd_disk); in mmc_blk_ioctl_cmd()
612 if (!md) { in mmc_blk_ioctl_cmd()
617 card = md->queue.card; in mmc_blk_ioctl_cmd()
625 ioc_err = __mmc_blk_ioctl_cmd(card, md, idata); in mmc_blk_ioctl_cmd()
632 mmc_blk_put(md); in mmc_blk_ioctl_cmd()
645 struct mmc_blk_data *md; in mmc_blk_ioctl_multi_cmd() local
677 md = mmc_blk_get(bdev->bd_disk); in mmc_blk_ioctl_multi_cmd()
678 if (!md) in mmc_blk_ioctl_multi_cmd()
681 card = md->queue.card; in mmc_blk_ioctl_multi_cmd()
690 ioc_err = __mmc_blk_ioctl_cmd(card, md, idata[i]); in mmc_blk_ioctl_multi_cmd()
699 mmc_blk_put(md); in mmc_blk_ioctl_multi_cmd()
744 struct mmc_blk_data *md) in mmc_blk_part_switch() argument
749 if (main_md->part_curr == md->part_type) in mmc_blk_part_switch()
756 part_config |= md->part_type; in mmc_blk_part_switch()
767 main_md->part_curr = md->part_type; in mmc_blk_part_switch()
1100 static int mmc_blk_reset(struct mmc_blk_data *md, struct mmc_host *host, in mmc_blk_reset() argument
1105 if (md->reset_done & type) in mmc_blk_reset()
1108 md->reset_done |= type; in mmc_blk_reset()
1117 part_err = mmc_blk_part_switch(host->card, md); in mmc_blk_reset()
1129 static inline void mmc_blk_reset_success(struct mmc_blk_data *md, int type) in mmc_blk_reset_success() argument
1131 md->reset_done &= ~type; in mmc_blk_reset_success()
1136 struct mmc_blk_data *md = mq->data; in mmc_access_rpmb() local
1140 if (md && md->part_type == EXT_CSD_PART_CONFIG_ACC_RPMB) in mmc_access_rpmb()
1148 struct mmc_blk_data *md = mq->data; in mmc_blk_issue_discard_rq() local
1149 struct mmc_card *card = md->queue.card; in mmc_blk_issue_discard_rq()
1180 if (err == -EIO && !mmc_blk_reset(md, card->host, type)) in mmc_blk_issue_discard_rq()
1183 mmc_blk_reset_success(md, type); in mmc_blk_issue_discard_rq()
1192 struct mmc_blk_data *md = mq->data; in mmc_blk_issue_secdiscard_rq() local
1193 struct mmc_card *card = md->queue.card; in mmc_blk_issue_secdiscard_rq()
1246 if (err && !mmc_blk_reset(md, card->host, type)) in mmc_blk_issue_secdiscard_rq()
1249 mmc_blk_reset_success(md, type); in mmc_blk_issue_secdiscard_rq()
1258 struct mmc_blk_data *md = mq->data; in mmc_blk_issue_flush() local
1259 struct mmc_card *card = md->queue.card; in mmc_blk_issue_flush()
1472 struct mmc_blk_data *md = mq->data; in mmc_blk_rw_rq_prep() local
1481 (md->flags & MMC_BLK_REL_WR); in mmc_blk_rw_rq_prep()
1583 if ((md->flags & MMC_BLK_CMD23) && mmc_op_multi(brq->cmd.opcode) && in mmc_blk_rw_rq_prep()
1645 struct mmc_blk_data *md = mq->data; in mmc_blk_prep_packed_list() local
1654 if (!(md->flags & MMC_BLK_PACKED_CMD)) in mmc_blk_prep_packed_list()
1665 (md->flags & MMC_BLK_REL_WR) && !en_rel_wr) in mmc_blk_prep_packed_list()
1714 (md->flags & MMC_BLK_REL_WR) && !en_rel_wr) in mmc_blk_prep_packed_list()
1755 struct mmc_blk_data *md = mq->data; in mmc_blk_packed_hdr_wrq_prep() local
1778 do_rel_wr = mmc_req_rel_wr(prq) && (md->flags & MMC_BLK_REL_WR); in mmc_blk_packed_hdr_wrq_prep()
1832 static int mmc_blk_cmd_err(struct mmc_blk_data *md, struct mmc_card *card, in mmc_blk_cmd_err() argument
1935 struct mmc_blk_data *md = mq->data; in mmc_blk_issue_rw_rq() local
1936 struct mmc_card *card = md->queue.card; in mmc_blk_issue_rw_rq()
1993 mmc_blk_reset_success(md, type); in mmc_blk_issue_rw_rq()
2017 ret = mmc_blk_cmd_err(md, card, brq, req, ret); in mmc_blk_issue_rw_rq()
2018 if (mmc_blk_reset(md, card->host, type)) in mmc_blk_issue_rw_rq()
2029 if (!mmc_blk_reset(md, card->host, type)) in mmc_blk_issue_rw_rq()
2035 err = mmc_blk_reset(md, card->host, type); in mmc_blk_issue_rw_rq()
2128 struct mmc_blk_data *md = mq->data; in mmc_blk_issue_rq() local
2129 struct mmc_card *card = md->queue.card; in mmc_blk_issue_rq()
2138 ret = mmc_blk_part_switch(card, md); in mmc_blk_issue_rq()
2196 struct mmc_blk_data *md; in mmc_blk_alloc_req() local
2204 md = kzalloc(sizeof(struct mmc_blk_data), GFP_KERNEL); in mmc_blk_alloc_req()
2205 if (!md) { in mmc_blk_alloc_req()
2217 md->name_idx = find_first_zero_bit(name_use, max_devices); in mmc_blk_alloc_req()
2218 __set_bit(md->name_idx, name_use); in mmc_blk_alloc_req()
2220 md->name_idx = ((struct mmc_blk_data *) in mmc_blk_alloc_req()
2223 md->area_type = area_type; in mmc_blk_alloc_req()
2229 md->read_only = mmc_blk_readonly(card); in mmc_blk_alloc_req()
2231 md->disk = alloc_disk(perdev_minors); in mmc_blk_alloc_req()
2232 if (md->disk == NULL) { in mmc_blk_alloc_req()
2237 spin_lock_init(&md->lock); in mmc_blk_alloc_req()
2238 INIT_LIST_HEAD(&md->part); in mmc_blk_alloc_req()
2239 md->usage = 1; in mmc_blk_alloc_req()
2241 ret = mmc_init_queue(&md->queue, card, &md->lock, subname); in mmc_blk_alloc_req()
2245 md->queue.issue_fn = mmc_blk_issue_rq; in mmc_blk_alloc_req()
2246 md->queue.data = md; in mmc_blk_alloc_req()
2248 md->disk->major = MMC_BLOCK_MAJOR; in mmc_blk_alloc_req()
2249 md->disk->first_minor = devidx * perdev_minors; in mmc_blk_alloc_req()
2250 md->disk->fops = &mmc_bdops; in mmc_blk_alloc_req()
2251 md->disk->private_data = md; in mmc_blk_alloc_req()
2252 md->disk->queue = md->queue.queue; in mmc_blk_alloc_req()
2253 md->disk->driverfs_dev = parent; in mmc_blk_alloc_req()
2254 set_disk_ro(md->disk, md->read_only || default_ro); in mmc_blk_alloc_req()
2256 md->disk->flags |= GENHD_FL_NO_PART_SCAN; in mmc_blk_alloc_req()
2270 snprintf(md->disk->disk_name, sizeof(md->disk->disk_name), in mmc_blk_alloc_req()
2271 "mmcblk%u%s", md->name_idx, subname ? subname : ""); in mmc_blk_alloc_req()
2274 blk_queue_logical_block_size(md->queue.queue, in mmc_blk_alloc_req()
2277 blk_queue_logical_block_size(md->queue.queue, 512); in mmc_blk_alloc_req()
2279 set_capacity(md->disk, size); in mmc_blk_alloc_req()
2285 md->flags |= MMC_BLK_CMD23; in mmc_blk_alloc_req()
2289 md->flags & MMC_BLK_CMD23 && in mmc_blk_alloc_req()
2292 md->flags |= MMC_BLK_REL_WR; in mmc_blk_alloc_req()
2293 blk_queue_flush(md->queue.queue, REQ_FLUSH | REQ_FUA); in mmc_blk_alloc_req()
2298 (md->flags & MMC_BLK_CMD23) && in mmc_blk_alloc_req()
2300 if (!mmc_packed_init(&md->queue, card)) in mmc_blk_alloc_req()
2301 md->flags |= MMC_BLK_PACKED_CMD; in mmc_blk_alloc_req()
2304 return md; in mmc_blk_alloc_req()
2307 put_disk(md->disk); in mmc_blk_alloc_req()
2309 kfree(md); in mmc_blk_alloc_req()
2338 struct mmc_blk_data *md, in mmc_blk_alloc_part() argument
2348 part_md = mmc_blk_alloc_req(card, disk_to_dev(md->disk), size, default_ro, in mmc_blk_alloc_part()
2353 list_add(&part_md->part, &md->part); in mmc_blk_alloc_part()
2369 static int mmc_blk_alloc_parts(struct mmc_card *card, struct mmc_blk_data *md) in mmc_blk_alloc_parts() argument
2378 ret = mmc_blk_alloc_part(card, md, in mmc_blk_alloc_parts()
2392 static void mmc_blk_remove_req(struct mmc_blk_data *md) in mmc_blk_remove_req() argument
2396 if (md) { in mmc_blk_remove_req()
2402 card = md->queue.card; in mmc_blk_remove_req()
2403 mmc_cleanup_queue(&md->queue); in mmc_blk_remove_req()
2404 if (md->flags & MMC_BLK_PACKED_CMD) in mmc_blk_remove_req()
2405 mmc_packed_clean(&md->queue); in mmc_blk_remove_req()
2406 if (md->disk->flags & GENHD_FL_UP) { in mmc_blk_remove_req()
2407 device_remove_file(disk_to_dev(md->disk), &md->force_ro); in mmc_blk_remove_req()
2408 if ((md->area_type & MMC_BLK_DATA_AREA_BOOT) && in mmc_blk_remove_req()
2410 device_remove_file(disk_to_dev(md->disk), in mmc_blk_remove_req()
2411 &md->power_ro_lock); in mmc_blk_remove_req()
2413 del_gendisk(md->disk); in mmc_blk_remove_req()
2415 mmc_blk_put(md); in mmc_blk_remove_req()
2420 struct mmc_blk_data *md) in mmc_blk_remove_parts() argument
2425 __clear_bit(md->name_idx, name_use); in mmc_blk_remove_parts()
2426 list_for_each_safe(pos, q, &md->part) { in mmc_blk_remove_parts()
2433 static int mmc_add_disk(struct mmc_blk_data *md) in mmc_add_disk() argument
2436 struct mmc_card *card = md->queue.card; in mmc_add_disk()
2438 add_disk(md->disk); in mmc_add_disk()
2439 md->force_ro.show = force_ro_show; in mmc_add_disk()
2440 md->force_ro.store = force_ro_store; in mmc_add_disk()
2441 sysfs_attr_init(&md->force_ro.attr); in mmc_add_disk()
2442 md->force_ro.attr.name = "force_ro"; in mmc_add_disk()
2443 md->force_ro.attr.mode = S_IRUGO | S_IWUSR; in mmc_add_disk()
2444 ret = device_create_file(disk_to_dev(md->disk), &md->force_ro); in mmc_add_disk()
2448 if ((md->area_type & MMC_BLK_DATA_AREA_BOOT) && in mmc_add_disk()
2457 md->power_ro_lock.show = power_ro_lock_show; in mmc_add_disk()
2458 md->power_ro_lock.store = power_ro_lock_store; in mmc_add_disk()
2459 sysfs_attr_init(&md->power_ro_lock.attr); in mmc_add_disk()
2460 md->power_ro_lock.attr.mode = mode; in mmc_add_disk()
2461 md->power_ro_lock.attr.name = in mmc_add_disk()
2463 ret = device_create_file(disk_to_dev(md->disk), in mmc_add_disk()
2464 &md->power_ro_lock); in mmc_add_disk()
2471 device_remove_file(disk_to_dev(md->disk), &md->force_ro); in mmc_add_disk()
2473 del_gendisk(md->disk); in mmc_add_disk()
2560 struct mmc_blk_data *md, *part_md; in mmc_blk_probe() local
2571 md = mmc_blk_alloc(card); in mmc_blk_probe()
2572 if (IS_ERR(md)) in mmc_blk_probe()
2573 return PTR_ERR(md); in mmc_blk_probe()
2575 string_get_size((u64)get_capacity(md->disk), 512, STRING_UNITS_2, in mmc_blk_probe()
2578 md->disk->disk_name, mmc_card_id(card), mmc_card_name(card), in mmc_blk_probe()
2579 cap_str, md->read_only ? "(ro)" : ""); in mmc_blk_probe()
2581 if (mmc_blk_alloc_parts(card, md)) in mmc_blk_probe()
2584 dev_set_drvdata(&card->dev, md); in mmc_blk_probe()
2586 if (mmc_add_disk(md)) in mmc_blk_probe()
2589 list_for_each_entry(part_md, &md->part, part) { in mmc_blk_probe()
2609 mmc_blk_remove_parts(card, md); in mmc_blk_probe()
2610 mmc_blk_remove_req(md); in mmc_blk_probe()
2616 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in mmc_blk_remove() local
2618 mmc_blk_remove_parts(card, md); in mmc_blk_remove()
2621 mmc_blk_part_switch(card, md); in mmc_blk_remove()
2626 mmc_blk_remove_req(md); in mmc_blk_remove()
2633 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in _mmc_blk_suspend() local
2635 if (md) { in _mmc_blk_suspend()
2636 mmc_queue_suspend(&md->queue); in _mmc_blk_suspend()
2637 list_for_each_entry(part_md, &md->part, part) { in _mmc_blk_suspend()
2660 struct mmc_blk_data *md = dev_get_drvdata(dev); in mmc_blk_resume() local
2662 if (md) { in mmc_blk_resume()
2667 md->part_curr = md->part_type; in mmc_blk_resume()
2668 mmc_queue_resume(&md->queue); in mmc_blk_resume()
2669 list_for_each_entry(part_md, &md->part, part) { in mmc_blk_resume()