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