aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c')
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c32
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
1399static inline bool
1400qlcnic_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
1399void qlcnic_83xx_get_minidump_template(struct qlcnic_adapter *adapter) 1412void 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}