Merge branch 'linus' into cont_syslog
[safe/jmp/linux-2.6] / drivers / net / 3c527.c
index abc84f7..38395df 100644 (file)
@@ -125,8 +125,6 @@ static const char* cardname = DRV_NAME;
 #define NET_DEBUG 2
 #endif
 
-#undef DEBUG_IRQ
-
 static unsigned int mc32_debug = NET_DEBUG;
 
 /* The number of low I/O ports used by the ethercard. */
@@ -215,7 +213,8 @@ static int  mc32_probe1(struct net_device *dev, int ioaddr);
 static int      mc32_command(struct net_device *dev, u16 cmd, void *data, int len);
 static int     mc32_open(struct net_device *dev);
 static void    mc32_timeout(struct net_device *dev);
-static int     mc32_send_packet(struct sk_buff *skb, struct net_device *dev);
+static netdev_tx_t mc32_send_packet(struct sk_buff *skb,
+                                   struct net_device *dev);
 static irqreturn_t mc32_interrupt(int irq, void *dev_id);
 static int     mc32_close(struct net_device *dev);
 static struct  net_device_stats *mc32_get_stats(struct net_device *dev);
@@ -288,6 +287,18 @@ struct net_device *__init mc32_probe(int unit)
        return ERR_PTR(-ENODEV);
 }
 
+static const struct net_device_ops netdev_ops = {
+       .ndo_open               = mc32_open,
+       .ndo_stop               = mc32_close,
+       .ndo_start_xmit         = mc32_send_packet,
+       .ndo_get_stats          = mc32_get_stats,
+       .ndo_set_multicast_list = mc32_set_multicast_list,
+       .ndo_tx_timeout         = mc32_timeout,
+       .ndo_change_mtu         = eth_change_mtu,
+       .ndo_set_mac_address    = eth_mac_addr,
+       .ndo_validate_addr      = eth_validate_addr,
+};
+
 /**
  * mc32_probe1 -       Check a given slot for a board and test the card
  * @dev:  Device structure to fill in
@@ -335,20 +346,19 @@ static int __init mc32_probe1(struct net_device *dev, int slot)
                "82586 initialisation failure",
                "Adapter list configuration error"
        };
-       DECLARE_MAC_BUF(mac);
 
        /* Time to play MCA games */
 
        if (mc32_debug  &&  version_printed++ == 0)
-               printk(KERN_DEBUG "%s", version);
+               pr_debug("%s", version);
 
-       printk(KERN_INFO "%s: %s found in slot %d:", dev->name, cardname, slot);
+       pr_info("%s: %s found in slot %d: ", dev->name, cardname, slot);
 
        POS = mca_read_stored_pos(slot, 2);
 
        if(!(POS&1))
        {
-               printk(" disabled.\n");
+               pr_cont("disabled.\n");
                return -ENODEV;
        }
 
@@ -359,7 +369,7 @@ static int __init mc32_probe1(struct net_device *dev, int slot)
        POS = mca_read_stored_pos(slot, 4);
        if(!(POS&1))
        {
-               printk("memory window disabled.\n");
+               pr_cont("memory window disabled.\n");
                return -ENODEV;
        }
 
@@ -368,7 +378,7 @@ static int __init mc32_probe1(struct net_device *dev, int slot)
        i=(POS>>4)&3;
        if(i==3)
        {
-               printk("invalid memory window.\n");
+               pr_cont("invalid memory window.\n");
                return -ENODEV;
        }
 
@@ -381,11 +391,11 @@ static int __init mc32_probe1(struct net_device *dev, int slot)
 
        if(!request_region(dev->base_addr, MC32_IO_EXTENT, cardname))
        {
-               printk("io 0x%3lX, which is busy.\n", dev->base_addr);
+               pr_cont("io 0x%3lX, which is busy.\n", dev->base_addr);
                return -EBUSY;
        }
 
-       printk("io 0x%3lX irq %d mem 0x%lX (%dK)\n",
+       pr_cont("io 0x%3lX irq %d mem 0x%lX (%dK)\n",
                dev->base_addr, dev->irq, dev->mem_start, i/1024);
 
 
@@ -405,7 +415,7 @@ static int __init mc32_probe1(struct net_device *dev, int slot)
                dev->dev_addr[i] = mca_read_pos(slot,3);
        }
 
-       printk("%s: Address %s", dev->name, print_mac(mac, dev->dev_addr));
+       pr_info("%s: Address %pM ", dev->name, dev->dev_addr);
 
        mca_write_pos(slot, 6, 0);
        mca_write_pos(slot, 7, 0);
@@ -413,9 +423,9 @@ static int __init mc32_probe1(struct net_device *dev, int slot)
        POS = mca_read_stored_pos(slot, 4);
 
        if(POS&2)
-               printk(" : BNC port selected.\n");
+               pr_cont(": BNC port selected.\n");
        else
-               printk(" : AUI port selected.\n");
+               pr_cont(": AUI port selected.\n");
 
        POS=inb(dev->base_addr+HOST_CTRL);
        POS|=HOST_CTRL_ATTN|HOST_CTRL_RESET;
@@ -433,10 +443,10 @@ static int __init mc32_probe1(struct net_device *dev, int slot)
         *      Grab the IRQ
         */
 
-       err = request_irq(dev->irq, &mc32_interrupt, IRQF_SHARED | IRQF_SAMPLE_RANDOM, DRV_NAME, dev);
+       err = request_irq(dev->irq, mc32_interrupt, IRQF_SHARED | IRQF_SAMPLE_RANDOM, DRV_NAME, dev);
        if (err) {
                release_region(dev->base_addr, MC32_IO_EXTENT);
-               printk(KERN_ERR "%s: unable to get IRQ %d.\n", DRV_NAME, dev->irq);
+               pr_err("%s: unable to get IRQ %d.\n", DRV_NAME, dev->irq);
                goto err_exit_ports;
        }
 
@@ -452,7 +462,7 @@ static int __init mc32_probe1(struct net_device *dev, int slot)
                i++;
                if(i == 1000)
                {
-                       printk(KERN_ERR "%s: failed to boot adapter.\n", dev->name);
+                       pr_err("%s: failed to boot adapter.\n", dev->name);
                        err = -ENODEV;
                        goto err_exit_irq;
                }
@@ -464,10 +474,10 @@ static int __init mc32_probe1(struct net_device *dev, int slot)
        if(base>0)
        {
                if(base < 0x0C)
-                       printk(KERN_ERR "%s: %s%s.\n", dev->name, failures[base-1],
+                       pr_err("%s: %s%s.\n", dev->name, failures[base-1],
                                base<0x0A?" test failure":"");
                else
-                       printk(KERN_ERR "%s: unknown failure %d.\n", dev->name, base);
+                       pr_err("%s: unknown failure %d.\n", dev->name, base);
                err = -ENODEV;
                goto err_exit_irq;
        }
@@ -483,7 +493,7 @@ static int __init mc32_probe1(struct net_device *dev, int slot)
                        udelay(50);
                        if(n>100)
                        {
-                               printk(KERN_ERR "%s: mailbox read fail (%d).\n", dev->name, i);
+                               pr_err("%s: mailbox read fail (%d).\n", dev->name, i);
                                err = -ENODEV;
                                goto err_exit_irq;
                        }
@@ -516,15 +526,10 @@ static int __init mc32_probe1(struct net_device *dev, int slot)
        init_completion(&lp->execution_cmd);
        init_completion(&lp->xceiver_cmd);
 
-       printk("%s: Firmware Rev %d. %d RX buffers, %d TX buffers. Base of 0x%08X.\n",
+       pr_info("%s: Firmware Rev %d. %d RX buffers, %d TX buffers. Base of 0x%08X.\n",
                dev->name, lp->exec_box->data[12], lp->rx_len, lp->tx_len, lp->base);
 
-       dev->open               = mc32_open;
-       dev->stop               = mc32_close;
-       dev->hard_start_xmit    = mc32_send_packet;
-       dev->get_stats          = mc32_get_stats;
-       dev->set_multicast_list = mc32_set_multicast_list;
-       dev->tx_timeout         = mc32_timeout;
+       dev->netdev_ops         = &netdev_ops;
        dev->watchdog_timeo     = HZ*5; /* Board does all the work */
        dev->ethtool_ops        = &netdev_ethtool_ops;
 
@@ -933,7 +938,7 @@ static int mc32_open(struct net_device *dev)
         */
 
        if(mc32_command(dev, 8, descnumbuffs, 4)) {
-               printk("%s: %s rejected our buffer configuration!\n",
+               pr_info("%s: %s rejected our buffer configuration!\n",
                       dev->name, cardname);
                mc32_close(dev);
                return -ENOBUFS;
@@ -989,7 +994,7 @@ static int mc32_open(struct net_device *dev)
 
 static void mc32_timeout(struct net_device *dev)
 {
-       printk(KERN_WARNING "%s: transmit timed out?\n", dev->name);
+       pr_warning("%s: transmit timed out?\n", dev->name);
        /* Try to restart the adaptor. */
        netif_wake_queue(dev);
 }
@@ -1016,7 +1021,8 @@ static void mc32_timeout(struct net_device *dev)
  *
  */
 
-static int mc32_send_packet(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t mc32_send_packet(struct sk_buff *skb,
+                                   struct net_device *dev)
 {
        struct mc32_local *lp = netdev_priv(dev);
        u32 head = atomic_read(&lp->tx_ring_head);
@@ -1026,12 +1032,12 @@ static int mc32_send_packet(struct sk_buff *skb, struct net_device *dev)
        netif_stop_queue(dev);
 
        if(atomic_read(&lp->tx_count)==0) {
-               return 1;
+               return NETDEV_TX_BUSY;
        }
 
        if (skb_padto(skb, ETH_ZLEN)) {
                netif_wake_queue(dev);
-               return 0;
+               return NETDEV_TX_OK;
        }
 
        atomic_dec(&lp->tx_count);
@@ -1062,7 +1068,7 @@ static int mc32_send_packet(struct sk_buff *skb, struct net_device *dev)
        p->control     &= ~CONTROL_EOL;
 
        netif_wake_queue(dev);
-       return 0;
+       return NETDEV_TX_OK;
 }
 
 
@@ -1162,8 +1168,8 @@ static void mc32_rx_ring(struct net_device *dev)
 
                        /* Try to save time by avoiding a copy on big frames */
 
-                       if ((length > RX_COPYBREAK)
-                           && ((newskb=dev_alloc_skb(1532)) != NULL))
+                       if ((length > RX_COPYBREAK) &&
+                           ((newskb=dev_alloc_skb(1532)) != NULL))
                        {
                                skb=lp->rx_ring[rx_ring_tail].skb;
                                skb_put(skb, length);
@@ -1187,7 +1193,6 @@ static void mc32_rx_ring(struct net_device *dev)
                        }
 
                        skb->protocol=eth_type_trans(skb,dev);
-                       dev->last_rx = jiffies;
                        dev->stats.rx_packets++;
                        dev->stats.rx_bytes += length;
                        netif_rx(skb);
@@ -1330,11 +1335,9 @@ static irqreturn_t mc32_interrupt(int irq, void *dev_id)
        {
                status=inb(ioaddr+HOST_CMD);
 
-#ifdef DEBUG_IRQ
-               printk("Status TX%d RX%d EX%d OV%d BC%d\n",
+               pr_debug("Status TX%d RX%d EX%d OV%d BC%d\n",
                        (status&7), (status>>3)&7, (status>>6)&1,
                        (status>>7)&1, boguscount);
-#endif
 
                switch(status&7)
                {
@@ -1349,7 +1352,7 @@ static irqreturn_t mc32_interrupt(int irq, void *dev_id)
                                complete(&lp->xceiver_cmd);
                                break;
                        default:
-                               printk("%s: strange tx ack %d\n", dev->name, status&7);
+                               pr_notice("%s: strange tx ack %d\n", dev->name, status&7);
                }
                status>>=3;
                switch(status&7)
@@ -1371,7 +1374,7 @@ static irqreturn_t mc32_interrupt(int irq, void *dev_id)
                                mc32_start_transceiver(dev);
                                break;
                        default:
-                               printk("%s: strange rx ack %d\n",
+                               pr_notice("%s: strange rx ack %d\n",
                                        dev->name, status&7);
                }
                status>>=3;
@@ -1523,32 +1526,29 @@ static void do_mc32_set_multicast_list(struct net_device *dev, int retry)
 
        if ((dev->flags&IFF_PROMISC) ||
            (dev->flags&IFF_ALLMULTI) ||
-           dev->mc_count > 10)
+           netdev_mc_count(dev) > 10)
                /* Enable promiscuous mode */
                filt |= 1;
-       else if(dev->mc_count)
+       else if (!netdev_mc_empty(dev))
        {
                unsigned char block[62];
                unsigned char *bp;
-               struct dev_mc_list *dmc=dev->mc_list;
-
-               int i;
+               struct netdev_hw_addr *ha;
 
                if(retry==0)
                        lp->mc_list_valid = 0;
                if(!lp->mc_list_valid)
                {
                        block[1]=0;
-                       block[0]=dev->mc_count;
+                       block[0]=netdev_mc_count(dev);
                        bp=block+2;
 
-                       for(i=0;i<dev->mc_count;i++)
-                       {
-                               memcpy(bp, dmc->dmi_addr, 6);
+                       netdev_for_each_mc_addr(ha, dev) {
+                               memcpy(bp, ha->addr, 6);
                                bp+=6;
-                               dmc=dmc->next;
                        }
-                       if(mc32_command_nowait(dev, 2, block, 2+6*dev->mc_count)==-1)
+                       if(mc32_command_nowait(dev, 2, block,
+                                              2+6*netdev_mc_count(dev))==-1)
                        {
                                lp->mc_reload_wait = 1;
                                return;