一、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说明

注意,不同于SDHC\SDXC的概念。这里是指一种标准。

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

7. [mmc subsystem] host(第一章)——概述的更多相关文章

  1. perl5 第一章 概述

    第一章 概述 by flamephoenix 一.Perl是什么?二.Perl在哪里?三.运行四.注释 一.Perl是什么?      Perl是Practical Extraction and Re ...

  2. 计算机网络课程优秀备考PPT之第一章概述(一)

    为了记录自己从2016.9~2017.1的<计算机网络>助教生涯,也为了及时梳理和整写笔记! 以上,是<计算机网络>课程的第一章概述.

  3. TCP/IP详解 卷1 第一章概述

    第一章概述 1.2 分层 网络编程通常分不同层次进行开发,每一层负责不同的通信功能. 一个协议族比如TCP/IP,通常是一组不同层次上多个协议的组合.一般可以认为是是四层协议系统: 链路层:有时也称作 ...

  4. 【译文连载】 理解Istio服务网格(第一章 概述)

    书籍英文版下载链接为 https://developers.redhat.com/books/introducing-istio-service-mesh-microservices/,作者 Burr ...

  5. 8. [mmc subsystem] host(第二章)——sdhci

    一.sdhci core说明 1.sdhci说明 具体参考<host(第一章)--概述> SDHC:Secure Digital(SD) Host Controller,是指一套sd ho ...

  6. 10. [mmc subsystem] host(第四章)——host实例(sdhci-msm说明)

    一.说明 sdhci-msm是指高通的mmc host,其使用了标准SDHC标准.故可以使用前面说的<host(第二章)--sdhci>和<host(第三章)--sdhci-pltf ...

  7. Camel In Action 阅读笔记 第一部分概述 + 第一章概述 认识Camel

    第一部分: 最开始的一小步 Apache Camel 是一个开源集成框架,其目的是让系统集成变得更加简便,在本书的第一章中,我们会为您介绍它并向您展示它是如何在大型企业应用中做好集成工作.您也会了解到 ...

  8. 9. [mmc subsystem] host(第三章)——sdhci-pltfm说明

    一.sdhci-pltfm说明 sdhci-pltfm并不是实际某个host的driver. sdhci-pltfm是指在sdhci core的基础上,提供了统一对sdhci_host的必要属性进行解 ...

  9. htt p第一章概述

    http的概述 1 web客户端与服务器是如何通信 2 web资源来自的何方 3 web事务是怎样的工作的 4 http通信所使用的报文结构 5 底层tcp的传输的结构 6不同的http协议体 什么是 ...

随机推荐

  1. 初学JavaScript正则表达式(十一)

    JavaScript的对象属性 整理自慕课网教学 点此进入

  2. (转)idea创建Maven项目时Maven插件内看不到mybatis-generator

    转载地址:https://blog.csdn.net/yytwiligt/article/details/81010360 创建Maven项目时插件配置添加了mybatis-generator但是右侧 ...

  3. 剑指Offer-5.用两个栈实现队列(C++/Java)

    题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 分析: 栈的特点是先进后出,队列的特点则是先进先出. 题目要求我们用两个栈来实现一个队列,栈和队列都有入栈 ...

  4. 经典排序 python实现

    稳定的排序算法:冒泡排序.插入排序.归并排序和基数排序. 不是稳定的排序算法:选择排序.快速排序.希尔排序.堆排序. 冒泡 def bobble(arr): length = len(arr) for ...

  5. Pycharm2019.2.4专业版激活

    Pycharm2019.2.4专业版激活 IDE是开发者创建程序时使用的的软件包,它通过简单的用户界面集成多个高度关联的组件,从而最大化提升编程体验和生产效率:本质上,IDE是一种改进代码创建.测试和 ...

  6. Git修改和配置用户名和邮箱

    git在push/push to时需要使用到user.name和user.email,切记一定要现配置好查看user.name/user.email git config user.name git ...

  7. 物联网架构成长之路(46)-Rancher部署应用入门

    0.前言 上一篇已经安装好Rancher了,这一篇主要是简单的操作一下Rancher,了解一些常用功能.1.集群信息 选择对应的集群,查看对应集群信息. 还可以执行kubectl命令,命令可以参考前几 ...

  8. 十、自定义ThreadPoolExecutor线程池

    自定义ThreadPoolExecutor线程池 自定义线程池需要遵循的规则 [1]线程池大小的设置 1.计算密集型: 顾名思义就是应用需要非常多的CPU计算资源,在多核CPU时代,我们要让每一个CP ...

  9. vuex 源码分析(七) module和namespaced 详解

    当项目非常大时,如果所有的状态都集中放到一个对象中,store 对象就有可能变得相当臃肿. 为了解决这个问题,Vuex允许我们将 store 分割成模块(module).每个模块拥有自己的 state ...

  10. Mysql 常用数据类型 占用字节数 [转]

    数据类型是定义列中可以存储什么数据以及该数据实际怎么存储的基本规则.Mysql的常用数据类型主要有: 串数据类型:最常用的数据类型,有两种基本的串类型:分别为定长串和不定长串.定长串结束长度固定的字符 ...