ath9k_hw: embed the ath_ops callbacks in the ath_hw struct
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / ath / ath9k / htc_drv_init.c
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         kfree(priv->ah);
146         priv->ah = NULL;
147 }
148
149 static void ath9k_deinit_device(struct ath9k_htc_priv *priv)
150 {
151         struct ieee80211_hw *hw = priv->hw;
152
153         wiphy_rfkill_stop_polling(hw->wiphy);
154         ath9k_deinit_leds(priv);
155         ieee80211_unregister_hw(hw);
156         ath9k_rx_cleanup(priv);
157         ath9k_tx_cleanup(priv);
158         ath9k_deinit_priv(priv);
159 }
160
161 static inline int ath9k_htc_connect_svc(struct ath9k_htc_priv *priv,
162                                         u16 service_id,
163                                         void (*tx) (void *,
164                                                     struct sk_buff *,
165                                                     enum htc_endpoint_id,
166                                                     bool txok),
167                                         enum htc_endpoint_id *ep_id)
168 {
169         struct htc_service_connreq req;
170
171         memset(&req, 0, sizeof(struct htc_service_connreq));
172
173         req.service_id = service_id;
174         req.ep_callbacks.priv = priv;
175         req.ep_callbacks.rx = ath9k_htc_rxep;
176         req.ep_callbacks.tx = tx;
177
178         return htc_connect_service(priv->htc, &req, ep_id);
179 }
180
181 static int ath9k_init_htc_services(struct ath9k_htc_priv *priv, u16 devid,
182                                    u32 drv_info)
183 {
184         int ret;
185
186         /* WMI CMD*/
187         ret = ath9k_wmi_connect(priv->htc, priv->wmi, &priv->wmi_cmd_ep);
188         if (ret)
189                 goto err;
190
191         /* Beacon */
192         ret = ath9k_htc_connect_svc(priv, WMI_BEACON_SVC, ath9k_htc_beaconep,
193                                     &priv->beacon_ep);
194         if (ret)
195                 goto err;
196
197         /* CAB */
198         ret = ath9k_htc_connect_svc(priv, WMI_CAB_SVC, ath9k_htc_txep,
199                                     &priv->cab_ep);
200         if (ret)
201                 goto err;
202
203
204         /* UAPSD */
205         ret = ath9k_htc_connect_svc(priv, WMI_UAPSD_SVC, ath9k_htc_txep,
206                                     &priv->uapsd_ep);
207         if (ret)
208                 goto err;
209
210         /* MGMT */
211         ret = ath9k_htc_connect_svc(priv, WMI_MGMT_SVC, ath9k_htc_txep,
212                                     &priv->mgmt_ep);
213         if (ret)
214                 goto err;
215
216         /* DATA BE */
217         ret = ath9k_htc_connect_svc(priv, WMI_DATA_BE_SVC, ath9k_htc_txep,
218                                     &priv->data_be_ep);
219         if (ret)
220                 goto err;
221
222         /* DATA BK */
223         ret = ath9k_htc_connect_svc(priv, WMI_DATA_BK_SVC, ath9k_htc_txep,
224                                     &priv->data_bk_ep);
225         if (ret)
226                 goto err;
227
228         /* DATA VI */
229         ret = ath9k_htc_connect_svc(priv, WMI_DATA_VI_SVC, ath9k_htc_txep,
230                                     &priv->data_vi_ep);
231         if (ret)
232                 goto err;
233
234         /* DATA VO */
235         ret = ath9k_htc_connect_svc(priv, WMI_DATA_VO_SVC, ath9k_htc_txep,
236                                     &priv->data_vo_ep);
237         if (ret)
238                 goto err;
239
240         /*
241          * Setup required credits before initializing HTC.
242          * This is a bit hacky, but, since queuing is done in
243          * the HIF layer, shouldn't matter much.
244          */
245
246         if (IS_AR7010_DEVICE(drv_info))
247                 priv->htc->credits = 45;
248         else
249                 priv->htc->credits = 33;
250
251         ret = htc_init(priv->htc);
252         if (ret)
253                 goto err;
254
255         dev_info(priv->dev, "ath9k_htc: HTC initialized with %d credits\n",
256                  priv->htc->credits);
257
258         return 0;
259
260 err:
261         dev_err(priv->dev, "ath9k_htc: Unable to initialize HTC services\n");
262         return ret;
263 }
264
265 static int ath9k_reg_notifier(struct wiphy *wiphy,
266                               struct regulatory_request *request)
267 {
268         struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
269         struct ath9k_htc_priv *priv = hw->priv;
270
271         return ath_reg_notifier_apply(wiphy, request,
272                                       ath9k_hw_regulatory(priv->ah));
273 }
274
275 static unsigned int ath9k_regread(void *hw_priv, u32 reg_offset)
276 {
277         struct ath_hw *ah = (struct ath_hw *) hw_priv;
278         struct ath_common *common = ath9k_hw_common(ah);
279         struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
280         __be32 val, reg = cpu_to_be32(reg_offset);
281         int r;
282
283         r = ath9k_wmi_cmd(priv->wmi, WMI_REG_READ_CMDID,
284                           (u8 *) &reg, sizeof(reg),
285                           (u8 *) &val, sizeof(val),
286                           100);
287         if (unlikely(r)) {
288                 ath_dbg(common, ATH_DBG_WMI,
289                         "REGISTER READ FAILED: (0x%04x, %d)\n",
290                         reg_offset, r);
291                 return -EIO;
292         }
293
294         return be32_to_cpu(val);
295 }
296
297 static void ath9k_multi_regread(void *hw_priv, u32 *addr,
298                                 u32 *val, u16 count)
299 {
300         struct ath_hw *ah = (struct ath_hw *) hw_priv;
301         struct ath_common *common = ath9k_hw_common(ah);
302         struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
303         __be32 tmpaddr[8];
304         __be32 tmpval[8];
305         int i, ret;
306
307        for (i = 0; i < count; i++) {
308                tmpaddr[i] = cpu_to_be32(addr[i]);
309        }
310
311        ret = ath9k_wmi_cmd(priv->wmi, WMI_REG_READ_CMDID,
312                            (u8 *)tmpaddr , sizeof(u32) * count,
313                            (u8 *)tmpval, sizeof(u32) * count,
314                            100);
315         if (unlikely(ret)) {
316                 ath_dbg(common, ATH_DBG_WMI,
317                         "Multiple REGISTER READ FAILED (count: %d)\n", count);
318         }
319
320        for (i = 0; i < count; i++) {
321                val[i] = be32_to_cpu(tmpval[i]);
322        }
323 }
324
325 static void ath9k_regwrite_single(void *hw_priv, u32 val, u32 reg_offset)
326 {
327         struct ath_hw *ah = (struct ath_hw *) hw_priv;
328         struct ath_common *common = ath9k_hw_common(ah);
329         struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
330         const __be32 buf[2] = {
331                 cpu_to_be32(reg_offset),
332                 cpu_to_be32(val),
333         };
334         int r;
335
336         r = ath9k_wmi_cmd(priv->wmi, WMI_REG_WRITE_CMDID,
337                           (u8 *) &buf, sizeof(buf),
338                           (u8 *) &val, sizeof(val),
339                           100);
340         if (unlikely(r)) {
341                 ath_dbg(common, ATH_DBG_WMI,
342                         "REGISTER WRITE FAILED:(0x%04x, %d)\n",
343                         reg_offset, r);
344         }
345 }
346
347 static void ath9k_regwrite_buffer(void *hw_priv, u32 val, u32 reg_offset)
348 {
349         struct ath_hw *ah = (struct ath_hw *) hw_priv;
350         struct ath_common *common = ath9k_hw_common(ah);
351         struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
352         u32 rsp_status;
353         int r;
354
355         mutex_lock(&priv->wmi->multi_write_mutex);
356
357         /* Store the register/value */
358         priv->wmi->multi_write[priv->wmi->multi_write_idx].reg =
359                 cpu_to_be32(reg_offset);
360         priv->wmi->multi_write[priv->wmi->multi_write_idx].val =
361                 cpu_to_be32(val);
362
363         priv->wmi->multi_write_idx++;
364
365         /* If the buffer is full, send it out. */
366         if (priv->wmi->multi_write_idx == MAX_CMD_NUMBER) {
367                 r = ath9k_wmi_cmd(priv->wmi, WMI_REG_WRITE_CMDID,
368                           (u8 *) &priv->wmi->multi_write,
369                           sizeof(struct register_write) * priv->wmi->multi_write_idx,
370                           (u8 *) &rsp_status, sizeof(rsp_status),
371                           100);
372                 if (unlikely(r)) {
373                         ath_dbg(common, ATH_DBG_WMI,
374                                 "REGISTER WRITE FAILED, multi len: %d\n",
375                                 priv->wmi->multi_write_idx);
376                 }
377                 priv->wmi->multi_write_idx = 0;
378         }
379
380         mutex_unlock(&priv->wmi->multi_write_mutex);
381 }
382
383 static void ath9k_regwrite(void *hw_priv, u32 val, u32 reg_offset)
384 {
385         struct ath_hw *ah = (struct ath_hw *) hw_priv;
386         struct ath_common *common = ath9k_hw_common(ah);
387         struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
388
389         if (atomic_read(&priv->wmi->mwrite_cnt))
390                 ath9k_regwrite_buffer(hw_priv, val, reg_offset);
391         else
392                 ath9k_regwrite_single(hw_priv, val, reg_offset);
393 }
394
395 static void ath9k_enable_regwrite_buffer(void *hw_priv)
396 {
397         struct ath_hw *ah = (struct ath_hw *) hw_priv;
398         struct ath_common *common = ath9k_hw_common(ah);
399         struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
400
401         atomic_inc(&priv->wmi->mwrite_cnt);
402 }
403
404 static void ath9k_regwrite_flush(void *hw_priv)
405 {
406         struct ath_hw *ah = (struct ath_hw *) hw_priv;
407         struct ath_common *common = ath9k_hw_common(ah);
408         struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
409         u32 rsp_status;
410         int r;
411
412         atomic_dec(&priv->wmi->mwrite_cnt);
413
414         mutex_lock(&priv->wmi->multi_write_mutex);
415
416         if (priv->wmi->multi_write_idx) {
417                 r = ath9k_wmi_cmd(priv->wmi, WMI_REG_WRITE_CMDID,
418                           (u8 *) &priv->wmi->multi_write,
419                           sizeof(struct register_write) * priv->wmi->multi_write_idx,
420                           (u8 *) &rsp_status, sizeof(rsp_status),
421                           100);
422                 if (unlikely(r)) {
423                         ath_dbg(common, ATH_DBG_WMI,
424                                 "REGISTER WRITE FAILED, multi len: %d\n",
425                                 priv->wmi->multi_write_idx);
426                 }
427                 priv->wmi->multi_write_idx = 0;
428         }
429
430         mutex_unlock(&priv->wmi->multi_write_mutex);
431 }
432
433 static void ath_usb_read_cachesize(struct ath_common *common, int *csz)
434 {
435         *csz = L1_CACHE_BYTES >> 2;
436 }
437
438 static bool ath_usb_eeprom_read(struct ath_common *common, u32 off, u16 *data)
439 {
440         struct ath_hw *ah = (struct ath_hw *) common->ah;
441
442         (void)REG_READ(ah, AR5416_EEPROM_OFFSET + (off << AR5416_EEPROM_S));
443
444         if (!ath9k_hw_wait(ah,
445                            AR_EEPROM_STATUS_DATA,
446                            AR_EEPROM_STATUS_DATA_BUSY |
447                            AR_EEPROM_STATUS_DATA_PROT_ACCESS, 0,
448                            AH_WAIT_TIMEOUT))
449                 return false;
450
451         *data = MS(REG_READ(ah, AR_EEPROM_STATUS_DATA),
452                    AR_EEPROM_STATUS_DATA_VAL);
453
454         return true;
455 }
456
457 static const struct ath_bus_ops ath9k_usb_bus_ops = {
458         .ath_bus_type = ATH_USB,
459         .read_cachesize = ath_usb_read_cachesize,
460         .eeprom_read = ath_usb_eeprom_read,
461 };
462
463 static void setup_ht_cap(struct ath9k_htc_priv *priv,
464                          struct ieee80211_sta_ht_cap *ht_info)
465 {
466         struct ath_common *common = ath9k_hw_common(priv->ah);
467         u8 tx_streams, rx_streams;
468         int i;
469
470         ht_info->ht_supported = true;
471         ht_info->cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
472                        IEEE80211_HT_CAP_SM_PS |
473                        IEEE80211_HT_CAP_SGI_40 |
474                        IEEE80211_HT_CAP_DSSSCCK40;
475
476         if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_SGI_20)
477                 ht_info->cap |= IEEE80211_HT_CAP_SGI_20;
478
479         ht_info->cap |= (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT);
480
481         ht_info->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
482         ht_info->ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
483
484         memset(&ht_info->mcs, 0, sizeof(ht_info->mcs));
485
486         /* ath9k_htc supports only 1 or 2 stream devices */
487         tx_streams = ath9k_cmn_count_streams(common->tx_chainmask, 2);
488         rx_streams = ath9k_cmn_count_streams(common->rx_chainmask, 2);
489
490         ath_dbg(common, ATH_DBG_CONFIG,
491                 "TX streams %d, RX streams: %d\n",
492                 tx_streams, rx_streams);
493
494         if (tx_streams != rx_streams) {
495                 ht_info->mcs.tx_params |= IEEE80211_HT_MCS_TX_RX_DIFF;
496                 ht_info->mcs.tx_params |= ((tx_streams - 1) <<
497                                            IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT);
498         }
499
500         for (i = 0; i < rx_streams; i++)
501                 ht_info->mcs.rx_mask[i] = 0xff;
502
503         ht_info->mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
504 }
505
506 static int ath9k_init_queues(struct ath9k_htc_priv *priv)
507 {
508         struct ath_common *common = ath9k_hw_common(priv->ah);
509         int i;
510
511         for (i = 0; i < ARRAY_SIZE(priv->hwq_map); i++)
512                 priv->hwq_map[i] = -1;
513
514         priv->beaconq = ath9k_hw_beaconq_setup(priv->ah);
515         if (priv->beaconq == -1) {
516                 ath_err(common, "Unable to setup BEACON xmit queue\n");
517                 goto err;
518         }
519
520         priv->cabq = ath9k_htc_cabq_setup(priv);
521         if (priv->cabq == -1) {
522                 ath_err(common, "Unable to setup CAB xmit queue\n");
523                 goto err;
524         }
525
526         if (!ath9k_htc_txq_setup(priv, WME_AC_BE)) {
527                 ath_err(common, "Unable to setup xmit queue for BE traffic\n");
528                 goto err;
529         }
530
531         if (!ath9k_htc_txq_setup(priv, WME_AC_BK)) {
532                 ath_err(common, "Unable to setup xmit queue for BK traffic\n");
533                 goto err;
534         }
535         if (!ath9k_htc_txq_setup(priv, WME_AC_VI)) {
536                 ath_err(common, "Unable to setup xmit queue for VI traffic\n");
537                 goto err;
538         }
539         if (!ath9k_htc_txq_setup(priv, WME_AC_VO)) {
540                 ath_err(common, "Unable to setup xmit queue for VO traffic\n");
541                 goto err;
542         }
543
544         return 0;
545
546 err:
547         return -EINVAL;
548 }
549
550 static void ath9k_init_crypto(struct ath9k_htc_priv *priv)
551 {
552         struct ath_common *common = ath9k_hw_common(priv->ah);
553         int i = 0;
554
555         /* Get the hardware key cache size. */
556         common->keymax = priv->ah->caps.keycache_size;
557         if (common->keymax > ATH_KEYMAX) {
558                 ath_dbg(common, ATH_DBG_ANY,
559                         "Warning, using only %u entries in %u key cache\n",
560                         ATH_KEYMAX, common->keymax);
561                 common->keymax = ATH_KEYMAX;
562         }
563
564         if (priv->ah->misc_mode & AR_PCU_MIC_NEW_LOC_ENA)
565                 common->crypt_caps |= ATH_CRYPT_CAP_MIC_COMBINED;
566
567         /*
568          * Reset the key cache since some parts do not
569          * reset the contents on initial power up.
570          */
571         for (i = 0; i < common->keymax; i++)
572                 ath_hw_keyreset(common, (u16) i);
573 }
574
575 static void ath9k_init_channels_rates(struct ath9k_htc_priv *priv)
576 {
577         if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ) {
578                 priv->sbands[IEEE80211_BAND_2GHZ].channels =
579                         ath9k_2ghz_channels;
580                 priv->sbands[IEEE80211_BAND_2GHZ].band = IEEE80211_BAND_2GHZ;
581                 priv->sbands[IEEE80211_BAND_2GHZ].n_channels =
582                         ARRAY_SIZE(ath9k_2ghz_channels);
583                 priv->sbands[IEEE80211_BAND_2GHZ].bitrates = ath9k_legacy_rates;
584                 priv->sbands[IEEE80211_BAND_2GHZ].n_bitrates =
585                         ARRAY_SIZE(ath9k_legacy_rates);
586         }
587
588         if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ) {
589                 priv->sbands[IEEE80211_BAND_5GHZ].channels = ath9k_5ghz_channels;
590                 priv->sbands[IEEE80211_BAND_5GHZ].band = IEEE80211_BAND_5GHZ;
591                 priv->sbands[IEEE80211_BAND_5GHZ].n_channels =
592                         ARRAY_SIZE(ath9k_5ghz_channels);
593                 priv->sbands[IEEE80211_BAND_5GHZ].bitrates =
594                         ath9k_legacy_rates + 4;
595                 priv->sbands[IEEE80211_BAND_5GHZ].n_bitrates =
596                         ARRAY_SIZE(ath9k_legacy_rates) - 4;
597         }
598 }
599
600 static void ath9k_init_misc(struct ath9k_htc_priv *priv)
601 {
602         struct ath_common *common = ath9k_hw_common(priv->ah);
603
604         common->tx_chainmask = priv->ah->caps.tx_chainmask;
605         common->rx_chainmask = priv->ah->caps.rx_chainmask;
606
607         memcpy(common->bssidmask, ath_bcast_mac, ETH_ALEN);
608
609         priv->ah->opmode = NL80211_IFTYPE_STATION;
610 }
611
612 static void ath9k_init_btcoex(struct ath9k_htc_priv *priv)
613 {
614         int qnum;
615
616         switch (priv->ah->btcoex_hw.scheme) {
617         case ATH_BTCOEX_CFG_NONE:
618                 break;
619         case ATH_BTCOEX_CFG_3WIRE:
620                 priv->ah->btcoex_hw.btactive_gpio = 7;
621                 priv->ah->btcoex_hw.btpriority_gpio = 6;
622                 priv->ah->btcoex_hw.wlanactive_gpio = 8;
623                 priv->btcoex.bt_stomp_type = ATH_BTCOEX_STOMP_LOW;
624                 ath9k_hw_btcoex_init_3wire(priv->ah);
625                 ath_htc_init_btcoex_work(priv);
626                 qnum = priv->hwq_map[WME_AC_BE];
627                 ath9k_hw_init_btcoex_hw(priv->ah, qnum);
628                 break;
629         default:
630                 WARN_ON(1);
631                 break;
632         }
633 }
634
635 static int ath9k_init_priv(struct ath9k_htc_priv *priv,
636                            u16 devid, char *product,
637                            u32 drv_info)
638 {
639         struct ath_hw *ah = NULL;
640         struct ath_common *common;
641         int ret = 0, csz = 0;
642
643         priv->op_flags |= OP_INVALID;
644
645         ah = kzalloc(sizeof(struct ath_hw), GFP_KERNEL);
646         if (!ah)
647                 return -ENOMEM;
648
649         ah->hw_version.devid = devid;
650         ah->hw_version.subsysid = 0; /* FIXME */
651         ah->hw_version.usbdev = drv_info;
652         ah->ah_flags |= AH_USE_EEPROM;
653         ah->reg_ops.read = ath9k_regread;
654         ah->reg_ops.multi_read = ath9k_multi_regread;
655         ah->reg_ops.write = ath9k_regwrite;
656         ah->reg_ops.enable_write_buffer = ath9k_enable_regwrite_buffer;
657         ah->reg_ops.write_flush = ath9k_regwrite_flush;
658         priv->ah = ah;
659
660         common = ath9k_hw_common(ah);
661         common->ops = &ah->reg_ops;
662         common->bus_ops = &ath9k_usb_bus_ops;
663         common->ah = ah;
664         common->hw = priv->hw;
665         common->priv = priv;
666         common->debug_mask = ath9k_debug;
667
668         spin_lock_init(&priv->wmi->wmi_lock);
669         spin_lock_init(&priv->beacon_lock);
670         spin_lock_init(&priv->tx_lock);
671         mutex_init(&priv->mutex);
672         mutex_init(&priv->htc_pm_lock);
673         tasklet_init(&priv->swba_tasklet, ath9k_swba_tasklet,
674                      (unsigned long)priv);
675         tasklet_init(&priv->rx_tasklet, ath9k_rx_tasklet,
676                      (unsigned long)priv);
677         tasklet_init(&priv->tx_tasklet, ath9k_tx_tasklet,
678                      (unsigned long)priv);
679         INIT_DELAYED_WORK(&priv->ani_work, ath9k_htc_ani_work);
680         INIT_WORK(&priv->ps_work, ath9k_ps_work);
681         INIT_WORK(&priv->fatal_work, ath9k_fatal_work);
682
683         /*
684          * Cache line size is used to size and align various
685          * structures used to communicate with the hardware.
686          */
687         ath_read_cachesize(common, &csz);
688         common->cachelsz = csz << 2; /* convert to bytes */
689
690         ret = ath9k_hw_init(ah);
691         if (ret) {
692                 ath_err(common,
693                         "Unable to initialize hardware; initialization status: %d\n",
694                         ret);
695                 goto err_hw;
696         }
697
698         ret = ath9k_htc_init_debug(ah);
699         if (ret) {
700                 ath_err(common, "Unable to create debugfs files\n");
701                 goto err_debug;
702         }
703
704         ret = ath9k_init_queues(priv);
705         if (ret)
706                 goto err_queues;
707
708         ath9k_init_crypto(priv);
709         ath9k_init_channels_rates(priv);
710         ath9k_init_misc(priv);
711
712         if (product && strncmp(product, ATH_HTC_BTCOEX_PRODUCT_ID, 5) == 0) {
713                 ah->btcoex_hw.scheme = ATH_BTCOEX_CFG_3WIRE;
714                 ath9k_init_btcoex(priv);
715         }
716
717         return 0;
718
719 err_queues:
720         ath9k_htc_exit_debug(ah);
721 err_debug:
722         ath9k_hw_deinit(ah);
723 err_hw:
724
725         kfree(ah);
726         priv->ah = NULL;
727
728         return ret;
729 }
730
731 static void ath9k_set_hw_capab(struct ath9k_htc_priv *priv,
732                                struct ieee80211_hw *hw)
733 {
734         struct ath_common *common = ath9k_hw_common(priv->ah);
735
736         hw->flags = IEEE80211_HW_SIGNAL_DBM |
737                 IEEE80211_HW_AMPDU_AGGREGATION |
738                 IEEE80211_HW_SPECTRUM_MGMT |
739                 IEEE80211_HW_HAS_RATE_CONTROL |
740                 IEEE80211_HW_RX_INCLUDES_FCS |
741                 IEEE80211_HW_SUPPORTS_PS |
742                 IEEE80211_HW_PS_NULLFUNC_STACK;
743
744         hw->wiphy->interface_modes =
745                 BIT(NL80211_IFTYPE_STATION) |
746                 BIT(NL80211_IFTYPE_ADHOC);
747
748         hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
749
750         hw->queues = 4;
751         hw->channel_change_time = 5000;
752         hw->max_listen_interval = 10;
753         hw->vif_data_size = sizeof(struct ath9k_htc_vif);
754         hw->sta_data_size = sizeof(struct ath9k_htc_sta);
755
756         /* tx_frame_hdr is larger than tx_mgmt_hdr anyway */
757         hw->extra_tx_headroom = sizeof(struct tx_frame_hdr) +
758                 sizeof(struct htc_frame_hdr) + 4;
759
760         if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ)
761                 hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
762                         &priv->sbands[IEEE80211_BAND_2GHZ];
763         if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)
764                 hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
765                         &priv->sbands[IEEE80211_BAND_5GHZ];
766
767         if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_HT) {
768                 if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ)
769                         setup_ht_cap(priv,
770                                      &priv->sbands[IEEE80211_BAND_2GHZ].ht_cap);
771                 if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)
772                         setup_ht_cap(priv,
773                                      &priv->sbands[IEEE80211_BAND_5GHZ].ht_cap);
774         }
775
776         SET_IEEE80211_PERM_ADDR(hw, common->macaddr);
777 }
778
779 static int ath9k_init_device(struct ath9k_htc_priv *priv,
780                              u16 devid, char *product, u32 drv_info)
781 {
782         struct ieee80211_hw *hw = priv->hw;
783         struct ath_common *common;
784         struct ath_hw *ah;
785         int error = 0;
786         struct ath_regulatory *reg;
787         char hw_name[64];
788
789         /* Bring up device */
790         error = ath9k_init_priv(priv, devid, product, drv_info);
791         if (error != 0)
792                 goto err_init;
793
794         ah = priv->ah;
795         common = ath9k_hw_common(ah);
796         ath9k_set_hw_capab(priv, hw);
797
798         /* Initialize regulatory */
799         error = ath_regd_init(&common->regulatory, priv->hw->wiphy,
800                               ath9k_reg_notifier);
801         if (error)
802                 goto err_regd;
803
804         reg = &common->regulatory;
805
806         /* Setup TX */
807         error = ath9k_tx_init(priv);
808         if (error != 0)
809                 goto err_tx;
810
811         /* Setup RX */
812         error = ath9k_rx_init(priv);
813         if (error != 0)
814                 goto err_rx;
815
816         /* Register with mac80211 */
817         error = ieee80211_register_hw(hw);
818         if (error)
819                 goto err_register;
820
821         /* Handle world regulatory */
822         if (!ath_is_world_regd(reg)) {
823                 error = regulatory_hint(hw->wiphy, reg->alpha2);
824                 if (error)
825                         goto err_world;
826         }
827
828         ath_dbg(common, ATH_DBG_CONFIG,
829                 "WMI:%d, BCN:%d, CAB:%d, UAPSD:%d, MGMT:%d, "
830                 "BE:%d, BK:%d, VI:%d, VO:%d\n",
831                 priv->wmi_cmd_ep,
832                 priv->beacon_ep,
833                 priv->cab_ep,
834                 priv->uapsd_ep,
835                 priv->mgmt_ep,
836                 priv->data_be_ep,
837                 priv->data_bk_ep,
838                 priv->data_vi_ep,
839                 priv->data_vo_ep);
840
841         ath9k_hw_name(priv->ah, hw_name, sizeof(hw_name));
842         wiphy_info(hw->wiphy, "%s\n", hw_name);
843
844         ath9k_init_leds(priv);
845         ath9k_start_rfkill_poll(priv);
846
847         return 0;
848
849 err_world:
850         ieee80211_unregister_hw(hw);
851 err_register:
852         ath9k_rx_cleanup(priv);
853 err_rx:
854         ath9k_tx_cleanup(priv);
855 err_tx:
856         /* Nothing */
857 err_regd:
858         ath9k_deinit_priv(priv);
859 err_init:
860         return error;
861 }
862
863 int ath9k_htc_probe_device(struct htc_target *htc_handle, struct device *dev,
864                            u16 devid, char *product, u32 drv_info)
865 {
866         struct ieee80211_hw *hw;
867         struct ath9k_htc_priv *priv;
868         int ret;
869
870         hw = ieee80211_alloc_hw(sizeof(struct ath9k_htc_priv), &ath9k_htc_ops);
871         if (!hw)
872                 return -ENOMEM;
873
874         priv = hw->priv;
875         priv->hw = hw;
876         priv->htc = htc_handle;
877         priv->dev = dev;
878         htc_handle->drv_priv = priv;
879         SET_IEEE80211_DEV(hw, priv->dev);
880
881         ret = ath9k_htc_wait_for_target(priv);
882         if (ret)
883                 goto err_free;
884
885         priv->wmi = ath9k_init_wmi(priv);
886         if (!priv->wmi) {
887                 ret = -EINVAL;
888                 goto err_free;
889         }
890
891         ret = ath9k_init_htc_services(priv, devid, drv_info);
892         if (ret)
893                 goto err_init;
894
895         ret = ath9k_init_device(priv, devid, product, drv_info);
896         if (ret)
897                 goto err_init;
898
899         return 0;
900
901 err_init:
902         ath9k_deinit_wmi(priv);
903 err_free:
904         ieee80211_free_hw(hw);
905         return ret;
906 }
907
908 void ath9k_htc_disconnect_device(struct htc_target *htc_handle, bool hotunplug)
909 {
910         if (htc_handle->drv_priv) {
911
912                 /* Check if the device has been yanked out. */
913                 if (hotunplug)
914                         htc_handle->drv_priv->ah->ah_flags |= AH_UNPLUGGED;
915
916                 ath9k_deinit_device(htc_handle->drv_priv);
917                 ath9k_deinit_wmi(htc_handle->drv_priv);
918                 ieee80211_free_hw(htc_handle->drv_priv->hw);
919         }
920 }
921
922 #ifdef CONFIG_PM
923
924 void ath9k_htc_suspend(struct htc_target *htc_handle)
925 {
926         ath9k_htc_setpower(htc_handle->drv_priv, ATH9K_PM_FULL_SLEEP);
927 }
928
929 int ath9k_htc_resume(struct htc_target *htc_handle)
930 {
931         struct ath9k_htc_priv *priv = htc_handle->drv_priv;
932         int ret;
933
934         ret = ath9k_htc_wait_for_target(priv);
935         if (ret)
936                 return ret;
937
938         ret = ath9k_init_htc_services(priv, priv->ah->hw_version.devid,
939                                       priv->ah->hw_version.usbdev);
940         return ret;
941 }
942 #endif
943
944 static int __init ath9k_htc_init(void)
945 {
946         int error;
947
948         error = ath9k_htc_debug_create_root();
949         if (error < 0) {
950                 printk(KERN_ERR
951                         "ath9k_htc: Unable to create debugfs root: %d\n",
952                         error);
953                 goto err_dbg;
954         }
955
956         error = ath9k_hif_usb_init();
957         if (error < 0) {
958                 printk(KERN_ERR
959                         "ath9k_htc: No USB devices found,"
960                         " driver not installed.\n");
961                 error = -ENODEV;
962                 goto err_usb;
963         }
964
965         return 0;
966
967 err_usb:
968         ath9k_htc_debug_remove_root();
969 err_dbg:
970         return error;
971 }
972 module_init(ath9k_htc_init);
973
974 static void __exit ath9k_htc_exit(void)
975 {
976         ath9k_hif_usb_exit();
977         ath9k_htc_debug_remove_root();
978         printk(KERN_INFO "ath9k_htc: Driver unloaded\n");
979 }
980 module_exit(ath9k_htc_exit);