1756e12e7SXiaoyao Li /* 2756e12e7SXiaoyao Li * QEMU TDX support 3756e12e7SXiaoyao Li * 4756e12e7SXiaoyao Li * Copyright (c) 2025 Intel Corporation 5756e12e7SXiaoyao Li * 6756e12e7SXiaoyao Li * Author: 7756e12e7SXiaoyao Li * Xiaoyao Li <xiaoyao.li@intel.com> 8756e12e7SXiaoyao Li * 9756e12e7SXiaoyao Li * SPDX-License-Identifier: GPL-2.0-or-later 10756e12e7SXiaoyao Li */ 11756e12e7SXiaoyao Li 12756e12e7SXiaoyao Li #include "qemu/osdep.h" 13756e12e7SXiaoyao Li #include "qom/object_interfaces.h" 14756e12e7SXiaoyao Li 15*b455880eSXiaoyao Li #include "kvm_i386.h" 16756e12e7SXiaoyao Li #include "tdx.h" 17756e12e7SXiaoyao Li 18*b455880eSXiaoyao Li static int tdx_kvm_type(X86ConfidentialGuest *cg) 19*b455880eSXiaoyao Li { 20*b455880eSXiaoyao Li /* Do the object check */ 21*b455880eSXiaoyao Li TDX_GUEST(cg); 22*b455880eSXiaoyao Li 23*b455880eSXiaoyao Li return KVM_X86_TDX_VM; 24*b455880eSXiaoyao Li } 25*b455880eSXiaoyao Li 26756e12e7SXiaoyao Li /* tdx guest */ 27756e12e7SXiaoyao Li OBJECT_DEFINE_TYPE_WITH_INTERFACES(TdxGuest, 28756e12e7SXiaoyao Li tdx_guest, 29756e12e7SXiaoyao Li TDX_GUEST, 30756e12e7SXiaoyao Li X86_CONFIDENTIAL_GUEST, 31756e12e7SXiaoyao Li { TYPE_USER_CREATABLE }, 32756e12e7SXiaoyao Li { NULL }) 33756e12e7SXiaoyao Li 34756e12e7SXiaoyao Li static void tdx_guest_init(Object *obj) 35756e12e7SXiaoyao Li { 36756e12e7SXiaoyao Li ConfidentialGuestSupport *cgs = CONFIDENTIAL_GUEST_SUPPORT(obj); 37756e12e7SXiaoyao Li TdxGuest *tdx = TDX_GUEST(obj); 38756e12e7SXiaoyao Li 39756e12e7SXiaoyao Li cgs->require_guest_memfd = true; 40756e12e7SXiaoyao Li tdx->attributes = 0; 41756e12e7SXiaoyao Li 42756e12e7SXiaoyao Li object_property_add_uint64_ptr(obj, "attributes", &tdx->attributes, 43756e12e7SXiaoyao Li OBJ_PROP_FLAG_READWRITE); 44756e12e7SXiaoyao Li } 45756e12e7SXiaoyao Li 46756e12e7SXiaoyao Li static void tdx_guest_finalize(Object *obj) 47756e12e7SXiaoyao Li { 48756e12e7SXiaoyao Li } 49756e12e7SXiaoyao Li 50756e12e7SXiaoyao Li static void tdx_guest_class_init(ObjectClass *oc, const void *data) 51756e12e7SXiaoyao Li { 52*b455880eSXiaoyao Li X86ConfidentialGuestClass *x86_klass = X86_CONFIDENTIAL_GUEST_CLASS(oc); 53*b455880eSXiaoyao Li 54*b455880eSXiaoyao Li x86_klass->kvm_type = tdx_kvm_type; 55756e12e7SXiaoyao Li } 56