Message ID | 20231116173246.40458-1-prestwoj@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 63b896629353157e8ca77cabdfab340b5c69ca59 |
Delegated to: | Kalle Valo |
Headers | show |
Series | [v2] wifi: ath10k: add support to allow broadcast action frame RX | expand |
On 11/16/2023 9:32 AM, James Prestwood wrote: > Broadcast action frames are needed for the Device Provisioning > Protocol (DPP) for Presence and PKEX Exchange requests. Currently > just ath9k has this capability so this is being enabled for > ath10k (for at least one hardware variant). > > Add a new capability flag in ath10k_hw_params to indicate support > for receiving multicast action frames. This bit is then checked > when configuring the RX filter and (if set) multicast action frame > registration is enabled. > > Until more hardware can be tested only the "qca6174 hw3.2" variant > is enabling this feature. > > Note: I went ahead and removed the 'changed_flags' mask operation > since it had no effect, that parameter was not being used anywhere. > > Tested-on: QCA6174 hw3.2 WLAN.RM.4.4.1-00288- > > Signed-off-by: James Prestwood <prestwoj@gmail.com> > --- > drivers/net/wireless/ath/ath10k/core.c | 1 + > drivers/net/wireless/ath/ath10k/hw.h | 3 +++ > drivers/net/wireless/ath/ath10k/mac.c | 14 +++++++++++--- > 3 files changed, 15 insertions(+), 3 deletions(-) > > v2: > * Add flag in ath10k_hw_params and only set FIF_MCAST_ACTION > if that hardware allows it. > > diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c > index 5eb131ab916f..f2077756ffdf 100644 > --- a/drivers/net/wireless/ath/ath10k/core.c > +++ b/drivers/net/wireless/ath/ath10k/core.c > @@ -381,6 +381,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { > .hw_restart_disconnect = false, > .use_fw_tx_credits = true, > .delay_unmap_buffer = false, > + .mcast_frame_registration = true, > }, > { > .id = QCA99X0_HW_2_0_DEV_VERSION, > diff --git a/drivers/net/wireless/ath/ath10k/hw.h b/drivers/net/wireless/ath/ath10k/hw.h > index 9643031a4427..2aeb52c7f189 100644 > --- a/drivers/net/wireless/ath/ath10k/hw.h > +++ b/drivers/net/wireless/ath/ath10k/hw.h > @@ -639,6 +639,9 @@ struct ath10k_hw_params { > bool use_fw_tx_credits; > > bool delay_unmap_buffer; > + > + /* The hardware support multicast frame registrations */ > + bool mcast_frame_registration; > }; > > struct htt_resp; > diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c > index ec8d5b29bc72..0d0de3646d31 100644 > --- a/drivers/net/wireless/ath/ath10k/mac.c > +++ b/drivers/net/wireless/ath/ath10k/mac.c > @@ -1249,7 +1249,7 @@ static bool ath10k_mac_monitor_vdev_is_needed(struct ath10k *ar) > return ar->monitor || > (!test_bit(ATH10K_FW_FEATURE_ALLOWS_MESH_BCAST, > ar->running_fw->fw_file.fw_features) && > - (ar->filter_flags & FIF_OTHER_BSS)) || > + (ar->filter_flags & (FIF_OTHER_BSS | FIF_MCAST_ACTION))) || > test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags); > } > > @@ -6027,11 +6027,15 @@ static void ath10k_configure_filter(struct ieee80211_hw *hw, > { > struct ath10k *ar = hw->priv; > int ret; > + unsigned int supported = SUPPORTED_FILTERS; > > mutex_lock(&ar->conf_mutex); > > - changed_flags &= SUPPORTED_FILTERS; > - *total_flags &= SUPPORTED_FILTERS; > + if (ar->hw_params.mcast_frame_registration) > + supported |= FIF_MCAST_ACTION; > + > + *total_flags &= supported; > + > ar->filter_flags = *total_flags; > > ret = ath10k_monitor_recalc(ar); > @@ -10114,6 +10118,10 @@ int ath10k_mac_register(struct ath10k *ar) > NL80211_EXT_FEATURE_SET_SCAN_DWELL); > wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_AQL); > > + if (ar->hw_params.mcast_frame_registration) > + wiphy_ext_feature_set(ar->hw->wiphy, > + NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS); > + > if (test_bit(WMI_SERVICE_TX_DATA_ACK_RSSI, ar->wmi.svc_map) || > test_bit(WMI_SERVICE_HTT_MGMT_TX_COMP_VALID_FLAGS, ar->wmi.svc_map)) > wiphy_ext_feature_set(ar->hw->wiphy, +ath10k mailing list for visibility (note I scan ath10/11/12k mailing lists constantly but due to the volume only scan linux-wireless every few days)
On 11/16/2023 9:32 AM, James Prestwood wrote: > Broadcast action frames are needed for the Device Provisioning > Protocol (DPP) for Presence and PKEX Exchange requests. Currently > just ath9k has this capability so this is being enabled for > ath10k (for at least one hardware variant). > > Add a new capability flag in ath10k_hw_params to indicate support > for receiving multicast action frames. This bit is then checked > when configuring the RX filter and (if set) multicast action frame > registration is enabled. > > Until more hardware can be tested only the "qca6174 hw3.2" variant > is enabling this feature. > > Note: I went ahead and removed the 'changed_flags' mask operation > since it had no effect, that parameter was not being used anywhere. > > Tested-on: QCA6174 hw3.2 WLAN.RM.4.4.1-00288- > > Signed-off-by: James Prestwood <prestwoj@gmail.com> > --- > drivers/net/wireless/ath/ath10k/core.c | 1 + > drivers/net/wireless/ath/ath10k/hw.h | 3 +++ > drivers/net/wireless/ath/ath10k/mac.c | 14 +++++++++++--- > 3 files changed, 15 insertions(+), 3 deletions(-) > > v2: > * Add flag in ath10k_hw_params and only set FIF_MCAST_ACTION > if that hardware allows it. > > diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c > index 5eb131ab916f..f2077756ffdf 100644 > --- a/drivers/net/wireless/ath/ath10k/core.c > +++ b/drivers/net/wireless/ath/ath10k/core.c > @@ -381,6 +381,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { > .hw_restart_disconnect = false, > .use_fw_tx_credits = true, > .delay_unmap_buffer = false, > + .mcast_frame_registration = true, > }, > { > .id = QCA99X0_HW_2_0_DEV_VERSION, > diff --git a/drivers/net/wireless/ath/ath10k/hw.h b/drivers/net/wireless/ath/ath10k/hw.h > index 9643031a4427..2aeb52c7f189 100644 > --- a/drivers/net/wireless/ath/ath10k/hw.h > +++ b/drivers/net/wireless/ath/ath10k/hw.h > @@ -639,6 +639,9 @@ struct ath10k_hw_params { > bool use_fw_tx_credits; > > bool delay_unmap_buffer; > + > + /* The hardware support multicast frame registrations */ > + bool mcast_frame_registration; > }; > > struct htt_resp; > diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c > index ec8d5b29bc72..0d0de3646d31 100644 > --- a/drivers/net/wireless/ath/ath10k/mac.c > +++ b/drivers/net/wireless/ath/ath10k/mac.c > @@ -1249,7 +1249,7 @@ static bool ath10k_mac_monitor_vdev_is_needed(struct ath10k *ar) > return ar->monitor || > (!test_bit(ATH10K_FW_FEATURE_ALLOWS_MESH_BCAST, > ar->running_fw->fw_file.fw_features) && > - (ar->filter_flags & FIF_OTHER_BSS)) || > + (ar->filter_flags & (FIF_OTHER_BSS | FIF_MCAST_ACTION))) || > test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags); > } > > @@ -6027,11 +6027,15 @@ static void ath10k_configure_filter(struct ieee80211_hw *hw, > { > struct ath10k *ar = hw->priv; > int ret; > + unsigned int supported = SUPPORTED_FILTERS; > > mutex_lock(&ar->conf_mutex); > > - changed_flags &= SUPPORTED_FILTERS; > - *total_flags &= SUPPORTED_FILTERS; > + if (ar->hw_params.mcast_frame_registration) > + supported |= FIF_MCAST_ACTION; > + > + *total_flags &= supported; > + > ar->filter_flags = *total_flags; > > ret = ath10k_monitor_recalc(ar); > @@ -10114,6 +10118,10 @@ int ath10k_mac_register(struct ath10k *ar) > NL80211_EXT_FEATURE_SET_SCAN_DWELL); > wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_AQL); > > + if (ar->hw_params.mcast_frame_registration) > + wiphy_ext_feature_set(ar->hw->wiphy, > + NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS); > + > if (test_bit(WMI_SERVICE_TX_DATA_ACK_RSSI, ar->wmi.svc_map) || > test_bit(WMI_SERVICE_HTT_MGMT_TX_COMP_VALID_FLAGS, ar->wmi.svc_map)) > wiphy_ext_feature_set(ar->hw->wiphy, Actually add the ath10k list this time. Sigh.
James Prestwood <prestwoj@gmail.com> wrote: > Broadcast action frames are needed for the Device Provisioning > Protocol (DPP) for Presence and PKEX Exchange requests. Currently > just ath9k has this capability so this is being enabled for > ath10k (for at least one hardware variant). > > Add a new capability flag in ath10k_hw_params to indicate support > for receiving multicast action frames. This bit is then checked > when configuring the RX filter and (if set) multicast action frame > registration is enabled. > > Until more hardware can be tested only the "qca6174 hw3.2" variant > is enabling this feature. > > Note: I went ahead and removed the 'changed_flags' mask operation > since it had no effect, that parameter was not being used anywhere. > > Tested-on: QCA6174 hw3.2 WLAN.RM.4.4.1-00288- > > Signed-off-by: James Prestwood <prestwoj@gmail.com> > Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> This had a simple conflict in ath10k_configure_filter() and I fixed it in the pending branch, please check: https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/commit/?h=pending&id=cc9f5dfd74f93ae6f596bccc3a5b92fe3f18c439 In the future please use ath.git master branch as the baseline for ath driver patches.
Hi Kalle, On 11/29/23 03:59, Kalle Valo wrote: > James Prestwood <prestwoj@gmail.com> wrote: > >> Broadcast action frames are needed for the Device Provisioning >> Protocol (DPP) for Presence and PKEX Exchange requests. Currently >> just ath9k has this capability so this is being enabled for >> ath10k (for at least one hardware variant). >> >> Add a new capability flag in ath10k_hw_params to indicate support >> for receiving multicast action frames. This bit is then checked >> when configuring the RX filter and (if set) multicast action frame >> registration is enabled. >> >> Until more hardware can be tested only the "qca6174 hw3.2" variant >> is enabling this feature. >> >> Note: I went ahead and removed the 'changed_flags' mask operation >> since it had no effect, that parameter was not being used anywhere. >> >> Tested-on: QCA6174 hw3.2 WLAN.RM.4.4.1-00288- >> >> Signed-off-by: James Prestwood <prestwoj@gmail.com> >> Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> > This had a simple conflict in ath10k_configure_filter() and I fixed it in the > pending branch, please check: > > https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/commit/?h=pending&id=cc9f5dfd74f93ae6f596bccc3a5b92fe3f18c439 > > In the future please use ath.git master branch as the baseline for ath driver patches. Thank you for resolving that, and I'll use ath.git in the future. Thanks, James
Jeff Johnson <quic_jjohnson@quicinc.com> writes: > On 11/16/2023 9:32 AM, James Prestwood wrote: > >> Broadcast action frames are needed for the Device Provisioning >> Protocol (DPP) for Presence and PKEX Exchange requests. Currently >> just ath9k has this capability so this is being enabled for >> ath10k (for at least one hardware variant). >> >> Add a new capability flag in ath10k_hw_params to indicate support >> for receiving multicast action frames. This bit is then checked >> when configuring the RX filter and (if set) multicast action frame >> registration is enabled. >> >> Until more hardware can be tested only the "qca6174 hw3.2" variant >> is enabling this feature. >> >> Note: I went ahead and removed the 'changed_flags' mask operation >> since it had no effect, that parameter was not being used anywhere. >> >> Tested-on: QCA6174 hw3.2 WLAN.RM.4.4.1-00288- >> >> Signed-off-by: James Prestwood <prestwoj@gmail.com> [...] >> --- a/drivers/net/wireless/ath/ath10k/core.c >> +++ b/drivers/net/wireless/ath/ath10k/core.c >> @@ -381,6 +381,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { >> .hw_restart_disconnect = false, >> .use_fw_tx_credits = true, >> .delay_unmap_buffer = false, >> + .mcast_frame_registration = true, I forgot to mention that I prefer explicitly setting the false cases as well so I added those in the pending branch: https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git/commit/?h=pending&id=51daeadfbecc13b2ce8a9a4b7697e4056cbb358f
James Prestwood <prestwoj@gmail.com> wrote: > Broadcast action frames are needed for the Device Provisioning > Protocol (DPP) for Presence and PKEX Exchange requests. Currently > just ath9k has this capability so this is being enabled for > ath10k (for at least one hardware variant). > > Add a new capability flag in ath10k_hw_params to indicate support > for receiving multicast action frames. This bit is then checked > when configuring the RX filter and (if set) multicast action frame > registration is enabled. > > Until more hardware can be tested only the "qca6174 hw3.2" variant > is enabling this feature. > > Note: I went ahead and removed the 'changed_flags' mask operation > since it had no effect, that parameter was not being used anywhere. > > Tested-on: QCA6174 hw3.2 WLAN.RM.4.4.1-00288- > > Signed-off-by: James Prestwood <prestwoj@gmail.com> > Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> Patch applied to ath-next branch of ath.git, thanks. 63b896629353 wifi: ath10k: add support to allow broadcast action frame RX
diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c index 5eb131ab916f..f2077756ffdf 100644 --- a/drivers/net/wireless/ath/ath10k/core.c +++ b/drivers/net/wireless/ath/ath10k/core.c @@ -381,6 +381,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = { .hw_restart_disconnect = false, .use_fw_tx_credits = true, .delay_unmap_buffer = false, + .mcast_frame_registration = true, }, { .id = QCA99X0_HW_2_0_DEV_VERSION, diff --git a/drivers/net/wireless/ath/ath10k/hw.h b/drivers/net/wireless/ath/ath10k/hw.h index 9643031a4427..2aeb52c7f189 100644 --- a/drivers/net/wireless/ath/ath10k/hw.h +++ b/drivers/net/wireless/ath/ath10k/hw.h @@ -639,6 +639,9 @@ struct ath10k_hw_params { bool use_fw_tx_credits; bool delay_unmap_buffer; + + /* The hardware support multicast frame registrations */ + bool mcast_frame_registration; }; struct htt_resp; diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c index ec8d5b29bc72..0d0de3646d31 100644 --- a/drivers/net/wireless/ath/ath10k/mac.c +++ b/drivers/net/wireless/ath/ath10k/mac.c @@ -1249,7 +1249,7 @@ static bool ath10k_mac_monitor_vdev_is_needed(struct ath10k *ar) return ar->monitor || (!test_bit(ATH10K_FW_FEATURE_ALLOWS_MESH_BCAST, ar->running_fw->fw_file.fw_features) && - (ar->filter_flags & FIF_OTHER_BSS)) || + (ar->filter_flags & (FIF_OTHER_BSS | FIF_MCAST_ACTION))) || test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags); } @@ -6027,11 +6027,15 @@ static void ath10k_configure_filter(struct ieee80211_hw *hw, { struct ath10k *ar = hw->priv; int ret; + unsigned int supported = SUPPORTED_FILTERS; mutex_lock(&ar->conf_mutex); - changed_flags &= SUPPORTED_FILTERS; - *total_flags &= SUPPORTED_FILTERS; + if (ar->hw_params.mcast_frame_registration) + supported |= FIF_MCAST_ACTION; + + *total_flags &= supported; + ar->filter_flags = *total_flags; ret = ath10k_monitor_recalc(ar); @@ -10114,6 +10118,10 @@ int ath10k_mac_register(struct ath10k *ar) NL80211_EXT_FEATURE_SET_SCAN_DWELL); wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_AQL); + if (ar->hw_params.mcast_frame_registration) + wiphy_ext_feature_set(ar->hw->wiphy, + NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS); + if (test_bit(WMI_SERVICE_TX_DATA_ACK_RSSI, ar->wmi.svc_map) || test_bit(WMI_SERVICE_HTT_MGMT_TX_COMP_VALID_FLAGS, ar->wmi.svc_map)) wiphy_ext_feature_set(ar->hw->wiphy,
Broadcast action frames are needed for the Device Provisioning Protocol (DPP) for Presence and PKEX Exchange requests. Currently just ath9k has this capability so this is being enabled for ath10k (for at least one hardware variant). Add a new capability flag in ath10k_hw_params to indicate support for receiving multicast action frames. This bit is then checked when configuring the RX filter and (if set) multicast action frame registration is enabled. Until more hardware can be tested only the "qca6174 hw3.2" variant is enabling this feature. Note: I went ahead and removed the 'changed_flags' mask operation since it had no effect, that parameter was not being used anywhere. Tested-on: QCA6174 hw3.2 WLAN.RM.4.4.1-00288- Signed-off-by: James Prestwood <prestwoj@gmail.com> --- drivers/net/wireless/ath/ath10k/core.c | 1 + drivers/net/wireless/ath/ath10k/hw.h | 3 +++ drivers/net/wireless/ath/ath10k/mac.c | 14 +++++++++++--- 3 files changed, 15 insertions(+), 3 deletions(-) v2: * Add flag in ath10k_hw_params and only set FIF_MCAST_ACTION if that hardware allows it.