]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - net/mac80211/tx.c
Merge branches 'acpi-ec', 'acpi-irq' and 'acpi-quirks'
[karo-tx-linux.git] / net / mac80211 / tx.c
index 04b22f8982fe42b41364d8d7feee0d5bd036c64a..8858f4f185e90953d096ec28debc21f5dd2bc20d 100644 (file)
@@ -903,8 +903,8 @@ static int ieee80211_fragment(struct ieee80211_tx_data *tx,
                tmp->dev = skb->dev;
 
                /* copy header and data */
-               memcpy(skb_put(tmp, hdrlen), skb->data, hdrlen);
-               memcpy(skb_put(tmp, fraglen), skb->data + pos, fraglen);
+               skb_put_data(tmp, skb->data, hdrlen);
+               skb_put_data(tmp, skb->data + pos, fraglen);
 
                pos += fraglen;
        }
@@ -1340,9 +1340,16 @@ static struct sk_buff *fq_tin_dequeue_func(struct fq *fq,
 
        local = container_of(fq, struct ieee80211_local, fq);
        txqi = container_of(tin, struct txq_info, tin);
-       cparams = &local->cparams;
        cstats = &txqi->cstats;
 
+       if (txqi->txq.sta) {
+               struct sta_info *sta = container_of(txqi->txq.sta,
+                                                   struct sta_info, sta);
+               cparams = &sta->cparams;
+       } else {
+               cparams = &local->cparams;
+       }
+
        if (flow == &txqi->def_flow)
                cvars = &txqi->def_cvars;
        else
@@ -2701,7 +2708,7 @@ static struct sk_buff *ieee80211_build_hdr(struct ieee80211_sub_if_data *sdata,
        if (ieee80211_is_data_qos(fc)) {
                __le16 *qos_control;
 
-               qos_control = (__le16 *) skb_push(skb, 2);
+               qos_control = skb_push(skb, 2);
                memcpy(skb_push(skb, hdrlen - 2), &hdr, hdrlen - 2);
                /*
                 * Maybe we could actually set some fields here, for now just
@@ -3037,7 +3044,7 @@ static bool ieee80211_amsdu_realloc_pad(struct ieee80211_local *local,
 
        if (padding) {
                *subframe_len += padding;
-               memset(skb_put(skb, padding), 0, padding);
+               skb_put_zero(skb, padding);
        }
 
        return true;
@@ -3340,7 +3347,7 @@ static bool ieee80211_xmit_fast(struct ieee80211_sub_if_data *sdata,
        }
 
        memcpy(&eth, skb->data, ETH_HLEN - 2);
-       hdr = (void *)skb_push(skb, extra_head);
+       hdr = skb_push(skb, extra_head);
        memcpy(skb->data, fast_tx->hdr, fast_tx->hdr_len);
        memcpy(skb->data + fast_tx->da_offs, eth.h_dest, ETH_ALEN);
        memcpy(skb->data + fast_tx->sa_offs, eth.h_source, ETH_ALEN);
@@ -3867,7 +3874,7 @@ static void __ieee80211_beacon_add_tim(struct ieee80211_sub_if_data *sdata,
                        ps->dtim_count--;
        }
 
-       tim = pos = (u8 *) skb_put(skb, 6);
+       tim = pos = skb_put(skb, 6);
        *pos++ = WLAN_EID_TIM;
        *pos++ = 4;
        *pos++ = ps->dtim_count;
@@ -4125,8 +4132,7 @@ __ieee80211_beacon_get(struct ieee80211_hw *hw,
                                goto out;
 
                        skb_reserve(skb, local->tx_headroom);
-                       memcpy(skb_put(skb, beacon->head_len), beacon->head,
-                              beacon->head_len);
+                       skb_put_data(skb, beacon->head, beacon->head_len);
 
                        ieee80211_beacon_add_tim(sdata, &ap->ps, skb,
                                                 is_template);
@@ -4140,8 +4146,8 @@ __ieee80211_beacon_get(struct ieee80211_hw *hw,
                        }
 
                        if (beacon->tail)
-                               memcpy(skb_put(skb, beacon->tail_len),
-                                      beacon->tail, beacon->tail_len);
+                               skb_put_data(skb, beacon->tail,
+                                            beacon->tail_len);
                } else
                        goto out;
        } else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) {
@@ -4164,8 +4170,7 @@ __ieee80211_beacon_get(struct ieee80211_hw *hw,
                if (!skb)
                        goto out;
                skb_reserve(skb, local->tx_headroom);
-               memcpy(skb_put(skb, beacon->head_len), beacon->head,
-                      beacon->head_len);
+               skb_put_data(skb, beacon->head, beacon->head_len);
 
                hdr = (struct ieee80211_hdr *) skb->data;
                hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
@@ -4200,8 +4205,7 @@ __ieee80211_beacon_get(struct ieee80211_hw *hw,
                if (!skb)
                        goto out;
                skb_reserve(skb, local->tx_headroom);
-               memcpy(skb_put(skb, beacon->head_len), beacon->head,
-                      beacon->head_len);
+               skb_put_data(skb, beacon->head, beacon->head_len);
                ieee80211_beacon_add_tim(sdata, &ifmsh->ps, skb, is_template);
 
                if (offs) {
@@ -4209,8 +4213,7 @@ __ieee80211_beacon_get(struct ieee80211_hw *hw,
                        offs->tim_length = skb->len - beacon->head_len;
                }
 
-               memcpy(skb_put(skb, beacon->tail_len), beacon->tail,
-                      beacon->tail_len);
+               skb_put_data(skb, beacon->tail, beacon->tail_len);
        } else {
                WARN_ON(1);
                goto out;
@@ -4330,7 +4333,7 @@ struct sk_buff *ieee80211_proberesp_get(struct ieee80211_hw *hw,
        if (!skb)
                goto out;
 
-       memcpy(skb_put(skb, presp->len), presp->data, presp->len);
+       skb_put_data(skb, presp->data, presp->len);
 
        hdr = (struct ieee80211_hdr *) skb->data;
        memset(hdr->addr1, 0, sizeof(hdr->addr1));
@@ -4363,8 +4366,7 @@ struct sk_buff *ieee80211_pspoll_get(struct ieee80211_hw *hw,
 
        skb_reserve(skb, local->hw.extra_tx_headroom);
 
-       pspoll = (struct ieee80211_pspoll *) skb_put(skb, sizeof(*pspoll));
-       memset(pspoll, 0, sizeof(*pspoll));
+       pspoll = skb_put_zero(skb, sizeof(*pspoll));
        pspoll->frame_control = cpu_to_le16(IEEE80211_FTYPE_CTL |
                                            IEEE80211_STYPE_PSPOLL);
        pspoll->aid = cpu_to_le16(ifmgd->aid);
@@ -4401,9 +4403,7 @@ struct sk_buff *ieee80211_nullfunc_get(struct ieee80211_hw *hw,
 
        skb_reserve(skb, local->hw.extra_tx_headroom);
 
-       nullfunc = (struct ieee80211_hdr_3addr *) skb_put(skb,
-                                                         sizeof(*nullfunc));
-       memset(nullfunc, 0, sizeof(*nullfunc));
+       nullfunc = skb_put_zero(skb, sizeof(*nullfunc));
        nullfunc->frame_control = cpu_to_le16(IEEE80211_FTYPE_DATA |
                                              IEEE80211_STYPE_NULLFUNC |
                                              IEEE80211_FCTL_TODS);
@@ -4435,8 +4435,7 @@ struct sk_buff *ieee80211_probereq_get(struct ieee80211_hw *hw,
 
        skb_reserve(skb, local->hw.extra_tx_headroom);
 
-       hdr = (struct ieee80211_hdr_3addr *) skb_put(skb, sizeof(*hdr));
-       memset(hdr, 0, sizeof(*hdr));
+       hdr = skb_put_zero(skb, sizeof(*hdr));
        hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
                                         IEEE80211_STYPE_PROBE_REQ);
        eth_broadcast_addr(hdr->addr1);