Lines Matching refs:brq
899 struct mmc_blk_request *brq, int *ecc_err, int *gen_err) in mmc_blk_cmd_recovery() argument
933 (brq->stop.resp[0] & R1_CARD_ECC_FAILED) || in mmc_blk_cmd_recovery()
934 (brq->cmd.resp[0] & R1_CARD_ECC_FAILED)) in mmc_blk_cmd_recovery()
940 (brq->stop.resp[0] & R1_ERROR)) { in mmc_blk_cmd_recovery()
943 brq->stop.resp[0], status); in mmc_blk_cmd_recovery()
954 DIV_ROUND_UP(brq->data.timeout_ns, 1000000), in mmc_blk_cmd_recovery()
971 if (brq->sbc.error) in mmc_blk_cmd_recovery()
972 return mmc_blk_cmd_error(req, "SET_BLOCK_COUNT", brq->sbc.error, in mmc_blk_cmd_recovery()
976 if (brq->cmd.error) in mmc_blk_cmd_recovery()
977 return mmc_blk_cmd_error(req, "r/w cmd", brq->cmd.error, in mmc_blk_cmd_recovery()
981 if (!brq->stop.error) in mmc_blk_cmd_recovery()
986 req->rq_disk->disk_name, brq->stop.error, in mmc_blk_cmd_recovery()
987 brq->cmd.resp[0], status); in mmc_blk_cmd_recovery()
994 brq->stop.resp[0] = stop_status; in mmc_blk_cmd_recovery()
995 brq->stop.error = 0; in mmc_blk_cmd_recovery()
1178 static inline void mmc_apply_rel_rw(struct mmc_blk_request *brq, in mmc_apply_rel_rw() argument
1184 if (!IS_ALIGNED(brq->cmd.arg, card->ext_csd.rel_sectors)) in mmc_apply_rel_rw()
1185 brq->data.blocks = 1; in mmc_apply_rel_rw()
1187 if (brq->data.blocks > card->ext_csd.rel_sectors) in mmc_apply_rel_rw()
1188 brq->data.blocks = card->ext_csd.rel_sectors; in mmc_apply_rel_rw()
1189 else if (brq->data.blocks < card->ext_csd.rel_sectors) in mmc_apply_rel_rw()
1190 brq->data.blocks = 1; in mmc_apply_rel_rw()
1207 struct mmc_blk_request *brq = &mq_mrq->brq; in mmc_blk_err_check() local
1221 if (brq->sbc.error || brq->cmd.error || brq->stop.error || in mmc_blk_err_check()
1222 brq->data.error) { in mmc_blk_err_check()
1223 switch (mmc_blk_cmd_recovery(card, req, brq, &ecc_err, &gen_err)) { in mmc_blk_err_check()
1240 if (brq->cmd.resp[0] & CMD_ERRORS) { in mmc_blk_err_check()
1242 req->rq_disk->disk_name, brq->cmd.resp[0]); in mmc_blk_err_check()
1255 if (brq->stop.resp[0] & R1_ERROR) { in mmc_blk_err_check()
1258 brq->stop.resp[0]); in mmc_blk_err_check()
1275 if (brq->data.error) { in mmc_blk_err_check()
1277 req->rq_disk->disk_name, brq->data.error, in mmc_blk_err_check()
1280 brq->cmd.resp[0], brq->stop.resp[0]); in mmc_blk_err_check()
1291 if (!brq->data.bytes_xfered) in mmc_blk_err_check()
1295 if (unlikely(brq->data.blocks << 9 != brq->data.bytes_xfered)) in mmc_blk_err_check()
1301 if (blk_rq_bytes(req) != brq->data.bytes_xfered) in mmc_blk_err_check()
1363 struct mmc_blk_request *brq = &mqrq->brq; in mmc_blk_rw_rq_prep() local
1380 memset(brq, 0, sizeof(struct mmc_blk_request)); in mmc_blk_rw_rq_prep()
1381 brq->mrq.cmd = &brq->cmd; in mmc_blk_rw_rq_prep()
1382 brq->mrq.data = &brq->data; in mmc_blk_rw_rq_prep()
1384 brq->cmd.arg = blk_rq_pos(req); in mmc_blk_rw_rq_prep()
1386 brq->cmd.arg <<= 9; in mmc_blk_rw_rq_prep()
1387 brq->cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC; in mmc_blk_rw_rq_prep()
1388 brq->data.blksz = 512; in mmc_blk_rw_rq_prep()
1389 brq->stop.opcode = MMC_STOP_TRANSMISSION; in mmc_blk_rw_rq_prep()
1390 brq->stop.arg = 0; in mmc_blk_rw_rq_prep()
1391 brq->data.blocks = blk_rq_sectors(req); in mmc_blk_rw_rq_prep()
1398 if (brq->data.blocks > card->host->max_blk_count) in mmc_blk_rw_rq_prep()
1399 brq->data.blocks = card->host->max_blk_count; in mmc_blk_rw_rq_prep()
1401 if (brq->data.blocks > 1) { in mmc_blk_rw_rq_prep()
1408 brq->data.blocks = 1; in mmc_blk_rw_rq_prep()
1415 brq->data.blocks = card->host->ops->multi_io_quirk(card, in mmc_blk_rw_rq_prep()
1418 brq->data.blocks); in mmc_blk_rw_rq_prep()
1421 if (brq->data.blocks > 1 || do_rel_wr) { in mmc_blk_rw_rq_prep()
1427 brq->mrq.stop = &brq->stop; in mmc_blk_rw_rq_prep()
1431 brq->mrq.stop = NULL; in mmc_blk_rw_rq_prep()
1436 brq->cmd.opcode = readcmd; in mmc_blk_rw_rq_prep()
1437 brq->data.flags |= MMC_DATA_READ; in mmc_blk_rw_rq_prep()
1438 if (brq->mrq.stop) in mmc_blk_rw_rq_prep()
1439 brq->stop.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | in mmc_blk_rw_rq_prep()
1442 brq->cmd.opcode = writecmd; in mmc_blk_rw_rq_prep()
1443 brq->data.flags |= MMC_DATA_WRITE; in mmc_blk_rw_rq_prep()
1444 if (brq->mrq.stop) in mmc_blk_rw_rq_prep()
1445 brq->stop.flags = MMC_RSP_SPI_R1B | MMC_RSP_R1B | in mmc_blk_rw_rq_prep()
1450 mmc_apply_rel_rw(brq, card, req); in mmc_blk_rw_rq_prep()
1459 ((brq->data.blocks * brq->data.blksz) >= 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()
1483 brq->sbc.opcode = MMC_SET_BLOCK_COUNT; in mmc_blk_rw_rq_prep()
1484 brq->sbc.arg = brq->data.blocks | in mmc_blk_rw_rq_prep()
1487 brq->sbc.flags = MMC_RSP_R1 | MMC_CMD_AC; in mmc_blk_rw_rq_prep()
1488 brq->mrq.sbc = &brq->sbc; in mmc_blk_rw_rq_prep()
1491 mmc_set_data_timeout(&brq->data, card); in mmc_blk_rw_rq_prep()
1493 brq->data.sg = mqrq->sg; in mmc_blk_rw_rq_prep()
1494 brq->data.sg_len = mmc_queue_map_sg(mq, mqrq); in mmc_blk_rw_rq_prep()
1500 if (brq->data.blocks != blk_rq_sectors(req)) { in mmc_blk_rw_rq_prep()
1501 int i, data_size = brq->data.blocks << 9; in mmc_blk_rw_rq_prep()
1504 for_each_sg(brq->data.sg, sg, brq->data.sg_len, i) { in mmc_blk_rw_rq_prep()
1512 brq->data.sg_len = i; in mmc_blk_rw_rq_prep()
1515 mqrq->mmc_active.mrq = &brq->mrq; in mmc_blk_rw_rq_prep()
1649 struct mmc_blk_request *brq = &mqrq->brq; in mmc_blk_packed_hdr_wrq_prep() local
1679 ((brq->data.blocks * brq->data.blksz) >= in mmc_blk_packed_hdr_wrq_prep()
1694 memset(brq, 0, sizeof(struct mmc_blk_request)); in mmc_blk_packed_hdr_wrq_prep()
1695 brq->mrq.cmd = &brq->cmd; in mmc_blk_packed_hdr_wrq_prep()
1696 brq->mrq.data = &brq->data; in mmc_blk_packed_hdr_wrq_prep()
1697 brq->mrq.sbc = &brq->sbc; in mmc_blk_packed_hdr_wrq_prep()
1698 brq->mrq.stop = &brq->stop; in mmc_blk_packed_hdr_wrq_prep()
1700 brq->sbc.opcode = MMC_SET_BLOCK_COUNT; in mmc_blk_packed_hdr_wrq_prep()
1701 brq->sbc.arg = MMC_CMD23_ARG_PACKED | (packed->blocks + hdr_blocks); in mmc_blk_packed_hdr_wrq_prep()
1702 brq->sbc.flags = MMC_RSP_R1 | MMC_CMD_AC; in mmc_blk_packed_hdr_wrq_prep()
1704 brq->cmd.opcode = MMC_WRITE_MULTIPLE_BLOCK; in mmc_blk_packed_hdr_wrq_prep()
1705 brq->cmd.arg = blk_rq_pos(req); in mmc_blk_packed_hdr_wrq_prep()
1707 brq->cmd.arg <<= 9; in mmc_blk_packed_hdr_wrq_prep()
1708 brq->cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC; in mmc_blk_packed_hdr_wrq_prep()
1710 brq->data.blksz = 512; in mmc_blk_packed_hdr_wrq_prep()
1711 brq->data.blocks = packed->blocks + hdr_blocks; in mmc_blk_packed_hdr_wrq_prep()
1712 brq->data.flags |= MMC_DATA_WRITE; in mmc_blk_packed_hdr_wrq_prep()
1714 brq->stop.opcode = MMC_STOP_TRANSMISSION; in mmc_blk_packed_hdr_wrq_prep()
1715 brq->stop.arg = 0; in mmc_blk_packed_hdr_wrq_prep()
1716 brq->stop.flags = MMC_RSP_SPI_R1B | MMC_RSP_R1B | MMC_CMD_AC; in mmc_blk_packed_hdr_wrq_prep()
1718 mmc_set_data_timeout(&brq->data, card); in mmc_blk_packed_hdr_wrq_prep()
1720 brq->data.sg = mqrq->sg; in mmc_blk_packed_hdr_wrq_prep()
1721 brq->data.sg_len = mmc_queue_map_sg(mq, mqrq); in mmc_blk_packed_hdr_wrq_prep()
1723 mqrq->mmc_active.mrq = &brq->mrq; in mmc_blk_packed_hdr_wrq_prep()
1730 struct mmc_blk_request *brq, struct request *req, in mmc_blk_cmd_err() argument
1734 mq_rq = container_of(brq, struct mmc_queue_req, brq); in mmc_blk_cmd_err()
1753 ret = blk_end_request(req, 0, brq->data.bytes_xfered); in mmc_blk_cmd_err()
1834 struct mmc_blk_request *brq = &mq->mqrq_cur->brq; in mmc_blk_issue_rw_rq() local
1855 if ((brq->data.blocks & 0x07) && in mmc_blk_issue_rw_rq()
1879 brq = &mq_rq->brq; in mmc_blk_issue_rw_rq()
1897 brq->data.bytes_xfered); in mmc_blk_issue_rw_rq()
1908 brq->data.bytes_xfered); in mmc_blk_issue_rw_rq()
1914 ret = mmc_blk_cmd_err(md, card, brq, req, ret); in mmc_blk_issue_rw_rq()
1940 if (brq->data.blocks > 1) { in mmc_blk_issue_rw_rq()
1953 brq->data.blksz); in mmc_blk_issue_rw_rq()