Hi Vinod, and all Cc Guennadi I need your opinion
Now, my USB driver is using DMAEngine, but, in "data receive" case, it doesn't know the exact received data size before DMA starting, since USB device doesn't know how many data will be sent. Then, (I think) USB driver is using enough size buffer for it. Now, our USB-DMAC will stop if 1) specified size transfer was done, or 2) if it got short packet pseudo code is like this... buf = 2048 byte // enough size dma_start(buf, size); if 1) case actual received size was 2048 byte if 2) case actual received size was 800 byte for example Now, I need to get this "actual received data size" somehow Guennadi noticed that dmaengine_tx_status() can return dma_tx_state::residue. According to the header file, residue should only be returned, if the transfer is still in progress or has been paused. But it can help me if we can extend this API to also allow setting this value for completed transfers. The pseudo code which can help me is above. But what do you think about it ? Or do you have any other solution ? void dma_done() { /* * Now DMA transfer has done * this struct dma_tx_state::residue means * "real" residue */ dmaengine_tx_status(..., &status); if (status->residue > 0) { /* * 2) case can come here. * if actual transferred data was 800, * status->residue is (2048 - 800) */ } } void my_dma_start() { len = 2048; // for example desc = dmaengine_prep_slave_single(..., len, ...); desc->callback = dma_done; dmaengine_submit(desc); } -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/