X-Git-Url: http://pilppa.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=drivers%2Fnet%2Fsk98lin%2Fskethtool.c;h=36460694eb82adae53581558b6e679f275eed5d3;hb=5c15bdec5c38f4ccf73ef2585fc80a6164de9554;hp=4265ed91a9c4800eee83f7ed2f53ae2a63f1459f;hpb=b8c475be7bf9b79e6417c08d7a921b2e8cb04258;p=linux-2.6-omap-h63xx.git diff --git a/drivers/net/sk98lin/skethtool.c b/drivers/net/sk98lin/skethtool.c index 4265ed91a9c..36460694eb8 100644 --- a/drivers/net/sk98lin/skethtool.c +++ b/drivers/net/sk98lin/skethtool.c @@ -581,7 +581,31 @@ static int setRxCsum(struct net_device *dev, u32 data) return 0; } -struct ethtool_ops SkGeEthtoolOps = { +static int getRegsLen(struct net_device *dev) +{ + return 0x4000; +} + +/* + * Returns copy of whole control register region + * Note: skip RAM address register because accessing it will + * cause bus hangs! + */ +static void getRegs(struct net_device *dev, struct ethtool_regs *regs, + void *p) +{ + DEV_NET *pNet = netdev_priv(dev); + const void __iomem *io = pNet->pAC->IoBase; + + regs->version = 1; + memset(p, 0, regs->len); + memcpy_fromio(p, io, B3_RAM_ADDR); + + memcpy_fromio(p + B3_RI_WTO_R1, io + B3_RI_WTO_R1, + regs->len - B3_RI_WTO_R1); +} + +const struct ethtool_ops SkGeEthtoolOps = { .get_settings = getSettings, .set_settings = setSettings, .get_drvinfo = getDriverInfo, @@ -599,4 +623,6 @@ struct ethtool_ops SkGeEthtoolOps = { .set_tx_csum = setTxCsum, .get_rx_csum = getRxCsum, .set_rx_csum = setRxCsum, + .get_regs = getRegs, + .get_regs_len = getRegsLen, };