Re[3]: Разделяемые прерывания в LINUX
От: anna_savelieva  
Дата: 22.09.04 14:50
Оценка:
Здравствуйте, OpenGL, Вы писали:

OGL>Здравствуйте, anna_savelieva, Вы писали:


_>>Во-первых должна быть поддержка со стороны устройства, что-то наподобие регистра статуса, и если твое устройство не поддерживает возможность разделения прерываний — то все усилия напрасны.


_>>Теперь, если же твое устройство поддерживает возможность разделения прерываний.


_>>Когда ты регистрируешь обработчик c помощью

_>>request_irq(irq, handler, flags, name, void *dev_id)
_>>последний аргумент dev_id как раз нужен будет для идентификации твоего устройства.

_>>То есть в обработчике вторым аргументом будет передаваться именно твой dev_id, который ты указал при регистрации. Соответственно тебе нужно в обработчике всего лишь проверить, твой это dev_id или не твой


OGL>Дак вот в том то и прикол что он всегда мой, я в нем передаю локальный контекст (свою структуру данных устройста).

OGL>Устройство на прямую не дает этой возможности (подтверждения прерывания), но факт что в Windows аналогичный драйвер работатет, а в Linux нет, при том и там и там несколько устр-в сидят на одном прерывании.
OGL>Нужно просто в обработчике узнать с какого слота pci было прерывание, но вот как?
Вообще-то я тебе неправтльно объяснила
По структуре на которую указывает dev_id ты никак не сможешь распознать, товое устройство кинуло прерывание или нет.

Короче, когда устройство на PCI бросает прерывание, то выполняются все обработчики, которые зарегестированы на этом прерывании. И каждому обработчику передается его dev_id.

То есть единственный способ — это считать статус с устройства.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.