Я немного сбит с толку в отношении передач DMA с устройства PCIe.
Скажем, например, у меня есть подчиненное устройство PCIe, и я хочу передать блок данных с устройства в ОЗУ, используя транзакцию DMA. Обратите внимание, что устройство является подчиненным, и на нем нет «машины» DMA.
Я знаю, что мне нужно сначала получить в ОЗУ буфер, способный к DMA (либо путем выделения связного, либо путем отображения страницы).
Но что дальше? Что такое API для запуска передачи DMA N байтов с адреса S на адрес D?
Могут ли современные системы выдавать передачу DMA на / с подчиненного pci устройства? если да, то каков для этого Linux API?
Как объяснено здесь :
[ISA]
В оригинальном IBM PC был только один контроллер Intel 8237 DMA [...]
Архитектура PCI не имеет центрального контроллера DMA, в отличие от ISA. Вместо этого любой компонент PCI может запросить управление шиной («стать мастером шины») и запросить чтение и запись в системную память
Шина PCI не имеет "центрального" контроллера DMA - вместо этого каждое устройство может быть "контроллером" DMA.