• 7. [mmc subsystem] host(第一章)——概述


    一、host简单说明

    • host,也可以理解为host controller,是指mmc总线上的主机端,mmc总线的控制器,每个host controller对应一条mmc总线。

    • host controller会控制命令线、数据线和时钟线,从而实现mmc总线上的通讯。 上层发送mmc请求时,就是通过host controller产生对应的mmc通讯时序,下发至mmc设备,与mmc设备通讯。

    注意,host的部分主要是实现card的通讯和检测,不去负责card的具体功能。

    二、host驱动简单说明

    1、host driver路径

    平台实现mmc驱动,核心内容就是要实现host controller的驱动。

    在mmc subsystem中,把host controller的驱动都放在了/drivers/mmc/host目录下。

    2、host controller要做的事情

    通过《mmc core》一系列的说明,可以知道一个host driver要做的事情如下:

    • 申请mmc_host
    • 设置mmc_host的成员,包括操作集等等
    • 完成host controller的初始化(哪些方面的初始化)
    • 注册mmc_host,注册之后会去搜索card

    补充说明:应实际的card设备(emmc card、mmc card、sd card),mmc core部分已经实现了其协议中初始化的部分,而其card设备具体功能的实现则是在card模块中进行实现。host驱动只负责card的通讯和检测等等,并不会去实现card的具体功能。!!!

    三、sdhci类host

    1、SDHC说明

    注意,不同于SDHCSDXC的概念。这里是指一种标准。
    SDHC:Secure Digital(SD) Host Controller,是指一套sd host控制器的设计标准,其寄存器偏移以及意义都有一定的规范,并且提供了对应的驱动程序,方便vendor进行host controller的开发。

    vendor按照这套标准设计host controller之后,可以直接使用sdhci driver来实现host controller的使用,(qcom和samsung都使用了这套标准)。而vendor只需要实现平台相关的部分、如clock、pinctrl、power等等的部分即可。

    关于这个标准,我们可以参考《SDHC_Ver3.00_Final_110225》。

    注意,强调一下,这是一种mmc host controller的设计标准,其本质上还是属于mmc host。并且,其兼容mmc type card,而不是说只能使用于sd type card。

    2、sdhci类host说明

    我们将符合sdhci标准的host称之为sdhci类host。

    例如:三星s5pv210平台上的mmc host设计就使用了sdhci的标准,因此符合的就属于sdhci类host,具体代码对应(sdhci-s3c.c)。

    像/drivers/mmc/host目录一些命名为“sdhci-XXXX.c”(sdhci-pltfm除外)的驱动都表示对应的host是sdhci类host。

    后续,我们将这种标准当作一种控制器,也就是把host和controller独立开来。例如高通的sd host使用了sdhc的标准,那么我们可以理解为msm host中包含了sdhci controller,这样的理解有助于后续理解整体的代码架构。

    因为目前主流平台的mmc host基本上都是用了sdhci标准,故后续主要学习sdhci类host的代码。

    四、几个host结构体的关联关系

    1、几个host结构体的说明

    对于sdhci类host来说,我们会遇到如下几个关于host的结构体

    • 和平台相关的host(struct sdhci_msm_host)
      平台会制定自己的host结构体来管理自己的一些资源和状态。

    例如高通用struct sdhci_msm_host来定义自己的host,在《host(第四章)——host实例(sdhci-msm说明)》中介绍。

    对应代码:drivers/mmc/host/sdhci-s3c.c、drivers/mmc/host/sdhci-msm.c
    
    • sdhci_host

    对于sdhci类host(也就是符合sdhci标准)的host来说,直接通过sdhci core来实现host controller的使用。

    而sdhci core会为对应的host抽象出对应的struct sdhci_host结构体进行管理。

    在《host(第二章)——sdhci》中介绍。

    对应代码:drivers/mmc/host/sdhci.c

    • sdhci_pltfm_host

    虽然平台host符合sdhci标准,但是有些内容是由平台决定,但是又是sdhci core需要的,这部分内容被封装到sdhci_pltfm_data中。

    相应的,平台设备的host可以通过sdhci_pltfm_host来实现和sdhci_host的关联。

    在《host(第四章)——host实例(sdhci-msm说明)》中介绍。

    对应代码:drivers/mmc/host/sdhci-pltfm.c

    • mmc_host
      在《mmc core》系列中已经说明过。

    mmc core通过struct mmc_host来管理host。不管是什么类型的host,最终都是要实现出对应的mmc_host注册到mmc core中交由mmc管理。

    对应代码:drivers/mmc/core/host.c

    2、几个host结构体之间的关联

    • 从代码上具体关联如下:
    sdhci_host->mmc = mmc_host
    sdhci_host->private = sdhci_pltfm_host
    sdhci_pltfm_host->priv = sdhci_msm_host
    platform_get_drvdata(sdhci_msm_host->struct platform_device) = sdhci_host
    sdhci_msm_host->mmc = mmc_host
    
  • 相关阅读:
    C++ char和string的区别
    解读机器学习基础概念:VC维的来龙去脉 | 数盟
    链接集锦
    MSSQL数据库日志满的快速解决办法
    oracle执行update时卡死问题的解决办法
    正则表达式中/i,/g,/ig,/gi,/m的区别和含义
    windows下sqlplus怎么连接远程oracle
    C#中TransactionScope的使用方法和原理
    C#设置Cookies .
    IIS7及以上伪静态报错404
  • 原文地址:https://www.cnblogs.com/linhaostudy/p/10811303.html
Copyright © 2020-2023  润新知