问题标签 [pci-e]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
10870 浏览

pci-e - PCIE 端点到端点事务

我想澄清一下,PCIE 交换机后面的两个 PCIE 端点的端点到端点事务(对等事务)不会转发到根联合体。

我搜索了一下,了解到如果来自 Endpoint #1 的事务针对的是根端口分配给 Endpoint #2 的 PCIE 地址空间,则交换机会将事务转发到 Endpoint #2 所在的下游端口。

如果我误解了这一点,请纠正我。根据 PCIE 规范或特定于实现,此转发功能是强制性的吗?

0 投票
0 回答
1548 浏览

linux-device-driver - pcie原始吞吐量测试

我正在通过内核模块进行 PCIE 吞吐量测试,测试结果数字很奇怪(PCIE gen1 x1 的写入速度为 210MB/s,但读取速度仅为 60MB/s)。如果我的测试配置中有错误的方法,我想请您提出建议和更正。

我的测试配置如下:

  • 一块板配置为根端口,一块板配置为端点。PCIE 链路为 gen 1,宽度 x1,MPS 128B。两块板都运行 Linux 操作系统
  • 在 Root Port 端,我们分配了一个内存缓冲区,其大小为 4MB。我们将入站 PCIE 内存事务映射到此缓冲区。
  • 在端点端,我们对远程缓冲区进行 DMA 读/写并测量吞吐量。通过此测试,端点将始终是事务的发起者。
  • EP Write 测试的测试结果是 214MB/s,EP Read 测试只有 60MB/s。PCIe Gen1 x1 的写入测试吞吐量是合理的,但 EP 读取吞吐量太低。

对于 RP 板,我使用 PCIE 以太网 e1000e 卡对其进行了测试,并获得了最大吞吐量 ~900Mbps。我只是想知道在以太网 TX 路径的情况下,以太网卡(扮演端点角色)也执行 EP 读取请求,并且可以通过更小的 DMA 传输获得高吞吐量(~110MB/s),所以我的 DMA 一定有问题EP 读取配置。

DMA 读取测试的细节可以总结为以下伪代码:

任何建议和建议表示赞赏。先谢谢了!

0 投票
1 回答
645 浏览

wdk - IoGetDevicePropertyData() 返回 STATUS_OBJECT_NAME_NOT_FOUND

我正在为 PCI 设备更新功能正常的 KMDF 驱动程序,使用 WinDDK 7600.16385.1 和 OSR 的 ddkbuild.cmd,针对 WLH,在 Win7 x86 和 x64 上进行测试。

我正在尝试检索 DEVPKEY_Device_LocationPaths 属性。

设备管理器设备属性详细信息选项卡在“位置路径”中显示预期值...

...但是从 EvtDriverDeviceAdd 处理程序调用 IoGetDevicePropertyData() ...

... 总是返回 STATUS_OBJECT_NAME_NOT_FOUND。

我努力了 ...

  • 为其他 DEVPKEY_Device_* 值调用 IoGetDevicePropertyData()。结果是一样的。

  • 在 EvtDevicePrepareHardware 处理程序中调用 IoGetDevicePropertyData()。结果是一样的。

  • 调用 WdfDeviceWdmGetPhysicalDevice() 来检索 PDO。结果是一样的

  • WdfDeviceAllocAndQueryProperty()。它工作正常,但不提供我需要的信息。

  • WdfFdoQueryForInterface(GUID_PNP_LOCATION_INTERFACE)。它工作正常但只提供当前节点(即“PCI(0400)”)

  • 搜索调用 IoGetDevicePropertyData 的示例代码。我找到了 Windows CDROM 存储类驱动程序示例,但它似乎没有做任何我还没有尝试过的事情。

所以......我错过了什么?

0 投票
2 回答
1329 浏览

c - 使用驱动程序进行 PCI Express 验证

我正在使用 Windriver Jungo 测试连接到我的 PC 的 PCI Express 设备。我可以在 8/16/32/64 位模式下读/写内存,并且板子响应非常好。但我怀疑的是,根据 PCI Express 规范,我们可以发送一个从 128 字节到 4096 字节的 TLP 数据包。如何使用驱动程序实现此传输。现在它只传输 8 字节(64 位模式)数据。如果我要发送更多数据,那么它将数据拆分为 8 字节数据包,然后发送。请清除我的疑问并建议 Windows 或 Linux 中 PCI Express 的任何其他驱动程序选项?

0 投票
1 回答
989 浏览

interrupt - PCIe MSI 地址寄存器

如果我理解正确,MSI 主机驱动程序应该将其目标 MSI 地址写入相关远程寄存器。如何获取 MSI 地址寄存器、MSI 配置寄存器等?你能给我解释一下这个问题吗?

0 投票
2 回答
655 浏览

vb.net - 通过 VB.net 获取 VGA BUS 类型

如何通过 VB.net 获取 VGA BUS 类型(AGP、PCI、PCI-e...)?

这将返回计算机中的视频卡:SELECT Name, PNPDeviceID FROM Win32_VideoController

如何从这些视频卡中获取总线类型以将 PCI 或 PCI-e 或 AGP 连接到计算机?

0 投票
2 回答
9903 浏览

linux-kernel - Linux driver DMA transfer to a PCIe card with PC as master

I am working on a DMA routine to transfer data from PC to a FPGA on a PCIe card. I read DMA-API.txt and LDD3 ch. 15 for details. However, I could not figure out how to do a DMA transfer from PC to a consistent block of iomem on the PCIe card. The dad sample for PCI in LDD3 maps a buffer and then tells the card to do the DMA transfer, but I need the PC to do this.

What I already found out:

  1. Request bus master

    /li>
  2. Set the DMA mask

    /li>
  3. Request a DMA channel

    /li>
  4. Map a buffer for DMA transfer

    /li>

Question:

What do I have to do in order to let the PC perform the DMA transfer instead of the card?

Thank your for your help!


First of all thank you for your replies. Maybe I should put my questions more precisely:

  1. In my understanding the PC has to have a DMA controller. How do I access this DMA controller to start a transfer to a memory mapped IO region in the PCIe card?
  2. Our specification demands that the PC's DMA controller initiates the transfer. However, I could only find examples where the device would do the DMA job (DMA_mapping.txt, LDD3 ch.15). Is there a reason, why nobody uses the PC's DMA controller (It still has DMA channels though)? Would it be better to request a specification change for our project?

Thanks for your patience.

0 投票
1 回答
177 浏览

windows - 零知识将 PCIE 写入串行 windows 驱动程序需要多长时间?

我需要为 PCIE 编写一个带有中断、连续缓冲区 DMA 和从 PC 到 PCIE 的简单读/写请求的串行驱动程序。我对驱动程序一无所知,对PC架构也有一点了解。平均需要多长时间?

0 投票
1 回答
3248 浏览

linux - 如何在中断中获取相应的 MSI 消息?

我们在 PCIe 卡上使用 FPGA。我能够保留适当的资源并且 MSI 中断正确触发。我的问题是从以下方面辨别中断源:我的 Linux 驱动程序只接收来自 FPGA 的不同中断源的单个 MSI 中断。因此,FPGA 人员通过总线发送 MSI 消息中编码的原因。

问题:

  1. 是否有可能访问此消息以从我的 ISR 中的此框架中获取信息?(我知道我总是可以检查 FPGA 的中断状态寄存器,但是使用 MSI 消息会更优雅,并且可以避免额外的总线访问。)
  2. 如果 1 不可能,切换到 MSI-X 会解决这个问题,以便我可以直接获取信息吗?(我知道 MSI-X 是首选解决方案,但 FPGA 家伙指定 MSI)

谢谢您的帮助!

0 投票
1 回答
954 浏览

linux-kernel - mmap() 比 write() copy_form_user() 慢,为什么?

我需要将大块数据(~6MB)从用户空间传输到我的驱动程序。在驱动程序中,我使用 pci_alloc_consistent() 为每个块分配 2 个 3MB 块。然后我使用 vm_insert_page() 将每个块(即 2 个块)映射到单个 vma。这允许用户空间在映射后读取/写入每个块。它似乎工作,但性能是不可接受的。

我还实现了另一种写入/读取驱动程序中 pci_alloc_consistent() 分配的内存的方式。我从用户空间使用 write(),然后在驱动程序中使用 copy_from_user() 将块中每个块的内容移动到上述内存。我对阅读做相反的事情。

我发现第一种方法至少慢了 2-3 倍,并且使用了大约 40% 的 cpu。我预计在第二种情况下引入额外的缓冲区副本会使其变慢。然而,事实并非如此。

我在 x86 64 位平台、内核:2.6.* 和 3.* 上运行了测试。

上述结果有意义吗?如果是,有人可以提供一些关于正在发生的事情的背景吗?

谢谢。