md = mmc_blk_alloc(card); //card/block.c mmc_blk_alloc_req(card, &card->dev, size, false, NULL, MMC_BLK_DATA_AREA_MAIN); //card/block.c //传进来第1个参数名为card struct mmc_blk_data *md; md = kzalloc(sizeof(struct mmc_blk_data), GFP_KERNEL); md->disk = alloc_disk(pe...
从全局的struct blk_major_name类型的数组major_names中注销主设备号为MMC_BLOCK_MAJOR名为mmc的blk_major_name结构体 释放对应的blk_major_name结构体 3.3 mmc_blk_probe mmc_blk_probe-> mmc_blk_alloc-> mmc_blk_alloc_req-> alloc_disk mmc_init_queue-> blk_queue_prep_rq kthread_run(mmc_queue_th...
在mmc_queue_thread函数,通过blk_fetch_request从mmc queue中取出请求,然后执行mq->issue_fn下发请求,mq->issue_fn在mmc_blk_alloc_req函数完成初始化,即执行mmc_blk_issue_rq下发请求。 代码语言:javascript 复制 staticintmmc_blk_issue_rq(struct mmc_queue*mq,struct request*req){int ret;struct mmc_blk...
在mmc_queue_thread函数,通过blk_fetch_request从mmc queue中取出请求,然后执行mq->issue_fn下发请求,mq->issue_fn在mmc_blk_alloc_req函数完成初始化,即执行mmc_blk_issue_rq下发请求。 static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req) { int ret; struct mmc_blk_data *md ...
//上面的驱动mmcblk与设备在总线mmc上匹配,将执行下面的函数 mmc_blk_probe mmc_blk_alloc mmc_blk_alloc_req mmc_init_queue //drivers\mmc\core\queue.c mq->queue = blk_mq_init_queue(&mq->tag_set); blk_mq_init_queue blk_mq_init_queue_data ...
mmc->max_blk_size =4095; mmc->max_req_size =4095*512; mmc->max_seg_size = mmc->max_req_size; mmc->max_phys_segs =128; mmc->max_hw_segs =128; 这些是核心层会用到的,所以需要初始化它们,其中s3cmci_ops是控制器操作集,编写控制器驱动的一个主要任务就是实现这个操作集, ...
在第四步中,hostdriver注册成功后,platform总线会把此driver和1中注册的host dev匹配,然后执行host driver的probe函数rda_mmc_probe。该函数中完成mmc_alloc_host申请mmc host结构体,然后完成初始化,以及中断等的申请等,最后调用mmc_add_host完成card的探测,如果card存在,生成card device。
@@ -2162,6 +2158,7 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card, md->disk->queue = md->queue.queue; md->disk->driverfs_dev = parent; set_disk_ro(md->disk, md->read_only || default_ro);
Expand Down Expand Up @@ -2505,9 +2511,9 @@ static struct mmc_blk_data *mmc_blk_alloc_req(struct mmc_card *card, string_get_size((u64)size, 512, STRING_UNITS_2, cap_str, sizeof(cap_str)); pr_info("%s: %s %s %s %s\n", pr_info("%s: %s %s %s%s\n", md->disk->...
staticintmmc_blk_probe(structmmc_card*card){structmmc_blk_data*md;ﻫinterr;ﻫ/*ﻫ*Checkthatthecardsupportsthecommandclass(es)weneed.ﻫ*/ﻫif(!(card->csd.cmdclass&CCC_BLOCK_READ))ﻫreturn-ENODEV;ﻫﻫmd=mmc_blk_alloc(card);//ﻫ...