diff options
Diffstat (limited to 'drivers/net/qlge/qlge_main.c')
-rw-r--r-- | drivers/net/qlge/qlge_main.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c index 167a3dab2f18..e58892304e19 100644 --- a/drivers/net/qlge/qlge_main.c +++ b/drivers/net/qlge/qlge_main.c | |||
@@ -73,6 +73,13 @@ static int qlge_irq_type = MSIX_IRQ; | |||
73 | module_param(qlge_irq_type, int, MSIX_IRQ); | 73 | module_param(qlge_irq_type, int, MSIX_IRQ); |
74 | MODULE_PARM_DESC(qlge_irq_type, "0 = MSI-X, 1 = MSI, 2 = Legacy."); | 74 | MODULE_PARM_DESC(qlge_irq_type, "0 = MSI-X, 1 = MSI, 2 = Legacy."); |
75 | 75 | ||
76 | static int qlge_mpi_coredump; | ||
77 | module_param(qlge_mpi_coredump, int, 0); | ||
78 | MODULE_PARM_DESC(qlge_mpi_coredump, | ||
79 | "Option to enable MPI firmware dump. " | ||
80 | "Default is OFF - Do Not allocate memory. " | ||
81 | "Do not perform firmware coredump."); | ||
82 | |||
76 | static DEFINE_PCI_DEVICE_TABLE(qlge_pci_tbl) = { | 83 | static DEFINE_PCI_DEVICE_TABLE(qlge_pci_tbl) = { |
77 | {PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, QLGE_DEVICE_ID_8012)}, | 84 | {PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, QLGE_DEVICE_ID_8012)}, |
78 | {PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, QLGE_DEVICE_ID_8000)}, | 85 | {PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, QLGE_DEVICE_ID_8000)}, |
@@ -3842,6 +3849,7 @@ static int ql_adapter_down(struct ql_adapter *qdev) | |||
3842 | cancel_delayed_work_sync(&qdev->mpi_reset_work); | 3849 | cancel_delayed_work_sync(&qdev->mpi_reset_work); |
3843 | cancel_delayed_work_sync(&qdev->mpi_work); | 3850 | cancel_delayed_work_sync(&qdev->mpi_work); |
3844 | cancel_delayed_work_sync(&qdev->mpi_idc_work); | 3851 | cancel_delayed_work_sync(&qdev->mpi_idc_work); |
3852 | cancel_delayed_work_sync(&qdev->mpi_core_to_log); | ||
3845 | cancel_delayed_work_sync(&qdev->mpi_port_cfg_work); | 3853 | cancel_delayed_work_sync(&qdev->mpi_port_cfg_work); |
3846 | 3854 | ||
3847 | for (i = 0; i < qdev->rss_ring_count; i++) | 3855 | for (i = 0; i < qdev->rss_ring_count; i++) |
@@ -4398,6 +4406,7 @@ static void ql_release_all(struct pci_dev *pdev) | |||
4398 | iounmap(qdev->reg_base); | 4406 | iounmap(qdev->reg_base); |
4399 | if (qdev->doorbell_area) | 4407 | if (qdev->doorbell_area) |
4400 | iounmap(qdev->doorbell_area); | 4408 | iounmap(qdev->doorbell_area); |
4409 | vfree(qdev->mpi_coredump); | ||
4401 | pci_release_regions(pdev); | 4410 | pci_release_regions(pdev); |
4402 | pci_set_drvdata(pdev, NULL); | 4411 | pci_set_drvdata(pdev, NULL); |
4403 | } | 4412 | } |
@@ -4479,6 +4488,15 @@ static int __devinit ql_init_device(struct pci_dev *pdev, | |||
4479 | spin_lock_init(&qdev->hw_lock); | 4488 | spin_lock_init(&qdev->hw_lock); |
4480 | spin_lock_init(&qdev->stats_lock); | 4489 | spin_lock_init(&qdev->stats_lock); |
4481 | 4490 | ||
4491 | if (qlge_mpi_coredump) { | ||
4492 | qdev->mpi_coredump = | ||
4493 | vmalloc(sizeof(struct ql_mpi_coredump)); | ||
4494 | if (qdev->mpi_coredump == NULL) { | ||
4495 | dev_err(&pdev->dev, "Coredump alloc failed.\n"); | ||
4496 | err = -ENOMEM; | ||
4497 | goto err_out; | ||
4498 | } | ||
4499 | } | ||
4482 | /* make sure the EEPROM is good */ | 4500 | /* make sure the EEPROM is good */ |
4483 | err = qdev->nic_ops->get_flash(qdev); | 4501 | err = qdev->nic_ops->get_flash(qdev); |
4484 | if (err) { | 4502 | if (err) { |
@@ -4508,6 +4526,7 @@ static int __devinit ql_init_device(struct pci_dev *pdev, | |||
4508 | INIT_DELAYED_WORK(&qdev->mpi_work, ql_mpi_work); | 4526 | INIT_DELAYED_WORK(&qdev->mpi_work, ql_mpi_work); |
4509 | INIT_DELAYED_WORK(&qdev->mpi_port_cfg_work, ql_mpi_port_cfg_work); | 4527 | INIT_DELAYED_WORK(&qdev->mpi_port_cfg_work, ql_mpi_port_cfg_work); |
4510 | INIT_DELAYED_WORK(&qdev->mpi_idc_work, ql_mpi_idc_work); | 4528 | INIT_DELAYED_WORK(&qdev->mpi_idc_work, ql_mpi_idc_work); |
4529 | INIT_DELAYED_WORK(&qdev->mpi_core_to_log, ql_mpi_core_to_log); | ||
4511 | init_completion(&qdev->ide_completion); | 4530 | init_completion(&qdev->ide_completion); |
4512 | 4531 | ||
4513 | if (!cards_found) { | 4532 | if (!cards_found) { |
@@ -4630,6 +4649,7 @@ static void ql_eeh_close(struct net_device *ndev) | |||
4630 | cancel_delayed_work_sync(&qdev->mpi_reset_work); | 4649 | cancel_delayed_work_sync(&qdev->mpi_reset_work); |
4631 | cancel_delayed_work_sync(&qdev->mpi_work); | 4650 | cancel_delayed_work_sync(&qdev->mpi_work); |
4632 | cancel_delayed_work_sync(&qdev->mpi_idc_work); | 4651 | cancel_delayed_work_sync(&qdev->mpi_idc_work); |
4652 | cancel_delayed_work_sync(&qdev->mpi_core_to_log); | ||
4633 | cancel_delayed_work_sync(&qdev->mpi_port_cfg_work); | 4653 | cancel_delayed_work_sync(&qdev->mpi_port_cfg_work); |
4634 | 4654 | ||
4635 | for (i = 0; i < qdev->rss_ring_count; i++) | 4655 | for (i = 0; i < qdev->rss_ring_count; i++) |