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()
147 (err == -EILSEQ || (mrq->sbc && mrq->sbc->error == -EILSEQ) || in mmc_request_done()
148 (mrq->data && mrq->data->error == -EILSEQ) || in mmc_request_done()
149 (mrq->stop && mrq->stop->error == -EILSEQ))) in mmc_request_done()
157 if (host->ongoing_mrq == mrq) in mmc_request_done()
160 mmc_complete_cmd(mrq); in mmc_request_done()
162 trace_mmc_request_done(host, mrq); in mmc_request_done()
174 mmc_should_fail_request(host, mrq); in mmc_request_done()
179 if (mrq->sbc) { in mmc_request_done()
181 mmc_hostname(host), mrq->sbc->opcode, in mmc_request_done()
182 mrq->sbc->error, in mmc_request_done()
183 mrq->sbc->resp[0], mrq->sbc->resp[1], in mmc_request_done()
184 mrq->sbc->resp[2], mrq->sbc->resp[3]); in mmc_request_done()
192 if (mrq->data) { in mmc_request_done()
195 mrq->data->bytes_xfered, mrq->data->error); in mmc_request_done()
198 if (mrq->stop) { in mmc_request_done()
200 mmc_hostname(host), mrq->stop->opcode, in mmc_request_done()
201 mrq->stop->error, in mmc_request_done()
202 mrq->stop->resp[0], mrq->stop->resp[1], in mmc_request_done()
203 mrq->stop->resp[2], mrq->stop->resp[3]); in mmc_request_done()
210 if (mrq->done) in mmc_request_done()
211 mrq->done(mrq); in mmc_request_done()
216 static void __mmc_start_request(struct mmc_host *host, struct mmc_request *mrq) in __mmc_start_request() argument
223 mrq->cmd->error = err; in __mmc_start_request()
224 mmc_request_done(host, mrq); in __mmc_start_request()
233 if (sdio_is_io_busy(mrq->cmd->opcode, mrq->cmd->arg) && in __mmc_start_request()
241 mrq->cmd->error = -EBUSY; in __mmc_start_request()
242 mmc_request_done(host, mrq); in __mmc_start_request()
247 if (mrq->cap_cmd_during_tfr) { in __mmc_start_request()
248 host->ongoing_mrq = mrq; in __mmc_start_request()
253 reinit_completion(&mrq->cmd_completion); in __mmc_start_request()
256 trace_mmc_request_start(host, mrq); in __mmc_start_request()
261 host->ops->request(host, mrq); in __mmc_start_request()
264 static void mmc_mrq_pr_debug(struct mmc_host *host, struct mmc_request *mrq, in mmc_mrq_pr_debug() argument
267 if (mrq->sbc) { in mmc_mrq_pr_debug()
269 mmc_hostname(host), mrq->sbc->opcode, in mmc_mrq_pr_debug()
270 mrq->sbc->arg, mrq->sbc->flags); in mmc_mrq_pr_debug()
273 if (mrq->cmd) { in mmc_mrq_pr_debug()
276 mrq->cmd->opcode, mrq->cmd->arg, mrq->cmd->flags); in mmc_mrq_pr_debug()
279 mmc_hostname(host), mrq->tag, mrq->data->blk_addr); in mmc_mrq_pr_debug()
282 if (mrq->data) { in mmc_mrq_pr_debug()
285 mmc_hostname(host), mrq->data->blksz, in mmc_mrq_pr_debug()
286 mrq->data->blocks, mrq->data->flags, in mmc_mrq_pr_debug()
287 mrq->data->timeout_ns / 1000000, in mmc_mrq_pr_debug()
288 mrq->data->timeout_clks); in mmc_mrq_pr_debug()
291 if (mrq->stop) { in mmc_mrq_pr_debug()
293 mmc_hostname(host), mrq->stop->opcode, in mmc_mrq_pr_debug()
294 mrq->stop->arg, mrq->stop->flags); in mmc_mrq_pr_debug()
298 static int mmc_mrq_prep(struct mmc_host *host, struct mmc_request *mrq) in mmc_mrq_prep() argument
303 if (mrq->cmd) { in mmc_mrq_prep()
304 mrq->cmd->error = 0; in mmc_mrq_prep()
305 mrq->cmd->mrq = mrq; in mmc_mrq_prep()
306 mrq->cmd->data = mrq->data; in mmc_mrq_prep()
308 if (mrq->sbc) { in mmc_mrq_prep()
309 mrq->sbc->error = 0; in mmc_mrq_prep()
310 mrq->sbc->mrq = mrq; in mmc_mrq_prep()
312 if (mrq->data) { in mmc_mrq_prep()
313 if (mrq->data->blksz > host->max_blk_size || in mmc_mrq_prep()
314 mrq->data->blocks > host->max_blk_count || in mmc_mrq_prep()
315 mrq->data->blocks * mrq->data->blksz > host->max_req_size) in mmc_mrq_prep()
318 for_each_sg(mrq->data->sg, sg, mrq->data->sg_len, i) in mmc_mrq_prep()
320 if (sz != mrq->data->blocks * mrq->data->blksz) in mmc_mrq_prep()
323 mrq->data->error = 0; in mmc_mrq_prep()
324 mrq->data->mrq = mrq; in mmc_mrq_prep()
325 if (mrq->stop) { in mmc_mrq_prep()
326 mrq->data->stop = mrq->stop; in mmc_mrq_prep()
327 mrq->stop->error = 0; in mmc_mrq_prep()
328 mrq->stop->mrq = mrq; in mmc_mrq_prep()
335 int mmc_start_request(struct mmc_host *host, struct mmc_request *mrq) in mmc_start_request() argument
339 init_completion(&mrq->cmd_completion); in mmc_start_request()
346 mmc_mrq_pr_debug(host, mrq, false); in mmc_start_request()
350 err = mmc_mrq_prep(host, mrq); in mmc_start_request()
355 __mmc_start_request(host, mrq); in mmc_start_request()
361 static void mmc_wait_done(struct mmc_request *mrq) in mmc_wait_done() argument
363 complete(&mrq->completion); in mmc_wait_done()
378 static int __mmc_start_req(struct mmc_host *host, struct mmc_request *mrq) in __mmc_start_req() argument
384 init_completion(&mrq->completion); in __mmc_start_req()
385 mrq->done = mmc_wait_done; in __mmc_start_req()
387 err = mmc_start_request(host, mrq); in __mmc_start_req()
389 mrq->cmd->error = err; in __mmc_start_req()
390 mmc_complete_cmd(mrq); in __mmc_start_req()
391 complete(&mrq->completion); in __mmc_start_req()
397 void mmc_wait_for_req_done(struct mmc_host *host, struct mmc_request *mrq) in mmc_wait_for_req_done() argument
402 wait_for_completion(&mrq->completion); in mmc_wait_for_req_done()
404 cmd = mrq->cmd; in mmc_wait_for_req_done()
416 __mmc_start_request(host, mrq); in mmc_wait_for_req_done()
431 int mmc_cqe_start_req(struct mmc_host *host, struct mmc_request *mrq) in mmc_cqe_start_req() argument
445 mrq->host = host; in mmc_cqe_start_req()
447 mmc_mrq_pr_debug(host, mrq, true); in mmc_cqe_start_req()
449 err = mmc_mrq_prep(host, mrq); in mmc_cqe_start_req()
453 err = host->cqe_ops->cqe_request(host, mrq); in mmc_cqe_start_req()
457 trace_mmc_request_start(host, mrq); in mmc_cqe_start_req()
462 if (mrq->cmd) { in mmc_cqe_start_req()
464 mmc_hostname(host), mrq->cmd->opcode, err); in mmc_cqe_start_req()
467 mmc_hostname(host), mrq->tag, err); in mmc_cqe_start_req()
481 void mmc_cqe_request_done(struct mmc_host *host, struct mmc_request *mrq) in mmc_cqe_request_done() argument
483 mmc_should_fail_request(host, mrq); in mmc_cqe_request_done()
486 if ((mrq->cmd && mrq->cmd->error == -EILSEQ) || in mmc_cqe_request_done()
487 (mrq->data && mrq->data->error == -EILSEQ)) in mmc_cqe_request_done()
490 trace_mmc_request_done(host, mrq); in mmc_cqe_request_done()
492 if (mrq->cmd) { in mmc_cqe_request_done()
494 mmc_hostname(host), mrq->cmd->opcode, mrq->cmd->error); in mmc_cqe_request_done()
497 mmc_hostname(host), mrq->tag); in mmc_cqe_request_done()
500 if (mrq->data) { in mmc_cqe_request_done()
503 mrq->data->bytes_xfered, mrq->data->error); in mmc_cqe_request_done()
506 mrq->done(mrq); in mmc_cqe_request_done()
515 void mmc_cqe_post_req(struct mmc_host *host, struct mmc_request *mrq) in mmc_cqe_post_req() argument
518 host->cqe_ops->cqe_post_req(host, mrq); in mmc_cqe_post_req()
589 bool mmc_is_req_done(struct mmc_host *host, struct mmc_request *mrq) in mmc_is_req_done() argument
591 return completion_done(&mrq->completion); in mmc_is_req_done()
607 void mmc_wait_for_req(struct mmc_host *host, struct mmc_request *mrq) in mmc_wait_for_req() argument
609 __mmc_start_req(host, mrq); in mmc_wait_for_req()
611 if (!mrq->cap_cmd_during_tfr) in mmc_wait_for_req()
612 mmc_wait_for_req_done(host, mrq); in mmc_wait_for_req()
628 struct mmc_request mrq = {}; in mmc_wait_for_cmd() local
635 mrq.cmd = cmd; in mmc_wait_for_cmd()
638 mmc_wait_for_req(host, &mrq); in mmc_wait_for_cmd()