]> Git Repo - linux.git/blob - arch/s390/include/uapi/asm/uvdevice.h
Linux 6.14-rc3
[linux.git] / arch / s390 / include / uapi / asm / uvdevice.h
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 */
This page took 0.038273 seconds and 4 git commands to generate.