diff options
author | Sathya Perla <sathya.perla@emulex.com> | 2011-09-27 21:30:27 +0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-09-27 21:30:27 +0400 |
commit | 04b71175f340d4081680440e1b9cbffcd3f4a13c (patch) | |
tree | 8b1b7c359a5cbb6537bf125652fde4f8a03a5f01 /drivers/net/ethernet/emulex/benet/be_cmds.c | |
parent | 8e7d3f681ef462e6aaa151f231310452dac409ca (diff) | |
download | linux-04b71175f340d4081680440e1b9cbffcd3f4a13c.tar.xz |
be2net: Show newly flashed FW ver in ethtool
This fix provides a newly flashed FW version (appended, in braces)
along with the currently running FW version via ethtool. The newly
flashed version runs only after a system reset.
Signed-off-by: Suresh Reddy <Suresh.Reddy@emulex.com>
Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/emulex/benet/be_cmds.c')
-rw-r--r-- | drivers/net/ethernet/emulex/benet/be_cmds.c | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c index 6bc07c7515b3..4b655b854073 100644 --- a/drivers/net/ethernet/emulex/benet/be_cmds.c +++ b/drivers/net/ethernet/emulex/benet/be_cmds.c @@ -1444,32 +1444,37 @@ err: spin_unlock_bh(&adapter->mcc_lock); } -/* Uses Mbox */ -int be_cmd_get_fw_ver(struct be_adapter *adapter, char *fw_ver) +/* Uses synchronous mcc */ +int be_cmd_get_fw_ver(struct be_adapter *adapter, char *fw_ver, + char *fw_on_flash) { struct be_mcc_wrb *wrb; struct be_cmd_req_get_fw_version *req; int status; - if (mutex_lock_interruptible(&adapter->mbox_lock)) - return -1; + spin_lock_bh(&adapter->mcc_lock); - wrb = wrb_from_mbox(adapter); - req = embedded_payload(wrb); + wrb = wrb_from_mccq(adapter); + if (!wrb) { + status = -EBUSY; + goto err; + } + req = embedded_payload(wrb); be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0, - OPCODE_COMMON_GET_FW_VERSION); - + OPCODE_COMMON_GET_FW_VERSION); be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON, - OPCODE_COMMON_GET_FW_VERSION, sizeof(*req)); + OPCODE_COMMON_GET_FW_VERSION, sizeof(*req)); - status = be_mbox_notify_wait(adapter); + status = be_mcc_notify_wait(adapter); if (!status) { struct be_cmd_resp_get_fw_version *resp = embedded_payload(wrb); - strncpy(fw_ver, resp->firmware_version_string, FW_VER_LEN); + strcpy(fw_ver, resp->firmware_version_string); + if (fw_on_flash) + strcpy(fw_on_flash, resp->fw_on_flash_version_string); } - - mutex_unlock(&adapter->mbox_lock); +err: + spin_unlock_bh(&adapter->mcc_lock); return status; } |