diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2007-06-13 00:52:54 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-06-14 08:30:15 -0400 |
commit | 90ac19a8b21ba2621ddd7beb2dc96152e78270b7 (patch) | |
tree | e1901e1053dc805c022d1bdd651b3f935d31c600 /arch/powerpc/mm/pgtable_32.c | |
parent | 4db68bfe71940c0851bc81041ade6dc293fe2b96 (diff) |
[POWERPC] Abolish iopa(), mm_ptov(), io_block_mapping() from arch/powerpc
These old-fashioned IO mapping functions no longer have any callers in
code which remains relevant on arch/powerpc. Therefore, this removes
them from arch/powerpc.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/mm/pgtable_32.c')
-rw-r--r-- | arch/powerpc/mm/pgtable_32.c | 118 |
1 files changed, 0 insertions, 118 deletions
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c index f6ae1a57d652..62680b0f7204 100644 --- a/arch/powerpc/mm/pgtable_32.c +++ b/arch/powerpc/mm/pgtable_32.c | |||
@@ -303,48 +303,6 @@ void __init mapin_ram(void) | |||
303 | /* is x a power of 4? */ | 303 | /* is x a power of 4? */ |
304 | #define is_power_of_4(x) is_power_of_2(x) && (ffs(x) & 1) | 304 | #define is_power_of_4(x) is_power_of_2(x) && (ffs(x) & 1) |
305 | 305 | ||
306 | /* | ||
307 | * Set up a mapping for a block of I/O. | ||
308 | * virt, phys, size must all be page-aligned. | ||
309 | * This should only be called before ioremap is called. | ||
310 | */ | ||
311 | void __init io_block_mapping(unsigned long virt, phys_addr_t phys, | ||
312 | unsigned int size, int flags) | ||
313 | { | ||
314 | int i; | ||
315 | |||
316 | if (virt > KERNELBASE && virt < ioremap_bot) | ||
317 | ioremap_bot = ioremap_base = virt; | ||
318 | |||
319 | #ifdef HAVE_BATS | ||
320 | /* | ||
321 | * Use a BAT for this if possible... | ||
322 | */ | ||
323 | if (io_bat_index < 2 && is_power_of_2(size) | ||
324 | && (virt & (size - 1)) == 0 && (phys & (size - 1)) == 0) { | ||
325 | setbat(io_bat_index, virt, phys, size, flags); | ||
326 | ++io_bat_index; | ||
327 | return; | ||
328 | } | ||
329 | #endif /* HAVE_BATS */ | ||
330 | |||
331 | #ifdef HAVE_TLBCAM | ||
332 | /* | ||
333 | * Use a CAM for this if possible... | ||
334 | */ | ||
335 | if (tlbcam_index < num_tlbcam_entries && is_power_of_4(size) | ||
336 | && (virt & (size - 1)) == 0 && (phys & (size - 1)) == 0) { | ||
337 | settlbcam(tlbcam_index, virt, phys, size, flags, 0); | ||
338 | ++tlbcam_index; | ||
339 | return; | ||
340 | } | ||
341 | #endif /* HAVE_TLBCAM */ | ||
342 | |||
343 | /* No BATs available, put it in the page tables. */ | ||
344 | for (i = 0; i < size; i += PAGE_SIZE) | ||
345 | map_page(virt + i, phys + i, flags); | ||
346 | } | ||
347 | |||
348 | /* Scan the real Linux page tables and return a PTE pointer for | 306 | /* Scan the real Linux page tables and return a PTE pointer for |
349 | * a virtual address in a context. | 307 | * a virtual address in a context. |
350 | * Returns true (1) if PTE was found, zero otherwise. The pointer to | 308 | * Returns true (1) if PTE was found, zero otherwise. The pointer to |
@@ -379,82 +337,6 @@ get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep, pmd_t **pmdp) | |||
379 | return(retval); | 337 | return(retval); |
380 | } | 338 | } |
381 | 339 | ||
382 | /* Find physical address for this virtual address. Normally used by | ||
383 | * I/O functions, but anyone can call it. | ||
384 | */ | ||
385 | unsigned long iopa(unsigned long addr) | ||
386 | { | ||
387 | unsigned long pa; | ||
388 | |||
389 | /* I don't know why this won't work on PMacs or CHRP. It | ||
390 | * appears there is some bug, or there is some implicit | ||
391 | * mapping done not properly represented by BATs or in page | ||
392 | * tables.......I am actively working on resolving this, but | ||
393 | * can't hold up other stuff. -- Dan | ||
394 | */ | ||
395 | pte_t *pte; | ||
396 | struct mm_struct *mm; | ||
397 | |||
398 | /* Check the BATs */ | ||
399 | pa = v_mapped_by_bats(addr); | ||
400 | if (pa) | ||
401 | return pa; | ||
402 | |||
403 | /* Allow mapping of user addresses (within the thread) | ||
404 | * for DMA if necessary. | ||
405 | */ | ||
406 | if (addr < TASK_SIZE) | ||
407 | mm = current->mm; | ||
408 | else | ||
409 | mm = &init_mm; | ||
410 | |||
411 | pa = 0; | ||
412 | if (get_pteptr(mm, addr, &pte, NULL)) { | ||
413 | pa = (pte_val(*pte) & PAGE_MASK) | (addr & ~PAGE_MASK); | ||
414 | pte_unmap(pte); | ||
415 | } | ||
416 | |||
417 | return(pa); | ||
418 | } | ||
419 | |||
420 | /* This is will find the virtual address for a physical one.... | ||
421 | * Swiped from APUS, could be dangerous :-). | ||
422 | * This is only a placeholder until I really find a way to make this | ||
423 | * work. -- Dan | ||
424 | */ | ||
425 | unsigned long | ||
426 | mm_ptov (unsigned long paddr) | ||
427 | { | ||
428 | unsigned long ret; | ||
429 | #if 0 | ||
430 | if (paddr < 16*1024*1024) | ||
431 | ret = ZTWO_VADDR(paddr); | ||
432 | else { | ||
433 | int i; | ||
434 | |||
435 | for (i = 0; i < kmap_chunk_count;){ | ||
436 | unsigned long phys = kmap_chunks[i++]; | ||
437 | unsigned long size = kmap_chunks[i++]; | ||
438 | unsigned long virt = kmap_chunks[i++]; | ||
439 | if (paddr >= phys | ||
440 | && paddr < (phys + size)){ | ||
441 | ret = virt + paddr - phys; | ||
442 | goto exit; | ||
443 | } | ||
444 | } | ||
445 | |||
446 | ret = (unsigned long) __va(paddr); | ||
447 | } | ||
448 | exit: | ||
449 | #ifdef DEBUGPV | ||
450 | printk ("PTOV(%lx)=%lx\n", paddr, ret); | ||
451 | #endif | ||
452 | #else | ||
453 | ret = (unsigned long)paddr + KERNELBASE; | ||
454 | #endif | ||
455 | return ret; | ||
456 | } | ||
457 | |||
458 | #ifdef CONFIG_DEBUG_PAGEALLOC | 340 | #ifdef CONFIG_DEBUG_PAGEALLOC |
459 | 341 | ||
460 | static int __change_page_attr(struct page *page, pgprot_t prot) | 342 | static int __change_page_attr(struct page *page, pgprot_t prot) |