1/* 2 * Declarations of procedures and variables shared between files 3 * in arch/ppc/mm/. 4 * 5 * Derived from arch/ppc/mm/init.c: 6 * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) 7 * 8 * Modifications by Paul Mackerras (PowerMac) (paulus@cs.anu.edu.au) 9 * and Cort Dougan (PReP) (cort@cs.nmt.edu) 10 * Copyright (C) 1996 Paul Mackerras 11 * 12 * Derived from "arch/i386/mm/init.c" 13 * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds 14 * 15 * This program is free software; you can redistribute it and/or 16 * modify it under the terms of the GNU General Public License 17 * as published by the Free Software Foundation; either version 18 * 2 of the License, or (at your option) any later version. 19 * 20 */ 21#include <linux/mm.h> 22#include <asm/tlbflush.h> 23#include <asm/mmu.h> 24 25#ifdef CONFIG_PPC_MMU_NOHASH 26 27/* 28 * On 40x and 8xx, we directly inline tlbia and tlbivax 29 */ 30#if defined(CONFIG_40x) || defined(CONFIG_8xx) 31static inline void _tlbil_all(void) 32{ 33 asm volatile ("sync; tlbia; isync" : : : "memory"); 34} 35static inline void _tlbil_pid(unsigned int pid) 36{ 37 asm volatile ("sync; tlbia; isync" : : : "memory"); 38} 39#define _tlbil_pid_noind(pid) _tlbil_pid(pid) 40 41#else /* CONFIG_40x || CONFIG_8xx */ 42extern void _tlbil_all(void); 43extern void _tlbil_pid(unsigned int pid); 44#ifdef CONFIG_PPC_BOOK3E 45extern void _tlbil_pid_noind(unsigned int pid); 46#else 47#define _tlbil_pid_noind(pid) _tlbil_pid(pid) 48#endif 49#endif /* !(CONFIG_40x || CONFIG_8xx) */ 50 51/* 52 * On 8xx, we directly inline tlbie, on others, it's extern 53 */ 54#ifdef CONFIG_8xx 55static inline void _tlbil_va(unsigned long address, unsigned int pid, 56 unsigned int tsize, unsigned int ind) 57{ 58 asm volatile ("tlbie %0; sync" : : "r" (address) : "memory"); 59} 60#elif defined(CONFIG_PPC_BOOK3E) 61extern void _tlbil_va(unsigned long address, unsigned int pid, 62 unsigned int tsize, unsigned int ind); 63#else 64extern void __tlbil_va(unsigned long address, unsigned int pid); 65static inline void _tlbil_va(unsigned long address, unsigned int pid, 66 unsigned int tsize, unsigned int ind) 67{ 68 __tlbil_va(address, pid); 69} 70#endif /* CONIFG_8xx */ 71 72#if defined(CONFIG_PPC_BOOK3E) || defined(CONFIG_PPC_47x) 73extern void _tlbivax_bcast(unsigned long address, unsigned int pid, 74 unsigned int tsize, unsigned int ind); 75#else 76static inline void _tlbivax_bcast(unsigned long address, unsigned int pid, 77 unsigned int tsize, unsigned int ind) 78{ 79 BUG(); 80} 81#endif 82 83#else /* CONFIG_PPC_MMU_NOHASH */ 84 85extern void hash_preload(struct mm_struct *mm, unsigned long ea, 86 unsigned long access, unsigned long trap); 87 88 89extern void _tlbie(unsigned long address); 90extern void _tlbia(void); 91 92#endif /* CONFIG_PPC_MMU_NOHASH */ 93 94#ifdef CONFIG_PPC32 95 96extern void mapin_ram(void); 97extern int map_page(unsigned long va, phys_addr_t pa, int flags); 98extern void setbat(int index, unsigned long virt, phys_addr_t phys, 99 unsigned int size, int flags); 100 101extern int __map_without_bats; 102extern int __allow_ioremap_reserved; 103extern unsigned long ioremap_base; 104extern unsigned int rtas_data, rtas_size; 105 106struct hash_pte; 107extern struct hash_pte *Hash, *Hash_end; 108extern unsigned long Hash_size, Hash_mask; 109 110#endif /* CONFIG_PPC32 */ 111 112#ifdef CONFIG_PPC64 113extern int map_kernel_page(unsigned long ea, unsigned long pa, int flags); 114#endif /* CONFIG_PPC64 */ 115 116extern unsigned long ioremap_bot; 117extern unsigned long __max_low_memory; 118extern phys_addr_t __initial_memory_limit_addr; 119extern phys_addr_t total_memory; 120extern phys_addr_t total_lowmem; 121extern phys_addr_t memstart_addr; 122extern phys_addr_t lowmem_end_addr; 123 124#ifdef CONFIG_WII 125extern unsigned long wii_hole_start; 126extern unsigned long wii_hole_size; 127 128extern unsigned long wii_mmu_mapin_mem2(unsigned long top); 129extern void wii_memory_fixups(void); 130#endif 131 132/* ...and now those things that may be slightly different between processor 133 * architectures. -- Dan 134 */ 135#if defined(CONFIG_8xx) 136#define MMU_init_hw() do { } while(0) 137#define mmu_mapin_ram(top) (0UL) 138 139#elif defined(CONFIG_4xx) 140extern void MMU_init_hw(void); 141extern unsigned long mmu_mapin_ram(unsigned long top); 142 143#elif defined(CONFIG_FSL_BOOKE) 144extern void MMU_init_hw(void); 145extern unsigned long mmu_mapin_ram(unsigned long top); 146extern void adjust_total_lowmem(void); 147extern void loadcam_entry(unsigned int index); 148 149struct tlbcam { 150 u32 MAS0; 151 u32 MAS1; 152 unsigned long MAS2; 153 u32 MAS3; 154 u32 MAS7; 155}; 156#elif defined(CONFIG_PPC32) 157/* anything 32-bit except 4xx or 8xx */ 158extern void MMU_init_hw(void); 159extern unsigned long mmu_mapin_ram(unsigned long top); 160#endif 161