Первая ошибка
Теперь хочу сделать так чтобы карта PCI информировала пользовательское приложение когда можно считывать данные с PCI карты. Т.е. PCI - дает прерывание о том что можно забирать данные. Вот никак не могу понять как это получше сделать.
Прерыванием надо информировать не апликацию а драйвер потому что суть прерывания ВЫЗВАТЬ НЕМЕТЛЕДННУЮ РЕАКЦИЮ СИСТЕМЫ НА АППАРАТНОЕ СОБЫТИЕ Короче чтобы не далало преложение в ответ на евент от прерывания ето будет делаться в юзер моде в ПАССИВЕ то есть грубо говоря в резиновом а НЕ В РЕАЛЬНОМ ВРЕМЕНИ с таким же успехом ты можешь опрашивать регистер в своей плате из нити работающей в апликации будут такие же тормоза и потери данных
Второе
Никто не запрещает тебе в ISR делать что либо кроме запуска DPC иначе бы про ISR в ДДК не было упоминания оно было бы просто сратано с глаз долой
Третье
прерывания у ПСАй расшаренные и ето надо учитывать
Алгоритм
1) аппаратное прерывание тоесть дернулась нога например INTA
2) входим в ISR сопоставтенного прерывания например IRQ11
3) в ТЕЛЕ ISR проверяем МОЕ ЛИ ЭТО ПРЕРАВАНИЕ читая заранее заготовленный регистр на плате или предоставленный разработчиком чипа
4а) Если не мое выходим из ISR не делая больше ничего и возращаем FALSE
4б) Если мое запрещаем прерывания грубо говоря блокируем ногу INTA у платы
5б) далее по вкусу либо ставим в очередь DPC и возращаем TRUE , либо читаем данные разрешаем INTA и возращаем TRUE ( пару регистров в ISR причитать не криминал, я например в ISR делал memcpy из CommonБуффера ДМА и пререконфигурил ДМА движок и ничего)
6) Если использовал DPC в конце DPC разрешаем прерывания
7) а вот гогда появятся данные в драйверном буфере (ФИФО СПИСКЕ ) в достаточном объеме вот тогда и сигналь евентом