__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 paddr;
order = get_order(size);
size = 1 << (order + PAGE_SHIFT);
vaddr = pcxl_alloc_range(size);
- paddr = __get_free_pages(GFP_ATOMIC, order);
+ paddr = __get_free_pages(flag, order);
flush_kernel_dcache_range(paddr, size);
paddr = __pa(paddr);
map_uncached_pages(vaddr, size, paddr);
};
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;
}
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;
/* rely on kmalloc to be cacheline aligned */
- addr = kmalloc(size, GFP_KERNEL);
+ addr = kmalloc(size, flag);
if(addr)
*dma_handle = (dma_addr_t)virt_to_phys(addr);
* This function implements the pci_alloc_consistent function.
*/
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;
#if 0
return 0;
}
#endif
- ret = (void *) __get_free_pages(GFP_ATOMIC, get_order(size));
+ ret = (void *) __get_free_pages(flag, get_order(size));
if (ret) {
memset(ret, 0, size);
*/
struct hppa_dma_ops {
int (*dma_supported)(struct device *dev, u64 mask);
- void *(*alloc_consistent)(struct device *dev, size_t size, dma_addr_t *iova);
- void *(*alloc_noncoherent)(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, int flag);
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);
void (*unmap_single)(struct device *dev, dma_addr_t iova, size_t size, enum dma_data_direction direction);
extern struct hppa_dma_ops *hppa_dma_ops;
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 *
-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