Lines Matching refs:mrq

85 				    struct mmc_request *mrq)  in mmc_should_fail_request()  argument
87 struct mmc_command *cmd = mrq->cmd; in mmc_should_fail_request()
88 struct mmc_data *data = mrq->data; in mmc_should_fail_request()
109 struct mmc_request *mrq) in mmc_should_fail_request() argument
115 static inline void mmc_complete_cmd(struct mmc_request *mrq) in mmc_complete_cmd() argument
117 if (mrq->cap_cmd_during_tfr && !completion_done(&mrq->cmd_completion)) in mmc_complete_cmd()
118 complete_all(&mrq->cmd_completion); in mmc_complete_cmd()
121 void mmc_command_done(struct mmc_host *host, struct mmc_request *mrq) in mmc_command_done() argument
123 if (!mrq->cap_cmd_during_tfr) in mmc_command_done()
126 mmc_complete_cmd(mrq); in mmc_command_done()
129 mmc_hostname(host), mrq->cmd->opcode); in mmc_command_done()
141 void mmc_request_done(struct mmc_host *host, struct mmc_request *mrq) in mmc_request_done() argument
143 struct mmc_command *cmd = mrq->cmd; in mmc_request_done()
149 (err == -EILSEQ || (mrq->sbc && mrq->sbc->error == -EILSEQ) || in mmc_request_done()
150 (mrq->data && mrq->data->error == -EILSEQ) || in mmc_request_done()
151 (mrq->stop && mrq->stop->error == -EILSEQ))) in mmc_request_done()
159 if (host->ongoing_mrq == mrq) in mmc_request_done()
162 mmc_complete_cmd(mrq); in mmc_request_done()
164 trace_mmc_request_done(host, mrq); in mmc_request_done()
176 mmc_should_fail_request(host, mrq); in mmc_request_done()
181 if (mrq->sbc) { in mmc_request_done()
183 mmc_hostname(host), mrq->sbc->opcode, in mmc_request_done()
184 mrq->sbc->error, in mmc_request_done()
185 mrq->sbc->resp[0], mrq->sbc->resp[1], in mmc_request_done()
186 mrq->sbc->resp[2], mrq->sbc->resp[3]); in mmc_request_done()
194 if (mrq->data) { in mmc_request_done()
197 mrq->data->bytes_xfered, mrq->data->error); in mmc_request_done()
200 if (mrq->stop) { in mmc_request_done()
202 mmc_hostname(host), mrq->stop->opcode, in mmc_request_done()
203 mrq->stop->error, in mmc_request_done()
204 mrq->stop->resp[0], mrq->stop->resp[1], in mmc_request_done()
205 mrq->stop->resp[2], mrq->stop->resp[3]); in mmc_request_done()
212 if (mrq->done) in mmc_request_done()
213 mrq->done(mrq); in mmc_request_done()
218 static void __mmc_start_request(struct mmc_host *host, struct mmc_request *mrq) in __mmc_start_request() argument
225 mrq->cmd->error = err; in __mmc_start_request()
226 mmc_request_done(host, mrq); in __mmc_start_request()
235 if (sdio_is_io_busy(mrq->cmd->opcode, mrq->cmd->arg) && in __mmc_start_request()
243 mrq->cmd->error = -EBUSY; in __mmc_start_request()
244 mmc_request_done(host, mrq); in __mmc_start_request()
249 if (mrq->cap_cmd_during_tfr) { in __mmc_start_request()
250 host->ongoing_mrq = mrq; in __mmc_start_request()
255 reinit_completion(&mrq->cmd_completion); in __mmc_start_request()
258 trace_mmc_request_start(host, mrq); in __mmc_start_request()
263 host->ops->request(host, mrq); in __mmc_start_request()
266 static void mmc_mrq_pr_debug(struct mmc_host *host, struct mmc_request *mrq, in mmc_mrq_pr_debug() argument
269 if (mrq->sbc) { in mmc_mrq_pr_debug()
271 mmc_hostname(host), mrq->sbc->opcode, in mmc_mrq_pr_debug()
272 mrq->sbc->arg, mrq->sbc->flags); in mmc_mrq_pr_debug()
275 if (mrq->cmd) { in mmc_mrq_pr_debug()
278 mrq->cmd->opcode, mrq->cmd->arg, mrq->cmd->flags); in mmc_mrq_pr_debug()
281 mmc_hostname(host), mrq->tag, mrq->data->blk_addr); in mmc_mrq_pr_debug()
284 if (mrq->data) { in mmc_mrq_pr_debug()
287 mmc_hostname(host), mrq->data->blksz, in mmc_mrq_pr_debug()
288 mrq->data->blocks, mrq->data->flags, in mmc_mrq_pr_debug()
289 mrq->data->timeout_ns / 1000000, in mmc_mrq_pr_debug()
290 mrq->data->timeout_clks); in mmc_mrq_pr_debug()
293 if (mrq->stop) { in mmc_mrq_pr_debug()
295 mmc_hostname(host), mrq->stop->opcode, in mmc_mrq_pr_debug()
296 mrq->stop->arg, mrq->stop->flags); in mmc_mrq_pr_debug()
300 static int mmc_mrq_prep(struct mmc_host *host, struct mmc_request *mrq) in mmc_mrq_prep() argument
305 if (mrq->cmd) { in mmc_mrq_prep()
306 mrq->cmd->error = 0; in mmc_mrq_prep()
307 mrq->cmd->mrq = mrq; in mmc_mrq_prep()
308 mrq->cmd->data = mrq->data; in mmc_mrq_prep()
310 if (mrq->sbc) { in mmc_mrq_prep()
311 mrq->sbc->error = 0; in mmc_mrq_prep()
312 mrq->sbc->mrq = mrq; in mmc_mrq_prep()
314 if (mrq->data) { in mmc_mrq_prep()
315 if (mrq->data->blksz > host->max_blk_size || in mmc_mrq_prep()
316 mrq->data->blocks > host->max_blk_count || in mmc_mrq_prep()
317 mrq->data->blocks * mrq->data->blksz > host->max_req_size) in mmc_mrq_prep()
320 for_each_sg(mrq->data->sg, sg, mrq->data->sg_len, i) in mmc_mrq_prep()
322 if (sz != mrq->data->blocks * mrq->data->blksz) in mmc_mrq_prep()
325 mrq->data->error = 0; in mmc_mrq_prep()
326 mrq->data->mrq = mrq; in mmc_mrq_prep()
327 if (mrq->stop) { in mmc_mrq_prep()
328 mrq->data->stop = mrq->stop; in mmc_mrq_prep()
329 mrq->stop->error = 0; in mmc_mrq_prep()
330 mrq->stop->mrq = mrq; in mmc_mrq_prep()
337 int mmc_start_request(struct mmc_host *host, struct mmc_request *mrq) in mmc_start_request() argument
341 init_completion(&mrq->cmd_completion); in mmc_start_request()
348 mmc_mrq_pr_debug(host, mrq, false); in mmc_start_request()
352 err = mmc_mrq_prep(host, mrq); in mmc_start_request()
357 __mmc_start_request(host, mrq); in mmc_start_request()
363 static void mmc_wait_done(struct mmc_request *mrq) in mmc_wait_done() argument
365 complete(&mrq->completion); in mmc_wait_done()
380 static int __mmc_start_req(struct mmc_host *host, struct mmc_request *mrq) in __mmc_start_req() argument
386 init_completion(&mrq->completion); in __mmc_start_req()
387 mrq->done = mmc_wait_done; in __mmc_start_req()
389 err = mmc_start_request(host, mrq); in __mmc_start_req()
391 mrq->cmd->error = err; in __mmc_start_req()
392 mmc_complete_cmd(mrq); in __mmc_start_req()
393 complete(&mrq->completion); in __mmc_start_req()
399 void mmc_wait_for_req_done(struct mmc_host *host, struct mmc_request *mrq) in mmc_wait_for_req_done() argument
404 wait_for_completion(&mrq->completion); in mmc_wait_for_req_done()
406 cmd = mrq->cmd; in mmc_wait_for_req_done()
435 __mmc_start_request(host, mrq); in mmc_wait_for_req_done()
450 int mmc_cqe_start_req(struct mmc_host *host, struct mmc_request *mrq) in mmc_cqe_start_req() argument
464 mrq->host = host; in mmc_cqe_start_req()
466 mmc_mrq_pr_debug(host, mrq, true); in mmc_cqe_start_req()
468 err = mmc_mrq_prep(host, mrq); in mmc_cqe_start_req()
472 err = host->cqe_ops->cqe_request(host, mrq); in mmc_cqe_start_req()
476 trace_mmc_request_start(host, mrq); in mmc_cqe_start_req()
481 if (mrq->cmd) { in mmc_cqe_start_req()
483 mmc_hostname(host), mrq->cmd->opcode, err); in mmc_cqe_start_req()
486 mmc_hostname(host), mrq->tag, err); in mmc_cqe_start_req()
500 void mmc_cqe_request_done(struct mmc_host *host, struct mmc_request *mrq) in mmc_cqe_request_done() argument
502 mmc_should_fail_request(host, mrq); in mmc_cqe_request_done()
505 if ((mrq->cmd && mrq->cmd->error == -EILSEQ) || in mmc_cqe_request_done()
506 (mrq->data && mrq->data->error == -EILSEQ)) in mmc_cqe_request_done()
509 trace_mmc_request_done(host, mrq); in mmc_cqe_request_done()
511 if (mrq->cmd) { in mmc_cqe_request_done()
513 mmc_hostname(host), mrq->cmd->opcode, mrq->cmd->error); in mmc_cqe_request_done()
516 mmc_hostname(host), mrq->tag); in mmc_cqe_request_done()
519 if (mrq->data) { in mmc_cqe_request_done()
522 mrq->data->bytes_xfered, mrq->data->error); in mmc_cqe_request_done()
525 mrq->done(mrq); in mmc_cqe_request_done()
534 void mmc_cqe_post_req(struct mmc_host *host, struct mmc_request *mrq) in mmc_cqe_post_req() argument
537 host->cqe_ops->cqe_post_req(host, mrq); in mmc_cqe_post_req()
603 bool mmc_is_req_done(struct mmc_host *host, struct mmc_request *mrq) in mmc_is_req_done() argument
605 return completion_done(&mrq->completion); in mmc_is_req_done()
621 void mmc_wait_for_req(struct mmc_host *host, struct mmc_request *mrq) in mmc_wait_for_req() argument
623 __mmc_start_req(host, mrq); in mmc_wait_for_req()
625 if (!mrq->cap_cmd_during_tfr) in mmc_wait_for_req()
626 mmc_wait_for_req_done(host, mrq); in mmc_wait_for_req()
642 struct mmc_request mrq = {}; in mmc_wait_for_cmd() local
649 mrq.cmd = cmd; in mmc_wait_for_cmd()
652 mmc_wait_for_req(host, &mrq); in mmc_wait_for_cmd()