zoukankan      html  css  js  c++  java
  • PCIE BAR空间

     PCIE应用程序编程,首先就要理清PCIE BAR空间到底说的是什么。在PCIE配置空间里,0x10开始后面有6个32位的BAR寄存器,BAR寄存器中存储的数据是表示PCIE设备在PCIE地址空间中的基地址,注意这里不是表示PCIE设备内存在CPU内存中的映射地址,关于这两者的关系以及两者如何转换后面会有介绍。

        1,BAR寄存器的数据格式,BAR寄存器表示的设备存储类型有memory space BAR和IO space BAR两种,

              对于memory space BAR,数组格式如下面所示

              31-----------------------------------4 |        3           |     2-1     |       0

              16-Byte aligned Base Adress   prefetchable    Type   always 0

               对于IO space BAR,数组格式如下所示

               31-----------------------------------2 |      1      |     0

               4-Byte Aligned Base Address    reserve   always 0

               对于memory space BAR的16-Byte aligned Base Address 这里的Base Address代表的是16个byte数据的地址

              对于IO space BAR的4-Byte aligned Base Address这里的BaseAddress代表的是4个byte数据的地址

        2,BAR寄存器数据的初始化

              BAR寄存器的数据是怎么初始化,由谁进行初始化的?因为初始化的数据是PCIE设备所在的总线域的地址空间,所以肯定不会是EP自己进行初始化,因为如果这样EP是不知道其他PCIE设备对应的总线地址空间的,所以可能会引起总线地址空间的冲突,所以BAR寄存器的初始化是由内核进行初始化的,在系统开机时,内核会遍历查找哥哥PCIE设备,然后为PCIE设备分配对应的总线地址空间。

        3,BAR寄存器存储的总线地址和应用程序内存地址的关系

              BAR寄存器存储的总线地址,应用程序是不能直接利用的,应用程序首先要做的就是读出BAR寄存器的值,然后用mmap函数建立应用程序内存空间和总线地址空间的映射关系。这样应用程序往PCIE设备内存读写数据的时候,直接利用PCIE设备映射到应用程序中的内存地址即可。但是应用程序的内存地址该由谁解析到PCIE设备对应的总线空间给EP呢,这个工作是由北桥或者是RC(root complex)来完成的,解析到总线地址空间之后,EP会把总线的地址空间解析成PCIE设备对应的设备内存地址。

    转载:http://blog.csdn.net/buyi_shizi/article/details/51068609

  • 相关阅读:
    array_merge() 用法
    session_unset 与 session_destroy 区别
    关联模型中
    TP框架中分页类的使用
    ajax验证用户名是否被注册 ; ajax提交form表单
    点击图片img提交form表单
    输入框蓝光特效
    搭建owncloud私有云
    小米路由器3-R3 刷固件
    mysql的sql_mode合理设置
  • 原文地址:https://www.cnblogs.com/chengqi521/p/8242625.html
Copyright © 2011-2022 走看看