diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2000-11-22 15:51:26 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2000-11-22 15:51:26 +0000 |
commit | 4a13312b4c9256ff4bc5eba83ac242448bf1cd4b (patch) | |
tree | aa7d33f4d9b05a7419cb9d8656c0f4ac58367bee /arch/mips/kernel/pci-dma.c | |
parent | 316578bcc36452acee5f116b547d968c9b7b64bd (diff) |
Unify the dozen pci-dma copies we had.
Diffstat (limited to 'arch/mips/kernel/pci-dma.c')
-rw-r--r-- | arch/mips/kernel/pci-dma.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/arch/mips/kernel/pci-dma.c b/arch/mips/kernel/pci-dma.c new file mode 100644 index 000000000..de9cb90aa --- /dev/null +++ b/arch/mips/kernel/pci-dma.c @@ -0,0 +1,37 @@ +/* + * + * Dynamic DMA mapping support. + * + * Copyright (C) 2000 Ani Joshi <ajoshi@unixbox.com> + * swiped from i386, and cloned for MIPS by Geert, polished by Ralf. + */ +#include <linux/types.h> +#include <linux/mm.h> +#include <linux/string.h> +#include <linux/pci.h> + +#include <asm/io.h> + +void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size, + dma_addr_t * dma_handle) +{ + void *ret; + int gfp = GFP_ATOMIC; + + if (hwdev == NULL || hwdev->dma_mask != 0xffffffff) + gfp |= GFP_DMA; + ret = (void *) __get_free_pages(gfp, get_order(size)); + + if (ret != NULL) { + dma_cache_inv((unsigned long) ret, size); + *dma_handle = virt_to_bus(ret); + } + + return KSEG1ADDR(ret); +} + +void pci_free_consistent(struct pci_dev *hwdev, size_t size, + void *vaddr, dma_addr_t dma_handle) +{ + free_pages((unsigned long) KSEG0ADDR(vaddr), get_order(size)); +} |