Commit 1ec7291e authored by Johannes Berg's avatar Johannes Berg

wifi: mac80211: add helpers to access sband iftype data

There's quite a bit of code accessing sband iftype data
(HE, HE 6 GHz, EHT) and we always need to remember to use
the ieee80211_vif_type_p2p() helper. Add new helpers to
directly get it from the sband/vif rather than having to
call ieee80211_vif_type_p2p().

Convert most code with the following spatch:

    @@
    expression vif, sband;
    @@
    -ieee80211_get_he_iftype_cap(sband, ieee80211_vif_type_p2p(vif))
    +ieee80211_get_he_iftype_cap_vif(sband, vif)

    @@
    expression vif, sband;
    @@
    -ieee80211_get_eht_iftype_cap(sband, ieee80211_vif_type_p2p(vif))
    +ieee80211_get_eht_iftype_cap_vif(sband, vif)

    @@
    expression vif, sband;
    @@
    -ieee80211_get_he_6ghz_capa(sband, ieee80211_vif_type_p2p(vif))
    +ieee80211_get_he_6ghz_capa_vif(sband, vif)
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarGregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20230604120651.db099f49e764.Ie892966c49e22c7b7ee1073bc684f142debfdc84@changeidSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 2ad66fcb
...@@ -2269,8 +2269,7 @@ bool iwl_mvm_is_nic_ack_enabled(struct iwl_mvm *mvm, struct ieee80211_vif *vif) ...@@ -2269,8 +2269,7 @@ bool iwl_mvm_is_nic_ack_enabled(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
* so take it from one of them. * so take it from one of them.
*/ */
sband = mvm->hw->wiphy->bands[NL80211_BAND_2GHZ]; sband = mvm->hw->wiphy->bands[NL80211_BAND_2GHZ];
own_he_cap = ieee80211_get_he_iftype_cap(sband, own_he_cap = ieee80211_get_he_iftype_cap_vif(sband, vif);
ieee80211_vif_type_p2p(vif));
return (own_he_cap && (own_he_cap->he_cap_elem.mac_cap_info[2] & return (own_he_cap && (own_he_cap->he_cap_elem.mac_cap_info[2] &
IEEE80211_HE_MAC_CAP2_ACK_EN)); IEEE80211_HE_MAC_CAP2_ACK_EN));
...@@ -3452,8 +3451,7 @@ static void iwl_mvm_reset_cca_40mhz_workaround(struct iwl_mvm *mvm, ...@@ -3452,8 +3451,7 @@ static void iwl_mvm_reset_cca_40mhz_workaround(struct iwl_mvm *mvm,
sband->ht_cap.cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40; sband->ht_cap.cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
he_cap = ieee80211_get_he_iftype_cap(sband, he_cap = ieee80211_get_he_iftype_cap_vif(sband, vif);
ieee80211_vif_type_p2p(vif));
if (he_cap) { if (he_cap) {
/* we know that ours is writable */ /* we know that ours is writable */
......
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
/* /*
* Copyright (C) 2012-2014, 2018-2020 Intel Corporation * Copyright (C) 2012-2014, 2018-2023 Intel Corporation
* Copyright (C) 2013-2015 Intel Mobile Communications GmbH * Copyright (C) 2013-2015 Intel Mobile Communications GmbH
* Copyright (C) 2016-2017 Intel Deutschland GmbH * Copyright (C) 2016-2017 Intel Deutschland GmbH
*/ */
...@@ -192,8 +192,7 @@ static void iwl_mvm_rx_monitor_notif(struct iwl_mvm *mvm, ...@@ -192,8 +192,7 @@ static void iwl_mvm_rx_monitor_notif(struct iwl_mvm *mvm,
WARN_ON(!(sband->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40)); WARN_ON(!(sband->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40));
sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40; sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
he_cap = ieee80211_get_he_iftype_cap(sband, he_cap = ieee80211_get_he_iftype_cap_vif(sband, vif);
ieee80211_vif_type_p2p(vif));
if (he_cap) { if (he_cap) {
/* we know that ours is writable */ /* we know that ours is writable */
......
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
/* /*
* Copyright (C) 2017 Intel Deutschland GmbH * Copyright (C) 2017 Intel Deutschland GmbH
* Copyright (C) 2018-2022 Intel Corporation * Copyright (C) 2018-2023 Intel Corporation
*/ */
#include "rs.h" #include "rs.h"
#include "fw-api.h" #include "fw-api.h"
...@@ -94,8 +94,7 @@ static u16 rs_fw_get_config_flags(struct iwl_mvm *mvm, ...@@ -94,8 +94,7 @@ static u16 rs_fw_get_config_flags(struct iwl_mvm *mvm,
IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD)) IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD))
flags |= IWL_TLC_MNG_CFG_FLAGS_LDPC_MSK; flags |= IWL_TLC_MNG_CFG_FLAGS_LDPC_MSK;
sband_he_cap = ieee80211_get_he_iftype_cap(sband, sband_he_cap = ieee80211_get_he_iftype_cap_vif(sband, vif);
ieee80211_vif_type_p2p(vif));
if (sband_he_cap && if (sband_he_cap &&
!(sband_he_cap->he_cap_elem.phy_cap_info[1] & !(sband_he_cap->he_cap_elem.phy_cap_info[1] &
IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD)) IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD))
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Copyright 2007-2010 Johannes Berg <johannes@sipsolutions.net> * Copyright 2007-2010 Johannes Berg <johannes@sipsolutions.net>
* Copyright 2013-2014 Intel Mobile Communications GmbH * Copyright 2013-2014 Intel Mobile Communications GmbH
* Copyright (C) 2015 - 2017 Intel Deutschland GmbH * Copyright (C) 2015 - 2017 Intel Deutschland GmbH
* Copyright (C) 2018 - 2022 Intel Corporation * Copyright (C) 2018 - 2023 Intel Corporation
*/ */
#ifndef MAC80211_H #ifndef MAC80211_H
...@@ -6866,6 +6866,48 @@ ieee80211_vif_type_p2p(struct ieee80211_vif *vif) ...@@ -6866,6 +6866,48 @@ ieee80211_vif_type_p2p(struct ieee80211_vif *vif)
return ieee80211_iftype_p2p(vif->type, vif->p2p); return ieee80211_iftype_p2p(vif->type, vif->p2p);
} }
/**
* ieee80211_get_he_iftype_cap_vif - return HE capabilities for sband/vif
* @sband: the sband to search for the iftype on
* @vif: the vif to get the iftype from
*
* Return: pointer to the struct ieee80211_sta_he_cap, or %NULL is none found
*/
static inline const struct ieee80211_sta_he_cap *
ieee80211_get_he_iftype_cap_vif(const struct ieee80211_supported_band *sband,
struct ieee80211_vif *vif)
{
return ieee80211_get_he_iftype_cap(sband, ieee80211_vif_type_p2p(vif));
}
/**
* ieee80211_get_he_6ghz_capa_vif - return HE 6 GHz capabilities
* @sband: the sband to search for the STA on
* @vif: the vif to get the iftype from
*
* Return: the 6GHz capabilities
*/
static inline __le16
ieee80211_get_he_6ghz_capa_vif(const struct ieee80211_supported_band *sband,
struct ieee80211_vif *vif)
{
return ieee80211_get_he_6ghz_capa(sband, ieee80211_vif_type_p2p(vif));
}
/**
* ieee80211_get_eht_iftype_cap_vif - return ETH capabilities for sband/vif
* @sband: the sband to search for the iftype on
* @vif: the vif to get the iftype from
*
* Return: pointer to the struct ieee80211_sta_eht_cap, or %NULL is none found
*/
static inline const struct ieee80211_sta_eht_cap *
ieee80211_get_eht_iftype_cap_vif(const struct ieee80211_supported_band *sband,
struct ieee80211_vif *vif)
{
return ieee80211_get_eht_iftype_cap(sband, ieee80211_vif_type_p2p(vif));
}
/** /**
* ieee80211_update_mu_groups - set the VHT MU-MIMO groud data * ieee80211_update_mu_groups - set the VHT MU-MIMO groud data
* *
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
/* /*
* EHT handling * EHT handling
* *
* Copyright(c) 2021-2022 Intel Corporation * Copyright(c) 2021-2023 Intel Corporation
*/ */
#include "ieee80211_i.h" #include "ieee80211_i.h"
...@@ -25,8 +25,7 @@ ieee80211_eht_cap_ie_to_sta_eht_cap(struct ieee80211_sub_if_data *sdata, ...@@ -25,8 +25,7 @@ ieee80211_eht_cap_ie_to_sta_eht_cap(struct ieee80211_sub_if_data *sdata,
memset(eht_cap, 0, sizeof(*eht_cap)); memset(eht_cap, 0, sizeof(*eht_cap));
if (!eht_cap_ie_elem || if (!eht_cap_ie_elem ||
!ieee80211_get_eht_iftype_cap(sband, !ieee80211_get_eht_iftype_cap_vif(sband, &sdata->vif))
ieee80211_vif_type_p2p(&sdata->vif)))
return; return;
mcs_nss_size = ieee80211_eht_mcs_nss_size(he_cap_ie_elem, mcs_nss_size = ieee80211_eht_mcs_nss_size(he_cap_ie_elem,
......
...@@ -128,8 +128,7 @@ ieee80211_he_cap_ie_to_sta_he_cap(struct ieee80211_sub_if_data *sdata, ...@@ -128,8 +128,7 @@ ieee80211_he_cap_ie_to_sta_he_cap(struct ieee80211_sub_if_data *sdata,
return; return;
own_he_cap_ptr = own_he_cap_ptr =
ieee80211_get_he_iftype_cap(sband, ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif);
ieee80211_vif_type_p2p(&sdata->vif));
if (!own_he_cap_ptr) if (!own_he_cap_ptr)
return; return;
......
...@@ -511,16 +511,14 @@ static int ieee80211_config_bw(struct ieee80211_link_data *link, ...@@ -511,16 +511,14 @@ static int ieee80211_config_bw(struct ieee80211_link_data *link,
/* don't check HE if we associated as non-HE station */ /* don't check HE if we associated as non-HE station */
if (link->u.mgd.conn_flags & IEEE80211_CONN_DISABLE_HE || if (link->u.mgd.conn_flags & IEEE80211_CONN_DISABLE_HE ||
!ieee80211_get_he_iftype_cap(sband, !ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif)) {
ieee80211_vif_type_p2p(&sdata->vif))) {
he_oper = NULL; he_oper = NULL;
eht_oper = NULL; eht_oper = NULL;
} }
/* don't check EHT if we associated as non-EHT station */ /* don't check EHT if we associated as non-EHT station */
if (link->u.mgd.conn_flags & IEEE80211_CONN_DISABLE_EHT || if (link->u.mgd.conn_flags & IEEE80211_CONN_DISABLE_EHT ||
!ieee80211_get_eht_iftype_cap(sband, !ieee80211_get_eht_iftype_cap_vif(sband, &sdata->vif))
ieee80211_vif_type_p2p(&sdata->vif)))
eht_oper = NULL; eht_oper = NULL;
/* /*
...@@ -776,8 +774,7 @@ static void ieee80211_add_he_ie(struct ieee80211_sub_if_data *sdata, ...@@ -776,8 +774,7 @@ static void ieee80211_add_he_ie(struct ieee80211_sub_if_data *sdata,
const struct ieee80211_sta_he_cap *he_cap; const struct ieee80211_sta_he_cap *he_cap;
u8 he_cap_size; u8 he_cap_size;
he_cap = ieee80211_get_he_iftype_cap(sband, he_cap = ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif);
ieee80211_vif_type_p2p(&sdata->vif));
if (WARN_ON(!he_cap)) if (WARN_ON(!he_cap))
return; return;
...@@ -806,10 +803,8 @@ static void ieee80211_add_eht_ie(struct ieee80211_sub_if_data *sdata, ...@@ -806,10 +803,8 @@ static void ieee80211_add_eht_ie(struct ieee80211_sub_if_data *sdata,
const struct ieee80211_sta_eht_cap *eht_cap; const struct ieee80211_sta_eht_cap *eht_cap;
u8 eht_cap_size; u8 eht_cap_size;
he_cap = ieee80211_get_he_iftype_cap(sband, he_cap = ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif);
ieee80211_vif_type_p2p(&sdata->vif)); eht_cap = ieee80211_get_eht_iftype_cap_vif(sband, &sdata->vif);
eht_cap = ieee80211_get_eht_iftype_cap(sband,
ieee80211_vif_type_p2p(&sdata->vif));
/* /*
* EHT capabilities element is only added if the HE capabilities element * EHT capabilities element is only added if the HE capabilities element
...@@ -3945,8 +3940,7 @@ static bool ieee80211_twt_req_supported(struct ieee80211_sub_if_data *sdata, ...@@ -3945,8 +3940,7 @@ static bool ieee80211_twt_req_supported(struct ieee80211_sub_if_data *sdata,
const struct ieee802_11_elems *elems) const struct ieee802_11_elems *elems)
{ {
const struct ieee80211_sta_he_cap *own_he_cap = const struct ieee80211_sta_he_cap *own_he_cap =
ieee80211_get_he_iftype_cap(sband, ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif);
ieee80211_vif_type_p2p(&sdata->vif));
if (elems->ext_capab_len < 10) if (elems->ext_capab_len < 10)
return false; return false;
...@@ -3982,8 +3976,7 @@ static bool ieee80211_twt_bcast_support(struct ieee80211_sub_if_data *sdata, ...@@ -3982,8 +3976,7 @@ static bool ieee80211_twt_bcast_support(struct ieee80211_sub_if_data *sdata,
struct link_sta_info *link_sta) struct link_sta_info *link_sta)
{ {
const struct ieee80211_sta_he_cap *own_he_cap = const struct ieee80211_sta_he_cap *own_he_cap =
ieee80211_get_he_iftype_cap(sband, ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif);
ieee80211_vif_type_p2p(&sdata->vif));
return bss_conf->he_support && return bss_conf->he_support &&
(link_sta->pub->he_cap.he_cap_elem.mac_cap_info[2] & (link_sta->pub->he_cap.he_cap_elem.mac_cap_info[2] &
...@@ -4620,8 +4613,7 @@ ieee80211_verify_sta_he_mcs_support(struct ieee80211_sub_if_data *sdata, ...@@ -4620,8 +4613,7 @@ ieee80211_verify_sta_he_mcs_support(struct ieee80211_sub_if_data *sdata,
const struct ieee80211_he_operation *he_op) const struct ieee80211_he_operation *he_op)
{ {
const struct ieee80211_sta_he_cap *sta_he_cap = const struct ieee80211_sta_he_cap *sta_he_cap =
ieee80211_get_he_iftype_cap(sband, ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif);
ieee80211_vif_type_p2p(&sdata->vif));
u16 ap_min_req_set; u16 ap_min_req_set;
int i; int i;
...@@ -4755,15 +4747,13 @@ static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata, ...@@ -4755,15 +4747,13 @@ static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata,
*conn_flags |= IEEE80211_CONN_DISABLE_EHT; *conn_flags |= IEEE80211_CONN_DISABLE_EHT;
} }
if (!ieee80211_get_he_iftype_cap(sband, if (!ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif)) {
ieee80211_vif_type_p2p(&sdata->vif))) {
mlme_dbg(sdata, "HE not supported, disabling HE and EHT\n"); mlme_dbg(sdata, "HE not supported, disabling HE and EHT\n");
*conn_flags |= IEEE80211_CONN_DISABLE_HE; *conn_flags |= IEEE80211_CONN_DISABLE_HE;
*conn_flags |= IEEE80211_CONN_DISABLE_EHT; *conn_flags |= IEEE80211_CONN_DISABLE_EHT;
} }
if (!ieee80211_get_eht_iftype_cap(sband, if (!ieee80211_get_eht_iftype_cap_vif(sband, &sdata->vif)) {
ieee80211_vif_type_p2p(&sdata->vif))) {
mlme_dbg(sdata, "EHT not supported, disabling EHT\n"); mlme_dbg(sdata, "EHT not supported, disabling EHT\n");
*conn_flags |= IEEE80211_CONN_DISABLE_EHT; *conn_flags |= IEEE80211_CONN_DISABLE_EHT;
} }
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* Copyright 2007 Johannes Berg <johannes@sipsolutions.net> * Copyright 2007 Johannes Berg <johannes@sipsolutions.net>
* Copyright 2013-2014 Intel Mobile Communications GmbH * Copyright 2013-2014 Intel Mobile Communications GmbH
* Copyright (C) 2015-2017 Intel Deutschland GmbH * Copyright (C) 2015-2017 Intel Deutschland GmbH
* Copyright (C) 2018-2022 Intel Corporation * Copyright (C) 2018-2023 Intel Corporation
* *
* utilities for mac80211 * utilities for mac80211
*/ */
...@@ -2121,8 +2121,7 @@ static int ieee80211_build_preq_ies_band(struct ieee80211_sub_if_data *sdata, ...@@ -2121,8 +2121,7 @@ static int ieee80211_build_preq_ies_band(struct ieee80211_sub_if_data *sdata,
*offset = noffset; *offset = noffset;
} }
he_cap = ieee80211_get_he_iftype_cap(sband, he_cap = ieee80211_get_he_iftype_cap_vif(sband, &sdata->vif);
ieee80211_vif_type_p2p(&sdata->vif));
if (he_cap && if (he_cap &&
cfg80211_any_usable_channels(local->hw.wiphy, BIT(sband->band), cfg80211_any_usable_channels(local->hw.wiphy, BIT(sband->band),
IEEE80211_CHAN_NO_HE)) { IEEE80211_CHAN_NO_HE)) {
...@@ -2131,8 +2130,7 @@ static int ieee80211_build_preq_ies_band(struct ieee80211_sub_if_data *sdata, ...@@ -2131,8 +2130,7 @@ static int ieee80211_build_preq_ies_band(struct ieee80211_sub_if_data *sdata,
goto out_err; goto out_err;
} }
eht_cap = ieee80211_get_eht_iftype_cap(sband, eht_cap = ieee80211_get_eht_iftype_cap_vif(sband, &sdata->vif);
ieee80211_vif_type_p2p(&sdata->vif));
if (eht_cap && if (eht_cap &&
cfg80211_any_usable_channels(local->hw.wiphy, BIT(sband->band), cfg80211_any_usable_channels(local->hw.wiphy, BIT(sband->band),
...@@ -2150,8 +2148,7 @@ static int ieee80211_build_preq_ies_band(struct ieee80211_sub_if_data *sdata, ...@@ -2150,8 +2148,7 @@ static int ieee80211_build_preq_ies_band(struct ieee80211_sub_if_data *sdata,
struct ieee80211_supported_band *sband6; struct ieee80211_supported_band *sband6;
sband6 = local->hw.wiphy->bands[NL80211_BAND_6GHZ]; sband6 = local->hw.wiphy->bands[NL80211_BAND_6GHZ];
he_cap = ieee80211_get_he_iftype_cap(sband6, he_cap = ieee80211_get_he_iftype_cap_vif(sband6, &sdata->vif);
ieee80211_vif_type_p2p(&sdata->vif));
if (he_cap) { if (he_cap) {
enum nl80211_iftype iftype = enum nl80211_iftype iftype =
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment