@@ -710,6 +710,35 @@ static void i40e_phy_type_to_ethtool(struct i40e_pf *pf,
710710 }
711711}
712712
713+ /**
714+ * i40e_get_settings_link_up_fec - Get the FEC mode encoding from mask
715+ * @req_fec_info: mask request FEC info
716+ * @ks: ethtool ksettings to fill in
717+ **/
718+ static void i40e_get_settings_link_up_fec (u8 req_fec_info ,
719+ struct ethtool_link_ksettings * ks )
720+ {
721+ ethtool_link_ksettings_add_link_mode (ks , supported , FEC_NONE );
722+ ethtool_link_ksettings_add_link_mode (ks , supported , FEC_RS );
723+ ethtool_link_ksettings_add_link_mode (ks , supported , FEC_BASER );
724+
725+ if (I40E_AQ_SET_FEC_REQUEST_RS & req_fec_info ) {
726+ ethtool_link_ksettings_add_link_mode (ks , advertising , FEC_RS );
727+ } else if (I40E_AQ_SET_FEC_REQUEST_KR & req_fec_info ) {
728+ ethtool_link_ksettings_add_link_mode (ks , advertising ,
729+ FEC_BASER );
730+ } else {
731+ ethtool_link_ksettings_add_link_mode (ks , advertising ,
732+ FEC_NONE );
733+ if (I40E_AQ_SET_FEC_AUTO & req_fec_info ) {
734+ ethtool_link_ksettings_add_link_mode (ks , advertising ,
735+ FEC_RS );
736+ ethtool_link_ksettings_add_link_mode (ks , advertising ,
737+ FEC_BASER );
738+ }
739+ }
740+ }
741+
713742/**
714743 * i40e_get_settings_link_up - Get the Link settings for when link is up
715744 * @hw: hw structure
@@ -769,13 +798,7 @@ static void i40e_get_settings_link_up(struct i40e_hw *hw,
769798 25000b aseSR_Full );
770799 ethtool_link_ksettings_add_link_mode (ks , advertising ,
771800 25000b aseSR_Full );
772- ethtool_link_ksettings_add_link_mode (ks , supported , FEC_NONE );
773- ethtool_link_ksettings_add_link_mode (ks , supported , FEC_RS );
774- ethtool_link_ksettings_add_link_mode (ks , supported , FEC_BASER );
775- ethtool_link_ksettings_add_link_mode (ks , advertising , FEC_NONE );
776- ethtool_link_ksettings_add_link_mode (ks , advertising , FEC_RS );
777- ethtool_link_ksettings_add_link_mode (ks , advertising ,
778- FEC_BASER );
801+ i40e_get_settings_link_up_fec (hw_link_info -> req_fec_info , ks );
779802 ethtool_link_ksettings_add_link_mode (ks , supported ,
780803 10000b aseSR_Full );
781804 ethtool_link_ksettings_add_link_mode (ks , advertising ,
@@ -892,9 +915,6 @@ static void i40e_get_settings_link_up(struct i40e_hw *hw,
892915 40000b aseKR4_Full );
893916 ethtool_link_ksettings_add_link_mode (ks , supported ,
894917 25000b aseKR_Full );
895- ethtool_link_ksettings_add_link_mode (ks , supported , FEC_NONE );
896- ethtool_link_ksettings_add_link_mode (ks , supported , FEC_RS );
897- ethtool_link_ksettings_add_link_mode (ks , supported , FEC_BASER );
898918 ethtool_link_ksettings_add_link_mode (ks , supported ,
899919 20000b aseKR2_Full );
900920 ethtool_link_ksettings_add_link_mode (ks , supported ,
@@ -908,10 +928,7 @@ static void i40e_get_settings_link_up(struct i40e_hw *hw,
908928 40000b aseKR4_Full );
909929 ethtool_link_ksettings_add_link_mode (ks , advertising ,
910930 25000b aseKR_Full );
911- ethtool_link_ksettings_add_link_mode (ks , advertising , FEC_NONE );
912- ethtool_link_ksettings_add_link_mode (ks , advertising , FEC_RS );
913- ethtool_link_ksettings_add_link_mode (ks , advertising ,
914- FEC_BASER );
931+ i40e_get_settings_link_up_fec (hw_link_info -> req_fec_info , ks );
915932 ethtool_link_ksettings_add_link_mode (ks , advertising ,
916933 20000b aseKR2_Full );
917934 ethtool_link_ksettings_add_link_mode (ks , advertising ,
@@ -929,13 +946,8 @@ static void i40e_get_settings_link_up(struct i40e_hw *hw,
929946 25000b aseCR_Full );
930947 ethtool_link_ksettings_add_link_mode (ks , advertising ,
931948 25000b aseCR_Full );
932- ethtool_link_ksettings_add_link_mode (ks , supported , FEC_NONE );
933- ethtool_link_ksettings_add_link_mode (ks , supported , FEC_RS );
934- ethtool_link_ksettings_add_link_mode (ks , supported , FEC_BASER );
935- ethtool_link_ksettings_add_link_mode (ks , advertising , FEC_NONE );
936- ethtool_link_ksettings_add_link_mode (ks , advertising , FEC_RS );
937- ethtool_link_ksettings_add_link_mode (ks , advertising ,
938- FEC_BASER );
949+ i40e_get_settings_link_up_fec (hw_link_info -> req_fec_info , ks );
950+
939951 break ;
940952 case I40E_PHY_TYPE_25GBASE_AOC :
941953 case I40E_PHY_TYPE_25GBASE_ACC :
@@ -945,13 +957,8 @@ static void i40e_get_settings_link_up(struct i40e_hw *hw,
945957 25000b aseCR_Full );
946958 ethtool_link_ksettings_add_link_mode (ks , advertising ,
947959 25000b aseCR_Full );
948- ethtool_link_ksettings_add_link_mode (ks , supported , FEC_NONE );
949- ethtool_link_ksettings_add_link_mode (ks , supported , FEC_RS );
950- ethtool_link_ksettings_add_link_mode (ks , supported , FEC_BASER );
951- ethtool_link_ksettings_add_link_mode (ks , advertising , FEC_NONE );
952- ethtool_link_ksettings_add_link_mode (ks , advertising , FEC_RS );
953- ethtool_link_ksettings_add_link_mode (ks , advertising ,
954- FEC_BASER );
960+ i40e_get_settings_link_up_fec (hw_link_info -> req_fec_info , ks );
961+
955962 ethtool_link_ksettings_add_link_mode (ks , supported ,
956963 10000b aseCR_Full );
957964 ethtool_link_ksettings_add_link_mode (ks , advertising ,
0 commit comments