On 04/27/2017 04:50 PM, Sinan Kaya wrote: > On 4/27/2017 10:00 AM, Jon Masters wrote: >> On 04/20/2017 06:10 PM, Alex Williams wrote: >>> Hi all, >>> >>> We're writing a device driver and having some difficulty matching a >>> subsystem to the driver/device properties. Can anyone help with >>> direction? >>> >>> These are some basic properties: >>> 1) Device is used to carry generic data to/from userspace. It's a pair >>> of dumb streams with one sink and one source for each direction (no >>> addressable endpoints for the other side). >>> 2) Data goes to/from a DMA engine in an FPGA at high throughput. >>> 3) The driver enables userspace to queue multiple DMA-able buffers for >>> asynchronous, pipelined data transfer. We currently use the >>> videobuf2 API to provide the feature. We're not carrying video data >>> in general, though. >>> >>> It's a piece of a software-defined radio system, and while it can carry >>> data from DACs/ADCs, the device is only a generic transport. It doesn't >>> know what data it's carrying, so neither would the driver. >>> >>> Some guidance would be greatly appreciated. Thanks! >> >> This might be close enough to hidma that Sinan would have suggestions? >> > > I added dmaengine group to CC above. I have recently experimented > with a similar concept by hacking the rapidio code. > > http://lxr.free-electrons.com/source/drivers/rapidio/devices/rio_mport_cdev.c > > It sounds like your code belongs to dmaengine.
If you want to be able to use the DMA from within different frameworks inside the kernel (e.g. ALSA for audio, V4L2 for video, IIO for general-purpose data converters) then DMAengine is the right place. If you only ever want to access the DMA from userspace application logic use VFIO.