mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 16:54:20 +08:00
iwlwifi: mvm: send dbg config hcmds to fw if set in tlv
Send all debug-configuration HCMDs that are set in the TLVs to the FW. This may include HCMDs to configure the FW monitor and FW log level, for example. Signed-off-by: Liad Kaufman <liad.kaufman@intel.com> Reviewed-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
This commit is contained in:
parent
490fefebb6
commit
6a95126763
@ -394,6 +394,42 @@ out:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int iwl_mvm_start_fw_dbg_conf(struct iwl_mvm *mvm,
|
||||||
|
enum iwl_fw_dbg_conf conf_id)
|
||||||
|
{
|
||||||
|
u8 *ptr;
|
||||||
|
int ret;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (WARN_ONCE(conf_id >= ARRAY_SIZE(mvm->fw->dbg_conf_tlv),
|
||||||
|
"Invalid configuration %d\n", conf_id))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (!mvm->fw->dbg_conf_tlv[conf_id])
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (mvm->fw_dbg_conf != FW_DBG_INVALID)
|
||||||
|
IWL_WARN(mvm, "FW already configured (%d) - re-configuring\n",
|
||||||
|
mvm->fw_dbg_conf);
|
||||||
|
|
||||||
|
/* Send all HCMDs for configuring the FW debug */
|
||||||
|
ptr = (void *)&mvm->fw->dbg_conf_tlv[conf_id]->hcmd;
|
||||||
|
for (i = 0; i < mvm->fw->dbg_conf_tlv[conf_id]->num_of_hcmds; i++) {
|
||||||
|
struct iwl_fw_dbg_conf_hcmd *cmd = (void *)ptr;
|
||||||
|
|
||||||
|
ret = iwl_mvm_send_cmd_pdu(mvm, cmd->id, 0,
|
||||||
|
le16_to_cpu(cmd->len), cmd->data);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
ptr += sizeof(*cmd);
|
||||||
|
ptr += le16_to_cpu(cmd->len);
|
||||||
|
}
|
||||||
|
|
||||||
|
mvm->fw_dbg_conf = conf_id;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
int iwl_mvm_up(struct iwl_mvm *mvm)
|
int iwl_mvm_up(struct iwl_mvm *mvm)
|
||||||
{
|
{
|
||||||
int ret, i;
|
int ret, i;
|
||||||
@ -445,6 +481,9 @@ int iwl_mvm_up(struct iwl_mvm *mvm)
|
|||||||
if (ret)
|
if (ret)
|
||||||
IWL_ERR(mvm, "Failed to initialize Smart Fifo\n");
|
IWL_ERR(mvm, "Failed to initialize Smart Fifo\n");
|
||||||
|
|
||||||
|
mvm->fw_dbg_conf = FW_DBG_INVALID;
|
||||||
|
iwl_mvm_start_fw_dbg_conf(mvm, FW_DBG_CUSTOM);
|
||||||
|
|
||||||
ret = iwl_send_tx_ant_cfg(mvm, mvm->fw->valid_tx_ant);
|
ret = iwl_send_tx_ant_cfg(mvm, mvm->fw->valid_tx_ant);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -670,6 +670,7 @@ struct iwl_mvm {
|
|||||||
/* -1 for always, 0 for never, >0 for that many times */
|
/* -1 for always, 0 for never, >0 for that many times */
|
||||||
s8 restart_fw;
|
s8 restart_fw;
|
||||||
struct work_struct fw_error_dump_wk;
|
struct work_struct fw_error_dump_wk;
|
||||||
|
enum iwl_fw_dbg_conf fw_dbg_conf;
|
||||||
|
|
||||||
#ifdef CONFIG_IWLWIFI_LEDS
|
#ifdef CONFIG_IWLWIFI_LEDS
|
||||||
struct led_classdev led;
|
struct led_classdev led;
|
||||||
|
Loading…
Reference in New Issue
Block a user