Lines Matching refs:mrq
83 struct mmc_request *mrq) in mmc_should_fail_request() argument
85 struct mmc_command *cmd = mrq->cmd; in mmc_should_fail_request()
86 struct mmc_data *data = mrq->data; in mmc_should_fail_request()
107 struct mmc_request *mrq) in mmc_should_fail_request() argument
113 static inline void mmc_complete_cmd(struct mmc_request *mrq) in mmc_complete_cmd() argument
115 if (mrq->cap_cmd_during_tfr && !completion_done(&mrq->cmd_completion)) in mmc_complete_cmd()
116 complete_all(&mrq->cmd_completion); in mmc_complete_cmd()
119 void mmc_command_done(struct mmc_host *host, struct mmc_request *mrq) in mmc_command_done() argument
121 if (!mrq->cap_cmd_during_tfr) in mmc_command_done()
124 mmc_complete_cmd(mrq); in mmc_command_done()
127 mmc_hostname(host), mrq->cmd->opcode); in mmc_command_done()
139 void mmc_request_done(struct mmc_host *host, struct mmc_request *mrq) in mmc_request_done() argument
141 struct mmc_command *cmd = mrq->cmd; in mmc_request_done()
148 (err == -EILSEQ || (mrq->sbc && mrq->sbc->error == -EILSEQ) || in mmc_request_done()
149 (mrq->data && mrq->data->error == -EILSEQ) || in mmc_request_done()
150 (mrq->stop && mrq->stop->error == -EILSEQ))) in mmc_request_done()
158 if (host->ongoing_mrq == mrq) in mmc_request_done()
161 mmc_complete_cmd(mrq); in mmc_request_done()
163 trace_mmc_request_done(host, mrq); in mmc_request_done()
175 mmc_should_fail_request(host, mrq); in mmc_request_done()
180 if (mrq->sbc) { in mmc_request_done()
182 mmc_hostname(host), mrq->sbc->opcode, in mmc_request_done()
183 mrq->sbc->error, in mmc_request_done()
184 mrq->sbc->resp[0], mrq->sbc->resp[1], in mmc_request_done()
185 mrq->sbc->resp[2], mrq->sbc->resp[3]); in mmc_request_done()
193 if (mrq->data) { in mmc_request_done()
196 mrq->data->bytes_xfered, mrq->data->error); in mmc_request_done()
199 if (mrq->stop) { in mmc_request_done()
201 mmc_hostname(host), mrq->stop->opcode, in mmc_request_done()
202 mrq->stop->error, in mmc_request_done()
203 mrq->stop->resp[0], mrq->stop->resp[1], in mmc_request_done()
204 mrq->stop->resp[2], mrq->stop->resp[3]); in mmc_request_done()
211 if (mrq->done) in mmc_request_done()
212 mrq->done(mrq); in mmc_request_done()
217 static void __mmc_start_request(struct mmc_host *host, struct mmc_request *mrq) in __mmc_start_request() argument
224 mrq->cmd->error = err; in __mmc_start_request()
225 mmc_request_done(host, mrq); in __mmc_start_request()
234 if (sdio_is_io_busy(mrq->cmd->opcode, mrq->cmd->arg) && in __mmc_start_request()
242 mrq->cmd->error = -EBUSY; in __mmc_start_request()
243 mmc_request_done(host, mrq); in __mmc_start_request()
248 if (mrq->cap_cmd_during_tfr) { in __mmc_start_request()
249 host->ongoing_mrq = mrq; in __mmc_start_request()
254 reinit_completion(&mrq->cmd_completion); in __mmc_start_request()
257 trace_mmc_request_start(host, mrq); in __mmc_start_request()
262 host->ops->request(host, mrq); in __mmc_start_request()
265 static void mmc_mrq_pr_debug(struct mmc_host *host, struct mmc_request *mrq, in mmc_mrq_pr_debug() argument
268 if (mrq->sbc) { in mmc_mrq_pr_debug()
270 mmc_hostname(host), mrq->sbc->opcode, in mmc_mrq_pr_debug()
271 mrq->sbc->arg, mrq->sbc->flags); in mmc_mrq_pr_debug()
274 if (mrq->cmd) { in mmc_mrq_pr_debug()
277 mrq->cmd->opcode, mrq->cmd->arg, mrq->cmd->flags); in mmc_mrq_pr_debug()
280 mmc_hostname(host), mrq->tag, mrq->data->blk_addr); in mmc_mrq_pr_debug()
283 if (mrq->data) { in mmc_mrq_pr_debug()
286 mmc_hostname(host), mrq->data->blksz, in mmc_mrq_pr_debug()
287 mrq->data->blocks, mrq->data->flags, in mmc_mrq_pr_debug()
288 mrq->data->timeout_ns / 1000000, in mmc_mrq_pr_debug()
289 mrq->data->timeout_clks); in mmc_mrq_pr_debug()
292 if (mrq->stop) { in mmc_mrq_pr_debug()
294 mmc_hostname(host), mrq->stop->opcode, in mmc_mrq_pr_debug()
295 mrq->stop->arg, mrq->stop->flags); in mmc_mrq_pr_debug()
299 static int mmc_mrq_prep(struct mmc_host *host, struct mmc_request *mrq) in mmc_mrq_prep() argument
304 if (mrq->cmd) { in mmc_mrq_prep()
305 mrq->cmd->error = 0; in mmc_mrq_prep()
306 mrq->cmd->mrq = mrq; in mmc_mrq_prep()
307 mrq->cmd->data = mrq->data; in mmc_mrq_prep()
309 if (mrq->sbc) { in mmc_mrq_prep()
310 mrq->sbc->error = 0; in mmc_mrq_prep()
311 mrq->sbc->mrq = mrq; in mmc_mrq_prep()
313 if (mrq->data) { in mmc_mrq_prep()
314 if (mrq->data->blksz > host->max_blk_size || in mmc_mrq_prep()
315 mrq->data->blocks > host->max_blk_count || in mmc_mrq_prep()
316 mrq->data->blocks * mrq->data->blksz > host->max_req_size) in mmc_mrq_prep()
319 for_each_sg(mrq->data->sg, sg, mrq->data->sg_len, i) in mmc_mrq_prep()
321 if (sz != mrq->data->blocks * mrq->data->blksz) in mmc_mrq_prep()
324 mrq->data->error = 0; in mmc_mrq_prep()
325 mrq->data->mrq = mrq; in mmc_mrq_prep()
326 if (mrq->stop) { in mmc_mrq_prep()
327 mrq->data->stop = mrq->stop; in mmc_mrq_prep()
328 mrq->stop->error = 0; in mmc_mrq_prep()
329 mrq->stop->mrq = mrq; in mmc_mrq_prep()
336 int mmc_start_request(struct mmc_host *host, struct mmc_request *mrq) in mmc_start_request() argument
340 init_completion(&mrq->cmd_completion); in mmc_start_request()
347 mmc_mrq_pr_debug(host, mrq, false); in mmc_start_request()
351 err = mmc_mrq_prep(host, mrq); in mmc_start_request()
356 __mmc_start_request(host, mrq); in mmc_start_request()
362 static void mmc_wait_done(struct mmc_request *mrq) in mmc_wait_done() argument
364 complete(&mrq->completion); in mmc_wait_done()
379 static int __mmc_start_req(struct mmc_host *host, struct mmc_request *mrq) in __mmc_start_req() argument
385 init_completion(&mrq->completion); in __mmc_start_req()
386 mrq->done = mmc_wait_done; in __mmc_start_req()
388 err = mmc_start_request(host, mrq); in __mmc_start_req()
390 mrq->cmd->error = err; in __mmc_start_req()
391 mmc_complete_cmd(mrq); in __mmc_start_req()
392 complete(&mrq->completion); in __mmc_start_req()
398 void mmc_wait_for_req_done(struct mmc_host *host, struct mmc_request *mrq) in mmc_wait_for_req_done() argument
403 wait_for_completion(&mrq->completion); in mmc_wait_for_req_done()
405 cmd = mrq->cmd; in mmc_wait_for_req_done()
417 __mmc_start_request(host, mrq); in mmc_wait_for_req_done()
432 int mmc_cqe_start_req(struct mmc_host *host, struct mmc_request *mrq) in mmc_cqe_start_req() argument
446 mrq->host = host; in mmc_cqe_start_req()
448 mmc_mrq_pr_debug(host, mrq, true); in mmc_cqe_start_req()
450 err = mmc_mrq_prep(host, mrq); in mmc_cqe_start_req()
454 err = host->cqe_ops->cqe_request(host, mrq); in mmc_cqe_start_req()
458 trace_mmc_request_start(host, mrq); in mmc_cqe_start_req()
463 if (mrq->cmd) { in mmc_cqe_start_req()
465 mmc_hostname(host), mrq->cmd->opcode, err); in mmc_cqe_start_req()
468 mmc_hostname(host), mrq->tag, err); in mmc_cqe_start_req()
482 void mmc_cqe_request_done(struct mmc_host *host, struct mmc_request *mrq) in mmc_cqe_request_done() argument
484 mmc_should_fail_request(host, mrq); in mmc_cqe_request_done()
487 if ((mrq->cmd && mrq->cmd->error == -EILSEQ) || in mmc_cqe_request_done()
488 (mrq->data && mrq->data->error == -EILSEQ)) in mmc_cqe_request_done()
491 trace_mmc_request_done(host, mrq); in mmc_cqe_request_done()
493 if (mrq->cmd) { in mmc_cqe_request_done()
495 mmc_hostname(host), mrq->cmd->opcode, mrq->cmd->error); in mmc_cqe_request_done()
498 mmc_hostname(host), mrq->tag); in mmc_cqe_request_done()
501 if (mrq->data) { in mmc_cqe_request_done()
504 mrq->data->bytes_xfered, mrq->data->error); in mmc_cqe_request_done()
507 mrq->done(mrq); in mmc_cqe_request_done()
516 void mmc_cqe_post_req(struct mmc_host *host, struct mmc_request *mrq) in mmc_cqe_post_req() argument
519 host->cqe_ops->cqe_post_req(host, mrq); in mmc_cqe_post_req()
590 bool mmc_is_req_done(struct mmc_host *host, struct mmc_request *mrq) in mmc_is_req_done() argument
592 return completion_done(&mrq->completion); in mmc_is_req_done()
608 void mmc_wait_for_req(struct mmc_host *host, struct mmc_request *mrq) in mmc_wait_for_req() argument
610 __mmc_start_req(host, mrq); in mmc_wait_for_req()
612 if (!mrq->cap_cmd_during_tfr) in mmc_wait_for_req()
613 mmc_wait_for_req_done(host, mrq); in mmc_wait_for_req()
629 struct mmc_request mrq = {}; in mmc_wait_for_cmd() local
636 mrq.cmd = cmd; in mmc_wait_for_cmd()
639 mmc_wait_for_req(host, &mrq); in mmc_wait_for_cmd()