Linux Audio

Check our new training course

Loading...
v3.1
  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/dma-mapping.h>
 18#include <linux/slab.h>
 19#include <linux/ath9k_platform.h>
 
 
 
 20
 21#include "ath9k.h"
 22
 
 
 
 
 
 23static char *dev_info = "ath9k";
 24
 25MODULE_AUTHOR("Atheros Communications");
 26MODULE_DESCRIPTION("Support for Atheros 802.11n wireless LAN cards.");
 27MODULE_SUPPORTED_DEVICE("Atheros 802.11n WLAN cards");
 28MODULE_LICENSE("Dual BSD/GPL");
 29
 30static unsigned int ath9k_debug = ATH_DBG_DEFAULT;
 31module_param_named(debug, ath9k_debug, uint, 0);
 32MODULE_PARM_DESC(debug, "Debugging mask");
 33
 34int ath9k_modparam_nohwcrypt;
 35module_param_named(nohwcrypt, ath9k_modparam_nohwcrypt, int, 0444);
 36MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption");
 37
 38int led_blink;
 39module_param_named(blink, led_blink, int, 0444);
 40MODULE_PARM_DESC(blink, "Enable LED blink on activity");
 41
 42static int ath9k_btcoex_enable;
 43module_param_named(btcoex_enable, ath9k_btcoex_enable, int, 0444);
 44MODULE_PARM_DESC(btcoex_enable, "Enable wifi-BT coexistence");
 45
 46bool is_ath9k_unloaded;
 47/* We use the hw_value as an index into our private channel structure */
 48
 49#define CHAN2G(_freq, _idx)  { \
 50	.band = IEEE80211_BAND_2GHZ, \
 51	.center_freq = (_freq), \
 52	.hw_value = (_idx), \
 53	.max_power = 20, \
 54}
 55
 56#define CHAN5G(_freq, _idx) { \
 57	.band = IEEE80211_BAND_5GHZ, \
 58	.center_freq = (_freq), \
 59	.hw_value = (_idx), \
 60	.max_power = 20, \
 61}
 62
 63/* Some 2 GHz radios are actually tunable on 2312-2732
 64 * on 5 MHz steps, we support the channels which we know
 65 * we have calibration data for all cards though to make
 66 * this static */
 67static const struct ieee80211_channel ath9k_2ghz_chantable[] = {
 68	CHAN2G(2412, 0), /* Channel 1 */
 69	CHAN2G(2417, 1), /* Channel 2 */
 70	CHAN2G(2422, 2), /* Channel 3 */
 71	CHAN2G(2427, 3), /* Channel 4 */
 72	CHAN2G(2432, 4), /* Channel 5 */
 73	CHAN2G(2437, 5), /* Channel 6 */
 74	CHAN2G(2442, 6), /* Channel 7 */
 75	CHAN2G(2447, 7), /* Channel 8 */
 76	CHAN2G(2452, 8), /* Channel 9 */
 77	CHAN2G(2457, 9), /* Channel 10 */
 78	CHAN2G(2462, 10), /* Channel 11 */
 79	CHAN2G(2467, 11), /* Channel 12 */
 80	CHAN2G(2472, 12), /* Channel 13 */
 81	CHAN2G(2484, 13), /* Channel 14 */
 82};
 83
 84/* Some 5 GHz radios are actually tunable on XXXX-YYYY
 85 * on 5 MHz steps, we support the channels which we know
 86 * we have calibration data for all cards though to make
 87 * this static */
 88static const struct ieee80211_channel ath9k_5ghz_chantable[] = {
 89	/* _We_ call this UNII 1 */
 90	CHAN5G(5180, 14), /* Channel 36 */
 91	CHAN5G(5200, 15), /* Channel 40 */
 92	CHAN5G(5220, 16), /* Channel 44 */
 93	CHAN5G(5240, 17), /* Channel 48 */
 94	/* _We_ call this UNII 2 */
 95	CHAN5G(5260, 18), /* Channel 52 */
 96	CHAN5G(5280, 19), /* Channel 56 */
 97	CHAN5G(5300, 20), /* Channel 60 */
 98	CHAN5G(5320, 21), /* Channel 64 */
 99	/* _We_ call this "Middle band" */
100	CHAN5G(5500, 22), /* Channel 100 */
101	CHAN5G(5520, 23), /* Channel 104 */
102	CHAN5G(5540, 24), /* Channel 108 */
103	CHAN5G(5560, 25), /* Channel 112 */
104	CHAN5G(5580, 26), /* Channel 116 */
105	CHAN5G(5600, 27), /* Channel 120 */
106	CHAN5G(5620, 28), /* Channel 124 */
107	CHAN5G(5640, 29), /* Channel 128 */
108	CHAN5G(5660, 30), /* Channel 132 */
109	CHAN5G(5680, 31), /* Channel 136 */
110	CHAN5G(5700, 32), /* Channel 140 */
111	/* _We_ call this UNII 3 */
112	CHAN5G(5745, 33), /* Channel 149 */
113	CHAN5G(5765, 34), /* Channel 153 */
114	CHAN5G(5785, 35), /* Channel 157 */
115	CHAN5G(5805, 36), /* Channel 161 */
116	CHAN5G(5825, 37), /* Channel 165 */
117};
118
119/* Atheros hardware rate code addition for short premble */
120#define SHPCHECK(__hw_rate, __flags) \
121	((__flags & IEEE80211_RATE_SHORT_PREAMBLE) ? (__hw_rate | 0x04 ) : 0)
122
123#define RATE(_bitrate, _hw_rate, _flags) {              \
124	.bitrate        = (_bitrate),                   \
125	.flags          = (_flags),                     \
126	.hw_value       = (_hw_rate),                   \
127	.hw_value_short = (SHPCHECK(_hw_rate, _flags))  \
128}
129
130static struct ieee80211_rate ath9k_legacy_rates[] = {
131	RATE(10, 0x1b, 0),
132	RATE(20, 0x1a, IEEE80211_RATE_SHORT_PREAMBLE),
133	RATE(55, 0x19, IEEE80211_RATE_SHORT_PREAMBLE),
134	RATE(110, 0x18, IEEE80211_RATE_SHORT_PREAMBLE),
135	RATE(60, 0x0b, 0),
136	RATE(90, 0x0f, 0),
137	RATE(120, 0x0a, 0),
138	RATE(180, 0x0e, 0),
139	RATE(240, 0x09, 0),
140	RATE(360, 0x0d, 0),
141	RATE(480, 0x08, 0),
142	RATE(540, 0x0c, 0),
143};
144
145#ifdef CONFIG_MAC80211_LEDS
146static const struct ieee80211_tpt_blink ath9k_tpt_blink[] = {
147	{ .throughput = 0 * 1024, .blink_time = 334 },
148	{ .throughput = 1 * 1024, .blink_time = 260 },
149	{ .throughput = 5 * 1024, .blink_time = 220 },
150	{ .throughput = 10 * 1024, .blink_time = 190 },
151	{ .throughput = 20 * 1024, .blink_time = 170 },
152	{ .throughput = 50 * 1024, .blink_time = 150 },
153	{ .throughput = 70 * 1024, .blink_time = 130 },
154	{ .throughput = 100 * 1024, .blink_time = 110 },
155	{ .throughput = 200 * 1024, .blink_time = 80 },
156	{ .throughput = 300 * 1024, .blink_time = 50 },
157};
158#endif
159
160static void ath9k_deinit_softc(struct ath_softc *sc);
161
162/*
163 * Read and write, they both share the same lock. We do this to serialize
164 * reads and writes on Atheros 802.11n PCI devices only. This is required
165 * as the FIFO on these devices can only accept sanely 2 requests.
166 */
167
168static void ath9k_iowrite32(void *hw_priv, u32 val, u32 reg_offset)
169{
170	struct ath_hw *ah = (struct ath_hw *) hw_priv;
171	struct ath_common *common = ath9k_hw_common(ah);
172	struct ath_softc *sc = (struct ath_softc *) common->priv;
173
174	if (ah->config.serialize_regmode == SER_REG_MODE_ON) {
175		unsigned long flags;
176		spin_lock_irqsave(&sc->sc_serial_rw, flags);
177		iowrite32(val, sc->mem + reg_offset);
178		spin_unlock_irqrestore(&sc->sc_serial_rw, flags);
179	} else
180		iowrite32(val, sc->mem + reg_offset);
181}
182
183static unsigned int ath9k_ioread32(void *hw_priv, u32 reg_offset)
184{
185	struct ath_hw *ah = (struct ath_hw *) hw_priv;
186	struct ath_common *common = ath9k_hw_common(ah);
187	struct ath_softc *sc = (struct ath_softc *) common->priv;
188	u32 val;
189
190	if (ah->config.serialize_regmode == SER_REG_MODE_ON) {
191		unsigned long flags;
192		spin_lock_irqsave(&sc->sc_serial_rw, flags);
193		val = ioread32(sc->mem + reg_offset);
194		spin_unlock_irqrestore(&sc->sc_serial_rw, flags);
195	} else
196		val = ioread32(sc->mem + reg_offset);
197	return val;
198}
199
200static unsigned int __ath9k_reg_rmw(struct ath_softc *sc, u32 reg_offset,
201				    u32 set, u32 clr)
202{
203	u32 val;
204
205	val = ioread32(sc->mem + reg_offset);
206	val &= ~clr;
207	val |= set;
208	iowrite32(val, sc->mem + reg_offset);
209
210	return val;
211}
212
213static unsigned int ath9k_reg_rmw(void *hw_priv, u32 reg_offset, u32 set, u32 clr)
214{
215	struct ath_hw *ah = (struct ath_hw *) hw_priv;
216	struct ath_common *common = ath9k_hw_common(ah);
217	struct ath_softc *sc = (struct ath_softc *) common->priv;
218	unsigned long uninitialized_var(flags);
219	u32 val;
220
221	if (ah->config.serialize_regmode == SER_REG_MODE_ON) {
222		spin_lock_irqsave(&sc->sc_serial_rw, flags);
223		val = __ath9k_reg_rmw(sc, reg_offset, set, clr);
224		spin_unlock_irqrestore(&sc->sc_serial_rw, flags);
225	} else
226		val = __ath9k_reg_rmw(sc, reg_offset, set, clr);
227
228	return val;
229}
230
231/**************************/
232/*     Initialization     */
233/**************************/
234
235static void setup_ht_cap(struct ath_softc *sc,
236			 struct ieee80211_sta_ht_cap *ht_info)
237{
 
 
238	struct ath_hw *ah = sc->sc_ah;
239	struct ath_common *common = ath9k_hw_common(ah);
240	u8 tx_streams, rx_streams;
241	int i, max_streams;
242
243	ht_info->ht_supported = true;
244	ht_info->cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
245		       IEEE80211_HT_CAP_SM_PS |
246		       IEEE80211_HT_CAP_SGI_40 |
247		       IEEE80211_HT_CAP_DSSSCCK40;
248
249	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_LDPC)
250		ht_info->cap |= IEEE80211_HT_CAP_LDPC_CODING;
251
252	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_SGI_20)
253		ht_info->cap |= IEEE80211_HT_CAP_SGI_20;
254
255	ht_info->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
256	ht_info->ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
257
258	if (AR_SREV_9330(ah) || AR_SREV_9485(ah))
259		max_streams = 1;
260	else if (AR_SREV_9300_20_OR_LATER(ah))
261		max_streams = 3;
262	else
263		max_streams = 2;
264
265	if (AR_SREV_9280_20_OR_LATER(ah)) {
266		if (max_streams >= 2)
267			ht_info->cap |= IEEE80211_HT_CAP_TX_STBC;
268		ht_info->cap |= (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT);
269	}
270
271	/* set up supported mcs set */
272	memset(&ht_info->mcs, 0, sizeof(ht_info->mcs));
273	tx_streams = ath9k_cmn_count_streams(common->tx_chainmask, max_streams);
274	rx_streams = ath9k_cmn_count_streams(common->rx_chainmask, max_streams);
275
276	ath_dbg(common, ATH_DBG_CONFIG,
277		"TX streams %d, RX streams: %d\n",
278		tx_streams, rx_streams);
279
280	if (tx_streams != rx_streams) {
281		ht_info->mcs.tx_params |= IEEE80211_HT_MCS_TX_RX_DIFF;
282		ht_info->mcs.tx_params |= ((tx_streams - 1) <<
283				IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT);
 
 
 
 
 
 
 
284	}
285
286	for (i = 0; i < rx_streams; i++)
287		ht_info->mcs.rx_mask[i] = 0xff;
288
289	ht_info->mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
290}
291
292static int ath9k_reg_notifier(struct wiphy *wiphy,
293			      struct regulatory_request *request)
294{
295	struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
296	struct ath_softc *sc = hw->priv;
297	struct ath_regulatory *reg = ath9k_hw_regulatory(sc->sc_ah);
298
299	return ath_reg_notifier_apply(wiphy, request, reg);
300}
301
302/*
303 *  This function will allocate both the DMA descriptor structure, and the
304 *  buffers it contains.  These are used to contain the descriptors used
305 *  by the system.
306*/
307int ath_descdma_setup(struct ath_softc *sc, struct ath_descdma *dd,
308		      struct list_head *head, const char *name,
309		      int nbuf, int ndesc, bool is_tx)
310{
311	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
312	u8 *ds;
313	struct ath_buf *bf;
314	int i, bsize, error, desc_len;
315
316	ath_dbg(common, ATH_DBG_CONFIG, "%s DMA: %u buffers %u desc/buf\n",
317		name, nbuf, ndesc);
318
319	INIT_LIST_HEAD(head);
320
321	if (is_tx)
322		desc_len = sc->sc_ah->caps.tx_desc_len;
323	else
324		desc_len = sizeof(struct ath_desc);
325
326	/* ath_desc must be a multiple of DWORDs */
327	if ((desc_len % 4) != 0) {
328		ath_err(common, "ath_desc not DWORD aligned\n");
329		BUG_ON((desc_len % 4) != 0);
330		error = -ENOMEM;
331		goto fail;
332	}
333
334	dd->dd_desc_len = desc_len * nbuf * ndesc;
335
336	/*
337	 * Need additional DMA memory because we can't use
338	 * descriptors that cross the 4K page boundary. Assume
339	 * one skipped descriptor per 4K page.
340	 */
341	if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_4KB_SPLITTRANS)) {
342		u32 ndesc_skipped =
343			ATH_DESC_4KB_BOUND_NUM_SKIPPED(dd->dd_desc_len);
344		u32 dma_len;
345
346		while (ndesc_skipped) {
347			dma_len = ndesc_skipped * desc_len;
348			dd->dd_desc_len += dma_len;
349
350			ndesc_skipped = ATH_DESC_4KB_BOUND_NUM_SKIPPED(dma_len);
351		}
352	}
353
354	/* allocate descriptors */
355	dd->dd_desc = dma_alloc_coherent(sc->dev, dd->dd_desc_len,
356					 &dd->dd_desc_paddr, GFP_KERNEL);
357	if (dd->dd_desc == NULL) {
358		error = -ENOMEM;
359		goto fail;
360	}
361	ds = (u8 *) dd->dd_desc;
362	ath_dbg(common, ATH_DBG_CONFIG, "%s DMA map: %p (%u) -> %llx (%u)\n",
363		name, ds, (u32) dd->dd_desc_len,
364		ito64(dd->dd_desc_paddr), /*XXX*/(u32) dd->dd_desc_len);
365
366	/* allocate buffers */
367	bsize = sizeof(struct ath_buf) * nbuf;
368	bf = kzalloc(bsize, GFP_KERNEL);
369	if (bf == NULL) {
370		error = -ENOMEM;
371		goto fail2;
372	}
373	dd->dd_bufptr = bf;
374
375	for (i = 0; i < nbuf; i++, bf++, ds += (desc_len * ndesc)) {
376		bf->bf_desc = ds;
377		bf->bf_daddr = DS2PHYS(dd, ds);
378
379		if (!(sc->sc_ah->caps.hw_caps &
380		      ATH9K_HW_CAP_4KB_SPLITTRANS)) {
381			/*
382			 * Skip descriptor addresses which can cause 4KB
383			 * boundary crossing (addr + length) with a 32 dword
384			 * descriptor fetch.
385			 */
386			while (ATH_DESC_4KB_BOUND_CHECK(bf->bf_daddr)) {
387				BUG_ON((caddr_t) bf->bf_desc >=
388				       ((caddr_t) dd->dd_desc +
389					dd->dd_desc_len));
390
391				ds += (desc_len * ndesc);
392				bf->bf_desc = ds;
393				bf->bf_daddr = DS2PHYS(dd, ds);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
394			}
 
395		}
396		list_add_tail(&bf->list, head);
397	}
398	return 0;
399fail2:
400	dma_free_coherent(sc->dev, dd->dd_desc_len, dd->dd_desc,
401			  dd->dd_desc_paddr);
402fail:
403	memset(dd, 0, sizeof(*dd));
404	return error;
405}
406
407void ath9k_init_crypto(struct ath_softc *sc)
408{
409	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
410	int i = 0;
411
412	/* Get the hardware key cache size. */
413	common->keymax = AR_KEYTABLE_SIZE;
 
414
415	/*
416	 * Reset the key cache since some parts do not
417	 * reset the contents on initial power up.
418	 */
419	for (i = 0; i < common->keymax; i++)
420		ath_hw_keyreset(common, (u16) i);
421
422	/*
423	 * Check whether the separate key cache entries
424	 * are required to handle both tx+rx MIC keys.
425	 * With split mic keys the number of stations is limited
426	 * to 27 otherwise 59.
427	 */
428	if (sc->sc_ah->misc_mode & AR_PCU_MIC_NEW_LOC_ENA)
429		common->crypt_caps |= ATH_CRYPT_CAP_MIC_COMBINED;
430}
431
432static int ath9k_init_btcoex(struct ath_softc *sc)
433{
434	struct ath_txq *txq;
435	int r;
436
437	switch (sc->sc_ah->btcoex_hw.scheme) {
438	case ATH_BTCOEX_CFG_NONE:
439		break;
440	case ATH_BTCOEX_CFG_2WIRE:
441		ath9k_hw_btcoex_init_2wire(sc->sc_ah);
442		break;
443	case ATH_BTCOEX_CFG_3WIRE:
444		ath9k_hw_btcoex_init_3wire(sc->sc_ah);
445		r = ath_init_btcoex_timer(sc);
446		if (r)
447			return -1;
448		txq = sc->tx.txq_map[WME_AC_BE];
449		ath9k_hw_init_btcoex_hw(sc->sc_ah, txq->axq_qnum);
450		sc->btcoex.bt_stomp_type = ATH_BTCOEX_STOMP_LOW;
451		break;
452	default:
453		WARN_ON(1);
454		break;
455	}
456
457	return 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
458}
459
460static int ath9k_init_queues(struct ath_softc *sc)
461{
462	int i = 0;
 
 
463
464	sc->beacon.beaconq = ath9k_hw_beaconq_setup(sc->sc_ah);
465	sc->beacon.cabq = ath_txq_setup(sc, ATH9K_TX_QUEUE_CAB, 0);
466
467	sc->config.cabqReadytime = ATH_CABQ_READY_TIME;
468	ath_cabq_update(sc);
 
 
 
 
 
 
469
470	for (i = 0; i < WME_NUM_AC; i++) {
471		sc->tx.txq_map[i] = ath_txq_setup(sc, ATH9K_TX_QUEUE_DATA, i);
472		sc->tx.txq_map[i]->mac80211_qnum = i;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
473	}
474	return 0;
475}
476
477static int ath9k_init_channels_rates(struct ath_softc *sc)
 
478{
479	void *channels;
480
481	BUILD_BUG_ON(ARRAY_SIZE(ath9k_2ghz_chantable) +
482		     ARRAY_SIZE(ath9k_5ghz_chantable) !=
483		     ATH9K_NUM_CHANNELS);
484
485	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ) {
486		channels = kmemdup(ath9k_2ghz_chantable,
487			sizeof(ath9k_2ghz_chantable), GFP_KERNEL);
488		if (!channels)
489		    return -ENOMEM;
490
491		sc->sbands[IEEE80211_BAND_2GHZ].channels = channels;
492		sc->sbands[IEEE80211_BAND_2GHZ].band = IEEE80211_BAND_2GHZ;
493		sc->sbands[IEEE80211_BAND_2GHZ].n_channels =
494			ARRAY_SIZE(ath9k_2ghz_chantable);
495		sc->sbands[IEEE80211_BAND_2GHZ].bitrates = ath9k_legacy_rates;
496		sc->sbands[IEEE80211_BAND_2GHZ].n_bitrates =
497			ARRAY_SIZE(ath9k_legacy_rates);
498	}
499
500	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ) {
501		channels = kmemdup(ath9k_5ghz_chantable,
502			sizeof(ath9k_5ghz_chantable), GFP_KERNEL);
503		if (!channels) {
504			if (sc->sbands[IEEE80211_BAND_2GHZ].channels)
505				kfree(sc->sbands[IEEE80211_BAND_2GHZ].channels);
506			return -ENOMEM;
507		}
508
509		sc->sbands[IEEE80211_BAND_5GHZ].channels = channels;
510		sc->sbands[IEEE80211_BAND_5GHZ].band = IEEE80211_BAND_5GHZ;
511		sc->sbands[IEEE80211_BAND_5GHZ].n_channels =
512			ARRAY_SIZE(ath9k_5ghz_chantable);
513		sc->sbands[IEEE80211_BAND_5GHZ].bitrates =
514			ath9k_legacy_rates + 4;
515		sc->sbands[IEEE80211_BAND_5GHZ].n_bitrates =
516			ARRAY_SIZE(ath9k_legacy_rates) - 4;
517	}
518	return 0;
519}
520
521static void ath9k_init_misc(struct ath_softc *sc)
522{
523	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
524	int i = 0;
525	setup_timer(&common->ani.timer, ath_ani_calibrate, (unsigned long)sc);
526
527	sc->config.txpowlimit = ATH_TXPOWER_MAX;
 
 
528
529	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) {
530		sc->sc_flags |= SC_OP_TXAGGR;
531		sc->sc_flags |= SC_OP_RXAGGR;
 
 
 
532	}
533
534	common->tx_chainmask = sc->sc_ah->caps.tx_chainmask;
535	common->rx_chainmask = sc->sc_ah->caps.rx_chainmask;
536
537	ath9k_hw_set_diversity(sc->sc_ah, true);
538	sc->rx.defant = ath9k_hw_getdefantenna(sc->sc_ah);
 
 
 
539
540	memcpy(common->bssidmask, ath_bcast_mac, ETH_ALEN);
 
541
542	sc->beacon.slottime = ATH9K_SLOT_TIME_9;
 
 
 
543
544	for (i = 0; i < ARRAY_SIZE(sc->beacon.bslot); i++)
545		sc->beacon.bslot[i] = NULL;
 
 
 
546
547	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB)
548		sc->ant_comb.count = ATH_ANT_DIV_COMB_INIT_COUNT;
 
 
 
 
 
 
 
 
 
 
 
549}
550
551static int ath9k_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
552			    const struct ath_bus_ops *bus_ops)
553{
554	struct ath9k_platform_data *pdata = sc->dev->platform_data;
555	struct ath_hw *ah = NULL;
 
556	struct ath_common *common;
557	int ret = 0, i;
558	int csz = 0;
559
560	ah = kzalloc(sizeof(struct ath_hw), GFP_KERNEL);
561	if (!ah)
562		return -ENOMEM;
563
 
564	ah->hw = sc->hw;
565	ah->hw_version.devid = devid;
566	ah->hw_version.subsysid = subsysid;
567	ah->reg_ops.read = ath9k_ioread32;
568	ah->reg_ops.write = ath9k_iowrite32;
569	ah->reg_ops.rmw = ath9k_reg_rmw;
570	sc->sc_ah = ah;
 
 
 
 
 
 
571
572	if (!pdata) {
573		ah->ah_flags |= AH_USE_EEPROM;
574		sc->sc_ah->led_pin = -1;
575	} else {
576		sc->sc_ah->gpio_mask = pdata->gpio_mask;
577		sc->sc_ah->gpio_val = pdata->gpio_val;
578		sc->sc_ah->led_pin = pdata->led_pin;
579		ah->is_clk_25mhz = pdata->is_clk_25mhz;
580		ah->get_mac_revision = pdata->get_mac_revision;
581		ah->external_reset = pdata->external_reset;
582	}
583
584	common = ath9k_hw_common(ah);
585	common->ops = &ah->reg_ops;
586	common->bus_ops = bus_ops;
587	common->ah = ah;
588	common->hw = sc->hw;
589	common->priv = sc;
590	common->debug_mask = ath9k_debug;
591	common->btcoex_enabled = ath9k_btcoex_enable == 1;
592	common->disable_ani = false;
593	spin_lock_init(&common->cc_lock);
594
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
595	spin_lock_init(&sc->sc_serial_rw);
596	spin_lock_init(&sc->sc_pm_lock);
597	mutex_init(&sc->mutex);
598#ifdef CONFIG_ATH9K_DEBUGFS
599	spin_lock_init(&sc->nodes_lock);
600	INIT_LIST_HEAD(&sc->nodes);
601#endif
602	tasklet_init(&sc->intr_tq, ath9k_tasklet, (unsigned long)sc);
603	tasklet_init(&sc->bcon_tasklet, ath_beacon_tasklet,
604		     (unsigned long)sc);
605
 
 
 
 
 
606	/*
607	 * Cache line size is used to size and align various
608	 * structures used to communicate with the hardware.
609	 */
610	ath_read_cachesize(common, &csz);
611	common->cachelsz = csz << 2; /* convert to bytes */
612
613	/* Initializes the hardware for all supported chipsets */
614	ret = ath9k_hw_init(ah);
615	if (ret)
616		goto err_hw;
617
618	if (pdata && pdata->macaddr)
619		memcpy(common->macaddr, pdata->macaddr, ETH_ALEN);
620
621	ret = ath9k_init_queues(sc);
622	if (ret)
623		goto err_queues;
624
625	ret =  ath9k_init_btcoex(sc);
626	if (ret)
627		goto err_btcoex;
628
629	ret = ath9k_init_channels_rates(sc);
630	if (ret)
631		goto err_btcoex;
632
633	ath9k_init_crypto(sc);
634	ath9k_init_misc(sc);
 
 
 
 
635
636	return 0;
637
638err_btcoex:
639	for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)
640		if (ATH_TXQ_SETUP(sc, i))
641			ath_tx_cleanupq(sc, &sc->tx.txq[i]);
642err_queues:
643	ath9k_hw_deinit(ah);
644err_hw:
645
646	kfree(ah);
647	sc->sc_ah = NULL;
648
649	return ret;
650}
651
652static void ath9k_init_band_txpower(struct ath_softc *sc, int band)
653{
654	struct ieee80211_supported_band *sband;
655	struct ieee80211_channel *chan;
656	struct ath_hw *ah = sc->sc_ah;
657	struct ath_regulatory *reg = ath9k_hw_regulatory(ah);
 
658	int i;
659
660	sband = &sc->sbands[band];
661	for (i = 0; i < sband->n_channels; i++) {
662		chan = &sband->channels[i];
663		ah->curchan = &ah->channels[chan->hw_value];
664		ath9k_cmn_update_ichannel(ah->curchan, chan, NL80211_CHAN_HT20);
 
665		ath9k_hw_set_txpowerlimit(ah, MAX_RATE_POWER, true);
666		chan->max_power = reg->max_power_level / 2;
667	}
668}
669
670static void ath9k_init_txpower_limits(struct ath_softc *sc)
671{
672	struct ath_hw *ah = sc->sc_ah;
673	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
674	struct ath9k_channel *curchan = ah->curchan;
675
676	ah->txchainmask = common->tx_chainmask;
677	if (ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ)
678		ath9k_init_band_txpower(sc, IEEE80211_BAND_2GHZ);
679	if (ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)
680		ath9k_init_band_txpower(sc, IEEE80211_BAND_5GHZ);
681
682	ah->curchan = curchan;
683}
684
685void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
686{
687	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
 
688
689	hw->flags = IEEE80211_HW_RX_INCLUDES_FCS |
690		IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
691		IEEE80211_HW_SIGNAL_DBM |
692		IEEE80211_HW_SUPPORTS_PS |
693		IEEE80211_HW_PS_NULLFUNC_STACK |
694		IEEE80211_HW_SPECTRUM_MGMT |
695		IEEE80211_HW_REPORTS_TX_ACK_STATUS;
 
 
696
697	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT)
698		 hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
 
 
 
 
 
 
 
 
699
700	if (AR_SREV_9160_10_OR_LATER(sc->sc_ah) || ath9k_modparam_nohwcrypt)
701		hw->flags |= IEEE80211_HW_MFP_CAPABLE;
702
703	hw->wiphy->interface_modes =
704		BIT(NL80211_IFTYPE_P2P_GO) |
705		BIT(NL80211_IFTYPE_P2P_CLIENT) |
706		BIT(NL80211_IFTYPE_AP) |
707		BIT(NL80211_IFTYPE_WDS) |
708		BIT(NL80211_IFTYPE_STATION) |
709		BIT(NL80211_IFTYPE_ADHOC) |
710		BIT(NL80211_IFTYPE_MESH_POINT);
 
 
 
 
 
 
711
712	if (AR_SREV_5416(sc->sc_ah))
713		hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
714
715	hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
 
 
 
 
 
716
717	hw->queues = 4;
718	hw->max_rates = 4;
719	hw->channel_change_time = 5000;
720	hw->max_listen_interval = 10;
721	hw->max_rate_tries = 10;
722	hw->sta_data_size = sizeof(struct ath_node);
723	hw->vif_data_size = sizeof(struct ath_vif);
724
725#ifdef CONFIG_ATH9K_RATE_CONTROL
726	hw->rate_control_algorithm = "ath9k_rate_control";
727#endif
 
 
 
 
 
 
728
729	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ)
730		hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
731			&sc->sbands[IEEE80211_BAND_2GHZ];
732	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)
733		hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
734			&sc->sbands[IEEE80211_BAND_5GHZ];
735
736	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) {
737		if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ)
738			setup_ht_cap(sc, &sc->sbands[IEEE80211_BAND_2GHZ].ht_cap);
739		if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)
740			setup_ht_cap(sc, &sc->sbands[IEEE80211_BAND_5GHZ].ht_cap);
741	}
742
743	SET_IEEE80211_PERM_ADDR(hw, common->macaddr);
744}
745
746int ath9k_init_device(u16 devid, struct ath_softc *sc, u16 subsysid,
747		    const struct ath_bus_ops *bus_ops)
748{
749	struct ieee80211_hw *hw = sc->hw;
750	struct ath_common *common;
751	struct ath_hw *ah;
752	int error = 0;
753	struct ath_regulatory *reg;
754
755	/* Bring up device */
756	error = ath9k_init_softc(devid, sc, subsysid, bus_ops);
757	if (error != 0)
758		goto error_init;
759
760	ah = sc->sc_ah;
761	common = ath9k_hw_common(ah);
762	ath9k_set_hw_capab(sc, hw);
763
 
 
 
764	/* Initialize regulatory */
765	error = ath_regd_init(&common->regulatory, sc->hw->wiphy,
766			      ath9k_reg_notifier);
767	if (error)
768		goto error_regd;
769
770	reg = &common->regulatory;
771
772	/* Setup TX DMA */
773	error = ath_tx_init(sc, ATH_TXBUF);
774	if (error != 0)
775		goto error_tx;
776
777	/* Setup RX DMA */
778	error = ath_rx_init(sc, ATH_RXBUF);
779	if (error != 0)
780		goto error_rx;
781
782	ath9k_init_txpower_limits(sc);
783
784#ifdef CONFIG_MAC80211_LEDS
785	/* must be initialized before ieee80211_register_hw */
786	sc->led_cdev.default_trigger = ieee80211_create_tpt_led_trigger(sc->hw,
787		IEEE80211_TPT_LEDTRIG_FL_RADIO, ath9k_tpt_blink,
788		ARRAY_SIZE(ath9k_tpt_blink));
789#endif
790
791	/* Register with mac80211 */
792	error = ieee80211_register_hw(hw);
793	if (error)
794		goto error_register;
795
796	error = ath9k_init_debug(ah);
797	if (error) {
798		ath_err(common, "Unable to create debugfs files\n");
799		goto error_world;
800	}
801
802	/* Handle world regulatory */
803	if (!ath_is_world_regd(reg)) {
804		error = regulatory_hint(hw->wiphy, reg->alpha2);
805		if (error)
806			goto error_world;
807	}
808
809	INIT_WORK(&sc->hw_check_work, ath_hw_check);
810	INIT_WORK(&sc->paprd_work, ath_paprd_calibrate);
811	INIT_DELAYED_WORK(&sc->hw_pll_work, ath_hw_pll_work);
812	sc->last_rssi = ATH_RSSI_DUMMY_MARKER;
813
814	ath_init_leds(sc);
815	ath_start_rfkill_poll(sc);
816
817	return 0;
818
819error_world:
 
 
820	ieee80211_unregister_hw(hw);
821error_register:
822	ath_rx_cleanup(sc);
823error_rx:
824	ath_tx_cleanup(sc);
825error_tx:
826	/* Nothing */
827error_regd:
828	ath9k_deinit_softc(sc);
829error_init:
830	return error;
831}
832
833/*****************************/
834/*     De-Initialization     */
835/*****************************/
836
837static void ath9k_deinit_softc(struct ath_softc *sc)
838{
839	int i = 0;
840
841	if (sc->sbands[IEEE80211_BAND_2GHZ].channels)
842		kfree(sc->sbands[IEEE80211_BAND_2GHZ].channels);
843
844	if (sc->sbands[IEEE80211_BAND_5GHZ].channels)
845		kfree(sc->sbands[IEEE80211_BAND_5GHZ].channels);
846
847        if ((sc->btcoex.no_stomp_timer) &&
848	    sc->sc_ah->btcoex_hw.scheme == ATH_BTCOEX_CFG_3WIRE)
849		ath_gen_timer_free(sc->sc_ah, sc->btcoex.no_stomp_timer);
850
851	for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)
852		if (ATH_TXQ_SETUP(sc, i))
853			ath_tx_cleanupq(sc, &sc->tx.txq[i]);
854
 
855	ath9k_hw_deinit(sc->sc_ah);
 
 
856
857	kfree(sc->sc_ah);
858	sc->sc_ah = NULL;
859}
860
861void ath9k_deinit_device(struct ath_softc *sc)
862{
863	struct ieee80211_hw *hw = sc->hw;
864
865	ath9k_ps_wakeup(sc);
866
867	wiphy_rfkill_stop_polling(sc->hw->wiphy);
868	ath_deinit_leds(sc);
869
870	ath9k_ps_restore(sc);
871
 
872	ieee80211_unregister_hw(hw);
873	ath_rx_cleanup(sc);
874	ath_tx_cleanup(sc);
875	ath9k_deinit_softc(sc);
876}
877
878void ath_descdma_cleanup(struct ath_softc *sc,
879			 struct ath_descdma *dd,
880			 struct list_head *head)
881{
882	dma_free_coherent(sc->dev, dd->dd_desc_len, dd->dd_desc,
883			  dd->dd_desc_paddr);
884
885	INIT_LIST_HEAD(head);
886	kfree(dd->dd_bufptr);
887	memset(dd, 0, sizeof(*dd));
888}
889
890/************************/
891/*     Module Hooks     */
892/************************/
893
894static int __init ath9k_init(void)
895{
896	int error;
897
898	/* Register rate control algorithm */
899	error = ath_rate_control_register();
900	if (error != 0) {
901		printk(KERN_ERR
902			"ath9k: Unable to register rate control "
903			"algorithm: %d\n",
904			error);
905		goto err_out;
906	}
907
908	error = ath_pci_init();
909	if (error < 0) {
910		printk(KERN_ERR
911			"ath9k: No PCI devices found, driver not installed.\n");
912		error = -ENODEV;
913		goto err_rate_unregister;
914	}
915
916	error = ath_ahb_init();
917	if (error < 0) {
918		error = -ENODEV;
919		goto err_pci_exit;
920	}
921
922	return 0;
923
924 err_pci_exit:
925	ath_pci_exit();
926
927 err_rate_unregister:
928	ath_rate_control_unregister();
929 err_out:
930	return error;
931}
932module_init(ath9k_init);
933
934static void __exit ath9k_exit(void)
935{
936	is_ath9k_unloaded = true;
937	ath_ahb_exit();
938	ath_pci_exit();
939	ath_rate_control_unregister();
940	printk(KERN_INFO "%s: Driver unloaded\n", dev_info);
941}
942module_exit(ath9k_exit);
v3.15
  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#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 18
 19#include <linux/dma-mapping.h>
 20#include <linux/slab.h>
 21#include <linux/ath9k_platform.h>
 22#include <linux/module.h>
 23#include <linux/relay.h>
 24#include <net/ieee80211_radiotap.h>
 25
 26#include "ath9k.h"
 27
 28struct ath9k_eeprom_ctx {
 29	struct completion complete;
 30	struct ath_hw *ah;
 31};
 32
 33static char *dev_info = "ath9k";
 34
 35MODULE_AUTHOR("Atheros Communications");
 36MODULE_DESCRIPTION("Support for Atheros 802.11n wireless LAN cards.");
 37MODULE_SUPPORTED_DEVICE("Atheros 802.11n WLAN cards");
 38MODULE_LICENSE("Dual BSD/GPL");
 39
 40static unsigned int ath9k_debug = ATH_DBG_DEFAULT;
 41module_param_named(debug, ath9k_debug, uint, 0);
 42MODULE_PARM_DESC(debug, "Debugging mask");
 43
 44int ath9k_modparam_nohwcrypt;
 45module_param_named(nohwcrypt, ath9k_modparam_nohwcrypt, int, 0444);
 46MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption");
 47
 48int led_blink;
 49module_param_named(blink, led_blink, int, 0444);
 50MODULE_PARM_DESC(blink, "Enable LED blink on activity");
 51
 52static int ath9k_btcoex_enable;
 53module_param_named(btcoex_enable, ath9k_btcoex_enable, int, 0444);
 54MODULE_PARM_DESC(btcoex_enable, "Enable wifi-BT coexistence");
 55
 56static int ath9k_bt_ant_diversity;
 57module_param_named(bt_ant_diversity, ath9k_bt_ant_diversity, int, 0444);
 58MODULE_PARM_DESC(bt_ant_diversity, "Enable WLAN/BT RX antenna diversity");
 59
 60static int ath9k_ps_enable;
 61module_param_named(ps_enable, ath9k_ps_enable, int, 0444);
 62MODULE_PARM_DESC(ps_enable, "Enable WLAN PowerSave");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 63
 64bool is_ath9k_unloaded;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 65
 66#ifdef CONFIG_MAC80211_LEDS
 67static const struct ieee80211_tpt_blink ath9k_tpt_blink[] = {
 68	{ .throughput = 0 * 1024, .blink_time = 334 },
 69	{ .throughput = 1 * 1024, .blink_time = 260 },
 70	{ .throughput = 5 * 1024, .blink_time = 220 },
 71	{ .throughput = 10 * 1024, .blink_time = 190 },
 72	{ .throughput = 20 * 1024, .blink_time = 170 },
 73	{ .throughput = 50 * 1024, .blink_time = 150 },
 74	{ .throughput = 70 * 1024, .blink_time = 130 },
 75	{ .throughput = 100 * 1024, .blink_time = 110 },
 76	{ .throughput = 200 * 1024, .blink_time = 80 },
 77	{ .throughput = 300 * 1024, .blink_time = 50 },
 78};
 79#endif
 80
 81static void ath9k_deinit_softc(struct ath_softc *sc);
 82
 83/*
 84 * Read and write, they both share the same lock. We do this to serialize
 85 * reads and writes on Atheros 802.11n PCI devices only. This is required
 86 * as the FIFO on these devices can only accept sanely 2 requests.
 87 */
 88
 89static void ath9k_iowrite32(void *hw_priv, u32 val, u32 reg_offset)
 90{
 91	struct ath_hw *ah = (struct ath_hw *) hw_priv;
 92	struct ath_common *common = ath9k_hw_common(ah);
 93	struct ath_softc *sc = (struct ath_softc *) common->priv;
 94
 95	if (NR_CPUS > 1 && ah->config.serialize_regmode == SER_REG_MODE_ON) {
 96		unsigned long flags;
 97		spin_lock_irqsave(&sc->sc_serial_rw, flags);
 98		iowrite32(val, sc->mem + reg_offset);
 99		spin_unlock_irqrestore(&sc->sc_serial_rw, flags);
100	} else
101		iowrite32(val, sc->mem + reg_offset);
102}
103
104static unsigned int ath9k_ioread32(void *hw_priv, u32 reg_offset)
105{
106	struct ath_hw *ah = (struct ath_hw *) hw_priv;
107	struct ath_common *common = ath9k_hw_common(ah);
108	struct ath_softc *sc = (struct ath_softc *) common->priv;
109	u32 val;
110
111	if (NR_CPUS > 1 && ah->config.serialize_regmode == SER_REG_MODE_ON) {
112		unsigned long flags;
113		spin_lock_irqsave(&sc->sc_serial_rw, flags);
114		val = ioread32(sc->mem + reg_offset);
115		spin_unlock_irqrestore(&sc->sc_serial_rw, flags);
116	} else
117		val = ioread32(sc->mem + reg_offset);
118	return val;
119}
120
121static unsigned int __ath9k_reg_rmw(struct ath_softc *sc, u32 reg_offset,
122				    u32 set, u32 clr)
123{
124	u32 val;
125
126	val = ioread32(sc->mem + reg_offset);
127	val &= ~clr;
128	val |= set;
129	iowrite32(val, sc->mem + reg_offset);
130
131	return val;
132}
133
134static unsigned int ath9k_reg_rmw(void *hw_priv, u32 reg_offset, u32 set, u32 clr)
135{
136	struct ath_hw *ah = (struct ath_hw *) hw_priv;
137	struct ath_common *common = ath9k_hw_common(ah);
138	struct ath_softc *sc = (struct ath_softc *) common->priv;
139	unsigned long uninitialized_var(flags);
140	u32 val;
141
142	if (NR_CPUS > 1 && ah->config.serialize_regmode == SER_REG_MODE_ON) {
143		spin_lock_irqsave(&sc->sc_serial_rw, flags);
144		val = __ath9k_reg_rmw(sc, reg_offset, set, clr);
145		spin_unlock_irqrestore(&sc->sc_serial_rw, flags);
146	} else
147		val = __ath9k_reg_rmw(sc, reg_offset, set, clr);
148
149	return val;
150}
151
152/**************************/
153/*     Initialization     */
154/**************************/
155
156static void ath9k_reg_notifier(struct wiphy *wiphy,
157			       struct regulatory_request *request)
158{
159	struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
160	struct ath_softc *sc = hw->priv;
161	struct ath_hw *ah = sc->sc_ah;
162	struct ath_regulatory *reg = ath9k_hw_regulatory(ah);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
164	ath_reg_notifier_apply(wiphy, request, reg);
 
 
165
166	/* Set tx power */
167	if (ah->curchan) {
168		sc->config.txpowlimit = 2 * ah->curchan->chan->max_power;
169		ath9k_ps_wakeup(sc);
170		ath9k_hw_set_txpowerlimit(ah, sc->config.txpowlimit, false);
171		sc->curtxpow = ath9k_hw_regulatory(ah)->power_limit;
172		/* synchronize DFS detector if regulatory domain changed */
173		if (sc->dfs_detector != NULL)
174			sc->dfs_detector->set_dfs_domain(sc->dfs_detector,
175							 request->dfs_region);
176		ath9k_ps_restore(sc);
177	}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178}
179
180/*
181 *  This function will allocate both the DMA descriptor structure, and the
182 *  buffers it contains.  These are used to contain the descriptors used
183 *  by the system.
184*/
185int ath_descdma_setup(struct ath_softc *sc, struct ath_descdma *dd,
186		      struct list_head *head, const char *name,
187		      int nbuf, int ndesc, bool is_tx)
188{
189	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
190	u8 *ds;
191	int i, bsize, desc_len;
 
192
193	ath_dbg(common, CONFIG, "%s DMA: %u buffers %u desc/buf\n",
194		name, nbuf, ndesc);
195
196	INIT_LIST_HEAD(head);
197
198	if (is_tx)
199		desc_len = sc->sc_ah->caps.tx_desc_len;
200	else
201		desc_len = sizeof(struct ath_desc);
202
203	/* ath_desc must be a multiple of DWORDs */
204	if ((desc_len % 4) != 0) {
205		ath_err(common, "ath_desc not DWORD aligned\n");
206		BUG_ON((desc_len % 4) != 0);
207		return -ENOMEM;
 
208	}
209
210	dd->dd_desc_len = desc_len * nbuf * ndesc;
211
212	/*
213	 * Need additional DMA memory because we can't use
214	 * descriptors that cross the 4K page boundary. Assume
215	 * one skipped descriptor per 4K page.
216	 */
217	if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_4KB_SPLITTRANS)) {
218		u32 ndesc_skipped =
219			ATH_DESC_4KB_BOUND_NUM_SKIPPED(dd->dd_desc_len);
220		u32 dma_len;
221
222		while (ndesc_skipped) {
223			dma_len = ndesc_skipped * desc_len;
224			dd->dd_desc_len += dma_len;
225
226			ndesc_skipped = ATH_DESC_4KB_BOUND_NUM_SKIPPED(dma_len);
227		}
228	}
229
230	/* allocate descriptors */
231	dd->dd_desc = dmam_alloc_coherent(sc->dev, dd->dd_desc_len,
232					  &dd->dd_desc_paddr, GFP_KERNEL);
233	if (!dd->dd_desc)
234		return -ENOMEM;
235
 
236	ds = (u8 *) dd->dd_desc;
237	ath_dbg(common, CONFIG, "%s DMA map: %p (%u) -> %llx (%u)\n",
238		name, ds, (u32) dd->dd_desc_len,
239		ito64(dd->dd_desc_paddr), /*XXX*/(u32) dd->dd_desc_len);
240
241	/* allocate buffers */
242	if (is_tx) {
243		struct ath_buf *bf;
244
245		bsize = sizeof(struct ath_buf) * nbuf;
246		bf = devm_kzalloc(sc->dev, bsize, GFP_KERNEL);
247		if (!bf)
248			return -ENOMEM;
249
250		for (i = 0; i < nbuf; i++, bf++, ds += (desc_len * ndesc)) {
251			bf->bf_desc = ds;
252			bf->bf_daddr = DS2PHYS(dd, ds);
253
254			if (!(sc->sc_ah->caps.hw_caps &
255				  ATH9K_HW_CAP_4KB_SPLITTRANS)) {
256				/*
257				 * Skip descriptor addresses which can cause 4KB
258				 * boundary crossing (addr + length) with a 32 dword
259				 * descriptor fetch.
260				 */
261				while (ATH_DESC_4KB_BOUND_CHECK(bf->bf_daddr)) {
262					BUG_ON((caddr_t) bf->bf_desc >=
263						   ((caddr_t) dd->dd_desc +
264						dd->dd_desc_len));
265
266					ds += (desc_len * ndesc);
267					bf->bf_desc = ds;
268					bf->bf_daddr = DS2PHYS(dd, ds);
269				}
270			}
271			list_add_tail(&bf->list, head);
272		}
273	} else {
274		struct ath_rxbuf *bf;
275
276		bsize = sizeof(struct ath_rxbuf) * nbuf;
277		bf = devm_kzalloc(sc->dev, bsize, GFP_KERNEL);
278		if (!bf)
279			return -ENOMEM;
280
281		for (i = 0; i < nbuf; i++, bf++, ds += (desc_len * ndesc)) {
282			bf->bf_desc = ds;
283			bf->bf_daddr = DS2PHYS(dd, ds);
284
285			if (!(sc->sc_ah->caps.hw_caps &
286				  ATH9K_HW_CAP_4KB_SPLITTRANS)) {
287				/*
288				 * Skip descriptor addresses which can cause 4KB
289				 * boundary crossing (addr + length) with a 32 dword
290				 * descriptor fetch.
291				 */
292				while (ATH_DESC_4KB_BOUND_CHECK(bf->bf_daddr)) {
293					BUG_ON((caddr_t) bf->bf_desc >=
294						   ((caddr_t) dd->dd_desc +
295						dd->dd_desc_len));
296
297					ds += (desc_len * ndesc);
298					bf->bf_desc = ds;
299					bf->bf_daddr = DS2PHYS(dd, ds);
300				}
301			}
302			list_add_tail(&bf->list, head);
303		}
 
304	}
305	return 0;
 
 
 
 
 
 
306}
307
308static int ath9k_init_queues(struct ath_softc *sc)
309{
 
310	int i = 0;
311
312	sc->beacon.beaconq = ath9k_hw_beaconq_setup(sc->sc_ah);
313	sc->beacon.cabq = ath_txq_setup(sc, ATH9K_TX_QUEUE_CAB, 0);
314	ath_cabq_update(sc);
315
316	sc->tx.uapsdq = ath_txq_setup(sc, ATH9K_TX_QUEUE_UAPSD, 0);
 
 
 
 
 
317
318	for (i = 0; i < IEEE80211_NUM_ACS; i++) {
319		sc->tx.txq_map[i] = ath_txq_setup(sc, ATH9K_TX_QUEUE_DATA, i);
320		sc->tx.txq_map[i]->mac80211_qnum = i;
321		sc->tx.txq_max_pending[i] = ATH_MAX_QDEPTH;
322	}
323	return 0;
 
 
324}
325
326static void ath9k_init_misc(struct ath_softc *sc)
327{
328	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
329	int i = 0;
330
331	setup_timer(&common->ani.timer, ath_ani_calibrate, (unsigned long)sc);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
332
333	common->last_rssi = ATH_RSSI_DUMMY_MARKER;
334	sc->config.txpowlimit = ATH_TXPOWER_MAX;
335	memcpy(common->bssidmask, ath_bcast_mac, ETH_ALEN);
336	sc->beacon.slottime = ATH9K_SLOT_TIME_9;
337
338	for (i = 0; i < ARRAY_SIZE(sc->beacon.bslot); i++)
339		sc->beacon.bslot[i] = NULL;
340
341	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB)
342		sc->ant_comb.count = ATH_ANT_DIV_COMB_INIT_COUNT;
343
344	sc->spec_config.enabled = 0;
345	sc->spec_config.short_repeat = true;
346	sc->spec_config.count = 8;
347	sc->spec_config.endless = false;
348	sc->spec_config.period = 0xFF;
349	sc->spec_config.fft_period = 0xF;
350}
351
352static void ath9k_init_pcoem_platform(struct ath_softc *sc)
353{
354	struct ath_hw *ah = sc->sc_ah;
355	struct ath9k_hw_capabilities *pCap = &ah->caps;
356	struct ath_common *common = ath9k_hw_common(ah);
357
358	if (common->bus_ops->ath_bus_type != ATH_PCI)
359		return;
360
361	if (sc->driver_data & (ATH9K_PCI_CUS198 |
362			       ATH9K_PCI_CUS230)) {
363		ah->config.xlna_gpio = 9;
364		ah->config.xatten_margin_cfg = true;
365		ah->config.alt_mingainidx = true;
366		ah->config.ant_ctrl_comm2g_switch_enable = 0x000BBB88;
367		sc->ant_comb.low_rssi_thresh = 20;
368		sc->ant_comb.fast_div_bias = 3;
369
370		ath_info(common, "Set parameters for %s\n",
371			 (sc->driver_data & ATH9K_PCI_CUS198) ?
372			 "CUS198" : "CUS230");
373	}
374
375	if (sc->driver_data & ATH9K_PCI_CUS217)
376		ath_info(common, "CUS217 card detected\n");
377
378	if (sc->driver_data & ATH9K_PCI_CUS252)
379		ath_info(common, "CUS252 card detected\n");
380
381	if (sc->driver_data & ATH9K_PCI_AR9565_1ANT)
382		ath_info(common, "WB335 1-ANT card detected\n");
383
384	if (sc->driver_data & ATH9K_PCI_AR9565_2ANT)
385		ath_info(common, "WB335 2-ANT card detected\n");
386
387	if (sc->driver_data & ATH9K_PCI_KILLER)
388		ath_info(common, "Killer Wireless card detected\n");
389
390	/*
391	 * Some WB335 cards do not support antenna diversity. Since
392	 * we use a hardcoded value for AR9565 instead of using the
393	 * EEPROM/OTP data, remove the combining feature from
394	 * the HW capabilities bitmap.
395	 */
396	if (sc->driver_data & (ATH9K_PCI_AR9565_1ANT | ATH9K_PCI_AR9565_2ANT)) {
397		if (!(sc->driver_data & ATH9K_PCI_BT_ANT_DIV))
398			pCap->hw_caps &= ~ATH9K_HW_CAP_ANT_DIV_COMB;
399	}
400
401	if (sc->driver_data & ATH9K_PCI_BT_ANT_DIV) {
402		pCap->hw_caps |= ATH9K_HW_CAP_BT_ANT_DIV;
403		ath_info(common, "Set BT/WLAN RX diversity capability\n");
404	}
405
406	if (sc->driver_data & ATH9K_PCI_D3_L1_WAR) {
407		ah->config.pcie_waen = 0x0040473b;
408		ath_info(common, "Enable WAR for ASPM D3/L1\n");
409	}
410
411	if (sc->driver_data & ATH9K_PCI_NO_PLL_PWRSAVE) {
412		ah->config.no_pll_pwrsave = true;
413		ath_info(common, "Disable PLL PowerSave\n");
414	}
 
415}
416
417static void ath9k_eeprom_request_cb(const struct firmware *eeprom_blob,
418				    void *ctx)
419{
420	struct ath9k_eeprom_ctx *ec = ctx;
421
422	if (eeprom_blob)
423		ec->ah->eeprom_blob = eeprom_blob;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
424
425	complete(&ec->complete);
 
 
 
 
 
 
 
 
 
426}
427
428static int ath9k_eeprom_request(struct ath_softc *sc, const char *name)
429{
430	struct ath9k_eeprom_ctx ec;
431	struct ath_hw *ah = ah = sc->sc_ah;
432	int err;
433
434	/* try to load the EEPROM content asynchronously */
435	init_completion(&ec.complete);
436	ec.ah = sc->sc_ah;
437
438	err = request_firmware_nowait(THIS_MODULE, 1, name, sc->dev, GFP_KERNEL,
439				      &ec, ath9k_eeprom_request_cb);
440	if (err < 0) {
441		ath_err(ath9k_hw_common(ah),
442			"EEPROM request failed\n");
443		return err;
444	}
445
446	wait_for_completion(&ec.complete);
 
447
448	if (!ah->eeprom_blob) {
449		ath_err(ath9k_hw_common(ah),
450			"Unable to load EEPROM file %s\n", name);
451		return -EINVAL;
452	}
453
454	return 0;
455}
456
457static void ath9k_eeprom_release(struct ath_softc *sc)
458{
459	release_firmware(sc->sc_ah->eeprom_blob);
460}
461
462static int ath9k_init_soc_platform(struct ath_softc *sc)
463{
464	struct ath9k_platform_data *pdata = sc->dev->platform_data;
465	struct ath_hw *ah = sc->sc_ah;
466	int ret = 0;
467
468	if (!pdata)
469		return 0;
470
471	if (pdata->eeprom_name) {
472		ret = ath9k_eeprom_request(sc, pdata->eeprom_name);
473		if (ret)
474			return ret;
475	}
476
477	if (pdata->tx_gain_buffalo)
478		ah->config.tx_gain_buffalo = true;
479
480	return ret;
481}
482
483static int ath9k_init_softc(u16 devid, struct ath_softc *sc,
484			    const struct ath_bus_ops *bus_ops)
485{
486	struct ath9k_platform_data *pdata = sc->dev->platform_data;
487	struct ath_hw *ah = NULL;
488	struct ath9k_hw_capabilities *pCap;
489	struct ath_common *common;
490	int ret = 0, i;
491	int csz = 0;
492
493	ah = devm_kzalloc(sc->dev, sizeof(struct ath_hw), GFP_KERNEL);
494	if (!ah)
495		return -ENOMEM;
496
497	ah->dev = sc->dev;
498	ah->hw = sc->hw;
499	ah->hw_version.devid = devid;
 
500	ah->reg_ops.read = ath9k_ioread32;
501	ah->reg_ops.write = ath9k_iowrite32;
502	ah->reg_ops.rmw = ath9k_reg_rmw;
503	sc->sc_ah = ah;
504	pCap = &ah->caps;
505
506	common = ath9k_hw_common(ah);
507	sc->dfs_detector = dfs_pattern_detector_init(common, NL80211_DFS_UNSET);
508	sc->tx99_power = MAX_RATE_POWER + 1;
509	init_waitqueue_head(&sc->tx_wait);
510
511	if (!pdata) {
512		ah->ah_flags |= AH_USE_EEPROM;
513		sc->sc_ah->led_pin = -1;
514	} else {
515		sc->sc_ah->gpio_mask = pdata->gpio_mask;
516		sc->sc_ah->gpio_val = pdata->gpio_val;
517		sc->sc_ah->led_pin = pdata->led_pin;
518		ah->is_clk_25mhz = pdata->is_clk_25mhz;
519		ah->get_mac_revision = pdata->get_mac_revision;
520		ah->external_reset = pdata->external_reset;
521	}
522
 
523	common->ops = &ah->reg_ops;
524	common->bus_ops = bus_ops;
525	common->ah = ah;
526	common->hw = sc->hw;
527	common->priv = sc;
528	common->debug_mask = ath9k_debug;
529	common->btcoex_enabled = ath9k_btcoex_enable == 1;
530	common->disable_ani = false;
 
531
532	/*
533	 * Platform quirks.
534	 */
535	ath9k_init_pcoem_platform(sc);
536
537	ret = ath9k_init_soc_platform(sc);
538	if (ret)
539		return ret;
540
541	/*
542	 * Enable WLAN/BT RX Antenna diversity only when:
543	 *
544	 * - BTCOEX is disabled.
545	 * - the user manually requests the feature.
546	 * - the HW cap is set using the platform data.
547	 */
548	if (!common->btcoex_enabled && ath9k_bt_ant_diversity &&
549	    (pCap->hw_caps & ATH9K_HW_CAP_BT_ANT_DIV))
550		common->bt_ant_diversity = 1;
551
552	spin_lock_init(&common->cc_lock);
553	spin_lock_init(&sc->sc_serial_rw);
554	spin_lock_init(&sc->sc_pm_lock);
555	mutex_init(&sc->mutex);
 
 
 
 
556	tasklet_init(&sc->intr_tq, ath9k_tasklet, (unsigned long)sc);
557	tasklet_init(&sc->bcon_tasklet, ath9k_beacon_tasklet,
558		     (unsigned long)sc);
559
560	setup_timer(&sc->sleep_timer, ath_ps_full_sleep, (unsigned long)sc);
561	INIT_WORK(&sc->hw_reset_work, ath_reset_work);
562	INIT_WORK(&sc->paprd_work, ath_paprd_calibrate);
563	INIT_DELAYED_WORK(&sc->hw_pll_work, ath_hw_pll_work);
564
565	/*
566	 * Cache line size is used to size and align various
567	 * structures used to communicate with the hardware.
568	 */
569	ath_read_cachesize(common, &csz);
570	common->cachelsz = csz << 2; /* convert to bytes */
571
572	/* Initializes the hardware for all supported chipsets */
573	ret = ath9k_hw_init(ah);
574	if (ret)
575		goto err_hw;
576
577	if (pdata && pdata->macaddr)
578		memcpy(common->macaddr, pdata->macaddr, ETH_ALEN);
579
580	ret = ath9k_init_queues(sc);
581	if (ret)
582		goto err_queues;
583
584	ret =  ath9k_init_btcoex(sc);
585	if (ret)
586		goto err_btcoex;
587
588	ret = ath9k_cmn_init_channels_rates(common);
589	if (ret)
590		goto err_btcoex;
591
592	ath9k_cmn_init_crypto(sc->sc_ah);
593	ath9k_init_misc(sc);
594	ath_fill_led_pin(sc);
595
596	if (common->bus_ops->aspm_init)
597		common->bus_ops->aspm_init(common);
598
599	return 0;
600
601err_btcoex:
602	for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)
603		if (ATH_TXQ_SETUP(sc, i))
604			ath_tx_cleanupq(sc, &sc->tx.txq[i]);
605err_queues:
606	ath9k_hw_deinit(ah);
607err_hw:
608	ath9k_eeprom_release(sc);
609	dev_kfree_skb_any(sc->tx99_skb);
 
 
610	return ret;
611}
612
613static void ath9k_init_band_txpower(struct ath_softc *sc, int band)
614{
615	struct ieee80211_supported_band *sband;
616	struct ieee80211_channel *chan;
617	struct ath_hw *ah = sc->sc_ah;
618	struct ath_common *common = ath9k_hw_common(ah);
619	struct cfg80211_chan_def chandef;
620	int i;
621
622	sband = &common->sbands[band];
623	for (i = 0; i < sband->n_channels; i++) {
624		chan = &sband->channels[i];
625		ah->curchan = &ah->channels[chan->hw_value];
626		cfg80211_chandef_create(&chandef, chan, NL80211_CHAN_HT20);
627		ath9k_cmn_get_channel(sc->hw, ah, &chandef);
628		ath9k_hw_set_txpowerlimit(ah, MAX_RATE_POWER, true);
 
629	}
630}
631
632static void ath9k_init_txpower_limits(struct ath_softc *sc)
633{
634	struct ath_hw *ah = sc->sc_ah;
 
635	struct ath9k_channel *curchan = ah->curchan;
636
 
637	if (ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ)
638		ath9k_init_band_txpower(sc, IEEE80211_BAND_2GHZ);
639	if (ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)
640		ath9k_init_band_txpower(sc, IEEE80211_BAND_5GHZ);
641
642	ah->curchan = curchan;
643}
644
645static const struct ieee80211_iface_limit if_limits[] = {
646	{ .max = 2048,	.types = BIT(NL80211_IFTYPE_STATION) |
647				 BIT(NL80211_IFTYPE_P2P_CLIENT) |
648				 BIT(NL80211_IFTYPE_WDS) },
649	{ .max = 8,	.types =
650#ifdef CONFIG_MAC80211_MESH
651				 BIT(NL80211_IFTYPE_MESH_POINT) |
652#endif
653				 BIT(NL80211_IFTYPE_AP) |
654				 BIT(NL80211_IFTYPE_P2P_GO) },
655};
656
657static const struct ieee80211_iface_limit if_dfs_limits[] = {
658	{ .max = 1,	.types = BIT(NL80211_IFTYPE_AP) |
659#ifdef CONFIG_MAC80211_MESH
660				 BIT(NL80211_IFTYPE_MESH_POINT) |
661#endif
662				 BIT(NL80211_IFTYPE_ADHOC) },
663};
664
665static const struct ieee80211_iface_combination if_comb[] = {
666	{
667		.limits = if_limits,
668		.n_limits = ARRAY_SIZE(if_limits),
669		.max_interfaces = 2048,
670		.num_different_channels = 1,
671		.beacon_int_infra_match = true,
672	},
673#ifdef CONFIG_ATH9K_DFS_CERTIFIED
674	{
675		.limits = if_dfs_limits,
676		.n_limits = ARRAY_SIZE(if_dfs_limits),
677		.max_interfaces = 1,
678		.num_different_channels = 1,
679		.beacon_int_infra_match = true,
680		.radar_detect_widths =	BIT(NL80211_CHAN_WIDTH_20_NOHT) |
681					BIT(NL80211_CHAN_WIDTH_20),
682	}
683#endif
684};
685
686static void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
687{
688	struct ath_hw *ah = sc->sc_ah;
689	struct ath_common *common = ath9k_hw_common(ah);
690
691	hw->flags = IEEE80211_HW_RX_INCLUDES_FCS |
692		IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
693		IEEE80211_HW_SIGNAL_DBM |
 
694		IEEE80211_HW_PS_NULLFUNC_STACK |
695		IEEE80211_HW_SPECTRUM_MGMT |
696		IEEE80211_HW_REPORTS_TX_ACK_STATUS |
697		IEEE80211_HW_SUPPORTS_RC_TABLE |
698		IEEE80211_HW_SUPPORTS_HT_CCK_RATES;
699
700	if (ath9k_ps_enable)
701		hw->flags |= IEEE80211_HW_SUPPORTS_PS;
702
703	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) {
704		hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
705
706		if (AR_SREV_9280_20_OR_LATER(ah))
707			hw->radiotap_mcs_details |=
708				IEEE80211_RADIOTAP_MCS_HAVE_STBC;
709	}
710
711	if (AR_SREV_9160_10_OR_LATER(sc->sc_ah) || ath9k_modparam_nohwcrypt)
712		hw->flags |= IEEE80211_HW_MFP_CAPABLE;
713
714	hw->wiphy->features |= NL80211_FEATURE_ACTIVE_MONITOR;
715
716	if (!config_enabled(CONFIG_ATH9K_TX99)) {
717		hw->wiphy->interface_modes =
718			BIT(NL80211_IFTYPE_P2P_GO) |
719			BIT(NL80211_IFTYPE_P2P_CLIENT) |
720			BIT(NL80211_IFTYPE_AP) |
721			BIT(NL80211_IFTYPE_WDS) |
722			BIT(NL80211_IFTYPE_STATION) |
723			BIT(NL80211_IFTYPE_ADHOC) |
724			BIT(NL80211_IFTYPE_MESH_POINT);
725		hw->wiphy->iface_combinations = if_comb;
726		hw->wiphy->n_iface_combinations = ARRAY_SIZE(if_comb);
727	}
728
729	hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
 
730
731	hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
732	hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS;
733	hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
734	hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_5_10_MHZ;
735	hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
736	hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
737
738	hw->queues = 4;
739	hw->max_rates = 4;
740	hw->max_listen_interval = 1;
 
741	hw->max_rate_tries = 10;
742	hw->sta_data_size = sizeof(struct ath_node);
743	hw->vif_data_size = sizeof(struct ath_vif);
744
745	hw->wiphy->available_antennas_rx = BIT(ah->caps.max_rxchains) - 1;
746	hw->wiphy->available_antennas_tx = BIT(ah->caps.max_txchains) - 1;
747
748	/* single chain devices with rx diversity */
749	if (ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB)
750		hw->wiphy->available_antennas_rx = BIT(0) | BIT(1);
751
752	sc->ant_rx = hw->wiphy->available_antennas_rx;
753	sc->ant_tx = hw->wiphy->available_antennas_tx;
754
755	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ)
756		hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
757			&common->sbands[IEEE80211_BAND_2GHZ];
758	if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)
759		hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
760			&common->sbands[IEEE80211_BAND_5GHZ];
761
762	ath9k_init_wow(hw);
763	ath9k_cmn_reload_chainmask(ah);
 
 
 
 
764
765	SET_IEEE80211_PERM_ADDR(hw, common->macaddr);
766}
767
768int ath9k_init_device(u16 devid, struct ath_softc *sc,
769		    const struct ath_bus_ops *bus_ops)
770{
771	struct ieee80211_hw *hw = sc->hw;
772	struct ath_common *common;
773	struct ath_hw *ah;
774	int error = 0;
775	struct ath_regulatory *reg;
776
777	/* Bring up device */
778	error = ath9k_init_softc(devid, sc, bus_ops);
779	if (error)
780		return error;
781
782	ah = sc->sc_ah;
783	common = ath9k_hw_common(ah);
784	ath9k_set_hw_capab(sc, hw);
785
786	/* Will be cleared in ath9k_start() */
787	set_bit(ATH_OP_INVALID, &common->op_flags);
788
789	/* Initialize regulatory */
790	error = ath_regd_init(&common->regulatory, sc->hw->wiphy,
791			      ath9k_reg_notifier);
792	if (error)
793		goto deinit;
794
795	reg = &common->regulatory;
796
797	/* Setup TX DMA */
798	error = ath_tx_init(sc, ATH_TXBUF);
799	if (error != 0)
800		goto deinit;
801
802	/* Setup RX DMA */
803	error = ath_rx_init(sc, ATH_RXBUF);
804	if (error != 0)
805		goto deinit;
806
807	ath9k_init_txpower_limits(sc);
808
809#ifdef CONFIG_MAC80211_LEDS
810	/* must be initialized before ieee80211_register_hw */
811	sc->led_cdev.default_trigger = ieee80211_create_tpt_led_trigger(sc->hw,
812		IEEE80211_TPT_LEDTRIG_FL_RADIO, ath9k_tpt_blink,
813		ARRAY_SIZE(ath9k_tpt_blink));
814#endif
815
816	/* Register with mac80211 */
817	error = ieee80211_register_hw(hw);
818	if (error)
819		goto rx_cleanup;
820
821	error = ath9k_init_debug(ah);
822	if (error) {
823		ath_err(common, "Unable to create debugfs files\n");
824		goto unregister;
825	}
826
827	/* Handle world regulatory */
828	if (!ath_is_world_regd(reg)) {
829		error = regulatory_hint(hw->wiphy, reg->alpha2);
830		if (error)
831			goto debug_cleanup;
832	}
833
 
 
 
 
 
834	ath_init_leds(sc);
835	ath_start_rfkill_poll(sc);
836
837	return 0;
838
839debug_cleanup:
840	ath9k_deinit_debug(sc);
841unregister:
842	ieee80211_unregister_hw(hw);
843rx_cleanup:
844	ath_rx_cleanup(sc);
845deinit:
 
 
 
 
846	ath9k_deinit_softc(sc);
 
847	return error;
848}
849
850/*****************************/
851/*     De-Initialization     */
852/*****************************/
853
854static void ath9k_deinit_softc(struct ath_softc *sc)
855{
856	int i = 0;
857
858	ath9k_deinit_btcoex(sc);
 
 
 
 
 
 
 
 
859
860	for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)
861		if (ATH_TXQ_SETUP(sc, i))
862			ath_tx_cleanupq(sc, &sc->tx.txq[i]);
863
864	del_timer_sync(&sc->sleep_timer);
865	ath9k_hw_deinit(sc->sc_ah);
866	if (sc->dfs_detector != NULL)
867		sc->dfs_detector->exit(sc->dfs_detector);
868
869	ath9k_eeprom_release(sc);
 
870}
871
872void ath9k_deinit_device(struct ath_softc *sc)
873{
874	struct ieee80211_hw *hw = sc->hw;
875
876	ath9k_ps_wakeup(sc);
877
878	wiphy_rfkill_stop_polling(sc->hw->wiphy);
879	ath_deinit_leds(sc);
880
881	ath9k_ps_restore(sc);
882
883	ath9k_deinit_debug(sc);
884	ieee80211_unregister_hw(hw);
885	ath_rx_cleanup(sc);
 
886	ath9k_deinit_softc(sc);
887}
888
 
 
 
 
 
 
 
 
 
 
 
 
889/************************/
890/*     Module Hooks     */
891/************************/
892
893static int __init ath9k_init(void)
894{
895	int error;
896
 
 
 
 
 
 
 
 
 
 
897	error = ath_pci_init();
898	if (error < 0) {
899		pr_err("No PCI devices found, driver not installed\n");
 
900		error = -ENODEV;
901		goto err_out;
902	}
903
904	error = ath_ahb_init();
905	if (error < 0) {
906		error = -ENODEV;
907		goto err_pci_exit;
908	}
909
910	return 0;
911
912 err_pci_exit:
913	ath_pci_exit();
 
 
 
914 err_out:
915	return error;
916}
917module_init(ath9k_init);
918
919static void __exit ath9k_exit(void)
920{
921	is_ath9k_unloaded = true;
922	ath_ahb_exit();
923	ath_pci_exit();
924	pr_info("%s: Driver unloaded\n", dev_info);
 
925}
926module_exit(ath9k_exit);