mac80211: Indicate basic rates when adding rate IEs
[deliverable/linux.git] / net / mac80211 / tx.c
index 782a60198df46977754c8720f101ed8016b928e5..4109ec7999a372206fc217bc853917a05cbd6727 100644 (file)
@@ -230,9 +230,9 @@ ieee80211_tx_h_dynamic_ps(struct ieee80211_tx_data *tx)
         * changed via debugfs, user needs to reassociate manually to have
         * everything in sync.
         */
-       if ((ifmgd->flags & IEEE80211_STA_UAPSD_ENABLED)
-           && (ifmgd->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO)
-           && skb_get_queue_mapping(tx->skb) == 0)
+       if ((ifmgd->flags & IEEE80211_STA_UAPSD_ENABLED) &&
+           (ifmgd->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO) &&
+           skb_get_queue_mapping(tx->skb) == IEEE80211_AC_VO)
                return TX_CONTINUE;
 
        if (local->hw.conf.flags & IEEE80211_CONF_PS) {
@@ -1118,8 +1118,7 @@ static bool ieee80211_tx_prep_agg(struct ieee80211_tx_data *tx,
 
        /* reset session timer */
        if (reset_agg_timer && tid_tx->timeout)
-               mod_timer(&tid_tx->session_timer,
-                         TU_TO_EXP_TIME(tid_tx->timeout));
+               tid_tx->last_tx = jiffies;
 
        return queued;
 }
@@ -1468,12 +1467,12 @@ void ieee80211_xmit(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb)
 
        if (ieee80211_vif_is_mesh(&sdata->vif) &&
            ieee80211_is_data(hdr->frame_control) &&
-               !is_multicast_ether_addr(hdr->addr1))
-                       if (mesh_nexthop_resolve(skb, sdata)) {
-                               /* skb queued: don't free */
-                               rcu_read_unlock();
-                               return;
-                       }
+           !is_multicast_ether_addr(hdr->addr1) &&
+           mesh_nexthop_resolve(skb, sdata)) {
+               /* skb queued: don't free */
+               rcu_read_unlock();
+               return;
+       }
 
        ieee80211_set_qos_hdr(sdata, skb);
        ieee80211_tx(sdata, skb, false);
@@ -1929,7 +1928,7 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
                wme_sta = true;
 
        /* receiver and we are QoS enabled, use a QoS type frame */
-       if (wme_sta && local->hw.queues >= 4) {
+       if (wme_sta && local->hw.queues >= IEEE80211_NUM_ACS) {
                fc |= cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
                hdrlen += 2;
        }
@@ -2374,6 +2373,7 @@ struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw,
                                                 IEEE80211_STYPE_BEACON);
        } else if (ieee80211_vif_is_mesh(&sdata->vif)) {
                struct ieee80211_mgmt *mgmt;
+               struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
                u8 *pos;
                int hdr_len = offsetof(struct ieee80211_mgmt, u.beacon) +
                              sizeof(mgmt->u.beacon);
@@ -2383,6 +2383,10 @@ struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw,
                        goto out;
 #endif
 
+               if (ifmsh->sync_ops)
+                       ifmsh->sync_ops->adjust_tbtt(
+                                               sdata);
+
                skb = dev_alloc_skb(local->tx_headroom +
                                    hdr_len +
                                    2 + /* NULL SSID */
@@ -2390,7 +2394,7 @@ struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw,
                                    2 + 3 + /* DS params */
                                    2 + (IEEE80211_MAX_SUPP_RATES - 8) +
                                    2 + sizeof(struct ieee80211_ht_cap) +
-                                   2 + sizeof(struct ieee80211_ht_info) +
+                                   2 + sizeof(struct ieee80211_ht_operation) +
                                    2 + sdata->u.mesh.mesh_id_len +
                                    2 + sizeof(struct ieee80211_meshconf_ie) +
                                    sdata->u.mesh.ie_len);
@@ -2414,12 +2418,12 @@ struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw,
                *pos++ = WLAN_EID_SSID;
                *pos++ = 0x0;
 
-               if (ieee80211_add_srates_ie(&sdata->vif, skb) ||
+               if (ieee80211_add_srates_ie(&sdata->vif, skb, true) ||
                    mesh_add_ds_params_ie(skb, sdata) ||
-                   ieee80211_add_ext_srates_ie(&sdata->vif, skb) ||
+                   ieee80211_add_ext_srates_ie(&sdata->vif, skb, true) ||
                    mesh_add_rsn_ie(skb, sdata) ||
                    mesh_add_ht_cap_ie(skb, sdata) ||
-                   mesh_add_ht_info_ie(skb, sdata) ||
+                   mesh_add_ht_oper_ie(skb, sdata) ||
                    mesh_add_meshid_ie(skb, sdata) ||
                    mesh_add_meshconf_ie(skb, sdata) ||
                    mesh_add_vendor_ies(skb, sdata)) {
@@ -2603,7 +2607,7 @@ struct sk_buff *ieee80211_probereq_get(struct ieee80211_hw *hw,
        pos = skb_put(skb, ie_ssid_len);
        *pos++ = WLAN_EID_SSID;
        *pos++ = ssid_len;
-       if (ssid)
+       if (ssid_len)
                memcpy(pos, ssid, ssid_len);
        pos += ssid_len;
 
This page took 0.141276 seconds and 5 git commands to generate.