xref: /openbmc/linux/drivers/net/wireless/ath/ath9k/main.c (revision 930beb5a)
1 /*
2  * Copyright (c) 2008-2011 Atheros Communications Inc.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 #include <linux/nl80211.h>
18 #include <linux/delay.h>
19 #include "ath9k.h"
20 #include "btcoex.h"
21 
22 static void ath9k_set_assoc_state(struct ath_softc *sc,
23 				  struct ieee80211_vif *vif);
24 
25 u8 ath9k_parse_mpdudensity(u8 mpdudensity)
26 {
27 	/*
28 	 * 802.11n D2.0 defined values for "Minimum MPDU Start Spacing":
29 	 *   0 for no restriction
30 	 *   1 for 1/4 us
31 	 *   2 for 1/2 us
32 	 *   3 for 1 us
33 	 *   4 for 2 us
34 	 *   5 for 4 us
35 	 *   6 for 8 us
36 	 *   7 for 16 us
37 	 */
38 	switch (mpdudensity) {
39 	case 0:
40 		return 0;
41 	case 1:
42 	case 2:
43 	case 3:
44 		/* Our lower layer calculations limit our precision to
45 		   1 microsecond */
46 		return 1;
47 	case 4:
48 		return 2;
49 	case 5:
50 		return 4;
51 	case 6:
52 		return 8;
53 	case 7:
54 		return 16;
55 	default:
56 		return 0;
57 	}
58 }
59 
60 static bool ath9k_has_pending_frames(struct ath_softc *sc, struct ath_txq *txq)
61 {
62 	bool pending = false;
63 
64 	spin_lock_bh(&txq->axq_lock);
65 
66 	if (txq->axq_depth || !list_empty(&txq->axq_acq))
67 		pending = true;
68 
69 	spin_unlock_bh(&txq->axq_lock);
70 	return pending;
71 }
72 
73 static bool ath9k_setpower(struct ath_softc *sc, enum ath9k_power_mode mode)
74 {
75 	unsigned long flags;
76 	bool ret;
77 
78 	spin_lock_irqsave(&sc->sc_pm_lock, flags);
79 	ret = ath9k_hw_setpower(sc->sc_ah, mode);
80 	spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
81 
82 	return ret;
83 }
84 
85 void ath9k_ps_wakeup(struct ath_softc *sc)
86 {
87 	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
88 	unsigned long flags;
89 	enum ath9k_power_mode power_mode;
90 
91 	spin_lock_irqsave(&sc->sc_pm_lock, flags);
92 	if (++sc->ps_usecount != 1)
93 		goto unlock;
94 
95 	power_mode = sc->sc_ah->power_mode;
96 	ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_AWAKE);
97 
98 	/*
99 	 * While the hardware is asleep, the cycle counters contain no
100 	 * useful data. Better clear them now so that they don't mess up
101 	 * survey data results.
102 	 */
103 	if (power_mode != ATH9K_PM_AWAKE) {
104 		spin_lock(&common->cc_lock);
105 		ath_hw_cycle_counters_update(common);
106 		memset(&common->cc_survey, 0, sizeof(common->cc_survey));
107 		memset(&common->cc_ani, 0, sizeof(common->cc_ani));
108 		spin_unlock(&common->cc_lock);
109 	}
110 
111  unlock:
112 	spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
113 }
114 
115 void ath9k_ps_restore(struct ath_softc *sc)
116 {
117 	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
118 	enum ath9k_power_mode mode;
119 	unsigned long flags;
120 	bool reset;
121 
122 	spin_lock_irqsave(&sc->sc_pm_lock, flags);
123 	if (--sc->ps_usecount != 0)
124 		goto unlock;
125 
126 	if (sc->ps_idle) {
127 		ath9k_hw_setrxabort(sc->sc_ah, 1);
128 		ath9k_hw_stopdmarecv(sc->sc_ah, &reset);
129 		mode = ATH9K_PM_FULL_SLEEP;
130 	} else if (sc->ps_enabled &&
131 		   !(sc->ps_flags & (PS_WAIT_FOR_BEACON |
132 				     PS_WAIT_FOR_CAB |
133 				     PS_WAIT_FOR_PSPOLL_DATA |
134 				     PS_WAIT_FOR_TX_ACK |
135 				     PS_WAIT_FOR_ANI))) {
136 		mode = ATH9K_PM_NETWORK_SLEEP;
137 		if (ath9k_hw_btcoex_is_enabled(sc->sc_ah))
138 			ath9k_btcoex_stop_gen_timer(sc);
139 	} else {
140 		goto unlock;
141 	}
142 
143 	spin_lock(&common->cc_lock);
144 	ath_hw_cycle_counters_update(common);
145 	spin_unlock(&common->cc_lock);
146 
147 	ath9k_hw_setpower(sc->sc_ah, mode);
148 
149  unlock:
150 	spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
151 }
152 
153 static void __ath_cancel_work(struct ath_softc *sc)
154 {
155 	cancel_work_sync(&sc->paprd_work);
156 	cancel_work_sync(&sc->hw_check_work);
157 	cancel_delayed_work_sync(&sc->tx_complete_work);
158 	cancel_delayed_work_sync(&sc->hw_pll_work);
159 
160 #ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
161 	if (ath9k_hw_mci_is_enabled(sc->sc_ah))
162 		cancel_work_sync(&sc->mci_work);
163 #endif
164 }
165 
166 static void ath_cancel_work(struct ath_softc *sc)
167 {
168 	__ath_cancel_work(sc);
169 	cancel_work_sync(&sc->hw_reset_work);
170 }
171 
172 static void ath_restart_work(struct ath_softc *sc)
173 {
174 	ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, 0);
175 
176 	if (AR_SREV_9340(sc->sc_ah) || AR_SREV_9330(sc->sc_ah))
177 		ieee80211_queue_delayed_work(sc->hw, &sc->hw_pll_work,
178 				     msecs_to_jiffies(ATH_PLL_WORK_INTERVAL));
179 
180 	ath_start_rx_poll(sc, 3);
181 	ath_start_ani(sc);
182 }
183 
184 static bool ath_prepare_reset(struct ath_softc *sc)
185 {
186 	struct ath_hw *ah = sc->sc_ah;
187 	bool ret = true;
188 
189 	ieee80211_stop_queues(sc->hw);
190 
191 	sc->hw_busy_count = 0;
192 	ath_stop_ani(sc);
193 	del_timer_sync(&sc->rx_poll_timer);
194 
195 	ath9k_hw_disable_interrupts(ah);
196 
197 	if (!ath_drain_all_txq(sc))
198 		ret = false;
199 
200 	if (!ath_stoprecv(sc))
201 		ret = false;
202 
203 	return ret;
204 }
205 
206 static bool ath_complete_reset(struct ath_softc *sc, bool start)
207 {
208 	struct ath_hw *ah = sc->sc_ah;
209 	struct ath_common *common = ath9k_hw_common(ah);
210 	unsigned long flags;
211 	int i;
212 
213 	if (ath_startrecv(sc) != 0) {
214 		ath_err(common, "Unable to restart recv logic\n");
215 		return false;
216 	}
217 
218 	ath9k_cmn_update_txpow(ah, sc->curtxpow,
219 			       sc->config.txpowlimit, &sc->curtxpow);
220 
221 	clear_bit(SC_OP_HW_RESET, &sc->sc_flags);
222 	ath9k_hw_set_interrupts(ah);
223 	ath9k_hw_enable_interrupts(ah);
224 
225 	if (!(sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL) && start) {
226 		if (!test_bit(SC_OP_BEACONS, &sc->sc_flags))
227 			goto work;
228 
229 		if (ah->opmode == NL80211_IFTYPE_STATION &&
230 		    test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) {
231 			spin_lock_irqsave(&sc->sc_pm_lock, flags);
232 			sc->ps_flags |= PS_BEACON_SYNC | PS_WAIT_FOR_BEACON;
233 			spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
234 		} else {
235 			ath9k_set_beacon(sc);
236 		}
237 	work:
238 		ath_restart_work(sc);
239 
240 		for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
241 			if (!ATH_TXQ_SETUP(sc, i))
242 				continue;
243 
244 			spin_lock_bh(&sc->tx.txq[i].axq_lock);
245 			ath_txq_schedule(sc, &sc->tx.txq[i]);
246 			spin_unlock_bh(&sc->tx.txq[i].axq_lock);
247 		}
248 	}
249 
250 	ieee80211_wake_queues(sc->hw);
251 
252 	return true;
253 }
254 
255 static int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan)
256 {
257 	struct ath_hw *ah = sc->sc_ah;
258 	struct ath_common *common = ath9k_hw_common(ah);
259 	struct ath9k_hw_cal_data *caldata = NULL;
260 	bool fastcc = true;
261 	int r;
262 
263 	__ath_cancel_work(sc);
264 
265 	tasklet_disable(&sc->intr_tq);
266 	spin_lock_bh(&sc->sc_pcu_lock);
267 
268 	if (!(sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)) {
269 		fastcc = false;
270 		caldata = &sc->caldata;
271 	}
272 
273 	if (!hchan) {
274 		fastcc = false;
275 		hchan = ah->curchan;
276 	}
277 
278 	if (!ath_prepare_reset(sc))
279 		fastcc = false;
280 
281 	ath_dbg(common, CONFIG, "Reset to %u MHz, HT40: %d fastcc: %d\n",
282 		hchan->channel, IS_CHAN_HT40(hchan), fastcc);
283 
284 	r = ath9k_hw_reset(ah, hchan, caldata, fastcc);
285 	if (r) {
286 		ath_err(common,
287 			"Unable to reset channel, reset status %d\n", r);
288 
289 		ath9k_hw_enable_interrupts(ah);
290 		ath9k_queue_reset(sc, RESET_TYPE_BB_HANG);
291 
292 		goto out;
293 	}
294 
295 	if (ath9k_hw_mci_is_enabled(sc->sc_ah) &&
296 	    (sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL))
297 		ath9k_mci_set_txpower(sc, true, false);
298 
299 	if (!ath_complete_reset(sc, true))
300 		r = -EIO;
301 
302 out:
303 	spin_unlock_bh(&sc->sc_pcu_lock);
304 	tasklet_enable(&sc->intr_tq);
305 
306 	return r;
307 }
308 
309 
310 /*
311  * Set/change channels.  If the channel is really being changed, it's done
312  * by reseting the chip.  To accomplish this we must first cleanup any pending
313  * DMA, then restart stuff.
314 */
315 static int ath_set_channel(struct ath_softc *sc, struct cfg80211_chan_def *chandef)
316 {
317 	struct ath_hw *ah = sc->sc_ah;
318 	struct ath_common *common = ath9k_hw_common(ah);
319 	struct ieee80211_hw *hw = sc->hw;
320 	struct ath9k_channel *hchan;
321 	struct ieee80211_channel *chan = chandef->chan;
322 	unsigned long flags;
323 	bool offchannel;
324 	int pos = chan->hw_value;
325 	int old_pos = -1;
326 	int r;
327 
328 	if (test_bit(SC_OP_INVALID, &sc->sc_flags))
329 		return -EIO;
330 
331 	offchannel = !!(hw->conf.flags & IEEE80211_CONF_OFFCHANNEL);
332 
333 	if (ah->curchan)
334 		old_pos = ah->curchan - &ah->channels[0];
335 
336 	ath_dbg(common, CONFIG, "Set channel: %d MHz width: %d\n",
337 		chan->center_freq, chandef->width);
338 
339 	/* update survey stats for the old channel before switching */
340 	spin_lock_irqsave(&common->cc_lock, flags);
341 	ath_update_survey_stats(sc);
342 	spin_unlock_irqrestore(&common->cc_lock, flags);
343 
344 	ath9k_cmn_get_channel(hw, ah, chandef);
345 
346 	/*
347 	 * If the operating channel changes, change the survey in-use flags
348 	 * along with it.
349 	 * Reset the survey data for the new channel, unless we're switching
350 	 * back to the operating channel from an off-channel operation.
351 	 */
352 	if (!offchannel && sc->cur_survey != &sc->survey[pos]) {
353 		if (sc->cur_survey)
354 			sc->cur_survey->filled &= ~SURVEY_INFO_IN_USE;
355 
356 		sc->cur_survey = &sc->survey[pos];
357 
358 		memset(sc->cur_survey, 0, sizeof(struct survey_info));
359 		sc->cur_survey->filled |= SURVEY_INFO_IN_USE;
360 	} else if (!(sc->survey[pos].filled & SURVEY_INFO_IN_USE)) {
361 		memset(&sc->survey[pos], 0, sizeof(struct survey_info));
362 	}
363 
364 	hchan = &sc->sc_ah->channels[pos];
365 	r = ath_reset_internal(sc, hchan);
366 	if (r)
367 		return r;
368 
369 	/*
370 	 * The most recent snapshot of channel->noisefloor for the old
371 	 * channel is only available after the hardware reset. Copy it to
372 	 * the survey stats now.
373 	 */
374 	if (old_pos >= 0)
375 		ath_update_survey_nf(sc, old_pos);
376 
377 	/*
378 	 * Enable radar pulse detection if on a DFS channel. Spectral
379 	 * scanning and radar detection can not be used concurrently.
380 	 */
381 	if (hw->conf.radar_enabled) {
382 		u32 rxfilter;
383 
384 		/* set HW specific DFS configuration */
385 		ath9k_hw_set_radar_params(ah);
386 		rxfilter = ath9k_hw_getrxfilter(ah);
387 		rxfilter |= ATH9K_RX_FILTER_PHYRADAR |
388 				ATH9K_RX_FILTER_PHYERR;
389 		ath9k_hw_setrxfilter(ah, rxfilter);
390 		ath_dbg(common, DFS, "DFS enabled at freq %d\n",
391 			chan->center_freq);
392 	} else {
393 		/* perform spectral scan if requested. */
394 		if (test_bit(SC_OP_SCANNING, &sc->sc_flags) &&
395 			sc->spectral_mode == SPECTRAL_CHANSCAN)
396 			ath9k_spectral_scan_trigger(hw);
397 	}
398 
399 	return 0;
400 }
401 
402 static void ath_node_attach(struct ath_softc *sc, struct ieee80211_sta *sta,
403 			    struct ieee80211_vif *vif)
404 {
405 	struct ath_node *an;
406 	an = (struct ath_node *)sta->drv_priv;
407 
408 	an->sc = sc;
409 	an->sta = sta;
410 	an->vif = vif;
411 
412 	ath_tx_node_init(sc, an);
413 
414 	if (sta->ht_cap.ht_supported) {
415 		an->maxampdu = 1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
416 				     sta->ht_cap.ampdu_factor);
417 		an->mpdudensity = ath9k_parse_mpdudensity(sta->ht_cap.ampdu_density);
418 	}
419 }
420 
421 static void ath_node_detach(struct ath_softc *sc, struct ieee80211_sta *sta)
422 {
423 	struct ath_node *an = (struct ath_node *)sta->drv_priv;
424 	ath_tx_node_cleanup(sc, an);
425 }
426 
427 void ath9k_tasklet(unsigned long data)
428 {
429 	struct ath_softc *sc = (struct ath_softc *)data;
430 	struct ath_hw *ah = sc->sc_ah;
431 	struct ath_common *common = ath9k_hw_common(ah);
432 	enum ath_reset_type type;
433 	unsigned long flags;
434 	u32 status = sc->intrstatus;
435 	u32 rxmask;
436 
437 	ath9k_ps_wakeup(sc);
438 	spin_lock(&sc->sc_pcu_lock);
439 
440 	if ((status & ATH9K_INT_FATAL) ||
441 	    (status & ATH9K_INT_BB_WATCHDOG)) {
442 
443 		if (status & ATH9K_INT_FATAL)
444 			type = RESET_TYPE_FATAL_INT;
445 		else
446 			type = RESET_TYPE_BB_WATCHDOG;
447 
448 		ath9k_queue_reset(sc, type);
449 
450 		/*
451 		 * Increment the ref. counter here so that
452 		 * interrupts are enabled in the reset routine.
453 		 */
454 		atomic_inc(&ah->intr_ref_cnt);
455 		ath_dbg(common, ANY, "FATAL: Skipping interrupts\n");
456 		goto out;
457 	}
458 
459 	spin_lock_irqsave(&sc->sc_pm_lock, flags);
460 	if ((status & ATH9K_INT_TSFOOR) && sc->ps_enabled) {
461 		/*
462 		 * TSF sync does not look correct; remain awake to sync with
463 		 * the next Beacon.
464 		 */
465 		ath_dbg(common, PS, "TSFOOR - Sync with next Beacon\n");
466 		sc->ps_flags |= PS_WAIT_FOR_BEACON | PS_BEACON_SYNC;
467 	}
468 	spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
469 
470 	if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
471 		rxmask = (ATH9K_INT_RXHP | ATH9K_INT_RXLP | ATH9K_INT_RXEOL |
472 			  ATH9K_INT_RXORN);
473 	else
474 		rxmask = (ATH9K_INT_RX | ATH9K_INT_RXEOL | ATH9K_INT_RXORN);
475 
476 	if (status & rxmask) {
477 		/* Check for high priority Rx first */
478 		if ((ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) &&
479 		    (status & ATH9K_INT_RXHP))
480 			ath_rx_tasklet(sc, 0, true);
481 
482 		ath_rx_tasklet(sc, 0, false);
483 	}
484 
485 	if (status & ATH9K_INT_TX) {
486 		if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
487 			ath_tx_edma_tasklet(sc);
488 		else
489 			ath_tx_tasklet(sc);
490 	}
491 
492 	ath9k_btcoex_handle_interrupt(sc, status);
493 
494 	/* re-enable hardware interrupt */
495 	ath9k_hw_enable_interrupts(ah);
496 out:
497 	spin_unlock(&sc->sc_pcu_lock);
498 	ath9k_ps_restore(sc);
499 }
500 
501 irqreturn_t ath_isr(int irq, void *dev)
502 {
503 #define SCHED_INTR (				\
504 		ATH9K_INT_FATAL |		\
505 		ATH9K_INT_BB_WATCHDOG |		\
506 		ATH9K_INT_RXORN |		\
507 		ATH9K_INT_RXEOL |		\
508 		ATH9K_INT_RX |			\
509 		ATH9K_INT_RXLP |		\
510 		ATH9K_INT_RXHP |		\
511 		ATH9K_INT_TX |			\
512 		ATH9K_INT_BMISS |		\
513 		ATH9K_INT_CST |			\
514 		ATH9K_INT_TSFOOR |		\
515 		ATH9K_INT_GENTIMER |		\
516 		ATH9K_INT_MCI)
517 
518 	struct ath_softc *sc = dev;
519 	struct ath_hw *ah = sc->sc_ah;
520 	struct ath_common *common = ath9k_hw_common(ah);
521 	enum ath9k_int status;
522 	bool sched = false;
523 
524 	/*
525 	 * The hardware is not ready/present, don't
526 	 * touch anything. Note this can happen early
527 	 * on if the IRQ is shared.
528 	 */
529 	if (test_bit(SC_OP_INVALID, &sc->sc_flags))
530 		return IRQ_NONE;
531 
532 	/* shared irq, not for us */
533 
534 	if (!ath9k_hw_intrpend(ah))
535 		return IRQ_NONE;
536 
537 	if (test_bit(SC_OP_HW_RESET, &sc->sc_flags)) {
538 		ath9k_hw_kill_interrupts(ah);
539 		return IRQ_HANDLED;
540 	}
541 
542 	/*
543 	 * Figure out the reason(s) for the interrupt.  Note
544 	 * that the hal returns a pseudo-ISR that may include
545 	 * bits we haven't explicitly enabled so we mask the
546 	 * value to insure we only process bits we requested.
547 	 */
548 	ath9k_hw_getisr(ah, &status);	/* NB: clears ISR too */
549 	status &= ah->imask;	/* discard unasked-for bits */
550 
551 	/*
552 	 * If there are no status bits set, then this interrupt was not
553 	 * for me (should have been caught above).
554 	 */
555 	if (!status)
556 		return IRQ_NONE;
557 
558 	/* Cache the status */
559 	sc->intrstatus = status;
560 
561 	if (status & SCHED_INTR)
562 		sched = true;
563 
564 	/*
565 	 * If a FATAL or RXORN interrupt is received, we have to reset the
566 	 * chip immediately.
567 	 */
568 	if ((status & ATH9K_INT_FATAL) || ((status & ATH9K_INT_RXORN) &&
569 	    !(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)))
570 		goto chip_reset;
571 
572 	if ((ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) &&
573 	    (status & ATH9K_INT_BB_WATCHDOG)) {
574 
575 		spin_lock(&common->cc_lock);
576 		ath_hw_cycle_counters_update(common);
577 		ar9003_hw_bb_watchdog_dbg_info(ah);
578 		spin_unlock(&common->cc_lock);
579 
580 		goto chip_reset;
581 	}
582 #ifdef CONFIG_PM_SLEEP
583 	if (status & ATH9K_INT_BMISS) {
584 		if (atomic_read(&sc->wow_sleep_proc_intr) == 0) {
585 			ath_dbg(common, ANY, "during WoW we got a BMISS\n");
586 			atomic_inc(&sc->wow_got_bmiss_intr);
587 			atomic_dec(&sc->wow_sleep_proc_intr);
588 		}
589 	}
590 #endif
591 	if (status & ATH9K_INT_SWBA)
592 		tasklet_schedule(&sc->bcon_tasklet);
593 
594 	if (status & ATH9K_INT_TXURN)
595 		ath9k_hw_updatetxtriglevel(ah, true);
596 
597 	if (status & ATH9K_INT_RXEOL) {
598 		ah->imask &= ~(ATH9K_INT_RXEOL | ATH9K_INT_RXORN);
599 		ath9k_hw_set_interrupts(ah);
600 	}
601 
602 	if (!(ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP))
603 		if (status & ATH9K_INT_TIM_TIMER) {
604 			if (ATH_DBG_WARN_ON_ONCE(sc->ps_idle))
605 				goto chip_reset;
606 			/* Clear RxAbort bit so that we can
607 			 * receive frames */
608 			ath9k_setpower(sc, ATH9K_PM_AWAKE);
609 			spin_lock(&sc->sc_pm_lock);
610 			ath9k_hw_setrxabort(sc->sc_ah, 0);
611 			sc->ps_flags |= PS_WAIT_FOR_BEACON;
612 			spin_unlock(&sc->sc_pm_lock);
613 		}
614 
615 chip_reset:
616 
617 	ath_debug_stat_interrupt(sc, status);
618 
619 	if (sched) {
620 		/* turn off every interrupt */
621 		ath9k_hw_disable_interrupts(ah);
622 		tasklet_schedule(&sc->intr_tq);
623 	}
624 
625 	return IRQ_HANDLED;
626 
627 #undef SCHED_INTR
628 }
629 
630 static int ath_reset(struct ath_softc *sc)
631 {
632 	int r;
633 
634 	ath9k_ps_wakeup(sc);
635 	r = ath_reset_internal(sc, NULL);
636 	ath9k_ps_restore(sc);
637 
638 	return r;
639 }
640 
641 void ath9k_queue_reset(struct ath_softc *sc, enum ath_reset_type type)
642 {
643 #ifdef CONFIG_ATH9K_DEBUGFS
644 	RESET_STAT_INC(sc, type);
645 #endif
646 	set_bit(SC_OP_HW_RESET, &sc->sc_flags);
647 	ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
648 }
649 
650 void ath_reset_work(struct work_struct *work)
651 {
652 	struct ath_softc *sc = container_of(work, struct ath_softc, hw_reset_work);
653 
654 	ath_reset(sc);
655 }
656 
657 /**********************/
658 /* mac80211 callbacks */
659 /**********************/
660 
661 static int ath9k_start(struct ieee80211_hw *hw)
662 {
663 	struct ath_softc *sc = hw->priv;
664 	struct ath_hw *ah = sc->sc_ah;
665 	struct ath_common *common = ath9k_hw_common(ah);
666 	struct ieee80211_channel *curchan = hw->conf.chandef.chan;
667 	struct ath9k_channel *init_channel;
668 	int r;
669 
670 	ath_dbg(common, CONFIG,
671 		"Starting driver with initial channel: %d MHz\n",
672 		curchan->center_freq);
673 
674 	ath9k_ps_wakeup(sc);
675 	mutex_lock(&sc->mutex);
676 
677 	init_channel = ath9k_cmn_get_channel(hw, ah, &hw->conf.chandef);
678 
679 	/* Reset SERDES registers */
680 	ath9k_hw_configpcipowersave(ah, false);
681 
682 	/*
683 	 * The basic interface to setting the hardware in a good
684 	 * state is ``reset''.  On return the hardware is known to
685 	 * be powered up and with interrupts disabled.  This must
686 	 * be followed by initialization of the appropriate bits
687 	 * and then setup of the interrupt mask.
688 	 */
689 	spin_lock_bh(&sc->sc_pcu_lock);
690 
691 	atomic_set(&ah->intr_ref_cnt, -1);
692 
693 	r = ath9k_hw_reset(ah, init_channel, ah->caldata, false);
694 	if (r) {
695 		ath_err(common,
696 			"Unable to reset hardware; reset status %d (freq %u MHz)\n",
697 			r, curchan->center_freq);
698 		ah->reset_power_on = false;
699 	}
700 
701 	/* Setup our intr mask. */
702 	ah->imask = ATH9K_INT_TX | ATH9K_INT_RXEOL |
703 		    ATH9K_INT_RXORN | ATH9K_INT_FATAL |
704 		    ATH9K_INT_GLOBAL;
705 
706 	if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
707 		ah->imask |= ATH9K_INT_RXHP |
708 			     ATH9K_INT_RXLP |
709 			     ATH9K_INT_BB_WATCHDOG;
710 	else
711 		ah->imask |= ATH9K_INT_RX;
712 
713 	ah->imask |= ATH9K_INT_GTT;
714 
715 	if (ah->caps.hw_caps & ATH9K_HW_CAP_HT)
716 		ah->imask |= ATH9K_INT_CST;
717 
718 	ath_mci_enable(sc);
719 
720 	clear_bit(SC_OP_INVALID, &sc->sc_flags);
721 	sc->sc_ah->is_monitoring = false;
722 
723 	if (!ath_complete_reset(sc, false))
724 		ah->reset_power_on = false;
725 
726 	if (ah->led_pin >= 0) {
727 		ath9k_hw_cfg_output(ah, ah->led_pin,
728 				    AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
729 		ath9k_hw_set_gpio(ah, ah->led_pin, 0);
730 	}
731 
732 	/*
733 	 * Reset key cache to sane defaults (all entries cleared) instead of
734 	 * semi-random values after suspend/resume.
735 	 */
736 	ath9k_cmn_init_crypto(sc->sc_ah);
737 
738 	spin_unlock_bh(&sc->sc_pcu_lock);
739 
740 	mutex_unlock(&sc->mutex);
741 
742 	ath9k_ps_restore(sc);
743 
744 	return 0;
745 }
746 
747 static void ath9k_tx(struct ieee80211_hw *hw,
748 		     struct ieee80211_tx_control *control,
749 		     struct sk_buff *skb)
750 {
751 	struct ath_softc *sc = hw->priv;
752 	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
753 	struct ath_tx_control txctl;
754 	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
755 	unsigned long flags;
756 
757 	if (sc->ps_enabled) {
758 		/*
759 		 * mac80211 does not set PM field for normal data frames, so we
760 		 * need to update that based on the current PS mode.
761 		 */
762 		if (ieee80211_is_data(hdr->frame_control) &&
763 		    !ieee80211_is_nullfunc(hdr->frame_control) &&
764 		    !ieee80211_has_pm(hdr->frame_control)) {
765 			ath_dbg(common, PS,
766 				"Add PM=1 for a TX frame while in PS mode\n");
767 			hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PM);
768 		}
769 	}
770 
771 	if (unlikely(sc->sc_ah->power_mode == ATH9K_PM_NETWORK_SLEEP)) {
772 		/*
773 		 * We are using PS-Poll and mac80211 can request TX while in
774 		 * power save mode. Need to wake up hardware for the TX to be
775 		 * completed and if needed, also for RX of buffered frames.
776 		 */
777 		ath9k_ps_wakeup(sc);
778 		spin_lock_irqsave(&sc->sc_pm_lock, flags);
779 		if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP))
780 			ath9k_hw_setrxabort(sc->sc_ah, 0);
781 		if (ieee80211_is_pspoll(hdr->frame_control)) {
782 			ath_dbg(common, PS,
783 				"Sending PS-Poll to pick a buffered frame\n");
784 			sc->ps_flags |= PS_WAIT_FOR_PSPOLL_DATA;
785 		} else {
786 			ath_dbg(common, PS, "Wake up to complete TX\n");
787 			sc->ps_flags |= PS_WAIT_FOR_TX_ACK;
788 		}
789 		/*
790 		 * The actual restore operation will happen only after
791 		 * the ps_flags bit is cleared. We are just dropping
792 		 * the ps_usecount here.
793 		 */
794 		spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
795 		ath9k_ps_restore(sc);
796 	}
797 
798 	/*
799 	 * Cannot tx while the hardware is in full sleep, it first needs a full
800 	 * chip reset to recover from that
801 	 */
802 	if (unlikely(sc->sc_ah->power_mode == ATH9K_PM_FULL_SLEEP)) {
803 		ath_err(common, "TX while HW is in FULL_SLEEP mode\n");
804 		goto exit;
805 	}
806 
807 	memset(&txctl, 0, sizeof(struct ath_tx_control));
808 	txctl.txq = sc->tx.txq_map[skb_get_queue_mapping(skb)];
809 	txctl.sta = control->sta;
810 
811 	ath_dbg(common, XMIT, "transmitting packet, skb: %p\n", skb);
812 
813 	if (ath_tx_start(hw, skb, &txctl) != 0) {
814 		ath_dbg(common, XMIT, "TX failed\n");
815 		TX_STAT_INC(txctl.txq->axq_qnum, txfailed);
816 		goto exit;
817 	}
818 
819 	return;
820 exit:
821 	ieee80211_free_txskb(hw, skb);
822 }
823 
824 static void ath9k_stop(struct ieee80211_hw *hw)
825 {
826 	struct ath_softc *sc = hw->priv;
827 	struct ath_hw *ah = sc->sc_ah;
828 	struct ath_common *common = ath9k_hw_common(ah);
829 	bool prev_idle;
830 
831 	mutex_lock(&sc->mutex);
832 
833 	ath_cancel_work(sc);
834 	del_timer_sync(&sc->rx_poll_timer);
835 
836 	if (test_bit(SC_OP_INVALID, &sc->sc_flags)) {
837 		ath_dbg(common, ANY, "Device not present\n");
838 		mutex_unlock(&sc->mutex);
839 		return;
840 	}
841 
842 	/* Ensure HW is awake when we try to shut it down. */
843 	ath9k_ps_wakeup(sc);
844 
845 	spin_lock_bh(&sc->sc_pcu_lock);
846 
847 	/* prevent tasklets to enable interrupts once we disable them */
848 	ah->imask &= ~ATH9K_INT_GLOBAL;
849 
850 	/* make sure h/w will not generate any interrupt
851 	 * before setting the invalid flag. */
852 	ath9k_hw_disable_interrupts(ah);
853 
854 	spin_unlock_bh(&sc->sc_pcu_lock);
855 
856 	/* we can now sync irq and kill any running tasklets, since we already
857 	 * disabled interrupts and not holding a spin lock */
858 	synchronize_irq(sc->irq);
859 	tasklet_kill(&sc->intr_tq);
860 	tasklet_kill(&sc->bcon_tasklet);
861 
862 	prev_idle = sc->ps_idle;
863 	sc->ps_idle = true;
864 
865 	spin_lock_bh(&sc->sc_pcu_lock);
866 
867 	if (ah->led_pin >= 0) {
868 		ath9k_hw_set_gpio(ah, ah->led_pin, 1);
869 		ath9k_hw_cfg_gpio_input(ah, ah->led_pin);
870 	}
871 
872 	ath_prepare_reset(sc);
873 
874 	if (sc->rx.frag) {
875 		dev_kfree_skb_any(sc->rx.frag);
876 		sc->rx.frag = NULL;
877 	}
878 
879 	if (!ah->curchan)
880 		ah->curchan = ath9k_cmn_get_channel(hw, ah, &hw->conf.chandef);
881 
882 	ath9k_hw_reset(ah, ah->curchan, ah->caldata, false);
883 	ath9k_hw_phy_disable(ah);
884 
885 	ath9k_hw_configpcipowersave(ah, true);
886 
887 	spin_unlock_bh(&sc->sc_pcu_lock);
888 
889 	ath9k_ps_restore(sc);
890 
891 	set_bit(SC_OP_INVALID, &sc->sc_flags);
892 	sc->ps_idle = prev_idle;
893 
894 	mutex_unlock(&sc->mutex);
895 
896 	ath_dbg(common, CONFIG, "Driver halt\n");
897 }
898 
899 static bool ath9k_uses_beacons(int type)
900 {
901 	switch (type) {
902 	case NL80211_IFTYPE_AP:
903 	case NL80211_IFTYPE_ADHOC:
904 	case NL80211_IFTYPE_MESH_POINT:
905 		return true;
906 	default:
907 		return false;
908 	}
909 }
910 
911 static void ath9k_vif_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
912 {
913 	struct ath9k_vif_iter_data *iter_data = data;
914 	int i;
915 
916 	if (iter_data->has_hw_macaddr) {
917 		for (i = 0; i < ETH_ALEN; i++)
918 			iter_data->mask[i] &=
919 				~(iter_data->hw_macaddr[i] ^ mac[i]);
920 	} else {
921 		memcpy(iter_data->hw_macaddr, mac, ETH_ALEN);
922 		iter_data->has_hw_macaddr = true;
923 	}
924 
925 	switch (vif->type) {
926 	case NL80211_IFTYPE_AP:
927 		iter_data->naps++;
928 		break;
929 	case NL80211_IFTYPE_STATION:
930 		iter_data->nstations++;
931 		break;
932 	case NL80211_IFTYPE_ADHOC:
933 		iter_data->nadhocs++;
934 		break;
935 	case NL80211_IFTYPE_MESH_POINT:
936 		iter_data->nmeshes++;
937 		break;
938 	case NL80211_IFTYPE_WDS:
939 		iter_data->nwds++;
940 		break;
941 	default:
942 		break;
943 	}
944 }
945 
946 static void ath9k_sta_vif_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
947 {
948 	struct ath_softc *sc = data;
949 	struct ath_vif *avp = (void *)vif->drv_priv;
950 
951 	if (vif->type != NL80211_IFTYPE_STATION)
952 		return;
953 
954 	if (avp->primary_sta_vif)
955 		ath9k_set_assoc_state(sc, vif);
956 }
957 
958 /* Called with sc->mutex held. */
959 void ath9k_calculate_iter_data(struct ieee80211_hw *hw,
960 			       struct ieee80211_vif *vif,
961 			       struct ath9k_vif_iter_data *iter_data)
962 {
963 	struct ath_softc *sc = hw->priv;
964 	struct ath_hw *ah = sc->sc_ah;
965 	struct ath_common *common = ath9k_hw_common(ah);
966 
967 	/*
968 	 * Pick the MAC address of the first interface as the new hardware
969 	 * MAC address. The hardware will use it together with the BSSID mask
970 	 * when matching addresses.
971 	 */
972 	memset(iter_data, 0, sizeof(*iter_data));
973 	memset(&iter_data->mask, 0xff, ETH_ALEN);
974 
975 	if (vif)
976 		ath9k_vif_iter(iter_data, vif->addr, vif);
977 
978 	/* Get list of all active MAC addresses */
979 	ieee80211_iterate_active_interfaces_atomic(
980 		sc->hw, IEEE80211_IFACE_ITER_RESUME_ALL,
981 		ath9k_vif_iter, iter_data);
982 
983 	memcpy(common->macaddr, iter_data->hw_macaddr, ETH_ALEN);
984 }
985 
986 /* Called with sc->mutex held. */
987 static void ath9k_calculate_summary_state(struct ieee80211_hw *hw,
988 					  struct ieee80211_vif *vif)
989 {
990 	struct ath_softc *sc = hw->priv;
991 	struct ath_hw *ah = sc->sc_ah;
992 	struct ath_common *common = ath9k_hw_common(ah);
993 	struct ath9k_vif_iter_data iter_data;
994 	enum nl80211_iftype old_opmode = ah->opmode;
995 
996 	ath9k_calculate_iter_data(hw, vif, &iter_data);
997 
998 	memcpy(common->bssidmask, iter_data.mask, ETH_ALEN);
999 	ath_hw_setbssidmask(common);
1000 
1001 	if (iter_data.naps > 0) {
1002 		ath9k_hw_set_tsfadjust(ah, true);
1003 		ah->opmode = NL80211_IFTYPE_AP;
1004 	} else {
1005 		ath9k_hw_set_tsfadjust(ah, false);
1006 
1007 		if (iter_data.nmeshes)
1008 			ah->opmode = NL80211_IFTYPE_MESH_POINT;
1009 		else if (iter_data.nwds)
1010 			ah->opmode = NL80211_IFTYPE_AP;
1011 		else if (iter_data.nadhocs)
1012 			ah->opmode = NL80211_IFTYPE_ADHOC;
1013 		else
1014 			ah->opmode = NL80211_IFTYPE_STATION;
1015 	}
1016 
1017 	ath9k_hw_setopmode(ah);
1018 
1019 	if ((iter_data.nstations + iter_data.nadhocs + iter_data.nmeshes) > 0)
1020 		ah->imask |= ATH9K_INT_TSFOOR;
1021 	else
1022 		ah->imask &= ~ATH9K_INT_TSFOOR;
1023 
1024 	ath9k_hw_set_interrupts(ah);
1025 
1026 	/*
1027 	 * If we are changing the opmode to STATION,
1028 	 * a beacon sync needs to be done.
1029 	 */
1030 	if (ah->opmode == NL80211_IFTYPE_STATION &&
1031 	    old_opmode == NL80211_IFTYPE_AP &&
1032 	    test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) {
1033 		ieee80211_iterate_active_interfaces_atomic(
1034 			sc->hw, IEEE80211_IFACE_ITER_RESUME_ALL,
1035 			ath9k_sta_vif_iter, sc);
1036 	}
1037 }
1038 
1039 static int ath9k_add_interface(struct ieee80211_hw *hw,
1040 			       struct ieee80211_vif *vif)
1041 {
1042 	struct ath_softc *sc = hw->priv;
1043 	struct ath_hw *ah = sc->sc_ah;
1044 	struct ath_common *common = ath9k_hw_common(ah);
1045 	struct ath_vif *avp = (void *)vif->drv_priv;
1046 	struct ath_node *an = &avp->mcast_node;
1047 
1048 	mutex_lock(&sc->mutex);
1049 
1050 	if (config_enabled(CONFIG_ATH9K_TX99)) {
1051 		if (sc->nvifs >= 1) {
1052 			mutex_unlock(&sc->mutex);
1053 			return -EOPNOTSUPP;
1054 		}
1055 		sc->tx99_vif = vif;
1056 	}
1057 
1058 	ath_dbg(common, CONFIG, "Attach a VIF of type: %d\n", vif->type);
1059 	sc->nvifs++;
1060 
1061 	ath9k_ps_wakeup(sc);
1062 	ath9k_calculate_summary_state(hw, vif);
1063 	ath9k_ps_restore(sc);
1064 
1065 	if (ath9k_uses_beacons(vif->type))
1066 		ath9k_beacon_assign_slot(sc, vif);
1067 
1068 	an->sc = sc;
1069 	an->sta = NULL;
1070 	an->vif = vif;
1071 	an->no_ps_filter = true;
1072 	ath_tx_node_init(sc, an);
1073 
1074 	mutex_unlock(&sc->mutex);
1075 	return 0;
1076 }
1077 
1078 static int ath9k_change_interface(struct ieee80211_hw *hw,
1079 				  struct ieee80211_vif *vif,
1080 				  enum nl80211_iftype new_type,
1081 				  bool p2p)
1082 {
1083 	struct ath_softc *sc = hw->priv;
1084 	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1085 
1086 	mutex_lock(&sc->mutex);
1087 
1088 	if (config_enabled(CONFIG_ATH9K_TX99)) {
1089 		mutex_unlock(&sc->mutex);
1090 		return -EOPNOTSUPP;
1091 	}
1092 
1093 	ath_dbg(common, CONFIG, "Change Interface\n");
1094 
1095 	if (ath9k_uses_beacons(vif->type))
1096 		ath9k_beacon_remove_slot(sc, vif);
1097 
1098 	vif->type = new_type;
1099 	vif->p2p = p2p;
1100 
1101 	ath9k_ps_wakeup(sc);
1102 	ath9k_calculate_summary_state(hw, vif);
1103 	ath9k_ps_restore(sc);
1104 
1105 	if (ath9k_uses_beacons(vif->type))
1106 		ath9k_beacon_assign_slot(sc, vif);
1107 
1108 	mutex_unlock(&sc->mutex);
1109 	return 0;
1110 }
1111 
1112 static void ath9k_remove_interface(struct ieee80211_hw *hw,
1113 				   struct ieee80211_vif *vif)
1114 {
1115 	struct ath_softc *sc = hw->priv;
1116 	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1117 	struct ath_vif *avp = (void *)vif->drv_priv;
1118 
1119 	ath_dbg(common, CONFIG, "Detach Interface\n");
1120 
1121 	mutex_lock(&sc->mutex);
1122 
1123 	sc->nvifs--;
1124 	sc->tx99_vif = NULL;
1125 
1126 	if (ath9k_uses_beacons(vif->type))
1127 		ath9k_beacon_remove_slot(sc, vif);
1128 
1129 	if (sc->csa_vif == vif)
1130 		sc->csa_vif = NULL;
1131 
1132 	ath9k_ps_wakeup(sc);
1133 	ath9k_calculate_summary_state(hw, NULL);
1134 	ath9k_ps_restore(sc);
1135 
1136 	ath_tx_node_cleanup(sc, &avp->mcast_node);
1137 
1138 	mutex_unlock(&sc->mutex);
1139 }
1140 
1141 static void ath9k_enable_ps(struct ath_softc *sc)
1142 {
1143 	struct ath_hw *ah = sc->sc_ah;
1144 	struct ath_common *common = ath9k_hw_common(ah);
1145 
1146 	if (config_enabled(CONFIG_ATH9K_TX99))
1147 		return;
1148 
1149 	sc->ps_enabled = true;
1150 	if (!(ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
1151 		if ((ah->imask & ATH9K_INT_TIM_TIMER) == 0) {
1152 			ah->imask |= ATH9K_INT_TIM_TIMER;
1153 			ath9k_hw_set_interrupts(ah);
1154 		}
1155 		ath9k_hw_setrxabort(ah, 1);
1156 	}
1157 	ath_dbg(common, PS, "PowerSave enabled\n");
1158 }
1159 
1160 static void ath9k_disable_ps(struct ath_softc *sc)
1161 {
1162 	struct ath_hw *ah = sc->sc_ah;
1163 	struct ath_common *common = ath9k_hw_common(ah);
1164 
1165 	if (config_enabled(CONFIG_ATH9K_TX99))
1166 		return;
1167 
1168 	sc->ps_enabled = false;
1169 	ath9k_hw_setpower(ah, ATH9K_PM_AWAKE);
1170 	if (!(ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
1171 		ath9k_hw_setrxabort(ah, 0);
1172 		sc->ps_flags &= ~(PS_WAIT_FOR_BEACON |
1173 				  PS_WAIT_FOR_CAB |
1174 				  PS_WAIT_FOR_PSPOLL_DATA |
1175 				  PS_WAIT_FOR_TX_ACK);
1176 		if (ah->imask & ATH9K_INT_TIM_TIMER) {
1177 			ah->imask &= ~ATH9K_INT_TIM_TIMER;
1178 			ath9k_hw_set_interrupts(ah);
1179 		}
1180 	}
1181 	ath_dbg(common, PS, "PowerSave disabled\n");
1182 }
1183 
1184 void ath9k_spectral_scan_trigger(struct ieee80211_hw *hw)
1185 {
1186 	struct ath_softc *sc = hw->priv;
1187 	struct ath_hw *ah = sc->sc_ah;
1188 	struct ath_common *common = ath9k_hw_common(ah);
1189 	u32 rxfilter;
1190 
1191 	if (config_enabled(CONFIG_ATH9K_TX99))
1192 		return;
1193 
1194 	if (!ath9k_hw_ops(ah)->spectral_scan_trigger) {
1195 		ath_err(common, "spectrum analyzer not implemented on this hardware\n");
1196 		return;
1197 	}
1198 
1199 	ath9k_ps_wakeup(sc);
1200 	rxfilter = ath9k_hw_getrxfilter(ah);
1201 	ath9k_hw_setrxfilter(ah, rxfilter |
1202 				 ATH9K_RX_FILTER_PHYRADAR |
1203 				 ATH9K_RX_FILTER_PHYERR);
1204 
1205 	/* TODO: usually this should not be neccesary, but for some reason
1206 	 * (or in some mode?) the trigger must be called after the
1207 	 * configuration, otherwise the register will have its values reset
1208 	 * (on my ar9220 to value 0x01002310)
1209 	 */
1210 	ath9k_spectral_scan_config(hw, sc->spectral_mode);
1211 	ath9k_hw_ops(ah)->spectral_scan_trigger(ah);
1212 	ath9k_ps_restore(sc);
1213 }
1214 
1215 int ath9k_spectral_scan_config(struct ieee80211_hw *hw,
1216 			       enum spectral_mode spectral_mode)
1217 {
1218 	struct ath_softc *sc = hw->priv;
1219 	struct ath_hw *ah = sc->sc_ah;
1220 	struct ath_common *common = ath9k_hw_common(ah);
1221 
1222 	if (!ath9k_hw_ops(ah)->spectral_scan_trigger) {
1223 		ath_err(common, "spectrum analyzer not implemented on this hardware\n");
1224 		return -1;
1225 	}
1226 
1227 	switch (spectral_mode) {
1228 	case SPECTRAL_DISABLED:
1229 		sc->spec_config.enabled = 0;
1230 		break;
1231 	case SPECTRAL_BACKGROUND:
1232 		/* send endless samples.
1233 		 * TODO: is this really useful for "background"?
1234 		 */
1235 		sc->spec_config.endless = 1;
1236 		sc->spec_config.enabled = 1;
1237 		break;
1238 	case SPECTRAL_CHANSCAN:
1239 	case SPECTRAL_MANUAL:
1240 		sc->spec_config.endless = 0;
1241 		sc->spec_config.enabled = 1;
1242 		break;
1243 	default:
1244 		return -1;
1245 	}
1246 
1247 	ath9k_ps_wakeup(sc);
1248 	ath9k_hw_ops(ah)->spectral_scan_config(ah, &sc->spec_config);
1249 	ath9k_ps_restore(sc);
1250 
1251 	sc->spectral_mode = spectral_mode;
1252 
1253 	return 0;
1254 }
1255 
1256 static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
1257 {
1258 	struct ath_softc *sc = hw->priv;
1259 	struct ath_hw *ah = sc->sc_ah;
1260 	struct ath_common *common = ath9k_hw_common(ah);
1261 	struct ieee80211_conf *conf = &hw->conf;
1262 	bool reset_channel = false;
1263 
1264 	ath9k_ps_wakeup(sc);
1265 	mutex_lock(&sc->mutex);
1266 
1267 	if (changed & IEEE80211_CONF_CHANGE_IDLE) {
1268 		sc->ps_idle = !!(conf->flags & IEEE80211_CONF_IDLE);
1269 		if (sc->ps_idle) {
1270 			ath_cancel_work(sc);
1271 			ath9k_stop_btcoex(sc);
1272 		} else {
1273 			ath9k_start_btcoex(sc);
1274 			/*
1275 			 * The chip needs a reset to properly wake up from
1276 			 * full sleep
1277 			 */
1278 			reset_channel = ah->chip_fullsleep;
1279 		}
1280 	}
1281 
1282 	/*
1283 	 * We just prepare to enable PS. We have to wait until our AP has
1284 	 * ACK'd our null data frame to disable RX otherwise we'll ignore
1285 	 * those ACKs and end up retransmitting the same null data frames.
1286 	 * IEEE80211_CONF_CHANGE_PS is only passed by mac80211 for STA mode.
1287 	 */
1288 	if (changed & IEEE80211_CONF_CHANGE_PS) {
1289 		unsigned long flags;
1290 		spin_lock_irqsave(&sc->sc_pm_lock, flags);
1291 		if (conf->flags & IEEE80211_CONF_PS)
1292 			ath9k_enable_ps(sc);
1293 		else
1294 			ath9k_disable_ps(sc);
1295 		spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
1296 	}
1297 
1298 	if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
1299 		if (conf->flags & IEEE80211_CONF_MONITOR) {
1300 			ath_dbg(common, CONFIG, "Monitor mode is enabled\n");
1301 			sc->sc_ah->is_monitoring = true;
1302 		} else {
1303 			ath_dbg(common, CONFIG, "Monitor mode is disabled\n");
1304 			sc->sc_ah->is_monitoring = false;
1305 		}
1306 	}
1307 
1308 	if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) {
1309 		if (ath_set_channel(sc, &hw->conf.chandef) < 0) {
1310 			ath_err(common, "Unable to set channel\n");
1311 			mutex_unlock(&sc->mutex);
1312 			ath9k_ps_restore(sc);
1313 			return -EINVAL;
1314 		}
1315 	}
1316 
1317 	if (changed & IEEE80211_CONF_CHANGE_POWER) {
1318 		ath_dbg(common, CONFIG, "Set power: %d\n", conf->power_level);
1319 		sc->config.txpowlimit = 2 * conf->power_level;
1320 		ath9k_cmn_update_txpow(ah, sc->curtxpow,
1321 				       sc->config.txpowlimit, &sc->curtxpow);
1322 	}
1323 
1324 	mutex_unlock(&sc->mutex);
1325 	ath9k_ps_restore(sc);
1326 
1327 	return 0;
1328 }
1329 
1330 #define SUPPORTED_FILTERS			\
1331 	(FIF_PROMISC_IN_BSS |			\
1332 	FIF_ALLMULTI |				\
1333 	FIF_CONTROL |				\
1334 	FIF_PSPOLL |				\
1335 	FIF_OTHER_BSS |				\
1336 	FIF_BCN_PRBRESP_PROMISC |		\
1337 	FIF_PROBE_REQ |				\
1338 	FIF_FCSFAIL)
1339 
1340 /* FIXME: sc->sc_full_reset ? */
1341 static void ath9k_configure_filter(struct ieee80211_hw *hw,
1342 				   unsigned int changed_flags,
1343 				   unsigned int *total_flags,
1344 				   u64 multicast)
1345 {
1346 	struct ath_softc *sc = hw->priv;
1347 	u32 rfilt;
1348 
1349 	changed_flags &= SUPPORTED_FILTERS;
1350 	*total_flags &= SUPPORTED_FILTERS;
1351 
1352 	sc->rx.rxfilter = *total_flags;
1353 	ath9k_ps_wakeup(sc);
1354 	rfilt = ath_calcrxfilter(sc);
1355 	ath9k_hw_setrxfilter(sc->sc_ah, rfilt);
1356 	ath9k_ps_restore(sc);
1357 
1358 	ath_dbg(ath9k_hw_common(sc->sc_ah), CONFIG, "Set HW RX filter: 0x%x\n",
1359 		rfilt);
1360 }
1361 
1362 static int ath9k_sta_add(struct ieee80211_hw *hw,
1363 			 struct ieee80211_vif *vif,
1364 			 struct ieee80211_sta *sta)
1365 {
1366 	struct ath_softc *sc = hw->priv;
1367 	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1368 	struct ath_node *an = (struct ath_node *) sta->drv_priv;
1369 	struct ieee80211_key_conf ps_key = { };
1370 	int key;
1371 
1372 	ath_node_attach(sc, sta, vif);
1373 
1374 	if (vif->type != NL80211_IFTYPE_AP &&
1375 	    vif->type != NL80211_IFTYPE_AP_VLAN)
1376 		return 0;
1377 
1378 	key = ath_key_config(common, vif, sta, &ps_key);
1379 	if (key > 0)
1380 		an->ps_key = key;
1381 
1382 	return 0;
1383 }
1384 
1385 static void ath9k_del_ps_key(struct ath_softc *sc,
1386 			     struct ieee80211_vif *vif,
1387 			     struct ieee80211_sta *sta)
1388 {
1389 	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1390 	struct ath_node *an = (struct ath_node *) sta->drv_priv;
1391 	struct ieee80211_key_conf ps_key = { .hw_key_idx = an->ps_key };
1392 
1393 	if (!an->ps_key)
1394 	    return;
1395 
1396 	ath_key_delete(common, &ps_key);
1397 	an->ps_key = 0;
1398 }
1399 
1400 static int ath9k_sta_remove(struct ieee80211_hw *hw,
1401 			    struct ieee80211_vif *vif,
1402 			    struct ieee80211_sta *sta)
1403 {
1404 	struct ath_softc *sc = hw->priv;
1405 
1406 	ath9k_del_ps_key(sc, vif, sta);
1407 	ath_node_detach(sc, sta);
1408 
1409 	return 0;
1410 }
1411 
1412 static void ath9k_sta_notify(struct ieee80211_hw *hw,
1413 			 struct ieee80211_vif *vif,
1414 			 enum sta_notify_cmd cmd,
1415 			 struct ieee80211_sta *sta)
1416 {
1417 	struct ath_softc *sc = hw->priv;
1418 	struct ath_node *an = (struct ath_node *) sta->drv_priv;
1419 
1420 	switch (cmd) {
1421 	case STA_NOTIFY_SLEEP:
1422 		an->sleeping = true;
1423 		ath_tx_aggr_sleep(sta, sc, an);
1424 		break;
1425 	case STA_NOTIFY_AWAKE:
1426 		an->sleeping = false;
1427 		ath_tx_aggr_wakeup(sc, an);
1428 		break;
1429 	}
1430 }
1431 
1432 static int ath9k_conf_tx(struct ieee80211_hw *hw,
1433 			 struct ieee80211_vif *vif, u16 queue,
1434 			 const struct ieee80211_tx_queue_params *params)
1435 {
1436 	struct ath_softc *sc = hw->priv;
1437 	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1438 	struct ath_txq *txq;
1439 	struct ath9k_tx_queue_info qi;
1440 	int ret = 0;
1441 
1442 	if (queue >= IEEE80211_NUM_ACS)
1443 		return 0;
1444 
1445 	txq = sc->tx.txq_map[queue];
1446 
1447 	ath9k_ps_wakeup(sc);
1448 	mutex_lock(&sc->mutex);
1449 
1450 	memset(&qi, 0, sizeof(struct ath9k_tx_queue_info));
1451 
1452 	qi.tqi_aifs = params->aifs;
1453 	qi.tqi_cwmin = params->cw_min;
1454 	qi.tqi_cwmax = params->cw_max;
1455 	qi.tqi_burstTime = params->txop * 32;
1456 
1457 	ath_dbg(common, CONFIG,
1458 		"Configure tx [queue/halq] [%d/%d], aifs: %d, cw_min: %d, cw_max: %d, txop: %d\n",
1459 		queue, txq->axq_qnum, params->aifs, params->cw_min,
1460 		params->cw_max, params->txop);
1461 
1462 	ath_update_max_aggr_framelen(sc, queue, qi.tqi_burstTime);
1463 	ret = ath_txq_update(sc, txq->axq_qnum, &qi);
1464 	if (ret)
1465 		ath_err(common, "TXQ Update failed\n");
1466 
1467 	mutex_unlock(&sc->mutex);
1468 	ath9k_ps_restore(sc);
1469 
1470 	return ret;
1471 }
1472 
1473 static int ath9k_set_key(struct ieee80211_hw *hw,
1474 			 enum set_key_cmd cmd,
1475 			 struct ieee80211_vif *vif,
1476 			 struct ieee80211_sta *sta,
1477 			 struct ieee80211_key_conf *key)
1478 {
1479 	struct ath_softc *sc = hw->priv;
1480 	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1481 	int ret = 0;
1482 
1483 	if (ath9k_modparam_nohwcrypt)
1484 		return -ENOSPC;
1485 
1486 	if ((vif->type == NL80211_IFTYPE_ADHOC ||
1487 	     vif->type == NL80211_IFTYPE_MESH_POINT) &&
1488 	    (key->cipher == WLAN_CIPHER_SUITE_TKIP ||
1489 	     key->cipher == WLAN_CIPHER_SUITE_CCMP) &&
1490 	    !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) {
1491 		/*
1492 		 * For now, disable hw crypto for the RSN IBSS group keys. This
1493 		 * could be optimized in the future to use a modified key cache
1494 		 * design to support per-STA RX GTK, but until that gets
1495 		 * implemented, use of software crypto for group addressed
1496 		 * frames is a acceptable to allow RSN IBSS to be used.
1497 		 */
1498 		return -EOPNOTSUPP;
1499 	}
1500 
1501 	mutex_lock(&sc->mutex);
1502 	ath9k_ps_wakeup(sc);
1503 	ath_dbg(common, CONFIG, "Set HW Key\n");
1504 
1505 	switch (cmd) {
1506 	case SET_KEY:
1507 		if (sta)
1508 			ath9k_del_ps_key(sc, vif, sta);
1509 
1510 		ret = ath_key_config(common, vif, sta, key);
1511 		if (ret >= 0) {
1512 			key->hw_key_idx = ret;
1513 			/* push IV and Michael MIC generation to stack */
1514 			key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
1515 			if (key->cipher == WLAN_CIPHER_SUITE_TKIP)
1516 				key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
1517 			if (sc->sc_ah->sw_mgmt_crypto &&
1518 			    key->cipher == WLAN_CIPHER_SUITE_CCMP)
1519 				key->flags |= IEEE80211_KEY_FLAG_SW_MGMT_TX;
1520 			ret = 0;
1521 		}
1522 		break;
1523 	case DISABLE_KEY:
1524 		ath_key_delete(common, key);
1525 		break;
1526 	default:
1527 		ret = -EINVAL;
1528 	}
1529 
1530 	ath9k_ps_restore(sc);
1531 	mutex_unlock(&sc->mutex);
1532 
1533 	return ret;
1534 }
1535 
1536 static void ath9k_set_assoc_state(struct ath_softc *sc,
1537 				  struct ieee80211_vif *vif)
1538 {
1539 	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1540 	struct ath_vif *avp = (void *)vif->drv_priv;
1541 	struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
1542 	unsigned long flags;
1543 
1544 	set_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags);
1545 	avp->primary_sta_vif = true;
1546 
1547 	/*
1548 	 * Set the AID, BSSID and do beacon-sync only when
1549 	 * the HW opmode is STATION.
1550 	 *
1551 	 * But the primary bit is set above in any case.
1552 	 */
1553 	if (sc->sc_ah->opmode != NL80211_IFTYPE_STATION)
1554 		return;
1555 
1556 	memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
1557 	common->curaid = bss_conf->aid;
1558 	ath9k_hw_write_associd(sc->sc_ah);
1559 
1560 	sc->last_rssi = ATH_RSSI_DUMMY_MARKER;
1561 	sc->sc_ah->stats.avgbrssi = ATH_RSSI_DUMMY_MARKER;
1562 
1563 	spin_lock_irqsave(&sc->sc_pm_lock, flags);
1564 	sc->ps_flags |= PS_BEACON_SYNC | PS_WAIT_FOR_BEACON;
1565 	spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
1566 
1567 	if (ath9k_hw_mci_is_enabled(sc->sc_ah))
1568 		ath9k_mci_update_wlan_channels(sc, false);
1569 
1570 	ath_dbg(common, CONFIG,
1571 		"Primary Station interface: %pM, BSSID: %pM\n",
1572 		vif->addr, common->curbssid);
1573 }
1574 
1575 static void ath9k_bss_assoc_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
1576 {
1577 	struct ath_softc *sc = data;
1578 	struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
1579 
1580 	if (test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags))
1581 		return;
1582 
1583 	if (bss_conf->assoc)
1584 		ath9k_set_assoc_state(sc, vif);
1585 }
1586 
1587 static void ath9k_bss_info_changed(struct ieee80211_hw *hw,
1588 				   struct ieee80211_vif *vif,
1589 				   struct ieee80211_bss_conf *bss_conf,
1590 				   u32 changed)
1591 {
1592 #define CHECK_ANI				\
1593 	(BSS_CHANGED_ASSOC |			\
1594 	 BSS_CHANGED_IBSS |			\
1595 	 BSS_CHANGED_BEACON_ENABLED)
1596 
1597 	struct ath_softc *sc = hw->priv;
1598 	struct ath_hw *ah = sc->sc_ah;
1599 	struct ath_common *common = ath9k_hw_common(ah);
1600 	struct ath_vif *avp = (void *)vif->drv_priv;
1601 	int slottime;
1602 
1603 	ath9k_ps_wakeup(sc);
1604 	mutex_lock(&sc->mutex);
1605 
1606 	if (changed & BSS_CHANGED_ASSOC) {
1607 		ath_dbg(common, CONFIG, "BSSID %pM Changed ASSOC %d\n",
1608 			bss_conf->bssid, bss_conf->assoc);
1609 
1610 		if (avp->primary_sta_vif && !bss_conf->assoc) {
1611 			clear_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags);
1612 			avp->primary_sta_vif = false;
1613 
1614 			if (ah->opmode == NL80211_IFTYPE_STATION)
1615 				clear_bit(SC_OP_BEACONS, &sc->sc_flags);
1616 		}
1617 
1618 		ieee80211_iterate_active_interfaces_atomic(
1619 			sc->hw, IEEE80211_IFACE_ITER_RESUME_ALL,
1620 			ath9k_bss_assoc_iter, sc);
1621 
1622 		if (!test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags) &&
1623 		    ah->opmode == NL80211_IFTYPE_STATION) {
1624 			memset(common->curbssid, 0, ETH_ALEN);
1625 			common->curaid = 0;
1626 			ath9k_hw_write_associd(sc->sc_ah);
1627 			if (ath9k_hw_mci_is_enabled(sc->sc_ah))
1628 				ath9k_mci_update_wlan_channels(sc, true);
1629 		}
1630 	}
1631 
1632 	if (changed & BSS_CHANGED_IBSS) {
1633 		memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
1634 		common->curaid = bss_conf->aid;
1635 		ath9k_hw_write_associd(sc->sc_ah);
1636 	}
1637 
1638 	if ((changed & BSS_CHANGED_BEACON_ENABLED) ||
1639 	    (changed & BSS_CHANGED_BEACON_INT)) {
1640 		if (ah->opmode == NL80211_IFTYPE_AP &&
1641 		    bss_conf->enable_beacon)
1642 			ath9k_set_tsfadjust(sc, vif);
1643 		if (ath9k_allow_beacon_config(sc, vif))
1644 			ath9k_beacon_config(sc, vif, changed);
1645 	}
1646 
1647 	if (changed & BSS_CHANGED_ERP_SLOT) {
1648 		if (bss_conf->use_short_slot)
1649 			slottime = 9;
1650 		else
1651 			slottime = 20;
1652 		if (vif->type == NL80211_IFTYPE_AP) {
1653 			/*
1654 			 * Defer update, so that connected stations can adjust
1655 			 * their settings at the same time.
1656 			 * See beacon.c for more details
1657 			 */
1658 			sc->beacon.slottime = slottime;
1659 			sc->beacon.updateslot = UPDATE;
1660 		} else {
1661 			ah->slottime = slottime;
1662 			ath9k_hw_init_global_settings(ah);
1663 		}
1664 	}
1665 
1666 	if (changed & CHECK_ANI)
1667 		ath_check_ani(sc);
1668 
1669 	mutex_unlock(&sc->mutex);
1670 	ath9k_ps_restore(sc);
1671 
1672 #undef CHECK_ANI
1673 }
1674 
1675 static u64 ath9k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
1676 {
1677 	struct ath_softc *sc = hw->priv;
1678 	u64 tsf;
1679 
1680 	mutex_lock(&sc->mutex);
1681 	ath9k_ps_wakeup(sc);
1682 	tsf = ath9k_hw_gettsf64(sc->sc_ah);
1683 	ath9k_ps_restore(sc);
1684 	mutex_unlock(&sc->mutex);
1685 
1686 	return tsf;
1687 }
1688 
1689 static void ath9k_set_tsf(struct ieee80211_hw *hw,
1690 			  struct ieee80211_vif *vif,
1691 			  u64 tsf)
1692 {
1693 	struct ath_softc *sc = hw->priv;
1694 
1695 	mutex_lock(&sc->mutex);
1696 	ath9k_ps_wakeup(sc);
1697 	ath9k_hw_settsf64(sc->sc_ah, tsf);
1698 	ath9k_ps_restore(sc);
1699 	mutex_unlock(&sc->mutex);
1700 }
1701 
1702 static void ath9k_reset_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
1703 {
1704 	struct ath_softc *sc = hw->priv;
1705 
1706 	mutex_lock(&sc->mutex);
1707 
1708 	ath9k_ps_wakeup(sc);
1709 	ath9k_hw_reset_tsf(sc->sc_ah);
1710 	ath9k_ps_restore(sc);
1711 
1712 	mutex_unlock(&sc->mutex);
1713 }
1714 
1715 static int ath9k_ampdu_action(struct ieee80211_hw *hw,
1716 			      struct ieee80211_vif *vif,
1717 			      enum ieee80211_ampdu_mlme_action action,
1718 			      struct ieee80211_sta *sta,
1719 			      u16 tid, u16 *ssn, u8 buf_size)
1720 {
1721 	struct ath_softc *sc = hw->priv;
1722 	bool flush = false;
1723 	int ret = 0;
1724 
1725 	mutex_lock(&sc->mutex);
1726 
1727 	switch (action) {
1728 	case IEEE80211_AMPDU_RX_START:
1729 		break;
1730 	case IEEE80211_AMPDU_RX_STOP:
1731 		break;
1732 	case IEEE80211_AMPDU_TX_START:
1733 		ath9k_ps_wakeup(sc);
1734 		ret = ath_tx_aggr_start(sc, sta, tid, ssn);
1735 		if (!ret)
1736 			ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1737 		ath9k_ps_restore(sc);
1738 		break;
1739 	case IEEE80211_AMPDU_TX_STOP_FLUSH:
1740 	case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
1741 		flush = true;
1742 	case IEEE80211_AMPDU_TX_STOP_CONT:
1743 		ath9k_ps_wakeup(sc);
1744 		ath_tx_aggr_stop(sc, sta, tid);
1745 		if (!flush)
1746 			ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1747 		ath9k_ps_restore(sc);
1748 		break;
1749 	case IEEE80211_AMPDU_TX_OPERATIONAL:
1750 		ath9k_ps_wakeup(sc);
1751 		ath_tx_aggr_resume(sc, sta, tid);
1752 		ath9k_ps_restore(sc);
1753 		break;
1754 	default:
1755 		ath_err(ath9k_hw_common(sc->sc_ah), "Unknown AMPDU action\n");
1756 	}
1757 
1758 	mutex_unlock(&sc->mutex);
1759 
1760 	return ret;
1761 }
1762 
1763 static int ath9k_get_survey(struct ieee80211_hw *hw, int idx,
1764 			     struct survey_info *survey)
1765 {
1766 	struct ath_softc *sc = hw->priv;
1767 	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1768 	struct ieee80211_supported_band *sband;
1769 	struct ieee80211_channel *chan;
1770 	unsigned long flags;
1771 	int pos;
1772 
1773 	if (config_enabled(CONFIG_ATH9K_TX99))
1774 		return -EOPNOTSUPP;
1775 
1776 	spin_lock_irqsave(&common->cc_lock, flags);
1777 	if (idx == 0)
1778 		ath_update_survey_stats(sc);
1779 
1780 	sband = hw->wiphy->bands[IEEE80211_BAND_2GHZ];
1781 	if (sband && idx >= sband->n_channels) {
1782 		idx -= sband->n_channels;
1783 		sband = NULL;
1784 	}
1785 
1786 	if (!sband)
1787 		sband = hw->wiphy->bands[IEEE80211_BAND_5GHZ];
1788 
1789 	if (!sband || idx >= sband->n_channels) {
1790 		spin_unlock_irqrestore(&common->cc_lock, flags);
1791 		return -ENOENT;
1792 	}
1793 
1794 	chan = &sband->channels[idx];
1795 	pos = chan->hw_value;
1796 	memcpy(survey, &sc->survey[pos], sizeof(*survey));
1797 	survey->channel = chan;
1798 	spin_unlock_irqrestore(&common->cc_lock, flags);
1799 
1800 	return 0;
1801 }
1802 
1803 static void ath9k_set_coverage_class(struct ieee80211_hw *hw, u8 coverage_class)
1804 {
1805 	struct ath_softc *sc = hw->priv;
1806 	struct ath_hw *ah = sc->sc_ah;
1807 
1808 	if (config_enabled(CONFIG_ATH9K_TX99))
1809 		return;
1810 
1811 	mutex_lock(&sc->mutex);
1812 	ah->coverage_class = coverage_class;
1813 
1814 	ath9k_ps_wakeup(sc);
1815 	ath9k_hw_init_global_settings(ah);
1816 	ath9k_ps_restore(sc);
1817 
1818 	mutex_unlock(&sc->mutex);
1819 }
1820 
1821 static void ath9k_flush(struct ieee80211_hw *hw, u32 queues, bool drop)
1822 {
1823 	struct ath_softc *sc = hw->priv;
1824 	struct ath_hw *ah = sc->sc_ah;
1825 	struct ath_common *common = ath9k_hw_common(ah);
1826 	int timeout = 200; /* ms */
1827 	int i, j;
1828 	bool drain_txq;
1829 
1830 	mutex_lock(&sc->mutex);
1831 	cancel_delayed_work_sync(&sc->tx_complete_work);
1832 
1833 	if (ah->ah_flags & AH_UNPLUGGED) {
1834 		ath_dbg(common, ANY, "Device has been unplugged!\n");
1835 		mutex_unlock(&sc->mutex);
1836 		return;
1837 	}
1838 
1839 	if (test_bit(SC_OP_INVALID, &sc->sc_flags)) {
1840 		ath_dbg(common, ANY, "Device not present\n");
1841 		mutex_unlock(&sc->mutex);
1842 		return;
1843 	}
1844 
1845 	for (j = 0; j < timeout; j++) {
1846 		bool npend = false;
1847 
1848 		if (j)
1849 			usleep_range(1000, 2000);
1850 
1851 		for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
1852 			if (!ATH_TXQ_SETUP(sc, i))
1853 				continue;
1854 
1855 			npend = ath9k_has_pending_frames(sc, &sc->tx.txq[i]);
1856 
1857 			if (npend)
1858 				break;
1859 		}
1860 
1861 		if (!npend)
1862 		    break;
1863 	}
1864 
1865 	if (drop) {
1866 		ath9k_ps_wakeup(sc);
1867 		spin_lock_bh(&sc->sc_pcu_lock);
1868 		drain_txq = ath_drain_all_txq(sc);
1869 		spin_unlock_bh(&sc->sc_pcu_lock);
1870 
1871 		if (!drain_txq)
1872 			ath_reset(sc);
1873 
1874 		ath9k_ps_restore(sc);
1875 		ieee80211_wake_queues(hw);
1876 	}
1877 
1878 	ieee80211_queue_delayed_work(hw, &sc->tx_complete_work, 0);
1879 	mutex_unlock(&sc->mutex);
1880 }
1881 
1882 static bool ath9k_tx_frames_pending(struct ieee80211_hw *hw)
1883 {
1884 	struct ath_softc *sc = hw->priv;
1885 	int i;
1886 
1887 	for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
1888 		if (!ATH_TXQ_SETUP(sc, i))
1889 			continue;
1890 
1891 		if (ath9k_has_pending_frames(sc, &sc->tx.txq[i]))
1892 			return true;
1893 	}
1894 	return false;
1895 }
1896 
1897 static int ath9k_tx_last_beacon(struct ieee80211_hw *hw)
1898 {
1899 	struct ath_softc *sc = hw->priv;
1900 	struct ath_hw *ah = sc->sc_ah;
1901 	struct ieee80211_vif *vif;
1902 	struct ath_vif *avp;
1903 	struct ath_buf *bf;
1904 	struct ath_tx_status ts;
1905 	bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA);
1906 	int status;
1907 
1908 	vif = sc->beacon.bslot[0];
1909 	if (!vif)
1910 		return 0;
1911 
1912 	if (!vif->bss_conf.enable_beacon)
1913 		return 0;
1914 
1915 	avp = (void *)vif->drv_priv;
1916 
1917 	if (!sc->beacon.tx_processed && !edma) {
1918 		tasklet_disable(&sc->bcon_tasklet);
1919 
1920 		bf = avp->av_bcbuf;
1921 		if (!bf || !bf->bf_mpdu)
1922 			goto skip;
1923 
1924 		status = ath9k_hw_txprocdesc(ah, bf->bf_desc, &ts);
1925 		if (status == -EINPROGRESS)
1926 			goto skip;
1927 
1928 		sc->beacon.tx_processed = true;
1929 		sc->beacon.tx_last = !(ts.ts_status & ATH9K_TXERR_MASK);
1930 
1931 skip:
1932 		tasklet_enable(&sc->bcon_tasklet);
1933 	}
1934 
1935 	return sc->beacon.tx_last;
1936 }
1937 
1938 static int ath9k_get_stats(struct ieee80211_hw *hw,
1939 			   struct ieee80211_low_level_stats *stats)
1940 {
1941 	struct ath_softc *sc = hw->priv;
1942 	struct ath_hw *ah = sc->sc_ah;
1943 	struct ath9k_mib_stats *mib_stats = &ah->ah_mibStats;
1944 
1945 	stats->dot11ACKFailureCount = mib_stats->ackrcv_bad;
1946 	stats->dot11RTSFailureCount = mib_stats->rts_bad;
1947 	stats->dot11FCSErrorCount = mib_stats->fcs_bad;
1948 	stats->dot11RTSSuccessCount = mib_stats->rts_good;
1949 	return 0;
1950 }
1951 
1952 static u32 fill_chainmask(u32 cap, u32 new)
1953 {
1954 	u32 filled = 0;
1955 	int i;
1956 
1957 	for (i = 0; cap && new; i++, cap >>= 1) {
1958 		if (!(cap & BIT(0)))
1959 			continue;
1960 
1961 		if (new & BIT(0))
1962 			filled |= BIT(i);
1963 
1964 		new >>= 1;
1965 	}
1966 
1967 	return filled;
1968 }
1969 
1970 static bool validate_antenna_mask(struct ath_hw *ah, u32 val)
1971 {
1972 	if (AR_SREV_9300_20_OR_LATER(ah))
1973 		return true;
1974 
1975 	switch (val & 0x7) {
1976 	case 0x1:
1977 	case 0x3:
1978 	case 0x7:
1979 		return true;
1980 	case 0x2:
1981 		return (ah->caps.rx_chainmask == 1);
1982 	default:
1983 		return false;
1984 	}
1985 }
1986 
1987 static int ath9k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
1988 {
1989 	struct ath_softc *sc = hw->priv;
1990 	struct ath_hw *ah = sc->sc_ah;
1991 
1992 	if (ah->caps.rx_chainmask != 1)
1993 		rx_ant |= tx_ant;
1994 
1995 	if (!validate_antenna_mask(ah, rx_ant) || !tx_ant)
1996 		return -EINVAL;
1997 
1998 	sc->ant_rx = rx_ant;
1999 	sc->ant_tx = tx_ant;
2000 
2001 	if (ah->caps.rx_chainmask == 1)
2002 		return 0;
2003 
2004 	/* AR9100 runs into calibration issues if not all rx chains are enabled */
2005 	if (AR_SREV_9100(ah))
2006 		ah->rxchainmask = 0x7;
2007 	else
2008 		ah->rxchainmask = fill_chainmask(ah->caps.rx_chainmask, rx_ant);
2009 
2010 	ah->txchainmask = fill_chainmask(ah->caps.tx_chainmask, tx_ant);
2011 	ath9k_reload_chainmask_settings(sc);
2012 
2013 	return 0;
2014 }
2015 
2016 static int ath9k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
2017 {
2018 	struct ath_softc *sc = hw->priv;
2019 
2020 	*tx_ant = sc->ant_tx;
2021 	*rx_ant = sc->ant_rx;
2022 	return 0;
2023 }
2024 
2025 #ifdef CONFIG_PM_SLEEP
2026 
2027 static void ath9k_wow_map_triggers(struct ath_softc *sc,
2028 				   struct cfg80211_wowlan *wowlan,
2029 				   u32 *wow_triggers)
2030 {
2031 	if (wowlan->disconnect)
2032 		*wow_triggers |= AH_WOW_LINK_CHANGE |
2033 				 AH_WOW_BEACON_MISS;
2034 	if (wowlan->magic_pkt)
2035 		*wow_triggers |= AH_WOW_MAGIC_PATTERN_EN;
2036 
2037 	if (wowlan->n_patterns)
2038 		*wow_triggers |= AH_WOW_USER_PATTERN_EN;
2039 
2040 	sc->wow_enabled = *wow_triggers;
2041 
2042 }
2043 
2044 static void ath9k_wow_add_disassoc_deauth_pattern(struct ath_softc *sc)
2045 {
2046 	struct ath_hw *ah = sc->sc_ah;
2047 	struct ath_common *common = ath9k_hw_common(ah);
2048 	int pattern_count = 0;
2049 	int i, byte_cnt;
2050 	u8 dis_deauth_pattern[MAX_PATTERN_SIZE];
2051 	u8 dis_deauth_mask[MAX_PATTERN_SIZE];
2052 
2053 	memset(dis_deauth_pattern, 0, MAX_PATTERN_SIZE);
2054 	memset(dis_deauth_mask, 0, MAX_PATTERN_SIZE);
2055 
2056 	/*
2057 	 * Create Dissassociate / Deauthenticate packet filter
2058 	 *
2059 	 *     2 bytes        2 byte    6 bytes   6 bytes  6 bytes
2060 	 *  +--------------+----------+---------+--------+--------+----
2061 	 *  + Frame Control+ Duration +   DA    +  SA    +  BSSID +
2062 	 *  +--------------+----------+---------+--------+--------+----
2063 	 *
2064 	 * The above is the management frame format for disassociate/
2065 	 * deauthenticate pattern, from this we need to match the first byte
2066 	 * of 'Frame Control' and DA, SA, and BSSID fields
2067 	 * (skipping 2nd byte of FC and Duration feild.
2068 	 *
2069 	 * Disassociate pattern
2070 	 * --------------------
2071 	 * Frame control = 00 00 1010
2072 	 * DA, SA, BSSID = x:x:x:x:x:x
2073 	 * Pattern will be A0000000 | x:x:x:x:x:x | x:x:x:x:x:x
2074 	 *			    | x:x:x:x:x:x  -- 22 bytes
2075 	 *
2076 	 * Deauthenticate pattern
2077 	 * ----------------------
2078 	 * Frame control = 00 00 1100
2079 	 * DA, SA, BSSID = x:x:x:x:x:x
2080 	 * Pattern will be C0000000 | x:x:x:x:x:x | x:x:x:x:x:x
2081 	 *			    | x:x:x:x:x:x  -- 22 bytes
2082 	 */
2083 
2084 	/* Create Disassociate Pattern first */
2085 
2086 	byte_cnt = 0;
2087 
2088 	/* Fill out the mask with all FF's */
2089 
2090 	for (i = 0; i < MAX_PATTERN_MASK_SIZE; i++)
2091 		dis_deauth_mask[i] = 0xff;
2092 
2093 	/* copy the first byte of frame control field */
2094 	dis_deauth_pattern[byte_cnt] = 0xa0;
2095 	byte_cnt++;
2096 
2097 	/* skip 2nd byte of frame control and Duration field */
2098 	byte_cnt += 3;
2099 
2100 	/*
2101 	 * need not match the destination mac address, it can be a broadcast
2102 	 * mac address or an unicast to this station
2103 	 */
2104 	byte_cnt += 6;
2105 
2106 	/* copy the source mac address */
2107 	memcpy((dis_deauth_pattern + byte_cnt), common->curbssid, ETH_ALEN);
2108 
2109 	byte_cnt += 6;
2110 
2111 	/* copy the bssid, its same as the source mac address */
2112 
2113 	memcpy((dis_deauth_pattern + byte_cnt), common->curbssid, ETH_ALEN);
2114 
2115 	/* Create Disassociate pattern mask */
2116 
2117 	dis_deauth_mask[0] = 0xfe;
2118 	dis_deauth_mask[1] = 0x03;
2119 	dis_deauth_mask[2] = 0xc0;
2120 
2121 	ath_dbg(common, WOW, "Adding disassoc/deauth patterns for WoW\n");
2122 
2123 	ath9k_hw_wow_apply_pattern(ah, dis_deauth_pattern, dis_deauth_mask,
2124 				   pattern_count, byte_cnt);
2125 
2126 	pattern_count++;
2127 	/*
2128 	 * for de-authenticate pattern, only the first byte of the frame
2129 	 * control field gets changed from 0xA0 to 0xC0
2130 	 */
2131 	dis_deauth_pattern[0] = 0xC0;
2132 
2133 	ath9k_hw_wow_apply_pattern(ah, dis_deauth_pattern, dis_deauth_mask,
2134 				   pattern_count, byte_cnt);
2135 
2136 }
2137 
2138 static void ath9k_wow_add_pattern(struct ath_softc *sc,
2139 				  struct cfg80211_wowlan *wowlan)
2140 {
2141 	struct ath_hw *ah = sc->sc_ah;
2142 	struct ath9k_wow_pattern *wow_pattern = NULL;
2143 	struct cfg80211_pkt_pattern *patterns = wowlan->patterns;
2144 	int mask_len;
2145 	s8 i = 0;
2146 
2147 	if (!wowlan->n_patterns)
2148 		return;
2149 
2150 	/*
2151 	 * Add the new user configured patterns
2152 	 */
2153 	for (i = 0; i < wowlan->n_patterns; i++) {
2154 
2155 		wow_pattern = kzalloc(sizeof(*wow_pattern), GFP_KERNEL);
2156 
2157 		if (!wow_pattern)
2158 			return;
2159 
2160 		/*
2161 		 * TODO: convert the generic user space pattern to
2162 		 * appropriate chip specific/802.11 pattern.
2163 		 */
2164 
2165 		mask_len = DIV_ROUND_UP(wowlan->patterns[i].pattern_len, 8);
2166 		memset(wow_pattern->pattern_bytes, 0, MAX_PATTERN_SIZE);
2167 		memset(wow_pattern->mask_bytes, 0, MAX_PATTERN_SIZE);
2168 		memcpy(wow_pattern->pattern_bytes, patterns[i].pattern,
2169 		       patterns[i].pattern_len);
2170 		memcpy(wow_pattern->mask_bytes, patterns[i].mask, mask_len);
2171 		wow_pattern->pattern_len = patterns[i].pattern_len;
2172 
2173 		/*
2174 		 * just need to take care of deauth and disssoc pattern,
2175 		 * make sure we don't overwrite them.
2176 		 */
2177 
2178 		ath9k_hw_wow_apply_pattern(ah, wow_pattern->pattern_bytes,
2179 					   wow_pattern->mask_bytes,
2180 					   i + 2,
2181 					   wow_pattern->pattern_len);
2182 		kfree(wow_pattern);
2183 
2184 	}
2185 
2186 }
2187 
2188 static int ath9k_suspend(struct ieee80211_hw *hw,
2189 			 struct cfg80211_wowlan *wowlan)
2190 {
2191 	struct ath_softc *sc = hw->priv;
2192 	struct ath_hw *ah = sc->sc_ah;
2193 	struct ath_common *common = ath9k_hw_common(ah);
2194 	u32 wow_triggers_enabled = 0;
2195 	int ret = 0;
2196 
2197 	mutex_lock(&sc->mutex);
2198 
2199 	ath_cancel_work(sc);
2200 	ath_stop_ani(sc);
2201 	del_timer_sync(&sc->rx_poll_timer);
2202 
2203 	if (test_bit(SC_OP_INVALID, &sc->sc_flags)) {
2204 		ath_dbg(common, ANY, "Device not present\n");
2205 		ret = -EINVAL;
2206 		goto fail_wow;
2207 	}
2208 
2209 	if (WARN_ON(!wowlan)) {
2210 		ath_dbg(common, WOW, "None of the WoW triggers enabled\n");
2211 		ret = -EINVAL;
2212 		goto fail_wow;
2213 	}
2214 
2215 	if (!device_can_wakeup(sc->dev)) {
2216 		ath_dbg(common, WOW, "device_can_wakeup failed, WoW is not enabled\n");
2217 		ret = 1;
2218 		goto fail_wow;
2219 	}
2220 
2221 	/*
2222 	 * none of the sta vifs are associated
2223 	 * and we are not currently handling multivif
2224 	 * cases, for instance we have to seperately
2225 	 * configure 'keep alive frame' for each
2226 	 * STA.
2227 	 */
2228 
2229 	if (!test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) {
2230 		ath_dbg(common, WOW, "None of the STA vifs are associated\n");
2231 		ret = 1;
2232 		goto fail_wow;
2233 	}
2234 
2235 	if (sc->nvifs > 1) {
2236 		ath_dbg(common, WOW, "WoW for multivif is not yet supported\n");
2237 		ret = 1;
2238 		goto fail_wow;
2239 	}
2240 
2241 	ath9k_wow_map_triggers(sc, wowlan, &wow_triggers_enabled);
2242 
2243 	ath_dbg(common, WOW, "WoW triggers enabled 0x%x\n",
2244 		wow_triggers_enabled);
2245 
2246 	ath9k_ps_wakeup(sc);
2247 
2248 	ath9k_stop_btcoex(sc);
2249 
2250 	/*
2251 	 * Enable wake up on recieving disassoc/deauth
2252 	 * frame by default.
2253 	 */
2254 	ath9k_wow_add_disassoc_deauth_pattern(sc);
2255 
2256 	if (wow_triggers_enabled & AH_WOW_USER_PATTERN_EN)
2257 		ath9k_wow_add_pattern(sc, wowlan);
2258 
2259 	spin_lock_bh(&sc->sc_pcu_lock);
2260 	/*
2261 	 * To avoid false wake, we enable beacon miss interrupt only
2262 	 * when we go to sleep. We save the current interrupt mask
2263 	 * so we can restore it after the system wakes up
2264 	 */
2265 	sc->wow_intr_before_sleep = ah->imask;
2266 	ah->imask &= ~ATH9K_INT_GLOBAL;
2267 	ath9k_hw_disable_interrupts(ah);
2268 	ah->imask = ATH9K_INT_BMISS | ATH9K_INT_GLOBAL;
2269 	ath9k_hw_set_interrupts(ah);
2270 	ath9k_hw_enable_interrupts(ah);
2271 
2272 	spin_unlock_bh(&sc->sc_pcu_lock);
2273 
2274 	/*
2275 	 * we can now sync irq and kill any running tasklets, since we already
2276 	 * disabled interrupts and not holding a spin lock
2277 	 */
2278 	synchronize_irq(sc->irq);
2279 	tasklet_kill(&sc->intr_tq);
2280 
2281 	ath9k_hw_wow_enable(ah, wow_triggers_enabled);
2282 
2283 	ath9k_ps_restore(sc);
2284 	ath_dbg(common, ANY, "WoW enabled in ath9k\n");
2285 	atomic_inc(&sc->wow_sleep_proc_intr);
2286 
2287 fail_wow:
2288 	mutex_unlock(&sc->mutex);
2289 	return ret;
2290 }
2291 
2292 static int ath9k_resume(struct ieee80211_hw *hw)
2293 {
2294 	struct ath_softc *sc = hw->priv;
2295 	struct ath_hw *ah = sc->sc_ah;
2296 	struct ath_common *common = ath9k_hw_common(ah);
2297 	u32 wow_status;
2298 
2299 	mutex_lock(&sc->mutex);
2300 
2301 	ath9k_ps_wakeup(sc);
2302 
2303 	spin_lock_bh(&sc->sc_pcu_lock);
2304 
2305 	ath9k_hw_disable_interrupts(ah);
2306 	ah->imask = sc->wow_intr_before_sleep;
2307 	ath9k_hw_set_interrupts(ah);
2308 	ath9k_hw_enable_interrupts(ah);
2309 
2310 	spin_unlock_bh(&sc->sc_pcu_lock);
2311 
2312 	wow_status = ath9k_hw_wow_wakeup(ah);
2313 
2314 	if (atomic_read(&sc->wow_got_bmiss_intr) == 0) {
2315 		/*
2316 		 * some devices may not pick beacon miss
2317 		 * as the reason they woke up so we add
2318 		 * that here for that shortcoming.
2319 		 */
2320 		wow_status |= AH_WOW_BEACON_MISS;
2321 		atomic_dec(&sc->wow_got_bmiss_intr);
2322 		ath_dbg(common, ANY, "Beacon miss interrupt picked up during WoW sleep\n");
2323 	}
2324 
2325 	atomic_dec(&sc->wow_sleep_proc_intr);
2326 
2327 	if (wow_status) {
2328 		ath_dbg(common, ANY, "Waking up due to WoW triggers %s with WoW status = %x\n",
2329 			ath9k_hw_wow_event_to_string(wow_status), wow_status);
2330 	}
2331 
2332 	ath_restart_work(sc);
2333 	ath9k_start_btcoex(sc);
2334 
2335 	ath9k_ps_restore(sc);
2336 	mutex_unlock(&sc->mutex);
2337 
2338 	return 0;
2339 }
2340 
2341 static void ath9k_set_wakeup(struct ieee80211_hw *hw, bool enabled)
2342 {
2343 	struct ath_softc *sc = hw->priv;
2344 
2345 	mutex_lock(&sc->mutex);
2346 	device_init_wakeup(sc->dev, 1);
2347 	device_set_wakeup_enable(sc->dev, enabled);
2348 	mutex_unlock(&sc->mutex);
2349 }
2350 
2351 #endif
2352 static void ath9k_sw_scan_start(struct ieee80211_hw *hw)
2353 {
2354 	struct ath_softc *sc = hw->priv;
2355 	set_bit(SC_OP_SCANNING, &sc->sc_flags);
2356 }
2357 
2358 static void ath9k_sw_scan_complete(struct ieee80211_hw *hw)
2359 {
2360 	struct ath_softc *sc = hw->priv;
2361 	clear_bit(SC_OP_SCANNING, &sc->sc_flags);
2362 }
2363 
2364 static void ath9k_channel_switch_beacon(struct ieee80211_hw *hw,
2365 					struct ieee80211_vif *vif,
2366 					struct cfg80211_chan_def *chandef)
2367 {
2368 	struct ath_softc *sc = hw->priv;
2369 
2370 	/* mac80211 does not support CSA in multi-if cases (yet) */
2371 	if (WARN_ON(sc->csa_vif))
2372 		return;
2373 
2374 	sc->csa_vif = vif;
2375 }
2376 
2377 static void ath9k_tx99_stop(struct ath_softc *sc)
2378 {
2379 	struct ath_hw *ah = sc->sc_ah;
2380 	struct ath_common *common = ath9k_hw_common(ah);
2381 
2382 	ath_drain_all_txq(sc);
2383 	ath_startrecv(sc);
2384 
2385 	ath9k_hw_set_interrupts(ah);
2386 	ath9k_hw_enable_interrupts(ah);
2387 
2388 	ieee80211_wake_queues(sc->hw);
2389 
2390 	kfree_skb(sc->tx99_skb);
2391 	sc->tx99_skb = NULL;
2392 	sc->tx99_state = false;
2393 
2394 	ath9k_hw_tx99_stop(sc->sc_ah);
2395 	ath_dbg(common, XMIT, "TX99 stopped\n");
2396 }
2397 
2398 static struct sk_buff *ath9k_build_tx99_skb(struct ath_softc *sc)
2399 {
2400 	static u8 PN9Data[] = {0xff, 0x87, 0xb8, 0x59, 0xb7, 0xa1, 0xcc, 0x24,
2401 			       0x57, 0x5e, 0x4b, 0x9c, 0x0e, 0xe9, 0xea, 0x50,
2402 			       0x2a, 0xbe, 0xb4, 0x1b, 0xb6, 0xb0, 0x5d, 0xf1,
2403 			       0xe6, 0x9a, 0xe3, 0x45, 0xfd, 0x2c, 0x53, 0x18,
2404 			       0x0c, 0xca, 0xc9, 0xfb, 0x49, 0x37, 0xe5, 0xa8,
2405 			       0x51, 0x3b, 0x2f, 0x61, 0xaa, 0x72, 0x18, 0x84,
2406 			       0x02, 0x23, 0x23, 0xab, 0x63, 0x89, 0x51, 0xb3,
2407 			       0xe7, 0x8b, 0x72, 0x90, 0x4c, 0xe8, 0xfb, 0xc0};
2408 	u32 len = 1200;
2409 	struct ieee80211_hw *hw = sc->hw;
2410 	struct ieee80211_hdr *hdr;
2411 	struct ieee80211_tx_info *tx_info;
2412 	struct sk_buff *skb;
2413 
2414 	skb = alloc_skb(len, GFP_KERNEL);
2415 	if (!skb)
2416 		return NULL;
2417 
2418 	skb_put(skb, len);
2419 
2420 	memset(skb->data, 0, len);
2421 
2422 	hdr = (struct ieee80211_hdr *)skb->data;
2423 	hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_DATA);
2424 	hdr->duration_id = 0;
2425 
2426 	memcpy(hdr->addr1, hw->wiphy->perm_addr, ETH_ALEN);
2427 	memcpy(hdr->addr2, hw->wiphy->perm_addr, ETH_ALEN);
2428 	memcpy(hdr->addr3, hw->wiphy->perm_addr, ETH_ALEN);
2429 
2430 	hdr->seq_ctrl |= cpu_to_le16(sc->tx.seq_no);
2431 
2432 	tx_info = IEEE80211_SKB_CB(skb);
2433 	memset(tx_info, 0, sizeof(*tx_info));
2434 	tx_info->band = hw->conf.chandef.chan->band;
2435 	tx_info->flags = IEEE80211_TX_CTL_NO_ACK;
2436 	tx_info->control.vif = sc->tx99_vif;
2437 
2438 	memcpy(skb->data + sizeof(*hdr), PN9Data, sizeof(PN9Data));
2439 
2440 	return skb;
2441 }
2442 
2443 void ath9k_tx99_deinit(struct ath_softc *sc)
2444 {
2445 	ath_reset(sc);
2446 
2447 	ath9k_ps_wakeup(sc);
2448 	ath9k_tx99_stop(sc);
2449 	ath9k_ps_restore(sc);
2450 }
2451 
2452 int ath9k_tx99_init(struct ath_softc *sc)
2453 {
2454 	struct ieee80211_hw *hw = sc->hw;
2455 	struct ath_hw *ah = sc->sc_ah;
2456 	struct ath_common *common = ath9k_hw_common(ah);
2457 	struct ath_tx_control txctl;
2458 	int r;
2459 
2460 	if (sc->sc_flags & SC_OP_INVALID) {
2461 		ath_err(common,
2462 			"driver is in invalid state unable to use TX99");
2463 		return -EINVAL;
2464 	}
2465 
2466 	sc->tx99_skb = ath9k_build_tx99_skb(sc);
2467 	if (!sc->tx99_skb)
2468 		return -ENOMEM;
2469 
2470 	memset(&txctl, 0, sizeof(txctl));
2471 	txctl.txq = sc->tx.txq_map[IEEE80211_AC_VO];
2472 
2473 	ath_reset(sc);
2474 
2475 	ath9k_ps_wakeup(sc);
2476 
2477 	ath9k_hw_disable_interrupts(ah);
2478 	atomic_set(&ah->intr_ref_cnt, -1);
2479 	ath_drain_all_txq(sc);
2480 	ath_stoprecv(sc);
2481 
2482 	sc->tx99_state = true;
2483 
2484 	ieee80211_stop_queues(hw);
2485 
2486 	if (sc->tx99_power == MAX_RATE_POWER + 1)
2487 		sc->tx99_power = MAX_RATE_POWER;
2488 
2489 	ath9k_hw_tx99_set_txpower(ah, sc->tx99_power);
2490 	r = ath9k_tx99_send(sc, sc->tx99_skb, &txctl);
2491 	if (r) {
2492 		ath_dbg(common, XMIT, "Failed to xmit TX99 skb\n");
2493 		return r;
2494 	}
2495 
2496 	ath_dbg(common, XMIT, "TX99 xmit started using %d ( %ddBm)\n",
2497 		sc->tx99_power,
2498 		sc->tx99_power / 2);
2499 
2500 	/* We leave the harware awake as it will be chugging on */
2501 
2502 	return 0;
2503 }
2504 
2505 struct ieee80211_ops ath9k_ops = {
2506 	.tx 		    = ath9k_tx,
2507 	.start 		    = ath9k_start,
2508 	.stop 		    = ath9k_stop,
2509 	.add_interface 	    = ath9k_add_interface,
2510 	.change_interface   = ath9k_change_interface,
2511 	.remove_interface   = ath9k_remove_interface,
2512 	.config 	    = ath9k_config,
2513 	.configure_filter   = ath9k_configure_filter,
2514 	.sta_add	    = ath9k_sta_add,
2515 	.sta_remove	    = ath9k_sta_remove,
2516 	.sta_notify         = ath9k_sta_notify,
2517 	.conf_tx 	    = ath9k_conf_tx,
2518 	.bss_info_changed   = ath9k_bss_info_changed,
2519 	.set_key            = ath9k_set_key,
2520 	.get_tsf 	    = ath9k_get_tsf,
2521 	.set_tsf 	    = ath9k_set_tsf,
2522 	.reset_tsf 	    = ath9k_reset_tsf,
2523 	.ampdu_action       = ath9k_ampdu_action,
2524 	.get_survey	    = ath9k_get_survey,
2525 	.rfkill_poll        = ath9k_rfkill_poll_state,
2526 	.set_coverage_class = ath9k_set_coverage_class,
2527 	.flush		    = ath9k_flush,
2528 	.tx_frames_pending  = ath9k_tx_frames_pending,
2529 	.tx_last_beacon     = ath9k_tx_last_beacon,
2530 	.release_buffered_frames = ath9k_release_buffered_frames,
2531 	.get_stats	    = ath9k_get_stats,
2532 	.set_antenna	    = ath9k_set_antenna,
2533 	.get_antenna	    = ath9k_get_antenna,
2534 
2535 #ifdef CONFIG_PM_SLEEP
2536 	.suspend	    = ath9k_suspend,
2537 	.resume		    = ath9k_resume,
2538 	.set_wakeup	    = ath9k_set_wakeup,
2539 #endif
2540 
2541 #ifdef CONFIG_ATH9K_DEBUGFS
2542 	.get_et_sset_count  = ath9k_get_et_sset_count,
2543 	.get_et_stats       = ath9k_get_et_stats,
2544 	.get_et_strings     = ath9k_get_et_strings,
2545 #endif
2546 
2547 #if defined(CONFIG_MAC80211_DEBUGFS) && defined(CONFIG_ATH9K_DEBUGFS)
2548 	.sta_add_debugfs    = ath9k_sta_add_debugfs,
2549 #endif
2550 	.sw_scan_start	    = ath9k_sw_scan_start,
2551 	.sw_scan_complete   = ath9k_sw_scan_complete,
2552 	.channel_switch_beacon     = ath9k_channel_switch_beacon,
2553 };
2554