Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/powerpc/mm/mmu_decl.h
10820 views
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 ([email protected])
7
*
8
* Modifications by Paul Mackerras (PowerMac) ([email protected])
9
* and Cort Dougan (PReP) ([email protected])
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)
31
static inline void _tlbil_all(void)
32
{
33
asm volatile ("sync; tlbia; isync" : : : "memory");
34
}
35
static 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 */
42
extern void _tlbil_all(void);
43
extern void _tlbil_pid(unsigned int pid);
44
#ifdef CONFIG_PPC_BOOK3E
45
extern 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
55
static 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)
61
extern void _tlbil_va(unsigned long address, unsigned int pid,
62
unsigned int tsize, unsigned int ind);
63
#else
64
extern void __tlbil_va(unsigned long address, unsigned int pid);
65
static 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)
73
extern void _tlbivax_bcast(unsigned long address, unsigned int pid,
74
unsigned int tsize, unsigned int ind);
75
#else
76
static 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
85
extern void hash_preload(struct mm_struct *mm, unsigned long ea,
86
unsigned long access, unsigned long trap);
87
88
89
extern void _tlbie(unsigned long address);
90
extern void _tlbia(void);
91
92
#endif /* CONFIG_PPC_MMU_NOHASH */
93
94
#ifdef CONFIG_PPC32
95
96
extern void mapin_ram(void);
97
extern int map_page(unsigned long va, phys_addr_t pa, int flags);
98
extern void setbat(int index, unsigned long virt, phys_addr_t phys,
99
unsigned int size, int flags);
100
101
extern int __map_without_bats;
102
extern int __allow_ioremap_reserved;
103
extern unsigned long ioremap_base;
104
extern unsigned int rtas_data, rtas_size;
105
106
struct hash_pte;
107
extern struct hash_pte *Hash, *Hash_end;
108
extern unsigned long Hash_size, Hash_mask;
109
110
#endif /* CONFIG_PPC32 */
111
112
#ifdef CONFIG_PPC64
113
extern int map_kernel_page(unsigned long ea, unsigned long pa, int flags);
114
#endif /* CONFIG_PPC64 */
115
116
extern unsigned long ioremap_bot;
117
extern unsigned long __max_low_memory;
118
extern phys_addr_t __initial_memory_limit_addr;
119
extern phys_addr_t total_memory;
120
extern phys_addr_t total_lowmem;
121
extern phys_addr_t memstart_addr;
122
extern phys_addr_t lowmem_end_addr;
123
124
#ifdef CONFIG_WII
125
extern unsigned long wii_hole_start;
126
extern unsigned long wii_hole_size;
127
128
extern unsigned long wii_mmu_mapin_mem2(unsigned long top);
129
extern 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)
140
extern void MMU_init_hw(void);
141
extern unsigned long mmu_mapin_ram(unsigned long top);
142
143
#elif defined(CONFIG_PPC_FSL_BOOK3E)
144
extern unsigned long map_mem_in_cams(unsigned long ram, int max_cam_idx);
145
#ifdef CONFIG_PPC32
146
extern void MMU_init_hw(void);
147
extern unsigned long mmu_mapin_ram(unsigned long top);
148
extern void adjust_total_lowmem(void);
149
#endif
150
extern void loadcam_entry(unsigned int index);
151
152
struct tlbcam {
153
u32 MAS0;
154
u32 MAS1;
155
unsigned long MAS2;
156
u32 MAS3;
157
u32 MAS7;
158
};
159
#elif defined(CONFIG_PPC32)
160
/* anything 32-bit except 4xx or 8xx */
161
extern void MMU_init_hw(void);
162
extern unsigned long mmu_mapin_ram(unsigned long top);
163
#endif
164
165