xref: /openbmc/qemu/target/i386/kvm/tdx.h (revision 88aa6576e4ab40b538f543852128cb17fce37f87)
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #ifndef QEMU_I386_TDX_H
4 #define QEMU_I386_TDX_H
5 
6 #ifndef CONFIG_USER_ONLY
7 #include CONFIG_DEVICES /* CONFIG_TDX */
8 #endif
9 
10 #include "confidential-guest.h"
11 #include "hw/i386/tdvf.h"
12 
13 #define TYPE_TDX_GUEST "tdx-guest"
14 #define TDX_GUEST(obj)  OBJECT_CHECK(TdxGuest, (obj), TYPE_TDX_GUEST)
15 
16 typedef struct TdxGuestClass {
17     X86ConfidentialGuestClass parent_class;
18 } TdxGuestClass;
19 
20 /* TDX requires bus frequency 25MHz */
21 #define TDX_APIC_BUS_CYCLES_NS 40
22 
23 enum TdxRamType {
24     TDX_RAM_UNACCEPTED,
25     TDX_RAM_ADDED,
26 };
27 
28 typedef struct TdxRamEntry {
29     uint64_t address;
30     uint64_t length;
31     enum TdxRamType type;
32 } TdxRamEntry;
33 
34 typedef struct TdxGuest {
35     X86ConfidentialGuest parent_obj;
36 
37     QemuMutex lock;
38 
39     bool initialized;
40     uint64_t attributes;    /* TD attributes */
41     uint64_t xfam;
42     char *mrconfigid;       /* base64 encoded sha348 digest */
43     char *mrowner;          /* base64 encoded sha348 digest */
44     char *mrownerconfig;    /* base64 encoded sha348 digest */
45 
46     MemoryRegion *tdvf_mr;
47     TdxFirmware tdvf;
48 
49     uint32_t nr_ram_entries;
50     TdxRamEntry *ram_entries;
51 } TdxGuest;
52 
53 #ifdef CONFIG_TDX
54 bool is_tdx_vm(void);
55 #else
56 #define is_tdx_vm() 0
57 #endif /* CONFIG_TDX */
58 
59 int tdx_pre_create_vcpu(CPUState *cpu, Error **errp);
60 void tdx_set_tdvf_region(MemoryRegion *tdvf_mr);
61 int tdx_parse_tdvf(void *flash_ptr, int size);
62 
63 #endif /* QEMU_I386_TDX_H */
64