mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

This patch creates image_kexec_ops to load Image binary file for kexec_file_load() syscall. Signed-off-by: Song Shuai <songshuaishuai@tinylab.org> Signed-off-by: Björn Töpel <bjorn@rivosinc.com> Link: https://lore.kernel.org/r/20250409193004.643839-3-bjorn@kernel.org Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com> Signed-off-by: Palmer Dabbelt <palmer@dabbelt.com>
78 lines
2.1 KiB
C
78 lines
2.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Copyright (C) 2019 FORTH-ICS/CARV
|
|
* Nick Kossifidis <mick@ics.forth.gr>
|
|
*/
|
|
|
|
#ifndef _RISCV_KEXEC_H
|
|
#define _RISCV_KEXEC_H
|
|
|
|
#include <asm/page.h> /* For PAGE_SIZE */
|
|
|
|
/* Maximum physical address we can use pages from */
|
|
#define KEXEC_SOURCE_MEMORY_LIMIT (-1UL)
|
|
|
|
/* Maximum address we can reach in physical address mode */
|
|
#define KEXEC_DESTINATION_MEMORY_LIMIT (-1UL)
|
|
|
|
/* Maximum address we can use for the control code buffer */
|
|
#define KEXEC_CONTROL_MEMORY_LIMIT (-1UL)
|
|
|
|
/* Reserve a page for the control code buffer */
|
|
#define KEXEC_CONTROL_PAGE_SIZE PAGE_SIZE
|
|
|
|
#define KEXEC_ARCH KEXEC_ARCH_RISCV
|
|
|
|
extern void riscv_crash_save_regs(struct pt_regs *newregs);
|
|
|
|
static inline void
|
|
crash_setup_regs(struct pt_regs *newregs,
|
|
struct pt_regs *oldregs)
|
|
{
|
|
if (oldregs)
|
|
memcpy(newregs, oldregs, sizeof(struct pt_regs));
|
|
else
|
|
riscv_crash_save_regs(newregs);
|
|
}
|
|
|
|
|
|
#define ARCH_HAS_KIMAGE_ARCH
|
|
|
|
struct kimage_arch {
|
|
void *fdt; /* For CONFIG_KEXEC_FILE */
|
|
unsigned long fdt_addr;
|
|
};
|
|
|
|
extern const unsigned char riscv_kexec_relocate[];
|
|
extern const unsigned int riscv_kexec_relocate_size;
|
|
|
|
typedef void (*riscv_kexec_method)(unsigned long first_ind_entry,
|
|
unsigned long jump_addr,
|
|
unsigned long fdt_addr,
|
|
unsigned long hartid,
|
|
unsigned long va_pa_off);
|
|
|
|
extern riscv_kexec_method riscv_kexec_norelocate;
|
|
|
|
#ifdef CONFIG_KEXEC_FILE
|
|
extern const struct kexec_file_ops elf_kexec_ops;
|
|
extern const struct kexec_file_ops image_kexec_ops;
|
|
|
|
struct purgatory_info;
|
|
int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
|
|
Elf_Shdr *section,
|
|
const Elf_Shdr *relsec,
|
|
const Elf_Shdr *symtab);
|
|
#define arch_kexec_apply_relocations_add arch_kexec_apply_relocations_add
|
|
|
|
struct kimage;
|
|
int arch_kimage_file_post_load_cleanup(struct kimage *image);
|
|
#define arch_kimage_file_post_load_cleanup arch_kimage_file_post_load_cleanup
|
|
|
|
int load_extra_segments(struct kimage *image, unsigned long kernel_start,
|
|
unsigned long kernel_len, char *initrd,
|
|
unsigned long initrd_len, char *cmdline,
|
|
unsigned long cmdline_len);
|
|
#endif
|
|
|
|
#endif
|