Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland...
[safe/jmp/linux-2.6] / drivers / net / defxx.c
index 9c8e3f9..ed53a8d 100644 (file)
@@ -300,7 +300,8 @@ static int          dfx_rcv_init(DFX_board_t *bp, int get_buffers);
 static void            dfx_rcv_queue_process(DFX_board_t *bp);
 static void            dfx_rcv_flush(DFX_board_t *bp);
 
-static int             dfx_xmt_queue_pkt(struct sk_buff *skb, struct net_device *dev);
+static netdev_tx_t dfx_xmt_queue_pkt(struct sk_buff *skb,
+                                    struct net_device *dev);
 static int             dfx_xmt_done(DFX_board_t *bp);
 static void            dfx_xmt_flush(DFX_board_t *bp);
 
@@ -477,6 +478,15 @@ static void dfx_get_bars(struct device *bdev,
        }
 }
 
+static const struct net_device_ops dfx_netdev_ops = {
+       .ndo_open               = dfx_open,
+       .ndo_stop               = dfx_close,
+       .ndo_start_xmit         = dfx_xmt_queue_pkt,
+       .ndo_get_stats          = dfx_ctl_get_stats,
+       .ndo_set_multicast_list = dfx_ctl_set_multicast_list,
+       .ndo_set_mac_address    = dfx_ctl_set_mac_address,
+};
+
 /*
  * ================
  * = dfx_register =
@@ -511,7 +521,7 @@ static int __devinit dfx_register(struct device *bdev)
        int dfx_bus_pci = DFX_BUS_PCI(bdev);
        int dfx_bus_tc = DFX_BUS_TC(bdev);
        int dfx_use_mmio = DFX_MMIO || dfx_bus_tc;
-       char *print_name = bdev->bus_id;
+       const char *print_name = dev_name(bdev);
        struct net_device *dev;
        DFX_board_t       *bp;                  /* board pointer */
        resource_size_t bar_start = 0;          /* pointer to port */
@@ -539,7 +549,6 @@ static int __devinit dfx_register(struct device *bdev)
                goto err_out;
        }
 
-       SET_MODULE_OWNER(dev);
        SET_NETDEV_DEV(dev, bdev);
 
        bp = netdev_priv(dev);
@@ -574,13 +583,7 @@ static int __devinit dfx_register(struct device *bdev)
        }
 
        /* Initialize new device structure */
-
-       dev->get_stats                  = dfx_ctl_get_stats;
-       dev->open                       = dfx_open;
-       dev->stop                       = dfx_close;
-       dev->hard_start_xmit            = dfx_xmt_queue_pkt;
-       dev->set_multicast_list         = dfx_ctl_set_multicast_list;
-       dev->set_mac_address            = dfx_ctl_set_mac_address;
+       dev->netdev_ops                 = &dfx_netdev_ops;
 
        if (dfx_bus_pci)
                pci_set_master(to_pci_dev(bdev));
@@ -806,7 +809,7 @@ static void __devinit dfx_bus_init(struct net_device *dev)
  *   Interrupts are disabled at the adapter bus-specific logic.
  */
 
-static void __devinit dfx_bus_uninit(struct net_device *dev)
+static void __devexit dfx_bus_uninit(struct net_device *dev)
 {
        DFX_board_t *bp = netdev_priv(dev);
        struct device *bdev = bp->bus_dev;
@@ -972,7 +975,8 @@ static int __devinit dfx_driver_init(struct net_device *dev,
        int alloc_size;                 /* total buffer size needed */
        char *top_v, *curr_v;           /* virtual addrs into memory block */
        dma_addr_t top_p, curr_p;       /* physical addrs into memory block */
-       u32 data, le32;                 /* host data register value */
+       u32 data;                       /* host data register value */
+       __le32 le32;
        char *board_name = NULL;
 
        DBG_printk("In dfx_driver_init...\n");
@@ -1048,12 +1052,9 @@ static int __devinit dfx_driver_init(struct net_device *dev,
                board_name = "DEFEA";
        if (dfx_bus_pci)
                board_name = "DEFPA";
-       pr_info("%s: %s at %saddr = 0x%llx, IRQ = %d, "
-               "Hardware addr = %02X-%02X-%02X-%02X-%02X-%02X\n",
+       pr_info("%s: %s at %saddr = 0x%llx, IRQ = %d, Hardware addr = %pMF\n",
                print_name, board_name, dfx_use_mmio ? "" : "I/O ",
-               (long long)bar_start, dev->irq,
-               dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2],
-               dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]);
+               (long long)bar_start, dev->irq, dev->dev_addr);
 
        /*
         * Get memory for descriptor block, consumer block, and other buffers
@@ -2226,7 +2227,7 @@ static void dfx_ctl_set_multicast_list(struct net_device *dev)
                 *               perfect filtering will be used.
                 */
 
-               if (dev->mc_count > (PI_CMD_ADDR_FILTER_K_SIZE - bp->uc_count))
+               if (netdev_mc_count(dev) > (PI_CMD_ADDR_FILTER_K_SIZE - bp->uc_count))
                        {
                        bp->group_prom  = PI_FSTATE_K_PASS;             /* Enable LLC group prom mode */
                        bp->mc_count    = 0;                                    /* Don't add mc addrs to CAM */
@@ -2234,17 +2235,16 @@ static void dfx_ctl_set_multicast_list(struct net_device *dev)
                else
                        {
                        bp->group_prom  = PI_FSTATE_K_BLOCK;    /* Disable LLC group prom mode */
-                       bp->mc_count    = dev->mc_count;                /* Add mc addrs to CAM */
+                       bp->mc_count    = netdev_mc_count(dev);         /* Add mc addrs to CAM */
                        }
 
                /* Copy addresses to multicast address table, then update adapter CAM */
 
-               dmi = dev->mc_list;                             /* point to first multicast addr */
-               for (i=0; i < bp->mc_count; i++)
-                       {
-                       memcpy(&bp->mc_table[i*FDDI_K_ALEN], dmi->dmi_addr, FDDI_K_ALEN);
-                       dmi = dmi->next;                        /* point to next multicast addr */
-                       }
+               i = 0;
+               netdev_for_each_mc_addr(dmi, dev)
+                       memcpy(&bp->mc_table[i++ * FDDI_K_ALEN],
+                              dmi->dmi_addr, FDDI_K_ALEN);
+
                if (dfx_ctl_update_cam(bp) != DFX_K_SUCCESS)
                        {
                        DBG_printk("%s: Could not update multicast address table!\n", dev->name);
@@ -2934,7 +2934,7 @@ static int dfx_rcv_init(DFX_board_t *bp, int get_buffers)
        for (i = 0; i < (int)(bp->rcv_bufs_to_post); i++)
                for (j = 0; (i + j) < (int)PI_RCV_DATA_K_NUM_ENTRIES; j += bp->rcv_bufs_to_post)
                {
-                       struct sk_buff *newskb = __dev_alloc_skb(NEW_SKB_SIZE, GFP_NOIO);
+                       struct sk_buff *newskb = __netdev_alloc_skb(bp->dev, NEW_SKB_SIZE, GFP_NOIO);
                        if (!newskb)
                                return -ENOMEM;
                        bp->descr_block_virt->rcv_data[i+j].long_0 = (u32) (PI_RCV_DESCR_M_SOP |
@@ -3103,7 +3103,6 @@ static void dfx_rcv_queue_process(
                                        netif_rx(skb);
 
                                        /* Update the rcv counters */
-                                       bp->dev->last_rx = jiffies;
                                        bp->rcv_total_frames++;
                                        if (*(p_buff + RCV_BUFF_K_DA) & 0x01)
                                                bp->rcv_multicast_frames++;
@@ -3186,11 +3185,8 @@ static void dfx_rcv_queue_process(
  *   None
  */
 
-static int dfx_xmt_queue_pkt(
-       struct sk_buff  *skb,
-       struct net_device       *dev
-       )
-
+static netdev_tx_t dfx_xmt_queue_pkt(struct sk_buff *skb,
+                                    struct net_device *dev)
        {
        DFX_board_t             *bp = netdev_priv(dev);
        u8                      prod;                           /* local transmit producer index */
@@ -3216,7 +3212,7 @@ static int dfx_xmt_queue_pkt(
                bp->xmt_length_errors++;                /* bump error counter */
                netif_wake_queue(dev);
                dev_kfree_skb(skb);
-               return(0);                              /* return "success" */
+               return NETDEV_TX_OK;                    /* return "success" */
        }
        /*
         * See if adapter link is available, if not, free buffer
@@ -3239,7 +3235,7 @@ static int dfx_xmt_queue_pkt(
                        bp->xmt_discards++;                                     /* bump error counter */
                        dev_kfree_skb(skb);             /* free sk_buff now */
                        netif_wake_queue(dev);
-                       return(0);                                                      /* return "success" */
+                       return NETDEV_TX_OK;            /* return "success" */
                        }
                }
 
@@ -3316,7 +3312,7 @@ static int dfx_xmt_queue_pkt(
        {
                skb_pull(skb,3);
                spin_unlock_irqrestore(&bp->lock, flags);
-               return(1);                      /* requeue packet for later */
+               return NETDEV_TX_BUSY;  /* requeue packet for later */
        }
 
        /*
@@ -3343,7 +3339,7 @@ static int dfx_xmt_queue_pkt(
        dfx_port_write_long(bp, PI_PDQ_K_REG_TYPE_2_PROD, bp->rcv_xmt_reg.lword);
        spin_unlock_irqrestore(&bp->lock, flags);
        netif_wake_queue(dev);
-       return(0);                                                      /* packet queued to adapter */
+       return NETDEV_TX_OK;    /* packet queued to adapter */
        }
 
 
@@ -3631,7 +3627,7 @@ static int __devinit dfx_pci_register(struct pci_dev *,
                                      const struct pci_device_id *);
 static void __devexit dfx_pci_unregister(struct pci_dev *);
 
-static struct pci_device_id dfx_pci_table[] = {
+static DEFINE_PCI_DEVICE_TABLE(dfx_pci_table) = {
        { PCI_DEVICE(PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_FDDI) },
        { }
 };
@@ -3741,10 +3737,3 @@ MODULE_AUTHOR("Lawrence V. Stefani");
 MODULE_DESCRIPTION("DEC FDDIcontroller TC/EISA/PCI (DEFTA/DEFEA/DEFPA) driver "
                   DRV_VERSION " " DRV_RELDATE);
 MODULE_LICENSE("GPL");
-
-
-/*
- * Local variables:
- * kernel-compile-command: "gcc -D__KERNEL__ -I/root/linux/include -Wall -Wstrict-prototypes -O2 -pipe -fomit-frame-pointer -fno-strength-reduce -m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2 -c defxx.c"
- * End:
- */