Loading lib/swiotlb.c +13 −4 Original line number Diff line number Diff line Loading @@ -312,6 +312,15 @@ static int is_swiotlb_buffer(char *addr) return addr >= io_tlb_start && addr < io_tlb_end; } static void __sync_single(char *buffer, char *dma_addr, size_t size, int dir) { if (dir == DMA_TO_DEVICE) memcpy(dma_addr, buffer, size); else memcpy(buffer, dma_addr, size); } /* * Allocates bounce buffer and returns its kernel virtual address. */ Loading Loading @@ -413,7 +422,7 @@ map_single(struct device *hwdev, char *buffer, size_t size, int dir) for (i = 0; i < nslots; i++) io_tlb_orig_addr[index+i] = buffer + (i << IO_TLB_SHIFT); if (dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL) memcpy(dma_addr, buffer, size); __sync_single(buffer, dma_addr, size, DMA_TO_DEVICE); return dma_addr; } Loading @@ -437,7 +446,7 @@ unmap_single(struct device *hwdev, char *dma_addr, size_t size, int dir) * bounce... copy the data back into the original buffer * and * delete the bounce buffer. */ memcpy(buffer, dma_addr, size); __sync_single(buffer, dma_addr, size, DMA_FROM_DEVICE); /* * Return the buffer to the free list by setting the corresponding Loading Loading @@ -477,13 +486,13 @@ sync_single(struct device *hwdev, char *dma_addr, size_t size, switch (target) { case SYNC_FOR_CPU: if (likely(dir == DMA_FROM_DEVICE || dir == DMA_BIDIRECTIONAL)) memcpy(buffer, dma_addr, size); __sync_single(buffer, dma_addr, size, DMA_FROM_DEVICE); else BUG_ON(dir != DMA_TO_DEVICE); break; case SYNC_FOR_DEVICE: if (likely(dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL)) memcpy(dma_addr, buffer, size); __sync_single(buffer, dma_addr, size, DMA_TO_DEVICE); else BUG_ON(dir != DMA_FROM_DEVICE); break; Loading Loading
lib/swiotlb.c +13 −4 Original line number Diff line number Diff line Loading @@ -312,6 +312,15 @@ static int is_swiotlb_buffer(char *addr) return addr >= io_tlb_start && addr < io_tlb_end; } static void __sync_single(char *buffer, char *dma_addr, size_t size, int dir) { if (dir == DMA_TO_DEVICE) memcpy(dma_addr, buffer, size); else memcpy(buffer, dma_addr, size); } /* * Allocates bounce buffer and returns its kernel virtual address. */ Loading Loading @@ -413,7 +422,7 @@ map_single(struct device *hwdev, char *buffer, size_t size, int dir) for (i = 0; i < nslots; i++) io_tlb_orig_addr[index+i] = buffer + (i << IO_TLB_SHIFT); if (dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL) memcpy(dma_addr, buffer, size); __sync_single(buffer, dma_addr, size, DMA_TO_DEVICE); return dma_addr; } Loading @@ -437,7 +446,7 @@ unmap_single(struct device *hwdev, char *dma_addr, size_t size, int dir) * bounce... copy the data back into the original buffer * and * delete the bounce buffer. */ memcpy(buffer, dma_addr, size); __sync_single(buffer, dma_addr, size, DMA_FROM_DEVICE); /* * Return the buffer to the free list by setting the corresponding Loading Loading @@ -477,13 +486,13 @@ sync_single(struct device *hwdev, char *dma_addr, size_t size, switch (target) { case SYNC_FOR_CPU: if (likely(dir == DMA_FROM_DEVICE || dir == DMA_BIDIRECTIONAL)) memcpy(buffer, dma_addr, size); __sync_single(buffer, dma_addr, size, DMA_FROM_DEVICE); else BUG_ON(dir != DMA_TO_DEVICE); break; case SYNC_FOR_DEVICE: if (likely(dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL)) memcpy(dma_addr, buffer, size); __sync_single(buffer, dma_addr, size, DMA_TO_DEVICE); else BUG_ON(dir != DMA_FROM_DEVICE); break; Loading