On Mon, Jun 07, 2010 at 12:00:24PM +0200, Stanislaw Gruszka wrote: > commit e1b3ec1a2a336c328c336cfa5485a5f0484cc90d upstream. > > Add interface to disable/enable QoS (aka WMM or WME). Currently drivers > enable it explicitly when ->conf_tx method is called, and newer disable. > Disabling is needed for some APs, which do not support QoS, such > we should send QoS frames to them. Why is this a patch for a -stable tree? It looks like it adds a new api for a new feature, right? confused, greg k-h > > Signed-off-by: Stanislaw Gruszka <sgruszka@xxxxxxxxxx> > --- > include/net/mac80211.h | 5 +++++ > net/mac80211/mlme.c | 9 ++++++++- > net/mac80211/util.c | 5 +++++ > 3 files changed, 18 insertions(+), 1 deletions(-) > > diff --git a/include/net/mac80211.h b/include/net/mac80211.h > index f39b303..8c1f0ee 100644 > --- a/include/net/mac80211.h > +++ b/include/net/mac80211.h > @@ -577,11 +577,15 @@ struct ieee80211_rx_status { > * may turn the device off as much as possible. Typically, this flag will > * be set when an interface is set UP but not associated or scanning, but > * it can also be unset in that case when monitor interfaces are active. > + * @IEEE80211_CONF_QOS: Enable 802.11e QoS also know as WMM (Wireless > + * Multimedia). On some drivers (iwlwifi is one of know) we have > + * to enable/disable QoS explicitly. > */ > enum ieee80211_conf_flags { > IEEE80211_CONF_MONITOR = (1<<0), > IEEE80211_CONF_PS = (1<<1), > IEEE80211_CONF_IDLE = (1<<2), > + IEEE80211_CONF_QOS = (1<<3), > }; > > > @@ -604,6 +608,7 @@ enum ieee80211_conf_changed { > IEEE80211_CONF_CHANGE_CHANNEL = BIT(6), > IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7), > IEEE80211_CONF_CHANGE_IDLE = BIT(8), > + IEEE80211_CONF_CHANGE_QOS = BIT(9), > }; > > /** > diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c > index 1a209ac..950088d 100644 > --- a/net/mac80211/mlme.c > +++ b/net/mac80211/mlme.c > @@ -798,6 +798,9 @@ static void ieee80211_sta_wmm_params(struct ieee80211_local *local, > int count; > u8 *pos; > > + if (!local->ops->conf_tx) > + return; > + > if (!(ifmgd->flags & IEEE80211_STA_WMM_ENABLED)) > return; > > @@ -856,11 +859,15 @@ static void ieee80211_sta_wmm_params(struct ieee80211_local *local, > wiphy_name(local->hw.wiphy), queue, aci, acm, > params.aifs, params.cw_min, params.cw_max, params.txop); > #endif > - if (drv_conf_tx(local, queue, ¶ms) && local->ops->conf_tx) > + if (drv_conf_tx(local, queue, ¶ms)) > printk(KERN_DEBUG "%s: failed to set TX queue " > "parameters for queue %d\n", > wiphy_name(local->hw.wiphy), queue); > } > + > + /* enable WMM or activate new settings */ > + local->hw.conf.flags |= IEEE80211_CONF_QOS; > + drv_config(local, IEEE80211_CONF_CHANGE_QOS); > } > > static u32 ieee80211_handle_bss_capability(struct ieee80211_sub_if_data *sdata, > diff --git a/net/mac80211/util.c b/net/mac80211/util.c > index 27212e8..9e35dcb 100644 > --- a/net/mac80211/util.c > +++ b/net/mac80211/util.c > @@ -795,6 +795,11 @@ void ieee80211_set_wmm_default(struct ieee80211_sub_if_data *sdata) > > drv_conf_tx(local, queue, &qparam); > } > + > + /* after reinitialize QoS TX queues setting to default, > + * disable QoS at all */ > + local->hw.conf.flags &= ~IEEE80211_CONF_QOS; > + drv_config(local, IEEE80211_CONF_CHANGE_QOS); > } > > void ieee80211_sta_def_wmm_params(struct ieee80211_sub_if_data *sdata, > -- > 1.6.2.5 > > _______________________________________________ > stable mailing list > stable@xxxxxxxxxxxxxxxx > http://linux.kernel.org/mailman/listinfo/stable -- 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