0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #ifndef __ASM_S390_ZCRYPT_H
0015 #define __ASM_S390_ZCRYPT_H
0016
0017 #define ZCRYPT_VERSION 2
0018 #define ZCRYPT_RELEASE 2
0019 #define ZCRYPT_VARIANT 1
0020
0021 #include <linux/ioctl.h>
0022 #include <linux/compiler.h>
0023 #include <linux/types.h>
0024
0025
0026 #define ZCRYPT_NAME "zcrypt"
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038 struct ica_rsa_modexpo {
0039 __u8 __user *inputdata;
0040 __u32 inputdatalength;
0041 __u8 __user *outputdata;
0042 __u32 outputdatalength;
0043 __u8 __user *b_key;
0044 __u8 __user *n_modulus;
0045 };
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061 struct ica_rsa_modexpo_crt {
0062 __u8 __user *inputdata;
0063 __u32 inputdatalength;
0064 __u8 __user *outputdata;
0065 __u32 outputdatalength;
0066 __u8 __user *bp_key;
0067 __u8 __user *bq_key;
0068 __u8 __user *np_prime;
0069 __u8 __user *nq_prime;
0070 __u8 __user *u_mult_inv;
0071 };
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085 struct CPRBX {
0086 __u16 cprb_len;
0087 __u8 cprb_ver_id;
0088 __u8 _pad_000[3];
0089 __u8 func_id[2];
0090 __u8 cprb_flags[4];
0091 __u32 req_parml;
0092 __u32 req_datal;
0093 __u32 rpl_msgbl;
0094 __u32 rpld_parml;
0095 __u32 rpl_datal;
0096 __u32 rpld_datal;
0097 __u32 req_extbl;
0098 __u8 _pad_001[4];
0099 __u32 rpld_extbl;
0100 __u8 _pad_002[16 - sizeof(__u8 *)];
0101 __u8 __user *req_parmb;
0102 __u8 _pad_003[16 - sizeof(__u8 *)];
0103 __u8 __user *req_datab;
0104 __u8 _pad_004[16 - sizeof(__u8 *)];
0105 __u8 __user *rpl_parmb;
0106 __u8 _pad_005[16 - sizeof(__u8 *)];
0107 __u8 __user *rpl_datab;
0108 __u8 _pad_006[16 - sizeof(__u8 *)];
0109 __u8 __user *req_extb;
0110 __u8 _pad_007[16 - sizeof(__u8 *)];
0111 __u8 __user *rpl_extb;
0112 __u16 ccp_rtcode;
0113 __u16 ccp_rscode;
0114 __u32 mac_data_len;
0115 __u8 logon_id[8];
0116 __u8 mac_value[8];
0117 __u8 mac_content_flgs;
0118 __u8 _pad_008;
0119 __u16 domain;
0120 __u8 _pad_009[12];
0121 __u8 _pad_010[36];
0122 } __attribute__((packed));
0123
0124
0125
0126
0127 struct ica_xcRB {
0128 __u16 agent_ID;
0129 __u32 user_defined;
0130 __u16 request_ID;
0131 __u32 request_control_blk_length;
0132 __u8 _padding1[16 - sizeof(__u8 *)];
0133 __u8 __user *request_control_blk_addr;
0134 __u32 request_data_length;
0135 __u8 _padding2[16 - sizeof(__u8 *)];
0136 __u8 __user *request_data_address;
0137 __u32 reply_control_blk_length;
0138 __u8 _padding3[16 - sizeof(__u8 *)];
0139 __u8 __user *reply_control_blk_addr;
0140 __u32 reply_data_length;
0141 __u8 __padding4[16 - sizeof(__u8 *)];
0142 __u8 __user *reply_data_addr;
0143 __u16 priority_window;
0144 __u32 status;
0145 } __attribute__((packed));
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161 struct ep11_cprb {
0162 __u16 cprb_len;
0163 __u8 cprb_ver_id;
0164 __u8 pad_000[2];
0165 __u8 flags;
0166 __u8 func_id[2];
0167 __u32 source_id;
0168 __u32 target_id;
0169 __u32 ret_code;
0170 __u32 reserved1;
0171 __u32 reserved2;
0172 __u32 payload_len;
0173 } __attribute__((packed));
0174
0175
0176
0177
0178
0179
0180 struct ep11_target_dev {
0181 __u16 ap_id;
0182 __u16 dom_id;
0183 };
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196 struct ep11_urb {
0197 __u16 targets_num;
0198 __u8 __user *targets;
0199 __u64 weight;
0200 __u64 req_no;
0201 __u64 req_len;
0202 __u8 __user *req;
0203 __u64 resp_len;
0204 __u8 __user *resp;
0205 } __attribute__((packed));
0206
0207
0208
0209
0210
0211
0212
0213
0214
0215
0216
0217
0218
0219 struct zcrypt_device_status_ext {
0220 unsigned int hwtype:8;
0221 unsigned int qid:16;
0222 unsigned int online:1;
0223 unsigned int functions:6;
0224 unsigned int reserved:1;
0225 };
0226
0227 #define MAX_ZDEV_CARDIDS_EXT 256
0228 #define MAX_ZDEV_DOMAINS_EXT 256
0229
0230
0231 #define MAX_ZDEV_ENTRIES_EXT (MAX_ZDEV_CARDIDS_EXT * MAX_ZDEV_DOMAINS_EXT)
0232
0233
0234 struct zcrypt_device_matrix_ext {
0235 struct zcrypt_device_status_ext device[MAX_ZDEV_ENTRIES_EXT];
0236 };
0237
0238 #define AUTOSELECT 0xFFFFFFFF
0239 #define AUTOSEL_AP ((__u16)0xFFFF)
0240 #define AUTOSEL_DOM ((__u16)0xFFFF)
0241
0242 #define ZCRYPT_IOCTL_MAGIC 'z'
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287
0288
0289
0290
0291
0292
0293
0294
0295
0296
0297
0298
0299
0300
0301
0302
0303
0304
0305
0306 #define ICARSAMODEXPO _IOC(_IOC_READ | _IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x05, 0)
0307 #define ICARSACRT _IOC(_IOC_READ | _IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x06, 0)
0308 #define ZSECSENDCPRB _IOC(_IOC_READ | _IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x81, 0)
0309 #define ZSENDEP11CPRB _IOC(_IOC_READ | _IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x04, 0)
0310
0311 #define ZCRYPT_DEVICE_STATUS _IOC(_IOC_READ | _IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x5f, 0)
0312 #define ZCRYPT_STATUS_MASK _IOR(ZCRYPT_IOCTL_MAGIC, 0x58, char[MAX_ZDEV_CARDIDS_EXT])
0313 #define ZCRYPT_QDEPTH_MASK _IOR(ZCRYPT_IOCTL_MAGIC, 0x59, char[MAX_ZDEV_CARDIDS_EXT])
0314 #define ZCRYPT_PERDEV_REQCNT _IOR(ZCRYPT_IOCTL_MAGIC, 0x5a, int[MAX_ZDEV_CARDIDS_EXT])
0315
0316
0317
0318
0319
0320
0321 #define ZCRYPT_MAX_MINOR_NODES 256
0322
0323
0324 #define MAX_ZDEV_IOCTLS (1 << _IOC_NRBITS)
0325
0326
0327
0328
0329
0330
0331 #define MAX_ZDEV_CARDIDS 64
0332
0333 #define MAX_ZDEV_DOMAINS 256
0334
0335
0336 #define MAX_ZDEV_ENTRIES (MAX_ZDEV_CARDIDS * MAX_ZDEV_DOMAINS)
0337
0338
0339 struct zcrypt_device_status {
0340 unsigned int hwtype:8;
0341 unsigned int qid:14;
0342 unsigned int online:1;
0343 unsigned int functions:6;
0344 unsigned int reserved:3;
0345 };
0346
0347
0348 struct zcrypt_device_matrix {
0349 struct zcrypt_device_status device[MAX_ZDEV_ENTRIES];
0350 };
0351
0352
0353 #define ZDEVICESTATUS _IOC(_IOC_READ | _IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x4f, 0)
0354
0355 #define Z90STAT_STATUS_MASK _IOR(ZCRYPT_IOCTL_MAGIC, 0x48, char[64])
0356
0357 #define Z90STAT_QDEPTH_MASK _IOR(ZCRYPT_IOCTL_MAGIC, 0x49, char[64])
0358
0359 #define Z90STAT_PERDEV_REQCNT _IOR(ZCRYPT_IOCTL_MAGIC, 0x4a, int[64])
0360
0361
0362 #define Z90STAT_REQUESTQ_COUNT _IOR(ZCRYPT_IOCTL_MAGIC, 0x44, int)
0363 #define Z90STAT_PENDINGQ_COUNT _IOR(ZCRYPT_IOCTL_MAGIC, 0x45, int)
0364 #define Z90STAT_TOTALOPEN_COUNT _IOR(ZCRYPT_IOCTL_MAGIC, 0x46, int)
0365 #define Z90STAT_DOMAIN_INDEX _IOR(ZCRYPT_IOCTL_MAGIC, 0x47, int)
0366
0367
0368
0369
0370
0371
0372 #endif