fusion: fibre channel: add additional fc transport attributes
Subsystems (2)
PATCH 1/4 fusion: fibre channel: add additional fc transport attributes
Add host_supported_speeds, host_maxframe_size, host_speed, host_fabric_name, host_port_type, host_port_state, and host_symbolic_name transport attributes to fusion fibre channel.
Signed-off-by Michael Reed <[email protected]>
drivers/message/fusion/mptfc.c +82 -14
@@ -162,7 +162,13 @@ static struct fc_function_template mptfc .show_starget_port_id = 1, .set_rport_dev_loss_tmo = mptfc_set_rport_loss_tmo, .show_rport_dev_loss_tmo = 1, - + .show_host_supported_speeds = 1, + .show_host_maxframe_size = 1, + .show_host_speed = 1, + .show_host_fabric_name = 1, + .show_host_port_type = 1, + .show_host_port_state = 1, + .show_host_symbolic_name = 1, }; static void
@@ -836,33 +842,95 @@ mptfc_SetFcPortPage1_defaults(MPT_ADAPTEstatic void mptfc_init_host_attr (MPT_ADAPTER *ioc,int portnum) { -unsigned class =0 , cos =0 ; +unsigned class =0 ; +unsigned cos =0 ; +unsigned speed; +unsigned port_type; +unsigned port_state; +FCPortPage0_t *pp0; +struct Scsi_Host *sh; +char *sn;/* don't know what to do as only one scsi (fc) host was allocated */ if (portnum !=0 )return ; - class = ioc->fc_port_page0[portnum].SupportedServiceClass; + pp0 = &ioc->fc_port_page0[portnum]; + sh = ioc->sh; + + sn =fc_host_symbolic_name (sh); +snprintf (sn,FC_SYMBOLIC_NAME_SIZE ,"%s %s%08xh" , + ioc->prod_name, +MPT_FW_REV_MAGIC_ID_STRING , + ioc->facts.FWVersion.Word); + +fc_host_tgtid_bind_type (sh) =FC_TGTID_BIND_BY_WWPN ; + +fc_host_maxframe_size (sh) = pp0->MaxFrameSize; + +fc_host_node_name (sh) = + (u64 )pp0->WWNN.High <<32 | (u64 )pp0->WWNN.Low; + +fc_host_port_name (sh) = + (u64 )pp0->WWPN.High <<32 | (u64 )pp0->WWPN.Low; + +fc_host_port_id (sh) = pp0->PortIdentifier; + + class = pp0->SupportedServiceClass;if (class &MPI_FCPORTPAGE0_SUPPORT_CLASS_1 ) cos |=FC_COS_CLASS1 ;if (class &MPI_FCPORTPAGE0_SUPPORT_CLASS_2 ) cos |=FC_COS_CLASS2 ;if (class &MPI_FCPORTPAGE0_SUPPORT_CLASS_3 ) cos |=FC_COS_CLASS3 ; +fc_host_supported_classes (sh) = cos; -fc_host_node_name (ioc->sh) = - (u64 )ioc->fc_port_page0[portnum].WWNN.High <<32 - | (u64 )ioc->fc_port_page0[portnum].WWNN.Low; - -fc_host_port_name (ioc->sh) = - (u64 )ioc->fc_port_page0[portnum].WWPN.High <<32 - | (u64 )ioc->fc_port_page0[portnum].WWPN.Low; - -fc_host_port_id (ioc->sh) = ioc->fc_port_page0[portnum].PortIdentifier; +if (pp0->CurrentSpeed ==MPI_FCPORTPAGE0_CURRENT_SPEED_1GBIT ) + speed =FC_PORTSPEED_1GBIT ; +else if (pp0->CurrentSpeed ==MPI_FCPORTPAGE0_CURRENT_SPEED_2GBIT ) + speed =FC_PORTSPEED_2GBIT ; +else if (pp0->CurrentSpeed ==MPI_FCPORTPAGE0_CURRENT_SPEED_4GBIT ) + speed =FC_PORTSPEED_4GBIT ; +else if (pp0->CurrentSpeed ==MPI_FCPORTPAGE0_CURRENT_SPEED_10GBIT ) + speed =FC_PORTSPEED_10GBIT ; +else + speed =FC_PORTSPEED_UNKNOWN ; +fc_host_speed (sh) = speed; -fc_host_supported_classes (ioc->sh) = cos; + speed =0 ; +if (pp0->SupportedSpeeds &MPI_FCPORTPAGE0_SUPPORT_1GBIT_SPEED ) + speed |=FC_PORTSPEED_1GBIT ; +if (pp0->SupportedSpeeds &MPI_FCPORTPAGE0_SUPPORT_2GBIT_SPEED ) + speed |=FC_PORTSPEED_2GBIT ; +if (pp0->SupportedSpeeds &MPI_FCPORTPAGE0_SUPPORT_4GBIT_SPEED ) + speed |=FC_PORTSPEED_4GBIT ; +if (pp0->SupportedSpeeds &MPI_FCPORTPAGE0_SUPPORT_10GBIT_SPEED ) + speed |=FC_PORTSPEED_10GBIT ; +fc_host_supported_speeds (sh) = speed; + + port_state =FC_PORTSTATE_UNKNOWN ; +if (pp0->PortState ==MPI_FCPORTPAGE0_PORTSTATE_ONLINE ) + port_state =FC_PORTSTATE_ONLINE ; +else if (pp0->PortState ==MPI_FCPORTPAGE0_PORTSTATE_OFFLINE ) + port_state =FC_PORTSTATE_LINKDOWN ; +fc_host_port_state (sh) = port_state; + + port_type =FC_PORTTYPE_UNKNOWN ; +if (pp0->Flags &MPI_FCPORTPAGE0_FLAGS_ATTACH_POINT_TO_POINT ) + port_type =FC_PORTTYPE_PTP ; +else if (pp0->Flags &MPI_FCPORTPAGE0_FLAGS_ATTACH_PRIVATE_LOOP ) + port_type =FC_PORTTYPE_LPORT ; +else if (pp0->Flags &MPI_FCPORTPAGE0_FLAGS_ATTACH_PUBLIC_LOOP ) + port_type =FC_PORTTYPE_NLPORT ; +else if (pp0->Flags &MPI_FCPORTPAGE0_FLAGS_ATTACH_FABRIC_DIRECT ) + port_type =FC_PORTTYPE_NPORT ; +fc_host_port_type (sh) = port_type; + +fc_host_fabric_name (sh) = + (pp0->Flags &MPI_FCPORTPAGE0_FLAGS_FABRIC_WWN_VALID ) ? + (u64 ) pp0->FabricWWNN.High <<32 | (u64 ) pp0->FabricWWPN.Low : + (u64 )pp0->WWNN.High <<32 | (u64 )pp0->WWNN.Low; -fc_host_tgtid_bind_type (ioc->sh) =FC_TGTID_BIND_BY_WWPN ; } static void