mirror of https://gitee.com/openkylin/linux.git
Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes
This commit is contained in:
commit
c4ff9486c0
|
@ -1261,6 +1261,15 @@ int iwl_dvm_send_cmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This can happen upon FW ASSERT: we clear the STATUS_FW_ERROR flag
|
||||||
|
* in iwl_down but cancel the workers only later.
|
||||||
|
*/
|
||||||
|
if (!priv->ucode_loaded) {
|
||||||
|
IWL_ERR(priv, "Fw not loaded - dropping CMD: %x\n", cmd->id);
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Synchronous commands from this op-mode must hold
|
* Synchronous commands from this op-mode must hold
|
||||||
* the mutex, this ensures we don't try to send two
|
* the mutex, this ensures we don't try to send two
|
||||||
|
|
|
@ -367,6 +367,8 @@ int iwl_load_ucode_wait_alive(struct iwl_priv *priv,
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
priv->ucode_loaded = true;
|
||||||
|
|
||||||
if (ucode_type != IWL_UCODE_WOWLAN) {
|
if (ucode_type != IWL_UCODE_WOWLAN) {
|
||||||
/* delay a bit to give rfkill time to run */
|
/* delay a bit to give rfkill time to run */
|
||||||
msleep(5);
|
msleep(5);
|
||||||
|
@ -380,8 +382,6 @@ int iwl_load_ucode_wait_alive(struct iwl_priv *priv,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
priv->ucode_loaded = true;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -475,6 +475,10 @@ static int iwl_trans_pcie_start_fw(struct iwl_trans *trans,
|
||||||
|
|
||||||
/* If platform's RF_KILL switch is NOT set to KILL */
|
/* If platform's RF_KILL switch is NOT set to KILL */
|
||||||
hw_rfkill = iwl_is_rfkill_set(trans);
|
hw_rfkill = iwl_is_rfkill_set(trans);
|
||||||
|
if (hw_rfkill)
|
||||||
|
set_bit(STATUS_RFKILL, &trans_pcie->status);
|
||||||
|
else
|
||||||
|
clear_bit(STATUS_RFKILL, &trans_pcie->status);
|
||||||
iwl_op_mode_hw_rf_kill(trans->op_mode, hw_rfkill);
|
iwl_op_mode_hw_rf_kill(trans->op_mode, hw_rfkill);
|
||||||
if (hw_rfkill && !run_in_rfkill)
|
if (hw_rfkill && !run_in_rfkill)
|
||||||
return -ERFKILL;
|
return -ERFKILL;
|
||||||
|
@ -641,6 +645,7 @@ static int iwl_trans_pcie_d3_resume(struct iwl_trans *trans,
|
||||||
|
|
||||||
static int iwl_trans_pcie_start_hw(struct iwl_trans *trans)
|
static int iwl_trans_pcie_start_hw(struct iwl_trans *trans)
|
||||||
{
|
{
|
||||||
|
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
|
||||||
bool hw_rfkill;
|
bool hw_rfkill;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -656,6 +661,10 @@ static int iwl_trans_pcie_start_hw(struct iwl_trans *trans)
|
||||||
iwl_enable_rfkill_int(trans);
|
iwl_enable_rfkill_int(trans);
|
||||||
|
|
||||||
hw_rfkill = iwl_is_rfkill_set(trans);
|
hw_rfkill = iwl_is_rfkill_set(trans);
|
||||||
|
if (hw_rfkill)
|
||||||
|
set_bit(STATUS_RFKILL, &trans_pcie->status);
|
||||||
|
else
|
||||||
|
clear_bit(STATUS_RFKILL, &trans_pcie->status);
|
||||||
iwl_op_mode_hw_rf_kill(trans->op_mode, hw_rfkill);
|
iwl_op_mode_hw_rf_kill(trans->op_mode, hw_rfkill);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -694,6 +703,10 @@ static void iwl_trans_pcie_stop_hw(struct iwl_trans *trans,
|
||||||
* op_mode.
|
* op_mode.
|
||||||
*/
|
*/
|
||||||
hw_rfkill = iwl_is_rfkill_set(trans);
|
hw_rfkill = iwl_is_rfkill_set(trans);
|
||||||
|
if (hw_rfkill)
|
||||||
|
set_bit(STATUS_RFKILL, &trans_pcie->status);
|
||||||
|
else
|
||||||
|
clear_bit(STATUS_RFKILL, &trans_pcie->status);
|
||||||
iwl_op_mode_hw_rf_kill(trans->op_mode, hw_rfkill);
|
iwl_op_mode_hw_rf_kill(trans->op_mode, hw_rfkill);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1264,7 +1264,7 @@ static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans,
|
||||||
for (i = 0; i < IWL_MAX_CMD_TBS_PER_TFD; i++) {
|
for (i = 0; i < IWL_MAX_CMD_TBS_PER_TFD; i++) {
|
||||||
int copy = 0;
|
int copy = 0;
|
||||||
|
|
||||||
if (!cmd->len)
|
if (!cmd->len[i])
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* need at least IWL_HCMD_SCRATCHBUF_SIZE copied */
|
/* need at least IWL_HCMD_SCRATCHBUF_SIZE copied */
|
||||||
|
|
Loading…
Reference in New Issue