This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

linked descriptors to continous memory write fashion

Hi Ti Folks,

                 Request you to kindly repond asap. I have linked descriptors [each having its own buffer]. If i push linked descrptors to a queue [high priority accumulator,intc queue or low priorirty accumu], how to make sure that on receive side, the data is written in continous fashion. 

example a case

A descriptor has buffer size of X bytes and has data of X bytes occupied in it.

B descriptor has buffer size of Y bytes and has data of Y bytes occupied in it. 

C descriptor has buffer size of Z bytes and has data of Z bytes occupied in it.

A -> B -> C [linked descriptors]

Functionality i want is: - now if i push them to a [high priority accumulator,intc queue or low priorirty accumu], I will provide a descriptor D with buffer size of (X+Y+Z) bytes in it. i want the DMA to write the data in continuous fashion

individual linked descriptors [A->B->C] buffer should be written into continuous fashion in D descriptor's buffer. How can i achive this. Please note i dont want to use memcpy or EDMA for this operation. Is there any way i can get this operation done through PKTDMA.

Thanks

RC Reddy

  • The accumulators do not have an associated packet dma.  It only copies the pointers, not the data.  The purpose of the accumulator is two-fold: to reduce the cycle overhead of each pop (by placing descriptor pointers and optional sizes in memory for you), and grouping multiple descriptors together, reducing interrupt overhead by allowing multiple packets to be processed per interupt (assuming you are using interrupts to process the packet).

    I'm not sure why you configured an rx flow that created the above scenario.  Why not change your receive flows (presuming the packet came from hardware/ethernet) to place the packet together in one buffer?

    If the above scenario is created with a software process (not created by a packet DMA), there is a packet DMA present in the queue manager called infrastructure DMA that can do memory to memory transfers.  It is a combination of a TX packet DMA and an RX packet DMA, such that it can do memory to memory transfers.  A very basic example is in qmInfraExampleProject.