我正在评估将我几年前编写的设备驱动程序从32位移植到64位。物理设备是一张32位PCI卡。即,设备为32位,但我需要从Win7x64中访问它。该设备向Windows世界呈现一些寄存器,然后进行大量的总线主数据传输到驱动程序分配的内存块中。
我在Microsoft文档中读到,您可以发出信号来表示驱动程序是否支持64位DMA。如果不支持,则DMA是双缓冲的。但是,我不确定是否是这种情况。我的驱动程序可能是完整的64位驱动程序,因此它可以支持处理器地址空间中的64位地址,但实际的物理设备不支持它。实际上,设备BAR必须映射到4 GB以下,设备必须获得PC RAM地址以执行低于4 GB的总线主控制。这是否意味着我的驱动程序将始终通过双缓冲进行?这是一个非常性能敏感的过程,双缓冲可能会阻止整个系统工作。
当然,设计一个新的64位PCI(或PCI-E)板不在考虑之内。
除了微软页面外,有人可以为我提供一些资源吗?
非常感谢!
我在Microsoft文档中读到,您可以发出信号来表示驱动程序是否支持64位DMA。如果不支持,则DMA是双缓冲的。但是,我不确定是否是这种情况。我的驱动程序可能是完整的64位驱动程序,因此它可以支持处理器地址空间中的64位地址,但实际的物理设备不支持它。实际上,设备BAR必须映射到4 GB以下,设备必须获得PC RAM地址以执行低于4 GB的总线主控制。这是否意味着我的驱动程序将始终通过双缓冲进行?这是一个非常性能敏感的过程,双缓冲可能会阻止整个系统工作。
当然,设计一个新的64位PCI(或PCI-E)板不在考虑之内。
除了微软页面外,有人可以为我提供一些资源吗?
非常感谢!