emmc kernel driver流程
来源:互联网 发布:网络变压器厂商 编辑:程序博客网 时间:2024/06/03 23:40
mmc_queue_thread -> 负责从IO调度的队列中取request
mmc_blk_issue_rq ->
mmc_blk_issue_rw_rq ->
mmc_start_req ->
__mmc_start_data_req ->
mmc_start_request ->
sprd_sdhc_request
mmc_queue_thread:从io调度层获取req(mmc_queue_thread),如果获得的req不为空或者上次的req不为空,则queue的状态值为runing,并且调用queue.issue_fn = mmc_blk_issue_rq开始处理req如果参数req为空(无新request),或者mmc queue的previous request也为空(无未完成的request),那么mmc_blk_issue_rw_rq直接返回。
mmc_blk_prep_packed_list尝试把当前request和队列中的其他request合并,以增强性能。是否可以合并,要依赖于:
1. 控制器支持packed功能 host->caps
2. device的MAX_PACKED_WRITES 大于0
3. 只对写request进行packed
4.如果当前的写为增强写,但是设备不支持的情况下不packed
接下来会判断当前的req的block是否满足4k的sector,满足则继续执行,否则直接abort本次的请求
然后判断packed的数量是否超过了packed_nr,超过了会执行mmc_blk_packed_hdr_wr_prep,否则继续
正常情况下执行mmc_blk_rw_rq_prep函数,从request构造mmc_request,并下发给host请求,是mmc_request,而不是block层通用的request。如果支持packed功能,那么就用pack_list来构造mmc_request
areq表示async req,实际上,只要参数req存在,就表明这是一个新request,必然是异步传输的。
mmc_start_req 启动一个非阻塞的request,这个函数会等待前一个request完成,然后把启动当前requeset,并立刻返回
如果mmc_start_req返回的areq不为空,说明完成了上一次的request,
如果使用了bounce buffer,那么需要把传输结果从bounce buffer复制会sg buffer。所谓bounce buffer是因为某些DMA控制器只能处理连续物理内存,此时需要通过bounce buffer来达到物理内存连续性。
检查mmc_start_req返回的状态:
1. 如果是MMC_BLK_SUCCESS或者MMC_BLK_PARTIAL,需要调用blk_end_request通知block设备层,完成了本次读写request。
2. 如果是MMC_BLK_CMD_ERR,那么调用mmc_blk_reset复位host。调用mmc_blk_cmd_err尝试blk_end_request,如果发现reuqest未完成,说明本次操作失败,反之成功start_new_req
- emmc kernel driver流程
- linux kernel, driver, network driver
- EMMC子系统分析-读写流程
- 烧写kernel,ramdisk,rootfs 到emmc
- Kernel Streaming Driver
- linux kernel driver database
- Vibrator Kernel driver 实现
- Linux Kernel driver model
- driver之kernel
- Vibrator Kernel driver 实现
- Linux kernel driver model
- Kernel Driver获取cmdline
- Windows Kernel&Driver FQA
- kernel中的tee driver
- kernel driver probe sequence
- Linux EMMC子系统分析-初始化流程
- linux关机时emmc驱动处理流程
- uboot的eMMC初始化代码流程分析
- poj 1573 Robot Motion
- Android中px、dp、sp之间相互转换
- 解决android timePicker 和 datePicker因系统版本差异而引起的样式改变
- SP:创建Windows应用程序的要点详解
- CoreThink开发(十一)首页控制器判断移动设备还是PC并做相应处理
- emmc kernel driver流程
- 小米面试题——并查集(关于朋友圈问题)
- javaIO流部分总结
- android 如何使用Service
- java设计模式之命令模式
- java 实现平衡树
- MySQL学习笔记第2课(共10课)
- NOIP 2013 - 提高组 火柴排队 归并排序+逆序对 重庆一中高2018级竞赛班第六次测试 2016.7.31 Problem 4
- 今天开始刷leetcode了(蜜汁微笑)