aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/mvm
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2015-06-01 11:11:11 -0400
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2015-06-03 02:45:37 -0400
commit859d914c8f5ca5b3c9274ad69c4c942954f67cda (patch)
tree376a935fd0d9488ca033ba11961da1ab9623dfe0 /drivers/net/wireless/iwlwifi/mvm
parentebf17ff9bb46206ca7a4bc7260bff52f593c25db (diff)
iwlwifi: prepare for higher API/CAPA bits
Currently, loading the firmware fails when it has higher API or CAPA bits than the driver supports. That's an issue with integration. At the same time, actually using api[0] and capa[0] will become confusing when we also have api[1] and capa[1], and it's almost certain that we'll mix up the bits and use the bits for api[1] with api[0] by accident. Avoid all this by translating the API/CAPA bits to the regular kernel test_bit() format, and also providing wrapper functions. Also use the __bitwise__ facility of sparse to check that we're testing the right one. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/mvm')
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/coex.c22
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/debugfs.c9
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/fw.c4
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c47
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mvm.h21
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/nvm.c8
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/rs.c10
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/rx.c4
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/scan.c33
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/tx.c4
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/utils.c2
11 files changed, 89 insertions, 75 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/coex.c b/drivers/net/wireless/iwlwifi/mvm/coex.c
index 662fa9c09624..b4737e296c92 100644
--- a/drivers/net/wireless/iwlwifi/mvm/coex.c
+++ b/drivers/net/wireless/iwlwifi/mvm/coex.c
@@ -411,7 +411,7 @@ int iwl_send_bt_init_conf(struct iwl_mvm *mvm)
411 struct iwl_bt_coex_cmd bt_cmd = {}; 411 struct iwl_bt_coex_cmd bt_cmd = {};
412 u32 mode; 412 u32 mode;
413 413
414 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT)) 414 if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_BT_COEX_SPLIT))
415 return iwl_send_bt_init_conf_old(mvm); 415 return iwl_send_bt_init_conf_old(mvm);
416 416
417 lockdep_assert_held(&mvm->mutex); 417 lockdep_assert_held(&mvm->mutex);
@@ -732,7 +732,7 @@ int iwl_mvm_rx_bt_coex_notif(struct iwl_mvm *mvm,
732 struct iwl_rx_packet *pkt = rxb_addr(rxb); 732 struct iwl_rx_packet *pkt = rxb_addr(rxb);
733 struct iwl_bt_coex_profile_notif *notif = (void *)pkt->data; 733 struct iwl_bt_coex_profile_notif *notif = (void *)pkt->data;
734 734
735 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT)) 735 if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_BT_COEX_SPLIT))
736 return iwl_mvm_rx_bt_coex_notif_old(mvm, rxb, dev_cmd); 736 return iwl_mvm_rx_bt_coex_notif_old(mvm, rxb, dev_cmd);
737 737
738 IWL_DEBUG_COEX(mvm, "BT Coex Notification received\n"); 738 IWL_DEBUG_COEX(mvm, "BT Coex Notification received\n");
@@ -762,7 +762,8 @@ void iwl_mvm_bt_rssi_event(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
762 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); 762 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
763 int ret; 763 int ret;
764 764
765 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT)) { 765 if (!fw_has_api(&mvm->fw->ucode_capa,
766 IWL_UCODE_TLV_API_BT_COEX_SPLIT)) {
766 iwl_mvm_bt_rssi_event_old(mvm, vif, rssi_event); 767 iwl_mvm_bt_rssi_event_old(mvm, vif, rssi_event);
767 return; 768 return;
768 } 769 }
@@ -813,7 +814,7 @@ u16 iwl_mvm_coex_agg_time_limit(struct iwl_mvm *mvm,
813 struct iwl_mvm_phy_ctxt *phy_ctxt = mvmvif->phy_ctxt; 814 struct iwl_mvm_phy_ctxt *phy_ctxt = mvmvif->phy_ctxt;
814 enum iwl_bt_coex_lut_type lut_type; 815 enum iwl_bt_coex_lut_type lut_type;
815 816
816 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT)) 817 if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_BT_COEX_SPLIT))
817 return iwl_mvm_coex_agg_time_limit_old(mvm, sta); 818 return iwl_mvm_coex_agg_time_limit_old(mvm, sta);
818 819
819 if (IWL_COEX_IS_TTC_ON(mvm->last_bt_notif.ttc_rrc_status, phy_ctxt->id)) 820 if (IWL_COEX_IS_TTC_ON(mvm->last_bt_notif.ttc_rrc_status, phy_ctxt->id))
@@ -840,7 +841,7 @@ bool iwl_mvm_bt_coex_is_mimo_allowed(struct iwl_mvm *mvm,
840 struct iwl_mvm_phy_ctxt *phy_ctxt = mvmvif->phy_ctxt; 841 struct iwl_mvm_phy_ctxt *phy_ctxt = mvmvif->phy_ctxt;
841 enum iwl_bt_coex_lut_type lut_type; 842 enum iwl_bt_coex_lut_type lut_type;
842 843
843 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT)) 844 if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_BT_COEX_SPLIT))
844 return iwl_mvm_bt_coex_is_mimo_allowed_old(mvm, sta); 845 return iwl_mvm_bt_coex_is_mimo_allowed_old(mvm, sta);
845 846
846 if (IWL_COEX_IS_TTC_ON(mvm->last_bt_notif.ttc_rrc_status, phy_ctxt->id)) 847 if (IWL_COEX_IS_TTC_ON(mvm->last_bt_notif.ttc_rrc_status, phy_ctxt->id))
@@ -870,7 +871,7 @@ bool iwl_mvm_bt_coex_is_ant_avail(struct iwl_mvm *mvm, u8 ant)
870 if (ant & mvm->cfg->non_shared_ant) 871 if (ant & mvm->cfg->non_shared_ant)
871 return true; 872 return true;
872 873
873 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT)) 874 if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_BT_COEX_SPLIT))
874 return iwl_mvm_bt_coex_is_shared_ant_avail_old(mvm); 875 return iwl_mvm_bt_coex_is_shared_ant_avail_old(mvm);
875 876
876 return le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) < 877 return le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) <
@@ -883,7 +884,7 @@ bool iwl_mvm_bt_coex_is_shared_ant_avail(struct iwl_mvm *mvm)
883 if (mvm->cfg->bt_shared_single_ant) 884 if (mvm->cfg->bt_shared_single_ant)
884 return true; 885 return true;
885 886
886 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT)) 887 if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_BT_COEX_SPLIT))
887 return iwl_mvm_bt_coex_is_shared_ant_avail_old(mvm); 888 return iwl_mvm_bt_coex_is_shared_ant_avail_old(mvm);
888 889
889 return le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) < BT_HIGH_TRAFFIC; 890 return le32_to_cpu(mvm->last_bt_notif.bt_activity_grading) < BT_HIGH_TRAFFIC;
@@ -894,7 +895,7 @@ bool iwl_mvm_bt_coex_is_tpc_allowed(struct iwl_mvm *mvm,
894{ 895{
895 u32 bt_activity = le32_to_cpu(mvm->last_bt_notif.bt_activity_grading); 896 u32 bt_activity = le32_to_cpu(mvm->last_bt_notif.bt_activity_grading);
896 897
897 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT)) 898 if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_BT_COEX_SPLIT))
898 return iwl_mvm_bt_coex_is_tpc_allowed_old(mvm, band); 899 return iwl_mvm_bt_coex_is_tpc_allowed_old(mvm, band);
899 900
900 if (band != IEEE80211_BAND_2GHZ) 901 if (band != IEEE80211_BAND_2GHZ)
@@ -937,7 +938,8 @@ u8 iwl_mvm_bt_coex_tx_prio(struct iwl_mvm *mvm, struct ieee80211_hdr *hdr,
937 938
938void iwl_mvm_bt_coex_vif_change(struct iwl_mvm *mvm) 939void iwl_mvm_bt_coex_vif_change(struct iwl_mvm *mvm)
939{ 940{
940 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT)) { 941 if (!fw_has_api(&mvm->fw->ucode_capa,
942 IWL_UCODE_TLV_API_BT_COEX_SPLIT)) {
941 iwl_mvm_bt_coex_vif_change_old(mvm); 943 iwl_mvm_bt_coex_vif_change_old(mvm);
942 return; 944 return;
943 } 945 }
@@ -955,7 +957,7 @@ int iwl_mvm_rx_ant_coupling_notif(struct iwl_mvm *mvm,
955 u8 __maybe_unused lower_bound, upper_bound; 957 u8 __maybe_unused lower_bound, upper_bound;
956 u8 lut; 958 u8 lut;
957 959
958 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT)) 960 if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_BT_COEX_SPLIT))
959 return iwl_mvm_rx_ant_coupling_notif_old(mvm, rxb, dev_cmd); 961 return iwl_mvm_rx_ant_coupling_notif_old(mvm, rxb, dev_cmd);
960 962
961 if (!iwl_mvm_bt_is_plcr_supported(mvm)) 963 if (!iwl_mvm_bt_is_plcr_supported(mvm))
diff --git a/drivers/net/wireless/iwlwifi/mvm/debugfs.c b/drivers/net/wireless/iwlwifi/mvm/debugfs.c
index 8c17b943cc6f..ffb4b5cef275 100644
--- a/drivers/net/wireless/iwlwifi/mvm/debugfs.c
+++ b/drivers/net/wireless/iwlwifi/mvm/debugfs.c
@@ -493,7 +493,8 @@ static ssize_t iwl_dbgfs_bt_notif_read(struct file *file, char __user *user_buf,
493 493
494 mutex_lock(&mvm->mutex); 494 mutex_lock(&mvm->mutex);
495 495
496 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT)) { 496 if (!fw_has_api(&mvm->fw->ucode_capa,
497 IWL_UCODE_TLV_API_BT_COEX_SPLIT)) {
497 struct iwl_bt_coex_profile_notif_old *notif = 498 struct iwl_bt_coex_profile_notif_old *notif =
498 &mvm->last_bt_notif_old; 499 &mvm->last_bt_notif_old;
499 500
@@ -550,7 +551,8 @@ static ssize_t iwl_dbgfs_bt_cmd_read(struct file *file, char __user *user_buf,
550 551
551 mutex_lock(&mvm->mutex); 552 mutex_lock(&mvm->mutex);
552 553
553 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BT_COEX_SPLIT)) { 554 if (!fw_has_api(&mvm->fw->ucode_capa,
555 IWL_UCODE_TLV_API_BT_COEX_SPLIT)) {
554 struct iwl_bt_coex_ci_cmd_old *cmd = &mvm->last_bt_ci_cmd_old; 556 struct iwl_bt_coex_ci_cmd_old *cmd = &mvm->last_bt_ci_cmd_old;
555 557
556 pos += scnprintf(buf+pos, bufsz-pos, 558 pos += scnprintf(buf+pos, bufsz-pos,
@@ -916,7 +918,8 @@ iwl_dbgfs_scan_ant_rxchain_write(struct iwl_mvm *mvm, char *buf,
916 918
917 if (mvm->scan_rx_ant != scan_rx_ant) { 919 if (mvm->scan_rx_ant != scan_rx_ant) {
918 mvm->scan_rx_ant = scan_rx_ant; 920 mvm->scan_rx_ant = scan_rx_ant;
919 if (mvm->fw->ucode_capa.capa[0] & IWL_UCODE_TLV_CAPA_UMAC_SCAN) 921 if (fw_has_capa(&mvm->fw->ucode_capa,
922 IWL_UCODE_TLV_CAPA_UMAC_SCAN))
920 iwl_mvm_config_scan(mvm); 923 iwl_mvm_config_scan(mvm);
921 } 924 }
922 925
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw.c b/drivers/net/wireless/iwlwifi/mvm/fw.c
index 2f76fb23249a..eb10c5ee4a14 100644
--- a/drivers/net/wireless/iwlwifi/mvm/fw.c
+++ b/drivers/net/wireless/iwlwifi/mvm/fw.c
@@ -623,7 +623,7 @@ static int iwl_mvm_config_ltr(struct iwl_mvm *mvm)
623 if (!mvm->trans->ltr_enabled) 623 if (!mvm->trans->ltr_enabled)
624 return 0; 624 return 0;
625 625
626 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_HDC_PHASE_0)) 626 if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_HDC_PHASE_0))
627 return iwl_mvm_config_ltr_v1(mvm); 627 return iwl_mvm_config_ltr_v1(mvm);
628 628
629 return iwl_mvm_send_cmd_pdu(mvm, LTR_CONFIG, 0, 629 return iwl_mvm_send_cmd_pdu(mvm, LTR_CONFIG, 0,
@@ -754,7 +754,7 @@ int iwl_mvm_up(struct iwl_mvm *mvm)
754 goto error; 754 goto error;
755 } 755 }
756 756
757 if (mvm->fw->ucode_capa.capa[0] & IWL_UCODE_TLV_CAPA_UMAC_SCAN) { 757 if (fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_UMAC_SCAN)) {
758 ret = iwl_mvm_config_scan(mvm); 758 ret = iwl_mvm_config_scan(mvm);
759 if (ret) 759 if (ret)
760 goto error; 760 goto error;
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
index 57d75d14fc80..c46c69f2440f 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
@@ -515,7 +515,7 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
515 BUILD_BUG_ON(IWL_MVM_MAX_UMAC_SCANS > HWEIGHT32(IWL_MVM_SCAN_MASK) || 515 BUILD_BUG_ON(IWL_MVM_MAX_UMAC_SCANS > HWEIGHT32(IWL_MVM_SCAN_MASK) ||
516 IWL_MVM_MAX_LMAC_SCANS > HWEIGHT32(IWL_MVM_SCAN_MASK)); 516 IWL_MVM_MAX_LMAC_SCANS > HWEIGHT32(IWL_MVM_SCAN_MASK));
517 517
518 if (mvm->fw->ucode_capa.capa[0] & IWL_UCODE_TLV_CAPA_UMAC_SCAN) 518 if (fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_UMAC_SCAN))
519 mvm->max_scans = IWL_MVM_MAX_UMAC_SCANS; 519 mvm->max_scans = IWL_MVM_MAX_UMAC_SCANS;
520 else 520 else
521 mvm->max_scans = IWL_MVM_MAX_LMAC_SCANS; 521 mvm->max_scans = IWL_MVM_MAX_LMAC_SCANS;
@@ -527,10 +527,10 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
527 hw->wiphy->bands[IEEE80211_BAND_5GHZ] = 527 hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
528 &mvm->nvm_data->bands[IEEE80211_BAND_5GHZ]; 528 &mvm->nvm_data->bands[IEEE80211_BAND_5GHZ];
529 529
530 if ((mvm->fw->ucode_capa.capa[0] & 530 if (fw_has_capa(&mvm->fw->ucode_capa,
531 IWL_UCODE_TLV_CAPA_BEAMFORMER) && 531 IWL_UCODE_TLV_CAPA_BEAMFORMER) &&
532 (mvm->fw->ucode_capa.api[0] & 532 fw_has_api(&mvm->fw->ucode_capa,
533 IWL_UCODE_TLV_API_LQ_SS_PARAMS)) 533 IWL_UCODE_TLV_API_LQ_SS_PARAMS))
534 hw->wiphy->bands[IEEE80211_BAND_5GHZ]->vht_cap.cap |= 534 hw->wiphy->bands[IEEE80211_BAND_5GHZ]->vht_cap.cap |=
535 IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE; 535 IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE;
536 } 536 }
@@ -556,20 +556,20 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
556 NL80211_FEATURE_STATIC_SMPS | 556 NL80211_FEATURE_STATIC_SMPS |
557 NL80211_FEATURE_SUPPORTS_WMM_ADMISSION; 557 NL80211_FEATURE_SUPPORTS_WMM_ADMISSION;
558 558
559 if (mvm->fw->ucode_capa.capa[0] & 559 if (fw_has_capa(&mvm->fw->ucode_capa,
560 IWL_UCODE_TLV_CAPA_TXPOWER_INSERTION_SUPPORT) 560 IWL_UCODE_TLV_CAPA_TXPOWER_INSERTION_SUPPORT))
561 hw->wiphy->features |= NL80211_FEATURE_TX_POWER_INSERTION; 561 hw->wiphy->features |= NL80211_FEATURE_TX_POWER_INSERTION;
562 if (mvm->fw->ucode_capa.capa[0] & 562 if (fw_has_capa(&mvm->fw->ucode_capa,
563 IWL_UCODE_TLV_CAPA_QUIET_PERIOD_SUPPORT) 563 IWL_UCODE_TLV_CAPA_QUIET_PERIOD_SUPPORT))
564 hw->wiphy->features |= NL80211_FEATURE_QUIET; 564 hw->wiphy->features |= NL80211_FEATURE_QUIET;
565 565
566 if (mvm->fw->ucode_capa.capa[0] & 566 if (fw_has_capa(&mvm->fw->ucode_capa,
567 IWL_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT) 567 IWL_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT))
568 hw->wiphy->features |= 568 hw->wiphy->features |=
569 NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES; 569 NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES;
570 570
571 if (mvm->fw->ucode_capa.capa[0] & 571 if (fw_has_capa(&mvm->fw->ucode_capa,
572 IWL_UCODE_TLV_CAPA_WFA_TPC_REP_IE_SUPPORT) 572 IWL_UCODE_TLV_CAPA_WFA_TPC_REP_IE_SUPPORT))
573 hw->wiphy->features |= NL80211_FEATURE_WFA_TPC_IE_IN_PROBES; 573 hw->wiphy->features |= NL80211_FEATURE_WFA_TPC_IE_IN_PROBES;
574 574
575 mvm->rts_threshold = IEEE80211_MAX_RTS_THRESHOLD; 575 mvm->rts_threshold = IEEE80211_MAX_RTS_THRESHOLD;
@@ -619,13 +619,14 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
619 if (ret) 619 if (ret)
620 return ret; 620 return ret;
621 621
622 if (mvm->fw->ucode_capa.capa[0] & IWL_UCODE_TLV_CAPA_TDLS_SUPPORT) { 622 if (fw_has_capa(&mvm->fw->ucode_capa,
623 IWL_UCODE_TLV_CAPA_TDLS_SUPPORT)) {
623 IWL_DEBUG_TDLS(mvm, "TDLS supported\n"); 624 IWL_DEBUG_TDLS(mvm, "TDLS supported\n");
624 hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS; 625 hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS;
625 } 626 }
626 627
627 if (mvm->fw->ucode_capa.capa[0] & 628 if (fw_has_capa(&mvm->fw->ucode_capa,
628 IWL_UCODE_TLV_CAPA_TDLS_CHANNEL_SWITCH) { 629 IWL_UCODE_TLV_CAPA_TDLS_CHANNEL_SWITCH)) {
629 IWL_DEBUG_TDLS(mvm, "TDLS channel switch supported\n"); 630 IWL_DEBUG_TDLS(mvm, "TDLS channel switch supported\n");
630 hw->wiphy->features |= NL80211_FEATURE_TDLS_CHANNEL_SWITCH; 631 hw->wiphy->features |= NL80211_FEATURE_TDLS_CHANNEL_SWITCH;
631 } 632 }
@@ -1500,7 +1501,7 @@ void __iwl_mvm_mac_stop(struct iwl_mvm *mvm)
1500 /* We shouldn't have any UIDs still set. Loop over all the UIDs to 1501 /* We shouldn't have any UIDs still set. Loop over all the UIDs to
1501 * make sure there's nothing left there and warn if any is found. 1502 * make sure there's nothing left there and warn if any is found.
1502 */ 1503 */
1503 if (mvm->fw->ucode_capa.capa[0] & IWL_UCODE_TLV_CAPA_UMAC_SCAN) { 1504 if (fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_UMAC_SCAN)) {
1504 int i; 1505 int i;
1505 1506
1506 for (i = 0; i < mvm->max_scans; i++) { 1507 for (i = 0; i < mvm->max_scans; i++) {
@@ -1572,7 +1573,7 @@ static int iwl_mvm_set_tx_power(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
1572 .pwr_restriction = cpu_to_le16(8 * tx_power), 1573 .pwr_restriction = cpu_to_le16(8 * tx_power),
1573 }; 1574 };
1574 1575
1575 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_TX_POWER_DEV)) 1576 if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_TX_POWER_DEV))
1576 return iwl_mvm_set_tx_power_old(mvm, vif, tx_power); 1577 return iwl_mvm_set_tx_power_old(mvm, vif, tx_power);
1577 1578
1578 if (tx_power == IWL_DEFAULT_MAX_TX_POWER) 1579 if (tx_power == IWL_DEFAULT_MAX_TX_POWER)
@@ -3102,8 +3103,8 @@ static int iwl_mvm_roc(struct ieee80211_hw *hw,
3102 3103
3103 switch (vif->type) { 3104 switch (vif->type) {
3104 case NL80211_IFTYPE_STATION: 3105 case NL80211_IFTYPE_STATION:
3105 if (mvm->fw->ucode_capa.capa[0] & 3106 if (fw_has_capa(&mvm->fw->ucode_capa,
3106 IWL_UCODE_TLV_CAPA_HOTSPOT_SUPPORT) { 3107 IWL_UCODE_TLV_CAPA_HOTSPOT_SUPPORT)) {
3107 /* Use aux roc framework (HS20) */ 3108 /* Use aux roc framework (HS20) */
3108 ret = iwl_mvm_send_aux_roc_cmd(mvm, channel, 3109 ret = iwl_mvm_send_aux_roc_cmd(mvm, channel,
3109 vif, duration); 3110 vif, duration);
@@ -3895,7 +3896,7 @@ static int iwl_mvm_mac_get_survey(struct ieee80211_hw *hw, int idx,
3895 if (idx != 0) 3896 if (idx != 0)
3896 return -ENOENT; 3897 return -ENOENT;
3897 3898
3898 if (!(mvm->fw->ucode_capa.capa[0] & 3899 if (fw_has_capa(&mvm->fw->ucode_capa,
3899 IWL_UCODE_TLV_CAPA_RADIO_BEACON_STATS)) 3900 IWL_UCODE_TLV_CAPA_RADIO_BEACON_STATS))
3900 return -ENOENT; 3901 return -ENOENT;
3901 3902
@@ -3942,8 +3943,8 @@ static void iwl_mvm_mac_sta_statistics(struct ieee80211_hw *hw,
3942 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); 3943 struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
3943 struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta); 3944 struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
3944 3945
3945 if (!(mvm->fw->ucode_capa.capa[0] & 3946 if (fw_has_capa(&mvm->fw->ucode_capa,
3946 IWL_UCODE_TLV_CAPA_RADIO_BEACON_STATS)) 3947 IWL_UCODE_TLV_CAPA_RADIO_BEACON_STATS))
3947 return; 3948 return;
3948 3949
3949 /* if beacon filtering isn't on mac80211 does it anyway */ 3950 /* if beacon filtering isn't on mac80211 does it anyway */
diff --git a/drivers/net/wireless/iwlwifi/mvm/mvm.h b/drivers/net/wireless/iwlwifi/mvm/mvm.h
index 0173ad15ed46..255cde41d8b0 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mvm.h
+++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h
@@ -889,14 +889,15 @@ static inline bool iwl_mvm_is_d0i3_supported(struct iwl_mvm *mvm)
889 return mvm->trans->cfg->d0i3 && 889 return mvm->trans->cfg->d0i3 &&
890 mvm->trans->d0i3_mode != IWL_D0I3_MODE_OFF && 890 mvm->trans->d0i3_mode != IWL_D0I3_MODE_OFF &&
891 !iwlwifi_mod_params.d0i3_disable && 891 !iwlwifi_mod_params.d0i3_disable &&
892 (mvm->fw->ucode_capa.capa[0] & IWL_UCODE_TLV_CAPA_D0I3_SUPPORT); 892 fw_has_capa(&mvm->fw->ucode_capa,
893 IWL_UCODE_TLV_CAPA_D0I3_SUPPORT);
893} 894}
894 895
895static inline bool iwl_mvm_is_lar_supported(struct iwl_mvm *mvm) 896static inline bool iwl_mvm_is_lar_supported(struct iwl_mvm *mvm)
896{ 897{
897 bool nvm_lar = mvm->nvm_data->lar_enabled; 898 bool nvm_lar = mvm->nvm_data->lar_enabled;
898 bool tlv_lar = mvm->fw->ucode_capa.capa[0] & 899 bool tlv_lar = fw_has_capa(&mvm->fw->ucode_capa,
899 IWL_UCODE_TLV_CAPA_LAR_SUPPORT; 900 IWL_UCODE_TLV_CAPA_LAR_SUPPORT);
900 901
901 if (iwlwifi_mod_params.lar_disable) 902 if (iwlwifi_mod_params.lar_disable)
902 return false; 903 return false;
@@ -913,24 +914,28 @@ static inline bool iwl_mvm_is_lar_supported(struct iwl_mvm *mvm)
913 914
914static inline bool iwl_mvm_is_wifi_mcc_supported(struct iwl_mvm *mvm) 915static inline bool iwl_mvm_is_wifi_mcc_supported(struct iwl_mvm *mvm)
915{ 916{
916 return mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_WIFI_MCC_UPDATE || 917 return fw_has_api(&mvm->fw->ucode_capa,
917 mvm->fw->ucode_capa.capa[0] & IWL_UCODE_TLV_CAPA_LAR_MULTI_MCC; 918 IWL_UCODE_TLV_API_WIFI_MCC_UPDATE) ||
919 fw_has_capa(&mvm->fw->ucode_capa,
920 IWL_UCODE_TLV_CAPA_LAR_MULTI_MCC);
918} 921}
919 922
920static inline bool iwl_mvm_is_scd_cfg_supported(struct iwl_mvm *mvm) 923static inline bool iwl_mvm_is_scd_cfg_supported(struct iwl_mvm *mvm)
921{ 924{
922 return mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_SCD_CFG; 925 return fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_SCD_CFG);
923} 926}
924 927
925static inline bool iwl_mvm_bt_is_plcr_supported(struct iwl_mvm *mvm) 928static inline bool iwl_mvm_bt_is_plcr_supported(struct iwl_mvm *mvm)
926{ 929{
927 return (mvm->fw->ucode_capa.capa[0] & IWL_UCODE_TLV_CAPA_BT_COEX_PLCR) && 930 return fw_has_capa(&mvm->fw->ucode_capa,
931 IWL_UCODE_TLV_CAPA_BT_COEX_PLCR) &&
928 IWL_MVM_BT_COEX_CORUNNING; 932 IWL_MVM_BT_COEX_CORUNNING;
929} 933}
930 934
931static inline bool iwl_mvm_bt_is_rrc_supported(struct iwl_mvm *mvm) 935static inline bool iwl_mvm_bt_is_rrc_supported(struct iwl_mvm *mvm)
932{ 936{
933 return (mvm->fw->ucode_capa.capa[0] & IWL_UCODE_TLV_CAPA_BT_COEX_RRC) && 937 return fw_has_capa(&mvm->fw->ucode_capa,
938 IWL_UCODE_TLV_CAPA_BT_COEX_RRC) &&
934 IWL_MVM_BT_COEX_RRC; 939 IWL_MVM_BT_COEX_RRC;
935} 940}
936 941
diff --git a/drivers/net/wireless/iwlwifi/mvm/nvm.c b/drivers/net/wireless/iwlwifi/mvm/nvm.c
index 47014241bc3c..2a6be350704a 100644
--- a/drivers/net/wireless/iwlwifi/mvm/nvm.c
+++ b/drivers/net/wireless/iwlwifi/mvm/nvm.c
@@ -316,8 +316,8 @@ iwl_parse_nvm_sections(struct iwl_mvm *mvm)
316 phy_sku = (const __le16 *)sections[NVM_SECTION_TYPE_PHY_SKU].data; 316 phy_sku = (const __le16 *)sections[NVM_SECTION_TYPE_PHY_SKU].data;
317 317
318 lar_enabled = !iwlwifi_mod_params.lar_disable && 318 lar_enabled = !iwlwifi_mod_params.lar_disable &&
319 (mvm->fw->ucode_capa.capa[0] & 319 fw_has_capa(&mvm->fw->ucode_capa,
320 IWL_UCODE_TLV_CAPA_LAR_SUPPORT); 320 IWL_UCODE_TLV_CAPA_LAR_SUPPORT);
321 321
322 return iwl_parse_nvm_data(mvm->trans->dev, mvm->cfg, hw, sw, calib, 322 return iwl_parse_nvm_data(mvm->trans->dev, mvm->cfg, hw, sw, calib,
323 regulatory, mac_override, phy_sku, 323 regulatory, mac_override, phy_sku,
@@ -792,8 +792,8 @@ int iwl_mvm_init_mcc(struct iwl_mvm *mvm)
792 char mcc[3]; 792 char mcc[3];
793 793
794 if (mvm->cfg->device_family == IWL_DEVICE_FAMILY_8000) { 794 if (mvm->cfg->device_family == IWL_DEVICE_FAMILY_8000) {
795 tlv_lar = mvm->fw->ucode_capa.capa[0] & 795 tlv_lar = fw_has_capa(&mvm->fw->ucode_capa,
796 IWL_UCODE_TLV_CAPA_LAR_SUPPORT; 796 IWL_UCODE_TLV_CAPA_LAR_SUPPORT);
797 nvm_lar = mvm->nvm_data->lar_enabled; 797 nvm_lar = mvm->nvm_data->lar_enabled;
798 if (tlv_lar != nvm_lar) 798 if (tlv_lar != nvm_lar)
799 IWL_INFO(mvm, 799 IWL_INFO(mvm,
diff --git a/drivers/net/wireless/iwlwifi/mvm/rs.c b/drivers/net/wireless/iwlwifi/mvm/rs.c
index ae9965647771..daff1d0a8e4a 100644
--- a/drivers/net/wireless/iwlwifi/mvm/rs.c
+++ b/drivers/net/wireless/iwlwifi/mvm/rs.c
@@ -1127,8 +1127,8 @@ void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
1127 u32 tx_resp_hwrate = (uintptr_t)info->status.status_driver_data[1]; 1127 u32 tx_resp_hwrate = (uintptr_t)info->status.status_driver_data[1];
1128 struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta); 1128 struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
1129 struct iwl_lq_sta *lq_sta = &mvmsta->lq_sta; 1129 struct iwl_lq_sta *lq_sta = &mvmsta->lq_sta;
1130 bool allow_ant_mismatch = mvm->fw->ucode_capa.api[0] & 1130 bool allow_ant_mismatch = fw_has_api(&mvm->fw->ucode_capa,
1131 IWL_UCODE_TLV_API_LQ_SS_PARAMS; 1131 IWL_UCODE_TLV_API_LQ_SS_PARAMS);
1132 1132
1133 /* Treat uninitialized rate scaling data same as non-existing. */ 1133 /* Treat uninitialized rate scaling data same as non-existing. */
1134 if (!lq_sta) { 1134 if (!lq_sta) {
@@ -2714,7 +2714,7 @@ static void rs_vht_init(struct iwl_mvm *mvm,
2714 (vht_cap->cap & IEEE80211_VHT_CAP_RXSTBC_MASK)) 2714 (vht_cap->cap & IEEE80211_VHT_CAP_RXSTBC_MASK))
2715 lq_sta->stbc_capable = true; 2715 lq_sta->stbc_capable = true;
2716 2716
2717 if ((mvm->fw->ucode_capa.capa[0] & IWL_UCODE_TLV_CAPA_BEAMFORMER) && 2717 if (fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_BEAMFORMER) &&
2718 (num_of_ant(iwl_mvm_get_valid_tx_ant(mvm)) > 1) && 2718 (num_of_ant(iwl_mvm_get_valid_tx_ant(mvm)) > 1) &&
2719 (vht_cap->cap & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE)) 2719 (vht_cap->cap & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE))
2720 lq_sta->bfer_capable = true; 2720 lq_sta->bfer_capable = true;
@@ -2998,7 +2998,7 @@ static void rs_build_rates_table(struct iwl_mvm *mvm,
2998 valid_tx_ant = iwl_mvm_get_valid_tx_ant(mvm); 2998 valid_tx_ant = iwl_mvm_get_valid_tx_ant(mvm);
2999 2999
3000 /* TODO: remove old API when min FW API hits 14 */ 3000 /* TODO: remove old API when min FW API hits 14 */
3001 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_LQ_SS_PARAMS) && 3001 if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_LQ_SS_PARAMS) &&
3002 rs_stbc_allow(mvm, sta, lq_sta)) 3002 rs_stbc_allow(mvm, sta, lq_sta))
3003 rate.stbc = true; 3003 rate.stbc = true;
3004 3004
@@ -3212,7 +3212,7 @@ static void rs_fill_lq_cmd(struct iwl_mvm *mvm,
3212 3212
3213 rs_build_rates_table(mvm, sta, lq_sta, initial_rate); 3213 rs_build_rates_table(mvm, sta, lq_sta, initial_rate);
3214 3214
3215 if (mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_LQ_SS_PARAMS) 3215 if (fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_LQ_SS_PARAMS))
3216 rs_set_lq_ss_params(mvm, sta, lq_sta, initial_rate); 3216 rs_set_lq_ss_params(mvm, sta, lq_sta, initial_rate);
3217 3217
3218 mvmsta = iwl_mvm_sta_from_mac80211(sta); 3218 mvmsta = iwl_mvm_sta_from_mac80211(sta);
diff --git a/drivers/net/wireless/iwlwifi/mvm/rx.c b/drivers/net/wireless/iwlwifi/mvm/rx.c
index d6314ddf57b5..8f1d93b7a13a 100644
--- a/drivers/net/wireless/iwlwifi/mvm/rx.c
+++ b/drivers/net/wireless/iwlwifi/mvm/rx.c
@@ -570,7 +570,7 @@ void iwl_mvm_handle_rx_statistics(struct iwl_mvm *mvm,
570 }; 570 };
571 u32 temperature; 571 u32 temperature;
572 572
573 if (mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_STATS_V10) { 573 if (fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_STATS_V10)) {
574 struct iwl_notif_statistics_v10 *stats = (void *)&pkt->data; 574 struct iwl_notif_statistics_v10 *stats = (void *)&pkt->data;
575 575
576 if (iwl_rx_packet_payload_len(pkt) != v10_len) 576 if (iwl_rx_packet_payload_len(pkt) != v10_len)
@@ -610,7 +610,7 @@ void iwl_mvm_handle_rx_statistics(struct iwl_mvm *mvm,
610 /* Only handle rx statistics temperature changes if async temp 610 /* Only handle rx statistics temperature changes if async temp
611 * notifications are not supported 611 * notifications are not supported
612 */ 612 */
613 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_ASYNC_DTM)) 613 if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_ASYNC_DTM))
614 iwl_mvm_tt_temp_changed(mvm, temperature); 614 iwl_mvm_tt_temp_changed(mvm, temperature);
615 615
616 ieee80211_iterate_active_interfaces(mvm->hw, 616 ieee80211_iterate_active_interfaces(mvm->hw,
diff --git a/drivers/net/wireless/iwlwifi/mvm/scan.c b/drivers/net/wireless/iwlwifi/mvm/scan.c
index 794109e617a1..5de144968723 100644
--- a/drivers/net/wireless/iwlwifi/mvm/scan.c
+++ b/drivers/net/wireless/iwlwifi/mvm/scan.c
@@ -160,7 +160,7 @@ iwl_mvm_scan_rate_n_flags(struct iwl_mvm *mvm, enum ieee80211_band band,
160static u16 iwl_mvm_get_active_dwell(struct iwl_mvm *mvm, 160static u16 iwl_mvm_get_active_dwell(struct iwl_mvm *mvm,
161 enum ieee80211_band band, int n_ssids) 161 enum ieee80211_band band, int n_ssids)
162{ 162{
163 if (mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BASIC_DWELL) 163 if (fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_BASIC_DWELL))
164 return 10; 164 return 10;
165 if (band == IEEE80211_BAND_2GHZ) 165 if (band == IEEE80211_BAND_2GHZ)
166 return 20 + 3 * (n_ssids + 1); 166 return 20 + 3 * (n_ssids + 1);
@@ -170,7 +170,7 @@ static u16 iwl_mvm_get_active_dwell(struct iwl_mvm *mvm,
170static u16 iwl_mvm_get_passive_dwell(struct iwl_mvm *mvm, 170static u16 iwl_mvm_get_passive_dwell(struct iwl_mvm *mvm,
171 enum ieee80211_band band) 171 enum ieee80211_band band)
172{ 172{
173 if (mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_BASIC_DWELL) 173 if (fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_BASIC_DWELL))
174 return 110; 174 return 110;
175 return band == IEEE80211_BAND_2GHZ ? 100 + 20 : 100 + 10; 175 return band == IEEE80211_BAND_2GHZ ? 100 + 20 : 100 + 10;
176} 176}
@@ -205,8 +205,9 @@ static void iwl_mvm_scan_calc_dwell(struct iwl_mvm *mvm,
205 params->max_out_time = 120; 205 params->max_out_time = 120;
206 206
207 if (iwl_mvm_low_latency(mvm)) { 207 if (iwl_mvm_low_latency(mvm)) {
208 if (mvm->fw->ucode_capa.api[0] & 208 if (fw_has_api(&mvm->fw->ucode_capa,
209 IWL_UCODE_TLV_API_FRAGMENTED_SCAN) { 209 IWL_UCODE_TLV_API_FRAGMENTED_SCAN)) {
210
210 params->suspend_time = 105; 211 params->suspend_time = 105;
211 /* 212 /*
212 * If there is more than one active interface make 213 * If there is more than one active interface make
@@ -220,8 +221,9 @@ static void iwl_mvm_scan_calc_dwell(struct iwl_mvm *mvm,
220 } 221 }
221 } 222 }
222 223
223 if (frag_passive_dwell && (mvm->fw->ucode_capa.api[0] & 224 if (frag_passive_dwell &&
224 IWL_UCODE_TLV_API_FRAGMENTED_SCAN)) { 225 fw_has_api(&mvm->fw->ucode_capa,
226 IWL_UCODE_TLV_API_FRAGMENTED_SCAN)) {
225 /* 227 /*
226 * P2P device scan should not be fragmented to avoid negative 228 * P2P device scan should not be fragmented to avoid negative
227 * impact on P2P device discovery. Configure max_out_time to be 229 * impact on P2P device discovery. Configure max_out_time to be
@@ -273,8 +275,8 @@ not_bound:
273static inline bool iwl_mvm_rrm_scan_needed(struct iwl_mvm *mvm) 275static inline bool iwl_mvm_rrm_scan_needed(struct iwl_mvm *mvm)
274{ 276{
275 /* require rrm scan whenever the fw supports it */ 277 /* require rrm scan whenever the fw supports it */
276 return mvm->fw->ucode_capa.capa[0] & 278 return fw_has_capa(&mvm->fw->ucode_capa,
277 IWL_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT; 279 IWL_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT);
278} 280}
279 281
280static int iwl_mvm_max_scan_ie_fw_cmd_room(struct iwl_mvm *mvm) 282static int iwl_mvm_max_scan_ie_fw_cmd_room(struct iwl_mvm *mvm)
@@ -732,7 +734,8 @@ iwl_mvm_build_scan_probe(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
732static __le32 iwl_mvm_scan_priority(struct iwl_mvm *mvm, 734static __le32 iwl_mvm_scan_priority(struct iwl_mvm *mvm,
733 enum iwl_scan_priority_ext prio) 735 enum iwl_scan_priority_ext prio)
734{ 736{
735 if (mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_EXT_SCAN_PRIORITY) 737 if (fw_has_api(&mvm->fw->ucode_capa,
738 IWL_UCODE_TLV_API_EXT_SCAN_PRIORITY))
736 return cpu_to_le32(prio); 739 return cpu_to_le32(prio);
737 740
738 if (prio <= IWL_SCAN_PRIORITY_EXT_2) 741 if (prio <= IWL_SCAN_PRIORITY_EXT_2)
@@ -785,7 +788,7 @@ static inline bool iwl_mvm_scan_use_ebs(struct iwl_mvm *mvm,
785 return ((capa->flags & IWL_UCODE_TLV_FLAGS_EBS_SUPPORT) && 788 return ((capa->flags & IWL_UCODE_TLV_FLAGS_EBS_SUPPORT) &&
786 mvm->last_ebs_successful && 789 mvm->last_ebs_successful &&
787 (n_iterations > 1 || 790 (n_iterations > 1 ||
788 (capa->api[0] & IWL_UCODE_TLV_API_SINGLE_SCAN_EBS)) && 791 fw_has_api(capa, IWL_UCODE_TLV_API_SINGLE_SCAN_EBS)) &&
789 vif->type != NL80211_IFTYPE_P2P_DEVICE); 792 vif->type != NL80211_IFTYPE_P2P_DEVICE);
790} 793}
791 794
@@ -1233,7 +1236,7 @@ int iwl_mvm_reg_scan_start(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
1233 1236
1234 iwl_mvm_build_scan_probe(mvm, vif, ies, &params); 1237 iwl_mvm_build_scan_probe(mvm, vif, ies, &params);
1235 1238
1236 if (mvm->fw->ucode_capa.capa[0] & IWL_UCODE_TLV_CAPA_UMAC_SCAN) { 1239 if (fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_UMAC_SCAN)) {
1237 hcmd.id = SCAN_REQ_UMAC; 1240 hcmd.id = SCAN_REQ_UMAC;
1238 ret = iwl_mvm_scan_umac(mvm, vif, &params, 1241 ret = iwl_mvm_scan_umac(mvm, vif, &params,
1239 IWL_MVM_SCAN_REGULAR); 1242 IWL_MVM_SCAN_REGULAR);
@@ -1341,7 +1344,7 @@ int iwl_mvm_sched_scan_start(struct iwl_mvm *mvm,
1341 1344
1342 iwl_mvm_build_scan_probe(mvm, vif, ies, &params); 1345 iwl_mvm_build_scan_probe(mvm, vif, ies, &params);
1343 1346
1344 if (mvm->fw->ucode_capa.capa[0] & IWL_UCODE_TLV_CAPA_UMAC_SCAN) { 1347 if (fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_UMAC_SCAN)) {
1345 hcmd.id = SCAN_REQ_UMAC; 1348 hcmd.id = SCAN_REQ_UMAC;
1346 ret = iwl_mvm_scan_umac(mvm, vif, &params, IWL_MVM_SCAN_SCHED); 1349 ret = iwl_mvm_scan_umac(mvm, vif, &params, IWL_MVM_SCAN_SCHED);
1347 } else { 1350 } else {
@@ -1468,7 +1471,7 @@ static int iwl_mvm_scan_stop_wait(struct iwl_mvm *mvm, int type)
1468 1471
1469 IWL_DEBUG_SCAN(mvm, "Preparing to stop scan, type %x\n", type); 1472 IWL_DEBUG_SCAN(mvm, "Preparing to stop scan, type %x\n", type);
1470 1473
1471 if (mvm->fw->ucode_capa.capa[0] & IWL_UCODE_TLV_CAPA_UMAC_SCAN) 1474 if (fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_UMAC_SCAN))
1472 ret = iwl_mvm_umac_scan_abort(mvm, type); 1475 ret = iwl_mvm_umac_scan_abort(mvm, type);
1473 else 1476 else
1474 ret = iwl_mvm_lmac_scan_abort(mvm); 1477 ret = iwl_mvm_lmac_scan_abort(mvm);
@@ -1486,7 +1489,7 @@ static int iwl_mvm_scan_stop_wait(struct iwl_mvm *mvm, int type)
1486 1489
1487int iwl_mvm_scan_size(struct iwl_mvm *mvm) 1490int iwl_mvm_scan_size(struct iwl_mvm *mvm)
1488{ 1491{
1489 if (mvm->fw->ucode_capa.capa[0] & IWL_UCODE_TLV_CAPA_UMAC_SCAN) 1492 if (fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_UMAC_SCAN))
1490 return sizeof(struct iwl_scan_req_umac) + 1493 return sizeof(struct iwl_scan_req_umac) +
1491 sizeof(struct iwl_scan_channel_cfg_umac) * 1494 sizeof(struct iwl_scan_channel_cfg_umac) *
1492 mvm->fw->ucode_capa.n_scan_channels + 1495 mvm->fw->ucode_capa.n_scan_channels +
@@ -1504,7 +1507,7 @@ int iwl_mvm_scan_size(struct iwl_mvm *mvm)
1504 */ 1507 */
1505void iwl_mvm_report_scan_aborted(struct iwl_mvm *mvm) 1508void iwl_mvm_report_scan_aborted(struct iwl_mvm *mvm)
1506{ 1509{
1507 if (mvm->fw->ucode_capa.capa[0] & IWL_UCODE_TLV_CAPA_UMAC_SCAN) { 1510 if (fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_UMAC_SCAN)) {
1508 int uid, i; 1511 int uid, i;
1509 1512
1510 uid = iwl_mvm_scan_uid_by_status(mvm, IWL_MVM_SCAN_REGULAR); 1513 uid = iwl_mvm_scan_uid_by_status(mvm, IWL_MVM_SCAN_REGULAR);
diff --git a/drivers/net/wireless/iwlwifi/mvm/tx.c b/drivers/net/wireless/iwlwifi/mvm/tx.c
index 57e0cbb35f37..7ba7a118ff5c 100644
--- a/drivers/net/wireless/iwlwifi/mvm/tx.c
+++ b/drivers/net/wireless/iwlwifi/mvm/tx.c
@@ -171,8 +171,8 @@ void iwl_mvm_set_tx_cmd(struct iwl_mvm *mvm, struct sk_buff *skb,
171 !is_multicast_ether_addr(ieee80211_get_DA(hdr))) 171 !is_multicast_ether_addr(ieee80211_get_DA(hdr)))
172 tx_flags |= TX_CMD_FLG_PROT_REQUIRE; 172 tx_flags |= TX_CMD_FLG_PROT_REQUIRE;
173 173
174 if ((mvm->fw->ucode_capa.capa[0] & 174 if (fw_has_capa(&mvm->fw->ucode_capa,
175 IWL_UCODE_TLV_CAPA_TXPOWER_INSERTION_SUPPORT) && 175 IWL_UCODE_TLV_CAPA_TXPOWER_INSERTION_SUPPORT) &&
176 ieee80211_action_contains_tpc(skb)) 176 ieee80211_action_contains_tpc(skb))
177 tx_flags |= TX_CMD_FLG_WRITE_TX_POWER; 177 tx_flags |= TX_CMD_FLG_WRITE_TX_POWER;
178 178
diff --git a/drivers/net/wireless/iwlwifi/mvm/utils.c b/drivers/net/wireless/iwlwifi/mvm/utils.c
index bc55a8b82db6..03f8e06dded7 100644
--- a/drivers/net/wireless/iwlwifi/mvm/utils.c
+++ b/drivers/net/wireless/iwlwifi/mvm/utils.c
@@ -584,7 +584,7 @@ void iwl_mvm_dump_nic_error_log(struct iwl_mvm *mvm)
584 struct iwl_error_event_table table; 584 struct iwl_error_event_table table;
585 u32 base; 585 u32 base;
586 586
587 if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_NEW_VERSION)) { 587 if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_NEW_VERSION)) {
588 iwl_mvm_dump_nic_error_log_old(mvm); 588 iwl_mvm_dump_nic_error_log_old(mvm);
589 return; 589 return;
590 } 590 }