1 /*
2 * QEMU Confidential Guest support
3 *
4 * Copyright Red Hat.
5 *
6 * Authors:
7 * David Gibson <david@gibson.dropbear.id.au>
8 *
9 * This work is licensed under the terms of the GNU GPL, version 2 or
10 * later. See the COPYING file in the top-level directory.
11 *
12 */
13
14 #include "qemu/osdep.h"
15
16 #include "system/confidential-guest-support.h"
17 #include "qapi/error.h"
18
OBJECT_DEFINE_ABSTRACT_TYPE(ConfidentialGuestSupport,confidential_guest_support,CONFIDENTIAL_GUEST_SUPPORT,OBJECT)19 OBJECT_DEFINE_ABSTRACT_TYPE(ConfidentialGuestSupport,
20 confidential_guest_support,
21 CONFIDENTIAL_GUEST_SUPPORT,
22 OBJECT)
23
24 static bool check_support(ConfidentialGuestPlatformType platform,
25 uint16_t platform_version, uint8_t highest_vtl,
26 uint64_t shared_gpa_boundary)
27 {
28 /* Default: no support. */
29 return false;
30 }
31
set_guest_state(hwaddr gpa,uint8_t * ptr,uint64_t len,ConfidentialGuestPageType memory_type,uint16_t cpu_index,Error ** errp)32 static int set_guest_state(hwaddr gpa, uint8_t *ptr, uint64_t len,
33 ConfidentialGuestPageType memory_type,
34 uint16_t cpu_index, Error **errp)
35 {
36 error_setg(errp,
37 "Setting confidential guest state is not supported for this platform");
38 return -1;
39 }
40
set_guest_policy(ConfidentialGuestPolicyType policy_type,uint64_t policy,void * policy_data1,uint32_t policy_data1_size,void * policy_data2,uint32_t policy_data2_size,Error ** errp)41 static int set_guest_policy(ConfidentialGuestPolicyType policy_type,
42 uint64_t policy,
43 void *policy_data1, uint32_t policy_data1_size,
44 void *policy_data2, uint32_t policy_data2_size,
45 Error **errp)
46 {
47 error_setg(errp,
48 "Setting confidential guest policy is not supported for this platform");
49 return -1;
50 }
51
get_mem_map_entry(int index,ConfidentialGuestMemoryMapEntry * entry,Error ** errp)52 static int get_mem_map_entry(int index, ConfidentialGuestMemoryMapEntry *entry,
53 Error **errp)
54 {
55 error_setg(
56 errp,
57 "Obtaining the confidential guest memory map is not supported for this platform");
58 return -1;
59 }
60
confidential_guest_support_class_init(ObjectClass * oc,const void * data)61 static void confidential_guest_support_class_init(ObjectClass *oc,
62 const void *data)
63 {
64 ConfidentialGuestSupportClass *cgsc = CONFIDENTIAL_GUEST_SUPPORT_CLASS(oc);
65 cgsc->check_support = check_support;
66 cgsc->set_guest_state = set_guest_state;
67 cgsc->set_guest_policy = set_guest_policy;
68 cgsc->get_mem_map_entry = get_mem_map_entry;
69 }
70
confidential_guest_support_init(Object * obj)71 static void confidential_guest_support_init(Object *obj)
72 {
73 }
74
confidential_guest_support_finalize(Object * obj)75 static void confidential_guest_support_finalize(Object *obj)
76 {
77 }
78