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