sky2: fix sky2_link_down copy/paste comment error
[safe/jmp/linux-2.6] / drivers / net / 8139cp.c
index 9e90d41..83a1922 100644 (file)
@@ -87,7 +87,7 @@
 
 /* These identify the driver base version and may not be removed. */
 static char version[] =
-KERN_INFO DRV_NAME ": 10/100 PCI Ethernet driver v" DRV_VERSION " (" DRV_RELDATE ")\n";
+DRV_NAME ": 10/100 PCI Ethernet driver v" DRV_VERSION " (" DRV_RELDATE ")\n";
 
 MODULE_AUTHOR("Jeff Garzik <jgarzik@pobox.com>");
 MODULE_DESCRIPTION("RealTek RTL-8139C+ series 10/100 PCI Ethernet driver");
@@ -457,7 +457,6 @@ static inline void cp_rx_skb (struct cp_private *cp, struct sk_buff *skb,
 
        cp->dev->stats.rx_packets++;
        cp->dev->stats.rx_bytes += skb->len;
-       cp->dev->last_rx = jiffies;
 
 #if CP_VLAN_TAG_USED
        if (cp->vlgrp && (desc->opts2 & cpu_to_le32(RxVlanTagged))) {
@@ -472,8 +471,7 @@ static void cp_rx_err_acct (struct cp_private *cp, unsigned rx_tail,
                            u32 status, u32 len)
 {
        if (netif_msg_rx_err (cp))
-               printk (KERN_DEBUG
-                       "%s: rx err, slot %d status 0x%x len %d\n",
+               pr_debug("%s: rx err, slot %d status 0x%x len %d\n",
                        cp->dev->name, rx_tail, status, len);
        cp->dev->stats.rx_errors++;
        if (status & RxErrFrame)
@@ -517,7 +515,7 @@ rx_status_loop:
                dma_addr_t mapping;
                struct sk_buff *skb, *new_skb;
                struct cp_desc *desc;
-               unsigned buflen;
+               const unsigned buflen = cp->rx_buf_sz;
 
                skb = cp->rx_skb[rx_tail];
                BUG_ON(!skb);
@@ -548,11 +546,10 @@ rx_status_loop:
                }
 
                if (netif_msg_rx_status(cp))
-                       printk(KERN_DEBUG "%s: rx slot %d status 0x%x len %d\n",
+                       pr_debug("%s: rx slot %d status 0x%x len %d\n",
                               dev->name, rx_tail, status, len);
 
-               buflen = cp->rx_buf_sz + NET_IP_ALIGN;
-               new_skb = netdev_alloc_skb(dev, buflen);
+               new_skb = netdev_alloc_skb(dev, buflen + NET_IP_ALIGN);
                if (!new_skb) {
                        dev->stats.rx_dropped++;
                        goto rx_next;
@@ -605,7 +602,7 @@ rx_next:
 
                spin_lock_irqsave(&cp->lock, flags);
                cpw16_f(IntrMask, cp_intr_mask);
-               __netif_rx_complete(dev, napi);
+               __napi_complete(napi);
                spin_unlock_irqrestore(&cp->lock, flags);
        }
 
@@ -627,7 +624,7 @@ static irqreturn_t cp_interrupt (int irq, void *dev_instance)
                return IRQ_NONE;
 
        if (netif_msg_intr(cp))
-               printk(KERN_DEBUG "%s: intr, status %04x cmd %02x cpcmd %04x\n",
+               pr_debug("%s: intr, status %04x cmd %02x cpcmd %04x\n",
                        dev->name, status, cpr8(Cmd), cpr16(CpCmd));
 
        cpw16(IntrStatus, status & ~cp_rx_intr_mask);
@@ -642,9 +639,9 @@ static irqreturn_t cp_interrupt (int irq, void *dev_instance)
        }
 
        if (status & (RxOK | RxErr | RxEmpty | RxFIFOOvr))
-               if (netif_rx_schedule_prep(dev, &cp->napi)) {
+               if (napi_schedule_prep(&cp->napi)) {
                        cpw16_f(IntrMask, cp_norx_intr_mask);
-                       __netif_rx_schedule(dev, &cp->napi);
+                       __napi_schedule(&cp->napi);
                }
 
        if (status & (TxOK | TxErr | TxEmpty | SWInt))
@@ -659,7 +656,7 @@ static irqreturn_t cp_interrupt (int irq, void *dev_instance)
 
                pci_read_config_word(cp->pdev, PCI_STATUS, &pci_status);
                pci_write_config_word(cp->pdev, PCI_STATUS, pci_status);
-               printk(KERN_ERR "%s: PCI bus error, status=%04x, PCI status=%04x\n",
+               pr_err("%s: PCI bus error, status=%04x, PCI status=%04x\n",
                       dev->name, status, pci_status);
 
                /* TODO: reset hardware */
@@ -706,7 +703,7 @@ static void cp_tx (struct cp_private *cp)
                if (status & LastFrag) {
                        if (status & (TxError | TxFIFOUnder)) {
                                if (netif_msg_tx_err(cp))
-                                       printk(KERN_DEBUG "%s: tx err, status 0x%x\n",
+                                       pr_debug("%s: tx err, status 0x%x\n",
                                               cp->dev->name, status);
                                cp->dev->stats.tx_errors++;
                                if (status & TxOWC)
@@ -723,7 +720,7 @@ static void cp_tx (struct cp_private *cp)
                                cp->dev->stats.tx_packets++;
                                cp->dev->stats.tx_bytes += skb->len;
                                if (netif_msg_tx_done(cp))
-                                       printk(KERN_DEBUG "%s: tx done, slot %d\n", cp->dev->name, tx_tail);
+                                       pr_debug("%s: tx done, slot %d\n", cp->dev->name, tx_tail);
                        }
                        dev_kfree_skb_irq(skb);
                }
@@ -739,7 +736,8 @@ static void cp_tx (struct cp_private *cp)
                netif_wake_queue(cp->dev);
 }
 
-static int cp_start_xmit (struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t cp_start_xmit (struct sk_buff *skb,
+                                       struct net_device *dev)
 {
        struct cp_private *cp = netdev_priv(dev);
        unsigned entry;
@@ -756,9 +754,9 @@ static int cp_start_xmit (struct sk_buff *skb, struct net_device *dev)
        if (TX_BUFFS_AVAIL(cp) <= (skb_shinfo(skb)->nr_frags + 1)) {
                netif_stop_queue(dev);
                spin_unlock_irqrestore(&cp->lock, intr_flags);
-               printk(KERN_ERR PFX "%s: BUG! Tx Ring full when queue awake!\n",
+               pr_err(PFX "%s: BUG! Tx Ring full when queue awake!\n",
                       dev->name);
-               return 1;
+               return NETDEV_TX_BUSY;
        }
 
 #if CP_VLAN_TAG_USED
@@ -883,7 +881,7 @@ static int cp_start_xmit (struct sk_buff *skb, struct net_device *dev)
        }
        cp->tx_head = entry;
        if (netif_msg_tx_queued(cp))
-               printk(KERN_DEBUG "%s: tx queued, slot %d, skblen %d\n",
+               pr_debug("%s: tx queued, slot %d, skblen %d\n",
                       dev->name, entry, skb->len);
        if (TX_BUFFS_AVAIL(cp) <= (MAX_SKB_FRAGS + 1))
                netif_stop_queue(dev);
@@ -893,7 +891,7 @@ static int cp_start_xmit (struct sk_buff *skb, struct net_device *dev)
        cpw8(TxPoll, NormalTxPoll);
        dev->trans_start = jiffies;
 
-       return 0;
+       return NETDEV_TX_OK;
 }
 
 /* Set or clear the multicast filter for this adaptor.
@@ -997,7 +995,7 @@ static void cp_reset_hw (struct cp_private *cp)
                schedule_timeout_uninterruptible(10);
        }
 
-       printk(KERN_ERR "%s: hardware reset timeout\n", cp->dev->name);
+       pr_err("%s: hardware reset timeout\n", cp->dev->name);
 }
 
 static inline void cp_start_hw (struct cp_private *cp)
@@ -1167,7 +1165,7 @@ static int cp_open (struct net_device *dev)
        int rc;
 
        if (netif_msg_ifup(cp))
-               printk(KERN_DEBUG "%s: enabling interface\n", dev->name);
+               pr_debug("%s: enabling interface\n", dev->name);
 
        rc = cp_alloc_rings(cp);
        if (rc)
@@ -1202,7 +1200,7 @@ static int cp_close (struct net_device *dev)
        napi_disable(&cp->napi);
 
        if (netif_msg_ifdown(cp))
-               printk(KERN_DEBUG "%s: disabling interface\n", dev->name);
+               pr_debug("%s: disabling interface\n", dev->name);
 
        spin_lock_irqsave(&cp->lock, flags);
 
@@ -1225,7 +1223,7 @@ static void cp_tx_timeout(struct net_device *dev)
        unsigned long flags;
        int rc;
 
-       printk(KERN_WARNING "%s: Transmit timeout, status %2x %4x %4x %4x\n",
+       pr_warning("%s: Transmit timeout, status %2x %4x %4x %4x\n",
               dev->name, cpr8(Cmd), cpr16(CpCmd),
               cpr16(IntrStatus), cpr16(IntrMask));
 
@@ -1531,7 +1529,7 @@ static void cp_get_ethtool_stats (struct net_device *dev,
 
        /* begin NIC statistics dump */
        cpw32(StatsAddr + 4, (u64)dma >> 32);
-       cpw32(StatsAddr, ((u64)dma & DMA_32BIT_MASK) | DumpStats);
+       cpw32(StatsAddr, ((u64)dma & DMA_BIT_MASK(32)) | DumpStats);
        cpr32(StatsAddr);
 
        for (i = 0; i < 1000; i++) {
@@ -1603,6 +1601,28 @@ static int cp_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
        return rc;
 }
 
+static int cp_set_mac_address(struct net_device *dev, void *p)
+{
+       struct cp_private *cp = netdev_priv(dev);
+       struct sockaddr *addr = p;
+
+       if (!is_valid_ether_addr(addr->sa_data))
+               return -EADDRNOTAVAIL;
+
+       memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
+
+       spin_lock_irq(&cp->lock);
+
+       cpw8_f(Cfg9346, Cfg9346_Unlock);
+       cpw32_f(MAC0 + 0, le32_to_cpu (*(__le32 *) (dev->dev_addr + 0)));
+       cpw32_f(MAC0 + 4, le32_to_cpu (*(__le32 *) (dev->dev_addr + 4)));
+       cpw8_f(Cfg9346, Cfg9346_Lock);
+
+       spin_unlock_irq(&cp->lock);
+
+       return 0;
+}
+
 /* Serial EEPROM section. */
 
 /*  EEPROM_Ctrl bits. */
@@ -1818,6 +1838,28 @@ static void cp_set_d3_state (struct cp_private *cp)
        pci_set_power_state (cp->pdev, PCI_D3hot);
 }
 
+static const struct net_device_ops cp_netdev_ops = {
+       .ndo_open               = cp_open,
+       .ndo_stop               = cp_close,
+       .ndo_validate_addr      = eth_validate_addr,
+       .ndo_set_mac_address    = cp_set_mac_address,
+       .ndo_set_multicast_list = cp_set_rx_mode,
+       .ndo_get_stats          = cp_get_stats,
+       .ndo_do_ioctl           = cp_ioctl,
+       .ndo_start_xmit         = cp_start_xmit,
+       .ndo_tx_timeout         = cp_tx_timeout,
+#if CP_VLAN_TAG_USED
+       .ndo_vlan_rx_register   = cp_vlan_rx_register,
+#endif
+#ifdef BROKEN
+       .ndo_change_mtu         = cp_change_mtu,
+#endif
+
+#ifdef CONFIG_NET_POLL_CONTROLLER
+       .ndo_poll_controller    = cp_poll_controller,
+#endif
+};
+
 static int cp_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
 {
        struct net_device *dev;
@@ -1830,7 +1872,7 @@ static int cp_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
 #ifndef MODULE
        static int version_printed;
        if (version_printed++ == 0)
-               printk("%s", version);
+               pr_info("%s", version);
 #endif
 
        if (pdev->vendor == PCI_VENDOR_ID_REALTEK &&
@@ -1886,19 +1928,19 @@ static int cp_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
 
        /* Configure DMA attributes. */
        if ((sizeof(dma_addr_t) > 4) &&
-           !pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK) &&
-           !pci_set_dma_mask(pdev, DMA_64BIT_MASK)) {
+           !pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)) &&
+           !pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
                pci_using_dac = 1;
        } else {
                pci_using_dac = 0;
 
-               rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
+               rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
                if (rc) {
                        dev_err(&pdev->dev,
                                   "No usable DMA configuration, aborting.\n");
                        goto err_out_res;
                }
-               rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
+               rc = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
                if (rc) {
                        dev_err(&pdev->dev,
                                   "No usable consistent DMA configuration, "
@@ -1930,26 +1972,13 @@ static int cp_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
                    cpu_to_le16(read_eeprom (regs, i + 7, addr_len));
        memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
 
-       dev->open = cp_open;
-       dev->stop = cp_close;
-       dev->set_multicast_list = cp_set_rx_mode;
-       dev->hard_start_xmit = cp_start_xmit;
-       dev->get_stats = cp_get_stats;
-       dev->do_ioctl = cp_ioctl;
-#ifdef CONFIG_NET_POLL_CONTROLLER
-       dev->poll_controller = cp_poll_controller;
-#endif
+       dev->netdev_ops = &cp_netdev_ops;
        netif_napi_add(dev, &cp->napi, cp_rx_poll, 16);
-#ifdef BROKEN
-       dev->change_mtu = cp_change_mtu;
-#endif
        dev->ethtool_ops = &cp_ethtool_ops;
-       dev->tx_timeout = cp_tx_timeout;
        dev->watchdog_timeo = TX_TIMEOUT;
 
 #if CP_VLAN_TAG_USED
        dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
-       dev->vlan_rx_register = cp_vlan_rx_register;
 #endif
 
        if (pci_using_dac)
@@ -1965,8 +1994,7 @@ static int cp_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
        if (rc)
                goto err_out_iomap;
 
-       printk (KERN_INFO "%s: RTL-8139C+ at 0x%lx, "
-               "%pM, IRQ %d\n",
+       pr_info("%s: RTL-8139C+ at 0x%lx, %pM, IRQ %d\n",
                dev->name,
                dev->base_addr,
                dev->dev_addr,
@@ -2083,7 +2111,7 @@ static struct pci_driver cp_driver = {
 static int __init cp_init (void)
 {
 #ifdef MODULE
-       printk("%s", version);
+       pr_info("%s", version);
 #endif
        return pci_register_driver(&cp_driver);
 }