@@ -2873,7 +2873,13 @@ static void igb_get_dmac(struct net_device *netdev,
2873
2873
#endif
2874
2874
2875
2875
#ifdef ETHTOOL_GEEE
2876
- static int igb_get_eee (struct net_device * netdev , struct ethtool_eee * edata )
2876
+ static int igb_get_eee (struct net_device * netdev ,
2877
+ #ifdef HAVE_ETHTOOL_KEEE
2878
+ struct ethtool_keee * edata
2879
+ #else
2880
+ struct ethtool_eee * edata
2881
+ #endif
2882
+ )
2877
2883
{
2878
2884
struct igb_adapter * adapter = netdev_priv (netdev );
2879
2885
struct e1000_hw * hw = & adapter -> hw ;
@@ -2884,12 +2890,22 @@ static int igb_get_eee(struct net_device *netdev, struct ethtool_eee *edata)
2884
2890
(hw -> phy .media_type != e1000_media_type_copper ))
2885
2891
return - EOPNOTSUPP ;
2886
2892
2893
+ #ifdef HAVE_ETHTOOL_KEEE
2894
+ linkmode_set_bit (ETHTOOL_LINK_MODE_1000baseT_Full_BIT , edata -> supported );
2895
+ linkmode_set_bit (ETHTOOL_LINK_MODE_100baseT_Full_BIT , edata -> supported );
2896
+ #else
2887
2897
edata -> supported = (SUPPORTED_1000baseT_Full |
2888
2898
SUPPORTED_100baseT_Full );
2899
+ #endif
2889
2900
2890
2901
if (!hw -> dev_spec ._82575 .eee_disable )
2902
+ #ifdef HAVE_ETHTOOL_KEEE
2903
+ mii_eee_cap1_mod_linkmode_t (edata -> advertised ,
2904
+ adapter -> eee_advert );
2905
+ #else
2891
2906
edata -> advertised =
2892
2907
mmd_eee_adv_to_ethtool_adv_t (adapter -> eee_advert );
2908
+ #endif
2893
2909
2894
2910
/* The IPCNFG and EEER registers are not supported on I354. */
2895
2911
if (hw -> mac .type == e1000_i354 ) {
@@ -2915,7 +2931,11 @@ static int igb_get_eee(struct net_device *netdev, struct ethtool_eee *edata)
2915
2931
if (ret_val )
2916
2932
return - ENODATA ;
2917
2933
2934
+ #ifdef HAVE_ETHTOOL_KEEE
2935
+ mii_eee_cap1_mod_linkmode_t (edata -> lp_advertised , phy_data );
2936
+ #else
2918
2937
edata -> lp_advertised = mmd_eee_adv_to_ethtool_adv_t (phy_data );
2938
+ #endif
2919
2939
2920
2940
break ;
2921
2941
case e1000_i354 :
@@ -2927,7 +2947,11 @@ static int igb_get_eee(struct net_device *netdev, struct ethtool_eee *edata)
2927
2947
if (ret_val )
2928
2948
return - ENODATA ;
2929
2949
2950
+ #ifdef HAVE_ETHTOOL_KEEE
2951
+ mii_eee_cap1_mod_linkmode_t (edata -> lp_advertised , phy_data );
2952
+ #else
2930
2953
edata -> lp_advertised = mmd_eee_adv_to_ethtool_adv_t (phy_data );
2954
+ #endif
2931
2955
2932
2956
break ;
2933
2957
default :
@@ -2948,7 +2972,11 @@ static int igb_get_eee(struct net_device *netdev, struct ethtool_eee *edata)
2948
2972
edata -> eee_enabled = false;
2949
2973
edata -> eee_active = false;
2950
2974
edata -> tx_lpi_enabled = false;
2975
+ #ifdef HAVE_ETHTOOL_KEEE
2976
+ linkmode_zero (edata -> advertised );
2977
+ #else
2951
2978
edata -> advertised &= ~edata -> advertised ;
2979
+ #endif
2952
2980
}
2953
2981
2954
2982
return 0 ;
@@ -2957,11 +2985,22 @@ static int igb_get_eee(struct net_device *netdev, struct ethtool_eee *edata)
2957
2985
2958
2986
#ifdef ETHTOOL_SEEE
2959
2987
static int igb_set_eee (struct net_device * netdev ,
2960
- struct ethtool_eee * edata )
2988
+ #ifdef HAVE_ETHTOOL_KEEE
2989
+ struct ethtool_keee * edata
2990
+ #else
2991
+ struct ethtool_eee * edata
2992
+ #endif
2993
+ )
2961
2994
{
2962
2995
struct igb_adapter * adapter = netdev_priv (netdev );
2963
2996
struct e1000_hw * hw = & adapter -> hw ;
2997
+ #ifdef HAVE_ETHTOOL_KEEE
2998
+ __ETHTOOL_DECLARE_LINK_MODE_MASK (supported ) = {};
2999
+ __ETHTOOL_DECLARE_LINK_MODE_MASK (tmp ) = {};
3000
+ struct ethtool_keee eee_curr ;
3001
+ #else
2964
3002
struct ethtool_eee eee_curr ;
3003
+ #endif
2965
3004
bool adv1g_eee = true, adv100m_eee = true;
2966
3005
s32 ret_val ;
2967
3006
@@ -2987,22 +3026,44 @@ static int igb_set_eee(struct net_device *netdev,
2987
3026
return - EINVAL ;
2988
3027
}
2989
3028
3029
+ #ifdef HAVE_ETHTOOL_KEEE
3030
+ linkmode_set_bit (ETHTOOL_LINK_MODE_1000baseT_Full_BIT ,
3031
+ supported );
3032
+ linkmode_set_bit (ETHTOOL_LINK_MODE_100baseT_Full_BIT ,
3033
+ supported );
3034
+ if (linkmode_andnot (tmp , edata -> advertised , supported )) {
3035
+ #else
2990
3036
if (!edata -> advertised || (edata -> advertised &
2991
3037
~(ADVERTISE_100_FULL | ADVERTISE_1000_FULL ))) {
3038
+ #endif
2992
3039
dev_err (pci_dev_to_dev (adapter -> pdev ),
2993
3040
"EEE Advertisement supports 100Base-Tx Full Duplex(0x08) 1000Base-T Full Duplex(0x20) or both(0x28)\n" );
2994
3041
return - EINVAL ;
2995
3042
}
3043
+
3044
+ #ifdef HAVE_ETHTOOL_KEEE
3045
+ adv100m_eee = linkmode_test_bit (
3046
+ ETHTOOL_LINK_MODE_100baseT_Full_BIT ,
3047
+ edata -> advertised );
3048
+ adv1g_eee = linkmode_test_bit (
3049
+ ETHTOOL_LINK_MODE_1000baseT_Full_BIT ,
3050
+ edata -> advertised );
3051
+ #else
2996
3052
adv100m_eee = !!(edata -> advertised & ADVERTISE_100_FULL );
2997
3053
adv1g_eee = !!(edata -> advertised & ADVERTISE_1000_FULL );
3054
+ #endif
2998
3055
2999
3056
} else if (!edata -> eee_enabled ) {
3000
3057
dev_err (pci_dev_to_dev (adapter -> pdev ),
3001
3058
"Setting EEE options is not supported with EEE disabled\n" );
3002
3059
return - EINVAL ;
3003
3060
}
3004
3061
3062
+ #ifdef HAVE_ETHTOOL_KEEE
3063
+ adapter -> eee_advert = linkmode_to_mii_eee_cap1_t (edata -> advertised );
3064
+ #else
3005
3065
adapter -> eee_advert = ethtool_adv_to_mmd_eee_adv_t (edata -> advertised );
3066
+ #endif
3006
3067
3007
3068
if (hw -> dev_spec ._82575 .eee_disable != !edata -> eee_enabled ) {
3008
3069
hw -> dev_spec ._82575 .eee_disable = !edata -> eee_enabled ;
0 commit comments