USB: fix locking in idmouse
[safe/jmp/linux-2.6] / drivers / net / ariadne.c
index 9fe93ac..10f3a19 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  Amiga Linux/m68k Ariadne Ethernet Driver
  *
- *  © Copyright 1995-2003 by Geert Uytterhoeven (geert@linux-m68k.org)
+ *  Â© Copyright 1995-2003 by Geert Uytterhoeven (geert@linux-m68k.org)
  *                          Peter De Schrijver (p2@mind.be)
  *
  *  ---------------------------------------------------------------------------
@@ -120,7 +120,7 @@ static int ariadne_start_xmit(struct sk_buff *skb, struct net_device *dev);
 static void ariadne_tx_timeout(struct net_device *dev);
 static int ariadne_rx(struct net_device *dev);
 static void ariadne_reset(struct net_device *dev);
-static irqreturn_t ariadne_interrupt(int irq, void *data, struct pt_regs *fp);
+static irqreturn_t ariadne_interrupt(int irq, void *data);
 static int ariadne_close(struct net_device *dev);
 static struct net_device_stats *ariadne_get_stats(struct net_device *dev);
 #ifdef HAVE_MULTICAST
@@ -166,6 +166,7 @@ static int __devinit ariadne_init_one(struct zorro_dev *z,
     struct net_device *dev;
     struct ariadne_private *priv;
     int err;
+    DECLARE_MAC_BUF(mac);
 
     r1 = request_mem_region(base_addr, sizeof(struct Am79C960), "Am79C960");
     if (!r1)
@@ -183,7 +184,6 @@ static int __devinit ariadne_init_one(struct zorro_dev *z,
        return -ENOMEM;
     }
 
-    SET_MODULE_OWNER(dev);
     priv = netdev_priv(dev);
 
     r1->name = dev->name;
@@ -217,9 +217,8 @@ static int __devinit ariadne_init_one(struct zorro_dev *z,
     zorro_set_drvdata(z, dev);
 
     printk(KERN_INFO "%s: Ariadne at 0x%08lx, Ethernet Address "
-          "%02x:%02x:%02x:%02x:%02x:%02x\n", dev->name, board,
-          dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2],
-          dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]);
+          "%s\n", dev->name, board,
+          print_mac(mac, dev->dev_addr));
 
     return 0;
 }
@@ -320,7 +319,7 @@ static int ariadne_open(struct net_device *dev)
 
     netif_start_queue(dev);
 
-    i = request_irq(IRQ_AMIGA_PORTS, ariadne_interrupt, SA_SHIRQ,
+    i = request_irq(IRQ_AMIGA_PORTS, ariadne_interrupt, IRQF_SHARED,
                     dev->name, dev);
     if (i) return i;
 
@@ -416,7 +415,7 @@ static inline void ariadne_reset(struct net_device *dev)
 }
 
 
-static irqreturn_t ariadne_interrupt(int irq, void *data, struct pt_regs *fp)
+static irqreturn_t ariadne_interrupt(int irq, void *data)
 {
     struct net_device *dev = (struct net_device *)data;
     volatile struct Am79C960 *lance = (struct Am79C960*)dev->base_addr;
@@ -607,8 +606,7 @@ static int ariadne_start_xmit(struct sk_buff *skb, struct net_device *dev)
     /* FIXME: is the 79C960 new enough to do its own padding right ? */
     if (skb->len < ETH_ZLEN)
     {
-       skb = skb_padto(skb, ETH_ZLEN);
-       if (skb == NULL)
+       if (skb_padto(skb, ETH_ZLEN))
            return 0;
        len = ETH_ZLEN;
     }
@@ -616,21 +614,17 @@ static int ariadne_start_xmit(struct sk_buff *skb, struct net_device *dev)
     /* Fill in a Tx ring entry */
 
 #if 0
-    printk(KERN_DEBUG "TX pkt type 0x%04x from ", ((u_short *)skb->data)[6]);
-    {
-       int i;
-       u_char *ptr = &((u_char *)skb->data)[6];
-       for (i = 0; i < 6; i++)
-           printk("%02x", ptr[i]);
-    }
-    printk(" to ");
-    {
-       int i;
-       u_char *ptr = (u_char *)skb->data;
-       for (i = 0; i < 6; i++)
-           printk("%02x", ptr[i]);
-    }
-    printk(" data 0x%08x len %d\n", (int)skb->data, (int)skb->len);
+{
+    DECLARE_MAC_BUF(mac);
+    DECLARE_MAC_BUF(mac2);
+
+    printk(KERN_DEBUG "TX pkt type 0x%04x from %s to %s "
+          " data 0x%08x len %d\n",
+          ((u_short *)skb->data)[6],
+          print_mac(mac, ((const u8 *)skb->data)+6),
+          print_mac(mac, (const u8 *)skb->data),
+          (int)skb->data, (int)skb->len);
+}
 #endif
 
     local_irq_save(flags);
@@ -678,6 +672,7 @@ static int ariadne_start_xmit(struct sk_buff *skb, struct net_device *dev)
        priv->cur_tx -= TX_RING_SIZE;
        priv->dirty_tx -= TX_RING_SIZE;
     }
+    priv->stats.tx_bytes += len;
 
     /* Trigger an immediate send poll. */
     lance->RAP = CSR0;         /* PCnet-ISA Controller Status */
@@ -744,28 +739,27 @@ static int ariadne_rx(struct net_device *dev)
            }
 
 
-           skb->dev = dev;
            skb_reserve(skb,2);         /* 16 byte align */
            skb_put(skb,pkt_len);       /* Make room */
-           eth_copy_and_sum(skb, (char *)priv->rx_buff[entry], pkt_len,0);
+           skb_copy_to_linear_data(skb, (char *)priv->rx_buff[entry], pkt_len);
            skb->protocol=eth_type_trans(skb,dev);
 #if 0
+{
+           DECLARE_MAC_BUF(mac);
+
            printk(KERN_DEBUG "RX pkt type 0x%04x from ",
                   ((u_short *)skb->data)[6]);
            {
-               int i;
                u_char *ptr = &((u_char *)skb->data)[6];
-               for (i = 0; i < 6; i++)
-                   printk("%02x", ptr[i]);
+               printk("%s", print_mac(mac, ptr));
            }
            printk(" to ");
            {
-               int i;
                u_char *ptr = (u_char *)skb->data;
-               for (i = 0; i < 6; i++)
-                   printk("%02x", ptr[i]);
+               printk("%s", print_mac(mac, ptr));
            }
            printk(" data 0x%08x len %d\n", (int)skb->data, (int)skb->len);
+}
 #endif
 
            netif_rx(skb);
@@ -826,8 +820,6 @@ static void set_multicast_list(struct net_device *dev)
     ariadne_init_ring(dev);
 
     if (dev->flags & IFF_PROMISC) {
-       /* Log any net taps. */
-       printk(KERN_INFO "%s: Promiscuous mode enabled.\n", dev->name);
        lance->RAP = CSR15;             /* Mode Register */
        lance->RDP = PROM;              /* Set promiscuous mode */
     } else {
@@ -864,7 +856,7 @@ static void __devexit ariadne_remove_one(struct zorro_dev *z)
 
 static int __init ariadne_init_module(void)
 {
-    return zorro_module_init(&ariadne_driver);
+    return zorro_register_driver(&ariadne_driver);
 }
 
 static void __exit ariadne_cleanup_module(void)