cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

efi.h (2501B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (C) 2015 Linaro Ltd <ard.biesheuvel@linaro.org>
      4 */
      5
      6#ifndef __ASM_ARM_EFI_H
      7#define __ASM_ARM_EFI_H
      8
      9#include <asm/cacheflush.h>
     10#include <asm/cachetype.h>
     11#include <asm/early_ioremap.h>
     12#include <asm/fixmap.h>
     13#include <asm/highmem.h>
     14#include <asm/mach/map.h>
     15#include <asm/mmu_context.h>
     16#include <asm/ptrace.h>
     17
     18#ifdef CONFIG_EFI
     19void efi_init(void);
     20
     21int efi_create_mapping(struct mm_struct *mm, efi_memory_desc_t *md);
     22int efi_set_mapping_permissions(struct mm_struct *mm, efi_memory_desc_t *md);
     23
     24#define arch_efi_call_virt_setup()	efi_virtmap_load()
     25#define arch_efi_call_virt_teardown()	efi_virtmap_unload()
     26
     27#define arch_efi_call_virt(p, f, args...)				\
     28({									\
     29	efi_##f##_t *__f;						\
     30	__f = p->f;							\
     31	__f(args);							\
     32})
     33
     34#define ARCH_EFI_IRQ_FLAGS_MASK \
     35	(PSR_J_BIT | PSR_E_BIT | PSR_A_BIT | PSR_I_BIT | PSR_F_BIT | \
     36	 PSR_T_BIT | MODE_MASK)
     37
     38static inline void efi_set_pgd(struct mm_struct *mm)
     39{
     40	check_and_switch_context(mm, NULL);
     41}
     42
     43void efi_virtmap_load(void);
     44void efi_virtmap_unload(void);
     45
     46#else
     47#define efi_init()
     48#endif /* CONFIG_EFI */
     49
     50/* arch specific definitions used by the stub code */
     51
     52struct screen_info *alloc_screen_info(void);
     53void free_screen_info(struct screen_info *si);
     54
     55/*
     56 * A reasonable upper bound for the uncompressed kernel size is 32 MBytes,
     57 * so we will reserve that amount of memory. We have no easy way to tell what
     58 * the actuall size of code + data the uncompressed kernel will use.
     59 * If this is insufficient, the decompressor will relocate itself out of the
     60 * way before performing the decompression.
     61 */
     62#define MAX_UNCOMP_KERNEL_SIZE	SZ_32M
     63
     64/*
     65 * phys-to-virt patching requires that the physical to virtual offset is a
     66 * multiple of 2 MiB. However, using an alignment smaller than TEXT_OFFSET
     67 * here throws off the memory allocation logic, so let's use the lowest power
     68 * of two greater than 2 MiB and greater than TEXT_OFFSET.
     69 */
     70#define EFI_PHYS_ALIGN		max(UL(SZ_2M), roundup_pow_of_two(TEXT_OFFSET))
     71
     72/* on ARM, the initrd should be loaded in a lowmem region */
     73static inline unsigned long efi_get_max_initrd_addr(unsigned long image_addr)
     74{
     75	return round_down(image_addr, SZ_4M) + SZ_512M;
     76}
     77
     78struct efi_arm_entry_state {
     79	u32	cpsr_before_ebs;
     80	u32	sctlr_before_ebs;
     81	u32	cpsr_after_ebs;
     82	u32	sctlr_after_ebs;
     83};
     84
     85static inline void efi_capsule_flush_cache_range(void *addr, int size)
     86{
     87	__cpuc_flush_dcache_area(addr, size);
     88}
     89
     90#endif /* _ASM_ARM_EFI_H */