]>
Commit | Line | Data |
---|---|---|
3d1229d6 ME |
1 | /* |
2 | * Code to handle transition of Linux booting another kernel. | |
3 | * | |
4 | * Copyright (C) 2002-2003 Eric Biederman <ebiederm@xmission.com> | |
5 | * GameCube/ppc32 port Copyright (C) 2004 Albert Herranz | |
6 | * Copyright (C) 2005 IBM Corporation. | |
7 | * | |
8 | * This source code is licensed under the GNU General Public License, | |
9 | * Version 2. See the file COPYING for more details. | |
10 | */ | |
11 | ||
12 | #include <linux/kexec.h> | |
13 | #include <linux/reboot.h> | |
14 | #include <linux/threads.h> | |
15 | #include <asm/machdep.h> | |
16 | ||
3d1229d6 ME |
17 | void machine_crash_shutdown(struct pt_regs *regs) |
18 | { | |
19 | if (ppc_md.machine_crash_shutdown) | |
cd0ca2ce | 20 | ppc_md.machine_crash_shutdown(regs); |
3d1229d6 ME |
21 | } |
22 | ||
23 | /* | |
24 | * Do what every setup is needed on image and the | |
25 | * reboot code buffer to allow us to avoid allocations | |
26 | * later. | |
27 | */ | |
28 | int machine_kexec_prepare(struct kimage *image) | |
29 | { | |
30 | if (ppc_md.machine_kexec_prepare) | |
31 | return ppc_md.machine_kexec_prepare(image); | |
32 | /* | |
33 | * Fail if platform doesn't provide its own machine_kexec_prepare | |
34 | * implementation. | |
35 | */ | |
36 | return -ENOSYS; | |
37 | } | |
38 | ||
39 | void machine_kexec_cleanup(struct kimage *image) | |
40 | { | |
41 | if (ppc_md.machine_kexec_cleanup) | |
42 | ppc_md.machine_kexec_cleanup(image); | |
43 | } | |
44 | ||
45 | /* | |
46 | * Do not allocate memory (or fail in any way) in machine_kexec(). | |
47 | * We are past the point of no return, committed to rebooting now. | |
48 | */ | |
49 | NORET_TYPE void machine_kexec(struct kimage *image) | |
50 | { | |
51 | if (ppc_md.machine_kexec) | |
52 | ppc_md.machine_kexec(image); | |
53 | else { | |
54 | /* | |
55 | * Fall back to normal restart if platform doesn't provide | |
56 | * its own kexec function, and user insist to kexec... | |
57 | */ | |
58 | machine_restart(NULL); | |
59 | } | |
60 | for(;;); | |
61 | } |