供给上层MMC Card调用主要有: void mmc_wait_for_req(struct mmc_host *host, struct mmc_request *mrq); int mmc_wait_for_cmd(struct mmc_host *host, struct mmc_command *cmd, int retries); mmc card层就是通过这些函数来操作mmc/sd卡。而这些函数最终调用的是mmc_host_ops 结构体中的request函数来...
mmc_wait_for_cmd()里面创建mrq结构变量,之前说过mrq变量的意义, mrq.cmd = cmd; cmd->data = NULL; mmc_wait_for_req(host, &mrq); __mmc_start_req() 启动 mmc_start_request() 这基本跟读写命令的流程就一致了。 mmc_wait_for_req_done() 等待wait_for_completion_io(&mrq->completion); 看得...
mmc_blk_rw_rq_prep(mq->mqrq_cur, card, 0, mq); //mmc/card/block.c mmc_start_req(card->host, areq, (int *) &status); //mmc/core/core.c //传进来第2个参数名为mrq mmc_wait_for_data_req_done(host, host->areq->mrq, areq); //mmc/core/core.c //等待。退出条件:上一个请...
mmc_request_done mmc_wait_for_req mmc_wait_for_cmd mmc_set_data_timeout mmc_align_data_size 7、card检测相关 mmc_detect_change mmc_rescan mmc_detect_card_removed 8、bkops操作相关 mmc_blk_init_bkops_statistics mmc_start_delayed_bkops mmc_start_bkops & mmc_stop_bkops mmc_start_idle_time_b...
4.4.2.卡中数据读写涉及到的函数 mmc_blk_issue_rq(card/block.c) mmc_wait_for_req(core/core.c) mmc_start_request(core/core.c) host->ops->requset(host,mrq) //tcc_sdhc.c中的tcc_mmc_request 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/131462.html原文链接:https://jav...
mmc_wait_for_req(card->host, &brq.mrq);/* * A block was successfully transferred. */spin_lock_irq(&md->lock); ret = __blk_end_request(req,0, brq.data.bytes_xfered); spin_unlock_irq(&md->lock); }while(ret);return1;
void mmc_wait_for_req(struct mmc_host *host, struct mmc_request *mrq) { DECLARE_COMPLETION_ONSTACK(complete); mrq->done_data = &complete; mrq->done = mmc_wait_done; /* 设置请求完成回调函数 */ mmc_start_request(host, mrq); /* 开始一个请求 */ ...
drivers/MMC/core/core.c:473 [MMC_core]MMC_WAIT_for_req_done =p "%s":请求失败(CMD%u):%d、重试...\012" drivers/MMC/core/core.c:2278 [MMC_core]MMC_calc_max_discard =p "%s":计算的最大值 放弃扇区%u 以进行超时%u ms\012"
--》mmc_wait_for_req --》__mmc_start_req --》mmc_start_request --》__mmc_start_request staticvoid__mmc_start_request(structmmc_host *host,structmmc_request *mrq) ...
__mmc_start_data_req -> mmc_start_request -> omap_hsmmc_request 首先mmc_queue_thread获取相应的mmc_request然然后调用mq->issue_fn处理reuqest,issue_fn有可能被阻塞在mmc_wait_for_data_req_done,如果此时有新的请求到达,那么有可能会唤醒阻塞的进程(条件是cur==null, prev!=null)。