|
@@ -4402,6 +4402,7 @@ static void __devexit et131x_pci_remove(struct pci_dev *pdev)
|
|
|
struct et131x_adapter *adapter = netdev_priv(netdev);
|
|
|
|
|
|
unregister_netdev(netdev);
|
|
|
+ phy_disconnect(adapter->phydev);
|
|
|
mdiobus_unregister(adapter->mii_bus);
|
|
|
kfree(adapter->mii_bus->irq);
|
|
|
mdiobus_free(adapter->mii_bus);
|
|
@@ -5250,40 +5251,6 @@ static const struct net_device_ops et131x_netdev_ops = {
|
|
|
.ndo_do_ioctl = et131x_ioctl,
|
|
|
};
|
|
|
|
|
|
-/**
|
|
|
- * et131x_device_alloc
|
|
|
- *
|
|
|
- * Returns pointer to the allocated and initialized net_device struct for
|
|
|
- * this device.
|
|
|
- *
|
|
|
- * Create instances of net_device and wl_private for the new adapter and
|
|
|
- * register the device's entry points in the net_device structure.
|
|
|
- */
|
|
|
-struct net_device *et131x_device_alloc(void)
|
|
|
-{
|
|
|
- struct net_device *netdev;
|
|
|
-
|
|
|
- /* Alloc net_device and adapter structs */
|
|
|
- netdev = alloc_etherdev(sizeof(struct et131x_adapter));
|
|
|
-
|
|
|
- if (!netdev) {
|
|
|
- printk(KERN_ERR "et131x: Alloc of net_device struct failed\n");
|
|
|
- return NULL;
|
|
|
- }
|
|
|
-
|
|
|
- /*
|
|
|
- * Setup the function registration table (and other data) for a
|
|
|
- * net_device
|
|
|
- */
|
|
|
- netdev->watchdog_timeo = ET131X_TX_TIMEOUT;
|
|
|
- netdev->netdev_ops = &et131x_netdev_ops;
|
|
|
-
|
|
|
- /* Poll? */
|
|
|
- /* netdev->poll = &et131x_poll; */
|
|
|
- /* netdev->poll_controller = &et131x_poll_controller; */
|
|
|
- return netdev;
|
|
|
-}
|
|
|
-
|
|
|
/**
|
|
|
* et131x_pci_setup - Perform device initialization
|
|
|
* @pdev: a pointer to the device's pci_dev structure
|
|
@@ -5299,24 +5266,26 @@ struct net_device *et131x_device_alloc(void)
|
|
|
static int __devinit et131x_pci_setup(struct pci_dev *pdev,
|
|
|
const struct pci_device_id *ent)
|
|
|
{
|
|
|
- int result;
|
|
|
struct net_device *netdev;
|
|
|
struct et131x_adapter *adapter;
|
|
|
+ int rc;
|
|
|
int ii;
|
|
|
|
|
|
- result = pci_enable_device(pdev);
|
|
|
- if (result) {
|
|
|
+ rc = pci_enable_device(pdev);
|
|
|
+ if (rc < 0) {
|
|
|
dev_err(&pdev->dev, "pci_enable_device() failed\n");
|
|
|
- goto err_out;
|
|
|
+ goto out;
|
|
|
}
|
|
|
|
|
|
/* Perform some basic PCI checks */
|
|
|
if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) {
|
|
|
dev_err(&pdev->dev, "Can't find PCI device's base address\n");
|
|
|
+ rc = -ENODEV;
|
|
|
goto err_disable;
|
|
|
}
|
|
|
|
|
|
- if (pci_request_regions(pdev, DRIVER_NAME)) {
|
|
|
+ rc = pci_request_regions(pdev, DRIVER_NAME);
|
|
|
+ if (rc < 0) {
|
|
|
dev_err(&pdev->dev, "Can't get PCI resources\n");
|
|
|
goto err_disable;
|
|
|
}
|
|
@@ -5325,46 +5294,50 @@ static int __devinit et131x_pci_setup(struct pci_dev *pdev,
|
|
|
|
|
|
/* Check the DMA addressing support of this device */
|
|
|
if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) {
|
|
|
- result = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64));
|
|
|
- if (result) {
|
|
|
+ rc = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64));
|
|
|
+ if (rc < 0) {
|
|
|
dev_err(&pdev->dev,
|
|
|
"Unable to obtain 64 bit DMA for consistent allocations\n");
|
|
|
goto err_release_res;
|
|
|
}
|
|
|
} else if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(32))) {
|
|
|
- result = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
|
|
|
- if (result) {
|
|
|
+ rc = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
|
|
|
+ if (rc < 0) {
|
|
|
dev_err(&pdev->dev,
|
|
|
"Unable to obtain 32 bit DMA for consistent allocations\n");
|
|
|
goto err_release_res;
|
|
|
}
|
|
|
} else {
|
|
|
dev_err(&pdev->dev, "No usable DMA addressing method\n");
|
|
|
- result = -EIO;
|
|
|
+ rc = -EIO;
|
|
|
goto err_release_res;
|
|
|
}
|
|
|
|
|
|
/* Allocate netdev and private adapter structs */
|
|
|
- netdev = et131x_device_alloc();
|
|
|
+ netdev = alloc_etherdev(sizeof(struct et131x_adapter));
|
|
|
if (!netdev) {
|
|
|
dev_err(&pdev->dev, "Couldn't alloc netdev struct\n");
|
|
|
- result = -ENOMEM;
|
|
|
+ rc = -ENOMEM;
|
|
|
goto err_release_res;
|
|
|
}
|
|
|
|
|
|
+ netdev->watchdog_timeo = ET131X_TX_TIMEOUT;
|
|
|
+ netdev->netdev_ops = &et131x_netdev_ops;
|
|
|
+
|
|
|
SET_NETDEV_DEV(netdev, &pdev->dev);
|
|
|
et131x_set_ethtool_ops(netdev);
|
|
|
|
|
|
adapter = et131x_adapter_init(netdev, pdev);
|
|
|
|
|
|
- /* Initialise the PCI setup for the device */
|
|
|
- et131x_pci_init(adapter, pdev);
|
|
|
+ rc = et131x_pci_init(adapter, pdev);
|
|
|
+ if (rc < 0)
|
|
|
+ goto err_free_dev;
|
|
|
|
|
|
/* Map the bus-relative registers to system virtual memory */
|
|
|
adapter->regs = pci_ioremap_bar(pdev, 0);
|
|
|
if (!adapter->regs) {
|
|
|
dev_err(&pdev->dev, "Cannot map device registers\n");
|
|
|
- result = -ENOMEM;
|
|
|
+ rc = -ENOMEM;
|
|
|
goto err_free_dev;
|
|
|
}
|
|
|
|
|
@@ -5378,8 +5351,8 @@ static int __devinit et131x_pci_setup(struct pci_dev *pdev,
|
|
|
et131x_disable_interrupts(adapter);
|
|
|
|
|
|
/* Allocate DMA memory */
|
|
|
- result = et131x_adapter_memory_alloc(adapter);
|
|
|
- if (result) {
|
|
|
+ rc = et131x_adapter_memory_alloc(adapter);
|
|
|
+ if (rc < 0) {
|
|
|
dev_err(&pdev->dev, "Could not alloc adapater memory (DMA)\n");
|
|
|
goto err_iounmap;
|
|
|
}
|
|
@@ -5397,6 +5370,8 @@ static int __devinit et131x_pci_setup(struct pci_dev *pdev,
|
|
|
adapter->boot_coma = 0;
|
|
|
et1310_disable_phy_coma(adapter);
|
|
|
|
|
|
+ rc = -ENOMEM;
|
|
|
+
|
|
|
/* Setup the mii_bus struct */
|
|
|
adapter->mii_bus = mdiobus_alloc();
|
|
|
if (!adapter->mii_bus) {
|
|
@@ -5420,13 +5395,14 @@ static int __devinit et131x_pci_setup(struct pci_dev *pdev,
|
|
|
for (ii = 0; ii < PHY_MAX_ADDR; ii++)
|
|
|
adapter->mii_bus->irq[ii] = PHY_POLL;
|
|
|
|
|
|
- if (mdiobus_register(adapter->mii_bus)) {
|
|
|
+ rc = mdiobus_register(adapter->mii_bus);
|
|
|
+ if (rc < 0) {
|
|
|
dev_err(&pdev->dev, "failed to register MII bus\n");
|
|
|
- mdiobus_free(adapter->mii_bus);
|
|
|
goto err_mdio_free_irq;
|
|
|
}
|
|
|
|
|
|
- if (et131x_mii_probe(netdev)) {
|
|
|
+ rc = et131x_mii_probe(netdev);
|
|
|
+ if (rc < 0) {
|
|
|
dev_err(&pdev->dev, "failed to probe MII bus\n");
|
|
|
goto err_mdio_unregister;
|
|
|
}
|
|
@@ -5442,10 +5418,10 @@ static int __devinit et131x_pci_setup(struct pci_dev *pdev,
|
|
|
*/
|
|
|
|
|
|
/* Register the net_device struct with the Linux network layer */
|
|
|
- result = register_netdev(netdev);
|
|
|
- if (result != 0) {
|
|
|
+ rc = register_netdev(netdev);
|
|
|
+ if (rc < 0) {
|
|
|
dev_err(&pdev->dev, "register_netdev() failed\n");
|
|
|
- goto err_mdio_unregister;
|
|
|
+ goto err_phy_disconnect;
|
|
|
}
|
|
|
|
|
|
/* Register the net_device struct with the PCI subsystem. Save a copy
|
|
@@ -5454,9 +5430,11 @@ static int __devinit et131x_pci_setup(struct pci_dev *pdev,
|
|
|
*/
|
|
|
pci_set_drvdata(pdev, netdev);
|
|
|
pci_save_state(adapter->pdev);
|
|
|
+out:
|
|
|
+ return rc;
|
|
|
|
|
|
- return result;
|
|
|
-
|
|
|
+err_phy_disconnect:
|
|
|
+ phy_disconnect(adapter->phydev);
|
|
|
err_mdio_unregister:
|
|
|
mdiobus_unregister(adapter->mii_bus);
|
|
|
err_mdio_free_irq:
|
|
@@ -5474,8 +5452,7 @@ err_release_res:
|
|
|
pci_release_regions(pdev);
|
|
|
err_disable:
|
|
|
pci_disable_device(pdev);
|
|
|
-err_out:
|
|
|
- return result;
|
|
|
+ goto out;
|
|
|
}
|
|
|
|
|
|
static DEFINE_PCI_DEVICE_TABLE(et131x_pci_table) = {
|