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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux发邮件shell脚本与群发邮件shell脚本

    Linux发邮件shell脚本与群发邮件shell脚本Linux发邮件shell脚本与群发邮件shell脚本说明:因为明天统计疫情健康打卡,需要通知同学完成打卡,最开始是一个人一个人的进行QQ通知,为了方便通知,我利用Linux写了一个shell定时群发邮件提醒脚本,如果大家有需要的可以参考我的方式方法下面我将我进行配置的方法分享给大家1.Linux安装邮件服务因为Linux默认没有安装mail邮件服务,我们将进行安装,输入安装命令等待几秒即可安装成功yuminstallmailx2.配置发送邮件服务即你的邮箱2.1在命令行中输入

    2022年10月20日
    7
  • if (donutString.indexOf(“dozen”) != -1)是什么意思

    if (donutString.indexOf(“dozen”) != -1)是什么意思

    2021年10月29日
    67
  • Visio2003密钥(office 2003密钥)

    序列号:GWH28-DGCMP-P6RC4-6J4MT-3HFDY序列号:WFDWY-XQXJF-RHRYG-BG7RQ-BBDHM

    2022年4月18日
    169
  • 中国it人物_计算机界的名人

    中国it人物_计算机界的名人2006.9.2 07:19早起者并不一定收获最多,但成功者一定是方向对,善管理风险的人。  不管是寿国梁、曹军这样的无奈者,还是张树新、王峻涛这样的迷失者,其先发优势都已消失殆净。  从“先驱”到“先烈”的转变,折射出的是市场的易变性和持续成功的“无规律性”。这种“无规律性”既表现在你所需要坚持的东西上,也表现在日常的经营管理中。  8848

    2022年8月30日
    9
  • Vim复制粘贴_vim复制粘贴命令

    Vim复制粘贴_vim复制粘贴命令原文地址:http://lsong17.spaces.live.com/blog/cns!556C21919D77FB59!603.entry内容:用vim这么久了,始终也不知道怎么在vim中使用系统粘贴板,通常要在网上复制一段代码都是先gedit打开文件,中键粘贴后关闭,然后再用vim打开编辑,真的不爽;上次论坛上有人问到了怎么在vim中使用系统粘贴板,印象里回复很多,有好几

    2022年9月22日
    4
  • 手写一个tornado框架session功能

    手写一个tornado框架session功能

    2021年7月4日
    79

发表回复

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

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