@@ -73,62 +73,80 @@ static const struct pch_gbe_stats pch_gbe_gstrings_stats[] = {
73
73
#define PCH_GBE_MAC_REGS_LEN (sizeof(struct pch_gbe_regs) / 4)
74
74
#define PCH_GBE_REGS_LEN (PCH_GBE_MAC_REGS_LEN + PCH_GBE_PHY_REGS_LEN)
75
75
/**
76
- * pch_gbe_get_settings - Get device-specific settings
76
+ * pch_gbe_get_link_ksettings - Get device-specific settings
77
77
* @netdev: Network interface device structure
78
78
* @ecmd: Ethtool command
79
79
* Returns:
80
80
* 0: Successful.
81
81
* Negative value: Failed.
82
82
*/
83
- static int pch_gbe_get_settings (struct net_device * netdev ,
84
- struct ethtool_cmd * ecmd )
83
+ static int pch_gbe_get_link_ksettings (struct net_device * netdev ,
84
+ struct ethtool_link_ksettings * ecmd )
85
85
{
86
86
struct pch_gbe_adapter * adapter = netdev_priv (netdev );
87
+ u32 supported , advertising ;
87
88
int ret ;
88
89
89
- ret = mii_ethtool_gset (& adapter -> mii , ecmd );
90
- ecmd -> supported &= ~(SUPPORTED_TP | SUPPORTED_1000baseT_Half );
91
- ecmd -> advertising &= ~(ADVERTISED_TP | ADVERTISED_1000baseT_Half );
90
+ ret = mii_ethtool_get_link_ksettings (& adapter -> mii , ecmd );
91
+
92
+ ethtool_convert_link_mode_to_legacy_u32 (& supported ,
93
+ ecmd -> link_modes .supported );
94
+ ethtool_convert_link_mode_to_legacy_u32 (& advertising ,
95
+ ecmd -> link_modes .advertising );
96
+
97
+ supported &= ~(SUPPORTED_TP | SUPPORTED_1000baseT_Half );
98
+ advertising &= ~(ADVERTISED_TP | ADVERTISED_1000baseT_Half );
99
+
100
+ ethtool_convert_legacy_u32_to_link_mode (ecmd -> link_modes .supported ,
101
+ supported );
102
+ ethtool_convert_legacy_u32_to_link_mode (ecmd -> link_modes .advertising ,
103
+ advertising );
92
104
93
105
if (!netif_carrier_ok (adapter -> netdev ))
94
- ethtool_cmd_speed_set ( ecmd , SPEED_UNKNOWN ) ;
106
+ ecmd -> base . speed = SPEED_UNKNOWN ;
95
107
return ret ;
96
108
}
97
109
98
110
/**
99
- * pch_gbe_set_settings - Set device-specific settings
111
+ * pch_gbe_set_link_ksettings - Set device-specific settings
100
112
* @netdev: Network interface device structure
101
113
* @ecmd: Ethtool command
102
114
* Returns:
103
115
* 0: Successful.
104
116
* Negative value: Failed.
105
117
*/
106
- static int pch_gbe_set_settings (struct net_device * netdev ,
107
- struct ethtool_cmd * ecmd )
118
+ static int pch_gbe_set_link_ksettings (struct net_device * netdev ,
119
+ const struct ethtool_link_ksettings * ecmd )
108
120
{
109
121
struct pch_gbe_adapter * adapter = netdev_priv (netdev );
110
122
struct pch_gbe_hw * hw = & adapter -> hw ;
111
- u32 speed = ethtool_cmd_speed (ecmd );
123
+ struct ethtool_link_ksettings copy_ecmd ;
124
+ u32 speed = ecmd -> base .speed ;
125
+ u32 advertising ;
112
126
int ret ;
113
127
114
128
pch_gbe_hal_write_phy_reg (hw , MII_BMCR , BMCR_RESET );
115
129
130
+ memcpy (& copy_ecmd , ecmd , sizeof (* ecmd ));
131
+
116
132
/* when set_settings() is called with a ethtool_cmd previously
117
133
* filled by get_settings() on a down link, speed is -1: */
118
134
if (speed == UINT_MAX ) {
119
135
speed = SPEED_1000 ;
120
- ethtool_cmd_speed_set ( ecmd , speed ) ;
121
- ecmd -> duplex = DUPLEX_FULL ;
136
+ copy_ecmd . base . speed = speed ;
137
+ copy_ecmd . base . duplex = DUPLEX_FULL ;
122
138
}
123
- ret = mii_ethtool_sset (& adapter -> mii , ecmd );
139
+ ret = mii_ethtool_set_link_ksettings (& adapter -> mii , & copy_ecmd );
124
140
if (ret ) {
125
- netdev_err (netdev , "Error: mii_ethtool_sset \n" );
141
+ netdev_err (netdev , "Error: mii_ethtool_set_link_ksettings \n" );
126
142
return ret ;
127
143
}
128
144
hw -> mac .link_speed = speed ;
129
- hw -> mac .link_duplex = ecmd -> duplex ;
130
- hw -> phy .autoneg_advertised = ecmd -> advertising ;
131
- hw -> mac .autoneg = ecmd -> autoneg ;
145
+ hw -> mac .link_duplex = copy_ecmd .base .duplex ;
146
+ ethtool_convert_link_mode_to_legacy_u32 (
147
+ & advertising , copy_ecmd .link_modes .advertising );
148
+ hw -> phy .autoneg_advertised = advertising ;
149
+ hw -> mac .autoneg = copy_ecmd .base .autoneg ;
132
150
133
151
/* reset the link */
134
152
if (netif_running (adapter -> netdev )) {
@@ -487,8 +505,6 @@ static int pch_gbe_get_sset_count(struct net_device *netdev, int sset)
487
505
}
488
506
489
507
static const struct ethtool_ops pch_gbe_ethtool_ops = {
490
- .get_settings = pch_gbe_get_settings ,
491
- .set_settings = pch_gbe_set_settings ,
492
508
.get_drvinfo = pch_gbe_get_drvinfo ,
493
509
.get_regs_len = pch_gbe_get_regs_len ,
494
510
.get_regs = pch_gbe_get_regs ,
@@ -503,6 +519,8 @@ static const struct ethtool_ops pch_gbe_ethtool_ops = {
503
519
.get_strings = pch_gbe_get_strings ,
504
520
.get_ethtool_stats = pch_gbe_get_ethtool_stats ,
505
521
.get_sset_count = pch_gbe_get_sset_count ,
522
+ .get_link_ksettings = pch_gbe_get_link_ksettings ,
523
+ .set_link_ksettings = pch_gbe_set_link_ksettings ,
506
524
};
507
525
508
526
void pch_gbe_set_ethtool_ops (struct net_device * netdev )
0 commit comments