Search Linux Wireless

Re: [PATCH v4] cfg80211: Restore orig channel values upon disconnect

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

 



And this is also RFC.. not [PATCH] yet.

 Luis

On Mon, Nov 28, 2011 at 6:07 PM, Luis R. Rodriguez
<mcgrof@xxxxxxxxxxxxxxxx> wrote:
> From: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
>
> When we restore regulatory settings the world regulatory domain
> is properly reset on cfg80211 (or user prefered regulatory domain)
> but we were never setting back channel values for drivers that use
> WIPHY_FLAG_CUSTOM_REGULATORY. Set these values up again by using
> the orig_ channel parameters.
>
> This fixes restoring custom regulatory settings upon disconnect
> events.
>
> Cc: compat@xxxxxxxxxxxxx
> Cc: Paul Stewart <pstew@xxxxxxxxxx>
> Cc: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
> Cc: Senthilkumar Balasubramanian <senthilb@xxxxxxxxxxxxxxxx>
> Signed-off-by: Rajkumar Manoharan <rmanohar@xxxxxxxxxxxxxxxx>
> Signed-off-by: Luis R. Rodriguez <mcgrof@xxxxxxxxxxxxxxxx>
> ---
>
> Sorry here is my fixed patch which ammend's Rajkumar's original patch,
> I had not commited my changes to his patch.
>
>  net/wireless/reg.c |   26 ++++++++++++++++++++++++++
>  1 files changed, 26 insertions(+), 0 deletions(-)
>
> diff --git a/net/wireless/reg.c b/net/wireless/reg.c
> index 4fe396a..504d3f1 100644
> --- a/net/wireless/reg.c
> +++ b/net/wireless/reg.c
> @@ -1780,6 +1780,26 @@ static void restore_alpha2(char *alpha2, bool reset_user)
>                REG_DBG_PRINT("Restoring regulatory settings\n");
>  }
>
> +static void restore_custom_reg_settings(struct wiphy *wiphy)
> +{
> +       struct ieee80211_supported_band *sband;
> +       enum ieee80211_band band;
> +       struct ieee80211_channel *chan;
> +       int i;
> +
> +       for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
> +               sband = wiphy->bands[band];
> +               if (!sband)
> +                       continue;
> +               for (i = 0; i < sband->n_channels; i++) {
> +                       chan = &sband->channels[i];
> +                       chan->flags = chan->orig_flags;
> +                       chan->max_antenna_gain = chan->orig_mag;
> +                       chan->max_power = chan->orig_mpwr;
> +               }
> +       }
> +}
> +
>  /*
>  * Restoring regulatory settings involves ingoring any
>  * possibly stale country IE information and user regulatory
> @@ -1801,6 +1821,7 @@ static void restore_regulatory_settings(bool reset_user)
>        struct reg_beacon *reg_beacon, *btmp;
>        struct regulatory_request *reg_request, *tmp;
>        LIST_HEAD(tmp_reg_req_list);
> +       struct cfg80211_registered_device *rdev;
>
>        mutex_lock(&cfg80211_mutex);
>        mutex_lock(&reg_mutex);
> @@ -1853,6 +1874,11 @@ static void restore_regulatory_settings(bool reset_user)
>                kfree(last_request);
>        last_request = &core_request_world;
>
> +       list_for_each_entry(rdev, &cfg80211_rdev_list, list) {
> +               if (rdev->wiphy.flags & WIPHY_FLAG_CUSTOM_REGULATORY)
> +                       restore_custom_reg_settings(&rdev->wiphy);
> +       }
> +
>        mutex_unlock(&reg_mutex);
>        mutex_unlock(&cfg80211_mutex);
>
> --
> 1.7.4.15.g7811d
>
>
--
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