diff options
Diffstat (limited to 'drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c')
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c index 6f33e2d57f14..aca47fd4b06c 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c | |||
@@ -1396,19 +1396,51 @@ int qlcnic_dump_fw(struct qlcnic_adapter *adapter) | |||
1396 | return 0; | 1396 | return 0; |
1397 | } | 1397 | } |
1398 | 1398 | ||
1399 | static inline bool | ||
1400 | qlcnic_83xx_md_check_extended_dump_capability(struct qlcnic_adapter *adapter) | ||
1401 | { | ||
1402 | /* For special adapters (with 0x8830 device ID), where iSCSI firmware | ||
1403 | * dump needs to be captured as part of regular firmware dump | ||
1404 | * collection process, firmware exports it's capability through | ||
1405 | * capability registers | ||
1406 | */ | ||
1407 | return ((adapter->pdev->device == PCI_DEVICE_ID_QLOGIC_QLE8830) && | ||
1408 | (adapter->ahw->extra_capability[0] & | ||
1409 | QLCNIC_FW_CAPABILITY_2_EXT_ISCSI_DUMP)); | ||
1410 | } | ||
1411 | |||
1399 | void qlcnic_83xx_get_minidump_template(struct qlcnic_adapter *adapter) | 1412 | void qlcnic_83xx_get_minidump_template(struct qlcnic_adapter *adapter) |
1400 | { | 1413 | { |
1401 | u32 prev_version, current_version; | 1414 | u32 prev_version, current_version; |
1402 | struct qlcnic_hardware_context *ahw = adapter->ahw; | 1415 | struct qlcnic_hardware_context *ahw = adapter->ahw; |
1403 | struct qlcnic_fw_dump *fw_dump = &ahw->fw_dump; | 1416 | struct qlcnic_fw_dump *fw_dump = &ahw->fw_dump; |
1404 | struct pci_dev *pdev = adapter->pdev; | 1417 | struct pci_dev *pdev = adapter->pdev; |
1418 | bool extended = false; | ||
1405 | 1419 | ||
1406 | prev_version = adapter->fw_version; | 1420 | prev_version = adapter->fw_version; |
1407 | current_version = qlcnic_83xx_get_fw_version(adapter); | 1421 | current_version = qlcnic_83xx_get_fw_version(adapter); |
1408 | 1422 | ||
1409 | if (fw_dump->tmpl_hdr == NULL || current_version > prev_version) { | 1423 | if (fw_dump->tmpl_hdr == NULL || current_version > prev_version) { |
1410 | vfree(fw_dump->tmpl_hdr); | 1424 | vfree(fw_dump->tmpl_hdr); |
1425 | |||
1426 | if (qlcnic_83xx_md_check_extended_dump_capability(adapter)) | ||
1427 | extended = !qlcnic_83xx_extend_md_capab(adapter); | ||
1428 | |||
1411 | if (!qlcnic_fw_cmd_get_minidump_temp(adapter)) | 1429 | if (!qlcnic_fw_cmd_get_minidump_temp(adapter)) |
1412 | dev_info(&pdev->dev, "Supports FW dump capability\n"); | 1430 | dev_info(&pdev->dev, "Supports FW dump capability\n"); |
1431 | |||
1432 | /* Once we have minidump template with extended iSCSI dump | ||
1433 | * capability, update the minidump capture mask to 0x1f as | ||
1434 | * per FW requirement | ||
1435 | */ | ||
1436 | if (extended) { | ||
1437 | struct qlcnic_83xx_dump_template_hdr *hdr; | ||
1438 | |||
1439 | hdr = fw_dump->tmpl_hdr; | ||
1440 | hdr->drv_cap_mask = 0x1f; | ||
1441 | fw_dump->cap_mask = 0x1f; | ||
1442 | dev_info(&pdev->dev, | ||
1443 | "Extended iSCSI dump capability and updated capture mask to 0x1f\n"); | ||
1444 | } | ||
1413 | } | 1445 | } |
1414 | } | 1446 | } |