提交 736bc924 编写于 作者: P Paulius Zaleckas 提交者: John W. Linville

atmel: use netstats in net_device structure

Use net_device_stats from net_device structure instead of local.
Kill atmel_get_stats function, because by default it is used
identical internal_stats function from net/core/dev.c
No need to memset stats to 0, because they are allocated by kzalloc.

P.S. Someone should cleanup init_atmel_card function from unneeded
initializations to 0/NULL. Out of scope for this patch.
Signed-off-by: NPaulius Zaleckas <paulius.zaleckas@teltonika.lt>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 06a5223d
...@@ -433,7 +433,6 @@ struct atmel_private { ...@@ -433,7 +433,6 @@ struct atmel_private {
struct net_device *dev; struct net_device *dev;
struct device *sys_dev; struct device *sys_dev;
struct iw_statistics wstats; struct iw_statistics wstats;
struct net_device_stats stats; // device stats
spinlock_t irqlock, timerlock; // spinlocks spinlock_t irqlock, timerlock; // spinlocks
enum { BUS_TYPE_PCCARD, BUS_TYPE_PCI } bus_type; enum { BUS_TYPE_PCCARD, BUS_TYPE_PCI } bus_type;
enum { enum {
...@@ -694,9 +693,9 @@ static void tx_done_irq(struct atmel_private *priv) ...@@ -694,9 +693,9 @@ static void tx_done_irq(struct atmel_private *priv)
if (type == TX_PACKET_TYPE_DATA) { if (type == TX_PACKET_TYPE_DATA) {
if (status == TX_STATUS_SUCCESS) if (status == TX_STATUS_SUCCESS)
priv->stats.tx_packets++; priv->dev->stats.tx_packets++;
else else
priv->stats.tx_errors++; priv->dev->stats.tx_errors++;
netif_wake_queue(priv->dev); netif_wake_queue(priv->dev);
} }
} }
...@@ -792,13 +791,13 @@ static int start_tx(struct sk_buff *skb, struct net_device *dev) ...@@ -792,13 +791,13 @@ static int start_tx(struct sk_buff *skb, struct net_device *dev)
if (priv->card && priv->present_callback && if (priv->card && priv->present_callback &&
!(*priv->present_callback)(priv->card)) { !(*priv->present_callback)(priv->card)) {
priv->stats.tx_errors++; dev->stats.tx_errors++;
dev_kfree_skb(skb); dev_kfree_skb(skb);
return 0; return 0;
} }
if (priv->station_state != STATION_STATE_READY) { if (priv->station_state != STATION_STATE_READY) {
priv->stats.tx_errors++; dev->stats.tx_errors++;
dev_kfree_skb(skb); dev_kfree_skb(skb);
return 0; return 0;
} }
...@@ -815,7 +814,7 @@ static int start_tx(struct sk_buff *skb, struct net_device *dev) ...@@ -815,7 +814,7 @@ static int start_tx(struct sk_buff *skb, struct net_device *dev)
initial + 18 (+30-12) */ initial + 18 (+30-12) */
if (!(buff = find_tx_buff(priv, len + 18))) { if (!(buff = find_tx_buff(priv, len + 18))) {
priv->stats.tx_dropped++; dev->stats.tx_dropped++;
spin_unlock_irqrestore(&priv->irqlock, flags); spin_unlock_irqrestore(&priv->irqlock, flags);
spin_unlock_bh(&priv->timerlock); spin_unlock_bh(&priv->timerlock);
netif_stop_queue(dev); netif_stop_queue(dev);
...@@ -851,7 +850,7 @@ static int start_tx(struct sk_buff *skb, struct net_device *dev) ...@@ -851,7 +850,7 @@ static int start_tx(struct sk_buff *skb, struct net_device *dev)
/* low bit of first byte of destination tells us if broadcast */ /* low bit of first byte of destination tells us if broadcast */
tx_update_descriptor(priv, *(skb->data) & 0x01, len + 18, buff, TX_PACKET_TYPE_DATA); tx_update_descriptor(priv, *(skb->data) & 0x01, len + 18, buff, TX_PACKET_TYPE_DATA);
dev->trans_start = jiffies; dev->trans_start = jiffies;
priv->stats.tx_bytes += len; dev->stats.tx_bytes += len;
spin_unlock_irqrestore(&priv->irqlock, flags); spin_unlock_irqrestore(&priv->irqlock, flags);
spin_unlock_bh(&priv->timerlock); spin_unlock_bh(&priv->timerlock);
...@@ -895,7 +894,7 @@ static void fast_rx_path(struct atmel_private *priv, ...@@ -895,7 +894,7 @@ static void fast_rx_path(struct atmel_private *priv,
} }
if (!(skb = dev_alloc_skb(msdu_size + 14))) { if (!(skb = dev_alloc_skb(msdu_size + 14))) {
priv->stats.rx_dropped++; priv->dev->stats.rx_dropped++;
return; return;
} }
...@@ -908,7 +907,7 @@ static void fast_rx_path(struct atmel_private *priv, ...@@ -908,7 +907,7 @@ static void fast_rx_path(struct atmel_private *priv,
crc = crc32_le(crc, skbp + 12, msdu_size); crc = crc32_le(crc, skbp + 12, msdu_size);
atmel_copy_to_host(priv->dev, (void *)&netcrc, rx_packet_loc + 30 + msdu_size, 4); atmel_copy_to_host(priv->dev, (void *)&netcrc, rx_packet_loc + 30 + msdu_size, 4);
if ((crc ^ 0xffffffff) != netcrc) { if ((crc ^ 0xffffffff) != netcrc) {
priv->stats.rx_crc_errors++; priv->dev->stats.rx_crc_errors++;
dev_kfree_skb(skb); dev_kfree_skb(skb);
return; return;
} }
...@@ -924,8 +923,8 @@ static void fast_rx_path(struct atmel_private *priv, ...@@ -924,8 +923,8 @@ static void fast_rx_path(struct atmel_private *priv,
skb->protocol = eth_type_trans(skb, priv->dev); skb->protocol = eth_type_trans(skb, priv->dev);
skb->ip_summed = CHECKSUM_NONE; skb->ip_summed = CHECKSUM_NONE;
netif_rx(skb); netif_rx(skb);
priv->stats.rx_bytes += 12 + msdu_size; priv->dev->stats.rx_bytes += 12 + msdu_size;
priv->stats.rx_packets++; priv->dev->stats.rx_packets++;
} }
/* Test to see if the packet in card memory at packet_loc has a valid CRC /* Test to see if the packet in card memory at packet_loc has a valid CRC
...@@ -991,7 +990,7 @@ static void frag_rx_path(struct atmel_private *priv, ...@@ -991,7 +990,7 @@ static void frag_rx_path(struct atmel_private *priv,
crc = crc32_le(crc, &priv->rx_buf[12], msdu_size); crc = crc32_le(crc, &priv->rx_buf[12], msdu_size);
atmel_copy_to_host(priv->dev, (void *)&netcrc, rx_packet_loc + msdu_size, 4); atmel_copy_to_host(priv->dev, (void *)&netcrc, rx_packet_loc + msdu_size, 4);
if ((crc ^ 0xffffffff) != netcrc) { if ((crc ^ 0xffffffff) != netcrc) {
priv->stats.rx_crc_errors++; priv->dev->stats.rx_crc_errors++;
memset(priv->frag_source, 0xff, 6); memset(priv->frag_source, 0xff, 6);
} }
} }
...@@ -1009,7 +1008,7 @@ static void frag_rx_path(struct atmel_private *priv, ...@@ -1009,7 +1008,7 @@ static void frag_rx_path(struct atmel_private *priv,
msdu_size); msdu_size);
atmel_copy_to_host(priv->dev, (void *)&netcrc, rx_packet_loc + msdu_size, 4); atmel_copy_to_host(priv->dev, (void *)&netcrc, rx_packet_loc + msdu_size, 4);
if ((crc ^ 0xffffffff) != netcrc) { if ((crc ^ 0xffffffff) != netcrc) {
priv->stats.rx_crc_errors++; priv->dev->stats.rx_crc_errors++;
memset(priv->frag_source, 0xff, 6); memset(priv->frag_source, 0xff, 6);
more_frags = 1; /* don't send broken assembly */ more_frags = 1; /* don't send broken assembly */
} }
...@@ -1021,7 +1020,7 @@ static void frag_rx_path(struct atmel_private *priv, ...@@ -1021,7 +1020,7 @@ static void frag_rx_path(struct atmel_private *priv,
if (!more_frags) { /* last one */ if (!more_frags) { /* last one */
memset(priv->frag_source, 0xff, 6); memset(priv->frag_source, 0xff, 6);
if (!(skb = dev_alloc_skb(priv->frag_len + 14))) { if (!(skb = dev_alloc_skb(priv->frag_len + 14))) {
priv->stats.rx_dropped++; priv->dev->stats.rx_dropped++;
} else { } else {
skb_reserve(skb, 2); skb_reserve(skb, 2);
memcpy(skb_put(skb, priv->frag_len + 12), memcpy(skb_put(skb, priv->frag_len + 12),
...@@ -1031,8 +1030,8 @@ static void frag_rx_path(struct atmel_private *priv, ...@@ -1031,8 +1030,8 @@ static void frag_rx_path(struct atmel_private *priv,
skb->protocol = eth_type_trans(skb, priv->dev); skb->protocol = eth_type_trans(skb, priv->dev);
skb->ip_summed = CHECKSUM_NONE; skb->ip_summed = CHECKSUM_NONE;
netif_rx(skb); netif_rx(skb);
priv->stats.rx_bytes += priv->frag_len + 12; priv->dev->stats.rx_bytes += priv->frag_len + 12;
priv->stats.rx_packets++; priv->dev->stats.rx_packets++;
} }
} }
} else } else
...@@ -1057,7 +1056,7 @@ static void rx_done_irq(struct atmel_private *priv) ...@@ -1057,7 +1056,7 @@ static void rx_done_irq(struct atmel_private *priv)
if (status == 0xc1) /* determined by experiment */ if (status == 0xc1) /* determined by experiment */
priv->wstats.discard.nwid++; priv->wstats.discard.nwid++;
else else
priv->stats.rx_errors++; priv->dev->stats.rx_errors++;
goto next; goto next;
} }
...@@ -1065,7 +1064,7 @@ static void rx_done_irq(struct atmel_private *priv) ...@@ -1065,7 +1064,7 @@ static void rx_done_irq(struct atmel_private *priv)
rx_packet_loc = atmel_rmem16(priv, atmel_rx(priv, RX_DESC_MSDU_POS_OFFSET, priv->rx_desc_head)); rx_packet_loc = atmel_rmem16(priv, atmel_rx(priv, RX_DESC_MSDU_POS_OFFSET, priv->rx_desc_head));
if (msdu_size < 30) { if (msdu_size < 30) {
priv->stats.rx_errors++; priv->dev->stats.rx_errors++;
goto next; goto next;
} }
...@@ -1123,7 +1122,7 @@ static void rx_done_irq(struct atmel_private *priv) ...@@ -1123,7 +1122,7 @@ static void rx_done_irq(struct atmel_private *priv)
msdu_size -= 4; msdu_size -= 4;
crc = crc32_le(crc, (unsigned char *)&priv->rx_buf, msdu_size); crc = crc32_le(crc, (unsigned char *)&priv->rx_buf, msdu_size);
if ((crc ^ 0xffffffff) != (*((u32 *)&priv->rx_buf[msdu_size]))) { if ((crc ^ 0xffffffff) != (*((u32 *)&priv->rx_buf[msdu_size]))) {
priv->stats.rx_crc_errors++; priv->dev->stats.rx_crc_errors++;
goto next; goto next;
} }
} }
...@@ -1250,12 +1249,6 @@ static irqreturn_t service_interrupt(int irq, void *dev_id) ...@@ -1250,12 +1249,6 @@ static irqreturn_t service_interrupt(int irq, void *dev_id)
} }
} }
static struct net_device_stats *atmel_get_stats(struct net_device *dev)
{
struct atmel_private *priv = netdev_priv(dev);
return &priv->stats;
}
static struct iw_statistics *atmel_get_wireless_stats(struct net_device *dev) static struct iw_statistics *atmel_get_wireless_stats(struct net_device *dev)
{ {
struct atmel_private *priv = netdev_priv(dev); struct atmel_private *priv = netdev_priv(dev);
...@@ -1518,8 +1511,6 @@ struct net_device *init_atmel_card(unsigned short irq, unsigned long port, ...@@ -1518,8 +1511,6 @@ struct net_device *init_atmel_card(unsigned short irq, unsigned long port,
priv->crc_ok_cnt = priv->crc_ko_cnt = 0; priv->crc_ok_cnt = priv->crc_ko_cnt = 0;
} else } else
priv->probe_crc = 0; priv->probe_crc = 0;
memset(&priv->stats, 0, sizeof(priv->stats));
memset(&priv->wstats, 0, sizeof(priv->wstats));
priv->last_qual = jiffies; priv->last_qual = jiffies;
priv->last_beacon_timestamp = 0; priv->last_beacon_timestamp = 0;
memset(priv->frag_source, 0xff, sizeof(priv->frag_source)); memset(priv->frag_source, 0xff, sizeof(priv->frag_source));
...@@ -1568,7 +1559,6 @@ struct net_device *init_atmel_card(unsigned short irq, unsigned long port, ...@@ -1568,7 +1559,6 @@ struct net_device *init_atmel_card(unsigned short irq, unsigned long port,
dev->change_mtu = atmel_change_mtu; dev->change_mtu = atmel_change_mtu;
dev->set_mac_address = atmel_set_mac_address; dev->set_mac_address = atmel_set_mac_address;
dev->hard_start_xmit = start_tx; dev->hard_start_xmit = start_tx;
dev->get_stats = atmel_get_stats;
dev->wireless_handlers = (struct iw_handler_def *)&atmel_handler_def; dev->wireless_handlers = (struct iw_handler_def *)&atmel_handler_def;
dev->do_ioctl = atmel_ioctl; dev->do_ioctl = atmel_ioctl;
dev->irq = irq; dev->irq = irq;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册