Код: Выделить всё
DmaHandle = dma_map_single (sDevice, VirtualAddress + Offset, Size, DMA_FROM_DEVICE);
dma_sync_single_for_device (sDevice, DmaHandle, Size, DMA_FROM_DEVICE);
Код: Выделить всё
dma_sync_single_for_cpu (sDevice, DmaHandle, Size, DMA_FROM_DEVICE)
dma_unmap_single (sDevice, DmaHandle, Size, DMA_FROM_DEVICE)
Но у меня также есть еще один DMA от устройства к оперативной памяти.
Этот DMA инициирован, но мы не можем подождите, пока он закончится.
Мы опрашиваем регистр «Счетчик приема», который сообщает нам, сколько байтов мы получили.
Предположим, мы получили 128 байтов.
Мне нужно немедленно прочитать эти байты и обработать их. их.
Для этого я звоню:
Код: Выделить всё
DmaHandle = dma_map_single (sDevice, VirtualAddress, ReceiveCount, DMA_FROM_DEVICE);
dma_sync_single_for_device (sDevice, DmaHandle, ReceiveCount, DMA_FROM_DEVICE);
dma_sync_single_for_cpu (sDevice, DmaHandle , ReceiveCount, DMA_FROM_DEVICE)
dma_unmap_single (sDevice, DmaHandle , ReceiveCount, DMA_FROM_DEVICE)
Виртуальный адрес увеличивается каждый раз в соответствии с регистром «Счетчик приема».
Как вы думаете, это сработает?
Подробнее здесь: https://stackoverflow.com/questions/785 ... -after-dma