gpt4 book ai didi

linux - 使用不同的 IRQ 处理程序在 PCI 驱动程序中启用多个 MSI

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:20:54 25 4
gpt4 key购买 nike

目前我需要在我的 PCI 设备上支持带有 2 个向量的 MSI。每个向量都需要有不同的处理程序。 HW 文件说如下

矢量 0 用于温度传感器

矢量 1 用于功率传感器

下面是我正在关注的驱动程序代码。1. 首先使用 pci_enable_msi_block(pdev, 2) 启用两个向量2. 接下来使用 request_irq 分配中断处理程序(两个不同的 irq,两个不同的中断处理程序)。

int vecs = 2;
struct pci_dev *pdev = dev->pci_dev;
result = pci_enable_msi_block(pdev, vecs);

这里的结果为零,表示调用成功启用了两个向量。

我的问题是:

  1. HW 文档说 vector 0,我希望这不是操作系统的 vector 0 吧?无论如何,我无法在操作系统中获得向量 0。
  2. 我面临的难题是当我为第一个 irq 执行 request_irq() 时,我如何告诉操作系统我需要将此请求映射到 HW 的向量 0?连续第二个 irq,我如何映射 HW 的 t 向量 1?

最佳答案

pci_enable_msi_block:

如果使用此函数请求 2 个 MSI 消息并且函数调用返回 0,则为设备分配 2 个 MSI 消息并且 pdev->irq 更新为分配的最低中断到设备。

所以pdev->irqpdev->irq+1是分配给设备的新中断。您现在可以注册两个中断处理程序:

request_irq(pdev->irq, handler1, ...)  
request_irq(pdev->irq+1, handler2, ...)

关于linux - 使用不同的 IRQ 处理程序在 PCI 驱动程序中启用多个 MSI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21877320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com