1.1 PCI&PCIE 配置寄存器访问

1.1 PCI&PCIE 配置寄存器访问1、PCIE寄存器的总体结构:PCI的配置寄存器空间为256个字节大小。PCIE扩展了配置寄存器空间,大小为4096的字节。PCIE配置寄存器的整体分布如下图所示:从上图可见,整个PCIE配置空间被分成了3部分,其中0-FF为PCI兼容的配置空间,100-FFF为PCIE扩展的空间。每部分的作用大概如下:a、0-3F:这部分的配置空间是标准的PCI配置空间头,是每个PCI/PCIE设备都必

大家好,又见面了,我是你们的朋友全栈君。

1、PCIE 寄存器的总体结构:

PCI的配置寄存器空间为256个字节大小。PCIE扩展了配置寄存器空间,大小为4096的字节。PCIE配置寄存器的整体分布如下图所示:

这里写图片描述

从上图可见,整个PCIE配置空间被分成了3部分,其中0-FF为PCI兼容的配置空间,100-FFF为PCIE扩展的空间。每部分的作用大概如下:

  • a、0-3F :这部分的配置空间是标准的PCI配置空间头,是每个PCI/PCIE设备都必须遵循的。目前一共有3种标准头格式,00是PCI DEVICE头,01是PCI-PCI bridge头,02是Cardbus bridge头。头类型由Header Type寄存器定义。
  • b、40-FF :这部分定义PCI扩展功能寄存器。0-3F定义的寄存器是每个PCI设备都必须实现的,而PCI的一些扩展功能,不是每个设备都必须实现的,可以根据自己的需要来实现其中一部分特性。重点注意的是这部分寄存器的组织结构,每一个可选的特性被组织成一个标准的Capability Struct,设备选用的多个Capabilities用链表的方式组织起来,称为Capabilities List。PCIE即在PCI原有的Capabilities当中新增了一种ID,即PCIE Capability Struct。这样可以实现对老的PCI驱动的兼容。
  • c、100-FFF:这部分定义PCIE扩展功能寄存器。实现PCIE的可选特性,也是采取Capabilities List结构组织起来的。

2、PCI Capabilities List(40 – FF)的组织方法:

40-FF区域用来实现可选的PCI特性,每个特性对应一个Capability Struct,所有实现的特性用链表的方式组织起来,称为Capabilities List。组织形式如下图所示:

这里写图片描述

在标准PCI头的寄存器中,”status”(06h)寄存器bit4定义了本设备是否有Capabilities List,”Capabilities Pointer”(34h)寄存器定义了Capabilities List链表头指针。如下图所示:

这里写图片描述

需要特别注意注意的是,PCI配置寄存器是不能随意增加的。寄存器需要根据特性组织成Capabilities Struct,对Capabilities Struct是有统一规定的,包括标准特性和自定义特性。
现在协议规定的Capabilities ID有下列特性:

这里写图片描述

3、PCIE Capabilities List(100 – FFF)的组织方法:

100-FFF区域用来实现PCIE独有可选的PCI特性,也都是使用Capabilities List的形式来组织的,只是具体的Capbalities Struct结构有些扩展。

这里写图片描述

4、实例:

以系统A的PCIE配置空间为例来说明Capabilities List的组织方法:

这里写图片描述

5、参考资料:

  • PCI Local Bus Specification Revision 2.3
  • PCI Express Base Specification Revision 1.1
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151807.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • php面试题目2020_php算法面试题及答案

    php面试题目2020_php算法面试题及答案2019最新整理PHP面试题附答案1、什么事面向对象?主要特征是什么?面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。主要特征:封装、继承、多态。2、SESSION与COOKIE的区别是什么,请从协议,产生的原因与作用说明?A、http无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不同的页面不能看做是同一个用户。B、SESSION存储在服…

    2022年8月26日
    3
  • 开源四足机器人 附设计图及代码「建议收藏」

    斯坦福学生机器人俱乐部(StanfordStudentRoboticsclub)ExtremeMobility团队最近迎来了一名新成员——一个名为StanfordDoggo的四足机器人。这个机器人能跳1米多高,还能表演后空翻。与其他四足机器人动辄上万美元的成本不同,这个机器人的成本降到了3000美元以下,而且设计团队开源了该机器人的设计图、代码以及材料清单。任何感兴趣的人…

    2022年4月6日
    62
  • 删除数组中某个指定元素的值_如何删除数组中的元素

    删除数组中某个指定元素的值_如何删除数组中的元素首先可以给JS的数组对象定义一个函数,用于查找指定的元素在数组中的位置,即索引,代码为:Array.prototype.indexOf=function(val){for(vari=0;i<this.length;i++){if(this[i]==val)returni;}return-1;};然后使用通过得到这个元素的索引,使用js数组自己固有的函数去删除这个元素:Array.prototype.remove=function(va

    2022年8月11日
    3
  • 关于easy的短语(facemock框架)

    作为一个月薪3000的屌丝民工,今天也开始写自己的微博了,打发一下dota之外的时光。写了一年的flex,虽然很是熟练,但是有啥用呢。新版flash的普及上不去,旧版的渲染太慢。还是改行好了。最近开始研究有啥好的东西,之前看了一下unity3d,但是发现自己得先去学3dmax,可是看了3dmax发现高手实在太多了。要学好也不知道要多久,况且自己的美术功底实在太差。专研一下后台吧,发现自己编码解码不

    2022年4月12日
    44
  • pycharm如何调试python程序_Pycharm断点调试Python程序的步骤方法

    pycharm如何调试python程序_Pycharm断点调试Python程序的步骤方法利用Pycharm断点调试Python程序的方法1.代码准备没有语法错误的Python程序:#!/usr/bin/pythonimportnumpyasnpclassNetwork:def__init__(self,sizes):self.num_layers=len(sizes)self.sizes=sizesself.biases=[np.random.randn(y,1)for…

    2025年6月26日
    1
  • mmap 内存映射详解

    mmap 内存映射详解mmap基础概念mmap是一种内存映射的方法,这一功能可以用在文件的处理上,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。在编程时可以使某个磁盘文件的内容看起来像是内存中的一个数组。如果文件由记录组成,而这些记录又能够用结构体来描述的话,可以通过访问结构数组来更新文件的内容。实现这样的映射关系后,进程就可以采用指针的方式读写操…

    2022年6月22日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号