2014-04-15 21:59:30 -04:00
# ifndef _ASM_EFI_H
# define _ASM_EFI_H
# include <asm/io.h>
2015-11-30 13:28:19 +01:00
# include <asm/mmu_context.h>
2014-07-04 19:41:53 +02:00
# include <asm/neon.h>
2015-11-30 13:28:19 +01:00
# include <asm/tlbflush.h>
2014-04-15 21:59:30 -04:00
# ifdef CONFIG_EFI
extern void efi_init ( void ) ;
# else
# define efi_init()
# endif
2015-11-30 13:28:19 +01:00
int efi_create_mapping ( struct mm_struct * mm , efi_memory_desc_t * md ) ;
2014-07-04 19:41:53 +02:00
# define efi_call_virt(f, ...) \
( { \
2014-10-20 16:27:26 +02:00
efi_ # # f # # _t * __f ; \
2014-07-04 19:41:53 +02:00
efi_status_t __s ; \
\
kernel_neon_begin ( ) ; \
2014-10-20 16:27:26 +02:00
efi_virtmap_load ( ) ; \
__f = efi . systab - > runtime - > f ; \
2014-07-04 19:41:53 +02:00
__s = __f ( __VA_ARGS__ ) ; \
2014-10-20 16:27:26 +02:00
efi_virtmap_unload ( ) ; \
2014-07-04 19:41:53 +02:00
kernel_neon_end ( ) ; \
__s ; \
} )
# define __efi_call_virt(f, ...) \
( { \
2014-10-20 16:27:26 +02:00
efi_ # # f # # _t * __f ; \
2014-07-04 19:41:53 +02:00
\
kernel_neon_begin ( ) ; \
2014-10-20 16:27:26 +02:00
efi_virtmap_load ( ) ; \
__f = efi . systab - > runtime - > f ; \
2014-07-04 19:41:53 +02:00
__f ( __VA_ARGS__ ) ; \
2014-10-20 16:27:26 +02:00
efi_virtmap_unload ( ) ; \
2014-07-04 19:41:53 +02:00
kernel_neon_end ( ) ; \
} )
2014-07-02 14:54:41 +02:00
/* arch specific definitions used by the stub code */
/*
* AArch64 requires the DTB to be 8 - byte aligned in the first 512 MiB from
* start of kernel and may not cross a 2 MiB boundary . We set alignment to
* 2 MiB so we know it won ' t cross a 2 MiB boundary .
*/
# define EFI_FDT_ALIGN SZ_2M /* used by allocate_new_fdt_and_exit_boot() */
# define MAX_FDT_OFFSET SZ_512M
# define efi_call_early(f, ...) sys_table_arg->boottime->f(__VA_ARGS__)
2014-11-17 13:50:21 +01:00
# define EFI_ALLOC_ALIGN SZ_64K
2014-10-20 16:27:26 +02:00
/*
2015-01-22 10:01:40 +00:00
* On ARM systems , virtually remapped UEFI runtime services are set up in two
2014-10-20 16:27:26 +02:00
* distinct stages :
* - The stub retrieves the final version of the memory map from UEFI , populates
* the virt_addr fields and calls the SetVirtualAddressMap ( ) [ SVAM ] runtime
* service to communicate the new mapping to the firmware ( Note that the new
* mapping is not live at this time )
2015-01-22 10:01:40 +00:00
* - During an early initcall ( ) , the EFI system table is permanently remapped
* and the virtual remapping of the UEFI Runtime Services regions is loaded
* into a private set of page tables . If this all succeeds , the Runtime
* Services are enabled and the EFI_RUNTIME_SERVICES bit set .
2014-10-20 16:27:26 +02:00
*/
2015-11-30 13:28:19 +01:00
static inline void efi_set_pgd ( struct mm_struct * mm )
{
switch_mm ( NULL , mm , NULL ) ;
}
2014-10-20 16:27:26 +02:00
void efi_virtmap_load ( void ) ;
void efi_virtmap_unload ( void ) ;
2014-04-15 21:59:30 -04:00
# endif /* _ASM_EFI_H */