skb = alloc_skb(length + ARC_HDR_SIZE, GFP_ATOMIC);
        if (skb == NULL) {
                BUGMSG(D_NORMAL, "Memory squeeze, dropping packet.\n");
-               lp->stats.rx_dropped++;
+               dev->stats.rx_dropped++;
                return;
        }
        skb_put(skb, length + ARC_HDR_SIZE);
 
                         unsigned short type, const void *daddr,
                         const void *saddr, unsigned len);
 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 debug = ARCNET_DEBUG;
        dev->stop = arcnet_close;
        dev->hard_start_xmit = arcnet_send_packet;
        dev->tx_timeout = arcnet_timeout;
-       dev->get_stats = arcnet_get_stats;
 }
 
 struct net_device *alloc_arcdev(char *name)
        } else {
                BUGMSG(D_NORMAL,
                       "I don't understand ethernet protocol %Xh addresses!\n", type);
-               lp->stats.tx_errors++;
-               lp->stats.tx_aborted_errors++;
+               dev->stats.tx_errors++;
+               dev->stats.tx_aborted_errors++;
        }
 
        /* if we couldn't resolve the address... give up. */
                    !proto->ack_tx) {
                        /* done right away and we don't want to acknowledge
                           the package later - forget about it now */
-                       lp->stats.tx_bytes += skb->len;
+                       dev->stats.tx_bytes += skb->len;
                        freeskb = 1;
                } else {
                        /* do it the 'split' way */
        /* start sending */
        ACOMMAND(TXcmd | (lp->cur_tx << 3));
 
-       lp->stats.tx_packets++;
+       dev->stats.tx_packets++;
        lp->lasttrans_dest = lp->lastload_dest;
        lp->lastload_dest = 0;
        lp->excnak_pending = 0;
                msg = " - missed IRQ?";
        } else {
                msg = "";
-               lp->stats.tx_aborted_errors++;
+               dev->stats.tx_aborted_errors++;
                lp->timed_out = 1;
                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 */
        AINTMASK(0);
                                                       "transmit was not acknowledged! "
                                                       "(status=%Xh, dest=%02Xh)\n",
                                                       status, lp->lasttrans_dest);
-                                               lp->stats.tx_errors++;
-                                               lp->stats.tx_carrier_errors++;
+                                               dev->stats.tx_errors++;
+                                               dev->stats.tx_carrier_errors++;
                                        } else {
                                                BUGMSG(D_DURING,
                                                       "broadcast was not acknowledged; that's normal "
                                if (txbuf != -1) {
                                        if (lp->outgoing.proto->continue_tx(dev, txbuf)) {
                                                /* 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)
                                                  {
                                                    dev_kfree_skb_irq(lp->outgoing.skb);
                }
                if (status & lp->intmask & RECONflag) {
                        ACOMMAND(CFLAGScmd | CONFIGclear);
-                       lp->stats.tx_carrier_errors++;
+                       dev->stats.tx_carrier_errors++;
 
                        BUGMSG(D_RECON, "Network reconfiguration detected (status=%Xh)\n",
                               status);
               "(%d+4 bytes)\n",
               bufnum, pkt.hard.source, pkt.hard.dest, length);
 
-       lp->stats.rx_packets++;
-       lp->stats.rx_bytes += length + ARC_HDR_SIZE;
+       dev->stats.rx_packets++;
+       dev->stats.rx_bytes += length + ARC_HDR_SIZE;
 
        /* call the right receiver for the protocol */
        if (arc_proto_map[soft->proto]->is_ip) {
 }
 
 
-
-/* 
- * 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,
                    struct archdr *pkthdr, int length)
 {
 
        skb = alloc_skb(length + ARC_HDR_SIZE + sizeof(int), GFP_ATOMIC);
        if (skb == NULL) {
                BUGMSG(D_NORMAL, "Memory squeeze, dropping packet.\n");
-               lp->stats.rx_dropped++;
+               dev->stats.rx_dropped++;
                return;
        }
        skb_put(skb, length + ARC_HDR_SIZE + sizeof(int));
 
  */
 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 arc_rfc1051 *soft = &pkt->soft.rfc1051;
        int hdr_size = ARC_HDR_SIZE + RFC1051_HDR_SIZE;
                return htons(ETH_P_ARP);
 
        default:
-               lp->stats.rx_errors++;
-               lp->stats.rx_crc_errors++;
+               dev->stats.rx_errors++;
+               dev->stats.rx_crc_errors++;
                return 0;
        }
 
        skb = alloc_skb(length + ARC_HDR_SIZE, GFP_ATOMIC);
        if (skb == NULL) {
                BUGMSG(D_NORMAL, "Memory squeeze, dropping packet.\n");
-               lp->stats.rx_dropped++;
+               dev->stats.rx_dropped++;
                return;
        }
        skb_put(skb, length + ARC_HDR_SIZE);
 static int build_header(struct sk_buff *skb, struct net_device *dev,
                        unsigned short type, uint8_t daddr)
 {
-       struct arcnet_local *lp = netdev_priv(dev);
        int hdr_size = ARC_HDR_SIZE + RFC1051_HDR_SIZE;
        struct archdr *pkt = (struct archdr *) skb_push(skb, hdr_size);
        struct arc_rfc1051 *soft = &pkt->soft.rfc1051;
        default:
                BUGMSG(D_NORMAL, "RFC1051: I don't understand protocol %d (%Xh)\n",
                       type, type);
-               lp->stats.tx_errors++;
-               lp->stats.tx_aborted_errors++;
+               dev->stats.tx_errors++;
+               dev->stats.tx_aborted_errors++;
                return 0;
        }
 
 
 {
        struct archdr *pkt = (struct archdr *) skb->data;
        struct arc_rfc1201 *soft = &pkt->soft.rfc1201;
-       struct arcnet_local *lp = netdev_priv(dev);
        int hdr_size = ARC_HDR_SIZE + RFC1201_HDR_SIZE;
 
        /* Pull off the arcnet header. */
        case ARC_P_NOVELL_EC:
                return htons(ETH_P_802_3);
        default:
-               lp->stats.rx_errors++;
-               lp->stats.rx_crc_errors++;
+               dev->stats.rx_errors++;
+               dev->stats.rx_crc_errors++;
                return 0;
        }
 
                         in->sequence, soft->split_flag, soft->sequence);
                        lp->rfc1201.aborted_seq = soft->sequence;
                        dev_kfree_skb_irq(in->skb);
-                       lp->stats.rx_errors++;
-                       lp->stats.rx_missed_errors++;
+                       dev->stats.rx_errors++;
+                       dev->stats.rx_missed_errors++;
                        in->skb = NULL;
                }
                in->sequence = soft->sequence;
                skb = alloc_skb(length + ARC_HDR_SIZE, GFP_ATOMIC);
                if (skb == NULL) {
                        BUGMSG(D_NORMAL, "Memory squeeze, dropping packet.\n");
-                       lp->stats.rx_dropped++;
+                       dev->stats.rx_dropped++;
                        return;
                }
                skb_put(skb, length + ARC_HDR_SIZE);
                                        BUGMSG(D_EXTRA,
                                               "ARP source address was 00h, set to %02Xh.\n",
                                               saddr);
-                                       lp->stats.rx_crc_errors++;
+                                       dev->stats.rx_crc_errors++;
                                        *cptr = saddr;
                                } else {
                                        BUGMSG(D_DURING, "ARP source address (%Xh) is fine.\n",
                        } else {
                                BUGMSG(D_NORMAL, "funny-shaped ARP packet. (%Xh, %Xh)\n",
                                       arp->ar_hln, arp->ar_pln);
-                               lp->stats.rx_errors++;
-                               lp->stats.rx_crc_errors++;
+                               dev->stats.rx_errors++;
+                               dev->stats.rx_crc_errors++;
                        }
                }
                BUGLVL(D_SKB) arcnet_dump_skb(dev, skb, "rx");
                               soft->split_flag);
                        dev_kfree_skb_irq(in->skb);
                        in->skb = NULL;
-                       lp->stats.rx_errors++;
-                       lp->stats.rx_missed_errors++;
+                       dev->stats.rx_errors++;
+                       dev->stats.rx_missed_errors++;
                        in->lastpacket = in->numpackets = 0;
                }
                if (soft->split_flag & 1) {     /* first packet in split */
                                       "(splitflag=%d, seq=%d)\n",
                                       in->sequence, soft->split_flag,
                                       soft->sequence);
-                               lp->stats.rx_errors++;
-                               lp->stats.rx_missed_errors++;
+                               dev->stats.rx_errors++;
+                               dev->stats.rx_missed_errors++;
                                dev_kfree_skb_irq(in->skb);
                        }
                        in->sequence = soft->sequence;
                                BUGMSG(D_EXTRA, "incoming packet more than 16 segments; dropping. (splitflag=%d)\n",
                                       soft->split_flag);
                                lp->rfc1201.aborted_seq = soft->sequence;
-                               lp->stats.rx_errors++;
-                               lp->stats.rx_length_errors++;
+                               dev->stats.rx_errors++;
+                               dev->stats.rx_length_errors++;
                                return;
                        }
                        in->skb = skb = alloc_skb(508 * in->numpackets + ARC_HDR_SIZE,
                        if (skb == NULL) {
                                BUGMSG(D_NORMAL, "(split) memory squeeze, dropping packet.\n");
                                lp->rfc1201.aborted_seq = soft->sequence;
-                               lp->stats.rx_dropped++;
+                               dev->stats.rx_dropped++;
                                return;
                        }
                        skb->dev = dev;
                                               "first! (splitflag=%d, seq=%d, aborted=%d)\n",
                                        soft->split_flag, soft->sequence,
                                               lp->rfc1201.aborted_seq);
-                                       lp->stats.rx_errors++;
-                                       lp->stats.rx_missed_errors++;
+                                       dev->stats.rx_errors++;
+                                       dev->stats.rx_missed_errors++;
                                }
                                return;
                        }
                                if (packetnum <= in->lastpacket - 1) {
                                        BUGMSG(D_EXTRA, "duplicate splitpacket ignored! (splitflag=%d)\n",
                                               soft->split_flag);
-                                       lp->stats.rx_errors++;
-                                       lp->stats.rx_frame_errors++;
+                                       dev->stats.rx_errors++;
+                                       dev->stats.rx_frame_errors++;
                                        return;
                                }
                                /* "bad" duplicate, kill reassembly */
                                lp->rfc1201.aborted_seq = soft->sequence;
                                dev_kfree_skb_irq(in->skb);
                                in->skb = NULL;
-                               lp->stats.rx_errors++;
-                               lp->stats.rx_missed_errors++;
+                               dev->stats.rx_errors++;
+                               dev->stats.rx_missed_errors++;
                                in->lastpacket = in->numpackets = 0;
                                return;
                        }
        default:
                BUGMSG(D_NORMAL, "RFC1201: I don't understand protocol %d (%Xh)\n",
                       type, type);
-               lp->stats.tx_errors++;
-               lp->stats.tx_aborted_errors++;
+               dev->stats.tx_errors++;
+               dev->stats.tx_aborted_errors++;
                return 0;
        }
 
 
 
 
 struct arcnet_local {
-       struct net_device_stats stats;
-
        uint8_t config,         /* current value of CONFIG register */
                timeout,        /* Extended timeout for COM20020 */
                backplane,      /* Backplane flag for COM20020 */