|
@@ -664,6 +664,22 @@ static u8 *iwl_mvm_copy_and_insert_ds_elem(struct iwl_mvm *mvm, const u8 *ies,
|
|
|
return newpos;
|
|
|
}
|
|
|
|
|
|
+#define WFA_TPC_IE_LEN 9
|
|
|
+
|
|
|
+static void iwl_mvm_add_tpc_report_ie(u8 *pos)
|
|
|
+{
|
|
|
+ pos[0] = WLAN_EID_VENDOR_SPECIFIC;
|
|
|
+ pos[1] = WFA_TPC_IE_LEN - 2;
|
|
|
+ pos[2] = (WLAN_OUI_MICROSOFT >> 16) & 0xff;
|
|
|
+ pos[3] = (WLAN_OUI_MICROSOFT >> 8) & 0xff;
|
|
|
+ pos[4] = WLAN_OUI_MICROSOFT & 0xff;
|
|
|
+ pos[5] = WLAN_OUI_TYPE_MICROSOFT_TPC;
|
|
|
+ pos[6] = 0;
|
|
|
+ /* pos[7] - tx power will be inserted by the FW */
|
|
|
+ pos[7] = 0;
|
|
|
+ pos[8] = 0;
|
|
|
+}
|
|
|
+
|
|
|
static void
|
|
|
iwl_mvm_build_scan_probe(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
|
|
|
struct ieee80211_scan_ies *ies,
|
|
@@ -716,7 +732,16 @@ iwl_mvm_build_scan_probe(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
|
|
|
|
|
|
memcpy(pos, ies->common_ies, ies->common_ie_len);
|
|
|
params->preq.common_data.offset = cpu_to_le16(pos - params->preq.buf);
|
|
|
- params->preq.common_data.len = cpu_to_le16(ies->common_ie_len);
|
|
|
+
|
|
|
+ if (iwl_mvm_rrm_scan_needed(mvm) &&
|
|
|
+ !fw_has_capa(&mvm->fw->ucode_capa,
|
|
|
+ IWL_UCODE_TLV_CAPA_WFA_TPC_REP_IE_SUPPORT)) {
|
|
|
+ iwl_mvm_add_tpc_report_ie(pos + ies->common_ie_len);
|
|
|
+ params->preq.common_data.len = cpu_to_le16(ies->common_ie_len +
|
|
|
+ WFA_TPC_IE_LEN);
|
|
|
+ } else {
|
|
|
+ params->preq.common_data.len = cpu_to_le16(ies->common_ie_len);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static void iwl_mvm_scan_lmac_dwell(struct iwl_mvm *mvm,
|
|
@@ -781,7 +806,9 @@ static int iwl_mvm_scan_lmac_flags(struct iwl_mvm *mvm,
|
|
|
if (params->type == IWL_SCAN_TYPE_FRAGMENTED)
|
|
|
flags |= IWL_MVM_LMAC_SCAN_FLAG_FRAGMENTED;
|
|
|
|
|
|
- if (iwl_mvm_rrm_scan_needed(mvm))
|
|
|
+ if (iwl_mvm_rrm_scan_needed(mvm) &&
|
|
|
+ fw_has_capa(&mvm->fw->ucode_capa,
|
|
|
+ IWL_UCODE_TLV_CAPA_WFA_TPC_REP_IE_SUPPORT))
|
|
|
flags |= IWL_MVM_LMAC_SCAN_FLAGS_RRM_ENABLED;
|
|
|
|
|
|
if (params->pass_all)
|
|
@@ -1183,7 +1210,9 @@ static u16 iwl_mvm_scan_umac_flags(struct iwl_mvm *mvm,
|
|
|
flags |= IWL_UMAC_SCAN_GEN_FLAGS_LMAC2_FRAGMENTED;
|
|
|
}
|
|
|
|
|
|
- if (iwl_mvm_rrm_scan_needed(mvm))
|
|
|
+ if (iwl_mvm_rrm_scan_needed(mvm) &&
|
|
|
+ fw_has_capa(&mvm->fw->ucode_capa,
|
|
|
+ IWL_UCODE_TLV_CAPA_WFA_TPC_REP_IE_SUPPORT))
|
|
|
flags |= IWL_UMAC_SCAN_GEN_FLAGS_RRM_ENABLED;
|
|
|
|
|
|
if (params->pass_all)
|