В настоящее время я пишу драйвер для устройства PCIe, который должен отправлять данные в систему Linux с использованием DMA. Насколько я понимаю, моему устройству PCIe требуется контроллер DMA (мастер DMA) и моя система Linux (подчиненный DMA). В настоящее время устройство PCIe не имеет контроллера DMA и не должно иметь его. Это смущает меня.
A. Возможно ли следующее?
- Устройство PCIe отправляет прерывание
- Ожидание прерывания в драйвере Linux
- Начать передачу DMA из регистров PCIe с отображенной памятью в систему DMA Linux.
- Чтение данных из памяти в пользовательском пространстве
У меня все для этого настроено, единственное, что мне не хватает, это как перенести данные из регистров PCIe в память.
B. В какой системный вызов (или серию) мне нужно позвонить для передачи DMA?
C. Возможно, мне нужно настроить DMA в системе Linux, но то, что я нахожу, указывает на код, который предполагает наличие подчиненного устройства, например, struct dma_slave_config.
Вариант использования: сбор данных с устройства PCIe и предоставление их в память пользователям.
Любая помощь очень ценится. Заранее спасибо!