1 #ifndef _ASM_POWERPC_KEXEC_H 2 #define _ASM_POWERPC_KEXEC_H 3 #ifdef __KERNEL__ 4 5 #if defined(CONFIG_FSL_BOOKE) || defined(CONFIG_44x) 6 7 /* 8 * On FSL-BookE we setup a 1:1 mapping which covers the first 2GiB of memory 9 * and therefore we can only deal with memory within this range 10 */ 11 #define KEXEC_SOURCE_MEMORY_LIMIT (2 * 1024 * 1024 * 1024UL - 1) 12 #define KEXEC_DESTINATION_MEMORY_LIMIT (2 * 1024 * 1024 * 1024UL - 1) 13 #define KEXEC_CONTROL_MEMORY_LIMIT (2 * 1024 * 1024 * 1024UL - 1) 14 15 #else 16 17 /* 18 * Maximum page that is mapped directly into kernel memory. 19 * XXX: Since we copy virt we can use any page we allocate 20 */ 21 #define KEXEC_SOURCE_MEMORY_LIMIT (-1UL) 22 23 /* 24 * Maximum address we can reach in physical address mode. 25 * XXX: I want to allow initrd in highmem. Otherwise set to rmo on LPAR. 26 */ 27 #define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL) 28 29 /* Maximum address we can use for the control code buffer */ 30 #ifdef __powerpc64__ 31 #define KEXEC_CONTROL_MEMORY_LIMIT (-1UL) 32 #else 33 /* TASK_SIZE, probably left over from use_mm ?? */ 34 #define KEXEC_CONTROL_MEMORY_LIMIT TASK_SIZE 35 #endif 36 #endif 37 38 #define KEXEC_CONTROL_PAGE_SIZE 4096 39 40 /* The native architecture */ 41 #ifdef __powerpc64__ 42 #define KEXEC_ARCH KEXEC_ARCH_PPC64 43 #else 44 #define KEXEC_ARCH KEXEC_ARCH_PPC 45 #endif 46 47 #define KEXEC_STATE_NONE 0 48 #define KEXEC_STATE_IRQS_OFF 1 49 #define KEXEC_STATE_REAL_MODE 2 50 51 #ifndef __ASSEMBLY__ 52 #include <asm/reg.h> 53 54 typedef void (*crash_shutdown_t)(void); 55 56 #ifdef CONFIG_KEXEC 57 58 /* 59 * This function is responsible for capturing register states if coming 60 * via panic or invoking dump using sysrq-trigger. 61 */ 62 static inline void crash_setup_regs(struct pt_regs *newregs, 63 struct pt_regs *oldregs) 64 { 65 if (oldregs) 66 memcpy(newregs, oldregs, sizeof(*newregs)); 67 else 68 ppc_save_regs(newregs); 69 } 70 71 extern void kexec_smp_wait(void); /* get and clear naca physid, wait for 72 master to copy new code to 0 */ 73 extern int crashing_cpu; 74 extern void crash_send_ipi(void (*crash_ipi_callback)(struct pt_regs *)); 75 76 struct kimage; 77 struct pt_regs; 78 extern void default_machine_kexec(struct kimage *image); 79 extern int default_machine_kexec_prepare(struct kimage *image); 80 extern void default_machine_crash_shutdown(struct pt_regs *regs); 81 extern int crash_shutdown_register(crash_shutdown_t handler); 82 extern int crash_shutdown_unregister(crash_shutdown_t handler); 83 84 extern void crash_kexec_secondary(struct pt_regs *regs); 85 extern int overlaps_crashkernel(unsigned long start, unsigned long size); 86 extern void reserve_crashkernel(void); 87 extern void machine_kexec_mask_interrupts(void); 88 89 static inline bool kdump_in_progress(void) 90 { 91 return crashing_cpu >= 0; 92 } 93 94 #else /* !CONFIG_KEXEC */ 95 static inline void crash_kexec_secondary(struct pt_regs *regs) { } 96 97 static inline int overlaps_crashkernel(unsigned long start, unsigned long size) 98 { 99 return 0; 100 } 101 102 static inline void reserve_crashkernel(void) { ; } 103 104 static inline int crash_shutdown_register(crash_shutdown_t handler) 105 { 106 return 0; 107 } 108 109 static inline int crash_shutdown_unregister(crash_shutdown_t handler) 110 { 111 return 0; 112 } 113 114 static inline bool kdump_in_progress(void) 115 { 116 return false; 117 } 118 119 #endif /* CONFIG_KEXEC */ 120 #endif /* ! __ASSEMBLY__ */ 121 #endif /* __KERNEL__ */ 122 #endif /* _ASM_POWERPC_KEXEC_H */ 123