Merge branch 'e1000-fixes' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik...
[pandora-kernel.git] / drivers / net / irda / ali-ircc.c
index bf1fca5..f9c889c 100644 (file)
@@ -146,7 +146,7 @@ static int __init ali_ircc_init(void)
 {
        ali_chip_t *chip;
        chipio_t info;
-       int ret = -ENODEV;
+       int ret;
        int cfg, cfg_base;
        int reg, revision;
        int i = 0;
@@ -160,6 +160,7 @@ static int __init ali_ircc_init(void)
                 return ret;
         }
 
+       ret = -ENODEV;
        
        /* Probe for all the ALi chipsets we know about */
        for (chip= chips; chip->name; chip++, i++) 
@@ -248,7 +249,7 @@ static void __exit ali_ircc_cleanup(void)
 
        IRDA_DEBUG(2, "%s(), ---------------- Start ----------------\n", __FUNCTION__); 
 
-       for (i=0; i < 4; i++) {
+       for (i=0; i < ARRAY_SIZE(dev_self); i++) {
                if (dev_self[i])
                        ali_ircc_close(dev_self[i]);
        }
@@ -272,6 +273,12 @@ static int ali_ircc_open(int i, chipio_t *info)
        int err;
                        
        IRDA_DEBUG(2, "%s(), ---------------- Start ----------------\n", __FUNCTION__); 
+
+       if (i >= ARRAY_SIZE(dev_self)) {
+               IRDA_ERROR("%s(), maximum number of supported chips reached!\n",
+                          __FUNCTION__);
+               return -ENOMEM;
+       }
        
        /* Set FIR FIFO and DMA Threshold */
        if ((ali_ircc_setup(info)) == -1)
@@ -653,22 +660,15 @@ static int ali_ircc_read_dongle_id (int i, chipio_t *info)
  *    An interrupt from the chip has arrived. Time to do some work
  *
  */
-static irqreturn_t ali_ircc_interrupt(int irq, void *dev_id,
-                                       struct pt_regs *regs)
+static irqreturn_t ali_ircc_interrupt(int irq, void *dev_id)
 {
-       struct net_device *dev = (struct net_device *) dev_id;
+       struct net_device *dev = dev_id;
        struct ali_ircc_cb *self;
        int ret;
                
        IRDA_DEBUG(2, "%s(), ---------------- Start ----------------\n", __FUNCTION__);
                
-       if (!dev) {
-               IRDA_WARNING("%s: irq %d for unknown device.\n",
-                            ALI_IRCC_DRIVER_NAME, irq);
-               return IRQ_NONE;
-       }       
-       
-       self = (struct ali_ircc_cb *) dev->priv;
+       self = dev->priv;
        
        spin_lock(&self->lock);
        
@@ -1472,9 +1472,8 @@ static int ali_ircc_fir_hard_xmit(struct sk_buff *skb, struct net_device *dev)
 
        self->stats.tx_bytes += skb->len;
 
-       memcpy(self->tx_fifo.queue[self->tx_fifo.free].start, skb->data, 
-              skb->len);
-       
+       skb_copy_from_linear_data(skb, self->tx_fifo.queue[self->tx_fifo.free].start,
+                     skb->len);
        self->tx_fifo.len++;
        self->tx_fifo.free++;
 
@@ -1924,7 +1923,7 @@ static int  ali_ircc_dma_receive_complete(struct ali_ircc_cb *self)
                        
                        /* Copy frame without CRC, CRC is removed by hardware*/
                        skb_put(skb, len);
-                       memcpy(skb->data, self->rx_buff.data, len);
+                       skb_copy_to_linear_data(skb, self->rx_buff.data, len);
 
                        /* Move to next frame */
                        self->rx_buff.data += len;
@@ -1932,7 +1931,7 @@ static int  ali_ircc_dma_receive_complete(struct ali_ircc_cb *self)
                        self->stats.rx_packets++;
 
                        skb->dev = self->netdev;
-                       skb->mac.raw  = skb->data;
+                       skb_reset_mac_header(skb);
                        skb->protocol = htons(ETH_P_IRDA);
                        netif_rx(skb);
                        self->netdev->last_rx = jiffies;