diff options
Diffstat (limited to 'drivers/net/ns83820.c')
-rw-r--r-- | drivers/net/ns83820.c | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/drivers/net/ns83820.c b/drivers/net/ns83820.c index 8dd509c09bc..5a3488f76b3 100644 --- a/drivers/net/ns83820.c +++ b/drivers/net/ns83820.c @@ -116,6 +116,7 @@ #include <linux/if_vlan.h> #include <linux/rtnetlink.h> #include <linux/jiffies.h> +#include <linux/slab.h> #include <asm/io.h> #include <asm/uaccess.h> @@ -423,7 +424,6 @@ struct rx_info { struct ns83820 { - struct net_device_stats stats; u8 __iomem *base; struct pci_dev *pci_dev; @@ -917,9 +917,9 @@ static void rx_irq(struct net_device *ndev) if (unlikely(!skb)) goto netdev_mangle_me_harder_failed; if (cmdsts & CMDSTS_DEST_MULTI) - dev->stats.multicast ++; - dev->stats.rx_packets ++; - dev->stats.rx_bytes += len; + ndev->stats.multicast++; + ndev->stats.rx_packets++; + ndev->stats.rx_bytes += len; if ((extsts & 0x002a0000) && !(extsts & 0x00540000)) { skb->ip_summed = CHECKSUM_UNNECESSARY; } else { @@ -939,7 +939,7 @@ static void rx_irq(struct net_device *ndev) #endif if (NET_RX_DROP == rx_rc) { netdev_mangle_me_harder_failed: - dev->stats.rx_dropped ++; + ndev->stats.rx_dropped++; } } else { kfree_skb(skb); @@ -1007,11 +1007,11 @@ static void do_tx_done(struct net_device *ndev) dma_addr_t addr; if (cmdsts & CMDSTS_ERR) - dev->stats.tx_errors ++; + ndev->stats.tx_errors++; if (cmdsts & CMDSTS_OK) - dev->stats.tx_packets ++; + ndev->stats.tx_packets++; if (cmdsts & CMDSTS_OK) - dev->stats.tx_bytes += cmdsts & 0xffff; + ndev->stats.tx_bytes += cmdsts & 0xffff; dprintk("tx_done_idx=%d free_idx=%d cmdsts=%08x\n", tx_done_idx, dev->tx_free_idx, cmdsts); @@ -1211,20 +1211,21 @@ again: static void ns83820_update_stats(struct ns83820 *dev) { + struct net_device *ndev = dev->ndev; u8 __iomem *base = dev->base; /* the DP83820 will freeze counters, so we need to read all of them */ - dev->stats.rx_errors += readl(base + 0x60) & 0xffff; - dev->stats.rx_crc_errors += readl(base + 0x64) & 0xffff; - dev->stats.rx_missed_errors += readl(base + 0x68) & 0xffff; - dev->stats.rx_frame_errors += readl(base + 0x6c) & 0xffff; - /*dev->stats.rx_symbol_errors +=*/ readl(base + 0x70); - dev->stats.rx_length_errors += readl(base + 0x74) & 0xffff; - dev->stats.rx_length_errors += readl(base + 0x78) & 0xffff; - /*dev->stats.rx_badopcode_errors += */ readl(base + 0x7c); - /*dev->stats.rx_pause_count += */ readl(base + 0x80); - /*dev->stats.tx_pause_count += */ readl(base + 0x84); - dev->stats.tx_carrier_errors += readl(base + 0x88) & 0xff; + ndev->stats.rx_errors += readl(base + 0x60) & 0xffff; + ndev->stats.rx_crc_errors += readl(base + 0x64) & 0xffff; + ndev->stats.rx_missed_errors += readl(base + 0x68) & 0xffff; + ndev->stats.rx_frame_errors += readl(base + 0x6c) & 0xffff; + /*ndev->stats.rx_symbol_errors +=*/ readl(base + 0x70); + ndev->stats.rx_length_errors += readl(base + 0x74) & 0xffff; + ndev->stats.rx_length_errors += readl(base + 0x78) & 0xffff; + /*ndev->stats.rx_badopcode_errors += */ readl(base + 0x7c); + /*ndev->stats.rx_pause_count += */ readl(base + 0x80); + /*ndev->stats.tx_pause_count += */ readl(base + 0x84); + ndev->stats.tx_carrier_errors += readl(base + 0x88) & 0xff; } static struct net_device_stats *ns83820_get_stats(struct net_device *ndev) @@ -1236,7 +1237,7 @@ static struct net_device_stats *ns83820_get_stats(struct net_device *ndev) ns83820_update_stats(dev); spin_unlock_irq(&dev->misc_lock); - return &dev->stats; + return &ndev->stats; } /* Let ethtool retrieve info */ @@ -1463,12 +1464,12 @@ static void ns83820_do_isr(struct net_device *ndev, u32 isr) if (unlikely(ISR_RXSOVR & isr)) { //printk("overrun: rxsovr\n"); - dev->stats.rx_fifo_errors ++; + ndev->stats.rx_fifo_errors++; } if (unlikely(ISR_RXORN & isr)) { //printk("overrun: rxorn\n"); - dev->stats.rx_fifo_errors ++; + ndev->stats.rx_fifo_errors++; } if ((ISR_RXRCMP & isr) && dev->rx_info.up) |