首页
搜索 搜索
当前位置:资讯中心 > 正文

全球微速讯:PCI Express 基础

2023-02-21 23:02:50 哔哩哔哩

PCI-e 是一种高速串行计算机扩展总线标准,是常用的 PC IO 接口。

PCI-e 初始化可以分为以下几步:

1. 获得 PCI-e 设备配置空间


(资料图片)

2. 为设备加载相应的驱动程序

3. 由驱动程序完成硬件配置

获取 ECAM 基址

ECAM (Enhanced Configuration Address Mapping) 基址由固件或桥设备提供

ACPI 体系计算机的 ECAM 基址 (Base address of enhanced configuration mechanism) 储存在 MCFG 中

获取 ECAM 基址的具体方式:

1.系统在初始化时,先获取 RSDP (Root System Description Ptr)

不同平台拥获取 RSDP 实现方法不同,具体见 ACPI_Spec 的 5.2.5 Root System Description Pointer (RSDP) 章节

2.根据 RSDP 找到 RSDT ( Root System Decription ) 或 XSDT ( Extend System Decription )

XSDT 目的是取代 RSDT 而并非 RSDT 的拓展。所以,所以这里就只提 XSDT。

固件加载 boot*.efi 后,会将 SystemTable 传入主函数。详细的内容后续会补充在 UEFI 引导编写教程的相关章节。

EDK2 规范中指明的 XSDT 位置 :

SystemTable -> XSDT -> MCFG

通过 图 APCI MCFG Table 构建结构体,即可导出ECAM基址 (Base address of enhanced configuration mechanism)

读取 PCI-e 配置空间内容:

ECAM 基址由固件决定,所占用空间不得低于 n*32MB(n表示总线数)。通常情况 可修改 ECAM 大小为 64MB、128MB、256MB。

Base address of enhanced configuration mechanism 表示的即前文提及的 ECAM 基址

ECAM 访问 PCI-e 配置空间的方式如下,

BaseAddress[63:27] 基址

BaseAddress[27:20] 映射 总线号

BaseAddress[19:15] 映射 设备号

BaseAddress[14:12] 映射 功能号

BaseAddress[11:8] 拓展寻址器

BaseAddress[7:2] 寻址器

BaseAddress[1:0] 字节取值器(注意RW属性)

拓展寻址器、寻址器与字节取值器 与其它部分组成完整地址,用于指针取值。

在 IO 过程中 拓展寻址器、寻址器与字节取值器 并不发挥功能。

对于用户,访问的方式是,将总线号,设备号,功能号整合与基址相加。

如图:

MCFG 中的 Base Adress 即 Base Adress of Enhanced configuration mechanism,

构建 00:00:01 设备的编号,0x800 (0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_1000_0000_0000)

得到该设备的增强配置空间基址,即 Base Adress & 0x800

得到的 E000 0800H 便是该设备的配置空间基址

经过测试,该内存段与软件提供的配置空间内容相符合。

图片来自网络,侵删