struct ieee80211_local *local = sdata->local;
        struct ieee80211_tx_queue_params qparam;
        int ac;
-       bool use_11b;
+       bool use_11b, enable_qos;
        int aCWmin, aCWmax;
 
        if (!local->ops->conf_tx)
        use_11b = (local->hw.conf.channel->band == IEEE80211_BAND_2GHZ) &&
                 !(sdata->flags & IEEE80211_SDATA_OPERATING_GMODE);
 
+       /*
+        * By default disable QoS in STA mode for old access points, which do
+        * not support 802.11e. New APs will provide proper queue parameters,
+        * that we will configure later.
+        */
+       enable_qos = (sdata->vif.type != NL80211_IFTYPE_STATION);
+
        for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
                /* Set defaults according to 802.11-2007 Table 7-37 */
                aCWmax = 1023;
                else
                        aCWmin = 15;
 
-               switch (ac) {
-               case IEEE80211_AC_BK:
-                       qparam.cw_max = aCWmax;
-                       qparam.cw_min = aCWmin;
-                       qparam.txop = 0;
-                       qparam.aifs = 7;
-                       break;
-               default: /* never happens but let's not leave undefined */
-               case IEEE80211_AC_BE:
+               if (enable_qos) {
+                       switch (ac) {
+                       case IEEE80211_AC_BK:
+                               qparam.cw_max = aCWmax;
+                               qparam.cw_min = aCWmin;
+                               qparam.txop = 0;
+                               qparam.aifs = 7;
+                               break;
+                       /* never happens but let's not leave undefined */
+                       default:
+                       case IEEE80211_AC_BE:
+                               qparam.cw_max = aCWmax;
+                               qparam.cw_min = aCWmin;
+                               qparam.txop = 0;
+                               qparam.aifs = 3;
+                               break;
+                       case IEEE80211_AC_VI:
+                               qparam.cw_max = aCWmin;
+                               qparam.cw_min = (aCWmin + 1) / 2 - 1;
+                               if (use_11b)
+                                       qparam.txop = 6016/32;
+                               else
+                                       qparam.txop = 3008/32;
+                               qparam.aifs = 2;
+                               break;
+                       case IEEE80211_AC_VO:
+                               qparam.cw_max = (aCWmin + 1) / 2 - 1;
+                               qparam.cw_min = (aCWmin + 1) / 4 - 1;
+                               if (use_11b)
+                                       qparam.txop = 3264/32;
+                               else
+                                       qparam.txop = 1504/32;
+                               qparam.aifs = 2;
+                               break;
+                       }
+               } else {
+                       /* Confiure old 802.11b/g medium access rules. */
                        qparam.cw_max = aCWmax;
                        qparam.cw_min = aCWmin;
                        qparam.txop = 0;
-                       qparam.aifs = 3;
-                       break;
-               case IEEE80211_AC_VI:
-                       qparam.cw_max = aCWmin;
-                       qparam.cw_min = (aCWmin + 1) / 2 - 1;
-                       if (use_11b)
-                               qparam.txop = 6016/32;
-                       else
-                               qparam.txop = 3008/32;
-                       qparam.aifs = 2;
-                       break;
-               case IEEE80211_AC_VO:
-                       qparam.cw_max = (aCWmin + 1) / 2 - 1;
-                       qparam.cw_min = (aCWmin + 1) / 4 - 1;
-                       if (use_11b)
-                               qparam.txop = 3264/32;
-                       else
-                               qparam.txop = 1504/32;
                        qparam.aifs = 2;
-                       break;
                }
 
                qparam.uapsd = false;
                drv_conf_tx(local, sdata, ac, &qparam);
        }
 
-       /* after reinitialize QoS TX queues setting to default,
-        * disable QoS at all */
-
        if (sdata->vif.type != NL80211_IFTYPE_MONITOR) {
-               sdata->vif.bss_conf.qos =
-                       sdata->vif.type != NL80211_IFTYPE_STATION;
+               sdata->vif.bss_conf.qos = enable_qos;
                if (bss_notify)
                        ieee80211_bss_info_change_notify(sdata,
                                                         BSS_CHANGED_QOS);