Search Linux Wireless

Re: [PATCH 3/4] ath9k: Restore EEPROM regulatory upon STA disconnect

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Dec 07, 2011 at 01:37:49PM -0800, Luis R. Rodriguez wrote:
> On Wed, Dec 7, 2011 at 5:53 AM, Rajkumar Manoharan
> <rmanohar@xxxxxxxxxxxxxxxx> wrote:
> > The current regulatory for world roaming mode cards might be
> > overriden by country IE from the assiciated AP. But these
> > regulatory values are failed to be restored on disconnection.
> > This patch ensures to resotre regulatry values at driver side.
> >
> > Signed-off-by: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
> > ---
> >  drivers/net/wireless/ath/ath9k/main.c |    8 ++++++++
> >  1 files changed, 8 insertions(+), 0 deletions(-)
> >
> > diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
> > index 424289f..a4dbb7b 100644
> > --- a/drivers/net/wireless/ath/ath9k/main.c
> > +++ b/drivers/net/wireless/ath/ath9k/main.c
> > @@ -2046,6 +2046,14 @@ static void ath9k_config_bss(struct ath_softc *sc, struct ieee80211_vif *vif)
> >                sc->sc_flags &= ~SC_OP_ANI_RUN;
> >                del_timer_sync(&common->ani.timer);
> >                memset(&sc->caldata, 0, sizeof(sc->caldata));
> > +               /*
> > +                * Restore regulatory values that might be updated
> > +                * by country IEs.
> > +                */
> > +               if (!ath_is_world_regd(&common->regulatory) &&
> > +                   ath_is_world_regd(&common->reg_world_copy))
> > +                       memcpy(&common->regulatory, &common->reg_world_copy,
> > +                              sizeof(struct ath_regulatory));
> >        }
> 
> NACK, this patch should not be required given that patch [2/4] in this
> series restores this on the reg_notifier() for the
> NL80211_REGDOM_SET_BY_CORE case -- the trick is that when cfg80211
> detects not only a disconnect, but any regulatory restore, it will
> *always* send a reg core hint! Again the hunk from patch [2/4] was:
> 
> @@ -363,14 +381,37 @@ int ath_reg_notifier_apply(struct wiphy *wiphy,
>                return 0;
> 
>        switch (request->initiator) {
> -       case NL80211_REGDOM_SET_BY_DRIVER:
>        case NL80211_REGDOM_SET_BY_CORE:
> +               /*
> +                * If common->reg_world_copy is world roaming it means we *were*
> +                * world roaming... so we now have to restore that data.
> +                */
> +               if (!ath_is_world_regd(&common->reg_world_copy))
> +                       break;
> +
> +               memcpy(reg, &common->reg_world_copy,
> +                      sizeof(struct ath_regulatory));
> +               break;
> +       case NL80211_REGDOM_SET_BY_DRIVER:
>        case NL80211_REGDOM_SET_BY_USER:
>                break;
> 
> Can you please test without this patch and ensure you get the data
> properly restored?
> 
But the regulatory updates are ignored for CUSTOM_REGULATORY cards
at wiphy_update_regulatory. Isn't it?

        if (initiator == NL80211_REGDOM_SET_BY_CORE &&
            wiphy->flags & WIPHY_FLAG_CUSTOM_REGULATORY) {
                REG_DBG_PRINT("Ignoring regulatory request %s "
                              "since the driver uses its own custom "
                              "regulatory domain\n",
                              reg_initiator_name(initiator));
                return true;

To ensure that the regulatory is restored always, I did it at bss_info_change.

--
Rajkumar
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux