162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (C) 2020 Western Digital Corporation or its affiliates.
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci#ifndef _ASM_EFI_H
662306a36Sopenharmony_ci#define _ASM_EFI_H
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#include <asm/csr.h>
962306a36Sopenharmony_ci#include <asm/io.h>
1062306a36Sopenharmony_ci#include <asm/mmu_context.h>
1162306a36Sopenharmony_ci#include <asm/ptrace.h>
1262306a36Sopenharmony_ci#include <asm/tlbflush.h>
1362306a36Sopenharmony_ci#include <asm/pgalloc.h>
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#ifdef CONFIG_EFI
1662306a36Sopenharmony_ciextern void efi_init(void);
1762306a36Sopenharmony_ci#else
1862306a36Sopenharmony_ci#define efi_init()
1962306a36Sopenharmony_ci#endif
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ciint efi_create_mapping(struct mm_struct *mm, efi_memory_desc_t *md);
2262306a36Sopenharmony_ciint efi_set_mapping_permissions(struct mm_struct *mm, efi_memory_desc_t *md, bool);
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci#define ARCH_EFI_IRQ_FLAGS_MASK (SR_IE | SR_SPIE)
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci/* Load initrd anywhere in system RAM */
2762306a36Sopenharmony_cistatic inline unsigned long efi_get_max_initrd_addr(unsigned long image_addr)
2862306a36Sopenharmony_ci{
2962306a36Sopenharmony_ci	return ULONG_MAX;
3062306a36Sopenharmony_ci}
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_cistatic inline unsigned long efi_get_kimg_min_align(void)
3362306a36Sopenharmony_ci{
3462306a36Sopenharmony_ci	/*
3562306a36Sopenharmony_ci	 * RISC-V requires the kernel image to placed 2 MB aligned base for 64
3662306a36Sopenharmony_ci	 * bit and 4MB for 32 bit.
3762306a36Sopenharmony_ci	 */
3862306a36Sopenharmony_ci	return IS_ENABLED(CONFIG_64BIT) ? SZ_2M : SZ_4M;
3962306a36Sopenharmony_ci}
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci#define EFI_KIMG_PREFERRED_ADDRESS	efi_get_kimg_min_align()
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_civoid arch_efi_call_virt_setup(void);
4462306a36Sopenharmony_civoid arch_efi_call_virt_teardown(void);
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ciunsigned long stext_offset(void);
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_civoid efi_icache_sync(unsigned long start, unsigned long end);
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci#endif /* _ASM_EFI_H */
51