[PATCH v2 1/2] wifi: cfg80211: Add beacon hint notifier support

Abhishek Kumar kuabhs at chromium.org
Sun Jun 11 12:37:32 PDT 2023


On Thu, Mar 2, 2023 at 1:57 AM Youghandhar Chintala
<quic_youghand at quicinc.com> wrote:
>
> There are connection failures in hidden SSID case when the device is
> with default reg domain WW.
> For WW reg domain most of the 5 GHz channels are passive. When device
> listens to the beacon on that channel, the driver is updating its
> channel flag but firmware is not aware of it and firmware is not
> sending probes on that channels.
> Due to this, we are seeing connection failures when the device is trying
> to connect with hidden SSID AP.
>
> In the case of devices using the ath10k driver, it is required to update
> the change in channel flags to firmware as well. Therefore, we need a
> mechanism to notify the driver from the regulatory core regarding the
> channel flag changes.
> Adding a beacon hint notifier logic, so that drivers can register
> callbacks to get notified whenever there is a change in channel flags.
>
> Signed-off-by: Youghandhar Chintala <quic_youghand at quicinc.com>
> ---
>  include/net/cfg80211.h | 7 +++++++
>  net/wireless/reg.c     | 5 ++++-
>  2 files changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
> index 11a370e64143..7a00f5317e1f 100644
> --- a/include/net/cfg80211.h
> +++ b/include/net/cfg80211.h
> @@ -5096,6 +5096,10 @@ struct wiphy_iftype_akm_suites {
>   * @reg_notifier: the driver's regulatory notification callback,
>   *     note that if your driver uses wiphy_apply_custom_regulatory()
>   *     the reg_notifier's request can be passed as NULL
> + * @beacon_hint_notifier: the driver's beacon hint notification callback,
> + *     which will trigger when there is channel flag updates seen in
> + *     beacon hints. The beacon_hint_notifier's request can be passed
> + *     with chan context.
>   * @regd: the driver's regulatory domain, if one was requested via
>   *     the regulatory_hint() API. This can be used by the driver
>   *     on the reg_notifier() if it chooses to ignore future
> @@ -5386,6 +5390,9 @@ struct wiphy {
>         void (*reg_notifier)(struct wiphy *wiphy,
>                              struct regulatory_request *request);
>
> +       void (*beacon_hint_notifier)(struct wiphy *wiphy,
> +                                    struct ieee80211_channel *chan);
Is the second argument required. Your 2/2 patch does not use this
argument and thus will cause build failure. If it is not used, I would
recommend to drop it.
> +
>         /* fields below are read-only, assigned by cfg80211 */
>
>         const struct ieee80211_regdomain __rcu *regd;
> diff --git a/net/wireless/reg.c b/net/wireless/reg.c
> index c3d950d29432..2dc6880a28c5 100644
> --- a/net/wireless/reg.c
> +++ b/net/wireless/reg.c
> @@ -2219,8 +2219,11 @@ static void handle_reg_beacon(struct wiphy *wiphy, unsigned int chan_idx,
>                 channel_changed = true;
>         }
>
> -       if (channel_changed)
> +       if (channel_changed) {
>                 nl80211_send_beacon_hint_event(wiphy, &chan_before, chan);
> +               if (wiphy->beacon_hint_notifier)
> +                       wiphy->beacon_hint_notifier(wiphy, chan);
> +       }
>  }
>
>  /*
> --
> 2.38.0
>

Thanks
Abhishek



More information about the ath10k mailing list