s390/zcrypt: zcrypt device driver cleanup
authorHarald Freudenberger <freude@linux.ibm.com>
Thu, 4 Oct 2018 13:30:24 +0000 (15:30 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 9 Oct 2018 09:21:35 +0000 (11:21 +0200)
Some cleanup in the s390 zcrypt device driver:
- Removed fragments of pcixx crypto card code. This code
  can't be reached anymore because the hardware detection
  function does not recognize crypto cards < CEX2 since
  commit f56545430736 ("s390/zcrypt: Introduce QACT support
  for AP bus devices.")
- Rename of some files and driver names which where still
  reflecting pcixx support to cex2a/cex2c.
- Removed all the zcrypt version strings in the file headers.
  There is only one place left - the zcrypt.h header file is
  now the only place for zcrypt device driver version info.
- Zcrypt version pump up from 2.2.0 to 2.2.1.

Signed-off-by: Harald Freudenberger <freude@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
19 files changed:
arch/s390/include/uapi/asm/zcrypt.h
drivers/s390/crypto/Makefile
drivers/s390/crypto/zcrypt_api.c
drivers/s390/crypto/zcrypt_api.h
drivers/s390/crypto/zcrypt_card.c
drivers/s390/crypto/zcrypt_cca_key.h
drivers/s390/crypto/zcrypt_cex2a.c
drivers/s390/crypto/zcrypt_cex2a.h
drivers/s390/crypto/zcrypt_cex2c.c [new file with mode: 0644]
drivers/s390/crypto/zcrypt_cex2c.h [new file with mode: 0644]
drivers/s390/crypto/zcrypt_cex4.c
drivers/s390/crypto/zcrypt_error.h
drivers/s390/crypto/zcrypt_msgtype50.c
drivers/s390/crypto/zcrypt_msgtype50.h
drivers/s390/crypto/zcrypt_msgtype6.c
drivers/s390/crypto/zcrypt_msgtype6.h
drivers/s390/crypto/zcrypt_pcixcc.c [deleted file]
drivers/s390/crypto/zcrypt_pcixcc.h [deleted file]
drivers/s390/crypto/zcrypt_queue.c

index 196a3047fb0aa8ab0bd32baeee6bfe1ac24c7739..42c81a95e97ba8aee708388f1c76bcdde12a6e78 100644 (file)
@@ -2,7 +2,7 @@
 /*
  *  include/asm-s390/zcrypt.h
  *
- *  zcrypt 2.2.0 (user-visible header)
+ *  zcrypt 2.2.1 (user-visible header)
  *
  *  Copyright IBM Corp. 2001, 2018
  *  Author(s): Robert Burroughs
@@ -16,7 +16,7 @@
 
 #define ZCRYPT_VERSION 2
 #define ZCRYPT_RELEASE 2
-#define ZCRYPT_VARIANT 0
+#define ZCRYPT_VARIANT 1
 
 #include <linux/ioctl.h>
 #include <linux/compiler.h>
index b59af548ed1c57a3ad05c4956170146cb6f20be0..fd5e215c66b7c5672dd13fb6c893c176cc8f04fd 100644 (file)
@@ -10,7 +10,7 @@ zcrypt-objs := zcrypt_api.o zcrypt_card.o zcrypt_queue.o
 zcrypt-objs += zcrypt_msgtype6.o zcrypt_msgtype50.o
 obj-$(CONFIG_ZCRYPT) += zcrypt.o
 # adapter drivers depend on ap.o and zcrypt.o
-obj-$(CONFIG_ZCRYPT) += zcrypt_pcixcc.o zcrypt_cex2a.o zcrypt_cex4.o
+obj-$(CONFIG_ZCRYPT) += zcrypt_cex2c.o zcrypt_cex2a.o zcrypt_cex4.o
 
 # pkey kernel module
 pkey-objs := pkey_api.o
index d7e1c7cd2c893522258ae25b1324e0a74d146a1c..26f1cd669e901dc47c1c7e89325eb39109b7d26e 100644 (file)
@@ -1,7 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
- *  zcrypt 2.2.0
- *
  *  Copyright IBM Corp. 2001, 2018
  *  Author(s): Robert Burroughs
  *            Eric Rossman (edrossma@us.ibm.com)
index a848625c1a5a370ff8d175555b1e499c2f1448f1..af67a768a3fc1de855797211903bb4d3ee5c3af1 100644 (file)
@@ -1,8 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0+ */
 /*
- *  zcrypt 2.1.0
- *
- *  Copyright IBM Corp. 2001, 2012
+ *  Copyright IBM Corp. 2001, 2018
  *  Author(s): Robert Burroughs
  *            Eric Rossman (edrossma@us.ibm.com)
  *            Cornelia Huck <cornelia.huck@de.ibm.com>
 #include "ap_bus.h"
 
 /**
- * device type for an actual device is either PCICA, PCICC, PCIXCC_MCL2,
- * PCIXCC_MCL3, CEX2C, or CEX2A
- *
- * NOTE: PCIXCC_MCL3 refers to a PCIXCC with May 2004 version of Licensed
- *      Internal Code (LIC) (EC J12220 level 29).
- *      PCIXCC_MCL2 refers to any LIC before this level.
+ * Supported device types
  */
-#define ZCRYPT_PCICA           1
-#define ZCRYPT_PCICC           2
-#define ZCRYPT_PCIXCC_MCL2     3
-#define ZCRYPT_PCIXCC_MCL3     4
 #define ZCRYPT_CEX2C           5
 #define ZCRYPT_CEX2A           6
 #define ZCRYPT_CEX3C           7
index 40cd4c1c2de8db67267f664fd798dadbf740d2f3..d4f35a183c157e899e3c505c40fd329aa60ab592 100644 (file)
@@ -1,7 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
- *  zcrypt 2.1.0
- *
  *  Copyright IBM Corp. 2001, 2012
  *  Author(s): Robert Burroughs
  *            Eric Rossman (edrossma@us.ibm.com)
index e5b5c02c9d67819a66b73d87b9857641cdec24f1..f09bb850763b59035a1dec8a084d782ee57501e4 100644 (file)
@@ -1,7 +1,5 @@
 /* SPDX-License-Identifier: GPL-2.0+ */
 /*
- *  zcrypt 2.1.0
- *
  *  Copyright IBM Corp. 2001, 2006
  *  Author(s): Robert Burroughs
  *            Eric Rossman (edrossma@us.ibm.com)
index f4ae5fa30ec970e99a39387b2b0a7a4b13903889..146f54f5cbb817a8bb3f40a7c38add038484ebc0 100644 (file)
@@ -1,7 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
- *  zcrypt 2.1.0
- *
  *  Copyright IBM Corp. 2001, 2012
  *  Author(s): Robert Burroughs
  *            Eric Rossman (edrossma@us.ibm.com)
@@ -43,8 +41,8 @@
 #define CEX3A_CLEANUP_TIME     CEX2A_CLEANUP_TIME
 
 MODULE_AUTHOR("IBM Corporation");
-MODULE_DESCRIPTION("CEX2A Cryptographic Coprocessor device driver, " \
-                  "Copyright IBM Corp. 2001, 2012");
+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[] = {
index 66d58bc87c6646c79f32871cb70d2908919d691c..7842214d9d09ca9892741d2424affb9310dd9b6b 100644 (file)
@@ -1,7 +1,5 @@
 /* SPDX-License-Identifier: GPL-2.0+ */
 /*
- *  zcrypt 2.1.0
- *
  *  Copyright IBM Corp. 2001, 2006
  *  Author(s): Robert Burroughs
  *            Eric Rossman (edrossma@us.ibm.com)
@@ -14,7 +12,7 @@
 #define _ZCRYPT_CEX2A_H_
 
 /**
- * The type 50 message family is associated with a CEX2A card.
+ * The type 50 message family is associated with CEXxA cards.
  *
  * The four members of the family are described below.
  *
@@ -111,7 +109,7 @@ struct type50_crb3_msg {
 } __packed;
 
 /**
- * The type 80 response family is associated with a CEX2A card.
+ * 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.
diff --git a/drivers/s390/crypto/zcrypt_cex2c.c b/drivers/s390/crypto/zcrypt_cex2c.c
new file mode 100644 (file)
index 0000000..546f676
--- /dev/null
@@ -0,0 +1,292 @@
+// 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"
+
+#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);
+
+/**
+ * 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 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.message = (void *) get_zeroed_page(GFP_KERNEL);
+       if (!ap_msg.message)
+               return -ENOMEM;
+
+       rng_type6CPRB_msgX(&ap_msg, 4, &domain);
+
+       msg = ap_msg.message;
+       msg->cprbx.domain = AP_QID_QUEUE(aq->qid);
+
+       rc = ap_send(aq->qid, 0x0102030405060708ULL, ap_msg.message,
+                    ap_msg.length);
+       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.message, 4096);
+               if (rc == 0 && psmid == 0x0102030405060708ULL)
+                       break;
+       }
+
+       if (i >= 2 * HZ) {
+               /* Got no answer. */
+               rc = -ENODEV;
+               goto out_free;
+       }
+
+       reply = ap_msg.message;
+       if (reply->cprbx.ccp_rtcode == 0 && reply->cprbx.ccp_rscode == 0)
+               rc = 1;
+       else
+               rc = 0;
+out_free:
+       free_page((unsigned long) ap_msg.message);
+       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;
+       ac->private = zc;
+       switch (ac->ap_dev.device_type) {
+       case AP_DEVICE_TYPE_CEX2C:
+               zc->user_space_type = ZCRYPT_CEX2C;
+               zc->type_string = "CEX2C";
+               memcpy(zc->speed_rating, CEX2C_SPEED_IDX,
+                      sizeof(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";
+               memcpy(zc->speed_rating, CEX3C_SPEED_IDX,
+                      sizeof(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) {
+               ac->private = NULL;
+               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 = to_ap_card(&ap_dev->device)->private;
+
+       if (zc)
+               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);
+       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_reply(aq, &zq->reply);
+       aq->request_timeout = CEX2C_CLEANUP_TIME;
+       aq->private = zq;
+       rc = zcrypt_queue_register(zq);
+       if (rc) {
+               aq->private = NULL;
+               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 ap_queue *aq = to_ap_queue(&ap_dev->device);
+       struct zcrypt_queue *zq = aq->private;
+
+       ap_queue_remove(aq);
+       if (zq)
+               zcrypt_queue_unregister(zq);
+}
+
+static struct ap_driver zcrypt_cex2c_queue_driver = {
+       .probe = zcrypt_cex2c_queue_probe,
+       .remove = zcrypt_cex2c_queue_remove,
+       .suspend = ap_queue_suspend,
+       .resume = ap_queue_resume,
+       .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);
diff --git a/drivers/s390/crypto/zcrypt_cex2c.h b/drivers/s390/crypto/zcrypt_cex2c.h
new file mode 100644 (file)
index 0000000..6ec405c
--- /dev/null
@@ -0,0 +1,18 @@
+/* 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 35d58dbbc4da3dcc5fa47f5d23a8dfcbe08ff9ae..f9d4c6c7521d72705977a6386e0746a556e1ea8b 100644 (file)
@@ -37,8 +37,8 @@
 #define CEX4_CLEANUP_TIME      (900*HZ)
 
 MODULE_AUTHOR("IBM Corporation");
-MODULE_DESCRIPTION("CEX4 Cryptographic Card device driver, " \
-                  "Copyright IBM Corp. 2012");
+MODULE_DESCRIPTION("CEX4/CEX5/CEX6 Cryptographic Card device driver, " \
+                  "Copyright IBM Corp. 2018");
 MODULE_LICENSE("GPL");
 
 static struct ap_device_id zcrypt_cex4_card_ids[] = {
@@ -66,8 +66,9 @@ static struct ap_device_id zcrypt_cex4_queue_ids[] = {
 MODULE_DEVICE_TABLE(ap, zcrypt_cex4_queue_ids);
 
 /**
- * Probe function for CEX4 card device. It always accepts the AP device
- * since the bus_match already checked the hardware type.
+ * Probe function for CEX4/CEX5/CEX6 card device. It always
+ * accepts the AP device since the bus_match already checked
+ * the hardware type.
  * @ap_dev: pointer to the AP device.
  */
 static int zcrypt_cex4_card_probe(struct ap_device *ap_dev)
@@ -199,7 +200,7 @@ static int zcrypt_cex4_card_probe(struct ap_device *ap_dev)
 }
 
 /**
- * This is called to remove the CEX4 card driver information
+ * This is called to remove the CEX4/CEX5/CEX6 card driver information
  * if an AP card device is removed.
  */
 static void zcrypt_cex4_card_remove(struct ap_device *ap_dev)
@@ -218,8 +219,9 @@ static struct ap_driver zcrypt_cex4_card_driver = {
 };
 
 /**
- * Probe function for CEX4 queue device. It always accepts the AP device
- * since the bus_match already checked the hardware type.
+ * Probe function for CEX4/CEX5/CEX6 queue device. It always
+ * accepts the AP device since the bus_match already checked
+ * the hardware type.
  * @ap_dev: pointer to the AP device.
  */
 static int zcrypt_cex4_queue_probe(struct ap_device *ap_dev)
@@ -265,8 +267,8 @@ static int zcrypt_cex4_queue_probe(struct ap_device *ap_dev)
 }
 
 /**
- * This is called to remove the CEX4 queue driver information
- * if an AP queue device is removed.
+ * This is called to remove the CEX4/CEX5/CEX6 queue driver
+ * information if an AP queue device is removed.
  */
 static void zcrypt_cex4_queue_remove(struct ap_device *ap_dev)
 {
index 6f7ebc1dbe1033af41b51150295fedc663e8be13..663dbdaa85b3a9676b43ceaa35c86baff16790d1 100644 (file)
@@ -1,7 +1,5 @@
 /* SPDX-License-Identifier: GPL-2.0+ */
 /*
- *  zcrypt 2.1.0
- *
  *  Copyright IBM Corp. 2001, 2006
  *  Author(s): Robert Burroughs
  *            Eric Rossman (edrossma@us.ibm.com)
index f159662c907b240333fb60bb7b0ba22d5d883820..fc4295b3d801ef2b3a8f0fa4d80f8e45c17ee4df 100644 (file)
@@ -1,7 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
- *  zcrypt 2.1.0
- *
  *  Copyright IBM Corp. 2001, 2012
  *  Author(s): Robert Burroughs
  *            Eric Rossman (edrossma@us.ibm.com)
 #include "zcrypt_error.h"
 #include "zcrypt_msgtype50.h"
 
-/* 4096 bits */
+/* >= CEX3A: 4096 bits */
 #define CEX3A_MAX_MOD_SIZE 512
 
-/* max outputdatalength + type80_hdr */
+/* CEX2A: max outputdatalength + type80_hdr */
 #define CEX2A_MAX_RESPONSE_SIZE 0x110
 
-/* 512 bit modulus, (max outputdatalength) + type80_hdr */
+/* >= CEX3A: 512 bit modulus, (max outputdatalength) + type80_hdr */
 #define CEX3A_MAX_RESPONSE_SIZE 0x210
 
 MODULE_AUTHOR("IBM Corporation");
@@ -42,7 +40,7 @@ MODULE_DESCRIPTION("Cryptographic Accelerator (message type 50), " \
 MODULE_LICENSE("GPL");
 
 /**
- * The type 50 message family is associated with a CEX2A card.
+ * The type 50 message family is associated with a CEXxA cards.
  *
  * The four members of the family are described below.
  *
@@ -139,7 +137,7 @@ struct type50_crb3_msg {
 } __packed;
 
 /**
- * The type 80 response family is associated with a CEX2A card.
+ * 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.
@@ -273,7 +271,7 @@ static int ICACRT_msg_to_type50CRT_msg(struct zcrypt_queue *zq,
        /*
         * CEX2A and CEX3A w/o FW update can handle requests up to
         * 256 byte modulus (2k keys).
-        * CEX3A with FW update and CEX4A cards are able to handle
+        * CEX3A with FW update and newer CEXxA cards are able to handle
         * 512 byte modulus (4k keys).
         */
        if (mod_len <= 128) {           /* up to 1024 bit key size */
@@ -356,7 +354,7 @@ static int convert_type80(struct zcrypt_queue *zq,
        unsigned char *data;
 
        if (t80h->len < sizeof(*t80h) + outputdatalength) {
-               /* The result is too short, the CEX2A card may not do that.. */
+               /* The result is too short, the CEXxA card may not do that.. */
                zq->online = 0;
                pr_err("Cryptographic device %02x.%04x failed and was set offline\n",
                       AP_QID_CARD(zq->queue->qid),
@@ -447,10 +445,10 @@ out:
 static atomic_t zcrypt_step = ATOMIC_INIT(0);
 
 /**
- * The request distributor calls this function if it picked the CEX2A
+ * The request distributor calls this function if it picked the CEXxA
  * device to handle a modexpo request.
  * @zq: pointer to zcrypt_queue structure that identifies the
- *       CEX2A device to the request distributor
+ *     CEXxA device to the request distributor
  * @mex: pointer to the modexpo request buffer
  */
 static long zcrypt_cex2a_modexpo(struct zcrypt_queue *zq,
@@ -493,10 +491,10 @@ out_free:
 }
 
 /**
- * The request distributor calls this function if it picked the CEX2A
+ * The request distributor calls this function if it picked the CEXxA
  * device to handle a modexpo_crt request.
  * @zq: pointer to zcrypt_queue structure that identifies the
- *       CEX2A device to the request distributor
+ *     CEXxA device to the request distributor
  * @crt: pointer to the modexpoc_crt request buffer
  */
 static long zcrypt_cex2a_modexpo_crt(struct zcrypt_queue *zq,
index 8530f652ea4f90e165a8112b01840d9d7bb3962d..66bec4f45c560a0ad4835a8ecb7187bf3b526260 100644 (file)
@@ -1,7 +1,5 @@
 /* SPDX-License-Identifier: GPL-2.0+ */
 /*
- *  zcrypt 2.1.0
- *
  *  Copyright IBM Corp. 2001, 2012
  *  Author(s): Robert Burroughs
  *            Eric Rossman (edrossma@us.ibm.com)
index 9ac960d83c288817a7c9e60843c3fdf86d6961c5..0cbcc238ef983aa80e2baaa0c38828458d523822 100644 (file)
@@ -1,7 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
- *  zcrypt 2.1.0
- *
  *  Copyright IBM Corp. 2001, 2012
  *  Author(s): Robert Burroughs
  *            Eric Rossman (edrossma@us.ibm.com)
@@ -29,8 +27,7 @@
 #include "zcrypt_msgtype6.h"
 #include "zcrypt_cca_key.h"
 
-#define PCIXCC_MIN_MOD_SIZE_OLD         64     /*  512 bits    */
-#define PCIXCC_MAX_ICA_RESPONSE_SIZE 0x77c /* max size type86 v2 reply     */
+#define CEXXC_MAX_ICA_RESPONSE_SIZE 0x77c /* max size type86 v2 reply      */
 
 #define CEIL4(x) ((((x)+3)/4)*4)
 
@@ -38,9 +35,9 @@ struct response_type {
        struct completion work;
        int type;
 };
-#define PCIXCC_RESPONSE_TYPE_ICA  0
-#define PCIXCC_RESPONSE_TYPE_XCRB 1
-#define PCIXCC_RESPONSE_TYPE_EP11 2
+#define CEXXC_RESPONSE_TYPE_ICA  0
+#define CEXXC_RESPONSE_TYPE_XCRB 1
+#define CEXXC_RESPONSE_TYPE_EP11 2
 
 MODULE_AUTHOR("IBM Corporation");
 MODULE_DESCRIPTION("Cryptographic Coprocessor (message type 6), " \
@@ -111,7 +108,7 @@ struct function_and_rules_block {
 } __packed;
 
 /**
- * The following is used to initialize the CPRBX passed to the PCIXCC/CEX2C
+ * The following is used to initialize the CPRBX passed to the CEXxC/CEXxP
  * card in a type6 message. The 3 fields that must be filled in at execution
  * time are  req_parml, rpl_parml and usage_domain.
  * Everything about this interface is ascii/big-endian, since the
@@ -294,7 +291,7 @@ static int ICAMEX_msg_to_type6MEX_msgX(struct zcrypt_queue *zq,
        /* message header, cprbx and f&r */
        msg->hdr = static_type6_hdrX;
        msg->hdr.ToCardLen1 = size - sizeof(msg->hdr);
-       msg->hdr.FromCardLen1 = PCIXCC_MAX_ICA_RESPONSE_SIZE - sizeof(msg->hdr);
+       msg->hdr.FromCardLen1 = CEXXC_MAX_ICA_RESPONSE_SIZE - sizeof(msg->hdr);
 
        msg->cprbx = static_cprbx;
        msg->cprbx.domain = AP_QID_QUEUE(zq->queue->qid);
@@ -364,7 +361,7 @@ static int ICACRT_msg_to_type6CRT_msgX(struct zcrypt_queue *zq,
        /* message header, cprbx and f&r */
        msg->hdr = static_type6_hdrX;
        msg->hdr.ToCardLen1 = size -  sizeof(msg->hdr);
-       msg->hdr.FromCardLen1 = PCIXCC_MAX_ICA_RESPONSE_SIZE - sizeof(msg->hdr);
+       msg->hdr.FromCardLen1 = CEXXC_MAX_ICA_RESPONSE_SIZE - sizeof(msg->hdr);
 
        msg->cprbx = static_cprbx;
        msg->cprbx.domain = AP_QID_QUEUE(zq->queue->qid);
@@ -658,16 +655,6 @@ static int convert_type86_ica(struct zcrypt_queue *zq,
                                   (int) service_rc, (int) service_rs);
                        return -EINVAL;
                }
-               if (service_rc == 8 && service_rs == 783) {
-                       zq->zcard->min_mod_size =
-                               PCIXCC_MIN_MOD_SIZE_OLD;
-                       ZCRYPT_DBF(DBF_DEBUG,
-                                  "device=%02x.%04x rc/rs=%d/%d => rc=EAGAIN\n",
-                                  AP_QID_CARD(zq->queue->qid),
-                                  AP_QID_QUEUE(zq->queue->qid),
-                                  (int) service_rc, (int) service_rs);
-                       return -EAGAIN;
-               }
                zq->online = 0;
                pr_err("Cryptographic device %02x.%04x failed and was set offline\n",
                       AP_QID_CARD(zq->queue->qid),
@@ -697,7 +684,7 @@ static int convert_type86_ica(struct zcrypt_queue *zq,
        if (pad_len > 0) {
                if (pad_len < 10)
                        return -EINVAL;
-               /* 'restore' padding left in the PCICC/PCIXCC card. */
+               /* 'restore' padding left in the CEXXC card. */
                if (copy_to_user(outputdata, static_pad, pad_len - 1))
                        return -EFAULT;
                if (put_user(0, outputdata + pad_len - 1))
@@ -955,13 +942,13 @@ static void zcrypt_msgtype6_receive(struct ap_queue *aq,
        if (t86r->hdr.type == TYPE86_RSP_CODE &&
                 t86r->cprbx.cprb_ver_id == 0x02) {
                switch (resp_type->type) {
-               case PCIXCC_RESPONSE_TYPE_ICA:
+               case CEXXC_RESPONSE_TYPE_ICA:
                        length = sizeof(struct type86x_reply)
                                + t86r->length - 2;
-                       length = min(PCIXCC_MAX_ICA_RESPONSE_SIZE, length);
+                       length = min(CEXXC_MAX_ICA_RESPONSE_SIZE, length);
                        memcpy(msg->message, reply->message, length);
                        break;
-               case PCIXCC_RESPONSE_TYPE_XCRB:
+               case CEXXC_RESPONSE_TYPE_XCRB:
                        length = t86r->fmt2.offset2 + t86r->fmt2.count2;
                        length = min(MSGTYPE06_MAX_MSG_SIZE, length);
                        memcpy(msg->message, reply->message, length);
@@ -1004,7 +991,7 @@ static void zcrypt_msgtype6_receive_ep11(struct ap_queue *aq,
        if (t86r->hdr.type == TYPE86_RSP_CODE &&
            t86r->cprbx.cprb_ver_id == 0x04) {
                switch (resp_type->type) {
-               case PCIXCC_RESPONSE_TYPE_EP11:
+               case CEXXC_RESPONSE_TYPE_EP11:
                        length = t86r->fmt2.offset1 + t86r->fmt2.count1;
                        length = min(MSGTYPE06_MAX_MSG_SIZE, length);
                        memcpy(msg->message, reply->message, length);
@@ -1022,10 +1009,10 @@ out:
 static atomic_t zcrypt_step = ATOMIC_INIT(0);
 
 /**
- * The request distributor calls this function if it picked the PCIXCC/CEX2C
+ * The request distributor calls this function if it picked the CEXxC
  * device to handle a modexpo request.
  * @zq: pointer to zcrypt_queue structure that identifies the
- *       PCIXCC/CEX2C device to the request distributor
+ *     CEXxC device to the request distributor
  * @mex: pointer to the modexpo request buffer
  */
 static long zcrypt_msgtype6_modexpo(struct zcrypt_queue *zq,
@@ -1033,7 +1020,7 @@ static long zcrypt_msgtype6_modexpo(struct zcrypt_queue *zq,
 {
        struct ap_message ap_msg;
        struct response_type resp_type = {
-               .type = PCIXCC_RESPONSE_TYPE_ICA,
+               .type = CEXXC_RESPONSE_TYPE_ICA,
        };
        int rc;
 
@@ -1066,10 +1053,10 @@ out_free:
 }
 
 /**
- * The request distributor calls this function if it picked the PCIXCC/CEX2C
+ * The request distributor calls this function if it picked the CEXxC
  * device to handle a modexpo_crt request.
  * @zq: pointer to zcrypt_queue structure that identifies the
- *       PCIXCC/CEX2C device to the request distributor
+ *     CEXxC device to the request distributor
  * @crt: pointer to the modexpoc_crt request buffer
  */
 static long zcrypt_msgtype6_modexpo_crt(struct zcrypt_queue *zq,
@@ -1077,7 +1064,7 @@ static long zcrypt_msgtype6_modexpo_crt(struct zcrypt_queue *zq,
 {
        struct ap_message ap_msg;
        struct response_type resp_type = {
-               .type = PCIXCC_RESPONSE_TYPE_ICA,
+               .type = CEXXC_RESPONSE_TYPE_ICA,
        };
        int rc;
 
@@ -1122,7 +1109,7 @@ unsigned int get_cprb_fc(struct ica_xcRB *xcRB,
                                unsigned int *func_code, unsigned short **dom)
 {
        struct response_type resp_type = {
-               .type = PCIXCC_RESPONSE_TYPE_XCRB,
+               .type = CEXXC_RESPONSE_TYPE_XCRB,
        };
 
        ap_msg->message = kmalloc(MSGTYPE06_MAX_MSG_SIZE, GFP_KERNEL);
@@ -1138,10 +1125,10 @@ unsigned int get_cprb_fc(struct ica_xcRB *xcRB,
 }
 
 /**
- * The request distributor calls this function if it picked the PCIXCC/CEX2C
+ * The request distributor calls this function if it picked the CEXxC
  * device to handle a send_cprb request.
  * @zq: pointer to zcrypt_queue structure that identifies the
- *       PCIXCC/CEX2C device to the request distributor
+ *     CEXxC device to the request distributor
  * @xcRB: pointer to the send_cprb request buffer
  */
 static long zcrypt_msgtype6_send_cprb(struct zcrypt_queue *zq,
@@ -1177,7 +1164,7 @@ unsigned int get_ep11cprb_fc(struct ep11_urb *xcrb,
                                    unsigned int *func_code)
 {
        struct response_type resp_type = {
-               .type = PCIXCC_RESPONSE_TYPE_EP11,
+               .type = CEXXC_RESPONSE_TYPE_EP11,
        };
 
        ap_msg->message = kmalloc(MSGTYPE06_MAX_MSG_SIZE, GFP_KERNEL);
@@ -1271,7 +1258,7 @@ unsigned int get_rng_fc(struct ap_message *ap_msg, int *func_code,
                                                   unsigned int *domain)
 {
        struct response_type resp_type = {
-               .type = PCIXCC_RESPONSE_TYPE_XCRB,
+               .type = CEXXC_RESPONSE_TYPE_XCRB,
        };
 
        ap_msg->message = kmalloc(MSGTYPE06_MAX_MSG_SIZE, GFP_KERNEL);
@@ -1291,10 +1278,10 @@ unsigned int get_rng_fc(struct ap_message *ap_msg, int *func_code,
 }
 
 /**
- * The request distributor calls this function if it picked the PCIXCC/CEX2C
+ * The request distributor calls this function if it picked the CEXxC
  * device to generate random data.
  * @zq: pointer to zcrypt_queue structure that identifies the
- *       PCIXCC/CEX2C device to the request distributor
+ *     CEXxC device to the request distributor
  * @buffer: pointer to a memory page to return random data
  */
 static long zcrypt_msgtype6_rng(struct zcrypt_queue *zq,
@@ -1329,7 +1316,7 @@ static long zcrypt_msgtype6_rng(struct zcrypt_queue *zq,
 }
 
 /**
- * The crypto operations for a PCIXCC/CEX2C card.
+ * The crypto operations for a CEXxC card.
  */
 static struct zcrypt_ops zcrypt_msgtype6_norng_ops = {
        .owner = THIS_MODULE,
index e4c2f37d7ad9bf908cbec2324f20f40d23ef406f..41a0df5f070f344e49cdaefce75c634452e2992b 100644 (file)
@@ -1,7 +1,5 @@
 /* SPDX-License-Identifier: GPL-2.0+ */
 /*
- *  zcrypt 2.1.0
- *
  *  Copyright IBM Corp. 2001, 2012
  *  Author(s): Robert Burroughs
  *            Eric Rossman (edrossma@us.ibm.com)
@@ -24,7 +22,7 @@
 #define MSGTYPE06_MAX_MSG_SIZE         (12*1024)
 
 /**
- * The type 6 message family is associated with PCICC or PCIXCC cards.
+ * The type 6 message family is associated with CEXxC/CEXxP cards.
  *
  * It contains a message header followed by a CPRB, both of which
  * are described below.
@@ -43,13 +41,8 @@ struct type6_hdr {
        unsigned int  offset2;          /* 0x00000000                   */
        unsigned int  offset3;          /* 0x00000000                   */
        unsigned int  offset4;          /* 0x00000000                   */
-       unsigned char agent_id[16];     /* PCICC:                       */
-                                       /*    0x0100                    */
-                                       /*    0x4343412d4150504c202020  */
-                                       /*    0x010101                  */
-                                       /* PCIXCC:                      */
-                                       /*    0x4341000000000000        */
-                                       /*    0x0000000000000000        */
+       unsigned char agent_id[16];     /* 0x4341000000000000           */
+                                       /* 0x0000000000000000           */
        unsigned char rqid[2];          /* rqid.  internal to 603       */
        unsigned char reserved5[2];     /* 0x0000                       */
        unsigned char function_code[2]; /* for PKD, 0x5044 (ascii 'PD') */
@@ -65,7 +58,7 @@ struct type6_hdr {
 } __packed;
 
 /**
- * The type 86 message family is associated with PCICC and PCIXCC cards.
+ * The type 86 message family is associated with CEXxC/CEXxP cards.
  *
  * It contains a message header followed by a CPRB.  The CPRB is
  * the same as the request CPRB, which is described above.
diff --git a/drivers/s390/crypto/zcrypt_pcixcc.c b/drivers/s390/crypto/zcrypt_pcixcc.c
deleted file mode 100644 (file)
index 94d9f72..0000000
+++ /dev/null
@@ -1,317 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- *  zcrypt 2.1.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/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_pcixcc.h"
-#include "zcrypt_cca_key.h"
-
-#define PCIXCC_MIN_MOD_SIZE     16     /*  128 bits    */
-#define PCIXCC_MIN_MOD_SIZE_OLD         64     /*  512 bits    */
-#define PCIXCC_MAX_MOD_SIZE    256     /* 2048 bits    */
-#define CEX3C_MIN_MOD_SIZE     PCIXCC_MIN_MOD_SIZE
-#define CEX3C_MAX_MOD_SIZE     512     /* 4096 bits    */
-
-#define PCIXCC_MAX_ICA_MESSAGE_SIZE 0x77c  /* max size type6 v2 crt message */
-#define PCIXCC_MAX_ICA_RESPONSE_SIZE 0x77c /* max size type86 v2 reply     */
-
-#define PCIXCC_MAX_XCRB_MESSAGE_SIZE (12*1024)
-
-#define PCIXCC_CLEANUP_TIME    (15*HZ)
-
-#define CEIL4(x) ((((x)+3)/4)*4)
-
-struct response_type {
-       struct completion work;
-       int type;
-};
-#define PCIXCC_RESPONSE_TYPE_ICA  0
-#define PCIXCC_RESPONSE_TYPE_XCRB 1
-
-MODULE_AUTHOR("IBM Corporation");
-MODULE_DESCRIPTION("PCIXCC Cryptographic Coprocessor device driver, " \
-                  "Copyright IBM Corp. 2001, 2012");
-MODULE_LICENSE("GPL");
-
-static struct ap_device_id zcrypt_pcixcc_card_ids[] = {
-       { .dev_type = AP_DEVICE_TYPE_PCIXCC,
-         .match_flags = AP_DEVICE_ID_MATCH_CARD_TYPE },
-       { .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_pcixcc_card_ids);
-
-static struct ap_device_id zcrypt_pcixcc_queue_ids[] = {
-       { .dev_type = AP_DEVICE_TYPE_PCIXCC,
-         .match_flags = AP_DEVICE_ID_MATCH_QUEUE_TYPE },
-       { .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_pcixcc_queue_ids);
-
-/**
- * Large random number detection function. Its sends a message to a pcixcc
- * 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_pcixcc_rng_supported(struct ap_queue *aq)
-{
-       struct ap_message ap_msg;
-       unsigned long 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.message = (void *) get_zeroed_page(GFP_KERNEL);
-       if (!ap_msg.message)
-               return -ENOMEM;
-
-       rng_type6CPRB_msgX(&ap_msg, 4, &domain);
-
-       msg = ap_msg.message;
-       msg->cprbx.domain = AP_QID_QUEUE(aq->qid);
-
-       rc = ap_send(aq->qid, 0x0102030405060708ULL, ap_msg.message,
-                    ap_msg.length);
-       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.message, 4096);
-               if (rc == 0 && psmid == 0x0102030405060708ULL)
-                       break;
-       }
-
-       if (i >= 2 * HZ) {
-               /* Got no answer. */
-               rc = -ENODEV;
-               goto out_free;
-       }
-
-       reply = ap_msg.message;
-       if (reply->cprbx.ccp_rtcode == 0 && reply->cprbx.ccp_rscode == 0)
-               rc = 1;
-       else
-               rc = 0;
-out_free:
-       free_page((unsigned long) ap_msg.message);
-       return rc;
-}
-
-/**
- * Probe function for PCIXCC/CEX2C card devices. It always accepts the
- * AP device since the bus_match already checked the hardware type. The
- * PCIXCC cards come in two flavours: micro code level 2 and micro code
- * level 3. This is checked by sending a test message to the device.
- * @ap_dev: pointer to the AP card device.
- */
-static int zcrypt_pcixcc_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;
-       ac->private = zc;
-       switch (ac->ap_dev.device_type) {
-       case AP_DEVICE_TYPE_CEX2C:
-               zc->user_space_type = ZCRYPT_CEX2C;
-               zc->type_string = "CEX2C";
-               memcpy(zc->speed_rating, CEX2C_SPEED_IDX,
-                      sizeof(CEX2C_SPEED_IDX));
-               zc->min_mod_size = PCIXCC_MIN_MOD_SIZE;
-               zc->max_mod_size = PCIXCC_MAX_MOD_SIZE;
-               zc->max_exp_bit_length = PCIXCC_MAX_MOD_SIZE;
-               break;
-       case AP_DEVICE_TYPE_CEX3C:
-               zc->user_space_type = ZCRYPT_CEX3C;
-               zc->type_string = "CEX3C";
-               memcpy(zc->speed_rating, CEX3C_SPEED_IDX,
-                      sizeof(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) {
-               ac->private = NULL;
-               zcrypt_card_free(zc);
-       }
-
-       return rc;
-}
-
-/**
- * This is called to remove the PCIXCC/CEX2C card driver information
- * if an AP card device is removed.
- */
-static void zcrypt_pcixcc_card_remove(struct ap_device *ap_dev)
-{
-       struct zcrypt_card *zc = to_ap_card(&ap_dev->device)->private;
-
-       if (zc)
-               zcrypt_card_unregister(zc);
-}
-
-static struct ap_driver zcrypt_pcixcc_card_driver = {
-       .probe = zcrypt_pcixcc_card_probe,
-       .remove = zcrypt_pcixcc_card_remove,
-       .ids = zcrypt_pcixcc_card_ids,
-       .flags = AP_DRIVER_FLAG_DEFAULT,
-};
-
-/**
- * Probe function for PCIXCC/CEX2C queue devices. It always accepts the
- * AP device since the bus_match already checked the hardware type. The
- * PCIXCC cards come in two flavours: micro code level 2 and micro code
- * level 3. This is checked by sending a test message to the device.
- * @ap_dev: pointer to the AP card device.
- */
-static int zcrypt_pcixcc_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(PCIXCC_MAX_XCRB_MESSAGE_SIZE);
-       if (!zq)
-               return -ENOMEM;
-       zq->queue = aq;
-       zq->online = 1;
-       atomic_set(&zq->load, 0);
-       rc = zcrypt_pcixcc_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_reply(aq, &zq->reply);
-       aq->request_timeout = PCIXCC_CLEANUP_TIME,
-       aq->private = zq;
-       rc = zcrypt_queue_register(zq);
-       if (rc) {
-               aq->private = NULL;
-               zcrypt_queue_free(zq);
-       }
-       return rc;
-}
-
-/**
- * This is called to remove the PCIXCC/CEX2C queue driver information
- * if an AP queue device is removed.
- */
-static void zcrypt_pcixcc_queue_remove(struct ap_device *ap_dev)
-{
-       struct ap_queue *aq = to_ap_queue(&ap_dev->device);
-       struct zcrypt_queue *zq = aq->private;
-
-       ap_queue_remove(aq);
-       if (zq)
-               zcrypt_queue_unregister(zq);
-}
-
-static struct ap_driver zcrypt_pcixcc_queue_driver = {
-       .probe = zcrypt_pcixcc_queue_probe,
-       .remove = zcrypt_pcixcc_queue_remove,
-       .suspend = ap_queue_suspend,
-       .resume = ap_queue_resume,
-       .ids = zcrypt_pcixcc_queue_ids,
-       .flags = AP_DRIVER_FLAG_DEFAULT,
-};
-
-int __init zcrypt_pcixcc_init(void)
-{
-       int rc;
-
-       rc = ap_driver_register(&zcrypt_pcixcc_card_driver,
-                               THIS_MODULE, "pcixcccard");
-       if (rc)
-               return rc;
-
-       rc = ap_driver_register(&zcrypt_pcixcc_queue_driver,
-                               THIS_MODULE, "pcixccqueue");
-       if (rc)
-               ap_driver_unregister(&zcrypt_pcixcc_card_driver);
-
-       return rc;
-}
-
-void zcrypt_pcixcc_exit(void)
-{
-       ap_driver_unregister(&zcrypt_pcixcc_queue_driver);
-       ap_driver_unregister(&zcrypt_pcixcc_card_driver);
-}
-
-module_init(zcrypt_pcixcc_init);
-module_exit(zcrypt_pcixcc_exit);
diff --git a/drivers/s390/crypto/zcrypt_pcixcc.h b/drivers/s390/crypto/zcrypt_pcixcc.h
deleted file mode 100644 (file)
index cf73a0f..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0+ */
-/*
- *  zcrypt 2.1.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>
- *  MSGTYPE restruct:            Holger Dengler <hd@linux.vnet.ibm.com>
- */
-
-#ifndef _ZCRYPT_PCIXCC_H_
-#define _ZCRYPT_PCIXCC_H_
-
-int zcrypt_pcixcc_init(void);
-void zcrypt_pcixcc_exit(void);
-
-#endif /* _ZCRYPT_PCIXCC_H_ */
index 8df82c6ef66edeccb60099f0421b7bfdfba37c85..522c4bc69a084c7e0613231bfd1809efffdcdcfe 100644 (file)
@@ -1,7 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
- *  zcrypt 2.1.0
- *
  *  Copyright IBM Corp. 2001, 2012
  *  Author(s): Robert Burroughs
  *            Eric Rossman (edrossma@us.ibm.com)