Commit 0b9be50b authored by Kulikov Vasiliy's avatar Kulikov Vasiliy Committed by David S. Miller

hamachi: Use the instance of net_device_stats from net_device.

Since net_device has an instance of net_device_stats,
we can remove the instance of this from the adapter structure.
Signed-off-by: default avatarKulikov Vasiliy <segooon@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 661a16ce
...@@ -492,7 +492,6 @@ struct hamachi_private { ...@@ -492,7 +492,6 @@ struct hamachi_private {
struct sk_buff* tx_skbuff[TX_RING_SIZE]; struct sk_buff* tx_skbuff[TX_RING_SIZE];
dma_addr_t tx_ring_dma; dma_addr_t tx_ring_dma;
dma_addr_t rx_ring_dma; dma_addr_t rx_ring_dma;
struct net_device_stats stats;
struct timer_list timer; /* Media selection timer. */ struct timer_list timer; /* Media selection timer. */
/* Frequently used and paired value: keep adjacent for cache effect. */ /* Frequently used and paired value: keep adjacent for cache effect. */
spinlock_t lock; spinlock_t lock;
...@@ -1036,7 +1035,7 @@ static inline int hamachi_tx(struct net_device *dev) ...@@ -1036,7 +1035,7 @@ static inline int hamachi_tx(struct net_device *dev)
if (entry >= TX_RING_SIZE-1) if (entry >= TX_RING_SIZE-1)
hmp->tx_ring[TX_RING_SIZE-1].status_n_length |= hmp->tx_ring[TX_RING_SIZE-1].status_n_length |=
cpu_to_le32(DescEndRing); cpu_to_le32(DescEndRing);
hmp->stats.tx_packets++; dev->stats.tx_packets++;
} }
return 0; return 0;
...@@ -1167,7 +1166,7 @@ static void hamachi_tx_timeout(struct net_device *dev) ...@@ -1167,7 +1166,7 @@ static void hamachi_tx_timeout(struct net_device *dev)
/* Trigger an immediate transmit demand. */ /* Trigger an immediate transmit demand. */
dev->trans_start = jiffies; /* prevent tx timeout */ dev->trans_start = jiffies; /* prevent tx timeout */
hmp->stats.tx_errors++; dev->stats.tx_errors++;
/* Restart the chip's Tx/Rx processes . */ /* Restart the chip's Tx/Rx processes . */
writew(0x0002, ioaddr + TxCmd); /* STOP Tx */ writew(0x0002, ioaddr + TxCmd); /* STOP Tx */
...@@ -1434,7 +1433,7 @@ static irqreturn_t hamachi_interrupt(int irq, void *dev_instance) ...@@ -1434,7 +1433,7 @@ static irqreturn_t hamachi_interrupt(int irq, void *dev_instance)
if (entry >= TX_RING_SIZE-1) if (entry >= TX_RING_SIZE-1)
hmp->tx_ring[TX_RING_SIZE-1].status_n_length |= hmp->tx_ring[TX_RING_SIZE-1].status_n_length |=
cpu_to_le32(DescEndRing); cpu_to_le32(DescEndRing);
hmp->stats.tx_packets++; dev->stats.tx_packets++;
} }
if (hmp->cur_tx - hmp->dirty_tx < TX_RING_SIZE - 4){ if (hmp->cur_tx - hmp->dirty_tx < TX_RING_SIZE - 4){
/* The ring is no longer full */ /* The ring is no longer full */
...@@ -1525,18 +1524,22 @@ static int hamachi_rx(struct net_device *dev) ...@@ -1525,18 +1524,22 @@ static int hamachi_rx(struct net_device *dev)
le32_to_cpu(hmp->rx_ring[(hmp->cur_rx+1) % RX_RING_SIZE].status_n_length) & 0xffff0000, le32_to_cpu(hmp->rx_ring[(hmp->cur_rx+1) % RX_RING_SIZE].status_n_length) & 0xffff0000,
le32_to_cpu(hmp->rx_ring[(hmp->cur_rx+1) % RX_RING_SIZE].status_n_length) & 0x0000ffff, le32_to_cpu(hmp->rx_ring[(hmp->cur_rx+1) % RX_RING_SIZE].status_n_length) & 0x0000ffff,
le32_to_cpu(hmp->rx_ring[(hmp->cur_rx-1) % RX_RING_SIZE].status_n_length)); le32_to_cpu(hmp->rx_ring[(hmp->cur_rx-1) % RX_RING_SIZE].status_n_length));
hmp->stats.rx_length_errors++; dev->stats.rx_length_errors++;
} /* else Omit for prototype errata??? */ } /* else Omit for prototype errata??? */
if (frame_status & 0x00380000) { if (frame_status & 0x00380000) {
/* There was an error. */ /* There was an error. */
if (hamachi_debug > 2) if (hamachi_debug > 2)
printk(KERN_DEBUG " hamachi_rx() Rx error was %8.8x.\n", printk(KERN_DEBUG " hamachi_rx() Rx error was %8.8x.\n",
frame_status); frame_status);
hmp->stats.rx_errors++; dev->stats.rx_errors++;
if (frame_status & 0x00600000) hmp->stats.rx_length_errors++; if (frame_status & 0x00600000)
if (frame_status & 0x00080000) hmp->stats.rx_frame_errors++; dev->stats.rx_length_errors++;
if (frame_status & 0x00100000) hmp->stats.rx_crc_errors++; if (frame_status & 0x00080000)
if (frame_status < 0) hmp->stats.rx_dropped++; dev->stats.rx_frame_errors++;
if (frame_status & 0x00100000)
dev->stats.rx_crc_errors++;
if (frame_status < 0)
dev->stats.rx_dropped++;
} else { } else {
struct sk_buff *skb; struct sk_buff *skb;
/* Omit CRC */ /* Omit CRC */
...@@ -1654,7 +1657,7 @@ static int hamachi_rx(struct net_device *dev) ...@@ -1654,7 +1657,7 @@ static int hamachi_rx(struct net_device *dev)
#endif /* RX_CHECKSUM */ #endif /* RX_CHECKSUM */
netif_rx(skb); netif_rx(skb);
hmp->stats.rx_packets++; dev->stats.rx_packets++;
} }
entry = (++hmp->cur_rx) % RX_RING_SIZE; entry = (++hmp->cur_rx) % RX_RING_SIZE;
} }
...@@ -1724,9 +1727,9 @@ static void hamachi_error(struct net_device *dev, int intr_status) ...@@ -1724,9 +1727,9 @@ static void hamachi_error(struct net_device *dev, int intr_status)
dev->name, intr_status); dev->name, intr_status);
/* Hmmmmm, it's not clear how to recover from PCI faults. */ /* Hmmmmm, it's not clear how to recover from PCI faults. */
if (intr_status & (IntrTxPCIErr | IntrTxPCIFault)) if (intr_status & (IntrTxPCIErr | IntrTxPCIFault))
hmp->stats.tx_fifo_errors++; dev->stats.tx_fifo_errors++;
if (intr_status & (IntrRxPCIErr | IntrRxPCIFault)) if (intr_status & (IntrRxPCIErr | IntrRxPCIFault))
hmp->stats.rx_fifo_errors++; dev->stats.rx_fifo_errors++;
} }
static int hamachi_close(struct net_device *dev) static int hamachi_close(struct net_device *dev)
...@@ -1828,19 +1831,27 @@ static struct net_device_stats *hamachi_get_stats(struct net_device *dev) ...@@ -1828,19 +1831,27 @@ static struct net_device_stats *hamachi_get_stats(struct net_device *dev)
so I think I'll comment it out here and see if better things so I think I'll comment it out here and see if better things
happen. happen.
*/ */
/* hmp->stats.tx_packets = readl(ioaddr + 0x000); */ /* dev->stats.tx_packets = readl(ioaddr + 0x000); */
hmp->stats.rx_bytes = readl(ioaddr + 0x330); /* Total Uni+Brd+Multi */ /* Total Uni+Brd+Multi */
hmp->stats.tx_bytes = readl(ioaddr + 0x3B0); /* Total Uni+Brd+Multi */ dev->stats.rx_bytes = readl(ioaddr + 0x330);
hmp->stats.multicast = readl(ioaddr + 0x320); /* Multicast Rx */ /* Total Uni+Brd+Multi */
dev->stats.tx_bytes = readl(ioaddr + 0x3B0);
hmp->stats.rx_length_errors = readl(ioaddr + 0x368); /* Over+Undersized */ /* Multicast Rx */
hmp->stats.rx_over_errors = readl(ioaddr + 0x35C); /* Jabber */ dev->stats.multicast = readl(ioaddr + 0x320);
hmp->stats.rx_crc_errors = readl(ioaddr + 0x360); /* Jabber */
hmp->stats.rx_frame_errors = readl(ioaddr + 0x364); /* Symbol Errs */ /* Over+Undersized */
hmp->stats.rx_missed_errors = readl(ioaddr + 0x36C); /* Dropped */ dev->stats.rx_length_errors = readl(ioaddr + 0x368);
/* Jabber */
return &hmp->stats; dev->stats.rx_over_errors = readl(ioaddr + 0x35C);
/* Jabber */
dev->stats.rx_crc_errors = readl(ioaddr + 0x360);
/* Symbol Errs */
dev->stats.rx_frame_errors = readl(ioaddr + 0x364);
/* Dropped */
dev->stats.rx_missed_errors = readl(ioaddr + 0x36C);
return &dev->stats;
} }
static void set_rx_mode(struct net_device *dev) static void set_rx_mode(struct net_device *dev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment