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 19*d529a2acSXiaoyao Li /* TDX requires bus frequency 25MHz */ 20*d529a2acSXiaoyao Li #define TDX_APIC_BUS_CYCLES_NS 40 21*d529a2acSXiaoyao 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 */ 33756e12e7SXiaoyao Li } TdxGuest; 34756e12e7SXiaoyao Li 351619d0e4SXiaoyao Li #ifdef CONFIG_TDX 361619d0e4SXiaoyao Li bool is_tdx_vm(void); 371619d0e4SXiaoyao Li #else 381619d0e4SXiaoyao Li #define is_tdx_vm() 0 391619d0e4SXiaoyao Li #endif /* CONFIG_TDX */ 401619d0e4SXiaoyao Li 41f15898b0SXiaoyao Li int tdx_pre_create_vcpu(CPUState *cpu, Error **errp); 42f15898b0SXiaoyao Li 43756e12e7SXiaoyao Li #endif /* QEMU_I386_TDX_H */ 44