|
@@ -141,11 +141,17 @@ static int be_mcc_compl_process(struct be_adapter *adapter,
|
|
subsystem = resp_hdr->subsystem;
|
|
subsystem = resp_hdr->subsystem;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (opcode == OPCODE_LOWLEVEL_LOOPBACK_TEST &&
|
|
|
|
+ subsystem == CMD_SUBSYSTEM_LOWLEVEL) {
|
|
|
|
+ complete(&adapter->et_cmd_compl);
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
if (((opcode == OPCODE_COMMON_WRITE_FLASHROM) ||
|
|
if (((opcode == OPCODE_COMMON_WRITE_FLASHROM) ||
|
|
(opcode == OPCODE_COMMON_WRITE_OBJECT)) &&
|
|
(opcode == OPCODE_COMMON_WRITE_OBJECT)) &&
|
|
(subsystem == CMD_SUBSYSTEM_COMMON)) {
|
|
(subsystem == CMD_SUBSYSTEM_COMMON)) {
|
|
adapter->flash_status = compl_status;
|
|
adapter->flash_status = compl_status;
|
|
- complete(&adapter->flash_compl);
|
|
|
|
|
|
+ complete(&adapter->et_cmd_compl);
|
|
}
|
|
}
|
|
|
|
|
|
if (compl_status == MCC_STATUS_SUCCESS) {
|
|
if (compl_status == MCC_STATUS_SUCCESS) {
|
|
@@ -2017,6 +2023,9 @@ int be_cmd_rss_config(struct be_adapter *adapter, u8 *rsstable,
|
|
0x3ea83c02, 0x4a110304};
|
|
0x3ea83c02, 0x4a110304};
|
|
int status;
|
|
int status;
|
|
|
|
|
|
|
|
+ if (!(be_if_cap_flags(adapter) & BE_IF_FLAGS_RSS))
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
if (mutex_lock_interruptible(&adapter->mbox_lock))
|
|
if (mutex_lock_interruptible(&adapter->mbox_lock))
|
|
return -1;
|
|
return -1;
|
|
|
|
|
|
@@ -2160,7 +2169,7 @@ int lancer_cmd_write_object(struct be_adapter *adapter, struct be_dma_mem *cmd,
|
|
be_mcc_notify(adapter);
|
|
be_mcc_notify(adapter);
|
|
spin_unlock_bh(&adapter->mcc_lock);
|
|
spin_unlock_bh(&adapter->mcc_lock);
|
|
|
|
|
|
- if (!wait_for_completion_timeout(&adapter->flash_compl,
|
|
|
|
|
|
+ if (!wait_for_completion_timeout(&adapter->et_cmd_compl,
|
|
msecs_to_jiffies(60000)))
|
|
msecs_to_jiffies(60000)))
|
|
status = -1;
|
|
status = -1;
|
|
else
|
|
else
|
|
@@ -2255,8 +2264,8 @@ int be_cmd_write_flashrom(struct be_adapter *adapter, struct be_dma_mem *cmd,
|
|
be_mcc_notify(adapter);
|
|
be_mcc_notify(adapter);
|
|
spin_unlock_bh(&adapter->mcc_lock);
|
|
spin_unlock_bh(&adapter->mcc_lock);
|
|
|
|
|
|
- if (!wait_for_completion_timeout(&adapter->flash_compl,
|
|
|
|
- msecs_to_jiffies(40000)))
|
|
|
|
|
|
+ if (!wait_for_completion_timeout(&adapter->et_cmd_compl,
|
|
|
|
+ msecs_to_jiffies(40000)))
|
|
status = -1;
|
|
status = -1;
|
|
else
|
|
else
|
|
status = adapter->flash_status;
|
|
status = adapter->flash_status;
|
|
@@ -2367,6 +2376,7 @@ int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num,
|
|
{
|
|
{
|
|
struct be_mcc_wrb *wrb;
|
|
struct be_mcc_wrb *wrb;
|
|
struct be_cmd_req_loopback_test *req;
|
|
struct be_cmd_req_loopback_test *req;
|
|
|
|
+ struct be_cmd_resp_loopback_test *resp;
|
|
int status;
|
|
int status;
|
|
|
|
|
|
spin_lock_bh(&adapter->mcc_lock);
|
|
spin_lock_bh(&adapter->mcc_lock);
|
|
@@ -2381,8 +2391,8 @@ int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num,
|
|
|
|
|
|
be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_LOWLEVEL,
|
|
be_wrb_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_LOWLEVEL,
|
|
OPCODE_LOWLEVEL_LOOPBACK_TEST, sizeof(*req), wrb, NULL);
|
|
OPCODE_LOWLEVEL_LOOPBACK_TEST, sizeof(*req), wrb, NULL);
|
|
- req->hdr.timeout = cpu_to_le32(4);
|
|
|
|
|
|
|
|
|
|
+ req->hdr.timeout = cpu_to_le32(15);
|
|
req->pattern = cpu_to_le64(pattern);
|
|
req->pattern = cpu_to_le64(pattern);
|
|
req->src_port = cpu_to_le32(port_num);
|
|
req->src_port = cpu_to_le32(port_num);
|
|
req->dest_port = cpu_to_le32(port_num);
|
|
req->dest_port = cpu_to_le32(port_num);
|
|
@@ -2390,12 +2400,15 @@ int be_cmd_loopback_test(struct be_adapter *adapter, u32 port_num,
|
|
req->num_pkts = cpu_to_le32(num_pkts);
|
|
req->num_pkts = cpu_to_le32(num_pkts);
|
|
req->loopback_type = cpu_to_le32(loopback_type);
|
|
req->loopback_type = cpu_to_le32(loopback_type);
|
|
|
|
|
|
- status = be_mcc_notify_wait(adapter);
|
|
|
|
- if (!status) {
|
|
|
|
- struct be_cmd_resp_loopback_test *resp = embedded_payload(wrb);
|
|
|
|
- status = le32_to_cpu(resp->status);
|
|
|
|
- }
|
|
|
|
|
|
+ be_mcc_notify(adapter);
|
|
|
|
+
|
|
|
|
+ spin_unlock_bh(&adapter->mcc_lock);
|
|
|
|
|
|
|
|
+ wait_for_completion(&adapter->et_cmd_compl);
|
|
|
|
+ resp = embedded_payload(wrb);
|
|
|
|
+ status = le32_to_cpu(resp->status);
|
|
|
|
+
|
|
|
|
+ return status;
|
|
err:
|
|
err:
|
|
spin_unlock_bh(&adapter->mcc_lock);
|
|
spin_unlock_bh(&adapter->mcc_lock);
|
|
return status;
|
|
return status;
|