Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/s390/include/uapi/asm/uvdevice.h
26481 views
1
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2
/*
3
* Copyright IBM Corp. 2022, 2024
4
* Author(s): Steffen Eiden <[email protected]>
5
*/
6
#ifndef __S390_ASM_UVDEVICE_H
7
#define __S390_ASM_UVDEVICE_H
8
9
#include <linux/types.h>
10
11
struct uvio_ioctl_cb {
12
__u32 flags;
13
__u16 uv_rc; /* UV header rc value */
14
__u16 uv_rrc; /* UV header rrc value */
15
__u64 argument_addr; /* Userspace address of uvio argument */
16
__u32 argument_len;
17
__u8 reserved14[0x40 - 0x14]; /* must be zero */
18
};
19
20
#define UVIO_ATT_USER_DATA_LEN 0x100
21
#define UVIO_ATT_UID_LEN 0x10
22
struct uvio_attest {
23
__u64 arcb_addr; /* 0x0000 */
24
__u64 meas_addr; /* 0x0008 */
25
__u64 add_data_addr; /* 0x0010 */
26
__u8 user_data[UVIO_ATT_USER_DATA_LEN]; /* 0x0018 */
27
__u8 config_uid[UVIO_ATT_UID_LEN]; /* 0x0118 */
28
__u32 arcb_len; /* 0x0128 */
29
__u32 meas_len; /* 0x012c */
30
__u32 add_data_len; /* 0x0130 */
31
__u16 user_data_len; /* 0x0134 */
32
__u16 reserved136; /* 0x0136 */
33
};
34
35
/**
36
* uvio_uvdev_info - Information of supported functions
37
* @supp_uvio_cmds - supported IOCTLs by this device
38
* @supp_uv_cmds - supported UVCs corresponding to the IOCTL
39
*
40
* UVIO request to get information about supported request types by this
41
* uvdevice and the Ultravisor. Everything is output. Bits are in LSB0
42
* ordering. If the bit is set in both, @supp_uvio_cmds and @supp_uv_cmds, the
43
* uvdevice and the Ultravisor support that call.
44
*
45
* Note that bit 0 (UVIO_IOCTL_UVDEV_INFO_NR) is always zero for `supp_uv_cmds`
46
* as there is no corresponding UV-call.
47
*/
48
struct uvio_uvdev_info {
49
/*
50
* If bit `n` is set, this device supports the IOCTL with nr `n`.
51
*/
52
__u64 supp_uvio_cmds;
53
/*
54
* If bit `n` is set, the Ultravisor(UV) supports the UV-call
55
* corresponding to the IOCTL with nr `n` in the calling context (host
56
* or guest). The value is only valid if the corresponding bit in
57
* @supp_uvio_cmds is set as well.
58
*/
59
__u64 supp_uv_cmds;
60
};
61
62
/*
63
* The following max values define an upper length for the IOCTL in/out buffers.
64
* However, they do not represent the maximum the Ultravisor allows which is
65
* often way smaller. By allowing larger buffer sizes we hopefully do not need
66
* to update the code with every machine update. It is therefore possible for
67
* userspace to request more memory than actually used by kernel/UV.
68
*/
69
#define UVIO_ATT_ARCB_MAX_LEN 0x100000
70
#define UVIO_ATT_MEASUREMENT_MAX_LEN 0x8000
71
#define UVIO_ATT_ADDITIONAL_MAX_LEN 0x8000
72
#define UVIO_ADD_SECRET_MAX_LEN 0x100000
73
#define UVIO_LIST_SECRETS_LEN 0x1000
74
#define UVIO_RETR_SECRET_MAX_LEN 0x2000
75
76
#define UVIO_DEVICE_NAME "uv"
77
#define UVIO_TYPE_UVC 'u'
78
79
enum UVIO_IOCTL_NR {
80
UVIO_IOCTL_UVDEV_INFO_NR = 0x00,
81
UVIO_IOCTL_ATT_NR,
82
UVIO_IOCTL_ADD_SECRET_NR,
83
UVIO_IOCTL_LIST_SECRETS_NR,
84
UVIO_IOCTL_LOCK_SECRETS_NR,
85
UVIO_IOCTL_RETR_SECRET_NR,
86
/* must be the last entry */
87
UVIO_IOCTL_NUM_IOCTLS
88
};
89
90
#define UVIO_IOCTL(nr) _IOWR(UVIO_TYPE_UVC, nr, struct uvio_ioctl_cb)
91
#define UVIO_IOCTL_UVDEV_INFO UVIO_IOCTL(UVIO_IOCTL_UVDEV_INFO_NR)
92
#define UVIO_IOCTL_ATT UVIO_IOCTL(UVIO_IOCTL_ATT_NR)
93
#define UVIO_IOCTL_ADD_SECRET UVIO_IOCTL(UVIO_IOCTL_ADD_SECRET_NR)
94
#define UVIO_IOCTL_LIST_SECRETS UVIO_IOCTL(UVIO_IOCTL_LIST_SECRETS_NR)
95
#define UVIO_IOCTL_LOCK_SECRETS UVIO_IOCTL(UVIO_IOCTL_LOCK_SECRETS_NR)
96
#define UVIO_IOCTL_RETR_SECRET UVIO_IOCTL(UVIO_IOCTL_RETR_SECRET_NR)
97
98
#define UVIO_SUPP_CALL(nr) (1ULL << (nr))
99
#define UVIO_SUPP_UDEV_INFO UVIO_SUPP_CALL(UVIO_IOCTL_UDEV_INFO_NR)
100
#define UVIO_SUPP_ATT UVIO_SUPP_CALL(UVIO_IOCTL_ATT_NR)
101
#define UVIO_SUPP_ADD_SECRET UVIO_SUPP_CALL(UVIO_IOCTL_ADD_SECRET_NR)
102
#define UVIO_SUPP_LIST_SECRETS UVIO_SUPP_CALL(UVIO_IOCTL_LIST_SECRETS_NR)
103
#define UVIO_SUPP_LOCK_SECRETS UVIO_SUPP_CALL(UVIO_IOCTL_LOCK_SECRETS_NR)
104
#define UVIO_SUPP_RETR_SECRET UVIO_SUPP_CALL(UVIO_IOCTL_RETR_SECRET_NR)
105
106
#endif /* __S390_ASM_UVDEVICE_H */
107
108