printf: Remove unused 'bprintf'
[drm/drm-misc.git] / include / linux / tsm.h
blob11b0c525be30ad80f915410cc1786c4170e0e96b
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __TSM_H
3 #define __TSM_H
5 #include <linux/sizes.h>
6 #include <linux/types.h>
7 #include <linux/uuid.h>
9 #define TSM_INBLOB_MAX 64
10 #define TSM_OUTBLOB_MAX SZ_32K
13 * Privilege level is a nested permission concept to allow confidential
14 * guests to partition address space, 4-levels are supported.
16 #define TSM_PRIVLEVEL_MAX 3
18 /**
19 * struct tsm_desc - option descriptor for generating tsm report blobs
20 * @privlevel: optional privilege level to associate with @outblob
21 * @inblob_len: sizeof @inblob
22 * @inblob: arbitrary input data
23 * @service_provider: optional name of where to obtain the tsm report blob
24 * @service_guid: optional service-provider service guid to attest
25 * @service_manifest_version: optional service-provider service manifest version requested
27 struct tsm_desc {
28 unsigned int privlevel;
29 size_t inblob_len;
30 u8 inblob[TSM_INBLOB_MAX];
31 char *service_provider;
32 guid_t service_guid;
33 unsigned int service_manifest_version;
36 /**
37 * struct tsm_report - track state of report generation relative to options
38 * @desc: input parameters to @report_new()
39 * @outblob_len: sizeof(@outblob)
40 * @outblob: generated evidence to provider to the attestation agent
41 * @auxblob_len: sizeof(@auxblob)
42 * @auxblob: (optional) auxiliary data to the report (e.g. certificate data)
43 * @manifestblob_len: sizeof(@manifestblob)
44 * @manifestblob: (optional) manifest data associated with the report
46 struct tsm_report {
47 struct tsm_desc desc;
48 size_t outblob_len;
49 u8 *outblob;
50 size_t auxblob_len;
51 u8 *auxblob;
52 size_t manifestblob_len;
53 u8 *manifestblob;
56 /**
57 * enum tsm_attr_index - index used to reference report attributes
58 * @TSM_REPORT_GENERATION: index of the report generation number attribute
59 * @TSM_REPORT_PROVIDER: index of the provider name attribute
60 * @TSM_REPORT_PRIVLEVEL: index of the desired privilege level attribute
61 * @TSM_REPORT_PRIVLEVEL_FLOOR: index of the minimum allowed privileg level attribute
62 * @TSM_REPORT_SERVICE_PROVIDER: index of the service provider identifier attribute
63 * @TSM_REPORT_SERVICE_GUID: index of the service GUID attribute
64 * @TSM_REPORT_SERVICE_MANIFEST_VER: index of the service manifest version attribute
66 enum tsm_attr_index {
67 TSM_REPORT_GENERATION,
68 TSM_REPORT_PROVIDER,
69 TSM_REPORT_PRIVLEVEL,
70 TSM_REPORT_PRIVLEVEL_FLOOR,
71 TSM_REPORT_SERVICE_PROVIDER,
72 TSM_REPORT_SERVICE_GUID,
73 TSM_REPORT_SERVICE_MANIFEST_VER,
76 /**
77 * enum tsm_bin_attr_index - index used to reference binary report attributes
78 * @TSM_REPORT_INBLOB: index of the binary report input attribute
79 * @TSM_REPORT_OUTBLOB: index of the binary report output attribute
80 * @TSM_REPORT_AUXBLOB: index of the binary auxiliary data attribute
81 * @TSM_REPORT_MANIFESTBLOB: index of the binary manifest data attribute
83 enum tsm_bin_attr_index {
84 TSM_REPORT_INBLOB,
85 TSM_REPORT_OUTBLOB,
86 TSM_REPORT_AUXBLOB,
87 TSM_REPORT_MANIFESTBLOB,
90 /**
91 * struct tsm_ops - attributes and operations for tsm instances
92 * @name: tsm id reflected in /sys/kernel/config/tsm/report/$report/provider
93 * @privlevel_floor: convey base privlevel for nested scenarios
94 * @report_new: Populate @report with the report blob and auxblob
95 * (optional), return 0 on successful population, or -errno otherwise
96 * @report_attr_visible: show or hide a report attribute entry
97 * @report_bin_attr_visible: show or hide a report binary attribute entry
99 * Implementation specific ops, only one is expected to be registered at
100 * a time i.e. only one of "sev-guest", "tdx-guest", etc.
102 struct tsm_ops {
103 const char *name;
104 unsigned int privlevel_floor;
105 int (*report_new)(struct tsm_report *report, void *data);
106 bool (*report_attr_visible)(int n);
107 bool (*report_bin_attr_visible)(int n);
110 int tsm_register(const struct tsm_ops *ops, void *priv);
111 int tsm_unregister(const struct tsm_ops *ops);
112 #endif /* __TSM_H */