root/arch/x86/include/asm/mem_encrypt.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. sme_early_encrypt
  2. sme_early_decrypt
  3. sme_map_bootdata
  4. sme_unmap_bootdata
  5. sme_early_init
  6. sme_encrypt_kernel
  7. sme_enable
  8. sme_active
  9. sev_active
  10. early_set_memory_decrypted
  11. early_set_memory_encrypted
  12. mem_encrypt_active
  13. sme_get_me_mask

   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * AMD Memory Encryption Support
   4  *
   5  * Copyright (C) 2016 Advanced Micro Devices, Inc.
   6  *
   7  * Author: Tom Lendacky <thomas.lendacky@amd.com>
   8  */
   9 
  10 #ifndef __X86_MEM_ENCRYPT_H__
  11 #define __X86_MEM_ENCRYPT_H__
  12 
  13 #ifndef __ASSEMBLY__
  14 
  15 #include <linux/init.h>
  16 
  17 #include <asm/bootparam.h>
  18 
  19 #ifdef CONFIG_AMD_MEM_ENCRYPT
  20 
  21 extern u64 sme_me_mask;
  22 extern bool sev_enabled;
  23 
  24 void sme_encrypt_execute(unsigned long encrypted_kernel_vaddr,
  25                          unsigned long decrypted_kernel_vaddr,
  26                          unsigned long kernel_len,
  27                          unsigned long encryption_wa,
  28                          unsigned long encryption_pgd);
  29 
  30 void __init sme_early_encrypt(resource_size_t paddr,
  31                               unsigned long size);
  32 void __init sme_early_decrypt(resource_size_t paddr,
  33                               unsigned long size);
  34 
  35 void __init sme_map_bootdata(char *real_mode_data);
  36 void __init sme_unmap_bootdata(char *real_mode_data);
  37 
  38 void __init sme_early_init(void);
  39 
  40 void __init sme_encrypt_kernel(struct boot_params *bp);
  41 void __init sme_enable(struct boot_params *bp);
  42 
  43 int __init early_set_memory_decrypted(unsigned long vaddr, unsigned long size);
  44 int __init early_set_memory_encrypted(unsigned long vaddr, unsigned long size);
  45 
  46 /* Architecture __weak replacement functions */
  47 void __init mem_encrypt_init(void);
  48 void __init mem_encrypt_free_decrypted_mem(void);
  49 
  50 bool sme_active(void);
  51 bool sev_active(void);
  52 
  53 #define __bss_decrypted __attribute__((__section__(".bss..decrypted")))
  54 
  55 #else   /* !CONFIG_AMD_MEM_ENCRYPT */
  56 
  57 #define sme_me_mask     0ULL
  58 
  59 static inline void __init sme_early_encrypt(resource_size_t paddr,
  60                                             unsigned long size) { }
  61 static inline void __init sme_early_decrypt(resource_size_t paddr,
  62                                             unsigned long size) { }
  63 
  64 static inline void __init sme_map_bootdata(char *real_mode_data) { }
  65 static inline void __init sme_unmap_bootdata(char *real_mode_data) { }
  66 
  67 static inline void __init sme_early_init(void) { }
  68 
  69 static inline void __init sme_encrypt_kernel(struct boot_params *bp) { }
  70 static inline void __init sme_enable(struct boot_params *bp) { }
  71 
  72 static inline bool sme_active(void) { return false; }
  73 static inline bool sev_active(void) { return false; }
  74 
  75 static inline int __init
  76 early_set_memory_decrypted(unsigned long vaddr, unsigned long size) { return 0; }
  77 static inline int __init
  78 early_set_memory_encrypted(unsigned long vaddr, unsigned long size) { return 0; }
  79 
  80 #define __bss_decrypted
  81 
  82 #endif  /* CONFIG_AMD_MEM_ENCRYPT */
  83 
  84 /*
  85  * The __sme_pa() and __sme_pa_nodebug() macros are meant for use when
  86  * writing to or comparing values from the cr3 register.  Having the
  87  * encryption mask set in cr3 enables the PGD entry to be encrypted and
  88  * avoid special case handling of PGD allocations.
  89  */
  90 #define __sme_pa(x)             (__pa(x) | sme_me_mask)
  91 #define __sme_pa_nodebug(x)     (__pa_nodebug(x) | sme_me_mask)
  92 
  93 extern char __start_bss_decrypted[], __end_bss_decrypted[], __start_bss_decrypted_unused[];
  94 
  95 static inline bool mem_encrypt_active(void)
  96 {
  97         return sme_me_mask;
  98 }
  99 
 100 static inline u64 sme_get_me_mask(void)
 101 {
 102         return sme_me_mask;
 103 }
 104 
 105 #endif  /* __ASSEMBLY__ */
 106 
 107 #endif  /* __X86_MEM_ENCRYPT_H__ */

/* [<][>][^][v][top][bottom][index][help] */