Hi TI,
I try to understand the basic concept of using DMA to move memory within TDA4.
My knowledge up to now (from a software point of view) is like this:
1. Open UDMA driver handle and create a UDMA channel.
2. Provide some memory to the UDMA channel for 3 rings (Submit, Completion and Teardown).
3. Register a optional callback function when a request has been completed.
4. Enable the UDMA channel.
5. Put Host/TR Descriptor into the Submit Ring. When this Descriptor has been completed, the callback function gets executed.
6. Now remove the Descriptor from the Completion ring.
My questions regarding step 6 are:
Q1: What purpose has the Completion ring? Why do I have to remove the Descriptor from it?
Q2: Do I have to check the Descriptor in the Completion ring if the DMA action was successfull? So I cannot assume that, if the callback function gets executed, the DMA transfer was successfull?
Q3: What happens if I do NOT remove Descriptor from the Completion ring? Does the DMA Channel stall if the Completion ring is full?
Best regards,
Thomas