ath9k_hw: Move some RF ops to the private callbacks
[safe/jmp/linux-2.6] / drivers / net / tulip / xircom_cb.c
index 70befe3..acfeeb9 100644 (file)
@@ -14,6 +14,8 @@
  *     $Id: xircom_cb.c,v 1.33 2001/03/19 14:02:07 arjanv Exp $
  */
 
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/string.h>
@@ -83,8 +85,8 @@ static int bufferoffsets[NUMDESCRIPTORS] = {128,2048,4096,6144};
 struct xircom_private {
        /* Send and receive buffers, kernel-addressable and dma addressable forms */
 
-       unsigned int *rx_buffer;
-       unsigned int *tx_buffer;
+       __le32 *rx_buffer;
+       __le32 *tx_buffer;
 
        dma_addr_t rx_dma_handle;
        dma_addr_t tx_dma_handle;
@@ -104,10 +106,8 @@ struct xircom_private {
         */
        spinlock_t lock;
 
-
        struct pci_dev *pdev;
        struct net_device *dev;
-       struct net_device_stats stats;
 };
 
 
@@ -115,11 +115,11 @@ struct xircom_private {
 static int xircom_probe(struct pci_dev *pdev, const struct pci_device_id *id);
 static void xircom_remove(struct pci_dev *pdev);
 static irqreturn_t xircom_interrupt(int irq, void *dev_instance);
-static int xircom_start_xmit(struct sk_buff *skb, struct net_device *dev);
+static netdev_tx_t xircom_start_xmit(struct sk_buff *skb,
+                                          struct net_device *dev);
 static int xircom_open(struct net_device *dev);
 static int xircom_close(struct net_device *dev);
 static void xircom_up(struct xircom_private *card);
-static struct net_device_stats *xircom_get_stats(struct net_device *dev);
 #ifdef CONFIG_NET_POLL_CONTROLLER
 static void xircom_poll_controller(struct net_device *dev);
 #endif
@@ -146,7 +146,7 @@ static int link_status(struct xircom_private *card);
 
 
 
-static struct pci_device_id xircom_pci_table[] = {
+static DEFINE_PCI_DEVICE_TABLE(xircom_pci_table) = {
        {0x115D, 0x0003, PCI_ANY_ID, PCI_ANY_ID,},
        {0,},
 };
@@ -194,6 +194,18 @@ static const struct ethtool_ops netdev_ethtool_ops = {
        .get_drvinfo            = netdev_get_drvinfo,
 };
 
+static const struct net_device_ops netdev_ops = {
+       .ndo_open               = xircom_open,
+       .ndo_stop               = xircom_close,
+       .ndo_start_xmit         = xircom_start_xmit,
+       .ndo_change_mtu         = eth_change_mtu,
+       .ndo_set_mac_address    = eth_mac_addr,
+       .ndo_validate_addr      = eth_validate_addr,
+#ifdef CONFIG_NET_POLL_CONTROLLER
+       .ndo_poll_controller    = xircom_poll_controller,
+#endif
+};
+
 /* xircom_probe is the code that gets called on device insertion.
    it sets up the hardware and registers the device to the networklayer.
 
@@ -224,7 +236,7 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_
        pci_write_config_word (pdev, PCI_STATUS,tmp16);
 
        if (!request_region(pci_resource_start(pdev, 0), 128, "xircom_cb")) {
-               printk(KERN_ERR "xircom_probe: failed to allocate io-region\n");
+               pr_err("%s: failed to allocate io-region\n", __func__);
                return -ENODEV;
        }
 
@@ -235,7 +247,7 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_
         */
        dev = alloc_etherdev(sizeof(struct xircom_private));
        if (!dev) {
-               printk(KERN_ERR "xircom_probe: failed to allocate etherdev\n");
+               pr_err("%s: failed to allocate etherdev\n", __func__);
                goto device_fail;
        }
        private = netdev_priv(dev);
@@ -243,12 +255,12 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_
        /* Allocate the send/receive buffers */
        private->rx_buffer = pci_alloc_consistent(pdev,8192,&private->rx_dma_handle);
        if (private->rx_buffer == NULL) {
-               printk(KERN_ERR "xircom_probe: no memory for rx buffer \n");
+               pr_err("%s: no memory for rx buffer\n", __func__);
                goto rx_buf_fail;
        }
        private->tx_buffer = pci_alloc_consistent(pdev,8192,&private->tx_dma_handle);
        if (private->tx_buffer == NULL) {
-               printk(KERN_ERR "xircom_probe: no memory for tx buffer \n");
+               pr_err("%s: no memory for tx buffer\n", __func__);
                goto tx_buf_fail;
        }
 
@@ -266,22 +278,17 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_
        read_mac_address(private);
        setup_descriptors(private);
 
-       dev->open = &xircom_open;
-       dev->hard_start_xmit = &xircom_start_xmit;
-       dev->stop = &xircom_close;
-       dev->get_stats = &xircom_get_stats;
-#ifdef CONFIG_NET_POLL_CONTROLLER
-       dev->poll_controller = &xircom_poll_controller;
-#endif
+       dev->netdev_ops = &netdev_ops;
        SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops);
        pci_set_drvdata(pdev, dev);
 
        if (register_netdev(dev)) {
-               printk(KERN_ERR "xircom_probe: netdevice registration failed.\n");
+               pr_err("%s: netdevice registration failed\n", __func__);
                goto reg_fail;
        }
 
-       printk(KERN_INFO "%s: Xircom cardbus revision %i at irq %i \n", dev->name, pdev->revision, pdev->irq);
+       dev_info(&dev->dev, "Xircom cardbus revision %i at irq %i\n",
+                pdev->revision, pdev->irq);
        /* start the transmitter to get a heartbeat */
        /* TODO: send 2 dummy packets here */
        transceiver_voodoo(private);
@@ -343,8 +350,10 @@ static irqreturn_t xircom_interrupt(int irq, void *dev_instance)
 
 #ifdef DEBUG
        print_binary(status);
-       printk("tx status 0x%08x 0x%08x \n",card->tx_buffer[0],card->tx_buffer[4]);
-       printk("rx status 0x%08x 0x%08x \n",card->rx_buffer[0],card->rx_buffer[4]);
+       printk("tx status 0x%08x 0x%08x \n",
+              card->tx_buffer[0], card->tx_buffer[4]);
+       printk("rx status 0x%08x 0x%08x \n",
+              card->rx_buffer[0], card->rx_buffer[4]);
 #endif
        /* Handle shared irq and hotplug */
        if (status == 0 || status == 0xffffffff) {
@@ -354,9 +363,9 @@ static irqreturn_t xircom_interrupt(int irq, void *dev_instance)
 
        if (link_status_changed(card)) {
                int newlink;
-               printk(KERN_DEBUG "xircom_cb: Link status has changed \n");
+               printk(KERN_DEBUG "xircom_cb: Link status has changed\n");
                newlink = link_status(card);
-               printk(KERN_INFO  "xircom_cb: Link is %i mbit \n",newlink);
+               dev_info(&dev->dev, "Link is %i mbit\n", newlink);
                if (newlink)
                        netif_carrier_on(dev);
                else
@@ -381,7 +390,8 @@ static irqreturn_t xircom_interrupt(int irq, void *dev_instance)
        return IRQ_HANDLED;
 }
 
-static int xircom_start_xmit(struct sk_buff *skb, struct net_device *dev)
+static netdev_tx_t xircom_start_xmit(struct sk_buff *skb,
+                                          struct net_device *dev)
 {
        struct xircom_private *card;
        unsigned long flags;
@@ -412,25 +422,26 @@ static int xircom_start_xmit(struct sk_buff *skb, struct net_device *dev)
                        /* FIXME: The specification tells us that the length we send HAS to be a multiple of
                           4 bytes. */
 
-                       card->tx_buffer[4*desc+1] = skb->len;
-                       if (desc == NUMDESCRIPTORS-1)
-                               card->tx_buffer[4*desc+1] |= (1<<25);  /* bit 25: last descriptor of the ring */
+                       card->tx_buffer[4*desc+1] = cpu_to_le32(skb->len);
+                       if (desc == NUMDESCRIPTORS - 1) /* bit 25: last descriptor of the ring */
+                               card->tx_buffer[4*desc+1] |= cpu_to_le32(1<<25);  
 
-                       card->tx_buffer[4*desc+1] |= 0xF0000000;
+                       card->tx_buffer[4*desc+1] |= cpu_to_le32(0xF0000000);
                                                 /* 0xF0... means want interrupts*/
                        card->tx_skb[desc] = skb;
 
                        wmb();
                        /* This gives the descriptor to the card */
-                       card->tx_buffer[4*desc] = 0x80000000;
+                       card->tx_buffer[4*desc] = cpu_to_le32(0x80000000);
                        trigger_transmit(card);
-                       if (((int)card->tx_buffer[nextdescriptor*4])<0) {       /* next descriptor is occupied... */
+                       if (card->tx_buffer[nextdescriptor*4] & cpu_to_le32(0x8000000)) {
+                               /* next descriptor is occupied... */
                                netif_stop_queue(dev);
                        }
                        card->transmit_used = nextdescriptor;
                        leave("xircom-start_xmit - sent");
                        spin_unlock_irqrestore(&card->lock,flags);
-                       return 0;
+                       return NETDEV_TX_OK;
        }
 
 
@@ -440,7 +451,7 @@ static int xircom_start_xmit(struct sk_buff *skb, struct net_device *dev)
        spin_unlock_irqrestore(&card->lock,flags);
        trigger_transmit(card);
 
-       return -EIO;
+       return NETDEV_TX_BUSY;
 }
 
 
@@ -451,8 +462,9 @@ static int xircom_open(struct net_device *dev)
        struct xircom_private *xp = netdev_priv(dev);
        int retval;
        enter("xircom_open");
-       printk(KERN_INFO "xircom cardbus adaptor found, registering as %s, using irq %i \n",dev->name,dev->irq);
-       retval = request_irq(dev->irq, &xircom_interrupt, IRQF_SHARED, dev->name, dev);
+       pr_info("xircom cardbus adaptor found, registering as %s, using irq %i \n",
+               dev->name, dev->irq);
+       retval = request_irq(dev->irq, xircom_interrupt, IRQF_SHARED, dev->name, dev);
        if (retval) {
                leave("xircom_open - No IRQ");
                return retval;
@@ -496,14 +508,6 @@ static int xircom_close(struct net_device *dev)
 }
 
 
-
-static struct net_device_stats *xircom_get_stats(struct net_device *dev)
-{
-        struct xircom_private *card = netdev_priv(dev);
-        return &card->stats;
-}
-
-
 #ifdef CONFIG_NET_POLL_CONTROLLER
 static void xircom_poll_controller(struct net_device *dev)
 {
@@ -590,8 +594,7 @@ descriptors and programs the addresses into the card.
 */
 static void setup_descriptors(struct xircom_private *card)
 {
-       unsigned int val;
-       unsigned int address;
+       u32 address;
        int i;
        enter("setup_descriptors");
 
@@ -604,16 +607,16 @@ static void setup_descriptors(struct xircom_private *card)
        for (i=0;i<NUMDESCRIPTORS;i++ ) {
 
                /* Rx Descr0: It's empty, let the card own it, no errors -> 0x80000000 */
-               card->rx_buffer[i*4 + 0] = 0x80000000;
+               card->rx_buffer[i*4 + 0] = cpu_to_le32(0x80000000);
                /* Rx Descr1: buffer 1 is 1536 bytes, buffer 2 is 0 bytes */
-               card->rx_buffer[i*4 + 1] = 1536;
-               if (i==NUMDESCRIPTORS-1)
-                       card->rx_buffer[i*4 + 1] |= (1 << 25); /* bit 25 is "last descriptor" */
+               card->rx_buffer[i*4 + 1] = cpu_to_le32(1536);
+               if (i == NUMDESCRIPTORS - 1) /* bit 25 is "last descriptor" */
+                       card->rx_buffer[i*4 + 1] |= cpu_to_le32(1 << 25);
 
                /* Rx Descr2: address of the buffer
                   we store the buffer at the 2nd half of the page */
 
-               address = (unsigned long) card->rx_dma_handle;
+               address = card->rx_dma_handle;
                card->rx_buffer[i*4 + 2] = cpu_to_le32(address + bufferoffsets[i]);
                /* Rx Desc3: address of 2nd buffer -> 0 */
                card->rx_buffer[i*4 + 3] = 0;
@@ -621,9 +624,8 @@ static void setup_descriptors(struct xircom_private *card)
 
        wmb();
        /* Write the receive descriptor ring address to the card */
-       address = (unsigned long) card->rx_dma_handle;
-       val = cpu_to_le32(address);
-       outl(val, card->io_port + CSR3);        /* Receive descr list address */
+       address = card->rx_dma_handle;
+       outl(address, card->io_port + CSR3);    /* Receive descr list address */
 
 
        /* transmit descriptors */
@@ -633,13 +635,13 @@ static void setup_descriptors(struct xircom_private *card)
                /* Tx Descr0: Empty, we own it, no errors -> 0x00000000 */
                card->tx_buffer[i*4 + 0] = 0x00000000;
                /* Tx Descr1: buffer 1 is 1536 bytes, buffer 2 is 0 bytes */
-               card->tx_buffer[i*4 + 1] = 1536;
-               if (i==NUMDESCRIPTORS-1)
-                       card->tx_buffer[i*4 + 1] |= (1 << 25); /* bit 25 is "last descriptor" */
+               card->tx_buffer[i*4 + 1] = cpu_to_le32(1536);
+               if (i == NUMDESCRIPTORS - 1) /* bit 25 is "last descriptor" */
+                       card->tx_buffer[i*4 + 1] |= cpu_to_le32(1 << 25);
 
                /* Tx Descr2: address of the buffer
                   we store the buffer at the 2nd half of the page */
-               address = (unsigned long) card->tx_dma_handle;
+               address = card->tx_dma_handle;
                card->tx_buffer[i*4 + 2] = cpu_to_le32(address + bufferoffsets[i]);
                /* Tx Desc3: address of 2nd buffer -> 0 */
                card->tx_buffer[i*4 + 3] = 0;
@@ -647,9 +649,8 @@ static void setup_descriptors(struct xircom_private *card)
 
        wmb();
        /* wite the transmit descriptor ring to the card */
-       address = (unsigned long) card->tx_dma_handle;
-       val =cpu_to_le32(address);
-       outl(val, card->io_port + CSR4);        /* xmit descr list address */
+       address = card->tx_dma_handle;
+       outl(address, card->io_port + CSR4);    /* xmit descr list address */
 
        leave("setup_descriptors");
 }
@@ -775,7 +776,7 @@ static void activate_receiver(struct xircom_private *card)
                udelay(50);
                counter--;
                if (counter <= 0)
-                       printk(KERN_ERR "xircom_cb: Receiver failed to deactivate\n");
+                       pr_err("Receiver failed to deactivate\n");
        }
 
        /* enable the receiver */
@@ -792,7 +793,7 @@ static void activate_receiver(struct xircom_private *card)
                udelay(50);
                counter--;
                if (counter <= 0)
-                       printk(KERN_ERR "xircom_cb: Receiver failed to re-activate\n");
+                       pr_err("Receiver failed to re-activate\n");
        }
 
        leave("activate_receiver");
@@ -823,7 +824,7 @@ static void deactivate_receiver(struct xircom_private *card)
                udelay(50);
                counter--;
                if (counter <= 0)
-                       printk(KERN_ERR "xircom_cb: Receiver failed to deactivate\n");
+                       pr_err("Receiver failed to deactivate\n");
        }
 
 
@@ -866,7 +867,7 @@ static void activate_transmitter(struct xircom_private *card)
                udelay(50);
                counter--;
                if (counter <= 0)
-                       printk(KERN_ERR "xircom_cb: Transmitter failed to deactivate\n");
+                       pr_err("Transmitter failed to deactivate\n");
        }
 
        /* enable the transmitter */
@@ -883,7 +884,7 @@ static void activate_transmitter(struct xircom_private *card)
                udelay(50);
                counter--;
                if (counter <= 0)
-                       printk(KERN_ERR "xircom_cb: Transmitter failed to re-activate\n");
+                       pr_err("Transmitter failed to re-activate\n");
        }
 
        leave("activate_transmitter");
@@ -914,7 +915,7 @@ static void deactivate_transmitter(struct xircom_private *card)
                udelay(50);
                counter--;
                if (counter <= 0)
-                       printk(KERN_ERR "xircom_cb: Transmitter failed to deactivate\n");
+                       pr_err("Transmitter failed to deactivate\n");
        }
 
 
@@ -1074,7 +1075,6 @@ static void read_mac_address(struct xircom_private *card)
        unsigned char j, tuple, link, data_id, data_count;
        unsigned long flags;
        int i;
-       DECLARE_MAC_BUF(mac);
 
        enter("read_mac_address");
 
@@ -1104,7 +1104,7 @@ static void read_mac_address(struct xircom_private *card)
                }
        }
        spin_unlock_irqrestore(&card->lock, flags);
-       pr_debug(" %s\n", print_mac(mac, card->dev->dev_addr));
+       pr_debug(" %pM\n", card->dev->dev_addr);
        leave("read_mac_address");
 }
 
@@ -1180,7 +1180,7 @@ static void investigate_read_descriptor(struct net_device *dev,struct xircom_pri
                int status;
 
                enter("investigate_read_descriptor");
-               status = card->rx_buffer[4*descnr];
+               status = le32_to_cpu(card->rx_buffer[4*descnr]);
 
                if ((status > 0)) {     /* packet received */
 
@@ -1190,13 +1190,13 @@ static void investigate_read_descriptor(struct net_device *dev,struct xircom_pri
                        struct sk_buff *skb;
 
                        if (pkt_len > 1518) {
-                               printk(KERN_ERR "xircom_cb: Packet length %i is bogus \n",pkt_len);
+                               pr_err("Packet length %i is bogus\n", pkt_len);
                                pkt_len = 1518;
                        }
 
                        skb = dev_alloc_skb(pkt_len + 2);
                        if (skb == NULL) {
-                               card->stats.rx_dropped++;
+                               dev->stats.rx_dropped++;
                                goto out;
                        }
                        skb_reserve(skb, 2);
@@ -1204,13 +1204,12 @@ static void investigate_read_descriptor(struct net_device *dev,struct xircom_pri
                        skb_put(skb, pkt_len);
                        skb->protocol = eth_type_trans(skb, dev);
                        netif_rx(skb);
-                       dev->last_rx = jiffies;
-                       card->stats.rx_packets++;
-                       card->stats.rx_bytes += pkt_len;
+                       dev->stats.rx_packets++;
+                       dev->stats.rx_bytes += pkt_len;
 
                      out:
                        /* give the buffer back to the card */
-                       card->rx_buffer[4*descnr] =  0x80000000;
+                       card->rx_buffer[4*descnr] =  cpu_to_le32(0x80000000);
                        trigger_receive(card);
                }
 
@@ -1226,26 +1225,26 @@ static void investigate_write_descriptor(struct net_device *dev, struct xircom_p
 
                enter("investigate_write_descriptor");
 
-               status = card->tx_buffer[4*descnr];
+               status = le32_to_cpu(card->tx_buffer[4*descnr]);
 #if 0
                if (status & 0x8000) {  /* Major error */
-                       printk(KERN_ERR "Major transmit error status %x \n", status);
+                       pr_err("Major transmit error status %x\n", status);
                        card->tx_buffer[4*descnr] = 0;
                        netif_wake_queue (dev);
                }
 #endif
                if (status > 0) {       /* bit 31 is 0 when done */
                        if (card->tx_skb[descnr]!=NULL) {
-                               card->stats.tx_bytes += card->tx_skb[descnr]->len;
+                               dev->stats.tx_bytes += card->tx_skb[descnr]->len;
                                dev_kfree_skb_irq(card->tx_skb[descnr]);
                        }
                        card->tx_skb[descnr] = NULL;
                        /* Bit 8 in the status field is 1 if there was a collision */
                        if (status&(1<<8))
-                               card->stats.collisions++;
+                               dev->stats.collisions++;
                        card->tx_buffer[4*descnr] = 0; /* descriptor is free again */
                        netif_wake_queue (dev);
-                       card->stats.tx_packets++;
+                       dev->stats.tx_packets++;
                }
 
                leave("investigate_write_descriptor");