Commit e0d7fcb5 authored by Christof Schmitt's avatar Christof Schmitt Committed by James Bottomley

[SCSI] zfcp: Simplify mask lookups for incoming RSCNs

Use an array for looking up the mask corresponding to the 2-bit
information instead of the switch/case.
Signed-off-by: default avatarChristof Schmitt <christof.schmitt@de.ibm.com>
Acked-by: default avatarFelix Beck <felix@linux.vnet.ibm.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent 3623ecba
...@@ -159,20 +159,6 @@ struct fcp_rscn_element { ...@@ -159,20 +159,6 @@ struct fcp_rscn_element {
u32 nport_did:24; u32 nport_did:24;
} __attribute__((packed)); } __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 */ /* see fc-ph */
struct fcp_logo { struct fcp_logo {
u32 command; u32 command;
......
...@@ -11,6 +11,20 @@ ...@@ -11,6 +11,20 @@
#include "zfcp_ext.h" #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_iu_gpn_ft_req {
struct ct_hdr header; struct ct_hdr header;
u8 flags; u8 flags;
...@@ -160,22 +174,7 @@ static void zfcp_fc_incoming_rscn(struct zfcp_fsf_req *fsf_req) ...@@ -160,22 +174,7 @@ static void zfcp_fc_incoming_rscn(struct zfcp_fsf_req *fsf_req)
for (i = 1; i < no_entries; i++) { for (i = 1; i < no_entries; i++) {
/* skip head and start with 1st element */ /* skip head and start with 1st element */
fcp_rscn_element++; fcp_rscn_element++;
switch (fcp_rscn_element->addr_format) { range_mask = rscn_range_mask[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;
}
_zfcp_fc_incoming_rscn(fsf_req, range_mask, fcp_rscn_element); _zfcp_fc_incoming_rscn(fsf_req, range_mask, fcp_rscn_element);
} }
schedule_work(&fsf_req->adapter->scan_work); schedule_work(&fsf_req->adapter->scan_work);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment