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);
|
||||
}
|
||||
|
||||
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 = {
|
||||
.get_link = usbnet_get_link,
|
||||
.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 = smsc95xx_ethtool_get_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)
|
||||
|
Loading…
Reference in New Issue
Block a user