5

我使用需要 256 字节 TLP 有效负载大小的 PCIe 板。我的 CPU 支持(Core i7-3930K)和英特尔主板,DX79SR 在 BIOS 中不提供 TLP 有效负载大小设置。默认情况下,最大 TLP 有效负载为 128 字节,我需要将其更改为 256 字节,无需 BIOS。我找到了在 Windows 中显示此值的 PCIUtils 软件,但它是一个多用途的便携式软件,它太复杂了,无法找到我需要的东西。

英特尔文档描述了我需要在 CPU I/O 寄存器中设置的值,还有另一个文档说 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。

4

1 回答 1

2

基本上你需要做的是out分别使用inx86 asm 指令。问题是在保护模式下,这两条指令被锁定,因此您无法在用户态模式下使用它们。

最好的起点是获取 WDK(Windows 驱动程序套件)并查看他们的示例(您只需要一个软件驱动程序即可)。如果 PCI 板的驱动程序是内核模式驱动程序,尽管您可以在DriverEntry函数中添加调用并完成它。

如果这不是一个选项,您将不得不构建自己的软件内核模式驱动程序 -是一些简单的示例代码,其中包含有关如何构建和部署的说明。实际代码应该很简单,因为您只想在内核模式下执行一些指令。

于 2012-12-03T06:51:45.927 回答