diff options
Diffstat (limited to 'drivers/iommu/omap-iovmm.c')
-rw-r--r-- | drivers/iommu/omap-iovmm.c | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/drivers/iommu/omap-iovmm.c b/drivers/iommu/omap-iovmm.c index b332392397ce..9852101cf042 100644 --- a/drivers/iommu/omap-iovmm.c +++ b/drivers/iommu/omap-iovmm.c | |||
@@ -17,15 +17,59 @@ | |||
17 | #include <linux/device.h> | 17 | #include <linux/device.h> |
18 | #include <linux/scatterlist.h> | 18 | #include <linux/scatterlist.h> |
19 | #include <linux/iommu.h> | 19 | #include <linux/iommu.h> |
20 | #include <linux/omap-iommu.h> | ||
20 | 21 | ||
21 | #include <asm/cacheflush.h> | 22 | #include <asm/cacheflush.h> |
22 | #include <asm/mach/map.h> | 23 | #include <asm/mach/map.h> |
23 | 24 | ||
24 | #include <plat/iommu.h> | 25 | #include <plat/iommu.h> |
25 | #include <plat/iovmm.h> | ||
26 | 26 | ||
27 | #include "omap-iopgtable.h" | 27 | #include "omap-iopgtable.h" |
28 | 28 | ||
29 | /* | ||
30 | * IOVMF_FLAGS: attribute for iommu virtual memory area(iovma) | ||
31 | * | ||
32 | * lower 16 bit is used for h/w and upper 16 bit is for s/w. | ||
33 | */ | ||
34 | #define IOVMF_SW_SHIFT 16 | ||
35 | |||
36 | /* | ||
37 | * iovma: h/w flags derived from cam and ram attribute | ||
38 | */ | ||
39 | #define IOVMF_CAM_MASK (~((1 << 10) - 1)) | ||
40 | #define IOVMF_RAM_MASK (~IOVMF_CAM_MASK) | ||
41 | |||
42 | #define IOVMF_PGSZ_MASK (3 << 0) | ||
43 | #define IOVMF_PGSZ_1M MMU_CAM_PGSZ_1M | ||
44 | #define IOVMF_PGSZ_64K MMU_CAM_PGSZ_64K | ||
45 | #define IOVMF_PGSZ_4K MMU_CAM_PGSZ_4K | ||
46 | #define IOVMF_PGSZ_16M MMU_CAM_PGSZ_16M | ||
47 | |||
48 | #define IOVMF_ENDIAN_MASK (1 << 9) | ||
49 | #define IOVMF_ENDIAN_BIG MMU_RAM_ENDIAN_BIG | ||
50 | |||
51 | #define IOVMF_ELSZ_MASK (3 << 7) | ||
52 | #define IOVMF_ELSZ_16 MMU_RAM_ELSZ_16 | ||
53 | #define IOVMF_ELSZ_32 MMU_RAM_ELSZ_32 | ||
54 | #define IOVMF_ELSZ_NONE MMU_RAM_ELSZ_NONE | ||
55 | |||
56 | #define IOVMF_MIXED_MASK (1 << 6) | ||
57 | #define IOVMF_MIXED MMU_RAM_MIXED | ||
58 | |||
59 | /* | ||
60 | * iovma: s/w flags, used for mapping and umapping internally. | ||
61 | */ | ||
62 | #define IOVMF_MMIO (1 << IOVMF_SW_SHIFT) | ||
63 | #define IOVMF_ALLOC (2 << IOVMF_SW_SHIFT) | ||
64 | #define IOVMF_ALLOC_MASK (3 << IOVMF_SW_SHIFT) | ||
65 | |||
66 | /* "superpages" is supported just with physically linear pages */ | ||
67 | #define IOVMF_DISCONT (1 << (2 + IOVMF_SW_SHIFT)) | ||
68 | #define IOVMF_LINEAR (2 << (2 + IOVMF_SW_SHIFT)) | ||
69 | #define IOVMF_LINEAR_MASK (3 << (2 + IOVMF_SW_SHIFT)) | ||
70 | |||
71 | #define IOVMF_DA_FIXED (1 << (4 + IOVMF_SW_SHIFT)) | ||
72 | |||
29 | static struct kmem_cache *iovm_area_cachep; | 73 | static struct kmem_cache *iovm_area_cachep; |
30 | 74 | ||
31 | /* return the offset of the first scatterlist entry in a sg table */ | 75 | /* return the offset of the first scatterlist entry in a sg table */ |