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(®_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(®_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