linux/arch/arm/include/asm/kexec.h
<<
>>
Prefs
   1#ifndef _ARM_KEXEC_H
   2#define _ARM_KEXEC_H
   3
   4#ifdef CONFIG_KEXEC
   5
   6/* Maximum physical address we can use pages from */
   7#define KEXEC_SOURCE_MEMORY_LIMIT (-1UL)
   8/* Maximum address we can reach in physical address mode */
   9#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)
  10/* Maximum address we can use for the control code buffer */
  11#define KEXEC_CONTROL_MEMORY_LIMIT (-1UL)
  12
  13#define KEXEC_CONTROL_PAGE_SIZE 4096
  14
  15#define KEXEC_ARCH KEXEC_ARCH_ARM
  16
  17#define KEXEC_ARM_ATAGS_OFFSET  0x1000
  18#define KEXEC_ARM_ZIMAGE_OFFSET 0x8000
  19
  20#ifndef __ASSEMBLY__
  21
  22/**
  23 * crash_setup_regs() - save registers for the panic kernel
  24 * @newregs: registers are saved here
  25 * @oldregs: registers to be saved (may be %NULL)
  26 *
  27 * Function copies machine registers from @oldregs to @newregs. If @oldregs is
  28 * %NULL then current registers are stored there.
  29 */
  30static inline void crash_setup_regs(struct pt_regs *newregs,
  31                                    struct pt_regs *oldregs)
  32{
  33        if (oldregs) {
  34                memcpy(newregs, oldregs, sizeof(*newregs));
  35        } else {
  36                __asm__ __volatile__ (
  37                        "stmia  %[regs_base], {r0-r12}\n\t"
  38                        "mov    %[_ARM_sp], sp\n\t"
  39                        "str    lr, %[_ARM_lr]\n\t"
  40                        "adr    %[_ARM_pc], 1f\n\t"
  41                        "mrs    %[_ARM_cpsr], cpsr\n\t"
  42                "1:"
  43                        : [_ARM_pc] "=r" (newregs->ARM_pc),
  44                          [_ARM_cpsr] "=r" (newregs->ARM_cpsr),
  45                          [_ARM_sp] "=r" (newregs->ARM_sp),
  46                          [_ARM_lr] "=o" (newregs->ARM_lr)
  47                        : [regs_base] "r" (&newregs->ARM_r0)
  48                        : "memory"
  49                );
  50        }
  51}
  52
  53/* Function pointer to optional machine-specific reinitialization */
  54extern void (*kexec_reinit)(void);
  55
  56#endif /* __ASSEMBLY__ */
  57
  58#endif /* CONFIG_KEXEC */
  59
  60#endif /* _ARM_KEXEC_H */
  61