diff options
Diffstat (limited to 'arch/powerpc/mm/pgtable_32.c')
-rw-r--r-- | arch/powerpc/mm/pgtable_32.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c index f4e5ac122615..90628601fac7 100644 --- a/arch/powerpc/mm/pgtable_32.c +++ b/arch/powerpc/mm/pgtable_32.c | |||
@@ -37,6 +37,7 @@ | |||
37 | 37 | ||
38 | unsigned long ioremap_base; | 38 | unsigned long ioremap_base; |
39 | unsigned long ioremap_bot; | 39 | unsigned long ioremap_bot; |
40 | EXPORT_SYMBOL(ioremap_bot); /* aka VMALLOC_END */ | ||
40 | int io_bat_index; | 41 | int io_bat_index; |
41 | 42 | ||
42 | #if defined(CONFIG_6xx) || defined(CONFIG_POWER3) | 43 | #if defined(CONFIG_6xx) || defined(CONFIG_POWER3) |
@@ -153,6 +154,7 @@ ioremap64(unsigned long long addr, unsigned long size) | |||
153 | { | 154 | { |
154 | return __ioremap(addr, size, _PAGE_NO_CACHE); | 155 | return __ioremap(addr, size, _PAGE_NO_CACHE); |
155 | } | 156 | } |
157 | EXPORT_SYMBOL(ioremap64); | ||
156 | 158 | ||
157 | void __iomem * | 159 | void __iomem * |
158 | ioremap(phys_addr_t addr, unsigned long size) | 160 | ioremap(phys_addr_t addr, unsigned long size) |
@@ -162,6 +164,7 @@ ioremap(phys_addr_t addr, unsigned long size) | |||
162 | return ioremap64(addr64, size); | 164 | return ioremap64(addr64, size); |
163 | } | 165 | } |
164 | #endif /* CONFIG_PHYS_64BIT */ | 166 | #endif /* CONFIG_PHYS_64BIT */ |
167 | EXPORT_SYMBOL(ioremap); | ||
165 | 168 | ||
166 | void __iomem * | 169 | void __iomem * |
167 | __ioremap(phys_addr_t addr, unsigned long size, unsigned long flags) | 170 | __ioremap(phys_addr_t addr, unsigned long size, unsigned long flags) |
@@ -247,6 +250,7 @@ __ioremap(phys_addr_t addr, unsigned long size, unsigned long flags) | |||
247 | out: | 250 | out: |
248 | return (void __iomem *) (v + ((unsigned long)addr & ~PAGE_MASK)); | 251 | return (void __iomem *) (v + ((unsigned long)addr & ~PAGE_MASK)); |
249 | } | 252 | } |
253 | EXPORT_SYMBOL(__ioremap); | ||
250 | 254 | ||
251 | void iounmap(volatile void __iomem *addr) | 255 | void iounmap(volatile void __iomem *addr) |
252 | { | 256 | { |
@@ -259,6 +263,7 @@ void iounmap(volatile void __iomem *addr) | |||
259 | if (addr > high_memory && (unsigned long) addr < ioremap_bot) | 263 | if (addr > high_memory && (unsigned long) addr < ioremap_bot) |
260 | vunmap((void *) (PAGE_MASK & (unsigned long)addr)); | 264 | vunmap((void *) (PAGE_MASK & (unsigned long)addr)); |
261 | } | 265 | } |
266 | EXPORT_SYMBOL(iounmap); | ||
262 | 267 | ||
263 | void __iomem *ioport_map(unsigned long port, unsigned int len) | 268 | void __iomem *ioport_map(unsigned long port, unsigned int len) |
264 | { | 269 | { |
@@ -367,7 +372,7 @@ void __init io_block_mapping(unsigned long virt, phys_addr_t phys, | |||
367 | * the PTE pointer is unmodified if PTE is not found. | 372 | * the PTE pointer is unmodified if PTE is not found. |
368 | */ | 373 | */ |
369 | int | 374 | int |
370 | get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep) | 375 | get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep, pmd_t **pmdp) |
371 | { | 376 | { |
372 | pgd_t *pgd; | 377 | pgd_t *pgd; |
373 | pmd_t *pmd; | 378 | pmd_t *pmd; |
@@ -382,6 +387,8 @@ get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep) | |||
382 | if (pte) { | 387 | if (pte) { |
383 | retval = 1; | 388 | retval = 1; |
384 | *ptep = pte; | 389 | *ptep = pte; |
390 | if (pmdp) | ||
391 | *pmdp = pmd; | ||
385 | /* XXX caller needs to do pte_unmap, yuck */ | 392 | /* XXX caller needs to do pte_unmap, yuck */ |
386 | } | 393 | } |
387 | } | 394 | } |
@@ -419,7 +426,7 @@ unsigned long iopa(unsigned long addr) | |||
419 | mm = &init_mm; | 426 | mm = &init_mm; |
420 | 427 | ||
421 | pa = 0; | 428 | pa = 0; |
422 | if (get_pteptr(mm, addr, &pte)) { | 429 | if (get_pteptr(mm, addr, &pte, NULL)) { |
423 | pa = (pte_val(*pte) & PAGE_MASK) | (addr & ~PAGE_MASK); | 430 | pa = (pte_val(*pte) & PAGE_MASK) | (addr & ~PAGE_MASK); |
424 | pte_unmap(pte); | 431 | pte_unmap(pte); |
425 | } | 432 | } |