sky2: Refactor sky2_up into two functions
[safe/jmp/linux-2.6] / drivers / net / eth16i.c
index 243fc6b..d3abeee 100644 (file)
@@ -170,7 +170,6 @@ static char *version =
 
 
 /* Few macros */
-#define BIT(a)                ( (1 << (a)) )
 #define BITSET(ioaddr, bnum)   ((outb(((inb(ioaddr)) | (bnum)), ioaddr)))
 #define BITCLR(ioaddr, bnum)   ((outb(((inb(ioaddr)) & (~(bnum))), ioaddr)))
 
@@ -406,7 +405,7 @@ static int     eth16i_read_eeprom_word(int ioaddr);
 static void    eth16i_eeprom_cmd(int ioaddr, unsigned char command);
 static int     eth16i_open(struct net_device *dev);
 static int     eth16i_close(struct net_device *dev);
-static int     eth16i_tx(struct sk_buff *skb, struct net_device *dev);
+static netdev_tx_t eth16i_tx(struct sk_buff *skb, struct net_device *dev);
 static void    eth16i_rx(struct net_device *dev);
 static void    eth16i_timeout(struct net_device *dev);
 static irqreturn_t eth16i_interrupt(int irq, void *dev_id);
@@ -476,6 +475,17 @@ out:
 }
 #endif
 
+static const struct net_device_ops eth16i_netdev_ops = {
+       .ndo_open               = eth16i_open,
+       .ndo_stop               = eth16i_close,
+       .ndo_start_xmit         = eth16i_tx,
+       .ndo_set_multicast_list = eth16i_multicast,
+       .ndo_tx_timeout         = eth16i_timeout,
+       .ndo_change_mtu         = eth_change_mtu,
+       .ndo_set_mac_address    = eth_mac_addr,
+       .ndo_validate_addr      = eth_validate_addr,
+};
+
 static int __init eth16i_probe1(struct net_device *dev, int ioaddr)
 {
        struct eth16i_local *lp = netdev_priv(dev);
@@ -550,12 +560,7 @@ static int __init eth16i_probe1(struct net_device *dev, int ioaddr)
        BITCLR(ioaddr + CONFIG_REG_1, POWERUP);
 
        /* Initialize the device structure */
-       memset(lp, 0, sizeof(struct eth16i_local));
-       dev->open               = eth16i_open;
-       dev->stop               = eth16i_close;
-       dev->hard_start_xmit    = eth16i_tx;
-       dev->set_multicast_list = eth16i_multicast;
-       dev->tx_timeout         = eth16i_timeout;
+       dev->netdev_ops         = &eth16i_netdev_ops;
        dev->watchdog_timeo     = TX_TIMEOUT;
        spin_lock_init(&lp->lock);
 
@@ -1048,7 +1053,7 @@ static void eth16i_timeout(struct net_device *dev)
        netif_wake_queue(dev);
 }
 
-static int eth16i_tx(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t eth16i_tx(struct sk_buff *skb, struct net_device *dev)
 {
        struct eth16i_local *lp = netdev_priv(dev);
        int ioaddr = dev->base_addr;
@@ -1059,7 +1064,7 @@ static int eth16i_tx(struct sk_buff *skb, struct net_device *dev)
 
        if (length < ETH_ZLEN) {
                if (skb_padto(skb, ETH_ZLEN))
-                       return 0;
+                       return NETDEV_TX_OK;
                length = ETH_ZLEN;
        }
        buf = skb->data;
@@ -1121,7 +1126,7 @@ static int eth16i_tx(struct sk_buff *skb, struct net_device *dev)
        /* outb(TX_INTR_DONE | TX_INTR_16_COL, ioaddr + TX_INTR_REG); */
        status = 0;
        dev_kfree_skb(skb);
-       return 0;
+       return NETDEV_TX_OK;
 }
 
 static void eth16i_rx(struct net_device *dev)
@@ -1206,7 +1211,6 @@ static void eth16i_rx(struct net_device *dev)
                                printk(KERN_DEBUG ".\n");
                        }
                        netif_rx(skb);
-                       dev->last_rx = jiffies;
                        dev->stats.rx_packets++;
                        dev->stats.rx_bytes += pkt_len;
 
@@ -1355,9 +1359,8 @@ static void eth16i_multicast(struct net_device *dev)
 {
        int ioaddr = dev->base_addr;
 
-       if(dev->mc_count || dev->flags&(IFF_ALLMULTI|IFF_PROMISC))
+       if (!netdev_mc_empty(dev) || dev->flags&(IFF_ALLMULTI|IFF_PROMISC))
        {
-               dev->flags|=IFF_PROMISC;        /* Must do this */
                outb(3, ioaddr + RECEIVE_MODE_REG);
        } else {
                outb(2, ioaddr + RECEIVE_MODE_REG);
@@ -1468,7 +1471,7 @@ void __exit cleanup_module(void)
        for(this_dev = 0; this_dev < MAX_ETH16I_CARDS; this_dev++) {
                struct net_device *dev = dev_eth16i[this_dev];
 
-               if(dev->priv) {
+               if (netdev_priv(dev)) {
                        unregister_netdev(dev);
                        free_irq(dev->irq, dev);
                        release_region(dev->base_addr, ETH16I_IO_EXTENT);
@@ -1477,15 +1480,3 @@ void __exit cleanup_module(void)
        }
 }
 #endif /* MODULE */
-
-/*
- * Local variables:
- *  compile-command: "gcc -DMODULE -D__KERNEL__ -Wall -Wstrict-prototypes -O6 -c eth16i.c"
- *  alt-compile-command: "gcc -DMODVERSIONS -DMODULE -D__KERNEL__ -Wall -Wstrict -prototypes -O6 -c eth16i.c"
- *  tab-width: 8
- *  c-basic-offset: 8
- *  c-indent-level: 8
- * End:
- */
-
-/* End of file eth16i.c */