Commit 0a88e772 authored by James Bottomley's avatar James Bottomley

Add GFP_ flags to parisc DMA API implementation

parent 13025fe0
...@@ -349,7 +349,7 @@ pcxl_dma_init(void) ...@@ -349,7 +349,7 @@ pcxl_dma_init(void)
__initcall(pcxl_dma_init); __initcall(pcxl_dma_init);
static void * pa11_dma_alloc_consistent (struct device *dev, size_t size, dma_addr_t *dma_handle) static void * pa11_dma_alloc_consistent (struct device *dev, size_t size, dma_addr_t *dma_handle, int flag)
{ {
unsigned long vaddr; unsigned long vaddr;
unsigned long paddr; unsigned long paddr;
...@@ -358,7 +358,7 @@ static void * pa11_dma_alloc_consistent (struct device *dev, size_t size, dma_ad ...@@ -358,7 +358,7 @@ static void * pa11_dma_alloc_consistent (struct device *dev, size_t size, dma_ad
order = get_order(size); order = get_order(size);
size = 1 << (order + PAGE_SHIFT); size = 1 << (order + PAGE_SHIFT);
vaddr = pcxl_alloc_range(size); vaddr = pcxl_alloc_range(size);
paddr = __get_free_pages(GFP_ATOMIC, order); paddr = __get_free_pages(flag, order);
flush_kernel_dcache_range(paddr, size); flush_kernel_dcache_range(paddr, size);
paddr = __pa(paddr); paddr = __pa(paddr);
map_uncached_pages(vaddr, size, paddr); map_uncached_pages(vaddr, size, paddr);
...@@ -482,18 +482,18 @@ struct hppa_dma_ops pcxl_dma_ops = { ...@@ -482,18 +482,18 @@ struct hppa_dma_ops pcxl_dma_ops = {
}; };
static void *fail_alloc_consistent(struct device *dev, size_t size, static void *fail_alloc_consistent(struct device *dev, size_t size,
dma_addr_t *dma_handle) dma_addr_t *dma_handle, int flag)
{ {
return NULL; return NULL;
} }
static void *pa11_dma_alloc_noncoherent(struct device *dev, size_t size, static void *pa11_dma_alloc_noncoherent(struct device *dev, size_t size,
dma_addr_t *dma_handle) dma_addr_t *dma_handle, int flag)
{ {
void *addr = NULL; void *addr = NULL;
/* rely on kmalloc to be cacheline aligned */ /* rely on kmalloc to be cacheline aligned */
addr = kmalloc(size, GFP_KERNEL); addr = kmalloc(size, flag);
if(addr) if(addr)
*dma_handle = (dma_addr_t)virt_to_phys(addr); *dma_handle = (dma_addr_t)virt_to_phys(addr);
......
...@@ -728,7 +728,7 @@ ccio_unmap_single(struct device *dev, dma_addr_t iova, size_t size, ...@@ -728,7 +728,7 @@ ccio_unmap_single(struct device *dev, dma_addr_t iova, size_t size,
* This function implements the pci_alloc_consistent function. * This function implements the pci_alloc_consistent function.
*/ */
static void * static void *
ccio_alloc_consistent(struct device *dev, size_t size, dma_addr_t *dma_handle) ccio_alloc_consistent(struct device *dev, size_t size, dma_addr_t *dma_handle, int flag)
{ {
void *ret; void *ret;
#if 0 #if 0
...@@ -741,7 +741,7 @@ ccio_alloc_consistent(struct device *dev, size_t size, dma_addr_t *dma_handle) ...@@ -741,7 +741,7 @@ ccio_alloc_consistent(struct device *dev, size_t size, dma_addr_t *dma_handle)
return 0; return 0;
} }
#endif #endif
ret = (void *) __get_free_pages(GFP_ATOMIC, get_order(size)); ret = (void *) __get_free_pages(flag, get_order(size));
if (ret) { if (ret) {
memset(ret, 0, size); memset(ret, 0, size);
......
...@@ -9,8 +9,8 @@ ...@@ -9,8 +9,8 @@
*/ */
struct hppa_dma_ops { struct hppa_dma_ops {
int (*dma_supported)(struct device *dev, u64 mask); int (*dma_supported)(struct device *dev, u64 mask);
void *(*alloc_consistent)(struct device *dev, size_t size, dma_addr_t *iova); void *(*alloc_consistent)(struct device *dev, size_t size, dma_addr_t *iova, int flag);
void *(*alloc_noncoherent)(struct device *dev, size_t size, dma_addr_t *iova); void *(*alloc_noncoherent)(struct device *dev, size_t size, dma_addr_t *iova, int flag);
void (*free_consistent)(struct device *dev, size_t size, void *vaddr, dma_addr_t iova); void (*free_consistent)(struct device *dev, size_t size, void *vaddr, dma_addr_t iova);
dma_addr_t (*map_single)(struct device *dev, void *addr, size_t size, enum dma_data_direction direction); dma_addr_t (*map_single)(struct device *dev, void *addr, size_t size, enum dma_data_direction direction);
void (*unmap_single)(struct device *dev, dma_addr_t iova, size_t size, enum dma_data_direction direction); void (*unmap_single)(struct device *dev, dma_addr_t iova, size_t size, enum dma_data_direction direction);
...@@ -46,15 +46,17 @@ extern struct hppa_dma_ops pcx_dma_ops; ...@@ -46,15 +46,17 @@ extern struct hppa_dma_ops pcx_dma_ops;
extern struct hppa_dma_ops *hppa_dma_ops; extern struct hppa_dma_ops *hppa_dma_ops;
static inline void * static inline void *
dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle) dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
int flag)
{ {
return hppa_dma_ops->alloc_consistent(dev, size, dma_handle); return hppa_dma_ops->alloc_consistent(dev, size, dma_handle, flag);
} }
static inline void * static inline void *
dma_alloc_noncoherent(struct device *dev, size_t size, dma_addr_t *dma_handle) dma_alloc_noncoherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
int flag)
{ {
return hppa_dma_ops->alloc_noncoherent(dev, size, dma_handle); return hppa_dma_ops->alloc_noncoherent(dev, size, dma_handle, flag);
} }
static inline void static inline void
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment