mirror of https://gitee.com/openkylin/linux.git
be2net: move async cmd processing to a separate routine
For some FW cmds, the caller just issues the cmd and doesn't wait for a response. The response handling is done in the MCCQ compl processing context only. Move this code into a separate routine to make be_mcc_compl_process() more manageable. Signed-off-by: Sathya Perla <sathya.perla@emulex.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4c60005fe7
commit
559b633f42
|
@ -132,6 +132,58 @@ static bool be_skip_err_log(u8 opcode, u16 base_status, u16 addl_status)
|
|||
return false;
|
||||
}
|
||||
|
||||
/* Place holder for all the async MCC cmds wherein the caller is not in a busy
|
||||
* loop (has not issued be_mcc_notify_wait())
|
||||
*/
|
||||
static void be_async_cmd_process(struct be_adapter *adapter,
|
||||
struct be_mcc_compl *compl,
|
||||
struct be_cmd_resp_hdr *resp_hdr)
|
||||
{
|
||||
enum mcc_base_status base_status = base_status(compl->status);
|
||||
u8 opcode = 0, subsystem = 0;
|
||||
|
||||
if (resp_hdr) {
|
||||
opcode = resp_hdr->opcode;
|
||||
subsystem = resp_hdr->subsystem;
|
||||
}
|
||||
|
||||
if (opcode == OPCODE_LOWLEVEL_LOOPBACK_TEST &&
|
||||
subsystem == CMD_SUBSYSTEM_LOWLEVEL) {
|
||||
complete(&adapter->et_cmd_compl);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((opcode == OPCODE_COMMON_WRITE_FLASHROM ||
|
||||
opcode == OPCODE_COMMON_WRITE_OBJECT) &&
|
||||
subsystem == CMD_SUBSYSTEM_COMMON) {
|
||||
adapter->flash_status = compl->status;
|
||||
complete(&adapter->et_cmd_compl);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((opcode == OPCODE_ETH_GET_STATISTICS ||
|
||||
opcode == OPCODE_ETH_GET_PPORT_STATS) &&
|
||||
subsystem == CMD_SUBSYSTEM_ETH &&
|
||||
base_status == MCC_STATUS_SUCCESS) {
|
||||
be_parse_stats(adapter);
|
||||
adapter->stats_cmd_sent = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (opcode == OPCODE_COMMON_GET_CNTL_ADDITIONAL_ATTRIBUTES &&
|
||||
subsystem == CMD_SUBSYSTEM_COMMON) {
|
||||
if (base_status == MCC_STATUS_SUCCESS) {
|
||||
struct be_cmd_resp_get_cntl_addnl_attribs *resp =
|
||||
(void *)resp_hdr;
|
||||
adapter->drv_stats.be_on_die_temperature =
|
||||
resp->on_die_temperature;
|
||||
} else {
|
||||
adapter->be_get_temp_freq = 0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
static int be_mcc_compl_process(struct be_adapter *adapter,
|
||||
struct be_mcc_compl *compl)
|
||||
{
|
||||
|
@ -148,45 +200,15 @@ static int be_mcc_compl_process(struct be_adapter *adapter,
|
|||
addl_status = addl_status(compl->status);
|
||||
|
||||
resp_hdr = be_decode_resp_hdr(compl->tag0, compl->tag1);
|
||||
|
||||
if (resp_hdr) {
|
||||
opcode = resp_hdr->opcode;
|
||||
subsystem = resp_hdr->subsystem;
|
||||
}
|
||||
|
||||
if (opcode == OPCODE_LOWLEVEL_LOOPBACK_TEST &&
|
||||
subsystem == CMD_SUBSYSTEM_LOWLEVEL) {
|
||||
complete(&adapter->et_cmd_compl);
|
||||
return 0;
|
||||
}
|
||||
be_async_cmd_process(adapter, compl, resp_hdr);
|
||||
|
||||
if (((opcode == OPCODE_COMMON_WRITE_FLASHROM) ||
|
||||
(opcode == OPCODE_COMMON_WRITE_OBJECT)) &&
|
||||
(subsystem == CMD_SUBSYSTEM_COMMON)) {
|
||||
adapter->flash_status = compl->status;
|
||||
complete(&adapter->et_cmd_compl);
|
||||
}
|
||||
|
||||
if (base_status == MCC_STATUS_SUCCESS) {
|
||||
if (((opcode == OPCODE_ETH_GET_STATISTICS) ||
|
||||
(opcode == OPCODE_ETH_GET_PPORT_STATS)) &&
|
||||
(subsystem == CMD_SUBSYSTEM_ETH)) {
|
||||
be_parse_stats(adapter);
|
||||
adapter->stats_cmd_sent = false;
|
||||
}
|
||||
if (opcode == OPCODE_COMMON_GET_CNTL_ADDITIONAL_ATTRIBUTES &&
|
||||
subsystem == CMD_SUBSYSTEM_COMMON) {
|
||||
struct be_cmd_resp_get_cntl_addnl_attribs *resp =
|
||||
(void *)resp_hdr;
|
||||
adapter->drv_stats.be_on_die_temperature =
|
||||
resp->on_die_temperature;
|
||||
}
|
||||
} else {
|
||||
if (opcode == OPCODE_COMMON_GET_CNTL_ADDITIONAL_ATTRIBUTES)
|
||||
adapter->be_get_temp_freq = 0;
|
||||
|
||||
if (be_skip_err_log(opcode, base_status, addl_status))
|
||||
return compl->status;
|
||||
if (base_status != MCC_STATUS_SUCCESS &&
|
||||
!be_skip_err_log(opcode, base_status, addl_status)) {
|
||||
|
||||
if (base_status == MCC_STATUS_UNAUTHORIZED_REQUEST) {
|
||||
dev_warn(&adapter->pdev->dev,
|
||||
|
|
Loading…
Reference in New Issue