mem_encrypt.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. #ifndef __MEM_ENCRYPT_H__
  13. #define __MEM_ENCRYPT_H__
  14. #ifndef __ASSEMBLY__
  15. #ifdef CONFIG_ARCH_HAS_MEM_ENCRYPT
  16. #include <asm/mem_encrypt.h>
  17. #else /* !CONFIG_ARCH_HAS_MEM_ENCRYPT */
  18. #define sme_me_mask 0ULL
  19. #endif /* CONFIG_ARCH_HAS_MEM_ENCRYPT */
  20. static inline bool sme_active(void)
  21. {
  22. return !!sme_me_mask;
  23. }
  24. static inline u64 sme_get_me_mask(void)
  25. {
  26. return sme_me_mask;
  27. }
  28. #ifdef CONFIG_AMD_MEM_ENCRYPT
  29. /*
  30. * The __sme_set() and __sme_clr() macros are useful for adding or removing
  31. * the encryption mask from a value (e.g. when dealing with pagetable
  32. * entries).
  33. */
  34. #define __sme_set(x) ((x) | sme_me_mask)
  35. #define __sme_clr(x) ((x) & ~sme_me_mask)
  36. #else
  37. #define __sme_set(x) (x)
  38. #define __sme_clr(x) (x)
  39. #endif
  40. #endif /* __ASSEMBLY__ */
  41. #endif /* __MEM_ENCRYPT_H__ */