Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
powerpc
mm
mmu_decl.h
Go to the documentation of this file.
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
extern
unsigned
long
calc_cam_sz
(
unsigned
long
ram,
unsigned
long
virt,
146
phys_addr_t
phys
);
147
#ifdef CONFIG_PPC32
148
extern
void
MMU_init_hw
(
void
);
149
extern
unsigned
long
mmu_mapin_ram
(
unsigned
long
top
);
150
extern
void
adjust_total_lowmem(
void
);
151
#endif
152
extern
void
loadcam_entry(
unsigned
int
index
);
153
154
struct
tlbcam {
155
u32
MAS0;
156
u32
MAS1;
157
unsigned
long
MAS2;
158
u32
MAS3;
159
u32
MAS7;
160
};
161
#elif defined(CONFIG_PPC32)
162
/* anything 32-bit except 4xx or 8xx */
163
extern
void
MMU_init_hw
(
void
);
164
extern
unsigned
long
mmu_mapin_ram
(
unsigned
long
top
);
165
#endif
Generated on Thu Jan 10 2013 13:14:29 for Linux Kernel by
1.8.2