iwlwifi: mvm: add support for 160Mhz in ranging measurements
authorAvraham Stern <avraham.stern@intel.com>
Sun, 17 Oct 2021 08:43:43 +0000 (11:43 +0300)
committerLuca Coelho <luciano.coelho@intel.com>
Fri, 22 Oct 2021 07:48:58 +0000 (10:48 +0300)
Add support for 160Mhz bandwidth in ranging measurements for
initiator and responder. Advertise 160Mhz in the supported
bandwidths for ranging.

Signed-off-by: Avraham Stern <avraham.stern@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20211017113927.32a13ac0f4d4.I883492648518cc5067a2f91b7ecf8bfa55f6876a@changeid
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/fw/api/location.h
drivers/net/wireless/intel/iwlwifi/mvm/ftm-initiator.c
drivers/net/wireless/intel/iwlwifi/mvm/ftm-responder.c
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c

index 6bbb8b8c91cd6051f02f00485cf3ac8c1d80f66d..294e733ecbc9b4d7ecd90b88bcf466e9ca52b5ad 100644 (file)
@@ -629,6 +629,7 @@ enum iwl_location_bw {
        IWL_LOCATION_BW_20MHZ,
        IWL_LOCATION_BW_40MHZ,
        IWL_LOCATION_BW_80MHZ,
+       IWL_LOCATION_BW_160MHZ,
 };
 
 #define TK_11AZ_LEN    32
index 03e5bf5cb9094c7d270f60650b0ddeb98c293343..73be95fffb95459be1cfccc3267eb35be062f463 100644 (file)
@@ -324,6 +324,7 @@ iwl_mvm_ftm_target_chandef_v2(struct iwl_mvm *mvm,
                              u8 *ctrl_ch_position)
 {
        u32 freq = peer->chandef.chan->center_freq;
+       u8 cmd_ver;
 
        *channel = ieee80211_frequency_to_channel(freq);
 
@@ -344,6 +345,17 @@ iwl_mvm_ftm_target_chandef_v2(struct iwl_mvm *mvm,
                *format_bw = IWL_LOCATION_FRAME_FORMAT_VHT;
                *format_bw |= IWL_LOCATION_BW_80MHZ << LOCATION_BW_POS;
                break;
+       case NL80211_CHAN_WIDTH_160:
+               cmd_ver = iwl_fw_lookup_cmd_ver(mvm->fw, LOCATION_GROUP,
+                                               TOF_RANGE_REQ_CMD,
+                                               IWL_FW_CMD_VER_UNKNOWN);
+
+               if (cmd_ver >= 13) {
+                       *format_bw = IWL_LOCATION_FRAME_FORMAT_HE;
+                       *format_bw |= IWL_LOCATION_BW_160MHZ << LOCATION_BW_POS;
+                       break;
+               }
+               fallthrough;
        default:
                IWL_ERR(mvm, "Unsupported BW in FTM request (%d)\n",
                        peer->chandef.width);
index eba5433c2626df70604fcee367679dac0ddccd76..bda6da7d988e9e95f7fc3f0a34a47aa467ad4a8e 100644 (file)
@@ -46,8 +46,8 @@ static int iwl_mvm_ftm_responder_set_bw_v1(struct cfg80211_chan_def *chandef,
 }
 
 static int iwl_mvm_ftm_responder_set_bw_v2(struct cfg80211_chan_def *chandef,
-                                          u8 *format_bw,
-                                          u8 *ctrl_ch_position)
+                                          u8 *format_bw, u8 *ctrl_ch_position,
+                                          u8 cmd_ver)
 {
        switch (chandef->width) {
        case NL80211_CHAN_WIDTH_20_NOHT:
@@ -68,6 +68,14 @@ static int iwl_mvm_ftm_responder_set_bw_v2(struct cfg80211_chan_def *chandef,
                *format_bw |= IWL_LOCATION_BW_80MHZ << LOCATION_BW_POS;
                *ctrl_ch_position = iwl_mvm_get_ctrl_pos(chandef);
                break;
+       case NL80211_CHAN_WIDTH_160:
+               if (cmd_ver >= 9) {
+                       *format_bw = IWL_LOCATION_FRAME_FORMAT_HE;
+                       *format_bw |= IWL_LOCATION_BW_160MHZ << LOCATION_BW_POS;
+                       *ctrl_ch_position = iwl_mvm_get_ctrl_pos(chandef);
+                       break;
+               }
+               fallthrough;
        default:
                return -ENOTSUPP;
        }
@@ -140,7 +148,8 @@ iwl_mvm_ftm_responder_cmd(struct iwl_mvm *mvm,
 
        if (cmd_ver >= 7)
                err = iwl_mvm_ftm_responder_set_bw_v2(chandef, &cmd.format_bw,
-                                                     &cmd.ctrl_ch_position);
+                                                     &cmd.ctrl_ch_position,
+                                                     cmd_ver);
        else
                err = iwl_mvm_ftm_responder_set_bw_v1(chandef, &cmd.format_bw,
                                                      &cmd.ctrl_ch_position);
index 33198be6f0399f31b79ae7fe9672351d13917f8b..5374faa15684e88d04ee7481875dd404eabe90b0 100644 (file)
@@ -145,7 +145,8 @@ static const struct cfg80211_pmsr_capabilities iwl_mvm_pmsr_capa = {
                .bandwidths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
                              BIT(NL80211_CHAN_WIDTH_20) |
                              BIT(NL80211_CHAN_WIDTH_40) |
-                             BIT(NL80211_CHAN_WIDTH_80),
+                             BIT(NL80211_CHAN_WIDTH_80) |
+                             BIT(NL80211_CHAN_WIDTH_160),
                .preambles = BIT(NL80211_PREAMBLE_LEGACY) |
                             BIT(NL80211_PREAMBLE_HT) |
                             BIT(NL80211_PREAMBLE_VHT) |