Если использовать блок CentralDMA, то он может генерировать прерывание по окончанию передачи. Если же BAR адресовать прямо на ОЗУ, то кто будет генерировать прерывание? Если с записью в устройство стало ясно, то теперь нужно получить результаты. Заранее простите за малые познания и заблуждения про драйверы.
Несколько приложений должны параллельно использовать устройство, чтобы практически в любой момент времени к нему был доступ. С помощью драйвера отправляют команды с данными в него. Что дальше? Устройство произвело вычисления и сгенерировало прерывание. Драйвер выделил буфер для приема результатов. Но как драйверу сообщить приложению о приеме данных и какому именно приложению? Есть вариант с постоянным опросом результатов каждым приложением, но он кажется менее эффективным.
Может ли драйвер вести у себя таблицу обратившихся к нему процессов и использовать, например именованные события, чтобы сообщить обратившимся процессам о готовности результатов?