Commit 63b62a2d authored by Gregory Greenman's avatar Gregory Greenman Committed by Luca Coelho

iwlwifi: mvm: rfi: handle deactivation notification

Sometimes RFIm can be deactivated in FW due to internal
errors. In this case, FW will send a notification to the
driver about that. Add a log message in this case since
FW logs are not always available.
Signed-off-by: default avatarGregory Greenman <gregory.greenman@intel.com>
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20220205112029.48d0a1624fec.I8f9271959fc53223fa329ab097b12fd69b498b71@changeidSigned-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
parent c91b90b2
...@@ -605,6 +605,11 @@ enum iwl_system_subcmd_ids { ...@@ -605,6 +605,11 @@ enum iwl_system_subcmd_ids {
* @SYSTEM_FEATURES_CONTROL_CMD: &struct iwl_system_features_control_cmd * @SYSTEM_FEATURES_CONTROL_CMD: &struct iwl_system_features_control_cmd
*/ */
SYSTEM_FEATURES_CONTROL_CMD = 0xd, SYSTEM_FEATURES_CONTROL_CMD = 0xd,
/**
* @RFI_DEACTIVATE_NOTIF: &struct iwl_rfi_deactivate_notif
*/
RFI_DEACTIVATE_NOTIF = 0xff,
}; };
#endif /* __iwl_fw_api_commands_h__ */ #endif /* __iwl_fw_api_commands_h__ */
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
/* /*
* Copyright (C) 2020 Intel Corporation * Copyright (C) 2020-2021 Intel Corporation
*/ */
#ifndef __iwl_fw_api_rfi_h__ #ifndef __iwl_fw_api_rfi_h__
#define __iwl_fw_api_rfi_h__ #define __iwl_fw_api_rfi_h__
...@@ -57,4 +57,12 @@ struct iwl_rfi_freq_table_resp_cmd { ...@@ -57,4 +57,12 @@ struct iwl_rfi_freq_table_resp_cmd {
__le32 status; __le32 status;
} __packed; /* RFI_CONFIG_CMD_API_S_VER_1 */ } __packed; /* RFI_CONFIG_CMD_API_S_VER_1 */
/**
* struct iwl_rfi_deactivate_notif - notifcation that FW disaled RFIm
*
* @reason: used only for a log message
*/
struct iwl_rfi_deactivate_notif {
__le32 reason;
} __packed; /* RFI_DEACTIVATE_NTF_S_VER_1 */
#endif /* __iwl_fw_api_rfi_h__ */ #endif /* __iwl_fw_api_rfi_h__ */
...@@ -2099,6 +2099,8 @@ void iwl_mvm_sta_add_debugfs(struct ieee80211_hw *hw, ...@@ -2099,6 +2099,8 @@ void iwl_mvm_sta_add_debugfs(struct ieee80211_hw *hw,
int iwl_rfi_send_config_cmd(struct iwl_mvm *mvm, int iwl_rfi_send_config_cmd(struct iwl_mvm *mvm,
struct iwl_rfi_lut_entry *rfi_table); struct iwl_rfi_lut_entry *rfi_table);
struct iwl_rfi_freq_table_resp_cmd *iwl_rfi_get_freq_table(struct iwl_mvm *mvm); struct iwl_rfi_freq_table_resp_cmd *iwl_rfi_get_freq_table(struct iwl_mvm *mvm);
void iwl_rfi_deactivate_notif_handler(struct iwl_mvm *mvm,
struct iwl_rx_cmd_buffer *rxb);
static inline u8 iwl_mvm_phy_band_from_nl80211(enum nl80211_band band) static inline u8 iwl_mvm_phy_band_from_nl80211(enum nl80211_band band)
{ {
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "iwl-prph.h" #include "iwl-prph.h"
#include "rs.h" #include "rs.h"
#include "fw/api/scan.h" #include "fw/api/scan.h"
#include "fw/api/rfi.h"
#include "time-event.h" #include "time-event.h"
#include "fw-api.h" #include "fw-api.h"
#include "fw/acpi.h" #include "fw/acpi.h"
...@@ -396,6 +397,10 @@ static const struct iwl_rx_handlers iwl_mvm_rx_handlers[] = { ...@@ -396,6 +397,10 @@ static const struct iwl_rx_handlers iwl_mvm_rx_handlers[] = {
iwl_mvm_rx_thermal_dual_chain_req, iwl_mvm_rx_thermal_dual_chain_req,
RX_HANDLER_ASYNC_LOCKED, RX_HANDLER_ASYNC_LOCKED,
struct iwl_thermal_dual_chain_request), struct iwl_thermal_dual_chain_request),
RX_HANDLER_GRP(SYSTEM_GROUP, RFI_DEACTIVATE_NOTIF,
iwl_rfi_deactivate_notif_handler, RX_HANDLER_ASYNC_UNLOCKED,
struct iwl_rfi_deactivate_notif),
}; };
#undef RX_HANDLER #undef RX_HANDLER
#undef RX_HANDLER_GRP #undef RX_HANDLER_GRP
...@@ -505,6 +510,7 @@ static const struct iwl_hcmd_names iwl_mvm_system_names[] = { ...@@ -505,6 +510,7 @@ static const struct iwl_hcmd_names iwl_mvm_system_names[] = {
HCMD_NAME(RFI_CONFIG_CMD), HCMD_NAME(RFI_CONFIG_CMD),
HCMD_NAME(RFI_GET_FREQ_TABLE_CMD), HCMD_NAME(RFI_GET_FREQ_TABLE_CMD),
HCMD_NAME(SYSTEM_FEATURES_CONTROL_CMD), HCMD_NAME(SYSTEM_FEATURES_CONTROL_CMD),
HCMD_NAME(RFI_DEACTIVATE_NOTIF),
}; };
/* Please keep this array *SORTED* by hex value. /* Please keep this array *SORTED* by hex value.
......
...@@ -134,3 +134,12 @@ struct iwl_rfi_freq_table_resp_cmd *iwl_rfi_get_freq_table(struct iwl_mvm *mvm) ...@@ -134,3 +134,12 @@ struct iwl_rfi_freq_table_resp_cmd *iwl_rfi_get_freq_table(struct iwl_mvm *mvm)
iwl_free_resp(&cmd); iwl_free_resp(&cmd);
return resp; return resp;
} }
void iwl_rfi_deactivate_notif_handler(struct iwl_mvm *mvm,
struct iwl_rx_cmd_buffer *rxb)
{
struct iwl_rx_packet *pkt = rxb_addr(rxb);
struct iwl_rfi_deactivate_notif *notif = (void *)pkt->data;
IWL_INFO(mvm, "RFIm is deactivated, reason = %d\n", notif->reason);
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment