spinlock_t                 lock;
     u_short                    manfid;
     u_short                    cardid;
-    struct net_device_stats    stats;
+
     dev_node_t                 node;
     struct sk_buff             *saved_skb;
     int                                packets_waiting;
 static int smc_start_xmit(struct sk_buff *skb, struct net_device *dev);
 static irqreturn_t smc_interrupt(int irq, void *dev_id);
 static void smc_rx(struct net_device *dev);
-static struct net_device_stats *smc_get_stats(struct net_device *dev);
 static void set_rx_mode(struct net_device *dev);
 static int s9k_config(struct net_device *dev, struct ifmap *map);
 static void smc_set_xcvr(struct net_device *dev, int if_port);
 
     /* The SMC91c92-specific entries in the device structure. */
     dev->hard_start_xmit = &smc_start_xmit;
-    dev->get_stats = &smc_get_stats;
     dev->set_config = &s9k_config;
     dev->set_multicast_list = &set_rx_mode;
     dev->open = &smc_open;
        return;
     }
 
-    smc->stats.tx_bytes += skb->len;
+    dev->stats.tx_bytes += skb->len;
     /* The card should use the just-allocated buffer. */
     outw(packet_no, ioaddr + PNR_ARR);
     /* point to the beginning of the packet */
     printk(KERN_NOTICE "%s: SMC91c92 transmit timed out, "
           "Tx_status %2.2x status %4.4x.\n",
           dev->name, inw(ioaddr)&0xff, inw(ioaddr + 2));
-    smc->stats.tx_errors++;
+    dev->stats.tx_errors++;
     smc_reset(dev);
     dev->trans_start = jiffies;
     smc->saved_skb = NULL;
 
     if (smc->saved_skb) {
        /* THIS SHOULD NEVER HAPPEN. */
-       smc->stats.tx_aborted_errors++;
+       dev->stats.tx_aborted_errors++;
        printk(KERN_DEBUG "%s: Internal error -- sent packet while busy.\n",
               dev->name);
        return 1;
        printk(KERN_ERR "%s: Far too big packet error.\n", dev->name);
        dev_kfree_skb (skb);
        smc->saved_skb = NULL;
-       smc->stats.tx_dropped++;
+       dev->stats.tx_dropped++;
        return 0;               /* Do not re-queue this packet. */
     }
     /* A packet is now waiting. */
 
     tx_status = inw(ioaddr + DATA_1);
 
-    smc->stats.tx_errors++;
-    if (tx_status & TS_LOSTCAR) smc->stats.tx_carrier_errors++;
-    if (tx_status & TS_LATCOL)  smc->stats.tx_window_errors++;
+    dev->stats.tx_errors++;
+    if (tx_status & TS_LOSTCAR) dev->stats.tx_carrier_errors++;
+    if (tx_status & TS_LATCOL)  dev->stats.tx_window_errors++;
     if (tx_status & TS_16COL) {
-       smc->stats.tx_aborted_errors++;
+       dev->stats.tx_aborted_errors++;
        smc->tx_err++;
     }
 
     /* Could be a counter roll-over warning: update stats. */
     card_stats = inw(ioaddr + COUNTER);
     /* single collisions */
-    smc->stats.collisions += card_stats & 0xF;
+    dev->stats.collisions += card_stats & 0xF;
     card_stats >>= 4;
     /* multiple collisions */
-    smc->stats.collisions += card_stats & 0xF;
+    dev->stats.collisions += card_stats & 0xF;
 #if 0          /* These are for when linux supports these statistics */
     card_stats >>= 4;                  /* deferred */
     card_stats >>= 4;                  /* excess deferred */
        if (status & IM_TX_EMPTY_INT) {
            outw(IM_TX_EMPTY_INT, ioaddr + INTERRUPT);
            mask &= ~IM_TX_EMPTY_INT;
-           smc->stats.tx_packets += smc->packets_waiting;
+           dev->stats.tx_packets += smc->packets_waiting;
            smc->packets_waiting = 0;
        }
        if (status & IM_ALLOC_INT) {
            netif_wake_queue(dev);
        }
        if (status & IM_RX_OVRN_INT) {
-           smc->stats.rx_errors++;
-           smc->stats.rx_fifo_errors++;
+           dev->stats.rx_errors++;
+           dev->stats.rx_fifo_errors++;
            if (smc->duplex)
                smc->rx_ovrn = 1; /* need MC_RESET outside smc_interrupt */
            outw(IM_RX_OVRN_INT, ioaddr + INTERRUPT);
 
 static void smc_rx(struct net_device *dev)
 {
-    struct smc_private *smc = netdev_priv(dev);
     unsigned int ioaddr = dev->base_addr;
     int rx_status;
     int packet_length; /* Caution: not frame length, rather words
        
        if (skb == NULL) {
            DEBUG(1, "%s: Low memory, packet dropped.\n", dev->name);
-           smc->stats.rx_dropped++;
+           dev->stats.rx_dropped++;
            outw(MC_RELEASE, ioaddr + MMU_CMD);
            return;
        }
        
        netif_rx(skb);
        dev->last_rx = jiffies;
-       smc->stats.rx_packets++;
-       smc->stats.rx_bytes += packet_length;
+       dev->stats.rx_packets++;
+       dev->stats.rx_bytes += packet_length;
        if (rx_status & RS_MULTICAST)
-           smc->stats.multicast++;
+           dev->stats.multicast++;
     } else {
        /* error ... */
-       smc->stats.rx_errors++;
+       dev->stats.rx_errors++;
        
-       if (rx_status & RS_ALGNERR)  smc->stats.rx_frame_errors++;
+       if (rx_status & RS_ALGNERR)  dev->stats.rx_frame_errors++;
        if (rx_status & (RS_TOOSHORT | RS_TOOLONG))
-           smc->stats.rx_length_errors++;
-       if (rx_status & RS_BADCRC)      smc->stats.rx_crc_errors++;
+           dev->stats.rx_length_errors++;
+       if (rx_status & RS_BADCRC)      dev->stats.rx_crc_errors++;
     }
     /* Let the MMU free the memory of this packet. */
     outw(MC_RELEASE, ioaddr + MMU_CMD);
     return;
 }
 
-/*====================================================================*/
-
-static struct net_device_stats *smc_get_stats(struct net_device *dev)
-{
-    struct smc_private *smc = netdev_priv(dev);
-    /* Nothing to update - the 91c92 is a pretty primative chip. */
-    return &smc->stats;
-}
-
 /*======================================================================
 
     Calculate values for the hardware multicast filter hash table.