xref: /qemu/target/i386/kvm/tdx.c (revision b455880e5515a9fc2b923bfc6c60bb54519b51d3)
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