smsc95xx: support ethtool get_regs
Inspired by implementation in smsc911x.c and smsc9420.c Tested on ARM/pandaboard running android Signed-off-by: Emeric Vigier <emeric.vigier@savoirfairelinux.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
36efc94b1d
commit
9fa32e94dc
|
@ -578,6 +578,35 @@ static int smsc95xx_ethtool_set_eeprom(struct net_device *netdev,
|
||||||
return smsc95xx_write_eeprom(dev, ee->offset, ee->len, data);
|
return smsc95xx_write_eeprom(dev, ee->offset, ee->len, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int smsc95xx_ethtool_getregslen(struct net_device *netdev)
|
||||||
|
{
|
||||||
|
/* all smsc95xx registers */
|
||||||
|
return COE_CR - ID_REV + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
smsc95xx_ethtool_getregs(struct net_device *netdev, struct ethtool_regs *regs,
|
||||||
|
void *buf)
|
||||||
|
{
|
||||||
|
struct usbnet *dev = netdev_priv(netdev);
|
||||||
|
unsigned int i, j, retval;
|
||||||
|
u32 *data = buf;
|
||||||
|
|
||||||
|
retval = smsc95xx_read_reg(dev, ID_REV, ®s->version);
|
||||||
|
if (retval < 0) {
|
||||||
|
netdev_warn(netdev, "REGS: cannot read ID_REV\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = ID_REV, j = 0; i <= COE_CR; i += (sizeof(u32)), j++) {
|
||||||
|
retval = smsc95xx_read_reg(dev, i, &data[j]);
|
||||||
|
if (retval < 0) {
|
||||||
|
netdev_warn(netdev, "REGS: cannot read reg[%x]\n", i);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static const struct ethtool_ops smsc95xx_ethtool_ops = {
|
static const struct ethtool_ops smsc95xx_ethtool_ops = {
|
||||||
.get_link = usbnet_get_link,
|
.get_link = usbnet_get_link,
|
||||||
.nway_reset = usbnet_nway_reset,
|
.nway_reset = usbnet_nway_reset,
|
||||||
|
@ -589,6 +618,8 @@ static const struct ethtool_ops smsc95xx_ethtool_ops = {
|
||||||
.get_eeprom_len = smsc95xx_ethtool_get_eeprom_len,
|
.get_eeprom_len = smsc95xx_ethtool_get_eeprom_len,
|
||||||
.get_eeprom = smsc95xx_ethtool_get_eeprom,
|
.get_eeprom = smsc95xx_ethtool_get_eeprom,
|
||||||
.set_eeprom = smsc95xx_ethtool_set_eeprom,
|
.set_eeprom = smsc95xx_ethtool_set_eeprom,
|
||||||
|
.get_regs_len = smsc95xx_ethtool_getregslen,
|
||||||
|
.get_regs = smsc95xx_ethtool_getregs,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int smsc95xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
|
static int smsc95xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
|
||||||
|
|
Reference in New Issue