iwlwifi: remove support for fw older than -16.ucode
API version lower than 16 is not supported anymore - don't load older ucode. Remove code handling older versions. Signed-off-by: Sara Sharon <sara.sharon@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
This commit is contained in:
parent
a0b09f1303
commit
97f95c93c8
|
@ -77,15 +77,15 @@
|
||||||
#define IWL3168_UCODE_API_MAX 21
|
#define IWL3168_UCODE_API_MAX 21
|
||||||
|
|
||||||
/* Oldest version we won't warn about */
|
/* Oldest version we won't warn about */
|
||||||
#define IWL7260_UCODE_API_OK 13
|
#define IWL7260_UCODE_API_OK 16
|
||||||
#define IWL7265_UCODE_API_OK 13
|
#define IWL7265_UCODE_API_OK 16
|
||||||
#define IWL7265D_UCODE_API_OK 13
|
#define IWL7265D_UCODE_API_OK 16
|
||||||
#define IWL3168_UCODE_API_OK 20
|
#define IWL3168_UCODE_API_OK 20
|
||||||
|
|
||||||
/* Lowest firmware API version supported */
|
/* Lowest firmware API version supported */
|
||||||
#define IWL7260_UCODE_API_MIN 13
|
#define IWL7260_UCODE_API_MIN 16
|
||||||
#define IWL7265_UCODE_API_MIN 13
|
#define IWL7265_UCODE_API_MIN 16
|
||||||
#define IWL7265D_UCODE_API_MIN 13
|
#define IWL7265D_UCODE_API_MIN 16
|
||||||
#define IWL3168_UCODE_API_MIN 20
|
#define IWL3168_UCODE_API_MIN 20
|
||||||
|
|
||||||
/* NVM versions */
|
/* NVM versions */
|
||||||
|
|
|
@ -74,11 +74,11 @@
|
||||||
#define IWL8265_UCODE_API_MAX 21
|
#define IWL8265_UCODE_API_MAX 21
|
||||||
|
|
||||||
/* Oldest version we won't warn about */
|
/* Oldest version we won't warn about */
|
||||||
#define IWL8000_UCODE_API_OK 13
|
#define IWL8000_UCODE_API_OK 16
|
||||||
#define IWL8265_UCODE_API_OK 20
|
#define IWL8265_UCODE_API_OK 20
|
||||||
|
|
||||||
/* Lowest firmware API version supported */
|
/* Lowest firmware API version supported */
|
||||||
#define IWL8000_UCODE_API_MIN 13
|
#define IWL8000_UCODE_API_MIN 16
|
||||||
#define IWL8265_UCODE_API_MIN 20
|
#define IWL8265_UCODE_API_MIN 20
|
||||||
|
|
||||||
/* NVM versions */
|
/* NVM versions */
|
||||||
|
|
|
@ -58,10 +58,10 @@
|
||||||
#define IWL9000_UCODE_API_MAX 21
|
#define IWL9000_UCODE_API_MAX 21
|
||||||
|
|
||||||
/* Oldest version we won't warn about */
|
/* Oldest version we won't warn about */
|
||||||
#define IWL9000_UCODE_API_OK 13
|
#define IWL9000_UCODE_API_OK 16
|
||||||
|
|
||||||
/* Lowest firmware API version supported */
|
/* Lowest firmware API version supported */
|
||||||
#define IWL9000_UCODE_API_MIN 13
|
#define IWL9000_UCODE_API_MIN 16
|
||||||
|
|
||||||
/* NVM versions */
|
/* NVM versions */
|
||||||
#define IWL9000_NVM_VERSION 0x0a1d
|
#define IWL9000_NVM_VERSION 0x0a1d
|
||||||
|
|
|
@ -1255,10 +1255,7 @@ static void iwl_req_fw_callback(const struct firmware *ucode_raw, void *context)
|
||||||
if (err)
|
if (err)
|
||||||
goto try_again;
|
goto try_again;
|
||||||
|
|
||||||
if (fw_has_api(&drv->fw.ucode_capa, IWL_UCODE_TLV_API_NEW_VERSION))
|
api_ver = drv->fw.ucode_ver;
|
||||||
api_ver = drv->fw.ucode_ver;
|
|
||||||
else
|
|
||||||
api_ver = IWL_UCODE_API(drv->fw.ucode_ver);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* api_ver should match the api version forming part of the
|
* api_ver should match the api version forming part of the
|
||||||
|
|
|
@ -245,13 +245,11 @@ typedef unsigned int __bitwise__ iwl_ucode_tlv_api_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* enum iwl_ucode_tlv_api - ucode api
|
* enum iwl_ucode_tlv_api - ucode api
|
||||||
* @IWL_UCODE_TLV_API_BT_COEX_SPLIT: new API for BT Coex
|
|
||||||
* @IWL_UCODE_TLV_API_FRAGMENTED_SCAN: This ucode supports active dwell time
|
* @IWL_UCODE_TLV_API_FRAGMENTED_SCAN: This ucode supports active dwell time
|
||||||
* longer than the passive one, which is essential for fragmented scan.
|
* longer than the passive one, which is essential for fragmented scan.
|
||||||
* @IWL_UCODE_TLV_API_WIFI_MCC_UPDATE: ucode supports MCC updates with source.
|
* @IWL_UCODE_TLV_API_WIFI_MCC_UPDATE: ucode supports MCC updates with source.
|
||||||
* @IWL_UCODE_TLV_API_WIDE_CMD_HDR: ucode supports wide command header
|
* @IWL_UCODE_TLV_API_WIDE_CMD_HDR: ucode supports wide command header
|
||||||
* @IWL_UCODE_TLV_API_LQ_SS_PARAMS: Configure STBC/BFER via LQ CMD ss_params
|
* @IWL_UCODE_TLV_API_LQ_SS_PARAMS: Configure STBC/BFER via LQ CMD ss_params
|
||||||
* @IWL_UCODE_TLV_API_NEW_VERSION: new versioning format
|
|
||||||
* @IWL_UCODE_TLV_API_EXT_SCAN_PRIORITY: scan APIs use 8-level priority
|
* @IWL_UCODE_TLV_API_EXT_SCAN_PRIORITY: scan APIs use 8-level priority
|
||||||
* instead of 3.
|
* instead of 3.
|
||||||
* @IWL_UCODE_TLV_API_TX_POWER_CHAIN: TX power API has larger command size
|
* @IWL_UCODE_TLV_API_TX_POWER_CHAIN: TX power API has larger command size
|
||||||
|
@ -260,12 +258,10 @@ typedef unsigned int __bitwise__ iwl_ucode_tlv_api_t;
|
||||||
* @NUM_IWL_UCODE_TLV_API: number of bits used
|
* @NUM_IWL_UCODE_TLV_API: number of bits used
|
||||||
*/
|
*/
|
||||||
enum iwl_ucode_tlv_api {
|
enum iwl_ucode_tlv_api {
|
||||||
IWL_UCODE_TLV_API_BT_COEX_SPLIT = (__force iwl_ucode_tlv_api_t)3,
|
|
||||||
IWL_UCODE_TLV_API_FRAGMENTED_SCAN = (__force iwl_ucode_tlv_api_t)8,
|
IWL_UCODE_TLV_API_FRAGMENTED_SCAN = (__force iwl_ucode_tlv_api_t)8,
|
||||||
IWL_UCODE_TLV_API_WIFI_MCC_UPDATE = (__force iwl_ucode_tlv_api_t)9,
|
IWL_UCODE_TLV_API_WIFI_MCC_UPDATE = (__force iwl_ucode_tlv_api_t)9,
|
||||||
IWL_UCODE_TLV_API_WIDE_CMD_HDR = (__force iwl_ucode_tlv_api_t)14,
|
IWL_UCODE_TLV_API_WIDE_CMD_HDR = (__force iwl_ucode_tlv_api_t)14,
|
||||||
IWL_UCODE_TLV_API_LQ_SS_PARAMS = (__force iwl_ucode_tlv_api_t)18,
|
IWL_UCODE_TLV_API_LQ_SS_PARAMS = (__force iwl_ucode_tlv_api_t)18,
|
||||||
IWL_UCODE_TLV_API_NEW_VERSION = (__force iwl_ucode_tlv_api_t)20,
|
|
||||||
IWL_UCODE_TLV_API_EXT_SCAN_PRIORITY = (__force iwl_ucode_tlv_api_t)24,
|
IWL_UCODE_TLV_API_EXT_SCAN_PRIORITY = (__force iwl_ucode_tlv_api_t)24,
|
||||||
IWL_UCODE_TLV_API_TX_POWER_CHAIN = (__force iwl_ucode_tlv_api_t)27,
|
IWL_UCODE_TLV_API_TX_POWER_CHAIN = (__force iwl_ucode_tlv_api_t)27,
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ obj-$(CONFIG_IWLMVM) += iwlmvm.o
|
||||||
iwlmvm-y += fw.o mac80211.o nvm.o ops.o phy-ctxt.o mac-ctxt.o
|
iwlmvm-y += fw.o mac80211.o nvm.o ops.o phy-ctxt.o mac-ctxt.o
|
||||||
iwlmvm-y += utils.o rx.o rxmq.o tx.o binding.o quota.o sta.o sf.o
|
iwlmvm-y += utils.o rx.o rxmq.o tx.o binding.o quota.o sta.o sf.o
|
||||||
iwlmvm-y += scan.o time-event.o rs.o
|
iwlmvm-y += scan.o time-event.o rs.o
|
||||||
iwlmvm-y += power.o coex.o coex_legacy.o
|
iwlmvm-y += power.o coex.o
|
||||||
iwlmvm-y += tt.o offloading.o tdls.o
|
iwlmvm-y += tt.o offloading.o tdls.o
|
||||||
iwlmvm-$(CONFIG_IWLWIFI_DEBUGFS) += debugfs.o debugfs-vif.o
|
iwlmvm-$(CONFIG_IWLWIFI_DEBUGFS) += debugfs.o debugfs-vif.o
|
||||||
iwlmvm-$(CONFIG_IWLWIFI_LEDS) += led.o
|
iwlmvm-$(CONFIG_IWLWIFI_LEDS) += led.o
|
||||||
|
|
|
@ -411,9 +411,6 @@ int iwl_send_bt_init_conf(struct iwl_mvm *mvm)
|
||||||
struct iwl_bt_coex_cmd bt_cmd = {};
|
struct iwl_bt_coex_cmd bt_cmd = {};
|
||||||
u32 mode;
|
u32 mode;
|
||||||
|
|
||||||
if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_BT_COEX_SPLIT))
|
|
||||||
return iwl_send_bt_init_conf_old(mvm);
|
|
||||||
|
|
||||||
lockdep_assert_held(&mvm->mutex);
|
lockdep_assert_held(&mvm->mutex);
|
||||||
|
|
||||||
if (unlikely(mvm->bt_force_ant_mode != BT_FORCE_ANT_DIS)) {
|
if (unlikely(mvm->bt_force_ant_mode != BT_FORCE_ANT_DIS)) {
|
||||||
|
@ -728,12 +725,6 @@ void iwl_mvm_rx_bt_coex_notif(struct iwl_mvm *mvm,
|
||||||
struct iwl_rx_packet *pkt = rxb_addr(rxb);
|
struct iwl_rx_packet *pkt = rxb_addr(rxb);
|
||||||
struct iwl_bt_coex_profile_notif *notif = (void *)pkt->data;
|
struct iwl_bt_coex_profile_notif *notif = (void *)pkt->data;
|
||||||
|
|
||||||
if (!fw_has_api(&mvm->fw->ucode_capa,
|
|
||||||
IWL_UCODE_TLV_API_BT_COEX_SPLIT)) {
|
|
||||||
iwl_mvm_rx_bt_coex_notif_old(mvm, rxb);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
IWL_DEBUG_COEX(mvm, "BT Coex Notification received\n");
|
IWL_DEBUG_COEX(mvm, "BT Coex Notification received\n");
|
||||||
IWL_DEBUG_COEX(mvm, "\tBT ci compliance %d\n", notif->bt_ci_compliance);
|
IWL_DEBUG_COEX(mvm, "\tBT ci compliance %d\n", notif->bt_ci_compliance);
|
||||||
IWL_DEBUG_COEX(mvm, "\tBT primary_ch_lut %d\n",
|
IWL_DEBUG_COEX(mvm, "\tBT primary_ch_lut %d\n",
|
||||||
|
@ -755,12 +746,6 @@ void iwl_mvm_bt_rssi_event(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
|
||||||
struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
|
struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!fw_has_api(&mvm->fw->ucode_capa,
|
|
||||||
IWL_UCODE_TLV_API_BT_COEX_SPLIT)) {
|
|
||||||
iwl_mvm_bt_rssi_event_old(mvm, vif, rssi_event);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
lockdep_assert_held(&mvm->mutex);
|
lockdep_assert_held(&mvm->mutex);
|
||||||
|
|
||||||
/* Ignore updates if we are in force mode */
|
/* Ignore updates if we are in force mode */
|
||||||
|
@ -807,9 +792,6 @@ u16 iwl_mvm_coex_agg_time_limit(struct iwl_mvm *mvm,
|
||||||
struct iwl_mvm_phy_ctxt *phy_ctxt = mvmvif->phy_ctxt;
|
struct iwl_mvm_phy_ctxt *phy_ctxt = mvmvif->phy_ctxt;
|
||||||
enum iwl_bt_coex_lut_type lut_type;
|
enum iwl_bt_coex_lut_type lut_type;
|
||||||
|
|
||||||
if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_BT_COEX_SPLIT))
|
|
||||||
return iwl_mvm_coex_agg_time_limit_old(mvm, sta);
|
|
||||||
|
|
||||||
if (IWL_COEX_IS_TTC_ON(mvm->last_bt_notif.ttc_rrc_status, phy_ctxt->id))
|
if (IWL_COEX_IS_TTC_ON(mvm->last_bt_notif.ttc_rrc_status, phy_ctxt->id))
|
||||||
return LINK_QUAL_AGG_TIME_LIMIT_DEF;
|
return LINK_QUAL_AGG_TIME_LIMIT_DEF;
|
||||||
|
|
||||||
|
@ -834,9 +816,6 @@ bool iwl_mvm_bt_coex_is_mimo_allowed(struct iwl_mvm *mvm,
|
||||||
struct iwl_mvm_phy_ctxt *phy_ctxt = mvmvif->phy_ctxt;
|
struct iwl_mvm_phy_ctxt *phy_ctxt = mvmvif->phy_ctxt;
|
||||||
enum iwl_bt_coex_lut_type lut_type;
|
enum iwl_bt_coex_lut_type lut_type;
|
||||||
|
|
||||||
if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_BT_COEX_SPLIT))
|
|
||||||
return iwl_mvm_bt_coex_is_mimo_allowed_old(mvm, sta);
|
|
||||||
|
|
||||||
if (IWL_COEX_IS_TTC_ON(mvm->last_bt_notif.ttc_rrc_status, phy_ctxt->id))
|
if (IWL_COEX_IS_TTC_ON(mvm->last_bt_notif.ttc_rrc_status, phy_ctxt->id))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -864,9 +843,6 @@ bool iwl_mvm_bt_coex_is_ant_avail(struct iwl_mvm *mvm, u8 ant)
|
||||||
if (ant & mvm->cfg->non_shared_ant)
|
if (ant & mvm->cfg->non_shared_ant)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_BT_COEX_SPLIT))
|
|
||||||
return iwl_mvm_bt_coex_is_shared_ant_avail_old(mvm);
|
|
||||||
|
|
||||||
return le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) <
|
return le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) <
|
||||||
BT_HIGH_TRAFFIC;
|
BT_HIGH_TRAFFIC;
|
||||||
}
|
}
|
||||||
|
@ -877,9 +853,6 @@ bool iwl_mvm_bt_coex_is_shared_ant_avail(struct iwl_mvm *mvm)
|
||||||
if (mvm->cfg->bt_shared_single_ant)
|
if (mvm->cfg->bt_shared_single_ant)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_BT_COEX_SPLIT))
|
|
||||||
return iwl_mvm_bt_coex_is_shared_ant_avail_old(mvm);
|
|
||||||
|
|
||||||
return le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) < BT_HIGH_TRAFFIC;
|
return le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) < BT_HIGH_TRAFFIC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -888,9 +861,6 @@ bool iwl_mvm_bt_coex_is_tpc_allowed(struct iwl_mvm *mvm,
|
||||||
{
|
{
|
||||||
u32 bt_activity = le32_to_cpu(mvm->last_bt_notif.bt_activity_grading);
|
u32 bt_activity = le32_to_cpu(mvm->last_bt_notif.bt_activity_grading);
|
||||||
|
|
||||||
if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_BT_COEX_SPLIT))
|
|
||||||
return iwl_mvm_bt_coex_is_tpc_allowed_old(mvm, band);
|
|
||||||
|
|
||||||
if (band != IEEE80211_BAND_2GHZ)
|
if (band != IEEE80211_BAND_2GHZ)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -937,12 +907,6 @@ u8 iwl_mvm_bt_coex_tx_prio(struct iwl_mvm *mvm, struct ieee80211_hdr *hdr,
|
||||||
|
|
||||||
void iwl_mvm_bt_coex_vif_change(struct iwl_mvm *mvm)
|
void iwl_mvm_bt_coex_vif_change(struct iwl_mvm *mvm)
|
||||||
{
|
{
|
||||||
if (!fw_has_api(&mvm->fw->ucode_capa,
|
|
||||||
IWL_UCODE_TLV_API_BT_COEX_SPLIT)) {
|
|
||||||
iwl_mvm_bt_coex_vif_change_old(mvm);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
iwl_mvm_bt_coex_notif_handle(mvm);
|
iwl_mvm_bt_coex_notif_handle(mvm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -955,12 +919,6 @@ void iwl_mvm_rx_ant_coupling_notif(struct iwl_mvm *mvm,
|
||||||
u8 __maybe_unused lower_bound, upper_bound;
|
u8 __maybe_unused lower_bound, upper_bound;
|
||||||
u8 lut;
|
u8 lut;
|
||||||
|
|
||||||
if (!fw_has_api(&mvm->fw->ucode_capa,
|
|
||||||
IWL_UCODE_TLV_API_BT_COEX_SPLIT)) {
|
|
||||||
iwl_mvm_rx_ant_coupling_notif_old(mvm, rxb);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!iwl_mvm_bt_is_plcr_supported(mvm))
|
if (!iwl_mvm_bt_is_plcr_supported(mvm))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -463,69 +463,11 @@ int iwl_mvm_coex_dump_mbox(struct iwl_bt_coex_profile_notif *notif, char *buf,
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
|
||||||
int iwl_mvm_coex_dump_mbox_old(struct iwl_bt_coex_profile_notif_old *notif,
|
|
||||||
char *buf, int pos, int bufsz)
|
|
||||||
{
|
|
||||||
pos += scnprintf(buf+pos, bufsz-pos, "MBOX dw0:\n");
|
|
||||||
|
|
||||||
BT_MBOX_PRINT(0, LE_SLAVE_LAT, false);
|
|
||||||
BT_MBOX_PRINT(0, LE_PROF1, false);
|
|
||||||
BT_MBOX_PRINT(0, LE_PROF2, false);
|
|
||||||
BT_MBOX_PRINT(0, LE_PROF_OTHER, false);
|
|
||||||
BT_MBOX_PRINT(0, CHL_SEQ_N, false);
|
|
||||||
BT_MBOX_PRINT(0, INBAND_S, false);
|
|
||||||
BT_MBOX_PRINT(0, LE_MIN_RSSI, false);
|
|
||||||
BT_MBOX_PRINT(0, LE_SCAN, false);
|
|
||||||
BT_MBOX_PRINT(0, LE_ADV, false);
|
|
||||||
BT_MBOX_PRINT(0, LE_MAX_TX_POWER, false);
|
|
||||||
BT_MBOX_PRINT(0, OPEN_CON_1, true);
|
|
||||||
|
|
||||||
pos += scnprintf(buf+pos, bufsz-pos, "MBOX dw1:\n");
|
|
||||||
|
|
||||||
BT_MBOX_PRINT(1, BR_MAX_TX_POWER, false);
|
|
||||||
BT_MBOX_PRINT(1, IP_SR, false);
|
|
||||||
BT_MBOX_PRINT(1, LE_MSTR, false);
|
|
||||||
BT_MBOX_PRINT(1, AGGR_TRFC_LD, false);
|
|
||||||
BT_MBOX_PRINT(1, MSG_TYPE, false);
|
|
||||||
BT_MBOX_PRINT(1, SSN, true);
|
|
||||||
|
|
||||||
pos += scnprintf(buf+pos, bufsz-pos, "MBOX dw2:\n");
|
|
||||||
|
|
||||||
BT_MBOX_PRINT(2, SNIFF_ACT, false);
|
|
||||||
BT_MBOX_PRINT(2, PAG, false);
|
|
||||||
BT_MBOX_PRINT(2, INQUIRY, false);
|
|
||||||
BT_MBOX_PRINT(2, CONN, false);
|
|
||||||
BT_MBOX_PRINT(2, SNIFF_INTERVAL, false);
|
|
||||||
BT_MBOX_PRINT(2, DISC, false);
|
|
||||||
BT_MBOX_PRINT(2, SCO_TX_ACT, false);
|
|
||||||
BT_MBOX_PRINT(2, SCO_RX_ACT, false);
|
|
||||||
BT_MBOX_PRINT(2, ESCO_RE_TX, false);
|
|
||||||
BT_MBOX_PRINT(2, SCO_DURATION, true);
|
|
||||||
|
|
||||||
pos += scnprintf(buf+pos, bufsz-pos, "MBOX dw3:\n");
|
|
||||||
|
|
||||||
BT_MBOX_PRINT(3, SCO_STATE, false);
|
|
||||||
BT_MBOX_PRINT(3, SNIFF_STATE, false);
|
|
||||||
BT_MBOX_PRINT(3, A2DP_STATE, false);
|
|
||||||
BT_MBOX_PRINT(3, ACL_STATE, false);
|
|
||||||
BT_MBOX_PRINT(3, MSTR_STATE, false);
|
|
||||||
BT_MBOX_PRINT(3, OBX_STATE, false);
|
|
||||||
BT_MBOX_PRINT(3, OPEN_CON_2, false);
|
|
||||||
BT_MBOX_PRINT(3, TRAFFIC_LOAD, false);
|
|
||||||
BT_MBOX_PRINT(3, CHL_SEQN_LSB, false);
|
|
||||||
BT_MBOX_PRINT(3, INBAND_P, false);
|
|
||||||
BT_MBOX_PRINT(3, MSG_TYPE_2, false);
|
|
||||||
BT_MBOX_PRINT(3, SSN_2, false);
|
|
||||||
BT_MBOX_PRINT(3, UPDATE_REQUEST, true);
|
|
||||||
|
|
||||||
return pos;
|
|
||||||
}
|
|
||||||
|
|
||||||
static ssize_t iwl_dbgfs_bt_notif_read(struct file *file, char __user *user_buf,
|
static ssize_t iwl_dbgfs_bt_notif_read(struct file *file, char __user *user_buf,
|
||||||
size_t count, loff_t *ppos)
|
size_t count, loff_t *ppos)
|
||||||
{
|
{
|
||||||
struct iwl_mvm *mvm = file->private_data;
|
struct iwl_mvm *mvm = file->private_data;
|
||||||
|
struct iwl_bt_coex_profile_notif *notif = &mvm->last_bt_notif;
|
||||||
char *buf;
|
char *buf;
|
||||||
int ret, pos = 0, bufsz = sizeof(char) * 1024;
|
int ret, pos = 0, bufsz = sizeof(char) * 1024;
|
||||||
|
|
||||||
|
@ -535,52 +477,24 @@ static ssize_t iwl_dbgfs_bt_notif_read(struct file *file, char __user *user_buf,
|
||||||
|
|
||||||
mutex_lock(&mvm->mutex);
|
mutex_lock(&mvm->mutex);
|
||||||
|
|
||||||
if (!fw_has_api(&mvm->fw->ucode_capa,
|
pos += iwl_mvm_coex_dump_mbox(notif, buf, pos, bufsz);
|
||||||
IWL_UCODE_TLV_API_BT_COEX_SPLIT)) {
|
|
||||||
struct iwl_bt_coex_profile_notif_old *notif =
|
|
||||||
&mvm->last_bt_notif_old;
|
|
||||||
|
|
||||||
pos += iwl_mvm_coex_dump_mbox_old(notif, buf, pos, bufsz);
|
pos += scnprintf(buf + pos, bufsz - pos, "bt_ci_compliance = %d\n",
|
||||||
|
notif->bt_ci_compliance);
|
||||||
pos += scnprintf(buf+pos, bufsz-pos, "bt_ci_compliance = %d\n",
|
pos += scnprintf(buf + pos, bufsz - pos, "primary_ch_lut = %d\n",
|
||||||
notif->bt_ci_compliance);
|
le32_to_cpu(notif->primary_ch_lut));
|
||||||
pos += scnprintf(buf+pos, bufsz-pos, "primary_ch_lut = %d\n",
|
pos += scnprintf(buf + pos, bufsz - pos, "secondary_ch_lut = %d\n",
|
||||||
le32_to_cpu(notif->primary_ch_lut));
|
le32_to_cpu(notif->secondary_ch_lut));
|
||||||
pos += scnprintf(buf+pos, bufsz-pos, "secondary_ch_lut = %d\n",
|
pos += scnprintf(buf + pos,
|
||||||
le32_to_cpu(notif->secondary_ch_lut));
|
bufsz - pos, "bt_activity_grading = %d\n",
|
||||||
pos += scnprintf(buf+pos,
|
le32_to_cpu(notif->bt_activity_grading));
|
||||||
bufsz-pos, "bt_activity_grading = %d\n",
|
pos += scnprintf(buf + pos, bufsz - pos,
|
||||||
le32_to_cpu(notif->bt_activity_grading));
|
"antenna isolation = %d CORUN LUT index = %d\n",
|
||||||
pos += scnprintf(buf+pos, bufsz-pos,
|
mvm->last_ant_isol, mvm->last_corun_lut);
|
||||||
"antenna isolation = %d CORUN LUT index = %d\n",
|
pos += scnprintf(buf + pos, bufsz - pos, "bt_rrc = %d\n",
|
||||||
mvm->last_ant_isol, mvm->last_corun_lut);
|
(notif->ttc_rrc_status >> 4) & 0xF);
|
||||||
pos += scnprintf(buf + pos, bufsz - pos, "bt_rrc = %d\n",
|
pos += scnprintf(buf + pos, bufsz - pos, "bt_ttc = %d\n",
|
||||||
notif->rrc_enabled);
|
notif->ttc_rrc_status & 0xF);
|
||||||
pos += scnprintf(buf + pos, bufsz - pos, "bt_ttc = %d\n",
|
|
||||||
notif->ttc_enabled);
|
|
||||||
} else {
|
|
||||||
struct iwl_bt_coex_profile_notif *notif =
|
|
||||||
&mvm->last_bt_notif;
|
|
||||||
|
|
||||||
pos += iwl_mvm_coex_dump_mbox(notif, buf, pos, bufsz);
|
|
||||||
|
|
||||||
pos += scnprintf(buf+pos, bufsz-pos, "bt_ci_compliance = %d\n",
|
|
||||||
notif->bt_ci_compliance);
|
|
||||||
pos += scnprintf(buf+pos, bufsz-pos, "primary_ch_lut = %d\n",
|
|
||||||
le32_to_cpu(notif->primary_ch_lut));
|
|
||||||
pos += scnprintf(buf+pos, bufsz-pos, "secondary_ch_lut = %d\n",
|
|
||||||
le32_to_cpu(notif->secondary_ch_lut));
|
|
||||||
pos += scnprintf(buf+pos,
|
|
||||||
bufsz-pos, "bt_activity_grading = %d\n",
|
|
||||||
le32_to_cpu(notif->bt_activity_grading));
|
|
||||||
pos += scnprintf(buf+pos, bufsz-pos,
|
|
||||||
"antenna isolation = %d CORUN LUT index = %d\n",
|
|
||||||
mvm->last_ant_isol, mvm->last_corun_lut);
|
|
||||||
pos += scnprintf(buf + pos, bufsz - pos, "bt_rrc = %d\n",
|
|
||||||
(notif->ttc_rrc_status >> 4) & 0xF);
|
|
||||||
pos += scnprintf(buf + pos, bufsz - pos, "bt_ttc = %d\n",
|
|
||||||
notif->ttc_rrc_status & 0xF);
|
|
||||||
}
|
|
||||||
|
|
||||||
pos += scnprintf(buf + pos, bufsz - pos, "sync_sco = %d\n",
|
pos += scnprintf(buf + pos, bufsz - pos, "sync_sco = %d\n",
|
||||||
IWL_MVM_BT_COEX_SYNC2SCO);
|
IWL_MVM_BT_COEX_SYNC2SCO);
|
||||||
|
@ -602,44 +516,20 @@ static ssize_t iwl_dbgfs_bt_cmd_read(struct file *file, char __user *user_buf,
|
||||||
size_t count, loff_t *ppos)
|
size_t count, loff_t *ppos)
|
||||||
{
|
{
|
||||||
struct iwl_mvm *mvm = file->private_data;
|
struct iwl_mvm *mvm = file->private_data;
|
||||||
|
struct iwl_bt_coex_ci_cmd *cmd = &mvm->last_bt_ci_cmd;
|
||||||
char buf[256];
|
char buf[256];
|
||||||
int bufsz = sizeof(buf);
|
int bufsz = sizeof(buf);
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
|
|
||||||
mutex_lock(&mvm->mutex);
|
mutex_lock(&mvm->mutex);
|
||||||
|
|
||||||
if (!fw_has_api(&mvm->fw->ucode_capa,
|
pos += scnprintf(buf + pos, bufsz - pos, "Channel inhibition CMD\n");
|
||||||
IWL_UCODE_TLV_API_BT_COEX_SPLIT)) {
|
pos += scnprintf(buf + pos, bufsz - pos,
|
||||||
struct iwl_bt_coex_ci_cmd_old *cmd = &mvm->last_bt_ci_cmd_old;
|
"\tPrimary Channel Bitmap 0x%016llx\n",
|
||||||
|
le64_to_cpu(cmd->bt_primary_ci));
|
||||||
pos += scnprintf(buf+pos, bufsz-pos,
|
pos += scnprintf(buf + pos, bufsz - pos,
|
||||||
"Channel inhibition CMD\n");
|
"\tSecondary Channel Bitmap 0x%016llx\n",
|
||||||
pos += scnprintf(buf+pos, bufsz-pos,
|
le64_to_cpu(cmd->bt_secondary_ci));
|
||||||
"\tPrimary Channel Bitmap 0x%016llx\n",
|
|
||||||
le64_to_cpu(cmd->bt_primary_ci));
|
|
||||||
pos += scnprintf(buf+pos, bufsz-pos,
|
|
||||||
"\tSecondary Channel Bitmap 0x%016llx\n",
|
|
||||||
le64_to_cpu(cmd->bt_secondary_ci));
|
|
||||||
|
|
||||||
pos += scnprintf(buf+pos, bufsz-pos,
|
|
||||||
"BT Configuration CMD - 0=default, 1=never, 2=always\n");
|
|
||||||
pos += scnprintf(buf+pos, bufsz-pos, "\tACK Kill msk idx %d\n",
|
|
||||||
mvm->bt_ack_kill_msk[0]);
|
|
||||||
pos += scnprintf(buf+pos, bufsz-pos, "\tCTS Kill msk idx %d\n",
|
|
||||||
mvm->bt_cts_kill_msk[0]);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
struct iwl_bt_coex_ci_cmd *cmd = &mvm->last_bt_ci_cmd;
|
|
||||||
|
|
||||||
pos += scnprintf(buf+pos, bufsz-pos,
|
|
||||||
"Channel inhibition CMD\n");
|
|
||||||
pos += scnprintf(buf+pos, bufsz-pos,
|
|
||||||
"\tPrimary Channel Bitmap 0x%016llx\n",
|
|
||||||
le64_to_cpu(cmd->bt_primary_ci));
|
|
||||||
pos += scnprintf(buf+pos, bufsz-pos,
|
|
||||||
"\tSecondary Channel Bitmap 0x%016llx\n",
|
|
||||||
le64_to_cpu(cmd->bt_secondary_ci));
|
|
||||||
}
|
|
||||||
|
|
||||||
mutex_unlock(&mvm->mutex);
|
mutex_unlock(&mvm->mutex);
|
||||||
|
|
||||||
|
|
|
@ -1470,22 +1470,6 @@ bool iwl_mvm_bt_coex_is_tpc_allowed(struct iwl_mvm *mvm,
|
||||||
u8 iwl_mvm_bt_coex_tx_prio(struct iwl_mvm *mvm, struct ieee80211_hdr *hdr,
|
u8 iwl_mvm_bt_coex_tx_prio(struct iwl_mvm *mvm, struct ieee80211_hdr *hdr,
|
||||||
struct ieee80211_tx_info *info, u8 ac);
|
struct ieee80211_tx_info *info, u8 ac);
|
||||||
|
|
||||||
bool iwl_mvm_bt_coex_is_shared_ant_avail_old(struct iwl_mvm *mvm);
|
|
||||||
void iwl_mvm_bt_coex_vif_change_old(struct iwl_mvm *mvm);
|
|
||||||
int iwl_send_bt_init_conf_old(struct iwl_mvm *mvm);
|
|
||||||
void iwl_mvm_rx_bt_coex_notif_old(struct iwl_mvm *mvm,
|
|
||||||
struct iwl_rx_cmd_buffer *rxb);
|
|
||||||
void iwl_mvm_bt_rssi_event_old(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
|
|
||||||
enum ieee80211_rssi_event_data);
|
|
||||||
u16 iwl_mvm_coex_agg_time_limit_old(struct iwl_mvm *mvm,
|
|
||||||
struct ieee80211_sta *sta);
|
|
||||||
bool iwl_mvm_bt_coex_is_mimo_allowed_old(struct iwl_mvm *mvm,
|
|
||||||
struct ieee80211_sta *sta);
|
|
||||||
bool iwl_mvm_bt_coex_is_tpc_allowed_old(struct iwl_mvm *mvm,
|
|
||||||
enum ieee80211_band band);
|
|
||||||
void iwl_mvm_rx_ant_coupling_notif_old(struct iwl_mvm *mvm,
|
|
||||||
struct iwl_rx_cmd_buffer *rxb);
|
|
||||||
|
|
||||||
/* beacon filtering */
|
/* beacon filtering */
|
||||||
#ifdef CONFIG_IWLWIFI_DEBUGFS
|
#ifdef CONFIG_IWLWIFI_DEBUGFS
|
||||||
void
|
void
|
||||||
|
|
|
@ -193,7 +193,7 @@ static void iwl_mvm_fill_sf_command(struct iwl_mvm *mvm,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sta || IWL_UCODE_API(mvm->fw->ucode_ver) < 13) {
|
if (sta) {
|
||||||
BUILD_BUG_ON(sizeof(sf_full_timeout) !=
|
BUILD_BUG_ON(sizeof(sf_full_timeout) !=
|
||||||
sizeof(__le32) * SF_NUM_SCENARIO *
|
sizeof(__le32) * SF_NUM_SCENARIO *
|
||||||
SF_NUM_TIMEOUT_TYPES);
|
SF_NUM_TIMEOUT_TYPES);
|
||||||
|
@ -220,9 +220,6 @@ static int iwl_mvm_sf_config(struct iwl_mvm *mvm, u8 sta_id,
|
||||||
struct ieee80211_sta *sta;
|
struct ieee80211_sta *sta;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (IWL_UCODE_API(mvm->fw->ucode_ver) < 13)
|
|
||||||
sf_cmd.state = cpu_to_le32(new_state);
|
|
||||||
|
|
||||||
if (mvm->cfg->disable_dummy_notification)
|
if (mvm->cfg->disable_dummy_notification)
|
||||||
sf_cmd.state |= cpu_to_le32(SF_CFG_DUMMY_NOTIF_OFF);
|
sf_cmd.state |= cpu_to_le32(SF_CFG_DUMMY_NOTIF_OFF);
|
||||||
|
|
||||||
|
@ -235,8 +232,7 @@ static int iwl_mvm_sf_config(struct iwl_mvm *mvm, u8 sta_id,
|
||||||
|
|
||||||
switch (new_state) {
|
switch (new_state) {
|
||||||
case SF_UNINIT:
|
case SF_UNINIT:
|
||||||
if (IWL_UCODE_API(mvm->fw->ucode_ver) >= 13)
|
iwl_mvm_fill_sf_command(mvm, &sf_cmd, NULL);
|
||||||
iwl_mvm_fill_sf_command(mvm, &sf_cmd, NULL);
|
|
||||||
break;
|
break;
|
||||||
case SF_FULL_ON:
|
case SF_FULL_ON:
|
||||||
if (sta_id == IWL_MVM_STATION_COUNT) {
|
if (sta_id == IWL_MVM_STATION_COUNT) {
|
||||||
|
|
|
@ -491,98 +491,12 @@ static void iwl_mvm_dump_umac_error_log(struct iwl_mvm *mvm)
|
||||||
IWL_ERR(mvm, "0x%08X | isr status reg\n", table.nic_isr_pref);
|
IWL_ERR(mvm, "0x%08X | isr status reg\n", table.nic_isr_pref);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void iwl_mvm_dump_nic_error_log_old(struct iwl_mvm *mvm)
|
|
||||||
{
|
|
||||||
struct iwl_trans *trans = mvm->trans;
|
|
||||||
struct iwl_error_event_table_v1 table;
|
|
||||||
u32 base;
|
|
||||||
|
|
||||||
base = mvm->error_event_table;
|
|
||||||
if (mvm->cur_ucode == IWL_UCODE_INIT) {
|
|
||||||
if (!base)
|
|
||||||
base = mvm->fw->init_errlog_ptr;
|
|
||||||
} else {
|
|
||||||
if (!base)
|
|
||||||
base = mvm->fw->inst_errlog_ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (base < 0x800000) {
|
|
||||||
IWL_ERR(mvm,
|
|
||||||
"Not valid error log pointer 0x%08X for %s uCode\n",
|
|
||||||
base,
|
|
||||||
(mvm->cur_ucode == IWL_UCODE_INIT)
|
|
||||||
? "Init" : "RT");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
iwl_trans_read_mem_bytes(trans, base, &table, sizeof(table));
|
|
||||||
|
|
||||||
if (ERROR_START_OFFSET <= table.valid * ERROR_ELEM_SIZE) {
|
|
||||||
IWL_ERR(trans, "Start IWL Error Log Dump:\n");
|
|
||||||
IWL_ERR(trans, "Status: 0x%08lX, count: %d\n",
|
|
||||||
mvm->status, table.valid);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Do not change this output - scripts rely on it */
|
|
||||||
|
|
||||||
IWL_ERR(mvm, "Loaded firmware version: %s\n", mvm->fw->fw_version);
|
|
||||||
|
|
||||||
trace_iwlwifi_dev_ucode_error(trans->dev, table.error_id, table.tsf_low,
|
|
||||||
table.data1, table.data2, table.data3,
|
|
||||||
table.blink2, table.ilink1, table.ilink2,
|
|
||||||
table.bcon_time, table.gp1, table.gp2,
|
|
||||||
table.gp3, table.ucode_ver, 0,
|
|
||||||
table.hw_ver, table.brd_ver);
|
|
||||||
IWL_ERR(mvm, "0x%08X | %-28s\n", table.error_id,
|
|
||||||
desc_lookup(table.error_id));
|
|
||||||
IWL_ERR(mvm, "0x%08X | uPc\n", table.pc);
|
|
||||||
IWL_ERR(mvm, "0x%08X | branchlink1\n", table.blink1);
|
|
||||||
IWL_ERR(mvm, "0x%08X | branchlink2\n", table.blink2);
|
|
||||||
IWL_ERR(mvm, "0x%08X | interruptlink1\n", table.ilink1);
|
|
||||||
IWL_ERR(mvm, "0x%08X | interruptlink2\n", table.ilink2);
|
|
||||||
IWL_ERR(mvm, "0x%08X | data1\n", table.data1);
|
|
||||||
IWL_ERR(mvm, "0x%08X | data2\n", table.data2);
|
|
||||||
IWL_ERR(mvm, "0x%08X | data3\n", table.data3);
|
|
||||||
IWL_ERR(mvm, "0x%08X | beacon time\n", table.bcon_time);
|
|
||||||
IWL_ERR(mvm, "0x%08X | tsf low\n", table.tsf_low);
|
|
||||||
IWL_ERR(mvm, "0x%08X | tsf hi\n", table.tsf_hi);
|
|
||||||
IWL_ERR(mvm, "0x%08X | time gp1\n", table.gp1);
|
|
||||||
IWL_ERR(mvm, "0x%08X | time gp2\n", table.gp2);
|
|
||||||
IWL_ERR(mvm, "0x%08X | time gp3\n", table.gp3);
|
|
||||||
IWL_ERR(mvm, "0x%08X | uCode version\n", table.ucode_ver);
|
|
||||||
IWL_ERR(mvm, "0x%08X | hw version\n", table.hw_ver);
|
|
||||||
IWL_ERR(mvm, "0x%08X | board version\n", table.brd_ver);
|
|
||||||
IWL_ERR(mvm, "0x%08X | hcmd\n", table.hcmd);
|
|
||||||
IWL_ERR(mvm, "0x%08X | isr0\n", table.isr0);
|
|
||||||
IWL_ERR(mvm, "0x%08X | isr1\n", table.isr1);
|
|
||||||
IWL_ERR(mvm, "0x%08X | isr2\n", table.isr2);
|
|
||||||
IWL_ERR(mvm, "0x%08X | isr3\n", table.isr3);
|
|
||||||
IWL_ERR(mvm, "0x%08X | isr4\n", table.isr4);
|
|
||||||
IWL_ERR(mvm, "0x%08X | isr_pref\n", table.isr_pref);
|
|
||||||
IWL_ERR(mvm, "0x%08X | wait_event\n", table.wait_event);
|
|
||||||
IWL_ERR(mvm, "0x%08X | l2p_control\n", table.l2p_control);
|
|
||||||
IWL_ERR(mvm, "0x%08X | l2p_duration\n", table.l2p_duration);
|
|
||||||
IWL_ERR(mvm, "0x%08X | l2p_mhvalid\n", table.l2p_mhvalid);
|
|
||||||
IWL_ERR(mvm, "0x%08X | l2p_addr_match\n", table.l2p_addr_match);
|
|
||||||
IWL_ERR(mvm, "0x%08X | lmpm_pmg_sel\n", table.lmpm_pmg_sel);
|
|
||||||
IWL_ERR(mvm, "0x%08X | timestamp\n", table.u_timestamp);
|
|
||||||
IWL_ERR(mvm, "0x%08X | flow_handler\n", table.flow_handler);
|
|
||||||
|
|
||||||
if (mvm->support_umac_log)
|
|
||||||
iwl_mvm_dump_umac_error_log(mvm);
|
|
||||||
}
|
|
||||||
|
|
||||||
void iwl_mvm_dump_nic_error_log(struct iwl_mvm *mvm)
|
void iwl_mvm_dump_nic_error_log(struct iwl_mvm *mvm)
|
||||||
{
|
{
|
||||||
struct iwl_trans *trans = mvm->trans;
|
struct iwl_trans *trans = mvm->trans;
|
||||||
struct iwl_error_event_table table;
|
struct iwl_error_event_table table;
|
||||||
u32 base;
|
u32 base;
|
||||||
|
|
||||||
if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_NEW_VERSION)) {
|
|
||||||
iwl_mvm_dump_nic_error_log_old(mvm);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
base = mvm->error_event_table;
|
base = mvm->error_event_table;
|
||||||
if (mvm->cur_ucode == IWL_UCODE_INIT) {
|
if (mvm->cur_ucode == IWL_UCODE_INIT) {
|
||||||
if (!base)
|
if (!base)
|
||||||
|
|
Loading…
Reference in New Issue