大家好,欢迎来到IT知识分享网。
✨ 前言:
在PCI Express (PCIe) 架构中,”BDF”和”配置空间”是两个重要概念,它们与PCIe设备的识别和配置紧密相关。
✨ 一、 BDF定义
BDF是一种寻址机制,用于唯一标识系统中每个PCIe设备。BDF的全称是Bus/Device/Function,带有以下组成部分:
Bus:一个 8 位字段,表示设备所在的总线号。因为是8位,所以PCIe可以支持256个总线。
Device:一个 5位字段,表示特定总线上的设备号。每个总线可以有32个设备,编号从0到31。
Function:一个 3 位字段,表示特定设备的功能号。因为是3位,所以一个设备可以有最多8个功能。
这样的结构使得系统可以支持多达 256个总线 × 32个设备/总线 × 8个功能/设备 = 65536个唯一功能,这是个足够大的空间来满足现代计算机系统的需要。
需要注意的是,每个设备必须要有功能0(Fun0),其他的7个功能(Fun1~Fun7)都是可选的。
一个简单的例子如下图所示:
✨二、配置空间定义
什么是配置空间?
配置空间是每个PCIe设备的一个特定内存区域,它包含了管理该设备的关键信息,如设备ID、供应商ID、中断信息、BAR(基地址寄存器)等。
配置空间大小?
早期的PCI时期,系统为每个PCI设备分配的内存大小仅有256个Bytes。到后来的PCIE时期,随着设备性能增强,PCIE设备的配置空间扩展至4K个Bytes。在这里需要注意:PCIE一共支持256条Bus,32个Dev,8个Fun。因此在满负载的情况下,共需内存大小 = 4k * 256 328 = 256M,这个256M的内存空间是为PCIE设备准备的空间系统不可用。如下图所示:
下图是从PCI总线中继承过来的配置空间:
2.1 配置寄存器
配置空间内含有若干配置寄存器,以下是其中一些主要的寄存器:
供应商ID:用以识别制造商。 设备ID:特定于供应商的设备标识。 命令和状态寄存器:用以控制设备功能和报告设备状态。
类代码:指示设备的类型和功能。 BARs:用于映射设备到系统的地址空间,可以是内存或I/O地址。 中断行和中断引脚:包含中断相关配置。
能力列表:PCIe设备支持的额外功能(例如,电源管理、热插拔等)。
2.2 扩展配置空间
对于PCIe设备,扩展了更大的配置空间,通常为4KB,它允许更多的功能和复杂的配置。
2.3 如何访问配置空间
Legacy PCI Method:通过特定的CPU端口地址读取和写入。这种方法对于标准PCI设备而言是通用的,但对于PCIe设备来说,可能是受限的。
Memory-Mapped I/O:在这种机制下,配置空间被映射到系统的地址空间中,CPU可以通过常规的内存访问指令来访问配置空间。在现代系统中,这种方法被广泛采用,因为它更高效。
需要特别注意的是,PCIe的Spec中明确规定只有Root有权限发起配置请求(Originate Configuration Requests),也就是说PCIe系统里面的其他设备是不允许去配置其他设备的配置空间的,即peer-to-peer的配置请求是不允许的。并且配置请求的路由(Routing)方式只能是采用BDF(Bus,Device,Function)。
处理器一般不能够直接发起配置读写请求,因为其只能产生Memory Request和IO Request。这就意味着Root必须要将处理器的相关请求转换为配置读写请求。针对传统的PCI设备(Legacy PCI),采用的是IO间接寻址访问(IO-indirect Accesses);针对PCIe设备,采用的是Memory-Mapped Accesses。
2.4 BDF和配置空间的应用
当系统启动时,操作系统和固件(如BIOS或UEFI)会枚举系统中的所有PCI/PCIe设备,读取它们的配置空间,并根据设备的功能和需要进行配置。例如,系统会根据BAR寄存器设置来分配内存或I/O资源给设备。BDF值在这个过程中作为设备的唯一标识符,用于设备选择和配置空间的寻址。
Root和Switch的每一个端口中都包含一个P2P桥,并且知道桥的配置空间头(Configuration Space Header)是Type1型的。如下图所示:
每个Type1型的Header中都包含最后一级总线号(Subordinate Bus Number)、下一级总线号(Secondary Bus Number)和上一级总线号(Primary Bus Number)等信息。当配置请求进行BDF路由的时候,正是依靠这些信息来确定要找的设备的。一个简单地例子如下图所示:
✨小结:
总而言之,BDF提供了唯一标识系统中PCIe设备的方法,而配置空间则是存储设备配置和管理信息的地方,对于PCIe设备的整个生命周期而言都是至关重要的。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/145732.html