3.3 举个例子说说PCI如何知道手下的桥和设备的?
这是刨析PCIE协议的第14篇文章
内容简介
2024-01-01
全文共862字,阅读大约需要4分钟,本文主要从原理上介绍PCI便利自己的拓扑结构的一个方法
01
HOST如何知道手下的桥和设备?
根据上面的描述,大致也清楚了PCI结构,host是首领,PCI桥是传达室,PCI设备是干活的。这就类似于PCIE的RC、switch和EP这一套。
如下图是一个关于PCI结构的范例,来自《PCIE体系结构导读》。首先思考一个问题,host主桥是如何知道有多少个PCI桥有多少个PCI设备的,也就是自身的拓扑结构?
答案是CPU处理器会在系统 BIOS启动时引导完成,也可以由操作系统内核来完成,这个就看具体场景了。但整体的实现思路是一致的,就是通过DFS(Depth First Search)算法来遍历PCI总线树,这个遍历主要是对PCI桥的遍历,对所遍历的桥按序进行编号,这样就可以建立正确的总线拓扑结构。这个算法特点是深度优先,就是一条路走到黑再折回来。在具体实现中PCI桥会保存如下图这个三个信息:
1、Primary Bus Number :当前PCI桥的上游总线号
2、Secondary Bus Number :当前桥的总线号
3、Subordinate Bus Number:存放当前PCI子树中,编号最大的PCI总线号,也就是一个分支里面最深最靠下的总线号,但不一定是整个拓扑里面最大的。
02
具体的实现方法
对于PCI来说,DFS算法是用来遍历所有PCI桥的,PCI设备会有其它方法来实现,具体操作上如下:
第一步
HOST主桥扫描PCI总线0上的设备,比如上图由两个桥,首先发现PCI桥1,会将桥1的Secondary设为1,Primary设为0,
第二步
HOST主桥接着扫描PCI桥1下面的总线,发现了PCI桥2,会将PCI桥1的Secondary设为2,Primary设为1。
第三步
HOST主桥接着扫描PCI桥2下面的总线,发现了PCI桥3,会将桥3的Secondary设为3,Primary设为2。
第四步
HOST主桥接着扫描PCI桥3下面的总线,发现没有新总线了,就把PCI桥3的Subordinate设为3,并回退上一级,也就是PCI桥2继续扫描。
第五步
HOST主桥接扫描PCI桥2发现只有已知的PCI桥3一个桥,那么将PCI桥2的Subordinate设为3,并回退扫描PCI桥1。
欢迎关注公众号点击【资料下载】领取相关资料
快来扫描下方二维码关注公众号,领取站内所有相关资料,所有哦~
有建议、有需求、有疑问、联系我