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 54typedef 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 */ 62static 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 71extern void kexec_smp_wait(void); /* get and clear naca physid, wait for 72 master to copy new code to 0 */ 73extern int crashing_cpu; 74extern void crash_send_ipi(void (*crash_ipi_callback)(struct pt_regs *)); 75 76struct kimage; 77struct pt_regs; 78extern void default_machine_kexec(struct kimage *image); 79extern int default_machine_kexec_prepare(struct kimage *image); 80extern void default_machine_crash_shutdown(struct pt_regs *regs); 81extern int crash_shutdown_register(crash_shutdown_t handler); 82extern int crash_shutdown_unregister(crash_shutdown_t handler); 83 84extern void machine_kexec_simple(struct kimage *image); 85extern void crash_kexec_secondary(struct pt_regs *regs); 86extern int overlaps_crashkernel(unsigned long start, unsigned long size); 87extern void reserve_crashkernel(void); 88extern void machine_kexec_mask_interrupts(void); 89 90#else /* !CONFIG_KEXEC */ 91static inline void crash_kexec_secondary(struct pt_regs *regs) { } 92 93static inline int overlaps_crashkernel(unsigned long start, unsigned long size) 94{ 95 return 0; 96} 97 98static inline void reserve_crashkernel(void) { ; } 99 100static inline int crash_shutdown_register(crash_shutdown_t handler) 101{ 102 return 0; 103} 104 105static inline int crash_shutdown_unregister(crash_shutdown_t handler) 106{ 107 return 0; 108} 109 110#endif /* CONFIG_KEXEC */ 111#endif /* ! __ASSEMBLY__ */ 112#endif /* __KERNEL__ */ 113#endif /* _ASM_POWERPC_KEXEC_H */ 114