Skip to content

Commit

Permalink
qlcnic: Add support to enable/disable FW dump capability
Browse files Browse the repository at this point in the history
In certain situations, it may be required to not enable FW dump
capability. Add support to turn off/on FW dump capability.

Signed-off-by: Anirban Chakraborty <anirban.chakraborty@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Anirban Chakraborty authored and David S. Miller committed Jun 24, 2011
1 parent c55ad8e commit 9d6a644
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 3 deletions.
3 changes: 3 additions & 0 deletions drivers/net/qlcnic/qlcnic.h
Original file line number Diff line number Diff line change
Expand Up @@ -429,6 +429,7 @@ struct qlcnic_dump_template_hdr {

struct qlcnic_fw_dump {
u8 clr; /* flag to indicate if dump is cleared */
u8 enable; /* enable/disable dump */
u32 size; /* total size of the dump */
void *data; /* dump data area */
struct qlcnic_dump_template_hdr *tmpl_hdr;
Expand Down Expand Up @@ -1320,6 +1321,8 @@ enum op_codes {
#define QLCNIC_DUMP_MASK_DEF 0x7f
#define QLCNIC_DUMP_MASK_MAX 0xff
#define QLCNIC_FORCE_FW_DUMP_KEY 0xdeadfeed
#define QLCNIC_ENABLE_FW_DUMP 0xaddfeed
#define QLCNIC_DISABLE_FW_DUMP 0xbadfeed

struct qlcnic_dump_operations {
enum op_codes opcode;
Expand Down
1 change: 1 addition & 0 deletions drivers/net/qlcnic/qlcnic_ctx.c
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ int qlcnic_fw_cmd_get_minidump_temp(struct qlcnic_adapter *adapter)
tmpl_hdr->drv_cap_mask = tmpl_hdr->cap_mask;
else
tmpl_hdr->drv_cap_mask = QLCNIC_DUMP_MASK_DEF;
ahw->fw_dump.enable = 1;
error:
dma_free_coherent(&adapter->pdev->dev, temp_size, tmp_addr, tmp_addr_t);
return err;
Expand Down
19 changes: 19 additions & 0 deletions drivers/net/qlcnic/qlcnic_ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -1019,8 +1019,27 @@ qlcnic_set_dump(struct net_device *netdev, struct ethtool_dump *val)
struct qlcnic_fw_dump *fw_dump = &adapter->ahw->fw_dump;

if (val->flag == QLCNIC_FORCE_FW_DUMP_KEY) {
if (!fw_dump->enable) {
netdev_info(netdev, "FW dump not enabled\n");
return ret;
}
if (fw_dump->clr) {
dev_info(&adapter->pdev->dev,
"Previous dump not cleared, not forcing dump\n");
return ret;
}
netdev_info(netdev, "Forcing a FW dump\n");
qlcnic_dev_request_reset(adapter);
} else if (val->flag == QLCNIC_DISABLE_FW_DUMP) {
if (fw_dump->enable) {
netdev_info(netdev, "Disabling FW dump\n");
fw_dump->enable = 0;
}
} else if (val->flag == QLCNIC_ENABLE_FW_DUMP) {
if (!fw_dump->enable && fw_dump->tmpl_hdr) {
netdev_info(netdev, "Enabling FW dump\n");
fw_dump->enable = 1;
}
} else {
if (val->flag > QLCNIC_DUMP_MASK_MAX ||
val->flag < QLCNIC_DUMP_MASK_MIN) {
Expand Down
8 changes: 5 additions & 3 deletions drivers/net/qlcnic/qlcnic_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2849,9 +2849,11 @@ qlcnic_fwinit_work(struct work_struct *work)
qlcnic_api_unlock(adapter);

rtnl_lock();
QLCDB(adapter, DRV, "Take FW dump\n");
qlcnic_dump_fw(adapter);
adapter->flags &= ~QLCNIC_FW_RESET_OWNER;
if (adapter->ahw->fw_dump.enable) {
QLCDB(adapter, DRV, "Take FW dump\n");
qlcnic_dump_fw(adapter);
adapter->flags &= ~QLCNIC_FW_RESET_OWNER;
}
rtnl_unlock();
if (!adapter->nic_ops->start_firmware(adapter)) {
qlcnic_schedule_work(adapter, qlcnic_attach_work, 0);
Expand Down

0 comments on commit 9d6a644

Please sign in to comment.