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

Commit 6fb7298c authored by Stephen Hemminger's avatar Stephen Hemminger Committed by David S. Miller
Browse files

smc91c92: convert to internal net_device_stats

parent 0cd6e828
Loading
Loading
Loading
Loading
+22 −34
Original line number Diff line number Diff line
@@ -108,7 +108,7 @@ struct smc_private {
    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;
@@ -289,7 +289,6 @@ static void smc_tx_timeout(struct net_device *dev);
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);
@@ -337,7 +336,6 @@ static int smc91c92_probe(struct pcmcia_device *link)

    /* 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;
@@ -1291,7 +1289,7 @@ static void smc_hardware_send_packet(struct net_device * dev)
	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 */
@@ -1340,7 +1338,7 @@ static void smc_tx_timeout(struct net_device *dev)
    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;
@@ -1362,7 +1360,7 @@ static int smc_start_xmit(struct sk_buff *skb, struct net_device *dev)

    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;
@@ -1375,7 +1373,7 @@ static int smc_start_xmit(struct sk_buff *skb, struct net_device *dev)
	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. */
@@ -1433,11 +1431,11 @@ static void smc_tx_err(struct net_device * dev)

    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++;
    }

@@ -1474,10 +1472,10 @@ static void smc_eph_irq(struct net_device *dev)
    /* 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 */
@@ -1551,7 +1549,7 @@ static irqreturn_t smc_interrupt(int irq, void *dev_id)
	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) {
@@ -1567,8 +1565,8 @@ static irqreturn_t smc_interrupt(int irq, void *dev_id)
	    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);
@@ -1618,7 +1616,6 @@ static irqreturn_t smc_interrupt(int irq, void *dev_id)

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
@@ -1649,7 +1646,7 @@ static void smc_rx(struct net_device *dev)
	
	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;
	}
@@ -1662,18 +1659,18 @@ static void smc_rx(struct net_device *dev)
	
	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);
@@ -1681,15 +1678,6 @@ static void smc_rx(struct net_device *dev)
    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.