linux/arch/x86/include/asm/mem_encrypt.h
<<
>>
Prefs
   1/*
   2 * AMD Memory Encryption Support
   3 *
   4 * Copyright (C) 2016 Advanced Micro Devices, Inc.
   5 *
   6 * Author: Tom Lendacky <thomas.lendacky@amd.com>
   7 *
   8 * This program is free software; you can redistribute it and/or modify
   9 * it under the terms of the GNU General Public License version 2 as
  10 * published by the Free Software Foundation.
  11 */
  12
  13#ifndef __X86_MEM_ENCRYPT_H__
  14#define __X86_MEM_ENCRYPT_H__
  15
  16#ifndef __ASSEMBLY__
  17
  18#include <linux/init.h>
  19
  20#include <asm/bootparam.h>
  21
  22#ifdef CONFIG_AMD_MEM_ENCRYPT
  23
  24extern u64 sme_me_mask;
  25
  26void sme_encrypt_execute(unsigned long encrypted_kernel_vaddr,
  27                         unsigned long decrypted_kernel_vaddr,
  28                         unsigned long kernel_len,
  29                         unsigned long encryption_wa,
  30                         unsigned long encryption_pgd);
  31
  32void __init sme_early_encrypt(resource_size_t paddr,
  33                              unsigned long size);
  34void __init sme_early_decrypt(resource_size_t paddr,
  35                              unsigned long size);
  36
  37void __init sme_map_bootdata(char *real_mode_data);
  38void __init sme_unmap_bootdata(char *real_mode_data);
  39
  40void __init sme_early_init(void);
  41
  42void __init sme_encrypt_kernel(void);
  43void __init sme_enable(struct boot_params *bp);
  44
  45/* Architecture __weak replacement functions */
  46void __init mem_encrypt_init(void);
  47
  48void swiotlb_set_mem_attributes(void *vaddr, unsigned long size);
  49
  50#else   /* !CONFIG_AMD_MEM_ENCRYPT */
  51
  52#define sme_me_mask     0ULL
  53
  54static inline void __init sme_early_encrypt(resource_size_t paddr,
  55                                            unsigned long size) { }
  56static inline void __init sme_early_decrypt(resource_size_t paddr,
  57                                            unsigned long size) { }
  58
  59static inline void __init sme_map_bootdata(char *real_mode_data) { }
  60static inline void __init sme_unmap_bootdata(char *real_mode_data) { }
  61
  62static inline void __init sme_early_init(void) { }
  63
  64static inline void __init sme_encrypt_kernel(void) { }
  65static inline void __init sme_enable(struct boot_params *bp) { }
  66
  67#endif  /* CONFIG_AMD_MEM_ENCRYPT */
  68
  69/*
  70 * The __sme_pa() and __sme_pa_nodebug() macros are meant for use when
  71 * writing to or comparing values from the cr3 register.  Having the
  72 * encryption mask set in cr3 enables the PGD entry to be encrypted and
  73 * avoid special case handling of PGD allocations.
  74 */
  75#define __sme_pa(x)             (__pa(x) | sme_me_mask)
  76#define __sme_pa_nodebug(x)     (__pa_nodebug(x) | sme_me_mask)
  77
  78#endif  /* __ASSEMBLY__ */
  79
  80#endif  /* __X86_MEM_ENCRYPT_H__ */
  81