diff options
Diffstat (limited to 'include/asm-powerpc/kexec.h')
-rw-r--r-- | include/asm-powerpc/kexec.h | 91 |
1 files changed, 84 insertions, 7 deletions
diff --git a/include/asm-powerpc/kexec.h b/include/asm-powerpc/kexec.h index c72ffc709ea8..640a6459f2f4 100644 --- a/include/asm-powerpc/kexec.h +++ b/include/asm-powerpc/kexec.h | |||
@@ -1,5 +1,6 @@ | |||
1 | #ifndef _ASM_POWERPC_KEXEC_H | 1 | #ifndef _ASM_POWERPC_KEXEC_H |
2 | #define _ASM_POWERPC_KEXEC_H | 2 | #define _ASM_POWERPC_KEXEC_H |
3 | #ifdef __KERNEL__ | ||
3 | 4 | ||
4 | /* | 5 | /* |
5 | * Maximum page that is mapped directly into kernel memory. | 6 | * Maximum page that is mapped directly into kernel memory. |
@@ -30,21 +31,97 @@ | |||
30 | #define KEXEC_ARCH KEXEC_ARCH_PPC | 31 | #define KEXEC_ARCH KEXEC_ARCH_PPC |
31 | #endif | 32 | #endif |
32 | 33 | ||
33 | #ifndef __ASSEMBLY__ | 34 | #ifdef CONFIG_KEXEC |
34 | 35 | ||
35 | #define MAX_NOTE_BYTES 1024 | 36 | #ifdef __powerpc64__ |
36 | typedef u32 note_buf_t[MAX_NOTE_BYTES / sizeof(u32)]; | 37 | /* |
38 | * This function is responsible for capturing register states if coming | ||
39 | * via panic or invoking dump using sysrq-trigger. | ||
40 | */ | ||
41 | static inline void crash_setup_regs(struct pt_regs *newregs, | ||
42 | struct pt_regs *oldregs) | ||
43 | { | ||
44 | if (oldregs) | ||
45 | memcpy(newregs, oldregs, sizeof(*newregs)); | ||
46 | else { | ||
47 | /* FIXME Merge this with xmon_save_regs ?? */ | ||
48 | unsigned long tmp1, tmp2; | ||
49 | __asm__ __volatile__ ( | ||
50 | "std 0,0(%2)\n" | ||
51 | "std 1,8(%2)\n" | ||
52 | "std 2,16(%2)\n" | ||
53 | "std 3,24(%2)\n" | ||
54 | "std 4,32(%2)\n" | ||
55 | "std 5,40(%2)\n" | ||
56 | "std 6,48(%2)\n" | ||
57 | "std 7,56(%2)\n" | ||
58 | "std 8,64(%2)\n" | ||
59 | "std 9,72(%2)\n" | ||
60 | "std 10,80(%2)\n" | ||
61 | "std 11,88(%2)\n" | ||
62 | "std 12,96(%2)\n" | ||
63 | "std 13,104(%2)\n" | ||
64 | "std 14,112(%2)\n" | ||
65 | "std 15,120(%2)\n" | ||
66 | "std 16,128(%2)\n" | ||
67 | "std 17,136(%2)\n" | ||
68 | "std 18,144(%2)\n" | ||
69 | "std 19,152(%2)\n" | ||
70 | "std 20,160(%2)\n" | ||
71 | "std 21,168(%2)\n" | ||
72 | "std 22,176(%2)\n" | ||
73 | "std 23,184(%2)\n" | ||
74 | "std 24,192(%2)\n" | ||
75 | "std 25,200(%2)\n" | ||
76 | "std 26,208(%2)\n" | ||
77 | "std 27,216(%2)\n" | ||
78 | "std 28,224(%2)\n" | ||
79 | "std 29,232(%2)\n" | ||
80 | "std 30,240(%2)\n" | ||
81 | "std 31,248(%2)\n" | ||
82 | "mfmsr %0\n" | ||
83 | "std %0, 264(%2)\n" | ||
84 | "mfctr %0\n" | ||
85 | "std %0, 280(%2)\n" | ||
86 | "mflr %0\n" | ||
87 | "std %0, 288(%2)\n" | ||
88 | "bl 1f\n" | ||
89 | "1: mflr %1\n" | ||
90 | "std %1, 256(%2)\n" | ||
91 | "mtlr %0\n" | ||
92 | "mfxer %0\n" | ||
93 | "std %0, 296(%2)\n" | ||
94 | : "=&r" (tmp1), "=&r" (tmp2) | ||
95 | : "b" (newregs)); | ||
96 | } | ||
97 | } | ||
98 | #else | ||
99 | /* | ||
100 | * Provide a dummy definition to avoid build failures. Will remain | ||
101 | * empty till crash dump support is enabled. | ||
102 | */ | ||
103 | static inline void crash_setup_regs(struct pt_regs *newregs, | ||
104 | struct pt_regs *oldregs) { } | ||
105 | #endif /* !__powerpc64 __ */ | ||
37 | 106 | ||
38 | extern note_buf_t crash_notes[]; | 107 | #ifndef __ASSEMBLY__ |
108 | #define MAX_NOTE_BYTES 1024 | ||
39 | 109 | ||
40 | #ifdef __powerpc64__ | 110 | #ifdef __powerpc64__ |
41 | extern void kexec_smp_wait(void); /* get and clear naca physid, wait for | 111 | extern void kexec_smp_wait(void); /* get and clear naca physid, wait for |
42 | master to copy new code to 0 */ | 112 | master to copy new code to 0 */ |
43 | extern void __init kexec_setup(void); | 113 | extern void __init kexec_setup(void); |
44 | #else | 114 | extern int crashing_cpu; |
115 | extern void crash_send_ipi(void (*crash_ipi_callback)(struct pt_regs *)); | ||
116 | #endif /* __powerpc64 __ */ | ||
117 | |||
45 | struct kimage; | 118 | struct kimage; |
46 | extern void machine_kexec_simple(struct kimage *image); | 119 | struct pt_regs; |
47 | #endif | 120 | extern void default_machine_kexec(struct kimage *image); |
121 | extern int default_machine_kexec_prepare(struct kimage *image); | ||
122 | extern void default_machine_crash_shutdown(struct pt_regs *regs); | ||
48 | 123 | ||
49 | #endif /* ! __ASSEMBLY__ */ | 124 | #endif /* ! __ASSEMBLY__ */ |
125 | #endif /* CONFIG_KEXEC */ | ||
126 | #endif /* __KERNEL__ */ | ||
50 | #endif /* _ASM_POWERPC_KEXEC_H */ | 127 | #endif /* _ASM_POWERPC_KEXEC_H */ |