Lines Matching refs:mrq
463 static void sdhci_mod_timer(struct sdhci_host *host, struct mmc_request *mrq, in sdhci_mod_timer() argument
466 if (sdhci_data_line_cmd(mrq->cmd)) in sdhci_mod_timer()
472 static void sdhci_del_timer(struct sdhci_host *host, struct mmc_request *mrq) in sdhci_del_timer() argument
474 if (sdhci_data_line_cmd(mrq->cmd)) in sdhci_del_timer()
1366 struct mmc_request *mrq) in sdhci_auto_cmd12() argument
1368 return !mrq->sbc && (host->flags & SDHCI_AUTO_CMD12) && in sdhci_auto_cmd12()
1369 !mrq->cap_cmd_during_tfr; in sdhci_auto_cmd12()
1373 struct mmc_request *mrq) in sdhci_auto_cmd23() argument
1375 return mrq->sbc && (host->flags & SDHCI_AUTO_CMD23); in sdhci_auto_cmd23()
1379 struct mmc_request *mrq) in sdhci_manual_cmd23() argument
1381 return mrq->sbc && !(host->flags & SDHCI_AUTO_CMD23); in sdhci_manual_cmd23()
1388 bool use_cmd12 = sdhci_auto_cmd12(host, cmd->mrq) && in sdhci_auto_cmd_select()
1390 bool use_cmd23 = sdhci_auto_cmd23(host, cmd->mrq); in sdhci_auto_cmd_select()
1452 if (sdhci_auto_cmd23(host, cmd->mrq)) in sdhci_set_transfer_mode()
1453 sdhci_writel(host, cmd->mrq->sbc->arg, SDHCI_ARGUMENT2); in sdhci_set_transfer_mode()
1464 static bool sdhci_needs_reset(struct sdhci_host *host, struct mmc_request *mrq) in sdhci_needs_reset() argument
1467 ((mrq->cmd && mrq->cmd->error) || in sdhci_needs_reset()
1468 (mrq->sbc && mrq->sbc->error) || in sdhci_needs_reset()
1469 (mrq->data && mrq->data->stop && mrq->data->stop->error) || in sdhci_needs_reset()
1473 static void sdhci_set_mrq_done(struct sdhci_host *host, struct mmc_request *mrq) in sdhci_set_mrq_done() argument
1478 if (host->mrqs_done[i] == mrq) { in sdhci_set_mrq_done()
1486 host->mrqs_done[i] = mrq; in sdhci_set_mrq_done()
1494 static void __sdhci_finish_mrq(struct sdhci_host *host, struct mmc_request *mrq) in __sdhci_finish_mrq() argument
1496 if (host->cmd && host->cmd->mrq == mrq) in __sdhci_finish_mrq()
1499 if (host->data_cmd && host->data_cmd->mrq == mrq) in __sdhci_finish_mrq()
1502 if (host->deferred_cmd && host->deferred_cmd->mrq == mrq) in __sdhci_finish_mrq()
1505 if (host->data && host->data->mrq == mrq) in __sdhci_finish_mrq()
1508 if (sdhci_needs_reset(host, mrq)) in __sdhci_finish_mrq()
1511 sdhci_set_mrq_done(host, mrq); in __sdhci_finish_mrq()
1513 sdhci_del_timer(host, mrq); in __sdhci_finish_mrq()
1519 static void sdhci_finish_mrq(struct sdhci_host *host, struct mmc_request *mrq) in sdhci_finish_mrq() argument
1521 __sdhci_finish_mrq(host, mrq); in sdhci_finish_mrq()
1566 ((!data->mrq->sbc && !sdhci_auto_cmd12(host, data->mrq)) || in __sdhci_finish_data()
1573 if (data->mrq->cap_cmd_during_tfr) { in __sdhci_finish_data()
1574 __sdhci_finish_mrq(host, data->mrq); in __sdhci_finish_data()
1585 __sdhci_finish_mrq(host, data->mrq); in __sdhci_finish_data()
1593 __sdhci_finish_mrq(host, data->mrq); in __sdhci_finish_data()
1623 if (cmd->mrq->data && (cmd == cmd->mrq->data->stop)) in sdhci_send_command()
1684 sdhci_mod_timer(host, cmd->mrq, timeout); in sdhci_send_command()
1780 if (cmd->mrq->cap_cmd_during_tfr && cmd == cmd->mrq->cmd) in sdhci_finish_command()
1781 mmc_command_done(host->mmc, cmd->mrq); in sdhci_finish_command()
1804 if (cmd == cmd->mrq->sbc) { in sdhci_finish_command()
1805 if (!sdhci_send_command(host, cmd->mrq->cmd)) { in sdhci_finish_command()
1807 host->deferred_cmd = cmd->mrq->cmd; in sdhci_finish_command()
1816 __sdhci_finish_mrq(host, cmd->mrq); in sdhci_finish_command()
2146 void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq) in sdhci_request() argument
2160 if (sdhci_present_error(host, mrq->cmd, present)) in sdhci_request()
2163 cmd = sdhci_manual_cmd23(host, mrq) ? mrq->sbc : mrq->cmd; in sdhci_request()
2173 sdhci_finish_mrq(host, mrq); in sdhci_request()
2178 int sdhci_request_atomic(struct mmc_host *mmc, struct mmc_request *mrq) in sdhci_request_atomic() argument
2187 if (sdhci_present_error(host, mrq->cmd, true)) { in sdhci_request_atomic()
2188 sdhci_finish_mrq(host, mrq); in sdhci_request_atomic()
2192 cmd = sdhci_manual_cmd23(host, mrq) ? mrq->sbc : mrq->cmd; in sdhci_request_atomic()
2737 struct mmc_request mrq = {}; in sdhci_send_tuning() local
2745 cmd.mrq = &mrq; in sdhci_send_tuning()
2747 mrq.cmd = &cmd; in sdhci_send_tuning()
2775 sdhci_del_timer(host, &mrq); in sdhci_send_tuning()
2925 static void sdhci_post_req(struct mmc_host *mmc, struct mmc_request *mrq, in sdhci_post_req() argument
2928 struct mmc_data *data = mrq->data; in sdhci_post_req()
2937 static void sdhci_pre_req(struct mmc_host *mmc, struct mmc_request *mrq) in sdhci_pre_req() argument
2941 mrq->data->host_cookie = COOKIE_UNMAPPED; in sdhci_pre_req()
2949 sdhci_pre_dma_transfer(host, mrq->data, COOKIE_PRE_MAPPED); in sdhci_pre_req()
2956 sdhci_finish_mrq(host, host->data_cmd->mrq); in sdhci_error_out_mrqs()
2961 sdhci_finish_mrq(host, host->cmd->mrq); in sdhci_error_out_mrqs()
3021 struct mmc_request *mrq; in sdhci_request_done() local
3027 mrq = host->mrqs_done[i]; in sdhci_request_done()
3028 if (mrq) in sdhci_request_done()
3032 if (!mrq) { in sdhci_request_done()
3041 if (sdhci_needs_reset(host, mrq)) { in sdhci_request_done()
3074 struct mmc_data *data = mrq->data; in sdhci_request_done()
3077 (mrq->cmd->error || data->error)) { in sdhci_request_done()
3084 sdhci_set_mrq_done(host, mrq); in sdhci_request_done()
3136 host->ops->request_done(host, mrq); in sdhci_request_done()
3138 mmc_request_done(host->mmc, mrq); in sdhci_request_done()
3167 sdhci_finish_mrq(host, host->cmd->mrq); in sdhci_timeout_timer()
3194 sdhci_finish_mrq(host, host->data_cmd->mrq); in sdhci_timeout_data_timer()
3197 sdhci_finish_mrq(host, host->cmd->mrq); in sdhci_timeout_data_timer()
3214 struct mmc_request *mrq = host->data_cmd->mrq; in sdhci_cmd_irq() local
3221 if (!mrq->sbc && (host->flags & SDHCI_AUTO_CMD12)) { in sdhci_cmd_irq()
3257 __sdhci_finish_mrq(host, host->cmd->mrq); in sdhci_cmd_irq()
3263 struct mmc_request *mrq = host->cmd->mrq; in sdhci_cmd_irq() local
3269 if (sdhci_auto_cmd23(host, mrq)) { in sdhci_cmd_irq()
3270 mrq->sbc->error = err; in sdhci_cmd_irq()
3271 __sdhci_finish_mrq(host, mrq); in sdhci_cmd_irq()
3345 __sdhci_finish_mrq(host, data_cmd->mrq); in sdhci_data_irq()
3358 __sdhci_finish_mrq(host, data_cmd->mrq); in sdhci_data_irq()
3443 struct mmc_request *mrq) in sdhci_defer_done() argument
3445 struct mmc_data *data = mrq->data; in sdhci_defer_done()
3555 struct mmc_request *mrq = host->mrqs_done[i]; in sdhci_irq() local
3557 if (!mrq) in sdhci_irq()
3560 if (sdhci_defer_done(host, mrq)) { in sdhci_irq()
3563 mrqs_done[i] = mrq; in sdhci_irq()
3610 sdhci_finish_mrq(host, cmd->mrq); in sdhci_thread_irq()