LINUX.ORG.RU

два MSI-прерывания от одного устройства

 ,


0

2

С помощью pci_enable_msi и devm_request_irq удается заставить драйвер реагировать на прерывание с индексом 0 (MSI 0). Возникла необходимость добавить реакцию на MSI 1.

Чтение http://lxr.free-electrons.com/source/Documentation/PCI/MSI-HOWTO.txt достичь просветления не помогло. Тут я четко вижу что у struct pci_dev есть только одно поле unsigned int irq: http://lxr.free-electrons.com/source/include/linux/pci.h#L335

Может это не нужно явно прописывать и в обработчике можно в любой момент получить номер MSI?

Ответ на: комментарий от I-Love-Microsoft
If it succeeds, it returns the actual number of interrupts allocated
and updates the @dev's irq member to the lowest new interrupt number;
the other interrupt numbers allocated to this device are consecutive.
anonymous
()
Ответ на: комментарий от anonymous

Это мне понятно, только не ясно как выяснить какой конкретно интеррупт прилетел в хэндлер... Не догоняю, если честно.

Так то ясно что оно запишет минимальный номер из диапазона в поле irq, а на самом деле будет принимать несколько прерываний. Непонятка лишь в том, что как мне их потом различать?

Или это делается путем двойного вызова devm_request_irq? Там я могу брать значение из поля irq + 0 и затем irq + 1, повесив соответствующие хэндлеры?

tailgunner

I-Love-Microsoft ★★★★★
() автор топика
Последнее исправление: I-Love-Microsoft (всего исправлений: 2)
Ответ на: комментарий от I-Love-Microsoft

путем двойного вызова devm_request_irq

Но только подумай о том, что так никто не делает.

Стандартная схема: 1 MSI + статусный регистр в BAR.

anonymous
()
Ответ на: комментарий от anonymous

Но только подумай о том, что так никто не делает

Возможно понимаю, предположительно из-за ограниченности числа IRQ контроллера прерываний системы

Стандартная схема: 1 MSI + статусный регистр в BAR

Спасибо, хороший ориентир для нубов типа меня

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от I-Love-Microsoft

не ясно как выяснить какой конкретно интеррупт прилетел в хэндлер...

На устройстве должен быть регистр статуса и в нем бит(ы) «мне нужно обслуживание».

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.