Lines Matching refs:brq
1357 static inline void mmc_apply_rel_rw(struct mmc_blk_request *brq, in mmc_apply_rel_rw() argument
1364 brq->data.blocks = 1; in mmc_apply_rel_rw()
1366 if (brq->data.blocks > card->ext_csd.rel_sectors) in mmc_apply_rel_rw()
1367 brq->data.blocks = card->ext_csd.rel_sectors; in mmc_apply_rel_rw()
1368 else if (brq->data.blocks < card->ext_csd.rel_sectors) in mmc_apply_rel_rw()
1369 brq->data.blocks = 1; in mmc_apply_rel_rw()
1385 static void mmc_blk_eval_resp_error(struct mmc_blk_request *brq) in mmc_blk_eval_resp_error() argument
1415 if (!brq->stop.error) { in mmc_blk_eval_resp_error()
1419 val = brq->stop.resp[0] & CMD_ERRORS; in mmc_blk_eval_resp_error()
1420 oor_with_open_end = val & R1_OUT_OF_RANGE && !brq->mrq.sbc; in mmc_blk_eval_resp_error()
1423 brq->stop.error = -EIO; in mmc_blk_eval_resp_error()
1433 struct mmc_blk_request *brq = &mqrq->brq; in mmc_blk_data_prep() local
1445 memset(brq, 0, sizeof(struct mmc_blk_request)); in mmc_blk_data_prep()
1449 brq->mrq.data = &brq->data; in mmc_blk_data_prep()
1450 brq->mrq.tag = req->tag; in mmc_blk_data_prep()
1452 brq->stop.opcode = MMC_STOP_TRANSMISSION; in mmc_blk_data_prep()
1453 brq->stop.arg = 0; in mmc_blk_data_prep()
1456 brq->data.flags = MMC_DATA_READ; in mmc_blk_data_prep()
1457 brq->stop.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_AC; in mmc_blk_data_prep()
1459 brq->data.flags = MMC_DATA_WRITE; in mmc_blk_data_prep()
1460 brq->stop.flags = MMC_RSP_SPI_R1B | MMC_RSP_R1B | MMC_CMD_AC; in mmc_blk_data_prep()
1463 brq->data.blksz = 512; in mmc_blk_data_prep()
1464 brq->data.blocks = blk_rq_sectors(req); in mmc_blk_data_prep()
1465 brq->data.blk_addr = blk_rq_pos(req); in mmc_blk_data_prep()
1479 if (brq->data.blocks > card->host->max_blk_count) in mmc_blk_data_prep()
1480 brq->data.blocks = card->host->max_blk_count; in mmc_blk_data_prep()
1482 if (brq->data.blocks > 1) { in mmc_blk_data_prep()
1491 brq->data.blocks--; in mmc_blk_data_prep()
1499 brq->data.blocks = queue_physical_block_size(mq->queue) >> 9; in mmc_blk_data_prep()
1506 brq->data.blocks = card->host->ops->multi_io_quirk(card, in mmc_blk_data_prep()
1509 brq->data.blocks); in mmc_blk_data_prep()
1513 mmc_apply_rel_rw(brq, card, req); in mmc_blk_data_prep()
1514 brq->data.flags |= MMC_DATA_REL_WR; in mmc_blk_data_prep()
1524 ((brq->data.blocks * brq->data.blksz) >= in mmc_blk_data_prep()
1528 brq->data.flags |= MMC_DATA_DAT_TAG; in mmc_blk_data_prep()
1530 mmc_set_data_timeout(&brq->data, card); in mmc_blk_data_prep()
1532 brq->data.sg = mqrq->sg; in mmc_blk_data_prep()
1533 brq->data.sg_len = mmc_queue_map_sg(mq, mqrq); in mmc_blk_data_prep()
1539 if (brq->data.blocks != blk_rq_sectors(req)) { in mmc_blk_data_prep()
1540 int i, data_size = brq->data.blocks << 9; in mmc_blk_data_prep()
1543 for_each_sg(brq->data.sg, sg, brq->data.sg_len, i) { in mmc_blk_data_prep()
1551 brq->data.sg_len = i; in mmc_blk_data_prep()
1566 struct mmc_request *mrq = &mqrq->brq.mrq; in mmc_blk_cqe_complete_rq()
1635 brq.mrq); in mmc_blk_cqe_req_done()
1661 struct mmc_blk_request *brq = &mqrq->brq; in mmc_blk_cqe_prep_dcmd() local
1663 memset(brq, 0, sizeof(*brq)); in mmc_blk_cqe_prep_dcmd()
1665 brq->mrq.cmd = &brq->cmd; in mmc_blk_cqe_prep_dcmd()
1666 brq->mrq.tag = req->tag; in mmc_blk_cqe_prep_dcmd()
1668 return &brq->mrq; in mmc_blk_cqe_prep_dcmd()
1693 mqrq->brq.mrq.done = mmc_blk_hsq_req_done; in mmc_blk_hsq_issue_rw_rq()
1694 mmc_pre_req(host, &mqrq->brq.mrq); in mmc_blk_hsq_issue_rw_rq()
1696 err = mmc_cqe_start_req(host, &mqrq->brq.mrq); in mmc_blk_hsq_issue_rw_rq()
1698 mmc_post_req(host, &mqrq->brq.mrq, err); in mmc_blk_hsq_issue_rw_rq()
1713 return mmc_blk_cqe_start_req(mq->card->host, &mqrq->brq.mrq); in mmc_blk_cqe_issue_rw_rq()
1722 struct mmc_blk_request *brq = &mqrq->brq; in mmc_blk_rw_rq_prep() local
1729 brq->mrq.cmd = &brq->cmd; in mmc_blk_rw_rq_prep()
1731 brq->cmd.arg = blk_rq_pos(req); in mmc_blk_rw_rq_prep()
1733 brq->cmd.arg <<= 9; in mmc_blk_rw_rq_prep()
1734 brq->cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC; in mmc_blk_rw_rq_prep()
1736 if (brq->data.blocks > 1 || do_rel_wr) { in mmc_blk_rw_rq_prep()
1742 brq->mrq.stop = &brq->stop; in mmc_blk_rw_rq_prep()
1746 brq->mrq.stop = NULL; in mmc_blk_rw_rq_prep()
1750 brq->cmd.opcode = rq_data_dir(req) == READ ? readcmd : writecmd; in mmc_blk_rw_rq_prep()
1770 if ((md->flags & MMC_BLK_CMD23) && mmc_op_multi(brq->cmd.opcode) && in mmc_blk_rw_rq_prep()
1773 brq->sbc.opcode = MMC_SET_BLOCK_COUNT; in mmc_blk_rw_rq_prep()
1774 brq->sbc.arg = brq->data.blocks | in mmc_blk_rw_rq_prep()
1777 brq->sbc.flags = MMC_RSP_R1 | MMC_CMD_AC; in mmc_blk_rw_rq_prep()
1778 brq->mrq.sbc = &brq->sbc; in mmc_blk_rw_rq_prep()
1782 brq->cmd.ext_addr = blk_rq_pos(req) >> 32; in mmc_blk_rw_rq_prep()
1783 brq->cmd.has_ext_addr = true; in mmc_blk_rw_rq_prep()
1806 struct mmc_blk_request *brq = &mqrq->brq; in mmc_blk_fix_state() local
1807 unsigned int timeout = mmc_blk_data_timeout_ms(card->host, &brq->data); in mmc_blk_fix_state()
1827 struct mmc_request *mrq = &mqrq->brq.mrq; in mmc_blk_read_single()
1878 static inline bool mmc_blk_oor_valid(struct mmc_blk_request *brq) in mmc_blk_oor_valid() argument
1880 return !!brq->mrq.sbc; in mmc_blk_oor_valid()
1883 static inline u32 mmc_blk_stop_err_bits(struct mmc_blk_request *brq) in mmc_blk_stop_err_bits() argument
1885 return mmc_blk_oor_valid(brq) ? CMD_ERRORS : CMD_ERRORS_EXCL_OOR; in mmc_blk_stop_err_bits()
1895 struct mmc_blk_request *brq = &mqrq->brq; in mmc_blk_status_error() local
1902 stop_err_bits = mmc_blk_stop_err_bits(brq); in mmc_blk_status_error()
1904 return brq->cmd.resp[0] & CMD_ERRORS || in mmc_blk_status_error()
1905 brq->stop.resp[0] & stop_err_bits || in mmc_blk_status_error()
1910 static inline bool mmc_blk_cmd_started(struct mmc_blk_request *brq) in mmc_blk_cmd_started() argument
1912 return !brq->sbc.error && !brq->cmd.error && in mmc_blk_cmd_started()
1913 !(brq->cmd.resp[0] & CMD_ERRORS); in mmc_blk_cmd_started()
1936 struct mmc_blk_request *brq = &mqrq->brq; in mmc_blk_mq_rw_recovery() local
1949 brq->data.bytes_xfered = 0; in mmc_blk_mq_rw_recovery()
1976 if (!err && mmc_blk_cmd_started(brq) && mmc_card_sd(card) && in mmc_blk_mq_rw_recovery()
1979 brq->data.bytes_xfered = 0; in mmc_blk_mq_rw_recovery()
1981 brq->data.bytes_xfered = blocks << 9; in mmc_blk_mq_rw_recovery()
1996 if (brq->data.bytes_xfered) in mmc_blk_mq_rw_recovery()
2005 if (brq->sbc.error || brq->cmd.error) in mmc_blk_mq_rw_recovery()
2014 if (rq_data_dir(req) == READ && brq->data.blocks > in mmc_blk_mq_rw_recovery()
2022 static inline bool mmc_blk_rq_error(struct mmc_blk_request *brq) in mmc_blk_rq_error() argument
2024 mmc_blk_eval_resp_error(brq); in mmc_blk_rq_error()
2026 return brq->sbc.error || brq->cmd.error || brq->stop.error || in mmc_blk_rq_error()
2027 brq->data.error || brq->cmd.resp[0] & CMD_ERRORS; in mmc_blk_rq_error()
2084 mqrq->brq.data.bytes_xfered = 0; in mmc_blk_card_busy()
2097 if (cb_data.status & mmc_blk_stop_err_bits(&mqrq->brq)) { in mmc_blk_card_busy()
2098 mqrq->brq.data.bytes_xfered = 0; in mmc_blk_card_busy()
2104 mqrq->brq.cmd.resp[0] |= R1_EXCEPTION_EVENT; in mmc_blk_card_busy()
2120 unsigned int nr_bytes = mqrq->brq.data.bytes_xfered; in mmc_blk_mq_complete_rq()
2142 (mqrq->brq.cmd.resp[0] & R1_EXCEPTION_EVENT || in mmc_blk_urgent_bkops_needed()
2143 mqrq->brq.stop.resp[0] & R1_EXCEPTION_EVENT); in mmc_blk_urgent_bkops_needed()
2156 container_of(mrq, struct mmc_queue_req, brq.mrq); in mmc_blk_hsq_req_done()
2163 if (mmc_blk_rq_error(&mqrq->brq) || in mmc_blk_hsq_req_done()
2205 if (mmc_blk_rq_error(&mqrq->brq) || in mmc_blk_mq_poll_completion()
2238 struct mmc_request *mrq = &mqrq->brq.mrq; in mmc_blk_mq_post_req()
2268 if (mmc_blk_rq_error(&mqrq->brq)) { in mmc_blk_mq_recovery()
2313 brq.mrq); in mmc_blk_mq_req_done()
2350 if (mmc_blk_rq_error(&mqrq->brq) || in mmc_blk_mq_req_done()
2414 mqrq->brq.mrq.done = mmc_blk_mq_req_done; in mmc_blk_mq_issue_rw_rq()
2416 mmc_pre_req(host, &mqrq->brq.mrq); in mmc_blk_mq_issue_rw_rq()
2424 err = mmc_start_request(host, &mqrq->brq.mrq); in mmc_blk_mq_issue_rw_rq()
2438 mmc_post_req(host, &mqrq->brq.mrq, err); in mmc_blk_mq_issue_rw_rq()