.. | .. |
---|
27 | 27 | |
---|
28 | 28 | #include <linux/init.h> |
---|
29 | 29 | #include <linux/ioport.h> |
---|
| 30 | +#include <linux/mm.h> |
---|
30 | 31 | |
---|
31 | 32 | #include <asm/dma-coherence.h> |
---|
32 | 33 | #include <asm/mipsregs.h> |
---|
.. | .. |
---|
72 | 73 | iomem_resource.end = IOMEM_RESOURCE_END; |
---|
73 | 74 | } |
---|
74 | 75 | |
---|
75 | | -#if defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_PCI) |
---|
| 76 | +#ifdef CONFIG_MIPS_FIXUP_BIGPHYS_ADDR |
---|
76 | 77 | /* This routine should be valid for all Au1x based boards */ |
---|
77 | | -phys_addr_t __fixup_bigphys_addr(phys_addr_t phys_addr, phys_addr_t size) |
---|
| 78 | +phys_addr_t fixup_bigphys_addr(phys_addr_t phys_addr, phys_addr_t size) |
---|
78 | 79 | { |
---|
79 | 80 | unsigned long start = ALCHEMY_PCI_MEMWIN_START; |
---|
80 | 81 | unsigned long end = ALCHEMY_PCI_MEMWIN_END; |
---|
.. | .. |
---|
90 | 91 | /* default nop */ |
---|
91 | 92 | return phys_addr; |
---|
92 | 93 | } |
---|
93 | | -EXPORT_SYMBOL(__fixup_bigphys_addr); |
---|
94 | | -#endif |
---|
| 94 | + |
---|
| 95 | +int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long vaddr, |
---|
| 96 | + unsigned long pfn, unsigned long size, pgprot_t prot) |
---|
| 97 | +{ |
---|
| 98 | + phys_addr_t phys_addr = fixup_bigphys_addr(pfn << PAGE_SHIFT, size); |
---|
| 99 | + |
---|
| 100 | + return remap_pfn_range(vma, vaddr, phys_addr >> PAGE_SHIFT, size, prot); |
---|
| 101 | +} |
---|
| 102 | +EXPORT_SYMBOL(io_remap_pfn_range); |
---|
| 103 | +#endif /* CONFIG_MIPS_FIXUP_BIGPHYS_ADDR */ |
---|