iwlwifi: mvm: add support for 160Mhz in ranging measurements
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>
This commit is contained in:
parent
ee02e59801
commit
8a2c151623
4 changed files with 27 additions and 4 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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) |
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue