PCIIO-操作位宽使用场景问题

EfiPciIoWidthUint32与EfiPciIoWidthFillUint32的区别

EfiPciIoWidthUint32EfiPciIoWidthFillUint32 使用场景是不同的

1. EfiPciIoWidthUint32

  • 含义:表示访问数据宽度为 32 位(4 字节)。
  • 用途:用于读取或写入 32 位宽的寄存器。执行操作时,读取或写入将直接处理 PCI 设备的寄存器,按照常规的方式进行数据传输。
  • 示例:如果需要从某个 PCI 设备的 32 位寄存器中读取数据,或者将 32 位数据写入设备寄存器,可以使用这个宽度。
  • 特点:对于数量不多的写入动作可以用这个

2. EfiPciIoWidthFillUint32

  • 含义:同样表示访问数据宽度为 32 位,但它的操作通常用于将一个值填充到多个连续的寄存器中。
  • 用途:用于写入操作,特别是在需要将同一 32 位值写入多个相邻的 PCI 寄存器时。它提供了一种效率更高的方式来填充连续的寄存器。
  • 示例:假设需要将值 0xFFFFFFFF 写入连续的多个 32 位寄存器,可以使用 EfiPciIoWidthFillUint32,这样可以一次性填充多个寄存器,而无需逐个写入。
  • 特点:对于数量多的写入动作,使用该属性可提高效率

上图是EDK中操作相当多个寄存器时使用的场景(填充相同的数据到多个连续的寄存器中)

总结

  • EfiPciIoWidthUint32:简单的单个 32 位寄存器的读取或写入操作。
  • EfiPciIoWidthFillUint32:用于将相同的 32 位值填充到多个连续寄存器,通常用于写入操作,且是需要写入非常多个寄存器的场景

由于这两个寄存器的使用场景不同,所以在开发过程中需要尤其注意,通常,fiPciIoWidthUint32多用于pci conf space的操作,而EfiPciIoWidthFillUint32多用于大批量的操作填充寄存器的操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值