gpt4 book ai didi

pci - PCI/PCIe BAR 大小是如何确定的?

转载 作者:行者123 更新时间:2023-12-02 02:49:21 26 4
gpt4 key购买 nike

我知道 PCI 配置空间中的基地址寄存器 (BAR) 定义了 PCI 地址的起始位置,但是该区域的大小是如何确定的?

当然,这是硬件的一个属性,因为只有它知道它可以处理的地址空间有多远。但是,我似乎在 PCI 配置结构中看不到 BAR 大小字段。

最佳答案

首先,BAR 大小必须是 2 的幂(例如 1 KiB、2 MiB),并且每个区域必须在内存中对齐,以便较低的 log2(size) 位基地址的值始终为零。例如,假设端点有 4 KiB 内存区域,其地址范围为 0-0xfff。主机可以将该区域的起始位置重新映射到 f.x。通过写入 BAR 寄存器来实现 0x10000xabcd000,但不写入 0x10800xabcd100

写入 BAR 寄存器时,端点将忽略 LSB,并在读取时始终返回零。因此将0xffffffff写入寄存器,然后读回该值表示该区域的大小。对于 4 KiB 示例,返回 0xfffff00X(低四位被保留,请参阅规范)。确定尺寸:

  • 将低四位清零 (0xfffff000)
  • 反转所有 32 位 (0xfff)
  • 结果加一(0x1000 = 4096 字节)

这也适用于 64 位区域。下一个基地址寄存器的值形成基地址的MSB。 PCI 3.0 规范第 6.2.5.1 节对此进行了描述。

关于pci - PCI/PCIe BAR 大小是如何确定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19006632/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com