xref: /kvm-unit-tests/lib/x86/amd_sev.h (revision 1399f7f7f1c3170b2337c08beb615ae875636405)
1350bf64aSZixuan Wang /*
2350bf64aSZixuan Wang  * AMD SEV support in kvm-unit-tests
3350bf64aSZixuan Wang  *
4350bf64aSZixuan Wang  * Copyright (c) 2021, Google Inc
5350bf64aSZixuan Wang  *
6350bf64aSZixuan Wang  * Authors:
7350bf64aSZixuan Wang  *   Zixuan Wang <zixuanwang@google.com>
8350bf64aSZixuan Wang  *
9350bf64aSZixuan Wang  * SPDX-License-Identifier: LGPL-2.0-or-later
10350bf64aSZixuan Wang  */
11350bf64aSZixuan Wang 
12350bf64aSZixuan Wang #ifndef _X86_AMD_SEV_H_
13350bf64aSZixuan Wang #define _X86_AMD_SEV_H_
14350bf64aSZixuan Wang 
15*c98ce6e0SAlexandru Elisei #ifdef CONFIG_EFI
16350bf64aSZixuan Wang 
17350bf64aSZixuan Wang #include "libcflat.h"
18350bf64aSZixuan Wang #include "desc.h"
19350bf64aSZixuan Wang #include "asm/page.h"
20350bf64aSZixuan Wang #include "efi.h"
21350bf64aSZixuan Wang 
22350bf64aSZixuan Wang /*
23350bf64aSZixuan Wang  * AMD Programmer's Manual Volume 3
24350bf64aSZixuan Wang  *   - Section "Function 8000_0000h - Maximum Extended Function Number and Vendor String"
25350bf64aSZixuan Wang  *   - Section "Function 8000_001Fh - Encrypted Memory Capabilities"
26350bf64aSZixuan Wang  */
27350bf64aSZixuan Wang #define CPUID_FN_LARGEST_EXT_FUNC_NUM 0x80000000
28350bf64aSZixuan Wang #define CPUID_FN_ENCRYPT_MEM_CAPAB    0x8000001f
29350bf64aSZixuan Wang #define SEV_SUPPORT_MASK              0b10
30350bf64aSZixuan Wang 
31350bf64aSZixuan Wang /*
32350bf64aSZixuan Wang  * AMD Programmer's Manual Volume 2
33350bf64aSZixuan Wang  *   - Section "SEV_STATUS MSR"
34350bf64aSZixuan Wang  */
35350bf64aSZixuan Wang #define MSR_SEV_STATUS      0xc0010131
36350bf64aSZixuan Wang #define SEV_ENABLED_MASK    0b1
37bf812590SZixuan Wang #define SEV_ES_ENABLED_MASK 0b10
38350bf64aSZixuan Wang 
39350bf64aSZixuan Wang bool amd_sev_enabled(void);
40350bf64aSZixuan Wang efi_status_t setup_amd_sev(void);
41350bf64aSZixuan Wang 
42706ede18SZixuan Wang /*
43706ede18SZixuan Wang  * AMD Programmer's Manual Volume 2
44706ede18SZixuan Wang  *   - Section "#VC Exception"
45706ede18SZixuan Wang  */
46706ede18SZixuan Wang #define SEV_ES_VC_HANDLER_VECTOR 29
47706ede18SZixuan Wang 
48b114aa57SZixuan Wang /*
49b114aa57SZixuan Wang  * AMD Programmer's Manual Volume 2
50b114aa57SZixuan Wang  *   - Section "GHCB"
51b114aa57SZixuan Wang  */
52b114aa57SZixuan Wang #define SEV_ES_GHCB_MSR_INDEX 0xc0010130
53b114aa57SZixuan Wang 
54bf812590SZixuan Wang bool amd_sev_es_enabled(void);
55706ede18SZixuan Wang efi_status_t setup_amd_sev_es(void);
56b114aa57SZixuan Wang void setup_ghcb_pte(pgd_t *page_table);
57bf812590SZixuan Wang 
58350bf64aSZixuan Wang unsigned long long get_amd_sev_c_bit_mask(void);
5930203ea5SZixuan Wang unsigned long long get_amd_sev_addr_upperbound(void);
60350bf64aSZixuan Wang 
61*c98ce6e0SAlexandru Elisei #endif /* CONFIG_EFI */
62350bf64aSZixuan Wang 
63350bf64aSZixuan Wang #endif /* _X86_AMD_SEV_H_ */
64