1 /*
2  * Copyright (c) 2010 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 "htc.h"
18 
19 MODULE_AUTHOR("Atheros Communications");
20 MODULE_LICENSE("Dual BSD/GPL");
21 MODULE_DESCRIPTION("Atheros driver 802.11n HTC based wireless devices");
22 
23 static unsigned int ath9k_debug = ATH_DBG_DEFAULT;
24 module_param_named(debug, ath9k_debug, uint, 0);
25 MODULE_PARM_DESC(debug, "Debugging mask");
26 
27 int htc_modparam_nohwcrypt;
28 module_param_named(nohwcrypt, htc_modparam_nohwcrypt, int, 0444);
29 MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption");
30 
31 #define CHAN2G(_freq, _idx)  { \
32 	.center_freq = (_freq), \
33 	.hw_value = (_idx), \
34 	.max_power = 20, \
35 }
36 
37 #define CHAN5G(_freq, _idx) { \
38 	.band = IEEE80211_BAND_5GHZ, \
39 	.center_freq = (_freq), \
40 	.hw_value = (_idx), \
41 	.max_power = 20, \
42 }
43 
44 #define ATH_HTC_BTCOEX_PRODUCT_ID "wb193"
45 
46 static struct ieee80211_channel ath9k_2ghz_channels[] = {
47 	CHAN2G(2412, 0), /* Channel 1 */
48 	CHAN2G(2417, 1), /* Channel 2 */
49 	CHAN2G(2422, 2), /* Channel 3 */
50 	CHAN2G(2427, 3), /* Channel 4 */
51 	CHAN2G(2432, 4), /* Channel 5 */
52 	CHAN2G(2437, 5), /* Channel 6 */
53 	CHAN2G(2442, 6), /* Channel 7 */
54 	CHAN2G(2447, 7), /* Channel 8 */
55 	CHAN2G(2452, 8), /* Channel 9 */
56 	CHAN2G(2457, 9), /* Channel 10 */
57 	CHAN2G(2462, 10), /* Channel 11 */
58 	CHAN2G(2467, 11), /* Channel 12 */
59 	CHAN2G(2472, 12), /* Channel 13 */
60 	CHAN2G(2484, 13), /* Channel 14 */
61 };
62 
63 static struct ieee80211_channel ath9k_5ghz_channels[] = {
64 	/* _We_ call this UNII 1 */
65 	CHAN5G(5180, 14), /* Channel 36 */
66 	CHAN5G(5200, 15), /* Channel 40 */
67 	CHAN5G(5220, 16), /* Channel 44 */
68 	CHAN5G(5240, 17), /* Channel 48 */
69 	/* _We_ call this UNII 2 */
70 	CHAN5G(5260, 18), /* Channel 52 */
71 	CHAN5G(5280, 19), /* Channel 56 */
72 	CHAN5G(5300, 20), /* Channel 60 */
73 	CHAN5G(5320, 21), /* Channel 64 */
74 	/* _We_ call this "Middle band" */
75 	CHAN5G(5500, 22), /* Channel 100 */
76 	CHAN5G(5520, 23), /* Channel 104 */
77 	CHAN5G(5540, 24), /* Channel 108 */
78 	CHAN5G(5560, 25), /* Channel 112 */
79 	CHAN5G(5580, 26), /* Channel 116 */
80 	CHAN5G(5600, 27), /* Channel 120 */
81 	CHAN5G(5620, 28), /* Channel 124 */
82 	CHAN5G(5640, 29), /* Channel 128 */
83 	CHAN5G(5660, 30), /* Channel 132 */
84 	CHAN5G(5680, 31), /* Channel 136 */
85 	CHAN5G(5700, 32), /* Channel 140 */
86 	/* _We_ call this UNII 3 */
87 	CHAN5G(5745, 33), /* Channel 149 */
88 	CHAN5G(5765, 34), /* Channel 153 */
89 	CHAN5G(5785, 35), /* Channel 157 */
90 	CHAN5G(5805, 36), /* Channel 161 */
91 	CHAN5G(5825, 37), /* Channel 165 */
92 };
93 
94 /* Atheros hardware rate code addition for short premble */
95 #define SHPCHECK(__hw_rate, __flags) \
96 	((__flags & IEEE80211_RATE_SHORT_PREAMBLE) ? (__hw_rate | 0x04) : 0)
97 
98 #define RATE(_bitrate, _hw_rate, _flags) {		\
99 	.bitrate	= (_bitrate),			\
100 	.flags		= (_flags),			\
101 	.hw_value	= (_hw_rate),			\
102 	.hw_value_short = (SHPCHECK(_hw_rate, _flags))	\
103 }
104 
105 static struct ieee80211_rate ath9k_legacy_rates[] = {
106 	RATE(10, 0x1b, 0),
107 	RATE(20, 0x1a, IEEE80211_RATE_SHORT_PREAMBLE), /* shortp : 0x1e */
108 	RATE(55, 0x19, IEEE80211_RATE_SHORT_PREAMBLE), /* shortp: 0x1d */
109 	RATE(110, 0x18, IEEE80211_RATE_SHORT_PREAMBLE), /* short: 0x1c */
110 	RATE(60, 0x0b, 0),
111 	RATE(90, 0x0f, 0),
112 	RATE(120, 0x0a, 0),
113 	RATE(180, 0x0e, 0),
114 	RATE(240, 0x09, 0),
115 	RATE(360, 0x0d, 0),
116 	RATE(480, 0x08, 0),
117 	RATE(540, 0x0c, 0),
118 };
119 
120 static int ath9k_htc_wait_for_target(struct ath9k_htc_priv *priv)
121 {
122 	int time_left;
123 
124 	if (atomic_read(&priv->htc->tgt_ready) > 0) {
125 		atomic_dec(&priv->htc->tgt_ready);
126 		return 0;
127 	}
128 
129 	/* Firmware can take up to 50ms to get ready, to be safe use 1 second */
130 	time_left = wait_for_completion_timeout(&priv->htc->target_wait, HZ);
131 	if (!time_left) {
132 		dev_err(priv->dev, "ath9k_htc: Target is unresponsive\n");
133 		return -ETIMEDOUT;
134 	}
135 
136 	atomic_dec(&priv->htc->tgt_ready);
137 
138 	return 0;
139 }
140 
141 static void ath9k_deinit_priv(struct ath9k_htc_priv *priv)
142 {
143 	ath9k_htc_exit_debug(priv->ah);
144 	ath9k_hw_deinit(priv->ah);
145 	tasklet_kill(&priv->wmi_tasklet);
146 	tasklet_kill(&priv->rx_tasklet);
147 	tasklet_kill(&priv->tx_tasklet);
148 	kfree(priv->ah);
149 	priv->ah = NULL;
150 }
151 
152 static void ath9k_deinit_device(struct ath9k_htc_priv *priv)
153 {
154 	struct ieee80211_hw *hw = priv->hw;
155 
156 	wiphy_rfkill_stop_polling(hw->wiphy);
157 	ath9k_deinit_leds(priv);
158 	ieee80211_unregister_hw(hw);
159 	ath9k_rx_cleanup(priv);
160 	ath9k_tx_cleanup(priv);
161 	ath9k_deinit_priv(priv);
162 }
163 
164 static inline int ath9k_htc_connect_svc(struct ath9k_htc_priv *priv,
165 					u16 service_id,
166 					void (*tx) (void *,
167 						    struct sk_buff *,
168 						    enum htc_endpoint_id,
169 						    bool txok),
170 					enum htc_endpoint_id *ep_id)
171 {
172 	struct htc_service_connreq req;
173 
174 	memset(&req, 0, sizeof(struct htc_service_connreq));
175 
176 	req.service_id = service_id;
177 	req.ep_callbacks.priv = priv;
178 	req.ep_callbacks.rx = ath9k_htc_rxep;
179 	req.ep_callbacks.tx = tx;
180 
181 	return htc_connect_service(priv->htc, &req, ep_id);
182 }
183 
184 static int ath9k_init_htc_services(struct ath9k_htc_priv *priv, u16 devid)
185 {
186 	int ret;
187 
188 	/* WMI CMD*/
189 	ret = ath9k_wmi_connect(priv->htc, priv->wmi, &priv->wmi_cmd_ep);
190 	if (ret)
191 		goto err;
192 
193 	/* Beacon */
194 	ret = ath9k_htc_connect_svc(priv, WMI_BEACON_SVC, ath9k_htc_beaconep,
195 				    &priv->beacon_ep);
196 	if (ret)
197 		goto err;
198 
199 	/* CAB */
200 	ret = ath9k_htc_connect_svc(priv, WMI_CAB_SVC, ath9k_htc_txep,
201 				    &priv->cab_ep);
202 	if (ret)
203 		goto err;
204 
205 
206 	/* UAPSD */
207 	ret = ath9k_htc_connect_svc(priv, WMI_UAPSD_SVC, ath9k_htc_txep,
208 				    &priv->uapsd_ep);
209 	if (ret)
210 		goto err;
211 
212 	/* MGMT */
213 	ret = ath9k_htc_connect_svc(priv, WMI_MGMT_SVC, ath9k_htc_txep,
214 				    &priv->mgmt_ep);
215 	if (ret)
216 		goto err;
217 
218 	/* DATA BE */
219 	ret = ath9k_htc_connect_svc(priv, WMI_DATA_BE_SVC, ath9k_htc_txep,
220 				    &priv->data_be_ep);
221 	if (ret)
222 		goto err;
223 
224 	/* DATA BK */
225 	ret = ath9k_htc_connect_svc(priv, WMI_DATA_BK_SVC, ath9k_htc_txep,
226 				    &priv->data_bk_ep);
227 	if (ret)
228 		goto err;
229 
230 	/* DATA VI */
231 	ret = ath9k_htc_connect_svc(priv, WMI_DATA_VI_SVC, ath9k_htc_txep,
232 				    &priv->data_vi_ep);
233 	if (ret)
234 		goto err;
235 
236 	/* DATA VO */
237 	ret = ath9k_htc_connect_svc(priv, WMI_DATA_VO_SVC, ath9k_htc_txep,
238 				    &priv->data_vo_ep);
239 	if (ret)
240 		goto err;
241 
242 	/*
243 	 * Setup required credits before initializing HTC.
244 	 * This is a bit hacky, but, since queuing is done in
245 	 * the HIF layer, shouldn't matter much.
246 	 */
247 
248 	switch(devid) {
249 	case 0x7010:
250 	case 0x7015:
251 	case 0x9018:
252 	case 0xA704:
253 	case 0x1200:
254 		priv->htc->credits = 45;
255 		break;
256 	default:
257 		priv->htc->credits = 33;
258 	}
259 
260 	ret = htc_init(priv->htc);
261 	if (ret)
262 		goto err;
263 
264 	dev_info(priv->dev, "ath9k_htc: HTC initialized with %d credits\n",
265 		 priv->htc->credits);
266 
267 	return 0;
268 
269 err:
270 	dev_err(priv->dev, "ath9k_htc: Unable to initialize HTC services\n");
271 	return ret;
272 }
273 
274 static int ath9k_reg_notifier(struct wiphy *wiphy,
275 			      struct regulatory_request *request)
276 {
277 	struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
278 	struct ath9k_htc_priv *priv = hw->priv;
279 
280 	return ath_reg_notifier_apply(wiphy, request,
281 				      ath9k_hw_regulatory(priv->ah));
282 }
283 
284 static unsigned int ath9k_regread(void *hw_priv, u32 reg_offset)
285 {
286 	struct ath_hw *ah = (struct ath_hw *) hw_priv;
287 	struct ath_common *common = ath9k_hw_common(ah);
288 	struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
289 	__be32 val, reg = cpu_to_be32(reg_offset);
290 	int r;
291 
292 	r = ath9k_wmi_cmd(priv->wmi, WMI_REG_READ_CMDID,
293 			  (u8 *) &reg, sizeof(reg),
294 			  (u8 *) &val, sizeof(val),
295 			  100);
296 	if (unlikely(r)) {
297 		ath_print(common, ATH_DBG_WMI,
298 			  "REGISTER READ FAILED: (0x%04x, %d)\n",
299 			   reg_offset, r);
300 		return -EIO;
301 	}
302 
303 	return be32_to_cpu(val);
304 }
305 
306 static void ath9k_regwrite_single(void *hw_priv, u32 val, u32 reg_offset)
307 {
308 	struct ath_hw *ah = (struct ath_hw *) hw_priv;
309 	struct ath_common *common = ath9k_hw_common(ah);
310 	struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
311 	__be32 buf[2] = {
312 		cpu_to_be32(reg_offset),
313 		cpu_to_be32(val),
314 	};
315 	int r;
316 
317 	r = ath9k_wmi_cmd(priv->wmi, WMI_REG_WRITE_CMDID,
318 			  (u8 *) &buf, sizeof(buf),
319 			  (u8 *) &val, sizeof(val),
320 			  100);
321 	if (unlikely(r)) {
322 		ath_print(common, ATH_DBG_WMI,
323 			  "REGISTER WRITE FAILED:(0x%04x, %d)\n",
324 			  reg_offset, r);
325 	}
326 }
327 
328 static void ath9k_regwrite_buffer(void *hw_priv, u32 val, u32 reg_offset)
329 {
330 	struct ath_hw *ah = (struct ath_hw *) hw_priv;
331 	struct ath_common *common = ath9k_hw_common(ah);
332 	struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
333 	u32 rsp_status;
334 	int r;
335 
336 	mutex_lock(&priv->wmi->multi_write_mutex);
337 
338 	/* Store the register/value */
339 	priv->wmi->multi_write[priv->wmi->multi_write_idx].reg =
340 		cpu_to_be32(reg_offset);
341 	priv->wmi->multi_write[priv->wmi->multi_write_idx].val =
342 		cpu_to_be32(val);
343 
344 	priv->wmi->multi_write_idx++;
345 
346 	/* If the buffer is full, send it out. */
347 	if (priv->wmi->multi_write_idx == MAX_CMD_NUMBER) {
348 		r = ath9k_wmi_cmd(priv->wmi, WMI_REG_WRITE_CMDID,
349 			  (u8 *) &priv->wmi->multi_write,
350 			  sizeof(struct register_write) * priv->wmi->multi_write_idx,
351 			  (u8 *) &rsp_status, sizeof(rsp_status),
352 			  100);
353 		if (unlikely(r)) {
354 			ath_print(common, ATH_DBG_WMI,
355 				  "REGISTER WRITE FAILED, multi len: %d\n",
356 				  priv->wmi->multi_write_idx);
357 		}
358 		priv->wmi->multi_write_idx = 0;
359 	}
360 
361 	mutex_unlock(&priv->wmi->multi_write_mutex);
362 }
363 
364 static void ath9k_regwrite(void *hw_priv, u32 val, u32 reg_offset)
365 {
366 	struct ath_hw *ah = (struct ath_hw *) hw_priv;
367 	struct ath_common *common = ath9k_hw_common(ah);
368 	struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
369 
370 	if (atomic_read(&priv->wmi->mwrite_cnt))
371 		ath9k_regwrite_buffer(hw_priv, val, reg_offset);
372 	else
373 		ath9k_regwrite_single(hw_priv, val, reg_offset);
374 }
375 
376 static void ath9k_enable_regwrite_buffer(void *hw_priv)
377 {
378 	struct ath_hw *ah = (struct ath_hw *) hw_priv;
379 	struct ath_common *common = ath9k_hw_common(ah);
380 	struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
381 
382 	atomic_inc(&priv->wmi->mwrite_cnt);
383 }
384 
385 static void ath9k_regwrite_flush(void *hw_priv)
386 {
387 	struct ath_hw *ah = (struct ath_hw *) hw_priv;
388 	struct ath_common *common = ath9k_hw_common(ah);
389 	struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
390 	u32 rsp_status;
391 	int r;
392 
393 	atomic_dec(&priv->wmi->mwrite_cnt);
394 
395 	mutex_lock(&priv->wmi->multi_write_mutex);
396 
397 	if (priv->wmi->multi_write_idx) {
398 		r = ath9k_wmi_cmd(priv->wmi, WMI_REG_WRITE_CMDID,
399 			  (u8 *) &priv->wmi->multi_write,
400 			  sizeof(struct register_write) * priv->wmi->multi_write_idx,
401 			  (u8 *) &rsp_status, sizeof(rsp_status),
402 			  100);
403 		if (unlikely(r)) {
404 			ath_print(common, ATH_DBG_WMI,
405 				  "REGISTER WRITE FAILED, multi len: %d\n",
406 				  priv->wmi->multi_write_idx);
407 		}
408 		priv->wmi->multi_write_idx = 0;
409 	}
410 
411 	mutex_unlock(&priv->wmi->multi_write_mutex);
412 }
413 
414 static const struct ath_ops ath9k_common_ops = {
415 	.read = ath9k_regread,
416 	.write = ath9k_regwrite,
417 	.enable_write_buffer = ath9k_enable_regwrite_buffer,
418 	.write_flush = ath9k_regwrite_flush,
419 };
420 
421 static void ath_usb_read_cachesize(struct ath_common *common, int *csz)
422 {
423 	*csz = L1_CACHE_BYTES >> 2;
424 }
425 
426 static bool ath_usb_eeprom_read(struct ath_common *common, u32 off, u16 *data)
427 {
428 	struct ath_hw *ah = (struct ath_hw *) common->ah;
429 
430 	(void)REG_READ(ah, AR5416_EEPROM_OFFSET + (off << AR5416_EEPROM_S));
431 
432 	if (!ath9k_hw_wait(ah,
433 			   AR_EEPROM_STATUS_DATA,
434 			   AR_EEPROM_STATUS_DATA_BUSY |
435 			   AR_EEPROM_STATUS_DATA_PROT_ACCESS, 0,
436 			   AH_WAIT_TIMEOUT))
437 		return false;
438 
439 	*data = MS(REG_READ(ah, AR_EEPROM_STATUS_DATA),
440 		   AR_EEPROM_STATUS_DATA_VAL);
441 
442 	return true;
443 }
444 
445 static const struct ath_bus_ops ath9k_usb_bus_ops = {
446 	.ath_bus_type = ATH_USB,
447 	.read_cachesize = ath_usb_read_cachesize,
448 	.eeprom_read = ath_usb_eeprom_read,
449 };
450 
451 static void setup_ht_cap(struct ath9k_htc_priv *priv,
452 			 struct ieee80211_sta_ht_cap *ht_info)
453 {
454 	struct ath_common *common = ath9k_hw_common(priv->ah);
455 	u8 tx_streams, rx_streams;
456 	int i;
457 
458 	ht_info->ht_supported = true;
459 	ht_info->cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
460 		       IEEE80211_HT_CAP_SM_PS |
461 		       IEEE80211_HT_CAP_SGI_40 |
462 		       IEEE80211_HT_CAP_DSSSCCK40;
463 
464 	if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_SGI_20)
465 		ht_info->cap |= IEEE80211_HT_CAP_SGI_20;
466 
467 	ht_info->cap |= (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT);
468 
469 	ht_info->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
470 	ht_info->ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
471 
472 	memset(&ht_info->mcs, 0, sizeof(ht_info->mcs));
473 
474 	/* ath9k_htc supports only 1 or 2 stream devices */
475 	tx_streams = ath9k_cmn_count_streams(common->tx_chainmask, 2);
476 	rx_streams = ath9k_cmn_count_streams(common->rx_chainmask, 2);
477 
478 	ath_print(common, ATH_DBG_CONFIG,
479 		  "TX streams %d, RX streams: %d\n",
480 		  tx_streams, rx_streams);
481 
482 	if (tx_streams != rx_streams) {
483 		ht_info->mcs.tx_params |= IEEE80211_HT_MCS_TX_RX_DIFF;
484 		ht_info->mcs.tx_params |= ((tx_streams - 1) <<
485 					   IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT);
486 	}
487 
488 	for (i = 0; i < rx_streams; i++)
489 		ht_info->mcs.rx_mask[i] = 0xff;
490 
491 	ht_info->mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
492 }
493 
494 static int ath9k_init_queues(struct ath9k_htc_priv *priv)
495 {
496 	struct ath_common *common = ath9k_hw_common(priv->ah);
497 	int i;
498 
499 	for (i = 0; i < ARRAY_SIZE(priv->hwq_map); i++)
500 		priv->hwq_map[i] = -1;
501 
502 	priv->beaconq = ath9k_hw_beaconq_setup(priv->ah);
503 	if (priv->beaconq == -1) {
504 		ath_print(common, ATH_DBG_FATAL,
505 			  "Unable to setup BEACON xmit queue\n");
506 		goto err;
507 	}
508 
509 	priv->cabq = ath9k_htc_cabq_setup(priv);
510 	if (priv->cabq == -1) {
511 		ath_print(common, ATH_DBG_FATAL,
512 			  "Unable to setup CAB xmit queue\n");
513 		goto err;
514 	}
515 
516 	if (!ath9k_htc_txq_setup(priv, WME_AC_BE)) {
517 		ath_print(common, ATH_DBG_FATAL,
518 			  "Unable to setup xmit queue for BE traffic\n");
519 		goto err;
520 	}
521 
522 	if (!ath9k_htc_txq_setup(priv, WME_AC_BK)) {
523 		ath_print(common, ATH_DBG_FATAL,
524 			  "Unable to setup xmit queue for BK traffic\n");
525 		goto err;
526 	}
527 	if (!ath9k_htc_txq_setup(priv, WME_AC_VI)) {
528 		ath_print(common, ATH_DBG_FATAL,
529 			  "Unable to setup xmit queue for VI traffic\n");
530 		goto err;
531 	}
532 	if (!ath9k_htc_txq_setup(priv, WME_AC_VO)) {
533 		ath_print(common, ATH_DBG_FATAL,
534 			  "Unable to setup xmit queue for VO traffic\n");
535 		goto err;
536 	}
537 
538 	return 0;
539 
540 err:
541 	return -EINVAL;
542 }
543 
544 static void ath9k_init_crypto(struct ath9k_htc_priv *priv)
545 {
546 	struct ath_common *common = ath9k_hw_common(priv->ah);
547 	int i = 0;
548 
549 	/* Get the hardware key cache size. */
550 	common->keymax = priv->ah->caps.keycache_size;
551 	if (common->keymax > ATH_KEYMAX) {
552 		ath_print(common, ATH_DBG_ANY,
553 			  "Warning, using only %u entries in %u key cache\n",
554 			  ATH_KEYMAX, common->keymax);
555 		common->keymax = ATH_KEYMAX;
556 	}
557 
558 	if (priv->ah->misc_mode & AR_PCU_MIC_NEW_LOC_ENA)
559 		common->crypt_caps |= ATH_CRYPT_CAP_MIC_COMBINED;
560 
561 	/*
562 	 * Reset the key cache since some parts do not
563 	 * reset the contents on initial power up.
564 	 */
565 	for (i = 0; i < common->keymax; i++)
566 		ath_hw_keyreset(common, (u16) i);
567 }
568 
569 static void ath9k_init_channels_rates(struct ath9k_htc_priv *priv)
570 {
571 	if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ) {
572 		priv->sbands[IEEE80211_BAND_2GHZ].channels =
573 			ath9k_2ghz_channels;
574 		priv->sbands[IEEE80211_BAND_2GHZ].band = IEEE80211_BAND_2GHZ;
575 		priv->sbands[IEEE80211_BAND_2GHZ].n_channels =
576 			ARRAY_SIZE(ath9k_2ghz_channels);
577 		priv->sbands[IEEE80211_BAND_2GHZ].bitrates = ath9k_legacy_rates;
578 		priv->sbands[IEEE80211_BAND_2GHZ].n_bitrates =
579 			ARRAY_SIZE(ath9k_legacy_rates);
580 	}
581 
582 	if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ) {
583 		priv->sbands[IEEE80211_BAND_5GHZ].channels = ath9k_5ghz_channels;
584 		priv->sbands[IEEE80211_BAND_5GHZ].band = IEEE80211_BAND_5GHZ;
585 		priv->sbands[IEEE80211_BAND_5GHZ].n_channels =
586 			ARRAY_SIZE(ath9k_5ghz_channels);
587 		priv->sbands[IEEE80211_BAND_5GHZ].bitrates =
588 			ath9k_legacy_rates + 4;
589 		priv->sbands[IEEE80211_BAND_5GHZ].n_bitrates =
590 			ARRAY_SIZE(ath9k_legacy_rates) - 4;
591 	}
592 }
593 
594 static void ath9k_init_misc(struct ath9k_htc_priv *priv)
595 {
596 	struct ath_common *common = ath9k_hw_common(priv->ah);
597 
598 	common->tx_chainmask = priv->ah->caps.tx_chainmask;
599 	common->rx_chainmask = priv->ah->caps.rx_chainmask;
600 
601 	memcpy(common->bssidmask, ath_bcast_mac, ETH_ALEN);
602 
603 	priv->ah->opmode = NL80211_IFTYPE_STATION;
604 }
605 
606 static void ath9k_init_btcoex(struct ath9k_htc_priv *priv)
607 {
608 	int qnum;
609 
610 	switch (priv->ah->btcoex_hw.scheme) {
611 	case ATH_BTCOEX_CFG_NONE:
612 		break;
613 	case ATH_BTCOEX_CFG_3WIRE:
614 		priv->ah->btcoex_hw.btactive_gpio = 7;
615 		priv->ah->btcoex_hw.btpriority_gpio = 6;
616 		priv->ah->btcoex_hw.wlanactive_gpio = 8;
617 		priv->btcoex.bt_stomp_type = ATH_BTCOEX_STOMP_LOW;
618 		ath9k_hw_btcoex_init_3wire(priv->ah);
619 		ath_htc_init_btcoex_work(priv);
620 		qnum = priv->hwq_map[WME_AC_BE];
621 		ath9k_hw_init_btcoex_hw(priv->ah, qnum);
622 		break;
623 	default:
624 		WARN_ON(1);
625 		break;
626 	}
627 }
628 
629 static int ath9k_init_priv(struct ath9k_htc_priv *priv,
630 			   u16 devid, char *product)
631 {
632 	struct ath_hw *ah = NULL;
633 	struct ath_common *common;
634 	int ret = 0, csz = 0;
635 
636 	priv->op_flags |= OP_INVALID;
637 
638 	ah = kzalloc(sizeof(struct ath_hw), GFP_KERNEL);
639 	if (!ah)
640 		return -ENOMEM;
641 
642 	ah->hw_version.devid = devid;
643 	ah->hw_version.subsysid = 0; /* FIXME */
644 	priv->ah = ah;
645 
646 	common = ath9k_hw_common(ah);
647 	common->ops = &ath9k_common_ops;
648 	common->bus_ops = &ath9k_usb_bus_ops;
649 	common->ah = ah;
650 	common->hw = priv->hw;
651 	common->priv = priv;
652 	common->debug_mask = ath9k_debug;
653 
654 	spin_lock_init(&priv->wmi->wmi_lock);
655 	spin_lock_init(&priv->beacon_lock);
656 	spin_lock_init(&priv->tx_lock);
657 	mutex_init(&priv->mutex);
658 	mutex_init(&priv->htc_pm_lock);
659 	tasklet_init(&priv->wmi_tasklet, ath9k_wmi_tasklet,
660 		     (unsigned long)priv);
661 	tasklet_init(&priv->rx_tasklet, ath9k_rx_tasklet,
662 		     (unsigned long)priv);
663 	tasklet_init(&priv->tx_tasklet, ath9k_tx_tasklet, (unsigned long)priv);
664 	INIT_DELAYED_WORK(&priv->ath9k_ani_work, ath9k_ani_work);
665 	INIT_WORK(&priv->ps_work, ath9k_ps_work);
666 
667 	/*
668 	 * Cache line size is used to size and align various
669 	 * structures used to communicate with the hardware.
670 	 */
671 	ath_read_cachesize(common, &csz);
672 	common->cachelsz = csz << 2; /* convert to bytes */
673 
674 	ret = ath9k_hw_init(ah);
675 	if (ret) {
676 		ath_print(common, ATH_DBG_FATAL,
677 			  "Unable to initialize hardware; "
678 			  "initialization status: %d\n", ret);
679 		goto err_hw;
680 	}
681 
682 	ret = ath9k_htc_init_debug(ah);
683 	if (ret) {
684 		ath_print(common, ATH_DBG_FATAL,
685 			  "Unable to create debugfs files\n");
686 		goto err_debug;
687 	}
688 
689 	ret = ath9k_init_queues(priv);
690 	if (ret)
691 		goto err_queues;
692 
693 	ath9k_init_crypto(priv);
694 	ath9k_init_channels_rates(priv);
695 	ath9k_init_misc(priv);
696 
697 	if (product && strncmp(product, ATH_HTC_BTCOEX_PRODUCT_ID, 5) == 0) {
698 		ah->btcoex_hw.scheme = ATH_BTCOEX_CFG_3WIRE;
699 		ath9k_init_btcoex(priv);
700 	}
701 
702 	return 0;
703 
704 err_queues:
705 	ath9k_htc_exit_debug(ah);
706 err_debug:
707 	ath9k_hw_deinit(ah);
708 err_hw:
709 
710 	kfree(ah);
711 	priv->ah = NULL;
712 
713 	return ret;
714 }
715 
716 static void ath9k_set_hw_capab(struct ath9k_htc_priv *priv,
717 			       struct ieee80211_hw *hw)
718 {
719 	struct ath_common *common = ath9k_hw_common(priv->ah);
720 
721 	hw->flags = IEEE80211_HW_SIGNAL_DBM |
722 		IEEE80211_HW_AMPDU_AGGREGATION |
723 		IEEE80211_HW_SPECTRUM_MGMT |
724 		IEEE80211_HW_HAS_RATE_CONTROL |
725 		IEEE80211_HW_RX_INCLUDES_FCS |
726 		IEEE80211_HW_SUPPORTS_PS |
727 		IEEE80211_HW_PS_NULLFUNC_STACK;
728 
729 	hw->wiphy->interface_modes =
730 		BIT(NL80211_IFTYPE_STATION) |
731 		BIT(NL80211_IFTYPE_ADHOC);
732 
733 	hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
734 
735 	hw->queues = 4;
736 	hw->channel_change_time = 5000;
737 	hw->max_listen_interval = 10;
738 	hw->vif_data_size = sizeof(struct ath9k_htc_vif);
739 	hw->sta_data_size = sizeof(struct ath9k_htc_sta);
740 
741 	/* tx_frame_hdr is larger than tx_mgmt_hdr anyway */
742 	hw->extra_tx_headroom = sizeof(struct tx_frame_hdr) +
743 		sizeof(struct htc_frame_hdr) + 4;
744 
745 	if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ)
746 		hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
747 			&priv->sbands[IEEE80211_BAND_2GHZ];
748 	if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)
749 		hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
750 			&priv->sbands[IEEE80211_BAND_5GHZ];
751 
752 	if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_HT) {
753 		if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ)
754 			setup_ht_cap(priv,
755 				     &priv->sbands[IEEE80211_BAND_2GHZ].ht_cap);
756 		if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)
757 			setup_ht_cap(priv,
758 				     &priv->sbands[IEEE80211_BAND_5GHZ].ht_cap);
759 	}
760 
761 	SET_IEEE80211_PERM_ADDR(hw, common->macaddr);
762 }
763 
764 static int ath9k_init_device(struct ath9k_htc_priv *priv,
765 			     u16 devid, char *product)
766 {
767 	struct ieee80211_hw *hw = priv->hw;
768 	struct ath_common *common;
769 	struct ath_hw *ah;
770 	int error = 0;
771 	struct ath_regulatory *reg;
772 
773 	/* Bring up device */
774 	error = ath9k_init_priv(priv, devid, product);
775 	if (error != 0)
776 		goto err_init;
777 
778 	ah = priv->ah;
779 	common = ath9k_hw_common(ah);
780 	ath9k_set_hw_capab(priv, hw);
781 
782 	/* Initialize regulatory */
783 	error = ath_regd_init(&common->regulatory, priv->hw->wiphy,
784 			      ath9k_reg_notifier);
785 	if (error)
786 		goto err_regd;
787 
788 	reg = &common->regulatory;
789 
790 	/* Setup TX */
791 	error = ath9k_tx_init(priv);
792 	if (error != 0)
793 		goto err_tx;
794 
795 	/* Setup RX */
796 	error = ath9k_rx_init(priv);
797 	if (error != 0)
798 		goto err_rx;
799 
800 	/* Register with mac80211 */
801 	error = ieee80211_register_hw(hw);
802 	if (error)
803 		goto err_register;
804 
805 	/* Handle world regulatory */
806 	if (!ath_is_world_regd(reg)) {
807 		error = regulatory_hint(hw->wiphy, reg->alpha2);
808 		if (error)
809 			goto err_world;
810 	}
811 
812 	ath9k_init_leds(priv);
813 	ath9k_start_rfkill_poll(priv);
814 
815 	return 0;
816 
817 err_world:
818 	ieee80211_unregister_hw(hw);
819 err_register:
820 	ath9k_rx_cleanup(priv);
821 err_rx:
822 	ath9k_tx_cleanup(priv);
823 err_tx:
824 	/* Nothing */
825 err_regd:
826 	ath9k_deinit_priv(priv);
827 err_init:
828 	return error;
829 }
830 
831 int ath9k_htc_probe_device(struct htc_target *htc_handle, struct device *dev,
832 			   u16 devid, char *product)
833 {
834 	struct ieee80211_hw *hw;
835 	struct ath9k_htc_priv *priv;
836 	int ret;
837 
838 	hw = ieee80211_alloc_hw(sizeof(struct ath9k_htc_priv), &ath9k_htc_ops);
839 	if (!hw)
840 		return -ENOMEM;
841 
842 	priv = hw->priv;
843 	priv->hw = hw;
844 	priv->htc = htc_handle;
845 	priv->dev = dev;
846 	htc_handle->drv_priv = priv;
847 	SET_IEEE80211_DEV(hw, priv->dev);
848 
849 	ret = ath9k_htc_wait_for_target(priv);
850 	if (ret)
851 		goto err_free;
852 
853 	priv->wmi = ath9k_init_wmi(priv);
854 	if (!priv->wmi) {
855 		ret = -EINVAL;
856 		goto err_free;
857 	}
858 
859 	ret = ath9k_init_htc_services(priv, devid);
860 	if (ret)
861 		goto err_init;
862 
863 	/* The device may have been unplugged earlier. */
864 	priv->op_flags &= ~OP_UNPLUGGED;
865 
866 	ret = ath9k_init_device(priv, devid, product);
867 	if (ret)
868 		goto err_init;
869 
870 	return 0;
871 
872 err_init:
873 	ath9k_deinit_wmi(priv);
874 err_free:
875 	ieee80211_free_hw(hw);
876 	return ret;
877 }
878 
879 void ath9k_htc_disconnect_device(struct htc_target *htc_handle, bool hotunplug)
880 {
881 	if (htc_handle->drv_priv) {
882 
883 		/* Check if the device has been yanked out. */
884 		if (hotunplug)
885 			htc_handle->drv_priv->op_flags |= OP_UNPLUGGED;
886 
887 		ath9k_deinit_device(htc_handle->drv_priv);
888 		ath9k_deinit_wmi(htc_handle->drv_priv);
889 		ieee80211_free_hw(htc_handle->drv_priv->hw);
890 	}
891 }
892 
893 #ifdef CONFIG_PM
894 int ath9k_htc_resume(struct htc_target *htc_handle)
895 {
896 	int ret;
897 
898 	ret = ath9k_htc_wait_for_target(htc_handle->drv_priv);
899 	if (ret)
900 		return ret;
901 
902 	ret = ath9k_init_htc_services(htc_handle->drv_priv,
903 			      htc_handle->drv_priv->ah->hw_version.devid);
904 	return ret;
905 }
906 #endif
907 
908 static int __init ath9k_htc_init(void)
909 {
910 	int error;
911 
912 	error = ath9k_htc_debug_create_root();
913 	if (error < 0) {
914 		printk(KERN_ERR
915 			"ath9k_htc: Unable to create debugfs root: %d\n",
916 			error);
917 		goto err_dbg;
918 	}
919 
920 	error = ath9k_hif_usb_init();
921 	if (error < 0) {
922 		printk(KERN_ERR
923 			"ath9k_htc: No USB devices found,"
924 			" driver not installed.\n");
925 		error = -ENODEV;
926 		goto err_usb;
927 	}
928 
929 	return 0;
930 
931 err_usb:
932 	ath9k_htc_debug_remove_root();
933 err_dbg:
934 	return error;
935 }
936 module_init(ath9k_htc_init);
937 
938 static void __exit ath9k_htc_exit(void)
939 {
940 	ath9k_hif_usb_exit();
941 	ath9k_htc_debug_remove_root();
942 	printk(KERN_INFO "ath9k_htc: Driver unloaded\n");
943 }
944 module_exit(ath9k_htc_exit);
945