@@ -155,8 +155,8 @@ static int lan743x_otp_write(struct lan743x_adapter *adapter, u32 offset,
155
155
return 0 ;
156
156
}
157
157
158
- static int lan743x_hs_syslock_acquire (struct lan743x_adapter * adapter ,
159
- u16 timeout )
158
+ int lan743x_hs_syslock_acquire (struct lan743x_adapter * adapter ,
159
+ u16 timeout )
160
160
{
161
161
u16 timeout_cnt = 0 ;
162
162
u32 val ;
@@ -192,7 +192,7 @@ static int lan743x_hs_syslock_acquire(struct lan743x_adapter *adapter,
192
192
return 0 ;
193
193
}
194
194
195
- static void lan743x_hs_syslock_release (struct lan743x_adapter * adapter )
195
+ void lan743x_hs_syslock_release (struct lan743x_adapter * adapter )
196
196
{
197
197
u32 val ;
198
198
@@ -1149,7 +1149,12 @@ static void lan743x_ethtool_get_wol(struct net_device *netdev,
1149
1149
wol -> supported |= WAKE_BCAST | WAKE_UCAST | WAKE_MCAST |
1150
1150
WAKE_MAGIC | WAKE_PHY | WAKE_ARP ;
1151
1151
1152
+ if (adapter -> is_pci11x1x )
1153
+ wol -> supported |= WAKE_MAGICSECURE ;
1154
+
1152
1155
wol -> wolopts |= adapter -> wolopts ;
1156
+ if (adapter -> wolopts & WAKE_MAGICSECURE )
1157
+ memcpy (wol -> sopass , adapter -> sopass , sizeof (wol -> sopass ));
1153
1158
}
1154
1159
1155
1160
static int lan743x_ethtool_set_wol (struct net_device * netdev ,
@@ -1170,6 +1175,13 @@ static int lan743x_ethtool_set_wol(struct net_device *netdev,
1170
1175
adapter -> wolopts |= WAKE_PHY ;
1171
1176
if (wol -> wolopts & WAKE_ARP )
1172
1177
adapter -> wolopts |= WAKE_ARP ;
1178
+ if (wol -> wolopts & WAKE_MAGICSECURE &&
1179
+ wol -> wolopts & WAKE_MAGIC ) {
1180
+ memcpy (adapter -> sopass , wol -> sopass , sizeof (wol -> sopass ));
1181
+ adapter -> wolopts |= WAKE_MAGICSECURE ;
1182
+ } else {
1183
+ memset (adapter -> sopass , 0 , sizeof (u8 ) * SOPASS_MAX );
1184
+ }
1173
1185
1174
1186
device_set_wakeup_enable (& adapter -> pdev -> dev , (bool )wol -> wolopts );
1175
1187
@@ -1178,6 +1190,49 @@ static int lan743x_ethtool_set_wol(struct net_device *netdev,
1178
1190
}
1179
1191
#endif /* CONFIG_PM */
1180
1192
1193
+ static void lan743x_common_regs (struct net_device * dev ,
1194
+ struct ethtool_regs * regs , void * p )
1195
+
1196
+ {
1197
+ struct lan743x_adapter * adapter = netdev_priv (dev );
1198
+ u32 * rb = p ;
1199
+
1200
+ memset (p , 0 , (MAX_LAN743X_ETH_REGS * sizeof (u32 )));
1201
+
1202
+ rb [ETH_PRIV_FLAGS ] = adapter -> flags ;
1203
+ rb [ETH_ID_REV ] = lan743x_csr_read (adapter , ID_REV );
1204
+ rb [ETH_FPGA_REV ] = lan743x_csr_read (adapter , FPGA_REV );
1205
+ rb [ETH_STRAP_READ ] = lan743x_csr_read (adapter , STRAP_READ );
1206
+ rb [ETH_INT_STS ] = lan743x_csr_read (adapter , INT_STS );
1207
+ rb [ETH_HW_CFG ] = lan743x_csr_read (adapter , HW_CFG );
1208
+ rb [ETH_PMT_CTL ] = lan743x_csr_read (adapter , PMT_CTL );
1209
+ rb [ETH_E2P_CMD ] = lan743x_csr_read (adapter , E2P_CMD );
1210
+ rb [ETH_E2P_DATA ] = lan743x_csr_read (adapter , E2P_DATA );
1211
+ rb [ETH_MAC_CR ] = lan743x_csr_read (adapter , MAC_CR );
1212
+ rb [ETH_MAC_RX ] = lan743x_csr_read (adapter , MAC_RX );
1213
+ rb [ETH_MAC_TX ] = lan743x_csr_read (adapter , MAC_TX );
1214
+ rb [ETH_FLOW ] = lan743x_csr_read (adapter , MAC_FLOW );
1215
+ rb [ETH_MII_ACC ] = lan743x_csr_read (adapter , MAC_MII_ACC );
1216
+ rb [ETH_MII_DATA ] = lan743x_csr_read (adapter , MAC_MII_DATA );
1217
+ rb [ETH_EEE_TX_LPI_REQ_DLY ] = lan743x_csr_read (adapter ,
1218
+ MAC_EEE_TX_LPI_REQ_DLY_CNT );
1219
+ rb [ETH_WUCSR ] = lan743x_csr_read (adapter , MAC_WUCSR );
1220
+ rb [ETH_WK_SRC ] = lan743x_csr_read (adapter , MAC_WK_SRC );
1221
+ }
1222
+
1223
+ static int lan743x_get_regs_len (struct net_device * dev )
1224
+ {
1225
+ return MAX_LAN743X_ETH_REGS * sizeof (u32 );
1226
+ }
1227
+
1228
+ static void lan743x_get_regs (struct net_device * dev ,
1229
+ struct ethtool_regs * regs , void * p )
1230
+ {
1231
+ regs -> version = LAN743X_ETH_REG_VERSION ;
1232
+
1233
+ lan743x_common_regs (dev , regs , p );
1234
+ }
1235
+
1181
1236
const struct ethtool_ops lan743x_ethtool_ops = {
1182
1237
.get_drvinfo = lan743x_ethtool_get_drvinfo ,
1183
1238
.get_msglevel = lan743x_ethtool_get_msglevel ,
@@ -1202,6 +1257,8 @@ const struct ethtool_ops lan743x_ethtool_ops = {
1202
1257
.set_eee = lan743x_ethtool_set_eee ,
1203
1258
.get_link_ksettings = phy_ethtool_get_link_ksettings ,
1204
1259
.set_link_ksettings = phy_ethtool_set_link_ksettings ,
1260
+ .get_regs_len = lan743x_get_regs_len ,
1261
+ .get_regs = lan743x_get_regs ,
1205
1262
#ifdef CONFIG_PM
1206
1263
.get_wol = lan743x_ethtool_get_wol ,
1207
1264
.set_wol = lan743x_ethtool_set_wol ,
0 commit comments