]>
Commit | Line | Data |
---|---|---|
a9b4942f BS |
1 | /* |
2 | * QEMU Secure Encrypted Virutualization (SEV) support | |
3 | * | |
4 | * Copyright: Advanced Micro Devices, 2016-2018 | |
5 | * | |
6 | * Authors: | |
7 | * Brijesh Singh <[email protected]> | |
8 | * | |
9 | * This work is licensed under the terms of the GNU GPL, version 2 or later. | |
10 | * See the COPYING file in the top-level directory. | |
11 | * | |
12 | */ | |
13 | ||
14 | #ifndef QEMU_SEV_I386_H | |
15 | #define QEMU_SEV_I386_H | |
16 | ||
17 | #include "qom/object.h" | |
18 | #include "qapi/error.h" | |
19 | #include "sysemu/kvm.h" | |
d8575c6c | 20 | #include "sysemu/sev.h" |
a9b4942f | 21 | #include "qemu/error-report.h" |
a6c7040f | 22 | #include "qapi/qapi-commands-target.h" |
a9b4942f BS |
23 | |
24 | #define SEV_POLICY_NODBG 0x1 | |
25 | #define SEV_POLICY_NOKS 0x2 | |
26 | #define SEV_POLICY_ES 0x4 | |
27 | #define SEV_POLICY_NOSEND 0x8 | |
28 | #define SEV_POLICY_DOMAIN 0x10 | |
29 | #define SEV_POLICY_SEV 0x20 | |
30 | ||
31 | #define TYPE_QSEV_GUEST_INFO "sev-guest" | |
32 | #define QSEV_GUEST_INFO(obj) \ | |
33 | OBJECT_CHECK(QSevGuestInfo, (obj), TYPE_QSEV_GUEST_INFO) | |
34 | ||
d8575c6c BS |
35 | extern bool sev_enabled(void); |
36 | extern uint64_t sev_get_me_mask(void); | |
37 | extern SevInfo *sev_get_info(void); | |
38 | extern uint32_t sev_get_cbit_position(void); | |
39 | extern uint32_t sev_get_reduced_phys_bits(void); | |
c6c89c97 | 40 | extern char *sev_get_launch_measurement(void); |
9f750794 | 41 | extern SevCapability *sev_get_capabilities(void); |
d8575c6c | 42 | |
a9b4942f BS |
43 | typedef struct QSevGuestInfo QSevGuestInfo; |
44 | typedef struct QSevGuestInfoClass QSevGuestInfoClass; | |
45 | ||
46 | /** | |
47 | * QSevGuestInfo: | |
48 | * | |
49 | * The QSevGuestInfo object is used for creating a SEV guest. | |
50 | * | |
51 | * # $QEMU \ | |
52 | * -object sev-guest,id=sev0 \ | |
53 | * -machine ...,memory-encryption=sev0 | |
54 | */ | |
55 | struct QSevGuestInfo { | |
56 | Object parent_obj; | |
57 | ||
58 | char *sev_device; | |
59 | uint32_t policy; | |
60 | uint32_t handle; | |
61 | char *dh_cert_file; | |
62 | char *session_file; | |
63 | uint32_t cbitpos; | |
64 | uint32_t reduced_phys_bits; | |
65 | }; | |
66 | ||
67 | struct QSevGuestInfoClass { | |
68 | ObjectClass parent_class; | |
69 | }; | |
70 | ||
d8575c6c BS |
71 | struct SEVState { |
72 | QSevGuestInfo *sev_info; | |
73 | uint8_t api_major; | |
74 | uint8_t api_minor; | |
75 | uint8_t build_id; | |
76 | uint32_t policy; | |
77 | uint64_t me_mask; | |
78 | uint32_t cbitpos; | |
79 | uint32_t reduced_phys_bits; | |
80 | uint32_t handle; | |
81 | int sev_fd; | |
82 | SevState state; | |
c6c89c97 | 83 | gchar *measurement; |
d8575c6c BS |
84 | }; |
85 | ||
86 | typedef struct SEVState SEVState; | |
87 | ||
a9b4942f | 88 | #endif |