Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[safe/jmp/linux-2.6] / drivers / net / ariadne.c
index 2903191..39214e5 100644 (file)
@@ -40,7 +40,6 @@
 #include <linux/string.h>
 #include <linux/errno.h>
 #include <linux/ioport.h>
-#include <linux/slab.h>
 #include <linux/netdevice.h>
 #include <linux/etherdevice.h>
 #include <linux/interrupt.h>
@@ -115,16 +114,15 @@ struct lancedata {
 
 static int ariadne_open(struct net_device *dev);
 static void ariadne_init_ring(struct net_device *dev);
-static int ariadne_start_xmit(struct sk_buff *skb, struct net_device *dev);
+static netdev_tx_t 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);
 static int ariadne_close(struct net_device *dev);
 static struct net_device_stats *ariadne_get_stats(struct net_device *dev);
-#ifdef HAVE_MULTICAST
 static void set_multicast_list(struct net_device *dev);
-#endif
 
 
 static void memcpyw(volatile u_short *dest, u_short *src, int len)
@@ -147,6 +145,7 @@ static struct zorro_device_id ariadne_zorro_tbl[] __devinitdata = {
     { ZORRO_PROD_VILLAGE_TRONIC_ARIADNE },
     { 0 }
 };
+MODULE_DEVICE_TABLE(zorro, ariadne_zorro_tbl);
 
 static struct zorro_driver ariadne_driver = {
     .name      = "ariadne",
@@ -155,6 +154,18 @@ static struct zorro_driver ariadne_driver = {
     .remove    = __devexit_p(ariadne_remove_one),
 };
 
+static const struct net_device_ops ariadne_netdev_ops = {
+       .ndo_open               = ariadne_open,
+       .ndo_stop               = ariadne_close,
+       .ndo_start_xmit         = ariadne_start_xmit,
+       .ndo_tx_timeout         = ariadne_tx_timeout,
+       .ndo_get_stats          = ariadne_get_stats,
+       .ndo_set_multicast_list = set_multicast_list,
+       .ndo_validate_addr      = eth_validate_addr,
+       .ndo_change_mtu         = eth_change_mtu,
+       .ndo_set_mac_address    = eth_mac_addr,
+};
+
 static int __devinit ariadne_init_one(struct zorro_dev *z,
                                      const struct zorro_device_id *ent)
 {
@@ -197,13 +208,8 @@ static int __devinit ariadne_init_one(struct zorro_dev *z,
     dev->mem_start = ZTWO_VADDR(mem_start);
     dev->mem_end = dev->mem_start+ARIADNE_RAM_SIZE;
 
-    dev->open = &ariadne_open;
-    dev->stop = &ariadne_close;
-    dev->hard_start_xmit = &ariadne_start_xmit;
-    dev->tx_timeout = &ariadne_tx_timeout;
+    dev->netdev_ops = &ariadne_netdev_ops;
     dev->watchdog_timeo = 5*HZ;
-    dev->get_stats = &ariadne_get_stats;
-    dev->set_multicast_list = &set_multicast_list;
 
     err = register_netdev(dev);
     if (err) {
@@ -582,7 +588,8 @@ static void ariadne_tx_timeout(struct net_device *dev)
 }
 
 
-static int ariadne_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t ariadne_start_xmit(struct sk_buff *skb,
+                                     struct net_device *dev)
 {
     struct ariadne_private *priv = netdev_priv(dev);
     volatile struct Am79C960 *lance = (struct Am79C960*)dev->base_addr;
@@ -603,7 +610,7 @@ static int ariadne_start_xmit(struct sk_buff *skb, struct net_device *dev)
     if (skb->len < ETH_ZLEN)
     {
        if (skb_padto(skb, ETH_ZLEN))
-           return 0;
+           return NETDEV_TX_OK;
        len = ETH_ZLEN;
     }
 
@@ -670,15 +677,13 @@ static int ariadne_start_xmit(struct sk_buff *skb, struct net_device *dev)
     lance->RAP = CSR0;         /* PCnet-ISA Controller Status */
     lance->RDP = INEA|TDMD;
 
-    dev->trans_start = jiffies;
-
     if (lowb(priv->tx_ring[(entry+1) % TX_RING_SIZE]->TMD1) != 0) {
        netif_stop_queue(dev);
        priv->tx_full = 1;
     }
     local_irq_restore(flags);
 
-    return 0;
+    return NETDEV_TX_OK;
 }
 
 
@@ -753,7 +758,6 @@ static int ariadne_rx(struct net_device *dev)
 #endif
 
            netif_rx(skb);
-           dev->last_rx = jiffies;
            dev->stats.rx_packets++;
            dev->stats.rx_bytes += pkt_len;
        }
@@ -813,7 +817,7 @@ static void set_multicast_list(struct net_device *dev)
        lance->RDP = PROM;              /* Set promiscuous mode */
     } else {
        short multicast_table[4];
-       int num_addrs = dev->mc_count;
+       int num_addrs = netdev_mc_count(dev);
        int i;
        /* We don't use the multicast table, but rely on upper-layer filtering. */
        memset(multicast_table, (num_addrs == 0) ? 0 : -1,