xref: /openbmc/qemu/target/i386/kvm/tdx.h (revision 0dd5fe5ebeabefc7b3d7f043991b1edfe6b8eda9)
1756e12e7SXiaoyao Li /* SPDX-License-Identifier: GPL-2.0-or-later */
2756e12e7SXiaoyao Li 
3756e12e7SXiaoyao Li #ifndef QEMU_I386_TDX_H
4756e12e7SXiaoyao Li #define QEMU_I386_TDX_H
5756e12e7SXiaoyao Li 
61619d0e4SXiaoyao Li #ifndef CONFIG_USER_ONLY
71619d0e4SXiaoyao Li #include CONFIG_DEVICES /* CONFIG_TDX */
81619d0e4SXiaoyao Li #endif
91619d0e4SXiaoyao Li 
10756e12e7SXiaoyao Li #include "confidential-guest.h"
11756e12e7SXiaoyao Li 
12756e12e7SXiaoyao Li #define TYPE_TDX_GUEST "tdx-guest"
13756e12e7SXiaoyao Li #define TDX_GUEST(obj)  OBJECT_CHECK(TdxGuest, (obj), TYPE_TDX_GUEST)
14756e12e7SXiaoyao Li 
15756e12e7SXiaoyao Li typedef struct TdxGuestClass {
16756e12e7SXiaoyao Li     X86ConfidentialGuestClass parent_class;
17756e12e7SXiaoyao Li } TdxGuestClass;
18756e12e7SXiaoyao Li 
19d529a2acSXiaoyao Li /* TDX requires bus frequency 25MHz */
20d529a2acSXiaoyao Li #define TDX_APIC_BUS_CYCLES_NS 40
21d529a2acSXiaoyao Li 
22756e12e7SXiaoyao Li typedef struct TdxGuest {
23756e12e7SXiaoyao Li     X86ConfidentialGuest parent_obj;
24756e12e7SXiaoyao Li 
25f15898b0SXiaoyao Li     QemuMutex lock;
26f15898b0SXiaoyao Li 
27f15898b0SXiaoyao Li     bool initialized;
28756e12e7SXiaoyao Li     uint64_t attributes;    /* TD attributes */
29f15898b0SXiaoyao Li     uint64_t xfam;
30d05a0858SIsaku Yamahata     char *mrconfigid;       /* base64 encoded sha348 digest */
31d05a0858SIsaku Yamahata     char *mrowner;          /* base64 encoded sha348 digest */
32d05a0858SIsaku Yamahata     char *mrownerconfig;    /* base64 encoded sha348 digest */
33*0dd5fe5eSChao Peng 
34*0dd5fe5eSChao Peng     MemoryRegion *tdvf_mr;
35756e12e7SXiaoyao Li } TdxGuest;
36756e12e7SXiaoyao Li 
371619d0e4SXiaoyao Li #ifdef CONFIG_TDX
381619d0e4SXiaoyao Li bool is_tdx_vm(void);
391619d0e4SXiaoyao Li #else
401619d0e4SXiaoyao Li #define is_tdx_vm() 0
411619d0e4SXiaoyao Li #endif /* CONFIG_TDX */
421619d0e4SXiaoyao Li 
43f15898b0SXiaoyao Li int tdx_pre_create_vcpu(CPUState *cpu, Error **errp);
44*0dd5fe5eSChao Peng void tdx_set_tdvf_region(MemoryRegion *tdvf_mr);
45f15898b0SXiaoyao Li 
46756e12e7SXiaoyao Li #endif /* QEMU_I386_TDX_H */
47