aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/scsi
diff options
context:
space:
mode:
authorSteffen Maier <maier@linux.vnet.ibm.com>2012-09-04 09:23:29 -0400
committerJames Bottomley <JBottomley@Parallels.com>2012-09-24 04:11:01 -0400
commitd22019778cd9ea04c1dadf7bf453920d5288f8d9 (patch)
treed589dd52e5637d452e419fec4f707b0430e04843 /drivers/s390/scsi
parent16da05b1158d1bcb31656e636a8736a663b1cf1f (diff)
[SCSI] zfcp: Adapt to new FC_PORTSPEED semantics
Commit a9277e7783651d4e0a849f7988340b1c1cf748a4 "[SCSI] scsi_transport_fc: Getting FC Port Speed in sync with FC-GS" changed the semantics of FC_PORTSPEED defines to FDMI port attributes of FC-HBA/SM-HBA which is different from the previous bit reversed Report Port Speed Capabilities (RPSC) ELS of FC-GS/FC-LS. Zfcp showed "10 Gbit" instead of "4 Gbit" for supported_speeds. It now uses explicit bit conversion as the other LLDs already do, in order to be independent of the kernel bit semantics. See also http://marc.info/?l=linux-scsi&m=134452926830730&w=2 Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com> Reviewed-by: Martin Peschke <mpeschke@linux.vnet.ibm.com> Cc: <stable@vger.kernel.org> #3.4+ Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/s390/scsi')
-rw-r--r--drivers/s390/scsi/zfcp_fsf.c34
1 files changed, 32 insertions, 2 deletions
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c
index e1c1efc2c5a0..30436d53d358 100644
--- a/drivers/s390/scsi/zfcp_fsf.c
+++ b/drivers/s390/scsi/zfcp_fsf.c
@@ -437,6 +437,34 @@ void zfcp_fsf_req_dismiss_all(struct zfcp_adapter *adapter)
437 } 437 }
438} 438}
439 439
440#define ZFCP_FSF_PORTSPEED_1GBIT (1 << 0)
441#define ZFCP_FSF_PORTSPEED_2GBIT (1 << 1)
442#define ZFCP_FSF_PORTSPEED_4GBIT (1 << 2)
443#define ZFCP_FSF_PORTSPEED_10GBIT (1 << 3)
444#define ZFCP_FSF_PORTSPEED_8GBIT (1 << 4)
445#define ZFCP_FSF_PORTSPEED_16GBIT (1 << 5)
446#define ZFCP_FSF_PORTSPEED_NOT_NEGOTIATED (1 << 15)
447
448static u32 zfcp_fsf_convert_portspeed(u32 fsf_speed)
449{
450 u32 fdmi_speed = 0;
451 if (fsf_speed & ZFCP_FSF_PORTSPEED_1GBIT)
452 fdmi_speed |= FC_PORTSPEED_1GBIT;
453 if (fsf_speed & ZFCP_FSF_PORTSPEED_2GBIT)
454 fdmi_speed |= FC_PORTSPEED_2GBIT;
455 if (fsf_speed & ZFCP_FSF_PORTSPEED_4GBIT)
456 fdmi_speed |= FC_PORTSPEED_4GBIT;
457 if (fsf_speed & ZFCP_FSF_PORTSPEED_10GBIT)
458 fdmi_speed |= FC_PORTSPEED_10GBIT;
459 if (fsf_speed & ZFCP_FSF_PORTSPEED_8GBIT)
460 fdmi_speed |= FC_PORTSPEED_8GBIT;
461 if (fsf_speed & ZFCP_FSF_PORTSPEED_16GBIT)
462 fdmi_speed |= FC_PORTSPEED_16GBIT;
463 if (fsf_speed & ZFCP_FSF_PORTSPEED_NOT_NEGOTIATED)
464 fdmi_speed |= FC_PORTSPEED_NOT_NEGOTIATED;
465 return fdmi_speed;
466}
467
440static int zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *req) 468static int zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *req)
441{ 469{
442 struct fsf_qtcb_bottom_config *bottom = &req->qtcb->bottom.config; 470 struct fsf_qtcb_bottom_config *bottom = &req->qtcb->bottom.config;
@@ -456,7 +484,8 @@ static int zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *req)
456 fc_host_port_name(shost) = nsp->fl_wwpn; 484 fc_host_port_name(shost) = nsp->fl_wwpn;
457 fc_host_node_name(shost) = nsp->fl_wwnn; 485 fc_host_node_name(shost) = nsp->fl_wwnn;
458 fc_host_port_id(shost) = ntoh24(bottom->s_id); 486 fc_host_port_id(shost) = ntoh24(bottom->s_id);
459 fc_host_speed(shost) = bottom->fc_link_speed; 487 fc_host_speed(shost) =
488 zfcp_fsf_convert_portspeed(bottom->fc_link_speed);
460 fc_host_supported_classes(shost) = FC_COS_CLASS2 | FC_COS_CLASS3; 489 fc_host_supported_classes(shost) = FC_COS_CLASS2 | FC_COS_CLASS3;
461 490
462 adapter->hydra_version = bottom->adapter_type; 491 adapter->hydra_version = bottom->adapter_type;
@@ -580,7 +609,8 @@ static void zfcp_fsf_exchange_port_evaluate(struct zfcp_fsf_req *req)
580 } else 609 } else
581 fc_host_permanent_port_name(shost) = fc_host_port_name(shost); 610 fc_host_permanent_port_name(shost) = fc_host_port_name(shost);
582 fc_host_maxframe_size(shost) = bottom->maximum_frame_size; 611 fc_host_maxframe_size(shost) = bottom->maximum_frame_size;
583 fc_host_supported_speeds(shost) = bottom->supported_speed; 612 fc_host_supported_speeds(shost) =
613 zfcp_fsf_convert_portspeed(bottom->supported_speed);
584 memcpy(fc_host_supported_fc4s(shost), bottom->supported_fc4_types, 614 memcpy(fc_host_supported_fc4s(shost), bottom->supported_fc4_types,
585 FC_FC4_LIST_SIZE); 615 FC_FC4_LIST_SIZE);
586 memcpy(fc_host_active_fc4s(shost), bottom->active_fc4_types, 616 memcpy(fc_host_active_fc4s(shost), bottom->active_fc4_types,