diff options
Diffstat (limited to 'arch/sh/mm/consistent.c')
-rw-r--r-- | arch/sh/mm/consistent.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/arch/sh/mm/consistent.c b/arch/sh/mm/consistent.c index 3095d9581475..b2ce014401b5 100644 --- a/arch/sh/mm/consistent.c +++ b/arch/sh/mm/consistent.c | |||
@@ -10,6 +10,7 @@ | |||
10 | * for more details. | 10 | * for more details. |
11 | */ | 11 | */ |
12 | #include <linux/mm.h> | 12 | #include <linux/mm.h> |
13 | #include <linux/platform_device.h> | ||
13 | #include <linux/dma-mapping.h> | 14 | #include <linux/dma-mapping.h> |
14 | #include <asm/cacheflush.h> | 15 | #include <asm/cacheflush.h> |
15 | #include <asm/addrspace.h> | 16 | #include <asm/addrspace.h> |
@@ -93,3 +94,32 @@ void dma_cache_sync(struct device *dev, void *vaddr, size_t size, | |||
93 | } | 94 | } |
94 | } | 95 | } |
95 | EXPORT_SYMBOL(dma_cache_sync); | 96 | EXPORT_SYMBOL(dma_cache_sync); |
97 | |||
98 | int platform_resource_setup_memory(struct platform_device *pdev, | ||
99 | char *name, unsigned long memsize) | ||
100 | { | ||
101 | struct resource *r; | ||
102 | dma_addr_t dma_handle; | ||
103 | void *buf; | ||
104 | |||
105 | r = pdev->resource + pdev->num_resources - 1; | ||
106 | if (r->flags) { | ||
107 | pr_warning("%s: unable to find empty space for resource\n", | ||
108 | name); | ||
109 | return -EINVAL; | ||
110 | } | ||
111 | |||
112 | buf = dma_alloc_coherent(NULL, memsize, &dma_handle, GFP_KERNEL); | ||
113 | if (!buf) { | ||
114 | pr_warning("%s: unable to allocate memory\n", name); | ||
115 | return -ENOMEM; | ||
116 | } | ||
117 | |||
118 | memset(buf, 0, memsize); | ||
119 | |||
120 | r->flags = IORESOURCE_MEM; | ||
121 | r->start = dma_handle; | ||
122 | r->end = r->start + memsize - 1; | ||
123 | r->name = name; | ||
124 | return 0; | ||
125 | } | ||