[SCSI] zfcp: Simplify mask lookups for incoming RSCNs
authorChristof Schmitt <christof.schmitt@de.ibm.com>
Fri, 19 Dec 2008 15:56:58 +0000 (16:56 +0100)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>
Mon, 29 Dec 2008 17:38:27 +0000 (11:38 -0600)
Use an array for looking up the mask corresponding to the 2-bit
information instead of the switch/case.

Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com>
Acked-by: Felix Beck <felix@linux.vnet.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
drivers/s390/scsi/zfcp_def.h
drivers/s390/scsi/zfcp_fc.c

index 9ca91316e068c559e8cab0eaa2bb5e86f98d2a05..4f3b7a5ce7fe3807aecfd84f636134a407786001 100644 (file)
@@ -159,20 +159,6 @@ struct fcp_rscn_element {
         u32 nport_did:24;
 } __attribute__((packed));
 
-#define ZFCP_PORT_ADDRESS   0x0
-#define ZFCP_AREA_ADDRESS   0x1
-#define ZFCP_DOMAIN_ADDRESS 0x2
-#define ZFCP_FABRIC_ADDRESS 0x3
-
-#define ZFCP_PORTS_RANGE_PORT   0xFFFFFF
-#define ZFCP_PORTS_RANGE_AREA   0xFFFF00
-#define ZFCP_PORTS_RANGE_DOMAIN 0xFF0000
-#define ZFCP_PORTS_RANGE_FABRIC 0x000000
-
-#define ZFCP_NO_PORTS_PER_AREA    0x100
-#define ZFCP_NO_PORTS_PER_DOMAIN  0x10000
-#define ZFCP_NO_PORTS_PER_FABRIC  0x1000000
-
 /* see fc-ph */
 struct fcp_logo {
         u32 command;
index f009f2a7ec3ecea35874c04ffd4c2d643a053a7c..396f05ed912f1265c7d914c9b4c23bbfbee09b62 100644 (file)
 
 #include "zfcp_ext.h"
 
+enum rscn_address_format {
+       RSCN_PORT_ADDRESS       = 0x0,
+       RSCN_AREA_ADDRESS       = 0x1,
+       RSCN_DOMAIN_ADDRESS     = 0x2,
+       RSCN_FABRIC_ADDRESS     = 0x3,
+};
+
+static u32 rscn_range_mask[] = {
+       [RSCN_PORT_ADDRESS]             = 0xFFFFFF,
+       [RSCN_AREA_ADDRESS]             = 0xFFFF00,
+       [RSCN_DOMAIN_ADDRESS]           = 0xFF0000,
+       [RSCN_FABRIC_ADDRESS]           = 0x000000,
+};
+
 struct ct_iu_gpn_ft_req {
        struct ct_hdr header;
        u8 flags;
@@ -160,22 +174,7 @@ static void zfcp_fc_incoming_rscn(struct zfcp_fsf_req *fsf_req)
        for (i = 1; i < no_entries; i++) {
                /* skip head and start with 1st element */
                fcp_rscn_element++;
-               switch (fcp_rscn_element->addr_format) {
-               case ZFCP_PORT_ADDRESS:
-                       range_mask = ZFCP_PORTS_RANGE_PORT;
-                       break;
-               case ZFCP_AREA_ADDRESS:
-                       range_mask = ZFCP_PORTS_RANGE_AREA;
-                       break;
-               case ZFCP_DOMAIN_ADDRESS:
-                       range_mask = ZFCP_PORTS_RANGE_DOMAIN;
-                       break;
-               case ZFCP_FABRIC_ADDRESS:
-                       range_mask = ZFCP_PORTS_RANGE_FABRIC;
-                       break;
-               default:
-                       continue;
-               }
+               range_mask = rscn_range_mask[fcp_rscn_element->addr_format];
                _zfcp_fc_incoming_rscn(fsf_req, range_mask, fcp_rscn_element);
        }
        schedule_work(&fsf_req->adapter->scan_work);