s390/zcrypt: remove CEX2 and CEX3 device drivers
authorHarald Freudenberger <freude@linux.ibm.com>
Wed, 28 Jun 2023 10:36:08 +0000 (12:36 +0200)
committerHeiko Carstens <hca@linux.ibm.com>
Mon, 24 Jul 2023 10:12:22 +0000 (12:12 +0200)
Remove the legacy device driver code for CEX2 and CEX3 cards.

The last machines which are able to handle CEX2 crypto cards
are z10 EC first available 2008 and z10 BC first available 2009.
The last machines able to handle a CEX3 crypto card are
z196 first available 2010 and z114 first available 2011.

Please note that this does not imply to drop CEX2 and CEX3
support in general. With older kernels on hardware up to the
aforementioned machine models these crypto cards will get
support by IBM.

The removal of the CEX2 and CEX3 device drivers code opens up
some simplifications, for example support for crypto cards
without rng support can be removed also.

Signed-off-by: Harald Freudenberger <freude@linux.ibm.com>
Acked-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
12 files changed:
drivers/crypto/Kconfig
drivers/s390/crypto/Makefile
drivers/s390/crypto/ap_bus.c
drivers/s390/crypto/ap_bus.h
drivers/s390/crypto/ap_queue.c
drivers/s390/crypto/zcrypt_cex2a.c
drivers/s390/crypto/zcrypt_cex2a.h
drivers/s390/crypto/zcrypt_cex2c.c
drivers/s390/crypto/zcrypt_cex2c.h
drivers/s390/crypto/zcrypt_msgtype50.c
drivers/s390/crypto/zcrypt_msgtype50.h
drivers/s390/crypto/zcrypt_msgtype6.c

index 44e44b8d9ce67bce2d9bcc33329bf019fc62a4bd..c761952f0dc6df92e1ee37ad5707bb7539c2cef3 100644 (file)
@@ -70,10 +70,9 @@ config ZCRYPT
        select HW_RANDOM
        help
          Select this option if you want to enable support for
-         s390 cryptographic adapters like:
-         + Crypto Express 2 up to 7 Coprocessor (CEXxC)
-         + Crypto Express 2 up to 7 Accelerator (CEXxA)
-         + Crypto Express 4 up to 7 EP11 Coprocessor (CEXxP)
+         s390 cryptographic adapters like Crypto Express 4 up
+         to 8 in Coprocessor (CEXxC), EP11 Coprocessor (CEXxP)
+         or Accelerator (CEXxA) mode.
 
 config ZCRYPT_DEBUG
        bool "Enable debug features for s390 cryptographic adapters"
index 22d2db690cd33c444467f880413f9eb7b6469666..0edacd101c124b0ff7b60845ea08e81ee25d0654 100644 (file)
@@ -11,7 +11,7 @@ zcrypt-objs += zcrypt_msgtype6.o zcrypt_msgtype50.o
 zcrypt-objs += zcrypt_ccamisc.o zcrypt_ep11misc.o
 obj-$(CONFIG_ZCRYPT) += zcrypt.o
 # adapter drivers depend on ap.o and zcrypt.o
-obj-$(CONFIG_ZCRYPT) += zcrypt_cex2c.o zcrypt_cex2a.o zcrypt_cex4.o
+obj-$(CONFIG_ZCRYPT) += zcrypt_cex4.o
 
 # pkey kernel module
 pkey-objs := pkey_api.o
index 420120be300f592d4ec22f9756dc19be213023c4..b1d2fedea0866ed783c8a6d9384935a8428d9ca3 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
- * Copyright IBM Corp. 2006, 2021
+ * Copyright IBM Corp. 2006, 2023
  * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
  *           Martin Schwidefsky <schwidefsky@de.ibm.com>
  *           Ralph Wuerthner <rwuerthn@de.ibm.com>
@@ -387,23 +387,6 @@ static int ap_queue_info(ap_qid_t qid, int *q_type, unsigned int *q_fac,
                *q_ml = tapq_info.ml;
                *q_decfg = status.response_code == AP_RESPONSE_DECONFIGURED;
                *q_cstop = status.response_code == AP_RESPONSE_CHECKSTOPPED;
-               switch (*q_type) {
-                       /* For CEX2 and CEX3 the available functions
-                        * are not reflected by the facilities bits.
-                        * Instead it is coded into the type. So here
-                        * modify the function bits based on the type.
-                        */
-               case AP_DEVICE_TYPE_CEX2A:
-               case AP_DEVICE_TYPE_CEX3A:
-                       *q_fac |= 0x08000000;
-                       break;
-               case AP_DEVICE_TYPE_CEX2C:
-               case AP_DEVICE_TYPE_CEX3C:
-                       *q_fac |= 0x10000000;
-                       break;
-               default:
-                       break;
-               }
                return 1;
        default:
                /*
@@ -1678,8 +1661,8 @@ static int ap_get_compatible_type(ap_qid_t qid, int rawtype, unsigned int func)
 {
        int comp_type = 0;
 
-       /* < CEX2A is not supported */
-       if (rawtype < AP_DEVICE_TYPE_CEX2A) {
+       /* < CEX4 is not supported */
+       if (rawtype < AP_DEVICE_TYPE_CEX4) {
                AP_DBF_WARN("%s queue=%02x.%04x unsupported type %d\n",
                            __func__, AP_QID_CARD(qid),
                            AP_QID_QUEUE(qid), rawtype);
@@ -1701,7 +1684,7 @@ static int ap_get_compatible_type(ap_qid_t qid, int rawtype, unsigned int func)
                apinfo.cat = AP_DEVICE_TYPE_CEX8;
                status = ap_qact(qid, 0, &apinfo);
                if (status.response_code == AP_RESPONSE_NORMAL &&
-                   apinfo.cat >= AP_DEVICE_TYPE_CEX2A &&
+                   apinfo.cat >= AP_DEVICE_TYPE_CEX4 &&
                    apinfo.cat <= AP_DEVICE_TYPE_CEX8)
                        comp_type = apinfo.cat;
        }
index 0d7b7eb374ad1a9121af1a934053ade55bcf70cf..47bbe9babc59adeb26605e8ba28e7e4ce7d2edcd 100644 (file)
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0+ */
 /*
- * Copyright IBM Corp. 2006, 2019
+ * Copyright IBM Corp. 2006, 2023
  * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
  *           Martin Schwidefsky <schwidefsky@de.ibm.com>
  *           Ralph Wuerthner <rwuerthn@de.ibm.com>
@@ -67,15 +67,8 @@ static inline int ap_test_bit(unsigned int *ptr, unsigned int nr)
 #define AP_RESPONSE_INVALID_DOMAIN          0x42
 
 /*
- * Known device types
+ * Supported AP device types
  */
-#define AP_DEVICE_TYPE_PCICC   3
-#define AP_DEVICE_TYPE_PCICA   4
-#define AP_DEVICE_TYPE_PCIXCC  5
-#define AP_DEVICE_TYPE_CEX2A   6
-#define AP_DEVICE_TYPE_CEX2C   7
-#define AP_DEVICE_TYPE_CEX3A   8
-#define AP_DEVICE_TYPE_CEX3C   9
 #define AP_DEVICE_TYPE_CEX4    10
 #define AP_DEVICE_TYPE_CEX5    11
 #define AP_DEVICE_TYPE_CEX6    12
@@ -272,14 +265,6 @@ static inline void ap_release_message(struct ap_message *ap_msg)
        kfree_sensitive(ap_msg->private);
 }
 
-/*
- * Note: don't use ap_send/ap_recv after using ap_queue_message
- * for the first time. Otherwise the ap message queue will get
- * confused.
- */
-int ap_send(ap_qid_t qid, unsigned long psmid, void *msg, size_t msglen);
-int ap_recv(ap_qid_t qid, unsigned long *psmid, void *msg, size_t msglen);
-
 enum ap_sm_wait ap_sm_event(struct ap_queue *aq, enum ap_sm_event event);
 enum ap_sm_wait ap_sm_event_loop(struct ap_queue *aq, enum ap_sm_event event);
 
index 30df83735adf3452508a232c61fc53e5843fdccc..1336e632adc4a3cb062b2906090c9636f23e43e2 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright IBM Corp. 2016
+ * Copyright IBM Corp. 2016, 2023
  * Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>
  *
  * Adjunct processor bus, queue related code.
@@ -93,51 +93,6 @@ __ap_send(ap_qid_t qid, unsigned long psmid, void *msg, size_t msglen,
        return ap_nqap(qid, psmid, msg, msglen);
 }
 
-int ap_send(ap_qid_t qid, unsigned long psmid, void *msg, size_t msglen)
-{
-       struct ap_queue_status status;
-
-       status = __ap_send(qid, psmid, msg, msglen, 0);
-       if (status.async)
-               return -EPERM;
-       switch (status.response_code) {
-       case AP_RESPONSE_NORMAL:
-               return 0;
-       case AP_RESPONSE_Q_FULL:
-       case AP_RESPONSE_RESET_IN_PROGRESS:
-               return -EBUSY;
-       case AP_RESPONSE_REQ_FAC_NOT_INST:
-               return -EINVAL;
-       default:        /* Device is gone. */
-               return -ENODEV;
-       }
-}
-EXPORT_SYMBOL(ap_send);
-
-int ap_recv(ap_qid_t qid, unsigned long *psmid, void *msg, size_t msglen)
-{
-       struct ap_queue_status status;
-
-       if (!msg)
-               return -EINVAL;
-       status = ap_dqap(qid, psmid, msg, msglen, NULL, NULL, NULL);
-       if (status.async)
-               return -EPERM;
-       switch (status.response_code) {
-       case AP_RESPONSE_NORMAL:
-               return 0;
-       case AP_RESPONSE_NO_PENDING_REPLY:
-               if (status.queue_empty)
-                       return -ENOENT;
-               return -EBUSY;
-       case AP_RESPONSE_RESET_IN_PROGRESS:
-               return -EBUSY;
-       default:
-               return -ENODEV;
-       }
-}
-EXPORT_SYMBOL(ap_recv);
-
 /* State machine definitions and helpers */
 
 static enum ap_sm_wait ap_sm_nop(struct ap_queue *aq)
index 83f692c9c1975bd25345537935d37c310dc6d995..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,227 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- *  Copyright IBM Corp. 2001, 2012
- *  Author(s): Robert Burroughs
- *            Eric Rossman (edrossma@us.ibm.com)
- *
- *  Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com)
- *  Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com>
- *                               Ralph Wuerthner <rwuerthn@de.ibm.com>
- *  MSGTYPE restruct:            Holger Dengler <hd@linux.vnet.ibm.com>
- */
-
-#include <linux/module.h>
-#include <linux/slab.h>
-#include <linux/init.h>
-#include <linux/err.h>
-#include <linux/atomic.h>
-#include <linux/uaccess.h>
-#include <linux/mod_devicetable.h>
-
-#include "ap_bus.h"
-#include "zcrypt_api.h"
-#include "zcrypt_error.h"
-#include "zcrypt_cex2a.h"
-#include "zcrypt_msgtype50.h"
-
-#define CEX2A_MIN_MOD_SIZE       1     /*    8 bits    */
-#define CEX2A_MAX_MOD_SIZE     256     /* 2048 bits    */
-#define CEX3A_MIN_MOD_SIZE     CEX2A_MIN_MOD_SIZE
-#define CEX3A_MAX_MOD_SIZE     512     /* 4096 bits    */
-
-#define CEX2A_MAX_MESSAGE_SIZE 0x390   /* sizeof(struct type50_crb2_msg)    */
-#define CEX2A_MAX_RESPONSE_SIZE 0x110  /* max outputdatalength + type80_hdr */
-
-#define CEX3A_MAX_RESPONSE_SIZE        0x210   /* 512 bit modulus
-                                        * (max outputdatalength) +
-                                        * type80_hdr
-                                        */
-#define CEX3A_MAX_MESSAGE_SIZE sizeof(struct type50_crb3_msg)
-
-#define CEX2A_CLEANUP_TIME     (15 * HZ)
-#define CEX3A_CLEANUP_TIME     CEX2A_CLEANUP_TIME
-
-MODULE_AUTHOR("IBM Corporation");
-MODULE_DESCRIPTION("CEX2A/CEX3A Cryptographic Coprocessor device driver, " \
-                  "Copyright IBM Corp. 2001, 2018");
-MODULE_LICENSE("GPL");
-
-static struct ap_device_id zcrypt_cex2a_card_ids[] = {
-       { .dev_type = AP_DEVICE_TYPE_CEX2A,
-         .match_flags = AP_DEVICE_ID_MATCH_CARD_TYPE },
-       { .dev_type = AP_DEVICE_TYPE_CEX3A,
-         .match_flags = AP_DEVICE_ID_MATCH_CARD_TYPE },
-       { /* end of list */ },
-};
-
-MODULE_DEVICE_TABLE(ap, zcrypt_cex2a_card_ids);
-
-static struct ap_device_id zcrypt_cex2a_queue_ids[] = {
-       { .dev_type = AP_DEVICE_TYPE_CEX2A,
-         .match_flags = AP_DEVICE_ID_MATCH_QUEUE_TYPE },
-       { .dev_type = AP_DEVICE_TYPE_CEX3A,
-         .match_flags = AP_DEVICE_ID_MATCH_QUEUE_TYPE },
-       { /* end of list */ },
-};
-
-MODULE_DEVICE_TABLE(ap, zcrypt_cex2a_queue_ids);
-
-/*
- * Probe function for CEX2A card devices. It always accepts the AP device
- * since the bus_match already checked the card type.
- * @ap_dev: pointer to the AP device.
- */
-static int zcrypt_cex2a_card_probe(struct ap_device *ap_dev)
-{
-       /*
-        * Normalized speed ratings per crypto adapter
-        * MEX_1k, MEX_2k, MEX_4k, CRT_1k, CRT_2k, CRT_4k, RNG, SECKEY
-        */
-       static const int CEX2A_SPEED_IDX[] = {
-               800, 1000, 2000,  900, 1200, 2400, 0, 0};
-       static const int CEX3A_SPEED_IDX[] = {
-               400,  500, 1000,  450,  550, 1200, 0, 0};
-
-       struct ap_card *ac = to_ap_card(&ap_dev->device);
-       struct zcrypt_card *zc;
-       int rc = 0;
-
-       zc = zcrypt_card_alloc();
-       if (!zc)
-               return -ENOMEM;
-       zc->card = ac;
-       dev_set_drvdata(&ap_dev->device, zc);
-
-       if (ac->ap_dev.device_type == AP_DEVICE_TYPE_CEX2A) {
-               zc->min_mod_size = CEX2A_MIN_MOD_SIZE;
-               zc->max_mod_size = CEX2A_MAX_MOD_SIZE;
-               zc->speed_rating = CEX2A_SPEED_IDX;
-               zc->max_exp_bit_length = CEX2A_MAX_MOD_SIZE;
-               zc->type_string = "CEX2A";
-               zc->user_space_type = ZCRYPT_CEX2A;
-       } else if (ac->ap_dev.device_type == AP_DEVICE_TYPE_CEX3A) {
-               zc->min_mod_size = CEX2A_MIN_MOD_SIZE;
-               zc->max_mod_size = CEX2A_MAX_MOD_SIZE;
-               zc->max_exp_bit_length = CEX2A_MAX_MOD_SIZE;
-               if (ap_test_bit(&ac->functions, AP_FUNC_MEX4K) &&
-                   ap_test_bit(&ac->functions, AP_FUNC_CRT4K)) {
-                       zc->max_mod_size = CEX3A_MAX_MOD_SIZE;
-                       zc->max_exp_bit_length = CEX3A_MAX_MOD_SIZE;
-               }
-               zc->speed_rating = CEX3A_SPEED_IDX;
-               zc->type_string = "CEX3A";
-               zc->user_space_type = ZCRYPT_CEX3A;
-       } else {
-               zcrypt_card_free(zc);
-               return -ENODEV;
-       }
-       zc->online = 1;
-
-       rc = zcrypt_card_register(zc);
-       if (rc)
-               zcrypt_card_free(zc);
-
-       return rc;
-}
-
-/*
- * This is called to remove the CEX2A card driver information
- * if an AP card device is removed.
- */
-static void zcrypt_cex2a_card_remove(struct ap_device *ap_dev)
-{
-       struct zcrypt_card *zc = dev_get_drvdata(&ap_dev->device);
-
-       zcrypt_card_unregister(zc);
-}
-
-static struct ap_driver zcrypt_cex2a_card_driver = {
-       .probe = zcrypt_cex2a_card_probe,
-       .remove = zcrypt_cex2a_card_remove,
-       .ids = zcrypt_cex2a_card_ids,
-       .flags = AP_DRIVER_FLAG_DEFAULT,
-};
-
-/*
- * Probe function for CEX2A queue devices. It always accepts the AP device
- * since the bus_match already checked the queue type.
- * @ap_dev: pointer to the AP device.
- */
-static int zcrypt_cex2a_queue_probe(struct ap_device *ap_dev)
-{
-       struct ap_queue *aq = to_ap_queue(&ap_dev->device);
-       struct zcrypt_queue *zq = NULL;
-       int rc;
-
-       switch (ap_dev->device_type) {
-       case AP_DEVICE_TYPE_CEX2A:
-               zq = zcrypt_queue_alloc(CEX2A_MAX_RESPONSE_SIZE);
-               if (!zq)
-                       return -ENOMEM;
-               break;
-       case AP_DEVICE_TYPE_CEX3A:
-               zq = zcrypt_queue_alloc(CEX3A_MAX_RESPONSE_SIZE);
-               if (!zq)
-                       return -ENOMEM;
-               break;
-       }
-       if (!zq)
-               return -ENODEV;
-       zq->ops = zcrypt_msgtype(MSGTYPE50_NAME, MSGTYPE50_VARIANT_DEFAULT);
-       zq->queue = aq;
-       zq->online = 1;
-       atomic_set(&zq->load, 0);
-       ap_queue_init_state(aq);
-       ap_queue_init_reply(aq, &zq->reply);
-       aq->request_timeout = CEX2A_CLEANUP_TIME;
-       dev_set_drvdata(&ap_dev->device, zq);
-       rc = zcrypt_queue_register(zq);
-       if (rc)
-               zcrypt_queue_free(zq);
-
-       return rc;
-}
-
-/*
- * This is called to remove the CEX2A queue driver information
- * if an AP queue device is removed.
- */
-static void zcrypt_cex2a_queue_remove(struct ap_device *ap_dev)
-{
-       struct zcrypt_queue *zq = dev_get_drvdata(&ap_dev->device);
-
-       zcrypt_queue_unregister(zq);
-}
-
-static struct ap_driver zcrypt_cex2a_queue_driver = {
-       .probe = zcrypt_cex2a_queue_probe,
-       .remove = zcrypt_cex2a_queue_remove,
-       .ids = zcrypt_cex2a_queue_ids,
-       .flags = AP_DRIVER_FLAG_DEFAULT,
-};
-
-int __init zcrypt_cex2a_init(void)
-{
-       int rc;
-
-       rc = ap_driver_register(&zcrypt_cex2a_card_driver,
-                               THIS_MODULE, "cex2acard");
-       if (rc)
-               return rc;
-
-       rc = ap_driver_register(&zcrypt_cex2a_queue_driver,
-                               THIS_MODULE, "cex2aqueue");
-       if (rc)
-               ap_driver_unregister(&zcrypt_cex2a_card_driver);
-
-       return rc;
-}
-
-void __exit zcrypt_cex2a_exit(void)
-{
-       ap_driver_unregister(&zcrypt_cex2a_queue_driver);
-       ap_driver_unregister(&zcrypt_cex2a_card_driver);
-}
-
-module_init(zcrypt_cex2a_init);
-module_exit(zcrypt_cex2a_exit);
index 7842214d9d09ca9892741d2424affb9310dd9b6b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,134 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-/*
- *  Copyright IBM Corp. 2001, 2006
- *  Author(s): Robert Burroughs
- *            Eric Rossman (edrossma@us.ibm.com)
- *
- *  Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com)
- *  Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com>
- */
-
-#ifndef _ZCRYPT_CEX2A_H_
-#define _ZCRYPT_CEX2A_H_
-
-/**
- * The type 50 message family is associated with CEXxA cards.
- *
- * The four members of the family are described below.
- *
- * Note that all unsigned char arrays are right-justified and left-padded
- * with zeroes.
- *
- * Note that all reserved fields must be zeroes.
- */
-struct type50_hdr {
-       unsigned char   reserved1;
-       unsigned char   msg_type_code;  /* 0x50 */
-       unsigned short  msg_len;
-       unsigned char   reserved2;
-       unsigned char   ignored;
-       unsigned short  reserved3;
-} __packed;
-
-#define TYPE50_TYPE_CODE       0x50
-
-#define TYPE50_MEB1_FMT                0x0001
-#define TYPE50_MEB2_FMT                0x0002
-#define TYPE50_MEB3_FMT                0x0003
-#define TYPE50_CRB1_FMT                0x0011
-#define TYPE50_CRB2_FMT                0x0012
-#define TYPE50_CRB3_FMT                0x0013
-
-/* Mod-Exp, with a small modulus */
-struct type50_meb1_msg {
-       struct type50_hdr header;
-       unsigned short  keyblock_type;  /* 0x0001 */
-       unsigned char   reserved[6];
-       unsigned char   exponent[128];
-       unsigned char   modulus[128];
-       unsigned char   message[128];
-} __packed;
-
-/* Mod-Exp, with a large modulus */
-struct type50_meb2_msg {
-       struct type50_hdr header;
-       unsigned short  keyblock_type;  /* 0x0002 */
-       unsigned char   reserved[6];
-       unsigned char   exponent[256];
-       unsigned char   modulus[256];
-       unsigned char   message[256];
-} __packed;
-
-/* Mod-Exp, with a larger modulus */
-struct type50_meb3_msg {
-       struct type50_hdr header;
-       unsigned short  keyblock_type;  /* 0x0003 */
-       unsigned char   reserved[6];
-       unsigned char   exponent[512];
-       unsigned char   modulus[512];
-       unsigned char   message[512];
-} __packed;
-
-/* CRT, with a small modulus */
-struct type50_crb1_msg {
-       struct type50_hdr header;
-       unsigned short  keyblock_type;  /* 0x0011 */
-       unsigned char   reserved[6];
-       unsigned char   p[64];
-       unsigned char   q[64];
-       unsigned char   dp[64];
-       unsigned char   dq[64];
-       unsigned char   u[64];
-       unsigned char   message[128];
-} __packed;
-
-/* CRT, with a large modulus */
-struct type50_crb2_msg {
-       struct type50_hdr header;
-       unsigned short  keyblock_type;  /* 0x0012 */
-       unsigned char   reserved[6];
-       unsigned char   p[128];
-       unsigned char   q[128];
-       unsigned char   dp[128];
-       unsigned char   dq[128];
-       unsigned char   u[128];
-       unsigned char   message[256];
-} __packed;
-
-/* CRT, with a larger modulus */
-struct type50_crb3_msg {
-       struct type50_hdr header;
-       unsigned short  keyblock_type;  /* 0x0013 */
-       unsigned char   reserved[6];
-       unsigned char   p[256];
-       unsigned char   q[256];
-       unsigned char   dp[256];
-       unsigned char   dq[256];
-       unsigned char   u[256];
-       unsigned char   message[512];
-} __packed;
-
-/**
- * The type 80 response family is associated with a CEXxA cards.
- *
- * Note that all unsigned char arrays are right-justified and left-padded
- * with zeroes.
- *
- * Note that all reserved fields must be zeroes.
- */
-
-#define TYPE80_RSP_CODE 0x80
-
-struct type80_hdr {
-       unsigned char   reserved1;
-       unsigned char   type;           /* 0x80 */
-       unsigned short  len;
-       unsigned char   code;           /* 0x00 */
-       unsigned char   reserved2[3];
-       unsigned char   reserved3[8];
-} __packed;
-
-int zcrypt_cex2a_init(void);
-void zcrypt_cex2a_exit(void);
-
-#endif /* _ZCRYPT_CEX2A_H_ */
index 251b5bd3d19c2827aa25d62a4620499f6b9594ce..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,421 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- *  Copyright IBM Corp. 2001, 2018
- *  Author(s): Robert Burroughs
- *            Eric Rossman (edrossma@us.ibm.com)
- *
- *  Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com)
- *  Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com>
- *                               Ralph Wuerthner <rwuerthn@de.ibm.com>
- *  MSGTYPE restruct:            Holger Dengler <hd@linux.vnet.ibm.com>
- */
-
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/err.h>
-#include <linux/delay.h>
-#include <linux/slab.h>
-#include <linux/atomic.h>
-#include <linux/uaccess.h>
-#include <linux/mod_devicetable.h>
-
-#include "ap_bus.h"
-#include "zcrypt_api.h"
-#include "zcrypt_error.h"
-#include "zcrypt_msgtype6.h"
-#include "zcrypt_cex2c.h"
-#include "zcrypt_cca_key.h"
-#include "zcrypt_ccamisc.h"
-
-#define CEX2C_MIN_MOD_SIZE      16     /*  128 bits    */
-#define CEX2C_MAX_MOD_SIZE     256     /* 2048 bits    */
-#define CEX3C_MIN_MOD_SIZE      16     /*  128 bits    */
-#define CEX3C_MAX_MOD_SIZE     512     /* 4096 bits    */
-#define CEX2C_MAX_XCRB_MESSAGE_SIZE (12 * 1024)
-#define CEX2C_CLEANUP_TIME     (15 * HZ)
-
-MODULE_AUTHOR("IBM Corporation");
-MODULE_DESCRIPTION("CEX2C/CEX3C Cryptographic Coprocessor device driver, " \
-                  "Copyright IBM Corp. 2001, 2018");
-MODULE_LICENSE("GPL");
-
-static struct ap_device_id zcrypt_cex2c_card_ids[] = {
-       { .dev_type = AP_DEVICE_TYPE_CEX2C,
-         .match_flags = AP_DEVICE_ID_MATCH_CARD_TYPE },
-       { .dev_type = AP_DEVICE_TYPE_CEX3C,
-         .match_flags = AP_DEVICE_ID_MATCH_CARD_TYPE },
-       { /* end of list */ },
-};
-
-MODULE_DEVICE_TABLE(ap, zcrypt_cex2c_card_ids);
-
-static struct ap_device_id zcrypt_cex2c_queue_ids[] = {
-       { .dev_type = AP_DEVICE_TYPE_CEX2C,
-         .match_flags = AP_DEVICE_ID_MATCH_QUEUE_TYPE },
-       { .dev_type = AP_DEVICE_TYPE_CEX3C,
-         .match_flags = AP_DEVICE_ID_MATCH_QUEUE_TYPE },
-       { /* end of list */ },
-};
-
-MODULE_DEVICE_TABLE(ap, zcrypt_cex2c_queue_ids);
-
-/*
- * CCA card additional device attributes
- */
-static ssize_t cca_serialnr_show(struct device *dev,
-                                struct device_attribute *attr,
-                                char *buf)
-{
-       struct zcrypt_card *zc = dev_get_drvdata(dev);
-       struct cca_info ci;
-       struct ap_card *ac = to_ap_card(dev);
-
-       memset(&ci, 0, sizeof(ci));
-
-       if (ap_domain_index >= 0)
-               cca_get_info(ac->id, ap_domain_index, &ci, zc->online);
-
-       return sysfs_emit(buf, "%s\n", ci.serial);
-}
-
-static struct device_attribute dev_attr_cca_serialnr =
-       __ATTR(serialnr, 0444, cca_serialnr_show, NULL);
-
-static struct attribute *cca_card_attrs[] = {
-       &dev_attr_cca_serialnr.attr,
-       NULL,
-};
-
-static const struct attribute_group cca_card_attr_grp = {
-       .attrs = cca_card_attrs,
-};
-
- /*
-  * CCA queue additional device attributes
-  */
-static ssize_t cca_mkvps_show(struct device *dev,
-                             struct device_attribute *attr,
-                             char *buf)
-{
-       struct zcrypt_queue *zq = dev_get_drvdata(dev);
-       int n = 0;
-       struct cca_info ci;
-       static const char * const cao_state[] = { "invalid", "valid" };
-       static const char * const new_state[] = { "empty", "partial", "full" };
-
-       memset(&ci, 0, sizeof(ci));
-
-       cca_get_info(AP_QID_CARD(zq->queue->qid),
-                    AP_QID_QUEUE(zq->queue->qid),
-                    &ci, zq->online);
-
-       if (ci.new_aes_mk_state >= '1' && ci.new_aes_mk_state <= '3')
-               n = sysfs_emit(buf, "AES NEW: %s 0x%016llx\n",
-                              new_state[ci.new_aes_mk_state - '1'],
-                              ci.new_aes_mkvp);
-       else
-               n = sysfs_emit(buf, "AES NEW: - -\n");
-
-       if (ci.cur_aes_mk_state >= '1' && ci.cur_aes_mk_state <= '2')
-               n += sysfs_emit_at(buf, n, "AES CUR: %s 0x%016llx\n",
-                                  cao_state[ci.cur_aes_mk_state - '1'],
-                                  ci.cur_aes_mkvp);
-       else
-               n += sysfs_emit_at(buf, n, "AES CUR: - -\n");
-
-       if (ci.old_aes_mk_state >= '1' && ci.old_aes_mk_state <= '2')
-               n += sysfs_emit_at(buf, n, "AES OLD: %s 0x%016llx\n",
-                                  cao_state[ci.old_aes_mk_state - '1'],
-                                  ci.old_aes_mkvp);
-       else
-               n += sysfs_emit_at(buf, n, "AES OLD: - -\n");
-
-       if (ci.new_apka_mk_state >= '1' && ci.new_apka_mk_state <= '3')
-               n += sysfs_emit_at(buf, n, "APKA NEW: %s 0x%016llx\n",
-                                  new_state[ci.new_apka_mk_state - '1'],
-                                  ci.new_apka_mkvp);
-       else
-               n += sysfs_emit_at(buf, n, "APKA NEW: - -\n");
-
-       if (ci.cur_apka_mk_state >= '1' && ci.cur_apka_mk_state <= '2')
-               n += sysfs_emit_at(buf, n, "APKA CUR: %s 0x%016llx\n",
-                                  cao_state[ci.cur_apka_mk_state - '1'],
-                                  ci.cur_apka_mkvp);
-       else
-               n += sysfs_emit_at(buf, n, "APKA CUR: - -\n");
-
-       if (ci.old_apka_mk_state >= '1' && ci.old_apka_mk_state <= '2')
-               n += sysfs_emit_at(buf, n, "APKA OLD: %s 0x%016llx\n",
-                                  cao_state[ci.old_apka_mk_state - '1'],
-                                  ci.old_apka_mkvp);
-       else
-               n += sysfs_emit_at(buf, n, "APKA OLD: - -\n");
-
-       return n;
-}
-
-static struct device_attribute dev_attr_cca_mkvps =
-       __ATTR(mkvps, 0444, cca_mkvps_show, NULL);
-
-static struct attribute *cca_queue_attrs[] = {
-       &dev_attr_cca_mkvps.attr,
-       NULL,
-};
-
-static const struct attribute_group cca_queue_attr_grp = {
-       .attrs = cca_queue_attrs,
-};
-
-/*
- * Large random number detection function. Its sends a message to a CEX2C/CEX3C
- * card to find out if large random numbers are supported.
- * @ap_dev: pointer to the AP device.
- *
- * Returns 1 if large random numbers are supported, 0 if not and < 0 on error.
- */
-static int zcrypt_cex2c_rng_supported(struct ap_queue *aq)
-{
-       struct ap_message ap_msg;
-       unsigned long psmid;
-       unsigned int domain;
-       struct {
-               struct type86_hdr hdr;
-               struct type86_fmt2_ext fmt2;
-               struct CPRBX cprbx;
-       } __packed *reply;
-       struct {
-               struct type6_hdr hdr;
-               struct CPRBX cprbx;
-               char function_code[2];
-               short int rule_length;
-               char rule[8];
-               short int verb_length;
-               short int key_length;
-       } __packed *msg;
-       int rc, i;
-
-       ap_init_message(&ap_msg);
-       ap_msg.msg = (void *)get_zeroed_page(GFP_KERNEL);
-       if (!ap_msg.msg)
-               return -ENOMEM;
-       ap_msg.bufsize = PAGE_SIZE;
-
-       rng_type6cprb_msgx(&ap_msg, 4, &domain);
-
-       msg = ap_msg.msg;
-       msg->cprbx.domain = AP_QID_QUEUE(aq->qid);
-
-       rc = ap_send(aq->qid, 0x0102030405060708UL, ap_msg.msg, ap_msg.len);
-       if (rc)
-               goto out_free;
-
-       /* Wait for the test message to complete. */
-       for (i = 0; i < 2 * HZ; i++) {
-               msleep(1000 / HZ);
-               rc = ap_recv(aq->qid, &psmid, ap_msg.msg, ap_msg.bufsize);
-               if (rc == 0 && psmid == 0x0102030405060708UL)
-                       break;
-       }
-
-       if (i >= 2 * HZ) {
-               /* Got no answer. */
-               rc = -ENODEV;
-               goto out_free;
-       }
-
-       reply = ap_msg.msg;
-       if (reply->cprbx.ccp_rtcode == 0 && reply->cprbx.ccp_rscode == 0)
-               rc = 1;
-       else
-               rc = 0;
-out_free:
-       free_page((unsigned long)ap_msg.msg);
-       return rc;
-}
-
-/*
- * Probe function for CEX2C/CEX3C card devices. It always accepts the
- * AP device since the bus_match already checked the hardware type.
- * @ap_dev: pointer to the AP card device.
- */
-static int zcrypt_cex2c_card_probe(struct ap_device *ap_dev)
-{
-       /*
-        * Normalized speed ratings per crypto adapter
-        * MEX_1k, MEX_2k, MEX_4k, CRT_1k, CRT_2k, CRT_4k, RNG, SECKEY
-        */
-       static const int CEX2C_SPEED_IDX[] = {
-               1000, 1400, 2400, 1100, 1500, 2600, 100, 12};
-       static const int CEX3C_SPEED_IDX[] = {
-               500,  700, 1400,  550,  800, 1500,  80, 10};
-
-       struct ap_card *ac = to_ap_card(&ap_dev->device);
-       struct zcrypt_card *zc;
-       int rc = 0;
-
-       zc = zcrypt_card_alloc();
-       if (!zc)
-               return -ENOMEM;
-       zc->card = ac;
-       dev_set_drvdata(&ap_dev->device, zc);
-       switch (ac->ap_dev.device_type) {
-       case AP_DEVICE_TYPE_CEX2C:
-               zc->user_space_type = ZCRYPT_CEX2C;
-               zc->type_string = "CEX2C";
-               zc->speed_rating = CEX2C_SPEED_IDX;
-               zc->min_mod_size = CEX2C_MIN_MOD_SIZE;
-               zc->max_mod_size = CEX2C_MAX_MOD_SIZE;
-               zc->max_exp_bit_length = CEX2C_MAX_MOD_SIZE;
-               break;
-       case AP_DEVICE_TYPE_CEX3C:
-               zc->user_space_type = ZCRYPT_CEX3C;
-               zc->type_string = "CEX3C";
-               zc->speed_rating = CEX3C_SPEED_IDX;
-               zc->min_mod_size = CEX3C_MIN_MOD_SIZE;
-               zc->max_mod_size = CEX3C_MAX_MOD_SIZE;
-               zc->max_exp_bit_length = CEX3C_MAX_MOD_SIZE;
-               break;
-       default:
-               zcrypt_card_free(zc);
-               return -ENODEV;
-       }
-       zc->online = 1;
-
-       rc = zcrypt_card_register(zc);
-       if (rc) {
-               zcrypt_card_free(zc);
-               return rc;
-       }
-
-       if (ap_test_bit(&ac->functions, AP_FUNC_COPRO)) {
-               rc = sysfs_create_group(&ap_dev->device.kobj,
-                                       &cca_card_attr_grp);
-               if (rc) {
-                       zcrypt_card_unregister(zc);
-                       zcrypt_card_free(zc);
-               }
-       }
-
-       return rc;
-}
-
-/*
- * This is called to remove the CEX2C/CEX3C card driver information
- * if an AP card device is removed.
- */
-static void zcrypt_cex2c_card_remove(struct ap_device *ap_dev)
-{
-       struct zcrypt_card *zc = dev_get_drvdata(&ap_dev->device);
-       struct ap_card *ac = to_ap_card(&ap_dev->device);
-
-       if (ap_test_bit(&ac->functions, AP_FUNC_COPRO))
-               sysfs_remove_group(&ap_dev->device.kobj, &cca_card_attr_grp);
-
-       zcrypt_card_unregister(zc);
-}
-
-static struct ap_driver zcrypt_cex2c_card_driver = {
-       .probe = zcrypt_cex2c_card_probe,
-       .remove = zcrypt_cex2c_card_remove,
-       .ids = zcrypt_cex2c_card_ids,
-       .flags = AP_DRIVER_FLAG_DEFAULT,
-};
-
-/*
- * Probe function for CEX2C/CEX3C queue devices. It always accepts the
- * AP device since the bus_match already checked the hardware type.
- * @ap_dev: pointer to the AP card device.
- */
-static int zcrypt_cex2c_queue_probe(struct ap_device *ap_dev)
-{
-       struct ap_queue *aq = to_ap_queue(&ap_dev->device);
-       struct zcrypt_queue *zq;
-       int rc;
-
-       zq = zcrypt_queue_alloc(CEX2C_MAX_XCRB_MESSAGE_SIZE);
-       if (!zq)
-               return -ENOMEM;
-       zq->queue = aq;
-       zq->online = 1;
-       atomic_set(&zq->load, 0);
-       ap_rapq(aq->qid, 0);
-       rc = zcrypt_cex2c_rng_supported(aq);
-       if (rc < 0) {
-               zcrypt_queue_free(zq);
-               return rc;
-       }
-       if (rc)
-               zq->ops = zcrypt_msgtype(MSGTYPE06_NAME,
-                                        MSGTYPE06_VARIANT_DEFAULT);
-       else
-               zq->ops = zcrypt_msgtype(MSGTYPE06_NAME,
-                                        MSGTYPE06_VARIANT_NORNG);
-       ap_queue_init_state(aq);
-       ap_queue_init_reply(aq, &zq->reply);
-       aq->request_timeout = CEX2C_CLEANUP_TIME;
-       dev_set_drvdata(&ap_dev->device, zq);
-       rc = zcrypt_queue_register(zq);
-       if (rc) {
-               zcrypt_queue_free(zq);
-               return rc;
-       }
-
-       if (ap_test_bit(&aq->card->functions, AP_FUNC_COPRO)) {
-               rc = sysfs_create_group(&ap_dev->device.kobj,
-                                       &cca_queue_attr_grp);
-               if (rc) {
-                       zcrypt_queue_unregister(zq);
-                       zcrypt_queue_free(zq);
-               }
-       }
-
-       return rc;
-}
-
-/*
- * This is called to remove the CEX2C/CEX3C queue driver information
- * if an AP queue device is removed.
- */
-static void zcrypt_cex2c_queue_remove(struct ap_device *ap_dev)
-{
-       struct zcrypt_queue *zq = dev_get_drvdata(&ap_dev->device);
-       struct ap_queue *aq = to_ap_queue(&ap_dev->device);
-
-       if (ap_test_bit(&aq->card->functions, AP_FUNC_COPRO))
-               sysfs_remove_group(&ap_dev->device.kobj, &cca_queue_attr_grp);
-
-       zcrypt_queue_unregister(zq);
-}
-
-static struct ap_driver zcrypt_cex2c_queue_driver = {
-       .probe = zcrypt_cex2c_queue_probe,
-       .remove = zcrypt_cex2c_queue_remove,
-       .ids = zcrypt_cex2c_queue_ids,
-       .flags = AP_DRIVER_FLAG_DEFAULT,
-};
-
-int __init zcrypt_cex2c_init(void)
-{
-       int rc;
-
-       rc = ap_driver_register(&zcrypt_cex2c_card_driver,
-                               THIS_MODULE, "cex2card");
-       if (rc)
-               return rc;
-
-       rc = ap_driver_register(&zcrypt_cex2c_queue_driver,
-                               THIS_MODULE, "cex2cqueue");
-       if (rc)
-               ap_driver_unregister(&zcrypt_cex2c_card_driver);
-
-       return rc;
-}
-
-void zcrypt_cex2c_exit(void)
-{
-       ap_driver_unregister(&zcrypt_cex2c_queue_driver);
-       ap_driver_unregister(&zcrypt_cex2c_card_driver);
-}
-
-module_init(zcrypt_cex2c_init);
-module_exit(zcrypt_cex2c_exit);
index 6ec405c2bec26fe523036630d82da9807185bce4..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,18 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-/*
- *  Copyright IBM Corp. 2001, 2018
- *  Author(s): Robert Burroughs
- *            Eric Rossman (edrossma@us.ibm.com)
- *
- *  Hotplug & misc device support: Jochen Roehrig (roehrig@de.ibm.com)
- *  Major cleanup & driver split: Martin Schwidefsky <schwidefsky@de.ibm.com>
- *  MSGTYPE restruct:            Holger Dengler <hd@linux.vnet.ibm.com>
- */
-
-#ifndef _ZCRYPT_CEX2C_H_
-#define _ZCRYPT_CEX2C_H_
-
-int zcrypt_cex2c_init(void);
-void zcrypt_cex2c_exit(void);
-
-#endif /* _ZCRYPT_CEX2C_H_ */
index 51f8f7a463f71c4f5a80d8b60592a61865298ddd..2e155de8abe5b25e1ab7496953243c5809663d0b 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
- *  Copyright IBM Corp. 2001, 2012
+ *  Copyright IBM Corp. 2001, 2023
  *  Author(s): Robert Burroughs
  *            Eric Rossman (edrossma@us.ibm.com)
  *
 /* >= CEX3A: 4096 bits */
 #define CEX3A_MAX_MOD_SIZE 512
 
-/* CEX2A: max outputdatalength + type80_hdr */
-#define CEX2A_MAX_RESPONSE_SIZE 0x110
-
 /* >= CEX3A: 512 bit modulus, (max outputdatalength) + type80_hdr */
 #define CEX3A_MAX_RESPONSE_SIZE 0x210
 
 MODULE_AUTHOR("IBM Corporation");
 MODULE_DESCRIPTION("Cryptographic Accelerator (message type 50), " \
-                  "Copyright IBM Corp. 2001, 2012");
+                  "Copyright IBM Corp. 2001, 2023");
 MODULE_LICENSE("GPL");
 
 /*
@@ -366,20 +363,17 @@ static int convert_type80(struct zcrypt_queue *zq,
                ap_send_online_uevent(&zq->queue->ap_dev, zq->online);
                return -EAGAIN;
        }
-       if (zq->zcard->user_space_type == ZCRYPT_CEX2A)
-               BUG_ON(t80h->len > CEX2A_MAX_RESPONSE_SIZE);
-       else
-               BUG_ON(t80h->len > CEX3A_MAX_RESPONSE_SIZE);
+       BUG_ON(t80h->len > CEX3A_MAX_RESPONSE_SIZE);
        data = reply->msg + t80h->len - outputdatalength;
        if (copy_to_user(outputdata, data, outputdatalength))
                return -EFAULT;
        return 0;
 }
 
-static int convert_response_cex2a(struct zcrypt_queue *zq,
-                                 struct ap_message *reply,
-                                 char __user *outputdata,
-                                 unsigned int outputdatalength)
+static int convert_response(struct zcrypt_queue *zq,
+                           struct ap_message *reply,
+                           char __user *outputdata,
+                           unsigned int outputdatalength)
 {
        /* Response type byte is the second byte in the response. */
        unsigned char rtype = ((unsigned char *)reply->msg)[1];
@@ -414,9 +408,9 @@ static int convert_response_cex2a(struct zcrypt_queue *zq,
  * @msg: pointer to the AP message
  * @reply: pointer to the AP reply message
  */
-static void zcrypt_cex2a_receive(struct ap_queue *aq,
-                                struct ap_message *msg,
-                                struct ap_message *reply)
+static void zcrypt_msgtype50_receive(struct ap_queue *aq,
+                                    struct ap_message *msg,
+                                    struct ap_message *reply)
 {
        static struct error_hdr error_reply = {
                .type = TYPE82_RSP_CODE,
@@ -456,19 +450,18 @@ static atomic_t zcrypt_step = ATOMIC_INIT(0);
  *     CEXxA device to the request distributor
  * @mex: pointer to the modexpo request buffer
  */
-static long zcrypt_cex2a_modexpo(struct zcrypt_queue *zq,
-                                struct ica_rsa_modexpo *mex,
-                                struct ap_message *ap_msg)
+static long zcrypt_msgtype50_modexpo(struct zcrypt_queue *zq,
+                                    struct ica_rsa_modexpo *mex,
+                                    struct ap_message *ap_msg)
 {
        struct completion work;
        int rc;
 
-       ap_msg->bufsize = (zq->zcard->user_space_type == ZCRYPT_CEX2A) ?
-               MSGTYPE50_CRB2_MAX_MSG_SIZE : MSGTYPE50_CRB3_MAX_MSG_SIZE;
+       ap_msg->bufsize = MSGTYPE50_CRB3_MAX_MSG_SIZE;
        ap_msg->msg = kmalloc(ap_msg->bufsize, GFP_KERNEL);
        if (!ap_msg->msg)
                return -ENOMEM;
-       ap_msg->receive = zcrypt_cex2a_receive;
+       ap_msg->receive = zcrypt_msgtype50_receive;
        ap_msg->psmid = (((unsigned long)current->pid) << 32) +
                atomic_inc_return(&zcrypt_step);
        ap_msg->private = &work;
@@ -483,9 +476,9 @@ static long zcrypt_cex2a_modexpo(struct zcrypt_queue *zq,
        if (rc == 0) {
                rc = ap_msg->rc;
                if (rc == 0)
-                       rc = convert_response_cex2a(zq, ap_msg,
-                                                   mex->outputdata,
-                                                   mex->outputdatalength);
+                       rc = convert_response(zq, ap_msg,
+                                             mex->outputdata,
+                                             mex->outputdatalength);
        } else {
                /* Signal pending. */
                ap_cancel_message(zq->queue, ap_msg);
@@ -507,19 +500,18 @@ out:
  *     CEXxA device to the request distributor
  * @crt: pointer to the modexpoc_crt request buffer
  */
-static long zcrypt_cex2a_modexpo_crt(struct zcrypt_queue *zq,
-                                    struct ica_rsa_modexpo_crt *crt,
-                                    struct ap_message *ap_msg)
+static long zcrypt_msgtype50_modexpo_crt(struct zcrypt_queue *zq,
+                                        struct ica_rsa_modexpo_crt *crt,
+                                        struct ap_message *ap_msg)
 {
        struct completion work;
        int rc;
 
-       ap_msg->bufsize = (zq->zcard->user_space_type == ZCRYPT_CEX2A) ?
-               MSGTYPE50_CRB2_MAX_MSG_SIZE : MSGTYPE50_CRB3_MAX_MSG_SIZE;
+       ap_msg->bufsize = MSGTYPE50_CRB3_MAX_MSG_SIZE;
        ap_msg->msg = kmalloc(ap_msg->bufsize, GFP_KERNEL);
        if (!ap_msg->msg)
                return -ENOMEM;
-       ap_msg->receive = zcrypt_cex2a_receive;
+       ap_msg->receive = zcrypt_msgtype50_receive;
        ap_msg->psmid = (((unsigned long)current->pid) << 32) +
                atomic_inc_return(&zcrypt_step);
        ap_msg->private = &work;
@@ -534,9 +526,9 @@ static long zcrypt_cex2a_modexpo_crt(struct zcrypt_queue *zq,
        if (rc == 0) {
                rc = ap_msg->rc;
                if (rc == 0)
-                       rc = convert_response_cex2a(zq, ap_msg,
-                                                   crt->outputdata,
-                                                   crt->outputdatalength);
+                       rc = convert_response(zq, ap_msg,
+                                             crt->outputdata,
+                                             crt->outputdatalength);
        } else {
                /* Signal pending. */
                ap_cancel_message(zq->queue, ap_msg);
@@ -555,8 +547,8 @@ out:
  * The crypto operations for message type 50.
  */
 static struct zcrypt_ops zcrypt_msgtype50_ops = {
-       .rsa_modexpo = zcrypt_cex2a_modexpo,
-       .rsa_modexpo_crt = zcrypt_cex2a_modexpo_crt,
+       .rsa_modexpo = zcrypt_msgtype50_modexpo,
+       .rsa_modexpo_crt = zcrypt_msgtype50_modexpo_crt,
        .owner = THIS_MODULE,
        .name = MSGTYPE50_NAME,
        .variant = MSGTYPE50_VARIANT_DEFAULT,
index eb49f06bed2993b4be70f9f44a25787ac33f691f..323e93b90b1283a4d605f625a721b819ffd9cb18 100644 (file)
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0+ */
 /*
- *  Copyright IBM Corp. 2001, 2012
+ *  Copyright IBM Corp. 2001, 2023
  *  Author(s): Robert Burroughs
  *            Eric Rossman (edrossma@us.ibm.com)
  *
@@ -15,7 +15,6 @@
 #define MSGTYPE50_NAME                 "zcrypt_msgtype50"
 #define MSGTYPE50_VARIANT_DEFAULT      0
 
-#define MSGTYPE50_CRB2_MAX_MSG_SIZE 0x390 /* sizeof(struct type50_crb2_msg) */
 #define MSGTYPE50_CRB3_MAX_MSG_SIZE 0x710 /* sizeof(struct type50_crb3_msg) */
 
 #define MSGTYPE_ADJUSTMENT 0x08  /* type04 extension (not needed in type50) */
index e668ff5eb384e322d67892e033f04eb7e15a73c4..3c53abbdc3420a51378001cc35595a04b3841615 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
- *  Copyright IBM Corp. 2001, 2022
+ *  Copyright IBM Corp. 2001, 2023
  *  Author(s): Robert Burroughs
  *            Eric Rossman (edrossma@us.ibm.com)
  *
@@ -42,7 +42,7 @@ struct response_type {
 
 MODULE_AUTHOR("IBM Corporation");
 MODULE_DESCRIPTION("Cryptographic Coprocessor (message type 6), " \
-                  "Copyright IBM Corp. 2001, 2012");
+                  "Copyright IBM Corp. 2001, 2023");
 MODULE_LICENSE("GPL");
 
 struct function_and_rules_block {
@@ -1348,14 +1348,6 @@ out:
 /*
  * The crypto operations for a CEXxC card.
  */
-static struct zcrypt_ops zcrypt_msgtype6_norng_ops = {
-       .owner = THIS_MODULE,
-       .name = MSGTYPE06_NAME,
-       .variant = MSGTYPE06_VARIANT_NORNG,
-       .rsa_modexpo = zcrypt_msgtype6_modexpo,
-       .rsa_modexpo_crt = zcrypt_msgtype6_modexpo_crt,
-       .send_cprb = zcrypt_msgtype6_send_cprb,
-};
 
 static struct zcrypt_ops zcrypt_msgtype6_ops = {
        .owner = THIS_MODULE,
@@ -1378,14 +1370,12 @@ static struct zcrypt_ops zcrypt_msgtype6_ep11_ops = {
 
 void __init zcrypt_msgtype6_init(void)
 {
-       zcrypt_msgtype_register(&zcrypt_msgtype6_norng_ops);
        zcrypt_msgtype_register(&zcrypt_msgtype6_ops);
        zcrypt_msgtype_register(&zcrypt_msgtype6_ep11_ops);
 }
 
 void __exit zcrypt_msgtype6_exit(void)
 {
-       zcrypt_msgtype_unregister(&zcrypt_msgtype6_norng_ops);
        zcrypt_msgtype_unregister(&zcrypt_msgtype6_ops);
        zcrypt_msgtype_unregister(&zcrypt_msgtype6_ep11_ops);
 }