我使用需要256字节TLP有效载荷大小的PCIe板。我得到的CPU支持(Core i7-3930K)和Intel主板,DX79SR不提供BIOS中的TLP有效负载大小设置。 默认情况下,最大TLP有效负载为128字节,我需要将其更改为256字节,无需BIOS。我发现PCIUtils软件在Windows中显示了这个值,但它是一个多用途的便携式软件,它太复杂了,无法找到我需要的东西。
英特尔文档describe what values我需要设置CPU I / O寄存器,another document表示I / O位置是C8Fh和CFCh。
这就是我被困住的地方,如果我想设置这些寄存器,我不知道从哪里开始。 我是一位经验丰富的Windows S / W开发人员,但我从未处理过驱动程序。我有这个PCIe板驱动程序的源代码,我可以修改,构建和运行,但我不知道如何将数据写入Intel CPU的I / O寄存器。我发现_outp()函数在用户模式下不起作用。
请指出我从哪里开始,从可执行文件(更简单)或驱动程序。我认为我所需要做的就是从I / O端口C8Fh和CFCh读取/写入,如果我没有弄错的话。它现在是Windows XP 32位,Win7 x64将会更晚,Visual Studio 2010 C ++或WDK。
答案 0 :(得分:2)
基本上你要做的就是分别使用out
in
x86 asm指令。问题是在保护模式下,这两条指令被锁定,因此您无法在用户空间模式下使用它们。
最好的起点是获取WDK(Windows驱动程序工具包)并查看他们的示例(您只需要一个软件驱动程序)。如果PCI板的驱动程序是内核模式驱动程序,您可以在DriverEntry
函数中添加调用并完成它。
如果这不是一个选项,那么您必须构建自己的软件内核模式驱动程序 - here是一些简单的示例代码,其中包含有关如何构建和部署一个代码的说明。实际的代码应该是微不足道的,因为你只想在内核模式下执行一些指令。