diff options
author | Mark Einon <mark.einon@gmail.com> | 2011-10-23 05:22:49 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-10-23 05:35:12 -0400 |
commit | 5da2b1581a24af6a50d40737c44a9ae13d3097b3 (patch) | |
tree | 22c7a4f66a98cd32b0e9f8cbc854b636c68a77c6 | |
parent | 36f2771a70c44b3fbc1be34d5a82e8472437c7ca (diff) |
staging: et131x: Remove more forward declarations
Moved functions in et131x.c file to remove the following forward
declarations:
et131x_soft_reset
et131x_isr_handler
et131x_device_alloc
Signed-off-by: Mark Einon <mark.einon@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | drivers/staging/et131x/et131x.c | 505 |
1 files changed, 251 insertions, 254 deletions
diff --git a/drivers/staging/et131x/et131x.c b/drivers/staging/et131x/et131x.c index 29476350fca8..44fff21ae50d 100644 --- a/drivers/staging/et131x/et131x.c +++ b/drivers/staging/et131x/et131x.c | |||
@@ -576,13 +576,10 @@ struct et131x_adapter { | |||
576 | struct net_device_stats net_stats; | 576 | struct net_device_stats net_stats; |
577 | }; | 577 | }; |
578 | 578 | ||
579 | void et131x_soft_reset(struct et131x_adapter *adapter); | ||
580 | void et131x_isr_handler(struct work_struct *work); | ||
581 | void et1310_setup_device_for_multicast(struct et131x_adapter *adapter); | 579 | void et1310_setup_device_for_multicast(struct et131x_adapter *adapter); |
582 | void et1310_setup_device_for_unicast(struct et131x_adapter *adapter); | 580 | void et1310_setup_device_for_unicast(struct et131x_adapter *adapter); |
583 | void et131x_up(struct net_device *netdev); | 581 | void et131x_up(struct net_device *netdev); |
584 | void et131x_down(struct net_device *netdev); | 582 | void et131x_down(struct net_device *netdev); |
585 | struct net_device *et131x_device_alloc(void); | ||
586 | void et131x_enable_txrx(struct net_device *netdev); | 583 | void et131x_enable_txrx(struct net_device *netdev); |
587 | void et131x_disable_txrx(struct net_device *netdev); | 584 | void et131x_disable_txrx(struct net_device *netdev); |
588 | int et1310_in_phy_coma(struct et131x_adapter *adapter); | 585 | int et1310_in_phy_coma(struct et131x_adapter *adapter); |
@@ -1970,6 +1967,21 @@ void et131x_adapter_setup(struct et131x_adapter *adapter) | |||
1970 | } | 1967 | } |
1971 | 1968 | ||
1972 | /** | 1969 | /** |
1970 | * et131x_soft_reset - Issue a soft reset to the hardware, complete for ET1310 | ||
1971 | * @adapter: pointer to our private adapter structure | ||
1972 | */ | ||
1973 | void et131x_soft_reset(struct et131x_adapter *adapter) | ||
1974 | { | ||
1975 | /* Disable MAC Core */ | ||
1976 | writel(0xc00f0000, &adapter->regs->mac.cfg1); | ||
1977 | |||
1978 | /* Set everything to a reset value */ | ||
1979 | writel(0x7F, &adapter->regs->global.sw_reset); | ||
1980 | writel(0x000f0000, &adapter->regs->mac.cfg1); | ||
1981 | writel(0x00000000, &adapter->regs->mac.cfg1); | ||
1982 | } | ||
1983 | |||
1984 | /** | ||
1973 | * et1310_enable_phy_coma - called when network cable is unplugged | 1985 | * et1310_enable_phy_coma - called when network cable is unplugged |
1974 | * @adapter: pointer to our adapter structure | 1986 | * @adapter: pointer to our adapter structure |
1975 | * | 1987 | * |
@@ -4097,21 +4109,6 @@ void et131x_error_timer_handler(unsigned long data) | |||
4097 | } | 4109 | } |
4098 | 4110 | ||
4099 | /** | 4111 | /** |
4100 | * et131x_soft_reset - Issue a soft reset to the hardware, complete for ET1310 | ||
4101 | * @adapter: pointer to our private adapter structure | ||
4102 | */ | ||
4103 | void et131x_soft_reset(struct et131x_adapter *adapter) | ||
4104 | { | ||
4105 | /* Disable MAC Core */ | ||
4106 | writel(0xc00f0000, &adapter->regs->mac.cfg1); | ||
4107 | |||
4108 | /* Set everything to a reset value */ | ||
4109 | writel(0x7F, &adapter->regs->global.sw_reset); | ||
4110 | writel(0x000f0000, &adapter->regs->mac.cfg1); | ||
4111 | writel(0x00000000, &adapter->regs->mac.cfg1); | ||
4112 | } | ||
4113 | |||
4114 | /** | ||
4115 | * et131x_adapter_memory_alloc | 4112 | * et131x_adapter_memory_alloc |
4116 | * @adapter: pointer to our private adapter structure | 4113 | * @adapter: pointer to our private adapter structure |
4117 | * | 4114 | * |
@@ -4365,200 +4362,6 @@ void et131x_disable_interrupts(struct et131x_adapter *adapter) | |||
4365 | } | 4362 | } |
4366 | 4363 | ||
4367 | /** | 4364 | /** |
4368 | * et131x_pci_setup - Perform device initialization | ||
4369 | * @pdev: a pointer to the device's pci_dev structure | ||
4370 | * @ent: this device's entry in the pci_device_id table | ||
4371 | * | ||
4372 | * Returns 0 on success, errno on failure (as defined in errno.h) | ||
4373 | * | ||
4374 | * Registered in the pci_driver structure, this function is called when the | ||
4375 | * PCI subsystem finds a new PCI device which matches the information | ||
4376 | * contained in the pci_device_id table. This routine is the equivalent to | ||
4377 | * a device insertion routine. | ||
4378 | */ | ||
4379 | static int __devinit et131x_pci_setup(struct pci_dev *pdev, | ||
4380 | const struct pci_device_id *ent) | ||
4381 | { | ||
4382 | int result; | ||
4383 | struct net_device *netdev; | ||
4384 | struct et131x_adapter *adapter; | ||
4385 | int ii; | ||
4386 | |||
4387 | result = pci_enable_device(pdev); | ||
4388 | if (result) { | ||
4389 | dev_err(&pdev->dev, "pci_enable_device() failed\n"); | ||
4390 | goto err_out; | ||
4391 | } | ||
4392 | |||
4393 | /* Perform some basic PCI checks */ | ||
4394 | if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) { | ||
4395 | dev_err(&pdev->dev, "Can't find PCI device's base address\n"); | ||
4396 | goto err_disable; | ||
4397 | } | ||
4398 | |||
4399 | if (pci_request_regions(pdev, DRIVER_NAME)) { | ||
4400 | dev_err(&pdev->dev, "Can't get PCI resources\n"); | ||
4401 | goto err_disable; | ||
4402 | } | ||
4403 | |||
4404 | pci_set_master(pdev); | ||
4405 | |||
4406 | /* Check the DMA addressing support of this device */ | ||
4407 | if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) { | ||
4408 | result = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64)); | ||
4409 | if (result) { | ||
4410 | dev_err(&pdev->dev, | ||
4411 | "Unable to obtain 64 bit DMA for consistent allocations\n"); | ||
4412 | goto err_release_res; | ||
4413 | } | ||
4414 | } else if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(32))) { | ||
4415 | result = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32)); | ||
4416 | if (result) { | ||
4417 | dev_err(&pdev->dev, | ||
4418 | "Unable to obtain 32 bit DMA for consistent allocations\n"); | ||
4419 | goto err_release_res; | ||
4420 | } | ||
4421 | } else { | ||
4422 | dev_err(&pdev->dev, "No usable DMA addressing method\n"); | ||
4423 | result = -EIO; | ||
4424 | goto err_release_res; | ||
4425 | } | ||
4426 | |||
4427 | /* Allocate netdev and private adapter structs */ | ||
4428 | netdev = et131x_device_alloc(); | ||
4429 | if (!netdev) { | ||
4430 | dev_err(&pdev->dev, "Couldn't alloc netdev struct\n"); | ||
4431 | result = -ENOMEM; | ||
4432 | goto err_release_res; | ||
4433 | } | ||
4434 | |||
4435 | SET_NETDEV_DEV(netdev, &pdev->dev); | ||
4436 | et131x_set_ethtool_ops(netdev); | ||
4437 | |||
4438 | adapter = et131x_adapter_init(netdev, pdev); | ||
4439 | |||
4440 | /* Initialise the PCI setup for the device */ | ||
4441 | et131x_pci_init(adapter, pdev); | ||
4442 | |||
4443 | /* Map the bus-relative registers to system virtual memory */ | ||
4444 | adapter->regs = pci_ioremap_bar(pdev, 0); | ||
4445 | if (!adapter->regs) { | ||
4446 | dev_err(&pdev->dev, "Cannot map device registers\n"); | ||
4447 | result = -ENOMEM; | ||
4448 | goto err_free_dev; | ||
4449 | } | ||
4450 | |||
4451 | /* If Phy COMA mode was enabled when we went down, disable it here. */ | ||
4452 | writel(ET_PMCSR_INIT, &adapter->regs->global.pm_csr); | ||
4453 | |||
4454 | /* Issue a global reset to the et1310 */ | ||
4455 | et131x_soft_reset(adapter); | ||
4456 | |||
4457 | /* Disable all interrupts (paranoid) */ | ||
4458 | et131x_disable_interrupts(adapter); | ||
4459 | |||
4460 | /* Allocate DMA memory */ | ||
4461 | result = et131x_adapter_memory_alloc(adapter); | ||
4462 | if (result) { | ||
4463 | dev_err(&pdev->dev, "Could not alloc adapater memory (DMA)\n"); | ||
4464 | goto err_iounmap; | ||
4465 | } | ||
4466 | |||
4467 | /* Init send data structures */ | ||
4468 | et131x_init_send(adapter); | ||
4469 | |||
4470 | /* Set up the task structure for the ISR's deferred handler */ | ||
4471 | INIT_WORK(&adapter->task, et131x_isr_handler); | ||
4472 | |||
4473 | /* Copy address into the net_device struct */ | ||
4474 | memcpy(netdev->dev_addr, adapter->addr, ETH_ALEN); | ||
4475 | |||
4476 | /* Init variable for counting how long we do not have link status */ | ||
4477 | adapter->boot_coma = 0; | ||
4478 | et1310_disable_phy_coma(adapter); | ||
4479 | |||
4480 | /* Setup the mii_bus struct */ | ||
4481 | adapter->mii_bus = mdiobus_alloc(); | ||
4482 | if (!adapter->mii_bus) { | ||
4483 | dev_err(&pdev->dev, "Alloc of mii_bus struct failed\n"); | ||
4484 | goto err_mem_free; | ||
4485 | } | ||
4486 | |||
4487 | adapter->mii_bus->name = "et131x_eth_mii"; | ||
4488 | snprintf(adapter->mii_bus->id, MII_BUS_ID_SIZE, "%x", | ||
4489 | (adapter->pdev->bus->number << 8) | adapter->pdev->devfn); | ||
4490 | adapter->mii_bus->priv = netdev; | ||
4491 | adapter->mii_bus->read = et131x_mdio_read; | ||
4492 | adapter->mii_bus->write = et131x_mdio_write; | ||
4493 | adapter->mii_bus->reset = et131x_mdio_reset; | ||
4494 | adapter->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL); | ||
4495 | if (!adapter->mii_bus->irq) { | ||
4496 | dev_err(&pdev->dev, "mii_bus irq allocation failed\n"); | ||
4497 | goto err_mdio_free; | ||
4498 | } | ||
4499 | |||
4500 | for (ii = 0; ii < PHY_MAX_ADDR; ii++) | ||
4501 | adapter->mii_bus->irq[ii] = PHY_POLL; | ||
4502 | |||
4503 | if (mdiobus_register(adapter->mii_bus)) { | ||
4504 | dev_err(&pdev->dev, "failed to register MII bus\n"); | ||
4505 | mdiobus_free(adapter->mii_bus); | ||
4506 | goto err_mdio_free_irq; | ||
4507 | } | ||
4508 | |||
4509 | if (et131x_mii_probe(netdev)) { | ||
4510 | dev_err(&pdev->dev, "failed to probe MII bus\n"); | ||
4511 | goto err_mdio_unregister; | ||
4512 | } | ||
4513 | |||
4514 | /* Setup et1310 as per the documentation */ | ||
4515 | et131x_adapter_setup(adapter); | ||
4516 | |||
4517 | /* We can enable interrupts now | ||
4518 | * | ||
4519 | * NOTE - Because registration of interrupt handler is done in the | ||
4520 | * device's open(), defer enabling device interrupts to that | ||
4521 | * point | ||
4522 | */ | ||
4523 | |||
4524 | /* Register the net_device struct with the Linux network layer */ | ||
4525 | result = register_netdev(netdev); | ||
4526 | if (result != 0) { | ||
4527 | dev_err(&pdev->dev, "register_netdev() failed\n"); | ||
4528 | goto err_mdio_unregister; | ||
4529 | } | ||
4530 | |||
4531 | /* Register the net_device struct with the PCI subsystem. Save a copy | ||
4532 | * of the PCI config space for this device now that the device has | ||
4533 | * been initialized, just in case it needs to be quickly restored. | ||
4534 | */ | ||
4535 | pci_set_drvdata(pdev, netdev); | ||
4536 | pci_save_state(adapter->pdev); | ||
4537 | |||
4538 | return result; | ||
4539 | |||
4540 | err_mdio_unregister: | ||
4541 | mdiobus_unregister(adapter->mii_bus); | ||
4542 | err_mdio_free_irq: | ||
4543 | kfree(adapter->mii_bus->irq); | ||
4544 | err_mdio_free: | ||
4545 | mdiobus_free(adapter->mii_bus); | ||
4546 | err_mem_free: | ||
4547 | et131x_adapter_memory_free(adapter); | ||
4548 | err_iounmap: | ||
4549 | iounmap(adapter->regs); | ||
4550 | err_free_dev: | ||
4551 | pci_dev_put(pdev); | ||
4552 | free_netdev(netdev); | ||
4553 | err_release_res: | ||
4554 | pci_release_regions(pdev); | ||
4555 | err_disable: | ||
4556 | pci_disable_device(pdev); | ||
4557 | err_out: | ||
4558 | return result; | ||
4559 | } | ||
4560 | |||
4561 | /** | ||
4562 | * et131x_pci_remove | 4365 | * et131x_pci_remove |
4563 | * @pdev: a pointer to the device's pci_dev structure | 4366 | * @pdev: a pointer to the device's pci_dev structure |
4564 | * | 4367 | * |
@@ -4614,48 +4417,6 @@ static int et131x_resume(struct device *dev) | |||
4614 | return 0; | 4417 | return 0; |
4615 | } | 4418 | } |
4616 | 4419 | ||
4617 | static SIMPLE_DEV_PM_OPS(et131x_pm_ops, et131x_suspend, et131x_resume); | ||
4618 | #define ET131X_PM_OPS (&et131x_pm_ops) | ||
4619 | #else | ||
4620 | #define ET131X_PM_OPS NULL | ||
4621 | #endif | ||
4622 | |||
4623 | static DEFINE_PCI_DEVICE_TABLE(et131x_pci_table) = { | ||
4624 | { PCI_VDEVICE(ATT, ET131X_PCI_DEVICE_ID_GIG), 0UL}, | ||
4625 | { PCI_VDEVICE(ATT, ET131X_PCI_DEVICE_ID_FAST), 0UL}, | ||
4626 | {0,} | ||
4627 | }; | ||
4628 | MODULE_DEVICE_TABLE(pci, et131x_pci_table); | ||
4629 | |||
4630 | static struct pci_driver et131x_driver = { | ||
4631 | .name = DRIVER_NAME, | ||
4632 | .id_table = et131x_pci_table, | ||
4633 | .probe = et131x_pci_setup, | ||
4634 | .remove = __devexit_p(et131x_pci_remove), | ||
4635 | .driver.pm = ET131X_PM_OPS, | ||
4636 | }; | ||
4637 | |||
4638 | /** | ||
4639 | * et131x_init_module - The "main" entry point called on driver initialization | ||
4640 | * | ||
4641 | * Returns 0 on success, errno on failure (as defined in errno.h) | ||
4642 | */ | ||
4643 | static int __init et131x_init_module(void) | ||
4644 | { | ||
4645 | return pci_register_driver(&et131x_driver); | ||
4646 | } | ||
4647 | |||
4648 | /** | ||
4649 | * et131x_cleanup_module - The entry point called on driver cleanup | ||
4650 | */ | ||
4651 | static void __exit et131x_cleanup_module(void) | ||
4652 | { | ||
4653 | pci_unregister_driver(&et131x_driver); | ||
4654 | } | ||
4655 | |||
4656 | module_init(et131x_init_module); | ||
4657 | module_exit(et131x_cleanup_module); | ||
4658 | |||
4659 | /* ISR functions */ | 4420 | /* ISR functions */ |
4660 | 4421 | ||
4661 | /** | 4422 | /** |
@@ -5528,3 +5289,239 @@ struct net_device *et131x_device_alloc(void) | |||
5528 | return netdev; | 5289 | return netdev; |
5529 | } | 5290 | } |
5530 | 5291 | ||
5292 | /** | ||
5293 | * et131x_pci_setup - Perform device initialization | ||
5294 | * @pdev: a pointer to the device's pci_dev structure | ||
5295 | * @ent: this device's entry in the pci_device_id table | ||
5296 | * | ||
5297 | * Returns 0 on success, errno on failure (as defined in errno.h) | ||
5298 | * | ||
5299 | * Registered in the pci_driver structure, this function is called when the | ||
5300 | * PCI subsystem finds a new PCI device which matches the information | ||
5301 | * contained in the pci_device_id table. This routine is the equivalent to | ||
5302 | * a device insertion routine. | ||
5303 | */ | ||
5304 | static int __devinit et131x_pci_setup(struct pci_dev *pdev, | ||
5305 | const struct pci_device_id *ent) | ||
5306 | { | ||
5307 | int result; | ||
5308 | struct net_device *netdev; | ||
5309 | struct et131x_adapter *adapter; | ||
5310 | int ii; | ||
5311 | |||
5312 | result = pci_enable_device(pdev); | ||
5313 | if (result) { | ||
5314 | dev_err(&pdev->dev, "pci_enable_device() failed\n"); | ||
5315 | goto err_out; | ||
5316 | } | ||
5317 | |||
5318 | /* Perform some basic PCI checks */ | ||
5319 | if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) { | ||
5320 | dev_err(&pdev->dev, "Can't find PCI device's base address\n"); | ||
5321 | goto err_disable; | ||
5322 | } | ||
5323 | |||
5324 | if (pci_request_regions(pdev, DRIVER_NAME)) { | ||
5325 | dev_err(&pdev->dev, "Can't get PCI resources\n"); | ||
5326 | goto err_disable; | ||
5327 | } | ||
5328 | |||
5329 | pci_set_master(pdev); | ||
5330 | |||
5331 | /* Check the DMA addressing support of this device */ | ||
5332 | if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) { | ||
5333 | result = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64)); | ||
5334 | if (result) { | ||
5335 | dev_err(&pdev->dev, | ||
5336 | "Unable to obtain 64 bit DMA for consistent allocations\n"); | ||
5337 | goto err_release_res; | ||
5338 | } | ||
5339 | } else if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(32))) { | ||
5340 | result = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32)); | ||
5341 | if (result) { | ||
5342 | dev_err(&pdev->dev, | ||
5343 | "Unable to obtain 32 bit DMA for consistent allocations\n"); | ||
5344 | goto err_release_res; | ||
5345 | } | ||
5346 | } else { | ||
5347 | dev_err(&pdev->dev, "No usable DMA addressing method\n"); | ||
5348 | result = -EIO; | ||
5349 | goto err_release_res; | ||
5350 | } | ||
5351 | |||
5352 | /* Allocate netdev and private adapter structs */ | ||
5353 | netdev = et131x_device_alloc(); | ||
5354 | if (!netdev) { | ||
5355 | dev_err(&pdev->dev, "Couldn't alloc netdev struct\n"); | ||
5356 | result = -ENOMEM; | ||
5357 | goto err_release_res; | ||
5358 | } | ||
5359 | |||
5360 | SET_NETDEV_DEV(netdev, &pdev->dev); | ||
5361 | et131x_set_ethtool_ops(netdev); | ||
5362 | |||
5363 | adapter = et131x_adapter_init(netdev, pdev); | ||
5364 | |||
5365 | /* Initialise the PCI setup for the device */ | ||
5366 | et131x_pci_init(adapter, pdev); | ||
5367 | |||
5368 | /* Map the bus-relative registers to system virtual memory */ | ||
5369 | adapter->regs = pci_ioremap_bar(pdev, 0); | ||
5370 | if (!adapter->regs) { | ||
5371 | dev_err(&pdev->dev, "Cannot map device registers\n"); | ||
5372 | result = -ENOMEM; | ||
5373 | goto err_free_dev; | ||
5374 | } | ||
5375 | |||
5376 | /* If Phy COMA mode was enabled when we went down, disable it here. */ | ||
5377 | writel(ET_PMCSR_INIT, &adapter->regs->global.pm_csr); | ||
5378 | |||
5379 | /* Issue a global reset to the et1310 */ | ||
5380 | et131x_soft_reset(adapter); | ||
5381 | |||
5382 | /* Disable all interrupts (paranoid) */ | ||
5383 | et131x_disable_interrupts(adapter); | ||
5384 | |||
5385 | /* Allocate DMA memory */ | ||
5386 | result = et131x_adapter_memory_alloc(adapter); | ||
5387 | if (result) { | ||
5388 | dev_err(&pdev->dev, "Could not alloc adapater memory (DMA)\n"); | ||
5389 | goto err_iounmap; | ||
5390 | } | ||
5391 | |||
5392 | /* Init send data structures */ | ||
5393 | et131x_init_send(adapter); | ||
5394 | |||
5395 | /* Set up the task structure for the ISR's deferred handler */ | ||
5396 | INIT_WORK(&adapter->task, et131x_isr_handler); | ||
5397 | |||
5398 | /* Copy address into the net_device struct */ | ||
5399 | memcpy(netdev->dev_addr, adapter->addr, ETH_ALEN); | ||
5400 | |||
5401 | /* Init variable for counting how long we do not have link status */ | ||
5402 | adapter->boot_coma = 0; | ||
5403 | et1310_disable_phy_coma(adapter); | ||
5404 | |||
5405 | /* Setup the mii_bus struct */ | ||
5406 | adapter->mii_bus = mdiobus_alloc(); | ||
5407 | if (!adapter->mii_bus) { | ||
5408 | dev_err(&pdev->dev, "Alloc of mii_bus struct failed\n"); | ||
5409 | goto err_mem_free; | ||
5410 | } | ||
5411 | |||
5412 | adapter->mii_bus->name = "et131x_eth_mii"; | ||
5413 | snprintf(adapter->mii_bus->id, MII_BUS_ID_SIZE, "%x", | ||
5414 | (adapter->pdev->bus->number << 8) | adapter->pdev->devfn); | ||
5415 | adapter->mii_bus->priv = netdev; | ||
5416 | adapter->mii_bus->read = et131x_mdio_read; | ||
5417 | adapter->mii_bus->write = et131x_mdio_write; | ||
5418 | adapter->mii_bus->reset = et131x_mdio_reset; | ||
5419 | adapter->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL); | ||
5420 | if (!adapter->mii_bus->irq) { | ||
5421 | dev_err(&pdev->dev, "mii_bus irq allocation failed\n"); | ||
5422 | goto err_mdio_free; | ||
5423 | } | ||
5424 | |||
5425 | for (ii = 0; ii < PHY_MAX_ADDR; ii++) | ||
5426 | adapter->mii_bus->irq[ii] = PHY_POLL; | ||
5427 | |||
5428 | if (mdiobus_register(adapter->mii_bus)) { | ||
5429 | dev_err(&pdev->dev, "failed to register MII bus\n"); | ||
5430 | mdiobus_free(adapter->mii_bus); | ||
5431 | goto err_mdio_free_irq; | ||
5432 | } | ||
5433 | |||
5434 | if (et131x_mii_probe(netdev)) { | ||
5435 | dev_err(&pdev->dev, "failed to probe MII bus\n"); | ||
5436 | goto err_mdio_unregister; | ||
5437 | } | ||
5438 | |||
5439 | /* Setup et1310 as per the documentation */ | ||
5440 | et131x_adapter_setup(adapter); | ||
5441 | |||
5442 | /* We can enable interrupts now | ||
5443 | * | ||
5444 | * NOTE - Because registration of interrupt handler is done in the | ||
5445 | * device's open(), defer enabling device interrupts to that | ||
5446 | * point | ||
5447 | */ | ||
5448 | |||
5449 | /* Register the net_device struct with the Linux network layer */ | ||
5450 | result = register_netdev(netdev); | ||
5451 | if (result != 0) { | ||
5452 | dev_err(&pdev->dev, "register_netdev() failed\n"); | ||
5453 | goto err_mdio_unregister; | ||
5454 | } | ||
5455 | |||
5456 | /* Register the net_device struct with the PCI subsystem. Save a copy | ||
5457 | * of the PCI config space for this device now that the device has | ||
5458 | * been initialized, just in case it needs to be quickly restored. | ||
5459 | */ | ||
5460 | pci_set_drvdata(pdev, netdev); | ||
5461 | pci_save_state(adapter->pdev); | ||
5462 | |||
5463 | return result; | ||
5464 | |||
5465 | err_mdio_unregister: | ||
5466 | mdiobus_unregister(adapter->mii_bus); | ||
5467 | err_mdio_free_irq: | ||
5468 | kfree(adapter->mii_bus->irq); | ||
5469 | err_mdio_free: | ||
5470 | mdiobus_free(adapter->mii_bus); | ||
5471 | err_mem_free: | ||
5472 | et131x_adapter_memory_free(adapter); | ||
5473 | err_iounmap: | ||
5474 | iounmap(adapter->regs); | ||
5475 | err_free_dev: | ||
5476 | pci_dev_put(pdev); | ||
5477 | free_netdev(netdev); | ||
5478 | err_release_res: | ||
5479 | pci_release_regions(pdev); | ||
5480 | err_disable: | ||
5481 | pci_disable_device(pdev); | ||
5482 | err_out: | ||
5483 | return result; | ||
5484 | } | ||
5485 | |||
5486 | static SIMPLE_DEV_PM_OPS(et131x_pm_ops, et131x_suspend, et131x_resume); | ||
5487 | #define ET131X_PM_OPS (&et131x_pm_ops) | ||
5488 | #else | ||
5489 | #define ET131X_PM_OPS NULL | ||
5490 | #endif | ||
5491 | |||
5492 | static DEFINE_PCI_DEVICE_TABLE(et131x_pci_table) = { | ||
5493 | { PCI_VDEVICE(ATT, ET131X_PCI_DEVICE_ID_GIG), 0UL}, | ||
5494 | { PCI_VDEVICE(ATT, ET131X_PCI_DEVICE_ID_FAST), 0UL}, | ||
5495 | {0,} | ||
5496 | }; | ||
5497 | MODULE_DEVICE_TABLE(pci, et131x_pci_table); | ||
5498 | |||
5499 | static struct pci_driver et131x_driver = { | ||
5500 | .name = DRIVER_NAME, | ||
5501 | .id_table = et131x_pci_table, | ||
5502 | .probe = et131x_pci_setup, | ||
5503 | .remove = __devexit_p(et131x_pci_remove), | ||
5504 | .driver.pm = ET131X_PM_OPS, | ||
5505 | }; | ||
5506 | |||
5507 | /** | ||
5508 | * et131x_init_module - The "main" entry point called on driver initialization | ||
5509 | * | ||
5510 | * Returns 0 on success, errno on failure (as defined in errno.h) | ||
5511 | */ | ||
5512 | static int __init et131x_init_module(void) | ||
5513 | { | ||
5514 | return pci_register_driver(&et131x_driver); | ||
5515 | } | ||
5516 | |||
5517 | /** | ||
5518 | * et131x_cleanup_module - The entry point called on driver cleanup | ||
5519 | */ | ||
5520 | static void __exit et131x_cleanup_module(void) | ||
5521 | { | ||
5522 | pci_unregister_driver(&et131x_driver); | ||
5523 | } | ||
5524 | |||
5525 | module_init(et131x_init_module); | ||
5526 | module_exit(et131x_cleanup_module); | ||
5527 | |||