Linux: согласованность кэша после DMALinux

Ответить Пред. темаСлед. тема
Anonymous
 Linux: согласованность кэша после DMA

Сообщение Anonymous »

В драйвере ядра Linux перед запуском DMA из устройства в ОЗУ я вызываю:

Код: Выделить всё

DmaHandle = dma_map_single (sDevice, VirtualAddress + Offset, Size, DMA_FROM_DEVICE);
dma_sync_single_for_device (sDevice, DmaHandle, Size, DMA_FROM_DEVICE);
После завершения DMA я звоню:

Код: Выделить всё

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)
Я делаю это каждый раз, когда «Счетчик приема» > 0.
Виртуальный адрес увеличивается каждый раз в соответствии с регистром «Счетчик приема».
Как вы думаете, это сработает?

Подробнее здесь: https://stackoverflow.com/questions/785 ... -after-dma
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Синхронизация потоков C++ и согласованность кэша
    Гость » » в форуме C++
    0 Ответы
    23 Просмотры
    Последнее сообщение Гость
  • Синхронизация потоков C++ и согласованность кэша
    Anonymous » » в форуме C++
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Dma неправильно получает данные от uart в Linux
    Anonymous » » в форуме Linux
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Как использовать DMA в Linux для связи со старой картой PCI
    Anonymous » » в форуме Linux
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Как Linux DMA реализует функциональность рассеянного отбора для режима MEM_TO_MEM?
    Anonymous » » в форуме Linux
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Linux»