]> err.no Git - linux-2.6/blobdiff - drivers/net/wan/pc300_drv.c
qla3xxx: driver version change.
[linux-2.6] / drivers / net / wan / pc300_drv.c
index 57914fbd41d370c15df6c2a9531a069a77731166..334170527755033bfadf32bb490a7f67d036b626 100644 (file)
@@ -285,7 +285,6 @@ static void rx_dma_buf_init(pc300_t *, int);
 static void tx_dma_buf_check(pc300_t *, int);
 static void rx_dma_buf_check(pc300_t *, int);
 static irqreturn_t cpc_intr(int, void *);
-static struct net_device_stats *cpc_get_stats(struct net_device *);
 static int clock_rate_calc(uclong, uclong, int *);
 static uclong detect_ram(pc300_t *);
 static void plx_init(pc300_t *);
@@ -1775,13 +1774,12 @@ static void cpc_tx_timeout(struct net_device *dev)
        pc300dev_t *d = (pc300dev_t *) dev->priv;
        pc300ch_t *chan = (pc300ch_t *) d->chan;
        pc300_t *card = (pc300_t *) chan->card;
-       struct net_device_stats *stats = hdlc_stats(dev);
        int ch = chan->channel;
        unsigned long flags;
        ucchar ilar;
 
-       stats->tx_errors++;
-       stats->tx_aborted_errors++;
+       dev->stats.tx_errors++;
+       dev->stats.tx_aborted_errors++;
        CPC_LOCK(card, flags);
        if ((ilar = cpc_readb(card->hw.scabase + ILAR)) != 0) {
                printk("%s: ILAR=0x%x\n", dev->name, ilar);
@@ -1803,7 +1801,6 @@ static int cpc_queue_xmit(struct sk_buff *skb, struct net_device *dev)
        pc300dev_t *d = (pc300dev_t *) dev->priv;
        pc300ch_t *chan = (pc300ch_t *) d->chan;
        pc300_t *card = (pc300_t *) chan->card;
-       struct net_device_stats *stats = hdlc_stats(dev);
        int ch = chan->channel;
        unsigned long flags;
 #ifdef PC300_DEBUG_TX
@@ -1817,13 +1814,13 @@ static int cpc_queue_xmit(struct sk_buff *skb, struct net_device *dev)
        } else if (!netif_carrier_ok(dev)) {
                /* DCD must be OFF: drop packet */
                dev_kfree_skb(skb);
-               stats->tx_errors++;
-               stats->tx_carrier_errors++;
+               dev->stats.tx_errors++;
+               dev->stats.tx_carrier_errors++;
                return 0;
        } else if (cpc_readb(card->hw.scabase + M_REG(ST3, ch)) & ST3_DCD) {
                printk("%s: DCD is OFF. Going administrative down.\n", dev->name);
-               stats->tx_errors++;
-               stats->tx_carrier_errors++;
+               dev->stats.tx_errors++;
+               dev->stats.tx_carrier_errors++;
                dev_kfree_skb(skb);
                netif_carrier_off(dev);
                CPC_LOCK(card, flags);
@@ -1843,8 +1840,8 @@ static int cpc_queue_xmit(struct sk_buff *skb, struct net_device *dev)
 //             printk("%s: write error. Dropping TX packet.\n", dev->name);
                netif_stop_queue(dev);
                dev_kfree_skb(skb);
-               stats->tx_errors++;
-               stats->tx_dropped++;
+               dev->stats.tx_errors++;
+               dev->stats.tx_dropped++;
                return 0;
        }
 #ifdef PC300_DEBUG_TX
@@ -1886,7 +1883,6 @@ static void cpc_net_rx(struct net_device *dev)
        pc300dev_t *d = (pc300dev_t *) dev->priv;
        pc300ch_t *chan = (pc300ch_t *) d->chan;
        pc300_t *card = (pc300_t *) chan->card;
-       struct net_device_stats *stats = hdlc_stats(dev);
        int ch = chan->channel;
 #ifdef PC300_DEBUG_RX
        int i;
@@ -1922,24 +1918,24 @@ static void cpc_net_rx(struct net_device *dev)
 #endif
                        if ((skb == NULL) && (rxb > 0)) {
                                /* rxb > dev->mtu */
-                               stats->rx_errors++;
-                               stats->rx_length_errors++;
+                               dev->stats.rx_errors++;
+                               dev->stats.rx_length_errors++;
                                continue;
                        }
 
                        if (rxb < 0) {  /* Invalid frame */
                                rxb = -rxb;
                                if (rxb & DST_OVR) {
-                                       stats->rx_errors++;
-                                       stats->rx_fifo_errors++;
+                                       dev->stats.rx_errors++;
+                                       dev->stats.rx_fifo_errors++;
                                }
                                if (rxb & DST_CRC) {
-                                       stats->rx_errors++;
-                                       stats->rx_crc_errors++;
+                                       dev->stats.rx_errors++;
+                                       dev->stats.rx_crc_errors++;
                                }
                                if (rxb & (DST_RBIT | DST_SHRT | DST_ABT)) {
-                                       stats->rx_errors++;
-                                       stats->rx_frame_errors++;
+                                       dev->stats.rx_errors++;
+                                       dev->stats.rx_frame_errors++;
                                }
                        }
                        if (skb) {
@@ -1948,7 +1944,7 @@ static void cpc_net_rx(struct net_device *dev)
                        continue;
                }
 
-               stats->rx_bytes += rxb;
+               dev->stats.rx_bytes += rxb;
 
 #ifdef PC300_DEBUG_RX
                printk("%s R:", dev->name);
@@ -1959,7 +1955,7 @@ static void cpc_net_rx(struct net_device *dev)
                if (d->trace_on) {
                        cpc_trace(dev, skb, 'R');
                }
-               stats->rx_packets++;
+               dev->stats.rx_packets++;
                skb->protocol = hdlc_type_trans(skb, dev);
                netif_rx(skb);
        }
@@ -1974,16 +1970,15 @@ static void sca_tx_intr(pc300dev_t *dev)
        pc300_t *card = (pc300_t *)chan->card; 
        int ch = chan->channel; 
        volatile pcsca_bd_t __iomem * ptdescr; 
-       struct net_device_stats *stats = hdlc_stats(dev->dev);
 
     /* Clean up descriptors from previous transmission */
        ptdescr = (card->hw.rambase +
                                                TX_BD_ADDR(ch,chan->tx_first_bd));
-       while ((cpc_readl(card->hw.scabase + DTX_REG(CDAL,ch)) != 
-                                                       TX_BD_ADDR(ch,chan->tx_first_bd)) && 
-                       (cpc_readb(&ptdescr->status) & DST_OSB)) {
-               stats->tx_packets++;
-               stats->tx_bytes += cpc_readw(&ptdescr->len);
+       while ((cpc_readl(card->hw.scabase + DTX_REG(CDAL,ch)) !=
+               TX_BD_ADDR(ch,chan->tx_first_bd)) &&
+              (cpc_readb(&ptdescr->status) & DST_OSB)) {
+               dev->dev->stats.tx_packets++;
+               dev->dev->stats.tx_bytes += cpc_readw(&ptdescr->len);
                cpc_writeb(&ptdescr->status, DST_OSB);
                cpc_writew(&ptdescr->len, 0);
                chan->nfree_tx_bd++;
@@ -2048,8 +2043,8 @@ static void sca_intr(pc300_t * card)
                                                        }
                                                        cpc_net_rx(dev);
                                                        /* Discard invalid frames */
-                                                       hdlc_stats(dev)->rx_errors++;
-                                                       hdlc_stats(dev)->rx_over_errors++;
+                                                       dev->stats.rx_errors++;
+                                                       dev->stats.rx_over_errors++;
                                                        chan->rx_first_bd = 0;
                                                        chan->rx_last_bd = N_DMA_RX_BUF - 1;
                                                        rx_dma_start(card, ch);
@@ -2115,8 +2110,8 @@ static void sca_intr(pc300_t * card)
                                                                                   card->hw.cpld_reg2) &
                                                                   ~ (CPLD_REG2_FALC_LED1 << (2 * ch)));
                                                }
-                                               hdlc_stats(dev)->tx_errors++;
-                                               hdlc_stats(dev)->tx_fifo_errors++;
+                                               dev->stats.tx_errors++;
+                                               dev->stats.tx_fifo_errors++;
                                                sca_tx_intr(d);
                                        }
                                }
@@ -2604,7 +2599,7 @@ static int cpc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
                case SIOCGPC300UTILSTATS:
                        {
                                if (!arg) {     /* clear statistics */
-                                       memset(hdlc_stats(dev), 0, sizeof(struct net_device_stats));
+                                       memset(&dev->stats, 0, sizeof(dev->stats));
                                        if (card->hw.type == PC300_TE) {
                                                memset(&chan->falc, 0, sizeof(falc_t));
                                        }
@@ -2615,8 +2610,8 @@ static int cpc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
                                        pc300stats.hw_type = card->hw.type;
                                        pc300stats.line_on = card->chan[ch].d.line_on;
                                        pc300stats.line_off = card->chan[ch].d.line_off;
-                                       memcpy(&pc300stats.gen_stats, hdlc_stats(dev),
-                                              sizeof(struct net_device_stats));
+                                       memcpy(&pc300stats.gen_stats, &dev->stats,
+                                              sizeof(dev->stats));
                                        if (card->hw.type == PC300_TE)
                                                memcpy(&pc300stats.te_stats,&chan->falc,sizeof(falc_t));
                                        if (copy_to_user(arg, &pc300stats, sizeof(pc300stats_t)))
@@ -2823,11 +2818,6 @@ static int cpc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
        }
 }
 
-static struct net_device_stats *cpc_get_stats(struct net_device *dev)
-{
-       return hdlc_stats(dev);
-}
-
 static int clock_rate_calc(uclong rate, uclong clock, int *br_io)
 {
        int br, tc;
@@ -3394,7 +3384,6 @@ static void cpc_init_card(pc300_t * card)
                dev->stop = cpc_close;
                dev->tx_timeout = cpc_tx_timeout;
                dev->watchdog_timeo = PC300_TX_TIMEOUT;
-               dev->get_stats = cpc_get_stats;
                dev->set_multicast_list = NULL;
                dev->set_mac_address = NULL;
                dev->change_mtu = cpc_change_mtu;