David Brazdil | 0f672f6 | 2019-12-10 10:32:29 +0000 | [diff] [blame^] | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
Andrew Scull | b4b6d4a | 2019-01-02 15:54:55 +0000 | [diff] [blame] | 2 | /* |
| 3 | * kexec.h for kexec |
| 4 | * Created by <nschichan@corp.free.fr> on Thu Oct 12 14:59:34 2006 |
Andrew Scull | b4b6d4a | 2019-01-02 15:54:55 +0000 | [diff] [blame] | 5 | */ |
| 6 | |
| 7 | #ifndef _MIPS_KEXEC |
| 8 | # define _MIPS_KEXEC |
| 9 | |
| 10 | #include <asm/stacktrace.h> |
| 11 | |
| 12 | /* Maximum physical address we can use pages from */ |
David Brazdil | 0f672f6 | 2019-12-10 10:32:29 +0000 | [diff] [blame^] | 13 | #define KEXEC_SOURCE_MEMORY_LIMIT (-1UL) |
Andrew Scull | b4b6d4a | 2019-01-02 15:54:55 +0000 | [diff] [blame] | 14 | /* Maximum address we can reach in physical address mode */ |
David Brazdil | 0f672f6 | 2019-12-10 10:32:29 +0000 | [diff] [blame^] | 15 | #define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL) |
Andrew Scull | b4b6d4a | 2019-01-02 15:54:55 +0000 | [diff] [blame] | 16 | /* Maximum address we can use for the control code buffer */ |
David Brazdil | 0f672f6 | 2019-12-10 10:32:29 +0000 | [diff] [blame^] | 17 | #define KEXEC_CONTROL_MEMORY_LIMIT (-1UL) |
Andrew Scull | b4b6d4a | 2019-01-02 15:54:55 +0000 | [diff] [blame] | 18 | /* Reserve 3*4096 bytes for board-specific info */ |
| 19 | #define KEXEC_CONTROL_PAGE_SIZE (4096 + 3*4096) |
| 20 | |
| 21 | /* The native architecture */ |
| 22 | #define KEXEC_ARCH KEXEC_ARCH_MIPS |
| 23 | #define MAX_NOTE_BYTES 1024 |
| 24 | |
| 25 | static inline void crash_setup_regs(struct pt_regs *newregs, |
| 26 | struct pt_regs *oldregs) |
| 27 | { |
| 28 | if (oldregs) |
| 29 | memcpy(newregs, oldregs, sizeof(*newregs)); |
| 30 | else |
| 31 | prepare_frametrace(newregs); |
| 32 | } |
| 33 | |
| 34 | #ifdef CONFIG_KEXEC |
| 35 | struct kimage; |
| 36 | extern unsigned long kexec_args[4]; |
| 37 | extern int (*_machine_kexec_prepare)(struct kimage *); |
| 38 | extern void (*_machine_kexec_shutdown)(void); |
| 39 | extern void (*_machine_crash_shutdown)(struct pt_regs *regs); |
David Brazdil | 0f672f6 | 2019-12-10 10:32:29 +0000 | [diff] [blame^] | 40 | void default_machine_crash_shutdown(struct pt_regs *regs); |
| 41 | void kexec_nonboot_cpu_jump(void); |
| 42 | void kexec_reboot(void); |
Andrew Scull | b4b6d4a | 2019-01-02 15:54:55 +0000 | [diff] [blame] | 43 | #ifdef CONFIG_SMP |
| 44 | extern const unsigned char kexec_smp_wait[]; |
| 45 | extern unsigned long secondary_kexec_args[4]; |
Andrew Scull | b4b6d4a | 2019-01-02 15:54:55 +0000 | [diff] [blame] | 46 | extern atomic_t kexec_ready_to_reboot; |
| 47 | extern void (*_crash_smp_send_stop)(void); |
| 48 | #endif |
| 49 | #endif |
| 50 | |
| 51 | #endif /* !_MIPS_KEXEC */ |