Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5803c512 authored by Stephen Hemminger's avatar Stephen Hemminger Committed by David S. Miller
Browse files

arcnet: convert to internal stats



Use pre-existing network_device_stats inside network_device rather than own
private structure.

Signed-off-by: default avatarStephen Hemminger <shemminger@vyatta.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 60961ce4
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -102,7 +102,7 @@ static void rx(struct net_device *dev, int bufnum,
	skb = alloc_skb(length + ARC_HDR_SIZE, GFP_ATOMIC);
	skb = alloc_skb(length + ARC_HDR_SIZE, GFP_ATOMIC);
	if (skb == NULL) {
	if (skb == NULL) {
		BUGMSG(D_NORMAL, "Memory squeeze, dropping packet.\n");
		BUGMSG(D_NORMAL, "Memory squeeze, dropping packet.\n");
		lp->stats.rx_dropped++;
		dev->stats.rx_dropped++;
		return;
		return;
	}
	}
	skb_put(skb, length + ARC_HDR_SIZE);
	skb_put(skb, length + ARC_HDR_SIZE);
+12 −26
Original line number Original line Diff line number Diff line
@@ -105,7 +105,6 @@ static int arcnet_header(struct sk_buff *skb, struct net_device *dev,
			 unsigned short type, const void *daddr,
			 unsigned short type, const void *daddr,
			 const void *saddr, unsigned len);
			 const void *saddr, unsigned len);
static int arcnet_rebuild_header(struct sk_buff *skb);
static int arcnet_rebuild_header(struct sk_buff *skb);
static struct net_device_stats *arcnet_get_stats(struct net_device *dev);
static int go_tx(struct net_device *dev);
static int go_tx(struct net_device *dev);


static int debug = ARCNET_DEBUG;
static int debug = ARCNET_DEBUG;
@@ -347,7 +346,6 @@ static void arcdev_setup(struct net_device *dev)
	dev->stop = arcnet_close;
	dev->stop = arcnet_close;
	dev->hard_start_xmit = arcnet_send_packet;
	dev->hard_start_xmit = arcnet_send_packet;
	dev->tx_timeout = arcnet_timeout;
	dev->tx_timeout = arcnet_timeout;
	dev->get_stats = arcnet_get_stats;
}
}


struct net_device *alloc_arcdev(char *name)
struct net_device *alloc_arcdev(char *name)
@@ -583,8 +581,8 @@ static int arcnet_rebuild_header(struct sk_buff *skb)
	} else {
	} else {
		BUGMSG(D_NORMAL,
		BUGMSG(D_NORMAL,
		       "I don't understand ethernet protocol %Xh addresses!\n", type);
		       "I don't understand ethernet protocol %Xh addresses!\n", type);
		lp->stats.tx_errors++;
		dev->stats.tx_errors++;
		lp->stats.tx_aborted_errors++;
		dev->stats.tx_aborted_errors++;
	}
	}


	/* if we couldn't resolve the address... give up. */
	/* if we couldn't resolve the address... give up. */
@@ -645,7 +643,7 @@ static int arcnet_send_packet(struct sk_buff *skb, struct net_device *dev)
		    !proto->ack_tx) {
		    !proto->ack_tx) {
			/* done right away and we don't want to acknowledge
			/* done right away and we don't want to acknowledge
			   the package later - forget about it now */
			   the package later - forget about it now */
			lp->stats.tx_bytes += skb->len;
			dev->stats.tx_bytes += skb->len;
			freeskb = 1;
			freeskb = 1;
		} else {
		} else {
			/* do it the 'split' way */
			/* do it the 'split' way */
@@ -709,7 +707,7 @@ static int go_tx(struct net_device *dev)
	/* start sending */
	/* start sending */
	ACOMMAND(TXcmd | (lp->cur_tx << 3));
	ACOMMAND(TXcmd | (lp->cur_tx << 3));


	lp->stats.tx_packets++;
	dev->stats.tx_packets++;
	lp->lasttrans_dest = lp->lastload_dest;
	lp->lasttrans_dest = lp->lastload_dest;
	lp->lastload_dest = 0;
	lp->lastload_dest = 0;
	lp->excnak_pending = 0;
	lp->excnak_pending = 0;
@@ -732,11 +730,11 @@ static void arcnet_timeout(struct net_device *dev)
		msg = " - missed IRQ?";
		msg = " - missed IRQ?";
	} else {
	} else {
		msg = "";
		msg = "";
		lp->stats.tx_aborted_errors++;
		dev->stats.tx_aborted_errors++;
		lp->timed_out = 1;
		lp->timed_out = 1;
		ACOMMAND(NOTXcmd | (lp->cur_tx << 3));
		ACOMMAND(NOTXcmd | (lp->cur_tx << 3));
	}
	}
	lp->stats.tx_errors++;
	dev->stats.tx_errors++;


	/* make sure we didn't miss a TX or a EXC NAK IRQ */
	/* make sure we didn't miss a TX or a EXC NAK IRQ */
	AINTMASK(0);
	AINTMASK(0);
@@ -865,8 +863,8 @@ irqreturn_t arcnet_interrupt(int irq, void *dev_id)
						       "transmit was not acknowledged! "
						       "transmit was not acknowledged! "
						       "(status=%Xh, dest=%02Xh)\n",
						       "(status=%Xh, dest=%02Xh)\n",
						       status, lp->lasttrans_dest);
						       status, lp->lasttrans_dest);
						lp->stats.tx_errors++;
						dev->stats.tx_errors++;
						lp->stats.tx_carrier_errors++;
						dev->stats.tx_carrier_errors++;
					} else {
					} else {
						BUGMSG(D_DURING,
						BUGMSG(D_DURING,
						       "broadcast was not acknowledged; that's normal "
						       "broadcast was not acknowledged; that's normal "
@@ -905,7 +903,7 @@ irqreturn_t arcnet_interrupt(int irq, void *dev_id)
				if (txbuf != -1) {
				if (txbuf != -1) {
					if (lp->outgoing.proto->continue_tx(dev, txbuf)) {
					if (lp->outgoing.proto->continue_tx(dev, txbuf)) {
						/* that was the last segment */
						/* that was the last segment */
						lp->stats.tx_bytes += lp->outgoing.skb->len;
						dev->stats.tx_bytes += lp->outgoing.skb->len;
						if(!lp->outgoing.proto->ack_tx)
						if(!lp->outgoing.proto->ack_tx)
						  {
						  {
						    dev_kfree_skb_irq(lp->outgoing.skb);
						    dev_kfree_skb_irq(lp->outgoing.skb);
@@ -930,7 +928,7 @@ irqreturn_t arcnet_interrupt(int irq, void *dev_id)
		}
		}
		if (status & lp->intmask & RECONflag) {
		if (status & lp->intmask & RECONflag) {
			ACOMMAND(CFLAGScmd | CONFIGclear);
			ACOMMAND(CFLAGScmd | CONFIGclear);
			lp->stats.tx_carrier_errors++;
			dev->stats.tx_carrier_errors++;


			BUGMSG(D_RECON, "Network reconfiguration detected (status=%Xh)\n",
			BUGMSG(D_RECON, "Network reconfiguration detected (status=%Xh)\n",
			       status);
			       status);
@@ -1038,8 +1036,8 @@ static void arcnet_rx(struct net_device *dev, int bufnum)
	       "(%d+4 bytes)\n",
	       "(%d+4 bytes)\n",
	       bufnum, pkt.hard.source, pkt.hard.dest, length);
	       bufnum, pkt.hard.source, pkt.hard.dest, length);


	lp->stats.rx_packets++;
	dev->stats.rx_packets++;
	lp->stats.rx_bytes += length + ARC_HDR_SIZE;
	dev->stats.rx_bytes += length + ARC_HDR_SIZE;


	/* call the right receiver for the protocol */
	/* call the right receiver for the protocol */
	if (arc_proto_map[soft->proto]->is_ip) {
	if (arc_proto_map[soft->proto]->is_ip) {
@@ -1067,18 +1065,6 @@ static void arcnet_rx(struct net_device *dev, int bufnum)
}
}





/* 
 * Get the current statistics.  This may be called with the card open or
 * closed.
 */
static struct net_device_stats *arcnet_get_stats(struct net_device *dev)
{
	struct arcnet_local *lp = netdev_priv(dev);
	return &lp->stats;
}


static void null_rx(struct net_device *dev, int bufnum,
static void null_rx(struct net_device *dev, int bufnum,
		    struct archdr *pkthdr, int length)
		    struct archdr *pkthdr, int length)
{
{
+1 −1
Original line number Original line Diff line number Diff line
@@ -119,7 +119,7 @@ static void rx(struct net_device *dev, int bufnum,
	skb = alloc_skb(length + ARC_HDR_SIZE + sizeof(int), GFP_ATOMIC);
	skb = alloc_skb(length + ARC_HDR_SIZE + sizeof(int), GFP_ATOMIC);
	if (skb == NULL) {
	if (skb == NULL) {
		BUGMSG(D_NORMAL, "Memory squeeze, dropping packet.\n");
		BUGMSG(D_NORMAL, "Memory squeeze, dropping packet.\n");
		lp->stats.rx_dropped++;
		dev->stats.rx_dropped++;
		return;
		return;
	}
	}
	skb_put(skb, length + ARC_HDR_SIZE + sizeof(int));
	skb_put(skb, length + ARC_HDR_SIZE + sizeof(int));
+5 −7
Original line number Original line Diff line number Diff line
@@ -88,7 +88,6 @@ MODULE_LICENSE("GPL");
 */
 */
static __be16 type_trans(struct sk_buff *skb, struct net_device *dev)
static __be16 type_trans(struct sk_buff *skb, struct net_device *dev)
{
{
	struct arcnet_local *lp = netdev_priv(dev);
	struct archdr *pkt = (struct archdr *) skb->data;
	struct archdr *pkt = (struct archdr *) skb->data;
	struct arc_rfc1051 *soft = &pkt->soft.rfc1051;
	struct arc_rfc1051 *soft = &pkt->soft.rfc1051;
	int hdr_size = ARC_HDR_SIZE + RFC1051_HDR_SIZE;
	int hdr_size = ARC_HDR_SIZE + RFC1051_HDR_SIZE;
@@ -112,8 +111,8 @@ static __be16 type_trans(struct sk_buff *skb, struct net_device *dev)
		return htons(ETH_P_ARP);
		return htons(ETH_P_ARP);


	default:
	default:
		lp->stats.rx_errors++;
		dev->stats.rx_errors++;
		lp->stats.rx_crc_errors++;
		dev->stats.rx_crc_errors++;
		return 0;
		return 0;
	}
	}


@@ -140,7 +139,7 @@ static void rx(struct net_device *dev, int bufnum,
	skb = alloc_skb(length + ARC_HDR_SIZE, GFP_ATOMIC);
	skb = alloc_skb(length + ARC_HDR_SIZE, GFP_ATOMIC);
	if (skb == NULL) {
	if (skb == NULL) {
		BUGMSG(D_NORMAL, "Memory squeeze, dropping packet.\n");
		BUGMSG(D_NORMAL, "Memory squeeze, dropping packet.\n");
		lp->stats.rx_dropped++;
		dev->stats.rx_dropped++;
		return;
		return;
	}
	}
	skb_put(skb, length + ARC_HDR_SIZE);
	skb_put(skb, length + ARC_HDR_SIZE);
@@ -168,7 +167,6 @@ static void rx(struct net_device *dev, int bufnum,
static int build_header(struct sk_buff *skb, struct net_device *dev,
static int build_header(struct sk_buff *skb, struct net_device *dev,
			unsigned short type, uint8_t daddr)
			unsigned short type, uint8_t daddr)
{
{
	struct arcnet_local *lp = netdev_priv(dev);
	int hdr_size = ARC_HDR_SIZE + RFC1051_HDR_SIZE;
	int hdr_size = ARC_HDR_SIZE + RFC1051_HDR_SIZE;
	struct archdr *pkt = (struct archdr *) skb_push(skb, hdr_size);
	struct archdr *pkt = (struct archdr *) skb_push(skb, hdr_size);
	struct arc_rfc1051 *soft = &pkt->soft.rfc1051;
	struct arc_rfc1051 *soft = &pkt->soft.rfc1051;
@@ -184,8 +182,8 @@ static int build_header(struct sk_buff *skb, struct net_device *dev,
	default:
	default:
		BUGMSG(D_NORMAL, "RFC1051: I don't understand protocol %d (%Xh)\n",
		BUGMSG(D_NORMAL, "RFC1051: I don't understand protocol %d (%Xh)\n",
		       type, type);
		       type, type);
		lp->stats.tx_errors++;
		dev->stats.tx_errors++;
		lp->stats.tx_aborted_errors++;
		dev->stats.tx_aborted_errors++;
		return 0;
		return 0;
	}
	}


+23 −24
Original line number Original line Diff line number Diff line
@@ -92,7 +92,6 @@ static __be16 type_trans(struct sk_buff *skb, struct net_device *dev)
{
{
	struct archdr *pkt = (struct archdr *) skb->data;
	struct archdr *pkt = (struct archdr *) skb->data;
	struct arc_rfc1201 *soft = &pkt->soft.rfc1201;
	struct arc_rfc1201 *soft = &pkt->soft.rfc1201;
	struct arcnet_local *lp = netdev_priv(dev);
	int hdr_size = ARC_HDR_SIZE + RFC1201_HDR_SIZE;
	int hdr_size = ARC_HDR_SIZE + RFC1201_HDR_SIZE;


	/* Pull off the arcnet header. */
	/* Pull off the arcnet header. */
@@ -121,8 +120,8 @@ static __be16 type_trans(struct sk_buff *skb, struct net_device *dev)
	case ARC_P_NOVELL_EC:
	case ARC_P_NOVELL_EC:
		return htons(ETH_P_802_3);
		return htons(ETH_P_802_3);
	default:
	default:
		lp->stats.rx_errors++;
		dev->stats.rx_errors++;
		lp->stats.rx_crc_errors++;
		dev->stats.rx_crc_errors++;
		return 0;
		return 0;
	}
	}


@@ -172,8 +171,8 @@ static void rx(struct net_device *dev, int bufnum,
			 in->sequence, soft->split_flag, soft->sequence);
			 in->sequence, soft->split_flag, soft->sequence);
			lp->rfc1201.aborted_seq = soft->sequence;
			lp->rfc1201.aborted_seq = soft->sequence;
			dev_kfree_skb_irq(in->skb);
			dev_kfree_skb_irq(in->skb);
			lp->stats.rx_errors++;
			dev->stats.rx_errors++;
			lp->stats.rx_missed_errors++;
			dev->stats.rx_missed_errors++;
			in->skb = NULL;
			in->skb = NULL;
		}
		}
		in->sequence = soft->sequence;
		in->sequence = soft->sequence;
@@ -181,7 +180,7 @@ static void rx(struct net_device *dev, int bufnum,
		skb = alloc_skb(length + ARC_HDR_SIZE, GFP_ATOMIC);
		skb = alloc_skb(length + ARC_HDR_SIZE, GFP_ATOMIC);
		if (skb == NULL) {
		if (skb == NULL) {
			BUGMSG(D_NORMAL, "Memory squeeze, dropping packet.\n");
			BUGMSG(D_NORMAL, "Memory squeeze, dropping packet.\n");
			lp->stats.rx_dropped++;
			dev->stats.rx_dropped++;
			return;
			return;
		}
		}
		skb_put(skb, length + ARC_HDR_SIZE);
		skb_put(skb, length + ARC_HDR_SIZE);
@@ -213,7 +212,7 @@ static void rx(struct net_device *dev, int bufnum,
					BUGMSG(D_EXTRA,
					BUGMSG(D_EXTRA,
					       "ARP source address was 00h, set to %02Xh.\n",
					       "ARP source address was 00h, set to %02Xh.\n",
					       saddr);
					       saddr);
					lp->stats.rx_crc_errors++;
					dev->stats.rx_crc_errors++;
					*cptr = saddr;
					*cptr = saddr;
				} else {
				} else {
					BUGMSG(D_DURING, "ARP source address (%Xh) is fine.\n",
					BUGMSG(D_DURING, "ARP source address (%Xh) is fine.\n",
@@ -222,8 +221,8 @@ static void rx(struct net_device *dev, int bufnum,
			} else {
			} else {
				BUGMSG(D_NORMAL, "funny-shaped ARP packet. (%Xh, %Xh)\n",
				BUGMSG(D_NORMAL, "funny-shaped ARP packet. (%Xh, %Xh)\n",
				       arp->ar_hln, arp->ar_pln);
				       arp->ar_hln, arp->ar_pln);
				lp->stats.rx_errors++;
				dev->stats.rx_errors++;
				lp->stats.rx_crc_errors++;
				dev->stats.rx_crc_errors++;
			}
			}
		}
		}
		BUGLVL(D_SKB) arcnet_dump_skb(dev, skb, "rx");
		BUGLVL(D_SKB) arcnet_dump_skb(dev, skb, "rx");
@@ -257,8 +256,8 @@ static void rx(struct net_device *dev, int bufnum,
			       soft->split_flag);
			       soft->split_flag);
			dev_kfree_skb_irq(in->skb);
			dev_kfree_skb_irq(in->skb);
			in->skb = NULL;
			in->skb = NULL;
			lp->stats.rx_errors++;
			dev->stats.rx_errors++;
			lp->stats.rx_missed_errors++;
			dev->stats.rx_missed_errors++;
			in->lastpacket = in->numpackets = 0;
			in->lastpacket = in->numpackets = 0;
		}
		}
		if (soft->split_flag & 1) {	/* first packet in split */
		if (soft->split_flag & 1) {	/* first packet in split */
@@ -269,8 +268,8 @@ static void rx(struct net_device *dev, int bufnum,
				       "(splitflag=%d, seq=%d)\n",
				       "(splitflag=%d, seq=%d)\n",
				       in->sequence, soft->split_flag,
				       in->sequence, soft->split_flag,
				       soft->sequence);
				       soft->sequence);
				lp->stats.rx_errors++;
				dev->stats.rx_errors++;
				lp->stats.rx_missed_errors++;
				dev->stats.rx_missed_errors++;
				dev_kfree_skb_irq(in->skb);
				dev_kfree_skb_irq(in->skb);
			}
			}
			in->sequence = soft->sequence;
			in->sequence = soft->sequence;
@@ -281,8 +280,8 @@ static void rx(struct net_device *dev, int bufnum,
				BUGMSG(D_EXTRA, "incoming packet more than 16 segments; dropping. (splitflag=%d)\n",
				BUGMSG(D_EXTRA, "incoming packet more than 16 segments; dropping. (splitflag=%d)\n",
				       soft->split_flag);
				       soft->split_flag);
				lp->rfc1201.aborted_seq = soft->sequence;
				lp->rfc1201.aborted_seq = soft->sequence;
				lp->stats.rx_errors++;
				dev->stats.rx_errors++;
				lp->stats.rx_length_errors++;
				dev->stats.rx_length_errors++;
				return;
				return;
			}
			}
			in->skb = skb = alloc_skb(508 * in->numpackets + ARC_HDR_SIZE,
			in->skb = skb = alloc_skb(508 * in->numpackets + ARC_HDR_SIZE,
@@ -290,7 +289,7 @@ static void rx(struct net_device *dev, int bufnum,
			if (skb == NULL) {
			if (skb == NULL) {
				BUGMSG(D_NORMAL, "(split) memory squeeze, dropping packet.\n");
				BUGMSG(D_NORMAL, "(split) memory squeeze, dropping packet.\n");
				lp->rfc1201.aborted_seq = soft->sequence;
				lp->rfc1201.aborted_seq = soft->sequence;
				lp->stats.rx_dropped++;
				dev->stats.rx_dropped++;
				return;
				return;
			}
			}
			skb->dev = dev;
			skb->dev = dev;
@@ -314,8 +313,8 @@ static void rx(struct net_device *dev, int bufnum,
					       "first! (splitflag=%d, seq=%d, aborted=%d)\n",
					       "first! (splitflag=%d, seq=%d, aborted=%d)\n",
					soft->split_flag, soft->sequence,
					soft->split_flag, soft->sequence,
					       lp->rfc1201.aborted_seq);
					       lp->rfc1201.aborted_seq);
					lp->stats.rx_errors++;
					dev->stats.rx_errors++;
					lp->stats.rx_missed_errors++;
					dev->stats.rx_missed_errors++;
				}
				}
				return;
				return;
			}
			}
@@ -325,8 +324,8 @@ static void rx(struct net_device *dev, int bufnum,
				if (packetnum <= in->lastpacket - 1) {
				if (packetnum <= in->lastpacket - 1) {
					BUGMSG(D_EXTRA, "duplicate splitpacket ignored! (splitflag=%d)\n",
					BUGMSG(D_EXTRA, "duplicate splitpacket ignored! (splitflag=%d)\n",
					       soft->split_flag);
					       soft->split_flag);
					lp->stats.rx_errors++;
					dev->stats.rx_errors++;
					lp->stats.rx_frame_errors++;
					dev->stats.rx_frame_errors++;
					return;
					return;
				}
				}
				/* "bad" duplicate, kill reassembly */
				/* "bad" duplicate, kill reassembly */
@@ -336,8 +335,8 @@ static void rx(struct net_device *dev, int bufnum,
				lp->rfc1201.aborted_seq = soft->sequence;
				lp->rfc1201.aborted_seq = soft->sequence;
				dev_kfree_skb_irq(in->skb);
				dev_kfree_skb_irq(in->skb);
				in->skb = NULL;
				in->skb = NULL;
				lp->stats.rx_errors++;
				dev->stats.rx_errors++;
				lp->stats.rx_missed_errors++;
				dev->stats.rx_missed_errors++;
				in->lastpacket = in->numpackets = 0;
				in->lastpacket = in->numpackets = 0;
				return;
				return;
			}
			}
@@ -404,8 +403,8 @@ static int build_header(struct sk_buff *skb, struct net_device *dev,
	default:
	default:
		BUGMSG(D_NORMAL, "RFC1201: I don't understand protocol %d (%Xh)\n",
		BUGMSG(D_NORMAL, "RFC1201: I don't understand protocol %d (%Xh)\n",
		       type, type);
		       type, type);
		lp->stats.tx_errors++;
		dev->stats.tx_errors++;
		lp->stats.tx_aborted_errors++;
		dev->stats.tx_aborted_errors++;
		return 0;
		return 0;
	}
	}


Loading