Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[sfrench/cifs-2.6.git] / drivers / net / hippi / rrunner.c
index 168c8f41d09f534986977a3d673663b74e433cdf..b6a2bdeff59521c84ed1f56eec393b943ca67c6c 100644 (file)
@@ -113,10 +113,9 @@ static int __devinit rr_init_one(struct pci_dev *pdev,
 
        SET_NETDEV_DEV(dev, &pdev->dev);
 
-       if (pci_request_regions(pdev, "rrunner")) {
-               ret = -EIO;
+       ret = pci_request_regions(pdev, "rrunner");
+       if (ret < 0)
                goto out;
-       }
 
        pci_set_drvdata(pdev, dev);
 
@@ -124,11 +123,8 @@ static int __devinit rr_init_one(struct pci_dev *pdev,
 
        spin_lock_init(&rrpriv->lock);
 
-       dev->irq = pdev->irq;
        dev->netdev_ops = &rr_netdev_ops;
 
-       dev->base_addr = pci_resource_start(pdev, 0);
-
        /* display version info if adapter is found */
        if (!version_disp) {
                /* set display flag to TRUE so that */
@@ -146,16 +142,14 @@ static int __devinit rr_init_one(struct pci_dev *pdev,
        pci_set_master(pdev);
 
        printk(KERN_INFO "%s: Essential RoadRunner serial HIPPI "
-              "at 0x%08lx, irq %i, PCI latency %i\n", dev->name,
-              dev->base_addr, dev->irq, pci_latency);
+              "at 0x%08llx, irq %i, PCI latency %i\n", dev->name,
+              pci_resource_start(pdev, 0), pdev->irq, pci_latency);
 
        /*
-        * Remap the regs into kernel space.
+        * Remap the MMIO regs into kernel space.
         */
-
-       rrpriv->regs = ioremap(dev->base_addr, 0x1000);
-
-       if (!rrpriv->regs){
+       rrpriv->regs = pci_iomap(pdev, 0, 0x1000);
+       if (!rrpriv->regs) {
                printk(KERN_ERR "%s:  Unable to map I/O register, "
                        "RoadRunner will be disabled.\n", dev->name);
                ret = -EIO;
@@ -202,8 +196,6 @@ static int __devinit rr_init_one(struct pci_dev *pdev,
 
        rr_init(dev);
 
-       dev->base_addr = 0;
-
        ret = register_netdev(dev);
        if (ret)
                goto out;
@@ -217,7 +209,7 @@ static int __devinit rr_init_one(struct pci_dev *pdev,
                pci_free_consistent(pdev, TX_TOTAL_SIZE, rrpriv->tx_ring,
                                    rrpriv->tx_ring_dma);
        if (rrpriv->regs)
-               iounmap(rrpriv->regs);
+               pci_iounmap(pdev, rrpriv->regs);
        if (pdev) {
                pci_release_regions(pdev);
                pci_set_drvdata(pdev, NULL);
@@ -231,29 +223,26 @@ static int __devinit rr_init_one(struct pci_dev *pdev,
 static void __devexit rr_remove_one (struct pci_dev *pdev)
 {
        struct net_device *dev = pci_get_drvdata(pdev);
+       struct rr_private *rr = netdev_priv(dev);
 
-       if (dev) {
-               struct rr_private *rr = netdev_priv(dev);
-
-               if (!(readl(&rr->regs->HostCtrl) & NIC_HALTED)){
-                       printk(KERN_ERR "%s: trying to unload running NIC\n",
-                              dev->name);
-                       writel(HALT_NIC, &rr->regs->HostCtrl);
-               }
-
-               pci_free_consistent(pdev, EVT_RING_SIZE, rr->evt_ring,
-                                   rr->evt_ring_dma);
-               pci_free_consistent(pdev, RX_TOTAL_SIZE, rr->rx_ring,
-                                   rr->rx_ring_dma);
-               pci_free_consistent(pdev, TX_TOTAL_SIZE, rr->tx_ring,
-                                   rr->tx_ring_dma);
-               unregister_netdev(dev);
-               iounmap(rr->regs);
-               free_netdev(dev);
-               pci_release_regions(pdev);
-               pci_disable_device(pdev);
-               pci_set_drvdata(pdev, NULL);
+       if (!(readl(&rr->regs->HostCtrl) & NIC_HALTED)) {
+               printk(KERN_ERR "%s: trying to unload running NIC\n",
+                      dev->name);
+               writel(HALT_NIC, &rr->regs->HostCtrl);
        }
+
+       unregister_netdev(dev);
+       pci_free_consistent(pdev, EVT_RING_SIZE, rr->evt_ring,
+                           rr->evt_ring_dma);
+       pci_free_consistent(pdev, RX_TOTAL_SIZE, rr->rx_ring,
+                           rr->rx_ring_dma);
+       pci_free_consistent(pdev, TX_TOTAL_SIZE, rr->tx_ring,
+                           rr->tx_ring_dma);
+       pci_iounmap(pdev, rr->regs);
+       pci_release_regions(pdev);
+       pci_disable_device(pdev);
+       pci_set_drvdata(pdev, NULL);
+       free_netdev(dev);
 }
 
 
@@ -1229,9 +1218,9 @@ static int rr_open(struct net_device *dev)
        readl(&regs->HostCtrl);
        spin_unlock_irqrestore(&rrpriv->lock, flags);
 
-       if (request_irq(dev->irq, rr_interrupt, IRQF_SHARED, dev->name, dev)) {
+       if (request_irq(pdev->irq, rr_interrupt, IRQF_SHARED, dev->name, dev)) {
                printk(KERN_WARNING "%s: Requested IRQ %d is busy\n",
-                      dev->name, dev->irq);
+                      dev->name, pdev->irq);
                ecode = -EAGAIN;
                goto error;
        }
@@ -1338,16 +1327,15 @@ static void rr_dump(struct net_device *dev)
 
 static int rr_close(struct net_device *dev)
 {
-       struct rr_private *rrpriv;
-       struct rr_regs __iomem *regs;
+       struct rr_private *rrpriv = netdev_priv(dev);
+       struct rr_regs __iomem *regs = rrpriv->regs;
+       struct pci_dev *pdev = rrpriv->pci_dev;
        unsigned long flags;
        u32 tmp;
        short i;
 
        netif_stop_queue(dev);
 
-       rrpriv = netdev_priv(dev);
-       regs = rrpriv->regs;
 
        /*
         * Lock to make sure we are not cleaning up while another CPU
@@ -1386,15 +1374,15 @@ static int rr_close(struct net_device *dev)
        rr_raz_tx(rrpriv, dev);
        rr_raz_rx(rrpriv, dev);
 
-       pci_free_consistent(rrpriv->pci_dev, 256 * sizeof(struct ring_ctrl),
+       pci_free_consistent(pdev, 256 * sizeof(struct ring_ctrl),
                            rrpriv->rx_ctrl, rrpriv->rx_ctrl_dma);
        rrpriv->rx_ctrl = NULL;
 
-       pci_free_consistent(rrpriv->pci_dev, sizeof(struct rr_info),
-                           rrpriv->info, rrpriv->info_dma);
+       pci_free_consistent(pdev, sizeof(struct rr_info), rrpriv->info,
+                           rrpriv->info_dma);
        rrpriv->info = NULL;
 
-       free_irq(dev->irq, dev);
+       free_irq(pdev->irq, dev);
        spin_unlock_irqrestore(&rrpriv->lock, flags);
 
        return 0;