《PCI EXPRESS体系结构导读》---(4)PCI总线Bus号初始化

一般来说,和HOST主桥直接相连的PCI总线命名为PCI总线0。软件使用DFS深度优先算法,依次对其他PCI总线进行编号。HOST主桥可能有多个直连的PCI总线,但是他们都是PCI 0,但是他们的含义不相同。

DFS是搜索算法的一种,其实现机制是沿着一棵树的深度遍历各个节点,并尽可能深地搜索树的分支,DFS的算法为线性时间复杂度,适合对拓扑结构未知的树进行遍历。在一个处理器系统的初始化阶段,PCI总线树的拓扑结构是未知的,适合使用DFS算法进行遍历。下面以图2-13为例,说明系统软件如何使用DFS算法,分配PCI总线号,并初始化PCI桥中的Primary Bus Number、Secondary Bus Number和Subordinate Bus number寄存器。所谓DFS 算法是指按照深度优先的原则遍历PCI胖树,其步骤如下。

(1)HOST主桥扫描PCI总线0上的设备。系统软件首先忽略这条总线上的所有PCI Agent设备,因为在这些设备之下不会挂接新的PCI总线。例如PCI设备01下不可能挂接新的PCI总线。

(2)HOST主桥首先发现PCI桥1,并将PCI桥1的Secondary Bus命名为PCI总线1。系统软件将初始化PCI桥1的配置空间,将PCI桥1的Primary Bus Number寄存器赋值为0,而将Secondary Bus Number寄存器赋值为1,即PCI桥1的上游PCI总线号为0,而下游PCI 总线号为1。

(3)扫描PCI总线1,发现PCI桥2,并将PCI桥2的Secondary Bus命名为PCI总线2。系统软件将初始化PCI桥2的配置空间,将PCI桥2的Primary Bus Number寄存器赋值为1,而将Secondary Bus Number寄存器赋值为2。

(4)扫描PCI总线2,发现PCI桥3,并将PCI桥3的Secondary Bus命名为PCI总线3。系统软件将初始化PCI桥3的配置空间,将PCI桥3的Primary Bus Numher寄存器赋值为2,而将Secondary Bus Number寄存器赋值为3。

(5)扫描PCI总线3,没有发现任何PCI桥,这表示PCI总线3下不可能有新的总线,此时系统软件将PCI桥3的Subordinate Bus number寄存器赋值为3。系统软件在完成PCI总线3的扫描后,将回退到PCI总线3的上一级总线,即PCI总线2,继续进行扫描。

(6)在重新扫描PCI总线2时,系统软件发现PCI总线2上除了PCI桥3之外没有发现新的PCI桥,而PCI桥3之下的所有设备已经完成了扫描过程,此时系统软件将PCI桥2的 Subordinate Bus number寄存器赋值为3。继续回退到PCI总线1。

(7)PCI总线1上除了PCI桥2外,没有其他桥片,于是继续回退到PCI总线0,并将 PCI桥1的Subordinate Bus number寄存器赋值为3。

(8)在PCI总线0上,系统软件扫描到PCI桥4,则首先将PCI桥4的PrimaryBusNum-ber寄存器赋值为0,而将Secondary Bus Number寄存器赋值为4,即PCI桥1的上游PCI总线号为0,而下游PCI总线号为4。

(9)系统软件发现PCI总线4上没有任何PCI桥,将结束对PCI总线4的扫描,并将 PCI桥4的Subordinate Bus number寄存器赋值为4,之后回退到PCI总线4的上游总线,即 PCI总线O继续进行扫描。

(1O)系统软件发现在PCI总线0上的两个桥片PCI总线0和PCI总线4都已完成扫描后,将结束对PCI总线的DFS遍历全过程。

从以上算法可以看出,PCI桥的Primary Bus和Secondary Bus号的分配在遍历PCI总线树的过程中从上向下分配,而Subordinate Bus号是从下向上分配的,因为只有确定了一个 PCI桥之下究竟竞有多少条PCI总线后,才能初始化该PCI桥的Subordinate Bus号。

相关推荐
廋到被风吹走3 天前
【AI】Codex + 后端框架实战:Spring/Express/Django 业务逻辑全自动生成
人工智能·spring·express
吴声子夜歌3 天前
Node.js——Express详解(二)
node.js·express
吴声子夜歌3 天前
Node.js——Express详解(一)
node.js·express
吴声子夜歌6 天前
Node.js——Express框架
node.js·express
AAA阿giao8 天前
打造你的 Git 提交 AI 神器:从零实现前后端分离的 Commit Message 生成器
react.js·express·ollama
流星雨在线8 天前
Node.js + Express 项目完整搭建手册(Redis + MySQL + 常用中间件)
redis·node.js·express
婷婷_1729 天前
【PCIe 验证每日学习・Day22】PCIe 拓扑结构与 Switch / 桥片转发全解析
网络·学习·程序人生·芯片·pcie·pcie学习·pcie 拓扑
婷婷_17210 天前
【PCIe验证每日学习·Day21】PCIe复位机制与功能级复位(FLR)全解析
学习·程序人生·芯片·pcie·芯片验证·链路恢复·pcie 复位
Q_Q51100828511 天前
Nodejs+vue+ElementUI的校园外卖系统 骑手配送系统的设计与实现express-mysql
vue.js·elementui·express
神舟之光11 天前
jwt权限控制简单总结(乡村意见簿-vue-express-mongdb)
前端·vue.js·express