linux/arch/powerpc/include/asm/kexec.h
<<
>>
Prefs
   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