1 | /* |
2 | * QEMU Secure Encrypted Virutualization (SEV) support |
3 | * |
4 | * Copyright: Advanced Micro Devices, 2016-2018 |
5 | * |
6 | * Authors: |
7 | * Brijesh Singh <brijesh.singh@amd.com> |
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" |
20 | #include "sysemu/sev.h" |
21 | #include "qemu/error-report.h" |
22 | #include "qapi/qapi-types-misc-target.h" |
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 | |
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); |
40 | extern char *sev_get_launch_measurement(void); |
41 | extern SevCapability *sev_get_capabilities(void); |
42 | |
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 | |
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; |
83 | gchar *measurement; |
84 | }; |
85 | |
86 | typedef struct SEVState SEVState; |
87 | |
88 | #endif |
89 | |