diff options
Diffstat (limited to 'include/asm-powerpc')
58 files changed, 2299 insertions, 424 deletions
diff --git a/include/asm-powerpc/backlight.h b/include/asm-powerpc/backlight.h index 1ba1f27a0b63..a5e9e656e332 100644 --- a/include/asm-powerpc/backlight.h +++ b/include/asm-powerpc/backlight.h | |||
@@ -2,30 +2,30 @@ | |||
2 | * Routines for handling backlight control on PowerBooks | 2 | * Routines for handling backlight control on PowerBooks |
3 | * | 3 | * |
4 | * For now, implementation resides in | 4 | * For now, implementation resides in |
5 | * arch/powerpc/platforms/powermac/pmac_support.c | 5 | * arch/powerpc/platforms/powermac/backlight.c |
6 | * | 6 | * |
7 | */ | 7 | */ |
8 | #ifndef __ASM_POWERPC_BACKLIGHT_H | 8 | #ifndef __ASM_POWERPC_BACKLIGHT_H |
9 | #define __ASM_POWERPC_BACKLIGHT_H | 9 | #define __ASM_POWERPC_BACKLIGHT_H |
10 | #ifdef __KERNEL__ | 10 | #ifdef __KERNEL__ |
11 | 11 | ||
12 | /* Abstract values */ | 12 | #include <linux/fb.h> |
13 | #define BACKLIGHT_OFF 0 | 13 | #include <linux/mutex.h> |
14 | #define BACKLIGHT_MIN 1 | ||
15 | #define BACKLIGHT_MAX 0xf | ||
16 | 14 | ||
17 | struct backlight_controller { | 15 | /* For locking instructions, see the implementation file */ |
18 | int (*set_enable)(int enable, int level, void *data); | 16 | extern struct backlight_device *pmac_backlight; |
19 | int (*set_level)(int level, void *data); | 17 | extern struct mutex pmac_backlight_mutex; |
20 | }; | ||
21 | 18 | ||
22 | extern void register_backlight_controller(struct backlight_controller *ctrler, void *data, char *type); | 19 | extern void pmac_backlight_calc_curve(struct fb_info*); |
23 | extern void unregister_backlight_controller(struct backlight_controller *ctrler, void *data); | 20 | extern int pmac_backlight_curve_lookup(struct fb_info *info, int value); |
24 | 21 | ||
25 | extern int set_backlight_enable(int enable); | 22 | extern int pmac_has_backlight_type(const char *type); |
26 | extern int get_backlight_enable(void); | 23 | |
27 | extern int set_backlight_level(int level); | 24 | extern void pmac_backlight_key_up(void); |
28 | extern int get_backlight_level(void); | 25 | extern void pmac_backlight_key_down(void); |
26 | |||
27 | extern int pmac_backlight_set_legacy_brightness(int brightness); | ||
28 | extern int pmac_backlight_get_legacy_brightness(void); | ||
29 | 29 | ||
30 | #endif /* __KERNEL__ */ | 30 | #endif /* __KERNEL__ */ |
31 | #endif | 31 | #endif |
diff --git a/include/asm-powerpc/bitops.h b/include/asm-powerpc/bitops.h index d1c2a4405660..76e2f08c3c83 100644 --- a/include/asm-powerpc/bitops.h +++ b/include/asm-powerpc/bitops.h | |||
@@ -288,8 +288,8 @@ static __inline__ int test_le_bit(unsigned long nr, | |||
288 | #define __test_and_clear_le_bit(nr, addr) \ | 288 | #define __test_and_clear_le_bit(nr, addr) \ |
289 | __test_and_clear_bit((nr) ^ BITOP_LE_SWIZZLE, (addr)) | 289 | __test_and_clear_bit((nr) ^ BITOP_LE_SWIZZLE, (addr)) |
290 | 290 | ||
291 | #define find_first_zero_le_bit(addr, size) find_next_zero_le_bit((addr), (size), 0) | 291 | #define find_first_zero_le_bit(addr, size) generic_find_next_zero_le_bit((addr), (size), 0) |
292 | unsigned long find_next_zero_le_bit(const unsigned long *addr, | 292 | unsigned long generic_find_next_zero_le_bit(const unsigned long *addr, |
293 | unsigned long size, unsigned long offset); | 293 | unsigned long size, unsigned long offset); |
294 | 294 | ||
295 | /* Bitmap functions for the ext2 filesystem */ | 295 | /* Bitmap functions for the ext2 filesystem */ |
@@ -309,7 +309,7 @@ unsigned long find_next_zero_le_bit(const unsigned long *addr, | |||
309 | #define ext2_find_first_zero_bit(addr, size) \ | 309 | #define ext2_find_first_zero_bit(addr, size) \ |
310 | find_first_zero_le_bit((unsigned long*)addr, size) | 310 | find_first_zero_le_bit((unsigned long*)addr, size) |
311 | #define ext2_find_next_zero_bit(addr, size, off) \ | 311 | #define ext2_find_next_zero_bit(addr, size, off) \ |
312 | find_next_zero_le_bit((unsigned long*)addr, size, off) | 312 | generic_find_next_zero_le_bit((unsigned long*)addr, size, off) |
313 | 313 | ||
314 | /* Bitmap functions for the minix filesystem. */ | 314 | /* Bitmap functions for the minix filesystem. */ |
315 | 315 | ||
diff --git a/include/asm-powerpc/cputable.h b/include/asm-powerpc/cputable.h index 9fcf0162d859..1ba3c9983614 100644 --- a/include/asm-powerpc/cputable.h +++ b/include/asm-powerpc/cputable.h | |||
@@ -24,6 +24,9 @@ | |||
24 | #define PPC_FEATURE_ICACHE_SNOOP 0x00002000 | 24 | #define PPC_FEATURE_ICACHE_SNOOP 0x00002000 |
25 | #define PPC_FEATURE_ARCH_2_05 0x00001000 | 25 | #define PPC_FEATURE_ARCH_2_05 0x00001000 |
26 | 26 | ||
27 | #define PPC_FEATURE_TRUE_LE 0x00000002 | ||
28 | #define PPC_FEATURE_PPC_LE 0x00000001 | ||
29 | |||
27 | #ifdef __KERNEL__ | 30 | #ifdef __KERNEL__ |
28 | #ifndef __ASSEMBLY__ | 31 | #ifndef __ASSEMBLY__ |
29 | 32 | ||
@@ -69,6 +72,13 @@ struct cpu_spec { | |||
69 | /* Processor specific oprofile operations */ | 72 | /* Processor specific oprofile operations */ |
70 | enum powerpc_oprofile_type oprofile_type; | 73 | enum powerpc_oprofile_type oprofile_type; |
71 | 74 | ||
75 | /* Bit locations inside the mmcra change */ | ||
76 | unsigned long oprofile_mmcra_sihv; | ||
77 | unsigned long oprofile_mmcra_sipr; | ||
78 | |||
79 | /* Bits to clear during an oprofile exception */ | ||
80 | unsigned long oprofile_mmcra_clear; | ||
81 | |||
72 | /* Name of processor class, for the ELF AT_PLATFORM entry */ | 82 | /* Name of processor class, for the ELF AT_PLATFORM entry */ |
73 | char *platform; | 83 | char *platform; |
74 | }; | 84 | }; |
@@ -104,41 +114,33 @@ extern void do_cpu_ftr_fixups(unsigned long offset); | |||
104 | #define CPU_FTR_NO_BTIC ASM_CONST(0x0000000000040000) | 114 | #define CPU_FTR_NO_BTIC ASM_CONST(0x0000000000040000) |
105 | #define CPU_FTR_BIG_PHYS ASM_CONST(0x0000000000080000) | 115 | #define CPU_FTR_BIG_PHYS ASM_CONST(0x0000000000080000) |
106 | #define CPU_FTR_NODSISRALIGN ASM_CONST(0x0000000000100000) | 116 | #define CPU_FTR_NODSISRALIGN ASM_CONST(0x0000000000100000) |
117 | #define CPU_FTR_PPC_LE ASM_CONST(0x0000000000200000) | ||
118 | #define CPU_FTR_REAL_LE ASM_CONST(0x0000000000400000) | ||
107 | 119 | ||
120 | /* | ||
121 | * Add the 64-bit processor unique features in the top half of the word; | ||
122 | * on 32-bit, make the names available but defined to be 0. | ||
123 | */ | ||
108 | #ifdef __powerpc64__ | 124 | #ifdef __powerpc64__ |
109 | /* Add the 64b processor unique features in the top half of the word */ | 125 | #define LONG_ASM_CONST(x) ASM_CONST(x) |
110 | #define CPU_FTR_SLB ASM_CONST(0x0000000100000000) | ||
111 | #define CPU_FTR_16M_PAGE ASM_CONST(0x0000000200000000) | ||
112 | #define CPU_FTR_TLBIEL ASM_CONST(0x0000000400000000) | ||
113 | #define CPU_FTR_NOEXECUTE ASM_CONST(0x0000000800000000) | ||
114 | #define CPU_FTR_IABR ASM_CONST(0x0000002000000000) | ||
115 | #define CPU_FTR_MMCRA ASM_CONST(0x0000004000000000) | ||
116 | #define CPU_FTR_CTRL ASM_CONST(0x0000008000000000) | ||
117 | #define CPU_FTR_SMT ASM_CONST(0x0000010000000000) | ||
118 | #define CPU_FTR_COHERENT_ICACHE ASM_CONST(0x0000020000000000) | ||
119 | #define CPU_FTR_LOCKLESS_TLBIE ASM_CONST(0x0000040000000000) | ||
120 | #define CPU_FTR_MMCRA_SIHV ASM_CONST(0x0000080000000000) | ||
121 | #define CPU_FTR_CI_LARGE_PAGE ASM_CONST(0x0000100000000000) | ||
122 | #define CPU_FTR_PAUSE_ZERO ASM_CONST(0x0000200000000000) | ||
123 | #define CPU_FTR_PURR ASM_CONST(0x0000400000000000) | ||
124 | #else | 126 | #else |
125 | /* ensure on 32b processors the flags are available for compiling but | 127 | #define LONG_ASM_CONST(x) 0 |
126 | * don't do anything */ | ||
127 | #define CPU_FTR_SLB ASM_CONST(0x0) | ||
128 | #define CPU_FTR_16M_PAGE ASM_CONST(0x0) | ||
129 | #define CPU_FTR_TLBIEL ASM_CONST(0x0) | ||
130 | #define CPU_FTR_NOEXECUTE ASM_CONST(0x0) | ||
131 | #define CPU_FTR_IABR ASM_CONST(0x0) | ||
132 | #define CPU_FTR_MMCRA ASM_CONST(0x0) | ||
133 | #define CPU_FTR_CTRL ASM_CONST(0x0) | ||
134 | #define CPU_FTR_SMT ASM_CONST(0x0) | ||
135 | #define CPU_FTR_COHERENT_ICACHE ASM_CONST(0x0) | ||
136 | #define CPU_FTR_LOCKLESS_TLBIE ASM_CONST(0x0) | ||
137 | #define CPU_FTR_MMCRA_SIHV ASM_CONST(0x0) | ||
138 | #define CPU_FTR_CI_LARGE_PAGE ASM_CONST(0x0) | ||
139 | #define CPU_FTR_PURR ASM_CONST(0x0) | ||
140 | #endif | 128 | #endif |
141 | 129 | ||
130 | #define CPU_FTR_SLB LONG_ASM_CONST(0x0000000100000000) | ||
131 | #define CPU_FTR_16M_PAGE LONG_ASM_CONST(0x0000000200000000) | ||
132 | #define CPU_FTR_TLBIEL LONG_ASM_CONST(0x0000000400000000) | ||
133 | #define CPU_FTR_NOEXECUTE LONG_ASM_CONST(0x0000000800000000) | ||
134 | #define CPU_FTR_IABR LONG_ASM_CONST(0x0000002000000000) | ||
135 | #define CPU_FTR_MMCRA LONG_ASM_CONST(0x0000004000000000) | ||
136 | #define CPU_FTR_CTRL LONG_ASM_CONST(0x0000008000000000) | ||
137 | #define CPU_FTR_SMT LONG_ASM_CONST(0x0000010000000000) | ||
138 | #define CPU_FTR_COHERENT_ICACHE LONG_ASM_CONST(0x0000020000000000) | ||
139 | #define CPU_FTR_LOCKLESS_TLBIE LONG_ASM_CONST(0x0000040000000000) | ||
140 | #define CPU_FTR_CI_LARGE_PAGE LONG_ASM_CONST(0x0000100000000000) | ||
141 | #define CPU_FTR_PAUSE_ZERO LONG_ASM_CONST(0x0000200000000000) | ||
142 | #define CPU_FTR_PURR LONG_ASM_CONST(0x0000400000000000) | ||
143 | |||
142 | #ifndef __ASSEMBLY__ | 144 | #ifndef __ASSEMBLY__ |
143 | 145 | ||
144 | #define CPU_FTR_PPCAS_ARCH_V2_BASE (CPU_FTR_SLB | \ | 146 | #define CPU_FTR_PPCAS_ARCH_V2_BASE (CPU_FTR_SLB | \ |
@@ -192,92 +194,95 @@ extern void do_cpu_ftr_fixups(unsigned long offset); | |||
192 | #define CPU_FTRS_PPC601 (CPU_FTR_COMMON | CPU_FTR_601 | CPU_FTR_HPTE_TABLE) | 194 | #define CPU_FTRS_PPC601 (CPU_FTR_COMMON | CPU_FTR_601 | CPU_FTR_HPTE_TABLE) |
193 | #define CPU_FTRS_603 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 195 | #define CPU_FTRS_603 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
194 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | \ | 196 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | \ |
195 | CPU_FTR_MAYBE_CAN_NAP) | 197 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE) |
196 | #define CPU_FTRS_604 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 198 | #define CPU_FTRS_604 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
197 | CPU_FTR_USE_TB | CPU_FTR_604_PERF_MON | CPU_FTR_HPTE_TABLE) | 199 | CPU_FTR_USE_TB | CPU_FTR_604_PERF_MON | CPU_FTR_HPTE_TABLE | \ |
200 | CPU_FTR_PPC_LE) | ||
198 | #define CPU_FTRS_740_NOTAU (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 201 | #define CPU_FTRS_740_NOTAU (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
199 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ | 202 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ |
200 | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP) | 203 | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE) |
201 | #define CPU_FTRS_740 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 204 | #define CPU_FTRS_740 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
202 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ | 205 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ |
203 | CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP) | 206 | CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | \ |
207 | CPU_FTR_PPC_LE) | ||
204 | #define CPU_FTRS_750 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 208 | #define CPU_FTRS_750 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
205 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ | 209 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ |
206 | CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP) | 210 | CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | \ |
211 | CPU_FTR_PPC_LE) | ||
207 | #define CPU_FTRS_750FX1 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 212 | #define CPU_FTRS_750FX1 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
208 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ | 213 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ |
209 | CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | \ | 214 | CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | \ |
210 | CPU_FTR_DUAL_PLL_750FX | CPU_FTR_NO_DPM) | 215 | CPU_FTR_DUAL_PLL_750FX | CPU_FTR_NO_DPM | CPU_FTR_PPC_LE) |
211 | #define CPU_FTRS_750FX2 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 216 | #define CPU_FTRS_750FX2 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
212 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ | 217 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ |
213 | CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | \ | 218 | CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | \ |
214 | CPU_FTR_NO_DPM) | 219 | CPU_FTR_NO_DPM | CPU_FTR_PPC_LE) |
215 | #define CPU_FTRS_750FX (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 220 | #define CPU_FTRS_750FX (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
216 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ | 221 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ |
217 | CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | \ | 222 | CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | \ |
218 | CPU_FTR_DUAL_PLL_750FX | CPU_FTR_HAS_HIGH_BATS) | 223 | CPU_FTR_DUAL_PLL_750FX | CPU_FTR_HAS_HIGH_BATS | CPU_FTR_PPC_LE) |
219 | #define CPU_FTRS_750GX (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_MAYBE_CAN_DOZE | \ | 224 | #define CPU_FTRS_750GX (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_MAYBE_CAN_DOZE | \ |
220 | CPU_FTR_USE_TB | CPU_FTR_L2CR | CPU_FTR_TAU | \ | 225 | CPU_FTR_USE_TB | CPU_FTR_L2CR | CPU_FTR_TAU | \ |
221 | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | \ | 226 | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | \ |
222 | CPU_FTR_DUAL_PLL_750FX | CPU_FTR_HAS_HIGH_BATS) | 227 | CPU_FTR_DUAL_PLL_750FX | CPU_FTR_HAS_HIGH_BATS | CPU_FTR_PPC_LE) |
223 | #define CPU_FTRS_7400_NOTAU (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 228 | #define CPU_FTRS_7400_NOTAU (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
224 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ | 229 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ |
225 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_HPTE_TABLE | \ | 230 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_HPTE_TABLE | \ |
226 | CPU_FTR_MAYBE_CAN_NAP) | 231 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE) |
227 | #define CPU_FTRS_7400 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 232 | #define CPU_FTRS_7400 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
228 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ | 233 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ |
229 | CPU_FTR_TAU | CPU_FTR_ALTIVEC_COMP | CPU_FTR_HPTE_TABLE | \ | 234 | CPU_FTR_TAU | CPU_FTR_ALTIVEC_COMP | CPU_FTR_HPTE_TABLE | \ |
230 | CPU_FTR_MAYBE_CAN_NAP) | 235 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE) |
231 | #define CPU_FTRS_7450_20 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 236 | #define CPU_FTRS_7450_20 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
232 | CPU_FTR_USE_TB | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ | 237 | CPU_FTR_USE_TB | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ |
233 | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ | 238 | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ |
234 | CPU_FTR_NEED_COHERENT) | 239 | CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE) |
235 | #define CPU_FTRS_7450_21 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 240 | #define CPU_FTRS_7450_21 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
236 | CPU_FTR_USE_TB | \ | 241 | CPU_FTR_USE_TB | \ |
237 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ | 242 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ |
238 | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ | 243 | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ |
239 | CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_L3_DISABLE_NAP | \ | 244 | CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_L3_DISABLE_NAP | \ |
240 | CPU_FTR_NEED_COHERENT) | 245 | CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE) |
241 | #define CPU_FTRS_7450_23 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 246 | #define CPU_FTRS_7450_23 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
242 | CPU_FTR_USE_TB | \ | 247 | CPU_FTR_USE_TB | \ |
243 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ | 248 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ |
244 | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ | 249 | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ |
245 | CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_NEED_COHERENT) | 250 | CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE) |
246 | #define CPU_FTRS_7455_1 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 251 | #define CPU_FTRS_7455_1 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
247 | CPU_FTR_USE_TB | \ | 252 | CPU_FTR_USE_TB | \ |
248 | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | CPU_FTR_L3CR | \ | 253 | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | CPU_FTR_L3CR | \ |
249 | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | CPU_FTR_HAS_HIGH_BATS | \ | 254 | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | CPU_FTR_HAS_HIGH_BATS | \ |
250 | CPU_FTR_NEED_COHERENT) | 255 | CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE) |
251 | #define CPU_FTRS_7455_20 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 256 | #define CPU_FTRS_7455_20 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
252 | CPU_FTR_USE_TB | \ | 257 | CPU_FTR_USE_TB | \ |
253 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ | 258 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ |
254 | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ | 259 | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ |
255 | CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_L3_DISABLE_NAP | \ | 260 | CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_L3_DISABLE_NAP | \ |
256 | CPU_FTR_NEED_COHERENT | CPU_FTR_HAS_HIGH_BATS) | 261 | CPU_FTR_NEED_COHERENT | CPU_FTR_HAS_HIGH_BATS | CPU_FTR_PPC_LE) |
257 | #define CPU_FTRS_7455 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 262 | #define CPU_FTRS_7455 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
258 | CPU_FTR_USE_TB | \ | 263 | CPU_FTR_USE_TB | \ |
259 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ | 264 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ |
260 | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ | 265 | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ |
261 | CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS | \ | 266 | CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS | \ |
262 | CPU_FTR_NEED_COHERENT) | 267 | CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE) |
263 | #define CPU_FTRS_7447_10 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 268 | #define CPU_FTRS_7447_10 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
264 | CPU_FTR_USE_TB | \ | 269 | CPU_FTR_USE_TB | \ |
265 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ | 270 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ |
266 | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ | 271 | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ |
267 | CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS | \ | 272 | CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS | \ |
268 | CPU_FTR_NEED_COHERENT | CPU_FTR_NO_BTIC) | 273 | CPU_FTR_NEED_COHERENT | CPU_FTR_NO_BTIC | CPU_FTR_PPC_LE) |
269 | #define CPU_FTRS_7447 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 274 | #define CPU_FTRS_7447 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
270 | CPU_FTR_USE_TB | \ | 275 | CPU_FTR_USE_TB | \ |
271 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ | 276 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ |
272 | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ | 277 | CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ |
273 | CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS | \ | 278 | CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS | \ |
274 | CPU_FTR_NEED_COHERENT) | 279 | CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE) |
275 | #define CPU_FTRS_7447A (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 280 | #define CPU_FTRS_7447A (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
276 | CPU_FTR_USE_TB | \ | 281 | CPU_FTR_USE_TB | \ |
277 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ | 282 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ |
278 | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ | 283 | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ |
279 | CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS | \ | 284 | CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS | \ |
280 | CPU_FTR_NEED_COHERENT) | 285 | CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE) |
281 | #define CPU_FTRS_82XX (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 286 | #define CPU_FTRS_82XX (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
282 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB) | 287 | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB) |
283 | #define CPU_FTRS_G2_LE (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_MAYBE_CAN_DOZE | \ | 288 | #define CPU_FTRS_G2_LE (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_MAYBE_CAN_DOZE | \ |
@@ -287,13 +292,6 @@ extern void do_cpu_ftr_fixups(unsigned long offset); | |||
287 | CPU_FTR_COMMON) | 292 | CPU_FTR_COMMON) |
288 | #define CPU_FTRS_CLASSIC32 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | 293 | #define CPU_FTRS_CLASSIC32 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ |
289 | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE) | 294 | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE) |
290 | #define CPU_FTRS_POWER3_32 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | ||
291 | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE) | ||
292 | #define CPU_FTRS_POWER4_32 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | ||
293 | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE | CPU_FTR_NODSISRALIGN) | ||
294 | #define CPU_FTRS_970_32 (CPU_FTR_COMMON | CPU_FTR_SPLIT_ID_CACHE | \ | ||
295 | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE | CPU_FTR_ALTIVEC_COMP | \ | ||
296 | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_NODSISRALIGN) | ||
297 | #define CPU_FTRS_8XX (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB) | 295 | #define CPU_FTRS_8XX (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB) |
298 | #define CPU_FTRS_40X (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \ | 296 | #define CPU_FTRS_40X (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \ |
299 | CPU_FTR_NODSISRALIGN) | 297 | CPU_FTR_NODSISRALIGN) |
@@ -307,7 +305,7 @@ extern void do_cpu_ftr_fixups(unsigned long offset); | |||
307 | #define CPU_FTRS_GENERIC_32 (CPU_FTR_COMMON | CPU_FTR_NODSISRALIGN) | 305 | #define CPU_FTRS_GENERIC_32 (CPU_FTR_COMMON | CPU_FTR_NODSISRALIGN) |
308 | #ifdef __powerpc64__ | 306 | #ifdef __powerpc64__ |
309 | #define CPU_FTRS_POWER3 (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \ | 307 | #define CPU_FTRS_POWER3 (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \ |
310 | CPU_FTR_HPTE_TABLE | CPU_FTR_IABR) | 308 | CPU_FTR_HPTE_TABLE | CPU_FTR_IABR | CPU_FTR_PPC_LE) |
311 | #define CPU_FTRS_RS64 (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \ | 309 | #define CPU_FTRS_RS64 (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \ |
312 | CPU_FTR_HPTE_TABLE | CPU_FTR_IABR | \ | 310 | CPU_FTR_HPTE_TABLE | CPU_FTR_IABR | \ |
313 | CPU_FTR_MMCRA | CPU_FTR_CTRL) | 311 | CPU_FTR_MMCRA | CPU_FTR_CTRL) |
@@ -320,16 +318,16 @@ extern void do_cpu_ftr_fixups(unsigned long offset); | |||
320 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | \ | 318 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | \ |
321 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ | 319 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
322 | CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \ | 320 | CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \ |
323 | CPU_FTR_MMCRA_SIHV | CPU_FTR_PURR) | 321 | CPU_FTR_PURR) |
324 | #define CPU_FTRS_POWER6 (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \ | 322 | #define CPU_FTRS_POWER6 (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \ |
325 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | \ | 323 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | \ |
326 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ | 324 | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
327 | CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \ | 325 | CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \ |
328 | CPU_FTR_PURR | CPU_FTR_CI_LARGE_PAGE) | 326 | CPU_FTR_PURR | CPU_FTR_CI_LARGE_PAGE | CPU_FTR_REAL_LE) |
329 | #define CPU_FTRS_CELL (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \ | 327 | #define CPU_FTRS_CELL (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \ |
330 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | \ | 328 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | \ |
331 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \ | 329 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
332 | CPU_FTR_CTRL | CPU_FTR_PAUSE_ZERO) | 330 | CPU_FTR_CTRL | CPU_FTR_PAUSE_ZERO | CPU_FTR_CI_LARGE_PAGE) |
333 | #define CPU_FTRS_COMPATIBLE (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \ | 331 | #define CPU_FTRS_COMPATIBLE (CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | \ |
334 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2) | 332 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2) |
335 | #endif | 333 | #endif |
@@ -354,12 +352,6 @@ enum { | |||
354 | #else | 352 | #else |
355 | CPU_FTRS_GENERIC_32 | | 353 | CPU_FTRS_GENERIC_32 | |
356 | #endif | 354 | #endif |
357 | #ifdef CONFIG_PPC64BRIDGE | ||
358 | CPU_FTRS_POWER3_32 | | ||
359 | #endif | ||
360 | #ifdef CONFIG_POWER4 | ||
361 | CPU_FTRS_POWER4_32 | CPU_FTRS_970_32 | | ||
362 | #endif | ||
363 | #ifdef CONFIG_8xx | 355 | #ifdef CONFIG_8xx |
364 | CPU_FTRS_8XX | | 356 | CPU_FTRS_8XX | |
365 | #endif | 357 | #endif |
@@ -399,12 +391,6 @@ enum { | |||
399 | #else | 391 | #else |
400 | CPU_FTRS_GENERIC_32 & | 392 | CPU_FTRS_GENERIC_32 & |
401 | #endif | 393 | #endif |
402 | #ifdef CONFIG_PPC64BRIDGE | ||
403 | CPU_FTRS_POWER3_32 & | ||
404 | #endif | ||
405 | #ifdef CONFIG_POWER4 | ||
406 | CPU_FTRS_POWER4_32 & CPU_FTRS_970_32 & | ||
407 | #endif | ||
408 | #ifdef CONFIG_8xx | 394 | #ifdef CONFIG_8xx |
409 | CPU_FTRS_8XX & | 395 | CPU_FTRS_8XX & |
410 | #endif | 396 | #endif |
diff --git a/include/asm-powerpc/delay.h b/include/asm-powerpc/delay.h index 057a60955474..f9200a65c632 100644 --- a/include/asm-powerpc/delay.h +++ b/include/asm-powerpc/delay.h | |||
@@ -17,5 +17,18 @@ | |||
17 | extern void __delay(unsigned long loops); | 17 | extern void __delay(unsigned long loops); |
18 | extern void udelay(unsigned long usecs); | 18 | extern void udelay(unsigned long usecs); |
19 | 19 | ||
20 | /* | ||
21 | * On shared processor machines the generic implementation of mdelay can | ||
22 | * result in large errors. While each iteration of the loop inside mdelay | ||
23 | * is supposed to take 1ms, the hypervisor could sleep our partition for | ||
24 | * longer (eg 10ms). With the right timing these errors can add up. | ||
25 | * | ||
26 | * Since there is no 32bit overflow issue on 64bit kernels, just call | ||
27 | * udelay directly. | ||
28 | */ | ||
29 | #ifdef CONFIG_PPC64 | ||
30 | #define mdelay(n) udelay((n) * 1000) | ||
31 | #endif | ||
32 | |||
20 | #endif /* __KERNEL__ */ | 33 | #endif /* __KERNEL__ */ |
21 | #endif /* _ASM_POWERPC_DELAY_H */ | 34 | #endif /* _ASM_POWERPC_DELAY_H */ |
diff --git a/include/asm-powerpc/eeh.h b/include/asm-powerpc/eeh.h index e9c86b1eedab..4df3e80118f4 100644 --- a/include/asm-powerpc/eeh.h +++ b/include/asm-powerpc/eeh.h | |||
@@ -292,8 +292,6 @@ static inline void eeh_memcpy_toio(volatile void __iomem *dest, const void *src, | |||
292 | static inline u8 eeh_inb(unsigned long port) | 292 | static inline u8 eeh_inb(unsigned long port) |
293 | { | 293 | { |
294 | u8 val; | 294 | u8 val; |
295 | if (!_IO_IS_VALID(port)) | ||
296 | return ~0; | ||
297 | val = in_8((u8 __iomem *)(port+pci_io_base)); | 295 | val = in_8((u8 __iomem *)(port+pci_io_base)); |
298 | if (EEH_POSSIBLE_ERROR(val, u8)) | 296 | if (EEH_POSSIBLE_ERROR(val, u8)) |
299 | return eeh_check_failure((void __iomem *)(port), val); | 297 | return eeh_check_failure((void __iomem *)(port), val); |
@@ -302,15 +300,12 @@ static inline u8 eeh_inb(unsigned long port) | |||
302 | 300 | ||
303 | static inline void eeh_outb(u8 val, unsigned long port) | 301 | static inline void eeh_outb(u8 val, unsigned long port) |
304 | { | 302 | { |
305 | if (_IO_IS_VALID(port)) | 303 | out_8((u8 __iomem *)(port+pci_io_base), val); |
306 | out_8((u8 __iomem *)(port+pci_io_base), val); | ||
307 | } | 304 | } |
308 | 305 | ||
309 | static inline u16 eeh_inw(unsigned long port) | 306 | static inline u16 eeh_inw(unsigned long port) |
310 | { | 307 | { |
311 | u16 val; | 308 | u16 val; |
312 | if (!_IO_IS_VALID(port)) | ||
313 | return ~0; | ||
314 | val = in_le16((u16 __iomem *)(port+pci_io_base)); | 309 | val = in_le16((u16 __iomem *)(port+pci_io_base)); |
315 | if (EEH_POSSIBLE_ERROR(val, u16)) | 310 | if (EEH_POSSIBLE_ERROR(val, u16)) |
316 | return eeh_check_failure((void __iomem *)(port), val); | 311 | return eeh_check_failure((void __iomem *)(port), val); |
@@ -319,15 +314,12 @@ static inline u16 eeh_inw(unsigned long port) | |||
319 | 314 | ||
320 | static inline void eeh_outw(u16 val, unsigned long port) | 315 | static inline void eeh_outw(u16 val, unsigned long port) |
321 | { | 316 | { |
322 | if (_IO_IS_VALID(port)) | 317 | out_le16((u16 __iomem *)(port+pci_io_base), val); |
323 | out_le16((u16 __iomem *)(port+pci_io_base), val); | ||
324 | } | 318 | } |
325 | 319 | ||
326 | static inline u32 eeh_inl(unsigned long port) | 320 | static inline u32 eeh_inl(unsigned long port) |
327 | { | 321 | { |
328 | u32 val; | 322 | u32 val; |
329 | if (!_IO_IS_VALID(port)) | ||
330 | return ~0; | ||
331 | val = in_le32((u32 __iomem *)(port+pci_io_base)); | 323 | val = in_le32((u32 __iomem *)(port+pci_io_base)); |
332 | if (EEH_POSSIBLE_ERROR(val, u32)) | 324 | if (EEH_POSSIBLE_ERROR(val, u32)) |
333 | return eeh_check_failure((void __iomem *)(port), val); | 325 | return eeh_check_failure((void __iomem *)(port), val); |
@@ -336,8 +328,7 @@ static inline u32 eeh_inl(unsigned long port) | |||
336 | 328 | ||
337 | static inline void eeh_outl(u32 val, unsigned long port) | 329 | static inline void eeh_outl(u32 val, unsigned long port) |
338 | { | 330 | { |
339 | if (_IO_IS_VALID(port)) | 331 | out_le32((u32 __iomem *)(port+pci_io_base), val); |
340 | out_le32((u32 __iomem *)(port+pci_io_base), val); | ||
341 | } | 332 | } |
342 | 333 | ||
343 | /* in-string eeh macros */ | 334 | /* in-string eeh macros */ |
diff --git a/include/asm-powerpc/eeh_event.h b/include/asm-powerpc/eeh_event.h index 93d55a2bebfd..dc6bf0ffb796 100644 --- a/include/asm-powerpc/eeh_event.h +++ b/include/asm-powerpc/eeh_event.h | |||
@@ -18,8 +18,8 @@ | |||
18 | * Copyright (c) 2005 Linas Vepstas <linas@linas.org> | 18 | * Copyright (c) 2005 Linas Vepstas <linas@linas.org> |
19 | */ | 19 | */ |
20 | 20 | ||
21 | #ifndef ASM_PPC64_EEH_EVENT_H | 21 | #ifndef ASM_POWERPC_EEH_EVENT_H |
22 | #define ASM_PPC64_EEH_EVENT_H | 22 | #define ASM_POWERPC_EEH_EVENT_H |
23 | #ifdef __KERNEL__ | 23 | #ifdef __KERNEL__ |
24 | 24 | ||
25 | /** EEH event -- structure holding pci controller data that describes | 25 | /** EEH event -- structure holding pci controller data that describes |
@@ -39,7 +39,7 @@ struct eeh_event { | |||
39 | * @dev pci device | 39 | * @dev pci device |
40 | * | 40 | * |
41 | * This routine builds a PCI error event which will be delivered | 41 | * This routine builds a PCI error event which will be delivered |
42 | * to all listeners on the peh_notifier_chain. | 42 | * to all listeners on the eeh_notifier_chain. |
43 | * | 43 | * |
44 | * This routine can be called within an interrupt context; | 44 | * This routine can be called within an interrupt context; |
45 | * the actual event will be delivered in a normal context | 45 | * the actual event will be delivered in a normal context |
@@ -51,7 +51,7 @@ int eeh_send_failure_event (struct device_node *dn, | |||
51 | int time_unavail); | 51 | int time_unavail); |
52 | 52 | ||
53 | /* Main recovery function */ | 53 | /* Main recovery function */ |
54 | void handle_eeh_events (struct eeh_event *); | 54 | struct pci_dn * handle_eeh_events (struct eeh_event *); |
55 | 55 | ||
56 | #endif /* __KERNEL__ */ | 56 | #endif /* __KERNEL__ */ |
57 | #endif /* ASM_PPC64_EEH_EVENT_H */ | 57 | #endif /* ASM_POWERPC_EEH_EVENT_H */ |
diff --git a/include/asm-powerpc/elf.h b/include/asm-powerpc/elf.h index 99c18b71aa82..9a83a987d396 100644 --- a/include/asm-powerpc/elf.h +++ b/include/asm-powerpc/elf.h | |||
@@ -293,7 +293,7 @@ do { \ | |||
293 | NEW_AUX_ENT(AT_DCACHEBSIZE, dcache_bsize); \ | 293 | NEW_AUX_ENT(AT_DCACHEBSIZE, dcache_bsize); \ |
294 | NEW_AUX_ENT(AT_ICACHEBSIZE, icache_bsize); \ | 294 | NEW_AUX_ENT(AT_ICACHEBSIZE, icache_bsize); \ |
295 | NEW_AUX_ENT(AT_UCACHEBSIZE, ucache_bsize); \ | 295 | NEW_AUX_ENT(AT_UCACHEBSIZE, ucache_bsize); \ |
296 | VDSO_AUX_ENT(AT_SYSINFO_EHDR, current->thread.vdso_base) \ | 296 | VDSO_AUX_ENT(AT_SYSINFO_EHDR, current->mm->context.vdso_base) \ |
297 | } while (0) | 297 | } while (0) |
298 | 298 | ||
299 | /* PowerPC64 relocations defined by the ABIs */ | 299 | /* PowerPC64 relocations defined by the ABIs */ |
diff --git a/include/asm-powerpc/floppy.h b/include/asm-powerpc/floppy.h index 7e2d169ee856..fd242a22331c 100644 --- a/include/asm-powerpc/floppy.h +++ b/include/asm-powerpc/floppy.h | |||
@@ -27,8 +27,7 @@ | |||
27 | #define fd_disable_irq() disable_irq(FLOPPY_IRQ) | 27 | #define fd_disable_irq() disable_irq(FLOPPY_IRQ) |
28 | #define fd_cacheflush(addr,size) /* nothing */ | 28 | #define fd_cacheflush(addr,size) /* nothing */ |
29 | #define fd_request_irq() request_irq(FLOPPY_IRQ, floppy_interrupt, \ | 29 | #define fd_request_irq() request_irq(FLOPPY_IRQ, floppy_interrupt, \ |
30 | SA_INTERRUPT|SA_SAMPLE_RANDOM, \ | 30 | IRQF_DISABLED, "floppy", NULL) |
31 | "floppy", NULL) | ||
32 | #define fd_free_irq() free_irq(FLOPPY_IRQ, NULL); | 31 | #define fd_free_irq() free_irq(FLOPPY_IRQ, NULL); |
33 | 32 | ||
34 | #ifdef CONFIG_PCI | 33 | #ifdef CONFIG_PCI |
diff --git a/include/asm-powerpc/hvcall.h b/include/asm-powerpc/hvcall.h index 6cc7e1fb7bfd..0d3c4e85711a 100644 --- a/include/asm-powerpc/hvcall.h +++ b/include/asm-powerpc/hvcall.h | |||
@@ -102,6 +102,15 @@ | |||
102 | #define H_PP1 (1UL<<(63-62)) | 102 | #define H_PP1 (1UL<<(63-62)) |
103 | #define H_PP2 (1UL<<(63-63)) | 103 | #define H_PP2 (1UL<<(63-63)) |
104 | 104 | ||
105 | /* VASI States */ | ||
106 | #define H_VASI_INVALID 0 | ||
107 | #define H_VASI_ENABLED 1 | ||
108 | #define H_VASI_ABORTED 2 | ||
109 | #define H_VASI_SUSPENDING 3 | ||
110 | #define H_VASI_SUSPENDED 4 | ||
111 | #define H_VASI_RESUMED 5 | ||
112 | #define H_VASI_COMPLETED 6 | ||
113 | |||
105 | /* DABRX flags */ | 114 | /* DABRX flags */ |
106 | #define H_DABRX_HYPERVISOR (1UL<<(63-61)) | 115 | #define H_DABRX_HYPERVISOR (1UL<<(63-61)) |
107 | #define H_DABRX_KERNEL (1UL<<(63-62)) | 116 | #define H_DABRX_KERNEL (1UL<<(63-62)) |
@@ -190,6 +199,7 @@ | |||
190 | #define H_QUERY_INT_STATE 0x1E4 | 199 | #define H_QUERY_INT_STATE 0x1E4 |
191 | #define H_POLL_PENDING 0x1D8 | 200 | #define H_POLL_PENDING 0x1D8 |
192 | #define H_JOIN 0x298 | 201 | #define H_JOIN 0x298 |
202 | #define H_VASI_STATE 0x2A4 | ||
193 | #define H_ENABLE_CRQ 0x2B0 | 203 | #define H_ENABLE_CRQ 0x2B0 |
194 | 204 | ||
195 | #ifndef __ASSEMBLY__ | 205 | #ifndef __ASSEMBLY__ |
diff --git a/include/asm-powerpc/hw_irq.h b/include/asm-powerpc/hw_irq.h index ce0f7db63c16..d40359204aba 100644 --- a/include/asm-powerpc/hw_irq.h +++ b/include/asm-powerpc/hw_irq.h | |||
@@ -86,27 +86,27 @@ static inline void local_irq_save_ptr(unsigned long *flags) | |||
86 | #define mask_irq(irq) \ | 86 | #define mask_irq(irq) \ |
87 | ({ \ | 87 | ({ \ |
88 | irq_desc_t *desc = get_irq_desc(irq); \ | 88 | irq_desc_t *desc = get_irq_desc(irq); \ |
89 | if (desc->handler && desc->handler->disable) \ | 89 | if (desc->chip && desc->chip->disable) \ |
90 | desc->handler->disable(irq); \ | 90 | desc->chip->disable(irq); \ |
91 | }) | 91 | }) |
92 | #define unmask_irq(irq) \ | 92 | #define unmask_irq(irq) \ |
93 | ({ \ | 93 | ({ \ |
94 | irq_desc_t *desc = get_irq_desc(irq); \ | 94 | irq_desc_t *desc = get_irq_desc(irq); \ |
95 | if (desc->handler && desc->handler->enable) \ | 95 | if (desc->chip && desc->chip->enable) \ |
96 | desc->handler->enable(irq); \ | 96 | desc->chip->enable(irq); \ |
97 | }) | 97 | }) |
98 | #define ack_irq(irq) \ | 98 | #define ack_irq(irq) \ |
99 | ({ \ | 99 | ({ \ |
100 | irq_desc_t *desc = get_irq_desc(irq); \ | 100 | irq_desc_t *desc = get_irq_desc(irq); \ |
101 | if (desc->handler && desc->handler->ack) \ | 101 | if (desc->chip && desc->chip->ack) \ |
102 | desc->handler->ack(irq); \ | 102 | desc->chip->ack(irq); \ |
103 | }) | 103 | }) |
104 | 104 | ||
105 | /* Should we handle this via lost interrupts and IPIs or should we don't care like | 105 | /* |
106 | * we do now ? --BenH. | 106 | * interrupt-retrigger: should we handle this via lost interrupts and IPIs |
107 | * or should we not care like we do now ? --BenH. | ||
107 | */ | 108 | */ |
108 | struct hw_interrupt_type; | 109 | struct hw_interrupt_type; |
109 | static inline void hw_resend_irq(struct hw_interrupt_type *h, unsigned int i) {} | ||
110 | 110 | ||
111 | #endif /* __KERNEL__ */ | 111 | #endif /* __KERNEL__ */ |
112 | #endif /* _ASM_POWERPC_HW_IRQ_H */ | 112 | #endif /* _ASM_POWERPC_HW_IRQ_H */ |
diff --git a/include/asm-powerpc/i8259.h b/include/asm-powerpc/i8259.h index 0392159e16e4..c80e113052cd 100644 --- a/include/asm-powerpc/i8259.h +++ b/include/asm-powerpc/i8259.h | |||
@@ -4,11 +4,13 @@ | |||
4 | 4 | ||
5 | #include <linux/irq.h> | 5 | #include <linux/irq.h> |
6 | 6 | ||
7 | extern struct hw_interrupt_type i8259_pic; | 7 | #ifdef CONFIG_PPC_MERGE |
8 | 8 | extern void i8259_init(struct device_node *node, unsigned long intack_addr); | |
9 | extern unsigned int i8259_irq(struct pt_regs *regs); | ||
10 | #else | ||
9 | extern void i8259_init(unsigned long intack_addr, int offset); | 11 | extern void i8259_init(unsigned long intack_addr, int offset); |
10 | extern int i8259_irq(struct pt_regs *regs); | 12 | extern int i8259_irq(struct pt_regs *regs); |
11 | extern int i8259_irq_cascade(struct pt_regs *regs, void *unused); | 13 | #endif |
12 | 14 | ||
13 | #endif /* __KERNEL__ */ | 15 | #endif /* __KERNEL__ */ |
14 | #endif /* _ASM_POWERPC_I8259_H */ | 16 | #endif /* _ASM_POWERPC_I8259_H */ |
diff --git a/include/asm-powerpc/immap_86xx.h b/include/asm-powerpc/immap_86xx.h new file mode 100644 index 000000000000..d905b6622268 --- /dev/null +++ b/include/asm-powerpc/immap_86xx.h | |||
@@ -0,0 +1,199 @@ | |||
1 | /* | ||
2 | * MPC86xx Internal Memory Map | ||
3 | * | ||
4 | * Author: Jeff Brown | ||
5 | * | ||
6 | * Copyright 2004 Freescale Semiconductor, Inc | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License as published by the | ||
10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
11 | * option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #ifndef __ASM_POWERPC_IMMAP_86XX_H__ | ||
16 | #define __ASM_POWERPC_IMMAP_86XX_H__ | ||
17 | #ifdef __KERNEL__ | ||
18 | |||
19 | /* Eventually this should define all the IO block registers in 86xx */ | ||
20 | |||
21 | /* PCI Registers */ | ||
22 | typedef struct ccsr_pci { | ||
23 | uint cfg_addr; /* 0x.000 - PCI Configuration Address Register */ | ||
24 | uint cfg_data; /* 0x.004 - PCI Configuration Data Register */ | ||
25 | uint int_ack; /* 0x.008 - PCI Interrupt Acknowledge Register */ | ||
26 | char res1[3060]; | ||
27 | uint potar0; /* 0x.c00 - PCI Outbound Transaction Address Register 0 */ | ||
28 | uint potear0; /* 0x.c04 - PCI Outbound Translation Extended Address Register 0 */ | ||
29 | uint powbar0; /* 0x.c08 - PCI Outbound Window Base Address Register 0 */ | ||
30 | char res2[4]; | ||
31 | uint powar0; /* 0x.c10 - PCI Outbound Window Attributes Register 0 */ | ||
32 | char res3[12]; | ||
33 | uint potar1; /* 0x.c20 - PCI Outbound Transaction Address Register 1 */ | ||
34 | uint potear1; /* 0x.c24 - PCI Outbound Translation Extended Address Register 1 */ | ||
35 | uint powbar1; /* 0x.c28 - PCI Outbound Window Base Address Register 1 */ | ||
36 | char res4[4]; | ||
37 | uint powar1; /* 0x.c30 - PCI Outbound Window Attributes Register 1 */ | ||
38 | char res5[12]; | ||
39 | uint potar2; /* 0x.c40 - PCI Outbound Transaction Address Register 2 */ | ||
40 | uint potear2; /* 0x.c44 - PCI Outbound Translation Extended Address Register 2 */ | ||
41 | uint powbar2; /* 0x.c48 - PCI Outbound Window Base Address Register 2 */ | ||
42 | char res6[4]; | ||
43 | uint powar2; /* 0x.c50 - PCI Outbound Window Attributes Register 2 */ | ||
44 | char res7[12]; | ||
45 | uint potar3; /* 0x.c60 - PCI Outbound Transaction Address Register 3 */ | ||
46 | uint potear3; /* 0x.c64 - PCI Outbound Translation Extended Address Register 3 */ | ||
47 | uint powbar3; /* 0x.c68 - PCI Outbound Window Base Address Register 3 */ | ||
48 | char res8[4]; | ||
49 | uint powar3; /* 0x.c70 - PCI Outbound Window Attributes Register 3 */ | ||
50 | char res9[12]; | ||
51 | uint potar4; /* 0x.c80 - PCI Outbound Transaction Address Register 4 */ | ||
52 | uint potear4; /* 0x.c84 - PCI Outbound Translation Extended Address Register 4 */ | ||
53 | uint powbar4; /* 0x.c88 - PCI Outbound Window Base Address Register 4 */ | ||
54 | char res10[4]; | ||
55 | uint powar4; /* 0x.c90 - PCI Outbound Window Attributes Register 4 */ | ||
56 | char res11[268]; | ||
57 | uint pitar3; /* 0x.da0 - PCI Inbound Translation Address Register 3 */ | ||
58 | char res12[4]; | ||
59 | uint piwbar3; /* 0x.da8 - PCI Inbound Window Base Address Register 3 */ | ||
60 | uint piwbear3; /* 0x.dac - PCI Inbound Window Base Extended Address Register 3 */ | ||
61 | uint piwar3; /* 0x.db0 - PCI Inbound Window Attributes Register 3 */ | ||
62 | char res13[12]; | ||
63 | uint pitar2; /* 0x.dc0 - PCI Inbound Translation Address Register 2 */ | ||
64 | char res14[4]; | ||
65 | uint piwbar2; /* 0x.dc8 - PCI Inbound Window Base Address Register 2 */ | ||
66 | uint piwbear2; /* 0x.dcc - PCI Inbound Window Base Extended Address Register 2 */ | ||
67 | uint piwar2; /* 0x.dd0 - PCI Inbound Window Attributes Register 2 */ | ||
68 | char res15[12]; | ||
69 | uint pitar1; /* 0x.de0 - PCI Inbound Translation Address Register 1 */ | ||
70 | char res16[4]; | ||
71 | uint piwbar1; /* 0x.de8 - PCI Inbound Window Base Address Register 1 */ | ||
72 | char res17[4]; | ||
73 | uint piwar1; /* 0x.df0 - PCI Inbound Window Attributes Register 1 */ | ||
74 | char res18[12]; | ||
75 | uint err_dr; /* 0x.e00 - PCI Error Detect Register */ | ||
76 | uint err_cap_dr; /* 0x.e04 - PCI Error Capture Disable Register */ | ||
77 | uint err_en; /* 0x.e08 - PCI Error Enable Register */ | ||
78 | uint err_attrib; /* 0x.e0c - PCI Error Attributes Capture Register */ | ||
79 | uint err_addr; /* 0x.e10 - PCI Error Address Capture Register */ | ||
80 | uint err_ext_addr; /* 0x.e14 - PCI Error Extended Address Capture Register */ | ||
81 | uint err_dl; /* 0x.e18 - PCI Error Data Low Capture Register */ | ||
82 | uint err_dh; /* 0x.e1c - PCI Error Data High Capture Register */ | ||
83 | uint gas_timr; /* 0x.e20 - PCI Gasket Timer Register */ | ||
84 | uint pci_timr; /* 0x.e24 - PCI Timer Register */ | ||
85 | char res19[472]; | ||
86 | } ccsr_pci_t; | ||
87 | |||
88 | /* PCI Express Registers */ | ||
89 | typedef struct ccsr_pex { | ||
90 | uint pex_config_addr; /* 0x.000 - PCI Express Configuration Address Register */ | ||
91 | uint pex_config_data; /* 0x.004 - PCI Express Configuration Data Register */ | ||
92 | char res1[4]; | ||
93 | uint pex_otb_cpl_tor; /* 0x.00c - PCI Express Outbound completion timeout register */ | ||
94 | uint pex_conf_tor; /* 0x.010 - PCI Express configuration timeout register */ | ||
95 | char res2[12]; | ||
96 | uint pex_pme_mes_dr; /* 0x.020 - PCI Express PME and message detect register */ | ||
97 | uint pex_pme_mes_disr; /* 0x.024 - PCI Express PME and message disable register */ | ||
98 | uint pex_pme_mes_ier; /* 0x.028 - PCI Express PME and message interrupt enable register */ | ||
99 | uint pex_pmcr; /* 0x.02c - PCI Express power management command register */ | ||
100 | char res3[3024]; | ||
101 | uint pexotar0; /* 0x.c00 - PCI Express outbound translation address register 0 */ | ||
102 | uint pexotear0; /* 0x.c04 - PCI Express outbound translation extended address register 0*/ | ||
103 | char res4[8]; | ||
104 | uint pexowar0; /* 0x.c10 - PCI Express outbound window attributes register 0*/ | ||
105 | char res5[12]; | ||
106 | uint pexotar1; /* 0x.c20 - PCI Express outbound translation address register 1 */ | ||
107 | uint pexotear1; /* 0x.c24 - PCI Express outbound translation extended address register 1*/ | ||
108 | uint pexowbar1; /* 0x.c28 - PCI Express outbound window base address register 1*/ | ||
109 | char res6[4]; | ||
110 | uint pexowar1; /* 0x.c30 - PCI Express outbound window attributes register 1*/ | ||
111 | char res7[12]; | ||
112 | uint pexotar2; /* 0x.c40 - PCI Express outbound translation address register 2 */ | ||
113 | uint pexotear2; /* 0x.c44 - PCI Express outbound translation extended address register 2*/ | ||
114 | uint pexowbar2; /* 0x.c48 - PCI Express outbound window base address register 2*/ | ||
115 | char res8[4]; | ||
116 | uint pexowar2; /* 0x.c50 - PCI Express outbound window attributes register 2*/ | ||
117 | char res9[12]; | ||
118 | uint pexotar3; /* 0x.c60 - PCI Express outbound translation address register 3 */ | ||
119 | uint pexotear3; /* 0x.c64 - PCI Express outbound translation extended address register 3*/ | ||
120 | uint pexowbar3; /* 0x.c68 - PCI Express outbound window base address register 3*/ | ||
121 | char res10[4]; | ||
122 | uint pexowar3; /* 0x.c70 - PCI Express outbound window attributes register 3*/ | ||
123 | char res11[12]; | ||
124 | uint pexotar4; /* 0x.c80 - PCI Express outbound translation address register 4 */ | ||
125 | uint pexotear4; /* 0x.c84 - PCI Express outbound translation extended address register 4*/ | ||
126 | uint pexowbar4; /* 0x.c88 - PCI Express outbound window base address register 4*/ | ||
127 | char res12[4]; | ||
128 | uint pexowar4; /* 0x.c90 - PCI Express outbound window attributes register 4*/ | ||
129 | char res13[12]; | ||
130 | char res14[256]; | ||
131 | uint pexitar3; /* 0x.da0 - PCI Express inbound translation address register 3 */ | ||
132 | char res15[4]; | ||
133 | uint pexiwbar3; /* 0x.da8 - PCI Express inbound window base address register 3 */ | ||
134 | uint pexiwbear3; /* 0x.dac - PCI Express inbound window base extended address register 3 */ | ||
135 | uint pexiwar3; /* 0x.db0 - PCI Express inbound window attributes register 3 */ | ||
136 | char res16[12]; | ||
137 | uint pexitar2; /* 0x.dc0 - PCI Express inbound translation address register 2 */ | ||
138 | char res17[4]; | ||
139 | uint pexiwbar2; /* 0x.dc8 - PCI Express inbound window base address register 2 */ | ||
140 | uint pexiwbear2; /* 0x.dcc - PCI Express inbound window base extended address register 2 */ | ||
141 | uint pexiwar2; /* 0x.dd0 - PCI Express inbound window attributes register 2 */ | ||
142 | char res18[12]; | ||
143 | uint pexitar1; /* 0x.de0 - PCI Express inbound translation address register 2 */ | ||
144 | char res19[4]; | ||
145 | uint pexiwbar1; /* 0x.de8 - PCI Express inbound window base address register 2 */ | ||
146 | uint pexiwbear1; /* 0x.dec - PCI Express inbound window base extended address register 2 */ | ||
147 | uint pexiwar1; /* 0x.df0 - PCI Express inbound window attributes register 2 */ | ||
148 | char res20[12]; | ||
149 | uint pex_err_dr; /* 0x.e00 - PCI Express error detect register */ | ||
150 | char res21[4]; | ||
151 | uint pex_err_en; /* 0x.e08 - PCI Express error interrupt enable register */ | ||
152 | char res22[4]; | ||
153 | uint pex_err_disr; /* 0x.e10 - PCI Express error disable register */ | ||
154 | char res23[12]; | ||
155 | uint pex_err_cap_stat; /* 0x.e20 - PCI Express error capture status register */ | ||
156 | char res24[4]; | ||
157 | uint pex_err_cap_r0; /* 0x.e28 - PCI Express error capture register 0 */ | ||
158 | uint pex_err_cap_r1; /* 0x.e2c - PCI Express error capture register 0 */ | ||
159 | uint pex_err_cap_r2; /* 0x.e30 - PCI Express error capture register 0 */ | ||
160 | uint pex_err_cap_r3; /* 0x.e34 - PCI Express error capture register 0 */ | ||
161 | } ccsr_pex_t; | ||
162 | |||
163 | /* Global Utility Registers */ | ||
164 | typedef struct ccsr_guts { | ||
165 | uint porpllsr; /* 0x.0000 - POR PLL Ratio Status Register */ | ||
166 | uint porbmsr; /* 0x.0004 - POR Boot Mode Status Register */ | ||
167 | uint porimpscr; /* 0x.0008 - POR I/O Impedance Status and Control Register */ | ||
168 | uint pordevsr; /* 0x.000c - POR I/O Device Status Register */ | ||
169 | uint pordbgmsr; /* 0x.0010 - POR Debug Mode Status Register */ | ||
170 | char res1[12]; | ||
171 | uint gpporcr; /* 0x.0020 - General-Purpose POR Configuration Register */ | ||
172 | char res2[12]; | ||
173 | uint gpiocr; /* 0x.0030 - GPIO Control Register */ | ||
174 | char res3[12]; | ||
175 | uint gpoutdr; /* 0x.0040 - General-Purpose Output Data Register */ | ||
176 | char res4[12]; | ||
177 | uint gpindr; /* 0x.0050 - General-Purpose Input Data Register */ | ||
178 | char res5[12]; | ||
179 | uint pmuxcr; /* 0x.0060 - Alternate Function Signal Multiplex Control */ | ||
180 | char res6[12]; | ||
181 | uint devdisr; /* 0x.0070 - Device Disable Control */ | ||
182 | char res7[12]; | ||
183 | uint powmgtcsr; /* 0x.0080 - Power Management Status and Control Register */ | ||
184 | char res8[12]; | ||
185 | uint mcpsumr; /* 0x.0090 - Machine Check Summary Register */ | ||
186 | char res9[12]; | ||
187 | uint pvr; /* 0x.00a0 - Processor Version Register */ | ||
188 | uint svr; /* 0x.00a4 - System Version Register */ | ||
189 | char res10[3416]; | ||
190 | uint clkocr; /* 0x.0e00 - Clock Out Select Register */ | ||
191 | char res11[12]; | ||
192 | uint ddrdllcr; /* 0x.0e10 - DDR DLL Control Register */ | ||
193 | char res12[12]; | ||
194 | uint lbcdllcr; /* 0x.0e20 - LBC DLL Control Register */ | ||
195 | char res13[61916]; | ||
196 | } ccsr_guts_t; | ||
197 | |||
198 | #endif /* __ASM_POWERPC_IMMAP_86XX_H__ */ | ||
199 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-powerpc/io.h b/include/asm-powerpc/io.h index f1c2469b8844..a9496f34b048 100644 --- a/include/asm-powerpc/io.h +++ b/include/asm-powerpc/io.h | |||
@@ -40,12 +40,6 @@ extern int check_legacy_ioport(unsigned long base_port); | |||
40 | 40 | ||
41 | extern unsigned long isa_io_base; | 41 | extern unsigned long isa_io_base; |
42 | extern unsigned long pci_io_base; | 42 | extern unsigned long pci_io_base; |
43 | extern unsigned long io_page_mask; | ||
44 | |||
45 | #define MAX_ISA_PORT 0x10000 | ||
46 | |||
47 | #define _IO_IS_VALID(port) ((port) >= MAX_ISA_PORT || (1 << (port>>PAGE_SHIFT)) \ | ||
48 | & io_page_mask) | ||
49 | 43 | ||
50 | #ifdef CONFIG_PPC_ISERIES | 44 | #ifdef CONFIG_PPC_ISERIES |
51 | /* __raw_* accessors aren't supported on iSeries */ | 45 | /* __raw_* accessors aren't supported on iSeries */ |
diff --git a/include/asm-powerpc/iommu.h b/include/asm-powerpc/iommu.h index 2acf7b29ef06..a5e98641a2ae 100644 --- a/include/asm-powerpc/iommu.h +++ b/include/asm-powerpc/iommu.h | |||
@@ -66,7 +66,8 @@ extern void iommu_free_table(struct device_node *dn); | |||
66 | /* Initializes an iommu_table based in values set in the passed-in | 66 | /* Initializes an iommu_table based in values set in the passed-in |
67 | * structure | 67 | * structure |
68 | */ | 68 | */ |
69 | extern struct iommu_table *iommu_init_table(struct iommu_table * tbl); | 69 | extern struct iommu_table *iommu_init_table(struct iommu_table * tbl, |
70 | int nid); | ||
70 | 71 | ||
71 | extern int iommu_map_sg(struct device *dev, struct iommu_table *tbl, | 72 | extern int iommu_map_sg(struct device *dev, struct iommu_table *tbl, |
72 | struct scatterlist *sglist, int nelems, unsigned long mask, | 73 | struct scatterlist *sglist, int nelems, unsigned long mask, |
@@ -75,7 +76,8 @@ extern void iommu_unmap_sg(struct iommu_table *tbl, struct scatterlist *sglist, | |||
75 | int nelems, enum dma_data_direction direction); | 76 | int nelems, enum dma_data_direction direction); |
76 | 77 | ||
77 | extern void *iommu_alloc_coherent(struct iommu_table *tbl, size_t size, | 78 | extern void *iommu_alloc_coherent(struct iommu_table *tbl, size_t size, |
78 | dma_addr_t *dma_handle, unsigned long mask, gfp_t flag); | 79 | dma_addr_t *dma_handle, unsigned long mask, |
80 | gfp_t flag, int node); | ||
79 | extern void iommu_free_coherent(struct iommu_table *tbl, size_t size, | 81 | extern void iommu_free_coherent(struct iommu_table *tbl, size_t size, |
80 | void *vaddr, dma_addr_t dma_handle); | 82 | void *vaddr, dma_addr_t dma_handle); |
81 | extern dma_addr_t iommu_map_single(struct iommu_table *tbl, void *vaddr, | 83 | extern dma_addr_t iommu_map_single(struct iommu_table *tbl, void *vaddr, |
diff --git a/include/asm-powerpc/irq.h b/include/asm-powerpc/irq.h index 1e9f25330307..e05754752028 100644 --- a/include/asm-powerpc/irq.h +++ b/include/asm-powerpc/irq.h | |||
@@ -9,31 +9,14 @@ | |||
9 | * 2 of the License, or (at your option) any later version. | 9 | * 2 of the License, or (at your option) any later version. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/config.h> | ||
12 | #include <linux/threads.h> | 13 | #include <linux/threads.h> |
14 | #include <linux/list.h> | ||
15 | #include <linux/radix-tree.h> | ||
13 | 16 | ||
14 | #include <asm/types.h> | 17 | #include <asm/types.h> |
15 | #include <asm/atomic.h> | 18 | #include <asm/atomic.h> |
16 | 19 | ||
17 | /* this number is used when no interrupt has been assigned */ | ||
18 | #define NO_IRQ (-1) | ||
19 | |||
20 | /* | ||
21 | * These constants are used for passing information about interrupt | ||
22 | * signal polarity and level/edge sensing to the low-level PIC chip | ||
23 | * drivers. | ||
24 | */ | ||
25 | #define IRQ_SENSE_MASK 0x1 | ||
26 | #define IRQ_SENSE_LEVEL 0x1 /* interrupt on active level */ | ||
27 | #define IRQ_SENSE_EDGE 0x0 /* interrupt triggered by edge */ | ||
28 | |||
29 | #define IRQ_POLARITY_MASK 0x2 | ||
30 | #define IRQ_POLARITY_POSITIVE 0x2 /* high level or low->high edge */ | ||
31 | #define IRQ_POLARITY_NEGATIVE 0x0 /* low level or high->low edge */ | ||
32 | |||
33 | /* | ||
34 | * IRQ line status macro IRQ_PER_CPU is used | ||
35 | */ | ||
36 | #define ARCH_HAS_IRQ_PER_CPU | ||
37 | 20 | ||
38 | #define get_irq_desc(irq) (&irq_desc[(irq)]) | 21 | #define get_irq_desc(irq) (&irq_desc[(irq)]) |
39 | 22 | ||
@@ -41,50 +24,325 @@ | |||
41 | #define for_each_irq(i) \ | 24 | #define for_each_irq(i) \ |
42 | for ((i) = 0; (i) < NR_IRQS; ++(i)) | 25 | for ((i) = 0; (i) < NR_IRQS; ++(i)) |
43 | 26 | ||
44 | #ifdef CONFIG_PPC64 | 27 | extern atomic_t ppc_n_lost_interrupts; |
45 | 28 | ||
46 | /* | 29 | #ifdef CONFIG_PPC_MERGE |
47 | * Maximum number of interrupt sources that we can handle. | 30 | |
31 | /* This number is used when no interrupt has been assigned */ | ||
32 | #define NO_IRQ (0) | ||
33 | |||
34 | /* This is a special irq number to return from get_irq() to tell that | ||
35 | * no interrupt happened _and_ ignore it (don't count it as bad). Some | ||
36 | * platforms like iSeries rely on that. | ||
48 | */ | 37 | */ |
38 | #define NO_IRQ_IGNORE ((unsigned int)-1) | ||
39 | |||
40 | /* Total number of virq in the platform (make it a CONFIG_* option ? */ | ||
49 | #define NR_IRQS 512 | 41 | #define NR_IRQS 512 |
50 | 42 | ||
51 | /* Interrupt numbers are virtual in case they are sparsely | 43 | /* Number of irqs reserved for the legacy controller */ |
52 | * distributed by the hardware. | 44 | #define NUM_ISA_INTERRUPTS 16 |
45 | |||
46 | /* This type is the placeholder for a hardware interrupt number. It has to | ||
47 | * be big enough to enclose whatever representation is used by a given | ||
48 | * platform. | ||
49 | */ | ||
50 | typedef unsigned long irq_hw_number_t; | ||
51 | |||
52 | /* Interrupt controller "host" data structure. This could be defined as a | ||
53 | * irq domain controller. That is, it handles the mapping between hardware | ||
54 | * and virtual interrupt numbers for a given interrupt domain. The host | ||
55 | * structure is generally created by the PIC code for a given PIC instance | ||
56 | * (though a host can cover more than one PIC if they have a flat number | ||
57 | * model). It's the host callbacks that are responsible for setting the | ||
58 | * irq_chip on a given irq_desc after it's been mapped. | ||
59 | * | ||
60 | * The host code and data structures are fairly agnostic to the fact that | ||
61 | * we use an open firmware device-tree. We do have references to struct | ||
62 | * device_node in two places: in irq_find_host() to find the host matching | ||
63 | * a given interrupt controller node, and of course as an argument to its | ||
64 | * counterpart host->ops->match() callback. However, those are treated as | ||
65 | * generic pointers by the core and the fact that it's actually a device-node | ||
66 | * pointer is purely a convention between callers and implementation. This | ||
67 | * code could thus be used on other architectures by replacing those two | ||
68 | * by some sort of arch-specific void * "token" used to identify interrupt | ||
69 | * controllers. | ||
70 | */ | ||
71 | struct irq_host; | ||
72 | struct radix_tree_root; | ||
73 | |||
74 | /* Functions below are provided by the host and called whenever a new mapping | ||
75 | * is created or an old mapping is disposed. The host can then proceed to | ||
76 | * whatever internal data structures management is required. It also needs | ||
77 | * to setup the irq_desc when returning from map(). | ||
78 | */ | ||
79 | struct irq_host_ops { | ||
80 | /* Match an interrupt controller device node to a host, returns | ||
81 | * 1 on a match | ||
82 | */ | ||
83 | int (*match)(struct irq_host *h, struct device_node *node); | ||
84 | |||
85 | /* Create or update a mapping between a virtual irq number and a hw | ||
86 | * irq number. This can be called several times for the same mapping | ||
87 | * but with different flags, though unmap shall always be called | ||
88 | * before the virq->hw mapping is changed. | ||
89 | */ | ||
90 | int (*map)(struct irq_host *h, unsigned int virq, | ||
91 | irq_hw_number_t hw, unsigned int flags); | ||
92 | |||
93 | /* Dispose of such a mapping */ | ||
94 | void (*unmap)(struct irq_host *h, unsigned int virq); | ||
95 | |||
96 | /* Translate device-tree interrupt specifier from raw format coming | ||
97 | * from the firmware to a irq_hw_number_t (interrupt line number) and | ||
98 | * trigger flags that can be passed to irq_create_mapping(). | ||
99 | * If no translation is provided, raw format is assumed to be one cell | ||
100 | * for interrupt line and default sense. | ||
101 | */ | ||
102 | int (*xlate)(struct irq_host *h, struct device_node *ctrler, | ||
103 | u32 *intspec, unsigned int intsize, | ||
104 | irq_hw_number_t *out_hwirq, unsigned int *out_flags); | ||
105 | }; | ||
106 | |||
107 | struct irq_host { | ||
108 | struct list_head link; | ||
109 | |||
110 | /* type of reverse mapping technique */ | ||
111 | unsigned int revmap_type; | ||
112 | #define IRQ_HOST_MAP_LEGACY 0 /* legacy 8259, gets irqs 1..15 */ | ||
113 | #define IRQ_HOST_MAP_NOMAP 1 /* no fast reverse mapping */ | ||
114 | #define IRQ_HOST_MAP_LINEAR 2 /* linear map of interrupts */ | ||
115 | #define IRQ_HOST_MAP_TREE 3 /* radix tree */ | ||
116 | union { | ||
117 | struct { | ||
118 | unsigned int size; | ||
119 | unsigned int *revmap; | ||
120 | } linear; | ||
121 | struct radix_tree_root tree; | ||
122 | } revmap_data; | ||
123 | struct irq_host_ops *ops; | ||
124 | void *host_data; | ||
125 | irq_hw_number_t inval_irq; | ||
126 | }; | ||
127 | |||
128 | /* The main irq map itself is an array of NR_IRQ entries containing the | ||
129 | * associate host and irq number. An entry with a host of NULL is free. | ||
130 | * An entry can be allocated if it's free, the allocator always then sets | ||
131 | * hwirq first to the host's invalid irq number and then fills ops. | ||
132 | */ | ||
133 | struct irq_map_entry { | ||
134 | irq_hw_number_t hwirq; | ||
135 | struct irq_host *host; | ||
136 | }; | ||
137 | |||
138 | extern struct irq_map_entry irq_map[NR_IRQS]; | ||
139 | |||
140 | |||
141 | /*** | ||
142 | * irq_alloc_host - Allocate a new irq_host data structure | ||
143 | * @node: device-tree node of the interrupt controller | ||
144 | * @revmap_type: type of reverse mapping to use | ||
145 | * @revmap_arg: for IRQ_HOST_MAP_LINEAR linear only: size of the map | ||
146 | * @ops: map/unmap host callbacks | ||
147 | * @inval_irq: provide a hw number in that host space that is always invalid | ||
148 | * | ||
149 | * Allocates and initialize and irq_host structure. Note that in the case of | ||
150 | * IRQ_HOST_MAP_LEGACY, the map() callback will be called before this returns | ||
151 | * for all legacy interrupts except 0 (which is always the invalid irq for | ||
152 | * a legacy controller). For a IRQ_HOST_MAP_LINEAR, the map is allocated by | ||
153 | * this call as well. For a IRQ_HOST_MAP_TREE, the radix tree will be allocated | ||
154 | * later during boot automatically (the reverse mapping will use the slow path | ||
155 | * until that happens). | ||
156 | */ | ||
157 | extern struct irq_host *irq_alloc_host(unsigned int revmap_type, | ||
158 | unsigned int revmap_arg, | ||
159 | struct irq_host_ops *ops, | ||
160 | irq_hw_number_t inval_irq); | ||
161 | |||
162 | |||
163 | /*** | ||
164 | * irq_find_host - Locates a host for a given device node | ||
165 | * @node: device-tree node of the interrupt controller | ||
166 | */ | ||
167 | extern struct irq_host *irq_find_host(struct device_node *node); | ||
168 | |||
169 | |||
170 | /*** | ||
171 | * irq_set_default_host - Set a "default" host | ||
172 | * @host: default host pointer | ||
173 | * | ||
174 | * For convenience, it's possible to set a "default" host that will be used | ||
175 | * whenever NULL is passed to irq_create_mapping(). It makes life easier for | ||
176 | * platforms that want to manipulate a few hard coded interrupt numbers that | ||
177 | * aren't properly represented in the device-tree. | ||
178 | */ | ||
179 | extern void irq_set_default_host(struct irq_host *host); | ||
180 | |||
181 | |||
182 | /*** | ||
183 | * irq_set_virq_count - Set the maximum number of virt irqs | ||
184 | * @count: number of linux virtual irqs, capped with NR_IRQS | ||
185 | * | ||
186 | * This is mainly for use by platforms like iSeries who want to program | ||
187 | * the virtual irq number in the controller to avoid the reverse mapping | ||
188 | */ | ||
189 | extern void irq_set_virq_count(unsigned int count); | ||
190 | |||
191 | |||
192 | /*** | ||
193 | * irq_create_mapping - Map a hardware interrupt into linux virq space | ||
194 | * @host: host owning this hardware interrupt or NULL for default host | ||
195 | * @hwirq: hardware irq number in that host space | ||
196 | * @flags: flags passed to the controller. contains the trigger type among | ||
197 | * others. Use IRQ_TYPE_* defined in include/linux/irq.h | ||
198 | * | ||
199 | * Only one mapping per hardware interrupt is permitted. Returns a linux | ||
200 | * virq number. The flags can be used to provide sense information to the | ||
201 | * controller (typically extracted from the device-tree). If no information | ||
202 | * is passed, the controller defaults will apply (for example, xics can only | ||
203 | * do edge so flags are irrelevant for some pseries specific irqs). | ||
204 | * | ||
205 | * The device-tree generally contains the trigger info in an encoding that is | ||
206 | * specific to a given type of controller. In that case, you can directly use | ||
207 | * host->ops->trigger_xlate() to translate that. | ||
208 | * | ||
209 | * It is recommended that new PICs that don't have existing OF bindings chose | ||
210 | * to use a representation of triggers identical to linux. | ||
211 | */ | ||
212 | extern unsigned int irq_create_mapping(struct irq_host *host, | ||
213 | irq_hw_number_t hwirq, | ||
214 | unsigned int flags); | ||
215 | |||
216 | |||
217 | /*** | ||
218 | * irq_dispose_mapping - Unmap an interrupt | ||
219 | * @virq: linux virq number of the interrupt to unmap | ||
220 | */ | ||
221 | extern void irq_dispose_mapping(unsigned int virq); | ||
222 | |||
223 | /*** | ||
224 | * irq_find_mapping - Find a linux virq from an hw irq number. | ||
225 | * @host: host owning this hardware interrupt | ||
226 | * @hwirq: hardware irq number in that host space | ||
227 | * | ||
228 | * This is a slow path, for use by generic code. It's expected that an | ||
229 | * irq controller implementation directly calls the appropriate low level | ||
230 | * mapping function. | ||
231 | */ | ||
232 | extern unsigned int irq_find_mapping(struct irq_host *host, | ||
233 | irq_hw_number_t hwirq); | ||
234 | |||
235 | |||
236 | /*** | ||
237 | * irq_radix_revmap - Find a linux virq from a hw irq number. | ||
238 | * @host: host owning this hardware interrupt | ||
239 | * @hwirq: hardware irq number in that host space | ||
240 | * | ||
241 | * This is a fast path, for use by irq controller code that uses radix tree | ||
242 | * revmaps | ||
53 | */ | 243 | */ |
54 | extern unsigned int virt_irq_to_real_map[NR_IRQS]; | 244 | extern unsigned int irq_radix_revmap(struct irq_host *host, |
245 | irq_hw_number_t hwirq); | ||
55 | 246 | ||
56 | /* The maximum virtual IRQ number that we support. This | 247 | /*** |
57 | * can be set by the platform and will be reduced by the | 248 | * irq_linear_revmap - Find a linux virq from a hw irq number. |
58 | * value of __irq_offset_value. It defaults to and is | 249 | * @host: host owning this hardware interrupt |
59 | * capped by (NR_IRQS - 1). | 250 | * @hwirq: hardware irq number in that host space |
251 | * | ||
252 | * This is a fast path, for use by irq controller code that uses linear | ||
253 | * revmaps. It does fallback to the slow path if the revmap doesn't exist | ||
254 | * yet and will create the revmap entry with appropriate locking | ||
60 | */ | 255 | */ |
61 | extern unsigned int virt_irq_max; | ||
62 | 256 | ||
63 | /* Create a mapping for a real_irq if it doesn't already exist. | 257 | extern unsigned int irq_linear_revmap(struct irq_host *host, |
64 | * Return the virtual irq as a convenience. | 258 | irq_hw_number_t hwirq); |
259 | |||
260 | |||
261 | |||
262 | /*** | ||
263 | * irq_alloc_virt - Allocate virtual irq numbers | ||
264 | * @host: host owning these new virtual irqs | ||
265 | * @count: number of consecutive numbers to allocate | ||
266 | * @hint: pass a hint number, the allocator will try to use a 1:1 mapping | ||
267 | * | ||
268 | * This is a low level function that is used internally by irq_create_mapping() | ||
269 | * and that can be used by some irq controllers implementations for things | ||
270 | * like allocating ranges of numbers for MSIs. The revmaps are left untouched. | ||
271 | */ | ||
272 | extern unsigned int irq_alloc_virt(struct irq_host *host, | ||
273 | unsigned int count, | ||
274 | unsigned int hint); | ||
275 | |||
276 | /*** | ||
277 | * irq_free_virt - Free virtual irq numbers | ||
278 | * @virq: virtual irq number of the first interrupt to free | ||
279 | * @count: number of interrupts to free | ||
280 | * | ||
281 | * This function is the opposite of irq_alloc_virt. It will not clear reverse | ||
282 | * maps, this should be done previously by unmap'ing the interrupt. In fact, | ||
283 | * all interrupts covered by the range being freed should have been unmapped | ||
284 | * prior to calling this. | ||
285 | */ | ||
286 | extern void irq_free_virt(unsigned int virq, unsigned int count); | ||
287 | |||
288 | |||
289 | /* -- OF helpers -- */ | ||
290 | |||
291 | /* irq_create_of_mapping - Map a hardware interrupt into linux virq space | ||
292 | * @controller: Device node of the interrupt controller | ||
293 | * @inspec: Interrupt specifier from the device-tree | ||
294 | * @intsize: Size of the interrupt specifier from the device-tree | ||
295 | * | ||
296 | * This function is identical to irq_create_mapping except that it takes | ||
297 | * as input informations straight from the device-tree (typically the results | ||
298 | * of the of_irq_map_*() functions | ||
65 | */ | 299 | */ |
66 | int virt_irq_create_mapping(unsigned int real_irq); | 300 | extern unsigned int irq_create_of_mapping(struct device_node *controller, |
67 | void virt_irq_init(void); | 301 | u32 *intspec, unsigned int intsize); |
68 | 302 | ||
69 | static inline unsigned int virt_irq_to_real(unsigned int virt_irq) | 303 | |
304 | /* irq_of_parse_and_map - Parse nad Map an interrupt into linux virq space | ||
305 | * @device: Device node of the device whose interrupt is to be mapped | ||
306 | * @index: Index of the interrupt to map | ||
307 | * | ||
308 | * This function is a wrapper that chains of_irq_map_one() and | ||
309 | * irq_create_of_mapping() to make things easier to callers | ||
310 | */ | ||
311 | extern unsigned int irq_of_parse_and_map(struct device_node *dev, int index); | ||
312 | |||
313 | /* -- End OF helpers -- */ | ||
314 | |||
315 | /*** | ||
316 | * irq_early_init - Init irq remapping subsystem | ||
317 | */ | ||
318 | extern void irq_early_init(void); | ||
319 | |||
320 | static __inline__ int irq_canonicalize(int irq) | ||
70 | { | 321 | { |
71 | return virt_irq_to_real_map[virt_irq]; | 322 | return irq; |
72 | } | 323 | } |
73 | 324 | ||
74 | extern unsigned int real_irq_to_virt_slowpath(unsigned int real_irq); | 325 | |
326 | #else /* CONFIG_PPC_MERGE */ | ||
327 | |||
328 | /* This number is used when no interrupt has been assigned */ | ||
329 | #define NO_IRQ (-1) | ||
330 | #define NO_IRQ_IGNORE (-2) | ||
331 | |||
75 | 332 | ||
76 | /* | 333 | /* |
77 | * List of interrupt controllers. | 334 | * These constants are used for passing information about interrupt |
335 | * signal polarity and level/edge sensing to the low-level PIC chip | ||
336 | * drivers. | ||
78 | */ | 337 | */ |
79 | #define IC_INVALID 0 | 338 | #define IRQ_SENSE_MASK 0x1 |
80 | #define IC_OPEN_PIC 1 | 339 | #define IRQ_SENSE_LEVEL 0x1 /* interrupt on active level */ |
81 | #define IC_PPC_XIC 2 | 340 | #define IRQ_SENSE_EDGE 0x0 /* interrupt triggered by edge */ |
82 | #define IC_CELL_PIC 3 | ||
83 | #define IC_ISERIES 4 | ||
84 | 341 | ||
85 | extern u64 ppc64_interrupt_controller; | 342 | #define IRQ_POLARITY_MASK 0x2 |
343 | #define IRQ_POLARITY_POSITIVE 0x2 /* high level or low->high edge */ | ||
344 | #define IRQ_POLARITY_NEGATIVE 0x0 /* low level or high->low edge */ | ||
86 | 345 | ||
87 | #else /* 32-bit */ | ||
88 | 346 | ||
89 | #if defined(CONFIG_40x) | 347 | #if defined(CONFIG_40x) |
90 | #include <asm/ibm4xx.h> | 348 | #include <asm/ibm4xx.h> |
@@ -347,6 +605,92 @@ extern u64 ppc64_interrupt_controller; | |||
347 | #define SIU_INT_PC1 ((uint)0x3e+CPM_IRQ_OFFSET) | 605 | #define SIU_INT_PC1 ((uint)0x3e+CPM_IRQ_OFFSET) |
348 | #define SIU_INT_PC0 ((uint)0x3f+CPM_IRQ_OFFSET) | 606 | #define SIU_INT_PC0 ((uint)0x3f+CPM_IRQ_OFFSET) |
349 | 607 | ||
608 | #elif defined(CONFIG_PPC_86xx) | ||
609 | #include <asm/mpc86xx.h> | ||
610 | |||
611 | #define NR_EPIC_INTS 48 | ||
612 | #ifndef NR_8259_INTS | ||
613 | #define NR_8259_INTS 16 /*ULI 1575 can route 12 interrupts */ | ||
614 | #endif | ||
615 | #define NUM_8259_INTERRUPTS NR_8259_INTS | ||
616 | |||
617 | #ifndef I8259_OFFSET | ||
618 | #define I8259_OFFSET 0 | ||
619 | #endif | ||
620 | |||
621 | #define NR_IRQS 256 | ||
622 | |||
623 | /* Internal IRQs on MPC86xx OpenPIC */ | ||
624 | |||
625 | #ifndef MPC86xx_OPENPIC_IRQ_OFFSET | ||
626 | #define MPC86xx_OPENPIC_IRQ_OFFSET NR_8259_INTS | ||
627 | #endif | ||
628 | |||
629 | /* The 48 internal sources */ | ||
630 | #define MPC86xx_IRQ_NULL ( 0 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
631 | #define MPC86xx_IRQ_MCM ( 1 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
632 | #define MPC86xx_IRQ_DDR ( 2 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
633 | #define MPC86xx_IRQ_LBC ( 3 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
634 | #define MPC86xx_IRQ_DMA0 ( 4 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
635 | #define MPC86xx_IRQ_DMA1 ( 5 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
636 | #define MPC86xx_IRQ_DMA2 ( 6 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
637 | #define MPC86xx_IRQ_DMA3 ( 7 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
638 | |||
639 | /* no 10,11 */ | ||
640 | #define MPC86xx_IRQ_UART2 (12 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
641 | #define MPC86xx_IRQ_TSEC1_TX (13 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
642 | #define MPC86xx_IRQ_TSEC1_RX (14 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
643 | #define MPC86xx_IRQ_TSEC3_TX (15 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
644 | #define MPC86xx_IRQ_TSEC3_RX (16 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
645 | #define MPC86xx_IRQ_TSEC3_ERROR (17 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
646 | #define MPC86xx_IRQ_TSEC1_ERROR (18 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
647 | #define MPC86xx_IRQ_TSEC2_TX (19 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
648 | #define MPC86xx_IRQ_TSEC2_RX (20 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
649 | #define MPC86xx_IRQ_TSEC4_TX (21 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
650 | #define MPC86xx_IRQ_TSEC4_RX (22 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
651 | #define MPC86xx_IRQ_TSEC4_ERROR (23 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
652 | #define MPC86xx_IRQ_TSEC2_ERROR (24 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
653 | /* no 25 */ | ||
654 | #define MPC86xx_IRQ_UART1 (26 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
655 | #define MPC86xx_IRQ_IIC (27 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
656 | #define MPC86xx_IRQ_PERFMON (28 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
657 | /* no 29,30,31 */ | ||
658 | #define MPC86xx_IRQ_SRIO_ERROR (32 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
659 | #define MPC86xx_IRQ_SRIO_OUT_BELL (33 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
660 | #define MPC86xx_IRQ_SRIO_IN_BELL (34 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
661 | /* no 35,36 */ | ||
662 | #define MPC86xx_IRQ_SRIO_OUT_MSG1 (37 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
663 | #define MPC86xx_IRQ_SRIO_IN_MSG1 (38 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
664 | #define MPC86xx_IRQ_SRIO_OUT_MSG2 (39 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
665 | #define MPC86xx_IRQ_SRIO_IN_MSG2 (40 + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
666 | |||
667 | /* The 12 external interrupt lines */ | ||
668 | #define MPC86xx_IRQ_EXT_BASE 48 | ||
669 | #define MPC86xx_IRQ_EXT0 (0 + MPC86xx_IRQ_EXT_BASE \ | ||
670 | + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
671 | #define MPC86xx_IRQ_EXT1 (1 + MPC86xx_IRQ_EXT_BASE \ | ||
672 | + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
673 | #define MPC86xx_IRQ_EXT2 (2 + MPC86xx_IRQ_EXT_BASE \ | ||
674 | + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
675 | #define MPC86xx_IRQ_EXT3 (3 + MPC86xx_IRQ_EXT_BASE \ | ||
676 | + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
677 | #define MPC86xx_IRQ_EXT4 (4 + MPC86xx_IRQ_EXT_BASE \ | ||
678 | + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
679 | #define MPC86xx_IRQ_EXT5 (5 + MPC86xx_IRQ_EXT_BASE \ | ||
680 | + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
681 | #define MPC86xx_IRQ_EXT6 (6 + MPC86xx_IRQ_EXT_BASE \ | ||
682 | + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
683 | #define MPC86xx_IRQ_EXT7 (7 + MPC86xx_IRQ_EXT_BASE \ | ||
684 | + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
685 | #define MPC86xx_IRQ_EXT8 (8 + MPC86xx_IRQ_EXT_BASE \ | ||
686 | + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
687 | #define MPC86xx_IRQ_EXT9 (9 + MPC86xx_IRQ_EXT_BASE \ | ||
688 | + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
689 | #define MPC86xx_IRQ_EXT10 (10 + MPC86xx_IRQ_EXT_BASE \ | ||
690 | + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
691 | #define MPC86xx_IRQ_EXT11 (11 + MPC86xx_IRQ_EXT_BASE \ | ||
692 | + MPC86xx_OPENPIC_IRQ_OFFSET) | ||
693 | |||
350 | #else /* CONFIG_40x + CONFIG_8xx */ | 694 | #else /* CONFIG_40x + CONFIG_8xx */ |
351 | /* | 695 | /* |
352 | * this is the # irq's for all ppc arch's (pmac/chrp/prep) | 696 | * this is the # irq's for all ppc arch's (pmac/chrp/prep) |
@@ -431,16 +775,11 @@ extern u64 ppc64_interrupt_controller; | |||
431 | 775 | ||
432 | #endif /* CONFIG_8260 */ | 776 | #endif /* CONFIG_8260 */ |
433 | 777 | ||
434 | #endif | 778 | #endif /* Whatever way too big #ifdef */ |
435 | 779 | ||
436 | #define NR_MASK_WORDS ((NR_IRQS + 31) / 32) | 780 | #define NR_MASK_WORDS ((NR_IRQS + 31) / 32) |
437 | /* pedantic: these are long because they are used with set_bit --RR */ | 781 | /* pedantic: these are long because they are used with set_bit --RR */ |
438 | extern unsigned long ppc_cached_irq_mask[NR_MASK_WORDS]; | 782 | extern unsigned long ppc_cached_irq_mask[NR_MASK_WORDS]; |
439 | extern atomic_t ppc_n_lost_interrupts; | ||
440 | |||
441 | #define virt_irq_create_mapping(x) (x) | ||
442 | |||
443 | #endif | ||
444 | 783 | ||
445 | /* | 784 | /* |
446 | * Because many systems have two overlapping names spaces for | 785 | * Because many systems have two overlapping names spaces for |
@@ -479,6 +818,7 @@ static __inline__ int irq_canonicalize(int irq) | |||
479 | irq = 9; | 818 | irq = 9; |
480 | return irq; | 819 | return irq; |
481 | } | 820 | } |
821 | #endif /* CONFIG_PPC_MERGE */ | ||
482 | 822 | ||
483 | extern int distribute_irqs; | 823 | extern int distribute_irqs; |
484 | 824 | ||
@@ -498,9 +838,8 @@ extern struct thread_info *softirq_ctx[NR_CPUS]; | |||
498 | 838 | ||
499 | extern void irq_ctx_init(void); | 839 | extern void irq_ctx_init(void); |
500 | extern void call_do_softirq(struct thread_info *tp); | 840 | extern void call_do_softirq(struct thread_info *tp); |
501 | extern int call___do_IRQ(int irq, struct pt_regs *regs, | 841 | extern int call_handle_irq(int irq, void *p1, void *p2, |
502 | struct thread_info *tp); | 842 | struct thread_info *tp, void *func); |
503 | |||
504 | #else | 843 | #else |
505 | #define irq_ctx_init() | 844 | #define irq_ctx_init() |
506 | 845 | ||
diff --git a/include/asm-powerpc/irqflags.h b/include/asm-powerpc/irqflags.h new file mode 100644 index 000000000000..7970cbaeaa54 --- /dev/null +++ b/include/asm-powerpc/irqflags.h | |||
@@ -0,0 +1,31 @@ | |||
1 | /* | ||
2 | * include/asm-powerpc/irqflags.h | ||
3 | * | ||
4 | * IRQ flags handling | ||
5 | * | ||
6 | * This file gets included from lowlevel asm headers too, to provide | ||
7 | * wrapped versions of the local_irq_*() APIs, based on the | ||
8 | * raw_local_irq_*() macros from the lowlevel headers. | ||
9 | */ | ||
10 | #ifndef _ASM_IRQFLAGS_H | ||
11 | #define _ASM_IRQFLAGS_H | ||
12 | |||
13 | /* | ||
14 | * Get definitions for raw_local_save_flags(x), etc. | ||
15 | */ | ||
16 | #include <asm-powerpc/hw_irq.h> | ||
17 | |||
18 | /* | ||
19 | * Do the CPU's IRQ-state tracing from assembly code. We call a | ||
20 | * C function, so save all the C-clobbered registers: | ||
21 | */ | ||
22 | #ifdef CONFIG_TRACE_IRQFLAGS | ||
23 | |||
24 | #error No support on PowerPC yet for CONFIG_TRACE_IRQFLAGS | ||
25 | |||
26 | #else | ||
27 | # define TRACE_IRQS_ON | ||
28 | # define TRACE_IRQS_OFF | ||
29 | #endif | ||
30 | |||
31 | #endif | ||
diff --git a/include/asm-powerpc/iseries/iommu.h b/include/asm-powerpc/iseries/iommu.h new file mode 100644 index 000000000000..0edbfe10cb37 --- /dev/null +++ b/include/asm-powerpc/iseries/iommu.h | |||
@@ -0,0 +1,35 @@ | |||
1 | #ifndef _ASM_POWERPC_ISERIES_IOMMU_H | ||
2 | #define _ASM_POWERPC_ISERIES_IOMMU_H | ||
3 | |||
4 | /* | ||
5 | * Copyright (C) 2005 Stephen Rothwell, IBM Corporation | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the: | ||
19 | * Free Software Foundation, Inc., | ||
20 | * 59 Temple Place, Suite 330, | ||
21 | * Boston, MA 02111-1307 USA | ||
22 | */ | ||
23 | |||
24 | struct device_node; | ||
25 | struct iommu_table; | ||
26 | |||
27 | /* Creates table for an individual device node */ | ||
28 | extern void iommu_devnode_init_iSeries(struct device_node *dn); | ||
29 | |||
30 | /* Get table parameters from HV */ | ||
31 | extern void iommu_table_getparms_iSeries(unsigned long busno, | ||
32 | unsigned char slotno, unsigned char virtbus, | ||
33 | struct iommu_table *tbl); | ||
34 | |||
35 | #endif /* _ASM_POWERPC_ISERIES_IOMMU_H */ | ||
diff --git a/include/asm-powerpc/iseries/it_lp_queue.h b/include/asm-powerpc/iseries/it_lp_queue.h index b7c6fc12cce2..284c5a7db3ac 100644 --- a/include/asm-powerpc/iseries/it_lp_queue.h +++ b/include/asm-powerpc/iseries/it_lp_queue.h | |||
@@ -29,20 +29,20 @@ | |||
29 | 29 | ||
30 | struct HvLpEvent; | 30 | struct HvLpEvent; |
31 | 31 | ||
32 | #define ITMaxLpQueues 8 | 32 | #define IT_LP_MAX_QUEUES 8 |
33 | 33 | ||
34 | #define NotUsed 0 // Queue will not be used by PLIC | 34 | #define IT_LP_NOT_USED 0 /* Queue will not be used by PLIC */ |
35 | #define DedicatedIo 1 // Queue dedicated to IO processor specified | 35 | #define IT_LP_DEDICATED_IO 1 /* Queue dedicated to IO processor specified */ |
36 | #define DedicatedLp 2 // Queue dedicated to LP specified | 36 | #define IT_LP_DEDICATED_LP 2 /* Queue dedicated to LP specified */ |
37 | #define Shared 3 // Queue shared for both IO and LP | 37 | #define IT_LP_SHARED 3 /* Queue shared for both IO and LP */ |
38 | 38 | ||
39 | #define LpEventStackSize 4096 | 39 | #define IT_LP_EVENT_STACK_SIZE 4096 |
40 | #define LpEventMaxSize 256 | 40 | #define IT_LP_EVENT_MAX_SIZE 256 |
41 | #define LpEventAlign 64 | 41 | #define IT_LP_EVENT_ALIGN 64 |
42 | 42 | ||
43 | struct hvlpevent_queue { | 43 | struct hvlpevent_queue { |
44 | /* | 44 | /* |
45 | * The xSlicCurEventPtr is the pointer to the next event stack entry | 45 | * The hq_current_event is the pointer to the next event stack entry |
46 | * that will become valid. The OS must peek at this entry to determine | 46 | * that will become valid. The OS must peek at this entry to determine |
47 | * if it is valid. PLIC will set the valid indicator as the very last | 47 | * if it is valid. PLIC will set the valid indicator as the very last |
48 | * store into that entry. | 48 | * store into that entry. |
@@ -52,23 +52,23 @@ struct hvlpevent_queue { | |||
52 | * location again. | 52 | * location again. |
53 | * | 53 | * |
54 | * If the event stack fills and there are overflow events, then PLIC | 54 | * If the event stack fills and there are overflow events, then PLIC |
55 | * will set the xPlicOverflowIntPending flag in which case the OS will | 55 | * will set the hq_overflow_pending flag in which case the OS will |
56 | * have to fetch the additional LP events once they have drained the | 56 | * have to fetch the additional LP events once they have drained the |
57 | * event stack. | 57 | * event stack. |
58 | * | 58 | * |
59 | * The first 16-bytes are known by both the OS and PLIC. The remainder | 59 | * The first 16-bytes are known by both the OS and PLIC. The remainder |
60 | * of the cache line is for use by the OS. | 60 | * of the cache line is for use by the OS. |
61 | */ | 61 | */ |
62 | u8 xPlicOverflowIntPending;// 0x00 Overflow events are pending | 62 | u8 hq_overflow_pending; /* 0x00 Overflow events are pending */ |
63 | u8 xPlicStatus; // 0x01 DedicatedIo or DedicatedLp or NotUsed | 63 | u8 hq_status; /* 0x01 DedicatedIo or DedicatedLp or NotUsed */ |
64 | u16 xSlicLogicalProcIndex; // 0x02 Logical Proc Index for correlation | 64 | u16 hq_proc_index; /* 0x02 Logical Proc Index for correlation */ |
65 | u8 xPlicRsvd[12]; // 0x04 | 65 | u8 hq_reserved1[12]; /* 0x04 */ |
66 | char *xSlicCurEventPtr; // 0x10 | 66 | char *hq_current_event; /* 0x10 */ |
67 | char *xSlicLastValidEventPtr; // 0x18 | 67 | char *hq_last_event; /* 0x18 */ |
68 | char *xSlicEventStackPtr; // 0x20 | 68 | char *hq_event_stack; /* 0x20 */ |
69 | u8 xIndex; // 0x28 unique sequential index. | 69 | u8 hq_index; /* 0x28 unique sequential index. */ |
70 | u8 xSlicRsvd[3]; // 0x29-2b | 70 | u8 hq_reserved2[3]; /* 0x29-2b */ |
71 | spinlock_t lock; | 71 | spinlock_t hq_lock; |
72 | }; | 72 | }; |
73 | 73 | ||
74 | extern struct hvlpevent_queue hvlpevent_queue; | 74 | extern struct hvlpevent_queue hvlpevent_queue; |
diff --git a/include/asm-powerpc/kdebug.h b/include/asm-powerpc/kdebug.h index c01786ab5fa6..532bfee934f4 100644 --- a/include/asm-powerpc/kdebug.h +++ b/include/asm-powerpc/kdebug.h | |||
@@ -18,6 +18,8 @@ struct die_args { | |||
18 | 18 | ||
19 | extern int register_die_notifier(struct notifier_block *); | 19 | extern int register_die_notifier(struct notifier_block *); |
20 | extern int unregister_die_notifier(struct notifier_block *); | 20 | extern int unregister_die_notifier(struct notifier_block *); |
21 | extern int register_page_fault_notifier(struct notifier_block *); | ||
22 | extern int unregister_page_fault_notifier(struct notifier_block *); | ||
21 | extern struct atomic_notifier_head powerpc_die_chain; | 23 | extern struct atomic_notifier_head powerpc_die_chain; |
22 | 24 | ||
23 | /* Grossly misnamed. */ | 25 | /* Grossly misnamed. */ |
diff --git a/include/asm-powerpc/kdump.h b/include/asm-powerpc/kdump.h index a87aed00d61f..dc1574c945f8 100644 --- a/include/asm-powerpc/kdump.h +++ b/include/asm-powerpc/kdump.h | |||
@@ -1,13 +1,40 @@ | |||
1 | #ifndef _PPC64_KDUMP_H | 1 | #ifndef _PPC64_KDUMP_H |
2 | #define _PPC64_KDUMP_H | 2 | #define _PPC64_KDUMP_H |
3 | 3 | ||
4 | /* Kdump kernel runs at 32 MB, change at your peril. */ | ||
5 | #define KDUMP_KERNELBASE 0x2000000 | ||
6 | |||
4 | /* How many bytes to reserve at zero for kdump. The reserve limit should | 7 | /* How many bytes to reserve at zero for kdump. The reserve limit should |
5 | * be greater or equal to the trampoline's end address. */ | 8 | * be greater or equal to the trampoline's end address. |
9 | * Reserve to the end of the FWNMI area, see head_64.S */ | ||
6 | #define KDUMP_RESERVE_LIMIT 0x8000 | 10 | #define KDUMP_RESERVE_LIMIT 0x8000 |
7 | 11 | ||
12 | #ifdef CONFIG_CRASH_DUMP | ||
13 | |||
14 | #define PHYSICAL_START KDUMP_KERNELBASE | ||
8 | #define KDUMP_TRAMPOLINE_START 0x0100 | 15 | #define KDUMP_TRAMPOLINE_START 0x0100 |
9 | #define KDUMP_TRAMPOLINE_END 0x3000 | 16 | #define KDUMP_TRAMPOLINE_END 0x3000 |
10 | 17 | ||
11 | extern void kdump_setup(void); | 18 | #define KDUMP_MIN_TCE_ENTRIES 2048 |
19 | |||
20 | #else /* !CONFIG_CRASH_DUMP */ | ||
21 | |||
22 | #define PHYSICAL_START 0x0 | ||
23 | |||
24 | #endif /* CONFIG_CRASH_DUMP */ | ||
25 | |||
26 | #ifndef __ASSEMBLY__ | ||
27 | #ifdef CONFIG_CRASH_DUMP | ||
28 | |||
29 | extern void reserve_kdump_trampoline(void); | ||
30 | extern void setup_kdump_trampoline(void); | ||
31 | |||
32 | #else /* !CONFIG_CRASH_DUMP */ | ||
33 | |||
34 | static inline void reserve_kdump_trampoline(void) { ; } | ||
35 | static inline void setup_kdump_trampoline(void) { ; } | ||
36 | |||
37 | #endif /* CONFIG_CRASH_DUMP */ | ||
38 | #endif /* __ASSEMBLY__ */ | ||
12 | 39 | ||
13 | #endif /* __PPC64_KDUMP_H */ | 40 | #endif /* __PPC64_KDUMP_H */ |
diff --git a/include/asm-powerpc/kexec.h b/include/asm-powerpc/kexec.h index 6a2af2f6853b..8f7fd5cfec34 100644 --- a/include/asm-powerpc/kexec.h +++ b/include/asm-powerpc/kexec.h | |||
@@ -31,9 +31,10 @@ | |||
31 | #define KEXEC_ARCH KEXEC_ARCH_PPC | 31 | #define KEXEC_ARCH KEXEC_ARCH_PPC |
32 | #endif | 32 | #endif |
33 | 33 | ||
34 | #ifndef __ASSEMBLY__ | ||
35 | |||
34 | #ifdef CONFIG_KEXEC | 36 | #ifdef CONFIG_KEXEC |
35 | 37 | ||
36 | #ifndef __ASSEMBLY__ | ||
37 | #ifdef __powerpc64__ | 38 | #ifdef __powerpc64__ |
38 | /* | 39 | /* |
39 | * This function is responsible for capturing register states if coming | 40 | * This function is responsible for capturing register states if coming |
@@ -111,9 +112,13 @@ static inline void crash_setup_regs(struct pt_regs *newregs, | |||
111 | #ifdef __powerpc64__ | 112 | #ifdef __powerpc64__ |
112 | extern void kexec_smp_wait(void); /* get and clear naca physid, wait for | 113 | extern void kexec_smp_wait(void); /* get and clear naca physid, wait for |
113 | master to copy new code to 0 */ | 114 | master to copy new code to 0 */ |
114 | extern void __init kexec_setup(void); | ||
115 | extern int crashing_cpu; | 115 | extern int crashing_cpu; |
116 | extern void crash_send_ipi(void (*crash_ipi_callback)(struct pt_regs *)); | 116 | extern void crash_send_ipi(void (*crash_ipi_callback)(struct pt_regs *)); |
117 | extern cpumask_t cpus_in_sr; | ||
118 | static inline int kexec_sr_activated(int cpu) | ||
119 | { | ||
120 | return cpu_isset(cpu,cpus_in_sr); | ||
121 | } | ||
117 | #endif /* __powerpc64 __ */ | 122 | #endif /* __powerpc64 __ */ |
118 | 123 | ||
119 | struct kimage; | 124 | struct kimage; |
@@ -123,8 +128,22 @@ extern int default_machine_kexec_prepare(struct kimage *image); | |||
123 | extern void default_machine_crash_shutdown(struct pt_regs *regs); | 128 | extern void default_machine_crash_shutdown(struct pt_regs *regs); |
124 | 129 | ||
125 | extern void machine_kexec_simple(struct kimage *image); | 130 | extern void machine_kexec_simple(struct kimage *image); |
131 | extern void crash_kexec_secondary(struct pt_regs *regs); | ||
132 | extern int overlaps_crashkernel(unsigned long start, unsigned long size); | ||
133 | extern void reserve_crashkernel(void); | ||
134 | |||
135 | #else /* !CONFIG_KEXEC */ | ||
136 | static inline int kexec_sr_activated(int cpu) { return 0; } | ||
137 | static inline void crash_kexec_secondary(struct pt_regs *regs) { } | ||
138 | |||
139 | static inline int overlaps_crashkernel(unsigned long start, unsigned long size) | ||
140 | { | ||
141 | return 0; | ||
142 | } | ||
143 | |||
144 | static inline void reserve_crashkernel(void) { ; } | ||
126 | 145 | ||
127 | #endif /* ! __ASSEMBLY__ */ | ||
128 | #endif /* CONFIG_KEXEC */ | 146 | #endif /* CONFIG_KEXEC */ |
147 | #endif /* ! __ASSEMBLY__ */ | ||
129 | #endif /* __KERNEL__ */ | 148 | #endif /* __KERNEL__ */ |
130 | #endif /* _ASM_POWERPC_KEXEC_H */ | 149 | #endif /* _ASM_POWERPC_KEXEC_H */ |
diff --git a/include/asm-powerpc/kprobes.h b/include/asm-powerpc/kprobes.h index f466bc804f41..2d0af52c823d 100644 --- a/include/asm-powerpc/kprobes.h +++ b/include/asm-powerpc/kprobes.h | |||
@@ -50,6 +50,8 @@ typedef unsigned int kprobe_opcode_t; | |||
50 | IS_TWI(instr) || IS_TDI(instr)) | 50 | IS_TWI(instr) || IS_TDI(instr)) |
51 | 51 | ||
52 | #define ARCH_SUPPORTS_KRETPROBES | 52 | #define ARCH_SUPPORTS_KRETPROBES |
53 | #define ARCH_INACTIVE_KPROBE_COUNT 1 | ||
54 | |||
53 | void kretprobe_trampoline(void); | 55 | void kretprobe_trampoline(void); |
54 | extern void arch_remove_kprobe(struct kprobe *p); | 56 | extern void arch_remove_kprobe(struct kprobe *p); |
55 | 57 | ||
diff --git a/include/asm-powerpc/machdep.h b/include/asm-powerpc/machdep.h index 3e7d37aa4a6d..c17c13742401 100644 --- a/include/asm-powerpc/machdep.h +++ b/include/asm-powerpc/machdep.h | |||
@@ -81,6 +81,8 @@ struct machdep_calls { | |||
81 | void (*tce_free)(struct iommu_table *tbl, | 81 | void (*tce_free)(struct iommu_table *tbl, |
82 | long index, | 82 | long index, |
83 | long npages); | 83 | long npages); |
84 | unsigned long (*tce_get)(struct iommu_table *tbl, | ||
85 | long index); | ||
84 | void (*tce_flush)(struct iommu_table *tbl); | 86 | void (*tce_flush)(struct iommu_table *tbl); |
85 | void (*iommu_dev_setup)(struct pci_dev *dev); | 87 | void (*iommu_dev_setup)(struct pci_dev *dev); |
86 | void (*iommu_bus_setup)(struct pci_bus *bus); | 88 | void (*iommu_bus_setup)(struct pci_bus *bus); |
@@ -95,7 +97,7 @@ struct machdep_calls { | |||
95 | void (*show_percpuinfo)(struct seq_file *m, int i); | 97 | void (*show_percpuinfo)(struct seq_file *m, int i); |
96 | 98 | ||
97 | void (*init_IRQ)(void); | 99 | void (*init_IRQ)(void); |
98 | int (*get_irq)(struct pt_regs *); | 100 | unsigned int (*get_irq)(struct pt_regs *); |
99 | #ifdef CONFIG_KEXEC | 101 | #ifdef CONFIG_KEXEC |
100 | void (*kexec_cpu_down)(int crash_shutdown, int secondary); | 102 | void (*kexec_cpu_down)(int crash_shutdown, int secondary); |
101 | #endif | 103 | #endif |
@@ -237,6 +239,11 @@ struct machdep_calls { | |||
237 | */ | 239 | */ |
238 | void (*machine_kexec)(struct kimage *image); | 240 | void (*machine_kexec)(struct kimage *image); |
239 | #endif /* CONFIG_KEXEC */ | 241 | #endif /* CONFIG_KEXEC */ |
242 | |||
243 | #ifdef CONFIG_PCI_MSI | ||
244 | int (*enable_msi)(struct pci_dev *pdev); | ||
245 | void (*disable_msi)(struct pci_dev *pdev); | ||
246 | #endif /* CONFIG_PCI_MSI */ | ||
240 | }; | 247 | }; |
241 | 248 | ||
242 | extern void power4_idle(void); | 249 | extern void power4_idle(void); |
diff --git a/include/asm-powerpc/mmu.h b/include/asm-powerpc/mmu.h index 31f721994bd8..c3fc7a28e3cd 100644 --- a/include/asm-powerpc/mmu.h +++ b/include/asm-powerpc/mmu.h | |||
@@ -96,6 +96,8 @@ extern char initial_stab[]; | |||
96 | #define HPTE_R_FLAGS ASM_CONST(0x00000000000003ff) | 96 | #define HPTE_R_FLAGS ASM_CONST(0x00000000000003ff) |
97 | #define HPTE_R_PP ASM_CONST(0x0000000000000003) | 97 | #define HPTE_R_PP ASM_CONST(0x0000000000000003) |
98 | #define HPTE_R_N ASM_CONST(0x0000000000000004) | 98 | #define HPTE_R_N ASM_CONST(0x0000000000000004) |
99 | #define HPTE_R_C ASM_CONST(0x0000000000000080) | ||
100 | #define HPTE_R_R ASM_CONST(0x0000000000000100) | ||
99 | 101 | ||
100 | /* Values for PP (assumes Ks=0, Kp=1) */ | 102 | /* Values for PP (assumes Ks=0, Kp=1) */ |
101 | /* pp0 will always be 0 for linux */ | 103 | /* pp0 will always be 0 for linux */ |
@@ -163,6 +165,16 @@ struct mmu_psize_def | |||
163 | extern struct mmu_psize_def mmu_psize_defs[MMU_PAGE_COUNT]; | 165 | extern struct mmu_psize_def mmu_psize_defs[MMU_PAGE_COUNT]; |
164 | extern int mmu_linear_psize; | 166 | extern int mmu_linear_psize; |
165 | extern int mmu_virtual_psize; | 167 | extern int mmu_virtual_psize; |
168 | extern int mmu_vmalloc_psize; | ||
169 | extern int mmu_io_psize; | ||
170 | |||
171 | /* | ||
172 | * If the processor supports 64k normal pages but not 64k cache | ||
173 | * inhibited pages, we have to be prepared to switch processes | ||
174 | * to use 4k pages when they create cache-inhibited mappings. | ||
175 | * If this is the case, mmu_ci_restrictions will be set to 1. | ||
176 | */ | ||
177 | extern int mmu_ci_restrictions; | ||
166 | 178 | ||
167 | #ifdef CONFIG_HUGETLB_PAGE | 179 | #ifdef CONFIG_HUGETLB_PAGE |
168 | /* | 180 | /* |
@@ -226,7 +238,6 @@ extern int hash_huge_page(struct mm_struct *mm, unsigned long access, | |||
226 | unsigned long ea, unsigned long vsid, int local, | 238 | unsigned long ea, unsigned long vsid, int local, |
227 | unsigned long trap); | 239 | unsigned long trap); |
228 | 240 | ||
229 | extern void htab_finish_init(void); | ||
230 | extern int htab_bolt_mapping(unsigned long vstart, unsigned long vend, | 241 | extern int htab_bolt_mapping(unsigned long vstart, unsigned long vend, |
231 | unsigned long pstart, unsigned long mode, | 242 | unsigned long pstart, unsigned long mode, |
232 | int psize); | 243 | int psize); |
@@ -254,6 +265,7 @@ extern long iSeries_hpte_insert(unsigned long hpte_group, | |||
254 | 265 | ||
255 | extern void stabs_alloc(void); | 266 | extern void stabs_alloc(void); |
256 | extern void slb_initialize(void); | 267 | extern void slb_initialize(void); |
268 | extern void slb_flush_and_rebolt(void); | ||
257 | extern void stab_initialize(unsigned long stab); | 269 | extern void stab_initialize(unsigned long stab); |
258 | 270 | ||
259 | #endif /* __ASSEMBLY__ */ | 271 | #endif /* __ASSEMBLY__ */ |
@@ -357,9 +369,12 @@ typedef unsigned long mm_context_id_t; | |||
357 | 369 | ||
358 | typedef struct { | 370 | typedef struct { |
359 | mm_context_id_t id; | 371 | mm_context_id_t id; |
372 | u16 user_psize; /* page size index */ | ||
373 | u16 sllp; /* SLB entry page size encoding */ | ||
360 | #ifdef CONFIG_HUGETLB_PAGE | 374 | #ifdef CONFIG_HUGETLB_PAGE |
361 | u16 low_htlb_areas, high_htlb_areas; | 375 | u16 low_htlb_areas, high_htlb_areas; |
362 | #endif | 376 | #endif |
377 | unsigned long vdso_base; | ||
363 | } mm_context_t; | 378 | } mm_context_t; |
364 | 379 | ||
365 | 380 | ||
diff --git a/include/asm-powerpc/mmu_context.h b/include/asm-powerpc/mmu_context.h index 1b8a25fd48f3..083ac917bd29 100644 --- a/include/asm-powerpc/mmu_context.h +++ b/include/asm-powerpc/mmu_context.h | |||
@@ -20,20 +20,18 @@ | |||
20 | * 2 of the License, or (at your option) any later version. | 20 | * 2 of the License, or (at your option) any later version. |
21 | */ | 21 | */ |
22 | 22 | ||
23 | /* | ||
24 | * Getting into a kernel thread, there is no valid user segment, mark | ||
25 | * paca->pgdir NULL so that SLB miss on user addresses will fault | ||
26 | */ | ||
27 | static inline void enter_lazy_tlb(struct mm_struct *mm, | 23 | static inline void enter_lazy_tlb(struct mm_struct *mm, |
28 | struct task_struct *tsk) | 24 | struct task_struct *tsk) |
29 | { | 25 | { |
30 | #ifdef CONFIG_PPC_64K_PAGES | ||
31 | get_paca()->pgdir = NULL; | ||
32 | #endif /* CONFIG_PPC_64K_PAGES */ | ||
33 | } | 26 | } |
34 | 27 | ||
28 | /* | ||
29 | * The proto-VSID space has 2^35 - 1 segments available for user mappings. | ||
30 | * Each segment contains 2^28 bytes. Each context maps 2^44 bytes, | ||
31 | * so we can support 2^19-1 contexts (19 == 35 + 28 - 44). | ||
32 | */ | ||
35 | #define NO_CONTEXT 0 | 33 | #define NO_CONTEXT 0 |
36 | #define MAX_CONTEXT (0x100000-1) | 34 | #define MAX_CONTEXT ((1UL << 19) - 1) |
37 | 35 | ||
38 | extern int init_new_context(struct task_struct *tsk, struct mm_struct *mm); | 36 | extern int init_new_context(struct task_struct *tsk, struct mm_struct *mm); |
39 | extern void destroy_context(struct mm_struct *mm); | 37 | extern void destroy_context(struct mm_struct *mm); |
@@ -52,13 +50,8 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, | |||
52 | cpu_set(smp_processor_id(), next->cpu_vm_mask); | 50 | cpu_set(smp_processor_id(), next->cpu_vm_mask); |
53 | 51 | ||
54 | /* No need to flush userspace segments if the mm doesnt change */ | 52 | /* No need to flush userspace segments if the mm doesnt change */ |
55 | #ifdef CONFIG_PPC_64K_PAGES | ||
56 | if (prev == next && get_paca()->pgdir == next->pgd) | ||
57 | return; | ||
58 | #else | ||
59 | if (prev == next) | 53 | if (prev == next) |
60 | return; | 54 | return; |
61 | #endif /* CONFIG_PPC_64K_PAGES */ | ||
62 | 55 | ||
63 | #ifdef CONFIG_ALTIVEC | 56 | #ifdef CONFIG_ALTIVEC |
64 | if (cpu_has_feature(CPU_FTR_ALTIVEC)) | 57 | if (cpu_has_feature(CPU_FTR_ALTIVEC)) |
diff --git a/include/asm-powerpc/mpc86xx.h b/include/asm-powerpc/mpc86xx.h new file mode 100644 index 000000000000..f260382739fa --- /dev/null +++ b/include/asm-powerpc/mpc86xx.h | |||
@@ -0,0 +1,42 @@ | |||
1 | /* | ||
2 | * MPC86xx definitions | ||
3 | * | ||
4 | * Author: Jeff Brown | ||
5 | * | ||
6 | * Copyright 2004 Freescale Semiconductor, Inc | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License as published by the | ||
10 | * Free Software Foundation; either version 2 of the License, or (at your | ||
11 | * option) any later version. | ||
12 | */ | ||
13 | |||
14 | #ifdef __KERNEL__ | ||
15 | #ifndef __ASM_POWERPC_MPC86xx_H__ | ||
16 | #define __ASM_POWERPC_MPC86xx_H__ | ||
17 | |||
18 | #include <asm/mmu.h> | ||
19 | |||
20 | #ifdef CONFIG_PPC_86xx | ||
21 | |||
22 | #define _IO_BASE isa_io_base | ||
23 | #define _ISA_MEM_BASE isa_mem_base | ||
24 | #ifdef CONFIG_PCI | ||
25 | #define PCI_DRAM_OFFSET pci_dram_offset | ||
26 | #else | ||
27 | #define PCI_DRAM_OFFSET 0 | ||
28 | #endif | ||
29 | |||
30 | #define CPU0_BOOT_RELEASE 0x01000000 | ||
31 | #define CPU1_BOOT_RELEASE 0x02000000 | ||
32 | #define CPU_ALL_RELEASED (CPU0_BOOT_RELEASE | CPU1_BOOT_RELEASE) | ||
33 | #define MCM_PORT_CONFIG_OFFSET 0x1010 | ||
34 | |||
35 | /* Offset from CCSRBAR */ | ||
36 | #define MPC86xx_OPENPIC_OFFSET (0x40000) | ||
37 | #define MPC86xx_MCM_OFFSET (0x00000) | ||
38 | #define MPC86xx_MCM_SIZE (0x02000) | ||
39 | |||
40 | #endif /* CONFIG_PPC_86xx */ | ||
41 | #endif /* __ASM_POWERPC_MPC86xx_H__ */ | ||
42 | #endif /* __KERNEL__ */ | ||
diff --git a/include/asm-powerpc/mpic.h b/include/asm-powerpc/mpic.h index 6b9e78142f4f..eb241c99c457 100644 --- a/include/asm-powerpc/mpic.h +++ b/include/asm-powerpc/mpic.h | |||
@@ -22,6 +22,10 @@ | |||
22 | #define MPIC_GREG_GCONF_8259_PTHROU_DIS 0x20000000 | 22 | #define MPIC_GREG_GCONF_8259_PTHROU_DIS 0x20000000 |
23 | #define MPIC_GREG_GCONF_BASE_MASK 0x000fffff | 23 | #define MPIC_GREG_GCONF_BASE_MASK 0x000fffff |
24 | #define MPIC_GREG_GLOBAL_CONF_1 0x00030 | 24 | #define MPIC_GREG_GLOBAL_CONF_1 0x00030 |
25 | #define MPIC_GREG_GLOBAL_CONF_1_SIE 0x08000000 | ||
26 | #define MPIC_GREG_GLOBAL_CONF_1_CLK_RATIO_MASK 0x70000000 | ||
27 | #define MPIC_GREG_GLOBAL_CONF_1_CLK_RATIO(r) \ | ||
28 | (((r) << 28) & MPIC_GREG_GLOBAL_CONF_1_CLK_RATIO_MASK) | ||
25 | #define MPIC_GREG_VENDOR_0 0x00040 | 29 | #define MPIC_GREG_VENDOR_0 0x00040 |
26 | #define MPIC_GREG_VENDOR_1 0x00050 | 30 | #define MPIC_GREG_VENDOR_1 0x00050 |
27 | #define MPIC_GREG_VENDOR_2 0x00060 | 31 | #define MPIC_GREG_VENDOR_2 0x00060 |
@@ -110,9 +114,6 @@ | |||
110 | #define MPIC_VEC_TIMER_1 248 | 114 | #define MPIC_VEC_TIMER_1 248 |
111 | #define MPIC_VEC_TIMER_0 247 | 115 | #define MPIC_VEC_TIMER_0 247 |
112 | 116 | ||
113 | /* Type definition of the cascade handler */ | ||
114 | typedef int (*mpic_cascade_t)(struct pt_regs *regs, void *data); | ||
115 | |||
116 | #ifdef CONFIG_MPIC_BROKEN_U3 | 117 | #ifdef CONFIG_MPIC_BROKEN_U3 |
117 | /* Fixup table entry */ | 118 | /* Fixup table entry */ |
118 | struct mpic_irq_fixup | 119 | struct mpic_irq_fixup |
@@ -128,10 +129,19 @@ struct mpic_irq_fixup | |||
128 | /* The instance data of a given MPIC */ | 129 | /* The instance data of a given MPIC */ |
129 | struct mpic | 130 | struct mpic |
130 | { | 131 | { |
132 | /* The device node of the interrupt controller */ | ||
133 | struct device_node *of_node; | ||
134 | |||
135 | /* The remapper for this MPIC */ | ||
136 | struct irq_host *irqhost; | ||
137 | |||
131 | /* The "linux" controller struct */ | 138 | /* The "linux" controller struct */ |
132 | hw_irq_controller hc_irq; | 139 | struct irq_chip hc_irq; |
140 | #ifdef CONFIG_MPIC_BROKEN_U3 | ||
141 | struct irq_chip hc_ht_irq; | ||
142 | #endif | ||
133 | #ifdef CONFIG_SMP | 143 | #ifdef CONFIG_SMP |
134 | hw_irq_controller hc_ipi; | 144 | struct irq_chip hc_ipi; |
135 | #endif | 145 | #endif |
136 | const char *name; | 146 | const char *name; |
137 | /* Flags */ | 147 | /* Flags */ |
@@ -140,20 +150,12 @@ struct mpic | |||
140 | unsigned int isu_size; | 150 | unsigned int isu_size; |
141 | unsigned int isu_shift; | 151 | unsigned int isu_shift; |
142 | unsigned int isu_mask; | 152 | unsigned int isu_mask; |
143 | /* Offset of irq vector numbers */ | ||
144 | unsigned int irq_offset; | ||
145 | unsigned int irq_count; | 153 | unsigned int irq_count; |
146 | /* Offset of ipi vector numbers */ | ||
147 | unsigned int ipi_offset; | ||
148 | /* Number of sources */ | 154 | /* Number of sources */ |
149 | unsigned int num_sources; | 155 | unsigned int num_sources; |
150 | /* Number of CPUs */ | 156 | /* Number of CPUs */ |
151 | unsigned int num_cpus; | 157 | unsigned int num_cpus; |
152 | /* cascade handler */ | 158 | /* default senses array */ |
153 | mpic_cascade_t cascade; | ||
154 | void *cascade_data; | ||
155 | unsigned int cascade_vec; | ||
156 | /* senses array */ | ||
157 | unsigned char *senses; | 159 | unsigned char *senses; |
158 | unsigned int senses_count; | 160 | unsigned int senses_count; |
159 | 161 | ||
@@ -209,14 +211,11 @@ struct mpic | |||
209 | * The values in the array start at the first source of the MPIC, | 211 | * The values in the array start at the first source of the MPIC, |
210 | * that is senses[0] correspond to linux irq "irq_offset". | 212 | * that is senses[0] correspond to linux irq "irq_offset". |
211 | */ | 213 | */ |
212 | extern struct mpic *mpic_alloc(unsigned long phys_addr, | 214 | extern struct mpic *mpic_alloc(struct device_node *node, |
215 | unsigned long phys_addr, | ||
213 | unsigned int flags, | 216 | unsigned int flags, |
214 | unsigned int isu_size, | 217 | unsigned int isu_size, |
215 | unsigned int irq_offset, | ||
216 | unsigned int irq_count, | 218 | unsigned int irq_count, |
217 | unsigned int ipi_offset, | ||
218 | unsigned char *senses, | ||
219 | unsigned int senses_num, | ||
220 | const char *name); | 219 | const char *name); |
221 | 220 | ||
222 | /* Assign ISUs, to call before mpic_init() | 221 | /* Assign ISUs, to call before mpic_init() |
@@ -228,22 +227,27 @@ extern struct mpic *mpic_alloc(unsigned long phys_addr, | |||
228 | extern void mpic_assign_isu(struct mpic *mpic, unsigned int isu_num, | 227 | extern void mpic_assign_isu(struct mpic *mpic, unsigned int isu_num, |
229 | unsigned long phys_addr); | 228 | unsigned long phys_addr); |
230 | 229 | ||
230 | /* Set default sense codes | ||
231 | * | ||
232 | * @mpic: controller | ||
233 | * @senses: array of sense codes | ||
234 | * @count: size of above array | ||
235 | * | ||
236 | * Optionally provide an array (indexed on hardware interrupt numbers | ||
237 | * for this MPIC) of default sense codes for the chip. Those are linux | ||
238 | * sense codes IRQ_TYPE_* | ||
239 | * | ||
240 | * The driver gets ownership of the pointer, don't dispose of it or | ||
241 | * anything like that. __init only. | ||
242 | */ | ||
243 | extern void mpic_set_default_senses(struct mpic *mpic, u8 *senses, int count); | ||
244 | |||
245 | |||
231 | /* Initialize the controller. After this has been called, none of the above | 246 | /* Initialize the controller. After this has been called, none of the above |
232 | * should be called again for this mpic | 247 | * should be called again for this mpic |
233 | */ | 248 | */ |
234 | extern void mpic_init(struct mpic *mpic); | 249 | extern void mpic_init(struct mpic *mpic); |
235 | 250 | ||
236 | /* Setup a cascade. Currently, only one cascade is supported this | ||
237 | * way, though you can always do a normal request_irq() and add | ||
238 | * other cascades this way. You should call this _after_ having | ||
239 | * added all the ISUs | ||
240 | * | ||
241 | * @irq_no: "linux" irq number of the cascade (that is offset'ed vector) | ||
242 | * @handler: cascade handler function | ||
243 | */ | ||
244 | extern void mpic_setup_cascade(unsigned int irq_no, mpic_cascade_t hanlder, | ||
245 | void *data); | ||
246 | |||
247 | /* | 251 | /* |
248 | * All of the following functions must only be used after the | 252 | * All of the following functions must only be used after the |
249 | * ISUs have been assigned and the controller fully initialized | 253 | * ISUs have been assigned and the controller fully initialized |
@@ -280,12 +284,15 @@ extern void mpic_send_ipi(unsigned int ipi_no, unsigned int cpu_mask); | |||
280 | void smp_mpic_message_pass(int target, int msg); | 284 | void smp_mpic_message_pass(int target, int msg); |
281 | 285 | ||
282 | /* Fetch interrupt from a given mpic */ | 286 | /* Fetch interrupt from a given mpic */ |
283 | extern int mpic_get_one_irq(struct mpic *mpic, struct pt_regs *regs); | 287 | extern unsigned int mpic_get_one_irq(struct mpic *mpic, struct pt_regs *regs); |
284 | /* This one gets to the primary mpic */ | 288 | /* This one gets to the primary mpic */ |
285 | extern int mpic_get_irq(struct pt_regs *regs); | 289 | extern unsigned int mpic_get_irq(struct pt_regs *regs); |
290 | |||
291 | /* Set the EPIC clock ratio */ | ||
292 | void mpic_set_clk_ratio(struct mpic *mpic, u32 clock_ratio); | ||
286 | 293 | ||
287 | /* global mpic for pSeries */ | 294 | /* Enable/Disable EPIC serial interrupt mode */ |
288 | extern struct mpic *pSeries_mpic; | 295 | void mpic_set_serial_int(struct mpic *mpic, int enable); |
289 | 296 | ||
290 | #endif /* __KERNEL__ */ | 297 | #endif /* __KERNEL__ */ |
291 | #endif /* _ASM_POWERPC_MPIC_H */ | 298 | #endif /* _ASM_POWERPC_MPIC_H */ |
diff --git a/include/asm-powerpc/of_device.h b/include/asm-powerpc/of_device.h index 6249a7c39639..c5c0b0b3cd52 100644 --- a/include/asm-powerpc/of_device.h +++ b/include/asm-powerpc/of_device.h | |||
@@ -9,7 +9,7 @@ | |||
9 | /* | 9 | /* |
10 | * The of_platform_bus_type is a bus type used by drivers that do not | 10 | * The of_platform_bus_type is a bus type used by drivers that do not |
11 | * attach to a macio or similar bus but still use OF probing | 11 | * attach to a macio or similar bus but still use OF probing |
12 | * mecanism | 12 | * mechanism |
13 | */ | 13 | */ |
14 | extern struct bus_type of_platform_bus_type; | 14 | extern struct bus_type of_platform_bus_type; |
15 | 15 | ||
diff --git a/include/asm-powerpc/paca.h b/include/asm-powerpc/paca.h index 3c6f644d49b4..2d4585f06209 100644 --- a/include/asm-powerpc/paca.h +++ b/include/asm-powerpc/paca.h | |||
@@ -78,11 +78,9 @@ struct paca_struct { | |||
78 | u64 exmc[10]; /* used for machine checks */ | 78 | u64 exmc[10]; /* used for machine checks */ |
79 | u64 exslb[10]; /* used for SLB/segment table misses | 79 | u64 exslb[10]; /* used for SLB/segment table misses |
80 | * on the linear mapping */ | 80 | * on the linear mapping */ |
81 | #ifdef CONFIG_PPC_64K_PAGES | ||
82 | pgd_t *pgdir; | ||
83 | #endif /* CONFIG_PPC_64K_PAGES */ | ||
84 | 81 | ||
85 | mm_context_t context; | 82 | mm_context_t context; |
83 | u16 vmalloc_sllp; | ||
86 | u16 slb_cache[SLB_CACHE_ENTRIES]; | 84 | u16 slb_cache[SLB_CACHE_ENTRIES]; |
87 | u16 slb_cache_ptr; | 85 | u16 slb_cache_ptr; |
88 | 86 | ||
diff --git a/include/asm-powerpc/page.h b/include/asm-powerpc/page.h index f0469b961359..fb597b37c2a2 100644 --- a/include/asm-powerpc/page.h +++ b/include/asm-powerpc/page.h | |||
@@ -12,6 +12,7 @@ | |||
12 | 12 | ||
13 | #ifdef __KERNEL__ | 13 | #ifdef __KERNEL__ |
14 | #include <asm/asm-compat.h> | 14 | #include <asm/asm-compat.h> |
15 | #include <asm/kdump.h> | ||
15 | 16 | ||
16 | /* | 17 | /* |
17 | * On PPC32 page size is 4K. For PPC64 we support either 4K or 64K software | 18 | * On PPC32 page size is 4K. For PPC64 we support either 4K or 64K software |
@@ -51,13 +52,6 @@ | |||
51 | * If you want to test if something's a kernel address, use is_kernel_addr(). | 52 | * If you want to test if something's a kernel address, use is_kernel_addr(). |
52 | */ | 53 | */ |
53 | 54 | ||
54 | #ifdef CONFIG_CRASH_DUMP | ||
55 | /* Kdump kernel runs at 32 MB, change at your peril. */ | ||
56 | #define PHYSICAL_START 0x2000000 | ||
57 | #else | ||
58 | #define PHYSICAL_START 0x0 | ||
59 | #endif | ||
60 | |||
61 | #define PAGE_OFFSET ASM_CONST(CONFIG_KERNEL_START) | 55 | #define PAGE_OFFSET ASM_CONST(CONFIG_KERNEL_START) |
62 | #define KERNELBASE (PAGE_OFFSET + PHYSICAL_START) | 56 | #define KERNELBASE (PAGE_OFFSET + PHYSICAL_START) |
63 | 57 | ||
@@ -197,6 +191,9 @@ extern void copy_user_page(void *to, void *from, unsigned long vaddr, | |||
197 | struct page *p); | 191 | struct page *p); |
198 | extern int page_is_ram(unsigned long pfn); | 192 | extern int page_is_ram(unsigned long pfn); |
199 | 193 | ||
194 | struct vm_area_struct; | ||
195 | extern const char *arch_vma_name(struct vm_area_struct *vma); | ||
196 | |||
200 | #include <asm-generic/memory_model.h> | 197 | #include <asm-generic/memory_model.h> |
201 | #endif /* __ASSEMBLY__ */ | 198 | #endif /* __ASSEMBLY__ */ |
202 | 199 | ||
diff --git a/include/asm-powerpc/pci-bridge.h b/include/asm-powerpc/pci-bridge.h index 38de92d41a14..4f55573762bb 100644 --- a/include/asm-powerpc/pci-bridge.h +++ b/include/asm-powerpc/pci-bridge.h | |||
@@ -6,6 +6,7 @@ | |||
6 | #include <asm-ppc/pci-bridge.h> | 6 | #include <asm-ppc/pci-bridge.h> |
7 | #else | 7 | #else |
8 | 8 | ||
9 | #include <linux/config.h> | ||
9 | #include <linux/pci.h> | 10 | #include <linux/pci.h> |
10 | #include <linux/list.h> | 11 | #include <linux/list.h> |
11 | 12 | ||
@@ -22,6 +23,7 @@ | |||
22 | struct pci_controller { | 23 | struct pci_controller { |
23 | struct pci_bus *bus; | 24 | struct pci_bus *bus; |
24 | char is_dynamic; | 25 | char is_dynamic; |
26 | int node; | ||
25 | void *arch_data; | 27 | void *arch_data; |
26 | struct list_head list_node; | 28 | struct list_head list_node; |
27 | 29 | ||
@@ -78,12 +80,6 @@ struct pci_dn { | |||
78 | struct iommu_table *iommu_table; /* for phb's or bridges */ | 80 | struct iommu_table *iommu_table; /* for phb's or bridges */ |
79 | struct pci_dev *pcidev; /* back-pointer to the pci device */ | 81 | struct pci_dev *pcidev; /* back-pointer to the pci device */ |
80 | struct device_node *node; /* back-pointer to the device_node */ | 82 | struct device_node *node; /* back-pointer to the device_node */ |
81 | #ifdef CONFIG_PPC_ISERIES | ||
82 | struct list_head Device_List; | ||
83 | int Irq; /* Assigned IRQ */ | ||
84 | int Flags; /* Possible flags(disable/bist)*/ | ||
85 | u8 LogicalSlot; /* Hv Slot Index for Tces */ | ||
86 | #endif | ||
87 | u32 config_space[16]; /* saved PCI config space */ | 83 | u32 config_space[16]; /* saved PCI config space */ |
88 | }; | 84 | }; |
89 | 85 | ||
@@ -171,6 +167,12 @@ static inline unsigned long pci_address_to_pio(phys_addr_t address) | |||
171 | #define PCI_PROBE_NORMAL 0 /* Do normal PCI probing */ | 167 | #define PCI_PROBE_NORMAL 0 /* Do normal PCI probing */ |
172 | #define PCI_PROBE_DEVTREE 1 /* Instantiate from device tree */ | 168 | #define PCI_PROBE_DEVTREE 1 /* Instantiate from device tree */ |
173 | 169 | ||
170 | #ifdef CONFIG_NUMA | ||
171 | #define PHB_SET_NODE(PHB, NODE) ((PHB)->node = (NODE)) | ||
172 | #else | ||
173 | #define PHB_SET_NODE(PHB, NODE) ((PHB)->node = -1) | ||
174 | #endif | ||
175 | |||
174 | #endif /* CONFIG_PPC64 */ | 176 | #endif /* CONFIG_PPC64 */ |
175 | #endif /* __KERNEL__ */ | 177 | #endif /* __KERNEL__ */ |
176 | #endif | 178 | #endif |
diff --git a/include/asm-powerpc/pci.h b/include/asm-powerpc/pci.h index 5d2c9e6c4be2..46afd29b904e 100644 --- a/include/asm-powerpc/pci.h +++ b/include/asm-powerpc/pci.h | |||
@@ -242,7 +242,7 @@ extern pgprot_t pci_phys_mem_access_prot(struct file *file, | |||
242 | #define HAVE_ARCH_PCI_RESOURCE_TO_USER | 242 | #define HAVE_ARCH_PCI_RESOURCE_TO_USER |
243 | extern void pci_resource_to_user(const struct pci_dev *dev, int bar, | 243 | extern void pci_resource_to_user(const struct pci_dev *dev, int bar, |
244 | const struct resource *rsrc, | 244 | const struct resource *rsrc, |
245 | u64 *start, u64 *end); | 245 | resource_size_t *start, resource_size_t *end); |
246 | #endif /* CONFIG_PPC_MULTIPLATFORM || CONFIG_PPC32 */ | 246 | #endif /* CONFIG_PPC_MULTIPLATFORM || CONFIG_PPC32 */ |
247 | 247 | ||
248 | #endif /* __KERNEL__ */ | 248 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-powerpc/percpu.h b/include/asm-powerpc/percpu.h index 184a7a4d2fdf..2f2e3024fa61 100644 --- a/include/asm-powerpc/percpu.h +++ b/include/asm-powerpc/percpu.h | |||
@@ -14,6 +14,7 @@ | |||
14 | 14 | ||
15 | #define __per_cpu_offset(cpu) (paca[cpu].data_offset) | 15 | #define __per_cpu_offset(cpu) (paca[cpu].data_offset) |
16 | #define __my_cpu_offset() get_paca()->data_offset | 16 | #define __my_cpu_offset() get_paca()->data_offset |
17 | #define per_cpu_offset(x) (__per_cpu_offset(x)) | ||
17 | 18 | ||
18 | /* Separate out the type, so (int[3], foo) works. */ | 19 | /* Separate out the type, so (int[3], foo) works. */ |
19 | #define DEFINE_PER_CPU(type, name) \ | 20 | #define DEFINE_PER_CPU(type, name) \ |
@@ -22,6 +23,7 @@ | |||
22 | /* var is in discarded region: offset to particular copy we want */ | 23 | /* var is in discarded region: offset to particular copy we want */ |
23 | #define per_cpu(var, cpu) (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset(cpu))) | 24 | #define per_cpu(var, cpu) (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset(cpu))) |
24 | #define __get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, __my_cpu_offset())) | 25 | #define __get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, __my_cpu_offset())) |
26 | #define __raw_get_cpu_var(var) (*RELOC_HIDE(&per_cpu__##var, __my_cpu_offset())) | ||
25 | 27 | ||
26 | /* A macro to avoid #include hell... */ | 28 | /* A macro to avoid #include hell... */ |
27 | #define percpu_modcopy(pcpudst, src, size) \ | 29 | #define percpu_modcopy(pcpudst, src, size) \ |
@@ -41,6 +43,7 @@ extern void setup_per_cpu_areas(void); | |||
41 | 43 | ||
42 | #define per_cpu(var, cpu) (*((void)(cpu), &per_cpu__##var)) | 44 | #define per_cpu(var, cpu) (*((void)(cpu), &per_cpu__##var)) |
43 | #define __get_cpu_var(var) per_cpu__##var | 45 | #define __get_cpu_var(var) per_cpu__##var |
46 | #define __raw_get_cpu_var(var) per_cpu__##var | ||
44 | 47 | ||
45 | #endif /* SMP */ | 48 | #endif /* SMP */ |
46 | 49 | ||
diff --git a/include/asm-powerpc/pgtable-4k.h b/include/asm-powerpc/pgtable-4k.h index b2e18629932a..e7036155672e 100644 --- a/include/asm-powerpc/pgtable-4k.h +++ b/include/asm-powerpc/pgtable-4k.h | |||
@@ -78,6 +78,8 @@ | |||
78 | 78 | ||
79 | #define pte_iterate_hashed_end() } while(0) | 79 | #define pte_iterate_hashed_end() } while(0) |
80 | 80 | ||
81 | #define pte_pagesize_index(pte) MMU_PAGE_4K | ||
82 | |||
81 | /* | 83 | /* |
82 | * 4-level page tables related bits | 84 | * 4-level page tables related bits |
83 | */ | 85 | */ |
diff --git a/include/asm-powerpc/pgtable-64k.h b/include/asm-powerpc/pgtable-64k.h index 653915014dcd..4b7126c53f37 100644 --- a/include/asm-powerpc/pgtable-64k.h +++ b/include/asm-powerpc/pgtable-64k.h | |||
@@ -90,6 +90,8 @@ | |||
90 | 90 | ||
91 | #define pte_iterate_hashed_end() } while(0); } } while(0) | 91 | #define pte_iterate_hashed_end() } while(0); } } while(0) |
92 | 92 | ||
93 | #define pte_pagesize_index(pte) \ | ||
94 | (((pte) & _PAGE_COMBO)? MMU_PAGE_4K: MMU_PAGE_64K) | ||
93 | 95 | ||
94 | #endif /* __ASSEMBLY__ */ | 96 | #endif /* __ASSEMBLY__ */ |
95 | #endif /* __KERNEL__ */ | 97 | #endif /* __KERNEL__ */ |
diff --git a/include/asm-powerpc/pgtable.h b/include/asm-powerpc/pgtable.h index 964e312a1ffc..8dbf5ad8150f 100644 --- a/include/asm-powerpc/pgtable.h +++ b/include/asm-powerpc/pgtable.h | |||
@@ -46,8 +46,8 @@ struct mm_struct; | |||
46 | /* | 46 | /* |
47 | * Define the address range of the vmalloc VM area. | 47 | * Define the address range of the vmalloc VM area. |
48 | */ | 48 | */ |
49 | #define VMALLOC_START (0xD000000000000000ul) | 49 | #define VMALLOC_START ASM_CONST(0xD000000000000000) |
50 | #define VMALLOC_SIZE (0x80000000000UL) | 50 | #define VMALLOC_SIZE ASM_CONST(0x80000000000) |
51 | #define VMALLOC_END (VMALLOC_START + VMALLOC_SIZE) | 51 | #define VMALLOC_END (VMALLOC_START + VMALLOC_SIZE) |
52 | 52 | ||
53 | /* | 53 | /* |
@@ -412,12 +412,6 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, | |||
412 | flush_tlb_pending(); | 412 | flush_tlb_pending(); |
413 | } | 413 | } |
414 | pte = __pte(pte_val(pte) & ~_PAGE_HPTEFLAGS); | 414 | pte = __pte(pte_val(pte) & ~_PAGE_HPTEFLAGS); |
415 | |||
416 | #ifdef CONFIG_PPC_64K_PAGES | ||
417 | if (mmu_virtual_psize != MMU_PAGE_64K) | ||
418 | pte = __pte(pte_val(pte) | _PAGE_COMBO); | ||
419 | #endif /* CONFIG_PPC_64K_PAGES */ | ||
420 | |||
421 | *ptep = pte; | 415 | *ptep = pte; |
422 | } | 416 | } |
423 | 417 | ||
diff --git a/include/asm-powerpc/pmac_pfunc.h b/include/asm-powerpc/pmac_pfunc.h index cef61304ffc2..1330d6a58c57 100644 --- a/include/asm-powerpc/pmac_pfunc.h +++ b/include/asm-powerpc/pmac_pfunc.h | |||
@@ -205,7 +205,7 @@ extern void pmf_do_irq(struct pmf_function *func); | |||
205 | * | 205 | * |
206 | * The args array contains as many arguments as is required by the function, | 206 | * The args array contains as many arguments as is required by the function, |
207 | * this is dependent on the function you are calling, unfortunately Apple | 207 | * this is dependent on the function you are calling, unfortunately Apple |
208 | * mecanism provides no way to encode that so you have to get it right at | 208 | * mechanism provides no way to encode that so you have to get it right at |
209 | * the call site. Some functions require no args, in which case, you can | 209 | * the call site. Some functions require no args, in which case, you can |
210 | * pass NULL. | 210 | * pass NULL. |
211 | * | 211 | * |
diff --git a/include/asm-powerpc/processor.h b/include/asm-powerpc/processor.h index 93f83efeb310..22e54a2a6604 100644 --- a/include/asm-powerpc/processor.h +++ b/include/asm-powerpc/processor.h | |||
@@ -149,11 +149,11 @@ struct thread_struct { | |||
149 | unsigned int val; /* Floating point status */ | 149 | unsigned int val; /* Floating point status */ |
150 | } fpscr; | 150 | } fpscr; |
151 | int fpexc_mode; /* floating-point exception mode */ | 151 | int fpexc_mode; /* floating-point exception mode */ |
152 | unsigned int align_ctl; /* alignment handling control */ | ||
152 | #ifdef CONFIG_PPC64 | 153 | #ifdef CONFIG_PPC64 |
153 | unsigned long start_tb; /* Start purr when proc switched in */ | 154 | unsigned long start_tb; /* Start purr when proc switched in */ |
154 | unsigned long accum_tb; /* Total accumilated purr for process */ | 155 | unsigned long accum_tb; /* Total accumilated purr for process */ |
155 | #endif | 156 | #endif |
156 | unsigned long vdso_base; /* base of the vDSO library */ | ||
157 | unsigned long dabr; /* Data address breakpoint register */ | 157 | unsigned long dabr; /* Data address breakpoint register */ |
158 | #ifdef CONFIG_ALTIVEC | 158 | #ifdef CONFIG_ALTIVEC |
159 | /* Complete AltiVec register set */ | 159 | /* Complete AltiVec register set */ |
@@ -190,7 +190,7 @@ struct thread_struct { | |||
190 | .fs = KERNEL_DS, \ | 190 | .fs = KERNEL_DS, \ |
191 | .fpr = {0}, \ | 191 | .fpr = {0}, \ |
192 | .fpscr = { .val = 0, }, \ | 192 | .fpscr = { .val = 0, }, \ |
193 | .fpexc_mode = MSR_FE0|MSR_FE1, \ | 193 | .fpexc_mode = 0, \ |
194 | } | 194 | } |
195 | #endif | 195 | #endif |
196 | 196 | ||
@@ -212,6 +212,18 @@ unsigned long get_wchan(struct task_struct *p); | |||
212 | extern int get_fpexc_mode(struct task_struct *tsk, unsigned long adr); | 212 | extern int get_fpexc_mode(struct task_struct *tsk, unsigned long adr); |
213 | extern int set_fpexc_mode(struct task_struct *tsk, unsigned int val); | 213 | extern int set_fpexc_mode(struct task_struct *tsk, unsigned int val); |
214 | 214 | ||
215 | #define GET_ENDIAN(tsk, adr) get_endian((tsk), (adr)) | ||
216 | #define SET_ENDIAN(tsk, val) set_endian((tsk), (val)) | ||
217 | |||
218 | extern int get_endian(struct task_struct *tsk, unsigned long adr); | ||
219 | extern int set_endian(struct task_struct *tsk, unsigned int val); | ||
220 | |||
221 | #define GET_UNALIGN_CTL(tsk, adr) get_unalign_ctl((tsk), (adr)) | ||
222 | #define SET_UNALIGN_CTL(tsk, val) set_unalign_ctl((tsk), (val)) | ||
223 | |||
224 | extern int get_unalign_ctl(struct task_struct *tsk, unsigned long adr); | ||
225 | extern int set_unalign_ctl(struct task_struct *tsk, unsigned int val); | ||
226 | |||
215 | static inline unsigned int __unpack_fe01(unsigned long msr_bits) | 227 | static inline unsigned int __unpack_fe01(unsigned long msr_bits) |
216 | { | 228 | { |
217 | return ((msr_bits & MSR_FE0) >> 10) | ((msr_bits & MSR_FE1) >> 8); | 229 | return ((msr_bits & MSR_FE0) >> 10) | ((msr_bits & MSR_FE1) >> 8); |
diff --git a/include/asm-powerpc/prom.h b/include/asm-powerpc/prom.h index f4e2ca6fd53f..b095a285c84b 100644 --- a/include/asm-powerpc/prom.h +++ b/include/asm-powerpc/prom.h | |||
@@ -64,11 +64,6 @@ struct boot_param_header | |||
64 | typedef u32 phandle; | 64 | typedef u32 phandle; |
65 | typedef u32 ihandle; | 65 | typedef u32 ihandle; |
66 | 66 | ||
67 | struct interrupt_info { | ||
68 | int line; | ||
69 | int sense; /* +ve/-ve logic, edge or level, etc. */ | ||
70 | }; | ||
71 | |||
72 | struct property { | 67 | struct property { |
73 | char *name; | 68 | char *name; |
74 | int length; | 69 | int length; |
@@ -81,8 +76,6 @@ struct device_node { | |||
81 | char *type; | 76 | char *type; |
82 | phandle node; | 77 | phandle node; |
83 | phandle linux_phandle; | 78 | phandle linux_phandle; |
84 | int n_intrs; | ||
85 | struct interrupt_info *intrs; | ||
86 | char *full_name; | 79 | char *full_name; |
87 | 80 | ||
88 | struct property *properties; | 81 | struct property *properties; |
@@ -167,8 +160,8 @@ extern void unflatten_device_tree(void); | |||
167 | extern void early_init_devtree(void *); | 160 | extern void early_init_devtree(void *); |
168 | extern int device_is_compatible(struct device_node *device, const char *); | 161 | extern int device_is_compatible(struct device_node *device, const char *); |
169 | extern int machine_is_compatible(const char *compat); | 162 | extern int machine_is_compatible(const char *compat); |
170 | extern unsigned char *get_property(struct device_node *node, const char *name, | 163 | extern void *get_property(struct device_node *node, const char *name, |
171 | int *lenp); | 164 | int *lenp); |
172 | extern void print_properties(struct device_node *node); | 165 | extern void print_properties(struct device_node *node); |
173 | extern int prom_n_addr_cells(struct device_node* np); | 166 | extern int prom_n_addr_cells(struct device_node* np); |
174 | extern int prom_n_size_cells(struct device_node* np); | 167 | extern int prom_n_size_cells(struct device_node* np); |
@@ -204,6 +197,15 @@ extern int release_OF_resource(struct device_node* node, int index); | |||
204 | */ | 197 | */ |
205 | 198 | ||
206 | 199 | ||
200 | /* Helper to read a big number */ | ||
201 | static inline u64 of_read_number(u32 *cell, int size) | ||
202 | { | ||
203 | u64 r = 0; | ||
204 | while (size--) | ||
205 | r = (r << 32) | *(cell++); | ||
206 | return r; | ||
207 | } | ||
208 | |||
207 | /* Translate an OF address block into a CPU physical address | 209 | /* Translate an OF address block into a CPU physical address |
208 | */ | 210 | */ |
209 | #define OF_BAD_ADDR ((u64)-1) | 211 | #define OF_BAD_ADDR ((u64)-1) |
@@ -229,7 +231,94 @@ extern int of_address_to_resource(struct device_node *dev, int index, | |||
229 | extern int of_pci_address_to_resource(struct device_node *dev, int bar, | 231 | extern int of_pci_address_to_resource(struct device_node *dev, int bar, |
230 | struct resource *r); | 232 | struct resource *r); |
231 | 233 | ||
234 | /* Parse the ibm,dma-window property of an OF node into the busno, phys and | ||
235 | * size parameters. | ||
236 | */ | ||
237 | void of_parse_dma_window(struct device_node *dn, unsigned char *dma_window_prop, | ||
238 | unsigned long *busno, unsigned long *phys, unsigned long *size); | ||
239 | |||
232 | extern void kdump_move_device_tree(void); | 240 | extern void kdump_move_device_tree(void); |
233 | 241 | ||
242 | /* CPU OF node matching */ | ||
243 | struct device_node *of_get_cpu_node(int cpu, unsigned int *thread); | ||
244 | |||
245 | |||
246 | /* | ||
247 | * OF interrupt mapping | ||
248 | */ | ||
249 | |||
250 | /* This structure is returned when an interrupt is mapped. The controller | ||
251 | * field needs to be put() after use | ||
252 | */ | ||
253 | |||
254 | #define OF_MAX_IRQ_SPEC 4 /* We handle specifiers of at most 4 cells */ | ||
255 | |||
256 | struct of_irq { | ||
257 | struct device_node *controller; /* Interrupt controller node */ | ||
258 | u32 size; /* Specifier size */ | ||
259 | u32 specifier[OF_MAX_IRQ_SPEC]; /* Specifier copy */ | ||
260 | }; | ||
261 | |||
262 | /*** | ||
263 | * of_irq_map_init - Initialize the irq remapper | ||
264 | * @flags: flags defining workarounds to enable | ||
265 | * | ||
266 | * Some machines have bugs in the device-tree which require certain workarounds | ||
267 | * to be applied. Call this before any interrupt mapping attempts to enable | ||
268 | * those workarounds. | ||
269 | */ | ||
270 | #define OF_IMAP_OLDWORLD_MAC 0x00000001 | ||
271 | #define OF_IMAP_NO_PHANDLE 0x00000002 | ||
272 | |||
273 | extern void of_irq_map_init(unsigned int flags); | ||
274 | |||
275 | /*** | ||
276 | * of_irq_map_raw - Low level interrupt tree parsing | ||
277 | * @parent: the device interrupt parent | ||
278 | * @intspec: interrupt specifier ("interrupts" property of the device) | ||
279 | * @addr: address specifier (start of "reg" property of the device) | ||
280 | * @out_irq: structure of_irq filled by this function | ||
281 | * | ||
282 | * Returns 0 on success and a negative number on error | ||
283 | * | ||
284 | * This function is a low-level interrupt tree walking function. It | ||
285 | * can be used to do a partial walk with synthetized reg and interrupts | ||
286 | * properties, for example when resolving PCI interrupts when no device | ||
287 | * node exist for the parent. | ||
288 | * | ||
289 | */ | ||
290 | |||
291 | extern int of_irq_map_raw(struct device_node *parent, u32 *intspec, u32 *addr, | ||
292 | struct of_irq *out_irq); | ||
293 | |||
294 | |||
295 | /*** | ||
296 | * of_irq_map_one - Resolve an interrupt for a device | ||
297 | * @device: the device whose interrupt is to be resolved | ||
298 | * @index: index of the interrupt to resolve | ||
299 | * @out_irq: structure of_irq filled by this function | ||
300 | * | ||
301 | * This function resolves an interrupt, walking the tree, for a given | ||
302 | * device-tree node. It's the high level pendant to of_irq_map_raw(). | ||
303 | * It also implements the workarounds for OldWolrd Macs. | ||
304 | */ | ||
305 | extern int of_irq_map_one(struct device_node *device, int index, | ||
306 | struct of_irq *out_irq); | ||
307 | |||
308 | /*** | ||
309 | * of_irq_map_pci - Resolve the interrupt for a PCI device | ||
310 | * @pdev: the device whose interrupt is to be resolved | ||
311 | * @out_irq: structure of_irq filled by this function | ||
312 | * | ||
313 | * This function resolves the PCI interrupt for a given PCI device. If a | ||
314 | * device-node exists for a given pci_dev, it will use normal OF tree | ||
315 | * walking. If not, it will implement standard swizzling and walk up the | ||
316 | * PCI tree until an device-node is found, at which point it will finish | ||
317 | * resolving using the OF tree walking. | ||
318 | */ | ||
319 | struct pci_dev; | ||
320 | extern int of_irq_map_pci(struct pci_dev *pdev, struct of_irq *out_irq); | ||
321 | |||
322 | |||
234 | #endif /* __KERNEL__ */ | 323 | #endif /* __KERNEL__ */ |
235 | #endif /* _POWERPC_PROM_H */ | 324 | #endif /* _POWERPC_PROM_H */ |
diff --git a/include/asm-powerpc/ptrace.h b/include/asm-powerpc/ptrace.h index 9c550b314823..dc4cb9cc73a1 100644 --- a/include/asm-powerpc/ptrace.h +++ b/include/asm-powerpc/ptrace.h | |||
@@ -229,13 +229,13 @@ do { \ | |||
229 | #define PTRACE_GET_DEBUGREG 25 | 229 | #define PTRACE_GET_DEBUGREG 25 |
230 | #define PTRACE_SET_DEBUGREG 26 | 230 | #define PTRACE_SET_DEBUGREG 26 |
231 | 231 | ||
232 | #ifdef __powerpc64__ | ||
233 | /* Additional PTRACE requests implemented on PowerPC. */ | 232 | /* Additional PTRACE requests implemented on PowerPC. */ |
234 | #define PPC_PTRACE_GETREGS 0x99 /* Get GPRs 0 - 31 */ | 233 | #define PPC_PTRACE_GETREGS 0x99 /* Get GPRs 0 - 31 */ |
235 | #define PPC_PTRACE_SETREGS 0x98 /* Set GPRs 0 - 31 */ | 234 | #define PPC_PTRACE_SETREGS 0x98 /* Set GPRs 0 - 31 */ |
236 | #define PPC_PTRACE_GETFPREGS 0x97 /* Get FPRs 0 - 31 */ | 235 | #define PPC_PTRACE_GETFPREGS 0x97 /* Get FPRs 0 - 31 */ |
237 | #define PPC_PTRACE_SETFPREGS 0x96 /* Set FPRs 0 - 31 */ | 236 | #define PPC_PTRACE_SETFPREGS 0x96 /* Set FPRs 0 - 31 */ |
238 | 237 | ||
238 | #ifdef __powerpc64__ | ||
239 | /* Calls to trace a 64bit program from a 32bit program */ | 239 | /* Calls to trace a 64bit program from a 32bit program */ |
240 | #define PPC_PTRACE_PEEKTEXT_3264 0x95 | 240 | #define PPC_PTRACE_PEEKTEXT_3264 0x95 |
241 | #define PPC_PTRACE_PEEKDATA_3264 0x94 | 241 | #define PPC_PTRACE_PEEKDATA_3264 0x94 |
diff --git a/include/asm-powerpc/reg.h b/include/asm-powerpc/reg.h index bd467bf5cf5a..cf73475a0c69 100644 --- a/include/asm-powerpc/reg.h +++ b/include/asm-powerpc/reg.h | |||
@@ -93,8 +93,8 @@ | |||
93 | #define MSR_LE __MASK(MSR_LE_LG) /* Little Endian */ | 93 | #define MSR_LE __MASK(MSR_LE_LG) /* Little Endian */ |
94 | 94 | ||
95 | #ifdef CONFIG_PPC64 | 95 | #ifdef CONFIG_PPC64 |
96 | #define MSR_ MSR_ME | MSR_RI | MSR_IR | MSR_DR | MSR_ISF | 96 | #define MSR_ MSR_ME | MSR_RI | MSR_IR | MSR_DR | MSR_ISF |MSR_HV |
97 | #define MSR_KERNEL MSR_ | MSR_SF | MSR_HV | 97 | #define MSR_KERNEL MSR_ | MSR_SF |
98 | 98 | ||
99 | #define MSR_USER32 MSR_ | MSR_PR | MSR_EE | 99 | #define MSR_USER32 MSR_ | MSR_PR | MSR_EE |
100 | #define MSR_USER64 MSR_USER32 | MSR_SF | 100 | #define MSR_USER64 MSR_USER32 | MSR_SF |
@@ -153,7 +153,7 @@ | |||
153 | #define SPRN_DABR 0x3F5 /* Data Address Breakpoint Register */ | 153 | #define SPRN_DABR 0x3F5 /* Data Address Breakpoint Register */ |
154 | #define DABR_TRANSLATION (1UL << 2) | 154 | #define DABR_TRANSLATION (1UL << 2) |
155 | #define SPRN_DAR 0x013 /* Data Address Register */ | 155 | #define SPRN_DAR 0x013 /* Data Address Register */ |
156 | #define SPRN_DSISR 0x012 /* Data Storage Interrupt Status Register */ | 156 | #define SPRN_DSISR 0x012 /* Data Storage Interrupt Status Register */ |
157 | #define DSISR_NOHPTE 0x40000000 /* no translation found */ | 157 | #define DSISR_NOHPTE 0x40000000 /* no translation found */ |
158 | #define DSISR_PROTFAULT 0x08000000 /* protection fault */ | 158 | #define DSISR_PROTFAULT 0x08000000 /* protection fault */ |
159 | #define DSISR_ISSTORE 0x02000000 /* access was a store */ | 159 | #define DSISR_ISSTORE 0x02000000 /* access was a store */ |
@@ -258,16 +258,16 @@ | |||
258 | #define SPRN_IABR 0x3F2 /* Instruction Address Breakpoint Register */ | 258 | #define SPRN_IABR 0x3F2 /* Instruction Address Breakpoint Register */ |
259 | #define SPRN_HID4 0x3F4 /* 970 HID4 */ | 259 | #define SPRN_HID4 0x3F4 /* 970 HID4 */ |
260 | #define SPRN_HID5 0x3F6 /* 970 HID5 */ | 260 | #define SPRN_HID5 0x3F6 /* 970 HID5 */ |
261 | #define SPRN_HID6 0x3F9 /* BE HID 6 */ | 261 | #define SPRN_HID6 0x3F9 /* BE HID 6 */ |
262 | #define HID6_LB (0x0F<<12) /* Concurrent Large Page Modes */ | 262 | #define HID6_LB (0x0F<<12) /* Concurrent Large Page Modes */ |
263 | #define HID6_DLP (1<<20) /* Disable all large page modes (4K only) */ | 263 | #define HID6_DLP (1<<20) /* Disable all large page modes (4K only) */ |
264 | #define SPRN_TSC_CELL 0x399 /* Thread switch control on Cell */ | 264 | #define SPRN_TSC_CELL 0x399 /* Thread switch control on Cell */ |
265 | #define TSC_CELL_DEC_ENABLE_0 0x400000 /* Decrementer Interrupt */ | 265 | #define TSC_CELL_DEC_ENABLE_0 0x400000 /* Decrementer Interrupt */ |
266 | #define TSC_CELL_DEC_ENABLE_1 0x200000 /* Decrementer Interrupt */ | 266 | #define TSC_CELL_DEC_ENABLE_1 0x200000 /* Decrementer Interrupt */ |
267 | #define TSC_CELL_EE_ENABLE 0x100000 /* External Interrupt */ | 267 | #define TSC_CELL_EE_ENABLE 0x100000 /* External Interrupt */ |
268 | #define TSC_CELL_EE_BOOST 0x080000 /* External Interrupt Boost */ | 268 | #define TSC_CELL_EE_BOOST 0x080000 /* External Interrupt Boost */ |
269 | #define SPRN_TSC 0x3FD /* Thread switch control on others */ | 269 | #define SPRN_TSC 0x3FD /* Thread switch control on others */ |
270 | #define SPRN_TST 0x3FC /* Thread switch timeout on others */ | 270 | #define SPRN_TST 0x3FC /* Thread switch timeout on others */ |
271 | #if !defined(SPRN_IAC1) && !defined(SPRN_IAC2) | 271 | #if !defined(SPRN_IAC1) && !defined(SPRN_IAC2) |
272 | #define SPRN_IAC1 0x3F4 /* Instruction Address Compare 1 */ | 272 | #define SPRN_IAC1 0x3F4 /* Instruction Address Compare 1 */ |
273 | #define SPRN_IAC2 0x3F5 /* Instruction Address Compare 2 */ | 273 | #define SPRN_IAC2 0x3F5 /* Instruction Address Compare 2 */ |
@@ -362,7 +362,7 @@ | |||
362 | #endif | 362 | #endif |
363 | #define SPRN_PTEHI 0x3D5 /* 981 7450 PTE HI word (S/W TLB load) */ | 363 | #define SPRN_PTEHI 0x3D5 /* 981 7450 PTE HI word (S/W TLB load) */ |
364 | #define SPRN_PTELO 0x3D6 /* 982 7450 PTE LO word (S/W TLB load) */ | 364 | #define SPRN_PTELO 0x3D6 /* 982 7450 PTE LO word (S/W TLB load) */ |
365 | #define SPRN_PURR 0x135 /* Processor Utilization of Resources Reg */ | 365 | #define SPRN_PURR 0x135 /* Processor Utilization of Resources Reg */ |
366 | #define SPRN_PVR 0x11F /* Processor Version Register */ | 366 | #define SPRN_PVR 0x11F /* Processor Version Register */ |
367 | #define SPRN_RPA 0x3D6 /* Required Physical Address Register */ | 367 | #define SPRN_RPA 0x3D6 /* Required Physical Address Register */ |
368 | #define SPRN_SDA 0x3BF /* Sampled Data Address Register */ | 368 | #define SPRN_SDA 0x3BF /* Sampled Data Address Register */ |
@@ -386,6 +386,8 @@ | |||
386 | #define SRR1_WAKEMT 0x00280000 /* mtctrl */ | 386 | #define SRR1_WAKEMT 0x00280000 /* mtctrl */ |
387 | #define SRR1_WAKEDEC 0x00180000 /* Decrementer interrupt */ | 387 | #define SRR1_WAKEDEC 0x00180000 /* Decrementer interrupt */ |
388 | #define SRR1_WAKETHERM 0x00100000 /* Thermal management interrupt */ | 388 | #define SRR1_WAKETHERM 0x00100000 /* Thermal management interrupt */ |
389 | #define SPRN_HSRR0 0x13A /* Save/Restore Register 0 */ | ||
390 | #define SPRN_HSRR1 0x13B /* Save/Restore Register 1 */ | ||
389 | 391 | ||
390 | #ifndef SPRN_SVR | 392 | #ifndef SPRN_SVR |
391 | #define SPRN_SVR 0x11E /* System Version Register */ | 393 | #define SPRN_SVR 0x11E /* System Version Register */ |
@@ -443,6 +445,10 @@ | |||
443 | #define MMCRA_SIHV 0x10000000UL /* state of MSR HV when SIAR set */ | 445 | #define MMCRA_SIHV 0x10000000UL /* state of MSR HV when SIAR set */ |
444 | #define MMCRA_SIPR 0x08000000UL /* state of MSR PR when SIAR set */ | 446 | #define MMCRA_SIPR 0x08000000UL /* state of MSR PR when SIAR set */ |
445 | #define MMCRA_SAMPLE_ENABLE 0x00000001UL /* enable sampling */ | 447 | #define MMCRA_SAMPLE_ENABLE 0x00000001UL /* enable sampling */ |
448 | #define POWER6_MMCRA_SIHV 0x0000040000000000ULL | ||
449 | #define POWER6_MMCRA_SIPR 0x0000020000000000ULL | ||
450 | #define POWER6_MMCRA_THRM 0x00000020UL | ||
451 | #define POWER6_MMCRA_OTHER 0x0000000EUL | ||
446 | #define SPRN_PMC1 787 | 452 | #define SPRN_PMC1 787 |
447 | #define SPRN_PMC2 788 | 453 | #define SPRN_PMC2 788 |
448 | #define SPRN_PMC3 789 | 454 | #define SPRN_PMC3 789 |
@@ -495,6 +501,19 @@ | |||
495 | #define MMCR0_PMC2_LOADMISSTIME 0x5 | 501 | #define MMCR0_PMC2_LOADMISSTIME 0x5 |
496 | #endif | 502 | #endif |
497 | 503 | ||
504 | /* | ||
505 | * An mtfsf instruction with the L bit set. On CPUs that support this a | ||
506 | * full 64bits of FPSCR is restored and on other CPUs it is ignored. | ||
507 | * | ||
508 | * Until binutils gets the new form of mtfsf, hardwire the instruction. | ||
509 | */ | ||
510 | #ifdef CONFIG_PPC64 | ||
511 | #define MTFSF_L(REG) \ | ||
512 | .long (0xfc00058e | ((0xff) << 17) | ((REG) << 11) | (1 << 25)) | ||
513 | #else | ||
514 | #define MTFSF_L(REG) mtfsf 0xff, (REG) | ||
515 | #endif | ||
516 | |||
498 | /* Processor Version Register (PVR) field extraction */ | 517 | /* Processor Version Register (PVR) field extraction */ |
499 | 518 | ||
500 | #define PVR_VER(pvr) (((pvr) >> 16) & 0xFFFF) /* Version field */ | 519 | #define PVR_VER(pvr) (((pvr) >> 16) & 0xFFFF) /* Version field */ |
@@ -559,20 +578,20 @@ | |||
559 | 578 | ||
560 | /* 64-bit processors */ | 579 | /* 64-bit processors */ |
561 | /* XXX the prefix should be PVR_, we'll do a global sweep to fix it one day */ | 580 | /* XXX the prefix should be PVR_, we'll do a global sweep to fix it one day */ |
562 | #define PV_NORTHSTAR 0x0033 | 581 | #define PV_NORTHSTAR 0x0033 |
563 | #define PV_PULSAR 0x0034 | 582 | #define PV_PULSAR 0x0034 |
564 | #define PV_POWER4 0x0035 | 583 | #define PV_POWER4 0x0035 |
565 | #define PV_ICESTAR 0x0036 | 584 | #define PV_ICESTAR 0x0036 |
566 | #define PV_SSTAR 0x0037 | 585 | #define PV_SSTAR 0x0037 |
567 | #define PV_POWER4p 0x0038 | 586 | #define PV_POWER4p 0x0038 |
568 | #define PV_970 0x0039 | 587 | #define PV_970 0x0039 |
569 | #define PV_POWER5 0x003A | 588 | #define PV_POWER5 0x003A |
570 | #define PV_POWER5p 0x003B | 589 | #define PV_POWER5p 0x003B |
571 | #define PV_970FX 0x003C | 590 | #define PV_970FX 0x003C |
572 | #define PV_630 0x0040 | 591 | #define PV_630 0x0040 |
573 | #define PV_630p 0x0041 | 592 | #define PV_630p 0x0041 |
574 | #define PV_970MP 0x0044 | 593 | #define PV_970MP 0x0044 |
575 | #define PV_BE 0x0070 | 594 | #define PV_BE 0x0070 |
576 | 595 | ||
577 | /* | 596 | /* |
578 | * Number of entries in the SLB. If this ever changes we should handle | 597 | * Number of entries in the SLB. If this ever changes we should handle |
diff --git a/include/asm-powerpc/rtas.h b/include/asm-powerpc/rtas.h index f43c6835e62a..a33c6acffa61 100644 --- a/include/asm-powerpc/rtas.h +++ b/include/asm-powerpc/rtas.h | |||
@@ -24,6 +24,7 @@ | |||
24 | #define RTAS_RMOBUF_MAX (64 * 1024) | 24 | #define RTAS_RMOBUF_MAX (64 * 1024) |
25 | 25 | ||
26 | /* RTAS return status codes */ | 26 | /* RTAS return status codes */ |
27 | #define RTAS_NOT_SUSPENDABLE -9004 | ||
27 | #define RTAS_BUSY -2 /* RTAS Busy */ | 28 | #define RTAS_BUSY -2 /* RTAS Busy */ |
28 | #define RTAS_EXTENDED_DELAY_MIN 9900 | 29 | #define RTAS_EXTENDED_DELAY_MIN 9900 |
29 | #define RTAS_EXTENDED_DELAY_MAX 9905 | 30 | #define RTAS_EXTENDED_DELAY_MAX 9905 |
@@ -177,12 +178,11 @@ extern unsigned long rtas_get_boot_time(void); | |||
177 | extern void rtas_get_rtc_time(struct rtc_time *rtc_time); | 178 | extern void rtas_get_rtc_time(struct rtc_time *rtc_time); |
178 | extern int rtas_set_rtc_time(struct rtc_time *rtc_time); | 179 | extern int rtas_set_rtc_time(struct rtc_time *rtc_time); |
179 | 180 | ||
180 | /* Given an RTAS status code of 9900..9905 compute the hinted delay */ | 181 | extern unsigned int rtas_busy_delay_time(int status); |
181 | unsigned int rtas_extended_busy_delay_time(int status); | 182 | extern unsigned int rtas_busy_delay(int status); |
182 | static inline int rtas_is_extended_busy(int status) | 183 | |
183 | { | 184 | extern int early_init_dt_scan_rtas(unsigned long node, |
184 | return status >= 9900 && status <= 9909; | 185 | const char *uname, int depth, void *data); |
185 | } | ||
186 | 186 | ||
187 | extern void pSeries_log_error(char *buf, unsigned int err_type, int fatal); | 187 | extern void pSeries_log_error(char *buf, unsigned int err_type, int fatal); |
188 | 188 | ||
diff --git a/include/asm-powerpc/rwsem.h b/include/asm-powerpc/rwsem.h index 2c2fe9647595..e929145e1e46 100644 --- a/include/asm-powerpc/rwsem.h +++ b/include/asm-powerpc/rwsem.h | |||
@@ -28,24 +28,11 @@ struct rw_semaphore { | |||
28 | #define RWSEM_ACTIVE_WRITE_BIAS (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS) | 28 | #define RWSEM_ACTIVE_WRITE_BIAS (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS) |
29 | spinlock_t wait_lock; | 29 | spinlock_t wait_lock; |
30 | struct list_head wait_list; | 30 | struct list_head wait_list; |
31 | #if RWSEM_DEBUG | ||
32 | int debug; | ||
33 | #endif | ||
34 | }; | 31 | }; |
35 | 32 | ||
36 | /* | ||
37 | * initialisation | ||
38 | */ | ||
39 | #if RWSEM_DEBUG | ||
40 | #define __RWSEM_DEBUG_INIT , 0 | ||
41 | #else | ||
42 | #define __RWSEM_DEBUG_INIT /* */ | ||
43 | #endif | ||
44 | |||
45 | #define __RWSEM_INITIALIZER(name) \ | 33 | #define __RWSEM_INITIALIZER(name) \ |
46 | { RWSEM_UNLOCKED_VALUE, SPIN_LOCK_UNLOCKED, \ | 34 | { RWSEM_UNLOCKED_VALUE, SPIN_LOCK_UNLOCKED, \ |
47 | LIST_HEAD_INIT((name).wait_list) \ | 35 | LIST_HEAD_INIT((name).wait_list) } |
48 | __RWSEM_DEBUG_INIT } | ||
49 | 36 | ||
50 | #define DECLARE_RWSEM(name) \ | 37 | #define DECLARE_RWSEM(name) \ |
51 | struct rw_semaphore name = __RWSEM_INITIALIZER(name) | 38 | struct rw_semaphore name = __RWSEM_INITIALIZER(name) |
@@ -60,9 +47,6 @@ static inline void init_rwsem(struct rw_semaphore *sem) | |||
60 | sem->count = RWSEM_UNLOCKED_VALUE; | 47 | sem->count = RWSEM_UNLOCKED_VALUE; |
61 | spin_lock_init(&sem->wait_lock); | 48 | spin_lock_init(&sem->wait_lock); |
62 | INIT_LIST_HEAD(&sem->wait_list); | 49 | INIT_LIST_HEAD(&sem->wait_list); |
63 | #if RWSEM_DEBUG | ||
64 | sem->debug = 0; | ||
65 | #endif | ||
66 | } | 50 | } |
67 | 51 | ||
68 | /* | 52 | /* |
diff --git a/include/asm-powerpc/signal.h b/include/asm-powerpc/signal.h index a4d8f8648541..a8c7babf4950 100644 --- a/include/asm-powerpc/signal.h +++ b/include/asm-powerpc/signal.h | |||
@@ -63,7 +63,6 @@ typedef struct { | |||
63 | * SA_FLAGS values: | 63 | * SA_FLAGS values: |
64 | * | 64 | * |
65 | * SA_ONSTACK is not currently supported, but will allow sigaltstack(2). | 65 | * SA_ONSTACK is not currently supported, but will allow sigaltstack(2). |
66 | * SA_INTERRUPT is a no-op, but left due to historical reasons. Use the | ||
67 | * SA_RESTART flag to get restarting signals (which were the default long ago) | 66 | * SA_RESTART flag to get restarting signals (which were the default long ago) |
68 | * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop. | 67 | * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop. |
69 | * SA_RESETHAND clears the handler when the signal is delivered. | 68 | * SA_RESETHAND clears the handler when the signal is delivered. |
@@ -83,7 +82,6 @@ typedef struct { | |||
83 | 82 | ||
84 | #define SA_NOMASK SA_NODEFER | 83 | #define SA_NOMASK SA_NODEFER |
85 | #define SA_ONESHOT SA_RESETHAND | 84 | #define SA_ONESHOT SA_RESETHAND |
86 | #define SA_INTERRUPT 0x20000000u /* dummy -- ignored */ | ||
87 | 85 | ||
88 | #define SA_RESTORER 0x04000000U | 86 | #define SA_RESTORER 0x04000000U |
89 | 87 | ||
diff --git a/include/asm-powerpc/socket.h b/include/asm-powerpc/socket.h index e4b8177d4acc..c8b1da50e72d 100644 --- a/include/asm-powerpc/socket.h +++ b/include/asm-powerpc/socket.h | |||
@@ -55,5 +55,6 @@ | |||
55 | #define SO_ACCEPTCONN 30 | 55 | #define SO_ACCEPTCONN 30 |
56 | 56 | ||
57 | #define SO_PEERSEC 31 | 57 | #define SO_PEERSEC 31 |
58 | #define SO_PASSSEC 34 | ||
58 | 59 | ||
59 | #endif /* _ASM_POWERPC_SOCKET_H */ | 60 | #endif /* _ASM_POWERPC_SOCKET_H */ |
diff --git a/include/asm-powerpc/spu.h b/include/asm-powerpc/spu.h index 95713f397357..c02d105d8294 100644 --- a/include/asm-powerpc/spu.h +++ b/include/asm-powerpc/spu.h | |||
@@ -24,8 +24,8 @@ | |||
24 | #define _SPU_H | 24 | #define _SPU_H |
25 | #ifdef __KERNEL__ | 25 | #ifdef __KERNEL__ |
26 | 26 | ||
27 | #include <linux/kref.h> | ||
28 | #include <linux/workqueue.h> | 27 | #include <linux/workqueue.h> |
28 | #include <linux/sysdev.h> | ||
29 | 29 | ||
30 | #define LS_SIZE (256 * 1024) | 30 | #define LS_SIZE (256 * 1024) |
31 | #define LS_ADDR_MASK (LS_SIZE - 1) | 31 | #define LS_ADDR_MASK (LS_SIZE - 1) |
@@ -117,12 +117,12 @@ struct spu { | |||
117 | struct list_head sched_list; | 117 | struct list_head sched_list; |
118 | int number; | 118 | int number; |
119 | int nid; | 119 | int nid; |
120 | unsigned int irqs[3]; | ||
120 | u32 isrc; | 121 | u32 isrc; |
121 | u32 node; | 122 | u32 node; |
122 | u64 flags; | 123 | u64 flags; |
123 | u64 dar; | 124 | u64 dar; |
124 | u64 dsisr; | 125 | u64 dsisr; |
125 | struct kref kref; | ||
126 | size_t ls_size; | 126 | size_t ls_size; |
127 | unsigned int slb_replace; | 127 | unsigned int slb_replace; |
128 | struct mm_struct *mm; | 128 | struct mm_struct *mm; |
@@ -134,7 +134,6 @@ struct spu { | |||
134 | int class_0_pending; | 134 | int class_0_pending; |
135 | spinlock_t register_lock; | 135 | spinlock_t register_lock; |
136 | 136 | ||
137 | u32 stop_code; | ||
138 | void (* wbox_callback)(struct spu *spu); | 137 | void (* wbox_callback)(struct spu *spu); |
139 | void (* ibox_callback)(struct spu *spu); | 138 | void (* ibox_callback)(struct spu *spu); |
140 | void (* stop_callback)(struct spu *spu); | 139 | void (* stop_callback)(struct spu *spu); |
@@ -143,6 +142,8 @@ struct spu { | |||
143 | char irq_c0[8]; | 142 | char irq_c0[8]; |
144 | char irq_c1[8]; | 143 | char irq_c1[8]; |
145 | char irq_c2[8]; | 144 | char irq_c2[8]; |
145 | |||
146 | struct sys_device sysdev; | ||
146 | }; | 147 | }; |
147 | 148 | ||
148 | struct spu *spu_alloc(void); | 149 | struct spu *spu_alloc(void); |
@@ -181,29 +182,6 @@ static inline void unregister_spu_syscalls(struct spufs_calls *calls) | |||
181 | #endif /* MODULE */ | 182 | #endif /* MODULE */ |
182 | 183 | ||
183 | 184 | ||
184 | /* access to priv1 registers */ | ||
185 | void spu_int_mask_and(struct spu *spu, int class, u64 mask); | ||
186 | void spu_int_mask_or(struct spu *spu, int class, u64 mask); | ||
187 | void spu_int_mask_set(struct spu *spu, int class, u64 mask); | ||
188 | u64 spu_int_mask_get(struct spu *spu, int class); | ||
189 | void spu_int_stat_clear(struct spu *spu, int class, u64 stat); | ||
190 | u64 spu_int_stat_get(struct spu *spu, int class); | ||
191 | void spu_int_route_set(struct spu *spu, u64 route); | ||
192 | u64 spu_mfc_dar_get(struct spu *spu); | ||
193 | u64 spu_mfc_dsisr_get(struct spu *spu); | ||
194 | void spu_mfc_dsisr_set(struct spu *spu, u64 dsisr); | ||
195 | void spu_mfc_sdr_set(struct spu *spu, u64 sdr); | ||
196 | void spu_mfc_sr1_set(struct spu *spu, u64 sr1); | ||
197 | u64 spu_mfc_sr1_get(struct spu *spu); | ||
198 | void spu_mfc_tclass_id_set(struct spu *spu, u64 tclass_id); | ||
199 | u64 spu_mfc_tclass_id_get(struct spu *spu); | ||
200 | void spu_tlb_invalidate(struct spu *spu); | ||
201 | void spu_resource_allocation_groupID_set(struct spu *spu, u64 id); | ||
202 | u64 spu_resource_allocation_groupID_get(struct spu *spu); | ||
203 | void spu_resource_allocation_enable_set(struct spu *spu, u64 enable); | ||
204 | u64 spu_resource_allocation_enable_get(struct spu *spu); | ||
205 | |||
206 | |||
207 | /* | 185 | /* |
208 | * This defines the Local Store, Problem Area and Privlege Area of an SPU. | 186 | * This defines the Local Store, Problem Area and Privlege Area of an SPU. |
209 | */ | 187 | */ |
diff --git a/include/asm-powerpc/spu_csa.h b/include/asm-powerpc/spu_csa.h index ba18d7d4dde2..964c2d38ccb7 100644 --- a/include/asm-powerpc/spu_csa.h +++ b/include/asm-powerpc/spu_csa.h | |||
@@ -86,10 +86,18 @@ struct spu_lscsa { | |||
86 | struct spu_reg128 event_mask; | 86 | struct spu_reg128 event_mask; |
87 | struct spu_reg128 srr0; | 87 | struct spu_reg128 srr0; |
88 | struct spu_reg128 stopped_status; | 88 | struct spu_reg128 stopped_status; |
89 | struct spu_reg128 pad[119]; /* 'ls' must be page-aligned. */ | 89 | |
90 | unsigned char ls[LS_SIZE]; | 90 | /* |
91 | * 'ls' must be page-aligned on all configurations. | ||
92 | * Since we don't want to rely on having the spu-gcc | ||
93 | * installed to build the kernel and this structure | ||
94 | * is used in the SPU-side code, make it 64k-page | ||
95 | * aligned for now. | ||
96 | */ | ||
97 | unsigned char ls[LS_SIZE] __attribute__((aligned(65536))); | ||
91 | }; | 98 | }; |
92 | 99 | ||
100 | #ifndef __SPU__ | ||
93 | /* | 101 | /* |
94 | * struct spu_problem_collapsed - condensed problem state area, w/o pads. | 102 | * struct spu_problem_collapsed - condensed problem state area, w/o pads. |
95 | */ | 103 | */ |
@@ -250,6 +258,7 @@ extern int spu_restore(struct spu_state *new, struct spu *spu); | |||
250 | extern int spu_switch(struct spu_state *prev, struct spu_state *new, | 258 | extern int spu_switch(struct spu_state *prev, struct spu_state *new, |
251 | struct spu *spu); | 259 | struct spu *spu); |
252 | 260 | ||
261 | #endif /* !__SPU__ */ | ||
253 | #endif /* __KERNEL__ */ | 262 | #endif /* __KERNEL__ */ |
254 | #endif /* !__ASSEMBLY__ */ | 263 | #endif /* !__ASSEMBLY__ */ |
255 | #endif /* _SPU_CSA_H_ */ | 264 | #endif /* _SPU_CSA_H_ */ |
diff --git a/include/asm-powerpc/spu_priv1.h b/include/asm-powerpc/spu_priv1.h new file mode 100644 index 000000000000..300c458b6d06 --- /dev/null +++ b/include/asm-powerpc/spu_priv1.h | |||
@@ -0,0 +1,182 @@ | |||
1 | /* | ||
2 | * Defines an spu hypervisor abstraction layer. | ||
3 | * | ||
4 | * Copyright 2006 Sony Corp. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; version 2 of the License. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
18 | */ | ||
19 | |||
20 | #if !defined(_SPU_PRIV1_H) | ||
21 | #define _SPU_PRIV1_H | ||
22 | #if defined(__KERNEL__) | ||
23 | |||
24 | struct spu; | ||
25 | |||
26 | /* access to priv1 registers */ | ||
27 | |||
28 | struct spu_priv1_ops | ||
29 | { | ||
30 | void (*int_mask_and) (struct spu *spu, int class, u64 mask); | ||
31 | void (*int_mask_or) (struct spu *spu, int class, u64 mask); | ||
32 | void (*int_mask_set) (struct spu *spu, int class, u64 mask); | ||
33 | u64 (*int_mask_get) (struct spu *spu, int class); | ||
34 | void (*int_stat_clear) (struct spu *spu, int class, u64 stat); | ||
35 | u64 (*int_stat_get) (struct spu *spu, int class); | ||
36 | void (*cpu_affinity_set) (struct spu *spu, int cpu); | ||
37 | u64 (*mfc_dar_get) (struct spu *spu); | ||
38 | u64 (*mfc_dsisr_get) (struct spu *spu); | ||
39 | void (*mfc_dsisr_set) (struct spu *spu, u64 dsisr); | ||
40 | void (*mfc_sdr_set) (struct spu *spu, u64 sdr); | ||
41 | void (*mfc_sr1_set) (struct spu *spu, u64 sr1); | ||
42 | u64 (*mfc_sr1_get) (struct spu *spu); | ||
43 | void (*mfc_tclass_id_set) (struct spu *spu, u64 tclass_id); | ||
44 | u64 (*mfc_tclass_id_get) (struct spu *spu); | ||
45 | void (*tlb_invalidate) (struct spu *spu); | ||
46 | void (*resource_allocation_groupID_set) (struct spu *spu, u64 id); | ||
47 | u64 (*resource_allocation_groupID_get) (struct spu *spu); | ||
48 | void (*resource_allocation_enable_set) (struct spu *spu, u64 enable); | ||
49 | u64 (*resource_allocation_enable_get) (struct spu *spu); | ||
50 | }; | ||
51 | |||
52 | extern const struct spu_priv1_ops* spu_priv1_ops; | ||
53 | |||
54 | static inline void | ||
55 | spu_int_mask_and (struct spu *spu, int class, u64 mask) | ||
56 | { | ||
57 | spu_priv1_ops->int_mask_and(spu, class, mask); | ||
58 | } | ||
59 | |||
60 | static inline void | ||
61 | spu_int_mask_or (struct spu *spu, int class, u64 mask) | ||
62 | { | ||
63 | spu_priv1_ops->int_mask_or(spu, class, mask); | ||
64 | } | ||
65 | |||
66 | static inline void | ||
67 | spu_int_mask_set (struct spu *spu, int class, u64 mask) | ||
68 | { | ||
69 | spu_priv1_ops->int_mask_set(spu, class, mask); | ||
70 | } | ||
71 | |||
72 | static inline u64 | ||
73 | spu_int_mask_get (struct spu *spu, int class) | ||
74 | { | ||
75 | return spu_priv1_ops->int_mask_get(spu, class); | ||
76 | } | ||
77 | |||
78 | static inline void | ||
79 | spu_int_stat_clear (struct spu *spu, int class, u64 stat) | ||
80 | { | ||
81 | spu_priv1_ops->int_stat_clear(spu, class, stat); | ||
82 | } | ||
83 | |||
84 | static inline u64 | ||
85 | spu_int_stat_get (struct spu *spu, int class) | ||
86 | { | ||
87 | return spu_priv1_ops->int_stat_get (spu, class); | ||
88 | } | ||
89 | |||
90 | static inline void | ||
91 | spu_cpu_affinity_set (struct spu *spu, int cpu) | ||
92 | { | ||
93 | spu_priv1_ops->cpu_affinity_set(spu, cpu); | ||
94 | } | ||
95 | |||
96 | static inline u64 | ||
97 | spu_mfc_dar_get (struct spu *spu) | ||
98 | { | ||
99 | return spu_priv1_ops->mfc_dar_get(spu); | ||
100 | } | ||
101 | |||
102 | static inline u64 | ||
103 | spu_mfc_dsisr_get (struct spu *spu) | ||
104 | { | ||
105 | return spu_priv1_ops->mfc_dsisr_get(spu); | ||
106 | } | ||
107 | |||
108 | static inline void | ||
109 | spu_mfc_dsisr_set (struct spu *spu, u64 dsisr) | ||
110 | { | ||
111 | spu_priv1_ops->mfc_dsisr_set(spu, dsisr); | ||
112 | } | ||
113 | |||
114 | static inline void | ||
115 | spu_mfc_sdr_set (struct spu *spu, u64 sdr) | ||
116 | { | ||
117 | spu_priv1_ops->mfc_sdr_set(spu, sdr); | ||
118 | } | ||
119 | |||
120 | static inline void | ||
121 | spu_mfc_sr1_set (struct spu *spu, u64 sr1) | ||
122 | { | ||
123 | spu_priv1_ops->mfc_sr1_set(spu, sr1); | ||
124 | } | ||
125 | |||
126 | static inline u64 | ||
127 | spu_mfc_sr1_get (struct spu *spu) | ||
128 | { | ||
129 | return spu_priv1_ops->mfc_sr1_get(spu); | ||
130 | } | ||
131 | |||
132 | static inline void | ||
133 | spu_mfc_tclass_id_set (struct spu *spu, u64 tclass_id) | ||
134 | { | ||
135 | spu_priv1_ops->mfc_tclass_id_set(spu, tclass_id); | ||
136 | } | ||
137 | |||
138 | static inline u64 | ||
139 | spu_mfc_tclass_id_get (struct spu *spu) | ||
140 | { | ||
141 | return spu_priv1_ops->mfc_tclass_id_get(spu); | ||
142 | } | ||
143 | |||
144 | static inline void | ||
145 | spu_tlb_invalidate (struct spu *spu) | ||
146 | { | ||
147 | spu_priv1_ops->tlb_invalidate(spu); | ||
148 | } | ||
149 | |||
150 | static inline void | ||
151 | spu_resource_allocation_groupID_set (struct spu *spu, u64 id) | ||
152 | { | ||
153 | spu_priv1_ops->resource_allocation_groupID_set(spu, id); | ||
154 | } | ||
155 | |||
156 | static inline u64 | ||
157 | spu_resource_allocation_groupID_get (struct spu *spu) | ||
158 | { | ||
159 | return spu_priv1_ops->resource_allocation_groupID_get(spu); | ||
160 | } | ||
161 | |||
162 | static inline void | ||
163 | spu_resource_allocation_enable_set (struct spu *spu, u64 enable) | ||
164 | { | ||
165 | spu_priv1_ops->resource_allocation_enable_set(spu, enable); | ||
166 | } | ||
167 | |||
168 | static inline u64 | ||
169 | spu_resource_allocation_enable_get (struct spu *spu) | ||
170 | { | ||
171 | return spu_priv1_ops->resource_allocation_enable_get(spu); | ||
172 | } | ||
173 | |||
174 | /* The declarations folowing are put here for convenience | ||
175 | * and only intended to be used by the platform setup code | ||
176 | * for initializing spu_priv1_ops. | ||
177 | */ | ||
178 | |||
179 | extern const struct spu_priv1_ops spu_priv1_mmio_ops; | ||
180 | |||
181 | #endif /* __KERNEL__ */ | ||
182 | #endif | ||
diff --git a/include/asm-powerpc/systbl.h b/include/asm-powerpc/systbl.h new file mode 100644 index 000000000000..eac85ce101b6 --- /dev/null +++ b/include/asm-powerpc/systbl.h | |||
@@ -0,0 +1,306 @@ | |||
1 | /* | ||
2 | * List of powerpc syscalls. For the meaning of the _SPU suffix see | ||
3 | * arch/powerpc/platforms/cell/spu_callbacks.c | ||
4 | */ | ||
5 | |||
6 | SYSCALL(restart_syscall) | ||
7 | SYSCALL(exit) | ||
8 | PPC_SYS(fork) | ||
9 | SYSCALL_SPU(read) | ||
10 | SYSCALL_SPU(write) | ||
11 | COMPAT_SYS_SPU(open) | ||
12 | SYSCALL_SPU(close) | ||
13 | COMPAT_SYS_SPU(waitpid) | ||
14 | COMPAT_SYS_SPU(creat) | ||
15 | SYSCALL_SPU(link) | ||
16 | SYSCALL_SPU(unlink) | ||
17 | COMPAT_SYS(execve) | ||
18 | SYSCALL_SPU(chdir) | ||
19 | COMPAT_SYS_SPU(time) | ||
20 | SYSCALL_SPU(mknod) | ||
21 | SYSCALL_SPU(chmod) | ||
22 | SYSCALL_SPU(lchown) | ||
23 | SYSCALL(ni_syscall) | ||
24 | OLDSYS(stat) | ||
25 | SYSX_SPU(sys_lseek,ppc32_lseek,sys_lseek) | ||
26 | SYSCALL_SPU(getpid) | ||
27 | COMPAT_SYS(mount) | ||
28 | SYSX(sys_ni_syscall,sys_oldumount,sys_oldumount) | ||
29 | SYSCALL_SPU(setuid) | ||
30 | SYSCALL_SPU(getuid) | ||
31 | COMPAT_SYS_SPU(stime) | ||
32 | COMPAT_SYS(ptrace) | ||
33 | SYSCALL_SPU(alarm) | ||
34 | OLDSYS(fstat) | ||
35 | COMPAT_SYS(pause) | ||
36 | COMPAT_SYS(utime) | ||
37 | SYSCALL(ni_syscall) | ||
38 | SYSCALL(ni_syscall) | ||
39 | COMPAT_SYS_SPU(access) | ||
40 | COMPAT_SYS_SPU(nice) | ||
41 | SYSCALL(ni_syscall) | ||
42 | SYSCALL_SPU(sync) | ||
43 | COMPAT_SYS_SPU(kill) | ||
44 | SYSCALL_SPU(rename) | ||
45 | COMPAT_SYS_SPU(mkdir) | ||
46 | SYSCALL_SPU(rmdir) | ||
47 | SYSCALL_SPU(dup) | ||
48 | SYSCALL_SPU(pipe) | ||
49 | COMPAT_SYS_SPU(times) | ||
50 | SYSCALL(ni_syscall) | ||
51 | SYSCALL_SPU(brk) | ||
52 | SYSCALL_SPU(setgid) | ||
53 | SYSCALL_SPU(getgid) | ||
54 | SYSCALL(signal) | ||
55 | SYSCALL_SPU(geteuid) | ||
56 | SYSCALL_SPU(getegid) | ||
57 | SYSCALL(acct) | ||
58 | SYSCALL(umount) | ||
59 | SYSCALL(ni_syscall) | ||
60 | COMPAT_SYS_SPU(ioctl) | ||
61 | COMPAT_SYS_SPU(fcntl) | ||
62 | SYSCALL(ni_syscall) | ||
63 | COMPAT_SYS_SPU(setpgid) | ||
64 | SYSCALL(ni_syscall) | ||
65 | SYSX(sys_ni_syscall,sys_olduname, sys_olduname) | ||
66 | COMPAT_SYS_SPU(umask) | ||
67 | SYSCALL_SPU(chroot) | ||
68 | SYSCALL(ustat) | ||
69 | SYSCALL_SPU(dup2) | ||
70 | SYSCALL_SPU(getppid) | ||
71 | SYSCALL_SPU(getpgrp) | ||
72 | SYSCALL_SPU(setsid) | ||
73 | SYS32ONLY(sigaction) | ||
74 | SYSCALL_SPU(sgetmask) | ||
75 | COMPAT_SYS_SPU(ssetmask) | ||
76 | SYSCALL_SPU(setreuid) | ||
77 | SYSCALL_SPU(setregid) | ||
78 | SYS32ONLY(sigsuspend) | ||
79 | COMPAT_SYS(sigpending) | ||
80 | COMPAT_SYS_SPU(sethostname) | ||
81 | COMPAT_SYS_SPU(setrlimit) | ||
82 | COMPAT_SYS(old_getrlimit) | ||
83 | COMPAT_SYS_SPU(getrusage) | ||
84 | COMPAT_SYS_SPU(gettimeofday) | ||
85 | COMPAT_SYS_SPU(settimeofday) | ||
86 | COMPAT_SYS_SPU(getgroups) | ||
87 | COMPAT_SYS_SPU(setgroups) | ||
88 | SYSX(sys_ni_syscall,sys_ni_syscall,ppc_select) | ||
89 | SYSCALL_SPU(symlink) | ||
90 | OLDSYS(lstat) | ||
91 | COMPAT_SYS_SPU(readlink) | ||
92 | SYSCALL(uselib) | ||
93 | SYSCALL(swapon) | ||
94 | SYSCALL(reboot) | ||
95 | SYSX(sys_ni_syscall,old32_readdir,old_readdir) | ||
96 | SYSCALL_SPU(mmap) | ||
97 | SYSCALL_SPU(munmap) | ||
98 | SYSCALL_SPU(truncate) | ||
99 | SYSCALL_SPU(ftruncate) | ||
100 | SYSCALL_SPU(fchmod) | ||
101 | SYSCALL_SPU(fchown) | ||
102 | COMPAT_SYS_SPU(getpriority) | ||
103 | COMPAT_SYS_SPU(setpriority) | ||
104 | SYSCALL(ni_syscall) | ||
105 | COMPAT_SYS(statfs) | ||
106 | COMPAT_SYS(fstatfs) | ||
107 | SYSCALL(ni_syscall) | ||
108 | COMPAT_SYS_SPU(socketcall) | ||
109 | COMPAT_SYS_SPU(syslog) | ||
110 | COMPAT_SYS_SPU(setitimer) | ||
111 | COMPAT_SYS_SPU(getitimer) | ||
112 | COMPAT_SYS_SPU(newstat) | ||
113 | COMPAT_SYS_SPU(newlstat) | ||
114 | COMPAT_SYS_SPU(newfstat) | ||
115 | SYSX(sys_ni_syscall,sys_uname,sys_uname) | ||
116 | SYSCALL(ni_syscall) | ||
117 | SYSCALL_SPU(vhangup) | ||
118 | SYSCALL(ni_syscall) | ||
119 | SYSCALL(ni_syscall) | ||
120 | COMPAT_SYS_SPU(wait4) | ||
121 | SYSCALL(swapoff) | ||
122 | COMPAT_SYS_SPU(sysinfo) | ||
123 | COMPAT_SYS(ipc) | ||
124 | SYSCALL_SPU(fsync) | ||
125 | SYS32ONLY(sigreturn) | ||
126 | PPC_SYS(clone) | ||
127 | COMPAT_SYS_SPU(setdomainname) | ||
128 | PPC_SYS_SPU(newuname) | ||
129 | SYSCALL(ni_syscall) | ||
130 | COMPAT_SYS_SPU(adjtimex) | ||
131 | SYSCALL_SPU(mprotect) | ||
132 | SYSX(sys_ni_syscall,compat_sys_sigprocmask,sys_sigprocmask) | ||
133 | SYSCALL(ni_syscall) | ||
134 | SYSCALL(init_module) | ||
135 | SYSCALL(delete_module) | ||
136 | SYSCALL(ni_syscall) | ||
137 | SYSCALL(quotactl) | ||
138 | COMPAT_SYS_SPU(getpgid) | ||
139 | SYSCALL_SPU(fchdir) | ||
140 | SYSCALL_SPU(bdflush) | ||
141 | COMPAT_SYS(sysfs) | ||
142 | SYSX_SPU(ppc64_personality,ppc64_personality,sys_personality) | ||
143 | SYSCALL(ni_syscall) | ||
144 | SYSCALL_SPU(setfsuid) | ||
145 | SYSCALL_SPU(setfsgid) | ||
146 | SYSCALL_SPU(llseek) | ||
147 | COMPAT_SYS_SPU(getdents) | ||
148 | SYSX_SPU(sys_select,ppc32_select,ppc_select) | ||
149 | SYSCALL_SPU(flock) | ||
150 | SYSCALL_SPU(msync) | ||
151 | COMPAT_SYS_SPU(readv) | ||
152 | COMPAT_SYS_SPU(writev) | ||
153 | COMPAT_SYS_SPU(getsid) | ||
154 | SYSCALL_SPU(fdatasync) | ||
155 | COMPAT_SYS(sysctl) | ||
156 | SYSCALL_SPU(mlock) | ||
157 | SYSCALL_SPU(munlock) | ||
158 | SYSCALL_SPU(mlockall) | ||
159 | SYSCALL_SPU(munlockall) | ||
160 | COMPAT_SYS_SPU(sched_setparam) | ||
161 | COMPAT_SYS_SPU(sched_getparam) | ||
162 | COMPAT_SYS_SPU(sched_setscheduler) | ||
163 | COMPAT_SYS_SPU(sched_getscheduler) | ||
164 | SYSCALL_SPU(sched_yield) | ||
165 | COMPAT_SYS_SPU(sched_get_priority_max) | ||
166 | COMPAT_SYS_SPU(sched_get_priority_min) | ||
167 | COMPAT_SYS_SPU(sched_rr_get_interval) | ||
168 | COMPAT_SYS_SPU(nanosleep) | ||
169 | SYSCALL_SPU(mremap) | ||
170 | SYSCALL_SPU(setresuid) | ||
171 | SYSCALL_SPU(getresuid) | ||
172 | SYSCALL(ni_syscall) | ||
173 | SYSCALL_SPU(poll) | ||
174 | COMPAT_SYS(nfsservctl) | ||
175 | SYSCALL_SPU(setresgid) | ||
176 | SYSCALL_SPU(getresgid) | ||
177 | COMPAT_SYS_SPU(prctl) | ||
178 | COMPAT_SYS(rt_sigreturn) | ||
179 | COMPAT_SYS(rt_sigaction) | ||
180 | COMPAT_SYS(rt_sigprocmask) | ||
181 | COMPAT_SYS(rt_sigpending) | ||
182 | COMPAT_SYS(rt_sigtimedwait) | ||
183 | COMPAT_SYS(rt_sigqueueinfo) | ||
184 | COMPAT_SYS(rt_sigsuspend) | ||
185 | COMPAT_SYS_SPU(pread64) | ||
186 | COMPAT_SYS_SPU(pwrite64) | ||
187 | SYSCALL_SPU(chown) | ||
188 | SYSCALL_SPU(getcwd) | ||
189 | SYSCALL_SPU(capget) | ||
190 | SYSCALL_SPU(capset) | ||
191 | COMPAT_SYS(sigaltstack) | ||
192 | SYSX_SPU(sys_sendfile64,compat_sys_sendfile,sys_sendfile) | ||
193 | SYSCALL(ni_syscall) | ||
194 | SYSCALL(ni_syscall) | ||
195 | PPC_SYS(vfork) | ||
196 | COMPAT_SYS_SPU(getrlimit) | ||
197 | COMPAT_SYS_SPU(readahead) | ||
198 | SYS32ONLY(mmap2) | ||
199 | SYS32ONLY(truncate64) | ||
200 | SYS32ONLY(ftruncate64) | ||
201 | SYSX(sys_ni_syscall,sys_stat64,sys_stat64) | ||
202 | SYSX(sys_ni_syscall,sys_lstat64,sys_lstat64) | ||
203 | SYSX(sys_ni_syscall,sys_fstat64,sys_fstat64) | ||
204 | SYSCALL(pciconfig_read) | ||
205 | SYSCALL(pciconfig_write) | ||
206 | SYSCALL(pciconfig_iobase) | ||
207 | SYSCALL(ni_syscall) | ||
208 | SYSCALL_SPU(getdents64) | ||
209 | SYSCALL_SPU(pivot_root) | ||
210 | SYSX(sys_ni_syscall,compat_sys_fcntl64,sys_fcntl64) | ||
211 | SYSCALL_SPU(madvise) | ||
212 | SYSCALL_SPU(mincore) | ||
213 | SYSCALL_SPU(gettid) | ||
214 | SYSCALL_SPU(tkill) | ||
215 | SYSCALL_SPU(setxattr) | ||
216 | SYSCALL_SPU(lsetxattr) | ||
217 | SYSCALL_SPU(fsetxattr) | ||
218 | SYSCALL_SPU(getxattr) | ||
219 | SYSCALL_SPU(lgetxattr) | ||
220 | SYSCALL_SPU(fgetxattr) | ||
221 | SYSCALL_SPU(listxattr) | ||
222 | SYSCALL_SPU(llistxattr) | ||
223 | SYSCALL_SPU(flistxattr) | ||
224 | SYSCALL_SPU(removexattr) | ||
225 | SYSCALL_SPU(lremovexattr) | ||
226 | SYSCALL_SPU(fremovexattr) | ||
227 | COMPAT_SYS_SPU(futex) | ||
228 | COMPAT_SYS_SPU(sched_setaffinity) | ||
229 | COMPAT_SYS_SPU(sched_getaffinity) | ||
230 | SYSCALL(ni_syscall) | ||
231 | SYSCALL(ni_syscall) | ||
232 | SYS32ONLY(sendfile64) | ||
233 | COMPAT_SYS_SPU(io_setup) | ||
234 | SYSCALL_SPU(io_destroy) | ||
235 | COMPAT_SYS_SPU(io_getevents) | ||
236 | COMPAT_SYS_SPU(io_submit) | ||
237 | SYSCALL_SPU(io_cancel) | ||
238 | SYSCALL(set_tid_address) | ||
239 | SYSX_SPU(sys_fadvise64,ppc32_fadvise64,sys_fadvise64) | ||
240 | SYSCALL(exit_group) | ||
241 | SYSX(sys_lookup_dcookie,ppc32_lookup_dcookie,sys_lookup_dcookie) | ||
242 | SYSCALL_SPU(epoll_create) | ||
243 | SYSCALL_SPU(epoll_ctl) | ||
244 | SYSCALL_SPU(epoll_wait) | ||
245 | SYSCALL_SPU(remap_file_pages) | ||
246 | SYSX_SPU(sys_timer_create,compat_sys_timer_create,sys_timer_create) | ||
247 | COMPAT_SYS_SPU(timer_settime) | ||
248 | COMPAT_SYS_SPU(timer_gettime) | ||
249 | SYSCALL_SPU(timer_getoverrun) | ||
250 | SYSCALL_SPU(timer_delete) | ||
251 | COMPAT_SYS_SPU(clock_settime) | ||
252 | COMPAT_SYS_SPU(clock_gettime) | ||
253 | COMPAT_SYS_SPU(clock_getres) | ||
254 | COMPAT_SYS_SPU(clock_nanosleep) | ||
255 | SYSX(ppc64_swapcontext,ppc32_swapcontext,ppc_swapcontext) | ||
256 | COMPAT_SYS_SPU(tgkill) | ||
257 | COMPAT_SYS_SPU(utimes) | ||
258 | COMPAT_SYS_SPU(statfs64) | ||
259 | COMPAT_SYS_SPU(fstatfs64) | ||
260 | SYSX(sys_ni_syscall, ppc_fadvise64_64, ppc_fadvise64_64) | ||
261 | PPC_SYS_SPU(rtas) | ||
262 | OLDSYS(debug_setcontext) | ||
263 | SYSCALL(ni_syscall) | ||
264 | SYSCALL(ni_syscall) | ||
265 | COMPAT_SYS(mbind) | ||
266 | COMPAT_SYS(get_mempolicy) | ||
267 | COMPAT_SYS(set_mempolicy) | ||
268 | COMPAT_SYS(mq_open) | ||
269 | SYSCALL(mq_unlink) | ||
270 | COMPAT_SYS(mq_timedsend) | ||
271 | COMPAT_SYS(mq_timedreceive) | ||
272 | COMPAT_SYS(mq_notify) | ||
273 | COMPAT_SYS(mq_getsetattr) | ||
274 | COMPAT_SYS(kexec_load) | ||
275 | COMPAT_SYS(add_key) | ||
276 | COMPAT_SYS(request_key) | ||
277 | COMPAT_SYS(keyctl) | ||
278 | COMPAT_SYS(waitid) | ||
279 | COMPAT_SYS(ioprio_set) | ||
280 | COMPAT_SYS(ioprio_get) | ||
281 | SYSCALL(inotify_init) | ||
282 | SYSCALL(inotify_add_watch) | ||
283 | SYSCALL(inotify_rm_watch) | ||
284 | SYSCALL(spu_run) | ||
285 | SYSCALL(spu_create) | ||
286 | COMPAT_SYS(pselect6) | ||
287 | COMPAT_SYS(ppoll) | ||
288 | SYSCALL_SPU(unshare) | ||
289 | SYSCALL_SPU(splice) | ||
290 | SYSCALL_SPU(tee) | ||
291 | SYSCALL_SPU(vmsplice) | ||
292 | COMPAT_SYS_SPU(openat) | ||
293 | SYSCALL_SPU(mkdirat) | ||
294 | SYSCALL_SPU(mknodat) | ||
295 | SYSCALL_SPU(fchownat) | ||
296 | COMPAT_SYS_SPU(futimesat) | ||
297 | SYSX_SPU(sys_newfstatat, sys_fstatat64, sys_fstatat64) | ||
298 | SYSCALL_SPU(unlinkat) | ||
299 | SYSCALL_SPU(renameat) | ||
300 | SYSCALL_SPU(linkat) | ||
301 | SYSCALL_SPU(symlinkat) | ||
302 | SYSCALL_SPU(readlinkat) | ||
303 | SYSCALL_SPU(fchmodat) | ||
304 | SYSCALL_SPU(faccessat) | ||
305 | COMPAT_SYS_SPU(get_robust_list) | ||
306 | COMPAT_SYS_SPU(set_robust_list) | ||
diff --git a/include/asm-powerpc/tce.h b/include/asm-powerpc/tce.h index 6fa200ad7a7f..c9483adbf599 100644 --- a/include/asm-powerpc/tce.h +++ b/include/asm-powerpc/tce.h | |||
@@ -35,32 +35,15 @@ | |||
35 | #define TCE_PAGE_SIZE (1 << TCE_SHIFT) | 35 | #define TCE_PAGE_SIZE (1 << TCE_SHIFT) |
36 | #define TCE_PAGE_FACTOR (PAGE_SHIFT - TCE_SHIFT) | 36 | #define TCE_PAGE_FACTOR (PAGE_SHIFT - TCE_SHIFT) |
37 | 37 | ||
38 | 38 | #define TCE_ENTRY_SIZE 8 /* each TCE is 64 bits */ | |
39 | /* tce_entry | 39 | |
40 | * Used by pSeries (SMP) and iSeries/pSeries LPAR, but there it's | 40 | #define TCE_RPN_MASK 0xfffffffffful /* 40-bit RPN (4K pages) */ |
41 | * abstracted so layout is irrelevant. | 41 | #define TCE_RPN_SHIFT 12 |
42 | */ | 42 | #define TCE_VALID 0x800 /* TCE valid */ |
43 | union tce_entry { | 43 | #define TCE_ALLIO 0x400 /* TCE valid for all lpars */ |
44 | unsigned long te_word; | 44 | #define TCE_PCI_WRITE 0x2 /* write from PCI allowed */ |
45 | struct { | 45 | #define TCE_PCI_READ 0x1 /* read from PCI allowed */ |
46 | unsigned int tb_cacheBits :6; /* Cache hash bits - not used */ | 46 | #define TCE_VB_WRITE 0x1 /* write from VB allowed */ |
47 | unsigned int tb_rsvd :6; | ||
48 | unsigned long tb_rpn :40; /* Real page number */ | ||
49 | unsigned int tb_valid :1; /* Tce is valid (vb only) */ | ||
50 | unsigned int tb_allio :1; /* Tce is valid for all lps (vb only) */ | ||
51 | unsigned int tb_lpindex :8; /* LpIndex for user of TCE (vb only) */ | ||
52 | unsigned int tb_pciwr :1; /* Write allowed (pci only) */ | ||
53 | unsigned int tb_rdwr :1; /* Read allowed (pci), Write allowed (vb) */ | ||
54 | } te_bits; | ||
55 | #define te_cacheBits te_bits.tb_cacheBits | ||
56 | #define te_rpn te_bits.tb_rpn | ||
57 | #define te_valid te_bits.tb_valid | ||
58 | #define te_allio te_bits.tb_allio | ||
59 | #define te_lpindex te_bits.tb_lpindex | ||
60 | #define te_pciwr te_bits.tb_pciwr | ||
61 | #define te_rdwr te_bits.tb_rdwr | ||
62 | }; | ||
63 | |||
64 | 47 | ||
65 | #endif /* __KERNEL__ */ | 48 | #endif /* __KERNEL__ */ |
66 | #endif /* _ASM_POWERPC_TCE_H */ | 49 | #endif /* _ASM_POWERPC_TCE_H */ |
diff --git a/include/asm-powerpc/termbits.h b/include/asm-powerpc/termbits.h index ebf6055481dc..6d533b07aaf5 100644 --- a/include/asm-powerpc/termbits.h +++ b/include/asm-powerpc/termbits.h | |||
@@ -153,6 +153,7 @@ struct termios { | |||
153 | #define HUPCL 00040000 | 153 | #define HUPCL 00040000 |
154 | 154 | ||
155 | #define CLOCAL 00100000 | 155 | #define CLOCAL 00100000 |
156 | #define CMSPAR 010000000000 /* mark or space (stick) parity */ | ||
156 | #define CRTSCTS 020000000000 /* flow control */ | 157 | #define CRTSCTS 020000000000 /* flow control */ |
157 | 158 | ||
158 | /* c_lflag bits */ | 159 | /* c_lflag bits */ |
diff --git a/include/asm-powerpc/time.h b/include/asm-powerpc/time.h index 4463148c659f..dcde4410348d 100644 --- a/include/asm-powerpc/time.h +++ b/include/asm-powerpc/time.h | |||
@@ -18,8 +18,9 @@ | |||
18 | #include <linux/percpu.h> | 18 | #include <linux/percpu.h> |
19 | 19 | ||
20 | #include <asm/processor.h> | 20 | #include <asm/processor.h> |
21 | #ifdef CONFIG_PPC64 | 21 | #ifdef CONFIG_PPC_ISERIES |
22 | #include <asm/paca.h> | 22 | #include <asm/paca.h> |
23 | #include <asm/firmware.h> | ||
23 | #include <asm/iseries/hv_call.h> | 24 | #include <asm/iseries/hv_call.h> |
24 | #endif | 25 | #endif |
25 | 26 | ||
@@ -177,7 +178,8 @@ static inline void set_dec(int val) | |||
177 | #ifdef CONFIG_PPC_ISERIES | 178 | #ifdef CONFIG_PPC_ISERIES |
178 | int cur_dec; | 179 | int cur_dec; |
179 | 180 | ||
180 | if (get_lppaca()->shared_proc) { | 181 | if (firmware_has_feature(FW_FEATURE_ISERIES) && |
182 | get_lppaca()->shared_proc) { | ||
181 | get_lppaca()->virtual_decr = val; | 183 | get_lppaca()->virtual_decr = val; |
182 | cur_dec = get_dec(); | 184 | cur_dec = get_dec(); |
183 | if (cur_dec > val) | 185 | if (cur_dec > val) |
diff --git a/include/asm-powerpc/todc.h b/include/asm-powerpc/todc.h new file mode 100644 index 000000000000..60a8c39b8c11 --- /dev/null +++ b/include/asm-powerpc/todc.h | |||
@@ -0,0 +1,487 @@ | |||
1 | /* | ||
2 | * Definitions for the M48Txx and mc146818 series of Time of day/Real Time | ||
3 | * Clock chips. | ||
4 | * | ||
5 | * Author: Mark A. Greer <mgreer@mvista.com> | ||
6 | * | ||
7 | * 2001 (c) MontaVista, Software, Inc. This file is licensed under | ||
8 | * the terms of the GNU General Public License version 2. This program | ||
9 | * is licensed "as is" without any warranty of any kind, whether express | ||
10 | * or implied. | ||
11 | */ | ||
12 | |||
13 | /* | ||
14 | * Support for the M48T37/M48T59/.../mc146818 Real Time Clock chips. | ||
15 | * Purpose is to make one generic file that handles all of these chips instead | ||
16 | * of every platform implementing the same code over & over again. | ||
17 | */ | ||
18 | |||
19 | #ifndef __PPC_KERNEL_TODC_H | ||
20 | #define __PPC_KERNEL_TODC_H | ||
21 | |||
22 | typedef struct { | ||
23 | uint rtc_type; /* your particular chip */ | ||
24 | |||
25 | /* | ||
26 | * Following are the addresses of the AS0, AS1, and DATA registers | ||
27 | * of these chips. Note that these are board-specific. | ||
28 | */ | ||
29 | unsigned int nvram_as0; | ||
30 | unsigned int nvram_as1; | ||
31 | unsigned int nvram_data; | ||
32 | |||
33 | /* | ||
34 | * Define bits to stop external set of regs from changing so | ||
35 | * the chip can be read/written reliably. | ||
36 | */ | ||
37 | unsigned char enable_read; | ||
38 | unsigned char enable_write; | ||
39 | |||
40 | /* | ||
41 | * Following is the number of AS0 address bits. This is normally | ||
42 | * 8 but some bad hardware routes address lines incorrectly. | ||
43 | */ | ||
44 | int as0_bits; | ||
45 | |||
46 | int nvram_size; /* Size of NVRAM on chip */ | ||
47 | int sw_flags; /* Software control flags */ | ||
48 | |||
49 | /* Following are the register offsets for the particular chip */ | ||
50 | int year; | ||
51 | int month; | ||
52 | int day_of_month; | ||
53 | int day_of_week; | ||
54 | int hours; | ||
55 | int minutes; | ||
56 | int seconds; | ||
57 | int control_b; | ||
58 | int control_a; | ||
59 | int watchdog; | ||
60 | int interrupts; | ||
61 | int alarm_date; | ||
62 | int alarm_hour; | ||
63 | int alarm_minutes; | ||
64 | int alarm_seconds; | ||
65 | int century; | ||
66 | int flags; | ||
67 | |||
68 | /* | ||
69 | * Some RTC chips have their NVRAM buried behind a addr/data pair of | ||
70 | * regs on the first level/clock registers. The following fields | ||
71 | * are the addresses for those addr/data regs. | ||
72 | */ | ||
73 | int nvram_addr_reg; | ||
74 | int nvram_data_reg; | ||
75 | } todc_info_t; | ||
76 | |||
77 | /* | ||
78 | * Define the types of TODC/RTC variants that are supported in | ||
79 | * arch/ppc/kernel/todc_time.c | ||
80 | * Make a new one of these for any chip somehow differs from what's already | ||
81 | * defined. That way, if you ever need to put in code to touch those | ||
82 | * bits/registers in todc_time.c, you can put it inside an | ||
83 | * 'if (todc_info->rtc_type == TODC_TYPE_XXX)' so you won't break | ||
84 | * anyone else. | ||
85 | */ | ||
86 | #define TODC_TYPE_MK48T35 1 | ||
87 | #define TODC_TYPE_MK48T37 2 | ||
88 | #define TODC_TYPE_MK48T59 3 | ||
89 | #define TODC_TYPE_DS1693 4 /* Dallas DS1693 RTC */ | ||
90 | #define TODC_TYPE_DS1743 5 /* Dallas DS1743 RTC */ | ||
91 | #define TODC_TYPE_DS1746 6 /* Dallas DS1746 RTC */ | ||
92 | #define TODC_TYPE_DS1747 7 /* Dallas DS1747 RTC */ | ||
93 | #define TODC_TYPE_DS1501 8 /* Dallas DS1501 RTC */ | ||
94 | #define TODC_TYPE_DS1643 9 /* Dallas DS1643 RTC */ | ||
95 | #define TODC_TYPE_PC97307 10 /* PC97307 internal RTC */ | ||
96 | #define TODC_TYPE_DS1557 11 /* Dallas DS1557 RTC */ | ||
97 | #define TODC_TYPE_DS17285 12 /* Dallas DS17285 RTC */ | ||
98 | #define TODC_TYPE_DS1553 13 /* Dallas DS1553 RTC */ | ||
99 | #define TODC_TYPE_MC146818 100 /* Leave room for m48txx's */ | ||
100 | |||
101 | /* | ||
102 | * Bit to clear/set to enable reads/writes to the chip | ||
103 | */ | ||
104 | #define TODC_MK48TXX_CNTL_A_R 0x40 | ||
105 | #define TODC_MK48TXX_CNTL_A_W 0x80 | ||
106 | #define TODC_MK48TXX_DAY_CB 0x80 | ||
107 | |||
108 | #define TODC_DS1501_CNTL_B_TE 0x80 | ||
109 | |||
110 | /* | ||
111 | * Define flag bits used by todc routines. | ||
112 | */ | ||
113 | #define TODC_FLAG_2_LEVEL_NVRAM 0x00000001 | ||
114 | |||
115 | /* | ||
116 | * Define the values for the various RTC's that should to into the todc_info | ||
117 | * table. | ||
118 | * Note: The XXX_NVRAM_SIZE, XXX_NVRAM_ADDR_REG, and XXX_NVRAM_DATA_REG only | ||
119 | * matter if XXX_SW_FLAGS has TODC_FLAG_2_LEVEL_NVRAM set. | ||
120 | */ | ||
121 | #define TODC_TYPE_MK48T35_NVRAM_SIZE 0x7ff8 | ||
122 | #define TODC_TYPE_MK48T35_SW_FLAGS 0 | ||
123 | #define TODC_TYPE_MK48T35_YEAR 0x7fff | ||
124 | #define TODC_TYPE_MK48T35_MONTH 0x7ffe | ||
125 | #define TODC_TYPE_MK48T35_DOM 0x7ffd /* Day of Month */ | ||
126 | #define TODC_TYPE_MK48T35_DOW 0x7ffc /* Day of Week */ | ||
127 | #define TODC_TYPE_MK48T35_HOURS 0x7ffb | ||
128 | #define TODC_TYPE_MK48T35_MINUTES 0x7ffa | ||
129 | #define TODC_TYPE_MK48T35_SECONDS 0x7ff9 | ||
130 | #define TODC_TYPE_MK48T35_CNTL_B 0x7ff9 | ||
131 | #define TODC_TYPE_MK48T35_CNTL_A 0x7ff8 | ||
132 | #define TODC_TYPE_MK48T35_WATCHDOG 0x0000 | ||
133 | #define TODC_TYPE_MK48T35_INTERRUPTS 0x0000 | ||
134 | #define TODC_TYPE_MK48T35_ALARM_DATE 0x0000 | ||
135 | #define TODC_TYPE_MK48T35_ALARM_HOUR 0x0000 | ||
136 | #define TODC_TYPE_MK48T35_ALARM_MINUTES 0x0000 | ||
137 | #define TODC_TYPE_MK48T35_ALARM_SECONDS 0x0000 | ||
138 | #define TODC_TYPE_MK48T35_CENTURY 0x0000 | ||
139 | #define TODC_TYPE_MK48T35_FLAGS 0x0000 | ||
140 | #define TODC_TYPE_MK48T35_NVRAM_ADDR_REG 0 | ||
141 | #define TODC_TYPE_MK48T35_NVRAM_DATA_REG 0 | ||
142 | |||
143 | #define TODC_TYPE_MK48T37_NVRAM_SIZE 0x7ff0 | ||
144 | #define TODC_TYPE_MK48T37_SW_FLAGS 0 | ||
145 | #define TODC_TYPE_MK48T37_YEAR 0x7fff | ||
146 | #define TODC_TYPE_MK48T37_MONTH 0x7ffe | ||
147 | #define TODC_TYPE_MK48T37_DOM 0x7ffd /* Day of Month */ | ||
148 | #define TODC_TYPE_MK48T37_DOW 0x7ffc /* Day of Week */ | ||
149 | #define TODC_TYPE_MK48T37_HOURS 0x7ffb | ||
150 | #define TODC_TYPE_MK48T37_MINUTES 0x7ffa | ||
151 | #define TODC_TYPE_MK48T37_SECONDS 0x7ff9 | ||
152 | #define TODC_TYPE_MK48T37_CNTL_B 0x7ff9 | ||
153 | #define TODC_TYPE_MK48T37_CNTL_A 0x7ff8 | ||
154 | #define TODC_TYPE_MK48T37_WATCHDOG 0x7ff7 | ||
155 | #define TODC_TYPE_MK48T37_INTERRUPTS 0x7ff6 | ||
156 | #define TODC_TYPE_MK48T37_ALARM_DATE 0x7ff5 | ||
157 | #define TODC_TYPE_MK48T37_ALARM_HOUR 0x7ff4 | ||
158 | #define TODC_TYPE_MK48T37_ALARM_MINUTES 0x7ff3 | ||
159 | #define TODC_TYPE_MK48T37_ALARM_SECONDS 0x7ff2 | ||
160 | #define TODC_TYPE_MK48T37_CENTURY 0x7ff1 | ||
161 | #define TODC_TYPE_MK48T37_FLAGS 0x7ff0 | ||
162 | #define TODC_TYPE_MK48T37_NVRAM_ADDR_REG 0 | ||
163 | #define TODC_TYPE_MK48T37_NVRAM_DATA_REG 0 | ||
164 | |||
165 | #define TODC_TYPE_MK48T59_NVRAM_SIZE 0x1ff0 | ||
166 | #define TODC_TYPE_MK48T59_SW_FLAGS 0 | ||
167 | #define TODC_TYPE_MK48T59_YEAR 0x1fff | ||
168 | #define TODC_TYPE_MK48T59_MONTH 0x1ffe | ||
169 | #define TODC_TYPE_MK48T59_DOM 0x1ffd /* Day of Month */ | ||
170 | #define TODC_TYPE_MK48T59_DOW 0x1ffc /* Day of Week */ | ||
171 | #define TODC_TYPE_MK48T59_HOURS 0x1ffb | ||
172 | #define TODC_TYPE_MK48T59_MINUTES 0x1ffa | ||
173 | #define TODC_TYPE_MK48T59_SECONDS 0x1ff9 | ||
174 | #define TODC_TYPE_MK48T59_CNTL_B 0x1ff9 | ||
175 | #define TODC_TYPE_MK48T59_CNTL_A 0x1ff8 | ||
176 | #define TODC_TYPE_MK48T59_WATCHDOG 0x1fff | ||
177 | #define TODC_TYPE_MK48T59_INTERRUPTS 0x1fff | ||
178 | #define TODC_TYPE_MK48T59_ALARM_DATE 0x1fff | ||
179 | #define TODC_TYPE_MK48T59_ALARM_HOUR 0x1fff | ||
180 | #define TODC_TYPE_MK48T59_ALARM_MINUTES 0x1fff | ||
181 | #define TODC_TYPE_MK48T59_ALARM_SECONDS 0x1fff | ||
182 | #define TODC_TYPE_MK48T59_CENTURY 0x1fff | ||
183 | #define TODC_TYPE_MK48T59_FLAGS 0x1fff | ||
184 | #define TODC_TYPE_MK48T59_NVRAM_ADDR_REG 0 | ||
185 | #define TODC_TYPE_MK48T59_NVRAM_DATA_REG 0 | ||
186 | |||
187 | #define TODC_TYPE_DS1501_NVRAM_SIZE 0x100 | ||
188 | #define TODC_TYPE_DS1501_SW_FLAGS TODC_FLAG_2_LEVEL_NVRAM | ||
189 | #define TODC_TYPE_DS1501_YEAR (TODC_TYPE_DS1501_NVRAM_SIZE + 0x06) | ||
190 | #define TODC_TYPE_DS1501_MONTH (TODC_TYPE_DS1501_NVRAM_SIZE + 0x05) | ||
191 | #define TODC_TYPE_DS1501_DOM (TODC_TYPE_DS1501_NVRAM_SIZE + 0x04) | ||
192 | #define TODC_TYPE_DS1501_DOW (TODC_TYPE_DS1501_NVRAM_SIZE + 0x03) | ||
193 | #define TODC_TYPE_DS1501_HOURS (TODC_TYPE_DS1501_NVRAM_SIZE + 0x02) | ||
194 | #define TODC_TYPE_DS1501_MINUTES (TODC_TYPE_DS1501_NVRAM_SIZE + 0x01) | ||
195 | #define TODC_TYPE_DS1501_SECONDS (TODC_TYPE_DS1501_NVRAM_SIZE + 0x00) | ||
196 | #define TODC_TYPE_DS1501_CNTL_B (TODC_TYPE_DS1501_NVRAM_SIZE + 0x0f) | ||
197 | #define TODC_TYPE_DS1501_CNTL_A (TODC_TYPE_DS1501_NVRAM_SIZE + 0x0f) | ||
198 | #define TODC_TYPE_DS1501_WATCHDOG (TODC_TYPE_DS1501_NVRAM_SIZE + 0xff) | ||
199 | #define TODC_TYPE_DS1501_INTERRUPTS (TODC_TYPE_DS1501_NVRAM_SIZE + 0xff) | ||
200 | #define TODC_TYPE_DS1501_ALARM_DATE (TODC_TYPE_DS1501_NVRAM_SIZE + 0x0b) | ||
201 | #define TODC_TYPE_DS1501_ALARM_HOUR (TODC_TYPE_DS1501_NVRAM_SIZE + 0x0a) | ||
202 | #define TODC_TYPE_DS1501_ALARM_MINUTES (TODC_TYPE_DS1501_NVRAM_SIZE + 0x09) | ||
203 | #define TODC_TYPE_DS1501_ALARM_SECONDS (TODC_TYPE_DS1501_NVRAM_SIZE + 0x08) | ||
204 | #define TODC_TYPE_DS1501_CENTURY (TODC_TYPE_DS1501_NVRAM_SIZE + 0x07) | ||
205 | #define TODC_TYPE_DS1501_FLAGS (TODC_TYPE_DS1501_NVRAM_SIZE + 0xff) | ||
206 | #define TODC_TYPE_DS1501_NVRAM_ADDR_REG 0x10 | ||
207 | #define TODC_TYPE_DS1501_NVRAM_DATA_REG 0x13 | ||
208 | |||
209 | #define TODC_TYPE_DS1553_NVRAM_SIZE 0x1ff0 | ||
210 | #define TODC_TYPE_DS1553_SW_FLAGS 0 | ||
211 | #define TODC_TYPE_DS1553_YEAR 0x1fff | ||
212 | #define TODC_TYPE_DS1553_MONTH 0x1ffe | ||
213 | #define TODC_TYPE_DS1553_DOM 0x1ffd /* Day of Month */ | ||
214 | #define TODC_TYPE_DS1553_DOW 0x1ffc /* Day of Week */ | ||
215 | #define TODC_TYPE_DS1553_HOURS 0x1ffb | ||
216 | #define TODC_TYPE_DS1553_MINUTES 0x1ffa | ||
217 | #define TODC_TYPE_DS1553_SECONDS 0x1ff9 | ||
218 | #define TODC_TYPE_DS1553_CNTL_B 0x1ff9 | ||
219 | #define TODC_TYPE_DS1553_CNTL_A 0x1ff8 /* control_a R/W regs */ | ||
220 | #define TODC_TYPE_DS1553_WATCHDOG 0x1ff7 | ||
221 | #define TODC_TYPE_DS1553_INTERRUPTS 0x1ff6 | ||
222 | #define TODC_TYPE_DS1553_ALARM_DATE 0x1ff5 | ||
223 | #define TODC_TYPE_DS1553_ALARM_HOUR 0x1ff4 | ||
224 | #define TODC_TYPE_DS1553_ALARM_MINUTES 0x1ff3 | ||
225 | #define TODC_TYPE_DS1553_ALARM_SECONDS 0x1ff2 | ||
226 | #define TODC_TYPE_DS1553_CENTURY 0x1ff8 | ||
227 | #define TODC_TYPE_DS1553_FLAGS 0x1ff0 | ||
228 | #define TODC_TYPE_DS1553_NVRAM_ADDR_REG 0 | ||
229 | #define TODC_TYPE_DS1553_NVRAM_DATA_REG 0 | ||
230 | |||
231 | #define TODC_TYPE_DS1557_NVRAM_SIZE 0x7fff0 | ||
232 | #define TODC_TYPE_DS1557_SW_FLAGS 0 | ||
233 | #define TODC_TYPE_DS1557_YEAR 0x7ffff | ||
234 | #define TODC_TYPE_DS1557_MONTH 0x7fffe | ||
235 | #define TODC_TYPE_DS1557_DOM 0x7fffd /* Day of Month */ | ||
236 | #define TODC_TYPE_DS1557_DOW 0x7fffc /* Day of Week */ | ||
237 | #define TODC_TYPE_DS1557_HOURS 0x7fffb | ||
238 | #define TODC_TYPE_DS1557_MINUTES 0x7fffa | ||
239 | #define TODC_TYPE_DS1557_SECONDS 0x7fff9 | ||
240 | #define TODC_TYPE_DS1557_CNTL_B 0x7fff9 | ||
241 | #define TODC_TYPE_DS1557_CNTL_A 0x7fff8 /* control_a R/W regs */ | ||
242 | #define TODC_TYPE_DS1557_WATCHDOG 0x7fff7 | ||
243 | #define TODC_TYPE_DS1557_INTERRUPTS 0x7fff6 | ||
244 | #define TODC_TYPE_DS1557_ALARM_DATE 0x7fff5 | ||
245 | #define TODC_TYPE_DS1557_ALARM_HOUR 0x7fff4 | ||
246 | #define TODC_TYPE_DS1557_ALARM_MINUTES 0x7fff3 | ||
247 | #define TODC_TYPE_DS1557_ALARM_SECONDS 0x7fff2 | ||
248 | #define TODC_TYPE_DS1557_CENTURY 0x7fff8 | ||
249 | #define TODC_TYPE_DS1557_FLAGS 0x7fff0 | ||
250 | #define TODC_TYPE_DS1557_NVRAM_ADDR_REG 0 | ||
251 | #define TODC_TYPE_DS1557_NVRAM_DATA_REG 0 | ||
252 | |||
253 | #define TODC_TYPE_DS1643_NVRAM_SIZE 0x1ff8 | ||
254 | #define TODC_TYPE_DS1643_SW_FLAGS 0 | ||
255 | #define TODC_TYPE_DS1643_YEAR 0x1fff | ||
256 | #define TODC_TYPE_DS1643_MONTH 0x1ffe | ||
257 | #define TODC_TYPE_DS1643_DOM 0x1ffd /* Day of Month */ | ||
258 | #define TODC_TYPE_DS1643_DOW 0x1ffc /* Day of Week */ | ||
259 | #define TODC_TYPE_DS1643_HOURS 0x1ffb | ||
260 | #define TODC_TYPE_DS1643_MINUTES 0x1ffa | ||
261 | #define TODC_TYPE_DS1643_SECONDS 0x1ff9 | ||
262 | #define TODC_TYPE_DS1643_CNTL_B 0x1ff9 | ||
263 | #define TODC_TYPE_DS1643_CNTL_A 0x1ff8 /* control_a R/W regs */ | ||
264 | #define TODC_TYPE_DS1643_WATCHDOG 0x1fff | ||
265 | #define TODC_TYPE_DS1643_INTERRUPTS 0x1fff | ||
266 | #define TODC_TYPE_DS1643_ALARM_DATE 0x1fff | ||
267 | #define TODC_TYPE_DS1643_ALARM_HOUR 0x1fff | ||
268 | #define TODC_TYPE_DS1643_ALARM_MINUTES 0x1fff | ||
269 | #define TODC_TYPE_DS1643_ALARM_SECONDS 0x1fff | ||
270 | #define TODC_TYPE_DS1643_CENTURY 0x1ff8 | ||
271 | #define TODC_TYPE_DS1643_FLAGS 0x1fff | ||
272 | #define TODC_TYPE_DS1643_NVRAM_ADDR_REG 0 | ||
273 | #define TODC_TYPE_DS1643_NVRAM_DATA_REG 0 | ||
274 | |||
275 | #define TODC_TYPE_DS1693_NVRAM_SIZE 0 /* Not handled yet */ | ||
276 | #define TODC_TYPE_DS1693_SW_FLAGS 0 | ||
277 | #define TODC_TYPE_DS1693_YEAR 0x09 | ||
278 | #define TODC_TYPE_DS1693_MONTH 0x08 | ||
279 | #define TODC_TYPE_DS1693_DOM 0x07 /* Day of Month */ | ||
280 | #define TODC_TYPE_DS1693_DOW 0x06 /* Day of Week */ | ||
281 | #define TODC_TYPE_DS1693_HOURS 0x04 | ||
282 | #define TODC_TYPE_DS1693_MINUTES 0x02 | ||
283 | #define TODC_TYPE_DS1693_SECONDS 0x00 | ||
284 | #define TODC_TYPE_DS1693_CNTL_B 0x0b | ||
285 | #define TODC_TYPE_DS1693_CNTL_A 0x0a | ||
286 | #define TODC_TYPE_DS1693_WATCHDOG 0xff | ||
287 | #define TODC_TYPE_DS1693_INTERRUPTS 0xff | ||
288 | #define TODC_TYPE_DS1693_ALARM_DATE 0x49 | ||
289 | #define TODC_TYPE_DS1693_ALARM_HOUR 0x05 | ||
290 | #define TODC_TYPE_DS1693_ALARM_MINUTES 0x03 | ||
291 | #define TODC_TYPE_DS1693_ALARM_SECONDS 0x01 | ||
292 | #define TODC_TYPE_DS1693_CENTURY 0x48 | ||
293 | #define TODC_TYPE_DS1693_FLAGS 0xff | ||
294 | #define TODC_TYPE_DS1693_NVRAM_ADDR_REG 0 | ||
295 | #define TODC_TYPE_DS1693_NVRAM_DATA_REG 0 | ||
296 | |||
297 | #define TODC_TYPE_DS1743_NVRAM_SIZE 0x1ff8 | ||
298 | #define TODC_TYPE_DS1743_SW_FLAGS 0 | ||
299 | #define TODC_TYPE_DS1743_YEAR 0x1fff | ||
300 | #define TODC_TYPE_DS1743_MONTH 0x1ffe | ||
301 | #define TODC_TYPE_DS1743_DOM 0x1ffd /* Day of Month */ | ||
302 | #define TODC_TYPE_DS1743_DOW 0x1ffc /* Day of Week */ | ||
303 | #define TODC_TYPE_DS1743_HOURS 0x1ffb | ||
304 | #define TODC_TYPE_DS1743_MINUTES 0x1ffa | ||
305 | #define TODC_TYPE_DS1743_SECONDS 0x1ff9 | ||
306 | #define TODC_TYPE_DS1743_CNTL_B 0x1ff9 | ||
307 | #define TODC_TYPE_DS1743_CNTL_A 0x1ff8 /* control_a R/W regs */ | ||
308 | #define TODC_TYPE_DS1743_WATCHDOG 0x1fff | ||
309 | #define TODC_TYPE_DS1743_INTERRUPTS 0x1fff | ||
310 | #define TODC_TYPE_DS1743_ALARM_DATE 0x1fff | ||
311 | #define TODC_TYPE_DS1743_ALARM_HOUR 0x1fff | ||
312 | #define TODC_TYPE_DS1743_ALARM_MINUTES 0x1fff | ||
313 | #define TODC_TYPE_DS1743_ALARM_SECONDS 0x1fff | ||
314 | #define TODC_TYPE_DS1743_CENTURY 0x1ff8 | ||
315 | #define TODC_TYPE_DS1743_FLAGS 0x1fff | ||
316 | #define TODC_TYPE_DS1743_NVRAM_ADDR_REG 0 | ||
317 | #define TODC_TYPE_DS1743_NVRAM_DATA_REG 0 | ||
318 | |||
319 | #define TODC_TYPE_DS1746_NVRAM_SIZE 0x1fff8 | ||
320 | #define TODC_TYPE_DS1746_SW_FLAGS 0 | ||
321 | #define TODC_TYPE_DS1746_YEAR 0x1ffff | ||
322 | #define TODC_TYPE_DS1746_MONTH 0x1fffe | ||
323 | #define TODC_TYPE_DS1746_DOM 0x1fffd /* Day of Month */ | ||
324 | #define TODC_TYPE_DS1746_DOW 0x1fffc /* Day of Week */ | ||
325 | #define TODC_TYPE_DS1746_HOURS 0x1fffb | ||
326 | #define TODC_TYPE_DS1746_MINUTES 0x1fffa | ||
327 | #define TODC_TYPE_DS1746_SECONDS 0x1fff9 | ||
328 | #define TODC_TYPE_DS1746_CNTL_B 0x1fff9 | ||
329 | #define TODC_TYPE_DS1746_CNTL_A 0x1fff8 /* control_a R/W regs */ | ||
330 | #define TODC_TYPE_DS1746_WATCHDOG 0x00000 | ||
331 | #define TODC_TYPE_DS1746_INTERRUPTS 0x00000 | ||
332 | #define TODC_TYPE_DS1746_ALARM_DATE 0x00000 | ||
333 | #define TODC_TYPE_DS1746_ALARM_HOUR 0x00000 | ||
334 | #define TODC_TYPE_DS1746_ALARM_MINUTES 0x00000 | ||
335 | #define TODC_TYPE_DS1746_ALARM_SECONDS 0x00000 | ||
336 | #define TODC_TYPE_DS1746_CENTURY 0x00000 | ||
337 | #define TODC_TYPE_DS1746_FLAGS 0x00000 | ||
338 | #define TODC_TYPE_DS1746_NVRAM_ADDR_REG 0 | ||
339 | #define TODC_TYPE_DS1746_NVRAM_DATA_REG 0 | ||
340 | |||
341 | #define TODC_TYPE_DS1747_NVRAM_SIZE 0x7fff8 | ||
342 | #define TODC_TYPE_DS1747_SW_FLAGS 0 | ||
343 | #define TODC_TYPE_DS1747_YEAR 0x7ffff | ||
344 | #define TODC_TYPE_DS1747_MONTH 0x7fffe | ||
345 | #define TODC_TYPE_DS1747_DOM 0x7fffd /* Day of Month */ | ||
346 | #define TODC_TYPE_DS1747_DOW 0x7fffc /* Day of Week */ | ||
347 | #define TODC_TYPE_DS1747_HOURS 0x7fffb | ||
348 | #define TODC_TYPE_DS1747_MINUTES 0x7fffa | ||
349 | #define TODC_TYPE_DS1747_SECONDS 0x7fff9 | ||
350 | #define TODC_TYPE_DS1747_CNTL_B 0x7fff9 | ||
351 | #define TODC_TYPE_DS1747_CNTL_A 0x7fff8 /* control_a R/W regs */ | ||
352 | #define TODC_TYPE_DS1747_WATCHDOG 0x00000 | ||
353 | #define TODC_TYPE_DS1747_INTERRUPTS 0x00000 | ||
354 | #define TODC_TYPE_DS1747_ALARM_DATE 0x00000 | ||
355 | #define TODC_TYPE_DS1747_ALARM_HOUR 0x00000 | ||
356 | #define TODC_TYPE_DS1747_ALARM_MINUTES 0x00000 | ||
357 | #define TODC_TYPE_DS1747_ALARM_SECONDS 0x00000 | ||
358 | #define TODC_TYPE_DS1747_CENTURY 0x00000 | ||
359 | #define TODC_TYPE_DS1747_FLAGS 0x00000 | ||
360 | #define TODC_TYPE_DS1747_NVRAM_ADDR_REG 0 | ||
361 | #define TODC_TYPE_DS1747_NVRAM_DATA_REG 0 | ||
362 | |||
363 | #define TODC_TYPE_DS17285_NVRAM_SIZE (0x1000-0x80) /* 4Kx8 NVRAM (minus RTC regs) */ | ||
364 | #define TODC_TYPE_DS17285_SW_FLAGS TODC_FLAG_2_LEVEL_NVRAM | ||
365 | #define TODC_TYPE_DS17285_SECONDS (TODC_TYPE_DS17285_NVRAM_SIZE + 0x00) | ||
366 | #define TODC_TYPE_DS17285_ALARM_SECONDS (TODC_TYPE_DS17285_NVRAM_SIZE + 0x01) | ||
367 | #define TODC_TYPE_DS17285_MINUTES (TODC_TYPE_DS17285_NVRAM_SIZE + 0x02) | ||
368 | #define TODC_TYPE_DS17285_ALARM_MINUTES (TODC_TYPE_DS17285_NVRAM_SIZE + 0x03) | ||
369 | #define TODC_TYPE_DS17285_HOURS (TODC_TYPE_DS17285_NVRAM_SIZE + 0x04) | ||
370 | #define TODC_TYPE_DS17285_ALARM_HOUR (TODC_TYPE_DS17285_NVRAM_SIZE + 0x05) | ||
371 | #define TODC_TYPE_DS17285_DOW (TODC_TYPE_DS17285_NVRAM_SIZE + 0x06) | ||
372 | #define TODC_TYPE_DS17285_DOM (TODC_TYPE_DS17285_NVRAM_SIZE + 0x07) | ||
373 | #define TODC_TYPE_DS17285_MONTH (TODC_TYPE_DS17285_NVRAM_SIZE + 0x08) | ||
374 | #define TODC_TYPE_DS17285_YEAR (TODC_TYPE_DS17285_NVRAM_SIZE + 0x09) | ||
375 | #define TODC_TYPE_DS17285_CNTL_A (TODC_TYPE_DS17285_NVRAM_SIZE + 0x0A) | ||
376 | #define TODC_TYPE_DS17285_CNTL_B (TODC_TYPE_DS17285_NVRAM_SIZE + 0x0B) | ||
377 | #define TODC_TYPE_DS17285_CNTL_C (TODC_TYPE_DS17285_NVRAM_SIZE + 0x0C) | ||
378 | #define TODC_TYPE_DS17285_CNTL_D (TODC_TYPE_DS17285_NVRAM_SIZE + 0x0D) | ||
379 | #define TODC_TYPE_DS17285_WATCHDOG 0 | ||
380 | #define TODC_TYPE_DS17285_INTERRUPTS 0 | ||
381 | #define TODC_TYPE_DS17285_ALARM_DATE 0 | ||
382 | #define TODC_TYPE_DS17285_CENTURY 0 | ||
383 | #define TODC_TYPE_DS17285_FLAGS 0 | ||
384 | #define TODC_TYPE_DS17285_NVRAM_ADDR_REG 0x50 | ||
385 | #define TODC_TYPE_DS17285_NVRAM_DATA_REG 0x53 | ||
386 | |||
387 | #define TODC_TYPE_MC146818_NVRAM_SIZE 0 /* XXXX */ | ||
388 | #define TODC_TYPE_MC146818_SW_FLAGS 0 | ||
389 | #define TODC_TYPE_MC146818_YEAR 0x09 | ||
390 | #define TODC_TYPE_MC146818_MONTH 0x08 | ||
391 | #define TODC_TYPE_MC146818_DOM 0x07 /* Day of Month */ | ||
392 | #define TODC_TYPE_MC146818_DOW 0x06 /* Day of Week */ | ||
393 | #define TODC_TYPE_MC146818_HOURS 0x04 | ||
394 | #define TODC_TYPE_MC146818_MINUTES 0x02 | ||
395 | #define TODC_TYPE_MC146818_SECONDS 0x00 | ||
396 | #define TODC_TYPE_MC146818_CNTL_B 0x0a | ||
397 | #define TODC_TYPE_MC146818_CNTL_A 0x0b /* control_a R/W regs */ | ||
398 | #define TODC_TYPE_MC146818_WATCHDOG 0 | ||
399 | #define TODC_TYPE_MC146818_INTERRUPTS 0x0c | ||
400 | #define TODC_TYPE_MC146818_ALARM_DATE 0xff | ||
401 | #define TODC_TYPE_MC146818_ALARM_HOUR 0x05 | ||
402 | #define TODC_TYPE_MC146818_ALARM_MINUTES 0x03 | ||
403 | #define TODC_TYPE_MC146818_ALARM_SECONDS 0x01 | ||
404 | #define TODC_TYPE_MC146818_CENTURY 0xff | ||
405 | #define TODC_TYPE_MC146818_FLAGS 0xff | ||
406 | #define TODC_TYPE_MC146818_NVRAM_ADDR_REG 0 | ||
407 | #define TODC_TYPE_MC146818_NVRAM_DATA_REG 0 | ||
408 | |||
409 | #define TODC_TYPE_PC97307_NVRAM_SIZE 0 /* No NVRAM? */ | ||
410 | #define TODC_TYPE_PC97307_SW_FLAGS 0 | ||
411 | #define TODC_TYPE_PC97307_YEAR 0x09 | ||
412 | #define TODC_TYPE_PC97307_MONTH 0x08 | ||
413 | #define TODC_TYPE_PC97307_DOM 0x07 /* Day of Month */ | ||
414 | #define TODC_TYPE_PC97307_DOW 0x06 /* Day of Week */ | ||
415 | #define TODC_TYPE_PC97307_HOURS 0x04 | ||
416 | #define TODC_TYPE_PC97307_MINUTES 0x02 | ||
417 | #define TODC_TYPE_PC97307_SECONDS 0x00 | ||
418 | #define TODC_TYPE_PC97307_CNTL_B 0x0a | ||
419 | #define TODC_TYPE_PC97307_CNTL_A 0x0b /* control_a R/W regs */ | ||
420 | #define TODC_TYPE_PC97307_WATCHDOG 0x0c | ||
421 | #define TODC_TYPE_PC97307_INTERRUPTS 0x0d | ||
422 | #define TODC_TYPE_PC97307_ALARM_DATE 0xff | ||
423 | #define TODC_TYPE_PC97307_ALARM_HOUR 0x05 | ||
424 | #define TODC_TYPE_PC97307_ALARM_MINUTES 0x03 | ||
425 | #define TODC_TYPE_PC97307_ALARM_SECONDS 0x01 | ||
426 | #define TODC_TYPE_PC97307_CENTURY 0xff | ||
427 | #define TODC_TYPE_PC97307_FLAGS 0xff | ||
428 | #define TODC_TYPE_PC97307_NVRAM_ADDR_REG 0 | ||
429 | #define TODC_TYPE_PC97307_NVRAM_DATA_REG 0 | ||
430 | |||
431 | /* | ||
432 | * Define macros to allocate and init the todc_info_t table that will | ||
433 | * be used by the todc_time.c routines. | ||
434 | */ | ||
435 | #define TODC_ALLOC() \ | ||
436 | static todc_info_t todc_info_alloc; \ | ||
437 | todc_info_t *todc_info = &todc_info_alloc; | ||
438 | |||
439 | #define TODC_INIT(clock_type, as0, as1, data, bits) { \ | ||
440 | todc_info->rtc_type = clock_type; \ | ||
441 | \ | ||
442 | todc_info->nvram_as0 = (unsigned int)(as0); \ | ||
443 | todc_info->nvram_as1 = (unsigned int)(as1); \ | ||
444 | todc_info->nvram_data = (unsigned int)(data); \ | ||
445 | \ | ||
446 | todc_info->as0_bits = (bits); \ | ||
447 | \ | ||
448 | todc_info->nvram_size = clock_type ##_NVRAM_SIZE; \ | ||
449 | todc_info->sw_flags = clock_type ##_SW_FLAGS; \ | ||
450 | \ | ||
451 | todc_info->year = clock_type ##_YEAR; \ | ||
452 | todc_info->month = clock_type ##_MONTH; \ | ||
453 | todc_info->day_of_month = clock_type ##_DOM; \ | ||
454 | todc_info->day_of_week = clock_type ##_DOW; \ | ||
455 | todc_info->hours = clock_type ##_HOURS; \ | ||
456 | todc_info->minutes = clock_type ##_MINUTES; \ | ||
457 | todc_info->seconds = clock_type ##_SECONDS; \ | ||
458 | todc_info->control_b = clock_type ##_CNTL_B; \ | ||
459 | todc_info->control_a = clock_type ##_CNTL_A; \ | ||
460 | todc_info->watchdog = clock_type ##_WATCHDOG; \ | ||
461 | todc_info->interrupts = clock_type ##_INTERRUPTS; \ | ||
462 | todc_info->alarm_date = clock_type ##_ALARM_DATE; \ | ||
463 | todc_info->alarm_hour = clock_type ##_ALARM_HOUR; \ | ||
464 | todc_info->alarm_minutes = clock_type ##_ALARM_MINUTES; \ | ||
465 | todc_info->alarm_seconds = clock_type ##_ALARM_SECONDS; \ | ||
466 | todc_info->century = clock_type ##_CENTURY; \ | ||
467 | todc_info->flags = clock_type ##_FLAGS; \ | ||
468 | \ | ||
469 | todc_info->nvram_addr_reg = clock_type ##_NVRAM_ADDR_REG; \ | ||
470 | todc_info->nvram_data_reg = clock_type ##_NVRAM_DATA_REG; \ | ||
471 | } | ||
472 | |||
473 | extern todc_info_t *todc_info; | ||
474 | |||
475 | unsigned char todc_direct_read_val(int addr); | ||
476 | void todc_direct_write_val(int addr, unsigned char val); | ||
477 | unsigned char todc_m48txx_read_val(int addr); | ||
478 | void todc_m48txx_write_val(int addr, unsigned char val); | ||
479 | unsigned char todc_mc146818_read_val(int addr); | ||
480 | void todc_mc146818_write_val(int addr, unsigned char val); | ||
481 | |||
482 | long todc_time_init(void); | ||
483 | void todc_get_rtc_time(struct rtc_time *); | ||
484 | int todc_set_rtc_time(struct rtc_time *); | ||
485 | void todc_calibrate_decr(void); | ||
486 | |||
487 | #endif /* __PPC_KERNEL_TODC_H */ | ||
diff --git a/include/asm-powerpc/topology.h b/include/asm-powerpc/topology.h index 19c575f39164..bbc3844b086f 100644 --- a/include/asm-powerpc/topology.h +++ b/include/asm-powerpc/topology.h | |||
@@ -31,8 +31,13 @@ static inline int node_to_first_cpu(int node) | |||
31 | 31 | ||
32 | int of_node_to_nid(struct device_node *device); | 32 | int of_node_to_nid(struct device_node *device); |
33 | 33 | ||
34 | #define pcibus_to_node(node) (-1) | 34 | struct pci_bus; |
35 | #define pcibus_to_cpumask(bus) (cpu_online_map) | 35 | extern int pcibus_to_node(struct pci_bus *bus); |
36 | |||
37 | #define pcibus_to_cpumask(bus) (pcibus_to_node(bus) == -1 ? \ | ||
38 | CPU_MASK_ALL : \ | ||
39 | node_to_cpumask(pcibus_to_node(bus)) \ | ||
40 | ) | ||
36 | 41 | ||
37 | /* sched_domains SD_NODE_INIT for PPC64 machines */ | 42 | /* sched_domains SD_NODE_INIT for PPC64 machines */ |
38 | #define SD_NODE_INIT (struct sched_domain) { \ | 43 | #define SD_NODE_INIT (struct sched_domain) { \ |
@@ -88,5 +93,10 @@ static inline void sysfs_remove_device_from_node(struct sys_device *dev, | |||
88 | 93 | ||
89 | #endif /* CONFIG_NUMA */ | 94 | #endif /* CONFIG_NUMA */ |
90 | 95 | ||
96 | #ifdef CONFIG_SMP | ||
97 | #include <asm/cputable.h> | ||
98 | #define smt_capable() (cpu_has_feature(CPU_FTR_SMT)) | ||
99 | #endif | ||
100 | |||
91 | #endif /* __KERNEL__ */ | 101 | #endif /* __KERNEL__ */ |
92 | #endif /* _ASM_POWERPC_TOPOLOGY_H */ | 102 | #endif /* _ASM_POWERPC_TOPOLOGY_H */ |
diff --git a/include/asm-powerpc/tsi108.h b/include/asm-powerpc/tsi108.h new file mode 100644 index 000000000000..c4c278d72f71 --- /dev/null +++ b/include/asm-powerpc/tsi108.h | |||
@@ -0,0 +1,109 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/tsi108.h | ||
3 | * | ||
4 | * common routine and memory layout for Tundra TSI108(Grendel) host bridge | ||
5 | * memory controller. | ||
6 | * | ||
7 | * Author: Jacob Pan (jacob.pan@freescale.com) | ||
8 | * Alex Bounine (alexandreb@tundra.com) | ||
9 | * 2004 (c) Freescale Semiconductor Inc. This file is licensed under | ||
10 | * the terms of the GNU General Public License version 2. This program | ||
11 | * is licensed "as is" without any warranty of any kind, whether express | ||
12 | * or implied. | ||
13 | */ | ||
14 | #ifndef __PPC_KERNEL_TSI108_H | ||
15 | #define __PPC_KERNEL_TSI108_H | ||
16 | |||
17 | #include <asm/pci-bridge.h> | ||
18 | |||
19 | /* Size of entire register space */ | ||
20 | #define TSI108_REG_SIZE (0x10000) | ||
21 | |||
22 | /* Sizes of register spaces for individual blocks */ | ||
23 | #define TSI108_HLP_SIZE 0x1000 | ||
24 | #define TSI108_PCI_SIZE 0x1000 | ||
25 | #define TSI108_CLK_SIZE 0x1000 | ||
26 | #define TSI108_PB_SIZE 0x1000 | ||
27 | #define TSI108_SD_SIZE 0x1000 | ||
28 | #define TSI108_DMA_SIZE 0x1000 | ||
29 | #define TSI108_ETH_SIZE 0x1000 | ||
30 | #define TSI108_I2C_SIZE 0x400 | ||
31 | #define TSI108_MPIC_SIZE 0x400 | ||
32 | #define TSI108_UART0_SIZE 0x200 | ||
33 | #define TSI108_GPIO_SIZE 0x200 | ||
34 | #define TSI108_UART1_SIZE 0x200 | ||
35 | |||
36 | /* Offsets within Tsi108(A) CSR space for individual blocks */ | ||
37 | #define TSI108_HLP_OFFSET 0x0000 | ||
38 | #define TSI108_PCI_OFFSET 0x1000 | ||
39 | #define TSI108_CLK_OFFSET 0x2000 | ||
40 | #define TSI108_PB_OFFSET 0x3000 | ||
41 | #define TSI108_SD_OFFSET 0x4000 | ||
42 | #define TSI108_DMA_OFFSET 0x5000 | ||
43 | #define TSI108_ETH_OFFSET 0x6000 | ||
44 | #define TSI108_I2C_OFFSET 0x7000 | ||
45 | #define TSI108_MPIC_OFFSET 0x7400 | ||
46 | #define TSI108_UART0_OFFSET 0x7800 | ||
47 | #define TSI108_GPIO_OFFSET 0x7A00 | ||
48 | #define TSI108_UART1_OFFSET 0x7C00 | ||
49 | |||
50 | /* Tsi108 registers used by common code components */ | ||
51 | #define TSI108_PCI_CSR (0x004) | ||
52 | #define TSI108_PCI_IRP_CFG_CTL (0x180) | ||
53 | #define TSI108_PCI_IRP_STAT (0x184) | ||
54 | #define TSI108_PCI_IRP_ENABLE (0x188) | ||
55 | #define TSI108_PCI_IRP_INTAD (0x18C) | ||
56 | |||
57 | #define TSI108_PCI_IRP_STAT_P_INT (0x00400000) | ||
58 | #define TSI108_PCI_IRP_ENABLE_P_INT (0x00400000) | ||
59 | |||
60 | #define TSI108_CG_PWRUP_STATUS (0x234) | ||
61 | |||
62 | #define TSI108_PB_ISR (0x00C) | ||
63 | #define TSI108_PB_ERRCS (0x404) | ||
64 | #define TSI108_PB_AERR (0x408) | ||
65 | |||
66 | #define TSI108_PB_ERRCS_ES (1 << 1) | ||
67 | #define TSI108_PB_ISR_PBS_RD_ERR (1 << 8) | ||
68 | |||
69 | #define TSI108_PCI_CFG_BASE_PHYS (0xfb000000) | ||
70 | #define TSI108_PCI_CFG_SIZE (0x01000000) | ||
71 | /* Global variables */ | ||
72 | |||
73 | extern u32 tsi108_pci_cfg_base; | ||
74 | /* Exported functions */ | ||
75 | |||
76 | extern int tsi108_bridge_init(struct pci_controller *hose, uint phys_csr_base); | ||
77 | extern unsigned long tsi108_get_mem_size(void); | ||
78 | extern unsigned long tsi108_get_cpu_clk(void); | ||
79 | extern unsigned long tsi108_get_sdc_clk(void); | ||
80 | extern int tsi108_direct_write_config(struct pci_bus *bus, unsigned int devfn, | ||
81 | int offset, int len, u32 val); | ||
82 | extern int tsi108_direct_read_config(struct pci_bus *bus, unsigned int devfn, | ||
83 | int offset, int len, u32 * val); | ||
84 | extern void tsi108_clear_pci_error(u32 pci_cfg_base); | ||
85 | |||
86 | extern phys_addr_t get_csrbase(void); | ||
87 | |||
88 | typedef struct { | ||
89 | u32 regs; /* hw registers base address */ | ||
90 | u32 phyregs; /* phy registers base address */ | ||
91 | u16 phy; /* phy address */ | ||
92 | u16 irq_num; /* irq number */ | ||
93 | u8 mac_addr[6]; /* phy mac address */ | ||
94 | } hw_info; | ||
95 | |||
96 | extern u32 get_vir_csrbase(void); | ||
97 | extern u32 tsi108_csr_vir_base; | ||
98 | |||
99 | extern inline u32 tsi108_read_reg(u32 reg_offset) | ||
100 | { | ||
101 | return in_be32((volatile u32 *)(tsi108_csr_vir_base + reg_offset)); | ||
102 | } | ||
103 | |||
104 | extern inline void tsi108_write_reg(u32 reg_offset, u32 val) | ||
105 | { | ||
106 | out_be32((volatile u32 *)(tsi108_csr_vir_base + reg_offset), val); | ||
107 | } | ||
108 | |||
109 | #endif /* __PPC_KERNEL_TSI108_H */ | ||
diff --git a/include/asm-powerpc/udbg.h b/include/asm-powerpc/udbg.h index 5c4236c342bb..55e57844fa78 100644 --- a/include/asm-powerpc/udbg.h +++ b/include/asm-powerpc/udbg.h | |||
@@ -23,7 +23,8 @@ extern int udbg_write(const char *s, int n); | |||
23 | extern int udbg_read(char *buf, int buflen); | 23 | extern int udbg_read(char *buf, int buflen); |
24 | 24 | ||
25 | extern void register_early_udbg_console(void); | 25 | extern void register_early_udbg_console(void); |
26 | extern void udbg_printf(const char *fmt, ...); | 26 | extern void udbg_printf(const char *fmt, ...) |
27 | __attribute__ ((format (printf, 1, 2))); | ||
27 | extern void udbg_progress(char *s, unsigned short hex); | 28 | extern void udbg_progress(char *s, unsigned short hex); |
28 | 29 | ||
29 | extern void udbg_init_uart(void __iomem *comport, unsigned int speed, | 30 | extern void udbg_init_uart(void __iomem *comport, unsigned int speed, |
@@ -41,7 +42,8 @@ extern void __init udbg_init_debug_lpar(void); | |||
41 | extern void __init udbg_init_pmac_realmode(void); | 42 | extern void __init udbg_init_pmac_realmode(void); |
42 | extern void __init udbg_init_maple_realmode(void); | 43 | extern void __init udbg_init_maple_realmode(void); |
43 | extern void __init udbg_init_iseries(void); | 44 | extern void __init udbg_init_iseries(void); |
44 | extern void __init udbg_init_rtas(void); | 45 | extern void __init udbg_init_rtas_panel(void); |
46 | extern void __init udbg_init_rtas_console(void); | ||
45 | 47 | ||
46 | #endif /* __KERNEL__ */ | 48 | #endif /* __KERNEL__ */ |
47 | #endif /* _ASM_POWERPC_UDBG_H */ | 49 | #endif /* _ASM_POWERPC_UDBG_H */ |
diff --git a/include/asm-powerpc/vga.h b/include/asm-powerpc/vga.h index eadaf2f3d032..a2eac409c1ec 100644 --- a/include/asm-powerpc/vga.h +++ b/include/asm-powerpc/vga.h | |||
@@ -41,9 +41,9 @@ static inline u16 scr_readw(volatile const u16 *addr) | |||
41 | extern unsigned long vgacon_remap_base; | 41 | extern unsigned long vgacon_remap_base; |
42 | 42 | ||
43 | #ifdef __powerpc64__ | 43 | #ifdef __powerpc64__ |
44 | #define VGA_MAP_MEM(x) ((unsigned long) ioremap((x), 0)) | 44 | #define VGA_MAP_MEM(x,s) ((unsigned long) ioremap((x), s)) |
45 | #else | 45 | #else |
46 | #define VGA_MAP_MEM(x) (x + vgacon_remap_base) | 46 | #define VGA_MAP_MEM(x,s) (x + vgacon_remap_base) |
47 | #endif | 47 | #endif |
48 | 48 | ||
49 | #define vga_readb(x) (*(x)) | 49 | #define vga_readb(x) (*(x)) |
diff --git a/include/asm-powerpc/vio.h b/include/asm-powerpc/vio.h index be14c59846f9..dc9bd101ca14 100644 --- a/include/asm-powerpc/vio.h +++ b/include/asm-powerpc/vio.h | |||
@@ -63,32 +63,22 @@ struct vio_driver { | |||
63 | struct device_driver driver; | 63 | struct device_driver driver; |
64 | }; | 64 | }; |
65 | 65 | ||
66 | struct vio_bus_ops { | ||
67 | int (*match)(const struct vio_device_id *id, const struct vio_dev *dev); | ||
68 | void (*unregister_device)(struct vio_dev *); | ||
69 | void (*release_device)(struct device *); | ||
70 | }; | ||
71 | |||
72 | extern struct dma_mapping_ops vio_dma_ops; | 66 | extern struct dma_mapping_ops vio_dma_ops; |
73 | extern struct bus_type vio_bus_type; | 67 | extern struct bus_type vio_bus_type; |
74 | extern struct vio_dev vio_bus_device; | ||
75 | 68 | ||
76 | extern int vio_register_driver(struct vio_driver *drv); | 69 | extern int vio_register_driver(struct vio_driver *drv); |
77 | extern void vio_unregister_driver(struct vio_driver *drv); | 70 | extern void vio_unregister_driver(struct vio_driver *drv); |
78 | 71 | ||
79 | extern struct vio_dev * __devinit vio_register_device(struct vio_dev *viodev); | ||
80 | extern void __devinit vio_unregister_device(struct vio_dev *dev); | 72 | extern void __devinit vio_unregister_device(struct vio_dev *dev); |
81 | 73 | ||
82 | extern int vio_bus_init(struct vio_bus_ops *); | ||
83 | |||
84 | #ifdef CONFIG_PPC_PSERIES | ||
85 | struct device_node; | 74 | struct device_node; |
86 | 75 | ||
87 | extern struct vio_dev * __devinit vio_register_device_node( | 76 | extern struct vio_dev * __devinit vio_register_device_node( |
88 | struct device_node *node_vdev); | 77 | struct device_node *node_vdev); |
89 | extern struct vio_dev *vio_find_node(struct device_node *vnode); | 78 | extern const void *vio_get_attribute(struct vio_dev *vdev, char *which, |
90 | extern const void *vio_get_attribute(struct vio_dev *vdev, void *which, | ||
91 | int *length); | 79 | int *length); |
80 | #ifdef CONFIG_PPC_PSERIES | ||
81 | extern struct vio_dev *vio_find_node(struct device_node *vnode); | ||
92 | extern int vio_enable_interrupts(struct vio_dev *dev); | 82 | extern int vio_enable_interrupts(struct vio_dev *dev); |
93 | extern int vio_disable_interrupts(struct vio_dev *dev); | 83 | extern int vio_disable_interrupts(struct vio_dev *dev); |
94 | #endif | 84 | #endif |