Loading Documentation/core-api/dma-attributes.rst +8 −0 Original line number Diff line number Diff line Loading @@ -130,3 +130,11 @@ accesses to DMA buffers in both privileged "supervisor" and unprivileged subsystem that the buffer is fully accessible at the elevated privilege level (and ideally inaccessible or at least read-only at the lesser-privileged levels). DMA_ATTR_OVERWRITE ------------------ This is a hint to the DMA-mapping subsystem that the device is expected to overwrite the entire mapped size, thus the caller does not require any of the previous buffer contents to be preserved. This allows bounce-buffering implementations to optimise DMA_FROM_DEVICE transfers. include/linux/dma-mapping.h +8 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,14 @@ */ #define DMA_ATTR_PRIVILEGED (1UL << 9) /* * This is a hint to the DMA-mapping subsystem that the device is expected * to overwrite the entire mapped size, thus the caller does not require any * of the previous buffer contents to be preserved. This allows * bounce-buffering implementations to optimise DMA_FROM_DEVICE transfers. */ #define DMA_ATTR_OVERWRITE (1UL << 10) /* * A dma_addr_t can hold any valid DMA or bus address for the platform. It can * be given to a device to use as a DMA source or target. It is specific to a Loading kernel/dma/swiotlb.c +2 −1 Original line number Diff line number Diff line Loading @@ -628,7 +628,8 @@ phys_addr_t swiotlb_tbl_map_single(struct device *dev, phys_addr_t orig_addr, mem->slots[index + i].orig_addr = slot_addr(orig_addr, i); tlb_addr = slot_addr(mem->start, index) + offset; if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC) && (dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL)) (!(attrs & DMA_ATTR_OVERWRITE) || dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL)) swiotlb_bounce(dev, tlb_addr, mapping_size, DMA_TO_DEVICE); return tlb_addr; } Loading Loading
Documentation/core-api/dma-attributes.rst +8 −0 Original line number Diff line number Diff line Loading @@ -130,3 +130,11 @@ accesses to DMA buffers in both privileged "supervisor" and unprivileged subsystem that the buffer is fully accessible at the elevated privilege level (and ideally inaccessible or at least read-only at the lesser-privileged levels). DMA_ATTR_OVERWRITE ------------------ This is a hint to the DMA-mapping subsystem that the device is expected to overwrite the entire mapped size, thus the caller does not require any of the previous buffer contents to be preserved. This allows bounce-buffering implementations to optimise DMA_FROM_DEVICE transfers.
include/linux/dma-mapping.h +8 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,14 @@ */ #define DMA_ATTR_PRIVILEGED (1UL << 9) /* * This is a hint to the DMA-mapping subsystem that the device is expected * to overwrite the entire mapped size, thus the caller does not require any * of the previous buffer contents to be preserved. This allows * bounce-buffering implementations to optimise DMA_FROM_DEVICE transfers. */ #define DMA_ATTR_OVERWRITE (1UL << 10) /* * A dma_addr_t can hold any valid DMA or bus address for the platform. It can * be given to a device to use as a DMA source or target. It is specific to a Loading
kernel/dma/swiotlb.c +2 −1 Original line number Diff line number Diff line Loading @@ -628,7 +628,8 @@ phys_addr_t swiotlb_tbl_map_single(struct device *dev, phys_addr_t orig_addr, mem->slots[index + i].orig_addr = slot_addr(orig_addr, i); tlb_addr = slot_addr(mem->start, index) + offset; if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC) && (dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL)) (!(attrs & DMA_ATTR_OVERWRITE) || dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL)) swiotlb_bounce(dev, tlb_addr, mapping_size, DMA_TO_DEVICE); return tlb_addr; } Loading