47 mwifiex_11n_form_amsdu_pkt(
struct sk_buff *skb_aggr,
65 tx_header = (
void *)
skb_put(skb_aggr,
sizeof(*tx_header));
73 dt_offset +=
sizeof(
u16);
86 *pad = (4 - ((
unsigned long)skb_aggr->
tail & 0x3)) % 4;
88 return skb_aggr->
len + *
pad;
101 struct txpd *local_tx_pd;
103 skb_push(skb,
sizeof(*local_tx_pd));
105 local_tx_pd = (
struct txpd *) skb->
data;
118 sizeof(*local_tx_pd));
125 priv->
adapter->pps_uapsd_mode) {
127 priv->
adapter->tx_lock_flag =
true;
153 int ptrindex,
unsigned long ra_list_flags)
157 struct sk_buff *skb_aggr, *skb_src;
163 skb_src = skb_peek(&pra_list->skb_head);
165 spin_unlock_irqrestore(&priv->
wmm.ra_list_spinlock,
170 tx_info_src = MWIFIEX_SKB_TXCB(skb_src);
173 dev_err(adapter->
dev,
"%s: alloc skb_aggr\n", __func__);
174 spin_unlock_irqrestore(&priv->
wmm.ra_list_spinlock,
178 skb_reserve(skb_aggr, headroom +
sizeof(
struct txpd));
179 tx_info_aggr = MWIFIEX_SKB_TXCB(skb_aggr);
192 pra_list->total_pkts_size -= skb_src->
len;
196 spin_unlock_irqrestore(&priv->
wmm.ra_list_spinlock,
198 mwifiex_11n_form_amsdu_pkt(skb_aggr, skb_src, &pad);
205 spin_unlock_irqrestore(&priv->
wmm.ra_list_spinlock,
210 if (skb_tailroom(skb_aggr) < pad) {
216 skb_src = skb_peek(&pra_list->skb_head);
220 spin_unlock_irqrestore(&priv->
wmm.ra_list_spinlock, ra_list_flags);
226 mwifiex_11n_form_amsdu_txpd(priv, skb_aggr);
228 ptx_pd = (
struct txpd *)skb_aggr->
data;
251 skb_aggr, &tx_param);
257 spin_unlock_irqrestore(&priv->
wmm.ra_list_spinlock,
264 priv->
adapter->tx_lock_flag =
false;
271 pra_list->total_pkts_size += skb_aggr->
len;
276 spin_unlock_irqrestore(&priv->
wmm.ra_list_spinlock,
278 dev_dbg(adapter->
dev,
"data: -EBUSY is returned\n");
282 dev_err(adapter->
dev,
"%s: host_to_card failed: %#x\n",
284 adapter->
dbg.num_tx_host_to_card_failure++;
299 priv->
wmm.packets_out[ptrindex]++;
300 priv->
wmm.tid_tbl_ptr[ptrindex].ra_list_curr = pra_list;
308 spin_unlock_irqrestore(&priv->
wmm.ra_list_spinlock,