1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * Automatically generated functions to read TDX global metadata.
4 *
5 * This file doesn't compile on its own as it lacks of inclusion
6 * of SEAMCALL wrapper primitive which reads global metadata.
7 * Include this file to other C file instead.
8 */
9
get_tdx_sys_info_features(struct tdx_sys_info_features * sysinfo_features)10 static int get_tdx_sys_info_features(struct tdx_sys_info_features *sysinfo_features)
11 {
12 int ret = 0;
13 u64 val;
14
15 if (!ret && !(ret = read_sys_metadata_field(0x0A00000300000008, &val)))
16 sysinfo_features->tdx_features0 = val;
17
18 return ret;
19 }
20
get_tdx_sys_info_tdmr(struct tdx_sys_info_tdmr * sysinfo_tdmr)21 static int get_tdx_sys_info_tdmr(struct tdx_sys_info_tdmr *sysinfo_tdmr)
22 {
23 int ret = 0;
24 u64 val;
25
26 if (!ret && !(ret = read_sys_metadata_field(0x9100000100000008, &val)))
27 sysinfo_tdmr->max_tdmrs = val;
28 if (!ret && !(ret = read_sys_metadata_field(0x9100000100000009, &val)))
29 sysinfo_tdmr->max_reserved_per_tdmr = val;
30 if (!ret && !(ret = read_sys_metadata_field(0x9100000100000010, &val)))
31 sysinfo_tdmr->pamt_4k_entry_size = val;
32 if (!ret && !(ret = read_sys_metadata_field(0x9100000100000011, &val)))
33 sysinfo_tdmr->pamt_2m_entry_size = val;
34 if (!ret && !(ret = read_sys_metadata_field(0x9100000100000012, &val)))
35 sysinfo_tdmr->pamt_1g_entry_size = val;
36
37 return ret;
38 }
39
get_tdx_sys_info_td_ctrl(struct tdx_sys_info_td_ctrl * sysinfo_td_ctrl)40 static int get_tdx_sys_info_td_ctrl(struct tdx_sys_info_td_ctrl *sysinfo_td_ctrl)
41 {
42 int ret = 0;
43 u64 val;
44
45 if (!ret && !(ret = read_sys_metadata_field(0x9800000100000000, &val)))
46 sysinfo_td_ctrl->tdr_base_size = val;
47 if (!ret && !(ret = read_sys_metadata_field(0x9800000100000100, &val)))
48 sysinfo_td_ctrl->tdcs_base_size = val;
49 if (!ret && !(ret = read_sys_metadata_field(0x9800000100000200, &val)))
50 sysinfo_td_ctrl->tdvps_base_size = val;
51
52 return ret;
53 }
54
get_tdx_sys_info_td_conf(struct tdx_sys_info_td_conf * sysinfo_td_conf)55 static int get_tdx_sys_info_td_conf(struct tdx_sys_info_td_conf *sysinfo_td_conf)
56 {
57 int ret = 0;
58 u64 val;
59 int i, j;
60
61 if (!ret && !(ret = read_sys_metadata_field(0x1900000300000000, &val)))
62 sysinfo_td_conf->attributes_fixed0 = val;
63 if (!ret && !(ret = read_sys_metadata_field(0x1900000300000001, &val)))
64 sysinfo_td_conf->attributes_fixed1 = val;
65 if (!ret && !(ret = read_sys_metadata_field(0x1900000300000002, &val)))
66 sysinfo_td_conf->xfam_fixed0 = val;
67 if (!ret && !(ret = read_sys_metadata_field(0x1900000300000003, &val)))
68 sysinfo_td_conf->xfam_fixed1 = val;
69 if (!ret && !(ret = read_sys_metadata_field(0x9900000100000004, &val)))
70 sysinfo_td_conf->num_cpuid_config = val;
71 if (!ret && !(ret = read_sys_metadata_field(0x9900000100000008, &val)))
72 sysinfo_td_conf->max_vcpus_per_td = val;
73 if (sysinfo_td_conf->num_cpuid_config > ARRAY_SIZE(sysinfo_td_conf->cpuid_config_leaves))
74 return -EINVAL;
75 for (i = 0; i < sysinfo_td_conf->num_cpuid_config; i++)
76 if (!ret && !(ret = read_sys_metadata_field(0x9900000300000400 + i, &val)))
77 sysinfo_td_conf->cpuid_config_leaves[i] = val;
78 if (sysinfo_td_conf->num_cpuid_config > ARRAY_SIZE(sysinfo_td_conf->cpuid_config_values))
79 return -EINVAL;
80 for (i = 0; i < sysinfo_td_conf->num_cpuid_config; i++)
81 for (j = 0; j < 2; j++)
82 if (!ret && !(ret = read_sys_metadata_field(0x9900000300000500 + i * 2 + j, &val)))
83 sysinfo_td_conf->cpuid_config_values[i][j] = val;
84
85 return ret;
86 }
87
get_tdx_sys_info(struct tdx_sys_info * sysinfo)88 static int get_tdx_sys_info(struct tdx_sys_info *sysinfo)
89 {
90 int ret = 0;
91
92 ret = ret ?: get_tdx_sys_info_features(&sysinfo->features);
93 ret = ret ?: get_tdx_sys_info_tdmr(&sysinfo->tdmr);
94 ret = ret ?: get_tdx_sys_info_td_ctrl(&sysinfo->td_ctrl);
95 ret = ret ?: get_tdx_sys_info_td_conf(&sysinfo->td_conf);
96
97 return ret;
98 }
99