PCIe学习笔记(9)--- 配置空间的两种访问方式--LEGACY
来源:互联网 发布:软件小站的解压密码 编辑:程序博客网 时间:2024/05/17 04:32
1.
IO访问
一段历史:
早期的PC,只有64KB的IO空间
到了PCI协议出现的时候,IO空间只留下两段,0x800-0x8FF, 0xC00-0xCFF
因些,根本不可能将系统中的所有PCI FUNCTION 配置空间都放到这两段IO空间中去
另外一点,当时的内存空间,似乎也不是很够用,所以,也没有说将PCI FUNCTION的配置空间映射到内存空间中去
所以,PCI SPEC的制定者,设计了一种通过IO间接访问的方式来访问PCI FUNCTION 配置空间的方式
2.
IO访问
由一个地址寄存器,与一个数据(写的数据,或者读回来的数据)寄存器来实现这个需求
分别是IO空间(RC 的HOST TO PCI BRIDGE, IO PORTS)的:
CONFIGURATION ADDRESS PORT: 0xCF8-0xCFB
CONFIGURATION DATA PORT: 0xCFC-0xCFF
首先,先将目标地址(BDF)与(读写数据的在配置空间的地址偏移,单位为DWORD)写入地址寄存器
然后,再将数据写入,或者读出数据寄存器
所以,每一个配置空间的访问,需要两次IO访问
《---有一个问题,需要之后确认:
为什么写了这组寄存器,就能产生对PCI FUNCTION配置空间的读、写呢?
看下面
3.
地址寄存器的构成:
1:0 : 00
7 : 2 : TARGET DWORD
10:8: TARGET FUNCTION
15:11: TARGET DEVICE
23:16: TARGET BUS
30:24: RESERVED
31: ENABLE(表示是普通的IO,还是CONFIGURATION REQUEST方式的WRITE/READ)
4.
两个新概念(对我来说,没学PCIE之前,不知道的)
SECONDARY BUS NUMBER: 是BUS NUMBER,即由这个BRIDGE构成的直接BUS的NUMBER
SUBORDINATE BUS NUMBER: 是由这个BRIDGE,与一系列其下面的BRIDGE,构成的,最大数值的BUS NUMBER
这样,就构成了一个范围
5.
RC的HOST TO PCI BRIDGE,对应一条VIRTUAL BUS, 它的SECONDARY BUS NUMBER = 0
《----
之前说过,RC有一个HOST TO PCI BRIDGE,对就BUS 0(VIRTUAL BUS), 其上接了一个或多个VIRTUAL PCI TO PCI BRIDGE, 对就的是BUS 1---m
而SWITCH也有一个VIRTUAL PCI TO PCI BRIDGE, 也对应一条VIRTUAL BUS, 其上也接了一个或多个VIRTUAL PCI TO PCI BRIDGE, 对应的也是BUS x--z
《---——
6.
一个CONFIGURATION REQUEST被发到一个BRIDGE后
BRIDGE将会判断,是否在它所对应的SECONDARY BUS NUMBER与SUBORDINATE BUS NUMBER的范围内
有以下几种情况
一,如果目标等于SECONDARY BUS NUMBER, 则该BUS上的设备为该REQUEST的接受(TYPE 0 CONFIGURATION REQUEST)者,
二, 如果目标在于SECONDARY BUS NUMBER, 小于等于SUBORDINATE BUS NUMBER, 则该REQUEST将以TYPE 1的形式,一级一级传递下去
三,不在范围内,则没有REQUEST的传递
7.
不管是单PROCESSOR(单RC),还是多PROCESSOR(多RC)的情况
CONFIGURATION ADDRESS PORT与CONFIGURATION DATA PORT只有一组
- PCIe学习笔记(9)--- 配置空间的两种访问方式--LEGACY
- PCIe学习笔记(10)--- 配置空间的两种访问方式--ENHANCED
- PCIe学习笔记(11)--- 配置空间的读写请求
- PCIe学习笔记(20)--- 中断(1)--- Legacy
- PCIe学习笔记(8)--- 配置地址空间
- pcie的配置空间
- PCIe学习笔记(15)--- TLP的ROUTING方式
- 如何访问pcie整个4k的配置空间
- PCIE 1: PCIE 配置空间的存取
- JVM学习笔记之对象访问的两种方式
- PCI、PCIE配置空间的访问(MCFG,Bus,Device,Funtion)
- 访问PCIe配置空间using Intel Chipsets
- 访问PCIe配置空间using Intel Chipsets
- 访问PCIe配置空间using Intel Chipsets
- PCIe设备的配置空间
- JVM学习笔记(二):JVM中对象访问的两种方式
- PCIe学习笔记(3)---PCIe初步
- 访问PCIe BAR空间
- redis注册成windows服务
- 北大 C++ 8.3 vector容器
- 八大经典排序算法总结
- QT5.7+opencv3.0做的简易视频播放器
- [.net 面向对象程序设计深入](26)Redis——基础
- PCIe学习笔记(9)--- 配置空间的两种访问方式--LEGACY
- 我的软件工程目标
- 关于java使用Ftpclient上传到FTP服务器文件损坏的问题解决
- leetcode 4. Median of Two Sorted Arrays
- 不敢死队问题 (sdut oj)
- CI1.1 实现一个算法,确定一个字符串的所有字符是否全部不同。假使不允许使用额外的数据结构。
- Linux监控JVM常用命令解析
- Python3 urllib.parse
- 城市三级联动 评论:发送信息清空输入框