PCIE Resizable BAR

1. 什么是Resizable BAR

Resizable BAR特性在PCIe规范中定义.仅可以通过本地DBI在控制寄存器中更改“Supported Resource Sizes”字段

Resizable BAR Capability是一个可选的功能,它允许硬件传递资源大小,系统软件在确定最佳大小后,将最佳大小传递回硬件。硬件通过 Resizable BAR Capability and Control registers来传达可接受的操作资源大小。硬件必须支持1mb ~ 512gb之间的至少一个大小。

软件通过一种专有的机制来决定资源的最佳大小,程序通过Resizable BAR Control寄存器的BAR size字段来调整大小。

IMPLEMENTATION NOTE

分配资源的系统软件可以使用这个功能来调整BAR资源的大小。该软件以前的版本通过将FFFFh写入BAR,读取值,并根据Set的位数确定资源的大小,然后,将基址被写入BAR。
系统软件在将基地地址分配给BAR之前使用这种方法来代替上面提到的确定资源大小的方法,潜在的可用资源大小由函数通过Resizable BAR Capability and Control registers报告。这样做的目的是让软件能够分配最大的大小,因为分配的地址空间小于报告的最大大小会导致较低的性能。然后,软件将该大小写入到Resizable BAR Control register中。然后,将基址被写入BAR。

2. Resizable BAR capability

PCIE Resizable BAR_第1张图片

2.1 Resizable BAR Extended Capability Header (Offset 00h)

PCIE Resizable BAR_第2张图片
PCI Express Extended Capability ID: 记录Resizable BAR Extended capability的ID号,固定为0x15

Capability Version: PCI-SIG定义的版本号,表示当前能力结构的版本

Next Capability Offset: 指向下一个新的增强Capability寄存器的地址

2.2 Resizable BAR Capability Register

PCIE Resizable BAR_第3张图片

2.3 Resizable BAR Control Register

PCIE Resizable BAR_第4张图片
BAR Indix: 指向BAR的起点
■ 0x0 (VF_BAR_24h): VF BAR located at offset 24h.
■ 0x1 (VF_BAR_28h): VF BAR located at offset 28h.
■ 0x2 (VF_BAR_2Ch): VF BAR located at offset 2Ch.
■ 0x3 (VF_BAR_30h): VF BAR located at offset 30h.
■ 0x4 (VF_BAR_34h): VF BAR located at offset 34h.
■ 0x5 (VF_BAR_38h): VF BAR located at offset 38h.

Number of Resizeable BARs: 表示该函数的能力结构中可调整大小的bar的总数
■ 0x1 (BAR1): one resizable VF BAR for the function
■ 0x2 (BAR2): two resizable VF BARs for the function.
■ 0x3 (BAR3): three resizable VF BARs for the function.
■ 0x4 (BAR4): four resizable VF BARs for the function.
■ 0x5 (BAR5): five resizable VF BARs for the function.
■ 0x6 (BAR6): six resizable VF BARs for the function.

BAR Size: 这是一个编码过的值,该字段的默认值等于BAR资源通过BAR的只读位请求的地址空间的默认大小,软件必须只写入 Resizable BAR Capability中所支持的值相对应的值,编写不支持的值将产生未定义的结果。
■ 0x0 (_1MB): 1MB(2^20 bytes)
■ 0x1 (_2MB): 2MB(2^21 bytes)
■ 0x2 (_4MB): 4MB(2^22 bytes)
■ 0x3 (_8MB): 8MB(2^23 bytes)
.
.
.
■ 0x2b (_8EB): 8EB(2^63 bytes)

你可能感兴趣的:(pcie,驱动开发)