| .. | .. |
|---|
| 14 | 14 | #include <linux/types.h> |
|---|
| 15 | 15 | #include <asm/io.h> |
|---|
| 16 | 16 | |
|---|
| 17 | | -/* This must match data at realmode.S */ |
|---|
| 17 | +/* This must match data at realmode/rm/header.S */ |
|---|
| 18 | 18 | struct real_mode_header { |
|---|
| 19 | 19 | u32 text_start; |
|---|
| 20 | 20 | u32 ro_end; |
|---|
| 21 | 21 | /* SMP trampoline */ |
|---|
| 22 | 22 | u32 trampoline_start; |
|---|
| 23 | | - u32 trampoline_status; |
|---|
| 24 | 23 | u32 trampoline_header; |
|---|
| 24 | +#ifdef CONFIG_AMD_MEM_ENCRYPT |
|---|
| 25 | + u32 sev_es_trampoline_start; |
|---|
| 26 | +#endif |
|---|
| 25 | 27 | #ifdef CONFIG_X86_64 |
|---|
| 26 | 28 | u32 trampoline_pgd; |
|---|
| 27 | 29 | #endif |
|---|
| .. | .. |
|---|
| 37 | 39 | #endif |
|---|
| 38 | 40 | }; |
|---|
| 39 | 41 | |
|---|
| 40 | | -/* This must match data at trampoline_32/64.S */ |
|---|
| 42 | +/* This must match data at realmode/rm/trampoline_{32,64}.S */ |
|---|
| 41 | 43 | struct trampoline_header { |
|---|
| 42 | 44 | #ifdef CONFIG_X86_32 |
|---|
| 43 | 45 | u32 start; |
|---|
| .. | .. |
|---|
| 58 | 60 | extern unsigned long initial_code; |
|---|
| 59 | 61 | extern unsigned long initial_gs; |
|---|
| 60 | 62 | extern unsigned long initial_stack; |
|---|
| 63 | +#ifdef CONFIG_AMD_MEM_ENCRYPT |
|---|
| 64 | +extern unsigned long initial_vc_handler; |
|---|
| 65 | +#endif |
|---|
| 61 | 66 | |
|---|
| 62 | 67 | extern unsigned char real_mode_blob[]; |
|---|
| 63 | 68 | extern unsigned char real_mode_relocs[]; |
|---|
| .. | .. |
|---|
| 67 | 72 | extern unsigned char boot_gdt[]; |
|---|
| 68 | 73 | #else |
|---|
| 69 | 74 | extern unsigned char secondary_startup_64[]; |
|---|
| 75 | +extern unsigned char secondary_startup_64_no_verify[]; |
|---|
| 70 | 76 | #endif |
|---|
| 71 | 77 | |
|---|
| 72 | 78 | static inline size_t real_mode_size_needed(void) |
|---|
| .. | .. |
|---|
| 77 | 83 | return ALIGN(real_mode_blob_end - real_mode_blob, PAGE_SIZE); |
|---|
| 78 | 84 | } |
|---|
| 79 | 85 | |
|---|
| 80 | | -void set_real_mode_mem(phys_addr_t mem, size_t size); |
|---|
| 86 | +static inline void set_real_mode_mem(phys_addr_t mem) |
|---|
| 87 | +{ |
|---|
| 88 | + real_mode_header = (struct real_mode_header *) __va(mem); |
|---|
| 89 | +} |
|---|
| 90 | + |
|---|
| 81 | 91 | void reserve_real_mode(void); |
|---|
| 92 | +void load_trampoline_pgtable(void); |
|---|
| 82 | 93 | |
|---|
| 83 | 94 | #endif /* __ASSEMBLY__ */ |
|---|
| 84 | 95 | |
|---|