Lines Matching refs:idata

460 	struct mmc_blk_ioc_data *idata;  in mmc_blk_ioctl_copy_from_user()  local
463 idata = kzalloc(sizeof(*idata), GFP_KERNEL); in mmc_blk_ioctl_copy_from_user()
464 if (!idata) { in mmc_blk_ioctl_copy_from_user()
469 if (copy_from_user(&idata->ic, user, sizeof(idata->ic))) { in mmc_blk_ioctl_copy_from_user()
474 idata->buf_bytes = (u64) idata->ic.blksz * idata->ic.blocks; in mmc_blk_ioctl_copy_from_user()
475 if (idata->buf_bytes > MMC_IOC_MAX_BYTES) { in mmc_blk_ioctl_copy_from_user()
480 if (!idata->buf_bytes) { in mmc_blk_ioctl_copy_from_user()
481 idata->buf = NULL; in mmc_blk_ioctl_copy_from_user()
482 return idata; in mmc_blk_ioctl_copy_from_user()
485 idata->buf = memdup_user((void __user *)(unsigned long) in mmc_blk_ioctl_copy_from_user()
486 idata->ic.data_ptr, idata->buf_bytes); in mmc_blk_ioctl_copy_from_user()
487 if (IS_ERR(idata->buf)) { in mmc_blk_ioctl_copy_from_user()
488 err = PTR_ERR(idata->buf); in mmc_blk_ioctl_copy_from_user()
492 return idata; in mmc_blk_ioctl_copy_from_user()
495 kfree(idata); in mmc_blk_ioctl_copy_from_user()
501 struct mmc_blk_ioc_data *idata) in mmc_blk_ioctl_copy_to_user() argument
503 struct mmc_ioc_cmd *ic = &idata->ic; in mmc_blk_ioctl_copy_to_user()
509 if (!idata->ic.write_flag) { in mmc_blk_ioctl_copy_to_user()
511 idata->buf, idata->buf_bytes)) in mmc_blk_ioctl_copy_to_user()
529 struct mmc_blk_ioc_data *idata = idatas[i]; in __mmc_blk_ioctl_cmd() local
532 if (!card || !md || !idata) in __mmc_blk_ioctl_cmd()
535 if (idata->flags & MMC_BLK_IOC_DROP) in __mmc_blk_ioctl_cmd()
538 if (idata->flags & MMC_BLK_IOC_SBC && i > 0) in __mmc_blk_ioctl_cmd()
547 if (idata->rpmb) { in __mmc_blk_ioctl_cmd()
549 target_part = idata->rpmb->part_index; in __mmc_blk_ioctl_cmd()
555 cmd.opcode = idata->ic.opcode; in __mmc_blk_ioctl_cmd()
556 cmd.arg = idata->ic.arg; in __mmc_blk_ioctl_cmd()
557 cmd.flags = idata->ic.flags; in __mmc_blk_ioctl_cmd()
559 if (idata->buf_bytes) { in __mmc_blk_ioctl_cmd()
562 data.blksz = idata->ic.blksz; in __mmc_blk_ioctl_cmd()
563 data.blocks = idata->ic.blocks; in __mmc_blk_ioctl_cmd()
565 sg_init_one(data.sg, idata->buf, idata->buf_bytes); in __mmc_blk_ioctl_cmd()
567 if (idata->ic.write_flag) in __mmc_blk_ioctl_cmd()
576 if (idata->ic.data_timeout_ns) in __mmc_blk_ioctl_cmd()
577 data.timeout_ns = idata->ic.data_timeout_ns; in __mmc_blk_ioctl_cmd()
588 if (idata->ic.is_acmd) { in __mmc_blk_ioctl_cmd()
594 if (idata->rpmb || prev_idata) { in __mmc_blk_ioctl_cmd()
601 sbc.arg = data.blocks | (idata->ic.write_flag & BIT(31)); in __mmc_blk_ioctl_cmd()
610 return mmc_sanitize(card, idata->ic.cmd_timeout_ms); in __mmc_blk_ioctl_cmd()
613 busy_timeout_ms = idata->ic.cmd_timeout_ms ? : MMC_BLK_TIMEOUT_MS; in __mmc_blk_ioctl_cmd()
619 memcpy(&idata->ic.response, cmd.resp, sizeof(cmd.resp)); in __mmc_blk_ioctl_cmd()
675 if (idata->ic.postsleep_min_us) in __mmc_blk_ioctl_cmd()
676 usleep_range(idata->ic.postsleep_min_us, idata->ic.postsleep_max_us); in __mmc_blk_ioctl_cmd()
679 if (idata->ic.write_flag || r1b_resp || cmd.flags & MMC_RSP_SPI_BUSY) in __mmc_blk_ioctl_cmd()
690 if (idata->rpmb || idata->ic.write_flag || r1b_resp) { in __mmc_blk_ioctl_cmd()
698 idata->ic.response[0] = cb_data.status; in __mmc_blk_ioctl_cmd()
708 struct mmc_blk_ioc_data *idata; in mmc_blk_ioctl_cmd() local
715 idata = mmc_blk_ioctl_copy_from_user(ic_ptr); in mmc_blk_ioctl_cmd()
716 if (IS_ERR(idata)) in mmc_blk_ioctl_cmd()
717 return PTR_ERR(idata); in mmc_blk_ioctl_cmd()
719 idata->rpmb = rpmb; in mmc_blk_ioctl_cmd()
732 idata->ic.write_flag ? REQ_OP_DRV_OUT : REQ_OP_DRV_IN, 0); in mmc_blk_ioctl_cmd()
737 idatas[0] = idata; in mmc_blk_ioctl_cmd()
745 err = mmc_blk_ioctl_copy_to_user(ic_ptr, idata); in mmc_blk_ioctl_cmd()
749 kfree(idata->buf); in mmc_blk_ioctl_cmd()
750 kfree(idata); in mmc_blk_ioctl_cmd()
758 struct mmc_blk_ioc_data **idata = NULL; in mmc_blk_ioctl_multi_cmd() local
778 idata = kcalloc(n, sizeof(*idata), GFP_KERNEL); in mmc_blk_ioctl_multi_cmd()
779 if (!idata) in mmc_blk_ioctl_multi_cmd()
783 idata[i] = mmc_blk_ioctl_copy_from_user(&cmds[i]); in mmc_blk_ioctl_multi_cmd()
784 if (IS_ERR(idata[i])) { in mmc_blk_ioctl_multi_cmd()
785 err = PTR_ERR(idata[i]); in mmc_blk_ioctl_multi_cmd()
790 idata[i]->rpmb = rpmb; in mmc_blk_ioctl_multi_cmd()
805 idata[0]->ic.write_flag ? REQ_OP_DRV_OUT : REQ_OP_DRV_IN, 0); in mmc_blk_ioctl_multi_cmd()
813 req_to_mmc_queue_req(req)->drv_op_data = idata; in mmc_blk_ioctl_multi_cmd()
820 err = mmc_blk_ioctl_copy_to_user(&cmds[i], idata[i]); in mmc_blk_ioctl_multi_cmd()
826 kfree(idata[i]->buf); in mmc_blk_ioctl_multi_cmd()
827 kfree(idata[i]); in mmc_blk_ioctl_multi_cmd()
829 kfree(idata); in mmc_blk_ioctl_multi_cmd()
1126 struct mmc_blk_ioc_data **idata = mq_rq->drv_op_data; in mmc_blk_check_sbc() local
1130 if (idata[i - 1]->ic.opcode == MMC_SET_BLOCK_COUNT && in mmc_blk_check_sbc()
1131 mmc_op_multi(idata[i]->ic.opcode)) { in mmc_blk_check_sbc()
1132 idata[i - 1]->flags |= MMC_BLK_IOC_DROP; in mmc_blk_check_sbc()
1133 idata[i]->flags |= MMC_BLK_IOC_SBC; in mmc_blk_check_sbc()
1148 struct mmc_blk_ioc_data **idata; in mmc_blk_issue_drv_op() local
1170 idata = mq_rq->drv_op_data; in mmc_blk_issue_drv_op()
1172 ret = __mmc_blk_ioctl_cmd(card, md, idata, i); in mmc_blk_issue_drv_op()
2829 static void free_idata(struct mmc_blk_ioc_data **idata, unsigned int cmd_count) in free_idata() argument
2834 kfree(idata[n]); in free_idata()
2835 kfree(idata); in free_idata()
2841 struct mmc_blk_ioc_data **idata; in alloc_idata() local
2844 idata = kcalloc(cmd_count, sizeof(*idata), GFP_KERNEL); in alloc_idata()
2845 if (!idata) in alloc_idata()
2849 idata[n] = kcalloc(1, sizeof(**idata), GFP_KERNEL); in alloc_idata()
2850 if (!idata[n]) { in alloc_idata()
2851 free_idata(idata, n); in alloc_idata()
2854 idata[n]->rpmb = rpmb; in alloc_idata()
2857 return idata; in alloc_idata()
2860 static void set_idata(struct mmc_blk_ioc_data *idata, u32 opcode, in set_idata() argument
2869 idata->ic.opcode = opcode; in set_idata()
2870 idata->ic.flags = MMC_RSP_R1 | MMC_CMD_ADTC; in set_idata()
2871 idata->ic.write_flag = write_flag; in set_idata()
2872 idata->ic.blksz = sizeof(struct rpmb_frame); in set_idata()
2873 idata->ic.blocks = buf_bytes / idata->ic.blksz; in set_idata()
2874 idata->buf = buf; in set_idata()
2875 idata->buf_bytes = buf_bytes; in set_idata()
2885 struct mmc_blk_ioc_data **idata; in mmc_route_rpmb_frames() local
2934 idata = alloc_idata(rpmb, cmd_count); in mmc_route_rpmb_frames()
2935 if (!idata) in mmc_route_rpmb_frames()
2942 set_idata(idata[0], MMC_WRITE_MULTIPLE_BLOCK, in mmc_route_rpmb_frames()
2948 set_idata(idata[1], MMC_WRITE_MULTIPLE_BLOCK, 1, resp, in mmc_route_rpmb_frames()
2952 set_idata(idata[2], MMC_READ_MULTIPLE_BLOCK, 0, resp, resp_len); in mmc_route_rpmb_frames()
2955 set_idata(idata[0], MMC_WRITE_MULTIPLE_BLOCK, 1, req, req_len); in mmc_route_rpmb_frames()
2958 set_idata(idata[1], MMC_READ_MULTIPLE_BLOCK, 0, resp, resp_len); in mmc_route_rpmb_frames()
2970 mq_rq->drv_op_data = idata; in mmc_route_rpmb_frames()
2978 free_idata(idata, cmd_count); in mmc_route_rpmb_frames()