vxge: Fixes in isr routine
[safe/jmp/linux-2.6] / drivers / net / irda / ali-ircc.c
index 2ff1818..7098357 100644 (file)
@@ -109,7 +109,6 @@ static int  ali_ircc_net_open(struct net_device *dev);
 static int  ali_ircc_net_close(struct net_device *dev);
 static int  ali_ircc_net_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 static void ali_ircc_change_speed(struct ali_ircc_cb *self, __u32 baud);
-static struct net_device_stats *ali_ircc_net_get_stats(struct net_device *dev);
 
 /* SIR function */
 static int  ali_ircc_sir_hard_xmit(struct sk_buff *skb, struct net_device *dev);
@@ -260,6 +259,20 @@ static void __exit ali_ircc_cleanup(void)
        IRDA_DEBUG(2, "%s(), ----------------- End -----------------\n", __func__);
 }
 
+static const struct net_device_ops ali_ircc_sir_ops = {
+       .ndo_open       = ali_ircc_net_open,
+       .ndo_stop       = ali_ircc_net_close,
+       .ndo_start_xmit = ali_ircc_sir_hard_xmit,
+       .ndo_do_ioctl   = ali_ircc_net_ioctl,
+};
+
+static const struct net_device_ops ali_ircc_fir_ops = {
+       .ndo_open       = ali_ircc_net_open,
+       .ndo_stop       = ali_ircc_net_close,
+       .ndo_start_xmit = ali_ircc_fir_hard_xmit,
+       .ndo_do_ioctl   = ali_ircc_net_ioctl,
+};
+
 /*
  * Function ali_ircc_open (int i, chipio_t *inf)
  *
@@ -292,7 +305,7 @@ static int ali_ircc_open(int i, chipio_t *info)
                return -ENOMEM;
        }
 
-       self = dev->priv;
+       self = netdev_priv(dev);
        self->netdev = dev;
        spin_lock_init(&self->lock);
    
@@ -362,11 +375,7 @@ static int ali_ircc_open(int i, chipio_t *info)
        self->tx_fifo.tail = self->tx_buff.head;
 
        /* Override the network functions we need to use */
-       dev->hard_start_xmit = ali_ircc_sir_hard_xmit;
-       dev->open            = ali_ircc_net_open;
-       dev->stop            = ali_ircc_net_close;
-       dev->do_ioctl        = ali_ircc_net_ioctl;
-       dev->get_stats       = ali_ircc_net_get_stats;
+       dev->netdev_ops = &ali_ircc_sir_ops;
 
        err = register_netdev(dev);
        if (err) {
@@ -665,7 +674,7 @@ static irqreturn_t ali_ircc_interrupt(int irq, void *dev_id)
                
        IRDA_DEBUG(2, "%s(), ---------------- Start ----------------\n", __func__);
                
-       self = dev->priv;
+       self = netdev_priv(dev);
        
        spin_lock(&self->lock);
        
@@ -876,7 +885,7 @@ static void ali_ircc_sir_receive(struct ali_ircc_cb *self)
          * async_unwrap_char will deliver all found frames  
         */
        do {
-               async_unwrap_char(self->netdev, &self->stats, &self->rx_buff, 
+               async_unwrap_char(self->netdev, &self->netdev->stats, &self->rx_buff,
                                  inb(iobase+UART_RX));
 
                /* Make sure we don't stay here too long */
@@ -943,7 +952,7 @@ static void ali_ircc_sir_write_wakeup(struct ali_ircc_cb *self)
                        netif_wake_queue(self->netdev); 
                }
                        
-               self->stats.tx_packets++;
+               self->netdev->stats.tx_packets++;
                
                /* Turn on receive interrupts */
                outb(UART_IER_RDI, iobase+UART_IER);
@@ -976,7 +985,7 @@ static void ali_ircc_change_speed(struct ali_ircc_cb *self, __u32 baud)
                ali_ircc_fir_change_speed(self, baud);                  
                
                /* Install FIR xmit handler*/
-               dev->hard_start_xmit = ali_ircc_fir_hard_xmit;          
+               dev->netdev_ops = &ali_ircc_fir_ops;
                                
                /* Enable Interuupt */
                self->ier = IER_EOM; // benjamin 2000/11/20 07:24PM                                     
@@ -990,7 +999,7 @@ static void ali_ircc_change_speed(struct ali_ircc_cb *self, __u32 baud)
                ali_ircc_sir_change_speed(self, baud);
                                
                /* Install SIR xmit handler*/
-               dev->hard_start_xmit = ali_ircc_sir_hard_xmit;
+               dev->netdev_ops = &ali_ircc_sir_ops;
        }
        
                
@@ -1333,7 +1342,7 @@ static int ali_ircc_net_open(struct net_device *dev)
        
        IRDA_ASSERT(dev != NULL, return -1;);
        
-       self = (struct ali_ircc_cb *) dev->priv;
+       self = netdev_priv(dev);
        
        IRDA_ASSERT(self != NULL, return 0;);
        
@@ -1396,7 +1405,7 @@ static int ali_ircc_net_close(struct net_device *dev)
                
        IRDA_ASSERT(dev != NULL, return -1;);
 
-       self = (struct ali_ircc_cb *) dev->priv;
+       self = netdev_priv(dev);
        IRDA_ASSERT(self != NULL, return 0;);
 
        /* Stop device */
@@ -1436,7 +1445,7 @@ static int ali_ircc_fir_hard_xmit(struct sk_buff *skb, struct net_device *dev)
        
        IRDA_DEBUG(1, "%s(), ---------------- Start -----------------\n", __func__ );
        
-       self = (struct ali_ircc_cb *) dev->priv;
+       self = netdev_priv(dev);
        iobase = self->io.fir_base;
 
        netif_stop_queue(dev);
@@ -1457,7 +1466,7 @@ static int ali_ircc_fir_hard_xmit(struct sk_buff *skb, struct net_device *dev)
                        dev->trans_start = jiffies;
                        spin_unlock_irqrestore(&self->lock, flags);
                        dev_kfree_skb(skb);
-                       return 0;
+                       return NETDEV_TX_OK;
                } else
                        self->new_speed = speed;
        }
@@ -1467,7 +1476,7 @@ static int ali_ircc_fir_hard_xmit(struct sk_buff *skb, struct net_device *dev)
        self->tx_fifo.queue[self->tx_fifo.free].len = skb->len;
        self->tx_fifo.tail += skb->len;
 
-       self->stats.tx_bytes += skb->len;
+       dev->stats.tx_bytes += skb->len;
 
        skb_copy_from_linear_data(skb, self->tx_fifo.queue[self->tx_fifo.free].start,
                      skb->len);
@@ -1568,7 +1577,7 @@ static int ali_ircc_fir_hard_xmit(struct sk_buff *skb, struct net_device *dev)
        dev_kfree_skb(skb);
 
        IRDA_DEBUG(1, "%s(), ----------------- End ------------------\n", __func__ );
-       return 0;       
+       return NETDEV_TX_OK;    
 }
 
 
@@ -1661,12 +1670,12 @@ static int  ali_ircc_dma_xmit_complete(struct ali_ircc_cb *self)
        
        {
                IRDA_ERROR("%s(), ********* LSR_FRAME_ABORT *********\n", __func__);
-               self->stats.tx_errors++;
-               self->stats.tx_fifo_errors++;           
+               self->netdev->stats.tx_errors++;
+               self->netdev->stats.tx_fifo_errors++;
        }
        else 
        {
-               self->stats.tx_packets++;
+               self->netdev->stats.tx_packets++;
        }
 
        /* Check if we need to change the speed */
@@ -1831,35 +1840,35 @@ static int  ali_ircc_dma_receive_complete(struct ali_ircc_cb *self)
                        IRDA_DEBUG(0,"%s(), ************* RX Errors ************ \n", __func__ );
                        
                        /* Skip frame */
-                       self->stats.rx_errors++;
+                       self->netdev->stats.rx_errors++;
                        
                        self->rx_buff.data += len;
                        
                        if (status & LSR_FIFO_UR) 
                        {
-                               self->stats.rx_frame_errors++;
+                               self->netdev->stats.rx_frame_errors++;
                                IRDA_DEBUG(0,"%s(), ************* FIFO Errors ************ \n", __func__ );
                        }       
                        if (status & LSR_FRAME_ERROR)
                        {
-                               self->stats.rx_frame_errors++;
+                               self->netdev->stats.rx_frame_errors++;
                                IRDA_DEBUG(0,"%s(), ************* FRAME Errors ************ \n", __func__ );
                        }
                                                        
                        if (status & LSR_CRC_ERROR) 
                        {
-                               self->stats.rx_crc_errors++;
+                               self->netdev->stats.rx_crc_errors++;
                                IRDA_DEBUG(0,"%s(), ************* CRC Errors ************ \n", __func__ );
                        }
                        
                        if(self->rcvFramesOverflow)
                        {
-                               self->stats.rx_frame_errors++;
+                               self->netdev->stats.rx_frame_errors++;
                                IRDA_DEBUG(0,"%s(), ************* Overran DMA buffer ************ \n", __func__ );
                        }
                        if(len == 0)
                        {
-                               self->stats.rx_frame_errors++;
+                               self->netdev->stats.rx_frame_errors++;
                                IRDA_DEBUG(0,"%s(), ********** Receive Frame Size = 0 ********* \n", __func__ );
                        }
                }        
@@ -1910,7 +1919,7 @@ static int  ali_ircc_dma_receive_complete(struct ali_ircc_cb *self)
                                IRDA_WARNING("%s(), memory squeeze, "
                                             "dropping frame.\n",
                                             __func__);
-                               self->stats.rx_dropped++;
+                               self->netdev->stats.rx_dropped++;
 
                                return FALSE;
                        }
@@ -1924,14 +1933,13 @@ static int  ali_ircc_dma_receive_complete(struct ali_ircc_cb *self)
 
                        /* Move to next frame */
                        self->rx_buff.data += len;
-                       self->stats.rx_bytes += len;
-                       self->stats.rx_packets++;
+                       self->netdev->stats.rx_bytes += len;
+                       self->netdev->stats.rx_packets++;
 
                        skb->dev = self->netdev;
                        skb_reset_mac_header(skb);
                        skb->protocol = htons(ETH_P_IRDA);
                        netif_rx(skb);
-                       self->netdev->last_rx = jiffies;
                }
        }
        
@@ -1960,7 +1968,7 @@ static int ali_ircc_sir_hard_xmit(struct sk_buff *skb, struct net_device *dev)
        
        IRDA_ASSERT(dev != NULL, return 0;);
        
-       self = (struct ali_ircc_cb *) dev->priv;
+       self = netdev_priv(dev);
        IRDA_ASSERT(self != NULL, return 0;);
 
        iobase = self->io.sir_base;
@@ -1983,7 +1991,7 @@ static int ali_ircc_sir_hard_xmit(struct sk_buff *skb, struct net_device *dev)
                        dev->trans_start = jiffies;
                        spin_unlock_irqrestore(&self->lock, flags);
                        dev_kfree_skb(skb);
-                       return 0;
+                       return NETDEV_TX_OK;
                } else
                        self->new_speed = speed;
        }
@@ -1995,7 +2003,7 @@ static int ali_ircc_sir_hard_xmit(struct sk_buff *skb, struct net_device *dev)
        self->tx_buff.len = async_wrap_skb(skb, self->tx_buff.data, 
                                           self->tx_buff.truesize);
        
-       self->stats.tx_bytes += self->tx_buff.len;
+       self->netdev->stats.tx_bytes += self->tx_buff.len;
 
        /* Turn on transmit finished interrupt. Will fire immediately!  */
        outb(UART_IER_THRI, iobase+UART_IER); 
@@ -2007,7 +2015,7 @@ static int ali_ircc_sir_hard_xmit(struct sk_buff *skb, struct net_device *dev)
        
        IRDA_DEBUG(2, "%s(), ----------------- End ------------------\n", __func__ );
        
-       return 0;       
+       return NETDEV_TX_OK;    
 }
 
 
@@ -2028,7 +2036,7 @@ static int ali_ircc_net_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
        
        IRDA_ASSERT(dev != NULL, return -1;);
 
-       self = dev->priv;
+       self = netdev_priv(dev);
 
        IRDA_ASSERT(self != NULL, return -1;);
 
@@ -2112,17 +2120,6 @@ static int ali_ircc_is_receiving(struct ali_ircc_cb *self)
        return status;
 }
 
-static struct net_device_stats *ali_ircc_net_get_stats(struct net_device *dev)
-{
-       struct ali_ircc_cb *self = (struct ali_ircc_cb *) dev->priv;
-       
-       IRDA_DEBUG(2, "%s(), ---------------- Start ----------------\n", __func__ );
-               
-       IRDA_DEBUG(2, "%s(), ----------------- End ------------------\n", __func__ );
-       
-       return &self->stats;
-}
-
 static int ali_ircc_suspend(struct platform_device *dev, pm_message_t state)
 {
        struct ali_ircc_cb *self = platform_get_drvdata(dev);