block.c (684da7628d93bbdcfba9081b917d99f29ad04c23) block.c (93f1c150cb0d043e1e8985db7824b4e2e1ac653f)
1/*
2 * Block driver for media (i.e., flash cards)
3 *
4 * Copyright 2002 Hewlett-Packard Company
5 * Copyright 2005-2008 Pierre Ossman
6 *
7 * Use consistent with the GNU GPL is permitted,
8 * provided that this copyright notice is

--- 37 unchanged lines hidden (view full) ---

46#include <linux/mmc/sd.h>
47
48#include <linux/uaccess.h>
49
50#include "queue.h"
51#include "block.h"
52#include "core.h"
53#include "card.h"
1/*
2 * Block driver for media (i.e., flash cards)
3 *
4 * Copyright 2002 Hewlett-Packard Company
5 * Copyright 2005-2008 Pierre Ossman
6 *
7 * Use consistent with the GNU GPL is permitted,
8 * provided that this copyright notice is

--- 37 unchanged lines hidden (view full) ---

46#include <linux/mmc/sd.h>
47
48#include <linux/uaccess.h>
49
50#include "queue.h"
51#include "block.h"
52#include "core.h"
53#include "card.h"
54#include "crypto.h"
54#include "host.h"
55#include "bus.h"
56#include "mmc_ops.h"
57#include "quirks.h"
58#include "sd_ops.h"
59
60MODULE_ALIAS("mmc:block");
61#ifdef MODULE_PARAM_PREFIX

--- 186 unchanged lines hidden (view full) ---

248
249 /* Dispatch locking to the block layer */
250 req = blk_get_request(mq->queue, REQ_OP_DRV_OUT, 0);
251 if (IS_ERR(req)) {
252 count = PTR_ERR(req);
253 goto out_put;
254 }
255 req_to_mmc_queue_req(req)->drv_op = MMC_DRV_OP_BOOT_WP;
55#include "host.h"
56#include "bus.h"
57#include "mmc_ops.h"
58#include "quirks.h"
59#include "sd_ops.h"
60
61MODULE_ALIAS("mmc:block");
62#ifdef MODULE_PARAM_PREFIX

--- 186 unchanged lines hidden (view full) ---

249
250 /* Dispatch locking to the block layer */
251 req = blk_get_request(mq->queue, REQ_OP_DRV_OUT, 0);
252 if (IS_ERR(req)) {
253 count = PTR_ERR(req);
254 goto out_put;
255 }
256 req_to_mmc_queue_req(req)->drv_op = MMC_DRV_OP_BOOT_WP;
256 blk_execute_rq(NULL, req, 0);
257 blk_execute_rq(mq->queue, NULL, req, 0);
257 ret = req_to_mmc_queue_req(req)->drv_op_result;
258 blk_put_request(req);
259
260 if (!ret) {
261 pr_info("%s: Locking boot partition ro until next power on\n",
262 md->disk->disk_name);
263 set_disk_ro(md->disk, 1);
264

--- 359 unchanged lines hidden (view full) ---

624 err = PTR_ERR(req);
625 goto cmd_done;
626 }
627 idatas[0] = idata;
628 req_to_mmc_queue_req(req)->drv_op =
629 rpmb ? MMC_DRV_OP_IOCTL_RPMB : MMC_DRV_OP_IOCTL;
630 req_to_mmc_queue_req(req)->drv_op_data = idatas;
631 req_to_mmc_queue_req(req)->ioc_count = 1;
258 ret = req_to_mmc_queue_req(req)->drv_op_result;
259 blk_put_request(req);
260
261 if (!ret) {
262 pr_info("%s: Locking boot partition ro until next power on\n",
263 md->disk->disk_name);
264 set_disk_ro(md->disk, 1);
265

--- 359 unchanged lines hidden (view full) ---

625 err = PTR_ERR(req);
626 goto cmd_done;
627 }
628 idatas[0] = idata;
629 req_to_mmc_queue_req(req)->drv_op =
630 rpmb ? MMC_DRV_OP_IOCTL_RPMB : MMC_DRV_OP_IOCTL;
631 req_to_mmc_queue_req(req)->drv_op_data = idatas;
632 req_to_mmc_queue_req(req)->ioc_count = 1;
632 blk_execute_rq(NULL, req, 0);
633 blk_execute_rq(mq->queue, NULL, req, 0);
633 ioc_err = req_to_mmc_queue_req(req)->drv_op_result;
634 err = mmc_blk_ioctl_copy_to_user(ic_ptr, idata);
635 blk_put_request(req);
636
637cmd_done:
638 kfree(idata->buf);
639 kfree(idata);
640 return ioc_err ? ioc_err : err;

--- 52 unchanged lines hidden (view full) ---

693 if (IS_ERR(req)) {
694 err = PTR_ERR(req);
695 goto cmd_err;
696 }
697 req_to_mmc_queue_req(req)->drv_op =
698 rpmb ? MMC_DRV_OP_IOCTL_RPMB : MMC_DRV_OP_IOCTL;
699 req_to_mmc_queue_req(req)->drv_op_data = idata;
700 req_to_mmc_queue_req(req)->ioc_count = num_of_cmds;
634 ioc_err = req_to_mmc_queue_req(req)->drv_op_result;
635 err = mmc_blk_ioctl_copy_to_user(ic_ptr, idata);
636 blk_put_request(req);
637
638cmd_done:
639 kfree(idata->buf);
640 kfree(idata);
641 return ioc_err ? ioc_err : err;

--- 52 unchanged lines hidden (view full) ---

694 if (IS_ERR(req)) {
695 err = PTR_ERR(req);
696 goto cmd_err;
697 }
698 req_to_mmc_queue_req(req)->drv_op =
699 rpmb ? MMC_DRV_OP_IOCTL_RPMB : MMC_DRV_OP_IOCTL;
700 req_to_mmc_queue_req(req)->drv_op_data = idata;
701 req_to_mmc_queue_req(req)->ioc_count = num_of_cmds;
701 blk_execute_rq(NULL, req, 0);
702 blk_execute_rq(mq->queue, NULL, req, 0);
702 ioc_err = req_to_mmc_queue_req(req)->drv_op_result;
703
704 /* copy to user if data and response */
705 for (i = 0; i < num_of_cmds && !err; i++)
706 err = mmc_blk_ioctl_copy_to_user(&cmds[i], idata[i]);
707
708 blk_put_request(req);
709

--- 532 unchanged lines hidden (view full) ---

1242 * are supported only on MMCs.
1243 */
1244 do_rel_wr = (req->cmd_flags & REQ_FUA) &&
1245 rq_data_dir(req) == WRITE &&
1246 (md->flags & MMC_BLK_REL_WR);
1247
1248 memset(brq, 0, sizeof(struct mmc_blk_request));
1249
703 ioc_err = req_to_mmc_queue_req(req)->drv_op_result;
704
705 /* copy to user if data and response */
706 for (i = 0; i < num_of_cmds && !err; i++)
707 err = mmc_blk_ioctl_copy_to_user(&cmds[i], idata[i]);
708
709 blk_put_request(req);
710

--- 532 unchanged lines hidden (view full) ---

1243 * are supported only on MMCs.
1244 */
1245 do_rel_wr = (req->cmd_flags & REQ_FUA) &&
1246 rq_data_dir(req) == WRITE &&
1247 (md->flags & MMC_BLK_REL_WR);
1248
1249 memset(brq, 0, sizeof(struct mmc_blk_request));
1250
1251 mmc_crypto_prepare_req(mqrq);
1252
1250 brq->mrq.data = &brq->data;
1251 brq->mrq.tag = req->tag;
1252
1253 brq->stop.opcode = MMC_STOP_TRANSMISSION;
1254 brq->stop.arg = 0;
1255
1256 if (rq_data_dir(req) == READ) {
1257 brq->data.flags = MMC_DATA_READ;

--- 1459 unchanged lines hidden (view full) ---

2717 struct request *req;
2718 int ret;
2719
2720 /* Ask the block layer about the card status */
2721 req = blk_get_request(mq->queue, REQ_OP_DRV_IN, 0);
2722 if (IS_ERR(req))
2723 return PTR_ERR(req);
2724 req_to_mmc_queue_req(req)->drv_op = MMC_DRV_OP_GET_CARD_STATUS;
1253 brq->mrq.data = &brq->data;
1254 brq->mrq.tag = req->tag;
1255
1256 brq->stop.opcode = MMC_STOP_TRANSMISSION;
1257 brq->stop.arg = 0;
1258
1259 if (rq_data_dir(req) == READ) {
1260 brq->data.flags = MMC_DATA_READ;

--- 1459 unchanged lines hidden (view full) ---

2720 struct request *req;
2721 int ret;
2722
2723 /* Ask the block layer about the card status */
2724 req = blk_get_request(mq->queue, REQ_OP_DRV_IN, 0);
2725 if (IS_ERR(req))
2726 return PTR_ERR(req);
2727 req_to_mmc_queue_req(req)->drv_op = MMC_DRV_OP_GET_CARD_STATUS;
2725 blk_execute_rq(NULL, req, 0);
2728 blk_execute_rq(mq->queue, NULL, req, 0);
2726 ret = req_to_mmc_queue_req(req)->drv_op_result;
2727 if (ret >= 0) {
2728 *val = ret;
2729 ret = 0;
2730 }
2731 blk_put_request(req);
2732
2733 return ret;

--- 22 unchanged lines hidden (view full) ---

2756 /* Ask the block layer for the EXT CSD */
2757 req = blk_get_request(mq->queue, REQ_OP_DRV_IN, 0);
2758 if (IS_ERR(req)) {
2759 err = PTR_ERR(req);
2760 goto out_free;
2761 }
2762 req_to_mmc_queue_req(req)->drv_op = MMC_DRV_OP_GET_EXT_CSD;
2763 req_to_mmc_queue_req(req)->drv_op_data = &ext_csd;
2729 ret = req_to_mmc_queue_req(req)->drv_op_result;
2730 if (ret >= 0) {
2731 *val = ret;
2732 ret = 0;
2733 }
2734 blk_put_request(req);
2735
2736 return ret;

--- 22 unchanged lines hidden (view full) ---

2759 /* Ask the block layer for the EXT CSD */
2760 req = blk_get_request(mq->queue, REQ_OP_DRV_IN, 0);
2761 if (IS_ERR(req)) {
2762 err = PTR_ERR(req);
2763 goto out_free;
2764 }
2765 req_to_mmc_queue_req(req)->drv_op = MMC_DRV_OP_GET_EXT_CSD;
2766 req_to_mmc_queue_req(req)->drv_op_data = &ext_csd;
2764 blk_execute_rq(NULL, req, 0);
2767 blk_execute_rq(mq->queue, NULL, req, 0);
2765 err = req_to_mmc_queue_req(req)->drv_op_result;
2766 blk_put_request(req);
2767 if (err) {
2768 pr_err("FAILED %d\n", err);
2769 goto out_free;
2770 }
2771
2772 for (i = 0; i < 512; i++)

--- 298 unchanged lines hidden ---
2768 err = req_to_mmc_queue_req(req)->drv_op_result;
2769 blk_put_request(req);
2770 if (err) {
2771 pr_err("FAILED %d\n", err);
2772 goto out_free;
2773 }
2774
2775 for (i = 0; i < 512; i++)

--- 298 unchanged lines hidden ---