PCIE Spec ---Base Address Registers
7.5.1.2.1 Base Address Registers (Offset 10h - 24h)
在 boot 到操作系统之前,系统软件需要生产一个内存映射的 address map ,用于告诉系统有多少内存资源,以及相应功能需要的内存空间,所以在设备的 PCI 内存空间中就有了这个 BAR 信息。也就是系统软件将对应寄存器映射的地址, BAR 保存在 PCIE 配置空间的 Offset 10h-24h,保存的是一组地址,用于指示需要的内存空间地址。
所有基址寄存器中的位0是只读的,用于确定寄存器是否映射到内存或I/O
空间。映射到内存空间的Base Address寄存器必须返回0位的0b(见图7-11)。映射到I/O空间的Base Address寄存器必须返回位0的1b(如图7-12所示)。
Bits 2:1 标识当前的内存空间映射到的地址位数:
Function 的地址空间需要大小,是由硬件决定的,也就是往对应寄存器写全 FFFF FFFF,寄存器会返回一个大小值的掩码,然后取反加一 就可以得到具体的内存空间大小