#define IWL3168_UCODE_API_MAX  26
 
 /* Lowest firmware API version supported */
-#define IWL7260_UCODE_API_MIN  16
-#define IWL7265_UCODE_API_MIN  16
-#define IWL7265D_UCODE_API_MIN 16
+#define IWL7260_UCODE_API_MIN  17
+#define IWL7265_UCODE_API_MIN  17
+#define IWL7265D_UCODE_API_MIN 17
 #define IWL3168_UCODE_API_MIN  20
 
 /* NVM versions */
 
 #define IWL8265_UCODE_API_MAX  26
 
 /* Lowest firmware API version supported */
-#define IWL8000_UCODE_API_MIN  16
+#define IWL8000_UCODE_API_MIN  17
 #define IWL8265_UCODE_API_MIN  20
 
 /* NVM versions */
 
 #define IWL9000_UCODE_API_MAX  26
 
 /* Lowest firmware API version supported */
-#define IWL9000_UCODE_API_MIN  16
+#define IWL9000_UCODE_API_MIN  17
 
 /* NVM versions */
 #define IWL9000_NVM_VERSION            0x0a1d
 
  * @IWL_UCODE_TLV_FLAGS_NEWSCAN: new uCode scan behavior on hidden SSID,
  *     treats good CRC threshold as a boolean
  * @IWL_UCODE_TLV_FLAGS_MFP: This uCode image supports MFP (802.11w).
- * @IWL_UCODE_TLV_FLAGS_P2P: This uCode image supports P2P.
- * @IWL_UCODE_TLV_FLAGS_DW_BC_TABLE: The SCD byte count table is in DWORDS
  * @IWL_UCODE_TLV_FLAGS_UAPSD_SUPPORT: This uCode image supports uAPSD
  * @IWL_UCODE_TLV_FLAGS_SHORT_BL: 16 entries of black list instead of 64 in scan
  *     offload profile config command.
  *     from the probe request template.
  * @IWL_UCODE_TLV_FLAGS_NEW_NSOFFL_SMALL: new NS offload (small version)
  * @IWL_UCODE_TLV_FLAGS_NEW_NSOFFL_LARGE: new NS offload (large version)
- * @IWL_UCODE_TLV_FLAGS_P2P_PM: P2P client supports PM as a stand alone MAC
- * @IWL_UCODE_TLV_FLAGS_P2P_BSS_PS_DCM: support power save on BSS station and
- *     P2P client interfaces simultaneously if they are in different bindings.
- * @IWL_UCODE_TLV_FLAGS_P2P_BSS_PS_SCM: support power save on BSS station and
- *     P2P client interfaces simultaneously if they are in same bindings.
  * @IWL_UCODE_TLV_FLAGS_UAPSD_SUPPORT: General support for uAPSD
  * @IWL_UCODE_TLV_FLAGS_P2P_PS_UAPSD: P2P client supports uAPSD power save
  * @IWL_UCODE_TLV_FLAGS_BCAST_FILTERING: uCode supports broadcast filtering.
- * @IWL_UCODE_TLV_FLAGS_GO_UAPSD: AP/GO interfaces support uAPSD clients
  * @IWL_UCODE_TLV_FLAGS_EBS_SUPPORT: this uCode image supports EBS.
  */
 enum iwl_ucode_tlv_flag {
        IWL_UCODE_TLV_FLAGS_PAN                 = BIT(0),
        IWL_UCODE_TLV_FLAGS_NEWSCAN             = BIT(1),
        IWL_UCODE_TLV_FLAGS_MFP                 = BIT(2),
-       IWL_UCODE_TLV_FLAGS_P2P                 = BIT(3),
-       IWL_UCODE_TLV_FLAGS_DW_BC_TABLE         = BIT(4),
        IWL_UCODE_TLV_FLAGS_SHORT_BL            = BIT(7),
        IWL_UCODE_TLV_FLAGS_D3_6_IPV6_ADDRS     = BIT(10),
        IWL_UCODE_TLV_FLAGS_NO_BASIC_SSID       = BIT(12),
        IWL_UCODE_TLV_FLAGS_NEW_NSOFFL_SMALL    = BIT(15),
        IWL_UCODE_TLV_FLAGS_NEW_NSOFFL_LARGE    = BIT(16),
-       IWL_UCODE_TLV_FLAGS_P2P_PM              = BIT(21),
-       IWL_UCODE_TLV_FLAGS_BSS_P2P_PS_DCM      = BIT(22),
-       IWL_UCODE_TLV_FLAGS_BSS_P2P_PS_SCM      = BIT(23),
        IWL_UCODE_TLV_FLAGS_UAPSD_SUPPORT       = BIT(24),
        IWL_UCODE_TLV_FLAGS_EBS_SUPPORT         = BIT(25),
        IWL_UCODE_TLV_FLAGS_P2P_PS_UAPSD        = BIT(26),
        IWL_UCODE_TLV_FLAGS_BCAST_FILTERING     = BIT(29),
-       IWL_UCODE_TLV_FLAGS_GO_UAPSD            = BIT(30),
 };
 
 typedef unsigned int __bitwise__ iwl_ucode_tlv_api_t;
  * @IWL_UCODE_TLV_API_FRAGMENTED_SCAN: This ucode supports active dwell time
  *     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_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_NEW_VERSION: new versioning format
- * @IWL_UCODE_TLV_API_EXT_SCAN_PRIORITY: scan APIs use 8-level priority
- *     instead of 3.
- * @IWL_UCODE_TLV_API_TX_POWER_CHAIN: TX power API has larger command size
- *     (command version 3) that supports per-chain limits
  * @IWL_UCODE_TLV_API_SCAN_TSF_REPORT: Scan start time reported in scan
  *     iteration complete notification, and the timestamp reported for RX
  *     received during scan, are reported in TSF of the mac specified in the
 enum iwl_ucode_tlv_api {
        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_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_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_TX_POWER_CHAIN        = (__force iwl_ucode_tlv_api_t)27,
+       IWL_UCODE_TLV_API_NEW_VERSION           = (__force iwl_ucode_tlv_api_t)20,
        IWL_UCODE_TLV_API_SCAN_TSF_REPORT       = (__force iwl_ucode_tlv_api_t)28,
 
        NUM_IWL_UCODE_TLV_API
 
 
        if (iwlmvm_mod_params.power_scheme != IWL_POWER_SCHEME_CAM &&
            ((vif->type == NL80211_IFTYPE_STATION && !vif->p2p) ||
-            (vif->type == NL80211_IFTYPE_STATION && vif->p2p &&
-             mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_BSS_P2P_PS_DCM)))
+            (vif->type == NL80211_IFTYPE_STATION && vif->p2p)))
                MVM_DEBUGFS_ADD_FILE_VIF(pm_params, mvmvif->dbgfs_dir, S_IWUSR |
                                         S_IRUSR);
 
 
        IWL_TX_POWER_MODE_SET_ACK = 3,
 }; /* TX_POWER_REDUCED_FLAGS_TYPE_API_E_VER_4 */;
 
+#define IWL_NUM_CHAIN_LIMITS   2
+#define IWL_NUM_SUB_BANDS      5
+
 /**
- * struct iwl_dev_tx_power_cmd_v2 - TX power reduction command
+ * struct iwl_dev_tx_power_cmd - TX power reduction command
  * @set_mode: see &enum iwl_dev_tx_power_cmd_mode
  * @mac_context_id: id of the mac ctx for which we are reducing TX power.
  * @pwr_restriction: TX power restriction in 1/8 dBms.
  * @dev_24: device TX power restriction in 1/8 dBms
  * @dev_52_low: device TX power restriction upper band - low
  * @dev_52_high: device TX power restriction upper band - high
+ * @per_chain_restriction: per chain restrictions
  */
-struct iwl_dev_tx_power_cmd_v2 {
+struct iwl_dev_tx_power_cmd_v3 {
        __le32 set_mode;
        __le32 mac_context_id;
        __le16 pwr_restriction;
        __le16 dev_24;
        __le16 dev_52_low;
        __le16 dev_52_high;
-} __packed; /* TX_REDUCED_POWER_API_S_VER_2 */
-
-#define IWL_NUM_CHAIN_LIMITS   2
-#define IWL_NUM_SUB_BANDS      5
-
-/**
- * struct iwl_dev_tx_power_cmd - TX power reduction command
- * @v2: version 2 of the command, embedded here for easier software handling
- * @per_chain_restriction: per chain restrictions
- */
-struct iwl_dev_tx_power_cmd_v3 {
-       /* v3 is just an extension of v2 - keep this here */
-       struct iwl_dev_tx_power_cmd_v2 v2;
        __le16 per_chain_restriction[IWL_NUM_CHAIN_LIMITS][IWL_NUM_SUB_BANDS];
 } __packed; /* TX_REDUCED_POWER_API_S_VER_3 */
 
 
  * @TX_CMD_FLG_MH_PAD: driver inserted 2 byte padding after MAC header.
  *     Should be set for 26/30 length MAC headers
  * @TX_CMD_FLG_RESP_TO_DRV: zero this if the response should go only to FW
- * @TX_CMD_FLG_CCMP_AGG: this frame uses CCMP for aggregation acceleration
  * @TX_CMD_FLG_TKIP_MIC_DONE: FW already performed TKIP MIC calculation
  * @TX_CMD_FLG_DUR: disable duration overwriting used in PS-Poll Assoc-id
  * @TX_CMD_FLG_FW_DROP: FW should mark frame to be dropped
        TX_CMD_FLG_KEEP_SEQ_CTL         = BIT(18),
        TX_CMD_FLG_MH_PAD               = BIT(20),
        TX_CMD_FLG_RESP_TO_DRV          = BIT(21),
-       TX_CMD_FLG_CCMP_AGG             = BIT(22),
        TX_CMD_FLG_TKIP_MIC_DONE        = BIT(23),
        TX_CMD_FLG_DUR                  = BIT(25),
        TX_CMD_FLG_FW_DROP              = BIT(26),
 
 {
        struct iwl_mvm_sar_table sar_table;
        struct iwl_dev_tx_power_cmd cmd = {
-               .v3.v2.set_mode = cpu_to_le32(IWL_TX_POWER_MODE_SET_CHAINS),
+               .v3.set_mode = cpu_to_le32(IWL_TX_POWER_MODE_SET_CHAINS),
        };
        int ret, i, j, idx;
        int len = sizeof(cmd);
 
-       /* we can't do anything with the table if the FW doesn't support it */
-       if (!fw_has_api(&mvm->fw->ucode_capa,
-                       IWL_UCODE_TLV_API_TX_POWER_CHAIN)) {
-               IWL_DEBUG_RADIO(mvm,
-                               "FW doesn't support per-chain TX power settings.\n");
-               return 0;
-       }
-
        if (!fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_TX_POWER_ACK))
                len = sizeof(cmd.v3);
 
 
                hw->wiphy->n_cipher_suites++;
        }
 
-       /*
-        * Enable 11w if advertised by firmware and software crypto
-        * is not enabled (as the firmware will interpret some mgmt
-        * packets, so enabling it with software crypto isn't safe)
+       /* Enable 11w if software crypto is not enabled (as the
+        * firmware will interpret some mgmt packets, so enabling it
+        * with software crypto isn't safe).
         */
-       if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_MFP &&
-           !iwlwifi_mod_params.sw_crypto) {
+       if (!iwlwifi_mod_params.sw_crypto) {
                ieee80211_hw_set(hw, MFP_CAPABLE);
                mvm->ciphers[hw->wiphy->n_cipher_suites] =
                        WLAN_CIPHER_SUITE_AES_CMAC;
                hw->wiphy->regulatory_flags |= REGULATORY_CUSTOM_REG |
                                               REGULATORY_DISABLE_BEACON_HINTS;
 
-       if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_GO_UAPSD)
-               hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
-
+       hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
        hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
 
        hw->wiphy->iface_combinations = iwl_mvm_iface_combinations;
                                s16 tx_power)
 {
        struct iwl_dev_tx_power_cmd cmd = {
-               .v3.v2.set_mode = cpu_to_le32(IWL_TX_POWER_MODE_SET_MAC),
-               .v3.v2.mac_context_id =
+               .v3.set_mode = cpu_to_le32(IWL_TX_POWER_MODE_SET_MAC),
+               .v3.mac_context_id =
                        cpu_to_le32(iwl_mvm_vif_from_mac80211(vif)->id),
-               .v3.v2.pwr_restriction = cpu_to_le16(8 * tx_power),
+               .v3.pwr_restriction = cpu_to_le16(8 * tx_power),
        };
        int len = sizeof(cmd);
 
        if (tx_power == IWL_DEFAULT_MAX_TX_POWER)
-               cmd.v3.v2.pwr_restriction = cpu_to_le16(IWL_DEV_MAX_TX_POWER);
+               cmd.v3.pwr_restriction = cpu_to_le16(IWL_DEV_MAX_TX_POWER);
 
        if (!fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_TX_POWER_ACK))
                len = sizeof(cmd.v3);
-       if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_TX_POWER_CHAIN))
-               len = sizeof(cmd.v3.v2);
 
        return iwl_mvm_send_cmd_pdu(mvm, REDUCE_TX_POWER_CMD, 0, len, &cmd);
 }
 
 
        tx_cmd->sec_ctl = TX_CMD_SEC_CCM;
        memcpy(tx_cmd->key, keyconf->key, keyconf->keylen);
-       if (info->flags & IEEE80211_TX_CTL_AMPDU)
-               tx_cmd->tx_flags |= cpu_to_le32(TX_CMD_FLG_CCMP_AGG);
 }
 
 static inline void iwl_mvm_wait_for_async_handlers(struct iwl_mvm *mvm)
 
        /* the hardware splits the A-MSDU */
        if (mvm->cfg->mq_rx_supported)
                trans_cfg.rx_buf_size = IWL_AMSDU_4K;
-       trans->wide_cmd_header = fw_has_api(&mvm->fw->ucode_capa,
-                                           IWL_UCODE_TLV_API_WIDE_CMD_HDR);
 
-       if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_DW_BC_TABLE)
-               trans_cfg.bc_table_dword = true;
+       trans->wide_cmd_header = true;
+       trans_cfg.bc_table_dword = true;
 
        trans_cfg.command_groups = iwl_mvm_groups;
        trans_cfg.command_groups_size = ARRAY_SIZE(iwl_mvm_groups);
 
 
        /* enable PM on p2p if p2p stand alone */
        if (vifs->p2p_active && !vifs->bss_active && !vifs->ap_active) {
-               if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_P2P_PM)
-                       p2p_mvmvif->pm_enabled = true;
+               p2p_mvmvif->pm_enabled = true;
                return;
        }
 
                                   ap_mvmvif->phy_ctxt->id);
 
        /* clients are not stand alone: enable PM if DCM */
-       if (!(client_same_channel || ap_same_channel) &&
-           (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_BSS_P2P_PS_DCM)) {
+       if (!(client_same_channel || ap_same_channel)) {
                if (vifs->bss_active)
                        bss_mvmvif->pm_enabled = true;
-               if (vifs->p2p_active &&
-                   (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_P2P_PM))
+               if (vifs->p2p_active)
                        p2p_mvmvif->pm_enabled = true;
                return;
        }
         * There is only one channel in the system and there are only
         * bss and p2p clients that share it
         */
-       if (client_same_channel && !vifs->ap_active &&
-           (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_BSS_P2P_PS_SCM)) {
+       if (client_same_channel && !vifs->ap_active) {
                /* share same channel*/
                bss_mvmvif->pm_enabled = true;
-               if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_P2P_PM)
-                       p2p_mvmvif->pm_enabled = true;
+               p2p_mvmvif->pm_enabled = true;
        }
 }
 
 
        params->preq.common_data.len = cpu_to_le16(ies->common_ie_len);
 }
 
-static __le32 iwl_mvm_scan_priority(struct iwl_mvm *mvm,
-                                   enum iwl_scan_priority_ext prio)
-{
-       if (fw_has_api(&mvm->fw->ucode_capa,
-                      IWL_UCODE_TLV_API_EXT_SCAN_PRIORITY))
-               return cpu_to_le32(prio);
-
-       if (prio <= IWL_SCAN_PRIORITY_EXT_2)
-               return cpu_to_le32(IWL_SCAN_PRIORITY_LOW);
-
-       if (prio <= IWL_SCAN_PRIORITY_EXT_4)
-               return cpu_to_le32(IWL_SCAN_PRIORITY_MEDIUM);
-
-       return cpu_to_le32(IWL_SCAN_PRIORITY_HIGH);
-}
-
 static void iwl_mvm_scan_lmac_dwell(struct iwl_mvm *mvm,
                                    struct iwl_scan_req_lmac *cmd,
                                    struct iwl_mvm_scan_params *params)
        cmd->extended_dwell = scan_timing[params->type].dwell_extended;
        cmd->max_out_time = cpu_to_le32(scan_timing[params->type].max_out_time);
        cmd->suspend_time = cpu_to_le32(scan_timing[params->type].suspend_time);
-       cmd->scan_prio = iwl_mvm_scan_priority(mvm, IWL_SCAN_PRIORITY_EXT_6);
+       cmd->scan_prio = cpu_to_le32(IWL_SCAN_PRIORITY_EXT_6);
 }
 
 static inline bool iwl_mvm_scan_fits(struct iwl_mvm *mvm, int n_ssids,
        cmd->fragmented_dwell = scan_timing[params->type].dwell_fragmented;
        cmd->max_out_time = cpu_to_le32(scan_timing[params->type].max_out_time);
        cmd->suspend_time = cpu_to_le32(scan_timing[params->type].suspend_time);
-       cmd->scan_priority =
-               iwl_mvm_scan_priority(mvm, IWL_SCAN_PRIORITY_EXT_6);
+       cmd->scan_priority = cpu_to_le32(IWL_SCAN_PRIORITY_EXT_6);
 
        if (iwl_mvm_is_regular_scan(params))
-               cmd->ooc_priority =
-                       iwl_mvm_scan_priority(mvm, IWL_SCAN_PRIORITY_EXT_6);
+               cmd->ooc_priority = cpu_to_le32(IWL_SCAN_PRIORITY_EXT_6);
        else
-               cmd->ooc_priority =
-                       iwl_mvm_scan_priority(mvm, IWL_SCAN_PRIORITY_EXT_2);
+               cmd->ooc_priority = cpu_to_le32(IWL_SCAN_PRIORITY_EXT_2);
 }
 
 static void
 
        };
        u32 cmdid;
 
-       if (fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_WIDE_CMD_HDR))
-               cmdid = iwl_cmd_id(CMD_DTS_MEASUREMENT_TRIGGER_WIDE,
-                                  PHY_OPS_GROUP, 0);
-       else
-               cmdid = CMD_DTS_MEASUREMENT_TRIGGER;
+       cmdid = iwl_cmd_id(CMD_DTS_MEASUREMENT_TRIGGER_WIDE,
+                          PHY_OPS_GROUP, 0);
 
        if (!fw_has_capa(&mvm->fw->ucode_capa,
                         IWL_UCODE_TLV_CAPA_EXTENDED_DTS_MEASURE))
                                            DTS_MEASUREMENT_NOTIF_WIDE) };
        int ret;
 
-       if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_WIDE_CMD_HDR))
-               temp_notif[0] = DTS_MEASUREMENT_NOTIFICATION;
-
        lockdep_assert_held(&mvm->mutex);
 
        iwl_init_notification_wait(&mvm->notif_wait, &wait_temp_notif,