diff options
-rw-r--r-- | Documentation/DMA-attributes.txt | 24 | ||||
-rw-r--r-- | include/linux/dma-attrs.h | 1 |
2 files changed, 25 insertions, 0 deletions
diff --git a/Documentation/DMA-attributes.txt b/Documentation/DMA-attributes.txt index 725580de75a..f50309081ac 100644 --- a/Documentation/DMA-attributes.txt +++ b/Documentation/DMA-attributes.txt | |||
@@ -67,3 +67,27 @@ set on each call. | |||
67 | Since it is optional for platforms to implement | 67 | Since it is optional for platforms to implement |
68 | DMA_ATTR_NO_KERNEL_MAPPING, those that do not will simply ignore the | 68 | DMA_ATTR_NO_KERNEL_MAPPING, those that do not will simply ignore the |
69 | attribute and exhibit default behavior. | 69 | attribute and exhibit default behavior. |
70 | |||
71 | DMA_ATTR_SKIP_CPU_SYNC | ||
72 | ---------------------- | ||
73 | |||
74 | By default dma_map_{single,page,sg} functions family transfer a given | ||
75 | buffer from CPU domain to device domain. Some advanced use cases might | ||
76 | require sharing a buffer between more than one device. This requires | ||
77 | having a mapping created separately for each device and is usually | ||
78 | performed by calling dma_map_{single,page,sg} function more than once | ||
79 | for the given buffer with device pointer to each device taking part in | ||
80 | the buffer sharing. The first call transfers a buffer from 'CPU' domain | ||
81 | to 'device' domain, what synchronizes CPU caches for the given region | ||
82 | (usually it means that the cache has been flushed or invalidated | ||
83 | depending on the dma direction). However, next calls to | ||
84 | dma_map_{single,page,sg}() for other devices will perform exactly the | ||
85 | same sychronization operation on the CPU cache. CPU cache sychronization | ||
86 | might be a time consuming operation, especially if the buffers are | ||
87 | large, so it is highly recommended to avoid it if possible. | ||
88 | DMA_ATTR_SKIP_CPU_SYNC allows platform code to skip synchronization of | ||
89 | the CPU cache for the given buffer assuming that it has been already | ||
90 | transferred to 'device' domain. This attribute can be also used for | ||
91 | dma_unmap_{single,page,sg} functions family to force buffer to stay in | ||
92 | device domain after releasing a mapping for it. Use this attribute with | ||
93 | care! | ||
diff --git a/include/linux/dma-attrs.h b/include/linux/dma-attrs.h index a37c10cc51c..f83f793223f 100644 --- a/include/linux/dma-attrs.h +++ b/include/linux/dma-attrs.h | |||
@@ -16,6 +16,7 @@ enum dma_attr { | |||
16 | DMA_ATTR_WRITE_COMBINE, | 16 | DMA_ATTR_WRITE_COMBINE, |
17 | DMA_ATTR_NON_CONSISTENT, | 17 | DMA_ATTR_NON_CONSISTENT, |
18 | DMA_ATTR_NO_KERNEL_MAPPING, | 18 | DMA_ATTR_NO_KERNEL_MAPPING, |
19 | DMA_ATTR_SKIP_CPU_SYNC, | ||
19 | DMA_ATTR_MAX, | 20 | DMA_ATTR_MAX, |
20 | }; | 21 | }; |
21 | 22 | ||