s390/zcrypt: support for extended number of ap domains
authorIngo Tuchscherer <ingo.tuchscherer@de.ibm.com>
Mon, 8 Sep 2014 11:24:13 +0000 (13:24 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 25 Sep 2014 08:51:57 +0000 (10:51 +0200)
Extends the number of ap domains within the zcrypt device driver up to 256.
AP domains in the range 00..255 will be detected.

Signed-off-by: Ingo Tuchscherer <ingo.tuchscherer@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/crypto/ap_bus.c
drivers/s390/crypto/ap_bus.h

index 4038437ff033f892d30c746056bbb16d12e40c5a..51e6aa0e2e5823308c6730987257d33efb446954 100644 (file)
@@ -1188,6 +1188,10 @@ static int ap_select_domain(void)
        ap_qid_t qid;
        int rc, i, j;
 
+       /* IF APXA isn't installed, only 16 domains could be defined */
+       if (!ap_configuration->ap_extended && (ap_domain_index > 15))
+               return -EINVAL;
+
        /*
         * We want to use a single domain. Either the one specified with
         * the "domain=" parameter or the domain with the maximum number
@@ -1900,9 +1904,15 @@ static void ap_reset_all(void)
 {
        int i, j;
 
-       for (i = 0; i < AP_DOMAINS; i++)
-               for (j = 0; j < AP_DEVICES; j++)
+       for (i = 0; i < AP_DOMAINS; i++) {
+               if (!ap_test_config_domain(i))
+                       continue;
+               for (j = 0; j < AP_DEVICES; j++) {
+                       if (!ap_test_config_card_id(j))
+                               continue;
                        ap_reset_queue(AP_MKQID(j, i));
+               }
+       }
 }
 
 static struct reset_call ap_reset_call = {
index 6405ae24a7a69674ddc602d5bbef2a9ccd29d7bf..db92e9fa5c079d398e1e3043479329898545a555 100644 (file)
@@ -31,7 +31,7 @@
 #include <linux/types.h>
 
 #define AP_DEVICES 64          /* Number of AP devices. */
-#define AP_DOMAINS 16          /* Number of AP domains. */
+#define AP_DOMAINS 256         /* Number of AP domains. */
 #define AP_MAX_RESET 90                /* Maximum number of resets. */
 #define AP_RESET_TIMEOUT (HZ*0.7)      /* Time in ticks for reset timeouts. */
 #define AP_CONFIG_TIME 30      /* Time in seconds between AP bus rescans. */
@@ -45,9 +45,9 @@ extern int ap_domain_index;
  */
 typedef unsigned int ap_qid_t;
 
-#define AP_MKQID(_device,_queue) (((_device) & 63) << 8 | ((_queue) & 15))
+#define AP_MKQID(_device, _queue) (((_device) & 63) << 8 | ((_queue) & 255))
 #define AP_QID_DEVICE(_qid) (((_qid) >> 8) & 63)
-#define AP_QID_QUEUE(_qid) ((_qid) & 15)
+#define AP_QID_QUEUE(_qid) ((_qid) & 255)
 
 /**
  * structy ap_queue_status - Holds the AP queue status.