#define QLCNIC_FW_CAPABILITY_SET_DRV_VER       BIT_5
 #define QLCNIC_FW_CAPABILITY_2_BEACON          BIT_7
 #define QLCNIC_FW_CAPABILITY_2_PER_PORT_ESWITCH_CFG    BIT_9
+#define QLCNIC_FW_CAPABILITY_2_EXT_ISCSI_DUMP  BIT_13
 
 #define QLCNIC_83XX_FW_CAPAB_ENCAP_RX_OFFLOAD  BIT_0
 #define QLCNIC_83XX_FW_CAPAB_ENCAP_TX_OFFLOAD  BIT_1
 
        {QLCNIC_CMD_DCB_QUERY_CAP, 1, 2},
        {QLCNIC_CMD_DCB_QUERY_PARAM, 1, 50},
        {QLCNIC_CMD_SET_INGRESS_ENCAP, 2, 1},
+       {QLCNIC_CMD_83XX_EXTEND_ISCSI_DUMP_CAP, 4, 1},
 };
 
 const u32 qlcnic_83xx_ext_reg_tbl[] = {
        qlcnic_free_mbx_args(&cmd);
 }
 
+#define QLCNIC_83XX_ADD_PORT0          BIT_0
+#define QLCNIC_83XX_ADD_PORT1          BIT_1
+#define QLCNIC_83XX_EXTENDED_MEM_SIZE  13 /* In MB */
+int qlcnic_83xx_extend_md_capab(struct qlcnic_adapter *adapter)
+{
+       struct qlcnic_cmd_args cmd;
+       int err;
+
+       err = qlcnic_alloc_mbx_args(&cmd, adapter,
+                                   QLCNIC_CMD_83XX_EXTEND_ISCSI_DUMP_CAP);
+       if (err)
+               return err;
+
+       cmd.req.arg[1] = (QLCNIC_83XX_ADD_PORT0 | QLCNIC_83XX_ADD_PORT1);
+       cmd.req.arg[2] = QLCNIC_83XX_EXTENDED_MEM_SIZE;
+       cmd.req.arg[3] = QLCNIC_83XX_EXTENDED_MEM_SIZE;
+
+       err = qlcnic_issue_cmd(adapter, &cmd);
+       if (err)
+               dev_err(&adapter->pdev->dev,
+                       "failed to issue extend iSCSI minidump capability\n");
+
+       return err;
+}
+
 int qlcnic_83xx_reg_test(struct qlcnic_adapter *adapter)
 {
        u32 major, minor, sub;
 
 
 void qlcnic_83xx_get_minidump_template(struct qlcnic_adapter *);
 void qlcnic_83xx_get_stats(struct qlcnic_adapter *adapter, u64 *data);
+int qlcnic_83xx_extend_md_capab(struct qlcnic_adapter *);
 int qlcnic_83xx_get_settings(struct qlcnic_adapter *, struct ethtool_cmd *);
 int qlcnic_83xx_set_settings(struct qlcnic_adapter *, struct ethtool_cmd *);
 void qlcnic_83xx_get_pauseparam(struct qlcnic_adapter *,
 
 #define QLCNIC_CMD_GET_LED_CONFIG              0x6A
 #define QLCNIC_CMD_83XX_SET_DRV_VER            0x6F
 #define QLCNIC_CMD_ADD_RCV_RINGS               0x0B
+#define QLCNIC_CMD_83XX_EXTEND_ISCSI_DUMP_CAP  0x37
 
 #define QLCNIC_INTRPT_INTX                     1
 #define QLCNIC_INTRPT_MSIX                     3
 
        return 0;
 }
 
+static inline bool
+qlcnic_83xx_md_check_extended_dump_capability(struct qlcnic_adapter *adapter)
+{
+       /* For special adapters (with 0x8830 device ID), where iSCSI firmware
+        * dump needs to be captured as part of regular firmware dump
+        * collection process, firmware exports it's capability through
+        * capability registers
+        */
+       return ((adapter->pdev->device == PCI_DEVICE_ID_QLOGIC_QLE8830) &&
+               (adapter->ahw->extra_capability[0] &
+                QLCNIC_FW_CAPABILITY_2_EXT_ISCSI_DUMP));
+}
+
 void qlcnic_83xx_get_minidump_template(struct qlcnic_adapter *adapter)
 {
        u32 prev_version, current_version;
        struct qlcnic_hardware_context *ahw = adapter->ahw;
        struct qlcnic_fw_dump *fw_dump = &ahw->fw_dump;
        struct pci_dev *pdev = adapter->pdev;
+       bool extended = false;
 
        prev_version = adapter->fw_version;
        current_version = qlcnic_83xx_get_fw_version(adapter);
 
        if (fw_dump->tmpl_hdr == NULL || current_version > prev_version) {
                vfree(fw_dump->tmpl_hdr);
+
+               if (qlcnic_83xx_md_check_extended_dump_capability(adapter))
+                       extended = !qlcnic_83xx_extend_md_capab(adapter);
+
                if (!qlcnic_fw_cmd_get_minidump_temp(adapter))
                        dev_info(&pdev->dev, "Supports FW dump capability\n");
+
+               /* Once we have minidump template with extended iSCSI dump
+                * capability, update the minidump capture mask to 0x1f as
+                * per FW requirement
+                */
+               if (extended) {
+                       struct qlcnic_83xx_dump_template_hdr *hdr;
+
+                       hdr = fw_dump->tmpl_hdr;
+                       hdr->drv_cap_mask = 0x1f;
+                       fw_dump->cap_mask = 0x1f;
+                       dev_info(&pdev->dev,
+                                "Extended iSCSI dump capability and updated capture mask to 0x1f\n");
+               }
        }
 }