root/arch/arm64/include/asm/kexec.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. crash_setup_regs
  2. crash_is_nosave
  3. crash_prepare_suspend
  4. crash_post_resume

   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * kexec for arm64
   4  *
   5  * Copyright (C) Linaro.
   6  * Copyright (C) Huawei Futurewei Technologies.
   7  */
   8 
   9 #ifndef _ARM64_KEXEC_H
  10 #define _ARM64_KEXEC_H
  11 
  12 /* Maximum physical address we can use pages from */
  13 
  14 #define KEXEC_SOURCE_MEMORY_LIMIT (-1UL)
  15 
  16 /* Maximum address we can reach in physical address mode */
  17 
  18 #define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)
  19 
  20 /* Maximum address we can use for the control code buffer */
  21 
  22 #define KEXEC_CONTROL_MEMORY_LIMIT (-1UL)
  23 
  24 #define KEXEC_CONTROL_PAGE_SIZE 4096
  25 
  26 #define KEXEC_ARCH KEXEC_ARCH_AARCH64
  27 
  28 #ifndef __ASSEMBLY__
  29 
  30 /**
  31  * crash_setup_regs() - save registers for the panic kernel
  32  *
  33  * @newregs: registers are saved here
  34  * @oldregs: registers to be saved (may be %NULL)
  35  */
  36 
  37 static inline void crash_setup_regs(struct pt_regs *newregs,
  38                                     struct pt_regs *oldregs)
  39 {
  40         if (oldregs) {
  41                 memcpy(newregs, oldregs, sizeof(*newregs));
  42         } else {
  43                 u64 tmp1, tmp2;
  44 
  45                 __asm__ __volatile__ (
  46                         "stp     x0,   x1, [%2, #16 *  0]\n"
  47                         "stp     x2,   x3, [%2, #16 *  1]\n"
  48                         "stp     x4,   x5, [%2, #16 *  2]\n"
  49                         "stp     x6,   x7, [%2, #16 *  3]\n"
  50                         "stp     x8,   x9, [%2, #16 *  4]\n"
  51                         "stp    x10,  x11, [%2, #16 *  5]\n"
  52                         "stp    x12,  x13, [%2, #16 *  6]\n"
  53                         "stp    x14,  x15, [%2, #16 *  7]\n"
  54                         "stp    x16,  x17, [%2, #16 *  8]\n"
  55                         "stp    x18,  x19, [%2, #16 *  9]\n"
  56                         "stp    x20,  x21, [%2, #16 * 10]\n"
  57                         "stp    x22,  x23, [%2, #16 * 11]\n"
  58                         "stp    x24,  x25, [%2, #16 * 12]\n"
  59                         "stp    x26,  x27, [%2, #16 * 13]\n"
  60                         "stp    x28,  x29, [%2, #16 * 14]\n"
  61                         "mov     %0,  sp\n"
  62                         "stp    x30,  %0,  [%2, #16 * 15]\n"
  63 
  64                         "/* faked current PSTATE */\n"
  65                         "mrs     %0, CurrentEL\n"
  66                         "mrs     %1, SPSEL\n"
  67                         "orr     %0, %0, %1\n"
  68                         "mrs     %1, DAIF\n"
  69                         "orr     %0, %0, %1\n"
  70                         "mrs     %1, NZCV\n"
  71                         "orr     %0, %0, %1\n"
  72                         /* pc */
  73                         "adr     %1, 1f\n"
  74                 "1:\n"
  75                         "stp     %1, %0,   [%2, #16 * 16]\n"
  76                         : "=&r" (tmp1), "=&r" (tmp2)
  77                         : "r" (newregs)
  78                         : "memory"
  79                 );
  80         }
  81 }
  82 
  83 #if defined(CONFIG_KEXEC_CORE) && defined(CONFIG_HIBERNATION)
  84 extern bool crash_is_nosave(unsigned long pfn);
  85 extern void crash_prepare_suspend(void);
  86 extern void crash_post_resume(void);
  87 #else
  88 static inline bool crash_is_nosave(unsigned long pfn) {return false; }
  89 static inline void crash_prepare_suspend(void) {}
  90 static inline void crash_post_resume(void) {}
  91 #endif
  92 
  93 #ifdef CONFIG_KEXEC_FILE
  94 #define ARCH_HAS_KIMAGE_ARCH
  95 
  96 struct kimage_arch {
  97         void *dtb;
  98         unsigned long dtb_mem;
  99 };
 100 
 101 extern const struct kexec_file_ops kexec_image_ops;
 102 
 103 struct kimage;
 104 
 105 extern int arch_kimage_file_post_load_cleanup(struct kimage *image);
 106 extern int load_other_segments(struct kimage *image,
 107                 unsigned long kernel_load_addr, unsigned long kernel_size,
 108                 char *initrd, unsigned long initrd_len,
 109                 char *cmdline);
 110 #endif
 111 
 112 #endif /* __ASSEMBLY__ */
 113 
 114 #endif

/* [<][>][^][v][top][bottom][index][help] */