I need to understand the general flow on how a DMA driver should Work in SOF. In particular what each callback should do.
I get channel_get, channel_put, start, stop, pause, release (although I don't quite get the nuance between stop and pause, or between start and release; thankfully I hope it's not important if I treat them the same). I get most of the others too, at least for the most part.
What I don't get at all is how the copy callback should work. In the DW DMA driver it seems to just run the callback and do something based on what the callback set in next, in HDA it seems to wait for the host buffer to be full or empty (I think this one may be the more intuitive one?) and the link HDA DMA seems to again just run the callback.
What should the copy callback really do? Is it different between a host DMA and a DAI DMA?