В настоящее время у меня есть требование для поддержки MSI с двумя векторами на моем устройстве PCI. Каждый вектор должен иметь другую процедуру обработчика. HW документ говорит следующееВключение нескольких MSI в PCI-драйвере с различными обработчиками IRQ
вектор 0 для датчика температуры
вектор 1 для датчика мощности
Ниже приведен код драйвера я следующее. 1. Сначала включите два вектора, используя pci_enable_msi_block (pdev, 2) 2. Затем назначьте обработчики прерываний с помощью request_irq (два разных обработчика прерываний irq, two diff).
int vecs = 2;
struct pci_dev *pdev = dev->pci_dev;
result = pci_enable_msi_block(pdev, vecs);
Здесь результат равен нулю, который говорит, что вызов преуспел в разрешении двух векторов.
Вопросы у меня есть:
- HW документ говорит вектор 0, я надеюсь, что это не вектор 0 ОС не так ли? В любом случае я не могу получить вектор 0 в ОС.
- Сложная проблема, с которой я столкнулся, - это когда я делаю request_irq() для первого irq, как я могу сказать OS, что мне нужно сопоставить этот запрос с вектором 0 HW? Последовательно для второго irq, как мне сопоставить t вектор 1 HW?