Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/crypto/ccp/sev-dev-tio.h
38184 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
#ifndef __PSP_SEV_TIO_H__
3
#define __PSP_SEV_TIO_H__
4
5
#include <linux/pci-tsm.h>
6
#include <linux/pci-ide.h>
7
#include <linux/tsm.h>
8
#include <uapi/linux/psp-sev.h>
9
10
struct sla_addr_t {
11
union {
12
u64 sla;
13
struct {
14
u64 page_type :1,
15
page_size :1,
16
reserved1 :10,
17
pfn :40,
18
reserved2 :12;
19
};
20
};
21
} __packed;
22
23
#define SEV_TIO_MAX_COMMAND_LENGTH 128
24
25
/* SPDM control structure for DOE */
26
struct tsm_spdm {
27
unsigned long req_len;
28
void *req;
29
unsigned long rsp_len;
30
void *rsp;
31
};
32
33
/* Describes TIO device */
34
struct tsm_dsm_tio {
35
u8 cert_slot;
36
struct sla_addr_t dev_ctx;
37
struct sla_addr_t req;
38
struct sla_addr_t resp;
39
struct sla_addr_t scratch;
40
struct sla_addr_t output;
41
size_t output_len;
42
size_t scratch_len;
43
struct tsm_spdm spdm;
44
struct sla_buffer_hdr *reqbuf; /* vmap'ed @req for DOE */
45
struct sla_buffer_hdr *respbuf; /* vmap'ed @resp for DOE */
46
47
int cmd;
48
int psp_ret;
49
u8 cmd_data[SEV_TIO_MAX_COMMAND_LENGTH];
50
void *data_pg; /* Data page for DEV_STATUS/TDI_STATUS/TDI_INFO/ASID_FENCE */
51
52
#define TIO_IDE_MAX_TC 8
53
struct pci_ide *ide[TIO_IDE_MAX_TC];
54
};
55
56
/* Describes TSM structure for PF0 pointed by pci_dev->tsm */
57
struct tio_dsm {
58
struct pci_tsm_pf0 tsm;
59
struct tsm_dsm_tio data;
60
struct sev_device *sev;
61
};
62
63
/* Data object IDs */
64
#define SPDM_DOBJ_ID_NONE 0
65
#define SPDM_DOBJ_ID_REQ 1
66
#define SPDM_DOBJ_ID_RESP 2
67
68
struct spdm_dobj_hdr {
69
u32 id; /* Data object type identifier */
70
u32 length; /* Length of the data object, INCLUDING THIS HEADER */
71
struct { /* Version of the data object structure */
72
u8 minor;
73
u8 major;
74
} version;
75
} __packed;
76
77
/**
78
* struct sev_tio_status - TIO_STATUS command's info_paddr buffer
79
*
80
* @length: Length of this structure in bytes
81
* @tio_en: Indicates that SNP_INIT_EX initialized the RMP for SEV-TIO
82
* @tio_init_done: Indicates TIO_INIT has been invoked
83
* @spdm_req_size_min: Minimum SPDM request buffer size in bytes
84
* @spdm_req_size_max: Maximum SPDM request buffer size in bytes
85
* @spdm_scratch_size_min: Minimum SPDM scratch buffer size in bytes
86
* @spdm_scratch_size_max: Maximum SPDM scratch buffer size in bytes
87
* @spdm_out_size_min: Minimum SPDM output buffer size in bytes
88
* @spdm_out_size_max: Maximum for the SPDM output buffer size in bytes
89
* @spdm_rsp_size_min: Minimum SPDM response buffer size in bytes
90
* @spdm_rsp_size_max: Maximum SPDM response buffer size in bytes
91
* @devctx_size: Size of a device context buffer in bytes
92
* @tdictx_size: Size of a TDI context buffer in bytes
93
* @tio_crypto_alg: TIO crypto algorithms supported
94
*/
95
struct sev_tio_status {
96
u32 length;
97
u32 tio_en :1,
98
tio_init_done :1,
99
reserved :30;
100
u32 spdm_req_size_min;
101
u32 spdm_req_size_max;
102
u32 spdm_scratch_size_min;
103
u32 spdm_scratch_size_max;
104
u32 spdm_out_size_min;
105
u32 spdm_out_size_max;
106
u32 spdm_rsp_size_min;
107
u32 spdm_rsp_size_max;
108
u32 devctx_size;
109
u32 tdictx_size;
110
u32 tio_crypto_alg;
111
u8 reserved2[12];
112
} __packed;
113
114
int sev_tio_init_locked(void *tio_status_page);
115
int sev_tio_continue(struct tsm_dsm_tio *dev_data);
116
117
int sev_tio_dev_create(struct tsm_dsm_tio *dev_data, u16 device_id, u16 root_port_id,
118
u8 segment_id);
119
int sev_tio_dev_connect(struct tsm_dsm_tio *dev_data, u8 tc_mask, u8 ids[8], u8 cert_slot);
120
int sev_tio_dev_disconnect(struct tsm_dsm_tio *dev_data, bool force);
121
int sev_tio_dev_reclaim(struct tsm_dsm_tio *dev_data);
122
123
#endif /* __PSP_SEV_TIO_H__ */
124
125