tx.c revision c3e06fc03b64c626e150c33b897ddd728c30a316
1/*
2 * This file is part of wl1271
3 *
4 * Copyright (C) 2009 Nokia Corporation
5 *
6 * Contact: Luciano Coelho <luciano.coelho@nokia.com>
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * version 2 as published by the Free Software Foundation.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20 * 02110-1301 USA
21 *
22 */
23
24#include <linux/kernel.h>
25#include <linux/module.h>
26#include <linux/etherdevice.h>
27
28#include "wlcore.h"
29#include "debug.h"
30#include "io.h"
31#include "ps.h"
32#include "tx.h"
33#include "event.h"
34#include "hw_ops.h"
35
36/*
37 * TODO: this is here just for now, it must be removed when the data
38 * operations are in place.
39 */
40#include "../wl12xx/reg.h"
41
42static int wl1271_set_default_wep_key(struct wl1271 *wl,
43				      struct wl12xx_vif *wlvif, u8 id)
44{
45	int ret;
46	bool is_ap = (wlvif->bss_type == BSS_TYPE_AP_BSS);
47
48	if (is_ap)
49		ret = wl12xx_cmd_set_default_wep_key(wl, id,
50						     wlvif->ap.bcast_hlid);
51	else
52		ret = wl12xx_cmd_set_default_wep_key(wl, id, wlvif->sta.hlid);
53
54	if (ret < 0)
55		return ret;
56
57	wl1271_debug(DEBUG_CRYPT, "default wep key idx: %d", (int)id);
58	return 0;
59}
60
61static int wl1271_alloc_tx_id(struct wl1271 *wl, struct sk_buff *skb)
62{
63	int id;
64
65	id = find_first_zero_bit(wl->tx_frames_map, wl->num_tx_desc);
66	if (id >= wl->num_tx_desc)
67		return -EBUSY;
68
69	__set_bit(id, wl->tx_frames_map);
70	wl->tx_frames[id] = skb;
71	wl->tx_frames_cnt++;
72	return id;
73}
74
75void wl1271_free_tx_id(struct wl1271 *wl, int id)
76{
77	if (__test_and_clear_bit(id, wl->tx_frames_map)) {
78		if (unlikely(wl->tx_frames_cnt == wl->num_tx_desc))
79			clear_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags);
80
81		wl->tx_frames[id] = NULL;
82		wl->tx_frames_cnt--;
83	}
84}
85EXPORT_SYMBOL(wl1271_free_tx_id);
86
87static void wl1271_tx_ap_update_inconnection_sta(struct wl1271 *wl,
88						 struct sk_buff *skb)
89{
90	struct ieee80211_hdr *hdr;
91
92	/*
93	 * add the station to the known list before transmitting the
94	 * authentication response. this way it won't get de-authed by FW
95	 * when transmitting too soon.
96	 */
97	hdr = (struct ieee80211_hdr *)(skb->data +
98				       sizeof(struct wl1271_tx_hw_descr));
99	if (ieee80211_is_auth(hdr->frame_control))
100		wl1271_acx_set_inconnection_sta(wl, hdr->addr1);
101}
102
103static void wl1271_tx_regulate_link(struct wl1271 *wl,
104				    struct wl12xx_vif *wlvif,
105				    u8 hlid)
106{
107	bool fw_ps, single_sta;
108	u8 tx_pkts;
109
110	if (WARN_ON(!test_bit(hlid, wlvif->links_map)))
111		return;
112
113	fw_ps = test_bit(hlid, (unsigned long *)&wl->ap_fw_ps_map);
114	tx_pkts = wl->links[hlid].allocated_pkts;
115	single_sta = (wl->active_sta_count == 1);
116
117	/*
118	 * if in FW PS and there is enough data in FW we can put the link
119	 * into high-level PS and clean out its TX queues.
120	 * Make an exception if this is the only connected station. In this
121	 * case FW-memory congestion is not a problem.
122	 */
123	if (!single_sta && fw_ps && tx_pkts >= WL1271_PS_STA_MAX_PACKETS)
124		wl12xx_ps_link_start(wl, wlvif, hlid, true);
125}
126
127bool wl12xx_is_dummy_packet(struct wl1271 *wl, struct sk_buff *skb)
128{
129	return wl->dummy_packet == skb;
130}
131EXPORT_SYMBOL(wl12xx_is_dummy_packet);
132
133static u8 wl12xx_tx_get_hlid_ap(struct wl1271 *wl, struct wl12xx_vif *wlvif,
134				struct sk_buff *skb, struct ieee80211_sta *sta)
135{
136	if (sta) {
137		struct wl1271_station *wl_sta;
138
139		wl_sta = (struct wl1271_station *)sta->drv_priv;
140		return wl_sta->hlid;
141	} else {
142		struct ieee80211_hdr *hdr;
143
144		if (!test_bit(WLVIF_FLAG_AP_STARTED, &wlvif->flags))
145			return wl->system_hlid;
146
147		hdr = (struct ieee80211_hdr *)skb->data;
148		if (is_multicast_ether_addr(ieee80211_get_DA(hdr)))
149			return wlvif->ap.bcast_hlid;
150		else
151			return wlvif->ap.global_hlid;
152	}
153}
154
155u8 wl12xx_tx_get_hlid(struct wl1271 *wl, struct wl12xx_vif *wlvif,
156		      struct sk_buff *skb, struct ieee80211_sta *sta)
157{
158	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
159
160	if (!wlvif || wl12xx_is_dummy_packet(wl, skb))
161		return wl->system_hlid;
162
163	if (wlvif->bss_type == BSS_TYPE_AP_BSS)
164		return wl12xx_tx_get_hlid_ap(wl, wlvif, skb, sta);
165
166	if ((test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags) ||
167	     test_bit(WLVIF_FLAG_IBSS_JOINED, &wlvif->flags)) &&
168	    !ieee80211_is_auth(hdr->frame_control) &&
169	    !ieee80211_is_assoc_req(hdr->frame_control))
170		return wlvif->sta.hlid;
171	else
172		return wlvif->dev_hlid;
173}
174
175unsigned int wlcore_calc_packet_alignment(struct wl1271 *wl,
176					  unsigned int packet_length)
177{
178	if ((wl->quirks & WLCORE_QUIRK_TX_PAD_LAST_FRAME) ||
179	    !(wl->quirks & WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN))
180		return ALIGN(packet_length, WL1271_TX_ALIGN_TO);
181	else
182		return ALIGN(packet_length, WL12XX_BUS_BLOCK_SIZE);
183}
184EXPORT_SYMBOL(wlcore_calc_packet_alignment);
185
186static int wl1271_tx_allocate(struct wl1271 *wl, struct wl12xx_vif *wlvif,
187			      struct sk_buff *skb, u32 extra, u32 buf_offset,
188			      u8 hlid, bool is_gem)
189{
190	struct wl1271_tx_hw_descr *desc;
191	u32 total_len = skb->len + sizeof(struct wl1271_tx_hw_descr) + extra;
192	u32 total_blocks;
193	int id, ret = -EBUSY, ac;
194	u32 spare_blocks;
195
196	if (buf_offset + total_len > WL1271_AGGR_BUFFER_SIZE)
197		return -EAGAIN;
198
199	spare_blocks = wlcore_hw_get_spare_blocks(wl, is_gem);
200
201	/* allocate free identifier for the packet */
202	id = wl1271_alloc_tx_id(wl, skb);
203	if (id < 0)
204		return id;
205
206	total_blocks = wlcore_hw_calc_tx_blocks(wl, total_len, spare_blocks);
207
208	if (total_blocks <= wl->tx_blocks_available) {
209		desc = (struct wl1271_tx_hw_descr *)skb_push(
210			skb, total_len - skb->len);
211
212		wlcore_hw_set_tx_desc_blocks(wl, desc, total_blocks,
213					     spare_blocks);
214
215		desc->id = id;
216
217		wl->tx_blocks_available -= total_blocks;
218		wl->tx_allocated_blocks += total_blocks;
219
220		/* If the FW was empty before, arm the Tx watchdog */
221		if (wl->tx_allocated_blocks == total_blocks)
222			wl12xx_rearm_tx_watchdog_locked(wl);
223
224		ac = wl1271_tx_get_queue(skb_get_queue_mapping(skb));
225		wl->tx_allocated_pkts[ac]++;
226
227		if (!wl12xx_is_dummy_packet(wl, skb) && wlvif &&
228		    wlvif->bss_type == BSS_TYPE_AP_BSS &&
229		    test_bit(hlid, wlvif->ap.sta_hlid_map))
230			wl->links[hlid].allocated_pkts++;
231
232		ret = 0;
233
234		wl1271_debug(DEBUG_TX,
235			     "tx_allocate: size: %d, blocks: %d, id: %d",
236			     total_len, total_blocks, id);
237	} else {
238		wl1271_free_tx_id(wl, id);
239	}
240
241	return ret;
242}
243
244static void wl1271_tx_fill_hdr(struct wl1271 *wl, struct wl12xx_vif *wlvif,
245			       struct sk_buff *skb, u32 extra,
246			       struct ieee80211_tx_info *control, u8 hlid)
247{
248	struct timespec ts;
249	struct wl1271_tx_hw_descr *desc;
250	int ac, rate_idx;
251	s64 hosttime;
252	u16 tx_attr = 0;
253	__le16 frame_control;
254	struct ieee80211_hdr *hdr;
255	u8 *frame_start;
256	bool is_dummy;
257
258	desc = (struct wl1271_tx_hw_descr *) skb->data;
259	frame_start = (u8 *)(desc + 1);
260	hdr = (struct ieee80211_hdr *)(frame_start + extra);
261	frame_control = hdr->frame_control;
262
263	/* relocate space for security header */
264	if (extra) {
265		int hdrlen = ieee80211_hdrlen(frame_control);
266		memmove(frame_start, hdr, hdrlen);
267		skb_set_network_header(skb, skb_network_offset(skb) + extra);
268	}
269
270	/* configure packet life time */
271	getnstimeofday(&ts);
272	hosttime = (timespec_to_ns(&ts) >> 10);
273	desc->start_time = cpu_to_le32(hosttime - wl->time_offset);
274
275	is_dummy = wl12xx_is_dummy_packet(wl, skb);
276	if (is_dummy || !wlvif || wlvif->bss_type != BSS_TYPE_AP_BSS)
277		desc->life_time = cpu_to_le16(TX_HW_MGMT_PKT_LIFETIME_TU);
278	else
279		desc->life_time = cpu_to_le16(TX_HW_AP_MODE_PKT_LIFETIME_TU);
280
281	/* queue */
282	ac = wl1271_tx_get_queue(skb_get_queue_mapping(skb));
283	desc->tid = skb->priority;
284
285	if (is_dummy) {
286		/*
287		 * FW expects the dummy packet to have an invalid session id -
288		 * any session id that is different than the one set in the join
289		 */
290		tx_attr = (SESSION_COUNTER_INVALID <<
291			   TX_HW_ATTR_OFST_SESSION_COUNTER) &
292			   TX_HW_ATTR_SESSION_COUNTER;
293
294		tx_attr |= TX_HW_ATTR_TX_DUMMY_REQ;
295	} else if (wlvif) {
296		/* configure the tx attributes */
297		tx_attr = wlvif->session_counter <<
298			  TX_HW_ATTR_OFST_SESSION_COUNTER;
299	}
300
301	desc->hlid = hlid;
302	if (is_dummy || !wlvif)
303		rate_idx = 0;
304	else if (wlvif->bss_type != BSS_TYPE_AP_BSS) {
305		/*
306		 * if the packets are data packets
307		 * send them with AP rate policies (EAPOLs are an exception),
308		 * otherwise use default basic rates
309		 */
310		if (skb->protocol == cpu_to_be16(ETH_P_PAE))
311			rate_idx = wlvif->sta.basic_rate_idx;
312		else if (control->flags & IEEE80211_TX_CTL_NO_CCK_RATE)
313			rate_idx = wlvif->sta.p2p_rate_idx;
314		else if (ieee80211_is_data(frame_control))
315			rate_idx = wlvif->sta.ap_rate_idx;
316		else
317			rate_idx = wlvif->sta.basic_rate_idx;
318	} else {
319		if (hlid == wlvif->ap.global_hlid)
320			rate_idx = wlvif->ap.mgmt_rate_idx;
321		else if (hlid == wlvif->ap.bcast_hlid ||
322			 skb->protocol == cpu_to_be16(ETH_P_PAE) ||
323			 !ieee80211_is_data(frame_control))
324			/*
325			 * send non-data, bcast and EAPOLs using the
326			 * min basic rate
327			 */
328			rate_idx = wlvif->ap.bcast_rate_idx;
329		else
330			rate_idx = wlvif->ap.ucast_rate_idx[ac];
331	}
332
333	tx_attr |= rate_idx << TX_HW_ATTR_OFST_RATE_POLICY;
334
335	/* for WEP shared auth - no fw encryption is needed */
336	if (ieee80211_is_auth(frame_control) &&
337	    ieee80211_has_protected(frame_control))
338		tx_attr |= TX_HW_ATTR_HOST_ENCRYPT;
339
340	desc->tx_attr = cpu_to_le16(tx_attr);
341
342	wlcore_hw_set_tx_desc_csum(wl, desc, skb);
343	wlcore_hw_set_tx_desc_data_len(wl, desc, skb);
344}
345
346/* caller must hold wl->mutex */
347static int wl1271_prepare_tx_frame(struct wl1271 *wl, struct wl12xx_vif *wlvif,
348				   struct sk_buff *skb, u32 buf_offset, u8 hlid)
349{
350	struct ieee80211_tx_info *info;
351	u32 extra = 0;
352	int ret = 0;
353	u32 total_len;
354	bool is_dummy;
355	bool is_gem = false;
356
357	if (!skb) {
358		wl1271_error("discarding null skb");
359		return -EINVAL;
360	}
361
362	if (hlid == WL12XX_INVALID_LINK_ID) {
363		wl1271_error("invalid hlid. dropping skb 0x%p", skb);
364		return -EINVAL;
365	}
366
367	info = IEEE80211_SKB_CB(skb);
368
369	is_dummy = wl12xx_is_dummy_packet(wl, skb);
370
371	if ((wl->quirks & WLCORE_QUIRK_TKIP_HEADER_SPACE) &&
372	    info->control.hw_key &&
373	    info->control.hw_key->cipher == WLAN_CIPHER_SUITE_TKIP)
374		extra = WL1271_EXTRA_SPACE_TKIP;
375
376	if (info->control.hw_key) {
377		bool is_wep;
378		u8 idx = info->control.hw_key->hw_key_idx;
379		u32 cipher = info->control.hw_key->cipher;
380
381		is_wep = (cipher == WLAN_CIPHER_SUITE_WEP40) ||
382			 (cipher == WLAN_CIPHER_SUITE_WEP104);
383
384		if (unlikely(is_wep && wlvif->default_key != idx)) {
385			ret = wl1271_set_default_wep_key(wl, wlvif, idx);
386			if (ret < 0)
387				return ret;
388			wlvif->default_key = idx;
389		}
390
391		is_gem = (cipher == WL1271_CIPHER_SUITE_GEM);
392	}
393
394	ret = wl1271_tx_allocate(wl, wlvif, skb, extra, buf_offset, hlid,
395				 is_gem);
396	if (ret < 0)
397		return ret;
398
399	wl1271_tx_fill_hdr(wl, wlvif, skb, extra, info, hlid);
400
401	if (!is_dummy && wlvif && wlvif->bss_type == BSS_TYPE_AP_BSS) {
402		wl1271_tx_ap_update_inconnection_sta(wl, skb);
403		wl1271_tx_regulate_link(wl, wlvif, hlid);
404	}
405
406	/*
407	 * The length of each packet is stored in terms of
408	 * words. Thus, we must pad the skb data to make sure its
409	 * length is aligned.  The number of padding bytes is computed
410	 * and set in wl1271_tx_fill_hdr.
411	 * In special cases, we want to align to a specific block size
412	 * (eg. for wl128x with SDIO we align to 256).
413	 */
414	total_len = wlcore_calc_packet_alignment(wl, skb->len);
415
416	memcpy(wl->aggr_buf + buf_offset, skb->data, skb->len);
417	memset(wl->aggr_buf + buf_offset + skb->len, 0, total_len - skb->len);
418
419	/* Revert side effects in the dummy packet skb, so it can be reused */
420	if (is_dummy)
421		skb_pull(skb, sizeof(struct wl1271_tx_hw_descr));
422
423	return total_len;
424}
425
426u32 wl1271_tx_enabled_rates_get(struct wl1271 *wl, u32 rate_set,
427				enum ieee80211_band rate_band)
428{
429	struct ieee80211_supported_band *band;
430	u32 enabled_rates = 0;
431	int bit;
432
433	band = wl->hw->wiphy->bands[rate_band];
434	for (bit = 0; bit < band->n_bitrates; bit++) {
435		if (rate_set & 0x1)
436			enabled_rates |= band->bitrates[bit].hw_value;
437		rate_set >>= 1;
438	}
439
440	/* MCS rates indication are on bits 16 - 31 */
441	rate_set >>= HW_HT_RATES_OFFSET - band->n_bitrates;
442
443	for (bit = 0; bit < 16; bit++) {
444		if (rate_set & 0x1)
445			enabled_rates |= (CONF_HW_BIT_RATE_MCS_0 << bit);
446		rate_set >>= 1;
447	}
448
449	return enabled_rates;
450}
451
452void wl1271_handle_tx_low_watermark(struct wl1271 *wl)
453{
454	int i;
455
456	for (i = 0; i < NUM_TX_QUEUES; i++) {
457		if (wlcore_is_queue_stopped_by_reason(wl, i,
458			WLCORE_QUEUE_STOP_REASON_WATERMARK) &&
459		    wl->tx_queue_count[i] <= WL1271_TX_QUEUE_LOW_WATERMARK) {
460			/* firmware buffer has space, restart queues */
461			wlcore_wake_queue(wl, i,
462					  WLCORE_QUEUE_STOP_REASON_WATERMARK);
463		}
464	}
465}
466
467static struct sk_buff_head *wl1271_select_queue(struct wl1271 *wl,
468						struct sk_buff_head *queues)
469{
470	int i, q = -1, ac;
471	u32 min_pkts = 0xffffffff;
472
473	/*
474	 * Find a non-empty ac where:
475	 * 1. There are packets to transmit
476	 * 2. The FW has the least allocated blocks
477	 *
478	 * We prioritize the ACs according to VO>VI>BE>BK
479	 */
480	for (i = 0; i < NUM_TX_QUEUES; i++) {
481		ac = wl1271_tx_get_queue(i);
482		if (!skb_queue_empty(&queues[ac]) &&
483		    (wl->tx_allocated_pkts[ac] < min_pkts)) {
484			q = ac;
485			min_pkts = wl->tx_allocated_pkts[q];
486		}
487	}
488
489	if (q == -1)
490		return NULL;
491
492	return &queues[q];
493}
494
495static struct sk_buff *wl12xx_lnk_skb_dequeue(struct wl1271 *wl,
496					      struct wl1271_link *lnk)
497{
498	struct sk_buff *skb;
499	unsigned long flags;
500	struct sk_buff_head *queue;
501
502	queue = wl1271_select_queue(wl, lnk->tx_queue);
503	if (!queue)
504		return NULL;
505
506	skb = skb_dequeue(queue);
507	if (skb) {
508		int q = wl1271_tx_get_queue(skb_get_queue_mapping(skb));
509		spin_lock_irqsave(&wl->wl_lock, flags);
510		WARN_ON_ONCE(wl->tx_queue_count[q] <= 0);
511		wl->tx_queue_count[q]--;
512		spin_unlock_irqrestore(&wl->wl_lock, flags);
513	}
514
515	return skb;
516}
517
518static struct sk_buff *wl12xx_vif_skb_dequeue(struct wl1271 *wl,
519					      struct wl12xx_vif *wlvif,
520					      u8 *hlid)
521{
522	struct sk_buff *skb = NULL;
523	int i, h, start_hlid;
524
525	/* start from the link after the last one */
526	start_hlid = (wlvif->last_tx_hlid + 1) % WL12XX_MAX_LINKS;
527
528	/* dequeue according to AC, round robin on each link */
529	for (i = 0; i < WL12XX_MAX_LINKS; i++) {
530		h = (start_hlid + i) % WL12XX_MAX_LINKS;
531
532		/* only consider connected stations */
533		if (!test_bit(h, wlvif->links_map))
534			continue;
535
536		skb = wl12xx_lnk_skb_dequeue(wl, &wl->links[h]);
537		if (!skb)
538			continue;
539
540		wlvif->last_tx_hlid = h;
541		break;
542	}
543
544	if (!skb)
545		wlvif->last_tx_hlid = 0;
546
547	*hlid = wlvif->last_tx_hlid;
548	return skb;
549}
550
551static struct sk_buff *wl1271_skb_dequeue(struct wl1271 *wl, u8 *hlid)
552{
553	unsigned long flags;
554	struct wl12xx_vif *wlvif = wl->last_wlvif;
555	struct sk_buff *skb = NULL;
556
557	/* continue from last wlvif (round robin) */
558	if (wlvif) {
559		wl12xx_for_each_wlvif_continue(wl, wlvif) {
560			skb = wl12xx_vif_skb_dequeue(wl, wlvif, hlid);
561			if (skb) {
562				wl->last_wlvif = wlvif;
563				break;
564			}
565		}
566	}
567
568	/* dequeue from the system HLID before the restarting wlvif list */
569	if (!skb) {
570		skb = wl12xx_lnk_skb_dequeue(wl, &wl->links[wl->system_hlid]);
571		*hlid = wl->system_hlid;
572	}
573
574	/* do a new pass over the wlvif list */
575	if (!skb) {
576		wl12xx_for_each_wlvif(wl, wlvif) {
577			skb = wl12xx_vif_skb_dequeue(wl, wlvif, hlid);
578			if (skb) {
579				wl->last_wlvif = wlvif;
580				break;
581			}
582
583			/*
584			 * No need to continue after last_wlvif. The previous
585			 * pass should have found it.
586			 */
587			if (wlvif == wl->last_wlvif)
588				break;
589		}
590	}
591
592	if (!skb &&
593	    test_and_clear_bit(WL1271_FLAG_DUMMY_PACKET_PENDING, &wl->flags)) {
594		int q;
595
596		skb = wl->dummy_packet;
597		*hlid = wl->system_hlid;
598		q = wl1271_tx_get_queue(skb_get_queue_mapping(skb));
599		spin_lock_irqsave(&wl->wl_lock, flags);
600		WARN_ON_ONCE(wl->tx_queue_count[q] <= 0);
601		wl->tx_queue_count[q]--;
602		spin_unlock_irqrestore(&wl->wl_lock, flags);
603	}
604
605	return skb;
606}
607
608static void wl1271_skb_queue_head(struct wl1271 *wl, struct wl12xx_vif *wlvif,
609				  struct sk_buff *skb, u8 hlid)
610{
611	unsigned long flags;
612	int q = wl1271_tx_get_queue(skb_get_queue_mapping(skb));
613
614	if (wl12xx_is_dummy_packet(wl, skb)) {
615		set_bit(WL1271_FLAG_DUMMY_PACKET_PENDING, &wl->flags);
616	} else {
617		skb_queue_head(&wl->links[hlid].tx_queue[q], skb);
618
619		/* make sure we dequeue the same packet next time */
620		wlvif->last_tx_hlid = (hlid + WL12XX_MAX_LINKS - 1) %
621				      WL12XX_MAX_LINKS;
622	}
623
624	spin_lock_irqsave(&wl->wl_lock, flags);
625	wl->tx_queue_count[q]++;
626	spin_unlock_irqrestore(&wl->wl_lock, flags);
627}
628
629static bool wl1271_tx_is_data_present(struct sk_buff *skb)
630{
631	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)(skb->data);
632
633	return ieee80211_is_data_present(hdr->frame_control);
634}
635
636void wl12xx_rearm_rx_streaming(struct wl1271 *wl, unsigned long *active_hlids)
637{
638	struct wl12xx_vif *wlvif;
639	u32 timeout;
640	u8 hlid;
641
642	if (!wl->conf.rx_streaming.interval)
643		return;
644
645	if (!wl->conf.rx_streaming.always &&
646	    !test_bit(WL1271_FLAG_SOFT_GEMINI, &wl->flags))
647		return;
648
649	timeout = wl->conf.rx_streaming.duration;
650	wl12xx_for_each_wlvif_sta(wl, wlvif) {
651		bool found = false;
652		for_each_set_bit(hlid, active_hlids, WL12XX_MAX_LINKS) {
653			if (test_bit(hlid, wlvif->links_map)) {
654				found  = true;
655				break;
656			}
657		}
658
659		if (!found)
660			continue;
661
662		/* enable rx streaming */
663		if (!test_bit(WLVIF_FLAG_RX_STREAMING_STARTED, &wlvif->flags))
664			ieee80211_queue_work(wl->hw,
665					     &wlvif->rx_streaming_enable_work);
666
667		mod_timer(&wlvif->rx_streaming_timer,
668			  jiffies + msecs_to_jiffies(timeout));
669	}
670}
671
672/*
673 * Returns failure values only in case of failed bus ops within this function.
674 * wl1271_prepare_tx_frame retvals won't be returned in order to avoid
675 * triggering recovery by higher layers when not necessary.
676 * In case a FW command fails within wl1271_prepare_tx_frame fails a recovery
677 * will be queued in wl1271_cmd_send. -EAGAIN/-EBUSY from prepare_tx_frame
678 * can occur and are legitimate so don't propagate. -EINVAL will emit a WARNING
679 * within prepare_tx_frame code but there's nothing we should do about those
680 * as well.
681 */
682int wlcore_tx_work_locked(struct wl1271 *wl)
683{
684	struct wl12xx_vif *wlvif;
685	struct sk_buff *skb;
686	struct wl1271_tx_hw_descr *desc;
687	u32 buf_offset = 0, last_len = 0;
688	bool sent_packets = false;
689	unsigned long active_hlids[BITS_TO_LONGS(WL12XX_MAX_LINKS)] = {0};
690	int ret = 0;
691	int bus_ret = 0;
692	u8 hlid;
693
694	if (unlikely(wl->state != WLCORE_STATE_ON))
695		return 0;
696
697	while ((skb = wl1271_skb_dequeue(wl, &hlid))) {
698		struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
699		bool has_data = false;
700
701		wlvif = NULL;
702		if (!wl12xx_is_dummy_packet(wl, skb) && info->control.vif)
703			wlvif = wl12xx_vif_to_data(info->control.vif);
704		else
705			hlid = wl->system_hlid;
706
707		has_data = wlvif && wl1271_tx_is_data_present(skb);
708		ret = wl1271_prepare_tx_frame(wl, wlvif, skb, buf_offset,
709					      hlid);
710		if (ret == -EAGAIN) {
711			/*
712			 * Aggregation buffer is full.
713			 * Flush buffer and try again.
714			 */
715			wl1271_skb_queue_head(wl, wlvif, skb, hlid);
716
717			buf_offset = wlcore_hw_pre_pkt_send(wl, buf_offset,
718							    last_len);
719			bus_ret = wlcore_write_data(wl, REG_SLV_MEM_DATA,
720					     wl->aggr_buf, buf_offset, true);
721			if (bus_ret < 0)
722				goto out;
723
724			sent_packets = true;
725			buf_offset = 0;
726			continue;
727		} else if (ret == -EBUSY) {
728			/*
729			 * Firmware buffer is full.
730			 * Queue back last skb, and stop aggregating.
731			 */
732			wl1271_skb_queue_head(wl, wlvif, skb, hlid);
733			/* No work left, avoid scheduling redundant tx work */
734			set_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags);
735			goto out_ack;
736		} else if (ret < 0) {
737			if (wl12xx_is_dummy_packet(wl, skb))
738				/*
739				 * fw still expects dummy packet,
740				 * so re-enqueue it
741				 */
742				wl1271_skb_queue_head(wl, wlvif, skb, hlid);
743			else
744				ieee80211_free_txskb(wl->hw, skb);
745			goto out_ack;
746		}
747		last_len = ret;
748		buf_offset += last_len;
749		wl->tx_packets_count++;
750		if (has_data) {
751			desc = (struct wl1271_tx_hw_descr *) skb->data;
752			__set_bit(desc->hlid, active_hlids);
753		}
754	}
755
756out_ack:
757	if (buf_offset) {
758		buf_offset = wlcore_hw_pre_pkt_send(wl, buf_offset, last_len);
759		bus_ret = wlcore_write_data(wl, REG_SLV_MEM_DATA, wl->aggr_buf,
760					     buf_offset, true);
761		if (bus_ret < 0)
762			goto out;
763
764		sent_packets = true;
765	}
766	if (sent_packets) {
767		/*
768		 * Interrupt the firmware with the new packets. This is only
769		 * required for older hardware revisions
770		 */
771		if (wl->quirks & WLCORE_QUIRK_END_OF_TRANSACTION) {
772			bus_ret = wlcore_write32(wl, WL12XX_HOST_WR_ACCESS,
773					     wl->tx_packets_count);
774			if (bus_ret < 0)
775				goto out;
776		}
777
778		wl1271_handle_tx_low_watermark(wl);
779	}
780	wl12xx_rearm_rx_streaming(wl, active_hlids);
781
782out:
783	return bus_ret;
784}
785
786void wl1271_tx_work(struct work_struct *work)
787{
788	struct wl1271 *wl = container_of(work, struct wl1271, tx_work);
789	int ret;
790
791	mutex_lock(&wl->mutex);
792	ret = wl1271_ps_elp_wakeup(wl);
793	if (ret < 0)
794		goto out;
795
796	ret = wlcore_tx_work_locked(wl);
797	if (ret < 0) {
798		wl12xx_queue_recovery_work(wl);
799		goto out;
800	}
801
802	wl1271_ps_elp_sleep(wl);
803out:
804	mutex_unlock(&wl->mutex);
805}
806
807static u8 wl1271_tx_get_rate_flags(u8 rate_class_index)
808{
809	u8 flags = 0;
810
811	/*
812	 * TODO: use wl12xx constants when this code is moved to wl12xx, as
813	 * only it uses Tx-completion.
814	 */
815	if (rate_class_index <= 8)
816		flags |= IEEE80211_TX_RC_MCS;
817
818	/*
819	 * TODO: use wl12xx constants when this code is moved to wl12xx, as
820	 * only it uses Tx-completion.
821	 */
822	if (rate_class_index == 0)
823		flags |= IEEE80211_TX_RC_SHORT_GI;
824
825	return flags;
826}
827
828static void wl1271_tx_complete_packet(struct wl1271 *wl,
829				      struct wl1271_tx_hw_res_descr *result)
830{
831	struct ieee80211_tx_info *info;
832	struct ieee80211_vif *vif;
833	struct wl12xx_vif *wlvif;
834	struct sk_buff *skb;
835	int id = result->id;
836	int rate = -1;
837	u8 rate_flags = 0;
838	u8 retries = 0;
839
840	/* check for id legality */
841	if (unlikely(id >= wl->num_tx_desc || wl->tx_frames[id] == NULL)) {
842		wl1271_warning("TX result illegal id: %d", id);
843		return;
844	}
845
846	skb = wl->tx_frames[id];
847	info = IEEE80211_SKB_CB(skb);
848
849	if (wl12xx_is_dummy_packet(wl, skb)) {
850		wl1271_free_tx_id(wl, id);
851		return;
852	}
853
854	/* info->control is valid as long as we don't update info->status */
855	vif = info->control.vif;
856	wlvif = wl12xx_vif_to_data(vif);
857
858	/* update the TX status info */
859	if (result->status == TX_SUCCESS) {
860		if (!(info->flags & IEEE80211_TX_CTL_NO_ACK))
861			info->flags |= IEEE80211_TX_STAT_ACK;
862		rate = wlcore_rate_to_idx(wl, result->rate_class_index,
863					  wlvif->band);
864		rate_flags = wl1271_tx_get_rate_flags(result->rate_class_index);
865		retries = result->ack_failures;
866	} else if (result->status == TX_RETRY_EXCEEDED) {
867		wl->stats.excessive_retries++;
868		retries = result->ack_failures;
869	}
870
871	info->status.rates[0].idx = rate;
872	info->status.rates[0].count = retries;
873	info->status.rates[0].flags = rate_flags;
874	info->status.ack_signal = -1;
875
876	wl->stats.retry_count += result->ack_failures;
877
878	/*
879	 * update sequence number only when relevant, i.e. only in
880	 * sessions of TKIP, AES and GEM (not in open or WEP sessions)
881	 */
882	if (info->control.hw_key &&
883	    (info->control.hw_key->cipher == WLAN_CIPHER_SUITE_TKIP ||
884	     info->control.hw_key->cipher == WLAN_CIPHER_SUITE_CCMP ||
885	     info->control.hw_key->cipher == WL1271_CIPHER_SUITE_GEM)) {
886		u8 fw_lsb = result->tx_security_sequence_number_lsb;
887		u8 cur_lsb = wlvif->tx_security_last_seq_lsb;
888
889		/*
890		 * update security sequence number, taking care of potential
891		 * wrap-around
892		 */
893		wlvif->tx_security_seq += (fw_lsb - cur_lsb) & 0xff;
894		wlvif->tx_security_last_seq_lsb = fw_lsb;
895	}
896
897	/* remove private header from packet */
898	skb_pull(skb, sizeof(struct wl1271_tx_hw_descr));
899
900	/* remove TKIP header space if present */
901	if ((wl->quirks & WLCORE_QUIRK_TKIP_HEADER_SPACE) &&
902	    info->control.hw_key &&
903	    info->control.hw_key->cipher == WLAN_CIPHER_SUITE_TKIP) {
904		int hdrlen = ieee80211_get_hdrlen_from_skb(skb);
905		memmove(skb->data + WL1271_EXTRA_SPACE_TKIP, skb->data,
906			hdrlen);
907		skb_pull(skb, WL1271_EXTRA_SPACE_TKIP);
908	}
909
910	wl1271_debug(DEBUG_TX, "tx status id %u skb 0x%p failures %u rate 0x%x"
911		     " status 0x%x",
912		     result->id, skb, result->ack_failures,
913		     result->rate_class_index, result->status);
914
915	/* return the packet to the stack */
916	skb_queue_tail(&wl->deferred_tx_queue, skb);
917	queue_work(wl->freezable_wq, &wl->netstack_work);
918	wl1271_free_tx_id(wl, result->id);
919}
920
921/* Called upon reception of a TX complete interrupt */
922int wlcore_tx_complete(struct wl1271 *wl)
923{
924	struct wl1271_acx_mem_map *memmap = wl->target_mem_map;
925	u32 count, fw_counter;
926	u32 i;
927	int ret;
928
929	/* read the tx results from the chipset */
930	ret = wlcore_read(wl, le32_to_cpu(memmap->tx_result),
931			  wl->tx_res_if, sizeof(*wl->tx_res_if), false);
932	if (ret < 0)
933		goto out;
934
935	fw_counter = le32_to_cpu(wl->tx_res_if->tx_result_fw_counter);
936
937	/* write host counter to chipset (to ack) */
938	ret = wlcore_write32(wl, le32_to_cpu(memmap->tx_result) +
939			     offsetof(struct wl1271_tx_hw_res_if,
940				      tx_result_host_counter), fw_counter);
941	if (ret < 0)
942		goto out;
943
944	count = fw_counter - wl->tx_results_count;
945	wl1271_debug(DEBUG_TX, "tx_complete received, packets: %d", count);
946
947	/* verify that the result buffer is not getting overrun */
948	if (unlikely(count > TX_HW_RESULT_QUEUE_LEN))
949		wl1271_warning("TX result overflow from chipset: %d", count);
950
951	/* process the results */
952	for (i = 0; i < count; i++) {
953		struct wl1271_tx_hw_res_descr *result;
954		u8 offset = wl->tx_results_count & TX_HW_RESULT_QUEUE_LEN_MASK;
955
956		/* process the packet */
957		result =  &(wl->tx_res_if->tx_results_queue[offset]);
958		wl1271_tx_complete_packet(wl, result);
959
960		wl->tx_results_count++;
961	}
962
963out:
964	return ret;
965}
966EXPORT_SYMBOL(wlcore_tx_complete);
967
968void wl1271_tx_reset_link_queues(struct wl1271 *wl, u8 hlid)
969{
970	struct sk_buff *skb;
971	int i;
972	unsigned long flags;
973	struct ieee80211_tx_info *info;
974	int total[NUM_TX_QUEUES];
975
976	for (i = 0; i < NUM_TX_QUEUES; i++) {
977		total[i] = 0;
978		while ((skb = skb_dequeue(&wl->links[hlid].tx_queue[i]))) {
979			wl1271_debug(DEBUG_TX, "link freeing skb 0x%p", skb);
980
981			if (!wl12xx_is_dummy_packet(wl, skb)) {
982				info = IEEE80211_SKB_CB(skb);
983				info->status.rates[0].idx = -1;
984				info->status.rates[0].count = 0;
985				ieee80211_tx_status_ni(wl->hw, skb);
986			}
987
988			total[i]++;
989		}
990	}
991
992	spin_lock_irqsave(&wl->wl_lock, flags);
993	for (i = 0; i < NUM_TX_QUEUES; i++)
994		wl->tx_queue_count[i] -= total[i];
995	spin_unlock_irqrestore(&wl->wl_lock, flags);
996
997	wl1271_handle_tx_low_watermark(wl);
998}
999
1000/* caller must hold wl->mutex and TX must be stopped */
1001void wl12xx_tx_reset_wlvif(struct wl1271 *wl, struct wl12xx_vif *wlvif)
1002{
1003	int i;
1004
1005	/* TX failure */
1006	for_each_set_bit(i, wlvif->links_map, WL12XX_MAX_LINKS) {
1007		if (wlvif->bss_type == BSS_TYPE_AP_BSS)
1008			wl1271_free_sta(wl, wlvif, i);
1009		else
1010			wlvif->sta.ba_rx_bitmap = 0;
1011
1012		wl->links[i].allocated_pkts = 0;
1013		wl->links[i].prev_freed_pkts = 0;
1014	}
1015	wlvif->last_tx_hlid = 0;
1016
1017}
1018/* caller must hold wl->mutex and TX must be stopped */
1019void wl12xx_tx_reset(struct wl1271 *wl)
1020{
1021	int i;
1022	struct sk_buff *skb;
1023	struct ieee80211_tx_info *info;
1024
1025	/* only reset the queues if something bad happened */
1026	if (WARN_ON_ONCE(wl1271_tx_total_queue_count(wl) != 0)) {
1027		for (i = 0; i < WL12XX_MAX_LINKS; i++)
1028			wl1271_tx_reset_link_queues(wl, i);
1029
1030		for (i = 0; i < NUM_TX_QUEUES; i++)
1031			wl->tx_queue_count[i] = 0;
1032	}
1033
1034	/*
1035	 * Make sure the driver is at a consistent state, in case this
1036	 * function is called from a context other than interface removal.
1037	 * This call will always wake the TX queues.
1038	 */
1039	wl1271_handle_tx_low_watermark(wl);
1040
1041	for (i = 0; i < wl->num_tx_desc; i++) {
1042		if (wl->tx_frames[i] == NULL)
1043			continue;
1044
1045		skb = wl->tx_frames[i];
1046		wl1271_free_tx_id(wl, i);
1047		wl1271_debug(DEBUG_TX, "freeing skb 0x%p", skb);
1048
1049		if (!wl12xx_is_dummy_packet(wl, skb)) {
1050			/*
1051			 * Remove private headers before passing the skb to
1052			 * mac80211
1053			 */
1054			info = IEEE80211_SKB_CB(skb);
1055			skb_pull(skb, sizeof(struct wl1271_tx_hw_descr));
1056			if ((wl->quirks & WLCORE_QUIRK_TKIP_HEADER_SPACE) &&
1057			    info->control.hw_key &&
1058			    info->control.hw_key->cipher ==
1059			    WLAN_CIPHER_SUITE_TKIP) {
1060				int hdrlen = ieee80211_get_hdrlen_from_skb(skb);
1061				memmove(skb->data + WL1271_EXTRA_SPACE_TKIP,
1062					skb->data, hdrlen);
1063				skb_pull(skb, WL1271_EXTRA_SPACE_TKIP);
1064			}
1065
1066			info->status.rates[0].idx = -1;
1067			info->status.rates[0].count = 0;
1068
1069			ieee80211_tx_status_ni(wl->hw, skb);
1070		}
1071	}
1072}
1073
1074#define WL1271_TX_FLUSH_TIMEOUT 500000
1075
1076/* caller must *NOT* hold wl->mutex */
1077void wl1271_tx_flush(struct wl1271 *wl)
1078{
1079	unsigned long timeout;
1080	int i;
1081	timeout = jiffies + usecs_to_jiffies(WL1271_TX_FLUSH_TIMEOUT);
1082
1083	/* only one flush should be in progress, for consistent queue state */
1084	mutex_lock(&wl->flush_mutex);
1085
1086	wlcore_stop_queues(wl, WLCORE_QUEUE_STOP_REASON_FLUSH);
1087
1088	while (!time_after(jiffies, timeout)) {
1089		mutex_lock(&wl->mutex);
1090		wl1271_debug(DEBUG_TX, "flushing tx buffer: %d %d",
1091			     wl->tx_frames_cnt,
1092			     wl1271_tx_total_queue_count(wl));
1093		if ((wl->tx_frames_cnt == 0) &&
1094		    (wl1271_tx_total_queue_count(wl) == 0)) {
1095			mutex_unlock(&wl->mutex);
1096			goto out;
1097		}
1098		mutex_unlock(&wl->mutex);
1099		msleep(1);
1100	}
1101
1102	wl1271_warning("Unable to flush all TX buffers, timed out.");
1103
1104	/* forcibly flush all Tx buffers on our queues */
1105	mutex_lock(&wl->mutex);
1106	for (i = 0; i < WL12XX_MAX_LINKS; i++)
1107		wl1271_tx_reset_link_queues(wl, i);
1108	mutex_unlock(&wl->mutex);
1109
1110out:
1111	wlcore_wake_queues(wl, WLCORE_QUEUE_STOP_REASON_FLUSH);
1112	mutex_unlock(&wl->flush_mutex);
1113}
1114EXPORT_SYMBOL_GPL(wl1271_tx_flush);
1115
1116u32 wl1271_tx_min_rate_get(struct wl1271 *wl, u32 rate_set)
1117{
1118	if (WARN_ON(!rate_set))
1119		return 0;
1120
1121	return BIT(__ffs(rate_set));
1122}
1123
1124void wlcore_stop_queue_locked(struct wl1271 *wl, u8 queue,
1125			      enum wlcore_queue_stop_reason reason)
1126{
1127	bool stopped = !!wl->queue_stop_reasons[queue];
1128
1129	/* queue should not be stopped for this reason */
1130	WARN_ON(test_and_set_bit(reason, &wl->queue_stop_reasons[queue]));
1131
1132	if (stopped)
1133		return;
1134
1135	ieee80211_stop_queue(wl->hw, wl1271_tx_get_mac80211_queue(queue));
1136}
1137
1138void wlcore_stop_queue(struct wl1271 *wl, u8 queue,
1139		       enum wlcore_queue_stop_reason reason)
1140{
1141	unsigned long flags;
1142
1143	spin_lock_irqsave(&wl->wl_lock, flags);
1144	wlcore_stop_queue_locked(wl, queue, reason);
1145	spin_unlock_irqrestore(&wl->wl_lock, flags);
1146}
1147
1148void wlcore_wake_queue(struct wl1271 *wl, u8 queue,
1149		       enum wlcore_queue_stop_reason reason)
1150{
1151	unsigned long flags;
1152
1153	spin_lock_irqsave(&wl->wl_lock, flags);
1154
1155	/* queue should not be clear for this reason */
1156	WARN_ON(!test_and_clear_bit(reason, &wl->queue_stop_reasons[queue]));
1157
1158	if (wl->queue_stop_reasons[queue])
1159		goto out;
1160
1161	ieee80211_wake_queue(wl->hw, wl1271_tx_get_mac80211_queue(queue));
1162
1163out:
1164	spin_unlock_irqrestore(&wl->wl_lock, flags);
1165}
1166
1167void wlcore_stop_queues(struct wl1271 *wl,
1168			enum wlcore_queue_stop_reason reason)
1169{
1170	int i;
1171
1172	for (i = 0; i < NUM_TX_QUEUES; i++)
1173		wlcore_stop_queue(wl, i, reason);
1174}
1175EXPORT_SYMBOL_GPL(wlcore_stop_queues);
1176
1177void wlcore_wake_queues(struct wl1271 *wl,
1178			enum wlcore_queue_stop_reason reason)
1179{
1180	int i;
1181
1182	for (i = 0; i < NUM_TX_QUEUES; i++)
1183		wlcore_wake_queue(wl, i, reason);
1184}
1185EXPORT_SYMBOL_GPL(wlcore_wake_queues);
1186
1187void wlcore_reset_stopped_queues(struct wl1271 *wl)
1188{
1189	int i;
1190	unsigned long flags;
1191
1192	spin_lock_irqsave(&wl->wl_lock, flags);
1193
1194	for (i = 0; i < NUM_TX_QUEUES; i++) {
1195		if (!wl->queue_stop_reasons[i])
1196			continue;
1197
1198		wl->queue_stop_reasons[i] = 0;
1199		ieee80211_wake_queue(wl->hw,
1200				     wl1271_tx_get_mac80211_queue(i));
1201	}
1202
1203	spin_unlock_irqrestore(&wl->wl_lock, flags);
1204}
1205
1206bool wlcore_is_queue_stopped_by_reason(struct wl1271 *wl, u8 queue,
1207			     enum wlcore_queue_stop_reason reason)
1208{
1209	return test_bit(reason, &wl->queue_stop_reasons[queue]);
1210}
1211
1212bool wlcore_is_queue_stopped(struct wl1271 *wl, u8 queue)
1213{
1214	return !!wl->queue_stop_reasons[queue];
1215}
1216