diff options
Diffstat (limited to 'drivers/message/fusion/mptfc.c')
-rw-r--r-- | drivers/message/fusion/mptfc.c | 100 |
1 files changed, 84 insertions, 16 deletions
diff --git a/drivers/message/fusion/mptfc.c b/drivers/message/fusion/mptfc.c index 85696f34c310..e57bb035a021 100644 --- a/drivers/message/fusion/mptfc.c +++ b/drivers/message/fusion/mptfc.c | |||
@@ -162,7 +162,13 @@ static struct fc_function_template mptfc_transport_functions = { | |||
162 | .show_starget_port_id = 1, | 162 | .show_starget_port_id = 1, |
163 | .set_rport_dev_loss_tmo = mptfc_set_rport_loss_tmo, | 163 | .set_rport_dev_loss_tmo = mptfc_set_rport_loss_tmo, |
164 | .show_rport_dev_loss_tmo = 1, | 164 | .show_rport_dev_loss_tmo = 1, |
165 | 165 | .show_host_supported_speeds = 1, | |
166 | .show_host_maxframe_size = 1, | ||
167 | .show_host_speed = 1, | ||
168 | .show_host_fabric_name = 1, | ||
169 | .show_host_port_type = 1, | ||
170 | .show_host_port_state = 1, | ||
171 | .show_host_symbolic_name = 1, | ||
166 | }; | 172 | }; |
167 | 173 | ||
168 | static void | 174 | static void |
@@ -839,33 +845,95 @@ mptfc_SetFcPortPage1_defaults(MPT_ADAPTER *ioc) | |||
839 | static void | 845 | static void |
840 | mptfc_init_host_attr(MPT_ADAPTER *ioc,int portnum) | 846 | mptfc_init_host_attr(MPT_ADAPTER *ioc,int portnum) |
841 | { | 847 | { |
842 | unsigned class = 0, cos = 0; | 848 | unsigned class = 0; |
849 | unsigned cos = 0; | ||
850 | unsigned speed; | ||
851 | unsigned port_type; | ||
852 | unsigned port_state; | ||
853 | FCPortPage0_t *pp0; | ||
854 | struct Scsi_Host *sh; | ||
855 | char *sn; | ||
843 | 856 | ||
844 | /* don't know what to do as only one scsi (fc) host was allocated */ | 857 | /* don't know what to do as only one scsi (fc) host was allocated */ |
845 | if (portnum != 0) | 858 | if (portnum != 0) |
846 | return; | 859 | return; |
847 | 860 | ||
848 | class = ioc->fc_port_page0[portnum].SupportedServiceClass; | 861 | pp0 = &ioc->fc_port_page0[portnum]; |
862 | sh = ioc->sh; | ||
863 | |||
864 | sn = fc_host_symbolic_name(sh); | ||
865 | snprintf(sn, FC_SYMBOLIC_NAME_SIZE, "%s %s%08xh", | ||
866 | ioc->prod_name, | ||
867 | MPT_FW_REV_MAGIC_ID_STRING, | ||
868 | ioc->facts.FWVersion.Word); | ||
869 | |||
870 | fc_host_tgtid_bind_type(sh) = FC_TGTID_BIND_BY_WWPN; | ||
871 | |||
872 | fc_host_maxframe_size(sh) = pp0->MaxFrameSize; | ||
873 | |||
874 | fc_host_node_name(sh) = | ||
875 | (u64)pp0->WWNN.High << 32 | (u64)pp0->WWNN.Low; | ||
876 | |||
877 | fc_host_port_name(sh) = | ||
878 | (u64)pp0->WWPN.High << 32 | (u64)pp0->WWPN.Low; | ||
879 | |||
880 | fc_host_port_id(sh) = pp0->PortIdentifier; | ||
881 | |||
882 | class = pp0->SupportedServiceClass; | ||
849 | if (class & MPI_FCPORTPAGE0_SUPPORT_CLASS_1) | 883 | if (class & MPI_FCPORTPAGE0_SUPPORT_CLASS_1) |
850 | cos |= FC_COS_CLASS1; | 884 | cos |= FC_COS_CLASS1; |
851 | if (class & MPI_FCPORTPAGE0_SUPPORT_CLASS_2) | 885 | if (class & MPI_FCPORTPAGE0_SUPPORT_CLASS_2) |
852 | cos |= FC_COS_CLASS2; | 886 | cos |= FC_COS_CLASS2; |
853 | if (class & MPI_FCPORTPAGE0_SUPPORT_CLASS_3) | 887 | if (class & MPI_FCPORTPAGE0_SUPPORT_CLASS_3) |
854 | cos |= FC_COS_CLASS3; | 888 | cos |= FC_COS_CLASS3; |
889 | fc_host_supported_classes(sh) = cos; | ||
890 | |||
891 | if (pp0->CurrentSpeed == MPI_FCPORTPAGE0_CURRENT_SPEED_1GBIT) | ||
892 | speed = FC_PORTSPEED_1GBIT; | ||
893 | else if (pp0->CurrentSpeed == MPI_FCPORTPAGE0_CURRENT_SPEED_2GBIT) | ||
894 | speed = FC_PORTSPEED_2GBIT; | ||
895 | else if (pp0->CurrentSpeed == MPI_FCPORTPAGE0_CURRENT_SPEED_4GBIT) | ||
896 | speed = FC_PORTSPEED_4GBIT; | ||
897 | else if (pp0->CurrentSpeed == MPI_FCPORTPAGE0_CURRENT_SPEED_10GBIT) | ||
898 | speed = FC_PORTSPEED_10GBIT; | ||
899 | else | ||
900 | speed = FC_PORTSPEED_UNKNOWN; | ||
901 | fc_host_speed(sh) = speed; | ||
902 | |||
903 | speed = 0; | ||
904 | if (pp0->SupportedSpeeds & MPI_FCPORTPAGE0_SUPPORT_1GBIT_SPEED) | ||
905 | speed |= FC_PORTSPEED_1GBIT; | ||
906 | if (pp0->SupportedSpeeds & MPI_FCPORTPAGE0_SUPPORT_2GBIT_SPEED) | ||
907 | speed |= FC_PORTSPEED_2GBIT; | ||
908 | if (pp0->SupportedSpeeds & MPI_FCPORTPAGE0_SUPPORT_4GBIT_SPEED) | ||
909 | speed |= FC_PORTSPEED_4GBIT; | ||
910 | if (pp0->SupportedSpeeds & MPI_FCPORTPAGE0_SUPPORT_10GBIT_SPEED) | ||
911 | speed |= FC_PORTSPEED_10GBIT; | ||
912 | fc_host_supported_speeds(sh) = speed; | ||
913 | |||
914 | port_state = FC_PORTSTATE_UNKNOWN; | ||
915 | if (pp0->PortState == MPI_FCPORTPAGE0_PORTSTATE_ONLINE) | ||
916 | port_state = FC_PORTSTATE_ONLINE; | ||
917 | else if (pp0->PortState == MPI_FCPORTPAGE0_PORTSTATE_OFFLINE) | ||
918 | port_state = FC_PORTSTATE_LINKDOWN; | ||
919 | fc_host_port_state(sh) = port_state; | ||
920 | |||
921 | port_type = FC_PORTTYPE_UNKNOWN; | ||
922 | if (pp0->Flags & MPI_FCPORTPAGE0_FLAGS_ATTACH_POINT_TO_POINT) | ||
923 | port_type = FC_PORTTYPE_PTP; | ||
924 | else if (pp0->Flags & MPI_FCPORTPAGE0_FLAGS_ATTACH_PRIVATE_LOOP) | ||
925 | port_type = FC_PORTTYPE_LPORT; | ||
926 | else if (pp0->Flags & MPI_FCPORTPAGE0_FLAGS_ATTACH_PUBLIC_LOOP) | ||
927 | port_type = FC_PORTTYPE_NLPORT; | ||
928 | else if (pp0->Flags & MPI_FCPORTPAGE0_FLAGS_ATTACH_FABRIC_DIRECT) | ||
929 | port_type = FC_PORTTYPE_NPORT; | ||
930 | fc_host_port_type(sh) = port_type; | ||
931 | |||
932 | fc_host_fabric_name(sh) = | ||
933 | (pp0->Flags & MPI_FCPORTPAGE0_FLAGS_FABRIC_WWN_VALID) ? | ||
934 | (u64) pp0->FabricWWNN.High << 32 | (u64) pp0->FabricWWPN.Low : | ||
935 | (u64)pp0->WWNN.High << 32 | (u64)pp0->WWNN.Low; | ||
855 | 936 | ||
856 | fc_host_node_name(ioc->sh) = | ||
857 | (u64)ioc->fc_port_page0[portnum].WWNN.High << 32 | ||
858 | | (u64)ioc->fc_port_page0[portnum].WWNN.Low; | ||
859 | |||
860 | fc_host_port_name(ioc->sh) = | ||
861 | (u64)ioc->fc_port_page0[portnum].WWPN.High << 32 | ||
862 | | (u64)ioc->fc_port_page0[portnum].WWPN.Low; | ||
863 | |||
864 | fc_host_port_id(ioc->sh) = ioc->fc_port_page0[portnum].PortIdentifier; | ||
865 | |||
866 | fc_host_supported_classes(ioc->sh) = cos; | ||
867 | |||
868 | fc_host_tgtid_bind_type(ioc->sh) = FC_TGTID_BIND_BY_WWPN; | ||
869 | } | 937 | } |
870 | 938 | ||
871 | static void | 939 | static void |