Commit 8e89b6be76927751af5608490158100974b339e6
Committed by
Martin Schwidefsky
1 parent
ffda4f7198
Exists in
master
and in
7 other branches
[S390] zcrypt: use definitions for cex3
New definitions are added for CEX3 device types. They will be set in the according probe functions. CEX3 device types will be handled in the same modules as CEX2 device types. In the first step they are the same as CEX2 types, but they can be adjusted for further characteristics of CEX3 easily. Signed-off-by: Felix Beck <felix.beck@de.ibm.com> Signed-off-by: Ralph Wuerthner <ralph.wuerthner@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Showing 3 changed files with 67 additions and 28 deletions Side-by-side Diff
drivers/s390/crypto/zcrypt_api.h
drivers/s390/crypto/zcrypt_cex2a.c
... | ... | @@ -39,13 +39,20 @@ |
39 | 39 | |
40 | 40 | #define CEX2A_MIN_MOD_SIZE 1 /* 8 bits */ |
41 | 41 | #define CEX2A_MAX_MOD_SIZE 256 /* 2048 bits */ |
42 | +#define CEX3A_MIN_MOD_SIZE CEX2A_MIN_MOD_SIZE | |
43 | +#define CEX3A_MAX_MOD_SIZE CEX2A_MAX_MOD_SIZE | |
42 | 44 | |
43 | 45 | #define CEX2A_SPEED_RATING 970 |
46 | +#define CEX3A_SPEED_RATING 1100 | |
44 | 47 | |
45 | 48 | #define CEX2A_MAX_MESSAGE_SIZE 0x390 /* sizeof(struct type50_crb2_msg) */ |
46 | 49 | #define CEX2A_MAX_RESPONSE_SIZE 0x110 /* max outputdatalength + type80_hdr */ |
47 | 50 | |
51 | +#define CEX3A_MAX_MESSAGE_SIZE CEX2A_MAX_MESSAGE_SIZE | |
52 | +#define CEX3A_MAX_RESPONSE_SIZE CEX2A_MAX_RESPONSE_SIZE | |
53 | + | |
48 | 54 | #define CEX2A_CLEANUP_TIME (15*HZ) |
55 | +#define CEX3A_CLEANUP_TIME CEX2A_CLEANUP_TIME | |
49 | 56 | |
50 | 57 | static struct ap_device_id zcrypt_cex2a_ids[] = { |
51 | 58 | { AP_DEVICE(AP_DEVICE_TYPE_CEX2A) }, |
52 | 59 | |
... | ... | @@ -375,31 +382,45 @@ |
375 | 382 | */ |
376 | 383 | static int zcrypt_cex2a_probe(struct ap_device *ap_dev) |
377 | 384 | { |
378 | - struct zcrypt_device *zdev; | |
379 | - int rc; | |
385 | + struct zcrypt_device *zdev = NULL; | |
386 | + int rc = 0; | |
380 | 387 | |
381 | - zdev = zcrypt_device_alloc(CEX2A_MAX_RESPONSE_SIZE); | |
382 | - if (!zdev) | |
383 | - return -ENOMEM; | |
384 | - zdev->ap_dev = ap_dev; | |
385 | - zdev->ops = &zcrypt_cex2a_ops; | |
386 | - zdev->online = 1; | |
387 | - zdev->user_space_type = ZCRYPT_CEX2A; | |
388 | - zdev->type_string = "CEX2A"; | |
389 | - zdev->min_mod_size = CEX2A_MIN_MOD_SIZE; | |
390 | - zdev->max_mod_size = CEX2A_MAX_MOD_SIZE; | |
391 | - zdev->short_crt = 1; | |
392 | - zdev->speed_rating = CEX2A_SPEED_RATING; | |
393 | - ap_dev->reply = &zdev->reply; | |
394 | - ap_dev->private = zdev; | |
395 | - rc = zcrypt_device_register(zdev); | |
396 | - if (rc) | |
397 | - goto out_free; | |
398 | - return 0; | |
399 | - | |
400 | -out_free: | |
401 | - ap_dev->private = NULL; | |
402 | - zcrypt_device_free(zdev); | |
388 | + switch (ap_dev->device_type) { | |
389 | + case AP_DEVICE_TYPE_CEX2A: | |
390 | + zdev = zcrypt_device_alloc(CEX2A_MAX_RESPONSE_SIZE); | |
391 | + if (!zdev) | |
392 | + return -ENOMEM; | |
393 | + zdev->user_space_type = ZCRYPT_CEX2A; | |
394 | + zdev->type_string = "CEX2A"; | |
395 | + zdev->min_mod_size = CEX2A_MIN_MOD_SIZE; | |
396 | + zdev->max_mod_size = CEX2A_MAX_MOD_SIZE; | |
397 | + zdev->short_crt = 1; | |
398 | + zdev->speed_rating = CEX2A_SPEED_RATING; | |
399 | + break; | |
400 | + case AP_DEVICE_TYPE_CEX3A: | |
401 | + zdev = zcrypt_device_alloc(CEX3A_MAX_RESPONSE_SIZE); | |
402 | + if (!zdev) | |
403 | + return -ENOMEM; | |
404 | + zdev->user_space_type = ZCRYPT_CEX3A; | |
405 | + zdev->type_string = "CEX3A"; | |
406 | + zdev->min_mod_size = CEX3A_MIN_MOD_SIZE; | |
407 | + zdev->max_mod_size = CEX3A_MAX_MOD_SIZE; | |
408 | + zdev->short_crt = 1; | |
409 | + zdev->speed_rating = CEX3A_SPEED_RATING; | |
410 | + break; | |
411 | + } | |
412 | + if (zdev != NULL) { | |
413 | + zdev->ap_dev = ap_dev; | |
414 | + zdev->ops = &zcrypt_cex2a_ops; | |
415 | + zdev->online = 1; | |
416 | + ap_dev->reply = &zdev->reply; | |
417 | + ap_dev->private = zdev; | |
418 | + rc = zcrypt_device_register(zdev); | |
419 | + } | |
420 | + if (rc) { | |
421 | + ap_dev->private = NULL; | |
422 | + zcrypt_device_free(zdev); | |
423 | + } | |
403 | 424 | return rc; |
404 | 425 | } |
405 | 426 |
drivers/s390/crypto/zcrypt_pcixcc.c
... | ... | @@ -43,10 +43,13 @@ |
43 | 43 | #define PCIXCC_MIN_MOD_SIZE 16 /* 128 bits */ |
44 | 44 | #define PCIXCC_MIN_MOD_SIZE_OLD 64 /* 512 bits */ |
45 | 45 | #define PCIXCC_MAX_MOD_SIZE 256 /* 2048 bits */ |
46 | +#define CEX3C_MIN_MOD_SIZE PCIXCC_MIN_MOD_SIZE | |
47 | +#define CEX3C_MAX_MOD_SIZE PCIXCC_MAX_MOD_SIZE | |
46 | 48 | |
47 | 49 | #define PCIXCC_MCL2_SPEED_RATING 7870 /* FIXME: needs finetuning */ |
48 | 50 | #define PCIXCC_MCL3_SPEED_RATING 7870 |
49 | 51 | #define CEX2C_SPEED_RATING 8540 |
52 | +#define CEX3C_SPEED_RATING 10000 /* FIXME: needs finetuning */ | |
50 | 53 | |
51 | 54 | #define PCIXCC_MAX_ICA_MESSAGE_SIZE 0x77c /* max size type6 v2 crt message */ |
52 | 55 | #define PCIXCC_MAX_ICA_RESPONSE_SIZE 0x77c /* max size type86 v2 reply */ |
53 | 56 | |
... | ... | @@ -1026,14 +1029,15 @@ |
1026 | 1029 | static int zcrypt_pcixcc_probe(struct ap_device *ap_dev) |
1027 | 1030 | { |
1028 | 1031 | struct zcrypt_device *zdev; |
1029 | - int rc; | |
1032 | + int rc = 0; | |
1030 | 1033 | |
1031 | 1034 | zdev = zcrypt_device_alloc(PCIXCC_MAX_RESPONSE_SIZE); |
1032 | 1035 | if (!zdev) |
1033 | 1036 | return -ENOMEM; |
1034 | 1037 | zdev->ap_dev = ap_dev; |
1035 | 1038 | zdev->online = 1; |
1036 | - if (ap_dev->device_type == AP_DEVICE_TYPE_PCIXCC) { | |
1039 | + switch (ap_dev->device_type) { | |
1040 | + case AP_DEVICE_TYPE_PCIXCC: | |
1037 | 1041 | rc = zcrypt_pcixcc_mcl(ap_dev); |
1038 | 1042 | if (rc < 0) { |
1039 | 1043 | zcrypt_device_free(zdev); |
1040 | 1044 | |
1041 | 1045 | |
... | ... | @@ -1051,13 +1055,25 @@ |
1051 | 1055 | zdev->min_mod_size = PCIXCC_MIN_MOD_SIZE; |
1052 | 1056 | zdev->max_mod_size = PCIXCC_MAX_MOD_SIZE; |
1053 | 1057 | } |
1054 | - } else { | |
1058 | + break; | |
1059 | + case AP_DEVICE_TYPE_CEX2C: | |
1055 | 1060 | zdev->user_space_type = ZCRYPT_CEX2C; |
1056 | 1061 | zdev->type_string = "CEX2C"; |
1057 | 1062 | zdev->speed_rating = CEX2C_SPEED_RATING; |
1058 | 1063 | zdev->min_mod_size = PCIXCC_MIN_MOD_SIZE; |
1059 | 1064 | zdev->max_mod_size = PCIXCC_MAX_MOD_SIZE; |
1065 | + break; | |
1066 | + case AP_DEVICE_TYPE_CEX3C: | |
1067 | + zdev->user_space_type = ZCRYPT_CEX3C; | |
1068 | + zdev->type_string = "CEX3C"; | |
1069 | + zdev->speed_rating = CEX3C_SPEED_RATING; | |
1070 | + zdev->min_mod_size = CEX3C_MIN_MOD_SIZE; | |
1071 | + zdev->max_mod_size = CEX3C_MAX_MOD_SIZE; | |
1072 | + break; | |
1073 | + default: | |
1074 | + goto out_free; | |
1060 | 1075 | } |
1076 | + | |
1061 | 1077 | rc = zcrypt_pcixcc_rng_supported(ap_dev); |
1062 | 1078 | if (rc < 0) { |
1063 | 1079 | zcrypt_device_free(zdev); |