LCOV - code coverage report
Current view: top level - arch/x86/include/asm - realmode.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 5 5 100.0 %
Date: 2021-04-22 12:43:58 Functions: 0 0 -

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : #ifndef _ARCH_X86_REALMODE_H
       3             : #define _ARCH_X86_REALMODE_H
       4             : 
       5             : /*
       6             :  * Flag bit definitions for use with the flags field of the trampoline header
       7             :  * in the CONFIG_X86_64 variant.
       8             :  */
       9             : #define TH_FLAGS_SME_ACTIVE_BIT         0
      10             : #define TH_FLAGS_SME_ACTIVE             BIT(TH_FLAGS_SME_ACTIVE_BIT)
      11             : 
      12             : #ifndef __ASSEMBLY__
      13             : 
      14             : #include <linux/types.h>
      15             : #include <asm/io.h>
      16             : 
      17             : /* This must match data at realmode/rm/header.S */
      18             : struct real_mode_header {
      19             :         u32     text_start;
      20             :         u32     ro_end;
      21             :         /* SMP trampoline */
      22             :         u32     trampoline_start;
      23             :         u32     trampoline_header;
      24             : #ifdef CONFIG_AMD_MEM_ENCRYPT
      25             :         u32     sev_es_trampoline_start;
      26             : #endif
      27             : #ifdef CONFIG_X86_64
      28             :         u32     trampoline_pgd;
      29             : #endif
      30             :         /* ACPI S3 wakeup */
      31             : #ifdef CONFIG_ACPI_SLEEP
      32             :         u32     wakeup_start;
      33             :         u32     wakeup_header;
      34             : #endif
      35             :         /* APM/BIOS reboot */
      36             :         u32     machine_real_restart_asm;
      37             : #ifdef CONFIG_X86_64
      38             :         u32     machine_real_restart_seg;
      39             : #endif
      40             : };
      41             : 
      42             : /* This must match data at realmode/rm/trampoline_{32,64}.S */
      43             : struct trampoline_header {
      44             : #ifdef CONFIG_X86_32
      45             :         u32 start;
      46             :         u16 gdt_pad;
      47             :         u16 gdt_limit;
      48             :         u32 gdt_base;
      49             : #else
      50             :         u64 start;
      51             :         u64 efer;
      52             :         u32 cr4;
      53             :         u32 flags;
      54             : #endif
      55             : };
      56             : 
      57             : extern struct real_mode_header *real_mode_header;
      58             : extern unsigned char real_mode_blob_end[];
      59             : 
      60             : extern unsigned long initial_code;
      61             : extern unsigned long initial_gs;
      62             : extern unsigned long initial_stack;
      63             : #ifdef CONFIG_AMD_MEM_ENCRYPT
      64             : extern unsigned long initial_vc_handler;
      65             : #endif
      66             : 
      67             : extern unsigned char real_mode_blob[];
      68             : extern unsigned char real_mode_relocs[];
      69             : 
      70             : #ifdef CONFIG_X86_32
      71             : extern unsigned char startup_32_smp[];
      72             : extern unsigned char boot_gdt[];
      73             : #else
      74             : extern unsigned char secondary_startup_64[];
      75             : extern unsigned char secondary_startup_64_no_verify[];
      76             : #endif
      77             : 
      78           1 : static inline size_t real_mode_size_needed(void)
      79             : {
      80           1 :         if (real_mode_header)
      81             :                 return 0;       /* already allocated. */
      82             : 
      83           1 :         return ALIGN(real_mode_blob_end - real_mode_blob, PAGE_SIZE);
      84             : }
      85             : 
      86           1 : static inline void set_real_mode_mem(phys_addr_t mem)
      87             : {
      88           1 :         real_mode_header = (struct real_mode_header *) __va(mem);
      89             : }
      90             : 
      91             : void reserve_real_mode(void);
      92             : 
      93             : #endif /* __ASSEMBLY__ */
      94             : 
      95             : #endif /* _ARCH_X86_REALMODE_H */

Generated by: LCOV version 1.14