net: tulip: convert to devres
Works fine on my HP C3600: [ 274.452394] tulip0: no phy info, aborting mtable build [ 274.499041] tulip0: MII transceiver #1 config 1000 status 782d advertising 01e1 [ 274.750691] net eth0: Digital DS21142/43 Tulip rev 65 at MMIO 0xf4008000, 00:30:6e:08:7d:21, IRQ 17 [ 283.104520] net eth0: Setting full-duplex based on MII#1 link partner capability of c1e1 Signed-off-by: Rolf Eike Beer <eike-kernel@sf-tec.de> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
382d917bfc
commit
3daebfbeb4
2 changed files with 20 additions and 51 deletions
|
@ -117,8 +117,8 @@ static void tulip_build_fake_mediatable(struct tulip_private *tp)
|
||||||
0x00, 0x06 /* ttm bit map */
|
0x00, 0x06 /* ttm bit map */
|
||||||
};
|
};
|
||||||
|
|
||||||
tp->mtable = kmalloc(sizeof(struct mediatable) +
|
tp->mtable = devm_kmalloc(&tp->pdev->pdev, sizeof(struct mediatable) +
|
||||||
sizeof(struct medialeaf), GFP_KERNEL);
|
sizeof(struct medialeaf), GFP_KERNEL);
|
||||||
|
|
||||||
if (tp->mtable == NULL)
|
if (tp->mtable == NULL)
|
||||||
return; /* Horrible, impossible failure. */
|
return; /* Horrible, impossible failure. */
|
||||||
|
@ -224,7 +224,8 @@ subsequent_board:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mtable = kmalloc(struct_size(mtable, mleaf, count), GFP_KERNEL);
|
mtable = devm_kmalloc(&tp->pdev->dev, struct_size(mtable, mleaf, count),
|
||||||
|
GFP_KERNEL);
|
||||||
if (mtable == NULL)
|
if (mtable == NULL)
|
||||||
return; /* Horrible, impossible failure. */
|
return; /* Horrible, impossible failure. */
|
||||||
last_mediatable = tp->mtable = mtable;
|
last_mediatable = tp->mtable = mtable;
|
||||||
|
|
|
@ -1389,7 +1389,7 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
* And back to business
|
* And back to business
|
||||||
*/
|
*/
|
||||||
|
|
||||||
i = pci_enable_device(pdev);
|
i = pcim_enable_device(pdev);
|
||||||
if (i) {
|
if (i) {
|
||||||
pr_err("Cannot enable tulip board #%d, aborting\n", board_idx);
|
pr_err("Cannot enable tulip board #%d, aborting\n", board_idx);
|
||||||
return i;
|
return i;
|
||||||
|
@ -1398,11 +1398,9 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
irq = pdev->irq;
|
irq = pdev->irq;
|
||||||
|
|
||||||
/* alloc_etherdev ensures aligned and zeroed private structures */
|
/* alloc_etherdev ensures aligned and zeroed private structures */
|
||||||
dev = alloc_etherdev (sizeof (*tp));
|
dev = devm_alloc_etherdev(&pdev->dev, sizeof(*tp));
|
||||||
if (!dev) {
|
if (!dev)
|
||||||
pci_disable_device(pdev);
|
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
|
||||||
|
|
||||||
SET_NETDEV_DEV(dev, &pdev->dev);
|
SET_NETDEV_DEV(dev, &pdev->dev);
|
||||||
if (pci_resource_len (pdev, 0) < tulip_tbl[chip_idx].io_size) {
|
if (pci_resource_len (pdev, 0) < tulip_tbl[chip_idx].io_size) {
|
||||||
|
@ -1410,18 +1408,18 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
pci_name(pdev),
|
pci_name(pdev),
|
||||||
(unsigned long long)pci_resource_len (pdev, 0),
|
(unsigned long long)pci_resource_len (pdev, 0),
|
||||||
(unsigned long long)pci_resource_start (pdev, 0));
|
(unsigned long long)pci_resource_start (pdev, 0));
|
||||||
goto err_out_free_netdev;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* grab all resources from both PIO and MMIO regions, as we
|
/* grab all resources from both PIO and MMIO regions, as we
|
||||||
* don't want anyone else messing around with our hardware */
|
* don't want anyone else messing around with our hardware */
|
||||||
if (pci_request_regions (pdev, DRV_NAME))
|
if (pci_request_regions(pdev, DRV_NAME))
|
||||||
goto err_out_free_netdev;
|
return -ENODEV;
|
||||||
|
|
||||||
ioaddr = pci_iomap(pdev, TULIP_BAR, tulip_tbl[chip_idx].io_size);
|
ioaddr = pcim_iomap(pdev, TULIP_BAR, tulip_tbl[chip_idx].io_size);
|
||||||
|
|
||||||
if (!ioaddr)
|
if (!ioaddr)
|
||||||
goto err_out_free_res;
|
return -ENODEV;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* initialize private data structure 'tp'
|
* initialize private data structure 'tp'
|
||||||
|
@ -1430,12 +1428,12 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
tp = netdev_priv(dev);
|
tp = netdev_priv(dev);
|
||||||
tp->dev = dev;
|
tp->dev = dev;
|
||||||
|
|
||||||
tp->rx_ring = dma_alloc_coherent(&pdev->dev,
|
tp->rx_ring = dmam_alloc_coherent(&pdev->dev,
|
||||||
sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
|
sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
|
||||||
sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
|
sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
|
||||||
&tp->rx_ring_dma, GFP_KERNEL);
|
&tp->rx_ring_dma, GFP_KERNEL);
|
||||||
if (!tp->rx_ring)
|
if (!tp->rx_ring)
|
||||||
goto err_out_mtable;
|
return -ENODEV;
|
||||||
tp->tx_ring = (struct tulip_tx_desc *)(tp->rx_ring + RX_RING_SIZE);
|
tp->tx_ring = (struct tulip_tx_desc *)(tp->rx_ring + RX_RING_SIZE);
|
||||||
tp->tx_ring_dma = tp->rx_ring_dma + sizeof(struct tulip_rx_desc) * RX_RING_SIZE;
|
tp->tx_ring_dma = tp->rx_ring_dma + sizeof(struct tulip_rx_desc) * RX_RING_SIZE;
|
||||||
|
|
||||||
|
@ -1695,8 +1693,9 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
#endif
|
#endif
|
||||||
dev->ethtool_ops = &ops;
|
dev->ethtool_ops = &ops;
|
||||||
|
|
||||||
if (register_netdev(dev))
|
i = register_netdev(dev);
|
||||||
goto err_out_free_ring;
|
if (i)
|
||||||
|
return i;
|
||||||
|
|
||||||
pci_set_drvdata(pdev, dev);
|
pci_set_drvdata(pdev, dev);
|
||||||
|
|
||||||
|
@ -1771,24 +1770,6 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
tulip_set_power_state (tp, 0, 1);
|
tulip_set_power_state (tp, 0, 1);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_out_free_ring:
|
|
||||||
dma_free_coherent(&pdev->dev,
|
|
||||||
sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
|
|
||||||
sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
|
|
||||||
tp->rx_ring, tp->rx_ring_dma);
|
|
||||||
|
|
||||||
err_out_mtable:
|
|
||||||
kfree (tp->mtable);
|
|
||||||
pci_iounmap(pdev, ioaddr);
|
|
||||||
|
|
||||||
err_out_free_res:
|
|
||||||
pci_release_regions (pdev);
|
|
||||||
|
|
||||||
err_out_free_netdev:
|
|
||||||
free_netdev (dev);
|
|
||||||
pci_disable_device(pdev);
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1888,24 +1869,11 @@ static int __maybe_unused tulip_resume(struct device *dev_d)
|
||||||
static void tulip_remove_one(struct pci_dev *pdev)
|
static void tulip_remove_one(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
struct net_device *dev = pci_get_drvdata (pdev);
|
struct net_device *dev = pci_get_drvdata (pdev);
|
||||||
struct tulip_private *tp;
|
|
||||||
|
|
||||||
if (!dev)
|
if (!dev)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
tp = netdev_priv(dev);
|
|
||||||
unregister_netdev(dev);
|
unregister_netdev(dev);
|
||||||
dma_free_coherent(&pdev->dev,
|
|
||||||
sizeof(struct tulip_rx_desc) * RX_RING_SIZE +
|
|
||||||
sizeof(struct tulip_tx_desc) * TX_RING_SIZE,
|
|
||||||
tp->rx_ring, tp->rx_ring_dma);
|
|
||||||
kfree (tp->mtable);
|
|
||||||
pci_iounmap(pdev, tp->base_addr);
|
|
||||||
free_netdev (dev);
|
|
||||||
pci_release_regions (pdev);
|
|
||||||
pci_disable_device(pdev);
|
|
||||||
|
|
||||||
/* pci_power_off (pdev, -1); */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||||
|
|
Loading…
Add table
Reference in a new issue