当前位置:网站首页>PCIe 枚举过程
PCIe 枚举过程
2020-11-08 09:00:00 【osc_o44vh5qb】
1. 设备的发现与bdf number的确定
枚举的第一个过程是rc端通过向bus上发起配置空间访问获取整个总线拓扑上的设备信息。
简单说来就是去遍历每个bus,以及bus下device的配置空间。如果读到有效的device ID值(非全F)则认为发现了可用的设备。
1.1 bdf number的分配
bus device function这3个number的分配是很有意思的事情。对于每个pcie设备来说,配置空间中并没有寄存器可以用来配置或者修改bdf number。那么这3个值在到底是怎么确定的呢。
经典的说法是,bdf number是由pcie总线的硬件拓扑来决定的。这个说法按照pcie的规范来说没有问题,但前提条件是必须先按照规范对整个总线进行枚举。在枚举之前,实际上每个设备的bdf number是不确定的。[注1]
1.1.1 function number的确定
function number是用于多function设备用于区分设备中具体访问的是哪个function的。那么对于大部分单function的设备来说,function number就固定为0;对于多个function的device或者支持虚拟function的device,function number也是由device内部来进行管理和区分的,不需要通过总线枚举来确定。
1.1.2 device和bus number的确定
为支持ID路由,每个PCIE设备(端点和交换开关)中都应设置有贮存设备总线号和设备号的寄存器,复位时,该寄存器清0,每当设备在它的原级链路上检测到一个Type0的 config transaction 事务包时,它就从该TLP头标中的第8~9字节“捕获”总线号和设备 号作为它自己的bus和device号,并贮存入上述总线号和设备号寄存器。所以说在接收至少一个 Type0配置访问事务包以前,设备不会响应除配置周期以外的任何事务。PCIE协 议中没有定义贮存总线号和设备号信息的配置空间单元,只是规定了它必须做这件事。
两个对接的PCIE设备,主设备是RC端,从设备是EP端,那么上电复位后,EP是如何获取自身的bus number的呢?
在这样的一个PCIE结构中,上电复位后,RC端发起一个对EP的配置访问事务,EP会解析配置请求中的bus number,并保存下来,作为自身的bus number号。之后就可以相应其他TLP事务了。也就是说,上电复位后,EP必须先接收到一个配置请求,然后才能响应其他TLP事务。
@【注1】,这里提一点,如果没有按照规范对设备进行枚举。对于rc直接接一个ep device的情况,在裸机的环境下实际上rc的driver可以为对端ep分配任意的bus和device number。因为pcie是点对点连接,第一笔Type0的 config transaction 事务的bus和device number无论是何值,都会被对端ep接收到,并保存下来作为自己的bus和device number。后续用这个bus和device number就可以访问对端的ep设备,直到ep设备复位。
1.2 枚举
前面内容已经说明了一个设备的bdf number的确定,那么枚举的过程也就是rc的系统软件通过配置空间访问来确定以及扫描整个总线拓扑的过程。
版权声明
本文为[osc_o44vh5qb]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4379515/blog/4707886
边栏推荐
- C/C++编程笔记:C语言相比其他编程语言,有什么不一样的优势?
- What details does C + + improve on the basis of C
- Unparseable date: 'mon Aug 15 11:24:39 CST 2016', time format conversion exception
- VC6兼容性及打开文件崩溃问题解决
- Template linked list learning
- 个人短网址生成平台 自定义域名、开启防红、统计访问量
- vivoS7e和vivoS7的区别 哪个更值得入手
- Which is more worth starting with the difference between vivos7e and vivos7
- Codeforce算法题 | 你能想出解法,让你的基友少氪金吗?
- 分布式共识机制
猜你喜欢
iOS 学习笔记二【cocopods安装使用和安装过程中遇到的问题及解决办法】【20160725更新】
iOS上传App Store报错:this action cannot be completed -22421 解决方案
将“光头”识别为“足球”,AI 摄像头如何犯的错?
IOS learning note 2 [problems and solutions encountered during the installation and use of cocopods] [update 20160725]
C / C + + Programming Notes: what are the advantages of C compared with other programming languages?
16. File transfer protocol, vsftpd service
高并发,你真的理解透彻了吗?
Blazor 准备好为企业服务了吗?
Basic concepts of computer network (5) basic principles of local area network
GoLand writes a program with template
随机推荐
解决Safari浏览器下载文件文件名称乱码的问题
C language I blog assignment 03
面部识别:攻击类型和反欺骗技术
More than 50 object detection datasets from different industries
QT hybrid Python development technology: Python introduction, hybrid process and demo
Python learning Day1 -- Basic Learning
Template linked list learning
Summary of knowledge points of Jingtao project
The most detailed usage guide for perconaxtradbcluster8.0
More than 50 object detection datasets from different industries
什么你的电脑太渣?这几招包你搞定! (Win10优化教程)
C expression tree (1)
nvm
Cloud Alibabab笔记问世,全网详解仅此一份手慢无
FORTRAN77从文件中读入若干数据并用heron迭代公式开方
C++在C的基础上改进了哪些细节
GoLand writes a program with template
归纳一些比较好用的函数
GET,POST,PUT,DELETE,OPTIONS用法与说明
c# 表达式树(一)