aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/qlge/qlge_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/qlge/qlge_main.c')
-rw-r--r--drivers/net/qlge/qlge_main.c20
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;
73module_param(qlge_irq_type, int, MSIX_IRQ); 73module_param(qlge_irq_type, int, MSIX_IRQ);
74MODULE_PARM_DESC(qlge_irq_type, "0 = MSI-X, 1 = MSI, 2 = Legacy."); 74MODULE_PARM_DESC(qlge_irq_type, "0 = MSI-X, 1 = MSI, 2 = Legacy.");
75 75
76static int qlge_mpi_coredump;
77module_param(qlge_mpi_coredump, int, 0);
78MODULE_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
76static DEFINE_PCI_DEVICE_TABLE(qlge_pci_tbl) = { 83static 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++)