Lines Matching refs:md

139 				      struct mmc_blk_data *md);
157 struct mmc_blk_data *md; in mmc_blk_get() local
160 md = disk->private_data; in mmc_blk_get()
161 if (md && md->usage == 0) in mmc_blk_get()
162 md = NULL; in mmc_blk_get()
163 if (md) in mmc_blk_get()
164 md->usage++; in mmc_blk_get()
167 return md; in mmc_blk_get()
180 static void mmc_blk_put(struct mmc_blk_data *md) in mmc_blk_put() argument
183 md->usage--; in mmc_blk_put()
184 if (md->usage == 0) { in mmc_blk_put()
185 int devidx = mmc_get_devidx(md->disk); in mmc_blk_put()
186 blk_cleanup_queue(md->queue.queue); in mmc_blk_put()
190 put_disk(md->disk); in mmc_blk_put()
191 kfree(md); in mmc_blk_put()
200 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in power_ro_lock_show() local
201 struct mmc_card *card = md->queue.card; in power_ro_lock_show()
211 mmc_blk_put(md); in power_ro_lock_show()
220 struct mmc_blk_data *md, *part_md; in power_ro_lock_store() local
230 md = mmc_blk_get(dev_to_disk(dev)); in power_ro_lock_store()
231 card = md->queue.card; in power_ro_lock_store()
240 …pr_err("%s: Locking boot partition ro until next power on failed: %d\n", md->disk->disk_name, ret); in power_ro_lock_store()
248 md->disk->disk_name); in power_ro_lock_store()
249 set_disk_ro(md->disk, 1); in power_ro_lock_store()
251 list_for_each_entry(part_md, &md->part, part) in power_ro_lock_store()
258 mmc_blk_put(md); in power_ro_lock_store()
266 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in force_ro_show() local
270 md->read_only); in force_ro_show()
271 mmc_blk_put(md); in force_ro_show()
280 struct mmc_blk_data *md = mmc_blk_get(dev_to_disk(dev)); in force_ro_store() local
287 set_disk_ro(dev_to_disk(dev), set || md->read_only); in force_ro_store()
290 mmc_blk_put(md); in force_ro_store()
296 struct mmc_blk_data *md = mmc_blk_get(bdev->bd_disk); in mmc_blk_open() local
300 if (md) { in mmc_blk_open()
301 if (md->usage == 2) in mmc_blk_open()
305 if ((mode & FMODE_WRITE) && md->read_only) { in mmc_blk_open()
306 mmc_blk_put(md); in mmc_blk_open()
317 struct mmc_blk_data *md = disk->private_data; in mmc_blk_release() local
320 mmc_blk_put(md); in mmc_blk_release()
451 struct mmc_blk_data *md; in mmc_blk_ioctl_cmd() local
473 md = mmc_blk_get(bdev->bd_disk); in mmc_blk_ioctl_cmd()
474 if (!md) { in mmc_blk_ioctl_cmd()
479 if (md->area_type & MMC_BLK_DATA_AREA_RPMB) in mmc_blk_ioctl_cmd()
482 card = md->queue.card; in mmc_blk_ioctl_cmd()
532 err = mmc_blk_part_switch(card, md); in mmc_blk_ioctl_cmd()
611 mmc_blk_put(md); in mmc_blk_ioctl_cmd()
647 struct mmc_blk_data *md) in mmc_blk_part_switch() argument
652 if (main_md->part_curr == md->part_type) in mmc_blk_part_switch()
659 part_config |= md->part_type; in mmc_blk_part_switch()
670 main_md->part_curr = md->part_type; in mmc_blk_part_switch()
1000 static int mmc_blk_reset(struct mmc_blk_data *md, struct mmc_host *host, in mmc_blk_reset() argument
1005 if (md->reset_done & type) in mmc_blk_reset()
1008 md->reset_done |= type; in mmc_blk_reset()
1017 part_err = mmc_blk_part_switch(host->card, md); in mmc_blk_reset()
1029 static inline void mmc_blk_reset_success(struct mmc_blk_data *md, int type) in mmc_blk_reset_success() argument
1031 md->reset_done &= ~type; in mmc_blk_reset_success()
1036 struct mmc_blk_data *md = mq->data; in mmc_access_rpmb() local
1040 if (md && md->part_type == EXT_CSD_PART_CONFIG_ACC_RPMB) in mmc_access_rpmb()
1048 struct mmc_blk_data *md = mq->data; in mmc_blk_issue_discard_rq() local
1049 struct mmc_card *card = md->queue.card; in mmc_blk_issue_discard_rq()
1080 if (err == -EIO && !mmc_blk_reset(md, card->host, type)) in mmc_blk_issue_discard_rq()
1083 mmc_blk_reset_success(md, type); in mmc_blk_issue_discard_rq()
1092 struct mmc_blk_data *md = mq->data; in mmc_blk_issue_secdiscard_rq() local
1093 struct mmc_card *card = md->queue.card; in mmc_blk_issue_secdiscard_rq()
1146 if (err && !mmc_blk_reset(md, card->host, type)) in mmc_blk_issue_secdiscard_rq()
1149 mmc_blk_reset_success(md, type); in mmc_blk_issue_secdiscard_rq()
1158 struct mmc_blk_data *md = mq->data; in mmc_blk_issue_flush() local
1159 struct mmc_card *card = md->queue.card; in mmc_blk_issue_flush()
1365 struct mmc_blk_data *md = mq->data; in mmc_blk_rw_rq_prep() local
1378 (md->flags & MMC_BLK_REL_WR); in mmc_blk_rw_rq_prep()
1480 if ((md->flags & MMC_BLK_CMD23) && mmc_op_multi(brq->cmd.opcode) && in mmc_blk_rw_rq_prep()
1542 struct mmc_blk_data *md = mq->data; in mmc_blk_prep_packed_list() local
1551 if (!(md->flags & MMC_BLK_PACKED_CMD)) in mmc_blk_prep_packed_list()
1562 (md->flags & MMC_BLK_REL_WR) && !en_rel_wr) in mmc_blk_prep_packed_list()
1611 (md->flags & MMC_BLK_REL_WR) && !en_rel_wr) in mmc_blk_prep_packed_list()
1652 struct mmc_blk_data *md = mq->data; in mmc_blk_packed_hdr_wrq_prep() local
1675 do_rel_wr = mmc_req_rel_wr(prq) && (md->flags & MMC_BLK_REL_WR); in mmc_blk_packed_hdr_wrq_prep()
1729 static int mmc_blk_cmd_err(struct mmc_blk_data *md, struct mmc_card *card, in mmc_blk_cmd_err() argument
1832 struct mmc_blk_data *md = mq->data; in mmc_blk_issue_rw_rq() local
1833 struct mmc_card *card = md->queue.card; in mmc_blk_issue_rw_rq()
1890 mmc_blk_reset_success(md, type); in mmc_blk_issue_rw_rq()
1914 ret = mmc_blk_cmd_err(md, card, brq, req, ret); in mmc_blk_issue_rw_rq()
1915 if (mmc_blk_reset(md, card->host, type)) in mmc_blk_issue_rw_rq()
1925 if (!mmc_blk_reset(md, card->host, type)) in mmc_blk_issue_rw_rq()
1931 err = mmc_blk_reset(md, card->host, type); in mmc_blk_issue_rw_rq()
2023 struct mmc_blk_data *md = mq->data; in mmc_blk_issue_rq() local
2024 struct mmc_card *card = md->queue.card; in mmc_blk_issue_rq()
2033 ret = mmc_blk_part_switch(card, md); in mmc_blk_issue_rq()
2091 struct mmc_blk_data *md; in mmc_blk_alloc_req() local
2099 md = kzalloc(sizeof(struct mmc_blk_data), GFP_KERNEL); in mmc_blk_alloc_req()
2100 if (!md) { in mmc_blk_alloc_req()
2112 md->name_idx = find_first_zero_bit(name_use, max_devices); in mmc_blk_alloc_req()
2113 __set_bit(md->name_idx, name_use); in mmc_blk_alloc_req()
2115 md->name_idx = ((struct mmc_blk_data *) in mmc_blk_alloc_req()
2118 md->area_type = area_type; in mmc_blk_alloc_req()
2124 md->read_only = mmc_blk_readonly(card); in mmc_blk_alloc_req()
2126 md->disk = alloc_disk(perdev_minors); in mmc_blk_alloc_req()
2127 if (md->disk == NULL) { in mmc_blk_alloc_req()
2132 spin_lock_init(&md->lock); in mmc_blk_alloc_req()
2133 INIT_LIST_HEAD(&md->part); in mmc_blk_alloc_req()
2134 md->usage = 1; in mmc_blk_alloc_req()
2136 ret = mmc_init_queue(&md->queue, card, &md->lock, subname); in mmc_blk_alloc_req()
2140 md->queue.issue_fn = mmc_blk_issue_rq; in mmc_blk_alloc_req()
2141 md->queue.data = md; in mmc_blk_alloc_req()
2143 md->disk->major = MMC_BLOCK_MAJOR; in mmc_blk_alloc_req()
2144 md->disk->first_minor = devidx * perdev_minors; in mmc_blk_alloc_req()
2145 md->disk->fops = &mmc_bdops; in mmc_blk_alloc_req()
2146 md->disk->private_data = md; in mmc_blk_alloc_req()
2147 md->disk->queue = md->queue.queue; in mmc_blk_alloc_req()
2148 md->disk->driverfs_dev = parent; in mmc_blk_alloc_req()
2149 set_disk_ro(md->disk, md->read_only || default_ro); in mmc_blk_alloc_req()
2151 md->disk->flags |= GENHD_FL_NO_PART_SCAN; in mmc_blk_alloc_req()
2165 snprintf(md->disk->disk_name, sizeof(md->disk->disk_name), in mmc_blk_alloc_req()
2166 "mmcblk%u%s", md->name_idx, subname ? subname : ""); in mmc_blk_alloc_req()
2169 blk_queue_logical_block_size(md->queue.queue, in mmc_blk_alloc_req()
2172 blk_queue_logical_block_size(md->queue.queue, 512); in mmc_blk_alloc_req()
2174 set_capacity(md->disk, size); in mmc_blk_alloc_req()
2180 md->flags |= MMC_BLK_CMD23; in mmc_blk_alloc_req()
2184 md->flags & MMC_BLK_CMD23 && in mmc_blk_alloc_req()
2187 md->flags |= MMC_BLK_REL_WR; in mmc_blk_alloc_req()
2188 blk_queue_flush(md->queue.queue, REQ_FLUSH | REQ_FUA); in mmc_blk_alloc_req()
2193 (md->flags & MMC_BLK_CMD23) && in mmc_blk_alloc_req()
2195 if (!mmc_packed_init(&md->queue, card)) in mmc_blk_alloc_req()
2196 md->flags |= MMC_BLK_PACKED_CMD; in mmc_blk_alloc_req()
2199 return md; in mmc_blk_alloc_req()
2202 put_disk(md->disk); in mmc_blk_alloc_req()
2204 kfree(md); in mmc_blk_alloc_req()
2232 struct mmc_blk_data *md, in mmc_blk_alloc_part() argument
2242 part_md = mmc_blk_alloc_req(card, disk_to_dev(md->disk), size, default_ro, in mmc_blk_alloc_part()
2247 list_add(&part_md->part, &md->part); in mmc_blk_alloc_part()
2263 static int mmc_blk_alloc_parts(struct mmc_card *card, struct mmc_blk_data *md) in mmc_blk_alloc_parts() argument
2272 ret = mmc_blk_alloc_part(card, md, in mmc_blk_alloc_parts()
2286 static void mmc_blk_remove_req(struct mmc_blk_data *md) in mmc_blk_remove_req() argument
2290 if (md) { in mmc_blk_remove_req()
2296 card = md->queue.card; in mmc_blk_remove_req()
2297 mmc_cleanup_queue(&md->queue); in mmc_blk_remove_req()
2298 if (md->flags & MMC_BLK_PACKED_CMD) in mmc_blk_remove_req()
2299 mmc_packed_clean(&md->queue); in mmc_blk_remove_req()
2300 if (md->disk->flags & GENHD_FL_UP) { in mmc_blk_remove_req()
2301 device_remove_file(disk_to_dev(md->disk), &md->force_ro); in mmc_blk_remove_req()
2302 if ((md->area_type & MMC_BLK_DATA_AREA_BOOT) && in mmc_blk_remove_req()
2304 device_remove_file(disk_to_dev(md->disk), in mmc_blk_remove_req()
2305 &md->power_ro_lock); in mmc_blk_remove_req()
2307 del_gendisk(md->disk); in mmc_blk_remove_req()
2309 mmc_blk_put(md); in mmc_blk_remove_req()
2314 struct mmc_blk_data *md) in mmc_blk_remove_parts() argument
2319 __clear_bit(md->name_idx, name_use); in mmc_blk_remove_parts()
2320 list_for_each_safe(pos, q, &md->part) { in mmc_blk_remove_parts()
2327 static int mmc_add_disk(struct mmc_blk_data *md) in mmc_add_disk() argument
2330 struct mmc_card *card = md->queue.card; in mmc_add_disk()
2332 add_disk(md->disk); in mmc_add_disk()
2333 md->force_ro.show = force_ro_show; in mmc_add_disk()
2334 md->force_ro.store = force_ro_store; in mmc_add_disk()
2335 sysfs_attr_init(&md->force_ro.attr); in mmc_add_disk()
2336 md->force_ro.attr.name = "force_ro"; in mmc_add_disk()
2337 md->force_ro.attr.mode = S_IRUGO | S_IWUSR; in mmc_add_disk()
2338 ret = device_create_file(disk_to_dev(md->disk), &md->force_ro); in mmc_add_disk()
2342 if ((md->area_type & MMC_BLK_DATA_AREA_BOOT) && in mmc_add_disk()
2351 md->power_ro_lock.show = power_ro_lock_show; in mmc_add_disk()
2352 md->power_ro_lock.store = power_ro_lock_store; in mmc_add_disk()
2353 sysfs_attr_init(&md->power_ro_lock.attr); in mmc_add_disk()
2354 md->power_ro_lock.attr.mode = mode; in mmc_add_disk()
2355 md->power_ro_lock.attr.name = in mmc_add_disk()
2357 ret = device_create_file(disk_to_dev(md->disk), in mmc_add_disk()
2358 &md->power_ro_lock); in mmc_add_disk()
2365 device_remove_file(disk_to_dev(md->disk), &md->force_ro); in mmc_add_disk()
2367 del_gendisk(md->disk); in mmc_add_disk()
2440 struct mmc_blk_data *md, *part_md; in mmc_blk_probe() local
2451 md = mmc_blk_alloc(card); in mmc_blk_probe()
2452 if (IS_ERR(md)) in mmc_blk_probe()
2453 return PTR_ERR(md); in mmc_blk_probe()
2455 string_get_size((u64)get_capacity(md->disk), 512, STRING_UNITS_2, in mmc_blk_probe()
2458 md->disk->disk_name, mmc_card_id(card), mmc_card_name(card), in mmc_blk_probe()
2459 cap_str, md->read_only ? "(ro)" : ""); in mmc_blk_probe()
2461 if (mmc_blk_alloc_parts(card, md)) in mmc_blk_probe()
2464 dev_set_drvdata(&card->dev, md); in mmc_blk_probe()
2466 if (mmc_add_disk(md)) in mmc_blk_probe()
2469 list_for_each_entry(part_md, &md->part, part) { in mmc_blk_probe()
2489 mmc_blk_remove_parts(card, md); in mmc_blk_probe()
2490 mmc_blk_remove_req(md); in mmc_blk_probe()
2496 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in mmc_blk_remove() local
2498 mmc_blk_remove_parts(card, md); in mmc_blk_remove()
2501 mmc_blk_part_switch(card, md); in mmc_blk_remove()
2506 mmc_blk_remove_req(md); in mmc_blk_remove()
2513 struct mmc_blk_data *md = dev_get_drvdata(&card->dev); in _mmc_blk_suspend() local
2515 if (md) { in _mmc_blk_suspend()
2516 mmc_queue_suspend(&md->queue); in _mmc_blk_suspend()
2517 list_for_each_entry(part_md, &md->part, part) { in _mmc_blk_suspend()
2540 struct mmc_blk_data *md = dev_get_drvdata(dev); in mmc_blk_resume() local
2542 if (md) { in mmc_blk_resume()
2547 md->part_curr = md->part_type; in mmc_blk_resume()
2548 mmc_queue_resume(&md->queue); in mmc_blk_resume()
2549 list_for_each_entry(part_md, &md->part, part) { in mmc_blk_resume()