如何从x86_64 CPU生成PCIe原子请求?

问题描述 投票:0回答:1

PCIe 3.0支持原子操作请求(FetchAdd、Swap、CAS)。 我尝试使用内存模型感知原子操作的内置函数从主机生成 PCIe 原子操作请求,但到目前为止似乎不成功。
__atomic_store_n and __atomic_exchange_n attempt

我的CPU是AMD Ryzen 5 7600X,根据AMD ROCm,它支持PCIe原子text

我想将 PCIe 原子请求发送到通过 PCIe 连接到 PC x86-64 的端点设备 (SSD),即使端点不支持原子完成器功能。

这是我的主机 CPU 和端点设备的原子能力和请求启用配置:

主机CPU(AMD Ryzen 5 7600X):

  1. DecCap2: AtomicOpsCap: Routing+ 32bit+ 64bit+ 128bitCAS-
  2. DevCtl2: AtomicOpsCtl: ReqEn+ (Default value is 0) 

端点:

  1. DecCap2: AtomicOpsCap: Routing- 32bit- 64bit- 128bitCAS-
  2. DevCtl2: AtomicOpsCtl: ReqEn-

我的问题:

  1. 哪个汇编指令可以在x86_64 CPU中生成PCIe原子请求?

  2. 当Endpoint不支持Atomic Completer时,Root Complex还会选择发送AtomicOp请求吗?

assembly x86 x86-64 atomic pci-e
1个回答
0
投票

我是 PCIe 新手,我想尝试在运行用户空间的基于 Windows 的应用程序中模拟 PCIe 协议

注意:这仅适用于主机,不适用于目标环境。

我们有硬件/目标环境,其中 CPU(pcie 端点)和另一个 PCIe 相互通信,现在我的目标是在主机环境上,我希望两个不同的 Windows 应用程序相互通信,但我希望满足与硬件相同的 PCIe 协议规范行为沟通

  1. 首先,是否可以直接访问Windows应用程序中的PCIe驱动程序?如果是的话我该怎么做?如果没有,是否存在任何替代解决方案

  2. 如果我们可以在用户应用程序中访问Windows PCI驱动程序服务,是否可以在驱动程序级别进行环回(两个不同的用户应用程序可以在同一PCIe端点上对话不同的通道)? 我不知道这是否真的可能在同一端点进行环回 我同意我们可以有很多其他 PCIe 端点,例如网卡、声音...等,但我们有自己的有效负载格式,剩下的唯一选择是环回,

任何人都可以帮助提供更可行的想法,以便我可以尝试,我可能走错了方向,我不知道。

我仍在试图找出可能的想法,我现在正在寻求帮助,

© www.soinside.com 2019 - 2024. All rights reserved.