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/*
   6 * Maximum page that is mapped directly into kernel memory.
   7 * XXX: Since we copy virt we can use any page we allocate
   8 */
   9#define KEXEC_SOURCE_MEMORY_LIMIT (-1UL)
  10
  11/*
  12 * Maximum address we can reach in physical address mode.
  13 * XXX: I want to allow initrd in highmem. Otherwise set to rmo on LPAR.
  14 */
  15#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)
  16
  17/* Maximum address we can use for the control code buffer */
  18#ifdef __powerpc64__
  19#define KEXEC_CONTROL_MEMORY_LIMIT (-1UL)
  20#else
  21/* TASK_SIZE, probably left over from use_mm ?? */
  22#define KEXEC_CONTROL_MEMORY_LIMIT TASK_SIZE
  23#endif
  24
  25#define KEXEC_CONTROL_PAGE_SIZE 4096
  26
  27/* The native architecture */
  28#ifdef __powerpc64__
  29#define KEXEC_ARCH KEXEC_ARCH_PPC64
  30#else
  31#define KEXEC_ARCH KEXEC_ARCH_PPC
  32#endif
  33
  34#ifndef __ASSEMBLY__
  35#include <linux/cpumask.h>
  36#include <asm/reg.h>
  37
  38typedef void (*crash_shutdown_t)(void);
  39
  40#ifdef CONFIG_KEXEC
  41
  42/*
  43 * This function is responsible for capturing register states if coming
  44 * via panic or invoking dump using sysrq-trigger.
  45 */
  46static inline void crash_setup_regs(struct pt_regs *newregs,
  47                                        struct pt_regs *oldregs)
  48{
  49        if (oldregs)
  50                memcpy(newregs, oldregs, sizeof(*newregs));
  51        else
  52                ppc_save_regs(newregs);
  53}
  54
  55extern void kexec_smp_wait(void);       /* get and clear naca physid, wait for
  56                                          master to copy new code to 0 */
  57extern int crashing_cpu;
  58extern void crash_send_ipi(void (*crash_ipi_callback)(struct pt_regs *));
  59extern cpumask_t cpus_in_sr;
  60static inline int kexec_sr_activated(int cpu)
  61{
  62        return cpu_isset(cpu,cpus_in_sr);
  63}
  64
  65struct kimage;
  66struct pt_regs;
  67extern void default_machine_kexec(struct kimage *image);
  68extern int default_machine_kexec_prepare(struct kimage *image);
  69extern void default_machine_crash_shutdown(struct pt_regs *regs);
  70extern int crash_shutdown_register(crash_shutdown_t handler);
  71extern int crash_shutdown_unregister(crash_shutdown_t handler);
  72
  73extern void machine_kexec_simple(struct kimage *image);
  74extern void crash_kexec_secondary(struct pt_regs *regs);
  75extern int overlaps_crashkernel(unsigned long start, unsigned long size);
  76extern void reserve_crashkernel(void);
  77
  78#else /* !CONFIG_KEXEC */
  79static inline int kexec_sr_activated(int cpu) { return 0; }
  80static inline void crash_kexec_secondary(struct pt_regs *regs) { }
  81
  82static inline int overlaps_crashkernel(unsigned long start, unsigned long size)
  83{
  84        return 0;
  85}
  86
  87static inline void reserve_crashkernel(void) { ; }
  88
  89static inline int crash_shutdown_register(crash_shutdown_t handler)
  90{
  91        return 0;
  92}
  93
  94static inline int crash_shutdown_unregister(crash_shutdown_t handler)
  95{
  96        return 0;
  97}
  98
  99#endif /* CONFIG_KEXEC */
 100#endif /* ! __ASSEMBLY__ */
 101#endif /* __KERNEL__ */
 102#endif /* _ASM_POWERPC_KEXEC_H */
 103