rm some drivers on drivers/net/wireless for merge 3.0
author黄涛 <huangtao@rock-chips.com>
Fri, 28 Oct 2011 02:38:45 +0000 (10:38 +0800)
committer黄涛 <huangtao@rock-chips.com>
Fri, 28 Oct 2011 02:38:45 +0000 (10:38 +0800)
86 files changed:
drivers/net/wireless/ath/ath5k/ani.c [deleted file]
drivers/net/wireless/ath/ath5k/ani.h [deleted file]
drivers/net/wireless/ath/ath5k/sysfs.c [deleted file]
drivers/net/wireless/ath/ath9k/ar5008_initvals.h [deleted file]
drivers/net/wireless/ath/ath9k/ar5008_phy.c [deleted file]
drivers/net/wireless/ath/ath9k/ar9001_initvals.h [deleted file]
drivers/net/wireless/ath/ath9k/ar9002_calib.c [deleted file]
drivers/net/wireless/ath/ath9k/ar9002_hw.c [deleted file]
drivers/net/wireless/ath/ath9k/ar9002_initvals.h [deleted file]
drivers/net/wireless/ath/ath9k/ar9002_mac.c [deleted file]
drivers/net/wireless/ath/ath9k/ar9002_phy.c [deleted file]
drivers/net/wireless/ath/ath9k/ar9002_phy.h [deleted file]
drivers/net/wireless/ath/ath9k/ar9003_2p0_initvals.h [deleted file]
drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h [deleted file]
drivers/net/wireless/ath/ath9k/ar9003_calib.c [deleted file]
drivers/net/wireless/ath/ath9k/ar9003_eeprom.c [deleted file]
drivers/net/wireless/ath/ath9k/ar9003_eeprom.h [deleted file]
drivers/net/wireless/ath/ath9k/ar9003_hw.c [deleted file]
drivers/net/wireless/ath/ath9k/ar9003_mac.c [deleted file]
drivers/net/wireless/ath/ath9k/ar9003_mac.h [deleted file]
drivers/net/wireless/ath/ath9k/ar9003_paprd.c [deleted file]
drivers/net/wireless/ath/ath9k/ar9003_phy.c [deleted file]
drivers/net/wireless/ath/ath9k/ar9003_phy.h [deleted file]
drivers/net/wireless/ath/ath9k/common.c [deleted file]
drivers/net/wireless/ath/ath9k/common.h [deleted file]
drivers/net/wireless/ath/ath9k/gpio.c [deleted file]
drivers/net/wireless/ath/ath9k/hif_usb.c [deleted file]
drivers/net/wireless/ath/ath9k/hif_usb.h [deleted file]
drivers/net/wireless/ath/ath9k/htc.h [deleted file]
drivers/net/wireless/ath/ath9k/htc_drv_beacon.c [deleted file]
drivers/net/wireless/ath/ath9k/htc_drv_init.c [deleted file]
drivers/net/wireless/ath/ath9k/htc_drv_main.c [deleted file]
drivers/net/wireless/ath/ath9k/htc_drv_txrx.c [deleted file]
drivers/net/wireless/ath/ath9k/htc_hst.c [deleted file]
drivers/net/wireless/ath/ath9k/htc_hst.h [deleted file]
drivers/net/wireless/ath/ath9k/hw-ops.h [deleted file]
drivers/net/wireless/ath/ath9k/init.c [deleted file]
drivers/net/wireless/ath/ath9k/wmi.c [deleted file]
drivers/net/wireless/ath/ath9k/wmi.h [deleted file]
drivers/net/wireless/ath/debug.c [deleted file]
drivers/net/wireless/ath/debug.h [deleted file]
drivers/net/wireless/ath/hw.c [deleted file]
drivers/net/wireless/ath/reg.h [deleted file]
drivers/net/wireless/iwlwifi/iwl-3945-debugfs.c [deleted file]
drivers/net/wireless/iwlwifi/iwl-3945-debugfs.h [deleted file]
drivers/net/wireless/iwlwifi/iwl-agn-calib.c [deleted file]
drivers/net/wireless/iwlwifi/iwl-agn-debugfs.c [deleted file]
drivers/net/wireless/iwlwifi/iwl-agn-debugfs.h [deleted file]
drivers/net/wireless/iwlwifi/iwl-agn-hcmd.c [deleted file]
drivers/net/wireless/iwlwifi/iwl-agn-hw.h [deleted file]
drivers/net/wireless/iwlwifi/iwl-agn-ict.c [deleted file]
drivers/net/wireless/iwlwifi/iwl-agn-led.c [deleted file]
drivers/net/wireless/iwlwifi/iwl-agn-led.h [deleted file]
drivers/net/wireless/iwlwifi/iwl-agn-lib.c [deleted file]
drivers/net/wireless/iwlwifi/iwl-agn-rx.c [deleted file]
drivers/net/wireless/iwlwifi/iwl-agn-tx.c [deleted file]
drivers/net/wireless/iwlwifi/iwl-agn-ucode.c [deleted file]
drivers/net/wireless/iwlwifi/iwl-agn.h [deleted file]
drivers/net/wireless/iwlwifi/iwl-devtrace.c [deleted file]
drivers/net/wireless/iwlwifi/iwl-devtrace.h [deleted file]
drivers/net/wireless/iwmc3200wifi/trace.c [deleted file]
drivers/net/wireless/iwmc3200wifi/trace.h [deleted file]
drivers/net/wireless/libertas/Kconfig [deleted file]
drivers/net/wireless/libertas/cfg.c [deleted file]
drivers/net/wireless/libertas/cfg.h [deleted file]
drivers/net/wireless/libertas/mesh.c [deleted file]
drivers/net/wireless/libertas/mesh.h [deleted file]
drivers/net/wireless/libertas_tf/deb_defs.h [deleted file]
drivers/net/wireless/orinoco/orinoco_usb.c [deleted file]
drivers/net/wireless/rt2x00/rt2800.h [deleted file]
drivers/net/wireless/rt2x00/rt2800lib.c [deleted file]
drivers/net/wireless/rt2x00/rt2800lib.h [deleted file]
drivers/net/wireless/rt2x00/rt2800pci.c [deleted file]
drivers/net/wireless/rt2x00/rt2800pci.h [deleted file]
drivers/net/wireless/rt2x00/rt2x00soc.c [deleted file]
drivers/net/wireless/rt2x00/rt2x00soc.h [deleted file]
drivers/net/wireless/rtl818x/Kconfig [deleted file]
drivers/net/wireless/wl12xx/wl1271_conf.h [deleted file]
drivers/net/wireless/wl12xx/wl1271_ini.h [deleted file]
drivers/net/wireless/wl12xx/wl1271_io.c [deleted file]
drivers/net/wireless/wl12xx/wl1271_io.h [deleted file]
drivers/net/wireless/wl12xx/wl1271_scan.c [deleted file]
drivers/net/wireless/wl12xx/wl1271_scan.h [deleted file]
drivers/net/wireless/wl12xx/wl1271_sdio.c [deleted file]
drivers/net/wireless/wl12xx/wl1271_testmode.c [deleted file]
drivers/net/wireless/wl12xx/wl1271_testmode.h [deleted file]

diff --git a/drivers/net/wireless/ath/ath5k/ani.c b/drivers/net/wireless/ath/ath5k/ani.c
deleted file mode 100644 (file)
index 26dbe65..0000000
+++ /dev/null
@@ -1,744 +0,0 @@
-/*
- * Copyright (C) 2010 Bruno Randolf <br1@einfach.org>
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "ath5k.h"
-#include "base.h"
-#include "reg.h"
-#include "debug.h"
-#include "ani.h"
-
-/**
- * DOC: Basic ANI Operation
- *
- * Adaptive Noise Immunity (ANI) controls five noise immunity parameters
- * depending on the amount of interference in the environment, increasing
- * or reducing sensitivity as necessary.
- *
- * The parameters are:
- *   - "noise immunity"
- *   - "spur immunity"
- *   - "firstep level"
- *   - "OFDM weak signal detection"
- *   - "CCK weak signal detection"
- *
- * Basically we look at the amount of ODFM and CCK timing errors we get and then
- * raise or lower immunity accordingly by setting one or more of these
- * parameters.
- * Newer chipsets have PHY error counters in hardware which will generate a MIB
- * interrupt when they overflow. Older hardware has too enable PHY error frames
- * by setting a RX flag and then count every single PHY error. When a specified
- * threshold of errors has been reached we will raise immunity.
- * Also we regularly check the amount of errors and lower or raise immunity as
- * necessary.
- */
-
-
-/*** ANI parameter control ***/
-
-/**
- * ath5k_ani_set_noise_immunity_level() - Set noise immunity level
- *
- * @level: level between 0 and @ATH5K_ANI_MAX_NOISE_IMM_LVL
- */
-void
-ath5k_ani_set_noise_immunity_level(struct ath5k_hw *ah, int level)
-{
-       /* TODO:
-        * ANI documents suggest the following five levels to use, but the HAL
-        * and ath9k use only use the last two levels, making this
-        * essentially an on/off option. There *may* be a reason for this (???),
-        * so i stick with the HAL version for now...
-        */
-#if 0
-       const s8 hi[] = { -18, -18, -16, -14, -12 };
-       const s8 lo[] = { -52, -56, -60, -64, -70 };
-       const s8 sz[] = { -34, -41, -48, -55, -62 };
-       const s8 fr[] = { -70, -72, -75, -78, -80 };
-#else
-       const s8 sz[] = { -55, -62 };
-       const s8 lo[] = { -64, -70 };
-       const s8 hi[] = { -14, -12 };
-       const s8 fr[] = { -78, -80 };
-#endif
-       if (level < 0 || level >= ARRAY_SIZE(sz)) {
-               ATH5K_ERR(ah->ah_sc, "noise immuniy level %d out of range",
-                         level);
-               return;
-       }
-
-       AR5K_REG_WRITE_BITS(ah, AR5K_PHY_DESIRED_SIZE,
-                               AR5K_PHY_DESIRED_SIZE_TOT, sz[level]);
-       AR5K_REG_WRITE_BITS(ah, AR5K_PHY_AGCCOARSE,
-                               AR5K_PHY_AGCCOARSE_LO, lo[level]);
-       AR5K_REG_WRITE_BITS(ah, AR5K_PHY_AGCCOARSE,
-                               AR5K_PHY_AGCCOARSE_HI, hi[level]);
-       AR5K_REG_WRITE_BITS(ah, AR5K_PHY_SIG,
-                               AR5K_PHY_SIG_FIRPWR, fr[level]);
-
-       ah->ah_sc->ani_state.noise_imm_level = level;
-       ATH5K_DBG_UNLIMIT(ah->ah_sc, ATH5K_DEBUG_ANI, "new level %d", level);
-}
-
-
-/**
- * ath5k_ani_set_spur_immunity_level() - Set spur immunity level
- *
- * @level: level between 0 and @max_spur_level (the maximum level is dependent
- *     on the chip revision).
- */
-void
-ath5k_ani_set_spur_immunity_level(struct ath5k_hw *ah, int level)
-{
-       const int val[] = { 2, 4, 6, 8, 10, 12, 14, 16 };
-
-       if (level < 0 || level >= ARRAY_SIZE(val) ||
-           level > ah->ah_sc->ani_state.max_spur_level) {
-               ATH5K_ERR(ah->ah_sc, "spur immunity level %d out of range",
-                         level);
-               return;
-       }
-
-       AR5K_REG_WRITE_BITS(ah, AR5K_PHY_OFDM_SELFCORR,
-               AR5K_PHY_OFDM_SELFCORR_CYPWR_THR1, val[level]);
-
-       ah->ah_sc->ani_state.spur_level = level;
-       ATH5K_DBG_UNLIMIT(ah->ah_sc, ATH5K_DEBUG_ANI, "new level %d", level);
-}
-
-
-/**
- * ath5k_ani_set_firstep_level() - Set "firstep" level
- *
- * @level: level between 0 and @ATH5K_ANI_MAX_FIRSTEP_LVL
- */
-void
-ath5k_ani_set_firstep_level(struct ath5k_hw *ah, int level)
-{
-       const int val[] = { 0, 4, 8 };
-
-       if (level < 0 || level >= ARRAY_SIZE(val)) {
-               ATH5K_ERR(ah->ah_sc, "firstep level %d out of range", level);
-               return;
-       }
-
-       AR5K_REG_WRITE_BITS(ah, AR5K_PHY_SIG,
-                               AR5K_PHY_SIG_FIRSTEP, val[level]);
-
-       ah->ah_sc->ani_state.firstep_level = level;
-       ATH5K_DBG_UNLIMIT(ah->ah_sc, ATH5K_DEBUG_ANI, "new level %d", level);
-}
-
-
-/**
- * ath5k_ani_set_ofdm_weak_signal_detection() - Control OFDM weak signal
- *                                             detection
- *
- * @on: turn on or off
- */
-void
-ath5k_ani_set_ofdm_weak_signal_detection(struct ath5k_hw *ah, bool on)
-{
-       const int m1l[] = { 127, 50 };
-       const int m2l[] = { 127, 40 };
-       const int m1[] = { 127, 0x4d };
-       const int m2[] = { 127, 0x40 };
-       const int m2cnt[] = { 31, 16 };
-       const int m2lcnt[] = { 63, 48 };
-
-       AR5K_REG_WRITE_BITS(ah, AR5K_PHY_WEAK_OFDM_LOW_THR,
-                               AR5K_PHY_WEAK_OFDM_LOW_THR_M1, m1l[on]);
-       AR5K_REG_WRITE_BITS(ah, AR5K_PHY_WEAK_OFDM_LOW_THR,
-                               AR5K_PHY_WEAK_OFDM_LOW_THR_M2, m2l[on]);
-       AR5K_REG_WRITE_BITS(ah, AR5K_PHY_WEAK_OFDM_HIGH_THR,
-                               AR5K_PHY_WEAK_OFDM_HIGH_THR_M1, m1[on]);
-       AR5K_REG_WRITE_BITS(ah, AR5K_PHY_WEAK_OFDM_HIGH_THR,
-                               AR5K_PHY_WEAK_OFDM_HIGH_THR_M2, m2[on]);
-       AR5K_REG_WRITE_BITS(ah, AR5K_PHY_WEAK_OFDM_HIGH_THR,
-                       AR5K_PHY_WEAK_OFDM_HIGH_THR_M2_COUNT, m2cnt[on]);
-       AR5K_REG_WRITE_BITS(ah, AR5K_PHY_WEAK_OFDM_LOW_THR,
-                       AR5K_PHY_WEAK_OFDM_LOW_THR_M2_COUNT, m2lcnt[on]);
-
-       if (on)
-               AR5K_REG_ENABLE_BITS(ah, AR5K_PHY_WEAK_OFDM_LOW_THR,
-                               AR5K_PHY_WEAK_OFDM_LOW_THR_SELFCOR_EN);
-       else
-               AR5K_REG_DISABLE_BITS(ah, AR5K_PHY_WEAK_OFDM_LOW_THR,
-                               AR5K_PHY_WEAK_OFDM_LOW_THR_SELFCOR_EN);
-
-       ah->ah_sc->ani_state.ofdm_weak_sig = on;
-       ATH5K_DBG_UNLIMIT(ah->ah_sc, ATH5K_DEBUG_ANI, "turned %s",
-                         on ? "on" : "off");
-}
-
-
-/**
- * ath5k_ani_set_cck_weak_signal_detection() - control CCK weak signal detection
- *
- * @on: turn on or off
- */
-void
-ath5k_ani_set_cck_weak_signal_detection(struct ath5k_hw *ah, bool on)
-{
-       const int val[] = { 8, 6 };
-       AR5K_REG_WRITE_BITS(ah, AR5K_PHY_CCK_CROSSCORR,
-                               AR5K_PHY_CCK_CROSSCORR_WEAK_SIG_THR, val[on]);
-       ah->ah_sc->ani_state.cck_weak_sig = on;
-       ATH5K_DBG_UNLIMIT(ah->ah_sc, ATH5K_DEBUG_ANI, "turned %s",
-                         on ? "on" : "off");
-}
-
-
-/*** ANI algorithm ***/
-
-/**
- * ath5k_ani_raise_immunity() - Increase noise immunity
- *
- * @ofdm_trigger: If this is true we are called because of too many OFDM errors,
- *     the algorithm will tune more parameters then.
- *
- * Try to raise noise immunity (=decrease sensitivity) in several steps
- * depending on the average RSSI of the beacons we received.
- */
-static void
-ath5k_ani_raise_immunity(struct ath5k_hw *ah, struct ath5k_ani_state *as,
-                        bool ofdm_trigger)
-{
-       int rssi = ah->ah_beacon_rssi_avg.avg;
-
-       ATH5K_DBG_UNLIMIT(ah->ah_sc, ATH5K_DEBUG_ANI, "raise immunity (%s)",
-               ofdm_trigger ? "ODFM" : "CCK");
-
-       /* first: raise noise immunity */
-       if (as->noise_imm_level < ATH5K_ANI_MAX_NOISE_IMM_LVL) {
-               ath5k_ani_set_noise_immunity_level(ah, as->noise_imm_level + 1);
-               return;
-       }
-
-       /* only OFDM: raise spur immunity level */
-       if (ofdm_trigger &&
-           as->spur_level < ah->ah_sc->ani_state.max_spur_level) {
-               ath5k_ani_set_spur_immunity_level(ah, as->spur_level + 1);
-               return;
-       }
-
-       /* AP mode */
-       if (ah->ah_sc->opmode == NL80211_IFTYPE_AP) {
-               if (as->firstep_level < ATH5K_ANI_MAX_FIRSTEP_LVL)
-                       ath5k_ani_set_firstep_level(ah, as->firstep_level + 1);
-               return;
-       }
-
-       /* STA and IBSS mode */
-
-       /* TODO: for IBSS mode it would be better to keep a beacon RSSI average
-        * per each neighbour node and use the minimum of these, to make sure we
-        * don't shut out a remote node by raising immunity too high. */
-
-       if (rssi > ATH5K_ANI_RSSI_THR_HIGH) {
-               ATH5K_DBG_UNLIMIT(ah->ah_sc, ATH5K_DEBUG_ANI,
-                                 "beacon RSSI high");
-               /* only OFDM: beacon RSSI is high, we can disable ODFM weak
-                * signal detection */
-               if (ofdm_trigger && as->ofdm_weak_sig == true) {
-                       ath5k_ani_set_ofdm_weak_signal_detection(ah, false);
-                       ath5k_ani_set_spur_immunity_level(ah, 0);
-                       return;
-               }
-               /* as a last resort or CCK: raise firstep level */
-               if (as->firstep_level < ATH5K_ANI_MAX_FIRSTEP_LVL) {
-                       ath5k_ani_set_firstep_level(ah, as->firstep_level + 1);
-                       return;
-               }
-       } else if (rssi > ATH5K_ANI_RSSI_THR_LOW) {
-               /* beacon RSSI in mid range, we need OFDM weak signal detect,
-                * but can raise firstep level */
-               ATH5K_DBG_UNLIMIT(ah->ah_sc, ATH5K_DEBUG_ANI,
-                                 "beacon RSSI mid");
-               if (ofdm_trigger && as->ofdm_weak_sig == false)
-                       ath5k_ani_set_ofdm_weak_signal_detection(ah, true);
-               if (as->firstep_level < ATH5K_ANI_MAX_FIRSTEP_LVL)
-                       ath5k_ani_set_firstep_level(ah, as->firstep_level + 1);
-               return;
-       } else if (ah->ah_current_channel->band == IEEE80211_BAND_2GHZ) {
-               /* beacon RSSI is low. in B/G mode turn of OFDM weak signal
-                * detect and zero firstep level to maximize CCK sensitivity */
-               ATH5K_DBG_UNLIMIT(ah->ah_sc, ATH5K_DEBUG_ANI,
-                                 "beacon RSSI low, 2GHz");
-               if (ofdm_trigger && as->ofdm_weak_sig == true)
-                       ath5k_ani_set_ofdm_weak_signal_detection(ah, false);
-               if (as->firstep_level > 0)
-                       ath5k_ani_set_firstep_level(ah, 0);
-               return;
-       }
-
-       /* TODO: why not?:
-       if (as->cck_weak_sig == true) {
-               ath5k_ani_set_cck_weak_signal_detection(ah, false);
-       }
-       */
-}
-
-
-/**
- * ath5k_ani_lower_immunity() - Decrease noise immunity
- *
- * Try to lower noise immunity (=increase sensitivity) in several steps
- * depending on the average RSSI of the beacons we received.
- */
-static void
-ath5k_ani_lower_immunity(struct ath5k_hw *ah, struct ath5k_ani_state *as)
-{
-       int rssi = ah->ah_beacon_rssi_avg.avg;
-
-       ATH5K_DBG_UNLIMIT(ah->ah_sc, ATH5K_DEBUG_ANI, "lower immunity");
-
-       if (ah->ah_sc->opmode == NL80211_IFTYPE_AP) {
-               /* AP mode */
-               if (as->firstep_level > 0) {
-                       ath5k_ani_set_firstep_level(ah, as->firstep_level - 1);
-                       return;
-               }
-       } else {
-               /* STA and IBSS mode (see TODO above) */
-               if (rssi > ATH5K_ANI_RSSI_THR_HIGH) {
-                       /* beacon signal is high, leave OFDM weak signal
-                        * detection off or it may oscillate
-                        * TODO: who said it's off??? */
-               } else if (rssi > ATH5K_ANI_RSSI_THR_LOW) {
-                       /* beacon RSSI is mid-range: turn on ODFM weak signal
-                        * detection and next, lower firstep level */
-                       if (as->ofdm_weak_sig == false) {
-                               ath5k_ani_set_ofdm_weak_signal_detection(ah,
-                                                                        true);
-                               return;
-                       }
-                       if (as->firstep_level > 0) {
-                               ath5k_ani_set_firstep_level(ah,
-                                                       as->firstep_level - 1);
-                               return;
-                       }
-               } else {
-                       /* beacon signal is low: only reduce firstep level */
-                       if (as->firstep_level > 0) {
-                               ath5k_ani_set_firstep_level(ah,
-                                                       as->firstep_level - 1);
-                               return;
-                       }
-               }
-       }
-
-       /* all modes */
-       if (as->spur_level > 0) {
-               ath5k_ani_set_spur_immunity_level(ah, as->spur_level - 1);
-               return;
-       }
-
-       /* finally, reduce noise immunity */
-       if (as->noise_imm_level > 0) {
-               ath5k_ani_set_noise_immunity_level(ah, as->noise_imm_level - 1);
-               return;
-       }
-}
-
-
-/**
- * ath5k_hw_ani_get_listen_time() - Calculate time spent listening
- *
- * Return an approximation of the time spent "listening" in milliseconds (ms)
- * since the last call of this function by deducting the cycles spent
- * transmitting and receiving from the total cycle count.
- * Save profile count values for debugging/statistics and because we might want
- * to use them later.
- *
- * We assume no one else clears these registers!
- */
-static int
-ath5k_hw_ani_get_listen_time(struct ath5k_hw *ah, struct ath5k_ani_state *as)
-{
-       int listen;
-
-       /* freeze */
-       ath5k_hw_reg_write(ah, AR5K_MIBC_FMC, AR5K_MIBC);
-       /* read */
-       as->pfc_cycles = ath5k_hw_reg_read(ah, AR5K_PROFCNT_CYCLE);
-       as->pfc_busy = ath5k_hw_reg_read(ah, AR5K_PROFCNT_RXCLR);
-       as->pfc_tx = ath5k_hw_reg_read(ah, AR5K_PROFCNT_TX);
-       as->pfc_rx = ath5k_hw_reg_read(ah, AR5K_PROFCNT_RX);
-       /* clear */
-       ath5k_hw_reg_write(ah, 0, AR5K_PROFCNT_TX);
-       ath5k_hw_reg_write(ah, 0, AR5K_PROFCNT_RX);
-       ath5k_hw_reg_write(ah, 0, AR5K_PROFCNT_RXCLR);
-       ath5k_hw_reg_write(ah, 0, AR5K_PROFCNT_CYCLE);
-       /* un-freeze */
-       ath5k_hw_reg_write(ah, 0, AR5K_MIBC);
-
-       /* TODO: where does 44000 come from? (11g clock rate?) */
-       listen = (as->pfc_cycles - as->pfc_rx - as->pfc_tx) / 44000;
-
-       if (as->pfc_cycles == 0 || listen < 0)
-               return 0;
-       return listen;
-}
-
-
-/**
- * ath5k_ani_save_and_clear_phy_errors() - Clear and save PHY error counters
- *
- * Clear the PHY error counters as soon as possible, since this might be called
- * from a MIB interrupt and we want to make sure we don't get interrupted again.
- * Add the count of CCK and OFDM errors to our internal state, so it can be used
- * by the algorithm later.
- *
- * Will be called from interrupt and tasklet context.
- * Returns 0 if both counters are zero.
- */
-static int
-ath5k_ani_save_and_clear_phy_errors(struct ath5k_hw *ah,
-                                   struct ath5k_ani_state *as)
-{
-       unsigned int ofdm_err, cck_err;
-
-       if (!ah->ah_capabilities.cap_has_phyerr_counters)
-               return 0;
-
-       ofdm_err = ath5k_hw_reg_read(ah, AR5K_PHYERR_CNT1);
-       cck_err = ath5k_hw_reg_read(ah, AR5K_PHYERR_CNT2);
-
-       /* reset counters first, we might be in a hurry (interrupt) */
-       ath5k_hw_reg_write(ah, ATH5K_PHYERR_CNT_MAX - ATH5K_ANI_OFDM_TRIG_HIGH,
-                          AR5K_PHYERR_CNT1);
-       ath5k_hw_reg_write(ah, ATH5K_PHYERR_CNT_MAX - ATH5K_ANI_CCK_TRIG_HIGH,
-                          AR5K_PHYERR_CNT2);
-
-       ofdm_err = ATH5K_ANI_OFDM_TRIG_HIGH - (ATH5K_PHYERR_CNT_MAX - ofdm_err);
-       cck_err = ATH5K_ANI_CCK_TRIG_HIGH - (ATH5K_PHYERR_CNT_MAX - cck_err);
-
-       /* sometimes both can be zero, especially when there is a superfluous
-        * second interrupt. detect that here and return an error. */
-       if (ofdm_err <= 0 && cck_err <= 0)
-               return 0;
-
-       /* avoid negative values should one of the registers overflow */
-       if (ofdm_err > 0) {
-               as->ofdm_errors += ofdm_err;
-               as->sum_ofdm_errors += ofdm_err;
-       }
-       if (cck_err > 0) {
-               as->cck_errors += cck_err;
-               as->sum_cck_errors += cck_err;
-       }
-       return 1;
-}
-
-
-/**
- * ath5k_ani_period_restart() - Restart ANI period
- *
- * Just reset counters, so they are clear for the next "ani period".
- */
-static void
-ath5k_ani_period_restart(struct ath5k_hw *ah, struct ath5k_ani_state *as)
-{
-       /* keep last values for debugging */
-       as->last_ofdm_errors = as->ofdm_errors;
-       as->last_cck_errors = as->cck_errors;
-       as->last_listen = as->listen_time;
-
-       as->ofdm_errors = 0;
-       as->cck_errors = 0;
-       as->listen_time = 0;
-}
-
-
-/**
- * ath5k_ani_calibration() - The main ANI calibration function
- *
- * We count OFDM and CCK errors relative to the time where we did not send or
- * receive ("listen" time) and raise or lower immunity accordingly.
- * This is called regularly (every second) from the calibration timer, but also
- * when an error threshold has been reached.
- *
- * In order to synchronize access from different contexts, this should be
- * called only indirectly by scheduling the ANI tasklet!
- */
-void
-ath5k_ani_calibration(struct ath5k_hw *ah)
-{
-       struct ath5k_ani_state *as = &ah->ah_sc->ani_state;
-       int listen, ofdm_high, ofdm_low, cck_high, cck_low;
-
-       /* get listen time since last call and add it to the counter because we
-        * might not have restarted the "ani period" last time.
-        * always do this to calculate the busy time also in manual mode */
-       listen = ath5k_hw_ani_get_listen_time(ah, as);
-       as->listen_time += listen;
-
-       if (as->ani_mode != ATH5K_ANI_MODE_AUTO)
-               return;
-
-       ath5k_ani_save_and_clear_phy_errors(ah, as);
-
-       ofdm_high = as->listen_time * ATH5K_ANI_OFDM_TRIG_HIGH / 1000;
-       cck_high = as->listen_time * ATH5K_ANI_CCK_TRIG_HIGH / 1000;
-       ofdm_low = as->listen_time * ATH5K_ANI_OFDM_TRIG_LOW / 1000;
-       cck_low = as->listen_time * ATH5K_ANI_CCK_TRIG_LOW / 1000;
-
-       ATH5K_DBG_UNLIMIT(ah->ah_sc, ATH5K_DEBUG_ANI,
-               "listen %d (now %d)", as->listen_time, listen);
-       ATH5K_DBG_UNLIMIT(ah->ah_sc, ATH5K_DEBUG_ANI,
-               "check high ofdm %d/%d cck %d/%d",
-               as->ofdm_errors, ofdm_high, as->cck_errors, cck_high);
-
-       if (as->ofdm_errors > ofdm_high || as->cck_errors > cck_high) {
-               /* too many PHY errors - we have to raise immunity */
-               bool ofdm_flag = as->ofdm_errors > ofdm_high ? true : false;
-               ath5k_ani_raise_immunity(ah, as, ofdm_flag);
-               ath5k_ani_period_restart(ah, as);
-
-       } else if (as->listen_time > 5 * ATH5K_ANI_LISTEN_PERIOD) {
-               /* If more than 5 (TODO: why 5?) periods have passed and we got
-                * relatively little errors we can try to lower immunity */
-               ATH5K_DBG_UNLIMIT(ah->ah_sc, ATH5K_DEBUG_ANI,
-                       "check low ofdm %d/%d cck %d/%d",
-                       as->ofdm_errors, ofdm_low, as->cck_errors, cck_low);
-
-               if (as->ofdm_errors <= ofdm_low && as->cck_errors <= cck_low)
-                       ath5k_ani_lower_immunity(ah, as);
-
-               ath5k_ani_period_restart(ah, as);
-       }
-}
-
-
-/*** INTERRUPT HANDLER ***/
-
-/**
- * ath5k_ani_mib_intr() - Interrupt handler for ANI MIB counters
- *
- * Just read & reset the registers quickly, so they don't generate more
- * interrupts, save the counters and schedule the tasklet to decide whether
- * to raise immunity or not.
- *
- * We just need to handle PHY error counters, ath5k_hw_update_mib_counters()
- * should take care of all "normal" MIB interrupts.
- */
-void
-ath5k_ani_mib_intr(struct ath5k_hw *ah)
-{
-       struct ath5k_ani_state *as = &ah->ah_sc->ani_state;
-
-       /* nothing to do here if HW does not have PHY error counters - they
-        * can't be the reason for the MIB interrupt then */
-       if (!ah->ah_capabilities.cap_has_phyerr_counters)
-               return;
-
-       /* not in use but clear anyways */
-       ath5k_hw_reg_write(ah, 0, AR5K_OFDM_FIL_CNT);
-       ath5k_hw_reg_write(ah, 0, AR5K_CCK_FIL_CNT);
-
-       if (ah->ah_sc->ani_state.ani_mode != ATH5K_ANI_MODE_AUTO)
-               return;
-
-       /* if one of the errors triggered, we can get a superfluous second
-        * interrupt, even though we have already reset the register. the
-        * function detects that so we can return early */
-       if (ath5k_ani_save_and_clear_phy_errors(ah, as) == 0)
-               return;
-
-       if (as->ofdm_errors > ATH5K_ANI_OFDM_TRIG_HIGH ||
-           as->cck_errors > ATH5K_ANI_CCK_TRIG_HIGH)
-               tasklet_schedule(&ah->ah_sc->ani_tasklet);
-}
-
-
-/**
- * ath5k_ani_phy_error_report() - Used by older HW to report PHY errors
- *
- * This is used by hardware without PHY error counters to report PHY errors
- * on a frame-by-frame basis, instead of the interrupt.
- */
-void
-ath5k_ani_phy_error_report(struct ath5k_hw *ah,
-                          enum ath5k_phy_error_code phyerr)
-{
-       struct ath5k_ani_state *as = &ah->ah_sc->ani_state;
-
-       if (phyerr == AR5K_RX_PHY_ERROR_OFDM_TIMING) {
-               as->ofdm_errors++;
-               if (as->ofdm_errors > ATH5K_ANI_OFDM_TRIG_HIGH)
-                       tasklet_schedule(&ah->ah_sc->ani_tasklet);
-       } else if (phyerr == AR5K_RX_PHY_ERROR_CCK_TIMING) {
-               as->cck_errors++;
-               if (as->cck_errors > ATH5K_ANI_CCK_TRIG_HIGH)
-                       tasklet_schedule(&ah->ah_sc->ani_tasklet);
-       }
-}
-
-
-/*** INIT ***/
-
-/**
- * ath5k_enable_phy_err_counters() - Enable PHY error counters
- *
- * Enable PHY error counters for OFDM and CCK timing errors.
- */
-static void
-ath5k_enable_phy_err_counters(struct ath5k_hw *ah)
-{
-       ath5k_hw_reg_write(ah, ATH5K_PHYERR_CNT_MAX - ATH5K_ANI_OFDM_TRIG_HIGH,
-                          AR5K_PHYERR_CNT1);
-       ath5k_hw_reg_write(ah, ATH5K_PHYERR_CNT_MAX - ATH5K_ANI_CCK_TRIG_HIGH,
-                          AR5K_PHYERR_CNT2);
-       ath5k_hw_reg_write(ah, AR5K_PHY_ERR_FIL_OFDM, AR5K_PHYERR_CNT1_MASK);
-       ath5k_hw_reg_write(ah, AR5K_PHY_ERR_FIL_CCK, AR5K_PHYERR_CNT2_MASK);
-
-       /* not in use */
-       ath5k_hw_reg_write(ah, 0, AR5K_OFDM_FIL_CNT);
-       ath5k_hw_reg_write(ah, 0, AR5K_CCK_FIL_CNT);
-}
-
-
-/**
- * ath5k_disable_phy_err_counters() - Disable PHY error counters
- *
- * Disable PHY error counters for OFDM and CCK timing errors.
- */
-static void
-ath5k_disable_phy_err_counters(struct ath5k_hw *ah)
-{
-       ath5k_hw_reg_write(ah, 0, AR5K_PHYERR_CNT1);
-       ath5k_hw_reg_write(ah, 0, AR5K_PHYERR_CNT2);
-       ath5k_hw_reg_write(ah, 0, AR5K_PHYERR_CNT1_MASK);
-       ath5k_hw_reg_write(ah, 0, AR5K_PHYERR_CNT2_MASK);
-
-       /* not in use */
-       ath5k_hw_reg_write(ah, 0, AR5K_OFDM_FIL_CNT);
-       ath5k_hw_reg_write(ah, 0, AR5K_CCK_FIL_CNT);
-}
-
-
-/**
- * ath5k_ani_init() - Initialize ANI
- * @mode: Which mode to use (auto, manual high, manual low, off)
- *
- * Initialize ANI according to mode.
- */
-void
-ath5k_ani_init(struct ath5k_hw *ah, enum ath5k_ani_mode mode)
-{
-       /* ANI is only possible on 5212 and newer */
-       if (ah->ah_version < AR5K_AR5212)
-               return;
-
-       /* clear old state information */
-       memset(&ah->ah_sc->ani_state, 0, sizeof(ah->ah_sc->ani_state));
-
-       /* older hardware has more spur levels than newer */
-       if (ah->ah_mac_srev < AR5K_SREV_AR2414)
-               ah->ah_sc->ani_state.max_spur_level = 7;
-       else
-               ah->ah_sc->ani_state.max_spur_level = 2;
-
-       /* initial values for our ani parameters */
-       if (mode == ATH5K_ANI_MODE_OFF) {
-               ATH5K_DBG_UNLIMIT(ah->ah_sc, ATH5K_DEBUG_ANI, "ANI off\n");
-       } else if  (mode == ATH5K_ANI_MODE_MANUAL_LOW) {
-               ATH5K_DBG_UNLIMIT(ah->ah_sc, ATH5K_DEBUG_ANI,
-                       "ANI manual low -> high sensitivity\n");
-               ath5k_ani_set_noise_immunity_level(ah, 0);
-               ath5k_ani_set_spur_immunity_level(ah, 0);
-               ath5k_ani_set_firstep_level(ah, 0);
-               ath5k_ani_set_ofdm_weak_signal_detection(ah, true);
-               ath5k_ani_set_cck_weak_signal_detection(ah, true);
-       } else if (mode == ATH5K_ANI_MODE_MANUAL_HIGH) {
-               ATH5K_DBG_UNLIMIT(ah->ah_sc, ATH5K_DEBUG_ANI,
-                       "ANI manual high -> low sensitivity\n");
-               ath5k_ani_set_noise_immunity_level(ah,
-                                       ATH5K_ANI_MAX_NOISE_IMM_LVL);
-               ath5k_ani_set_spur_immunity_level(ah,
-                                       ah->ah_sc->ani_state.max_spur_level);
-               ath5k_ani_set_firstep_level(ah, ATH5K_ANI_MAX_FIRSTEP_LVL);
-               ath5k_ani_set_ofdm_weak_signal_detection(ah, false);
-               ath5k_ani_set_cck_weak_signal_detection(ah, false);
-       } else if (mode == ATH5K_ANI_MODE_AUTO) {
-               ATH5K_DBG_UNLIMIT(ah->ah_sc, ATH5K_DEBUG_ANI, "ANI auto\n");
-               ath5k_ani_set_noise_immunity_level(ah, 0);
-               ath5k_ani_set_spur_immunity_level(ah, 0);
-               ath5k_ani_set_firstep_level(ah, 0);
-               ath5k_ani_set_ofdm_weak_signal_detection(ah, true);
-               ath5k_ani_set_cck_weak_signal_detection(ah, false);
-       }
-
-       /* newer hardware has PHY error counter registers which we can use to
-        * get OFDM and CCK error counts. older hardware has to set rxfilter and
-        * report every single PHY error by calling ath5k_ani_phy_error_report()
-        */
-       if (mode == ATH5K_ANI_MODE_AUTO) {
-               if (ah->ah_capabilities.cap_has_phyerr_counters)
-                       ath5k_enable_phy_err_counters(ah);
-               else
-                       ath5k_hw_set_rx_filter(ah, ath5k_hw_get_rx_filter(ah) |
-                                                  AR5K_RX_FILTER_PHYERR);
-       } else {
-               if (ah->ah_capabilities.cap_has_phyerr_counters)
-                       ath5k_disable_phy_err_counters(ah);
-               else
-                       ath5k_hw_set_rx_filter(ah, ath5k_hw_get_rx_filter(ah) &
-                                                  ~AR5K_RX_FILTER_PHYERR);
-       }
-
-       ah->ah_sc->ani_state.ani_mode = mode;
-}
-
-
-/*** DEBUG ***/
-
-#ifdef CONFIG_ATH5K_DEBUG
-
-void
-ath5k_ani_print_counters(struct ath5k_hw *ah)
-{
-       /* clears too */
-       printk(KERN_NOTICE "ACK fail\t%d\n",
-               ath5k_hw_reg_read(ah, AR5K_ACK_FAIL));
-       printk(KERN_NOTICE "RTS fail\t%d\n",
-               ath5k_hw_reg_read(ah, AR5K_RTS_FAIL));
-       printk(KERN_NOTICE "RTS success\t%d\n",
-               ath5k_hw_reg_read(ah, AR5K_RTS_OK));
-       printk(KERN_NOTICE "FCS error\t%d\n",
-               ath5k_hw_reg_read(ah, AR5K_FCS_FAIL));
-
-       /* no clear */
-       printk(KERN_NOTICE "tx\t%d\n",
-               ath5k_hw_reg_read(ah, AR5K_PROFCNT_TX));
-       printk(KERN_NOTICE "rx\t%d\n",
-               ath5k_hw_reg_read(ah, AR5K_PROFCNT_RX));
-       printk(KERN_NOTICE "busy\t%d\n",
-               ath5k_hw_reg_read(ah, AR5K_PROFCNT_RXCLR));
-       printk(KERN_NOTICE "cycles\t%d\n",
-               ath5k_hw_reg_read(ah, AR5K_PROFCNT_CYCLE));
-
-       printk(KERN_NOTICE "AR5K_PHYERR_CNT1\t%d\n",
-               ath5k_hw_reg_read(ah, AR5K_PHYERR_CNT1));
-       printk(KERN_NOTICE "AR5K_PHYERR_CNT2\t%d\n",
-               ath5k_hw_reg_read(ah, AR5K_PHYERR_CNT2));
-       printk(KERN_NOTICE "AR5K_OFDM_FIL_CNT\t%d\n",
-               ath5k_hw_reg_read(ah, AR5K_OFDM_FIL_CNT));
-       printk(KERN_NOTICE "AR5K_CCK_FIL_CNT\t%d\n",
-               ath5k_hw_reg_read(ah, AR5K_CCK_FIL_CNT));
-}
-
-#endif
diff --git a/drivers/net/wireless/ath/ath5k/ani.h b/drivers/net/wireless/ath/ath5k/ani.h
deleted file mode 100644 (file)
index 55cf26d..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2010 Bruno Randolf <br1@einfach.org>
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-#ifndef ANI_H
-#define ANI_H
-
-/* these thresholds are relative to the ATH5K_ANI_LISTEN_PERIOD */
-#define ATH5K_ANI_LISTEN_PERIOD                100
-#define ATH5K_ANI_OFDM_TRIG_HIGH       500
-#define ATH5K_ANI_OFDM_TRIG_LOW                200
-#define ATH5K_ANI_CCK_TRIG_HIGH                200
-#define ATH5K_ANI_CCK_TRIG_LOW         100
-
-/* average beacon RSSI thresholds */
-#define ATH5K_ANI_RSSI_THR_HIGH                40
-#define ATH5K_ANI_RSSI_THR_LOW         7
-
-/* maximum availabe levels */
-#define ATH5K_ANI_MAX_FIRSTEP_LVL      2
-#define ATH5K_ANI_MAX_NOISE_IMM_LVL    1
-
-
-/**
- * enum ath5k_ani_mode - mode for ANI / noise sensitivity
- *
- * @ATH5K_ANI_MODE_OFF: Turn ANI off. This can be useful to just stop the ANI
- *     algorithm after it has been on auto mode.
- * ATH5K_ANI_MODE_MANUAL_LOW: Manually set all immunity parameters to low,
- *     maximizing sensitivity. ANI will not run.
- * ATH5K_ANI_MODE_MANUAL_HIGH: Manually set all immunity parameters to high,
- *     minimizing sensitivity. ANI will not run.
- * ATH5K_ANI_MODE_AUTO: Automatically control immunity parameters based on the
- *     amount of OFDM and CCK frame errors (default).
- */
-enum ath5k_ani_mode {
-       ATH5K_ANI_MODE_OFF              = 0,
-       ATH5K_ANI_MODE_MANUAL_LOW       = 1,
-       ATH5K_ANI_MODE_MANUAL_HIGH      = 2,
-       ATH5K_ANI_MODE_AUTO             = 3
-};
-
-
-/**
- * struct ath5k_ani_state - ANI state and associated counters
- *
- * @max_spur_level: the maximum spur level is chip dependent
- */
-struct ath5k_ani_state {
-       enum ath5k_ani_mode     ani_mode;
-
-       /* state */
-       int                     noise_imm_level;
-       int                     spur_level;
-       int                     firstep_level;
-       bool                    ofdm_weak_sig;
-       bool                    cck_weak_sig;
-
-       int                     max_spur_level;
-
-       /* used by the algorithm */
-       unsigned int            listen_time;
-       unsigned int            ofdm_errors;
-       unsigned int            cck_errors;
-
-       /* debug/statistics only: numbers from last ANI calibration */
-       unsigned int            pfc_tx;
-       unsigned int            pfc_rx;
-       unsigned int            pfc_busy;
-       unsigned int            pfc_cycles;
-       unsigned int            last_listen;
-       unsigned int            last_ofdm_errors;
-       unsigned int            last_cck_errors;
-       unsigned int            sum_ofdm_errors;
-       unsigned int            sum_cck_errors;
-};
-
-void ath5k_ani_init(struct ath5k_hw *ah, enum ath5k_ani_mode mode);
-void ath5k_ani_mib_intr(struct ath5k_hw *ah);
-void ath5k_ani_calibration(struct ath5k_hw *ah);
-void ath5k_ani_phy_error_report(struct ath5k_hw *ah,
-                               enum ath5k_phy_error_code phyerr);
-
-/* for manual control */
-void ath5k_ani_set_noise_immunity_level(struct ath5k_hw *ah, int level);
-void ath5k_ani_set_spur_immunity_level(struct ath5k_hw *ah, int level);
-void ath5k_ani_set_firstep_level(struct ath5k_hw *ah, int level);
-void ath5k_ani_set_ofdm_weak_signal_detection(struct ath5k_hw *ah, bool on);
-void ath5k_ani_set_cck_weak_signal_detection(struct ath5k_hw *ah, bool on);
-
-void ath5k_ani_print_counters(struct ath5k_hw *ah);
-
-#endif /* ANI_H */
diff --git a/drivers/net/wireless/ath/ath5k/sysfs.c b/drivers/net/wireless/ath/ath5k/sysfs.c
deleted file mode 100644 (file)
index 90757de..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-#include <linux/device.h>
-#include <linux/pci.h>
-
-#include "base.h"
-#include "ath5k.h"
-#include "reg.h"
-
-#define SIMPLE_SHOW_STORE(name, get, set)                              \
-static ssize_t ath5k_attr_show_##name(struct device *dev,              \
-                       struct device_attribute *attr,                  \
-                       char *buf)                                      \
-{                                                                      \
-       struct ath5k_softc *sc = dev_get_drvdata(dev);                  \
-       return snprintf(buf, PAGE_SIZE, "%d\n", get);                   \
-}                                                                      \
-                                                                       \
-static ssize_t ath5k_attr_store_##name(struct device *dev,             \
-                       struct device_attribute *attr,                  \
-                       const char *buf, size_t count)                  \
-{                                                                      \
-       struct ath5k_softc *sc = dev_get_drvdata(dev);                  \
-       int val;                                                        \
-                                                                       \
-       val = (int)simple_strtoul(buf, NULL, 10);                       \
-       set(sc->ah, val);                                               \
-       return count;                                                   \
-}                                                                      \
-static DEVICE_ATTR(name, S_IRUGO | S_IWUSR,                            \
-                  ath5k_attr_show_##name, ath5k_attr_store_##name)
-
-#define SIMPLE_SHOW(name, get)                                         \
-static ssize_t ath5k_attr_show_##name(struct device *dev,              \
-                       struct device_attribute *attr,                  \
-                       char *buf)                                      \
-{                                                                      \
-       struct ath5k_softc *sc = dev_get_drvdata(dev);                  \
-       return snprintf(buf, PAGE_SIZE, "%d\n", get);                   \
-}                                                                      \
-static DEVICE_ATTR(name, S_IRUGO, ath5k_attr_show_##name, NULL)
-
-/*** ANI ***/
-
-SIMPLE_SHOW_STORE(ani_mode, sc->ani_state.ani_mode, ath5k_ani_init);
-SIMPLE_SHOW_STORE(noise_immunity_level, sc->ani_state.noise_imm_level,
-                       ath5k_ani_set_noise_immunity_level);
-SIMPLE_SHOW_STORE(spur_level, sc->ani_state.spur_level,
-                       ath5k_ani_set_spur_immunity_level);
-SIMPLE_SHOW_STORE(firstep_level, sc->ani_state.firstep_level,
-                       ath5k_ani_set_firstep_level);
-SIMPLE_SHOW_STORE(ofdm_weak_signal_detection, sc->ani_state.ofdm_weak_sig,
-                       ath5k_ani_set_ofdm_weak_signal_detection);
-SIMPLE_SHOW_STORE(cck_weak_signal_detection, sc->ani_state.cck_weak_sig,
-                       ath5k_ani_set_cck_weak_signal_detection);
-SIMPLE_SHOW(spur_level_max, sc->ani_state.max_spur_level);
-
-static ssize_t ath5k_attr_show_noise_immunity_level_max(struct device *dev,
-                       struct device_attribute *attr,
-                       char *buf)
-{
-       return snprintf(buf, PAGE_SIZE, "%d\n", ATH5K_ANI_MAX_NOISE_IMM_LVL);
-}
-static DEVICE_ATTR(noise_immunity_level_max, S_IRUGO,
-                  ath5k_attr_show_noise_immunity_level_max, NULL);
-
-static ssize_t ath5k_attr_show_firstep_level_max(struct device *dev,
-                       struct device_attribute *attr,
-                       char *buf)
-{
-       return snprintf(buf, PAGE_SIZE, "%d\n", ATH5K_ANI_MAX_FIRSTEP_LVL);
-}
-static DEVICE_ATTR(firstep_level_max, S_IRUGO,
-                  ath5k_attr_show_firstep_level_max, NULL);
-
-static struct attribute *ath5k_sysfs_entries_ani[] = {
-       &dev_attr_ani_mode.attr,
-       &dev_attr_noise_immunity_level.attr,
-       &dev_attr_spur_level.attr,
-       &dev_attr_firstep_level.attr,
-       &dev_attr_ofdm_weak_signal_detection.attr,
-       &dev_attr_cck_weak_signal_detection.attr,
-       &dev_attr_noise_immunity_level_max.attr,
-       &dev_attr_spur_level_max.attr,
-       &dev_attr_firstep_level_max.attr,
-       NULL
-};
-
-static struct attribute_group ath5k_attribute_group_ani = {
-       .name = "ani",
-       .attrs = ath5k_sysfs_entries_ani,
-};
-
-
-/*** register / unregister ***/
-
-int
-ath5k_sysfs_register(struct ath5k_softc *sc)
-{
-       struct device *dev = &sc->pdev->dev;
-       int err;
-
-       err = sysfs_create_group(&dev->kobj, &ath5k_attribute_group_ani);
-       if (err) {
-               ATH5K_ERR(sc, "failed to create sysfs group\n");
-               return err;
-       }
-
-       return 0;
-}
-
-void
-ath5k_sysfs_unregister(struct ath5k_softc *sc)
-{
-       struct device *dev = &sc->pdev->dev;
-
-       sysfs_remove_group(&dev->kobj, &ath5k_attribute_group_ani);
-}
diff --git a/drivers/net/wireless/ath/ath9k/ar5008_initvals.h b/drivers/net/wireless/ath/ath9k/ar5008_initvals.h
deleted file mode 100644 (file)
index 36f7d06..0000000
+++ /dev/null
@@ -1,673 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-static const u32 ar5416Modes[][6] = {
-       {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0},
-       {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0},
-       {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180},
-       {0x000010f0, 0x0000a000, 0x00014000, 0x00016000, 0x0000b000, 0x00014008},
-       {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0},
-       {0x0000801c, 0x128d93a7, 0x128d93cf, 0x12e013d7, 0x12e013ab, 0x098813cf},
-       {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810, 0x08f04810},
-       {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a, 0x0000320a},
-       {0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303},
-       {0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200},
-       {0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e},
-       {0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001},
-       {0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e},
-       {0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007},
-       {0x00009844, 0x1372161e, 0x1372161e, 0x137216a0, 0x137216a0, 0x137216a0},
-       {0x00009848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68},
-       {0x0000a848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68},
-       {0x0000b848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68},
-       {0x00009850, 0x6c48b4e0, 0x6d48b4e0, 0x6d48b0de, 0x6c48b0de, 0x6c48b0de},
-       {0x00009858, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e},
-       {0x0000985c, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e, 0x31395d5e},
-       {0x00009860, 0x00049d18, 0x00049d18, 0x00049d18, 0x00049d18, 0x00049d18},
-       {0x00009864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00},
-       {0x00009868, 0x409a4190, 0x409a4190, 0x409a4190, 0x409a4190, 0x409a4190},
-       {0x0000986c, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081},
-       {0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0},
-       {0x00009918, 0x000001b8, 0x00000370, 0x00000268, 0x00000134, 0x00000134},
-       {0x00009924, 0xd0058a0b, 0xd0058a0b, 0xd0058a0b, 0xd0058a0b, 0xd0058a0b},
-       {0x00009944, 0xffb81020, 0xffb81020, 0xffb81020, 0xffb81020, 0xffb81020},
-       {0x00009960, 0x00000900, 0x00000900, 0x00012d80, 0x00012d80, 0x00012d80},
-       {0x0000a960, 0x00000900, 0x00000900, 0x00012d80, 0x00012d80, 0x00012d80},
-       {0x0000b960, 0x00000900, 0x00000900, 0x00012d80, 0x00012d80, 0x00012d80},
-       {0x00009964, 0x00000000, 0x00000000, 0x00001120, 0x00001120, 0x00001120},
-       {0x000099bc, 0x001a0a00, 0x001a0a00, 0x001a0a00, 0x001a0a00, 0x001a0a00},
-       {0x000099c0, 0x038919be, 0x038919be, 0x038919be, 0x038919be, 0x038919be},
-       {0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77},
-       {0x000099c8, 0x6af6532c, 0x6af6532c, 0x6af6532c, 0x6af6532c, 0x6af6532c},
-       {0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8},
-       {0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384},
-       {0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a204, 0x00000880, 0x00000880, 0x00000880, 0x00000880, 0x00000880},
-       {0x0000a208, 0xd6be4788, 0xd6be4788, 0xd03e4788, 0xd03e4788, 0xd03e4788},
-       {0x0000a20c, 0x002ec1e0, 0x002ec1e0, 0x002ac120, 0x002ac120, 0x002ac120},
-       {0x0000b20c, 0x002ec1e0, 0x002ec1e0, 0x002ac120, 0x002ac120, 0x002ac120},
-       {0x0000c20c, 0x002ec1e0, 0x002ec1e0, 0x002ac120, 0x002ac120, 0x002ac120},
-       {0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a},
-       {0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000},
-       {0x0000a274, 0x0a1a9caa, 0x0a1a9caa, 0x0a1a7caa, 0x0a1a7caa, 0x0a1a7caa},
-       {0x0000a300, 0x18010000, 0x18010000, 0x18010000, 0x18010000, 0x18010000},
-       {0x0000a304, 0x30032602, 0x30032602, 0x2e032402, 0x2e032402, 0x2e032402},
-       {0x0000a308, 0x48073e06, 0x48073e06, 0x4a0a3c06, 0x4a0a3c06, 0x4a0a3c06},
-       {0x0000a30c, 0x560b4c0a, 0x560b4c0a, 0x621a540b, 0x621a540b, 0x621a540b},
-       {0x0000a310, 0x641a600f, 0x641a600f, 0x764f6c1b, 0x764f6c1b, 0x764f6c1b},
-       {0x0000a314, 0x7a4f6e1b, 0x7a4f6e1b, 0x845b7a5a, 0x845b7a5a, 0x845b7a5a},
-       {0x0000a318, 0x8c5b7e5a, 0x8c5b7e5a, 0x950f8ccf, 0x950f8ccf, 0x950f8ccf},
-       {0x0000a31c, 0x9d0f96cf, 0x9d0f96cf, 0xa5cf9b4f, 0xa5cf9b4f, 0xa5cf9b4f},
-       {0x0000a320, 0xb51fa69f, 0xb51fa69f, 0xbddfaf1f, 0xbddfaf1f, 0xbddfaf1f},
-       {0x0000a324, 0xcb3fbd07, 0xcb3fbcbf, 0xd1ffc93f, 0xd1ffc93f, 0xd1ffc93f},
-       {0x0000a328, 0x0000d7bf, 0x0000d7bf, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a32c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a330, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-};
-
-static const u32 ar5416Common[][2] = {
-       /* Addr      allmodes  */
-       {0x0000000c, 0x00000000},
-       {0x00000030, 0x00020015},
-       {0x00000034, 0x00000005},
-       {0x00000040, 0x00000000},
-       {0x00000044, 0x00000008},
-       {0x00000048, 0x00000008},
-       {0x0000004c, 0x00000010},
-       {0x00000050, 0x00000000},
-       {0x00000054, 0x0000001f},
-       {0x00000800, 0x00000000},
-       {0x00000804, 0x00000000},
-       {0x00000808, 0x00000000},
-       {0x0000080c, 0x00000000},
-       {0x00000810, 0x00000000},
-       {0x00000814, 0x00000000},
-       {0x00000818, 0x00000000},
-       {0x0000081c, 0x00000000},
-       {0x00000820, 0x00000000},
-       {0x00000824, 0x00000000},
-       {0x00001040, 0x002ffc0f},
-       {0x00001044, 0x002ffc0f},
-       {0x00001048, 0x002ffc0f},
-       {0x0000104c, 0x002ffc0f},
-       {0x00001050, 0x002ffc0f},
-       {0x00001054, 0x002ffc0f},
-       {0x00001058, 0x002ffc0f},
-       {0x0000105c, 0x002ffc0f},
-       {0x00001060, 0x002ffc0f},
-       {0x00001064, 0x002ffc0f},
-       {0x00001230, 0x00000000},
-       {0x00001270, 0x00000000},
-       {0x00001038, 0x00000000},
-       {0x00001078, 0x00000000},
-       {0x000010b8, 0x00000000},
-       {0x000010f8, 0x00000000},
-       {0x00001138, 0x00000000},
-       {0x00001178, 0x00000000},
-       {0x000011b8, 0x00000000},
-       {0x000011f8, 0x00000000},
-       {0x00001238, 0x00000000},
-       {0x00001278, 0x00000000},
-       {0x000012b8, 0x00000000},
-       {0x000012f8, 0x00000000},
-       {0x00001338, 0x00000000},
-       {0x00001378, 0x00000000},
-       {0x000013b8, 0x00000000},
-       {0x000013f8, 0x00000000},
-       {0x00001438, 0x00000000},
-       {0x00001478, 0x00000000},
-       {0x000014b8, 0x00000000},
-       {0x000014f8, 0x00000000},
-       {0x00001538, 0x00000000},
-       {0x00001578, 0x00000000},
-       {0x000015b8, 0x00000000},
-       {0x000015f8, 0x00000000},
-       {0x00001638, 0x00000000},
-       {0x00001678, 0x00000000},
-       {0x000016b8, 0x00000000},
-       {0x000016f8, 0x00000000},
-       {0x00001738, 0x00000000},
-       {0x00001778, 0x00000000},
-       {0x000017b8, 0x00000000},
-       {0x000017f8, 0x00000000},
-       {0x0000103c, 0x00000000},
-       {0x0000107c, 0x00000000},
-       {0x000010bc, 0x00000000},
-       {0x000010fc, 0x00000000},
-       {0x0000113c, 0x00000000},
-       {0x0000117c, 0x00000000},
-       {0x000011bc, 0x00000000},
-       {0x000011fc, 0x00000000},
-       {0x0000123c, 0x00000000},
-       {0x0000127c, 0x00000000},
-       {0x000012bc, 0x00000000},
-       {0x000012fc, 0x00000000},
-       {0x0000133c, 0x00000000},
-       {0x0000137c, 0x00000000},
-       {0x000013bc, 0x00000000},
-       {0x000013fc, 0x00000000},
-       {0x0000143c, 0x00000000},
-       {0x0000147c, 0x00000000},
-       {0x00004030, 0x00000002},
-       {0x0000403c, 0x00000002},
-       {0x00007010, 0x00000000},
-       {0x00007038, 0x000004c2},
-       {0x00008004, 0x00000000},
-       {0x00008008, 0x00000000},
-       {0x0000800c, 0x00000000},
-       {0x00008018, 0x00000700},
-       {0x00008020, 0x00000000},
-       {0x00008038, 0x00000000},
-       {0x0000803c, 0x00000000},
-       {0x00008048, 0x40000000},
-       {0x00008054, 0x00000000},
-       {0x00008058, 0x00000000},
-       {0x0000805c, 0x000fc78f},
-       {0x00008060, 0x0000000f},
-       {0x00008064, 0x00000000},
-       {0x000080c0, 0x2a82301a},
-       {0x000080c4, 0x05dc01e0},
-       {0x000080c8, 0x1f402710},
-       {0x000080cc, 0x01f40000},
-       {0x000080d0, 0x00001e00},
-       {0x000080d4, 0x00000000},
-       {0x000080d8, 0x00400000},
-       {0x000080e0, 0xffffffff},
-       {0x000080e4, 0x0000ffff},
-       {0x000080e8, 0x003f3f3f},
-       {0x000080ec, 0x00000000},
-       {0x000080f0, 0x00000000},
-       {0x000080f4, 0x00000000},
-       {0x000080f8, 0x00000000},
-       {0x000080fc, 0x00020000},
-       {0x00008100, 0x00020000},
-       {0x00008104, 0x00000001},
-       {0x00008108, 0x00000052},
-       {0x0000810c, 0x00000000},
-       {0x00008110, 0x00000168},
-       {0x00008118, 0x000100aa},
-       {0x0000811c, 0x00003210},
-       {0x00008124, 0x00000000},
-       {0x00008128, 0x00000000},
-       {0x0000812c, 0x00000000},
-       {0x00008130, 0x00000000},
-       {0x00008134, 0x00000000},
-       {0x00008138, 0x00000000},
-       {0x0000813c, 0x00000000},
-       {0x00008144, 0xffffffff},
-       {0x00008168, 0x00000000},
-       {0x0000816c, 0x00000000},
-       {0x00008170, 0x32143320},
-       {0x00008174, 0xfaa4fa50},
-       {0x00008178, 0x00000100},
-       {0x0000817c, 0x00000000},
-       {0x000081c4, 0x00000000},
-       {0x000081ec, 0x00000000},
-       {0x000081f0, 0x00000000},
-       {0x000081f4, 0x00000000},
-       {0x000081f8, 0x00000000},
-       {0x000081fc, 0x00000000},
-       {0x00008200, 0x00000000},
-       {0x00008204, 0x00000000},
-       {0x00008208, 0x00000000},
-       {0x0000820c, 0x00000000},
-       {0x00008210, 0x00000000},
-       {0x00008214, 0x00000000},
-       {0x00008218, 0x00000000},
-       {0x0000821c, 0x00000000},
-       {0x00008220, 0x00000000},
-       {0x00008224, 0x00000000},
-       {0x00008228, 0x00000000},
-       {0x0000822c, 0x00000000},
-       {0x00008230, 0x00000000},
-       {0x00008234, 0x00000000},
-       {0x00008238, 0x00000000},
-       {0x0000823c, 0x00000000},
-       {0x00008240, 0x00100000},
-       {0x00008244, 0x0010f400},
-       {0x00008248, 0x00000100},
-       {0x0000824c, 0x0001e800},
-       {0x00008250, 0x00000000},
-       {0x00008254, 0x00000000},
-       {0x00008258, 0x00000000},
-       {0x0000825c, 0x400000ff},
-       {0x00008260, 0x00080922},
-       {0x00008264, 0x88000010},
-       {0x00008270, 0x00000000},
-       {0x00008274, 0x40000000},
-       {0x00008278, 0x003e4180},
-       {0x0000827c, 0x00000000},
-       {0x00008284, 0x0000002c},
-       {0x00008288, 0x0000002c},
-       {0x0000828c, 0x00000000},
-       {0x00008294, 0x00000000},
-       {0x00008298, 0x00000000},
-       {0x00008300, 0x00000000},
-       {0x00008304, 0x00000000},
-       {0x00008308, 0x00000000},
-       {0x0000830c, 0x00000000},
-       {0x00008310, 0x00000000},
-       {0x00008314, 0x00000000},
-       {0x00008318, 0x00000000},
-       {0x00008328, 0x00000000},
-       {0x0000832c, 0x00000007},
-       {0x00008330, 0x00000302},
-       {0x00008334, 0x00000e00},
-       {0x00008338, 0x00070000},
-       {0x0000833c, 0x00000000},
-       {0x00008340, 0x000107ff},
-       {0x00009808, 0x00000000},
-       {0x0000980c, 0xad848e19},
-       {0x00009810, 0x7d14e000},
-       {0x00009814, 0x9c0a9f6b},
-       {0x0000981c, 0x00000000},
-       {0x0000982c, 0x0000a000},
-       {0x00009830, 0x00000000},
-       {0x0000983c, 0x00200400},
-       {0x00009840, 0x206a002e},
-       {0x0000984c, 0x1284233c},
-       {0x00009854, 0x00000859},
-       {0x00009900, 0x00000000},
-       {0x00009904, 0x00000000},
-       {0x00009908, 0x00000000},
-       {0x0000990c, 0x00000000},
-       {0x0000991c, 0x10000fff},
-       {0x00009920, 0x05100000},
-       {0x0000a920, 0x05100000},
-       {0x0000b920, 0x05100000},
-       {0x00009928, 0x00000001},
-       {0x0000992c, 0x00000004},
-       {0x00009934, 0x1e1f2022},
-       {0x00009938, 0x0a0b0c0d},
-       {0x0000993c, 0x00000000},
-       {0x00009948, 0x9280b212},
-       {0x0000994c, 0x00020028},
-       {0x00009954, 0x5d50e188},
-       {0x00009958, 0x00081fff},
-       {0x0000c95c, 0x004b6a8e},
-       {0x0000c968, 0x000003ce},
-       {0x00009970, 0x190fb515},
-       {0x00009974, 0x00000000},
-       {0x00009978, 0x00000001},
-       {0x0000997c, 0x00000000},
-       {0x00009980, 0x00000000},
-       {0x00009984, 0x00000000},
-       {0x00009988, 0x00000000},
-       {0x0000998c, 0x00000000},
-       {0x00009990, 0x00000000},
-       {0x00009994, 0x00000000},
-       {0x00009998, 0x00000000},
-       {0x0000999c, 0x00000000},
-       {0x000099a0, 0x00000000},
-       {0x000099a4, 0x00000001},
-       {0x000099a8, 0x001fff00},
-       {0x000099ac, 0x00000000},
-       {0x000099b0, 0x03051000},
-       {0x000099dc, 0x00000000},
-       {0x000099e0, 0x00000200},
-       {0x000099e4, 0xaaaaaaaa},
-       {0x000099e8, 0x3c466478},
-       {0x000099ec, 0x000000aa},
-       {0x000099fc, 0x00001042},
-       {0x00009b00, 0x00000000},
-       {0x00009b04, 0x00000001},
-       {0x00009b08, 0x00000002},
-       {0x00009b0c, 0x00000003},
-       {0x00009b10, 0x00000004},
-       {0x00009b14, 0x00000005},
-       {0x00009b18, 0x00000008},
-       {0x00009b1c, 0x00000009},
-       {0x00009b20, 0x0000000a},
-       {0x00009b24, 0x0000000b},
-       {0x00009b28, 0x0000000c},
-       {0x00009b2c, 0x0000000d},
-       {0x00009b30, 0x00000010},
-       {0x00009b34, 0x00000011},
-       {0x00009b38, 0x00000012},
-       {0x00009b3c, 0x00000013},
-       {0x00009b40, 0x00000014},
-       {0x00009b44, 0x00000015},
-       {0x00009b48, 0x00000018},
-       {0x00009b4c, 0x00000019},
-       {0x00009b50, 0x0000001a},
-       {0x00009b54, 0x0000001b},
-       {0x00009b58, 0x0000001c},
-       {0x00009b5c, 0x0000001d},
-       {0x00009b60, 0x00000020},
-       {0x00009b64, 0x00000021},
-       {0x00009b68, 0x00000022},
-       {0x00009b6c, 0x00000023},
-       {0x00009b70, 0x00000024},
-       {0x00009b74, 0x00000025},
-       {0x00009b78, 0x00000028},
-       {0x00009b7c, 0x00000029},
-       {0x00009b80, 0x0000002a},
-       {0x00009b84, 0x0000002b},
-       {0x00009b88, 0x0000002c},
-       {0x00009b8c, 0x0000002d},
-       {0x00009b90, 0x00000030},
-       {0x00009b94, 0x00000031},
-       {0x00009b98, 0x00000032},
-       {0x00009b9c, 0x00000033},
-       {0x00009ba0, 0x00000034},
-       {0x00009ba4, 0x00000035},
-       {0x00009ba8, 0x00000035},
-       {0x00009bac, 0x00000035},
-       {0x00009bb0, 0x00000035},
-       {0x00009bb4, 0x00000035},
-       {0x00009bb8, 0x00000035},
-       {0x00009bbc, 0x00000035},
-       {0x00009bc0, 0x00000035},
-       {0x00009bc4, 0x00000035},
-       {0x00009bc8, 0x00000035},
-       {0x00009bcc, 0x00000035},
-       {0x00009bd0, 0x00000035},
-       {0x00009bd4, 0x00000035},
-       {0x00009bd8, 0x00000035},
-       {0x00009bdc, 0x00000035},
-       {0x00009be0, 0x00000035},
-       {0x00009be4, 0x00000035},
-       {0x00009be8, 0x00000035},
-       {0x00009bec, 0x00000035},
-       {0x00009bf0, 0x00000035},
-       {0x00009bf4, 0x00000035},
-       {0x00009bf8, 0x00000010},
-       {0x00009bfc, 0x0000001a},
-       {0x0000a210, 0x40806333},
-       {0x0000a214, 0x00106c10},
-       {0x0000a218, 0x009c4060},
-       {0x0000a220, 0x018830c6},
-       {0x0000a224, 0x00000400},
-       {0x0000a228, 0x00000bb5},
-       {0x0000a22c, 0x00000011},
-       {0x0000a234, 0x20202020},
-       {0x0000a238, 0x20202020},
-       {0x0000a23c, 0x13c889af},
-       {0x0000a240, 0x38490a20},
-       {0x0000a244, 0x00007bb6},
-       {0x0000a248, 0x0fff3ffc},
-       {0x0000a24c, 0x00000001},
-       {0x0000a250, 0x0000a000},
-       {0x0000a254, 0x00000000},
-       {0x0000a258, 0x0cc75380},
-       {0x0000a25c, 0x0f0f0f01},
-       {0x0000a260, 0xdfa91f01},
-       {0x0000a268, 0x00000000},
-       {0x0000a26c, 0x0e79e5c6},
-       {0x0000b26c, 0x0e79e5c6},
-       {0x0000c26c, 0x0e79e5c6},
-       {0x0000d270, 0x00820820},
-       {0x0000a278, 0x1ce739ce},
-       {0x0000a27c, 0x051701ce},
-       {0x0000a338, 0x00000000},
-       {0x0000a33c, 0x00000000},
-       {0x0000a340, 0x00000000},
-       {0x0000a344, 0x00000000},
-       {0x0000a348, 0x3fffffff},
-       {0x0000a34c, 0x3fffffff},
-       {0x0000a350, 0x3fffffff},
-       {0x0000a354, 0x0003ffff},
-       {0x0000a358, 0x79a8aa1f},
-       {0x0000d35c, 0x07ffffef},
-       {0x0000d360, 0x0fffffe7},
-       {0x0000d364, 0x17ffffe5},
-       {0x0000d368, 0x1fffffe4},
-       {0x0000d36c, 0x37ffffe3},
-       {0x0000d370, 0x3fffffe3},
-       {0x0000d374, 0x57ffffe3},
-       {0x0000d378, 0x5fffffe2},
-       {0x0000d37c, 0x7fffffe2},
-       {0x0000d380, 0x7f3c7bba},
-       {0x0000d384, 0xf3307ff0},
-       {0x0000a388, 0x08000000},
-       {0x0000a38c, 0x20202020},
-       {0x0000a390, 0x20202020},
-       {0x0000a394, 0x1ce739ce},
-       {0x0000a398, 0x000001ce},
-       {0x0000a39c, 0x00000001},
-       {0x0000a3a0, 0x00000000},
-       {0x0000a3a4, 0x00000000},
-       {0x0000a3a8, 0x00000000},
-       {0x0000a3ac, 0x00000000},
-       {0x0000a3b0, 0x00000000},
-       {0x0000a3b4, 0x00000000},
-       {0x0000a3b8, 0x00000000},
-       {0x0000a3bc, 0x00000000},
-       {0x0000a3c0, 0x00000000},
-       {0x0000a3c4, 0x00000000},
-       {0x0000a3c8, 0x00000246},
-       {0x0000a3cc, 0x20202020},
-       {0x0000a3d0, 0x20202020},
-       {0x0000a3d4, 0x20202020},
-       {0x0000a3dc, 0x1ce739ce},
-       {0x0000a3e0, 0x000001ce},
-};
-
-static const u32 ar5416Bank0[][2] = {
-       /* Addr      allmodes  */
-       {0x000098b0, 0x1e5795e5},
-       {0x000098e0, 0x02008020},
-};
-
-static const u32 ar5416BB_RfGain[][3] = {
-       /* Addr      5G_HT20     5G_HT40   */
-       {0x00009a00, 0x00000000, 0x00000000},
-       {0x00009a04, 0x00000040, 0x00000040},
-       {0x00009a08, 0x00000080, 0x00000080},
-       {0x00009a0c, 0x000001a1, 0x00000141},
-       {0x00009a10, 0x000001e1, 0x00000181},
-       {0x00009a14, 0x00000021, 0x000001c1},
-       {0x00009a18, 0x00000061, 0x00000001},
-       {0x00009a1c, 0x00000168, 0x00000041},
-       {0x00009a20, 0x000001a8, 0x000001a8},
-       {0x00009a24, 0x000001e8, 0x000001e8},
-       {0x00009a28, 0x00000028, 0x00000028},
-       {0x00009a2c, 0x00000068, 0x00000068},
-       {0x00009a30, 0x00000189, 0x000000a8},
-       {0x00009a34, 0x000001c9, 0x00000169},
-       {0x00009a38, 0x00000009, 0x000001a9},
-       {0x00009a3c, 0x00000049, 0x000001e9},
-       {0x00009a40, 0x00000089, 0x00000029},
-       {0x00009a44, 0x00000170, 0x00000069},
-       {0x00009a48, 0x000001b0, 0x00000190},
-       {0x00009a4c, 0x000001f0, 0x000001d0},
-       {0x00009a50, 0x00000030, 0x00000010},
-       {0x00009a54, 0x00000070, 0x00000050},
-       {0x00009a58, 0x00000191, 0x00000090},
-       {0x00009a5c, 0x000001d1, 0x00000151},
-       {0x00009a60, 0x00000011, 0x00000191},
-       {0x00009a64, 0x00000051, 0x000001d1},
-       {0x00009a68, 0x00000091, 0x00000011},
-       {0x00009a6c, 0x000001b8, 0x00000051},
-       {0x00009a70, 0x000001f8, 0x00000198},
-       {0x00009a74, 0x00000038, 0x000001d8},
-       {0x00009a78, 0x00000078, 0x00000018},
-       {0x00009a7c, 0x00000199, 0x00000058},
-       {0x00009a80, 0x000001d9, 0x00000098},
-       {0x00009a84, 0x00000019, 0x00000159},
-       {0x00009a88, 0x00000059, 0x00000199},
-       {0x00009a8c, 0x00000099, 0x000001d9},
-       {0x00009a90, 0x000000d9, 0x00000019},
-       {0x00009a94, 0x000000f9, 0x00000059},
-       {0x00009a98, 0x000000f9, 0x00000099},
-       {0x00009a9c, 0x000000f9, 0x000000d9},
-       {0x00009aa0, 0x000000f9, 0x000000f9},
-       {0x00009aa4, 0x000000f9, 0x000000f9},
-       {0x00009aa8, 0x000000f9, 0x000000f9},
-       {0x00009aac, 0x000000f9, 0x000000f9},
-       {0x00009ab0, 0x000000f9, 0x000000f9},
-       {0x00009ab4, 0x000000f9, 0x000000f9},
-       {0x00009ab8, 0x000000f9, 0x000000f9},
-       {0x00009abc, 0x000000f9, 0x000000f9},
-       {0x00009ac0, 0x000000f9, 0x000000f9},
-       {0x00009ac4, 0x000000f9, 0x000000f9},
-       {0x00009ac8, 0x000000f9, 0x000000f9},
-       {0x00009acc, 0x000000f9, 0x000000f9},
-       {0x00009ad0, 0x000000f9, 0x000000f9},
-       {0x00009ad4, 0x000000f9, 0x000000f9},
-       {0x00009ad8, 0x000000f9, 0x000000f9},
-       {0x00009adc, 0x000000f9, 0x000000f9},
-       {0x00009ae0, 0x000000f9, 0x000000f9},
-       {0x00009ae4, 0x000000f9, 0x000000f9},
-       {0x00009ae8, 0x000000f9, 0x000000f9},
-       {0x00009aec, 0x000000f9, 0x000000f9},
-       {0x00009af0, 0x000000f9, 0x000000f9},
-       {0x00009af4, 0x000000f9, 0x000000f9},
-       {0x00009af8, 0x000000f9, 0x000000f9},
-       {0x00009afc, 0x000000f9, 0x000000f9},
-};
-
-static const u32 ar5416Bank1[][2] = {
-       /* Addr      allmodes  */
-       {0x000098b0, 0x02108421},
-       {0x000098ec, 0x00000008},
-};
-
-static const u32 ar5416Bank2[][2] = {
-       /* Addr      allmodes  */
-       {0x000098b0, 0x0e73ff17},
-       {0x000098e0, 0x00000420},
-};
-
-static const u32 ar5416Bank3[][3] = {
-       /* Addr      5G_HT20     5G_HT40   */
-       {0x000098f0, 0x01400018, 0x01c00018},
-};
-
-static const u32 ar5416Bank6[][3] = {
-       /* Addr      5G_HT20     5G_HT40   */
-       {0x0000989c, 0x00000000, 0x00000000},
-       {0x0000989c, 0x00000000, 0x00000000},
-       {0x0000989c, 0x00000000, 0x00000000},
-       {0x0000989c, 0x00e00000, 0x00e00000},
-       {0x0000989c, 0x005e0000, 0x005e0000},
-       {0x0000989c, 0x00120000, 0x00120000},
-       {0x0000989c, 0x00620000, 0x00620000},
-       {0x0000989c, 0x00020000, 0x00020000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x40ff0000, 0x40ff0000},
-       {0x0000989c, 0x005f0000, 0x005f0000},
-       {0x0000989c, 0x00870000, 0x00870000},
-       {0x0000989c, 0x00f90000, 0x00f90000},
-       {0x0000989c, 0x007b0000, 0x007b0000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x00f50000, 0x00f50000},
-       {0x0000989c, 0x00dc0000, 0x00dc0000},
-       {0x0000989c, 0x00110000, 0x00110000},
-       {0x0000989c, 0x006100a8, 0x006100a8},
-       {0x0000989c, 0x004210a2, 0x004210a2},
-       {0x0000989c, 0x0014008f, 0x0014008f},
-       {0x0000989c, 0x00c40003, 0x00c40003},
-       {0x0000989c, 0x003000f2, 0x003000f2},
-       {0x0000989c, 0x00440016, 0x00440016},
-       {0x0000989c, 0x00410040, 0x00410040},
-       {0x0000989c, 0x0001805e, 0x0001805e},
-       {0x0000989c, 0x0000c0ab, 0x0000c0ab},
-       {0x0000989c, 0x000000f1, 0x000000f1},
-       {0x0000989c, 0x00002081, 0x00002081},
-       {0x0000989c, 0x000000d4, 0x000000d4},
-       {0x000098d0, 0x0000000f, 0x0010000f},
-};
-
-static const u32 ar5416Bank6TPC[][3] = {
-       /* Addr      5G_HT20     5G_HT40   */
-       {0x0000989c, 0x00000000, 0x00000000},
-       {0x0000989c, 0x00000000, 0x00000000},
-       {0x0000989c, 0x00000000, 0x00000000},
-       {0x0000989c, 0x00e00000, 0x00e00000},
-       {0x0000989c, 0x005e0000, 0x005e0000},
-       {0x0000989c, 0x00120000, 0x00120000},
-       {0x0000989c, 0x00620000, 0x00620000},
-       {0x0000989c, 0x00020000, 0x00020000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x40ff0000, 0x40ff0000},
-       {0x0000989c, 0x005f0000, 0x005f0000},
-       {0x0000989c, 0x00870000, 0x00870000},
-       {0x0000989c, 0x00f90000, 0x00f90000},
-       {0x0000989c, 0x007b0000, 0x007b0000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x00f50000, 0x00f50000},
-       {0x0000989c, 0x00dc0000, 0x00dc0000},
-       {0x0000989c, 0x00110000, 0x00110000},
-       {0x0000989c, 0x006100a8, 0x006100a8},
-       {0x0000989c, 0x00423022, 0x00423022},
-       {0x0000989c, 0x201400df, 0x201400df},
-       {0x0000989c, 0x00c40002, 0x00c40002},
-       {0x0000989c, 0x003000f2, 0x003000f2},
-       {0x0000989c, 0x00440016, 0x00440016},
-       {0x0000989c, 0x00410040, 0x00410040},
-       {0x0000989c, 0x0001805e, 0x0001805e},
-       {0x0000989c, 0x0000c0ab, 0x0000c0ab},
-       {0x0000989c, 0x000000e1, 0x000000e1},
-       {0x0000989c, 0x00007081, 0x00007081},
-       {0x0000989c, 0x000000d4, 0x000000d4},
-       {0x000098d0, 0x0000000f, 0x0010000f},
-};
-
-static const u32 ar5416Bank7[][2] = {
-       /* Addr      allmodes  */
-       {0x0000989c, 0x00000500},
-       {0x0000989c, 0x00000800},
-       {0x000098cc, 0x0000000e},
-};
-
-static const u32 ar5416Addac[][2] = {
-       /* Addr      allmodes  */
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000003},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x0000000c},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000030},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000060},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000058},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x000098cc, 0x00000000},
-};
-
diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
deleted file mode 100644 (file)
index 3d2c867..0000000
+++ /dev/null
@@ -1,1642 +0,0 @@
-/*
- * Copyright (c) 2008-2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "hw.h"
-#include "hw-ops.h"
-#include "../regd.h"
-#include "ar9002_phy.h"
-
-/* All code below is for AR5008, AR9001, AR9002 */
-
-static const int firstep_table[] =
-/* level:  0   1   2   3   4   5   6   7   8  */
-       { -4, -2,  0,  2,  4,  6,  8, 10, 12 }; /* lvl 0-8, default 2 */
-
-static const int cycpwrThr1_table[] =
-/* level:  0   1   2   3   4   5   6   7   8  */
-       { -6, -4, -2,  0,  2,  4,  6,  8 };     /* lvl 0-7, default 3 */
-
-/*
- * register values to turn OFDM weak signal detection OFF
- */
-static const int m1ThreshLow_off = 127;
-static const int m2ThreshLow_off = 127;
-static const int m1Thresh_off = 127;
-static const int m2Thresh_off = 127;
-static const int m2CountThr_off =  31;
-static const int m2CountThrLow_off =  63;
-static const int m1ThreshLowExt_off = 127;
-static const int m2ThreshLowExt_off = 127;
-static const int m1ThreshExt_off = 127;
-static const int m2ThreshExt_off = 127;
-
-
-/**
- * ar5008_hw_phy_modify_rx_buffer() - perform analog swizzling of parameters
- * @rfbuf:
- * @reg32:
- * @numBits:
- * @firstBit:
- * @column:
- *
- * Performs analog "swizzling" of parameters into their location.
- * Used on external AR2133/AR5133 radios.
- */
-static void ar5008_hw_phy_modify_rx_buffer(u32 *rfBuf, u32 reg32,
-                                          u32 numBits, u32 firstBit,
-                                          u32 column)
-{
-       u32 tmp32, mask, arrayEntry, lastBit;
-       int32_t bitPosition, bitsLeft;
-
-       tmp32 = ath9k_hw_reverse_bits(reg32, numBits);
-       arrayEntry = (firstBit - 1) / 8;
-       bitPosition = (firstBit - 1) % 8;
-       bitsLeft = numBits;
-       while (bitsLeft > 0) {
-               lastBit = (bitPosition + bitsLeft > 8) ?
-                   8 : bitPosition + bitsLeft;
-               mask = (((1 << lastBit) - 1) ^ ((1 << bitPosition) - 1)) <<
-                   (column * 8);
-               rfBuf[arrayEntry] &= ~mask;
-               rfBuf[arrayEntry] |= ((tmp32 << bitPosition) <<
-                                     (column * 8)) & mask;
-               bitsLeft -= 8 - bitPosition;
-               tmp32 = tmp32 >> (8 - bitPosition);
-               bitPosition = 0;
-               arrayEntry++;
-       }
-}
-
-/*
- * Fix on 2.4 GHz band for orientation sensitivity issue by increasing
- * rf_pwd_icsyndiv.
- *
- * Theoretical Rules:
- *   if 2 GHz band
- *      if forceBiasAuto
- *         if synth_freq < 2412
- *            bias = 0
- *         else if 2412 <= synth_freq <= 2422
- *            bias = 1
- *         else // synth_freq > 2422
- *            bias = 2
- *      else if forceBias > 0
- *         bias = forceBias & 7
- *      else
- *         no change, use value from ini file
- *   else
- *      no change, invalid band
- *
- *  1st Mod:
- *    2422 also uses value of 2
- *    <approved>
- *
- *  2nd Mod:
- *    Less than 2412 uses value of 0, 2412 and above uses value of 2
- */
-static void ar5008_hw_force_bias(struct ath_hw *ah, u16 synth_freq)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-       u32 tmp_reg;
-       int reg_writes = 0;
-       u32 new_bias = 0;
-
-       if (!AR_SREV_5416(ah) || synth_freq >= 3000)
-               return;
-
-       BUG_ON(AR_SREV_9280_10_OR_LATER(ah));
-
-       if (synth_freq < 2412)
-               new_bias = 0;
-       else if (synth_freq < 2422)
-               new_bias = 1;
-       else
-               new_bias = 2;
-
-       /* pre-reverse this field */
-       tmp_reg = ath9k_hw_reverse_bits(new_bias, 3);
-
-       ath_print(common, ATH_DBG_CONFIG,
-                 "Force rf_pwd_icsyndiv to %1d on %4d\n",
-                 new_bias, synth_freq);
-
-       /* swizzle rf_pwd_icsyndiv */
-       ar5008_hw_phy_modify_rx_buffer(ah->analogBank6Data, tmp_reg, 3, 181, 3);
-
-       /* write Bank 6 with new params */
-       REG_WRITE_RF_ARRAY(&ah->iniBank6, ah->analogBank6Data, reg_writes);
-}
-
-/**
- * ar5008_hw_set_channel - tune to a channel on the external AR2133/AR5133 radios
- * @ah: atheros hardware stucture
- * @chan:
- *
- * For the external AR2133/AR5133 radios, takes the MHz channel value and set
- * the channel value. Assumes writes enabled to analog bus and bank6 register
- * cache in ah->analogBank6Data.
- */
-static int ar5008_hw_set_channel(struct ath_hw *ah, struct ath9k_channel *chan)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-       u32 channelSel = 0;
-       u32 bModeSynth = 0;
-       u32 aModeRefSel = 0;
-       u32 reg32 = 0;
-       u16 freq;
-       struct chan_centers centers;
-
-       ath9k_hw_get_channel_centers(ah, chan, &centers);
-       freq = centers.synth_center;
-
-       if (freq < 4800) {
-               u32 txctl;
-
-               if (((freq - 2192) % 5) == 0) {
-                       channelSel = ((freq - 672) * 2 - 3040) / 10;
-                       bModeSynth = 0;
-               } else if (((freq - 2224) % 5) == 0) {
-                       channelSel = ((freq - 704) * 2 - 3040) / 10;
-                       bModeSynth = 1;
-               } else {
-                       ath_print(common, ATH_DBG_FATAL,
-                                 "Invalid channel %u MHz\n", freq);
-                       return -EINVAL;
-               }
-
-               channelSel = (channelSel << 2) & 0xff;
-               channelSel = ath9k_hw_reverse_bits(channelSel, 8);
-
-               txctl = REG_READ(ah, AR_PHY_CCK_TX_CTRL);
-               if (freq == 2484) {
-
-                       REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
-                                 txctl | AR_PHY_CCK_TX_CTRL_JAPAN);
-               } else {
-                       REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
-                                 txctl & ~AR_PHY_CCK_TX_CTRL_JAPAN);
-               }
-
-       } else if ((freq % 20) == 0 && freq >= 5120) {
-               channelSel =
-                   ath9k_hw_reverse_bits(((freq - 4800) / 20 << 2), 8);
-               aModeRefSel = ath9k_hw_reverse_bits(1, 2);
-       } else if ((freq % 10) == 0) {
-               channelSel =
-                   ath9k_hw_reverse_bits(((freq - 4800) / 10 << 1), 8);
-               if (AR_SREV_9100(ah) || AR_SREV_9160_10_OR_LATER(ah))
-                       aModeRefSel = ath9k_hw_reverse_bits(2, 2);
-               else
-                       aModeRefSel = ath9k_hw_reverse_bits(1, 2);
-       } else if ((freq % 5) == 0) {
-               channelSel = ath9k_hw_reverse_bits((freq - 4800) / 5, 8);
-               aModeRefSel = ath9k_hw_reverse_bits(1, 2);
-       } else {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Invalid channel %u MHz\n", freq);
-               return -EINVAL;
-       }
-
-       ar5008_hw_force_bias(ah, freq);
-
-       reg32 =
-           (channelSel << 8) | (aModeRefSel << 2) | (bModeSynth << 1) |
-           (1 << 5) | 0x1;
-
-       REG_WRITE(ah, AR_PHY(0x37), reg32);
-
-       ah->curchan = chan;
-       ah->curchan_rad_index = -1;
-
-       return 0;
-}
-
-/**
- * ar5008_hw_spur_mitigate - convert baseband spur frequency for external radios
- * @ah: atheros hardware structure
- * @chan:
- *
- * For non single-chip solutions. Converts to baseband spur frequency given the
- * input channel frequency and compute register settings below.
- */
-static void ar5008_hw_spur_mitigate(struct ath_hw *ah,
-                                   struct ath9k_channel *chan)
-{
-       int bb_spur = AR_NO_SPUR;
-       int bin, cur_bin;
-       int spur_freq_sd;
-       int spur_delta_phase;
-       int denominator;
-       int upper, lower, cur_vit_mask;
-       int tmp, new;
-       int i;
-       int pilot_mask_reg[4] = { AR_PHY_TIMING7, AR_PHY_TIMING8,
-                         AR_PHY_PILOT_MASK_01_30, AR_PHY_PILOT_MASK_31_60
-       };
-       int chan_mask_reg[4] = { AR_PHY_TIMING9, AR_PHY_TIMING10,
-                        AR_PHY_CHANNEL_MASK_01_30, AR_PHY_CHANNEL_MASK_31_60
-       };
-       int inc[4] = { 0, 100, 0, 0 };
-
-       int8_t mask_m[123];
-       int8_t mask_p[123];
-       int8_t mask_amt;
-       int tmp_mask;
-       int cur_bb_spur;
-       bool is2GHz = IS_CHAN_2GHZ(chan);
-
-       memset(&mask_m, 0, sizeof(int8_t) * 123);
-       memset(&mask_p, 0, sizeof(int8_t) * 123);
-
-       for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) {
-               cur_bb_spur = ah->eep_ops->get_spur_channel(ah, i, is2GHz);
-               if (AR_NO_SPUR == cur_bb_spur)
-                       break;
-               cur_bb_spur = cur_bb_spur - (chan->channel * 10);
-               if ((cur_bb_spur > -95) && (cur_bb_spur < 95)) {
-                       bb_spur = cur_bb_spur;
-                       break;
-               }
-       }
-
-       if (AR_NO_SPUR == bb_spur)
-               return;
-
-       bin = bb_spur * 32;
-
-       tmp = REG_READ(ah, AR_PHY_TIMING_CTRL4(0));
-       new = tmp | (AR_PHY_TIMING_CTRL4_ENABLE_SPUR_RSSI |
-                    AR_PHY_TIMING_CTRL4_ENABLE_SPUR_FILTER |
-                    AR_PHY_TIMING_CTRL4_ENABLE_CHAN_MASK |
-                    AR_PHY_TIMING_CTRL4_ENABLE_PILOT_MASK);
-
-       REG_WRITE(ah, AR_PHY_TIMING_CTRL4(0), new);
-
-       new = (AR_PHY_SPUR_REG_MASK_RATE_CNTL |
-              AR_PHY_SPUR_REG_ENABLE_MASK_PPM |
-              AR_PHY_SPUR_REG_MASK_RATE_SELECT |
-              AR_PHY_SPUR_REG_ENABLE_VIT_SPUR_RSSI |
-              SM(SPUR_RSSI_THRESH, AR_PHY_SPUR_REG_SPUR_RSSI_THRESH));
-       REG_WRITE(ah, AR_PHY_SPUR_REG, new);
-
-       spur_delta_phase = ((bb_spur * 524288) / 100) &
-               AR_PHY_TIMING11_SPUR_DELTA_PHASE;
-
-       denominator = IS_CHAN_2GHZ(chan) ? 440 : 400;
-       spur_freq_sd = ((bb_spur * 2048) / denominator) & 0x3ff;
-
-       new = (AR_PHY_TIMING11_USE_SPUR_IN_AGC |
-              SM(spur_freq_sd, AR_PHY_TIMING11_SPUR_FREQ_SD) |
-              SM(spur_delta_phase, AR_PHY_TIMING11_SPUR_DELTA_PHASE));
-       REG_WRITE(ah, AR_PHY_TIMING11, new);
-
-       cur_bin = -6000;
-       upper = bin + 100;
-       lower = bin - 100;
-
-       for (i = 0; i < 4; i++) {
-               int pilot_mask = 0;
-               int chan_mask = 0;
-               int bp = 0;
-               for (bp = 0; bp < 30; bp++) {
-                       if ((cur_bin > lower) && (cur_bin < upper)) {
-                               pilot_mask = pilot_mask | 0x1 << bp;
-                               chan_mask = chan_mask | 0x1 << bp;
-                       }
-                       cur_bin += 100;
-               }
-               cur_bin += inc[i];
-               REG_WRITE(ah, pilot_mask_reg[i], pilot_mask);
-               REG_WRITE(ah, chan_mask_reg[i], chan_mask);
-       }
-
-       cur_vit_mask = 6100;
-       upper = bin + 120;
-       lower = bin - 120;
-
-       for (i = 0; i < 123; i++) {
-               if ((cur_vit_mask > lower) && (cur_vit_mask < upper)) {
-
-                       /* workaround for gcc bug #37014 */
-                       volatile int tmp_v = abs(cur_vit_mask - bin);
-
-                       if (tmp_v < 75)
-                               mask_amt = 1;
-                       else
-                               mask_amt = 0;
-                       if (cur_vit_mask < 0)
-                               mask_m[abs(cur_vit_mask / 100)] = mask_amt;
-                       else
-                               mask_p[cur_vit_mask / 100] = mask_amt;
-               }
-               cur_vit_mask -= 100;
-       }
-
-       tmp_mask = (mask_m[46] << 30) | (mask_m[47] << 28)
-               | (mask_m[48] << 26) | (mask_m[49] << 24)
-               | (mask_m[50] << 22) | (mask_m[51] << 20)
-               | (mask_m[52] << 18) | (mask_m[53] << 16)
-               | (mask_m[54] << 14) | (mask_m[55] << 12)
-               | (mask_m[56] << 10) | (mask_m[57] << 8)
-               | (mask_m[58] << 6) | (mask_m[59] << 4)
-               | (mask_m[60] << 2) | (mask_m[61] << 0);
-       REG_WRITE(ah, AR_PHY_BIN_MASK_1, tmp_mask);
-       REG_WRITE(ah, AR_PHY_VIT_MASK2_M_46_61, tmp_mask);
-
-       tmp_mask = (mask_m[31] << 28)
-               | (mask_m[32] << 26) | (mask_m[33] << 24)
-               | (mask_m[34] << 22) | (mask_m[35] << 20)
-               | (mask_m[36] << 18) | (mask_m[37] << 16)
-               | (mask_m[48] << 14) | (mask_m[39] << 12)
-               | (mask_m[40] << 10) | (mask_m[41] << 8)
-               | (mask_m[42] << 6) | (mask_m[43] << 4)
-               | (mask_m[44] << 2) | (mask_m[45] << 0);
-       REG_WRITE(ah, AR_PHY_BIN_MASK_2, tmp_mask);
-       REG_WRITE(ah, AR_PHY_MASK2_M_31_45, tmp_mask);
-
-       tmp_mask = (mask_m[16] << 30) | (mask_m[16] << 28)
-               | (mask_m[18] << 26) | (mask_m[18] << 24)
-               | (mask_m[20] << 22) | (mask_m[20] << 20)
-               | (mask_m[22] << 18) | (mask_m[22] << 16)
-               | (mask_m[24] << 14) | (mask_m[24] << 12)
-               | (mask_m[25] << 10) | (mask_m[26] << 8)
-               | (mask_m[27] << 6) | (mask_m[28] << 4)
-               | (mask_m[29] << 2) | (mask_m[30] << 0);
-       REG_WRITE(ah, AR_PHY_BIN_MASK_3, tmp_mask);
-       REG_WRITE(ah, AR_PHY_MASK2_M_16_30, tmp_mask);
-
-       tmp_mask = (mask_m[0] << 30) | (mask_m[1] << 28)
-               | (mask_m[2] << 26) | (mask_m[3] << 24)
-               | (mask_m[4] << 22) | (mask_m[5] << 20)
-               | (mask_m[6] << 18) | (mask_m[7] << 16)
-               | (mask_m[8] << 14) | (mask_m[9] << 12)
-               | (mask_m[10] << 10) | (mask_m[11] << 8)
-               | (mask_m[12] << 6) | (mask_m[13] << 4)
-               | (mask_m[14] << 2) | (mask_m[15] << 0);
-       REG_WRITE(ah, AR_PHY_MASK_CTL, tmp_mask);
-       REG_WRITE(ah, AR_PHY_MASK2_M_00_15, tmp_mask);
-
-       tmp_mask = (mask_p[15] << 28)
-               | (mask_p[14] << 26) | (mask_p[13] << 24)
-               | (mask_p[12] << 22) | (mask_p[11] << 20)
-               | (mask_p[10] << 18) | (mask_p[9] << 16)
-               | (mask_p[8] << 14) | (mask_p[7] << 12)
-               | (mask_p[6] << 10) | (mask_p[5] << 8)
-               | (mask_p[4] << 6) | (mask_p[3] << 4)
-               | (mask_p[2] << 2) | (mask_p[1] << 0);
-       REG_WRITE(ah, AR_PHY_BIN_MASK2_1, tmp_mask);
-       REG_WRITE(ah, AR_PHY_MASK2_P_15_01, tmp_mask);
-
-       tmp_mask = (mask_p[30] << 28)
-               | (mask_p[29] << 26) | (mask_p[28] << 24)
-               | (mask_p[27] << 22) | (mask_p[26] << 20)
-               | (mask_p[25] << 18) | (mask_p[24] << 16)
-               | (mask_p[23] << 14) | (mask_p[22] << 12)
-               | (mask_p[21] << 10) | (mask_p[20] << 8)
-               | (mask_p[19] << 6) | (mask_p[18] << 4)
-               | (mask_p[17] << 2) | (mask_p[16] << 0);
-       REG_WRITE(ah, AR_PHY_BIN_MASK2_2, tmp_mask);
-       REG_WRITE(ah, AR_PHY_MASK2_P_30_16, tmp_mask);
-
-       tmp_mask = (mask_p[45] << 28)
-               | (mask_p[44] << 26) | (mask_p[43] << 24)
-               | (mask_p[42] << 22) | (mask_p[41] << 20)
-               | (mask_p[40] << 18) | (mask_p[39] << 16)
-               | (mask_p[38] << 14) | (mask_p[37] << 12)
-               | (mask_p[36] << 10) | (mask_p[35] << 8)
-               | (mask_p[34] << 6) | (mask_p[33] << 4)
-               | (mask_p[32] << 2) | (mask_p[31] << 0);
-       REG_WRITE(ah, AR_PHY_BIN_MASK2_3, tmp_mask);
-       REG_WRITE(ah, AR_PHY_MASK2_P_45_31, tmp_mask);
-
-       tmp_mask = (mask_p[61] << 30) | (mask_p[60] << 28)
-               | (mask_p[59] << 26) | (mask_p[58] << 24)
-               | (mask_p[57] << 22) | (mask_p[56] << 20)
-               | (mask_p[55] << 18) | (mask_p[54] << 16)
-               | (mask_p[53] << 14) | (mask_p[52] << 12)
-               | (mask_p[51] << 10) | (mask_p[50] << 8)
-               | (mask_p[49] << 6) | (mask_p[48] << 4)
-               | (mask_p[47] << 2) | (mask_p[46] << 0);
-       REG_WRITE(ah, AR_PHY_BIN_MASK2_4, tmp_mask);
-       REG_WRITE(ah, AR_PHY_MASK2_P_61_45, tmp_mask);
-}
-
-/**
- * ar5008_hw_rf_alloc_ext_banks - allocates banks for external radio programming
- * @ah: atheros hardware structure
- *
- * Only required for older devices with external AR2133/AR5133 radios.
- */
-static int ar5008_hw_rf_alloc_ext_banks(struct ath_hw *ah)
-{
-#define ATH_ALLOC_BANK(bank, size) do { \
-               bank = kzalloc((sizeof(u32) * size), GFP_KERNEL); \
-               if (!bank) { \
-                       ath_print(common, ATH_DBG_FATAL, \
-                                 "Cannot allocate RF banks\n"); \
-                       return -ENOMEM; \
-               } \
-       } while (0);
-
-       struct ath_common *common = ath9k_hw_common(ah);
-
-       BUG_ON(AR_SREV_9280_10_OR_LATER(ah));
-
-       ATH_ALLOC_BANK(ah->analogBank0Data, ah->iniBank0.ia_rows);
-       ATH_ALLOC_BANK(ah->analogBank1Data, ah->iniBank1.ia_rows);
-       ATH_ALLOC_BANK(ah->analogBank2Data, ah->iniBank2.ia_rows);
-       ATH_ALLOC_BANK(ah->analogBank3Data, ah->iniBank3.ia_rows);
-       ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows);
-       ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows);
-       ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows);
-       ATH_ALLOC_BANK(ah->addac5416_21,
-                      ah->iniAddac.ia_rows * ah->iniAddac.ia_columns);
-       ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows);
-
-       return 0;
-#undef ATH_ALLOC_BANK
-}
-
-
-/**
- * ar5008_hw_rf_free_ext_banks - Free memory for analog bank scratch buffers
- * @ah: atheros hardware struture
- * For the external AR2133/AR5133 radios banks.
- */
-static void ar5008_hw_rf_free_ext_banks(struct ath_hw *ah)
-{
-#define ATH_FREE_BANK(bank) do { \
-               kfree(bank); \
-               bank = NULL; \
-       } while (0);
-
-       BUG_ON(AR_SREV_9280_10_OR_LATER(ah));
-
-       ATH_FREE_BANK(ah->analogBank0Data);
-       ATH_FREE_BANK(ah->analogBank1Data);
-       ATH_FREE_BANK(ah->analogBank2Data);
-       ATH_FREE_BANK(ah->analogBank3Data);
-       ATH_FREE_BANK(ah->analogBank6Data);
-       ATH_FREE_BANK(ah->analogBank6TPCData);
-       ATH_FREE_BANK(ah->analogBank7Data);
-       ATH_FREE_BANK(ah->addac5416_21);
-       ATH_FREE_BANK(ah->bank6Temp);
-
-#undef ATH_FREE_BANK
-}
-
-/* *
- * ar5008_hw_set_rf_regs - programs rf registers based on EEPROM
- * @ah: atheros hardware structure
- * @chan:
- * @modesIndex:
- *
- * Used for the external AR2133/AR5133 radios.
- *
- * Reads the EEPROM header info from the device structure and programs
- * all rf registers. This routine requires access to the analog
- * rf device. This is not required for single-chip devices.
- */
-static bool ar5008_hw_set_rf_regs(struct ath_hw *ah,
-                                 struct ath9k_channel *chan,
-                                 u16 modesIndex)
-{
-       u32 eepMinorRev;
-       u32 ob5GHz = 0, db5GHz = 0;
-       u32 ob2GHz = 0, db2GHz = 0;
-       int regWrites = 0;
-
-       /*
-        * Software does not need to program bank data
-        * for single chip devices, that is AR9280 or anything
-        * after that.
-        */
-       if (AR_SREV_9280_10_OR_LATER(ah))
-               return true;
-
-       /* Setup rf parameters */
-       eepMinorRev = ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV);
-
-       /* Setup Bank 0 Write */
-       RF_BANK_SETUP(ah->analogBank0Data, &ah->iniBank0, 1);
-
-       /* Setup Bank 1 Write */
-       RF_BANK_SETUP(ah->analogBank1Data, &ah->iniBank1, 1);
-
-       /* Setup Bank 2 Write */
-       RF_BANK_SETUP(ah->analogBank2Data, &ah->iniBank2, 1);
-
-       /* Setup Bank 6 Write */
-       RF_BANK_SETUP(ah->analogBank3Data, &ah->iniBank3,
-                     modesIndex);
-       {
-               int i;
-               for (i = 0; i < ah->iniBank6TPC.ia_rows; i++) {
-                       ah->analogBank6Data[i] =
-                           INI_RA(&ah->iniBank6TPC, i, modesIndex);
-               }
-       }
-
-       /* Only the 5 or 2 GHz OB/DB need to be set for a mode */
-       if (eepMinorRev >= 2) {
-               if (IS_CHAN_2GHZ(chan)) {
-                       ob2GHz = ah->eep_ops->get_eeprom(ah, EEP_OB_2);
-                       db2GHz = ah->eep_ops->get_eeprom(ah, EEP_DB_2);
-                       ar5008_hw_phy_modify_rx_buffer(ah->analogBank6Data,
-                                                      ob2GHz, 3, 197, 0);
-                       ar5008_hw_phy_modify_rx_buffer(ah->analogBank6Data,
-                                                      db2GHz, 3, 194, 0);
-               } else {
-                       ob5GHz = ah->eep_ops->get_eeprom(ah, EEP_OB_5);
-                       db5GHz = ah->eep_ops->get_eeprom(ah, EEP_DB_5);
-                       ar5008_hw_phy_modify_rx_buffer(ah->analogBank6Data,
-                                                      ob5GHz, 3, 203, 0);
-                       ar5008_hw_phy_modify_rx_buffer(ah->analogBank6Data,
-                                                      db5GHz, 3, 200, 0);
-               }
-       }
-
-       /* Setup Bank 7 Setup */
-       RF_BANK_SETUP(ah->analogBank7Data, &ah->iniBank7, 1);
-
-       /* Write Analog registers */
-       REG_WRITE_RF_ARRAY(&ah->iniBank0, ah->analogBank0Data,
-                          regWrites);
-       REG_WRITE_RF_ARRAY(&ah->iniBank1, ah->analogBank1Data,
-                          regWrites);
-       REG_WRITE_RF_ARRAY(&ah->iniBank2, ah->analogBank2Data,
-                          regWrites);
-       REG_WRITE_RF_ARRAY(&ah->iniBank3, ah->analogBank3Data,
-                          regWrites);
-       REG_WRITE_RF_ARRAY(&ah->iniBank6TPC, ah->analogBank6Data,
-                          regWrites);
-       REG_WRITE_RF_ARRAY(&ah->iniBank7, ah->analogBank7Data,
-                          regWrites);
-
-       return true;
-}
-
-static void ar5008_hw_init_bb(struct ath_hw *ah,
-                             struct ath9k_channel *chan)
-{
-       u32 synthDelay;
-
-       synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY;
-       if (IS_CHAN_B(chan))
-               synthDelay = (4 * synthDelay) / 22;
-       else
-               synthDelay /= 10;
-
-       REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_EN);
-
-       udelay(synthDelay + BASE_ACTIVATE_DELAY);
-}
-
-static void ar5008_hw_init_chain_masks(struct ath_hw *ah)
-{
-       int rx_chainmask, tx_chainmask;
-
-       rx_chainmask = ah->rxchainmask;
-       tx_chainmask = ah->txchainmask;
-
-       ENABLE_REGWRITE_BUFFER(ah);
-
-       switch (rx_chainmask) {
-       case 0x5:
-               DISABLE_REGWRITE_BUFFER(ah);
-               REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
-                           AR_PHY_SWAP_ALT_CHAIN);
-               ENABLE_REGWRITE_BUFFER(ah);
-       case 0x3:
-               if (ah->hw_version.macVersion == AR_SREV_REVISION_5416_10) {
-                       REG_WRITE(ah, AR_PHY_RX_CHAINMASK, 0x7);
-                       REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, 0x7);
-                       break;
-               }
-       case 0x1:
-       case 0x2:
-       case 0x7:
-               REG_WRITE(ah, AR_PHY_RX_CHAINMASK, rx_chainmask);
-               REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, rx_chainmask);
-               break;
-       default:
-               break;
-       }
-
-       REG_WRITE(ah, AR_SELFGEN_MASK, tx_chainmask);
-
-       REGWRITE_BUFFER_FLUSH(ah);
-       DISABLE_REGWRITE_BUFFER(ah);
-
-       if (tx_chainmask == 0x5) {
-               REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
-                           AR_PHY_SWAP_ALT_CHAIN);
-       }
-       if (AR_SREV_9100(ah))
-               REG_WRITE(ah, AR_PHY_ANALOG_SWAP,
-                         REG_READ(ah, AR_PHY_ANALOG_SWAP) | 0x00000001);
-}
-
-static void ar5008_hw_override_ini(struct ath_hw *ah,
-                                  struct ath9k_channel *chan)
-{
-       u32 val;
-
-       /*
-        * Set the RX_ABORT and RX_DIS and clear if off only after
-        * RXE is set for MAC. This prevents frames with corrupted
-        * descriptor status.
-        */
-       REG_SET_BIT(ah, AR_DIAG_SW, (AR_DIAG_RX_DIS | AR_DIAG_RX_ABORT));
-
-       if (AR_SREV_9280_10_OR_LATER(ah)) {
-               val = REG_READ(ah, AR_PCU_MISC_MODE2);
-
-               if (!AR_SREV_9271(ah))
-                       val &= ~AR_PCU_MISC_MODE2_HWWAR1;
-
-               if (AR_SREV_9287_10_OR_LATER(ah))
-                       val = val & (~AR_PCU_MISC_MODE2_HWWAR2);
-
-               REG_WRITE(ah, AR_PCU_MISC_MODE2, val);
-       }
-
-       if (!AR_SREV_5416_20_OR_LATER(ah) ||
-           AR_SREV_9280_10_OR_LATER(ah))
-               return;
-       /*
-        * Disable BB clock gating
-        * Necessary to avoid issues on AR5416 2.0
-        */
-       REG_WRITE(ah, 0x9800 + (651 << 2), 0x11);
-
-       /*
-        * Disable RIFS search on some chips to avoid baseband
-        * hang issues.
-        */
-       if (AR_SREV_9100(ah) || AR_SREV_9160(ah)) {
-               val = REG_READ(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS);
-               val &= ~AR_PHY_RIFS_INIT_DELAY;
-               REG_WRITE(ah, AR_PHY_HEAVY_CLIP_FACTOR_RIFS, val);
-       }
-}
-
-static void ar5008_hw_set_channel_regs(struct ath_hw *ah,
-                                      struct ath9k_channel *chan)
-{
-       u32 phymode;
-       u32 enableDacFifo = 0;
-
-       if (AR_SREV_9285_10_OR_LATER(ah))
-               enableDacFifo = (REG_READ(ah, AR_PHY_TURBO) &
-                                        AR_PHY_FC_ENABLE_DAC_FIFO);
-
-       phymode = AR_PHY_FC_HT_EN | AR_PHY_FC_SHORT_GI_40
-               | AR_PHY_FC_SINGLE_HT_LTF1 | AR_PHY_FC_WALSH | enableDacFifo;
-
-       if (IS_CHAN_HT40(chan)) {
-               phymode |= AR_PHY_FC_DYN2040_EN;
-
-               if ((chan->chanmode == CHANNEL_A_HT40PLUS) ||
-                   (chan->chanmode == CHANNEL_G_HT40PLUS))
-                       phymode |= AR_PHY_FC_DYN2040_PRI_CH;
-
-       }
-       REG_WRITE(ah, AR_PHY_TURBO, phymode);
-
-       ath9k_hw_set11nmac2040(ah);
-
-       ENABLE_REGWRITE_BUFFER(ah);
-
-       REG_WRITE(ah, AR_GTXTO, 25 << AR_GTXTO_TIMEOUT_LIMIT_S);
-       REG_WRITE(ah, AR_CST, 0xF << AR_CST_TIMEOUT_LIMIT_S);
-
-       REGWRITE_BUFFER_FLUSH(ah);
-       DISABLE_REGWRITE_BUFFER(ah);
-}
-
-
-static int ar5008_hw_process_ini(struct ath_hw *ah,
-                                struct ath9k_channel *chan)
-{
-       struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
-       int i, regWrites = 0;
-       struct ieee80211_channel *channel = chan->chan;
-       u32 modesIndex, freqIndex;
-
-       switch (chan->chanmode) {
-       case CHANNEL_A:
-       case CHANNEL_A_HT20:
-               modesIndex = 1;
-               freqIndex = 1;
-               break;
-       case CHANNEL_A_HT40PLUS:
-       case CHANNEL_A_HT40MINUS:
-               modesIndex = 2;
-               freqIndex = 1;
-               break;
-       case CHANNEL_G:
-       case CHANNEL_G_HT20:
-       case CHANNEL_B:
-               modesIndex = 4;
-               freqIndex = 2;
-               break;
-       case CHANNEL_G_HT40PLUS:
-       case CHANNEL_G_HT40MINUS:
-               modesIndex = 3;
-               freqIndex = 2;
-               break;
-
-       default:
-               return -EINVAL;
-       }
-
-       /*
-        * Set correct baseband to analog shift setting to
-        * access analog chips.
-        */
-       REG_WRITE(ah, AR_PHY(0), 0x00000007);
-
-       /* Write ADDAC shifts */
-       REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_EXTERNAL_RADIO);
-       ah->eep_ops->set_addac(ah, chan);
-
-       if (AR_SREV_5416_22_OR_LATER(ah)) {
-               REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites);
-       } else {
-               struct ar5416IniArray temp;
-               u32 addacSize =
-                       sizeof(u32) * ah->iniAddac.ia_rows *
-                       ah->iniAddac.ia_columns;
-
-               /* For AR5416 2.0/2.1 */
-               memcpy(ah->addac5416_21,
-                      ah->iniAddac.ia_array, addacSize);
-
-               /* override CLKDRV value at [row, column] = [31, 1] */
-               (ah->addac5416_21)[31 * ah->iniAddac.ia_columns + 1] = 0;
-
-               temp.ia_array = ah->addac5416_21;
-               temp.ia_columns = ah->iniAddac.ia_columns;
-               temp.ia_rows = ah->iniAddac.ia_rows;
-               REG_WRITE_ARRAY(&temp, 1, regWrites);
-       }
-
-       REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_INTERNAL_ADDAC);
-
-       ENABLE_REGWRITE_BUFFER(ah);
-
-       for (i = 0; i < ah->iniModes.ia_rows; i++) {
-               u32 reg = INI_RA(&ah->iniModes, i, 0);
-               u32 val = INI_RA(&ah->iniModes, i, modesIndex);
-
-               if (reg == AR_AN_TOP2 && ah->need_an_top2_fixup)
-                       val &= ~AR_AN_TOP2_PWDCLKIND;
-
-               REG_WRITE(ah, reg, val);
-
-               if (reg >= 0x7800 && reg < 0x78a0
-                   && ah->config.analog_shiftreg) {
-                       udelay(100);
-               }
-
-               DO_DELAY(regWrites);
-       }
-
-       REGWRITE_BUFFER_FLUSH(ah);
-       DISABLE_REGWRITE_BUFFER(ah);
-
-       if (AR_SREV_9280(ah) || AR_SREV_9287_10_OR_LATER(ah))
-               REG_WRITE_ARRAY(&ah->iniModesRxGain, modesIndex, regWrites);
-
-       if (AR_SREV_9280(ah) || AR_SREV_9285_12_OR_LATER(ah) ||
-           AR_SREV_9287_10_OR_LATER(ah))
-               REG_WRITE_ARRAY(&ah->iniModesTxGain, modesIndex, regWrites);
-
-       if (AR_SREV_9271_10(ah))
-               REG_WRITE_ARRAY(&ah->iniModes_9271_1_0_only,
-                               modesIndex, regWrites);
-
-       ENABLE_REGWRITE_BUFFER(ah);
-
-       /* Write common array parameters */
-       for (i = 0; i < ah->iniCommon.ia_rows; i++) {
-               u32 reg = INI_RA(&ah->iniCommon, i, 0);
-               u32 val = INI_RA(&ah->iniCommon, i, 1);
-
-               REG_WRITE(ah, reg, val);
-
-               if (reg >= 0x7800 && reg < 0x78a0
-                   && ah->config.analog_shiftreg) {
-                       udelay(100);
-               }
-
-               DO_DELAY(regWrites);
-       }
-
-       REGWRITE_BUFFER_FLUSH(ah);
-       DISABLE_REGWRITE_BUFFER(ah);
-
-       if (AR_SREV_9271(ah)) {
-               if (ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE) == 1)
-                       REG_WRITE_ARRAY(&ah->iniModes_high_power_tx_gain_9271,
-                                       modesIndex, regWrites);
-               else
-                       REG_WRITE_ARRAY(&ah->iniModes_normal_power_tx_gain_9271,
-                                       modesIndex, regWrites);
-       }
-
-       REG_WRITE_ARRAY(&ah->iniBB_RfGain, freqIndex, regWrites);
-
-       if (IS_CHAN_A_FAST_CLOCK(ah, chan)) {
-               REG_WRITE_ARRAY(&ah->iniModesAdditional, modesIndex,
-                               regWrites);
-       }
-
-       ar5008_hw_override_ini(ah, chan);
-       ar5008_hw_set_channel_regs(ah, chan);
-       ar5008_hw_init_chain_masks(ah);
-       ath9k_olc_init(ah);
-
-       /* Set TX power */
-       ah->eep_ops->set_txpower(ah, chan,
-                                ath9k_regd_get_ctl(regulatory, chan),
-                                channel->max_antenna_gain * 2,
-                                channel->max_power * 2,
-                                min((u32) MAX_RATE_POWER,
-                                (u32) regulatory->power_limit));
-
-       /* Write analog registers */
-       if (!ath9k_hw_set_rf_regs(ah, chan, freqIndex)) {
-               ath_print(ath9k_hw_common(ah), ATH_DBG_FATAL,
-                         "ar5416SetRfRegs failed\n");
-               return -EIO;
-       }
-
-       return 0;
-}
-
-static void ar5008_hw_set_rfmode(struct ath_hw *ah, struct ath9k_channel *chan)
-{
-       u32 rfMode = 0;
-
-       if (chan == NULL)
-               return;
-
-       rfMode |= (IS_CHAN_B(chan) || IS_CHAN_G(chan))
-               ? AR_PHY_MODE_DYNAMIC : AR_PHY_MODE_OFDM;
-
-       if (!AR_SREV_9280_10_OR_LATER(ah))
-               rfMode |= (IS_CHAN_5GHZ(chan)) ?
-                       AR_PHY_MODE_RF5GHZ : AR_PHY_MODE_RF2GHZ;
-
-       if (IS_CHAN_A_FAST_CLOCK(ah, chan))
-               rfMode |= (AR_PHY_MODE_DYNAMIC | AR_PHY_MODE_DYN_CCK_DISABLE);
-
-       REG_WRITE(ah, AR_PHY_MODE, rfMode);
-}
-
-static void ar5008_hw_mark_phy_inactive(struct ath_hw *ah)
-{
-       REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_DIS);
-}
-
-static void ar5008_hw_set_delta_slope(struct ath_hw *ah,
-                                     struct ath9k_channel *chan)
-{
-       u32 coef_scaled, ds_coef_exp, ds_coef_man;
-       u32 clockMhzScaled = 0x64000000;
-       struct chan_centers centers;
-
-       if (IS_CHAN_HALF_RATE(chan))
-               clockMhzScaled = clockMhzScaled >> 1;
-       else if (IS_CHAN_QUARTER_RATE(chan))
-               clockMhzScaled = clockMhzScaled >> 2;
-
-       ath9k_hw_get_channel_centers(ah, chan, &centers);
-       coef_scaled = clockMhzScaled / centers.synth_center;
-
-       ath9k_hw_get_delta_slope_vals(ah, coef_scaled, &ds_coef_man,
-                                     &ds_coef_exp);
-
-       REG_RMW_FIELD(ah, AR_PHY_TIMING3,
-                     AR_PHY_TIMING3_DSC_MAN, ds_coef_man);
-       REG_RMW_FIELD(ah, AR_PHY_TIMING3,
-                     AR_PHY_TIMING3_DSC_EXP, ds_coef_exp);
-
-       coef_scaled = (9 * coef_scaled) / 10;
-
-       ath9k_hw_get_delta_slope_vals(ah, coef_scaled, &ds_coef_man,
-                                     &ds_coef_exp);
-
-       REG_RMW_FIELD(ah, AR_PHY_HALFGI,
-                     AR_PHY_HALFGI_DSC_MAN, ds_coef_man);
-       REG_RMW_FIELD(ah, AR_PHY_HALFGI,
-                     AR_PHY_HALFGI_DSC_EXP, ds_coef_exp);
-}
-
-static bool ar5008_hw_rfbus_req(struct ath_hw *ah)
-{
-       REG_WRITE(ah, AR_PHY_RFBUS_REQ, AR_PHY_RFBUS_REQ_EN);
-       return ath9k_hw_wait(ah, AR_PHY_RFBUS_GRANT, AR_PHY_RFBUS_GRANT_EN,
-                          AR_PHY_RFBUS_GRANT_EN, AH_WAIT_TIMEOUT);
-}
-
-static void ar5008_hw_rfbus_done(struct ath_hw *ah)
-{
-       u32 synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY;
-       if (IS_CHAN_B(ah->curchan))
-               synthDelay = (4 * synthDelay) / 22;
-       else
-               synthDelay /= 10;
-
-       udelay(synthDelay + BASE_ACTIVATE_DELAY);
-
-       REG_WRITE(ah, AR_PHY_RFBUS_REQ, 0);
-}
-
-static void ar5008_hw_enable_rfkill(struct ath_hw *ah)
-{
-       REG_SET_BIT(ah, AR_GPIO_INPUT_EN_VAL,
-                   AR_GPIO_INPUT_EN_VAL_RFSILENT_BB);
-
-       REG_CLR_BIT(ah, AR_GPIO_INPUT_MUX2,
-                   AR_GPIO_INPUT_MUX2_RFSILENT);
-
-       ath9k_hw_cfg_gpio_input(ah, ah->rfkill_gpio);
-       REG_SET_BIT(ah, AR_PHY_TEST, RFSILENT_BB);
-}
-
-static void ar5008_restore_chainmask(struct ath_hw *ah)
-{
-       int rx_chainmask = ah->rxchainmask;
-
-       if ((rx_chainmask == 0x5) || (rx_chainmask == 0x3)) {
-               REG_WRITE(ah, AR_PHY_RX_CHAINMASK, rx_chainmask);
-               REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, rx_chainmask);
-       }
-}
-
-static void ar5008_set_diversity(struct ath_hw *ah, bool value)
-{
-       u32 v = REG_READ(ah, AR_PHY_CCK_DETECT);
-       if (value)
-               v |= AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV;
-       else
-               v &= ~AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV;
-       REG_WRITE(ah, AR_PHY_CCK_DETECT, v);
-}
-
-static u32 ar9100_hw_compute_pll_control(struct ath_hw *ah,
-                                        struct ath9k_channel *chan)
-{
-       if (chan && IS_CHAN_5GHZ(chan))
-               return 0x1450;
-       return 0x1458;
-}
-
-static u32 ar9160_hw_compute_pll_control(struct ath_hw *ah,
-                                        struct ath9k_channel *chan)
-{
-       u32 pll;
-
-       pll = SM(0x5, AR_RTC_9160_PLL_REFDIV);
-
-       if (chan && IS_CHAN_HALF_RATE(chan))
-               pll |= SM(0x1, AR_RTC_9160_PLL_CLKSEL);
-       else if (chan && IS_CHAN_QUARTER_RATE(chan))
-               pll |= SM(0x2, AR_RTC_9160_PLL_CLKSEL);
-
-       if (chan && IS_CHAN_5GHZ(chan))
-               pll |= SM(0x50, AR_RTC_9160_PLL_DIV);
-       else
-               pll |= SM(0x58, AR_RTC_9160_PLL_DIV);
-
-       return pll;
-}
-
-static u32 ar5008_hw_compute_pll_control(struct ath_hw *ah,
-                                        struct ath9k_channel *chan)
-{
-       u32 pll;
-
-       pll = AR_RTC_PLL_REFDIV_5 | AR_RTC_PLL_DIV2;
-
-       if (chan && IS_CHAN_HALF_RATE(chan))
-               pll |= SM(0x1, AR_RTC_PLL_CLKSEL);
-       else if (chan && IS_CHAN_QUARTER_RATE(chan))
-               pll |= SM(0x2, AR_RTC_PLL_CLKSEL);
-
-       if (chan && IS_CHAN_5GHZ(chan))
-               pll |= SM(0xa, AR_RTC_PLL_DIV);
-       else
-               pll |= SM(0xb, AR_RTC_PLL_DIV);
-
-       return pll;
-}
-
-static bool ar5008_hw_ani_control_old(struct ath_hw *ah,
-                                     enum ath9k_ani_cmd cmd,
-                                     int param)
-{
-       struct ar5416AniState *aniState = ah->curani;
-       struct ath_common *common = ath9k_hw_common(ah);
-
-       switch (cmd & ah->ani_function) {
-       case ATH9K_ANI_NOISE_IMMUNITY_LEVEL:{
-               u32 level = param;
-
-               if (level >= ARRAY_SIZE(ah->totalSizeDesired)) {
-                       ath_print(common, ATH_DBG_ANI,
-                                 "level out of range (%u > %u)\n",
-                                 level,
-                                 (unsigned)ARRAY_SIZE(ah->totalSizeDesired));
-                       return false;
-               }
-
-               REG_RMW_FIELD(ah, AR_PHY_DESIRED_SZ,
-                             AR_PHY_DESIRED_SZ_TOT_DES,
-                             ah->totalSizeDesired[level]);
-               REG_RMW_FIELD(ah, AR_PHY_AGC_CTL1,
-                             AR_PHY_AGC_CTL1_COARSE_LOW,
-                             ah->coarse_low[level]);
-               REG_RMW_FIELD(ah, AR_PHY_AGC_CTL1,
-                             AR_PHY_AGC_CTL1_COARSE_HIGH,
-                             ah->coarse_high[level]);
-               REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
-                             AR_PHY_FIND_SIG_FIRPWR,
-                             ah->firpwr[level]);
-
-               if (level > aniState->noiseImmunityLevel)
-                       ah->stats.ast_ani_niup++;
-               else if (level < aniState->noiseImmunityLevel)
-                       ah->stats.ast_ani_nidown++;
-               aniState->noiseImmunityLevel = level;
-               break;
-       }
-       case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{
-               const int m1ThreshLow[] = { 127, 50 };
-               const int m2ThreshLow[] = { 127, 40 };
-               const int m1Thresh[] = { 127, 0x4d };
-               const int m2Thresh[] = { 127, 0x40 };
-               const int m2CountThr[] = { 31, 16 };
-               const int m2CountThrLow[] = { 63, 48 };
-               u32 on = param ? 1 : 0;
-
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
-                             AR_PHY_SFCORR_LOW_M1_THRESH_LOW,
-                             m1ThreshLow[on]);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
-                             AR_PHY_SFCORR_LOW_M2_THRESH_LOW,
-                             m2ThreshLow[on]);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR,
-                             AR_PHY_SFCORR_M1_THRESH,
-                             m1Thresh[on]);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR,
-                             AR_PHY_SFCORR_M2_THRESH,
-                             m2Thresh[on]);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR,
-                             AR_PHY_SFCORR_M2COUNT_THR,
-                             m2CountThr[on]);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
-                             AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW,
-                             m2CountThrLow[on]);
-
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
-                             AR_PHY_SFCORR_EXT_M1_THRESH_LOW,
-                             m1ThreshLow[on]);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
-                             AR_PHY_SFCORR_EXT_M2_THRESH_LOW,
-                             m2ThreshLow[on]);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
-                             AR_PHY_SFCORR_EXT_M1_THRESH,
-                             m1Thresh[on]);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
-                             AR_PHY_SFCORR_EXT_M2_THRESH,
-                             m2Thresh[on]);
-
-               if (on)
-                       REG_SET_BIT(ah, AR_PHY_SFCORR_LOW,
-                                   AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
-               else
-                       REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
-                                   AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
-
-               if (!on != aniState->ofdmWeakSigDetectOff) {
-                       if (on)
-                               ah->stats.ast_ani_ofdmon++;
-                       else
-                               ah->stats.ast_ani_ofdmoff++;
-                       aniState->ofdmWeakSigDetectOff = !on;
-               }
-               break;
-       }
-       case ATH9K_ANI_CCK_WEAK_SIGNAL_THR:{
-               const int weakSigThrCck[] = { 8, 6 };
-               u32 high = param ? 1 : 0;
-
-               REG_RMW_FIELD(ah, AR_PHY_CCK_DETECT,
-                             AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK,
-                             weakSigThrCck[high]);
-               if (high != aniState->cckWeakSigThreshold) {
-                       if (high)
-                               ah->stats.ast_ani_cckhigh++;
-                       else
-                               ah->stats.ast_ani_ccklow++;
-                       aniState->cckWeakSigThreshold = high;
-               }
-               break;
-       }
-       case ATH9K_ANI_FIRSTEP_LEVEL:{
-               const int firstep[] = { 0, 4, 8 };
-               u32 level = param;
-
-               if (level >= ARRAY_SIZE(firstep)) {
-                       ath_print(common, ATH_DBG_ANI,
-                                 "level out of range (%u > %u)\n",
-                                 level,
-                                 (unsigned) ARRAY_SIZE(firstep));
-                       return false;
-               }
-               REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
-                             AR_PHY_FIND_SIG_FIRSTEP,
-                             firstep[level]);
-               if (level > aniState->firstepLevel)
-                       ah->stats.ast_ani_stepup++;
-               else if (level < aniState->firstepLevel)
-                       ah->stats.ast_ani_stepdown++;
-               aniState->firstepLevel = level;
-               break;
-       }
-       case ATH9K_ANI_SPUR_IMMUNITY_LEVEL:{
-               const int cycpwrThr1[] = { 2, 4, 6, 8, 10, 12, 14, 16 };
-               u32 level = param;
-
-               if (level >= ARRAY_SIZE(cycpwrThr1)) {
-                       ath_print(common, ATH_DBG_ANI,
-                                 "level out of range (%u > %u)\n",
-                                 level,
-                                 (unsigned) ARRAY_SIZE(cycpwrThr1));
-                       return false;
-               }
-               REG_RMW_FIELD(ah, AR_PHY_TIMING5,
-                             AR_PHY_TIMING5_CYCPWR_THR1,
-                             cycpwrThr1[level]);
-               if (level > aniState->spurImmunityLevel)
-                       ah->stats.ast_ani_spurup++;
-               else if (level < aniState->spurImmunityLevel)
-                       ah->stats.ast_ani_spurdown++;
-               aniState->spurImmunityLevel = level;
-               break;
-       }
-       case ATH9K_ANI_PRESENT:
-               break;
-       default:
-               ath_print(common, ATH_DBG_ANI,
-                         "invalid cmd %u\n", cmd);
-               return false;
-       }
-
-       ath_print(common, ATH_DBG_ANI, "ANI parameters:\n");
-       ath_print(common, ATH_DBG_ANI,
-                 "noiseImmunityLevel=%d, spurImmunityLevel=%d, "
-                 "ofdmWeakSigDetectOff=%d\n",
-                 aniState->noiseImmunityLevel,
-                 aniState->spurImmunityLevel,
-                 !aniState->ofdmWeakSigDetectOff);
-       ath_print(common, ATH_DBG_ANI,
-                 "cckWeakSigThreshold=%d, "
-                 "firstepLevel=%d, listenTime=%d\n",
-                 aniState->cckWeakSigThreshold,
-                 aniState->firstepLevel,
-                 aniState->listenTime);
-       ath_print(common, ATH_DBG_ANI,
-               "cycleCount=%d, ofdmPhyErrCount=%d, cckPhyErrCount=%d\n\n",
-               aniState->cycleCount,
-               aniState->ofdmPhyErrCount,
-               aniState->cckPhyErrCount);
-
-       return true;
-}
-
-static bool ar5008_hw_ani_control_new(struct ath_hw *ah,
-                                     enum ath9k_ani_cmd cmd,
-                                     int param)
-{
-       struct ar5416AniState *aniState = ah->curani;
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath9k_channel *chan = ah->curchan;
-       s32 value, value2;
-
-       switch (cmd & ah->ani_function) {
-       case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{
-               /*
-                * on == 1 means ofdm weak signal detection is ON
-                * on == 1 is the default, for less noise immunity
-                *
-                * on == 0 means ofdm weak signal detection is OFF
-                * on == 0 means more noise imm
-                */
-               u32 on = param ? 1 : 0;
-               /*
-                * make register setting for default
-                * (weak sig detect ON) come from INI file
-                */
-               int m1ThreshLow = on ?
-                       aniState->iniDef.m1ThreshLow : m1ThreshLow_off;
-               int m2ThreshLow = on ?
-                       aniState->iniDef.m2ThreshLow : m2ThreshLow_off;
-               int m1Thresh = on ?
-                       aniState->iniDef.m1Thresh : m1Thresh_off;
-               int m2Thresh = on ?
-                       aniState->iniDef.m2Thresh : m2Thresh_off;
-               int m2CountThr = on ?
-                       aniState->iniDef.m2CountThr : m2CountThr_off;
-               int m2CountThrLow = on ?
-                       aniState->iniDef.m2CountThrLow : m2CountThrLow_off;
-               int m1ThreshLowExt = on ?
-                       aniState->iniDef.m1ThreshLowExt : m1ThreshLowExt_off;
-               int m2ThreshLowExt = on ?
-                       aniState->iniDef.m2ThreshLowExt : m2ThreshLowExt_off;
-               int m1ThreshExt = on ?
-                       aniState->iniDef.m1ThreshExt : m1ThreshExt_off;
-               int m2ThreshExt = on ?
-                       aniState->iniDef.m2ThreshExt : m2ThreshExt_off;
-
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
-                             AR_PHY_SFCORR_LOW_M1_THRESH_LOW,
-                             m1ThreshLow);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
-                             AR_PHY_SFCORR_LOW_M2_THRESH_LOW,
-                             m2ThreshLow);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR,
-                             AR_PHY_SFCORR_M1_THRESH, m1Thresh);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR,
-                             AR_PHY_SFCORR_M2_THRESH, m2Thresh);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR,
-                             AR_PHY_SFCORR_M2COUNT_THR, m2CountThr);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
-                             AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW,
-                             m2CountThrLow);
-
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
-                             AR_PHY_SFCORR_EXT_M1_THRESH_LOW, m1ThreshLowExt);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
-                             AR_PHY_SFCORR_EXT_M2_THRESH_LOW, m2ThreshLowExt);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
-                             AR_PHY_SFCORR_EXT_M1_THRESH, m1ThreshExt);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
-                             AR_PHY_SFCORR_EXT_M2_THRESH, m2ThreshExt);
-
-               if (on)
-                       REG_SET_BIT(ah, AR_PHY_SFCORR_LOW,
-                                   AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
-               else
-                       REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
-                                   AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
-
-               if (!on != aniState->ofdmWeakSigDetectOff) {
-                       ath_print(common, ATH_DBG_ANI,
-                                 "** ch %d: ofdm weak signal: %s=>%s\n",
-                                 chan->channel,
-                                 !aniState->ofdmWeakSigDetectOff ?
-                                       "on" : "off",
-                                 on ? "on" : "off");
-                       if (on)
-                               ah->stats.ast_ani_ofdmon++;
-                       else
-                               ah->stats.ast_ani_ofdmoff++;
-                       aniState->ofdmWeakSigDetectOff = !on;
-               }
-               break;
-       }
-       case ATH9K_ANI_FIRSTEP_LEVEL:{
-               u32 level = param;
-
-               if (level >= ARRAY_SIZE(firstep_table)) {
-                       ath_print(common, ATH_DBG_ANI,
-                                 "ATH9K_ANI_FIRSTEP_LEVEL: level "
-                                 "out of range (%u > %u)\n",
-                                 level,
-                                 (unsigned) ARRAY_SIZE(firstep_table));
-                       return false;
-               }
-
-               /*
-                * make register setting relative to default
-                * from INI file & cap value
-                */
-               value = firstep_table[level] -
-                       firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
-                       aniState->iniDef.firstep;
-               if (value < ATH9K_SIG_FIRSTEP_SETTING_MIN)
-                       value = ATH9K_SIG_FIRSTEP_SETTING_MIN;
-               if (value > ATH9K_SIG_FIRSTEP_SETTING_MAX)
-                       value = ATH9K_SIG_FIRSTEP_SETTING_MAX;
-               REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
-                             AR_PHY_FIND_SIG_FIRSTEP,
-                             value);
-               /*
-                * we need to set first step low register too
-                * make register setting relative to default
-                * from INI file & cap value
-                */
-               value2 = firstep_table[level] -
-                        firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
-                        aniState->iniDef.firstepLow;
-               if (value2 < ATH9K_SIG_FIRSTEP_SETTING_MIN)
-                       value2 = ATH9K_SIG_FIRSTEP_SETTING_MIN;
-               if (value2 > ATH9K_SIG_FIRSTEP_SETTING_MAX)
-                       value2 = ATH9K_SIG_FIRSTEP_SETTING_MAX;
-
-               REG_RMW_FIELD(ah, AR_PHY_FIND_SIG_LOW,
-                             AR_PHY_FIND_SIG_FIRSTEP_LOW, value2);
-
-               if (level != aniState->firstepLevel) {
-                       ath_print(common, ATH_DBG_ANI,
-                                 "** ch %d: level %d=>%d[def:%d] "
-                                 "firstep[level]=%d ini=%d\n",
-                                 chan->channel,
-                                 aniState->firstepLevel,
-                                 level,
-                                 ATH9K_ANI_FIRSTEP_LVL_NEW,
-                                 value,
-                                 aniState->iniDef.firstep);
-                       ath_print(common, ATH_DBG_ANI,
-                                 "** ch %d: level %d=>%d[def:%d] "
-                                 "firstep_low[level]=%d ini=%d\n",
-                                 chan->channel,
-                                 aniState->firstepLevel,
-                                 level,
-                                 ATH9K_ANI_FIRSTEP_LVL_NEW,
-                                 value2,
-                                 aniState->iniDef.firstepLow);
-                       if (level > aniState->firstepLevel)
-                               ah->stats.ast_ani_stepup++;
-                       else if (level < aniState->firstepLevel)
-                               ah->stats.ast_ani_stepdown++;
-                       aniState->firstepLevel = level;
-               }
-               break;
-       }
-       case ATH9K_ANI_SPUR_IMMUNITY_LEVEL:{
-               u32 level = param;
-
-               if (level >= ARRAY_SIZE(cycpwrThr1_table)) {
-                       ath_print(common, ATH_DBG_ANI,
-                                 "ATH9K_ANI_SPUR_IMMUNITY_LEVEL: level "
-                                 "out of range (%u > %u)\n",
-                                 level,
-                                 (unsigned) ARRAY_SIZE(cycpwrThr1_table));
-                       return false;
-               }
-               /*
-                * make register setting relative to default
-                * from INI file & cap value
-                */
-               value = cycpwrThr1_table[level] -
-                       cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
-                       aniState->iniDef.cycpwrThr1;
-               if (value < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
-                       value = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
-               if (value > ATH9K_SIG_SPUR_IMM_SETTING_MAX)
-                       value = ATH9K_SIG_SPUR_IMM_SETTING_MAX;
-               REG_RMW_FIELD(ah, AR_PHY_TIMING5,
-                             AR_PHY_TIMING5_CYCPWR_THR1,
-                             value);
-
-               /*
-                * set AR_PHY_EXT_CCA for extension channel
-                * make register setting relative to default
-                * from INI file & cap value
-                */
-               value2 = cycpwrThr1_table[level] -
-                        cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
-                        aniState->iniDef.cycpwrThr1Ext;
-               if (value2 < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
-                       value2 = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
-               if (value2 > ATH9K_SIG_SPUR_IMM_SETTING_MAX)
-                       value2 = ATH9K_SIG_SPUR_IMM_SETTING_MAX;
-               REG_RMW_FIELD(ah, AR_PHY_EXT_CCA,
-                             AR_PHY_EXT_TIMING5_CYCPWR_THR1, value2);
-
-               if (level != aniState->spurImmunityLevel) {
-                       ath_print(common, ATH_DBG_ANI,
-                                 "** ch %d: level %d=>%d[def:%d] "
-                                 "cycpwrThr1[level]=%d ini=%d\n",
-                                 chan->channel,
-                                 aniState->spurImmunityLevel,
-                                 level,
-                                 ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
-                                 value,
-                                 aniState->iniDef.cycpwrThr1);
-                       ath_print(common, ATH_DBG_ANI,
-                                 "** ch %d: level %d=>%d[def:%d] "
-                                 "cycpwrThr1Ext[level]=%d ini=%d\n",
-                                 chan->channel,
-                                 aniState->spurImmunityLevel,
-                                 level,
-                                 ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
-                                 value2,
-                                 aniState->iniDef.cycpwrThr1Ext);
-                       if (level > aniState->spurImmunityLevel)
-                               ah->stats.ast_ani_spurup++;
-                       else if (level < aniState->spurImmunityLevel)
-                               ah->stats.ast_ani_spurdown++;
-                       aniState->spurImmunityLevel = level;
-               }
-               break;
-       }
-       case ATH9K_ANI_MRC_CCK:
-               /*
-                * You should not see this as AR5008, AR9001, AR9002
-                * does not have hardware support for MRC CCK.
-                */
-               WARN_ON(1);
-               break;
-       case ATH9K_ANI_PRESENT:
-               break;
-       default:
-               ath_print(common, ATH_DBG_ANI,
-                         "invalid cmd %u\n", cmd);
-               return false;
-       }
-
-       ath_print(common, ATH_DBG_ANI,
-                 "ANI parameters: SI=%d, ofdmWS=%s FS=%d "
-                 "MRCcck=%s listenTime=%d CC=%d listen=%d "
-                 "ofdmErrs=%d cckErrs=%d\n",
-                 aniState->spurImmunityLevel,
-                 !aniState->ofdmWeakSigDetectOff ? "on" : "off",
-                 aniState->firstepLevel,
-                 !aniState->mrcCCKOff ? "on" : "off",
-                 aniState->listenTime,
-                 aniState->cycleCount,
-                 aniState->listenTime,
-                 aniState->ofdmPhyErrCount,
-                 aniState->cckPhyErrCount);
-       return true;
-}
-
-static void ar5008_hw_do_getnf(struct ath_hw *ah,
-                             int16_t nfarray[NUM_NF_READINGS])
-{
-       int16_t nf;
-
-       nf = MS(REG_READ(ah, AR_PHY_CCA), AR_PHY_MINCCA_PWR);
-       nfarray[0] = sign_extend(nf, 9);
-
-       nf = MS(REG_READ(ah, AR_PHY_CH1_CCA), AR_PHY_CH1_MINCCA_PWR);
-       nfarray[1] = sign_extend(nf, 9);
-
-       nf = MS(REG_READ(ah, AR_PHY_CH2_CCA), AR_PHY_CH2_MINCCA_PWR);
-       nfarray[2] = sign_extend(nf, 9);
-
-       if (!IS_CHAN_HT40(ah->curchan))
-               return;
-
-       nf = MS(REG_READ(ah, AR_PHY_EXT_CCA), AR_PHY_EXT_MINCCA_PWR);
-       nfarray[3] = sign_extend(nf, 9);
-
-       nf = MS(REG_READ(ah, AR_PHY_CH1_EXT_CCA), AR_PHY_CH1_EXT_MINCCA_PWR);
-       nfarray[4] = sign_extend(nf, 9);
-
-       nf = MS(REG_READ(ah, AR_PHY_CH2_EXT_CCA), AR_PHY_CH2_EXT_MINCCA_PWR);
-       nfarray[5] = sign_extend(nf, 9);
-}
-
-/*
- * Initialize the ANI register values with default (ini) values.
- * This routine is called during a (full) hardware reset after
- * all the registers are initialised from the INI.
- */
-static void ar5008_hw_ani_cache_ini_regs(struct ath_hw *ah)
-{
-       struct ar5416AniState *aniState;
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath9k_channel *chan = ah->curchan;
-       struct ath9k_ani_default *iniDef;
-       int index;
-       u32 val;
-
-       index = ath9k_hw_get_ani_channel_idx(ah, chan);
-       aniState = &ah->ani[index];
-       ah->curani = aniState;
-       iniDef = &aniState->iniDef;
-
-       ath_print(common, ATH_DBG_ANI,
-                 "ver %d.%d opmode %u chan %d Mhz/0x%x\n",
-                 ah->hw_version.macVersion,
-                 ah->hw_version.macRev,
-                 ah->opmode,
-                 chan->channel,
-                 chan->channelFlags);
-
-       val = REG_READ(ah, AR_PHY_SFCORR);
-       iniDef->m1Thresh = MS(val, AR_PHY_SFCORR_M1_THRESH);
-       iniDef->m2Thresh = MS(val, AR_PHY_SFCORR_M2_THRESH);
-       iniDef->m2CountThr = MS(val, AR_PHY_SFCORR_M2COUNT_THR);
-
-       val = REG_READ(ah, AR_PHY_SFCORR_LOW);
-       iniDef->m1ThreshLow = MS(val, AR_PHY_SFCORR_LOW_M1_THRESH_LOW);
-       iniDef->m2ThreshLow = MS(val, AR_PHY_SFCORR_LOW_M2_THRESH_LOW);
-       iniDef->m2CountThrLow = MS(val, AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW);
-
-       val = REG_READ(ah, AR_PHY_SFCORR_EXT);
-       iniDef->m1ThreshExt = MS(val, AR_PHY_SFCORR_EXT_M1_THRESH);
-       iniDef->m2ThreshExt = MS(val, AR_PHY_SFCORR_EXT_M2_THRESH);
-       iniDef->m1ThreshLowExt = MS(val, AR_PHY_SFCORR_EXT_M1_THRESH_LOW);
-       iniDef->m2ThreshLowExt = MS(val, AR_PHY_SFCORR_EXT_M2_THRESH_LOW);
-       iniDef->firstep = REG_READ_FIELD(ah,
-                                        AR_PHY_FIND_SIG,
-                                        AR_PHY_FIND_SIG_FIRSTEP);
-       iniDef->firstepLow = REG_READ_FIELD(ah,
-                                           AR_PHY_FIND_SIG_LOW,
-                                           AR_PHY_FIND_SIG_FIRSTEP_LOW);
-       iniDef->cycpwrThr1 = REG_READ_FIELD(ah,
-                                           AR_PHY_TIMING5,
-                                           AR_PHY_TIMING5_CYCPWR_THR1);
-       iniDef->cycpwrThr1Ext = REG_READ_FIELD(ah,
-                                              AR_PHY_EXT_CCA,
-                                              AR_PHY_EXT_TIMING5_CYCPWR_THR1);
-
-       /* these levels just got reset to defaults by the INI */
-       aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL_NEW;
-       aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
-       aniState->ofdmWeakSigDetectOff = !ATH9K_ANI_USE_OFDM_WEAK_SIG;
-       aniState->mrcCCKOff = true; /* not available on pre AR9003 */
-
-       aniState->cycleCount = 0;
-}
-
-static void ar5008_hw_set_nf_limits(struct ath_hw *ah)
-{
-       ah->nf_2g.max = AR_PHY_CCA_MAX_GOOD_VAL_5416_2GHZ;
-       ah->nf_2g.min = AR_PHY_CCA_MIN_GOOD_VAL_5416_2GHZ;
-       ah->nf_2g.nominal = AR_PHY_CCA_NOM_VAL_5416_2GHZ;
-       ah->nf_5g.max = AR_PHY_CCA_MAX_GOOD_VAL_5416_5GHZ;
-       ah->nf_5g.min = AR_PHY_CCA_MIN_GOOD_VAL_5416_5GHZ;
-       ah->nf_5g.nominal = AR_PHY_CCA_NOM_VAL_5416_5GHZ;
-}
-
-void ar5008_hw_attach_phy_ops(struct ath_hw *ah)
-{
-       struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
-       const u32 ar5416_cca_regs[6] = {
-               AR_PHY_CCA,
-               AR_PHY_CH1_CCA,
-               AR_PHY_CH2_CCA,
-               AR_PHY_EXT_CCA,
-               AR_PHY_CH1_EXT_CCA,
-               AR_PHY_CH2_EXT_CCA
-       };
-
-       priv_ops->rf_set_freq = ar5008_hw_set_channel;
-       priv_ops->spur_mitigate_freq = ar5008_hw_spur_mitigate;
-
-       priv_ops->rf_alloc_ext_banks = ar5008_hw_rf_alloc_ext_banks;
-       priv_ops->rf_free_ext_banks = ar5008_hw_rf_free_ext_banks;
-       priv_ops->set_rf_regs = ar5008_hw_set_rf_regs;
-       priv_ops->set_channel_regs = ar5008_hw_set_channel_regs;
-       priv_ops->init_bb = ar5008_hw_init_bb;
-       priv_ops->process_ini = ar5008_hw_process_ini;
-       priv_ops->set_rfmode = ar5008_hw_set_rfmode;
-       priv_ops->mark_phy_inactive = ar5008_hw_mark_phy_inactive;
-       priv_ops->set_delta_slope = ar5008_hw_set_delta_slope;
-       priv_ops->rfbus_req = ar5008_hw_rfbus_req;
-       priv_ops->rfbus_done = ar5008_hw_rfbus_done;
-       priv_ops->enable_rfkill = ar5008_hw_enable_rfkill;
-       priv_ops->restore_chainmask = ar5008_restore_chainmask;
-       priv_ops->set_diversity = ar5008_set_diversity;
-       priv_ops->do_getnf = ar5008_hw_do_getnf;
-
-       if (modparam_force_new_ani) {
-               priv_ops->ani_control = ar5008_hw_ani_control_new;
-               priv_ops->ani_cache_ini_regs = ar5008_hw_ani_cache_ini_regs;
-       } else
-               priv_ops->ani_control = ar5008_hw_ani_control_old;
-
-       if (AR_SREV_9100(ah))
-               priv_ops->compute_pll_control = ar9100_hw_compute_pll_control;
-       else if (AR_SREV_9160_10_OR_LATER(ah))
-               priv_ops->compute_pll_control = ar9160_hw_compute_pll_control;
-       else
-               priv_ops->compute_pll_control = ar5008_hw_compute_pll_control;
-
-       ar5008_hw_set_nf_limits(ah);
-       memcpy(ah->nf_regs, ar5416_cca_regs, sizeof(ah->nf_regs));
-}
diff --git a/drivers/net/wireless/ath/ath9k/ar9001_initvals.h b/drivers/net/wireless/ath/ath9k/ar9001_initvals.h
deleted file mode 100644 (file)
index 69a94c7..0000000
+++ /dev/null
@@ -1,1357 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-static const u32 ar5416Modes_9100[][6] = {
-       {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0},
-       {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0},
-       {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180},
-       {0x000010f0, 0x0000a000, 0x00014000, 0x00016000, 0x0000b000, 0x00014008},
-       {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0},
-       {0x0000801c, 0x128d93a7, 0x128d93cf, 0x12e013d7, 0x12e013ab, 0x098813cf},
-       {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810, 0x08f04810},
-       {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a, 0x0000320a},
-       {0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303},
-       {0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200},
-       {0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e},
-       {0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001},
-       {0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e},
-       {0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007},
-       {0x00009844, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0, 0x037216a0},
-       {0x00009848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68},
-       {0x0000a848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68},
-       {0x0000b848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68},
-       {0x00009850, 0x6c48b4e2, 0x6d48b4e2, 0x6d48b0e2, 0x6c48b0e2, 0x6c48b0e2},
-       {0x00009858, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e},
-       {0x0000985c, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e, 0x31395d5e},
-       {0x00009860, 0x00048d18, 0x00048d18, 0x00048d20, 0x00048d20, 0x00048d18},
-       {0x0000c864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00},
-       {0x00009868, 0x409a40d0, 0x409a40d0, 0x409a40d0, 0x409a40d0, 0x409a40d0},
-       {0x0000986c, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081},
-       {0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0},
-       {0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016},
-       {0x00009924, 0xd00a8a07, 0xd00a8a07, 0xd00a8a0d, 0xd00a8a0d, 0xd00a8a0d},
-       {0x00009940, 0x00750604, 0x00754604, 0xfff81204, 0xfff81204, 0xfff81204},
-       {0x00009944, 0xdfb81020, 0xdfb81020, 0xdfb81020, 0xdfb81020, 0xdfb81020},
-       {0x00009954, 0x5f3ca3de, 0x5f3ca3de, 0xe250a51e, 0xe250a51e, 0xe250a51e},
-       {0x00009958, 0x2108ecff, 0x2108ecff, 0x3388ffff, 0x3388ffff, 0x3388ffff},
-       {0x00009960, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0},
-       {0x0000a960, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0},
-       {0x0000b960, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0, 0x0001bfc0},
-       {0x00009964, 0x00001120, 0x00001120, 0x00001120, 0x00001120, 0x00001120},
-       {0x0000c9bc, 0x001a0600, 0x001a0600, 0x001a1000, 0x001a0c00, 0x001a0c00},
-       {0x000099c0, 0x038919be, 0x038919be, 0x038919be, 0x038919be, 0x038919be},
-       {0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77},
-       {0x000099c8, 0x6af65329, 0x6af65329, 0x6af65329, 0x6af65329, 0x6af65329},
-       {0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8},
-       {0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384},
-       {0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a204, 0x00000880, 0x00000880, 0x00000880, 0x00000880, 0x00000880},
-       {0x0000a208, 0xd6be4788, 0xd6be4788, 0xd03e4788, 0xd03e4788, 0xd03e4788},
-       {0x0000a20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120},
-       {0x0000b20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120},
-       {0x0000c20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120},
-       {0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a},
-       {0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000},
-       {0x0000a274, 0x0a1a9caa, 0x0a1a9caa, 0x0a1a7caa, 0x0a1a7caa, 0x0a1a7caa},
-       {0x0000a300, 0x18010000, 0x18010000, 0x18010000, 0x18010000, 0x18010000},
-       {0x0000a304, 0x30032602, 0x30032602, 0x2e032402, 0x2e032402, 0x2e032402},
-       {0x0000a308, 0x48073e06, 0x48073e06, 0x4a0a3c06, 0x4a0a3c06, 0x4a0a3c06},
-       {0x0000a30c, 0x560b4c0a, 0x560b4c0a, 0x621a540b, 0x621a540b, 0x621a540b},
-       {0x0000a310, 0x641a600f, 0x641a600f, 0x764f6c1b, 0x764f6c1b, 0x764f6c1b},
-       {0x0000a314, 0x7a4f6e1b, 0x7a4f6e1b, 0x845b7a5a, 0x845b7a5a, 0x845b7a5a},
-       {0x0000a318, 0x8c5b7e5a, 0x8c5b7e5a, 0x950f8ccf, 0x950f8ccf, 0x950f8ccf},
-       {0x0000a31c, 0x9d0f96cf, 0x9d0f96cf, 0xa5cf9b4f, 0xa5cf9b4f, 0xa5cf9b4f},
-       {0x0000a320, 0xb51fa69f, 0xb51fa69f, 0xbddfaf1f, 0xbddfaf1f, 0xbddfaf1f},
-       {0x0000a324, 0xcb3fbd07, 0xcb3fbcbf, 0xd1ffc93f, 0xd1ffc93f, 0xd1ffc93f},
-       {0x0000a328, 0x0000d7bf, 0x0000d7bf, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a32c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a330, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-};
-
-static const u32 ar5416Common_9100[][2] = {
-       /* Addr      allmodes  */
-       {0x0000000c, 0x00000000},
-       {0x00000030, 0x00020015},
-       {0x00000034, 0x00000005},
-       {0x00000040, 0x00000000},
-       {0x00000044, 0x00000008},
-       {0x00000048, 0x00000008},
-       {0x0000004c, 0x00000010},
-       {0x00000050, 0x00000000},
-       {0x00000054, 0x0000001f},
-       {0x00000800, 0x00000000},
-       {0x00000804, 0x00000000},
-       {0x00000808, 0x00000000},
-       {0x0000080c, 0x00000000},
-       {0x00000810, 0x00000000},
-       {0x00000814, 0x00000000},
-       {0x00000818, 0x00000000},
-       {0x0000081c, 0x00000000},
-       {0x00000820, 0x00000000},
-       {0x00000824, 0x00000000},
-       {0x00001040, 0x002ffc0f},
-       {0x00001044, 0x002ffc0f},
-       {0x00001048, 0x002ffc0f},
-       {0x0000104c, 0x002ffc0f},
-       {0x00001050, 0x002ffc0f},
-       {0x00001054, 0x002ffc0f},
-       {0x00001058, 0x002ffc0f},
-       {0x0000105c, 0x002ffc0f},
-       {0x00001060, 0x002ffc0f},
-       {0x00001064, 0x002ffc0f},
-       {0x00001230, 0x00000000},
-       {0x00001270, 0x00000000},
-       {0x00001038, 0x00000000},
-       {0x00001078, 0x00000000},
-       {0x000010b8, 0x00000000},
-       {0x000010f8, 0x00000000},
-       {0x00001138, 0x00000000},
-       {0x00001178, 0x00000000},
-       {0x000011b8, 0x00000000},
-       {0x000011f8, 0x00000000},
-       {0x00001238, 0x00000000},
-       {0x00001278, 0x00000000},
-       {0x000012b8, 0x00000000},
-       {0x000012f8, 0x00000000},
-       {0x00001338, 0x00000000},
-       {0x00001378, 0x00000000},
-       {0x000013b8, 0x00000000},
-       {0x000013f8, 0x00000000},
-       {0x00001438, 0x00000000},
-       {0x00001478, 0x00000000},
-       {0x000014b8, 0x00000000},
-       {0x000014f8, 0x00000000},
-       {0x00001538, 0x00000000},
-       {0x00001578, 0x00000000},
-       {0x000015b8, 0x00000000},
-       {0x000015f8, 0x00000000},
-       {0x00001638, 0x00000000},
-       {0x00001678, 0x00000000},
-       {0x000016b8, 0x00000000},
-       {0x000016f8, 0x00000000},
-       {0x00001738, 0x00000000},
-       {0x00001778, 0x00000000},
-       {0x000017b8, 0x00000000},
-       {0x000017f8, 0x00000000},
-       {0x0000103c, 0x00000000},
-       {0x0000107c, 0x00000000},
-       {0x000010bc, 0x00000000},
-       {0x000010fc, 0x00000000},
-       {0x0000113c, 0x00000000},
-       {0x0000117c, 0x00000000},
-       {0x000011bc, 0x00000000},
-       {0x000011fc, 0x00000000},
-       {0x0000123c, 0x00000000},
-       {0x0000127c, 0x00000000},
-       {0x000012bc, 0x00000000},
-       {0x000012fc, 0x00000000},
-       {0x0000133c, 0x00000000},
-       {0x0000137c, 0x00000000},
-       {0x000013bc, 0x00000000},
-       {0x000013fc, 0x00000000},
-       {0x0000143c, 0x00000000},
-       {0x0000147c, 0x00000000},
-       {0x00020010, 0x00000003},
-       {0x00020038, 0x000004c2},
-       {0x00008004, 0x00000000},
-       {0x00008008, 0x00000000},
-       {0x0000800c, 0x00000000},
-       {0x00008018, 0x00000700},
-       {0x00008020, 0x00000000},
-       {0x00008038, 0x00000000},
-       {0x0000803c, 0x00000000},
-       {0x00008048, 0x40000000},
-       {0x00008054, 0x00004000},
-       {0x00008058, 0x00000000},
-       {0x0000805c, 0x000fc78f},
-       {0x00008060, 0x0000000f},
-       {0x00008064, 0x00000000},
-       {0x000080c0, 0x2a82301a},
-       {0x000080c4, 0x05dc01e0},
-       {0x000080c8, 0x1f402710},
-       {0x000080cc, 0x01f40000},
-       {0x000080d0, 0x00001e00},
-       {0x000080d4, 0x00000000},
-       {0x000080d8, 0x00400000},
-       {0x000080e0, 0xffffffff},
-       {0x000080e4, 0x0000ffff},
-       {0x000080e8, 0x003f3f3f},
-       {0x000080ec, 0x00000000},
-       {0x000080f0, 0x00000000},
-       {0x000080f4, 0x00000000},
-       {0x000080f8, 0x00000000},
-       {0x000080fc, 0x00020000},
-       {0x00008100, 0x00020000},
-       {0x00008104, 0x00000001},
-       {0x00008108, 0x00000052},
-       {0x0000810c, 0x00000000},
-       {0x00008110, 0x00000168},
-       {0x00008118, 0x000100aa},
-       {0x0000811c, 0x00003210},
-       {0x00008120, 0x08f04800},
-       {0x00008124, 0x00000000},
-       {0x00008128, 0x00000000},
-       {0x0000812c, 0x00000000},
-       {0x00008130, 0x00000000},
-       {0x00008134, 0x00000000},
-       {0x00008138, 0x00000000},
-       {0x0000813c, 0x00000000},
-       {0x00008144, 0x00000000},
-       {0x00008168, 0x00000000},
-       {0x0000816c, 0x00000000},
-       {0x00008170, 0x32143320},
-       {0x00008174, 0xfaa4fa50},
-       {0x00008178, 0x00000100},
-       {0x0000817c, 0x00000000},
-       {0x000081c4, 0x00000000},
-       {0x000081d0, 0x00003210},
-       {0x000081ec, 0x00000000},
-       {0x000081f0, 0x00000000},
-       {0x000081f4, 0x00000000},
-       {0x000081f8, 0x00000000},
-       {0x000081fc, 0x00000000},
-       {0x00008200, 0x00000000},
-       {0x00008204, 0x00000000},
-       {0x00008208, 0x00000000},
-       {0x0000820c, 0x00000000},
-       {0x00008210, 0x00000000},
-       {0x00008214, 0x00000000},
-       {0x00008218, 0x00000000},
-       {0x0000821c, 0x00000000},
-       {0x00008220, 0x00000000},
-       {0x00008224, 0x00000000},
-       {0x00008228, 0x00000000},
-       {0x0000822c, 0x00000000},
-       {0x00008230, 0x00000000},
-       {0x00008234, 0x00000000},
-       {0x00008238, 0x00000000},
-       {0x0000823c, 0x00000000},
-       {0x00008240, 0x00100000},
-       {0x00008244, 0x0010f400},
-       {0x00008248, 0x00000100},
-       {0x0000824c, 0x0001e800},
-       {0x00008250, 0x00000000},
-       {0x00008254, 0x00000000},
-       {0x00008258, 0x00000000},
-       {0x0000825c, 0x400000ff},
-       {0x00008260, 0x00080922},
-       {0x00008270, 0x00000000},
-       {0x00008274, 0x40000000},
-       {0x00008278, 0x003e4180},
-       {0x0000827c, 0x00000000},
-       {0x00008284, 0x0000002c},
-       {0x00008288, 0x0000002c},
-       {0x0000828c, 0x00000000},
-       {0x00008294, 0x00000000},
-       {0x00008298, 0x00000000},
-       {0x00008300, 0x00000000},
-       {0x00008304, 0x00000000},
-       {0x00008308, 0x00000000},
-       {0x0000830c, 0x00000000},
-       {0x00008310, 0x00000000},
-       {0x00008314, 0x00000000},
-       {0x00008318, 0x00000000},
-       {0x00008328, 0x00000000},
-       {0x0000832c, 0x00000007},
-       {0x00008330, 0x00000302},
-       {0x00008334, 0x00000e00},
-       {0x00008338, 0x00000000},
-       {0x0000833c, 0x00000000},
-       {0x00008340, 0x000107ff},
-       {0x00009808, 0x00000000},
-       {0x0000980c, 0xad848e19},
-       {0x00009810, 0x7d14e000},
-       {0x00009814, 0x9c0a9f6b},
-       {0x0000981c, 0x00000000},
-       {0x0000982c, 0x0000a000},
-       {0x00009830, 0x00000000},
-       {0x0000983c, 0x00200400},
-       {0x00009840, 0x206a01ae},
-       {0x0000984c, 0x1284233c},
-       {0x00009854, 0x00000859},
-       {0x00009900, 0x00000000},
-       {0x00009904, 0x00000000},
-       {0x00009908, 0x00000000},
-       {0x0000990c, 0x00000000},
-       {0x0000991c, 0x10000fff},
-       {0x00009920, 0x05100000},
-       {0x0000a920, 0x05100000},
-       {0x0000b920, 0x05100000},
-       {0x00009928, 0x00000001},
-       {0x0000992c, 0x00000004},
-       {0x00009934, 0x1e1f2022},
-       {0x00009938, 0x0a0b0c0d},
-       {0x0000993c, 0x00000000},
-       {0x00009948, 0x9280b212},
-       {0x0000994c, 0x00020028},
-       {0x0000c95c, 0x004b6a8e},
-       {0x0000c968, 0x000003ce},
-       {0x00009970, 0x190fb515},
-       {0x00009974, 0x00000000},
-       {0x00009978, 0x00000001},
-       {0x0000997c, 0x00000000},
-       {0x00009980, 0x00000000},
-       {0x00009984, 0x00000000},
-       {0x00009988, 0x00000000},
-       {0x0000998c, 0x00000000},
-       {0x00009990, 0x00000000},
-       {0x00009994, 0x00000000},
-       {0x00009998, 0x00000000},
-       {0x0000999c, 0x00000000},
-       {0x000099a0, 0x00000000},
-       {0x000099a4, 0x00000001},
-       {0x000099a8, 0x201fff00},
-       {0x000099ac, 0x006f0000},
-       {0x000099b0, 0x03051000},
-       {0x000099dc, 0x00000000},
-       {0x000099e0, 0x00000200},
-       {0x000099e4, 0xaaaaaaaa},
-       {0x000099e8, 0x3c466478},
-       {0x000099ec, 0x0cc80caa},
-       {0x000099fc, 0x00001042},
-       {0x00009b00, 0x00000000},
-       {0x00009b04, 0x00000001},
-       {0x00009b08, 0x00000002},
-       {0x00009b0c, 0x00000003},
-       {0x00009b10, 0x00000004},
-       {0x00009b14, 0x00000005},
-       {0x00009b18, 0x00000008},
-       {0x00009b1c, 0x00000009},
-       {0x00009b20, 0x0000000a},
-       {0x00009b24, 0x0000000b},
-       {0x00009b28, 0x0000000c},
-       {0x00009b2c, 0x0000000d},
-       {0x00009b30, 0x00000010},
-       {0x00009b34, 0x00000011},
-       {0x00009b38, 0x00000012},
-       {0x00009b3c, 0x00000013},
-       {0x00009b40, 0x00000014},
-       {0x00009b44, 0x00000015},
-       {0x00009b48, 0x00000018},
-       {0x00009b4c, 0x00000019},
-       {0x00009b50, 0x0000001a},
-       {0x00009b54, 0x0000001b},
-       {0x00009b58, 0x0000001c},
-       {0x00009b5c, 0x0000001d},
-       {0x00009b60, 0x00000020},
-       {0x00009b64, 0x00000021},
-       {0x00009b68, 0x00000022},
-       {0x00009b6c, 0x00000023},
-       {0x00009b70, 0x00000024},
-       {0x00009b74, 0x00000025},
-       {0x00009b78, 0x00000028},
-       {0x00009b7c, 0x00000029},
-       {0x00009b80, 0x0000002a},
-       {0x00009b84, 0x0000002b},
-       {0x00009b88, 0x0000002c},
-       {0x00009b8c, 0x0000002d},
-       {0x00009b90, 0x00000030},
-       {0x00009b94, 0x00000031},
-       {0x00009b98, 0x00000032},
-       {0x00009b9c, 0x00000033},
-       {0x00009ba0, 0x00000034},
-       {0x00009ba4, 0x00000035},
-       {0x00009ba8, 0x00000035},
-       {0x00009bac, 0x00000035},
-       {0x00009bb0, 0x00000035},
-       {0x00009bb4, 0x00000035},
-       {0x00009bb8, 0x00000035},
-       {0x00009bbc, 0x00000035},
-       {0x00009bc0, 0x00000035},
-       {0x00009bc4, 0x00000035},
-       {0x00009bc8, 0x00000035},
-       {0x00009bcc, 0x00000035},
-       {0x00009bd0, 0x00000035},
-       {0x00009bd4, 0x00000035},
-       {0x00009bd8, 0x00000035},
-       {0x00009bdc, 0x00000035},
-       {0x00009be0, 0x00000035},
-       {0x00009be4, 0x00000035},
-       {0x00009be8, 0x00000035},
-       {0x00009bec, 0x00000035},
-       {0x00009bf0, 0x00000035},
-       {0x00009bf4, 0x00000035},
-       {0x00009bf8, 0x00000010},
-       {0x00009bfc, 0x0000001a},
-       {0x0000a210, 0x40806333},
-       {0x0000a214, 0x00106c10},
-       {0x0000a218, 0x009c4060},
-       {0x0000a220, 0x018830c6},
-       {0x0000a224, 0x00000400},
-       {0x0000a228, 0x001a0bb5},
-       {0x0000a22c, 0x00000000},
-       {0x0000a234, 0x20202020},
-       {0x0000a238, 0x20202020},
-       {0x0000a23c, 0x13c889af},
-       {0x0000a240, 0x38490a20},
-       {0x0000a244, 0x00007bb6},
-       {0x0000a248, 0x0fff3ffc},
-       {0x0000a24c, 0x00000001},
-       {0x0000a250, 0x0000e000},
-       {0x0000a254, 0x00000000},
-       {0x0000a258, 0x0cc75380},
-       {0x0000a25c, 0x0f0f0f01},
-       {0x0000a260, 0xdfa91f01},
-       {0x0000a268, 0x00000001},
-       {0x0000a26c, 0x0ebae9c6},
-       {0x0000b26c, 0x0ebae9c6},
-       {0x0000c26c, 0x0ebae9c6},
-       {0x0000d270, 0x00820820},
-       {0x0000a278, 0x1ce739ce},
-       {0x0000a27c, 0x050701ce},
-       {0x0000a338, 0x00000000},
-       {0x0000a33c, 0x00000000},
-       {0x0000a340, 0x00000000},
-       {0x0000a344, 0x00000000},
-       {0x0000a348, 0x3fffffff},
-       {0x0000a34c, 0x3fffffff},
-       {0x0000a350, 0x3fffffff},
-       {0x0000a354, 0x0003ffff},
-       {0x0000a358, 0x79a8aa33},
-       {0x0000d35c, 0x07ffffef},
-       {0x0000d360, 0x0fffffe7},
-       {0x0000d364, 0x17ffffe5},
-       {0x0000d368, 0x1fffffe4},
-       {0x0000d36c, 0x37ffffe3},
-       {0x0000d370, 0x3fffffe3},
-       {0x0000d374, 0x57ffffe3},
-       {0x0000d378, 0x5fffffe2},
-       {0x0000d37c, 0x7fffffe2},
-       {0x0000d380, 0x7f3c7bba},
-       {0x0000d384, 0xf3307ff0},
-       {0x0000a388, 0x0c000000},
-       {0x0000a38c, 0x20202020},
-       {0x0000a390, 0x20202020},
-       {0x0000a394, 0x1ce739ce},
-       {0x0000a398, 0x000001ce},
-       {0x0000a39c, 0x00000001},
-       {0x0000a3a0, 0x00000000},
-       {0x0000a3a4, 0x00000000},
-       {0x0000a3a8, 0x00000000},
-       {0x0000a3ac, 0x00000000},
-       {0x0000a3b0, 0x00000000},
-       {0x0000a3b4, 0x00000000},
-       {0x0000a3b8, 0x00000000},
-       {0x0000a3bc, 0x00000000},
-       {0x0000a3c0, 0x00000000},
-       {0x0000a3c4, 0x00000000},
-       {0x0000a3c8, 0x00000246},
-       {0x0000a3cc, 0x20202020},
-       {0x0000a3d0, 0x20202020},
-       {0x0000a3d4, 0x20202020},
-       {0x0000a3dc, 0x1ce739ce},
-       {0x0000a3e0, 0x000001ce},
-};
-
-static const u32 ar5416Bank0_9100[][2] = {
-       /* Addr      allmodes  */
-       {0x000098b0, 0x1e5795e5},
-       {0x000098e0, 0x02008020},
-};
-
-static const u32 ar5416BB_RfGain_9100[][3] = {
-       /* Addr      5G_HT20     5G_HT40   */
-       {0x00009a00, 0x00000000, 0x00000000},
-       {0x00009a04, 0x00000040, 0x00000040},
-       {0x00009a08, 0x00000080, 0x00000080},
-       {0x00009a0c, 0x000001a1, 0x00000141},
-       {0x00009a10, 0x000001e1, 0x00000181},
-       {0x00009a14, 0x00000021, 0x000001c1},
-       {0x00009a18, 0x00000061, 0x00000001},
-       {0x00009a1c, 0x00000168, 0x00000041},
-       {0x00009a20, 0x000001a8, 0x000001a8},
-       {0x00009a24, 0x000001e8, 0x000001e8},
-       {0x00009a28, 0x00000028, 0x00000028},
-       {0x00009a2c, 0x00000068, 0x00000068},
-       {0x00009a30, 0x00000189, 0x000000a8},
-       {0x00009a34, 0x000001c9, 0x00000169},
-       {0x00009a38, 0x00000009, 0x000001a9},
-       {0x00009a3c, 0x00000049, 0x000001e9},
-       {0x00009a40, 0x00000089, 0x00000029},
-       {0x00009a44, 0x00000170, 0x00000069},
-       {0x00009a48, 0x000001b0, 0x00000190},
-       {0x00009a4c, 0x000001f0, 0x000001d0},
-       {0x00009a50, 0x00000030, 0x00000010},
-       {0x00009a54, 0x00000070, 0x00000050},
-       {0x00009a58, 0x00000191, 0x00000090},
-       {0x00009a5c, 0x000001d1, 0x00000151},
-       {0x00009a60, 0x00000011, 0x00000191},
-       {0x00009a64, 0x00000051, 0x000001d1},
-       {0x00009a68, 0x00000091, 0x00000011},
-       {0x00009a6c, 0x000001b8, 0x00000051},
-       {0x00009a70, 0x000001f8, 0x00000198},
-       {0x00009a74, 0x00000038, 0x000001d8},
-       {0x00009a78, 0x00000078, 0x00000018},
-       {0x00009a7c, 0x00000199, 0x00000058},
-       {0x00009a80, 0x000001d9, 0x00000098},
-       {0x00009a84, 0x00000019, 0x00000159},
-       {0x00009a88, 0x00000059, 0x00000199},
-       {0x00009a8c, 0x00000099, 0x000001d9},
-       {0x00009a90, 0x000000d9, 0x00000019},
-       {0x00009a94, 0x000000f9, 0x00000059},
-       {0x00009a98, 0x000000f9, 0x00000099},
-       {0x00009a9c, 0x000000f9, 0x000000d9},
-       {0x00009aa0, 0x000000f9, 0x000000f9},
-       {0x00009aa4, 0x000000f9, 0x000000f9},
-       {0x00009aa8, 0x000000f9, 0x000000f9},
-       {0x00009aac, 0x000000f9, 0x000000f9},
-       {0x00009ab0, 0x000000f9, 0x000000f9},
-       {0x00009ab4, 0x000000f9, 0x000000f9},
-       {0x00009ab8, 0x000000f9, 0x000000f9},
-       {0x00009abc, 0x000000f9, 0x000000f9},
-       {0x00009ac0, 0x000000f9, 0x000000f9},
-       {0x00009ac4, 0x000000f9, 0x000000f9},
-       {0x00009ac8, 0x000000f9, 0x000000f9},
-       {0x00009acc, 0x000000f9, 0x000000f9},
-       {0x00009ad0, 0x000000f9, 0x000000f9},
-       {0x00009ad4, 0x000000f9, 0x000000f9},
-       {0x00009ad8, 0x000000f9, 0x000000f9},
-       {0x00009adc, 0x000000f9, 0x000000f9},
-       {0x00009ae0, 0x000000f9, 0x000000f9},
-       {0x00009ae4, 0x000000f9, 0x000000f9},
-       {0x00009ae8, 0x000000f9, 0x000000f9},
-       {0x00009aec, 0x000000f9, 0x000000f9},
-       {0x00009af0, 0x000000f9, 0x000000f9},
-       {0x00009af4, 0x000000f9, 0x000000f9},
-       {0x00009af8, 0x000000f9, 0x000000f9},
-       {0x00009afc, 0x000000f9, 0x000000f9},
-};
-
-static const u32 ar5416Bank1_9100[][2] = {
-       /* Addr      allmodes  */
-       {0x000098b0, 0x02108421},
-       {0x000098ec, 0x00000008},
-};
-
-static const u32 ar5416Bank2_9100[][2] = {
-       /* Addr      allmodes  */
-       {0x000098b0, 0x0e73ff17},
-       {0x000098e0, 0x00000420},
-};
-
-static const u32 ar5416Bank3_9100[][3] = {
-       /* Addr      5G_HT20     5G_HT40   */
-       {0x000098f0, 0x01400018, 0x01c00018},
-};
-
-static const u32 ar5416Bank6_9100[][3] = {
-       /* Addr      5G_HT20     5G_HT40   */
-       {0x0000989c, 0x00000000, 0x00000000},
-       {0x0000989c, 0x00000000, 0x00000000},
-       {0x0000989c, 0x00000000, 0x00000000},
-       {0x0000989c, 0x00e00000, 0x00e00000},
-       {0x0000989c, 0x005e0000, 0x005e0000},
-       {0x0000989c, 0x00120000, 0x00120000},
-       {0x0000989c, 0x00620000, 0x00620000},
-       {0x0000989c, 0x00020000, 0x00020000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x005f0000, 0x005f0000},
-       {0x0000989c, 0x00870000, 0x00870000},
-       {0x0000989c, 0x00f90000, 0x00f90000},
-       {0x0000989c, 0x007b0000, 0x007b0000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x00f50000, 0x00f50000},
-       {0x0000989c, 0x00dc0000, 0x00dc0000},
-       {0x0000989c, 0x00110000, 0x00110000},
-       {0x0000989c, 0x006100a8, 0x006100a8},
-       {0x0000989c, 0x004210a2, 0x004210a2},
-       {0x0000989c, 0x0014000f, 0x0014000f},
-       {0x0000989c, 0x00c40002, 0x00c40002},
-       {0x0000989c, 0x003000f2, 0x003000f2},
-       {0x0000989c, 0x00440016, 0x00440016},
-       {0x0000989c, 0x00410040, 0x00410040},
-       {0x0000989c, 0x000180d6, 0x000180d6},
-       {0x0000989c, 0x0000c0aa, 0x0000c0aa},
-       {0x0000989c, 0x000000b1, 0x000000b1},
-       {0x0000989c, 0x00002000, 0x00002000},
-       {0x0000989c, 0x000000d4, 0x000000d4},
-       {0x000098d0, 0x0000000f, 0x0010000f},
-};
-
-static const u32 ar5416Bank6TPC_9100[][3] = {
-       /* Addr      5G_HT20     5G_HT40   */
-       {0x0000989c, 0x00000000, 0x00000000},
-       {0x0000989c, 0x00000000, 0x00000000},
-       {0x0000989c, 0x00000000, 0x00000000},
-       {0x0000989c, 0x00e00000, 0x00e00000},
-       {0x0000989c, 0x005e0000, 0x005e0000},
-       {0x0000989c, 0x00120000, 0x00120000},
-       {0x0000989c, 0x00620000, 0x00620000},
-       {0x0000989c, 0x00020000, 0x00020000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x40ff0000, 0x40ff0000},
-       {0x0000989c, 0x005f0000, 0x005f0000},
-       {0x0000989c, 0x00870000, 0x00870000},
-       {0x0000989c, 0x00f90000, 0x00f90000},
-       {0x0000989c, 0x007b0000, 0x007b0000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x00f50000, 0x00f50000},
-       {0x0000989c, 0x00dc0000, 0x00dc0000},
-       {0x0000989c, 0x00110000, 0x00110000},
-       {0x0000989c, 0x006100a8, 0x006100a8},
-       {0x0000989c, 0x00423022, 0x00423022},
-       {0x0000989c, 0x2014008f, 0x2014008f},
-       {0x0000989c, 0x00c40002, 0x00c40002},
-       {0x0000989c, 0x003000f2, 0x003000f2},
-       {0x0000989c, 0x00440016, 0x00440016},
-       {0x0000989c, 0x00410040, 0x00410040},
-       {0x0000989c, 0x0001805e, 0x0001805e},
-       {0x0000989c, 0x0000c0ab, 0x0000c0ab},
-       {0x0000989c, 0x000000e1, 0x000000e1},
-       {0x0000989c, 0x00007080, 0x00007080},
-       {0x0000989c, 0x000000d4, 0x000000d4},
-       {0x000098d0, 0x0000000f, 0x0010000f},
-};
-
-static const u32 ar5416Bank7_9100[][2] = {
-       /* Addr      allmodes  */
-       {0x0000989c, 0x00000500},
-       {0x0000989c, 0x00000800},
-       {0x000098cc, 0x0000000e},
-};
-
-static const u32 ar5416Addac_9100[][2] = {
-       /* Addr      allmodes  */
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000010},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x000000c0},
-       {0x0000989c, 0x00000015},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x000098cc, 0x00000000},
-};
-
-static const u32 ar5416Modes_9160[][6] = {
-       {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0},
-       {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0},
-       {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180},
-       {0x000010f0, 0x0000a000, 0x00014000, 0x00016000, 0x0000b000, 0x00014008},
-       {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0},
-       {0x0000801c, 0x128d93a7, 0x128d93cf, 0x12e013d7, 0x12e013ab, 0x098813cf},
-       {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810, 0x08f04810},
-       {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a, 0x0000320a},
-       {0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303},
-       {0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200},
-       {0x00009824, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e},
-       {0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001},
-       {0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e},
-       {0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007},
-       {0x00009844, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0, 0x037216a0},
-       {0x00009848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68},
-       {0x0000a848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68},
-       {0x0000b848, 0x001a6a65, 0x001a6a65, 0x00197a68, 0x00197a68, 0x00197a68},
-       {0x00009850, 0x6c48b4e2, 0x6d48b4e2, 0x6d48b0e2, 0x6c48b0e2, 0x6c48b0e2},
-       {0x00009858, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e, 0x7ec82d2e},
-       {0x0000985c, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e, 0x31395d5e},
-       {0x00009860, 0x00048d18, 0x00048d18, 0x00048d20, 0x00048d20, 0x00048d18},
-       {0x00009864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00},
-       {0x00009868, 0x409a40d0, 0x409a40d0, 0x409a40d0, 0x409a40d0, 0x409a40d0},
-       {0x0000986c, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081, 0x050cb081},
-       {0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0},
-       {0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016},
-       {0x00009924, 0xd00a8a07, 0xd00a8a07, 0xd00a8a0d, 0xd00a8a0d, 0xd00a8a0d},
-       {0x00009944, 0xffb81020, 0xffb81020, 0xffb81020, 0xffb81020, 0xffb81020},
-       {0x00009960, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40},
-       {0x0000a960, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40},
-       {0x0000b960, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40, 0x00009b40},
-       {0x00009964, 0x00001120, 0x00001120, 0x00001120, 0x00001120, 0x00001120},
-       {0x0000c968, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce, 0x000003ce},
-       {0x000099bc, 0x001a0600, 0x001a0600, 0x001a0c00, 0x001a0c00, 0x001a0c00},
-       {0x000099c0, 0x038919be, 0x038919be, 0x038919be, 0x038919be, 0x038919be},
-       {0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77},
-       {0x000099c8, 0x6af65329, 0x6af65329, 0x6af65329, 0x6af65329, 0x6af65329},
-       {0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8},
-       {0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384},
-       {0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a204, 0x00000880, 0x00000880, 0x00000880, 0x00000880, 0x00000880},
-       {0x0000a208, 0xd6be4788, 0xd6be4788, 0xd03e4788, 0xd03e4788, 0xd03e4788},
-       {0x0000a20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120},
-       {0x0000b20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120},
-       {0x0000c20c, 0x002fc160, 0x002fc160, 0x002ac120, 0x002ac120, 0x002ac120},
-       {0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a},
-       {0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000},
-       {0x0000a274, 0x0a1a9caa, 0x0a1a9caa, 0x0a1a7caa, 0x0a1a7caa, 0x0a1a7caa},
-       {0x0000a300, 0x18010000, 0x18010000, 0x18010000, 0x18010000, 0x18010000},
-       {0x0000a304, 0x30032602, 0x30032602, 0x2e032402, 0x2e032402, 0x2e032402},
-       {0x0000a308, 0x48073e06, 0x48073e06, 0x4a0a3c06, 0x4a0a3c06, 0x4a0a3c06},
-       {0x0000a30c, 0x560b4c0a, 0x560b4c0a, 0x621a540b, 0x621a540b, 0x621a540b},
-       {0x0000a310, 0x641a600f, 0x641a600f, 0x764f6c1b, 0x764f6c1b, 0x764f6c1b},
-       {0x0000a314, 0x7a4f6e1b, 0x7a4f6e1b, 0x845b7a5a, 0x845b7a5a, 0x845b7a5a},
-       {0x0000a318, 0x8c5b7e5a, 0x8c5b7e5a, 0x950f8ccf, 0x950f8ccf, 0x950f8ccf},
-       {0x0000a31c, 0x9d0f96cf, 0x9d0f96cf, 0xa5cf9b4f, 0xa5cf9b4f, 0xa5cf9b4f},
-       {0x0000a320, 0xb51fa69f, 0xb51fa69f, 0xbddfaf1f, 0xbddfaf1f, 0xbddfaf1f},
-       {0x0000a324, 0xcb3fbd07, 0xcb3fbcbf, 0xd1ffc93f, 0xd1ffc93f, 0xd1ffc93f},
-       {0x0000a328, 0x0000d7bf, 0x0000d7bf, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a32c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a330, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a334, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-};
-
-static const u32 ar5416Common_9160[][2] = {
-       /* Addr      allmodes  */
-       {0x0000000c, 0x00000000},
-       {0x00000030, 0x00020015},
-       {0x00000034, 0x00000005},
-       {0x00000040, 0x00000000},
-       {0x00000044, 0x00000008},
-       {0x00000048, 0x00000008},
-       {0x0000004c, 0x00000010},
-       {0x00000050, 0x00000000},
-       {0x00000054, 0x0000001f},
-       {0x00000800, 0x00000000},
-       {0x00000804, 0x00000000},
-       {0x00000808, 0x00000000},
-       {0x0000080c, 0x00000000},
-       {0x00000810, 0x00000000},
-       {0x00000814, 0x00000000},
-       {0x00000818, 0x00000000},
-       {0x0000081c, 0x00000000},
-       {0x00000820, 0x00000000},
-       {0x00000824, 0x00000000},
-       {0x00001040, 0x002ffc0f},
-       {0x00001044, 0x002ffc0f},
-       {0x00001048, 0x002ffc0f},
-       {0x0000104c, 0x002ffc0f},
-       {0x00001050, 0x002ffc0f},
-       {0x00001054, 0x002ffc0f},
-       {0x00001058, 0x002ffc0f},
-       {0x0000105c, 0x002ffc0f},
-       {0x00001060, 0x002ffc0f},
-       {0x00001064, 0x002ffc0f},
-       {0x00001230, 0x00000000},
-       {0x00001270, 0x00000000},
-       {0x00001038, 0x00000000},
-       {0x00001078, 0x00000000},
-       {0x000010b8, 0x00000000},
-       {0x000010f8, 0x00000000},
-       {0x00001138, 0x00000000},
-       {0x00001178, 0x00000000},
-       {0x000011b8, 0x00000000},
-       {0x000011f8, 0x00000000},
-       {0x00001238, 0x00000000},
-       {0x00001278, 0x00000000},
-       {0x000012b8, 0x00000000},
-       {0x000012f8, 0x00000000},
-       {0x00001338, 0x00000000},
-       {0x00001378, 0x00000000},
-       {0x000013b8, 0x00000000},
-       {0x000013f8, 0x00000000},
-       {0x00001438, 0x00000000},
-       {0x00001478, 0x00000000},
-       {0x000014b8, 0x00000000},
-       {0x000014f8, 0x00000000},
-       {0x00001538, 0x00000000},
-       {0x00001578, 0x00000000},
-       {0x000015b8, 0x00000000},
-       {0x000015f8, 0x00000000},
-       {0x00001638, 0x00000000},
-       {0x00001678, 0x00000000},
-       {0x000016b8, 0x00000000},
-       {0x000016f8, 0x00000000},
-       {0x00001738, 0x00000000},
-       {0x00001778, 0x00000000},
-       {0x000017b8, 0x00000000},
-       {0x000017f8, 0x00000000},
-       {0x0000103c, 0x00000000},
-       {0x0000107c, 0x00000000},
-       {0x000010bc, 0x00000000},
-       {0x000010fc, 0x00000000},
-       {0x0000113c, 0x00000000},
-       {0x0000117c, 0x00000000},
-       {0x000011bc, 0x00000000},
-       {0x000011fc, 0x00000000},
-       {0x0000123c, 0x00000000},
-       {0x0000127c, 0x00000000},
-       {0x000012bc, 0x00000000},
-       {0x000012fc, 0x00000000},
-       {0x0000133c, 0x00000000},
-       {0x0000137c, 0x00000000},
-       {0x000013bc, 0x00000000},
-       {0x000013fc, 0x00000000},
-       {0x0000143c, 0x00000000},
-       {0x0000147c, 0x00000000},
-       {0x00004030, 0x00000002},
-       {0x0000403c, 0x00000002},
-       {0x00007010, 0x00000020},
-       {0x00007038, 0x000004c2},
-       {0x00008004, 0x00000000},
-       {0x00008008, 0x00000000},
-       {0x0000800c, 0x00000000},
-       {0x00008018, 0x00000700},
-       {0x00008020, 0x00000000},
-       {0x00008038, 0x00000000},
-       {0x0000803c, 0x00000000},
-       {0x00008048, 0x40000000},
-       {0x00008054, 0x00000000},
-       {0x00008058, 0x00000000},
-       {0x0000805c, 0x000fc78f},
-       {0x00008060, 0x0000000f},
-       {0x00008064, 0x00000000},
-       {0x000080c0, 0x2a82301a},
-       {0x000080c4, 0x05dc01e0},
-       {0x000080c8, 0x1f402710},
-       {0x000080cc, 0x01f40000},
-       {0x000080d0, 0x00001e00},
-       {0x000080d4, 0x00000000},
-       {0x000080d8, 0x00400000},
-       {0x000080e0, 0xffffffff},
-       {0x000080e4, 0x0000ffff},
-       {0x000080e8, 0x003f3f3f},
-       {0x000080ec, 0x00000000},
-       {0x000080f0, 0x00000000},
-       {0x000080f4, 0x00000000},
-       {0x000080f8, 0x00000000},
-       {0x000080fc, 0x00020000},
-       {0x00008100, 0x00020000},
-       {0x00008104, 0x00000001},
-       {0x00008108, 0x00000052},
-       {0x0000810c, 0x00000000},
-       {0x00008110, 0x00000168},
-       {0x00008118, 0x000100aa},
-       {0x0000811c, 0x00003210},
-       {0x00008124, 0x00000000},
-       {0x00008128, 0x00000000},
-       {0x0000812c, 0x00000000},
-       {0x00008130, 0x00000000},
-       {0x00008134, 0x00000000},
-       {0x00008138, 0x00000000},
-       {0x0000813c, 0x00000000},
-       {0x00008144, 0xffffffff},
-       {0x00008168, 0x00000000},
-       {0x0000816c, 0x00000000},
-       {0x00008170, 0x32143320},
-       {0x00008174, 0xfaa4fa50},
-       {0x00008178, 0x00000100},
-       {0x0000817c, 0x00000000},
-       {0x000081c4, 0x00000000},
-       {0x000081ec, 0x00000000},
-       {0x000081f0, 0x00000000},
-       {0x000081f4, 0x00000000},
-       {0x000081f8, 0x00000000},
-       {0x000081fc, 0x00000000},
-       {0x00008200, 0x00000000},
-       {0x00008204, 0x00000000},
-       {0x00008208, 0x00000000},
-       {0x0000820c, 0x00000000},
-       {0x00008210, 0x00000000},
-       {0x00008214, 0x00000000},
-       {0x00008218, 0x00000000},
-       {0x0000821c, 0x00000000},
-       {0x00008220, 0x00000000},
-       {0x00008224, 0x00000000},
-       {0x00008228, 0x00000000},
-       {0x0000822c, 0x00000000},
-       {0x00008230, 0x00000000},
-       {0x00008234, 0x00000000},
-       {0x00008238, 0x00000000},
-       {0x0000823c, 0x00000000},
-       {0x00008240, 0x00100000},
-       {0x00008244, 0x0010f400},
-       {0x00008248, 0x00000100},
-       {0x0000824c, 0x0001e800},
-       {0x00008250, 0x00000000},
-       {0x00008254, 0x00000000},
-       {0x00008258, 0x00000000},
-       {0x0000825c, 0x400000ff},
-       {0x00008260, 0x00080922},
-       {0x00008264, 0x88a00010},
-       {0x00008270, 0x00000000},
-       {0x00008274, 0x40000000},
-       {0x00008278, 0x003e4180},
-       {0x0000827c, 0x00000000},
-       {0x00008284, 0x0000002c},
-       {0x00008288, 0x0000002c},
-       {0x0000828c, 0x00000000},
-       {0x00008294, 0x00000000},
-       {0x00008298, 0x00000000},
-       {0x00008300, 0x00000000},
-       {0x00008304, 0x00000000},
-       {0x00008308, 0x00000000},
-       {0x0000830c, 0x00000000},
-       {0x00008310, 0x00000000},
-       {0x00008314, 0x00000000},
-       {0x00008318, 0x00000000},
-       {0x00008328, 0x00000000},
-       {0x0000832c, 0x00000007},
-       {0x00008330, 0x00000302},
-       {0x00008334, 0x00000e00},
-       {0x00008338, 0x00ff0000},
-       {0x0000833c, 0x00000000},
-       {0x00008340, 0x000107ff},
-       {0x00009808, 0x00000000},
-       {0x0000980c, 0xad848e19},
-       {0x00009810, 0x7d14e000},
-       {0x00009814, 0x9c0a9f6b},
-       {0x0000981c, 0x00000000},
-       {0x0000982c, 0x0000a000},
-       {0x00009830, 0x00000000},
-       {0x0000983c, 0x00200400},
-       {0x00009840, 0x206a01ae},
-       {0x0000984c, 0x1284233c},
-       {0x00009854, 0x00000859},
-       {0x00009900, 0x00000000},
-       {0x00009904, 0x00000000},
-       {0x00009908, 0x00000000},
-       {0x0000990c, 0x00000000},
-       {0x0000991c, 0x10000fff},
-       {0x00009920, 0x05100000},
-       {0x0000a920, 0x05100000},
-       {0x0000b920, 0x05100000},
-       {0x00009928, 0x00000001},
-       {0x0000992c, 0x00000004},
-       {0x00009934, 0x1e1f2022},
-       {0x00009938, 0x0a0b0c0d},
-       {0x0000993c, 0x00000000},
-       {0x00009948, 0x9280b212},
-       {0x0000994c, 0x00020028},
-       {0x00009954, 0x5f3ca3de},
-       {0x00009958, 0x2108ecff},
-       {0x00009940, 0x00750604},
-       {0x0000c95c, 0x004b6a8e},
-       {0x00009970, 0x190fb515},
-       {0x00009974, 0x00000000},
-       {0x00009978, 0x00000001},
-       {0x0000997c, 0x00000000},
-       {0x00009980, 0x00000000},
-       {0x00009984, 0x00000000},
-       {0x00009988, 0x00000000},
-       {0x0000998c, 0x00000000},
-       {0x00009990, 0x00000000},
-       {0x00009994, 0x00000000},
-       {0x00009998, 0x00000000},
-       {0x0000999c, 0x00000000},
-       {0x000099a0, 0x00000000},
-       {0x000099a4, 0x00000001},
-       {0x000099a8, 0x201fff00},
-       {0x000099ac, 0x006f0000},
-       {0x000099b0, 0x03051000},
-       {0x000099dc, 0x00000000},
-       {0x000099e0, 0x00000200},
-       {0x000099e4, 0xaaaaaaaa},
-       {0x000099e8, 0x3c466478},
-       {0x000099ec, 0x0cc80caa},
-       {0x000099fc, 0x00001042},
-       {0x00009b00, 0x00000000},
-       {0x00009b04, 0x00000001},
-       {0x00009b08, 0x00000002},
-       {0x00009b0c, 0x00000003},
-       {0x00009b10, 0x00000004},
-       {0x00009b14, 0x00000005},
-       {0x00009b18, 0x00000008},
-       {0x00009b1c, 0x00000009},
-       {0x00009b20, 0x0000000a},
-       {0x00009b24, 0x0000000b},
-       {0x00009b28, 0x0000000c},
-       {0x00009b2c, 0x0000000d},
-       {0x00009b30, 0x00000010},
-       {0x00009b34, 0x00000011},
-       {0x00009b38, 0x00000012},
-       {0x00009b3c, 0x00000013},
-       {0x00009b40, 0x00000014},
-       {0x00009b44, 0x00000015},
-       {0x00009b48, 0x00000018},
-       {0x00009b4c, 0x00000019},
-       {0x00009b50, 0x0000001a},
-       {0x00009b54, 0x0000001b},
-       {0x00009b58, 0x0000001c},
-       {0x00009b5c, 0x0000001d},
-       {0x00009b60, 0x00000020},
-       {0x00009b64, 0x00000021},
-       {0x00009b68, 0x00000022},
-       {0x00009b6c, 0x00000023},
-       {0x00009b70, 0x00000024},
-       {0x00009b74, 0x00000025},
-       {0x00009b78, 0x00000028},
-       {0x00009b7c, 0x00000029},
-       {0x00009b80, 0x0000002a},
-       {0x00009b84, 0x0000002b},
-       {0x00009b88, 0x0000002c},
-       {0x00009b8c, 0x0000002d},
-       {0x00009b90, 0x00000030},
-       {0x00009b94, 0x00000031},
-       {0x00009b98, 0x00000032},
-       {0x00009b9c, 0x00000033},
-       {0x00009ba0, 0x00000034},
-       {0x00009ba4, 0x00000035},
-       {0x00009ba8, 0x00000035},
-       {0x00009bac, 0x00000035},
-       {0x00009bb0, 0x00000035},
-       {0x00009bb4, 0x00000035},
-       {0x00009bb8, 0x00000035},
-       {0x00009bbc, 0x00000035},
-       {0x00009bc0, 0x00000035},
-       {0x00009bc4, 0x00000035},
-       {0x00009bc8, 0x00000035},
-       {0x00009bcc, 0x00000035},
-       {0x00009bd0, 0x00000035},
-       {0x00009bd4, 0x00000035},
-       {0x00009bd8, 0x00000035},
-       {0x00009bdc, 0x00000035},
-       {0x00009be0, 0x00000035},
-       {0x00009be4, 0x00000035},
-       {0x00009be8, 0x00000035},
-       {0x00009bec, 0x00000035},
-       {0x00009bf0, 0x00000035},
-       {0x00009bf4, 0x00000035},
-       {0x00009bf8, 0x00000010},
-       {0x00009bfc, 0x0000001a},
-       {0x0000a210, 0x40806333},
-       {0x0000a214, 0x00106c10},
-       {0x0000a218, 0x009c4060},
-       {0x0000a220, 0x018830c6},
-       {0x0000a224, 0x00000400},
-       {0x0000a228, 0x001a0bb5},
-       {0x0000a22c, 0x00000000},
-       {0x0000a234, 0x20202020},
-       {0x0000a238, 0x20202020},
-       {0x0000a23c, 0x13c889af},
-       {0x0000a240, 0x38490a20},
-       {0x0000a244, 0x00007bb6},
-       {0x0000a248, 0x0fff3ffc},
-       {0x0000a24c, 0x00000001},
-       {0x0000a250, 0x0000e000},
-       {0x0000a254, 0x00000000},
-       {0x0000a258, 0x0cc75380},
-       {0x0000a25c, 0x0f0f0f01},
-       {0x0000a260, 0xdfa91f01},
-       {0x0000a268, 0x00000001},
-       {0x0000a26c, 0x0e79e5c6},
-       {0x0000b26c, 0x0e79e5c6},
-       {0x0000c26c, 0x0e79e5c6},
-       {0x0000d270, 0x00820820},
-       {0x0000a278, 0x1ce739ce},
-       {0x0000a27c, 0x050701ce},
-       {0x0000a338, 0x00000000},
-       {0x0000a33c, 0x00000000},
-       {0x0000a340, 0x00000000},
-       {0x0000a344, 0x00000000},
-       {0x0000a348, 0x3fffffff},
-       {0x0000a34c, 0x3fffffff},
-       {0x0000a350, 0x3fffffff},
-       {0x0000a354, 0x0003ffff},
-       {0x0000a358, 0x79bfaa03},
-       {0x0000d35c, 0x07ffffef},
-       {0x0000d360, 0x0fffffe7},
-       {0x0000d364, 0x17ffffe5},
-       {0x0000d368, 0x1fffffe4},
-       {0x0000d36c, 0x37ffffe3},
-       {0x0000d370, 0x3fffffe3},
-       {0x0000d374, 0x57ffffe3},
-       {0x0000d378, 0x5fffffe2},
-       {0x0000d37c, 0x7fffffe2},
-       {0x0000d380, 0x7f3c7bba},
-       {0x0000d384, 0xf3307ff0},
-       {0x0000a388, 0x0c000000},
-       {0x0000a38c, 0x20202020},
-       {0x0000a390, 0x20202020},
-       {0x0000a394, 0x1ce739ce},
-       {0x0000a398, 0x000001ce},
-       {0x0000a39c, 0x00000001},
-       {0x0000a3a0, 0x00000000},
-       {0x0000a3a4, 0x00000000},
-       {0x0000a3a8, 0x00000000},
-       {0x0000a3ac, 0x00000000},
-       {0x0000a3b0, 0x00000000},
-       {0x0000a3b4, 0x00000000},
-       {0x0000a3b8, 0x00000000},
-       {0x0000a3bc, 0x00000000},
-       {0x0000a3c0, 0x00000000},
-       {0x0000a3c4, 0x00000000},
-       {0x0000a3c8, 0x00000246},
-       {0x0000a3cc, 0x20202020},
-       {0x0000a3d0, 0x20202020},
-       {0x0000a3d4, 0x20202020},
-       {0x0000a3dc, 0x1ce739ce},
-       {0x0000a3e0, 0x000001ce},
-};
-
-static const u32 ar5416Bank0_9160[][2] = {
-       /* Addr      allmodes  */
-       {0x000098b0, 0x1e5795e5},
-       {0x000098e0, 0x02008020},
-};
-
-static const u32 ar5416BB_RfGain_9160[][3] = {
-       /* Addr      5G_HT20     5G_HT40   */
-       {0x00009a00, 0x00000000, 0x00000000},
-       {0x00009a04, 0x00000040, 0x00000040},
-       {0x00009a08, 0x00000080, 0x00000080},
-       {0x00009a0c, 0x000001a1, 0x00000141},
-       {0x00009a10, 0x000001e1, 0x00000181},
-       {0x00009a14, 0x00000021, 0x000001c1},
-       {0x00009a18, 0x00000061, 0x00000001},
-       {0x00009a1c, 0x00000168, 0x00000041},
-       {0x00009a20, 0x000001a8, 0x000001a8},
-       {0x00009a24, 0x000001e8, 0x000001e8},
-       {0x00009a28, 0x00000028, 0x00000028},
-       {0x00009a2c, 0x00000068, 0x00000068},
-       {0x00009a30, 0x00000189, 0x000000a8},
-       {0x00009a34, 0x000001c9, 0x00000169},
-       {0x00009a38, 0x00000009, 0x000001a9},
-       {0x00009a3c, 0x00000049, 0x000001e9},
-       {0x00009a40, 0x00000089, 0x00000029},
-       {0x00009a44, 0x00000170, 0x00000069},
-       {0x00009a48, 0x000001b0, 0x00000190},
-       {0x00009a4c, 0x000001f0, 0x000001d0},
-       {0x00009a50, 0x00000030, 0x00000010},
-       {0x00009a54, 0x00000070, 0x00000050},
-       {0x00009a58, 0x00000191, 0x00000090},
-       {0x00009a5c, 0x000001d1, 0x00000151},
-       {0x00009a60, 0x00000011, 0x00000191},
-       {0x00009a64, 0x00000051, 0x000001d1},
-       {0x00009a68, 0x00000091, 0x00000011},
-       {0x00009a6c, 0x000001b8, 0x00000051},
-       {0x00009a70, 0x000001f8, 0x00000198},
-       {0x00009a74, 0x00000038, 0x000001d8},
-       {0x00009a78, 0x00000078, 0x00000018},
-       {0x00009a7c, 0x00000199, 0x00000058},
-       {0x00009a80, 0x000001d9, 0x00000098},
-       {0x00009a84, 0x00000019, 0x00000159},
-       {0x00009a88, 0x00000059, 0x00000199},
-       {0x00009a8c, 0x00000099, 0x000001d9},
-       {0x00009a90, 0x000000d9, 0x00000019},
-       {0x00009a94, 0x000000f9, 0x00000059},
-       {0x00009a98, 0x000000f9, 0x00000099},
-       {0x00009a9c, 0x000000f9, 0x000000d9},
-       {0x00009aa0, 0x000000f9, 0x000000f9},
-       {0x00009aa4, 0x000000f9, 0x000000f9},
-       {0x00009aa8, 0x000000f9, 0x000000f9},
-       {0x00009aac, 0x000000f9, 0x000000f9},
-       {0x00009ab0, 0x000000f9, 0x000000f9},
-       {0x00009ab4, 0x000000f9, 0x000000f9},
-       {0x00009ab8, 0x000000f9, 0x000000f9},
-       {0x00009abc, 0x000000f9, 0x000000f9},
-       {0x00009ac0, 0x000000f9, 0x000000f9},
-       {0x00009ac4, 0x000000f9, 0x000000f9},
-       {0x00009ac8, 0x000000f9, 0x000000f9},
-       {0x00009acc, 0x000000f9, 0x000000f9},
-       {0x00009ad0, 0x000000f9, 0x000000f9},
-       {0x00009ad4, 0x000000f9, 0x000000f9},
-       {0x00009ad8, 0x000000f9, 0x000000f9},
-       {0x00009adc, 0x000000f9, 0x000000f9},
-       {0x00009ae0, 0x000000f9, 0x000000f9},
-       {0x00009ae4, 0x000000f9, 0x000000f9},
-       {0x00009ae8, 0x000000f9, 0x000000f9},
-       {0x00009aec, 0x000000f9, 0x000000f9},
-       {0x00009af0, 0x000000f9, 0x000000f9},
-       {0x00009af4, 0x000000f9, 0x000000f9},
-       {0x00009af8, 0x000000f9, 0x000000f9},
-       {0x00009afc, 0x000000f9, 0x000000f9},
-};
-
-static const u32 ar5416Bank1_9160[][2] = {
-       /* Addr      allmodes  */
-       {0x000098b0, 0x02108421},
-       {0x000098ec, 0x00000008},
-};
-
-static const u32 ar5416Bank2_9160[][2] = {
-       /* Addr      allmodes  */
-       {0x000098b0, 0x0e73ff17},
-       {0x000098e0, 0x00000420},
-};
-
-static const u32 ar5416Bank3_9160[][3] = {
-       /* Addr      5G_HT20     5G_HT40   */
-       {0x000098f0, 0x01400018, 0x01c00018},
-};
-
-static const u32 ar5416Bank6_9160[][3] = {
-       /* Addr      5G_HT20     5G_HT40   */
-       {0x0000989c, 0x00000000, 0x00000000},
-       {0x0000989c, 0x00000000, 0x00000000},
-       {0x0000989c, 0x00000000, 0x00000000},
-       {0x0000989c, 0x00e00000, 0x00e00000},
-       {0x0000989c, 0x005e0000, 0x005e0000},
-       {0x0000989c, 0x00120000, 0x00120000},
-       {0x0000989c, 0x00620000, 0x00620000},
-       {0x0000989c, 0x00020000, 0x00020000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x40ff0000, 0x40ff0000},
-       {0x0000989c, 0x005f0000, 0x005f0000},
-       {0x0000989c, 0x00870000, 0x00870000},
-       {0x0000989c, 0x00f90000, 0x00f90000},
-       {0x0000989c, 0x007b0000, 0x007b0000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x00f50000, 0x00f50000},
-       {0x0000989c, 0x00dc0000, 0x00dc0000},
-       {0x0000989c, 0x00110000, 0x00110000},
-       {0x0000989c, 0x006100a8, 0x006100a8},
-       {0x0000989c, 0x004210a2, 0x004210a2},
-       {0x0000989c, 0x0014008f, 0x0014008f},
-       {0x0000989c, 0x00c40003, 0x00c40003},
-       {0x0000989c, 0x003000f2, 0x003000f2},
-       {0x0000989c, 0x00440016, 0x00440016},
-       {0x0000989c, 0x00410040, 0x00410040},
-       {0x0000989c, 0x0001805e, 0x0001805e},
-       {0x0000989c, 0x0000c0ab, 0x0000c0ab},
-       {0x0000989c, 0x000000f1, 0x000000f1},
-       {0x0000989c, 0x00002081, 0x00002081},
-       {0x0000989c, 0x000000d4, 0x000000d4},
-       {0x000098d0, 0x0000000f, 0x0010000f},
-};
-
-static const u32 ar5416Bank6TPC_9160[][3] = {
-       /* Addr      5G_HT20     5G_HT40   */
-       {0x0000989c, 0x00000000, 0x00000000},
-       {0x0000989c, 0x00000000, 0x00000000},
-       {0x0000989c, 0x00000000, 0x00000000},
-       {0x0000989c, 0x00e00000, 0x00e00000},
-       {0x0000989c, 0x005e0000, 0x005e0000},
-       {0x0000989c, 0x00120000, 0x00120000},
-       {0x0000989c, 0x00620000, 0x00620000},
-       {0x0000989c, 0x00020000, 0x00020000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x40ff0000, 0x40ff0000},
-       {0x0000989c, 0x005f0000, 0x005f0000},
-       {0x0000989c, 0x00870000, 0x00870000},
-       {0x0000989c, 0x00f90000, 0x00f90000},
-       {0x0000989c, 0x007b0000, 0x007b0000},
-       {0x0000989c, 0x00ff0000, 0x00ff0000},
-       {0x0000989c, 0x00f50000, 0x00f50000},
-       {0x0000989c, 0x00dc0000, 0x00dc0000},
-       {0x0000989c, 0x00110000, 0x00110000},
-       {0x0000989c, 0x006100a8, 0x006100a8},
-       {0x0000989c, 0x00423022, 0x00423022},
-       {0x0000989c, 0x2014008f, 0x2014008f},
-       {0x0000989c, 0x00c40002, 0x00c40002},
-       {0x0000989c, 0x003000f2, 0x003000f2},
-       {0x0000989c, 0x00440016, 0x00440016},
-       {0x0000989c, 0x00410040, 0x00410040},
-       {0x0000989c, 0x0001805e, 0x0001805e},
-       {0x0000989c, 0x0000c0ab, 0x0000c0ab},
-       {0x0000989c, 0x000000e1, 0x000000e1},
-       {0x0000989c, 0x00007080, 0x00007080},
-       {0x0000989c, 0x000000d4, 0x000000d4},
-       {0x000098d0, 0x0000000f, 0x0010000f},
-};
-
-static const u32 ar5416Bank7_9160[][2] = {
-       /* Addr      allmodes  */
-       {0x0000989c, 0x00000500},
-       {0x0000989c, 0x00000800},
-       {0x000098cc, 0x0000000e},
-};
-
-static const u32 ar5416Addac_9160[][2] = {
-       /* Addr      allmodes  */
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x000000c0},
-       {0x0000989c, 0x00000018},
-       {0x0000989c, 0x00000004},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x000000c0},
-       {0x0000989c, 0x00000019},
-       {0x0000989c, 0x00000004},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000004},
-       {0x0000989c, 0x00000003},
-       {0x0000989c, 0x00000008},
-       {0x0000989c, 0x00000000},
-       {0x000098cc, 0x00000000},
-};
-
-static const u32 ar5416Addac_9160_1_1[][2] = {
-       /* Addr      allmodes  */
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x000000c0},
-       {0x0000989c, 0x00000018},
-       {0x0000989c, 0x00000004},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x000000c0},
-       {0x0000989c, 0x00000019},
-       {0x0000989c, 0x00000004},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x0000989c, 0x00000000},
-       {0x000098cc, 0x00000000},
-};
-
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_calib.c b/drivers/net/wireless/ath/ath9k/ar9002_calib.c
deleted file mode 100644 (file)
index fe7418a..0000000
+++ /dev/null
@@ -1,1011 +0,0 @@
-/*
- * Copyright (c) 2008-2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "hw.h"
-#include "hw-ops.h"
-#include "ar9002_phy.h"
-
-#define AR9285_CLCAL_REDO_THRESH    1
-
-static void ar9002_hw_setup_calibration(struct ath_hw *ah,
-                                       struct ath9k_cal_list *currCal)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-
-       REG_RMW_FIELD(ah, AR_PHY_TIMING_CTRL4(0),
-                     AR_PHY_TIMING_CTRL4_IQCAL_LOG_COUNT_MAX,
-                     currCal->calData->calCountMax);
-
-       switch (currCal->calData->calType) {
-       case IQ_MISMATCH_CAL:
-               REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_IQ);
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "starting IQ Mismatch Calibration\n");
-               break;
-       case ADC_GAIN_CAL:
-               REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_ADC_GAIN);
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "starting ADC Gain Calibration\n");
-               break;
-       case ADC_DC_CAL:
-               REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_ADC_DC_PER);
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "starting ADC DC Calibration\n");
-               break;
-       case ADC_DC_INIT_CAL:
-               REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_ADC_DC_INIT);
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "starting Init ADC DC Calibration\n");
-               break;
-       case TEMP_COMP_CAL:
-               break; /* Not supported */
-       }
-
-       REG_SET_BIT(ah, AR_PHY_TIMING_CTRL4(0),
-                   AR_PHY_TIMING_CTRL4_DO_CAL);
-}
-
-static bool ar9002_hw_per_calibration(struct ath_hw *ah,
-                                     struct ath9k_channel *ichan,
-                                     u8 rxchainmask,
-                                     struct ath9k_cal_list *currCal)
-{
-       struct ath9k_hw_cal_data *caldata = ah->caldata;
-       bool iscaldone = false;
-
-       if (currCal->calState == CAL_RUNNING) {
-               if (!(REG_READ(ah, AR_PHY_TIMING_CTRL4(0)) &
-                     AR_PHY_TIMING_CTRL4_DO_CAL)) {
-
-                       currCal->calData->calCollect(ah);
-                       ah->cal_samples++;
-
-                       if (ah->cal_samples >=
-                           currCal->calData->calNumSamples) {
-                               int i, numChains = 0;
-                               for (i = 0; i < AR5416_MAX_CHAINS; i++) {
-                                       if (rxchainmask & (1 << i))
-                                               numChains++;
-                               }
-
-                               currCal->calData->calPostProc(ah, numChains);
-                               caldata->CalValid |= currCal->calData->calType;
-                               currCal->calState = CAL_DONE;
-                               iscaldone = true;
-                       } else {
-                               ar9002_hw_setup_calibration(ah, currCal);
-                       }
-               }
-       } else if (!(caldata->CalValid & currCal->calData->calType)) {
-               ath9k_hw_reset_calibration(ah, currCal);
-       }
-
-       return iscaldone;
-}
-
-/* Assumes you are talking about the currently configured channel */
-static bool ar9002_hw_iscal_supported(struct ath_hw *ah,
-                                     enum ath9k_cal_types calType)
-{
-       struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
-
-       switch (calType & ah->supp_cals) {
-       case IQ_MISMATCH_CAL: /* Both 2 GHz and 5 GHz support OFDM */
-               return true;
-       case ADC_GAIN_CAL:
-       case ADC_DC_CAL:
-               if (!(conf->channel->band == IEEE80211_BAND_2GHZ &&
-                     conf_is_ht20(conf)))
-                       return true;
-               break;
-       }
-       return false;
-}
-
-static void ar9002_hw_iqcal_collect(struct ath_hw *ah)
-{
-       int i;
-
-       for (i = 0; i < AR5416_MAX_CHAINS; i++) {
-               ah->totalPowerMeasI[i] +=
-                       REG_READ(ah, AR_PHY_CAL_MEAS_0(i));
-               ah->totalPowerMeasQ[i] +=
-                       REG_READ(ah, AR_PHY_CAL_MEAS_1(i));
-               ah->totalIqCorrMeas[i] +=
-                       (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_2(i));
-               ath_print(ath9k_hw_common(ah), ATH_DBG_CALIBRATE,
-                         "%d: Chn %d pmi=0x%08x;pmq=0x%08x;iqcm=0x%08x;\n",
-                         ah->cal_samples, i, ah->totalPowerMeasI[i],
-                         ah->totalPowerMeasQ[i],
-                         ah->totalIqCorrMeas[i]);
-       }
-}
-
-static void ar9002_hw_adc_gaincal_collect(struct ath_hw *ah)
-{
-       int i;
-
-       for (i = 0; i < AR5416_MAX_CHAINS; i++) {
-               ah->totalAdcIOddPhase[i] +=
-                       REG_READ(ah, AR_PHY_CAL_MEAS_0(i));
-               ah->totalAdcIEvenPhase[i] +=
-                       REG_READ(ah, AR_PHY_CAL_MEAS_1(i));
-               ah->totalAdcQOddPhase[i] +=
-                       REG_READ(ah, AR_PHY_CAL_MEAS_2(i));
-               ah->totalAdcQEvenPhase[i] +=
-                       REG_READ(ah, AR_PHY_CAL_MEAS_3(i));
-
-               ath_print(ath9k_hw_common(ah), ATH_DBG_CALIBRATE,
-                         "%d: Chn %d oddi=0x%08x; eveni=0x%08x; "
-                         "oddq=0x%08x; evenq=0x%08x;\n",
-                         ah->cal_samples, i,
-                         ah->totalAdcIOddPhase[i],
-                         ah->totalAdcIEvenPhase[i],
-                         ah->totalAdcQOddPhase[i],
-                         ah->totalAdcQEvenPhase[i]);
-       }
-}
-
-static void ar9002_hw_adc_dccal_collect(struct ath_hw *ah)
-{
-       int i;
-
-       for (i = 0; i < AR5416_MAX_CHAINS; i++) {
-               ah->totalAdcDcOffsetIOddPhase[i] +=
-                       (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_0(i));
-               ah->totalAdcDcOffsetIEvenPhase[i] +=
-                       (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_1(i));
-               ah->totalAdcDcOffsetQOddPhase[i] +=
-                       (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_2(i));
-               ah->totalAdcDcOffsetQEvenPhase[i] +=
-                       (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_3(i));
-
-               ath_print(ath9k_hw_common(ah), ATH_DBG_CALIBRATE,
-                         "%d: Chn %d oddi=0x%08x; eveni=0x%08x; "
-                         "oddq=0x%08x; evenq=0x%08x;\n",
-                         ah->cal_samples, i,
-                         ah->totalAdcDcOffsetIOddPhase[i],
-                         ah->totalAdcDcOffsetIEvenPhase[i],
-                         ah->totalAdcDcOffsetQOddPhase[i],
-                         ah->totalAdcDcOffsetQEvenPhase[i]);
-       }
-}
-
-static void ar9002_hw_iqcalibrate(struct ath_hw *ah, u8 numChains)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-       u32 powerMeasQ, powerMeasI, iqCorrMeas;
-       u32 qCoffDenom, iCoffDenom;
-       int32_t qCoff, iCoff;
-       int iqCorrNeg, i;
-
-       for (i = 0; i < numChains; i++) {
-               powerMeasI = ah->totalPowerMeasI[i];
-               powerMeasQ = ah->totalPowerMeasQ[i];
-               iqCorrMeas = ah->totalIqCorrMeas[i];
-
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Starting IQ Cal and Correction for Chain %d\n",
-                         i);
-
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Orignal: Chn %diq_corr_meas = 0x%08x\n",
-                         i, ah->totalIqCorrMeas[i]);
-
-               iqCorrNeg = 0;
-
-               if (iqCorrMeas > 0x80000000) {
-                       iqCorrMeas = (0xffffffff - iqCorrMeas) + 1;
-                       iqCorrNeg = 1;
-               }
-
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Chn %d pwr_meas_i = 0x%08x\n", i, powerMeasI);
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Chn %d pwr_meas_q = 0x%08x\n", i, powerMeasQ);
-               ath_print(common, ATH_DBG_CALIBRATE, "iqCorrNeg is 0x%08x\n",
-                         iqCorrNeg);
-
-               iCoffDenom = (powerMeasI / 2 + powerMeasQ / 2) / 128;
-               qCoffDenom = powerMeasQ / 64;
-
-               if ((powerMeasQ != 0) && (iCoffDenom != 0) &&
-                   (qCoffDenom != 0)) {
-                       iCoff = iqCorrMeas / iCoffDenom;
-                       qCoff = powerMeasI / qCoffDenom - 64;
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "Chn %d iCoff = 0x%08x\n", i, iCoff);
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "Chn %d qCoff = 0x%08x\n", i, qCoff);
-
-                       iCoff = iCoff & 0x3f;
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "New: Chn %d iCoff = 0x%08x\n", i, iCoff);
-                       if (iqCorrNeg == 0x0)
-                               iCoff = 0x40 - iCoff;
-
-                       if (qCoff > 15)
-                               qCoff = 15;
-                       else if (qCoff <= -16)
-                               qCoff = -16;
-
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "Chn %d : iCoff = 0x%x  qCoff = 0x%x\n",
-                                 i, iCoff, qCoff);
-
-                       REG_RMW_FIELD(ah, AR_PHY_TIMING_CTRL4(i),
-                                     AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF,
-                                     iCoff);
-                       REG_RMW_FIELD(ah, AR_PHY_TIMING_CTRL4(i),
-                                     AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF,
-                                     qCoff);
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "IQ Cal and Correction done for Chain %d\n",
-                                 i);
-               }
-       }
-
-       REG_SET_BIT(ah, AR_PHY_TIMING_CTRL4(0),
-                   AR_PHY_TIMING_CTRL4_IQCORR_ENABLE);
-}
-
-static void ar9002_hw_adc_gaincal_calibrate(struct ath_hw *ah, u8 numChains)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-       u32 iOddMeasOffset, iEvenMeasOffset, qOddMeasOffset, qEvenMeasOffset;
-       u32 qGainMismatch, iGainMismatch, val, i;
-
-       for (i = 0; i < numChains; i++) {
-               iOddMeasOffset = ah->totalAdcIOddPhase[i];
-               iEvenMeasOffset = ah->totalAdcIEvenPhase[i];
-               qOddMeasOffset = ah->totalAdcQOddPhase[i];
-               qEvenMeasOffset = ah->totalAdcQEvenPhase[i];
-
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Starting ADC Gain Cal for Chain %d\n", i);
-
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Chn %d pwr_meas_odd_i = 0x%08x\n", i,
-                         iOddMeasOffset);
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Chn %d pwr_meas_even_i = 0x%08x\n", i,
-                         iEvenMeasOffset);
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Chn %d pwr_meas_odd_q = 0x%08x\n", i,
-                         qOddMeasOffset);
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Chn %d pwr_meas_even_q = 0x%08x\n", i,
-                         qEvenMeasOffset);
-
-               if (iOddMeasOffset != 0 && qEvenMeasOffset != 0) {
-                       iGainMismatch =
-                               ((iEvenMeasOffset * 32) /
-                                iOddMeasOffset) & 0x3f;
-                       qGainMismatch =
-                               ((qOddMeasOffset * 32) /
-                                qEvenMeasOffset) & 0x3f;
-
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "Chn %d gain_mismatch_i = 0x%08x\n", i,
-                                 iGainMismatch);
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "Chn %d gain_mismatch_q = 0x%08x\n", i,
-                                 qGainMismatch);
-
-                       val = REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i));
-                       val &= 0xfffff000;
-                       val |= (qGainMismatch) | (iGainMismatch << 6);
-                       REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i), val);
-
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "ADC Gain Cal done for Chain %d\n", i);
-               }
-       }
-
-       REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0),
-                 REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0)) |
-                 AR_PHY_NEW_ADC_GAIN_CORR_ENABLE);
-}
-
-static void ar9002_hw_adc_dccal_calibrate(struct ath_hw *ah, u8 numChains)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-       u32 iOddMeasOffset, iEvenMeasOffset, val, i;
-       int32_t qOddMeasOffset, qEvenMeasOffset, qDcMismatch, iDcMismatch;
-       const struct ath9k_percal_data *calData =
-               ah->cal_list_curr->calData;
-       u32 numSamples =
-               (1 << (calData->calCountMax + 5)) * calData->calNumSamples;
-
-       for (i = 0; i < numChains; i++) {
-               iOddMeasOffset = ah->totalAdcDcOffsetIOddPhase[i];
-               iEvenMeasOffset = ah->totalAdcDcOffsetIEvenPhase[i];
-               qOddMeasOffset = ah->totalAdcDcOffsetQOddPhase[i];
-               qEvenMeasOffset = ah->totalAdcDcOffsetQEvenPhase[i];
-
-               ath_print(common, ATH_DBG_CALIBRATE,
-                          "Starting ADC DC Offset Cal for Chain %d\n", i);
-
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Chn %d pwr_meas_odd_i = %d\n", i,
-                         iOddMeasOffset);
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Chn %d pwr_meas_even_i = %d\n", i,
-                         iEvenMeasOffset);
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Chn %d pwr_meas_odd_q = %d\n", i,
-                         qOddMeasOffset);
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Chn %d pwr_meas_even_q = %d\n", i,
-                         qEvenMeasOffset);
-
-               iDcMismatch = (((iEvenMeasOffset - iOddMeasOffset) * 2) /
-                              numSamples) & 0x1ff;
-               qDcMismatch = (((qOddMeasOffset - qEvenMeasOffset) * 2) /
-                              numSamples) & 0x1ff;
-
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Chn %d dc_offset_mismatch_i = 0x%08x\n", i,
-                         iDcMismatch);
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Chn %d dc_offset_mismatch_q = 0x%08x\n", i,
-                         qDcMismatch);
-
-               val = REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i));
-               val &= 0xc0000fff;
-               val |= (qDcMismatch << 12) | (iDcMismatch << 21);
-               REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(i), val);
-
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "ADC DC Offset Cal done for Chain %d\n", i);
-       }
-
-       REG_WRITE(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0),
-                 REG_READ(ah, AR_PHY_NEW_ADC_DC_GAIN_CORR(0)) |
-                 AR_PHY_NEW_ADC_DC_OFFSET_CORR_ENABLE);
-}
-
-static void ar9287_hw_olc_temp_compensation(struct ath_hw *ah)
-{
-       u32 rddata;
-       int32_t delta, currPDADC, slope;
-
-       rddata = REG_READ(ah, AR_PHY_TX_PWRCTRL4);
-       currPDADC = MS(rddata, AR_PHY_TX_PWRCTRL_PD_AVG_OUT);
-
-       if (ah->initPDADC == 0 || currPDADC == 0) {
-               /*
-                * Zero value indicates that no frames have been transmitted
-                * yet, can't do temperature compensation until frames are
-                * transmitted.
-                */
-               return;
-       } else {
-               slope = ah->eep_ops->get_eeprom(ah, EEP_TEMPSENSE_SLOPE);
-
-               if (slope == 0) { /* to avoid divide by zero case */
-                       delta = 0;
-               } else {
-                       delta = ((currPDADC - ah->initPDADC)*4) / slope;
-               }
-               REG_RMW_FIELD(ah, AR_PHY_CH0_TX_PWRCTRL11,
-                             AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP, delta);
-               REG_RMW_FIELD(ah, AR_PHY_CH1_TX_PWRCTRL11,
-                             AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP, delta);
-       }
-}
-
-static void ar9280_hw_olc_temp_compensation(struct ath_hw *ah)
-{
-       u32 rddata, i;
-       int delta, currPDADC, regval;
-
-       rddata = REG_READ(ah, AR_PHY_TX_PWRCTRL4);
-       currPDADC = MS(rddata, AR_PHY_TX_PWRCTRL_PD_AVG_OUT);
-
-       if (ah->initPDADC == 0 || currPDADC == 0)
-               return;
-
-       if (ah->eep_ops->get_eeprom(ah, EEP_DAC_HPWR_5G))
-               delta = (currPDADC - ah->initPDADC + 4) / 8;
-       else
-               delta = (currPDADC - ah->initPDADC + 5) / 10;
-
-       if (delta != ah->PDADCdelta) {
-               ah->PDADCdelta = delta;
-               for (i = 1; i < AR9280_TX_GAIN_TABLE_SIZE; i++) {
-                       regval = ah->originalGain[i] - delta;
-                       if (regval < 0)
-                               regval = 0;
-
-                       REG_RMW_FIELD(ah,
-                                     AR_PHY_TX_GAIN_TBL1 + i * 4,
-                                     AR_PHY_TX_GAIN, regval);
-               }
-       }
-}
-
-static void ar9271_hw_pa_cal(struct ath_hw *ah, bool is_reset)
-{
-       u32 regVal;
-       unsigned int i;
-       u32 regList[][2] = {
-               { 0x786c, 0 },
-               { 0x7854, 0 },
-               { 0x7820, 0 },
-               { 0x7824, 0 },
-               { 0x7868, 0 },
-               { 0x783c, 0 },
-               { 0x7838, 0 } ,
-               { 0x7828, 0 } ,
-       };
-
-       for (i = 0; i < ARRAY_SIZE(regList); i++)
-               regList[i][1] = REG_READ(ah, regList[i][0]);
-
-       regVal = REG_READ(ah, 0x7834);
-       regVal &= (~(0x1));
-       REG_WRITE(ah, 0x7834, regVal);
-       regVal = REG_READ(ah, 0x9808);
-       regVal |= (0x1 << 27);
-       REG_WRITE(ah, 0x9808, regVal);
-
-       /* 786c,b23,1, pwddac=1 */
-       REG_RMW_FIELD(ah, AR9285_AN_TOP3, AR9285_AN_TOP3_PWDDAC, 1);
-       /* 7854, b5,1, pdrxtxbb=1 */
-       REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDRXTXBB1, 1);
-       /* 7854, b7,1, pdv2i=1 */
-       REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDV2I, 1);
-       /* 7854, b8,1, pddacinterface=1 */
-       REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDDACIF, 1);
-       /* 7824,b12,0, offcal=0 */
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G2, AR9285_AN_RF2G2_OFFCAL, 0);
-       /* 7838, b1,0, pwddb=0 */
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G7, AR9285_AN_RF2G7_PWDDB, 0);
-       /* 7820,b11,0, enpacal=0 */
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_ENPACAL, 0);
-       /* 7820,b25,1, pdpadrv1=0 */
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPADRV1, 0);
-       /* 7820,b24,0, pdpadrv2=0 */
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPADRV2, 0);
-       /* 7820,b23,0, pdpaout=0 */
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPAOUT, 0);
-       /* 783c,b14-16,7, padrvgn2tab_0=7 */
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G8, AR9285_AN_RF2G8_PADRVGN2TAB0, 7);
-       /*
-        * 7838,b29-31,0, padrvgn1tab_0=0
-        * does not matter since we turn it off
-        */
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G7, AR9285_AN_RF2G7_PADRVGN2TAB0, 0);
-
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9271_AN_RF2G3_CCOMP, 0xfff);
-
-       /* Set:
-        * localmode=1,bmode=1,bmoderxtx=1,synthon=1,
-        * txon=1,paon=1,oscon=1,synthon_force=1
-        */
-       REG_WRITE(ah, AR9285_AN_TOP2, 0xca0358a0);
-       udelay(30);
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9271_AN_RF2G6_OFFS, 0);
-
-       /* find off_6_1; */
-       for (i = 6; i > 0; i--) {
-               regVal = REG_READ(ah, 0x7834);
-               regVal |= (1 << (20 + i));
-               REG_WRITE(ah, 0x7834, regVal);
-               udelay(1);
-               /* regVal = REG_READ(ah, 0x7834); */
-               regVal &= (~(0x1 << (20 + i)));
-               regVal |= (MS(REG_READ(ah, 0x7840), AR9285_AN_RXTXBB1_SPARE9)
-                           << (20 + i));
-               REG_WRITE(ah, 0x7834, regVal);
-       }
-
-       regVal = (regVal >> 20) & 0x7f;
-
-       /* Update PA cal info */
-       if ((!is_reset) && (ah->pacal_info.prev_offset == regVal)) {
-               if (ah->pacal_info.max_skipcount < MAX_PACAL_SKIPCOUNT)
-                       ah->pacal_info.max_skipcount =
-                               2 * ah->pacal_info.max_skipcount;
-               ah->pacal_info.skipcount = ah->pacal_info.max_skipcount;
-       } else {
-               ah->pacal_info.max_skipcount = 1;
-               ah->pacal_info.skipcount = 0;
-               ah->pacal_info.prev_offset = regVal;
-       }
-
-       ENABLE_REGWRITE_BUFFER(ah);
-
-       regVal = REG_READ(ah, 0x7834);
-       regVal |= 0x1;
-       REG_WRITE(ah, 0x7834, regVal);
-       regVal = REG_READ(ah, 0x9808);
-       regVal &= (~(0x1 << 27));
-       REG_WRITE(ah, 0x9808, regVal);
-
-       for (i = 0; i < ARRAY_SIZE(regList); i++)
-               REG_WRITE(ah, regList[i][0], regList[i][1]);
-
-       REGWRITE_BUFFER_FLUSH(ah);
-       DISABLE_REGWRITE_BUFFER(ah);
-}
-
-static inline void ar9285_hw_pa_cal(struct ath_hw *ah, bool is_reset)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-       u32 regVal;
-       int i, offset, offs_6_1, offs_0;
-       u32 ccomp_org, reg_field;
-       u32 regList[][2] = {
-               { 0x786c, 0 },
-               { 0x7854, 0 },
-               { 0x7820, 0 },
-               { 0x7824, 0 },
-               { 0x7868, 0 },
-               { 0x783c, 0 },
-               { 0x7838, 0 },
-       };
-
-       ath_print(common, ATH_DBG_CALIBRATE, "Running PA Calibration\n");
-
-       /* PA CAL is not needed for high power solution */
-       if (ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE) ==
-           AR5416_EEP_TXGAIN_HIGH_POWER)
-               return;
-
-       if (AR_SREV_9285_11(ah)) {
-               REG_WRITE(ah, AR9285_AN_TOP4, (AR9285_AN_TOP4_DEFAULT | 0x14));
-               udelay(10);
-       }
-
-       for (i = 0; i < ARRAY_SIZE(regList); i++)
-               regList[i][1] = REG_READ(ah, regList[i][0]);
-
-       regVal = REG_READ(ah, 0x7834);
-       regVal &= (~(0x1));
-       REG_WRITE(ah, 0x7834, regVal);
-       regVal = REG_READ(ah, 0x9808);
-       regVal |= (0x1 << 27);
-       REG_WRITE(ah, 0x9808, regVal);
-
-       REG_RMW_FIELD(ah, AR9285_AN_TOP3, AR9285_AN_TOP3_PWDDAC, 1);
-       REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDRXTXBB1, 1);
-       REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDV2I, 1);
-       REG_RMW_FIELD(ah, AR9285_AN_RXTXBB1, AR9285_AN_RXTXBB1_PDDACIF, 1);
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G2, AR9285_AN_RF2G2_OFFCAL, 0);
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G7, AR9285_AN_RF2G7_PWDDB, 0);
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_ENPACAL, 0);
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPADRV1, 0);
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPADRV2, 0);
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G1, AR9285_AN_RF2G1_PDPAOUT, 0);
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G8, AR9285_AN_RF2G8_PADRVGN2TAB0, 7);
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G7, AR9285_AN_RF2G7_PADRVGN2TAB0, 0);
-       ccomp_org = MS(REG_READ(ah, AR9285_AN_RF2G6), AR9285_AN_RF2G6_CCOMP);
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_CCOMP, 0xf);
-
-       REG_WRITE(ah, AR9285_AN_TOP2, 0xca0358a0);
-       udelay(30);
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_OFFS, 0);
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, 0);
-
-       for (i = 6; i > 0; i--) {
-               regVal = REG_READ(ah, 0x7834);
-               regVal |= (1 << (19 + i));
-               REG_WRITE(ah, 0x7834, regVal);
-               udelay(1);
-               regVal = REG_READ(ah, 0x7834);
-               regVal &= (~(0x1 << (19 + i)));
-               reg_field = MS(REG_READ(ah, 0x7840), AR9285_AN_RXTXBB1_SPARE9);
-               regVal |= (reg_field << (19 + i));
-               REG_WRITE(ah, 0x7834, regVal);
-       }
-
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, 1);
-       udelay(1);
-       reg_field = MS(REG_READ(ah, AR9285_AN_RF2G9), AR9285_AN_RXTXBB1_SPARE9);
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, reg_field);
-       offs_6_1 = MS(REG_READ(ah, AR9285_AN_RF2G6), AR9285_AN_RF2G6_OFFS);
-       offs_0   = MS(REG_READ(ah, AR9285_AN_RF2G3), AR9285_AN_RF2G3_PDVCCOMP);
-
-       offset = (offs_6_1<<1) | offs_0;
-       offset = offset - 0;
-       offs_6_1 = offset>>1;
-       offs_0 = offset & 1;
-
-       if ((!is_reset) && (ah->pacal_info.prev_offset == offset)) {
-               if (ah->pacal_info.max_skipcount < MAX_PACAL_SKIPCOUNT)
-                       ah->pacal_info.max_skipcount =
-                               2 * ah->pacal_info.max_skipcount;
-               ah->pacal_info.skipcount = ah->pacal_info.max_skipcount;
-       } else {
-               ah->pacal_info.max_skipcount = 1;
-               ah->pacal_info.skipcount = 0;
-               ah->pacal_info.prev_offset = offset;
-       }
-
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_OFFS, offs_6_1);
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G3, AR9285_AN_RF2G3_PDVCCOMP, offs_0);
-
-       regVal = REG_READ(ah, 0x7834);
-       regVal |= 0x1;
-       REG_WRITE(ah, 0x7834, regVal);
-       regVal = REG_READ(ah, 0x9808);
-       regVal &= (~(0x1 << 27));
-       REG_WRITE(ah, 0x9808, regVal);
-
-       for (i = 0; i < ARRAY_SIZE(regList); i++)
-               REG_WRITE(ah, regList[i][0], regList[i][1]);
-
-       REG_RMW_FIELD(ah, AR9285_AN_RF2G6, AR9285_AN_RF2G6_CCOMP, ccomp_org);
-
-       if (AR_SREV_9285_11(ah))
-               REG_WRITE(ah, AR9285_AN_TOP4, AR9285_AN_TOP4_DEFAULT);
-
-}
-
-static void ar9002_hw_pa_cal(struct ath_hw *ah, bool is_reset)
-{
-       if (AR_SREV_9271(ah)) {
-               if (is_reset || !ah->pacal_info.skipcount)
-                       ar9271_hw_pa_cal(ah, is_reset);
-               else
-                       ah->pacal_info.skipcount--;
-       } else if (AR_SREV_9285_11_OR_LATER(ah)) {
-               if (is_reset || !ah->pacal_info.skipcount)
-                       ar9285_hw_pa_cal(ah, is_reset);
-               else
-                       ah->pacal_info.skipcount--;
-       }
-}
-
-static void ar9002_hw_olc_temp_compensation(struct ath_hw *ah)
-{
-       if (OLC_FOR_AR9287_10_LATER)
-               ar9287_hw_olc_temp_compensation(ah);
-       else if (OLC_FOR_AR9280_20_LATER)
-               ar9280_hw_olc_temp_compensation(ah);
-}
-
-static bool ar9002_hw_calibrate(struct ath_hw *ah,
-                               struct ath9k_channel *chan,
-                               u8 rxchainmask,
-                               bool longcal)
-{
-       bool iscaldone = true;
-       struct ath9k_cal_list *currCal = ah->cal_list_curr;
-       bool nfcal, nfcal_pending = false;
-
-       nfcal = !!(REG_READ(ah, AR_PHY_AGC_CONTROL) & AR_PHY_AGC_CONTROL_NF);
-       if (ah->caldata)
-               nfcal_pending = ah->caldata->nfcal_pending;
-
-       if (currCal && !nfcal &&
-           (currCal->calState == CAL_RUNNING ||
-            currCal->calState == CAL_WAITING)) {
-               iscaldone = ar9002_hw_per_calibration(ah, chan,
-                                                     rxchainmask, currCal);
-               if (iscaldone) {
-                       ah->cal_list_curr = currCal = currCal->calNext;
-
-                       if (currCal->calState == CAL_WAITING) {
-                               iscaldone = false;
-                               ath9k_hw_reset_calibration(ah, currCal);
-                       }
-               }
-       }
-
-       /* Do NF cal only at longer intervals */
-       if (longcal || nfcal_pending) {
-               /* Do periodic PAOffset Cal */
-               ar9002_hw_pa_cal(ah, false);
-               ar9002_hw_olc_temp_compensation(ah);
-
-               /*
-                * Get the value from the previous NF cal and update
-                * history buffer.
-                */
-               if (ath9k_hw_getnf(ah, chan)) {
-                       /*
-                        * Load the NF from history buffer of the current
-                        * channel.
-                        * NF is slow time-variant, so it is OK to use a
-                        * historical value.
-                        */
-                       ath9k_hw_loadnf(ah, ah->curchan);
-               }
-
-               if (longcal)
-                       ath9k_hw_start_nfcal(ah, false);
-       }
-
-       return iscaldone;
-}
-
-/* Carrier leakage Calibration fix */
-static bool ar9285_hw_cl_cal(struct ath_hw *ah, struct ath9k_channel *chan)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-
-       REG_SET_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_CL_CAL_ENABLE);
-       if (IS_CHAN_HT20(chan)) {
-               REG_SET_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_PARALLEL_CAL_ENABLE);
-               REG_SET_BIT(ah, AR_PHY_TURBO, AR_PHY_FC_DYN2040_EN);
-               REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
-                           AR_PHY_AGC_CONTROL_FLTR_CAL);
-               REG_CLR_BIT(ah, AR_PHY_TPCRG1, AR_PHY_TPCRG1_PD_CAL_ENABLE);
-               REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL);
-               if (!ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL,
-                                 AR_PHY_AGC_CONTROL_CAL, 0, AH_WAIT_TIMEOUT)) {
-                       ath_print(common, ATH_DBG_CALIBRATE, "offset "
-                                 "calibration failed to complete in "
-                                 "1ms; noisy ??\n");
-                       return false;
-               }
-               REG_CLR_BIT(ah, AR_PHY_TURBO, AR_PHY_FC_DYN2040_EN);
-               REG_CLR_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_PARALLEL_CAL_ENABLE);
-               REG_CLR_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_CL_CAL_ENABLE);
-       }
-       REG_CLR_BIT(ah, AR_PHY_ADC_CTL, AR_PHY_ADC_CTL_OFF_PWDADC);
-       REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_FLTR_CAL);
-       REG_SET_BIT(ah, AR_PHY_TPCRG1, AR_PHY_TPCRG1_PD_CAL_ENABLE);
-       REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL);
-       if (!ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL,
-                         0, AH_WAIT_TIMEOUT)) {
-               ath_print(common, ATH_DBG_CALIBRATE, "offset calibration "
-                         "failed to complete in 1ms; noisy ??\n");
-               return false;
-       }
-
-       REG_SET_BIT(ah, AR_PHY_ADC_CTL, AR_PHY_ADC_CTL_OFF_PWDADC);
-       REG_CLR_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_CL_CAL_ENABLE);
-       REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_FLTR_CAL);
-
-       return true;
-}
-
-static bool ar9285_hw_clc(struct ath_hw *ah, struct ath9k_channel *chan)
-{
-       int i;
-       u_int32_t txgain_max;
-       u_int32_t clc_gain, gain_mask = 0, clc_num = 0;
-       u_int32_t reg_clc_I0, reg_clc_Q0;
-       u_int32_t i0_num = 0;
-       u_int32_t q0_num = 0;
-       u_int32_t total_num = 0;
-       u_int32_t reg_rf2g5_org;
-       bool retv = true;
-
-       if (!(ar9285_hw_cl_cal(ah, chan)))
-               return false;
-
-       txgain_max = MS(REG_READ(ah, AR_PHY_TX_PWRCTRL7),
-                       AR_PHY_TX_PWRCTRL_TX_GAIN_TAB_MAX);
-
-       for (i = 0; i < (txgain_max+1); i++) {
-               clc_gain = (REG_READ(ah, (AR_PHY_TX_GAIN_TBL1+(i<<2))) &
-                          AR_PHY_TX_GAIN_CLC) >> AR_PHY_TX_GAIN_CLC_S;
-               if (!(gain_mask & (1 << clc_gain))) {
-                       gain_mask |= (1 << clc_gain);
-                       clc_num++;
-               }
-       }
-
-       for (i = 0; i < clc_num; i++) {
-               reg_clc_I0 = (REG_READ(ah, (AR_PHY_CLC_TBL1 + (i << 2)))
-                             & AR_PHY_CLC_I0) >> AR_PHY_CLC_I0_S;
-               reg_clc_Q0 = (REG_READ(ah, (AR_PHY_CLC_TBL1 + (i << 2)))
-                             & AR_PHY_CLC_Q0) >> AR_PHY_CLC_Q0_S;
-               if (reg_clc_I0 == 0)
-                       i0_num++;
-
-               if (reg_clc_Q0 == 0)
-                       q0_num++;
-       }
-       total_num = i0_num + q0_num;
-       if (total_num > AR9285_CLCAL_REDO_THRESH) {
-               reg_rf2g5_org = REG_READ(ah, AR9285_RF2G5);
-               if (AR_SREV_9285E_20(ah)) {
-                       REG_WRITE(ah, AR9285_RF2G5,
-                                 (reg_rf2g5_org & AR9285_RF2G5_IC50TX) |
-                                 AR9285_RF2G5_IC50TX_XE_SET);
-               } else {
-                       REG_WRITE(ah, AR9285_RF2G5,
-                                 (reg_rf2g5_org & AR9285_RF2G5_IC50TX) |
-                                 AR9285_RF2G5_IC50TX_SET);
-               }
-               retv = ar9285_hw_cl_cal(ah, chan);
-               REG_WRITE(ah, AR9285_RF2G5, reg_rf2g5_org);
-       }
-       return retv;
-}
-
-static bool ar9002_hw_init_cal(struct ath_hw *ah, struct ath9k_channel *chan)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-
-       if (AR_SREV_9271(ah) || AR_SREV_9285_12_OR_LATER(ah)) {
-               if (!ar9285_hw_clc(ah, chan))
-                       return false;
-       } else {
-               if (AR_SREV_9280_10_OR_LATER(ah)) {
-                       if (!AR_SREV_9287_10_OR_LATER(ah))
-                               REG_CLR_BIT(ah, AR_PHY_ADC_CTL,
-                                           AR_PHY_ADC_CTL_OFF_PWDADC);
-                       REG_SET_BIT(ah, AR_PHY_AGC_CONTROL,
-                                   AR_PHY_AGC_CONTROL_FLTR_CAL);
-               }
-
-               /* Calibrate the AGC */
-               REG_WRITE(ah, AR_PHY_AGC_CONTROL,
-                         REG_READ(ah, AR_PHY_AGC_CONTROL) |
-                         AR_PHY_AGC_CONTROL_CAL);
-
-               /* Poll for offset calibration complete */
-               if (!ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL,
-                                  AR_PHY_AGC_CONTROL_CAL,
-                                  0, AH_WAIT_TIMEOUT)) {
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "offset calibration failed to "
-                                 "complete in 1ms; noisy environment?\n");
-                       return false;
-               }
-
-               if (AR_SREV_9280_10_OR_LATER(ah)) {
-                       if (!AR_SREV_9287_10_OR_LATER(ah))
-                               REG_SET_BIT(ah, AR_PHY_ADC_CTL,
-                                           AR_PHY_ADC_CTL_OFF_PWDADC);
-                       REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL,
-                                   AR_PHY_AGC_CONTROL_FLTR_CAL);
-               }
-       }
-
-       /* Do PA Calibration */
-       ar9002_hw_pa_cal(ah, true);
-
-       /* Do NF Calibration after DC offset and other calibrations */
-       ath9k_hw_start_nfcal(ah, true);
-
-       if (ah->caldata)
-               ah->caldata->nfcal_pending = true;
-
-       ah->cal_list = ah->cal_list_last = ah->cal_list_curr = NULL;
-
-       /* Enable IQ, ADC Gain and ADC DC offset CALs */
-       if (AR_SREV_9100(ah) || AR_SREV_9160_10_OR_LATER(ah)) {
-               if (ar9002_hw_iscal_supported(ah, ADC_GAIN_CAL)) {
-                       INIT_CAL(&ah->adcgain_caldata);
-                       INSERT_CAL(ah, &ah->adcgain_caldata);
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "enabling ADC Gain Calibration.\n");
-               }
-               if (ar9002_hw_iscal_supported(ah, ADC_DC_CAL)) {
-                       INIT_CAL(&ah->adcdc_caldata);
-                       INSERT_CAL(ah, &ah->adcdc_caldata);
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "enabling ADC DC Calibration.\n");
-               }
-               if (ar9002_hw_iscal_supported(ah, IQ_MISMATCH_CAL)) {
-                       INIT_CAL(&ah->iq_caldata);
-                       INSERT_CAL(ah, &ah->iq_caldata);
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "enabling IQ Calibration.\n");
-               }
-
-               ah->cal_list_curr = ah->cal_list;
-
-               if (ah->cal_list_curr)
-                       ath9k_hw_reset_calibration(ah, ah->cal_list_curr);
-       }
-
-       if (ah->caldata)
-               ah->caldata->CalValid = 0;
-
-       return true;
-}
-
-static const struct ath9k_percal_data iq_cal_multi_sample = {
-       IQ_MISMATCH_CAL,
-       MAX_CAL_SAMPLES,
-       PER_MIN_LOG_COUNT,
-       ar9002_hw_iqcal_collect,
-       ar9002_hw_iqcalibrate
-};
-static const struct ath9k_percal_data iq_cal_single_sample = {
-       IQ_MISMATCH_CAL,
-       MIN_CAL_SAMPLES,
-       PER_MAX_LOG_COUNT,
-       ar9002_hw_iqcal_collect,
-       ar9002_hw_iqcalibrate
-};
-static const struct ath9k_percal_data adc_gain_cal_multi_sample = {
-       ADC_GAIN_CAL,
-       MAX_CAL_SAMPLES,
-       PER_MIN_LOG_COUNT,
-       ar9002_hw_adc_gaincal_collect,
-       ar9002_hw_adc_gaincal_calibrate
-};
-static const struct ath9k_percal_data adc_gain_cal_single_sample = {
-       ADC_GAIN_CAL,
-       MIN_CAL_SAMPLES,
-       PER_MAX_LOG_COUNT,
-       ar9002_hw_adc_gaincal_collect,
-       ar9002_hw_adc_gaincal_calibrate
-};
-static const struct ath9k_percal_data adc_dc_cal_multi_sample = {
-       ADC_DC_CAL,
-       MAX_CAL_SAMPLES,
-       PER_MIN_LOG_COUNT,
-       ar9002_hw_adc_dccal_collect,
-       ar9002_hw_adc_dccal_calibrate
-};
-static const struct ath9k_percal_data adc_dc_cal_single_sample = {
-       ADC_DC_CAL,
-       MIN_CAL_SAMPLES,
-       PER_MAX_LOG_COUNT,
-       ar9002_hw_adc_dccal_collect,
-       ar9002_hw_adc_dccal_calibrate
-};
-static const struct ath9k_percal_data adc_init_dc_cal = {
-       ADC_DC_INIT_CAL,
-       MIN_CAL_SAMPLES,
-       INIT_LOG_COUNT,
-       ar9002_hw_adc_dccal_collect,
-       ar9002_hw_adc_dccal_calibrate
-};
-
-static void ar9002_hw_init_cal_settings(struct ath_hw *ah)
-{
-       if (AR_SREV_9100(ah)) {
-               ah->iq_caldata.calData = &iq_cal_multi_sample;
-               ah->supp_cals = IQ_MISMATCH_CAL;
-               return;
-       }
-
-       if (AR_SREV_9160_10_OR_LATER(ah)) {
-               if (AR_SREV_9280_10_OR_LATER(ah)) {
-                       ah->iq_caldata.calData = &iq_cal_single_sample;
-                       ah->adcgain_caldata.calData =
-                               &adc_gain_cal_single_sample;
-                       ah->adcdc_caldata.calData =
-                               &adc_dc_cal_single_sample;
-                       ah->adcdc_calinitdata.calData =
-                               &adc_init_dc_cal;
-               } else {
-                       ah->iq_caldata.calData = &iq_cal_multi_sample;
-                       ah->adcgain_caldata.calData =
-                               &adc_gain_cal_multi_sample;
-                       ah->adcdc_caldata.calData =
-                               &adc_dc_cal_multi_sample;
-                       ah->adcdc_calinitdata.calData =
-                               &adc_init_dc_cal;
-               }
-               ah->supp_cals = ADC_GAIN_CAL | ADC_DC_CAL | IQ_MISMATCH_CAL;
-       }
-}
-
-void ar9002_hw_attach_calib_ops(struct ath_hw *ah)
-{
-       struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
-       struct ath_hw_ops *ops = ath9k_hw_ops(ah);
-
-       priv_ops->init_cal_settings = ar9002_hw_init_cal_settings;
-       priv_ops->init_cal = ar9002_hw_init_cal;
-       priv_ops->setup_calibration = ar9002_hw_setup_calibration;
-       priv_ops->iscal_supported = ar9002_hw_iscal_supported;
-
-       ops->calibrate = ar9002_hw_calibrate;
-}
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_hw.c b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
deleted file mode 100644 (file)
index cb90aa8..0000000
+++ /dev/null
@@ -1,585 +0,0 @@
-/*
- * Copyright (c) 2008-2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "hw.h"
-#include "ar5008_initvals.h"
-#include "ar9001_initvals.h"
-#include "ar9002_initvals.h"
-#include "ar9002_phy.h"
-
-int modparam_force_new_ani;
-module_param_named(force_new_ani, modparam_force_new_ani, int, 0444);
-MODULE_PARM_DESC(nohwcrypt, "Force new ANI for AR5008, AR9001, AR9002");
-
-/* General hardware code for the A5008/AR9001/AR9002 hadware families */
-
-static bool ar9002_hw_macversion_supported(u32 macversion)
-{
-       switch (macversion) {
-       case AR_SREV_VERSION_5416_PCI:
-       case AR_SREV_VERSION_5416_PCIE:
-       case AR_SREV_VERSION_9160:
-       case AR_SREV_VERSION_9100:
-       case AR_SREV_VERSION_9280:
-       case AR_SREV_VERSION_9285:
-       case AR_SREV_VERSION_9287:
-       case AR_SREV_VERSION_9271:
-               return true;
-       default:
-               break;
-       }
-       return false;
-}
-
-static void ar9002_hw_init_mode_regs(struct ath_hw *ah)
-{
-       if (AR_SREV_9271(ah)) {
-               INIT_INI_ARRAY(&ah->iniModes, ar9271Modes_9271,
-                              ARRAY_SIZE(ar9271Modes_9271), 6);
-               INIT_INI_ARRAY(&ah->iniCommon, ar9271Common_9271,
-                              ARRAY_SIZE(ar9271Common_9271), 2);
-               INIT_INI_ARRAY(&ah->iniCommon_normal_cck_fir_coeff_9271,
-                              ar9271Common_normal_cck_fir_coeff_9271,
-                              ARRAY_SIZE(ar9271Common_normal_cck_fir_coeff_9271), 2);
-               INIT_INI_ARRAY(&ah->iniCommon_japan_2484_cck_fir_coeff_9271,
-                              ar9271Common_japan_2484_cck_fir_coeff_9271,
-                              ARRAY_SIZE(ar9271Common_japan_2484_cck_fir_coeff_9271), 2);
-               INIT_INI_ARRAY(&ah->iniModes_9271_1_0_only,
-                              ar9271Modes_9271_1_0_only,
-                              ARRAY_SIZE(ar9271Modes_9271_1_0_only), 6);
-               INIT_INI_ARRAY(&ah->iniModes_9271_ANI_reg, ar9271Modes_9271_ANI_reg,
-                              ARRAY_SIZE(ar9271Modes_9271_ANI_reg), 6);
-               INIT_INI_ARRAY(&ah->iniModes_high_power_tx_gain_9271,
-                              ar9271Modes_high_power_tx_gain_9271,
-                              ARRAY_SIZE(ar9271Modes_high_power_tx_gain_9271), 6);
-               INIT_INI_ARRAY(&ah->iniModes_normal_power_tx_gain_9271,
-                              ar9271Modes_normal_power_tx_gain_9271,
-                              ARRAY_SIZE(ar9271Modes_normal_power_tx_gain_9271), 6);
-               return;
-       }
-
-       if (AR_SREV_9287_11_OR_LATER(ah)) {
-               INIT_INI_ARRAY(&ah->iniModes, ar9287Modes_9287_1_1,
-                               ARRAY_SIZE(ar9287Modes_9287_1_1), 6);
-               INIT_INI_ARRAY(&ah->iniCommon, ar9287Common_9287_1_1,
-                               ARRAY_SIZE(ar9287Common_9287_1_1), 2);
-               if (ah->config.pcie_clock_req)
-                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
-                       ar9287PciePhy_clkreq_off_L1_9287_1_1,
-                       ARRAY_SIZE(ar9287PciePhy_clkreq_off_L1_9287_1_1), 2);
-               else
-                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
-                       ar9287PciePhy_clkreq_always_on_L1_9287_1_1,
-                       ARRAY_SIZE(ar9287PciePhy_clkreq_always_on_L1_9287_1_1),
-                                       2);
-       } else if (AR_SREV_9285_12_OR_LATER(ah)) {
-
-
-               INIT_INI_ARRAY(&ah->iniModes, ar9285Modes_9285_1_2,
-                              ARRAY_SIZE(ar9285Modes_9285_1_2), 6);
-               INIT_INI_ARRAY(&ah->iniCommon, ar9285Common_9285_1_2,
-                              ARRAY_SIZE(ar9285Common_9285_1_2), 2);
-
-               if (ah->config.pcie_clock_req) {
-                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
-                       ar9285PciePhy_clkreq_off_L1_9285_1_2,
-                       ARRAY_SIZE(ar9285PciePhy_clkreq_off_L1_9285_1_2), 2);
-               } else {
-                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
-                       ar9285PciePhy_clkreq_always_on_L1_9285_1_2,
-                       ARRAY_SIZE(ar9285PciePhy_clkreq_always_on_L1_9285_1_2),
-                                 2);
-               }
-       } else if (AR_SREV_9280_20_OR_LATER(ah)) {
-               INIT_INI_ARRAY(&ah->iniModes, ar9280Modes_9280_2,
-                              ARRAY_SIZE(ar9280Modes_9280_2), 6);
-               INIT_INI_ARRAY(&ah->iniCommon, ar9280Common_9280_2,
-                              ARRAY_SIZE(ar9280Common_9280_2), 2);
-
-               if (ah->config.pcie_clock_req) {
-                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
-                              ar9280PciePhy_clkreq_off_L1_9280,
-                              ARRAY_SIZE(ar9280PciePhy_clkreq_off_L1_9280), 2);
-               } else {
-                       INIT_INI_ARRAY(&ah->iniPcieSerdes,
-                              ar9280PciePhy_clkreq_always_on_L1_9280,
-                              ARRAY_SIZE(ar9280PciePhy_clkreq_always_on_L1_9280), 2);
-               }
-               INIT_INI_ARRAY(&ah->iniModesAdditional,
-                              ar9280Modes_fast_clock_9280_2,
-                              ARRAY_SIZE(ar9280Modes_fast_clock_9280_2), 3);
-       } else if (AR_SREV_9160_10_OR_LATER(ah)) {
-               INIT_INI_ARRAY(&ah->iniModes, ar5416Modes_9160,
-                              ARRAY_SIZE(ar5416Modes_9160), 6);
-               INIT_INI_ARRAY(&ah->iniCommon, ar5416Common_9160,
-                              ARRAY_SIZE(ar5416Common_9160), 2);
-               INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0_9160,
-                              ARRAY_SIZE(ar5416Bank0_9160), 2);
-               INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain_9160,
-                              ARRAY_SIZE(ar5416BB_RfGain_9160), 3);
-               INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1_9160,
-                              ARRAY_SIZE(ar5416Bank1_9160), 2);
-               INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2_9160,
-                              ARRAY_SIZE(ar5416Bank2_9160), 2);
-               INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3_9160,
-                              ARRAY_SIZE(ar5416Bank3_9160), 3);
-               INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6_9160,
-                              ARRAY_SIZE(ar5416Bank6_9160), 3);
-               INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC_9160,
-                              ARRAY_SIZE(ar5416Bank6TPC_9160), 3);
-               INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7_9160,
-                              ARRAY_SIZE(ar5416Bank7_9160), 2);
-               if (AR_SREV_9160_11(ah)) {
-                       INIT_INI_ARRAY(&ah->iniAddac,
-                                      ar5416Addac_9160_1_1,
-                                      ARRAY_SIZE(ar5416Addac_9160_1_1), 2);
-               } else {
-                       INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac_9160,
-                                      ARRAY_SIZE(ar5416Addac_9160), 2);
-               }
-       } else if (AR_SREV_9100_OR_LATER(ah)) {
-               INIT_INI_ARRAY(&ah->iniModes, ar5416Modes_9100,
-                              ARRAY_SIZE(ar5416Modes_9100), 6);
-               INIT_INI_ARRAY(&ah->iniCommon, ar5416Common_9100,
-                              ARRAY_SIZE(ar5416Common_9100), 2);
-               INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0_9100,
-                              ARRAY_SIZE(ar5416Bank0_9100), 2);
-               INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain_9100,
-                              ARRAY_SIZE(ar5416BB_RfGain_9100), 3);
-               INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1_9100,
-                              ARRAY_SIZE(ar5416Bank1_9100), 2);
-               INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2_9100,
-                              ARRAY_SIZE(ar5416Bank2_9100), 2);
-               INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3_9100,
-                              ARRAY_SIZE(ar5416Bank3_9100), 3);
-               INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6_9100,
-                              ARRAY_SIZE(ar5416Bank6_9100), 3);
-               INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC_9100,
-                              ARRAY_SIZE(ar5416Bank6TPC_9100), 3);
-               INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7_9100,
-                              ARRAY_SIZE(ar5416Bank7_9100), 2);
-               INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac_9100,
-                              ARRAY_SIZE(ar5416Addac_9100), 2);
-       } else {
-               INIT_INI_ARRAY(&ah->iniModes, ar5416Modes,
-                              ARRAY_SIZE(ar5416Modes), 6);
-               INIT_INI_ARRAY(&ah->iniCommon, ar5416Common,
-                              ARRAY_SIZE(ar5416Common), 2);
-               INIT_INI_ARRAY(&ah->iniBank0, ar5416Bank0,
-                              ARRAY_SIZE(ar5416Bank0), 2);
-               INIT_INI_ARRAY(&ah->iniBB_RfGain, ar5416BB_RfGain,
-                              ARRAY_SIZE(ar5416BB_RfGain), 3);
-               INIT_INI_ARRAY(&ah->iniBank1, ar5416Bank1,
-                              ARRAY_SIZE(ar5416Bank1), 2);
-               INIT_INI_ARRAY(&ah->iniBank2, ar5416Bank2,
-                              ARRAY_SIZE(ar5416Bank2), 2);
-               INIT_INI_ARRAY(&ah->iniBank3, ar5416Bank3,
-                              ARRAY_SIZE(ar5416Bank3), 3);
-               INIT_INI_ARRAY(&ah->iniBank6, ar5416Bank6,
-                              ARRAY_SIZE(ar5416Bank6), 3);
-               INIT_INI_ARRAY(&ah->iniBank6TPC, ar5416Bank6TPC,
-                              ARRAY_SIZE(ar5416Bank6TPC), 3);
-               INIT_INI_ARRAY(&ah->iniBank7, ar5416Bank7,
-                              ARRAY_SIZE(ar5416Bank7), 2);
-               INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac,
-                              ARRAY_SIZE(ar5416Addac), 2);
-       }
-}
-
-/* Support for Japan ch.14 (2484) spread */
-void ar9002_hw_cck_chan14_spread(struct ath_hw *ah)
-{
-       if (AR_SREV_9287_11_OR_LATER(ah)) {
-               INIT_INI_ARRAY(&ah->iniCckfirNormal,
-                      ar9287Common_normal_cck_fir_coeff_9287_1_1,
-                      ARRAY_SIZE(ar9287Common_normal_cck_fir_coeff_9287_1_1),
-                      2);
-               INIT_INI_ARRAY(&ah->iniCckfirJapan2484,
-                      ar9287Common_japan_2484_cck_fir_coeff_9287_1_1,
-                      ARRAY_SIZE(ar9287Common_japan_2484_cck_fir_coeff_9287_1_1),
-                      2);
-       }
-}
-
-static void ar9280_20_hw_init_rxgain_ini(struct ath_hw *ah)
-{
-       u32 rxgain_type;
-
-       if (ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV) >=
-           AR5416_EEP_MINOR_VER_17) {
-               rxgain_type = ah->eep_ops->get_eeprom(ah, EEP_RXGAIN_TYPE);
-
-               if (rxgain_type == AR5416_EEP_RXGAIN_13DB_BACKOFF)
-                       INIT_INI_ARRAY(&ah->iniModesRxGain,
-                       ar9280Modes_backoff_13db_rxgain_9280_2,
-                       ARRAY_SIZE(ar9280Modes_backoff_13db_rxgain_9280_2), 6);
-               else if (rxgain_type == AR5416_EEP_RXGAIN_23DB_BACKOFF)
-                       INIT_INI_ARRAY(&ah->iniModesRxGain,
-                       ar9280Modes_backoff_23db_rxgain_9280_2,
-                       ARRAY_SIZE(ar9280Modes_backoff_23db_rxgain_9280_2), 6);
-               else
-                       INIT_INI_ARRAY(&ah->iniModesRxGain,
-                       ar9280Modes_original_rxgain_9280_2,
-                       ARRAY_SIZE(ar9280Modes_original_rxgain_9280_2), 6);
-       } else {
-               INIT_INI_ARRAY(&ah->iniModesRxGain,
-                       ar9280Modes_original_rxgain_9280_2,
-                       ARRAY_SIZE(ar9280Modes_original_rxgain_9280_2), 6);
-       }
-}
-
-static void ar9280_20_hw_init_txgain_ini(struct ath_hw *ah)
-{
-       u32 txgain_type;
-
-       if (ah->eep_ops->get_eeprom(ah, EEP_MINOR_REV) >=
-           AR5416_EEP_MINOR_VER_19) {
-               txgain_type = ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE);
-
-               if (txgain_type == AR5416_EEP_TXGAIN_HIGH_POWER)
-                       INIT_INI_ARRAY(&ah->iniModesTxGain,
-                       ar9280Modes_high_power_tx_gain_9280_2,
-                       ARRAY_SIZE(ar9280Modes_high_power_tx_gain_9280_2), 6);
-               else
-                       INIT_INI_ARRAY(&ah->iniModesTxGain,
-                       ar9280Modes_original_tx_gain_9280_2,
-                       ARRAY_SIZE(ar9280Modes_original_tx_gain_9280_2), 6);
-       } else {
-               INIT_INI_ARRAY(&ah->iniModesTxGain,
-               ar9280Modes_original_tx_gain_9280_2,
-               ARRAY_SIZE(ar9280Modes_original_tx_gain_9280_2), 6);
-       }
-}
-
-static void ar9002_hw_init_mode_gain_regs(struct ath_hw *ah)
-{
-       if (AR_SREV_9287_11_OR_LATER(ah))
-               INIT_INI_ARRAY(&ah->iniModesRxGain,
-               ar9287Modes_rx_gain_9287_1_1,
-               ARRAY_SIZE(ar9287Modes_rx_gain_9287_1_1), 6);
-       else if (AR_SREV_9280_20(ah))
-               ar9280_20_hw_init_rxgain_ini(ah);
-
-       if (AR_SREV_9287_11_OR_LATER(ah)) {
-               INIT_INI_ARRAY(&ah->iniModesTxGain,
-               ar9287Modes_tx_gain_9287_1_1,
-               ARRAY_SIZE(ar9287Modes_tx_gain_9287_1_1), 6);
-       } else if (AR_SREV_9280_20(ah)) {
-               ar9280_20_hw_init_txgain_ini(ah);
-       } else if (AR_SREV_9285_12_OR_LATER(ah)) {
-               u32 txgain_type = ah->eep_ops->get_eeprom(ah, EEP_TXGAIN_TYPE);
-
-               /* txgain table */
-               if (txgain_type == AR5416_EEP_TXGAIN_HIGH_POWER) {
-                       if (AR_SREV_9285E_20(ah)) {
-                               INIT_INI_ARRAY(&ah->iniModesTxGain,
-                               ar9285Modes_XE2_0_high_power,
-                               ARRAY_SIZE(
-                                 ar9285Modes_XE2_0_high_power), 6);
-                       } else {
-                               INIT_INI_ARRAY(&ah->iniModesTxGain,
-                               ar9285Modes_high_power_tx_gain_9285_1_2,
-                               ARRAY_SIZE(
-                                 ar9285Modes_high_power_tx_gain_9285_1_2), 6);
-                       }
-               } else {
-                       if (AR_SREV_9285E_20(ah)) {
-                               INIT_INI_ARRAY(&ah->iniModesTxGain,
-                               ar9285Modes_XE2_0_normal_power,
-                               ARRAY_SIZE(
-                                 ar9285Modes_XE2_0_normal_power), 6);
-                       } else {
-                               INIT_INI_ARRAY(&ah->iniModesTxGain,
-                               ar9285Modes_original_tx_gain_9285_1_2,
-                               ARRAY_SIZE(
-                                 ar9285Modes_original_tx_gain_9285_1_2), 6);
-                       }
-               }
-       }
-}
-
-/*
- * Helper for ASPM support.
- *
- * Disable PLL when in L0s as well as receiver clock when in L1.
- * This power saving option must be enabled through the SerDes.
- *
- * Programming the SerDes must go through the same 288 bit serial shift
- * register as the other analog registers.  Hence the 9 writes.
- */
-static void ar9002_hw_configpcipowersave(struct ath_hw *ah,
-                                        int restore,
-                                        int power_off)
-{
-       u8 i;
-       u32 val;
-
-       if (ah->is_pciexpress != true)
-               return;
-
-       /* Do not touch SerDes registers */
-       if (ah->config.pcie_powersave_enable == 2)
-               return;
-
-       /* Nothing to do on restore for 11N */
-       if (!restore) {
-               if (AR_SREV_9280_20_OR_LATER(ah)) {
-                       /*
-                        * AR9280 2.0 or later chips use SerDes values from the
-                        * initvals.h initialized depending on chipset during
-                        * __ath9k_hw_init()
-                        */
-                       for (i = 0; i < ah->iniPcieSerdes.ia_rows; i++) {
-                               REG_WRITE(ah, INI_RA(&ah->iniPcieSerdes, i, 0),
-                                         INI_RA(&ah->iniPcieSerdes, i, 1));
-                       }
-               } else {
-                       ENABLE_REGWRITE_BUFFER(ah);
-
-                       REG_WRITE(ah, AR_PCIE_SERDES, 0x9248fc00);
-                       REG_WRITE(ah, AR_PCIE_SERDES, 0x24924924);
-
-                       /* RX shut off when elecidle is asserted */
-                       REG_WRITE(ah, AR_PCIE_SERDES, 0x28000039);
-                       REG_WRITE(ah, AR_PCIE_SERDES, 0x53160824);
-                       REG_WRITE(ah, AR_PCIE_SERDES, 0xe5980579);
-
-                       /*
-                        * Ignore ah->ah_config.pcie_clock_req setting for
-                        * pre-AR9280 11n
-                        */
-                       REG_WRITE(ah, AR_PCIE_SERDES, 0x001defff);
-
-                       REG_WRITE(ah, AR_PCIE_SERDES, 0x1aaabe40);
-                       REG_WRITE(ah, AR_PCIE_SERDES, 0xbe105554);
-                       REG_WRITE(ah, AR_PCIE_SERDES, 0x000e3007);
-
-                       /* Load the new settings */
-                       REG_WRITE(ah, AR_PCIE_SERDES2, 0x00000000);
-
-                       REGWRITE_BUFFER_FLUSH(ah);
-                       DISABLE_REGWRITE_BUFFER(ah);
-               }
-
-               udelay(1000);
-       }
-
-       if (power_off) {
-               /* clear bit 19 to disable L1 */
-               REG_CLR_BIT(ah, AR_PCIE_PM_CTRL, AR_PCIE_PM_CTRL_ENA);
-
-               val = REG_READ(ah, AR_WA);
-
-               /*
-                * Set PCIe workaround bits
-                * In AR9280 and AR9285, bit 14 in WA register (disable L1)
-                * should only  be set when device enters D3 and be
-                * cleared when device comes back to D0.
-                */
-               if (ah->config.pcie_waen) {
-                       if (ah->config.pcie_waen & AR_WA_D3_L1_DISABLE)
-                               val |= AR_WA_D3_L1_DISABLE;
-               } else {
-                       if (((AR_SREV_9285(ah) ||
-                             AR_SREV_9271(ah) ||
-                             AR_SREV_9287(ah)) &&
-                            (AR9285_WA_DEFAULT & AR_WA_D3_L1_DISABLE)) ||
-                           (AR_SREV_9280(ah) &&
-                            (AR9280_WA_DEFAULT & AR_WA_D3_L1_DISABLE))) {
-                               val |= AR_WA_D3_L1_DISABLE;
-                       }
-               }
-
-               if (AR_SREV_9280(ah) || AR_SREV_9285(ah) || AR_SREV_9287(ah)) {
-                       /*
-                        * Disable bit 6 and 7 before entering D3 to
-                        * prevent system hang.
-                        */
-                       val &= ~(AR_WA_BIT6 | AR_WA_BIT7);
-               }
-
-               if (AR_SREV_9280(ah))
-                       val |= AR_WA_BIT22;
-
-               if (AR_SREV_9285E_20(ah))
-                       val |= AR_WA_BIT23;
-
-               REG_WRITE(ah, AR_WA, val);
-       } else {
-               if (ah->config.pcie_waen) {
-                       val = ah->config.pcie_waen;
-                       if (!power_off)
-                               val &= (~AR_WA_D3_L1_DISABLE);
-               } else {
-                       if (AR_SREV_9285(ah) ||
-                           AR_SREV_9271(ah) ||
-                           AR_SREV_9287(ah)) {
-                               val = AR9285_WA_DEFAULT;
-                               if (!power_off)
-                                       val &= (~AR_WA_D3_L1_DISABLE);
-                       }
-                       else if (AR_SREV_9280(ah)) {
-                               /*
-                                * For AR9280 chips, bit 22 of 0x4004
-                                * needs to be set.
-                                */
-                               val = AR9280_WA_DEFAULT;
-                               if (!power_off)
-                                       val &= (~AR_WA_D3_L1_DISABLE);
-                       } else {
-                               val = AR_WA_DEFAULT;
-                       }
-               }
-
-               /* WAR for ASPM system hang */
-               if (AR_SREV_9280(ah) || AR_SREV_9285(ah) || AR_SREV_9287(ah)) {
-                       val |= (AR_WA_BIT6 | AR_WA_BIT7);
-               }
-
-               if (AR_SREV_9285E_20(ah))
-                       val |= AR_WA_BIT23;
-
-               REG_WRITE(ah, AR_WA, val);
-
-               /* set bit 19 to allow forcing of pcie core into L1 state */
-               REG_SET_BIT(ah, AR_PCIE_PM_CTRL, AR_PCIE_PM_CTRL_ENA);
-       }
-}
-
-static int ar9002_hw_get_radiorev(struct ath_hw *ah)
-{
-       u32 val;
-       int i;
-
-       ENABLE_REGWRITE_BUFFER(ah);
-
-       REG_WRITE(ah, AR_PHY(0x36), 0x00007058);
-       for (i = 0; i < 8; i++)
-               REG_WRITE(ah, AR_PHY(0x20), 0x00010000);
-
-       REGWRITE_BUFFER_FLUSH(ah);
-       DISABLE_REGWRITE_BUFFER(ah);
-
-       val = (REG_READ(ah, AR_PHY(256)) >> 24) & 0xff;
-       val = ((val & 0xf0) >> 4) | ((val & 0x0f) << 4);
-
-       return ath9k_hw_reverse_bits(val, 8);
-}
-
-int ar9002_hw_rf_claim(struct ath_hw *ah)
-{
-       u32 val;
-
-       REG_WRITE(ah, AR_PHY(0), 0x00000007);
-
-       val = ar9002_hw_get_radiorev(ah);
-       switch (val & AR_RADIO_SREV_MAJOR) {
-       case 0:
-               val = AR_RAD5133_SREV_MAJOR;
-               break;
-       case AR_RAD5133_SREV_MAJOR:
-       case AR_RAD5122_SREV_MAJOR:
-       case AR_RAD2133_SREV_MAJOR:
-       case AR_RAD2122_SREV_MAJOR:
-               break;
-       default:
-               ath_print(ath9k_hw_common(ah), ATH_DBG_FATAL,
-                         "Radio Chip Rev 0x%02X not supported\n",
-                         val & AR_RADIO_SREV_MAJOR);
-               return -EOPNOTSUPP;
-       }
-
-       ah->hw_version.analog5GhzRev = val;
-
-       return 0;
-}
-
-void ar9002_hw_enable_async_fifo(struct ath_hw *ah)
-{
-       if (AR_SREV_9287_13_OR_LATER(ah)) {
-               REG_SET_BIT(ah, AR_MAC_PCU_ASYNC_FIFO_REG3,
-                               AR_MAC_PCU_ASYNC_FIFO_REG3_DATAPATH_SEL);
-               REG_SET_BIT(ah, AR_PHY_MODE, AR_PHY_MODE_ASYNCFIFO);
-               REG_CLR_BIT(ah, AR_MAC_PCU_ASYNC_FIFO_REG3,
-                               AR_MAC_PCU_ASYNC_FIFO_REG3_SOFT_RESET);
-               REG_SET_BIT(ah, AR_MAC_PCU_ASYNC_FIFO_REG3,
-                               AR_MAC_PCU_ASYNC_FIFO_REG3_SOFT_RESET);
-       }
-}
-
-/*
- * If Async FIFO is enabled, the following counters change as MAC now runs
- * at 117 Mhz instead of 88/44MHz when async FIFO is disabled.
- *
- * The values below tested for ht40 2 chain.
- * Overwrite the delay/timeouts initialized in process ini.
- */
-void ar9002_hw_update_async_fifo(struct ath_hw *ah)
-{
-       if (AR_SREV_9287_13_OR_LATER(ah)) {
-               REG_WRITE(ah, AR_D_GBL_IFS_SIFS,
-                         AR_D_GBL_IFS_SIFS_ASYNC_FIFO_DUR);
-               REG_WRITE(ah, AR_D_GBL_IFS_SLOT,
-                         AR_D_GBL_IFS_SLOT_ASYNC_FIFO_DUR);
-               REG_WRITE(ah, AR_D_GBL_IFS_EIFS,
-                         AR_D_GBL_IFS_EIFS_ASYNC_FIFO_DUR);
-
-               REG_WRITE(ah, AR_TIME_OUT, AR_TIME_OUT_ACK_CTS_ASYNC_FIFO_DUR);
-               REG_WRITE(ah, AR_USEC, AR_USEC_ASYNC_FIFO_DUR);
-
-               REG_SET_BIT(ah, AR_MAC_PCU_LOGIC_ANALYZER,
-                           AR_MAC_PCU_LOGIC_ANALYZER_DISBUG20768);
-               REG_RMW_FIELD(ah, AR_AHB_MODE, AR_AHB_CUSTOM_BURST_EN,
-                             AR_AHB_CUSTOM_BURST_ASYNC_FIFO_VAL);
-       }
-}
-
-/*
- * We don't enable WEP aggregation on mac80211 but we keep this
- * around for HAL unification purposes.
- */
-void ar9002_hw_enable_wep_aggregation(struct ath_hw *ah)
-{
-       if (AR_SREV_9287_13_OR_LATER(ah)) {
-               REG_SET_BIT(ah, AR_PCU_MISC_MODE2,
-                           AR_PCU_MISC_MODE2_ENABLE_AGGWEP);
-       }
-}
-
-/* Sets up the AR5008/AR9001/AR9002 hardware familiy callbacks */
-void ar9002_hw_attach_ops(struct ath_hw *ah)
-{
-       struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
-       struct ath_hw_ops *ops = ath9k_hw_ops(ah);
-
-       priv_ops->init_mode_regs = ar9002_hw_init_mode_regs;
-       priv_ops->init_mode_gain_regs = ar9002_hw_init_mode_gain_regs;
-       priv_ops->macversion_supported = ar9002_hw_macversion_supported;
-
-       ops->config_pci_powersave = ar9002_hw_configpcipowersave;
-
-       ar5008_hw_attach_phy_ops(ah);
-       if (AR_SREV_9280_10_OR_LATER(ah))
-               ar9002_hw_attach_phy_ops(ah);
-
-       ar9002_hw_attach_calib_ops(ah);
-       ar9002_hw_attach_mac_ops(ah);
-
-       if (modparam_force_new_ani)
-               ath9k_hw_attach_ani_ops_new(ah);
-       else
-               ath9k_hw_attach_ani_ops_old(ah);
-}
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_initvals.h b/drivers/net/wireless/ath/ath9k/ar9002_initvals.h
deleted file mode 100644 (file)
index 6203eed..0000000
+++ /dev/null
@@ -1,3265 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-static const u32 ar9280Modes_9280_2[][6] = {
-       {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0},
-       {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0},
-       {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180},
-       {0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008},
-       {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0},
-       {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b, 0x0988004f},
-       {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810, 0x08f04810},
-       {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a, 0x0000320a},
-       {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440, 0x00006880},
-       {0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303},
-       {0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200},
-       {0x00009824, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e},
-       {0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001},
-       {0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e},
-       {0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007},
-       {0x00009840, 0x206a022e, 0x206a022e, 0x206a012e, 0x206a012e, 0x206a012e},
-       {0x00009844, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0, 0x037216a0},
-       {0x00009850, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2, 0x6c4000e2},
-       {0x00009858, 0x7ec88d2e, 0x7ec88d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e},
-       {0x0000985c, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e, 0x31395d5e},
-       {0x00009860, 0x00048d18, 0x00048d18, 0x00048d20, 0x00048d20, 0x00048d18},
-       {0x00009864, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00, 0x0001ce00},
-       {0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0},
-       {0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881, 0x06903881},
-       {0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0},
-       {0x00009918, 0x0000000a, 0x00000014, 0x00000268, 0x0000000b, 0x00000016},
-       {0x00009924, 0xd00a8a0b, 0xd00a8a0b, 0xd00a8a0d, 0xd00a8a0d, 0xd00a8a0d},
-       {0x00009944, 0xffbc1010, 0xffbc1010, 0xffbc1010, 0xffbc1010, 0xffbc1010},
-       {0x00009960, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010},
-       {0x0000a960, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010},
-       {0x00009964, 0x00000210, 0x00000210, 0x00000210, 0x00000210, 0x00000210},
-       {0x0000c968, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce, 0x000003ce},
-       {0x000099b8, 0x0000001c, 0x0000001c, 0x0000001c, 0x0000001c, 0x0000001c},
-       {0x000099bc, 0x00000a00, 0x00000a00, 0x00000c00, 0x00000c00, 0x00000c00},
-       {0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4},
-       {0x0000a204, 0x00000444, 0x00000444, 0x00000444, 0x00000444, 0x00000444},
-       {0x0000a20c, 0x00000014, 0x00000014, 0x0001f019, 0x0001f019, 0x0001f019},
-       {0x0000b20c, 0x00000014, 0x00000014, 0x0001f019, 0x0001f019, 0x0001f019},
-       {0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a},
-       {0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000},
-       {0x0000a23c, 0x13c88000, 0x13c88000, 0x13c88001, 0x13c88000, 0x13c88000},
-       {0x0000a250, 0x001ff000, 0x001ff000, 0x0004a000, 0x0004a000, 0x0004a000},
-       {0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e},
-       {0x0000a388, 0x0c000000, 0x0c000000, 0x08000000, 0x0c000000, 0x0c000000},
-       {0x0000a3d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00007894, 0x5a508000, 0x5a508000, 0x5a508000, 0x5a508000, 0x5a508000},
-};
-
-static const u32 ar9280Common_9280_2[][2] = {
-       /* Addr      allmodes  */
-       {0x0000000c, 0x00000000},
-       {0x00000030, 0x00020015},
-       {0x00000034, 0x00000005},
-       {0x00000040, 0x00000000},
-       {0x00000044, 0x00000008},
-       {0x00000048, 0x00000008},
-       {0x0000004c, 0x00000010},
-       {0x00000050, 0x00000000},
-       {0x00000054, 0x0000001f},
-       {0x00000800, 0x00000000},
-       {0x00000804, 0x00000000},
-       {0x00000808, 0x00000000},
-       {0x0000080c, 0x00000000},
-       {0x00000810, 0x00000000},
-       {0x00000814, 0x00000000},
-       {0x00000818, 0x00000000},
-       {0x0000081c, 0x00000000},
-       {0x00000820, 0x00000000},
-       {0x00000824, 0x00000000},
-       {0x00001040, 0x002ffc0f},
-       {0x00001044, 0x002ffc0f},
-       {0x00001048, 0x002ffc0f},
-       {0x0000104c, 0x002ffc0f},
-       {0x00001050, 0x002ffc0f},
-       {0x00001054, 0x002ffc0f},
-       {0x00001058, 0x002ffc0f},
-       {0x0000105c, 0x002ffc0f},
-       {0x00001060, 0x002ffc0f},
-       {0x00001064, 0x002ffc0f},
-       {0x00001230, 0x00000000},
-       {0x00001270, 0x00000000},
-       {0x00001038, 0x00000000},
-       {0x00001078, 0x00000000},
-       {0x000010b8, 0x00000000},
-       {0x000010f8, 0x00000000},
-       {0x00001138, 0x00000000},
-       {0x00001178, 0x00000000},
-       {0x000011b8, 0x00000000},
-       {0x000011f8, 0x00000000},
-       {0x00001238, 0x00000000},
-       {0x00001278, 0x00000000},
-       {0x000012b8, 0x00000000},
-       {0x000012f8, 0x00000000},
-       {0x00001338, 0x00000000},
-       {0x00001378, 0x00000000},
-       {0x000013b8, 0x00000000},
-       {0x000013f8, 0x00000000},
-       {0x00001438, 0x00000000},
-       {0x00001478, 0x00000000},
-       {0x000014b8, 0x00000000},
-       {0x000014f8, 0x00000000},
-       {0x00001538, 0x00000000},
-       {0x00001578, 0x00000000},
-       {0x000015b8, 0x00000000},
-       {0x000015f8, 0x00000000},
-       {0x00001638, 0x00000000},
-       {0x00001678, 0x00000000},
-       {0x000016b8, 0x00000000},
-       {0x000016f8, 0x00000000},
-       {0x00001738, 0x00000000},
-       {0x00001778, 0x00000000},
-       {0x000017b8, 0x00000000},
-       {0x000017f8, 0x00000000},
-       {0x0000103c, 0x00000000},
-       {0x0000107c, 0x00000000},
-       {0x000010bc, 0x00000000},
-       {0x000010fc, 0x00000000},
-       {0x0000113c, 0x00000000},
-       {0x0000117c, 0x00000000},
-       {0x000011bc, 0x00000000},
-       {0x000011fc, 0x00000000},
-       {0x0000123c, 0x00000000},
-       {0x0000127c, 0x00000000},
-       {0x000012bc, 0x00000000},
-       {0x000012fc, 0x00000000},
-       {0x0000133c, 0x00000000},
-       {0x0000137c, 0x00000000},
-       {0x000013bc, 0x00000000},
-       {0x000013fc, 0x00000000},
-       {0x0000143c, 0x00000000},
-       {0x0000147c, 0x00000000},
-       {0x00004030, 0x00000002},
-       {0x0000403c, 0x00000002},
-       {0x00004024, 0x0000001f},
-       {0x00004060, 0x00000000},
-       {0x00004064, 0x00000000},
-       {0x00007010, 0x00000033},
-       {0x00007034, 0x00000002},
-       {0x00007038, 0x000004c2},
-       {0x00008004, 0x00000000},
-       {0x00008008, 0x00000000},
-       {0x0000800c, 0x00000000},
-       {0x00008018, 0x00000700},
-       {0x00008020, 0x00000000},
-       {0x00008038, 0x00000000},
-       {0x0000803c, 0x00000000},
-       {0x00008048, 0x40000000},
-       {0x00008054, 0x00000000},
-       {0x00008058, 0x00000000},
-       {0x0000805c, 0x000fc78f},
-       {0x00008060, 0x0000000f},
-       {0x00008064, 0x00000000},
-       {0x00008070, 0x00000000},
-       {0x000080c0, 0x2a80001a},
-       {0x000080c4, 0x05dc01e0},
-       {0x000080c8, 0x1f402710},
-       {0x000080cc, 0x01f40000},
-       {0x000080d0, 0x00001e00},
-       {0x000080d4, 0x00000000},
-       {0x000080d8, 0x00400000},
-       {0x000080e0, 0xffffffff},
-       {0x000080e4, 0x0000ffff},
-       {0x000080e8, 0x003f3f3f},
-       {0x000080ec, 0x00000000},
-       {0x000080f0, 0x00000000},
-       {0x000080f4, 0x00000000},
-       {0x000080f8, 0x00000000},
-       {0x000080fc, 0x00020000},
-       {0x00008100, 0x00020000},
-       {0x00008104, 0x00000001},
-       {0x00008108, 0x00000052},
-       {0x0000810c, 0x00000000},
-       {0x00008110, 0x00000168},
-       {0x00008118, 0x000100aa},
-       {0x0000811c, 0x00003210},
-       {0x00008124, 0x00000000},
-       {0x00008128, 0x00000000},
-       {0x0000812c, 0x00000000},
-       {0x00008130, 0x00000000},
-       {0x00008134, 0x00000000},
-       {0x00008138, 0x00000000},
-       {0x0000813c, 0x00000000},
-       {0x00008144, 0xffffffff},
-       {0x00008168, 0x00000000},
-       {0x0000816c, 0x00000000},
-       {0x00008170, 0x32143320},
-       {0x00008174, 0xfaa4fa50},
-       {0x00008178, 0x00000100},
-       {0x0000817c, 0x00000000},
-       {0x000081c0, 0x00000000},
-       {0x000081ec, 0x00000000},
-       {0x000081f0, 0x00000000},
-       {0x000081f4, 0x00000000},
-       {0x000081f8, 0x00000000},
-       {0x000081fc, 0x00000000},
-       {0x00008200, 0x00000000},
-       {0x00008204, 0x00000000},
-       {0x00008208, 0x00000000},
-       {0x0000820c, 0x00000000},
-       {0x00008210, 0x00000000},
-       {0x00008214, 0x00000000},
-       {0x00008218, 0x00000000},
-       {0x0000821c, 0x00000000},
-       {0x00008220, 0x00000000},
-       {0x00008224, 0x00000000},
-       {0x00008228, 0x00000000},
-       {0x0000822c, 0x00000000},
-       {0x00008230, 0x00000000},
-       {0x00008234, 0x00000000},
-       {0x00008238, 0x00000000},
-       {0x0000823c, 0x00000000},
-       {0x00008240, 0x00100000},
-       {0x00008244, 0x0010f400},
-       {0x00008248, 0x00000100},
-       {0x0000824c, 0x0001e800},
-       {0x00008250, 0x00000000},
-       {0x00008254, 0x00000000},
-       {0x00008258, 0x00000000},
-       {0x0000825c, 0x400000ff},
-       {0x00008260, 0x00080922},
-       {0x00008264, 0x88a00010},
-       {0x00008270, 0x00000000},
-       {0x00008274, 0x40000000},
-       {0x00008278, 0x003e4180},
-       {0x0000827c, 0x00000000},
-       {0x00008284, 0x0000002c},
-       {0x00008288, 0x0000002c},
-       {0x0000828c, 0x00000000},
-       {0x00008294, 0x00000000},
-       {0x00008298, 0x00000000},
-       {0x0000829c, 0x00000000},
-       {0x00008300, 0x00000040},
-       {0x00008314, 0x00000000},
-       {0x00008328, 0x00000000},
-       {0x0000832c, 0x00000007},
-       {0x00008330, 0x00000302},
-       {0x00008334, 0x00000e00},
-       {0x00008338, 0x00ff0000},
-       {0x0000833c, 0x00000000},
-       {0x00008340, 0x000107ff},
-       {0x00008344, 0x00481043},
-       {0x00009808, 0x00000000},
-       {0x0000980c, 0xafa68e30},
-       {0x00009810, 0xfd14e000},
-       {0x00009814, 0x9c0a9f6b},
-       {0x0000981c, 0x00000000},
-       {0x0000982c, 0x0000a000},
-       {0x00009830, 0x00000000},
-       {0x0000983c, 0x00200400},
-       {0x0000984c, 0x0040233c},
-       {0x0000a84c, 0x0040233c},
-       {0x00009854, 0x00000044},
-       {0x00009900, 0x00000000},
-       {0x00009904, 0x00000000},
-       {0x00009908, 0x00000000},
-       {0x0000990c, 0x00000000},
-       {0x00009910, 0x01002310},
-       {0x0000991c, 0x10000fff},
-       {0x00009920, 0x04900000},
-       {0x0000a920, 0x04900000},
-       {0x00009928, 0x00000001},
-       {0x0000992c, 0x00000004},
-       {0x00009934, 0x1e1f2022},
-       {0x00009938, 0x0a0b0c0d},
-       {0x0000993c, 0x00000000},
-       {0x00009948, 0x9280c00a},
-       {0x0000994c, 0x00020028},
-       {0x00009954, 0x5f3ca3de},
-       {0x00009958, 0x2108ecff},
-       {0x00009940, 0x14750604},
-       {0x0000c95c, 0x004b6a8e},
-       {0x00009970, 0x190fb514},
-       {0x00009974, 0x00000000},
-       {0x00009978, 0x00000001},
-       {0x0000997c, 0x00000000},
-       {0x00009980, 0x00000000},
-       {0x00009984, 0x00000000},
-       {0x00009988, 0x00000000},
-       {0x0000998c, 0x00000000},
-       {0x00009990, 0x00000000},
-       {0x00009994, 0x00000000},
-       {0x00009998, 0x00000000},
-       {0x0000999c, 0x00000000},
-       {0x000099a0, 0x00000000},
-       {0x000099a4, 0x00000001},
-       {0x000099a8, 0x201fff00},
-       {0x000099ac, 0x006f0000},
-       {0x000099b0, 0x03051000},
-       {0x000099b4, 0x00000820},
-       {0x000099c4, 0x06336f77},
-       {0x000099c8, 0x6af6532f},
-       {0x000099cc, 0x08f186c8},
-       {0x000099d0, 0x00046384},
-       {0x000099d4, 0x00000000},
-       {0x000099d8, 0x00000000},
-       {0x000099dc, 0x00000000},
-       {0x000099e0, 0x00000000},
-       {0x000099e4, 0xaaaaaaaa},
-       {0x000099e8, 0x3c466478},
-       {0x000099ec, 0x0cc80caa},
-       {0x000099f0, 0x00000000},
-       {0x000099fc, 0x00001042},
-       {0x0000a208, 0x803e4788},
-       {0x0000a210, 0x4080a333},
-       {0x0000a214, 0x40206c10},
-       {0x0000a218, 0x009c4060},
-       {0x0000a220, 0x01834061},
-       {0x0000a224, 0x00000400},
-       {0x0000a228, 0x000003b5},
-       {0x0000a22c, 0x233f7180},
-       {0x0000a234, 0x20202020},
-       {0x0000a238, 0x20202020},
-       {0x0000a240, 0x38490a20},
-       {0x0000a244, 0x00007bb6},
-       {0x0000a248, 0x0fff3ffc},
-       {0x0000a24c, 0x00000000},
-       {0x0000a254, 0x00000000},
-       {0x0000a258, 0x0cdbd380},
-       {0x0000a25c, 0x0f0f0f01},
-       {0x0000a260, 0xdfa91f01},
-       {0x0000a268, 0x00000000},
-       {0x0000a26c, 0x0e79e5c6},
-       {0x0000b26c, 0x0e79e5c6},
-       {0x0000d270, 0x00820820},
-       {0x0000a278, 0x1ce739ce},
-       {0x0000d35c, 0x07ffffef},
-       {0x0000d360, 0x0fffffe7},
-       {0x0000d364, 0x17ffffe5},
-       {0x0000d368, 0x1fffffe4},
-       {0x0000d36c, 0x37ffffe3},
-       {0x0000d370, 0x3fffffe3},
-       {0x0000d374, 0x57ffffe3},
-       {0x0000d378, 0x5fffffe2},
-       {0x0000d37c, 0x7fffffe2},
-       {0x0000d380, 0x7f3c7bba},
-       {0x0000d384, 0xf3307ff0},
-       {0x0000a38c, 0x20202020},
-       {0x0000a390, 0x20202020},
-       {0x0000a394, 0x1ce739ce},
-       {0x0000a398, 0x000001ce},
-       {0x0000a39c, 0x00000001},
-       {0x0000a3a0, 0x00000000},
-       {0x0000a3a4, 0x00000000},
-       {0x0000a3a8, 0x00000000},
-       {0x0000a3ac, 0x00000000},
-       {0x0000a3b0, 0x00000000},
-       {0x0000a3b4, 0x00000000},
-       {0x0000a3b8, 0x00000000},
-       {0x0000a3bc, 0x00000000},
-       {0x0000a3c0, 0x00000000},
-       {0x0000a3c4, 0x00000000},
-       {0x0000a3c8, 0x00000246},
-       {0x0000a3cc, 0x20202020},
-       {0x0000a3d0, 0x20202020},
-       {0x0000a3d4, 0x20202020},
-       {0x0000a3dc, 0x1ce739ce},
-       {0x0000a3e0, 0x000001ce},
-       {0x0000a3e4, 0x00000000},
-       {0x0000a3e8, 0x18c43433},
-       {0x00007800, 0x00040000},
-       {0x00007804, 0xdb005012},
-       {0x00007808, 0x04924914},
-       {0x0000780c, 0x21084210},
-       {0x00007810, 0x6d801300},
-       {0x00007818, 0x07e41000},
-       {0x00007824, 0x00040000},
-       {0x00007828, 0xdb005012},
-       {0x0000782c, 0x04924914},
-       {0x00007830, 0x21084210},
-       {0x00007834, 0x6d801300},
-       {0x0000783c, 0x07e40000},
-       {0x00007848, 0x00100000},
-       {0x0000784c, 0x773f0567},
-       {0x00007850, 0x54214514},
-       {0x00007854, 0x12035828},
-       {0x00007858, 0x9259269a},
-       {0x00007860, 0x52802000},
-       {0x00007864, 0x0a8e370e},
-       {0x00007868, 0xc0102850},
-       {0x0000786c, 0x812d4000},
-       {0x00007870, 0x807ec400},
-       {0x00007874, 0x001b6db0},
-       {0x00007878, 0x00376b63},
-       {0x0000787c, 0x06db6db6},
-       {0x00007880, 0x006d8000},
-       {0x00007884, 0xffeffffe},
-       {0x00007888, 0xffeffffe},
-       {0x0000788c, 0x00010000},
-       {0x00007890, 0x02060aeb},
-       {0x00007898, 0x2a850160},
-};
-
-static const u32 ar9280Modes_fast_clock_9280_2[][3] = {
-       /* Addr      5G_HT20     5G_HT40   */
-       {0x00001030, 0x00000268, 0x000004d0},
-       {0x00001070, 0x0000018c, 0x00000318},
-       {0x000010b0, 0x00000fd0, 0x00001fa0},
-       {0x00008014, 0x044c044c, 0x08980898},
-       {0x0000801c, 0x148ec02b, 0x148ec057},
-       {0x00008318, 0x000044c0, 0x00008980},
-       {0x00009820, 0x02020200, 0x02020200},
-       {0x00009824, 0x01000f0f, 0x01000f0f},
-       {0x00009828, 0x0b020001, 0x0b020001},
-       {0x00009834, 0x00000f0f, 0x00000f0f},
-       {0x00009844, 0x03721821, 0x03721821},
-       {0x00009914, 0x00000898, 0x00001130},
-       {0x00009918, 0x0000000b, 0x00000016},
-};
-
-static const u32 ar9280Modes_backoff_23db_rxgain_9280_2[][6] = {
-       {0x00009a00, 0x00008184, 0x00008184, 0x00000290, 0x00000290, 0x00000290},
-       {0x00009a04, 0x00008188, 0x00008188, 0x00000300, 0x00000300, 0x00000300},
-       {0x00009a08, 0x0000818c, 0x0000818c, 0x00000304, 0x00000304, 0x00000304},
-       {0x00009a0c, 0x00008190, 0x00008190, 0x00000308, 0x00000308, 0x00000308},
-       {0x00009a10, 0x00008194, 0x00008194, 0x0000030c, 0x0000030c, 0x0000030c},
-       {0x00009a14, 0x00008200, 0x00008200, 0x00008000, 0x00008000, 0x00008000},
-       {0x00009a18, 0x00008204, 0x00008204, 0x00008004, 0x00008004, 0x00008004},
-       {0x00009a1c, 0x00008208, 0x00008208, 0x00008008, 0x00008008, 0x00008008},
-       {0x00009a20, 0x0000820c, 0x0000820c, 0x0000800c, 0x0000800c, 0x0000800c},
-       {0x00009a24, 0x00008210, 0x00008210, 0x00008080, 0x00008080, 0x00008080},
-       {0x00009a28, 0x00008214, 0x00008214, 0x00008084, 0x00008084, 0x00008084},
-       {0x00009a2c, 0x00008280, 0x00008280, 0x00008088, 0x00008088, 0x00008088},
-       {0x00009a30, 0x00008284, 0x00008284, 0x0000808c, 0x0000808c, 0x0000808c},
-       {0x00009a34, 0x00008288, 0x00008288, 0x00008100, 0x00008100, 0x00008100},
-       {0x00009a38, 0x0000828c, 0x0000828c, 0x00008104, 0x00008104, 0x00008104},
-       {0x00009a3c, 0x00008290, 0x00008290, 0x00008108, 0x00008108, 0x00008108},
-       {0x00009a40, 0x00008300, 0x00008300, 0x0000810c, 0x0000810c, 0x0000810c},
-       {0x00009a44, 0x00008304, 0x00008304, 0x00008110, 0x00008110, 0x00008110},
-       {0x00009a48, 0x00008308, 0x00008308, 0x00008114, 0x00008114, 0x00008114},
-       {0x00009a4c, 0x0000830c, 0x0000830c, 0x00008180, 0x00008180, 0x00008180},
-       {0x00009a50, 0x00008310, 0x00008310, 0x00008184, 0x00008184, 0x00008184},
-       {0x00009a54, 0x00008314, 0x00008314, 0x00008188, 0x00008188, 0x00008188},
-       {0x00009a58, 0x00008380, 0x00008380, 0x0000818c, 0x0000818c, 0x0000818c},
-       {0x00009a5c, 0x00008384, 0x00008384, 0x00008190, 0x00008190, 0x00008190},
-       {0x00009a60, 0x00008388, 0x00008388, 0x00008194, 0x00008194, 0x00008194},
-       {0x00009a64, 0x0000838c, 0x0000838c, 0x000081a0, 0x000081a0, 0x000081a0},
-       {0x00009a68, 0x00008390, 0x00008390, 0x0000820c, 0x0000820c, 0x0000820c},
-       {0x00009a6c, 0x00008394, 0x00008394, 0x000081a8, 0x000081a8, 0x000081a8},
-       {0x00009a70, 0x0000a380, 0x0000a380, 0x00008284, 0x00008284, 0x00008284},
-       {0x00009a74, 0x0000a384, 0x0000a384, 0x00008288, 0x00008288, 0x00008288},
-       {0x00009a78, 0x0000a388, 0x0000a388, 0x00008224, 0x00008224, 0x00008224},
-       {0x00009a7c, 0x0000a38c, 0x0000a38c, 0x00008290, 0x00008290, 0x00008290},
-       {0x00009a80, 0x0000a390, 0x0000a390, 0x00008300, 0x00008300, 0x00008300},
-       {0x00009a84, 0x0000a394, 0x0000a394, 0x00008304, 0x00008304, 0x00008304},
-       {0x00009a88, 0x0000a780, 0x0000a780, 0x00008308, 0x00008308, 0x00008308},
-       {0x00009a8c, 0x0000a784, 0x0000a784, 0x0000830c, 0x0000830c, 0x0000830c},
-       {0x00009a90, 0x0000a788, 0x0000a788, 0x00008380, 0x00008380, 0x00008380},
-       {0x00009a94, 0x0000a78c, 0x0000a78c, 0x00008384, 0x00008384, 0x00008384},
-       {0x00009a98, 0x0000a790, 0x0000a790, 0x00008700, 0x00008700, 0x00008700},
-       {0x00009a9c, 0x0000a794, 0x0000a794, 0x00008704, 0x00008704, 0x00008704},
-       {0x00009aa0, 0x0000ab84, 0x0000ab84, 0x00008708, 0x00008708, 0x00008708},
-       {0x00009aa4, 0x0000ab88, 0x0000ab88, 0x0000870c, 0x0000870c, 0x0000870c},
-       {0x00009aa8, 0x0000ab8c, 0x0000ab8c, 0x00008780, 0x00008780, 0x00008780},
-       {0x00009aac, 0x0000ab90, 0x0000ab90, 0x00008784, 0x00008784, 0x00008784},
-       {0x00009ab0, 0x0000ab94, 0x0000ab94, 0x00008b00, 0x00008b00, 0x00008b00},
-       {0x00009ab4, 0x0000af80, 0x0000af80, 0x00008b04, 0x00008b04, 0x00008b04},
-       {0x00009ab8, 0x0000af84, 0x0000af84, 0x00008b08, 0x00008b08, 0x00008b08},
-       {0x00009abc, 0x0000af88, 0x0000af88, 0x00008b0c, 0x00008b0c, 0x00008b0c},
-       {0x00009ac0, 0x0000af8c, 0x0000af8c, 0x00008b10, 0x00008b10, 0x00008b10},
-       {0x00009ac4, 0x0000af90, 0x0000af90, 0x00008b80, 0x00008b80, 0x00008b80},
-       {0x00009ac8, 0x0000af94, 0x0000af94, 0x00008b84, 0x00008b84, 0x00008b84},
-       {0x00009acc, 0x0000b380, 0x0000b380, 0x00008b88, 0x00008b88, 0x00008b88},
-       {0x00009ad0, 0x0000b384, 0x0000b384, 0x00008b8c, 0x00008b8c, 0x00008b8c},
-       {0x00009ad4, 0x0000b388, 0x0000b388, 0x00008b90, 0x00008b90, 0x00008b90},
-       {0x00009ad8, 0x0000b38c, 0x0000b38c, 0x00008b94, 0x00008b94, 0x00008b94},
-       {0x00009adc, 0x0000b390, 0x0000b390, 0x00008b98, 0x00008b98, 0x00008b98},
-       {0x00009ae0, 0x0000b394, 0x0000b394, 0x00008ba4, 0x00008ba4, 0x00008ba4},
-       {0x00009ae4, 0x0000b398, 0x0000b398, 0x00008ba8, 0x00008ba8, 0x00008ba8},
-       {0x00009ae8, 0x0000b780, 0x0000b780, 0x00008bac, 0x00008bac, 0x00008bac},
-       {0x00009aec, 0x0000b784, 0x0000b784, 0x00008bb0, 0x00008bb0, 0x00008bb0},
-       {0x00009af0, 0x0000b788, 0x0000b788, 0x00008bb4, 0x00008bb4, 0x00008bb4},
-       {0x00009af4, 0x0000b78c, 0x0000b78c, 0x00008ba1, 0x00008ba1, 0x00008ba1},
-       {0x00009af8, 0x0000b790, 0x0000b790, 0x00008ba5, 0x00008ba5, 0x00008ba5},
-       {0x00009afc, 0x0000b794, 0x0000b794, 0x00008ba9, 0x00008ba9, 0x00008ba9},
-       {0x00009b00, 0x0000b798, 0x0000b798, 0x00008bad, 0x00008bad, 0x00008bad},
-       {0x00009b04, 0x0000d784, 0x0000d784, 0x00008bb1, 0x00008bb1, 0x00008bb1},
-       {0x00009b08, 0x0000d788, 0x0000d788, 0x00008bb5, 0x00008bb5, 0x00008bb5},
-       {0x00009b0c, 0x0000d78c, 0x0000d78c, 0x00008ba2, 0x00008ba2, 0x00008ba2},
-       {0x00009b10, 0x0000d790, 0x0000d790, 0x00008ba6, 0x00008ba6, 0x00008ba6},
-       {0x00009b14, 0x0000f780, 0x0000f780, 0x00008baa, 0x00008baa, 0x00008baa},
-       {0x00009b18, 0x0000f784, 0x0000f784, 0x00008bae, 0x00008bae, 0x00008bae},
-       {0x00009b1c, 0x0000f788, 0x0000f788, 0x00008bb2, 0x00008bb2, 0x00008bb2},
-       {0x00009b20, 0x0000f78c, 0x0000f78c, 0x00008bb6, 0x00008bb6, 0x00008bb6},
-       {0x00009b24, 0x0000f790, 0x0000f790, 0x00008ba3, 0x00008ba3, 0x00008ba3},
-       {0x00009b28, 0x0000f794, 0x0000f794, 0x00008ba7, 0x00008ba7, 0x00008ba7},
-       {0x00009b2c, 0x0000f7a4, 0x0000f7a4, 0x00008bab, 0x00008bab, 0x00008bab},
-       {0x00009b30, 0x0000f7a8, 0x0000f7a8, 0x00008baf, 0x00008baf, 0x00008baf},
-       {0x00009b34, 0x0000f7ac, 0x0000f7ac, 0x00008bb3, 0x00008bb3, 0x00008bb3},
-       {0x00009b38, 0x0000f7b0, 0x0000f7b0, 0x00008bb7, 0x00008bb7, 0x00008bb7},
-       {0x00009b3c, 0x0000f7b4, 0x0000f7b4, 0x00008bc3, 0x00008bc3, 0x00008bc3},
-       {0x00009b40, 0x0000f7a1, 0x0000f7a1, 0x00008bc7, 0x00008bc7, 0x00008bc7},
-       {0x00009b44, 0x0000f7a5, 0x0000f7a5, 0x00008bcb, 0x00008bcb, 0x00008bcb},
-       {0x00009b48, 0x0000f7a9, 0x0000f7a9, 0x00008bcf, 0x00008bcf, 0x00008bcf},
-       {0x00009b4c, 0x0000f7ad, 0x0000f7ad, 0x00008bd3, 0x00008bd3, 0x00008bd3},
-       {0x00009b50, 0x0000f7b1, 0x0000f7b1, 0x00008bd7, 0x00008bd7, 0x00008bd7},
-       {0x00009b54, 0x0000f7b5, 0x0000f7b5, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009b58, 0x0000f7c5, 0x0000f7c5, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009b5c, 0x0000f7c9, 0x0000f7c9, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009b60, 0x0000f7cd, 0x0000f7cd, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009b64, 0x0000f7d1, 0x0000f7d1, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009b68, 0x0000f7d5, 0x0000f7d5, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009b6c, 0x0000f7c2, 0x0000f7c2, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009b70, 0x0000f7c6, 0x0000f7c6, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009b74, 0x0000f7ca, 0x0000f7ca, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009b78, 0x0000f7ce, 0x0000f7ce, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009b7c, 0x0000f7d2, 0x0000f7d2, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009b80, 0x0000f7d6, 0x0000f7d6, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009b84, 0x0000f7c3, 0x0000f7c3, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009b88, 0x0000f7c7, 0x0000f7c7, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009b8c, 0x0000f7cb, 0x0000f7cb, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009b90, 0x0000f7d3, 0x0000f7d3, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009b94, 0x0000f7d7, 0x0000f7d7, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009b98, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009b9c, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009ba0, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009ba4, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009ba8, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009bac, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009bb0, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009bb4, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009bb8, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009bbc, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009bc0, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009bc4, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009bc8, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009bcc, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009bd0, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009bd4, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009bd8, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009bdc, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009be0, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009be4, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009be8, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009bec, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009bf0, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009bf4, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009bf8, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009bfc, 0x0000f7db, 0x0000f7db, 0x00008bdb, 0x00008bdb, 0x00008bdb},
-       {0x00009848, 0x00001066, 0x00001066, 0x00001055, 0x00001055, 0x00001055},
-       {0x0000a848, 0x00001066, 0x00001066, 0x00001055, 0x00001055, 0x00001055},
-};
-
-static const u32 ar9280Modes_original_rxgain_9280_2[][6] = {
-       {0x00009a00, 0x00008184, 0x00008184, 0x00008000, 0x00008000, 0x00008000},
-       {0x00009a04, 0x00008188, 0x00008188, 0x00008000, 0x00008000, 0x00008000},
-       {0x00009a08, 0x0000818c, 0x0000818c, 0x00008000, 0x00008000, 0x00008000},
-       {0x00009a0c, 0x00008190, 0x00008190, 0x00008000, 0x00008000, 0x00008000},
-       {0x00009a10, 0x00008194, 0x00008194, 0x00008000, 0x00008000, 0x00008000},
-       {0x00009a14, 0x00008200, 0x00008200, 0x00008000, 0x00008000, 0x00008000},
-       {0x00009a18, 0x00008204, 0x00008204, 0x00008004, 0x00008004, 0x00008004},
-       {0x00009a1c, 0x00008208, 0x00008208, 0x00008008, 0x00008008, 0x00008008},
-       {0x00009a20, 0x0000820c, 0x0000820c, 0x0000800c, 0x0000800c, 0x0000800c},
-       {0x00009a24, 0x00008210, 0x00008210, 0x00008080, 0x00008080, 0x00008080},
-       {0x00009a28, 0x00008214, 0x00008214, 0x00008084, 0x00008084, 0x00008084},
-       {0x00009a2c, 0x00008280, 0x00008280, 0x00008088, 0x00008088, 0x00008088},
-       {0x00009a30, 0x00008284, 0x00008284, 0x0000808c, 0x0000808c, 0x0000808c},
-       {0x00009a34, 0x00008288, 0x00008288, 0x00008100, 0x00008100, 0x00008100},
-       {0x00009a38, 0x0000828c, 0x0000828c, 0x00008104, 0x00008104, 0x00008104},
-       {0x00009a3c, 0x00008290, 0x00008290, 0x00008108, 0x00008108, 0x00008108},
-       {0x00009a40, 0x00008300, 0x00008300, 0x0000810c, 0x0000810c, 0x0000810c},
-       {0x00009a44, 0x00008304, 0x00008304, 0x00008110, 0x00008110, 0x00008110},
-       {0x00009a48, 0x00008308, 0x00008308, 0x00008114, 0x00008114, 0x00008114},
-       {0x00009a4c, 0x0000830c, 0x0000830c, 0x00008180, 0x00008180, 0x00008180},
-       {0x00009a50, 0x00008310, 0x00008310, 0x00008184, 0x00008184, 0x00008184},
-       {0x00009a54, 0x00008314, 0x00008314, 0x00008188, 0x00008188, 0x00008188},
-       {0x00009a58, 0x00008380, 0x00008380, 0x0000818c, 0x0000818c, 0x0000818c},
-       {0x00009a5c, 0x00008384, 0x00008384, 0x00008190, 0x00008190, 0x00008190},
-       {0x00009a60, 0x00008388, 0x00008388, 0x00008194, 0x00008194, 0x00008194},
-       {0x00009a64, 0x0000838c, 0x0000838c, 0x000081a0, 0x000081a0, 0x000081a0},
-       {0x00009a68, 0x00008390, 0x00008390, 0x0000820c, 0x0000820c, 0x0000820c},
-       {0x00009a6c, 0x00008394, 0x00008394, 0x000081a8, 0x000081a8, 0x000081a8},
-       {0x00009a70, 0x0000a380, 0x0000a380, 0x00008284, 0x00008284, 0x00008284},
-       {0x00009a74, 0x0000a384, 0x0000a384, 0x00008288, 0x00008288, 0x00008288},
-       {0x00009a78, 0x0000a388, 0x0000a388, 0x00008224, 0x00008224, 0x00008224},
-       {0x00009a7c, 0x0000a38c, 0x0000a38c, 0x00008290, 0x00008290, 0x00008290},
-       {0x00009a80, 0x0000a390, 0x0000a390, 0x00008300, 0x00008300, 0x00008300},
-       {0x00009a84, 0x0000a394, 0x0000a394, 0x00008304, 0x00008304, 0x00008304},
-       {0x00009a88, 0x0000a780, 0x0000a780, 0x00008308, 0x00008308, 0x00008308},
-       {0x00009a8c, 0x0000a784, 0x0000a784, 0x0000830c, 0x0000830c, 0x0000830c},
-       {0x00009a90, 0x0000a788, 0x0000a788, 0x00008380, 0x00008380, 0x00008380},
-       {0x00009a94, 0x0000a78c, 0x0000a78c, 0x00008384, 0x00008384, 0x00008384},
-       {0x00009a98, 0x0000a790, 0x0000a790, 0x00008700, 0x00008700, 0x00008700},
-       {0x00009a9c, 0x0000a794, 0x0000a794, 0x00008704, 0x00008704, 0x00008704},
-       {0x00009aa0, 0x0000ab84, 0x0000ab84, 0x00008708, 0x00008708, 0x00008708},
-       {0x00009aa4, 0x0000ab88, 0x0000ab88, 0x0000870c, 0x0000870c, 0x0000870c},
-       {0x00009aa8, 0x0000ab8c, 0x0000ab8c, 0x00008780, 0x00008780, 0x00008780},
-       {0x00009aac, 0x0000ab90, 0x0000ab90, 0x00008784, 0x00008784, 0x00008784},
-       {0x00009ab0, 0x0000ab94, 0x0000ab94, 0x00008b00, 0x00008b00, 0x00008b00},
-       {0x00009ab4, 0x0000af80, 0x0000af80, 0x00008b04, 0x00008b04, 0x00008b04},
-       {0x00009ab8, 0x0000af84, 0x0000af84, 0x00008b08, 0x00008b08, 0x00008b08},
-       {0x00009abc, 0x0000af88, 0x0000af88, 0x00008b0c, 0x00008b0c, 0x00008b0c},
-       {0x00009ac0, 0x0000af8c, 0x0000af8c, 0x00008b80, 0x00008b80, 0x00008b80},
-       {0x00009ac4, 0x0000af90, 0x0000af90, 0x00008b84, 0x00008b84, 0x00008b84},
-       {0x00009ac8, 0x0000af94, 0x0000af94, 0x00008b88, 0x00008b88, 0x00008b88},
-       {0x00009acc, 0x0000b380, 0x0000b380, 0x00008b8c, 0x00008b8c, 0x00008b8c},
-       {0x00009ad0, 0x0000b384, 0x0000b384, 0x00008b90, 0x00008b90, 0x00008b90},
-       {0x00009ad4, 0x0000b388, 0x0000b388, 0x00008f80, 0x00008f80, 0x00008f80},
-       {0x00009ad8, 0x0000b38c, 0x0000b38c, 0x00008f84, 0x00008f84, 0x00008f84},
-       {0x00009adc, 0x0000b390, 0x0000b390, 0x00008f88, 0x00008f88, 0x00008f88},
-       {0x00009ae0, 0x0000b394, 0x0000b394, 0x00008f8c, 0x00008f8c, 0x00008f8c},
-       {0x00009ae4, 0x0000b398, 0x0000b398, 0x00008f90, 0x00008f90, 0x00008f90},
-       {0x00009ae8, 0x0000b780, 0x0000b780, 0x0000930c, 0x0000930c, 0x0000930c},
-       {0x00009aec, 0x0000b784, 0x0000b784, 0x00009310, 0x00009310, 0x00009310},
-       {0x00009af0, 0x0000b788, 0x0000b788, 0x00009384, 0x00009384, 0x00009384},
-       {0x00009af4, 0x0000b78c, 0x0000b78c, 0x00009388, 0x00009388, 0x00009388},
-       {0x00009af8, 0x0000b790, 0x0000b790, 0x00009324, 0x00009324, 0x00009324},
-       {0x00009afc, 0x0000b794, 0x0000b794, 0x00009704, 0x00009704, 0x00009704},
-       {0x00009b00, 0x0000b798, 0x0000b798, 0x000096a4, 0x000096a4, 0x000096a4},
-       {0x00009b04, 0x0000d784, 0x0000d784, 0x000096a8, 0x000096a8, 0x000096a8},
-       {0x00009b08, 0x0000d788, 0x0000d788, 0x00009710, 0x00009710, 0x00009710},
-       {0x00009b0c, 0x0000d78c, 0x0000d78c, 0x00009714, 0x00009714, 0x00009714},
-       {0x00009b10, 0x0000d790, 0x0000d790, 0x00009720, 0x00009720, 0x00009720},
-       {0x00009b14, 0x0000f780, 0x0000f780, 0x00009724, 0x00009724, 0x00009724},
-       {0x00009b18, 0x0000f784, 0x0000f784, 0x00009728, 0x00009728, 0x00009728},
-       {0x00009b1c, 0x0000f788, 0x0000f788, 0x0000972c, 0x0000972c, 0x0000972c},
-       {0x00009b20, 0x0000f78c, 0x0000f78c, 0x000097a0, 0x000097a0, 0x000097a0},
-       {0x00009b24, 0x0000f790, 0x0000f790, 0x000097a4, 0x000097a4, 0x000097a4},
-       {0x00009b28, 0x0000f794, 0x0000f794, 0x000097a8, 0x000097a8, 0x000097a8},
-       {0x00009b2c, 0x0000f7a4, 0x0000f7a4, 0x000097b0, 0x000097b0, 0x000097b0},
-       {0x00009b30, 0x0000f7a8, 0x0000f7a8, 0x000097b4, 0x000097b4, 0x000097b4},
-       {0x00009b34, 0x0000f7ac, 0x0000f7ac, 0x000097b8, 0x000097b8, 0x000097b8},
-       {0x00009b38, 0x0000f7b0, 0x0000f7b0, 0x000097a5, 0x000097a5, 0x000097a5},
-       {0x00009b3c, 0x0000f7b4, 0x0000f7b4, 0x000097a9, 0x000097a9, 0x000097a9},
-       {0x00009b40, 0x0000f7a1, 0x0000f7a1, 0x000097ad, 0x000097ad, 0x000097ad},
-       {0x00009b44, 0x0000f7a5, 0x0000f7a5, 0x000097b1, 0x000097b1, 0x000097b1},
-       {0x00009b48, 0x0000f7a9, 0x0000f7a9, 0x000097b5, 0x000097b5, 0x000097b5},
-       {0x00009b4c, 0x0000f7ad, 0x0000f7ad, 0x000097b9, 0x000097b9, 0x000097b9},
-       {0x00009b50, 0x0000f7b1, 0x0000f7b1, 0x000097c5, 0x000097c5, 0x000097c5},
-       {0x00009b54, 0x0000f7b5, 0x0000f7b5, 0x000097c9, 0x000097c9, 0x000097c9},
-       {0x00009b58, 0x0000f7c5, 0x0000f7c5, 0x000097d1, 0x000097d1, 0x000097d1},
-       {0x00009b5c, 0x0000f7c9, 0x0000f7c9, 0x000097d5, 0x000097d5, 0x000097d5},
-       {0x00009b60, 0x0000f7cd, 0x0000f7cd, 0x000097d9, 0x000097d9, 0x000097d9},
-       {0x00009b64, 0x0000f7d1, 0x0000f7d1, 0x000097c6, 0x000097c6, 0x000097c6},
-       {0x00009b68, 0x0000f7d5, 0x0000f7d5, 0x000097ca, 0x000097ca, 0x000097ca},
-       {0x00009b6c, 0x0000f7c2, 0x0000f7c2, 0x000097ce, 0x000097ce, 0x000097ce},
-       {0x00009b70, 0x0000f7c6, 0x0000f7c6, 0x000097d2, 0x000097d2, 0x000097d2},
-       {0x00009b74, 0x0000f7ca, 0x0000f7ca, 0x000097d6, 0x000097d6, 0x000097d6},
-       {0x00009b78, 0x0000f7ce, 0x0000f7ce, 0x000097c3, 0x000097c3, 0x000097c3},
-       {0x00009b7c, 0x0000f7d2, 0x0000f7d2, 0x000097c7, 0x000097c7, 0x000097c7},
-       {0x00009b80, 0x0000f7d6, 0x0000f7d6, 0x000097cb, 0x000097cb, 0x000097cb},
-       {0x00009b84, 0x0000f7c3, 0x0000f7c3, 0x000097cf, 0x000097cf, 0x000097cf},
-       {0x00009b88, 0x0000f7c7, 0x0000f7c7, 0x000097d7, 0x000097d7, 0x000097d7},
-       {0x00009b8c, 0x0000f7cb, 0x0000f7cb, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009b90, 0x0000f7d3, 0x0000f7d3, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009b94, 0x0000f7d7, 0x0000f7d7, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009b98, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009b9c, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009ba0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009ba4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009ba8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009bac, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009bb0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009bb4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009bb8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009bbc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009bc0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009bc4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009bc8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009bcc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009bd0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009bd4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009bd8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009bdc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009be0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009be4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009be8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009bec, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009bf0, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009bf4, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009bf8, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009bfc, 0x0000f7db, 0x0000f7db, 0x000097db, 0x000097db, 0x000097db},
-       {0x00009848, 0x00001066, 0x00001066, 0x00001063, 0x00001063, 0x00001063},
-       {0x0000a848, 0x00001066, 0x00001066, 0x00001063, 0x00001063, 0x00001063},
-};
-
-static const u32 ar9280Modes_backoff_13db_rxgain_9280_2[][6] = {
-       {0x00009a00, 0x00008184, 0x00008184, 0x00000290, 0x00000290, 0x00000290},
-       {0x00009a04, 0x00008188, 0x00008188, 0x00000300, 0x00000300, 0x00000300},
-       {0x00009a08, 0x0000818c, 0x0000818c, 0x00000304, 0x00000304, 0x00000304},
-       {0x00009a0c, 0x00008190, 0x00008190, 0x00000308, 0x00000308, 0x00000308},
-       {0x00009a10, 0x00008194, 0x00008194, 0x0000030c, 0x0000030c, 0x0000030c},
-       {0x00009a14, 0x00008200, 0x00008200, 0x00008000, 0x00008000, 0x00008000},
-       {0x00009a18, 0x00008204, 0x00008204, 0x00008004, 0x00008004, 0x00008004},
-       {0x00009a1c, 0x00008208, 0x00008208, 0x00008008, 0x00008008, 0x00008008},
-       {0x00009a20, 0x0000820c, 0x0000820c, 0x0000800c, 0x0000800c, 0x0000800c},
-       {0x00009a24, 0x00008210, 0x00008210, 0x00008080, 0x00008080, 0x00008080},
-       {0x00009a28, 0x00008214, 0x00008214, 0x00008084, 0x00008084, 0x00008084},
-       {0x00009a2c, 0x00008280, 0x00008280, 0x00008088, 0x00008088, 0x00008088},
-       {0x00009a30, 0x00008284, 0x00008284, 0x0000808c, 0x0000808c, 0x0000808c},
-       {0x00009a34, 0x00008288, 0x00008288, 0x00008100, 0x00008100, 0x00008100},
-       {0x00009a38, 0x0000828c, 0x0000828c, 0x00008104, 0x00008104, 0x00008104},
-       {0x00009a3c, 0x00008290, 0x00008290, 0x00008108, 0x00008108, 0x00008108},
-       {0x00009a40, 0x00008300, 0x00008300, 0x0000810c, 0x0000810c, 0x0000810c},
-       {0x00009a44, 0x00008304, 0x00008304, 0x00008110, 0x00008110, 0x00008110},
-       {0x00009a48, 0x00008308, 0x00008308, 0x00008114, 0x00008114, 0x00008114},
-       {0x00009a4c, 0x0000830c, 0x0000830c, 0x00008180, 0x00008180, 0x00008180},
-       {0x00009a50, 0x00008310, 0x00008310, 0x00008184, 0x00008184, 0x00008184},
-       {0x00009a54, 0x00008314, 0x00008314, 0x00008188, 0x00008188, 0x00008188},
-       {0x00009a58, 0x00008380, 0x00008380, 0x0000818c, 0x0000818c, 0x0000818c},
-       {0x00009a5c, 0x00008384, 0x00008384, 0x00008190, 0x00008190, 0x00008190},
-       {0x00009a60, 0x00008388, 0x00008388, 0x00008194, 0x00008194, 0x00008194},
-       {0x00009a64, 0x0000838c, 0x0000838c, 0x000081a0, 0x000081a0, 0x000081a0},
-       {0x00009a68, 0x00008390, 0x00008390, 0x0000820c, 0x0000820c, 0x0000820c},
-       {0x00009a6c, 0x00008394, 0x00008394, 0x000081a8, 0x000081a8, 0x000081a8},
-       {0x00009a70, 0x0000a380, 0x0000a380, 0x00008284, 0x00008284, 0x00008284},
-       {0x00009a74, 0x0000a384, 0x0000a384, 0x00008288, 0x00008288, 0x00008288},
-       {0x00009a78, 0x0000a388, 0x0000a388, 0x00008224, 0x00008224, 0x00008224},
-       {0x00009a7c, 0x0000a38c, 0x0000a38c, 0x00008290, 0x00008290, 0x00008290},
-       {0x00009a80, 0x0000a390, 0x0000a390, 0x00008300, 0x00008300, 0x00008300},
-       {0x00009a84, 0x0000a394, 0x0000a394, 0x00008304, 0x00008304, 0x00008304},
-       {0x00009a88, 0x0000a780, 0x0000a780, 0x00008308, 0x00008308, 0x00008308},
-       {0x00009a8c, 0x0000a784, 0x0000a784, 0x0000830c, 0x0000830c, 0x0000830c},
-       {0x00009a90, 0x0000a788, 0x0000a788, 0x00008380, 0x00008380, 0x00008380},
-       {0x00009a94, 0x0000a78c, 0x0000a78c, 0x00008384, 0x00008384, 0x00008384},
-       {0x00009a98, 0x0000a790, 0x0000a790, 0x00008700, 0x00008700, 0x00008700},
-       {0x00009a9c, 0x0000a794, 0x0000a794, 0x00008704, 0x00008704, 0x00008704},
-       {0x00009aa0, 0x0000ab84, 0x0000ab84, 0x00008708, 0x00008708, 0x00008708},
-       {0x00009aa4, 0x0000ab88, 0x0000ab88, 0x0000870c, 0x0000870c, 0x0000870c},
-       {0x00009aa8, 0x0000ab8c, 0x0000ab8c, 0x00008780, 0x00008780, 0x00008780},
-       {0x00009aac, 0x0000ab90, 0x0000ab90, 0x00008784, 0x00008784, 0x00008784},
-       {0x00009ab0, 0x0000ab94, 0x0000ab94, 0x00008b00, 0x00008b00, 0x00008b00},
-       {0x00009ab4, 0x0000af80, 0x0000af80, 0x00008b04, 0x00008b04, 0x00008b04},
-       {0x00009ab8, 0x0000af84, 0x0000af84, 0x00008b08, 0x00008b08, 0x00008b08},
-       {0x00009abc, 0x0000af88, 0x0000af88, 0x00008b0c, 0x00008b0c, 0x00008b0c},
-       {0x00009ac0, 0x0000af8c, 0x0000af8c, 0x00008b80, 0x00008b80, 0x00008b80},
-       {0x00009ac4, 0x0000af90, 0x0000af90, 0x00008b84, 0x00008b84, 0x00008b84},
-       {0x00009ac8, 0x0000af94, 0x0000af94, 0x00008b88, 0x00008b88, 0x00008b88},
-       {0x00009acc, 0x0000b380, 0x0000b380, 0x00008b8c, 0x00008b8c, 0x00008b8c},
-       {0x00009ad0, 0x0000b384, 0x0000b384, 0x00008b90, 0x00008b90, 0x00008b90},
-       {0x00009ad4, 0x0000b388, 0x0000b388, 0x00008f80, 0x00008f80, 0x00008f80},
-       {0x00009ad8, 0x0000b38c, 0x0000b38c, 0x00008f84, 0x00008f84, 0x00008f84},
-       {0x00009adc, 0x0000b390, 0x0000b390, 0x00008f88, 0x00008f88, 0x00008f88},
-       {0x00009ae0, 0x0000b394, 0x0000b394, 0x00008f8c, 0x00008f8c, 0x00008f8c},
-       {0x00009ae4, 0x0000b398, 0x0000b398, 0x00008f90, 0x00008f90, 0x00008f90},
-       {0x00009ae8, 0x0000b780, 0x0000b780, 0x00009310, 0x00009310, 0x00009310},
-       {0x00009aec, 0x0000b784, 0x0000b784, 0x00009314, 0x00009314, 0x00009314},
-       {0x00009af0, 0x0000b788, 0x0000b788, 0x00009320, 0x00009320, 0x00009320},
-       {0x00009af4, 0x0000b78c, 0x0000b78c, 0x00009324, 0x00009324, 0x00009324},
-       {0x00009af8, 0x0000b790, 0x0000b790, 0x00009328, 0x00009328, 0x00009328},
-       {0x00009afc, 0x0000b794, 0x0000b794, 0x0000932c, 0x0000932c, 0x0000932c},
-       {0x00009b00, 0x0000b798, 0x0000b798, 0x00009330, 0x00009330, 0x00009330},
-       {0x00009b04, 0x0000d784, 0x0000d784, 0x00009334, 0x00009334, 0x00009334},
-       {0x00009b08, 0x0000d788, 0x0000d788, 0x00009321, 0x00009321, 0x00009321},
-       {0x00009b0c, 0x0000d78c, 0x0000d78c, 0x00009325, 0x00009325, 0x00009325},
-       {0x00009b10, 0x0000d790, 0x0000d790, 0x00009329, 0x00009329, 0x00009329},
-       {0x00009b14, 0x0000f780, 0x0000f780, 0x0000932d, 0x0000932d, 0x0000932d},
-       {0x00009b18, 0x0000f784, 0x0000f784, 0x00009331, 0x00009331, 0x00009331},
-       {0x00009b1c, 0x0000f788, 0x0000f788, 0x00009335, 0x00009335, 0x00009335},
-       {0x00009b20, 0x0000f78c, 0x0000f78c, 0x00009322, 0x00009322, 0x00009322},
-       {0x00009b24, 0x0000f790, 0x0000f790, 0x00009326, 0x00009326, 0x00009326},
-       {0x00009b28, 0x0000f794, 0x0000f794, 0x0000932a, 0x0000932a, 0x0000932a},
-       {0x00009b2c, 0x0000f7a4, 0x0000f7a4, 0x0000932e, 0x0000932e, 0x0000932e},
-       {0x00009b30, 0x0000f7a8, 0x0000f7a8, 0x00009332, 0x00009332, 0x00009332},
-       {0x00009b34, 0x0000f7ac, 0x0000f7ac, 0x00009336, 0x00009336, 0x00009336},
-       {0x00009b38, 0x0000f7b0, 0x0000f7b0, 0x00009323, 0x00009323, 0x00009323},
-       {0x00009b3c, 0x0000f7b4, 0x0000f7b4, 0x00009327, 0x00009327, 0x00009327},
-       {0x00009b40, 0x0000f7a1, 0x0000f7a1, 0x0000932b, 0x0000932b, 0x0000932b},
-       {0x00009b44, 0x0000f7a5, 0x0000f7a5, 0x0000932f, 0x0000932f, 0x0000932f},
-       {0x00009b48, 0x0000f7a9, 0x0000f7a9, 0x00009333, 0x00009333, 0x00009333},
-       {0x00009b4c, 0x0000f7ad, 0x0000f7ad, 0x00009337, 0x00009337, 0x00009337},
-       {0x00009b50, 0x0000f7b1, 0x0000f7b1, 0x00009343, 0x00009343, 0x00009343},
-       {0x00009b54, 0x0000f7b5, 0x0000f7b5, 0x00009347, 0x00009347, 0x00009347},
-       {0x00009b58, 0x0000f7c5, 0x0000f7c5, 0x0000934b, 0x0000934b, 0x0000934b},
-       {0x00009b5c, 0x0000f7c9, 0x0000f7c9, 0x0000934f, 0x0000934f, 0x0000934f},
-       {0x00009b60, 0x0000f7cd, 0x0000f7cd, 0x00009353, 0x00009353, 0x00009353},
-       {0x00009b64, 0x0000f7d1, 0x0000f7d1, 0x00009357, 0x00009357, 0x00009357},
-       {0x00009b68, 0x0000f7d5, 0x0000f7d5, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009b6c, 0x0000f7c2, 0x0000f7c2, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009b70, 0x0000f7c6, 0x0000f7c6, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009b74, 0x0000f7ca, 0x0000f7ca, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009b78, 0x0000f7ce, 0x0000f7ce, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009b7c, 0x0000f7d2, 0x0000f7d2, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009b80, 0x0000f7d6, 0x0000f7d6, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009b84, 0x0000f7c3, 0x0000f7c3, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009b88, 0x0000f7c7, 0x0000f7c7, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009b8c, 0x0000f7cb, 0x0000f7cb, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009b90, 0x0000f7d3, 0x0000f7d3, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009b94, 0x0000f7d7, 0x0000f7d7, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009b98, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009b9c, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009ba0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009ba4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009ba8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009bac, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009bb0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009bb4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009bb8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009bbc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009bc0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009bc4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009bc8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009bcc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009bd0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009bd4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009bd8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009bdc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009be0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009be4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009be8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009bec, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009bf0, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009bf4, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009bf8, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009bfc, 0x0000f7db, 0x0000f7db, 0x0000935b, 0x0000935b, 0x0000935b},
-       {0x00009848, 0x00001066, 0x00001066, 0x0000105a, 0x0000105a, 0x0000105a},
-       {0x0000a848, 0x00001066, 0x00001066, 0x0000105a, 0x0000105a, 0x0000105a},
-};
-
-static const u32 ar9280Modes_high_power_tx_gain_9280_2[][6] = {
-       {0x0000a274, 0x0a19e652, 0x0a19e652, 0x0a1aa652, 0x0a1aa652, 0x0a1aa652},
-       {0x0000a27c, 0x050739ce, 0x050739ce, 0x050739ce, 0x050739ce, 0x050739ce},
-       {0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a304, 0x00003002, 0x00003002, 0x00004002, 0x00004002, 0x00004002},
-       {0x0000a308, 0x00006004, 0x00006004, 0x00007008, 0x00007008, 0x00007008},
-       {0x0000a30c, 0x0000a006, 0x0000a006, 0x0000c010, 0x0000c010, 0x0000c010},
-       {0x0000a310, 0x0000e012, 0x0000e012, 0x00010012, 0x00010012, 0x00010012},
-       {0x0000a314, 0x00011014, 0x00011014, 0x00013014, 0x00013014, 0x00013014},
-       {0x0000a318, 0x0001504a, 0x0001504a, 0x0001820a, 0x0001820a, 0x0001820a},
-       {0x0000a31c, 0x0001904c, 0x0001904c, 0x0001b211, 0x0001b211, 0x0001b211},
-       {0x0000a320, 0x0001c04e, 0x0001c04e, 0x0001e213, 0x0001e213, 0x0001e213},
-       {0x0000a324, 0x00021092, 0x00021092, 0x00022411, 0x00022411, 0x00022411},
-       {0x0000a328, 0x0002510a, 0x0002510a, 0x00025413, 0x00025413, 0x00025413},
-       {0x0000a32c, 0x0002910c, 0x0002910c, 0x00029811, 0x00029811, 0x00029811},
-       {0x0000a330, 0x0002c18b, 0x0002c18b, 0x0002c813, 0x0002c813, 0x0002c813},
-       {0x0000a334, 0x0002f1cc, 0x0002f1cc, 0x00030a14, 0x00030a14, 0x00030a14},
-       {0x0000a338, 0x000321eb, 0x000321eb, 0x00035a50, 0x00035a50, 0x00035a50},
-       {0x0000a33c, 0x000341ec, 0x000341ec, 0x00039c4c, 0x00039c4c, 0x00039c4c},
-       {0x0000a340, 0x000341ec, 0x000341ec, 0x0003de8a, 0x0003de8a, 0x0003de8a},
-       {0x0000a344, 0x000341ec, 0x000341ec, 0x00042e92, 0x00042e92, 0x00042e92},
-       {0x0000a348, 0x000341ec, 0x000341ec, 0x00046ed2, 0x00046ed2, 0x00046ed2},
-       {0x0000a34c, 0x000341ec, 0x000341ec, 0x0004bed5, 0x0004bed5, 0x0004bed5},
-       {0x0000a350, 0x000341ec, 0x000341ec, 0x0004ff54, 0x0004ff54, 0x0004ff54},
-       {0x0000a354, 0x000341ec, 0x000341ec, 0x00055fd5, 0x00055fd5, 0x00055fd5},
-       {0x0000a3ec, 0x00f70081, 0x00f70081, 0x00f70081, 0x00f70081, 0x00f70081},
-       {0x00007814, 0x00198eff, 0x00198eff, 0x00198eff, 0x00198eff, 0x00198eff},
-       {0x00007838, 0x00198eff, 0x00198eff, 0x00198eff, 0x00198eff, 0x00198eff},
-       {0x0000781c, 0x00172000, 0x00172000, 0x00172000, 0x00172000, 0x00172000},
-       {0x00007840, 0x00172000, 0x00172000, 0x00172000, 0x00172000, 0x00172000},
-       {0x00007820, 0xf258a480, 0xf258a480, 0xf258a480, 0xf258a480, 0xf258a480},
-       {0x00007844, 0xf258a480, 0xf258a480, 0xf258a480, 0xf258a480, 0xf258a480},
-};
-
-static const u32 ar9280Modes_original_tx_gain_9280_2[][6] = {
-       {0x0000a274, 0x0a19c652, 0x0a19c652, 0x0a1aa652, 0x0a1aa652, 0x0a1aa652},
-       {0x0000a27c, 0x050701ce, 0x050701ce, 0x050701ce, 0x050701ce, 0x050701ce},
-       {0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a304, 0x00003002, 0x00003002, 0x00003002, 0x00003002, 0x00003002},
-       {0x0000a308, 0x00006004, 0x00006004, 0x00008009, 0x00008009, 0x00008009},
-       {0x0000a30c, 0x0000a006, 0x0000a006, 0x0000b00b, 0x0000b00b, 0x0000b00b},
-       {0x0000a310, 0x0000e012, 0x0000e012, 0x0000e012, 0x0000e012, 0x0000e012},
-       {0x0000a314, 0x00011014, 0x00011014, 0x00012048, 0x00012048, 0x00012048},
-       {0x0000a318, 0x0001504a, 0x0001504a, 0x0001604a, 0x0001604a, 0x0001604a},
-       {0x0000a31c, 0x0001904c, 0x0001904c, 0x0001a211, 0x0001a211, 0x0001a211},
-       {0x0000a320, 0x0001c04e, 0x0001c04e, 0x0001e213, 0x0001e213, 0x0001e213},
-       {0x0000a324, 0x00020092, 0x00020092, 0x0002121b, 0x0002121b, 0x0002121b},
-       {0x0000a328, 0x0002410a, 0x0002410a, 0x00024412, 0x00024412, 0x00024412},
-       {0x0000a32c, 0x0002710c, 0x0002710c, 0x00028414, 0x00028414, 0x00028414},
-       {0x0000a330, 0x0002b18b, 0x0002b18b, 0x0002b44a, 0x0002b44a, 0x0002b44a},
-       {0x0000a334, 0x0002e1cc, 0x0002e1cc, 0x00030649, 0x00030649, 0x00030649},
-       {0x0000a338, 0x000321ec, 0x000321ec, 0x0003364b, 0x0003364b, 0x0003364b},
-       {0x0000a33c, 0x000321ec, 0x000321ec, 0x00038a49, 0x00038a49, 0x00038a49},
-       {0x0000a340, 0x000321ec, 0x000321ec, 0x0003be48, 0x0003be48, 0x0003be48},
-       {0x0000a344, 0x000321ec, 0x000321ec, 0x0003ee4a, 0x0003ee4a, 0x0003ee4a},
-       {0x0000a348, 0x000321ec, 0x000321ec, 0x00042e88, 0x00042e88, 0x00042e88},
-       {0x0000a34c, 0x000321ec, 0x000321ec, 0x00046e8a, 0x00046e8a, 0x00046e8a},
-       {0x0000a350, 0x000321ec, 0x000321ec, 0x00049ec9, 0x00049ec9, 0x00049ec9},
-       {0x0000a354, 0x000321ec, 0x000321ec, 0x0004bf42, 0x0004bf42, 0x0004bf42},
-       {0x0000a3ec, 0x00f70081, 0x00f70081, 0x00f70081, 0x00f70081, 0x00f70081},
-       {0x00007814, 0x0019beff, 0x0019beff, 0x0019beff, 0x0019beff, 0x0019beff},
-       {0x00007838, 0x0019beff, 0x0019beff, 0x0019beff, 0x0019beff, 0x0019beff},
-       {0x0000781c, 0x00392000, 0x00392000, 0x00392000, 0x00392000, 0x00392000},
-       {0x00007840, 0x00392000, 0x00392000, 0x00392000, 0x00392000, 0x00392000},
-       {0x00007820, 0x92592480, 0x92592480, 0x92592480, 0x92592480, 0x92592480},
-       {0x00007844, 0x92592480, 0x92592480, 0x92592480, 0x92592480, 0x92592480},
-};
-
-static const u32 ar9280PciePhy_clkreq_off_L1_9280[][2] = {
-       /* Addr      allmodes  */
-       {0x00004040, 0x9248fd00},
-       {0x00004040, 0x24924924},
-       {0x00004040, 0xa8000019},
-       {0x00004040, 0x13160820},
-       {0x00004040, 0xe5980560},
-       {0x00004040, 0xc01dcffc},
-       {0x00004040, 0x1aaabe41},
-       {0x00004040, 0xbe105554},
-       {0x00004040, 0x00043007},
-       {0x00004044, 0x00000000},
-};
-
-static const u32 ar9280PciePhy_clkreq_always_on_L1_9280[][2] = {
-       /* Addr      allmodes  */
-       {0x00004040, 0x9248fd00},
-       {0x00004040, 0x24924924},
-       {0x00004040, 0xa8000019},
-       {0x00004040, 0x13160820},
-       {0x00004040, 0xe5980560},
-       {0x00004040, 0xc01dcffd},
-       {0x00004040, 0x1aaabe41},
-       {0x00004040, 0xbe105554},
-       {0x00004040, 0x00043007},
-       {0x00004044, 0x00000000},
-};
-
-static const u32 ar9285PciePhy_clkreq_always_on_L1_9285[][2] = {
-       /* Addr      allmodes  */
-       {0x00004040, 0x9248fd00},
-       {0x00004040, 0x24924924},
-       {0x00004040, 0xa8000019},
-       {0x00004040, 0x13160820},
-       {0x00004040, 0xe5980560},
-       {0x00004040, 0xc01dcffd},
-       {0x00004040, 0x1aaabe41},
-       {0x00004040, 0xbe105554},
-       {0x00004040, 0x00043007},
-       {0x00004044, 0x00000000},
-};
-
-static const u32 ar9285PciePhy_clkreq_off_L1_9285[][2] = {
-       /* Addr      allmodes  */
-       {0x00004040, 0x9248fd00},
-       {0x00004040, 0x24924924},
-       {0x00004040, 0xa8000019},
-       {0x00004040, 0x13160820},
-       {0x00004040, 0xe5980560},
-       {0x00004040, 0xc01dcffc},
-       {0x00004040, 0x1aaabe41},
-       {0x00004040, 0xbe105554},
-       {0x00004040, 0x00043007},
-       {0x00004044, 0x00000000},
-};
-
-static const u32 ar9285Modes_9285_1_2[][6] = {
-       {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0},
-       {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0},
-       {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180},
-       {0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008},
-       {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0},
-       {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b, 0x0988004f},
-       {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440, 0x00006880},
-       {0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303},
-       {0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200},
-       {0x00009824, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e},
-       {0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001},
-       {0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e},
-       {0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007},
-       {0x00009840, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e},
-       {0x00009844, 0x0372161e, 0x0372161e, 0x03721620, 0x03721620, 0x037216a0},
-       {0x00009848, 0x00001066, 0x00001066, 0x00001053, 0x00001053, 0x00001059},
-       {0x0000a848, 0x00001066, 0x00001066, 0x00001053, 0x00001053, 0x00001059},
-       {0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2},
-       {0x00009858, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e},
-       {0x0000985c, 0x3139605e, 0x3139605e, 0x3137605e, 0x3137605e, 0x3139605e},
-       {0x00009860, 0x00058d18, 0x00058d18, 0x00058d20, 0x00058d20, 0x00058d18},
-       {0x00009864, 0x0000fe00, 0x0000fe00, 0x0001ce00, 0x0001ce00, 0x0001ce00},
-       {0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0},
-       {0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881, 0x06903881},
-       {0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0},
-       {0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016},
-       {0x00009924, 0xd00a8007, 0xd00a8007, 0xd00a800d, 0xd00a800d, 0xd00a800d},
-       {0x00009944, 0xffbc1010, 0xffbc1010, 0xffbc1020, 0xffbc1020, 0xffbc1010},
-       {0x00009960, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00009964, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x000099b8, 0x0000421c, 0x0000421c, 0x0000421c, 0x0000421c, 0x0000421c},
-       {0x000099bc, 0x00000600, 0x00000600, 0x00000c00, 0x00000c00, 0x00000c00},
-       {0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4},
-       {0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77},
-       {0x000099c8, 0x6af6532f, 0x6af6532f, 0x6af6532f, 0x6af6532f, 0x6af6532f},
-       {0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8},
-       {0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384},
-       {0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00009a00, 0x00000000, 0x00000000, 0x00058084, 0x00058084, 0x00000000},
-       {0x00009a04, 0x00000000, 0x00000000, 0x00058088, 0x00058088, 0x00000000},
-       {0x00009a08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c, 0x00000000},
-       {0x00009a0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100, 0x00000000},
-       {0x00009a10, 0x00000000, 0x00000000, 0x00058104, 0x00058104, 0x00000000},
-       {0x00009a14, 0x00000000, 0x00000000, 0x00058108, 0x00058108, 0x00000000},
-       {0x00009a18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c, 0x00000000},
-       {0x00009a1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110, 0x00000000},
-       {0x00009a20, 0x00000000, 0x00000000, 0x00058114, 0x00058114, 0x00000000},
-       {0x00009a24, 0x00000000, 0x00000000, 0x00058180, 0x00058180, 0x00000000},
-       {0x00009a28, 0x00000000, 0x00000000, 0x00058184, 0x00058184, 0x00000000},
-       {0x00009a2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188, 0x00000000},
-       {0x00009a30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c, 0x00000000},
-       {0x00009a34, 0x00000000, 0x00000000, 0x00058190, 0x00058190, 0x00000000},
-       {0x00009a38, 0x00000000, 0x00000000, 0x00058194, 0x00058194, 0x00000000},
-       {0x00009a3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0, 0x00000000},
-       {0x00009a40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c, 0x00000000},
-       {0x00009a44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8, 0x00000000},
-       {0x00009a48, 0x00000000, 0x00000000, 0x00058284, 0x00058284, 0x00000000},
-       {0x00009a4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288, 0x00000000},
-       {0x00009a50, 0x00000000, 0x00000000, 0x00058224, 0x00058224, 0x00000000},
-       {0x00009a54, 0x00000000, 0x00000000, 0x00058290, 0x00058290, 0x00000000},
-       {0x00009a58, 0x00000000, 0x00000000, 0x00058300, 0x00058300, 0x00000000},
-       {0x00009a5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304, 0x00000000},
-       {0x00009a60, 0x00000000, 0x00000000, 0x00058308, 0x00058308, 0x00000000},
-       {0x00009a64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c, 0x00000000},
-       {0x00009a68, 0x00000000, 0x00000000, 0x00058380, 0x00058380, 0x00000000},
-       {0x00009a6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384, 0x00000000},
-       {0x00009a70, 0x00000000, 0x00000000, 0x00068700, 0x00068700, 0x00000000},
-       {0x00009a74, 0x00000000, 0x00000000, 0x00068704, 0x00068704, 0x00000000},
-       {0x00009a78, 0x00000000, 0x00000000, 0x00068708, 0x00068708, 0x00000000},
-       {0x00009a7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c, 0x00000000},
-       {0x00009a80, 0x00000000, 0x00000000, 0x00068780, 0x00068780, 0x00000000},
-       {0x00009a84, 0x00000000, 0x00000000, 0x00068784, 0x00068784, 0x00000000},
-       {0x00009a88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00, 0x00000000},
-       {0x00009a8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04, 0x00000000},
-       {0x00009a90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08, 0x00000000},
-       {0x00009a94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c, 0x00000000},
-       {0x00009a98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80, 0x00000000},
-       {0x00009a9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84, 0x00000000},
-       {0x00009aa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88, 0x00000000},
-       {0x00009aa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c, 0x00000000},
-       {0x00009aa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90, 0x00000000},
-       {0x00009aac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80, 0x00000000},
-       {0x00009ab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84, 0x00000000},
-       {0x00009ab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88, 0x00000000},
-       {0x00009ab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c, 0x00000000},
-       {0x00009abc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90, 0x00000000},
-       {0x00009ac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c, 0x00000000},
-       {0x00009ac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310, 0x00000000},
-       {0x00009ac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384, 0x00000000},
-       {0x00009acc, 0x00000000, 0x00000000, 0x000db388, 0x000db388, 0x00000000},
-       {0x00009ad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324, 0x00000000},
-       {0x00009ad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704, 0x00000000},
-       {0x00009ad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4, 0x00000000},
-       {0x00009adc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8, 0x00000000},
-       {0x00009ae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710, 0x00000000},
-       {0x00009ae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714, 0x00000000},
-       {0x00009ae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720, 0x00000000},
-       {0x00009aec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724, 0x00000000},
-       {0x00009af0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728, 0x00000000},
-       {0x00009af4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c, 0x00000000},
-       {0x00009af8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0, 0x00000000},
-       {0x00009afc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4, 0x00000000},
-       {0x00009b00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8, 0x00000000},
-       {0x00009b04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0, 0x00000000},
-       {0x00009b08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4, 0x00000000},
-       {0x00009b0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8, 0x00000000},
-       {0x00009b10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5, 0x00000000},
-       {0x00009b14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9, 0x00000000},
-       {0x00009b18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad, 0x00000000},
-       {0x00009b1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1, 0x00000000},
-       {0x00009b20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5, 0x00000000},
-       {0x00009b24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9, 0x00000000},
-       {0x00009b28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5, 0x00000000},
-       {0x00009b2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9, 0x00000000},
-       {0x00009b30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1, 0x00000000},
-       {0x00009b34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5, 0x00000000},
-       {0x00009b38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9, 0x00000000},
-       {0x00009b3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6, 0x00000000},
-       {0x00009b40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca, 0x00000000},
-       {0x00009b44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce, 0x00000000},
-       {0x00009b48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2, 0x00000000},
-       {0x00009b4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6, 0x00000000},
-       {0x00009b50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3, 0x00000000},
-       {0x00009b54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7, 0x00000000},
-       {0x00009b58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb, 0x00000000},
-       {0x00009b5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf, 0x00000000},
-       {0x00009b60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7, 0x00000000},
-       {0x00009b64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009ba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009ba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009ba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009be0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009be4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009be8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000aa00, 0x00000000, 0x00000000, 0x00058084, 0x00058084, 0x00000000},
-       {0x0000aa04, 0x00000000, 0x00000000, 0x00058088, 0x00058088, 0x00000000},
-       {0x0000aa08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c, 0x00000000},
-       {0x0000aa0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100, 0x00000000},
-       {0x0000aa10, 0x00000000, 0x00000000, 0x00058104, 0x00058104, 0x00000000},
-       {0x0000aa14, 0x00000000, 0x00000000, 0x00058108, 0x00058108, 0x00000000},
-       {0x0000aa18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c, 0x00000000},
-       {0x0000aa1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110, 0x00000000},
-       {0x0000aa20, 0x00000000, 0x00000000, 0x00058114, 0x00058114, 0x00000000},
-       {0x0000aa24, 0x00000000, 0x00000000, 0x00058180, 0x00058180, 0x00000000},
-       {0x0000aa28, 0x00000000, 0x00000000, 0x00058184, 0x00058184, 0x00000000},
-       {0x0000aa2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188, 0x00000000},
-       {0x0000aa30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c, 0x00000000},
-       {0x0000aa34, 0x00000000, 0x00000000, 0x00058190, 0x00058190, 0x00000000},
-       {0x0000aa38, 0x00000000, 0x00000000, 0x00058194, 0x00058194, 0x00000000},
-       {0x0000aa3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0, 0x00000000},
-       {0x0000aa40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c, 0x00000000},
-       {0x0000aa44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8, 0x00000000},
-       {0x0000aa48, 0x00000000, 0x00000000, 0x00058284, 0x00058284, 0x00000000},
-       {0x0000aa4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288, 0x00000000},
-       {0x0000aa50, 0x00000000, 0x00000000, 0x00058224, 0x00058224, 0x00000000},
-       {0x0000aa54, 0x00000000, 0x00000000, 0x00058290, 0x00058290, 0x00000000},
-       {0x0000aa58, 0x00000000, 0x00000000, 0x00058300, 0x00058300, 0x00000000},
-       {0x0000aa5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304, 0x00000000},
-       {0x0000aa60, 0x00000000, 0x00000000, 0x00058308, 0x00058308, 0x00000000},
-       {0x0000aa64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c, 0x00000000},
-       {0x0000aa68, 0x00000000, 0x00000000, 0x00058380, 0x00058380, 0x00000000},
-       {0x0000aa6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384, 0x00000000},
-       {0x0000aa70, 0x00000000, 0x00000000, 0x00068700, 0x00068700, 0x00000000},
-       {0x0000aa74, 0x00000000, 0x00000000, 0x00068704, 0x00068704, 0x00000000},
-       {0x0000aa78, 0x00000000, 0x00000000, 0x00068708, 0x00068708, 0x00000000},
-       {0x0000aa7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c, 0x00000000},
-       {0x0000aa80, 0x00000000, 0x00000000, 0x00068780, 0x00068780, 0x00000000},
-       {0x0000aa84, 0x00000000, 0x00000000, 0x00068784, 0x00068784, 0x00000000},
-       {0x0000aa88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00, 0x00000000},
-       {0x0000aa8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04, 0x00000000},
-       {0x0000aa90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08, 0x00000000},
-       {0x0000aa94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c, 0x00000000},
-       {0x0000aa98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80, 0x00000000},
-       {0x0000aa9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84, 0x00000000},
-       {0x0000aaa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88, 0x00000000},
-       {0x0000aaa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c, 0x00000000},
-       {0x0000aaa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90, 0x00000000},
-       {0x0000aaac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80, 0x00000000},
-       {0x0000aab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84, 0x00000000},
-       {0x0000aab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88, 0x00000000},
-       {0x0000aab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c, 0x00000000},
-       {0x0000aabc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90, 0x00000000},
-       {0x0000aac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c, 0x00000000},
-       {0x0000aac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310, 0x00000000},
-       {0x0000aac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384, 0x00000000},
-       {0x0000aacc, 0x00000000, 0x00000000, 0x000db388, 0x000db388, 0x00000000},
-       {0x0000aad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324, 0x00000000},
-       {0x0000aad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704, 0x00000000},
-       {0x0000aad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4, 0x00000000},
-       {0x0000aadc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8, 0x00000000},
-       {0x0000aae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710, 0x00000000},
-       {0x0000aae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714, 0x00000000},
-       {0x0000aae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720, 0x00000000},
-       {0x0000aaec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724, 0x00000000},
-       {0x0000aaf0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728, 0x00000000},
-       {0x0000aaf4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c, 0x00000000},
-       {0x0000aaf8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0, 0x00000000},
-       {0x0000aafc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4, 0x00000000},
-       {0x0000ab00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8, 0x00000000},
-       {0x0000ab04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0, 0x00000000},
-       {0x0000ab08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4, 0x00000000},
-       {0x0000ab0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8, 0x00000000},
-       {0x0000ab10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5, 0x00000000},
-       {0x0000ab14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9, 0x00000000},
-       {0x0000ab18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad, 0x00000000},
-       {0x0000ab1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1, 0x00000000},
-       {0x0000ab20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5, 0x00000000},
-       {0x0000ab24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9, 0x00000000},
-       {0x0000ab28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5, 0x00000000},
-       {0x0000ab2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9, 0x00000000},
-       {0x0000ab30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1, 0x00000000},
-       {0x0000ab34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5, 0x00000000},
-       {0x0000ab38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9, 0x00000000},
-       {0x0000ab3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6, 0x00000000},
-       {0x0000ab40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca, 0x00000000},
-       {0x0000ab44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce, 0x00000000},
-       {0x0000ab48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2, 0x00000000},
-       {0x0000ab4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6, 0x00000000},
-       {0x0000ab50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3, 0x00000000},
-       {0x0000ab54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7, 0x00000000},
-       {0x0000ab58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb, 0x00000000},
-       {0x0000ab5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf, 0x00000000},
-       {0x0000ab60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7, 0x00000000},
-       {0x0000ab64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000aba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000aba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000aba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abe0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abe4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abe8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000a204, 0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x00000004},
-       {0x0000a20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000, 0x0001f000},
-       {0x0000b20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000, 0x0001f000},
-       {0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a},
-       {0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000},
-       {0x0000a250, 0x0004f000, 0x0004f000, 0x0004a000, 0x0004a000, 0x0004a000},
-       {0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e},
-};
-
-static const u32 ar9285Common_9285_1_2[][2] = {
-       /* Addr      allmodes  */
-       {0x0000000c, 0x00000000},
-       {0x00000030, 0x00020045},
-       {0x00000034, 0x00000005},
-       {0x00000040, 0x00000000},
-       {0x00000044, 0x00000008},
-       {0x00000048, 0x00000008},
-       {0x0000004c, 0x00000010},
-       {0x00000050, 0x00000000},
-       {0x00000054, 0x0000001f},
-       {0x00000800, 0x00000000},
-       {0x00000804, 0x00000000},
-       {0x00000808, 0x00000000},
-       {0x0000080c, 0x00000000},
-       {0x00000810, 0x00000000},
-       {0x00000814, 0x00000000},
-       {0x00000818, 0x00000000},
-       {0x0000081c, 0x00000000},
-       {0x00000820, 0x00000000},
-       {0x00000824, 0x00000000},
-       {0x00001040, 0x002ffc0f},
-       {0x00001044, 0x002ffc0f},
-       {0x00001048, 0x002ffc0f},
-       {0x0000104c, 0x002ffc0f},
-       {0x00001050, 0x002ffc0f},
-       {0x00001054, 0x002ffc0f},
-       {0x00001058, 0x002ffc0f},
-       {0x0000105c, 0x002ffc0f},
-       {0x00001060, 0x002ffc0f},
-       {0x00001064, 0x002ffc0f},
-       {0x00001230, 0x00000000},
-       {0x00001270, 0x00000000},
-       {0x00001038, 0x00000000},
-       {0x00001078, 0x00000000},
-       {0x000010b8, 0x00000000},
-       {0x000010f8, 0x00000000},
-       {0x00001138, 0x00000000},
-       {0x00001178, 0x00000000},
-       {0x000011b8, 0x00000000},
-       {0x000011f8, 0x00000000},
-       {0x00001238, 0x00000000},
-       {0x00001278, 0x00000000},
-       {0x000012b8, 0x00000000},
-       {0x000012f8, 0x00000000},
-       {0x00001338, 0x00000000},
-       {0x00001378, 0x00000000},
-       {0x000013b8, 0x00000000},
-       {0x000013f8, 0x00000000},
-       {0x00001438, 0x00000000},
-       {0x00001478, 0x00000000},
-       {0x000014b8, 0x00000000},
-       {0x000014f8, 0x00000000},
-       {0x00001538, 0x00000000},
-       {0x00001578, 0x00000000},
-       {0x000015b8, 0x00000000},
-       {0x000015f8, 0x00000000},
-       {0x00001638, 0x00000000},
-       {0x00001678, 0x00000000},
-       {0x000016b8, 0x00000000},
-       {0x000016f8, 0x00000000},
-       {0x00001738, 0x00000000},
-       {0x00001778, 0x00000000},
-       {0x000017b8, 0x00000000},
-       {0x000017f8, 0x00000000},
-       {0x0000103c, 0x00000000},
-       {0x0000107c, 0x00000000},
-       {0x000010bc, 0x00000000},
-       {0x000010fc, 0x00000000},
-       {0x0000113c, 0x00000000},
-       {0x0000117c, 0x00000000},
-       {0x000011bc, 0x00000000},
-       {0x000011fc, 0x00000000},
-       {0x0000123c, 0x00000000},
-       {0x0000127c, 0x00000000},
-       {0x000012bc, 0x00000000},
-       {0x000012fc, 0x00000000},
-       {0x0000133c, 0x00000000},
-       {0x0000137c, 0x00000000},
-       {0x000013bc, 0x00000000},
-       {0x000013fc, 0x00000000},
-       {0x0000143c, 0x00000000},
-       {0x0000147c, 0x00000000},
-       {0x00004030, 0x00000002},
-       {0x0000403c, 0x00000002},
-       {0x00004024, 0x0000001f},
-       {0x00004060, 0x00000000},
-       {0x00004064, 0x00000000},
-       {0x00007010, 0x00000031},
-       {0x00007034, 0x00000002},
-       {0x00007038, 0x000004c2},
-       {0x00008004, 0x00000000},
-       {0x00008008, 0x00000000},
-       {0x0000800c, 0x00000000},
-       {0x00008018, 0x00000700},
-       {0x00008020, 0x00000000},
-       {0x00008038, 0x00000000},
-       {0x0000803c, 0x00000000},
-       {0x00008048, 0x00000000},
-       {0x00008054, 0x00000000},
-       {0x00008058, 0x00000000},
-       {0x0000805c, 0x000fc78f},
-       {0x00008060, 0x0000000f},
-       {0x00008064, 0x00000000},
-       {0x00008070, 0x00000000},
-       {0x000080c0, 0x2a80001a},
-       {0x000080c4, 0x05dc01e0},
-       {0x000080c8, 0x1f402710},
-       {0x000080cc, 0x01f40000},
-       {0x000080d0, 0x00001e00},
-       {0x000080d4, 0x00000000},
-       {0x000080d8, 0x00400000},
-       {0x000080e0, 0xffffffff},
-       {0x000080e4, 0x0000ffff},
-       {0x000080e8, 0x003f3f3f},
-       {0x000080ec, 0x00000000},
-       {0x000080f0, 0x00000000},
-       {0x000080f4, 0x00000000},
-       {0x000080f8, 0x00000000},
-       {0x000080fc, 0x00020000},
-       {0x00008100, 0x00020000},
-       {0x00008104, 0x00000001},
-       {0x00008108, 0x00000052},
-       {0x0000810c, 0x00000000},
-       {0x00008110, 0x00000168},
-       {0x00008118, 0x000100aa},
-       {0x0000811c, 0x00003210},
-       {0x00008120, 0x08f04810},
-       {0x00008124, 0x00000000},
-       {0x00008128, 0x00000000},
-       {0x0000812c, 0x00000000},
-       {0x00008130, 0x00000000},
-       {0x00008134, 0x00000000},
-       {0x00008138, 0x00000000},
-       {0x0000813c, 0x00000000},
-       {0x00008144, 0xffffffff},
-       {0x00008168, 0x00000000},
-       {0x0000816c, 0x00000000},
-       {0x00008170, 0x32143320},
-       {0x00008174, 0xfaa4fa50},
-       {0x00008178, 0x00000100},
-       {0x0000817c, 0x00000000},
-       {0x000081c0, 0x00000000},
-       {0x000081d0, 0x0000320a},
-       {0x000081ec, 0x00000000},
-       {0x000081f0, 0x00000000},
-       {0x000081f4, 0x00000000},
-       {0x000081f8, 0x00000000},
-       {0x000081fc, 0x00000000},
-       {0x00008200, 0x00000000},
-       {0x00008204, 0x00000000},
-       {0x00008208, 0x00000000},
-       {0x0000820c, 0x00000000},
-       {0x00008210, 0x00000000},
-       {0x00008214, 0x00000000},
-       {0x00008218, 0x00000000},
-       {0x0000821c, 0x00000000},
-       {0x00008220, 0x00000000},
-       {0x00008224, 0x00000000},
-       {0x00008228, 0x00000000},
-       {0x0000822c, 0x00000000},
-       {0x00008230, 0x00000000},
-       {0x00008234, 0x00000000},
-       {0x00008238, 0x00000000},
-       {0x0000823c, 0x00000000},
-       {0x00008240, 0x00100000},
-       {0x00008244, 0x0010f400},
-       {0x00008248, 0x00000100},
-       {0x0000824c, 0x0001e800},
-       {0x00008250, 0x00000000},
-       {0x00008254, 0x00000000},
-       {0x00008258, 0x00000000},
-       {0x0000825c, 0x400000ff},
-       {0x00008260, 0x00080922},
-       {0x00008264, 0x88a00010},
-       {0x00008270, 0x00000000},
-       {0x00008274, 0x40000000},
-       {0x00008278, 0x003e4180},
-       {0x0000827c, 0x00000000},
-       {0x00008284, 0x0000002c},
-       {0x00008288, 0x0000002c},
-       {0x0000828c, 0x00000000},
-       {0x00008294, 0x00000000},
-       {0x00008298, 0x00000000},
-       {0x0000829c, 0x00000000},
-       {0x00008300, 0x00000040},
-       {0x00008314, 0x00000000},
-       {0x00008328, 0x00000000},
-       {0x0000832c, 0x00000001},
-       {0x00008330, 0x00000302},
-       {0x00008334, 0x00000e00},
-       {0x00008338, 0x00ff0000},
-       {0x0000833c, 0x00000000},
-       {0x00008340, 0x00010380},
-       {0x00008344, 0x00481043},
-       {0x00009808, 0x00000000},
-       {0x0000980c, 0xafe68e30},
-       {0x00009810, 0xfd14e000},
-       {0x00009814, 0x9c0a9f6b},
-       {0x0000981c, 0x00000000},
-       {0x0000982c, 0x0000a000},
-       {0x00009830, 0x00000000},
-       {0x0000983c, 0x00200400},
-       {0x0000984c, 0x0040233c},
-       {0x00009854, 0x00000044},
-       {0x00009900, 0x00000000},
-       {0x00009904, 0x00000000},
-       {0x00009908, 0x00000000},
-       {0x0000990c, 0x00000000},
-       {0x00009910, 0x01002310},
-       {0x0000991c, 0x10000fff},
-       {0x00009920, 0x04900000},
-       {0x00009928, 0x00000001},
-       {0x0000992c, 0x00000004},
-       {0x00009934, 0x1e1f2022},
-       {0x00009938, 0x0a0b0c0d},
-       {0x0000993c, 0x00000000},
-       {0x00009940, 0x14750604},
-       {0x00009948, 0x9280c00a},
-       {0x0000994c, 0x00020028},
-       {0x00009954, 0x5f3ca3de},
-       {0x00009958, 0x2108ecff},
-       {0x00009968, 0x000003ce},
-       {0x00009970, 0x192bb514},
-       {0x00009974, 0x00000000},
-       {0x00009978, 0x00000001},
-       {0x0000997c, 0x00000000},
-       {0x00009980, 0x00000000},
-       {0x00009984, 0x00000000},
-       {0x00009988, 0x00000000},
-       {0x0000998c, 0x00000000},
-       {0x00009990, 0x00000000},
-       {0x00009994, 0x00000000},
-       {0x00009998, 0x00000000},
-       {0x0000999c, 0x00000000},
-       {0x000099a0, 0x00000000},
-       {0x000099a4, 0x00000001},
-       {0x000099a8, 0x201fff00},
-       {0x000099ac, 0x2def0400},
-       {0x000099b0, 0x03051000},
-       {0x000099b4, 0x00000820},
-       {0x000099dc, 0x00000000},
-       {0x000099e0, 0x00000000},
-       {0x000099e4, 0xaaaaaaaa},
-       {0x000099e8, 0x3c466478},
-       {0x000099ec, 0x0cc80caa},
-       {0x000099f0, 0x00000000},
-       {0x0000a208, 0x803e68c8},
-       {0x0000a210, 0x4080a333},
-       {0x0000a214, 0x00206c10},
-       {0x0000a218, 0x009c4060},
-       {0x0000a220, 0x01834061},
-       {0x0000a224, 0x00000400},
-       {0x0000a228, 0x000003b5},
-       {0x0000a22c, 0x00000000},
-       {0x0000a234, 0x20202020},
-       {0x0000a238, 0x20202020},
-       {0x0000a244, 0x00000000},
-       {0x0000a248, 0xfffffffc},
-       {0x0000a24c, 0x00000000},
-       {0x0000a254, 0x00000000},
-       {0x0000a258, 0x0ccb5380},
-       {0x0000a25c, 0x15151501},
-       {0x0000a260, 0xdfa90f01},
-       {0x0000a268, 0x00000000},
-       {0x0000a26c, 0x0ebae9e6},
-       {0x0000d270, 0x0d820820},
-       {0x0000d35c, 0x07ffffef},
-       {0x0000d360, 0x0fffffe7},
-       {0x0000d364, 0x17ffffe5},
-       {0x0000d368, 0x1fffffe4},
-       {0x0000d36c, 0x37ffffe3},
-       {0x0000d370, 0x3fffffe3},
-       {0x0000d374, 0x57ffffe3},
-       {0x0000d378, 0x5fffffe2},
-       {0x0000d37c, 0x7fffffe2},
-       {0x0000d380, 0x7f3c7bba},
-       {0x0000d384, 0xf3307ff0},
-       {0x0000a388, 0x0c000000},
-       {0x0000a38c, 0x20202020},
-       {0x0000a390, 0x20202020},
-       {0x0000a39c, 0x00000001},
-       {0x0000a3a0, 0x00000000},
-       {0x0000a3a4, 0x00000000},
-       {0x0000a3a8, 0x00000000},
-       {0x0000a3ac, 0x00000000},
-       {0x0000a3b0, 0x00000000},
-       {0x0000a3b4, 0x00000000},
-       {0x0000a3b8, 0x00000000},
-       {0x0000a3bc, 0x00000000},
-       {0x0000a3c0, 0x00000000},
-       {0x0000a3c4, 0x00000000},
-       {0x0000a3cc, 0x20202020},
-       {0x0000a3d0, 0x20202020},
-       {0x0000a3d4, 0x20202020},
-       {0x0000a3e4, 0x00000000},
-       {0x0000a3e8, 0x18c43433},
-       {0x0000a3ec, 0x00f70081},
-       {0x00007800, 0x00140000},
-       {0x00007804, 0x0e4548d8},
-       {0x00007808, 0x54214514},
-       {0x0000780c, 0x02025830},
-       {0x00007810, 0x71c0d388},
-       {0x0000781c, 0x00000000},
-       {0x00007824, 0x00d86fff},
-       {0x0000782c, 0x6e36d97b},
-       {0x00007834, 0x71400087},
-       {0x00007844, 0x000c0db6},
-       {0x00007848, 0x6db6246f},
-       {0x0000784c, 0x6d9b66db},
-       {0x00007850, 0x6d8c6dba},
-       {0x00007854, 0x00040000},
-       {0x00007858, 0xdb003012},
-       {0x0000785c, 0x04924914},
-       {0x00007860, 0x21084210},
-       {0x00007864, 0xf7d7ffde},
-       {0x00007868, 0xc2034080},
-       {0x00007870, 0x10142c00},
-};
-
-static const u32 ar9285Modes_high_power_tx_gain_9285_1_2[][6] = {
-       {0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a304, 0x00000000, 0x00000000, 0x00006200, 0x00006200, 0x00000000},
-       {0x0000a308, 0x00000000, 0x00000000, 0x00008201, 0x00008201, 0x00000000},
-       {0x0000a30c, 0x00000000, 0x00000000, 0x0000b240, 0x0000b240, 0x00000000},
-       {0x0000a310, 0x00000000, 0x00000000, 0x0000d241, 0x0000d241, 0x00000000},
-       {0x0000a314, 0x00000000, 0x00000000, 0x0000f600, 0x0000f600, 0x00000000},
-       {0x0000a318, 0x00000000, 0x00000000, 0x00012800, 0x00012800, 0x00000000},
-       {0x0000a31c, 0x00000000, 0x00000000, 0x00016802, 0x00016802, 0x00000000},
-       {0x0000a320, 0x00000000, 0x00000000, 0x0001b805, 0x0001b805, 0x00000000},
-       {0x0000a324, 0x00000000, 0x00000000, 0x00021a80, 0x00021a80, 0x00000000},
-       {0x0000a328, 0x00000000, 0x00000000, 0x00028b00, 0x00028b00, 0x00000000},
-       {0x0000a32c, 0x00000000, 0x00000000, 0x0002ab40, 0x0002ab40, 0x00000000},
-       {0x0000a330, 0x00000000, 0x00000000, 0x0002cd80, 0x0002cd80, 0x00000000},
-       {0x0000a334, 0x00000000, 0x00000000, 0x00033d82, 0x00033d82, 0x00000000},
-       {0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000},
-       {0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000},
-       {0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x00007814, 0x924934a8, 0x924934a8, 0x924934a8, 0x924934a8, 0x924934a8},
-       {0x00007828, 0x26d2491b, 0x26d2491b, 0x26d2491b, 0x26d2491b, 0x26d2491b},
-       {0x00007830, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e},
-       {0x00007838, 0xfac68803, 0xfac68803, 0xfac68803, 0xfac68803, 0xfac68803},
-       {0x0000783c, 0x0001fffe, 0x0001fffe, 0x0001fffe, 0x0001fffe, 0x0001fffe},
-       {0x00007840, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20},
-       {0x0000786c, 0x08609ebe, 0x08609ebe, 0x08609ebe, 0x08609ebe, 0x08609ebe},
-       {0x00007820, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00},
-       {0x0000a274, 0x0a22a652, 0x0a22a652, 0x0a216652, 0x0a216652, 0x0a22a652},
-       {0x0000a278, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7},
-       {0x0000a27c, 0x050380e7, 0x050380e7, 0x050380e7, 0x050380e7, 0x050380e7},
-       {0x0000a394, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7},
-       {0x0000a398, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7},
-       {0x0000a3dc, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7},
-       {0x0000a3e0, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7},
-};
-
-static const u32 ar9285Modes_original_tx_gain_9285_1_2[][6] = {
-       {0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a304, 0x00000000, 0x00000000, 0x00009200, 0x00009200, 0x00000000},
-       {0x0000a308, 0x00000000, 0x00000000, 0x00010208, 0x00010208, 0x00000000},
-       {0x0000a30c, 0x00000000, 0x00000000, 0x00019608, 0x00019608, 0x00000000},
-       {0x0000a310, 0x00000000, 0x00000000, 0x00022618, 0x00022618, 0x00000000},
-       {0x0000a314, 0x00000000, 0x00000000, 0x0002a6c9, 0x0002a6c9, 0x00000000},
-       {0x0000a318, 0x00000000, 0x00000000, 0x00031710, 0x00031710, 0x00000000},
-       {0x0000a31c, 0x00000000, 0x00000000, 0x00035718, 0x00035718, 0x00000000},
-       {0x0000a320, 0x00000000, 0x00000000, 0x00038758, 0x00038758, 0x00000000},
-       {0x0000a324, 0x00000000, 0x00000000, 0x0003c75a, 0x0003c75a, 0x00000000},
-       {0x0000a328, 0x00000000, 0x00000000, 0x0004075c, 0x0004075c, 0x00000000},
-       {0x0000a32c, 0x00000000, 0x00000000, 0x0004475e, 0x0004475e, 0x00000000},
-       {0x0000a330, 0x00000000, 0x00000000, 0x0004679f, 0x0004679f, 0x00000000},
-       {0x0000a334, 0x00000000, 0x00000000, 0x000487df, 0x000487df, 0x00000000},
-       {0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000},
-       {0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000},
-       {0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x00007814, 0x924934a8, 0x924934a8, 0x924934a8, 0x924934a8, 0x924934a8},
-       {0x00007828, 0x26d2491b, 0x26d2491b, 0x26d2491b, 0x26d2491b, 0x26d2491b},
-       {0x00007830, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e, 0xedb6d96e},
-       {0x00007838, 0xfac68801, 0xfac68801, 0xfac68801, 0xfac68801, 0xfac68801},
-       {0x0000783c, 0x0001fffe, 0x0001fffe, 0x0001fffe, 0x0001fffe, 0x0001fffe},
-       {0x00007840, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20, 0xffeb1a20},
-       {0x0000786c, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4},
-       {0x00007820, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04},
-       {0x0000a274, 0x0a21c652, 0x0a21c652, 0x0a21a652, 0x0a21a652, 0x0a22a652},
-       {0x0000a278, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c},
-       {0x0000a27c, 0x050e039c, 0x050e039c, 0x050e039c, 0x050e039c, 0x050e039c},
-       {0x0000a394, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c},
-       {0x0000a398, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c},
-       {0x0000a3dc, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c},
-       {0x0000a3e0, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c},
-};
-
-static const u32 ar9285Modes_XE2_0_normal_power[][6] = {
-       {0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a304, 0x00000000, 0x00000000, 0x00009200, 0x00009200, 0x00000000},
-       {0x0000a308, 0x00000000, 0x00000000, 0x00010208, 0x00010208, 0x00000000},
-       {0x0000a30c, 0x00000000, 0x00000000, 0x00019608, 0x00019608, 0x00000000},
-       {0x0000a310, 0x00000000, 0x00000000, 0x00022618, 0x00022618, 0x00000000},
-       {0x0000a314, 0x00000000, 0x00000000, 0x0002a6c9, 0x0002a6c9, 0x00000000},
-       {0x0000a318, 0x00000000, 0x00000000, 0x00031710, 0x00031710, 0x00000000},
-       {0x0000a31c, 0x00000000, 0x00000000, 0x00035718, 0x00035718, 0x00000000},
-       {0x0000a320, 0x00000000, 0x00000000, 0x00038758, 0x00038758, 0x00000000},
-       {0x0000a324, 0x00000000, 0x00000000, 0x0003c75a, 0x0003c75a, 0x00000000},
-       {0x0000a328, 0x00000000, 0x00000000, 0x0004075c, 0x0004075c, 0x00000000},
-       {0x0000a32c, 0x00000000, 0x00000000, 0x0004475e, 0x0004475e, 0x00000000},
-       {0x0000a330, 0x00000000, 0x00000000, 0x0004679f, 0x0004679f, 0x00000000},
-       {0x0000a334, 0x00000000, 0x00000000, 0x000487df, 0x000487df, 0x00000000},
-       {0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000},
-       {0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000},
-       {0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x00007814, 0x92497ca8, 0x92497ca8, 0x92497ca8, 0x92497ca8, 0x92497ca8},
-       {0x00007828, 0x4ad2491b, 0x4ad2491b, 0x2ad2491b, 0x4ad2491b, 0x4ad2491b},
-       {0x00007830, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e, 0xedb6dbae},
-       {0x00007838, 0xdac71441, 0xdac71441, 0xdac71441, 0xdac71441, 0xdac71441},
-       {0x0000783c, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe},
-       {0x00007840, 0xba5f638c, 0xba5f638c, 0xba5f638c, 0xba5f638c, 0xba5f638c},
-       {0x0000786c, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4},
-       {0x00007820, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04},
-       {0x0000a274, 0x0a21c652, 0x0a21c652, 0x0a21a652, 0x0a21a652, 0x0a22a652},
-       {0x0000a278, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c},
-       {0x0000a27c, 0x050e039c, 0x050e039c, 0x050e039c, 0x050e039c, 0x050e039c},
-       {0x0000a394, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c},
-       {0x0000a398, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c},
-       {0x0000a3dc, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c, 0x39ce739c},
-       {0x0000a3e0, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c, 0x0000039c},
-};
-
-static const u32 ar9285Modes_XE2_0_high_power[][6] = {
-       {0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a304, 0x00000000, 0x00000000, 0x00006200, 0x00006200, 0x00000000},
-       {0x0000a308, 0x00000000, 0x00000000, 0x00008201, 0x00008201, 0x00000000},
-       {0x0000a30c, 0x00000000, 0x00000000, 0x0000b240, 0x0000b240, 0x00000000},
-       {0x0000a310, 0x00000000, 0x00000000, 0x0000d241, 0x0000d241, 0x00000000},
-       {0x0000a314, 0x00000000, 0x00000000, 0x0000f600, 0x0000f600, 0x00000000},
-       {0x0000a318, 0x00000000, 0x00000000, 0x00012800, 0x00012800, 0x00000000},
-       {0x0000a31c, 0x00000000, 0x00000000, 0x00016802, 0x00016802, 0x00000000},
-       {0x0000a320, 0x00000000, 0x00000000, 0x0001b805, 0x0001b805, 0x00000000},
-       {0x0000a324, 0x00000000, 0x00000000, 0x00021a80, 0x00021a80, 0x00000000},
-       {0x0000a328, 0x00000000, 0x00000000, 0x00028b00, 0x00028b00, 0x00000000},
-       {0x0000a32c, 0x00000000, 0x00000000, 0x0002ab40, 0x0002ab40, 0x00000000},
-       {0x0000a330, 0x00000000, 0x00000000, 0x0002cd80, 0x0002cd80, 0x00000000},
-       {0x0000a334, 0x00000000, 0x00000000, 0x00033d82, 0x00033d82, 0x00000000},
-       {0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000},
-       {0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000},
-       {0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x00007814, 0x92497ca8, 0x92497ca8, 0x92497ca8, 0x92497ca8, 0x92497ca8},
-       {0x00007828, 0x4ad2491b, 0x4ad2491b, 0x2ad2491b, 0x4ad2491b, 0x4ad2491b},
-       {0x00007830, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e, 0xedb6da6e},
-       {0x00007838, 0xdac71443, 0xdac71443, 0xdac71443, 0xdac71443, 0xdac71443},
-       {0x0000783c, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe, 0x2481f6fe},
-       {0x00007840, 0xba5f638c, 0xba5f638c, 0xba5f638c, 0xba5f638c, 0xba5f638c},
-       {0x0000786c, 0x08609ebe, 0x08609ebe, 0x08609ebe, 0x08609ebe, 0x08609ebe},
-       {0x00007820, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00},
-       {0x0000a274, 0x0a22a652, 0x0a22a652, 0x0a216652, 0x0a216652, 0x0a22a652},
-       {0x0000a278, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7},
-       {0x0000a27c, 0x050380e7, 0x050380e7, 0x050380e7, 0x050380e7, 0x050380e7},
-       {0x0000a394, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7},
-       {0x0000a398, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7},
-       {0x0000a3dc, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7},
-       {0x0000a3e0, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7, 0x000000e7},
-};
-
-static const u32 ar9285PciePhy_clkreq_always_on_L1_9285_1_2[][2] = {
-       /* Addr      allmodes  */
-       {0x00004040, 0x9248fd00},
-       {0x00004040, 0x24924924},
-       {0x00004040, 0xa8000019},
-       {0x00004040, 0x13160820},
-       {0x00004040, 0xe5980560},
-       {0x00004040, 0xc01dcffd},
-       {0x00004040, 0x1aaabe41},
-       {0x00004040, 0xbe105554},
-       {0x00004040, 0x00043007},
-       {0x00004044, 0x00000000},
-};
-
-static const u32 ar9285PciePhy_clkreq_off_L1_9285_1_2[][2] = {
-       /* Addr      allmodes  */
-       {0x00004040, 0x9248fd00},
-       {0x00004040, 0x24924924},
-       {0x00004040, 0xa8000019},
-       {0x00004040, 0x13160820},
-       {0x00004040, 0xe5980560},
-       {0x00004040, 0xc01dcffc},
-       {0x00004040, 0x1aaabe41},
-       {0x00004040, 0xbe105554},
-       {0x00004040, 0x00043007},
-       {0x00004044, 0x00000000},
-};
-
-static const u32 ar9287Modes_9287_1_1[][6] = {
-       {0x00001030, 0x00000000, 0x00000000, 0x000002c0, 0x00000160, 0x000001e0},
-       {0x00001070, 0x00000000, 0x00000000, 0x00000318, 0x0000018c, 0x000001e0},
-       {0x000010b0, 0x00000000, 0x00000000, 0x00007c70, 0x00003e38, 0x00001180},
-       {0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008},
-       {0x00008014, 0x00000000, 0x00000000, 0x10801600, 0x08400b00, 0x06e006e0},
-       {0x0000801c, 0x00000000, 0x00000000, 0x12e00057, 0x12e0002b, 0x0988004f},
-       {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810, 0x08f04810},
-       {0x000081d0, 0x00003200, 0x00003200, 0x0000320a, 0x0000320a, 0x0000320a},
-       {0x00008318, 0x00000000, 0x00000000, 0x00006880, 0x00003440, 0x00006880},
-       {0x00009804, 0x00000000, 0x00000000, 0x000003c4, 0x00000300, 0x00000303},
-       {0x00009820, 0x00000000, 0x00000000, 0x02020200, 0x02020200, 0x02020200},
-       {0x00009824, 0x00000000, 0x00000000, 0x01000e0e, 0x01000e0e, 0x01000e0e},
-       {0x00009828, 0x00000000, 0x00000000, 0x3a020001, 0x3a020001, 0x3a020001},
-       {0x00009834, 0x00000000, 0x00000000, 0x00000e0e, 0x00000e0e, 0x00000e0e},
-       {0x00009838, 0x00000003, 0x00000003, 0x00000007, 0x00000007, 0x00000007},
-       {0x00009840, 0x206a002e, 0x206a002e, 0x206a012e, 0x206a012e, 0x206a012e},
-       {0x00009844, 0x03720000, 0x03720000, 0x037216a0, 0x037216a0, 0x037216a0},
-       {0x00009850, 0x60000000, 0x60000000, 0x6d4000e2, 0x6c4000e2, 0x6c4000e2},
-       {0x00009858, 0x7c000d00, 0x7c000d00, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e},
-       {0x0000985c, 0x3100005e, 0x3100005e, 0x3139605e, 0x31395d5e, 0x31395d5e},
-       {0x00009860, 0x00058d00, 0x00058d00, 0x00058d20, 0x00058d20, 0x00058d18},
-       {0x00009864, 0x00000e00, 0x00000e00, 0x0001ce00, 0x0001ce00, 0x0001ce00},
-       {0x00009868, 0x000040c0, 0x000040c0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0},
-       {0x0000986c, 0x00000080, 0x00000080, 0x06903881, 0x06903881, 0x06903881},
-       {0x00009914, 0x00000000, 0x00000000, 0x00001130, 0x00000898, 0x000007d0},
-       {0x00009918, 0x00000000, 0x00000000, 0x00000016, 0x0000000b, 0x00000016},
-       {0x00009924, 0xd00a8a01, 0xd00a8a01, 0xd00a8a0d, 0xd00a8a0d, 0xd00a8a0d},
-       {0x00009944, 0xefbc0000, 0xefbc0000, 0xefbc1010, 0xefbc1010, 0xefbc1010},
-       {0x00009960, 0x00000000, 0x00000000, 0x00000010, 0x00000010, 0x00000010},
-       {0x0000a960, 0x00000000, 0x00000000, 0x00000010, 0x00000010, 0x00000010},
-       {0x00009964, 0x00000000, 0x00000000, 0x00000210, 0x00000210, 0x00000210},
-       {0x0000c968, 0x00000200, 0x00000200, 0x000003ce, 0x000003ce, 0x000003ce},
-       {0x000099b8, 0x00000000, 0x00000000, 0x0000001c, 0x0000001c, 0x0000001c},
-       {0x000099bc, 0x00000000, 0x00000000, 0x00000c00, 0x00000c00, 0x00000c00},
-       {0x000099c0, 0x00000000, 0x00000000, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4},
-       {0x0000a204, 0x00000440, 0x00000440, 0x00000444, 0x00000444, 0x00000444},
-       {0x0000a20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000b20c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a21c, 0x1803800a, 0x1803800a, 0x1883800a, 0x1883800a, 0x1883800a},
-       {0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000},
-       {0x0000a250, 0x00000000, 0x00000000, 0x0004a000, 0x0004a000, 0x0004a000},
-       {0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e},
-       {0x0000a3d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-};
-
-static const u32 ar9287Common_9287_1_1[][2] = {
-       /* Addr      allmodes  */
-       {0x0000000c, 0x00000000},
-       {0x00000030, 0x00020015},
-       {0x00000034, 0x00000005},
-       {0x00000040, 0x00000000},
-       {0x00000044, 0x00000008},
-       {0x00000048, 0x00000008},
-       {0x0000004c, 0x00000010},
-       {0x00000050, 0x00000000},
-       {0x00000054, 0x0000001f},
-       {0x00000800, 0x00000000},
-       {0x00000804, 0x00000000},
-       {0x00000808, 0x00000000},
-       {0x0000080c, 0x00000000},
-       {0x00000810, 0x00000000},
-       {0x00000814, 0x00000000},
-       {0x00000818, 0x00000000},
-       {0x0000081c, 0x00000000},
-       {0x00000820, 0x00000000},
-       {0x00000824, 0x00000000},
-       {0x00001040, 0x002ffc0f},
-       {0x00001044, 0x002ffc0f},
-       {0x00001048, 0x002ffc0f},
-       {0x0000104c, 0x002ffc0f},
-       {0x00001050, 0x002ffc0f},
-       {0x00001054, 0x002ffc0f},
-       {0x00001058, 0x002ffc0f},
-       {0x0000105c, 0x002ffc0f},
-       {0x00001060, 0x002ffc0f},
-       {0x00001064, 0x002ffc0f},
-       {0x00001230, 0x00000000},
-       {0x00001270, 0x00000000},
-       {0x00001038, 0x00000000},
-       {0x00001078, 0x00000000},
-       {0x000010b8, 0x00000000},
-       {0x000010f8, 0x00000000},
-       {0x00001138, 0x00000000},
-       {0x00001178, 0x00000000},
-       {0x000011b8, 0x00000000},
-       {0x000011f8, 0x00000000},
-       {0x00001238, 0x00000000},
-       {0x00001278, 0x00000000},
-       {0x000012b8, 0x00000000},
-       {0x000012f8, 0x00000000},
-       {0x00001338, 0x00000000},
-       {0x00001378, 0x00000000},
-       {0x000013b8, 0x00000000},
-       {0x000013f8, 0x00000000},
-       {0x00001438, 0x00000000},
-       {0x00001478, 0x00000000},
-       {0x000014b8, 0x00000000},
-       {0x000014f8, 0x00000000},
-       {0x00001538, 0x00000000},
-       {0x00001578, 0x00000000},
-       {0x000015b8, 0x00000000},
-       {0x000015f8, 0x00000000},
-       {0x00001638, 0x00000000},
-       {0x00001678, 0x00000000},
-       {0x000016b8, 0x00000000},
-       {0x000016f8, 0x00000000},
-       {0x00001738, 0x00000000},
-       {0x00001778, 0x00000000},
-       {0x000017b8, 0x00000000},
-       {0x000017f8, 0x00000000},
-       {0x0000103c, 0x00000000},
-       {0x0000107c, 0x00000000},
-       {0x000010bc, 0x00000000},
-       {0x000010fc, 0x00000000},
-       {0x0000113c, 0x00000000},
-       {0x0000117c, 0x00000000},
-       {0x000011bc, 0x00000000},
-       {0x000011fc, 0x00000000},
-       {0x0000123c, 0x00000000},
-       {0x0000127c, 0x00000000},
-       {0x000012bc, 0x00000000},
-       {0x000012fc, 0x00000000},
-       {0x0000133c, 0x00000000},
-       {0x0000137c, 0x00000000},
-       {0x000013bc, 0x00000000},
-       {0x000013fc, 0x00000000},
-       {0x0000143c, 0x00000000},
-       {0x0000147c, 0x00000000},
-       {0x00004030, 0x00000002},
-       {0x0000403c, 0x00000002},
-       {0x00004024, 0x0000001f},
-       {0x00004060, 0x00000000},
-       {0x00004064, 0x00000000},
-       {0x00007010, 0x00000033},
-       {0x00007020, 0x00000000},
-       {0x00007034, 0x00000002},
-       {0x00007038, 0x000004c2},
-       {0x00008004, 0x00000000},
-       {0x00008008, 0x00000000},
-       {0x0000800c, 0x00000000},
-       {0x00008018, 0x00000700},
-       {0x00008020, 0x00000000},
-       {0x00008038, 0x00000000},
-       {0x0000803c, 0x00000000},
-       {0x00008048, 0x40000000},
-       {0x00008054, 0x00000000},
-       {0x00008058, 0x00000000},
-       {0x0000805c, 0x000fc78f},
-       {0x00008060, 0x0000000f},
-       {0x00008064, 0x00000000},
-       {0x00008070, 0x00000000},
-       {0x000080c0, 0x2a80001a},
-       {0x000080c4, 0x05dc01e0},
-       {0x000080c8, 0x1f402710},
-       {0x000080cc, 0x01f40000},
-       {0x000080d0, 0x00001e00},
-       {0x000080d4, 0x00000000},
-       {0x000080d8, 0x00400000},
-       {0x000080e0, 0xffffffff},
-       {0x000080e4, 0x0000ffff},
-       {0x000080e8, 0x003f3f3f},
-       {0x000080ec, 0x00000000},
-       {0x000080f0, 0x00000000},
-       {0x000080f4, 0x00000000},
-       {0x000080f8, 0x00000000},
-       {0x000080fc, 0x00020000},
-       {0x00008100, 0x00020000},
-       {0x00008104, 0x00000001},
-       {0x00008108, 0x00000052},
-       {0x0000810c, 0x00000000},
-       {0x00008110, 0x00000168},
-       {0x00008118, 0x000100aa},
-       {0x0000811c, 0x00003210},
-       {0x00008124, 0x00000000},
-       {0x00008128, 0x00000000},
-       {0x0000812c, 0x00000000},
-       {0x00008130, 0x00000000},
-       {0x00008134, 0x00000000},
-       {0x00008138, 0x00000000},
-       {0x0000813c, 0x00000000},
-       {0x00008144, 0xffffffff},
-       {0x00008168, 0x00000000},
-       {0x0000816c, 0x00000000},
-       {0x00008170, 0x18487320},
-       {0x00008174, 0xfaa4fa50},
-       {0x00008178, 0x00000100},
-       {0x0000817c, 0x00000000},
-       {0x000081c0, 0x00000000},
-       {0x000081c4, 0x00000000},
-       {0x000081d4, 0x00000000},
-       {0x000081ec, 0x00000000},
-       {0x000081f0, 0x00000000},
-       {0x000081f4, 0x00000000},
-       {0x000081f8, 0x00000000},
-       {0x000081fc, 0x00000000},
-       {0x00008200, 0x00000000},
-       {0x00008204, 0x00000000},
-       {0x00008208, 0x00000000},
-       {0x0000820c, 0x00000000},
-       {0x00008210, 0x00000000},
-       {0x00008214, 0x00000000},
-       {0x00008218, 0x00000000},
-       {0x0000821c, 0x00000000},
-       {0x00008220, 0x00000000},
-       {0x00008224, 0x00000000},
-       {0x00008228, 0x00000000},
-       {0x0000822c, 0x00000000},
-       {0x00008230, 0x00000000},
-       {0x00008234, 0x00000000},
-       {0x00008238, 0x00000000},
-       {0x0000823c, 0x00000000},
-       {0x00008240, 0x00100000},
-       {0x00008244, 0x0010f400},
-       {0x00008248, 0x00000100},
-       {0x0000824c, 0x0001e800},
-       {0x00008250, 0x00000000},
-       {0x00008254, 0x00000000},
-       {0x00008258, 0x00000000},
-       {0x0000825c, 0x400000ff},
-       {0x00008260, 0x00080922},
-       {0x00008264, 0x88a00010},
-       {0x00008270, 0x00000000},
-       {0x00008274, 0x40000000},
-       {0x00008278, 0x003e4180},
-       {0x0000827c, 0x00000000},
-       {0x00008284, 0x0000002c},
-       {0x00008288, 0x0000002c},
-       {0x0000828c, 0x000000ff},
-       {0x00008294, 0x00000000},
-       {0x00008298, 0x00000000},
-       {0x0000829c, 0x00000000},
-       {0x00008300, 0x00000040},
-       {0x00008314, 0x00000000},
-       {0x00008328, 0x00000000},
-       {0x0000832c, 0x00000007},
-       {0x00008330, 0x00000302},
-       {0x00008334, 0x00000e00},
-       {0x00008338, 0x00ff0000},
-       {0x0000833c, 0x00000000},
-       {0x00008340, 0x000107ff},
-       {0x00008344, 0x01c81043},
-       {0x00008360, 0xffffffff},
-       {0x00008364, 0xffffffff},
-       {0x00008368, 0x00000000},
-       {0x00008370, 0x00000000},
-       {0x00008374, 0x000000ff},
-       {0x00008378, 0x00000000},
-       {0x0000837c, 0x00000000},
-       {0x00008380, 0xffffffff},
-       {0x00008384, 0xffffffff},
-       {0x00008390, 0x0fffffff},
-       {0x00008394, 0x0fffffff},
-       {0x00008398, 0x00000000},
-       {0x0000839c, 0x00000000},
-       {0x000083a0, 0x00000000},
-       {0x00009808, 0x00000000},
-       {0x0000980c, 0xafe68e30},
-       {0x00009810, 0xfd14e000},
-       {0x00009814, 0x9c0a9f6b},
-       {0x0000981c, 0x00000000},
-       {0x0000982c, 0x0000a000},
-       {0x00009830, 0x00000000},
-       {0x0000983c, 0x00200400},
-       {0x0000984c, 0x0040233c},
-       {0x0000a84c, 0x0040233c},
-       {0x00009854, 0x00000044},
-       {0x00009900, 0x00000000},
-       {0x00009904, 0x00000000},
-       {0x00009908, 0x00000000},
-       {0x0000990c, 0x00000000},
-       {0x00009910, 0x10002310},
-       {0x0000991c, 0x10000fff},
-       {0x00009920, 0x04900000},
-       {0x0000a920, 0x04900000},
-       {0x00009928, 0x00000001},
-       {0x0000992c, 0x00000004},
-       {0x00009930, 0x00000000},
-       {0x0000a930, 0x00000000},
-       {0x00009934, 0x1e1f2022},
-       {0x00009938, 0x0a0b0c0d},
-       {0x0000993c, 0x00000000},
-       {0x00009948, 0x9280c00a},
-       {0x0000994c, 0x00020028},
-       {0x00009954, 0x5f3ca3de},
-       {0x00009958, 0x0108ecff},
-       {0x00009940, 0x14750604},
-       {0x0000c95c, 0x004b6a8e},
-       {0x00009970, 0x990bb514},
-       {0x00009974, 0x00000000},
-       {0x00009978, 0x00000001},
-       {0x0000997c, 0x00000000},
-       {0x000099a0, 0x00000000},
-       {0x000099a4, 0x00000001},
-       {0x000099a8, 0x201fff00},
-       {0x000099ac, 0x0c6f0000},
-       {0x000099b0, 0x03051000},
-       {0x000099b4, 0x00000820},
-       {0x000099c4, 0x06336f77},
-       {0x000099c8, 0x6af6532f},
-       {0x000099cc, 0x08f186c8},
-       {0x000099d0, 0x00046384},
-       {0x000099dc, 0x00000000},
-       {0x000099e0, 0x00000000},
-       {0x000099e4, 0xaaaaaaaa},
-       {0x000099e8, 0x3c466478},
-       {0x000099ec, 0x0cc80caa},
-       {0x000099f0, 0x00000000},
-       {0x000099fc, 0x00001042},
-       {0x0000a208, 0x803e4788},
-       {0x0000a210, 0x4080a333},
-       {0x0000a214, 0x40206c10},
-       {0x0000a218, 0x009c4060},
-       {0x0000a220, 0x01834061},
-       {0x0000a224, 0x00000400},
-       {0x0000a228, 0x000003b5},
-       {0x0000a22c, 0x233f7180},
-       {0x0000a234, 0x20202020},
-       {0x0000a238, 0x20202020},
-       {0x0000a23c, 0x13c889af},
-       {0x0000a240, 0x38490a20},
-       {0x0000a244, 0x00000000},
-       {0x0000a248, 0xfffffffc},
-       {0x0000a24c, 0x00000000},
-       {0x0000a254, 0x00000000},
-       {0x0000a258, 0x0cdbd380},
-       {0x0000a25c, 0x0f0f0f01},
-       {0x0000a260, 0xdfa91f01},
-       {0x0000a264, 0x00418a11},
-       {0x0000b264, 0x00418a11},
-       {0x0000a268, 0x00000000},
-       {0x0000a26c, 0x0e79e5c6},
-       {0x0000b26c, 0x0e79e5c6},
-       {0x0000d270, 0x00820820},
-       {0x0000a278, 0x1ce739ce},
-       {0x0000a27c, 0x050701ce},
-       {0x0000d35c, 0x07ffffef},
-       {0x0000d360, 0x0fffffe7},
-       {0x0000d364, 0x17ffffe5},
-       {0x0000d368, 0x1fffffe4},
-       {0x0000d36c, 0x37ffffe3},
-       {0x0000d370, 0x3fffffe3},
-       {0x0000d374, 0x57ffffe3},
-       {0x0000d378, 0x5fffffe2},
-       {0x0000d37c, 0x7fffffe2},
-       {0x0000d380, 0x7f3c7bba},
-       {0x0000d384, 0xf3307ff0},
-       {0x0000a388, 0x0c000000},
-       {0x0000a38c, 0x20202020},
-       {0x0000a390, 0x20202020},
-       {0x0000a394, 0x1ce739ce},
-       {0x0000a398, 0x000001ce},
-       {0x0000b398, 0x000001ce},
-       {0x0000a39c, 0x00000001},
-       {0x0000a3c8, 0x00000246},
-       {0x0000a3cc, 0x20202020},
-       {0x0000a3d0, 0x20202020},
-       {0x0000a3d4, 0x20202020},
-       {0x0000a3dc, 0x1ce739ce},
-       {0x0000a3e0, 0x000001ce},
-       {0x0000a3e4, 0x00000000},
-       {0x0000a3e8, 0x18c43433},
-       {0x0000a3ec, 0x00f70081},
-       {0x0000a3f0, 0x01036a1e},
-       {0x0000a3f4, 0x00000000},
-       {0x0000b3f4, 0x00000000},
-       {0x0000a7d8, 0x000003f1},
-       {0x00007800, 0x00000800},
-       {0x00007804, 0x6c35ffd2},
-       {0x00007808, 0x6db6c000},
-       {0x0000780c, 0x6db6cb30},
-       {0x00007810, 0x6db6cb6c},
-       {0x00007814, 0x0501e200},
-       {0x00007818, 0x0094128d},
-       {0x0000781c, 0x976ee392},
-       {0x00007820, 0xf75ff6fc},
-       {0x00007824, 0x00040000},
-       {0x00007828, 0xdb003012},
-       {0x0000782c, 0x04924914},
-       {0x00007830, 0x21084210},
-       {0x00007834, 0x00140000},
-       {0x00007838, 0x0e4548d8},
-       {0x0000783c, 0x54214514},
-       {0x00007840, 0x02025830},
-       {0x00007844, 0x71c0d388},
-       {0x00007848, 0x934934a8},
-       {0x00007850, 0x00000000},
-       {0x00007854, 0x00000800},
-       {0x00007858, 0x6c35ffd2},
-       {0x0000785c, 0x6db6c000},
-       {0x00007860, 0x6db6cb30},
-       {0x00007864, 0x6db6cb6c},
-       {0x00007868, 0x0501e200},
-       {0x0000786c, 0x0094128d},
-       {0x00007870, 0x976ee392},
-       {0x00007874, 0xf75ff6fc},
-       {0x00007878, 0x00040000},
-       {0x0000787c, 0xdb003012},
-       {0x00007880, 0x04924914},
-       {0x00007884, 0x21084210},
-       {0x00007888, 0x001b6db0},
-       {0x0000788c, 0x00376b63},
-       {0x00007890, 0x06db6db6},
-       {0x00007894, 0x006d8000},
-       {0x00007898, 0x48100000},
-       {0x0000789c, 0x00000000},
-       {0x000078a0, 0x08000000},
-       {0x000078a4, 0x0007ffd8},
-       {0x000078a8, 0x0007ffd8},
-       {0x000078ac, 0x001c0020},
-       {0x000078b0, 0x00060aeb},
-       {0x000078b4, 0x40008080},
-       {0x000078b8, 0x2a850160},
-};
-
-static const u32 ar9287Common_normal_cck_fir_coeff_9287_1_1[][2] = {
-       /* Addr      allmodes  */
-       {0x0000a1f4, 0x00fffeff},
-       {0x0000a1f8, 0x00f5f9ff},
-       {0x0000a1fc, 0xb79f6427},
-};
-
-static const u32 ar9287Common_japan_2484_cck_fir_coeff_9287_1_1[][2] = {
-       /* Addr      allmodes  */
-       {0x0000a1f4, 0x00000000},
-       {0x0000a1f8, 0xefff0301},
-       {0x0000a1fc, 0xca9228ee},
-};
-
-static const u32 ar9287Modes_tx_gain_9287_1_1[][6] = {
-       {0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a304, 0x00000000, 0x00000000, 0x00004002, 0x00004002, 0x00004002},
-       {0x0000a308, 0x00000000, 0x00000000, 0x00008004, 0x00008004, 0x00008004},
-       {0x0000a30c, 0x00000000, 0x00000000, 0x0000c00a, 0x0000c00a, 0x0000c00a},
-       {0x0000a310, 0x00000000, 0x00000000, 0x0001000c, 0x0001000c, 0x0001000c},
-       {0x0000a314, 0x00000000, 0x00000000, 0x0001420b, 0x0001420b, 0x0001420b},
-       {0x0000a318, 0x00000000, 0x00000000, 0x0001824a, 0x0001824a, 0x0001824a},
-       {0x0000a31c, 0x00000000, 0x00000000, 0x0001c44a, 0x0001c44a, 0x0001c44a},
-       {0x0000a320, 0x00000000, 0x00000000, 0x0002064a, 0x0002064a, 0x0002064a},
-       {0x0000a324, 0x00000000, 0x00000000, 0x0002484a, 0x0002484a, 0x0002484a},
-       {0x0000a328, 0x00000000, 0x00000000, 0x00028a4a, 0x00028a4a, 0x00028a4a},
-       {0x0000a32c, 0x00000000, 0x00000000, 0x0002cc4a, 0x0002cc4a, 0x0002cc4a},
-       {0x0000a330, 0x00000000, 0x00000000, 0x00030e4a, 0x00030e4a, 0x00030e4a},
-       {0x0000a334, 0x00000000, 0x00000000, 0x00034e8a, 0x00034e8a, 0x00034e8a},
-       {0x0000a338, 0x00000000, 0x00000000, 0x00038e8c, 0x00038e8c, 0x00038e8c},
-       {0x0000a33c, 0x00000000, 0x00000000, 0x0003cecc, 0x0003cecc, 0x0003cecc},
-       {0x0000a340, 0x00000000, 0x00000000, 0x00040ed4, 0x00040ed4, 0x00040ed4},
-       {0x0000a344, 0x00000000, 0x00000000, 0x00044edc, 0x00044edc, 0x00044edc},
-       {0x0000a348, 0x00000000, 0x00000000, 0x00048ede, 0x00048ede, 0x00048ede},
-       {0x0000a34c, 0x00000000, 0x00000000, 0x0004cf1e, 0x0004cf1e, 0x0004cf1e},
-       {0x0000a350, 0x00000000, 0x00000000, 0x00050f5e, 0x00050f5e, 0x00050f5e},
-       {0x0000a354, 0x00000000, 0x00000000, 0x00054f9e, 0x00054f9e, 0x00054f9e},
-       {0x0000a780, 0x00000000, 0x00000000, 0x00000062, 0x00000062, 0x00000062},
-       {0x0000a784, 0x00000000, 0x00000000, 0x00004064, 0x00004064, 0x00004064},
-       {0x0000a788, 0x00000000, 0x00000000, 0x000080a4, 0x000080a4, 0x000080a4},
-       {0x0000a78c, 0x00000000, 0x00000000, 0x0000c0aa, 0x0000c0aa, 0x0000c0aa},
-       {0x0000a790, 0x00000000, 0x00000000, 0x000100ac, 0x000100ac, 0x000100ac},
-       {0x0000a794, 0x00000000, 0x00000000, 0x000140b4, 0x000140b4, 0x000140b4},
-       {0x0000a798, 0x00000000, 0x00000000, 0x000180f4, 0x000180f4, 0x000180f4},
-       {0x0000a79c, 0x00000000, 0x00000000, 0x0001c134, 0x0001c134, 0x0001c134},
-       {0x0000a7a0, 0x00000000, 0x00000000, 0x00020174, 0x00020174, 0x00020174},
-       {0x0000a7a4, 0x00000000, 0x00000000, 0x0002417c, 0x0002417c, 0x0002417c},
-       {0x0000a7a8, 0x00000000, 0x00000000, 0x0002817e, 0x0002817e, 0x0002817e},
-       {0x0000a7ac, 0x00000000, 0x00000000, 0x0002c1be, 0x0002c1be, 0x0002c1be},
-       {0x0000a7b0, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe},
-       {0x0000a7b4, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe},
-       {0x0000a7b8, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe},
-       {0x0000a7bc, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe},
-       {0x0000a7c0, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe},
-       {0x0000a7c4, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe},
-       {0x0000a7c8, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe},
-       {0x0000a7cc, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe},
-       {0x0000a7d0, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe},
-       {0x0000a7d4, 0x00000000, 0x00000000, 0x000301fe, 0x000301fe, 0x000301fe},
-       {0x0000a274, 0x0a180000, 0x0a180000, 0x0a1aa000, 0x0a1aa000, 0x0a1aa000},
-};
-
-static const u32 ar9287Modes_rx_gain_9287_1_1[][6] = {
-       {0x00009a00, 0x00000000, 0x00000000, 0x0000a120, 0x0000a120, 0x0000a120},
-       {0x00009a04, 0x00000000, 0x00000000, 0x0000a124, 0x0000a124, 0x0000a124},
-       {0x00009a08, 0x00000000, 0x00000000, 0x0000a128, 0x0000a128, 0x0000a128},
-       {0x00009a0c, 0x00000000, 0x00000000, 0x0000a12c, 0x0000a12c, 0x0000a12c},
-       {0x00009a10, 0x00000000, 0x00000000, 0x0000a130, 0x0000a130, 0x0000a130},
-       {0x00009a14, 0x00000000, 0x00000000, 0x0000a194, 0x0000a194, 0x0000a194},
-       {0x00009a18, 0x00000000, 0x00000000, 0x0000a198, 0x0000a198, 0x0000a198},
-       {0x00009a1c, 0x00000000, 0x00000000, 0x0000a20c, 0x0000a20c, 0x0000a20c},
-       {0x00009a20, 0x00000000, 0x00000000, 0x0000a210, 0x0000a210, 0x0000a210},
-       {0x00009a24, 0x00000000, 0x00000000, 0x0000a284, 0x0000a284, 0x0000a284},
-       {0x00009a28, 0x00000000, 0x00000000, 0x0000a288, 0x0000a288, 0x0000a288},
-       {0x00009a2c, 0x00000000, 0x00000000, 0x0000a28c, 0x0000a28c, 0x0000a28c},
-       {0x00009a30, 0x00000000, 0x00000000, 0x0000a290, 0x0000a290, 0x0000a290},
-       {0x00009a34, 0x00000000, 0x00000000, 0x0000a294, 0x0000a294, 0x0000a294},
-       {0x00009a38, 0x00000000, 0x00000000, 0x0000a2a0, 0x0000a2a0, 0x0000a2a0},
-       {0x00009a3c, 0x00000000, 0x00000000, 0x0000a2a4, 0x0000a2a4, 0x0000a2a4},
-       {0x00009a40, 0x00000000, 0x00000000, 0x0000a2a8, 0x0000a2a8, 0x0000a2a8},
-       {0x00009a44, 0x00000000, 0x00000000, 0x0000a2ac, 0x0000a2ac, 0x0000a2ac},
-       {0x00009a48, 0x00000000, 0x00000000, 0x0000a2b0, 0x0000a2b0, 0x0000a2b0},
-       {0x00009a4c, 0x00000000, 0x00000000, 0x0000a2b4, 0x0000a2b4, 0x0000a2b4},
-       {0x00009a50, 0x00000000, 0x00000000, 0x0000a2b8, 0x0000a2b8, 0x0000a2b8},
-       {0x00009a54, 0x00000000, 0x00000000, 0x0000a2c4, 0x0000a2c4, 0x0000a2c4},
-       {0x00009a58, 0x00000000, 0x00000000, 0x0000a708, 0x0000a708, 0x0000a708},
-       {0x00009a5c, 0x00000000, 0x00000000, 0x0000a70c, 0x0000a70c, 0x0000a70c},
-       {0x00009a60, 0x00000000, 0x00000000, 0x0000a710, 0x0000a710, 0x0000a710},
-       {0x00009a64, 0x00000000, 0x00000000, 0x0000ab04, 0x0000ab04, 0x0000ab04},
-       {0x00009a68, 0x00000000, 0x00000000, 0x0000ab08, 0x0000ab08, 0x0000ab08},
-       {0x00009a6c, 0x00000000, 0x00000000, 0x0000ab0c, 0x0000ab0c, 0x0000ab0c},
-       {0x00009a70, 0x00000000, 0x00000000, 0x0000ab10, 0x0000ab10, 0x0000ab10},
-       {0x00009a74, 0x00000000, 0x00000000, 0x0000ab14, 0x0000ab14, 0x0000ab14},
-       {0x00009a78, 0x00000000, 0x00000000, 0x0000ab18, 0x0000ab18, 0x0000ab18},
-       {0x00009a7c, 0x00000000, 0x00000000, 0x0000ab8c, 0x0000ab8c, 0x0000ab8c},
-       {0x00009a80, 0x00000000, 0x00000000, 0x0000ab90, 0x0000ab90, 0x0000ab90},
-       {0x00009a84, 0x00000000, 0x00000000, 0x0000ab94, 0x0000ab94, 0x0000ab94},
-       {0x00009a88, 0x00000000, 0x00000000, 0x0000ab98, 0x0000ab98, 0x0000ab98},
-       {0x00009a8c, 0x00000000, 0x00000000, 0x0000aba4, 0x0000aba4, 0x0000aba4},
-       {0x00009a90, 0x00000000, 0x00000000, 0x0000aba8, 0x0000aba8, 0x0000aba8},
-       {0x00009a94, 0x00000000, 0x00000000, 0x0000cb04, 0x0000cb04, 0x0000cb04},
-       {0x00009a98, 0x00000000, 0x00000000, 0x0000cb08, 0x0000cb08, 0x0000cb08},
-       {0x00009a9c, 0x00000000, 0x00000000, 0x0000cb0c, 0x0000cb0c, 0x0000cb0c},
-       {0x00009aa0, 0x00000000, 0x00000000, 0x0000cb10, 0x0000cb10, 0x0000cb10},
-       {0x00009aa4, 0x00000000, 0x00000000, 0x0000cb14, 0x0000cb14, 0x0000cb14},
-       {0x00009aa8, 0x00000000, 0x00000000, 0x0000cb18, 0x0000cb18, 0x0000cb18},
-       {0x00009aac, 0x00000000, 0x00000000, 0x0000cb8c, 0x0000cb8c, 0x0000cb8c},
-       {0x00009ab0, 0x00000000, 0x00000000, 0x0000cb90, 0x0000cb90, 0x0000cb90},
-       {0x00009ab4, 0x00000000, 0x00000000, 0x0000cf18, 0x0000cf18, 0x0000cf18},
-       {0x00009ab8, 0x00000000, 0x00000000, 0x0000cf24, 0x0000cf24, 0x0000cf24},
-       {0x00009abc, 0x00000000, 0x00000000, 0x0000cf28, 0x0000cf28, 0x0000cf28},
-       {0x00009ac0, 0x00000000, 0x00000000, 0x0000d314, 0x0000d314, 0x0000d314},
-       {0x00009ac4, 0x00000000, 0x00000000, 0x0000d318, 0x0000d318, 0x0000d318},
-       {0x00009ac8, 0x00000000, 0x00000000, 0x0000d38c, 0x0000d38c, 0x0000d38c},
-       {0x00009acc, 0x00000000, 0x00000000, 0x0000d390, 0x0000d390, 0x0000d390},
-       {0x00009ad0, 0x00000000, 0x00000000, 0x0000d394, 0x0000d394, 0x0000d394},
-       {0x00009ad4, 0x00000000, 0x00000000, 0x0000d398, 0x0000d398, 0x0000d398},
-       {0x00009ad8, 0x00000000, 0x00000000, 0x0000d3a4, 0x0000d3a4, 0x0000d3a4},
-       {0x00009adc, 0x00000000, 0x00000000, 0x0000d3a8, 0x0000d3a8, 0x0000d3a8},
-       {0x00009ae0, 0x00000000, 0x00000000, 0x0000d3ac, 0x0000d3ac, 0x0000d3ac},
-       {0x00009ae4, 0x00000000, 0x00000000, 0x0000d3b0, 0x0000d3b0, 0x0000d3b0},
-       {0x00009ae8, 0x00000000, 0x00000000, 0x0000f380, 0x0000f380, 0x0000f380},
-       {0x00009aec, 0x00000000, 0x00000000, 0x0000f384, 0x0000f384, 0x0000f384},
-       {0x00009af0, 0x00000000, 0x00000000, 0x0000f388, 0x0000f388, 0x0000f388},
-       {0x00009af4, 0x00000000, 0x00000000, 0x0000f710, 0x0000f710, 0x0000f710},
-       {0x00009af8, 0x00000000, 0x00000000, 0x0000f714, 0x0000f714, 0x0000f714},
-       {0x00009afc, 0x00000000, 0x00000000, 0x0000f718, 0x0000f718, 0x0000f718},
-       {0x00009b00, 0x00000000, 0x00000000, 0x0000fb10, 0x0000fb10, 0x0000fb10},
-       {0x00009b04, 0x00000000, 0x00000000, 0x0000fb14, 0x0000fb14, 0x0000fb14},
-       {0x00009b08, 0x00000000, 0x00000000, 0x0000fb18, 0x0000fb18, 0x0000fb18},
-       {0x00009b0c, 0x00000000, 0x00000000, 0x0000fb8c, 0x0000fb8c, 0x0000fb8c},
-       {0x00009b10, 0x00000000, 0x00000000, 0x0000fb90, 0x0000fb90, 0x0000fb90},
-       {0x00009b14, 0x00000000, 0x00000000, 0x0000fb94, 0x0000fb94, 0x0000fb94},
-       {0x00009b18, 0x00000000, 0x00000000, 0x0000ff8c, 0x0000ff8c, 0x0000ff8c},
-       {0x00009b1c, 0x00000000, 0x00000000, 0x0000ff90, 0x0000ff90, 0x0000ff90},
-       {0x00009b20, 0x00000000, 0x00000000, 0x0000ff94, 0x0000ff94, 0x0000ff94},
-       {0x00009b24, 0x00000000, 0x00000000, 0x0000ffa0, 0x0000ffa0, 0x0000ffa0},
-       {0x00009b28, 0x00000000, 0x00000000, 0x0000ffa4, 0x0000ffa4, 0x0000ffa4},
-       {0x00009b2c, 0x00000000, 0x00000000, 0x0000ffa8, 0x0000ffa8, 0x0000ffa8},
-       {0x00009b30, 0x00000000, 0x00000000, 0x0000ffac, 0x0000ffac, 0x0000ffac},
-       {0x00009b34, 0x00000000, 0x00000000, 0x0000ffb0, 0x0000ffb0, 0x0000ffb0},
-       {0x00009b38, 0x00000000, 0x00000000, 0x0000ffb4, 0x0000ffb4, 0x0000ffb4},
-       {0x00009b3c, 0x00000000, 0x00000000, 0x0000ffa1, 0x0000ffa1, 0x0000ffa1},
-       {0x00009b40, 0x00000000, 0x00000000, 0x0000ffa5, 0x0000ffa5, 0x0000ffa5},
-       {0x00009b44, 0x00000000, 0x00000000, 0x0000ffa9, 0x0000ffa9, 0x0000ffa9},
-       {0x00009b48, 0x00000000, 0x00000000, 0x0000ffad, 0x0000ffad, 0x0000ffad},
-       {0x00009b4c, 0x00000000, 0x00000000, 0x0000ffb1, 0x0000ffb1, 0x0000ffb1},
-       {0x00009b50, 0x00000000, 0x00000000, 0x0000ffb5, 0x0000ffb5, 0x0000ffb5},
-       {0x00009b54, 0x00000000, 0x00000000, 0x0000ffb9, 0x0000ffb9, 0x0000ffb9},
-       {0x00009b58, 0x00000000, 0x00000000, 0x0000ffc5, 0x0000ffc5, 0x0000ffc5},
-       {0x00009b5c, 0x00000000, 0x00000000, 0x0000ffc9, 0x0000ffc9, 0x0000ffc9},
-       {0x00009b60, 0x00000000, 0x00000000, 0x0000ffcd, 0x0000ffcd, 0x0000ffcd},
-       {0x00009b64, 0x00000000, 0x00000000, 0x0000ffd1, 0x0000ffd1, 0x0000ffd1},
-       {0x00009b68, 0x00000000, 0x00000000, 0x0000ffd5, 0x0000ffd5, 0x0000ffd5},
-       {0x00009b6c, 0x00000000, 0x00000000, 0x0000ffc2, 0x0000ffc2, 0x0000ffc2},
-       {0x00009b70, 0x00000000, 0x00000000, 0x0000ffc6, 0x0000ffc6, 0x0000ffc6},
-       {0x00009b74, 0x00000000, 0x00000000, 0x0000ffca, 0x0000ffca, 0x0000ffca},
-       {0x00009b78, 0x00000000, 0x00000000, 0x0000ffce, 0x0000ffce, 0x0000ffce},
-       {0x00009b7c, 0x00000000, 0x00000000, 0x0000ffd2, 0x0000ffd2, 0x0000ffd2},
-       {0x00009b80, 0x00000000, 0x00000000, 0x0000ffd6, 0x0000ffd6, 0x0000ffd6},
-       {0x00009b84, 0x00000000, 0x00000000, 0x0000ffda, 0x0000ffda, 0x0000ffda},
-       {0x00009b88, 0x00000000, 0x00000000, 0x0000ffc7, 0x0000ffc7, 0x0000ffc7},
-       {0x00009b8c, 0x00000000, 0x00000000, 0x0000ffcb, 0x0000ffcb, 0x0000ffcb},
-       {0x00009b90, 0x00000000, 0x00000000, 0x0000ffcf, 0x0000ffcf, 0x0000ffcf},
-       {0x00009b94, 0x00000000, 0x00000000, 0x0000ffd3, 0x0000ffd3, 0x0000ffd3},
-       {0x00009b98, 0x00000000, 0x00000000, 0x0000ffd7, 0x0000ffd7, 0x0000ffd7},
-       {0x00009b9c, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009ba0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009ba4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009ba8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009bac, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009bb0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009bb4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009bb8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009bbc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009bc0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009bc4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009bc8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009bcc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009bd0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009bd4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009bd8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009bdc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009be0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009be4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009be8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009bec, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009bf0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009bf4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009bf8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009bfc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000aa00, 0x00000000, 0x00000000, 0x0000a120, 0x0000a120, 0x0000a120},
-       {0x0000aa04, 0x00000000, 0x00000000, 0x0000a124, 0x0000a124, 0x0000a124},
-       {0x0000aa08, 0x00000000, 0x00000000, 0x0000a128, 0x0000a128, 0x0000a128},
-       {0x0000aa0c, 0x00000000, 0x00000000, 0x0000a12c, 0x0000a12c, 0x0000a12c},
-       {0x0000aa10, 0x00000000, 0x00000000, 0x0000a130, 0x0000a130, 0x0000a130},
-       {0x0000aa14, 0x00000000, 0x00000000, 0x0000a194, 0x0000a194, 0x0000a194},
-       {0x0000aa18, 0x00000000, 0x00000000, 0x0000a198, 0x0000a198, 0x0000a198},
-       {0x0000aa1c, 0x00000000, 0x00000000, 0x0000a20c, 0x0000a20c, 0x0000a20c},
-       {0x0000aa20, 0x00000000, 0x00000000, 0x0000a210, 0x0000a210, 0x0000a210},
-       {0x0000aa24, 0x00000000, 0x00000000, 0x0000a284, 0x0000a284, 0x0000a284},
-       {0x0000aa28, 0x00000000, 0x00000000, 0x0000a288, 0x0000a288, 0x0000a288},
-       {0x0000aa2c, 0x00000000, 0x00000000, 0x0000a28c, 0x0000a28c, 0x0000a28c},
-       {0x0000aa30, 0x00000000, 0x00000000, 0x0000a290, 0x0000a290, 0x0000a290},
-       {0x0000aa34, 0x00000000, 0x00000000, 0x0000a294, 0x0000a294, 0x0000a294},
-       {0x0000aa38, 0x00000000, 0x00000000, 0x0000a2a0, 0x0000a2a0, 0x0000a2a0},
-       {0x0000aa3c, 0x00000000, 0x00000000, 0x0000a2a4, 0x0000a2a4, 0x0000a2a4},
-       {0x0000aa40, 0x00000000, 0x00000000, 0x0000a2a8, 0x0000a2a8, 0x0000a2a8},
-       {0x0000aa44, 0x00000000, 0x00000000, 0x0000a2ac, 0x0000a2ac, 0x0000a2ac},
-       {0x0000aa48, 0x00000000, 0x00000000, 0x0000a2b0, 0x0000a2b0, 0x0000a2b0},
-       {0x0000aa4c, 0x00000000, 0x00000000, 0x0000a2b4, 0x0000a2b4, 0x0000a2b4},
-       {0x0000aa50, 0x00000000, 0x00000000, 0x0000a2b8, 0x0000a2b8, 0x0000a2b8},
-       {0x0000aa54, 0x00000000, 0x00000000, 0x0000a2c4, 0x0000a2c4, 0x0000a2c4},
-       {0x0000aa58, 0x00000000, 0x00000000, 0x0000a708, 0x0000a708, 0x0000a708},
-       {0x0000aa5c, 0x00000000, 0x00000000, 0x0000a70c, 0x0000a70c, 0x0000a70c},
-       {0x0000aa60, 0x00000000, 0x00000000, 0x0000a710, 0x0000a710, 0x0000a710},
-       {0x0000aa64, 0x00000000, 0x00000000, 0x0000ab04, 0x0000ab04, 0x0000ab04},
-       {0x0000aa68, 0x00000000, 0x00000000, 0x0000ab08, 0x0000ab08, 0x0000ab08},
-       {0x0000aa6c, 0x00000000, 0x00000000, 0x0000ab0c, 0x0000ab0c, 0x0000ab0c},
-       {0x0000aa70, 0x00000000, 0x00000000, 0x0000ab10, 0x0000ab10, 0x0000ab10},
-       {0x0000aa74, 0x00000000, 0x00000000, 0x0000ab14, 0x0000ab14, 0x0000ab14},
-       {0x0000aa78, 0x00000000, 0x00000000, 0x0000ab18, 0x0000ab18, 0x0000ab18},
-       {0x0000aa7c, 0x00000000, 0x00000000, 0x0000ab8c, 0x0000ab8c, 0x0000ab8c},
-       {0x0000aa80, 0x00000000, 0x00000000, 0x0000ab90, 0x0000ab90, 0x0000ab90},
-       {0x0000aa84, 0x00000000, 0x00000000, 0x0000ab94, 0x0000ab94, 0x0000ab94},
-       {0x0000aa88, 0x00000000, 0x00000000, 0x0000ab98, 0x0000ab98, 0x0000ab98},
-       {0x0000aa8c, 0x00000000, 0x00000000, 0x0000aba4, 0x0000aba4, 0x0000aba4},
-       {0x0000aa90, 0x00000000, 0x00000000, 0x0000aba8, 0x0000aba8, 0x0000aba8},
-       {0x0000aa94, 0x00000000, 0x00000000, 0x0000cb04, 0x0000cb04, 0x0000cb04},
-       {0x0000aa98, 0x00000000, 0x00000000, 0x0000cb08, 0x0000cb08, 0x0000cb08},
-       {0x0000aa9c, 0x00000000, 0x00000000, 0x0000cb0c, 0x0000cb0c, 0x0000cb0c},
-       {0x0000aaa0, 0x00000000, 0x00000000, 0x0000cb10, 0x0000cb10, 0x0000cb10},
-       {0x0000aaa4, 0x00000000, 0x00000000, 0x0000cb14, 0x0000cb14, 0x0000cb14},
-       {0x0000aaa8, 0x00000000, 0x00000000, 0x0000cb18, 0x0000cb18, 0x0000cb18},
-       {0x0000aaac, 0x00000000, 0x00000000, 0x0000cb8c, 0x0000cb8c, 0x0000cb8c},
-       {0x0000aab0, 0x00000000, 0x00000000, 0x0000cb90, 0x0000cb90, 0x0000cb90},
-       {0x0000aab4, 0x00000000, 0x00000000, 0x0000cf18, 0x0000cf18, 0x0000cf18},
-       {0x0000aab8, 0x00000000, 0x00000000, 0x0000cf24, 0x0000cf24, 0x0000cf24},
-       {0x0000aabc, 0x00000000, 0x00000000, 0x0000cf28, 0x0000cf28, 0x0000cf28},
-       {0x0000aac0, 0x00000000, 0x00000000, 0x0000d314, 0x0000d314, 0x0000d314},
-       {0x0000aac4, 0x00000000, 0x00000000, 0x0000d318, 0x0000d318, 0x0000d318},
-       {0x0000aac8, 0x00000000, 0x00000000, 0x0000d38c, 0x0000d38c, 0x0000d38c},
-       {0x0000aacc, 0x00000000, 0x00000000, 0x0000d390, 0x0000d390, 0x0000d390},
-       {0x0000aad0, 0x00000000, 0x00000000, 0x0000d394, 0x0000d394, 0x0000d394},
-       {0x0000aad4, 0x00000000, 0x00000000, 0x0000d398, 0x0000d398, 0x0000d398},
-       {0x0000aad8, 0x00000000, 0x00000000, 0x0000d3a4, 0x0000d3a4, 0x0000d3a4},
-       {0x0000aadc, 0x00000000, 0x00000000, 0x0000d3a8, 0x0000d3a8, 0x0000d3a8},
-       {0x0000aae0, 0x00000000, 0x00000000, 0x0000d3ac, 0x0000d3ac, 0x0000d3ac},
-       {0x0000aae4, 0x00000000, 0x00000000, 0x0000d3b0, 0x0000d3b0, 0x0000d3b0},
-       {0x0000aae8, 0x00000000, 0x00000000, 0x0000f380, 0x0000f380, 0x0000f380},
-       {0x0000aaec, 0x00000000, 0x00000000, 0x0000f384, 0x0000f384, 0x0000f384},
-       {0x0000aaf0, 0x00000000, 0x00000000, 0x0000f388, 0x0000f388, 0x0000f388},
-       {0x0000aaf4, 0x00000000, 0x00000000, 0x0000f710, 0x0000f710, 0x0000f710},
-       {0x0000aaf8, 0x00000000, 0x00000000, 0x0000f714, 0x0000f714, 0x0000f714},
-       {0x0000aafc, 0x00000000, 0x00000000, 0x0000f718, 0x0000f718, 0x0000f718},
-       {0x0000ab00, 0x00000000, 0x00000000, 0x0000fb10, 0x0000fb10, 0x0000fb10},
-       {0x0000ab04, 0x00000000, 0x00000000, 0x0000fb14, 0x0000fb14, 0x0000fb14},
-       {0x0000ab08, 0x00000000, 0x00000000, 0x0000fb18, 0x0000fb18, 0x0000fb18},
-       {0x0000ab0c, 0x00000000, 0x00000000, 0x0000fb8c, 0x0000fb8c, 0x0000fb8c},
-       {0x0000ab10, 0x00000000, 0x00000000, 0x0000fb90, 0x0000fb90, 0x0000fb90},
-       {0x0000ab14, 0x00000000, 0x00000000, 0x0000fb94, 0x0000fb94, 0x0000fb94},
-       {0x0000ab18, 0x00000000, 0x00000000, 0x0000ff8c, 0x0000ff8c, 0x0000ff8c},
-       {0x0000ab1c, 0x00000000, 0x00000000, 0x0000ff90, 0x0000ff90, 0x0000ff90},
-       {0x0000ab20, 0x00000000, 0x00000000, 0x0000ff94, 0x0000ff94, 0x0000ff94},
-       {0x0000ab24, 0x00000000, 0x00000000, 0x0000ffa0, 0x0000ffa0, 0x0000ffa0},
-       {0x0000ab28, 0x00000000, 0x00000000, 0x0000ffa4, 0x0000ffa4, 0x0000ffa4},
-       {0x0000ab2c, 0x00000000, 0x00000000, 0x0000ffa8, 0x0000ffa8, 0x0000ffa8},
-       {0x0000ab30, 0x00000000, 0x00000000, 0x0000ffac, 0x0000ffac, 0x0000ffac},
-       {0x0000ab34, 0x00000000, 0x00000000, 0x0000ffb0, 0x0000ffb0, 0x0000ffb0},
-       {0x0000ab38, 0x00000000, 0x00000000, 0x0000ffb4, 0x0000ffb4, 0x0000ffb4},
-       {0x0000ab3c, 0x00000000, 0x00000000, 0x0000ffa1, 0x0000ffa1, 0x0000ffa1},
-       {0x0000ab40, 0x00000000, 0x00000000, 0x0000ffa5, 0x0000ffa5, 0x0000ffa5},
-       {0x0000ab44, 0x00000000, 0x00000000, 0x0000ffa9, 0x0000ffa9, 0x0000ffa9},
-       {0x0000ab48, 0x00000000, 0x00000000, 0x0000ffad, 0x0000ffad, 0x0000ffad},
-       {0x0000ab4c, 0x00000000, 0x00000000, 0x0000ffb1, 0x0000ffb1, 0x0000ffb1},
-       {0x0000ab50, 0x00000000, 0x00000000, 0x0000ffb5, 0x0000ffb5, 0x0000ffb5},
-       {0x0000ab54, 0x00000000, 0x00000000, 0x0000ffb9, 0x0000ffb9, 0x0000ffb9},
-       {0x0000ab58, 0x00000000, 0x00000000, 0x0000ffc5, 0x0000ffc5, 0x0000ffc5},
-       {0x0000ab5c, 0x00000000, 0x00000000, 0x0000ffc9, 0x0000ffc9, 0x0000ffc9},
-       {0x0000ab60, 0x00000000, 0x00000000, 0x0000ffcd, 0x0000ffcd, 0x0000ffcd},
-       {0x0000ab64, 0x00000000, 0x00000000, 0x0000ffd1, 0x0000ffd1, 0x0000ffd1},
-       {0x0000ab68, 0x00000000, 0x00000000, 0x0000ffd5, 0x0000ffd5, 0x0000ffd5},
-       {0x0000ab6c, 0x00000000, 0x00000000, 0x0000ffc2, 0x0000ffc2, 0x0000ffc2},
-       {0x0000ab70, 0x00000000, 0x00000000, 0x0000ffc6, 0x0000ffc6, 0x0000ffc6},
-       {0x0000ab74, 0x00000000, 0x00000000, 0x0000ffca, 0x0000ffca, 0x0000ffca},
-       {0x0000ab78, 0x00000000, 0x00000000, 0x0000ffce, 0x0000ffce, 0x0000ffce},
-       {0x0000ab7c, 0x00000000, 0x00000000, 0x0000ffd2, 0x0000ffd2, 0x0000ffd2},
-       {0x0000ab80, 0x00000000, 0x00000000, 0x0000ffd6, 0x0000ffd6, 0x0000ffd6},
-       {0x0000ab84, 0x00000000, 0x00000000, 0x0000ffda, 0x0000ffda, 0x0000ffda},
-       {0x0000ab88, 0x00000000, 0x00000000, 0x0000ffc7, 0x0000ffc7, 0x0000ffc7},
-       {0x0000ab8c, 0x00000000, 0x00000000, 0x0000ffcb, 0x0000ffcb, 0x0000ffcb},
-       {0x0000ab90, 0x00000000, 0x00000000, 0x0000ffcf, 0x0000ffcf, 0x0000ffcf},
-       {0x0000ab94, 0x00000000, 0x00000000, 0x0000ffd3, 0x0000ffd3, 0x0000ffd3},
-       {0x0000ab98, 0x00000000, 0x00000000, 0x0000ffd7, 0x0000ffd7, 0x0000ffd7},
-       {0x0000ab9c, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000aba0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000aba4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000aba8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abac, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abb0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abb4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abb8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abbc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abc0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abc4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abc8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abcc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abd0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abd4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abd8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abdc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abe0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abe4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abe8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abec, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abf0, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abf4, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abf8, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x0000abfc, 0x00000000, 0x00000000, 0x0000ffdb, 0x0000ffdb, 0x0000ffdb},
-       {0x00009848, 0x00000000, 0x00000000, 0x00001067, 0x00001067, 0x00001067},
-       {0x0000a848, 0x00000000, 0x00000000, 0x00001067, 0x00001067, 0x00001067},
-};
-
-static const u32 ar9287PciePhy_clkreq_always_on_L1_9287_1_1[][2] = {
-       /* Addr      allmodes  */
-       {0x00004040, 0x9248fd00},
-       {0x00004040, 0x24924924},
-       {0x00004040, 0xa8000019},
-       {0x00004040, 0x13160820},
-       {0x00004040, 0xe5980560},
-       {0x00004040, 0xc01dcffd},
-       {0x00004040, 0x1aaabe41},
-       {0x00004040, 0xbe105554},
-       {0x00004040, 0x00043007},
-       {0x00004044, 0x00000000},
-};
-
-static const u32 ar9287PciePhy_clkreq_off_L1_9287_1_1[][2] = {
-       /* Addr      allmodes  */
-       {0x00004040, 0x9248fd00},
-       {0x00004040, 0x24924924},
-       {0x00004040, 0xa8000019},
-       {0x00004040, 0x13160820},
-       {0x00004040, 0xe5980560},
-       {0x00004040, 0xc01dcffc},
-       {0x00004040, 0x1aaabe41},
-       {0x00004040, 0xbe105554},
-       {0x00004040, 0x00043007},
-       {0x00004044, 0x00000000},
-};
-
-static const u32 ar9271Modes_9271[][6] = {
-       {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160, 0x000001e0},
-       {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c, 0x000001e0},
-       {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38, 0x00001180},
-       {0x000010f0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008},
-       {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00, 0x06e006e0},
-       {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b, 0x0988004f},
-       {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440, 0x00006880},
-       {0x00009804, 0x00000300, 0x000003c4, 0x000003c4, 0x00000300, 0x00000303},
-       {0x00009820, 0x02020200, 0x02020200, 0x02020200, 0x02020200, 0x02020200},
-       {0x00009824, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e},
-       {0x00009828, 0x3a020001, 0x3a020001, 0x3a020001, 0x3a020001, 0x3a020001},
-       {0x00009834, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e},
-       {0x00009838, 0x00000007, 0x00000007, 0x00000007, 0x00000007, 0x00000007},
-       {0x00009840, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e, 0x206a012e},
-       {0x00009844, 0x0372161e, 0x0372161e, 0x03721620, 0x03721620, 0x037216a0},
-       {0x00009848, 0x00001066, 0x00001066, 0x00001053, 0x00001053, 0x00001059},
-       {0x0000a848, 0x00001066, 0x00001066, 0x00001053, 0x00001053, 0x00001059},
-       {0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2},
-       {0x00009858, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e},
-       {0x0000985c, 0x3139605e, 0x3139605e, 0x3137605e, 0x3137605e, 0x3139605e},
-       {0x00009860, 0x00058d18, 0x00058d18, 0x00058d18, 0x00058d18, 0x00058d18},
-       {0x00009864, 0x0000fe00, 0x0000fe00, 0x0001ce00, 0x0001ce00, 0x0001ce00},
-       {0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0},
-       {0x0000986c, 0x06903081, 0x06903081, 0x06903881, 0x06903881, 0x06903881},
-       {0x00009910, 0x30002310, 0x30002310, 0x30002310, 0x30002310, 0x30002310},
-       {0x00009914, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898, 0x000007d0},
-       {0x00009918, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b, 0x00000016},
-       {0x00009924, 0xd00a8007, 0xd00a8007, 0xd00a800d, 0xd00a800d, 0xd00a800d},
-       {0x00009944, 0xffbc1010, 0xffbc1010, 0xffbc1020, 0xffbc1020, 0xffbc1010},
-       {0x00009960, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00009964, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x000099b8, 0x0000421c, 0x0000421c, 0x0000421c, 0x0000421c, 0x0000421c},
-       {0x000099bc, 0x00000600, 0x00000600, 0x00000c00, 0x00000c00, 0x00000c00},
-       {0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4},
-       {0x000099c4, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77, 0x06336f77},
-       {0x000099c8, 0x6af6532f, 0x6af6532f, 0x6af6532f, 0x6af6532f, 0x6af6532f},
-       {0x000099cc, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8, 0x08f186c8},
-       {0x000099d0, 0x00046384, 0x00046384, 0x00046384, 0x00046384, 0x00046384},
-       {0x000099d4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x000099d8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00009a00, 0x00000000, 0x00000000, 0x00058084, 0x00058084, 0x00000000},
-       {0x00009a04, 0x00000000, 0x00000000, 0x00058088, 0x00058088, 0x00000000},
-       {0x00009a08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c, 0x00000000},
-       {0x00009a0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100, 0x00000000},
-       {0x00009a10, 0x00000000, 0x00000000, 0x00058104, 0x00058104, 0x00000000},
-       {0x00009a14, 0x00000000, 0x00000000, 0x00058108, 0x00058108, 0x00000000},
-       {0x00009a18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c, 0x00000000},
-       {0x00009a1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110, 0x00000000},
-       {0x00009a20, 0x00000000, 0x00000000, 0x00058114, 0x00058114, 0x00000000},
-       {0x00009a24, 0x00000000, 0x00000000, 0x00058180, 0x00058180, 0x00000000},
-       {0x00009a28, 0x00000000, 0x00000000, 0x00058184, 0x00058184, 0x00000000},
-       {0x00009a2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188, 0x00000000},
-       {0x00009a30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c, 0x00000000},
-       {0x00009a34, 0x00000000, 0x00000000, 0x00058190, 0x00058190, 0x00000000},
-       {0x00009a38, 0x00000000, 0x00000000, 0x00058194, 0x00058194, 0x00000000},
-       {0x00009a3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0, 0x00000000},
-       {0x00009a40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c, 0x00000000},
-       {0x00009a44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8, 0x00000000},
-       {0x00009a48, 0x00000000, 0x00000000, 0x00058284, 0x00058284, 0x00000000},
-       {0x00009a4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288, 0x00000000},
-       {0x00009a50, 0x00000000, 0x00000000, 0x00058224, 0x00058224, 0x00000000},
-       {0x00009a54, 0x00000000, 0x00000000, 0x00058290, 0x00058290, 0x00000000},
-       {0x00009a58, 0x00000000, 0x00000000, 0x00058300, 0x00058300, 0x00000000},
-       {0x00009a5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304, 0x00000000},
-       {0x00009a60, 0x00000000, 0x00000000, 0x00058308, 0x00058308, 0x00000000},
-       {0x00009a64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c, 0x00000000},
-       {0x00009a68, 0x00000000, 0x00000000, 0x00058380, 0x00058380, 0x00000000},
-       {0x00009a6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384, 0x00000000},
-       {0x00009a70, 0x00000000, 0x00000000, 0x00068700, 0x00068700, 0x00000000},
-       {0x00009a74, 0x00000000, 0x00000000, 0x00068704, 0x00068704, 0x00000000},
-       {0x00009a78, 0x00000000, 0x00000000, 0x00068708, 0x00068708, 0x00000000},
-       {0x00009a7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c, 0x00000000},
-       {0x00009a80, 0x00000000, 0x00000000, 0x00068780, 0x00068780, 0x00000000},
-       {0x00009a84, 0x00000000, 0x00000000, 0x00068784, 0x00068784, 0x00000000},
-       {0x00009a88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00, 0x00000000},
-       {0x00009a8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04, 0x00000000},
-       {0x00009a90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08, 0x00000000},
-       {0x00009a94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c, 0x00000000},
-       {0x00009a98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80, 0x00000000},
-       {0x00009a9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84, 0x00000000},
-       {0x00009aa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88, 0x00000000},
-       {0x00009aa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c, 0x00000000},
-       {0x00009aa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90, 0x00000000},
-       {0x00009aac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80, 0x00000000},
-       {0x00009ab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84, 0x00000000},
-       {0x00009ab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88, 0x00000000},
-       {0x00009ab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c, 0x00000000},
-       {0x00009abc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90, 0x00000000},
-       {0x00009ac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c, 0x00000000},
-       {0x00009ac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310, 0x00000000},
-       {0x00009ac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384, 0x00000000},
-       {0x00009acc, 0x00000000, 0x00000000, 0x000db388, 0x000db388, 0x00000000},
-       {0x00009ad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324, 0x00000000},
-       {0x00009ad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704, 0x00000000},
-       {0x00009ad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4, 0x00000000},
-       {0x00009adc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8, 0x00000000},
-       {0x00009ae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710, 0x00000000},
-       {0x00009ae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714, 0x00000000},
-       {0x00009ae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720, 0x00000000},
-       {0x00009aec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724, 0x00000000},
-       {0x00009af0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728, 0x00000000},
-       {0x00009af4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c, 0x00000000},
-       {0x00009af8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0, 0x00000000},
-       {0x00009afc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4, 0x00000000},
-       {0x00009b00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8, 0x00000000},
-       {0x00009b04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0, 0x00000000},
-       {0x00009b08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4, 0x00000000},
-       {0x00009b0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8, 0x00000000},
-       {0x00009b10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5, 0x00000000},
-       {0x00009b14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9, 0x00000000},
-       {0x00009b18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad, 0x00000000},
-       {0x00009b1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1, 0x00000000},
-       {0x00009b20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5, 0x00000000},
-       {0x00009b24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9, 0x00000000},
-       {0x00009b28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5, 0x00000000},
-       {0x00009b2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9, 0x00000000},
-       {0x00009b30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1, 0x00000000},
-       {0x00009b34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5, 0x00000000},
-       {0x00009b38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9, 0x00000000},
-       {0x00009b3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6, 0x00000000},
-       {0x00009b40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca, 0x00000000},
-       {0x00009b44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce, 0x00000000},
-       {0x00009b48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2, 0x00000000},
-       {0x00009b4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6, 0x00000000},
-       {0x00009b50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3, 0x00000000},
-       {0x00009b54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7, 0x00000000},
-       {0x00009b58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb, 0x00000000},
-       {0x00009b5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf, 0x00000000},
-       {0x00009b60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7, 0x00000000},
-       {0x00009b64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009b9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009ba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009ba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009ba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009be0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009be4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009be8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x00009bfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000aa00, 0x00000000, 0x00000000, 0x00058084, 0x00058084, 0x00000000},
-       {0x0000aa04, 0x00000000, 0x00000000, 0x00058088, 0x00058088, 0x00000000},
-       {0x0000aa08, 0x00000000, 0x00000000, 0x0005808c, 0x0005808c, 0x00000000},
-       {0x0000aa0c, 0x00000000, 0x00000000, 0x00058100, 0x00058100, 0x00000000},
-       {0x0000aa10, 0x00000000, 0x00000000, 0x00058104, 0x00058104, 0x00000000},
-       {0x0000aa14, 0x00000000, 0x00000000, 0x00058108, 0x00058108, 0x00000000},
-       {0x0000aa18, 0x00000000, 0x00000000, 0x0005810c, 0x0005810c, 0x00000000},
-       {0x0000aa1c, 0x00000000, 0x00000000, 0x00058110, 0x00058110, 0x00000000},
-       {0x0000aa20, 0x00000000, 0x00000000, 0x00058114, 0x00058114, 0x00000000},
-       {0x0000aa24, 0x00000000, 0x00000000, 0x00058180, 0x00058180, 0x00000000},
-       {0x0000aa28, 0x00000000, 0x00000000, 0x00058184, 0x00058184, 0x00000000},
-       {0x0000aa2c, 0x00000000, 0x00000000, 0x00058188, 0x00058188, 0x00000000},
-       {0x0000aa30, 0x00000000, 0x00000000, 0x0005818c, 0x0005818c, 0x00000000},
-       {0x0000aa34, 0x00000000, 0x00000000, 0x00058190, 0x00058190, 0x00000000},
-       {0x0000aa38, 0x00000000, 0x00000000, 0x00058194, 0x00058194, 0x00000000},
-       {0x0000aa3c, 0x00000000, 0x00000000, 0x000581a0, 0x000581a0, 0x00000000},
-       {0x0000aa40, 0x00000000, 0x00000000, 0x0005820c, 0x0005820c, 0x00000000},
-       {0x0000aa44, 0x00000000, 0x00000000, 0x000581a8, 0x000581a8, 0x00000000},
-       {0x0000aa48, 0x00000000, 0x00000000, 0x00058284, 0x00058284, 0x00000000},
-       {0x0000aa4c, 0x00000000, 0x00000000, 0x00058288, 0x00058288, 0x00000000},
-       {0x0000aa50, 0x00000000, 0x00000000, 0x00058224, 0x00058224, 0x00000000},
-       {0x0000aa54, 0x00000000, 0x00000000, 0x00058290, 0x00058290, 0x00000000},
-       {0x0000aa58, 0x00000000, 0x00000000, 0x00058300, 0x00058300, 0x00000000},
-       {0x0000aa5c, 0x00000000, 0x00000000, 0x00058304, 0x00058304, 0x00000000},
-       {0x0000aa60, 0x00000000, 0x00000000, 0x00058308, 0x00058308, 0x00000000},
-       {0x0000aa64, 0x00000000, 0x00000000, 0x0005830c, 0x0005830c, 0x00000000},
-       {0x0000aa68, 0x00000000, 0x00000000, 0x00058380, 0x00058380, 0x00000000},
-       {0x0000aa6c, 0x00000000, 0x00000000, 0x00058384, 0x00058384, 0x00000000},
-       {0x0000aa70, 0x00000000, 0x00000000, 0x00068700, 0x00068700, 0x00000000},
-       {0x0000aa74, 0x00000000, 0x00000000, 0x00068704, 0x00068704, 0x00000000},
-       {0x0000aa78, 0x00000000, 0x00000000, 0x00068708, 0x00068708, 0x00000000},
-       {0x0000aa7c, 0x00000000, 0x00000000, 0x0006870c, 0x0006870c, 0x00000000},
-       {0x0000aa80, 0x00000000, 0x00000000, 0x00068780, 0x00068780, 0x00000000},
-       {0x0000aa84, 0x00000000, 0x00000000, 0x00068784, 0x00068784, 0x00000000},
-       {0x0000aa88, 0x00000000, 0x00000000, 0x00078b00, 0x00078b00, 0x00000000},
-       {0x0000aa8c, 0x00000000, 0x00000000, 0x00078b04, 0x00078b04, 0x00000000},
-       {0x0000aa90, 0x00000000, 0x00000000, 0x00078b08, 0x00078b08, 0x00000000},
-       {0x0000aa94, 0x00000000, 0x00000000, 0x00078b0c, 0x00078b0c, 0x00000000},
-       {0x0000aa98, 0x00000000, 0x00000000, 0x00078b80, 0x00078b80, 0x00000000},
-       {0x0000aa9c, 0x00000000, 0x00000000, 0x00078b84, 0x00078b84, 0x00000000},
-       {0x0000aaa0, 0x00000000, 0x00000000, 0x00078b88, 0x00078b88, 0x00000000},
-       {0x0000aaa4, 0x00000000, 0x00000000, 0x00078b8c, 0x00078b8c, 0x00000000},
-       {0x0000aaa8, 0x00000000, 0x00000000, 0x00078b90, 0x00078b90, 0x00000000},
-       {0x0000aaac, 0x00000000, 0x00000000, 0x000caf80, 0x000caf80, 0x00000000},
-       {0x0000aab0, 0x00000000, 0x00000000, 0x000caf84, 0x000caf84, 0x00000000},
-       {0x0000aab4, 0x00000000, 0x00000000, 0x000caf88, 0x000caf88, 0x00000000},
-       {0x0000aab8, 0x00000000, 0x00000000, 0x000caf8c, 0x000caf8c, 0x00000000},
-       {0x0000aabc, 0x00000000, 0x00000000, 0x000caf90, 0x000caf90, 0x00000000},
-       {0x0000aac0, 0x00000000, 0x00000000, 0x000db30c, 0x000db30c, 0x00000000},
-       {0x0000aac4, 0x00000000, 0x00000000, 0x000db310, 0x000db310, 0x00000000},
-       {0x0000aac8, 0x00000000, 0x00000000, 0x000db384, 0x000db384, 0x00000000},
-       {0x0000aacc, 0x00000000, 0x00000000, 0x000db388, 0x000db388, 0x00000000},
-       {0x0000aad0, 0x00000000, 0x00000000, 0x000db324, 0x000db324, 0x00000000},
-       {0x0000aad4, 0x00000000, 0x00000000, 0x000eb704, 0x000eb704, 0x00000000},
-       {0x0000aad8, 0x00000000, 0x00000000, 0x000eb6a4, 0x000eb6a4, 0x00000000},
-       {0x0000aadc, 0x00000000, 0x00000000, 0x000eb6a8, 0x000eb6a8, 0x00000000},
-       {0x0000aae0, 0x00000000, 0x00000000, 0x000eb710, 0x000eb710, 0x00000000},
-       {0x0000aae4, 0x00000000, 0x00000000, 0x000eb714, 0x000eb714, 0x00000000},
-       {0x0000aae8, 0x00000000, 0x00000000, 0x000eb720, 0x000eb720, 0x00000000},
-       {0x0000aaec, 0x00000000, 0x00000000, 0x000eb724, 0x000eb724, 0x00000000},
-       {0x0000aaf0, 0x00000000, 0x00000000, 0x000eb728, 0x000eb728, 0x00000000},
-       {0x0000aaf4, 0x00000000, 0x00000000, 0x000eb72c, 0x000eb72c, 0x00000000},
-       {0x0000aaf8, 0x00000000, 0x00000000, 0x000eb7a0, 0x000eb7a0, 0x00000000},
-       {0x0000aafc, 0x00000000, 0x00000000, 0x000eb7a4, 0x000eb7a4, 0x00000000},
-       {0x0000ab00, 0x00000000, 0x00000000, 0x000eb7a8, 0x000eb7a8, 0x00000000},
-       {0x0000ab04, 0x00000000, 0x00000000, 0x000eb7b0, 0x000eb7b0, 0x00000000},
-       {0x0000ab08, 0x00000000, 0x00000000, 0x000eb7b4, 0x000eb7b4, 0x00000000},
-       {0x0000ab0c, 0x00000000, 0x00000000, 0x000eb7b8, 0x000eb7b8, 0x00000000},
-       {0x0000ab10, 0x00000000, 0x00000000, 0x000eb7a5, 0x000eb7a5, 0x00000000},
-       {0x0000ab14, 0x00000000, 0x00000000, 0x000eb7a9, 0x000eb7a9, 0x00000000},
-       {0x0000ab18, 0x00000000, 0x00000000, 0x000eb7ad, 0x000eb7ad, 0x00000000},
-       {0x0000ab1c, 0x00000000, 0x00000000, 0x000eb7b1, 0x000eb7b1, 0x00000000},
-       {0x0000ab20, 0x00000000, 0x00000000, 0x000eb7b5, 0x000eb7b5, 0x00000000},
-       {0x0000ab24, 0x00000000, 0x00000000, 0x000eb7b9, 0x000eb7b9, 0x00000000},
-       {0x0000ab28, 0x00000000, 0x00000000, 0x000eb7c5, 0x000eb7c5, 0x00000000},
-       {0x0000ab2c, 0x00000000, 0x00000000, 0x000eb7c9, 0x000eb7c9, 0x00000000},
-       {0x0000ab30, 0x00000000, 0x00000000, 0x000eb7d1, 0x000eb7d1, 0x00000000},
-       {0x0000ab34, 0x00000000, 0x00000000, 0x000eb7d5, 0x000eb7d5, 0x00000000},
-       {0x0000ab38, 0x00000000, 0x00000000, 0x000eb7d9, 0x000eb7d9, 0x00000000},
-       {0x0000ab3c, 0x00000000, 0x00000000, 0x000eb7c6, 0x000eb7c6, 0x00000000},
-       {0x0000ab40, 0x00000000, 0x00000000, 0x000eb7ca, 0x000eb7ca, 0x00000000},
-       {0x0000ab44, 0x00000000, 0x00000000, 0x000eb7ce, 0x000eb7ce, 0x00000000},
-       {0x0000ab48, 0x00000000, 0x00000000, 0x000eb7d2, 0x000eb7d2, 0x00000000},
-       {0x0000ab4c, 0x00000000, 0x00000000, 0x000eb7d6, 0x000eb7d6, 0x00000000},
-       {0x0000ab50, 0x00000000, 0x00000000, 0x000eb7c3, 0x000eb7c3, 0x00000000},
-       {0x0000ab54, 0x00000000, 0x00000000, 0x000eb7c7, 0x000eb7c7, 0x00000000},
-       {0x0000ab58, 0x00000000, 0x00000000, 0x000eb7cb, 0x000eb7cb, 0x00000000},
-       {0x0000ab5c, 0x00000000, 0x00000000, 0x000eb7cf, 0x000eb7cf, 0x00000000},
-       {0x0000ab60, 0x00000000, 0x00000000, 0x000eb7d7, 0x000eb7d7, 0x00000000},
-       {0x0000ab64, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab68, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab6c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab70, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab74, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab78, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab7c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab80, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab84, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab88, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab8c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab90, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab94, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab98, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000ab9c, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000aba0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000aba4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000aba8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abac, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abb0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abb4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abb8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abbc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abc0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abc4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abc8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abcc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abd0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abd4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abd8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abdc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abe0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abe4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abe8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abec, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abf0, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abf4, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abf8, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000abfc, 0x00000000, 0x00000000, 0x000eb7db, 0x000eb7db, 0x00000000},
-       {0x0000a204, 0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x00000004},
-       {0x0000a20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000, 0x0001f000},
-       {0x0000b20c, 0x00000014, 0x00000014, 0x0001f000, 0x0001f000, 0x0001f000},
-       {0x0000a21c, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a, 0x1883800a},
-       {0x0000a230, 0x00000000, 0x00000000, 0x00000210, 0x00000108, 0x00000000},
-       {0x0000a250, 0x0004f000, 0x0004f000, 0x0004a000, 0x0004a000, 0x0004a000},
-       {0x0000a358, 0x7999aa02, 0x7999aa02, 0x7999aa0e, 0x7999aa0e, 0x7999aa0e},
-};
-
-static const u32 ar9271Common_9271[][2] = {
-       /* Addr      allmodes  */
-       {0x0000000c, 0x00000000},
-       {0x00000030, 0x00020045},
-       {0x00000034, 0x00000005},
-       {0x00000040, 0x00000000},
-       {0x00000044, 0x00000008},
-       {0x00000048, 0x00000008},
-       {0x0000004c, 0x00000010},
-       {0x00000050, 0x00000000},
-       {0x00000054, 0x0000001f},
-       {0x00000800, 0x00000000},
-       {0x00000804, 0x00000000},
-       {0x00000808, 0x00000000},
-       {0x0000080c, 0x00000000},
-       {0x00000810, 0x00000000},
-       {0x00000814, 0x00000000},
-       {0x00000818, 0x00000000},
-       {0x0000081c, 0x00000000},
-       {0x00000820, 0x00000000},
-       {0x00000824, 0x00000000},
-       {0x00001040, 0x002ffc0f},
-       {0x00001044, 0x002ffc0f},
-       {0x00001048, 0x002ffc0f},
-       {0x0000104c, 0x002ffc0f},
-       {0x00001050, 0x002ffc0f},
-       {0x00001054, 0x002ffc0f},
-       {0x00001058, 0x002ffc0f},
-       {0x0000105c, 0x002ffc0f},
-       {0x00001060, 0x002ffc0f},
-       {0x00001064, 0x002ffc0f},
-       {0x00001230, 0x00000000},
-       {0x00001270, 0x00000000},
-       {0x00001038, 0x00000000},
-       {0x00001078, 0x00000000},
-       {0x000010b8, 0x00000000},
-       {0x000010f8, 0x00000000},
-       {0x00001138, 0x00000000},
-       {0x00001178, 0x00000000},
-       {0x000011b8, 0x00000000},
-       {0x000011f8, 0x00000000},
-       {0x00001238, 0x00000000},
-       {0x00001278, 0x00000000},
-       {0x000012b8, 0x00000000},
-       {0x000012f8, 0x00000000},
-       {0x00001338, 0x00000000},
-       {0x00001378, 0x00000000},
-       {0x000013b8, 0x00000000},
-       {0x000013f8, 0x00000000},
-       {0x00001438, 0x00000000},
-       {0x00001478, 0x00000000},
-       {0x000014b8, 0x00000000},
-       {0x000014f8, 0x00000000},
-       {0x00001538, 0x00000000},
-       {0x00001578, 0x00000000},
-       {0x000015b8, 0x00000000},
-       {0x000015f8, 0x00000000},
-       {0x00001638, 0x00000000},
-       {0x00001678, 0x00000000},
-       {0x000016b8, 0x00000000},
-       {0x000016f8, 0x00000000},
-       {0x00001738, 0x00000000},
-       {0x00001778, 0x00000000},
-       {0x000017b8, 0x00000000},
-       {0x000017f8, 0x00000000},
-       {0x0000103c, 0x00000000},
-       {0x0000107c, 0x00000000},
-       {0x000010bc, 0x00000000},
-       {0x000010fc, 0x00000000},
-       {0x0000113c, 0x00000000},
-       {0x0000117c, 0x00000000},
-       {0x000011bc, 0x00000000},
-       {0x000011fc, 0x00000000},
-       {0x0000123c, 0x00000000},
-       {0x0000127c, 0x00000000},
-       {0x000012bc, 0x00000000},
-       {0x000012fc, 0x00000000},
-       {0x0000133c, 0x00000000},
-       {0x0000137c, 0x00000000},
-       {0x000013bc, 0x00000000},
-       {0x000013fc, 0x00000000},
-       {0x0000143c, 0x00000000},
-       {0x0000147c, 0x00000000},
-       {0x00004030, 0x00000002},
-       {0x0000403c, 0x00000002},
-       {0x00004024, 0x0000001f},
-       {0x00004060, 0x00000000},
-       {0x00004064, 0x00000000},
-       {0x00008004, 0x00000000},
-       {0x00008008, 0x00000000},
-       {0x0000800c, 0x00000000},
-       {0x00008018, 0x00000700},
-       {0x00008020, 0x00000000},
-       {0x00008038, 0x00000000},
-       {0x0000803c, 0x00000000},
-       {0x00008048, 0x00000000},
-       {0x00008054, 0x00000000},
-       {0x00008058, 0x00000000},
-       {0x0000805c, 0x000fc78f},
-       {0x00008060, 0x0000000f},
-       {0x00008064, 0x00000000},
-       {0x00008070, 0x00000000},
-       {0x000080b0, 0x00000000},
-       {0x000080b4, 0x00000000},
-       {0x000080b8, 0x00000000},
-       {0x000080bc, 0x00000000},
-       {0x000080c0, 0x2a80001a},
-       {0x000080c4, 0x05dc01e0},
-       {0x000080c8, 0x1f402710},
-       {0x000080cc, 0x01f40000},
-       {0x000080d0, 0x00001e00},
-       {0x000080d4, 0x00000000},
-       {0x000080d8, 0x00400000},
-       {0x000080e0, 0xffffffff},
-       {0x000080e4, 0x0000ffff},
-       {0x000080e8, 0x003f3f3f},
-       {0x000080ec, 0x00000000},
-       {0x000080f0, 0x00000000},
-       {0x000080f4, 0x00000000},
-       {0x000080f8, 0x00000000},
-       {0x000080fc, 0x00020000},
-       {0x00008100, 0x00020000},
-       {0x00008104, 0x00000001},
-       {0x00008108, 0x00000052},
-       {0x0000810c, 0x00000000},
-       {0x00008110, 0x00000168},
-       {0x00008118, 0x000100aa},
-       {0x0000811c, 0x00003210},
-       {0x00008120, 0x08f04810},
-       {0x00008124, 0x00000000},
-       {0x00008128, 0x00000000},
-       {0x0000812c, 0x00000000},
-       {0x00008130, 0x00000000},
-       {0x00008134, 0x00000000},
-       {0x00008138, 0x00000000},
-       {0x0000813c, 0x00000000},
-       {0x00008144, 0xffffffff},
-       {0x00008168, 0x00000000},
-       {0x0000816c, 0x00000000},
-       {0x00008170, 0x32143320},
-       {0x00008174, 0xfaa4fa50},
-       {0x00008178, 0x00000100},
-       {0x0000817c, 0x00000000},
-       {0x000081c0, 0x00000000},
-       {0x000081d0, 0x0000320a},
-       {0x000081ec, 0x00000000},
-       {0x000081f0, 0x00000000},
-       {0x000081f4, 0x00000000},
-       {0x000081f8, 0x00000000},
-       {0x000081fc, 0x00000000},
-       {0x00008200, 0x00000000},
-       {0x00008204, 0x00000000},
-       {0x00008208, 0x00000000},
-       {0x0000820c, 0x00000000},
-       {0x00008210, 0x00000000},
-       {0x00008214, 0x00000000},
-       {0x00008218, 0x00000000},
-       {0x0000821c, 0x00000000},
-       {0x00008220, 0x00000000},
-       {0x00008224, 0x00000000},
-       {0x00008228, 0x00000000},
-       {0x0000822c, 0x00000000},
-       {0x00008230, 0x00000000},
-       {0x00008234, 0x00000000},
-       {0x00008238, 0x00000000},
-       {0x0000823c, 0x00000000},
-       {0x00008240, 0x00100000},
-       {0x00008244, 0x0010f400},
-       {0x00008248, 0x00000100},
-       {0x0000824c, 0x0001e800},
-       {0x00008250, 0x00000000},
-       {0x00008254, 0x00000000},
-       {0x00008258, 0x00000000},
-       {0x0000825c, 0x400000ff},
-       {0x00008260, 0x00080922},
-       {0x00008264, 0x88a00010},
-       {0x00008270, 0x00000000},
-       {0x00008274, 0x40000000},
-       {0x00008278, 0x003e4180},
-       {0x0000827c, 0x00000000},
-       {0x00008284, 0x0000002c},
-       {0x00008288, 0x0000002c},
-       {0x0000828c, 0x00000000},
-       {0x00008294, 0x00000000},
-       {0x00008298, 0x00000000},
-       {0x0000829c, 0x00000000},
-       {0x00008300, 0x00000040},
-       {0x00008314, 0x00000000},
-       {0x00008328, 0x00000000},
-       {0x0000832c, 0x00000001},
-       {0x00008330, 0x00000302},
-       {0x00008334, 0x00000e00},
-       {0x00008338, 0x00ff0000},
-       {0x0000833c, 0x00000000},
-       {0x00008340, 0x00010380},
-       {0x00008344, 0x00581043},
-       {0x00007010, 0x00000030},
-       {0x00007034, 0x00000002},
-       {0x00007038, 0x000004c2},
-       {0x00007800, 0x00140000},
-       {0x00007804, 0x0e4548d8},
-       {0x00007808, 0x54214514},
-       {0x0000780c, 0x02025820},
-       {0x00007810, 0x71c0d388},
-       {0x00007814, 0x924934a8},
-       {0x0000781c, 0x00000000},
-       {0x00007828, 0x66964300},
-       {0x0000782c, 0x8db6d961},
-       {0x00007830, 0x8db6d96c},
-       {0x00007834, 0x6140008b},
-       {0x0000783c, 0x72ee0a72},
-       {0x00007840, 0xbbfffffc},
-       {0x00007844, 0x000c0db6},
-       {0x00007848, 0x6db6246f},
-       {0x0000784c, 0x6d9b66db},
-       {0x00007850, 0x6d8c6dba},
-       {0x00007854, 0x00040000},
-       {0x00007858, 0xdb003012},
-       {0x0000785c, 0x04924914},
-       {0x00007860, 0x21084210},
-       {0x00007864, 0xf7d7ffde},
-       {0x00007868, 0xc2034080},
-       {0x00007870, 0x10142c00},
-       {0x00009808, 0x00000000},
-       {0x0000980c, 0xafe68e30},
-       {0x00009810, 0xfd14e000},
-       {0x00009814, 0x9c0a9f6b},
-       {0x0000981c, 0x00000000},
-       {0x0000982c, 0x0000a000},
-       {0x00009830, 0x00000000},
-       {0x0000983c, 0x00200400},
-       {0x0000984c, 0x0040233c},
-       {0x00009854, 0x00000044},
-       {0x00009900, 0x00000000},
-       {0x00009904, 0x00000000},
-       {0x00009908, 0x00000000},
-       {0x0000990c, 0x00000000},
-       {0x0000991c, 0x10000fff},
-       {0x00009920, 0x04900000},
-       {0x00009928, 0x00000001},
-       {0x0000992c, 0x00000004},
-       {0x00009934, 0x1e1f2022},
-       {0x00009938, 0x0a0b0c0d},
-       {0x0000993c, 0x00000000},
-       {0x00009940, 0x14750604},
-       {0x00009948, 0x9280c00a},
-       {0x0000994c, 0x00020028},
-       {0x00009954, 0x5f3ca3de},
-       {0x00009958, 0x0108ecff},
-       {0x00009968, 0x000003ce},
-       {0x00009970, 0x192bb514},
-       {0x00009974, 0x00000000},
-       {0x00009978, 0x00000001},
-       {0x0000997c, 0x00000000},
-       {0x00009980, 0x00000000},
-       {0x00009984, 0x00000000},
-       {0x00009988, 0x00000000},
-       {0x0000998c, 0x00000000},
-       {0x00009990, 0x00000000},
-       {0x00009994, 0x00000000},
-       {0x00009998, 0x00000000},
-       {0x0000999c, 0x00000000},
-       {0x000099a0, 0x00000000},
-       {0x000099a4, 0x00000001},
-       {0x000099a8, 0x201fff00},
-       {0x000099ac, 0x2def0400},
-       {0x000099b0, 0x03051000},
-       {0x000099b4, 0x00000820},
-       {0x000099dc, 0x00000000},
-       {0x000099e0, 0x00000000},
-       {0x000099e4, 0xaaaaaaaa},
-       {0x000099e8, 0x3c466478},
-       {0x000099ec, 0x0cc80caa},
-       {0x000099f0, 0x00000000},
-       {0x0000a208, 0x803e68c8},
-       {0x0000a210, 0x4080a333},
-       {0x0000a214, 0x00206c10},
-       {0x0000a218, 0x009c4060},
-       {0x0000a220, 0x01834061},
-       {0x0000a224, 0x00000400},
-       {0x0000a228, 0x000003b5},
-       {0x0000a22c, 0x00000000},
-       {0x0000a234, 0x20202020},
-       {0x0000a238, 0x20202020},
-       {0x0000a244, 0x00000000},
-       {0x0000a248, 0xfffffffc},
-       {0x0000a24c, 0x00000000},
-       {0x0000a254, 0x00000000},
-       {0x0000a258, 0x0ccb5380},
-       {0x0000a25c, 0x15151501},
-       {0x0000a260, 0xdfa90f01},
-       {0x0000a268, 0x00000000},
-       {0x0000a26c, 0x0ebae9e6},
-       {0x0000a388, 0x0c000000},
-       {0x0000a38c, 0x20202020},
-       {0x0000a390, 0x20202020},
-       {0x0000a39c, 0x00000001},
-       {0x0000a3a0, 0x00000000},
-       {0x0000a3a4, 0x00000000},
-       {0x0000a3a8, 0x00000000},
-       {0x0000a3ac, 0x00000000},
-       {0x0000a3b0, 0x00000000},
-       {0x0000a3b4, 0x00000000},
-       {0x0000a3b8, 0x00000000},
-       {0x0000a3bc, 0x00000000},
-       {0x0000a3c0, 0x00000000},
-       {0x0000a3c4, 0x00000000},
-       {0x0000a3cc, 0x20202020},
-       {0x0000a3d0, 0x20202020},
-       {0x0000a3d4, 0x20202020},
-       {0x0000a3e4, 0x00000000},
-       {0x0000a3e8, 0x18c43433},
-       {0x0000a3ec, 0x00f70081},
-       {0x0000a3f0, 0x01036a2f},
-       {0x0000a3f4, 0x00000000},
-       {0x0000d270, 0x0d820820},
-       {0x0000d35c, 0x07ffffef},
-       {0x0000d360, 0x0fffffe7},
-       {0x0000d364, 0x17ffffe5},
-       {0x0000d368, 0x1fffffe4},
-       {0x0000d36c, 0x37ffffe3},
-       {0x0000d370, 0x3fffffe3},
-       {0x0000d374, 0x57ffffe3},
-       {0x0000d378, 0x5fffffe2},
-       {0x0000d37c, 0x7fffffe2},
-       {0x0000d380, 0x7f3c7bba},
-       {0x0000d384, 0xf3307ff0},
-};
-
-static const u32 ar9271Common_normal_cck_fir_coeff_9271[][2] = {
-       /* Addr      allmodes  */
-       {0x0000a1f4, 0x00fffeff},
-       {0x0000a1f8, 0x00f5f9ff},
-       {0x0000a1fc, 0xb79f6427},
-};
-
-static const u32 ar9271Common_japan_2484_cck_fir_coeff_9271[][2] = {
-       /* Addr      allmodes  */
-       {0x0000a1f4, 0x00000000},
-       {0x0000a1f8, 0xefff0301},
-       {0x0000a1fc, 0xca9228ee},
-};
-
-static const u32 ar9271Modes_9271_1_0_only[][6] = {
-       {0x00009910, 0x30002311, 0x30002311, 0x30002311, 0x30002311, 0x30002311},
-       {0x00009828, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001, 0x0a020001},
-};
-
-static const u32 ar9271Modes_9271_ANI_reg[][6] = {
-       {0x00009850, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2, 0x6d4000e2},
-       {0x0000985c, 0x3139605e, 0x3139605e, 0x3137605e, 0x3137605e, 0x3139605e},
-       {0x00009858, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e, 0x7ec84d2e},
-       {0x0000986c, 0x06903881, 0x06903881, 0x06903881, 0x06903881, 0x06903881},
-       {0x00009868, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0},
-       {0x0000a208, 0x803e68c8, 0x803e68c8, 0x803e68c8, 0x803e68c8, 0x803e68c8},
-       {0x00009924, 0xd00a8007, 0xd00a8007, 0xd00a800d, 0xd00a800d, 0xd00a800d},
-       {0x000099c0, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4},
-};
-
-static const u32 ar9271Modes_normal_power_tx_gain_9271[][6] = {
-       {0x0000a300, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a304, 0x00000000, 0x00000000, 0x00009200, 0x00009200, 0x00000000},
-       {0x0000a308, 0x00000000, 0x00000000, 0x00010208, 0x00010208, 0x00000000},
-       {0x0000a30c, 0x00000000, 0x00000000, 0x00019608, 0x00019608, 0x00000000},
-       {0x0000a310, 0x00000000, 0x00000000, 0x0001e610, 0x0001e610, 0x00000000},
-       {0x0000a314, 0x00000000, 0x00000000, 0x0002d6d0, 0x0002d6d0, 0x00000000},
-       {0x0000a318, 0x00000000, 0x00000000, 0x00039758, 0x00039758, 0x00000000},
-       {0x0000a31c, 0x00000000, 0x00000000, 0x0003b759, 0x0003b759, 0x00000000},
-       {0x0000a320, 0x00000000, 0x00000000, 0x0003d75a, 0x0003d75a, 0x00000000},
-       {0x0000a324, 0x00000000, 0x00000000, 0x0004175c, 0x0004175c, 0x00000000},
-       {0x0000a328, 0x00000000, 0x00000000, 0x0004575e, 0x0004575e, 0x00000000},
-       {0x0000a32c, 0x00000000, 0x00000000, 0x0004979f, 0x0004979f, 0x00000000},
-       {0x0000a330, 0x00000000, 0x00000000, 0x0004d7df, 0x0004d7df, 0x00000000},
-       {0x0000a334, 0x000368de, 0x000368de, 0x000368de, 0x000368de, 0x00000000},
-       {0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000},
-       {0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000},
-       {0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x00007838, 0x00000029, 0x00000029, 0x00000029, 0x00000029, 0x00000029},
-       {0x00007824, 0x00d8abff, 0x00d8abff, 0x00d8abff, 0x00d8abff, 0x00d8abff},
-       {0x0000786c, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4, 0x48609eb4},
-       {0x00007820, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04, 0x00000c04},
-       {0x0000a274, 0x0a21c652, 0x0a21c652, 0x0a218652, 0x0a218652, 0x0a22a652},
-       {0x0000a278, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd},
-       {0x0000a27c, 0x050e83bd, 0x050e83bd, 0x050e83bd, 0x050e83bd, 0x050e83bd},
-       {0x0000a394, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd},
-       {0x0000a398, 0x000003bd, 0x000003bd, 0x000003bd, 0x000003bd, 0x000003bd},
-       {0x0000a3dc, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd, 0x3bdef7bd},
-       {0x0000a3e0, 0x000003bd, 0x000003bd, 0x000003bd, 0x000003bd, 0x000003bd},
-};
-
-static const u32 ar9271Modes_high_power_tx_gain_9271[][6] = {
-       {0x0000a300, 0x00000000, 0x00000000, 0x00010000, 0x00010000, 0x00000000},
-       {0x0000a304, 0x00000000, 0x00000000, 0x00016200, 0x00016200, 0x00000000},
-       {0x0000a308, 0x00000000, 0x00000000, 0x00018201, 0x00018201, 0x00000000},
-       {0x0000a30c, 0x00000000, 0x00000000, 0x0001b240, 0x0001b240, 0x00000000},
-       {0x0000a310, 0x00000000, 0x00000000, 0x0001d241, 0x0001d241, 0x00000000},
-       {0x0000a314, 0x00000000, 0x00000000, 0x0001f600, 0x0001f600, 0x00000000},
-       {0x0000a318, 0x00000000, 0x00000000, 0x00022800, 0x00022800, 0x00000000},
-       {0x0000a31c, 0x00000000, 0x00000000, 0x00026802, 0x00026802, 0x00000000},
-       {0x0000a320, 0x00000000, 0x00000000, 0x0002b805, 0x0002b805, 0x00000000},
-       {0x0000a324, 0x00000000, 0x00000000, 0x0002ea41, 0x0002ea41, 0x00000000},
-       {0x0000a328, 0x00000000, 0x00000000, 0x00038b00, 0x00038b00, 0x00000000},
-       {0x0000a32c, 0x00000000, 0x00000000, 0x0003ab40, 0x0003ab40, 0x00000000},
-       {0x0000a330, 0x00000000, 0x00000000, 0x0003cd80, 0x0003cd80, 0x00000000},
-       {0x0000a334, 0x000368de, 0x000368de, 0x000368de, 0x000368de, 0x00000000},
-       {0x0000a338, 0x0003891e, 0x0003891e, 0x0003891e, 0x0003891e, 0x00000000},
-       {0x0000a33c, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x0003a95e, 0x00000000},
-       {0x0000a340, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a344, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a348, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a34c, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a350, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x0000a354, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x0003e9df, 0x00000000},
-       {0x00007838, 0x0000002b, 0x0000002b, 0x0000002b, 0x0000002b, 0x0000002b},
-       {0x00007824, 0x00d8a7ff, 0x00d8a7ff, 0x00d8a7ff, 0x00d8a7ff, 0x00d8a7ff},
-       {0x0000786c, 0x08609eb6, 0x08609eb6, 0x08609eba, 0x08609eba, 0x08609eb6},
-       {0x00007820, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00, 0x00000c00},
-       {0x0000a274, 0x0a22a652, 0x0a22a652, 0x0a214652, 0x0a214652, 0x0a22a652},
-       {0x0000a278, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7, 0x0e739ce7},
-       {0x0000a27c, 0x05018063, 0x05038063, 0x05018063, 0x05018063, 0x05018063},
-       {0x0000a394, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63},
-       {0x0000a398, 0x00000063, 0x00000063, 0x00000063, 0x00000063, 0x00000063},
-       {0x0000a3dc, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63, 0x06318c63},
-       {0x0000a3e0, 0x00000063, 0x00000063, 0x00000063, 0x00000063, 0x00000063},
-};
-
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_mac.c b/drivers/net/wireless/ath/ath9k/ar9002_mac.c
deleted file mode 100644 (file)
index 50dda39..0000000
+++ /dev/null
@@ -1,481 +0,0 @@
-/*
- * Copyright (c) 2008-2009 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "hw.h"
-
-#define AR_BufLen           0x00000fff
-
-static void ar9002_hw_rx_enable(struct ath_hw *ah)
-{
-       REG_WRITE(ah, AR_CR, AR_CR_RXE);
-}
-
-static void ar9002_hw_set_desc_link(void *ds, u32 ds_link)
-{
-       ((struct ath_desc*) ds)->ds_link = ds_link;
-}
-
-static void ar9002_hw_get_desc_link(void *ds, u32 **ds_link)
-{
-       *ds_link = &((struct ath_desc *)ds)->ds_link;
-}
-
-static bool ar9002_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked)
-{
-       u32 isr = 0;
-       u32 mask2 = 0;
-       struct ath9k_hw_capabilities *pCap = &ah->caps;
-       u32 sync_cause = 0;
-       bool fatal_int = false;
-       struct ath_common *common = ath9k_hw_common(ah);
-
-       if (!AR_SREV_9100(ah)) {
-               if (REG_READ(ah, AR_INTR_ASYNC_CAUSE) & AR_INTR_MAC_IRQ) {
-                       if ((REG_READ(ah, AR_RTC_STATUS) & AR_RTC_STATUS_M)
-                           == AR_RTC_STATUS_ON) {
-                               isr = REG_READ(ah, AR_ISR);
-                       }
-               }
-
-               sync_cause = REG_READ(ah, AR_INTR_SYNC_CAUSE) &
-                       AR_INTR_SYNC_DEFAULT;
-
-               *masked = 0;
-
-               if (!isr && !sync_cause)
-                       return false;
-       } else {
-               *masked = 0;
-               isr = REG_READ(ah, AR_ISR);
-       }
-
-       if (isr) {
-               if (isr & AR_ISR_BCNMISC) {
-                       u32 isr2;
-                       isr2 = REG_READ(ah, AR_ISR_S2);
-                       if (isr2 & AR_ISR_S2_TIM)
-                               mask2 |= ATH9K_INT_TIM;
-                       if (isr2 & AR_ISR_S2_DTIM)
-                               mask2 |= ATH9K_INT_DTIM;
-                       if (isr2 & AR_ISR_S2_DTIMSYNC)
-                               mask2 |= ATH9K_INT_DTIMSYNC;
-                       if (isr2 & (AR_ISR_S2_CABEND))
-                               mask2 |= ATH9K_INT_CABEND;
-                       if (isr2 & AR_ISR_S2_GTT)
-                               mask2 |= ATH9K_INT_GTT;
-                       if (isr2 & AR_ISR_S2_CST)
-                               mask2 |= ATH9K_INT_CST;
-                       if (isr2 & AR_ISR_S2_TSFOOR)
-                               mask2 |= ATH9K_INT_TSFOOR;
-               }
-
-               isr = REG_READ(ah, AR_ISR_RAC);
-               if (isr == 0xffffffff) {
-                       *masked = 0;
-                       return false;
-               }
-
-               *masked = isr & ATH9K_INT_COMMON;
-
-               if (ah->config.rx_intr_mitigation) {
-                       if (isr & (AR_ISR_RXMINTR | AR_ISR_RXINTM))
-                               *masked |= ATH9K_INT_RX;
-               }
-
-               if (isr & (AR_ISR_RXOK | AR_ISR_RXERR))
-                       *masked |= ATH9K_INT_RX;
-               if (isr &
-                   (AR_ISR_TXOK | AR_ISR_TXDESC | AR_ISR_TXERR |
-                    AR_ISR_TXEOL)) {
-                       u32 s0_s, s1_s;
-
-                       *masked |= ATH9K_INT_TX;
-
-                       s0_s = REG_READ(ah, AR_ISR_S0_S);
-                       ah->intr_txqs |= MS(s0_s, AR_ISR_S0_QCU_TXOK);
-                       ah->intr_txqs |= MS(s0_s, AR_ISR_S0_QCU_TXDESC);
-
-                       s1_s = REG_READ(ah, AR_ISR_S1_S);
-                       ah->intr_txqs |= MS(s1_s, AR_ISR_S1_QCU_TXERR);
-                       ah->intr_txqs |= MS(s1_s, AR_ISR_S1_QCU_TXEOL);
-               }
-
-               if (isr & AR_ISR_RXORN) {
-                       ath_print(common, ATH_DBG_INTERRUPT,
-                                 "receive FIFO overrun interrupt\n");
-               }
-
-               if (!AR_SREV_9100(ah)) {
-                       if (!(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) {
-                               u32 isr5 = REG_READ(ah, AR_ISR_S5_S);
-                               if (isr5 & AR_ISR_S5_TIM_TIMER)
-                                       *masked |= ATH9K_INT_TIM_TIMER;
-                       }
-               }
-
-               *masked |= mask2;
-       }
-
-       if (AR_SREV_9100(ah))
-               return true;
-
-       if (isr & AR_ISR_GENTMR) {
-               u32 s5_s;
-
-               s5_s = REG_READ(ah, AR_ISR_S5_S);
-               if (isr & AR_ISR_GENTMR) {
-                       ah->intr_gen_timer_trigger =
-                               MS(s5_s, AR_ISR_S5_GENTIMER_TRIG);
-
-                       ah->intr_gen_timer_thresh =
-                               MS(s5_s, AR_ISR_S5_GENTIMER_THRESH);
-
-                       if (ah->intr_gen_timer_trigger)
-                               *masked |= ATH9K_INT_GENTIMER;
-
-               }
-       }
-
-       if (sync_cause) {
-               fatal_int =
-                       (sync_cause &
-                        (AR_INTR_SYNC_HOST1_FATAL | AR_INTR_SYNC_HOST1_PERR))
-                       ? true : false;
-
-               if (fatal_int) {
-                       if (sync_cause & AR_INTR_SYNC_HOST1_FATAL) {
-                               ath_print(common, ATH_DBG_ANY,
-                                         "received PCI FATAL interrupt\n");
-                       }
-                       if (sync_cause & AR_INTR_SYNC_HOST1_PERR) {
-                               ath_print(common, ATH_DBG_ANY,
-                                         "received PCI PERR interrupt\n");
-                       }
-                       *masked |= ATH9K_INT_FATAL;
-               }
-               if (sync_cause & AR_INTR_SYNC_RADM_CPL_TIMEOUT) {
-                       ath_print(common, ATH_DBG_INTERRUPT,
-                                 "AR_INTR_SYNC_RADM_CPL_TIMEOUT\n");
-                       REG_WRITE(ah, AR_RC, AR_RC_HOSTIF);
-                       REG_WRITE(ah, AR_RC, 0);
-                       *masked |= ATH9K_INT_FATAL;
-               }
-               if (sync_cause & AR_INTR_SYNC_LOCAL_TIMEOUT) {
-                       ath_print(common, ATH_DBG_INTERRUPT,
-                                 "AR_INTR_SYNC_LOCAL_TIMEOUT\n");
-               }
-
-               REG_WRITE(ah, AR_INTR_SYNC_CAUSE_CLR, sync_cause);
-               (void) REG_READ(ah, AR_INTR_SYNC_CAUSE_CLR);
-       }
-
-       return true;
-}
-
-static void ar9002_hw_fill_txdesc(struct ath_hw *ah, void *ds, u32 seglen,
-                                 bool is_firstseg, bool is_lastseg,
-                                 const void *ds0, dma_addr_t buf_addr,
-                                 unsigned int qcu)
-{
-       struct ar5416_desc *ads = AR5416DESC(ds);
-
-       ads->ds_data = buf_addr;
-
-       if (is_firstseg) {
-               ads->ds_ctl1 |= seglen | (is_lastseg ? 0 : AR_TxMore);
-       } else if (is_lastseg) {
-               ads->ds_ctl0 = 0;
-               ads->ds_ctl1 = seglen;
-               ads->ds_ctl2 = AR5416DESC_CONST(ds0)->ds_ctl2;
-               ads->ds_ctl3 = AR5416DESC_CONST(ds0)->ds_ctl3;
-       } else {
-               ads->ds_ctl0 = 0;
-               ads->ds_ctl1 = seglen | AR_TxMore;
-               ads->ds_ctl2 = 0;
-               ads->ds_ctl3 = 0;
-       }
-       ads->ds_txstatus0 = ads->ds_txstatus1 = 0;
-       ads->ds_txstatus2 = ads->ds_txstatus3 = 0;
-       ads->ds_txstatus4 = ads->ds_txstatus5 = 0;
-       ads->ds_txstatus6 = ads->ds_txstatus7 = 0;
-       ads->ds_txstatus8 = ads->ds_txstatus9 = 0;
-}
-
-static int ar9002_hw_proc_txdesc(struct ath_hw *ah, void *ds,
-                                struct ath_tx_status *ts)
-{
-       struct ar5416_desc *ads = AR5416DESC(ds);
-
-       if ((ads->ds_txstatus9 & AR_TxDone) == 0)
-               return -EINPROGRESS;
-
-       ts->ts_seqnum = MS(ads->ds_txstatus9, AR_SeqNum);
-       ts->ts_tstamp = ads->AR_SendTimestamp;
-       ts->ts_status = 0;
-       ts->ts_flags = 0;
-
-       if (ads->ds_txstatus1 & AR_FrmXmitOK)
-               ts->ts_status |= ATH9K_TX_ACKED;
-       if (ads->ds_txstatus1 & AR_ExcessiveRetries)
-               ts->ts_status |= ATH9K_TXERR_XRETRY;
-       if (ads->ds_txstatus1 & AR_Filtered)
-               ts->ts_status |= ATH9K_TXERR_FILT;
-       if (ads->ds_txstatus1 & AR_FIFOUnderrun) {
-               ts->ts_status |= ATH9K_TXERR_FIFO;
-               ath9k_hw_updatetxtriglevel(ah, true);
-       }
-       if (ads->ds_txstatus9 & AR_TxOpExceeded)
-               ts->ts_status |= ATH9K_TXERR_XTXOP;
-       if (ads->ds_txstatus1 & AR_TxTimerExpired)
-               ts->ts_status |= ATH9K_TXERR_TIMER_EXPIRED;
-
-       if (ads->ds_txstatus1 & AR_DescCfgErr)
-               ts->ts_flags |= ATH9K_TX_DESC_CFG_ERR;
-       if (ads->ds_txstatus1 & AR_TxDataUnderrun) {
-               ts->ts_flags |= ATH9K_TX_DATA_UNDERRUN;
-               ath9k_hw_updatetxtriglevel(ah, true);
-       }
-       if (ads->ds_txstatus1 & AR_TxDelimUnderrun) {
-               ts->ts_flags |= ATH9K_TX_DELIM_UNDERRUN;
-               ath9k_hw_updatetxtriglevel(ah, true);
-       }
-       if (ads->ds_txstatus0 & AR_TxBaStatus) {
-               ts->ts_flags |= ATH9K_TX_BA;
-               ts->ba_low = ads->AR_BaBitmapLow;
-               ts->ba_high = ads->AR_BaBitmapHigh;
-       }
-
-       ts->ts_rateindex = MS(ads->ds_txstatus9, AR_FinalTxIdx);
-       switch (ts->ts_rateindex) {
-       case 0:
-               ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate0);
-               break;
-       case 1:
-               ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate1);
-               break;
-       case 2:
-               ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate2);
-               break;
-       case 3:
-               ts->ts_ratecode = MS(ads->ds_ctl3, AR_XmitRate3);
-               break;
-       }
-
-       ts->ts_rssi = MS(ads->ds_txstatus5, AR_TxRSSICombined);
-       ts->ts_rssi_ctl0 = MS(ads->ds_txstatus0, AR_TxRSSIAnt00);
-       ts->ts_rssi_ctl1 = MS(ads->ds_txstatus0, AR_TxRSSIAnt01);
-       ts->ts_rssi_ctl2 = MS(ads->ds_txstatus0, AR_TxRSSIAnt02);
-       ts->ts_rssi_ext0 = MS(ads->ds_txstatus5, AR_TxRSSIAnt10);
-       ts->ts_rssi_ext1 = MS(ads->ds_txstatus5, AR_TxRSSIAnt11);
-       ts->ts_rssi_ext2 = MS(ads->ds_txstatus5, AR_TxRSSIAnt12);
-       ts->evm0 = ads->AR_TxEVM0;
-       ts->evm1 = ads->AR_TxEVM1;
-       ts->evm2 = ads->AR_TxEVM2;
-       ts->ts_shortretry = MS(ads->ds_txstatus1, AR_RTSFailCnt);
-       ts->ts_longretry = MS(ads->ds_txstatus1, AR_DataFailCnt);
-       ts->ts_virtcol = MS(ads->ds_txstatus1, AR_VirtRetryCnt);
-       ts->tid = MS(ads->ds_txstatus9, AR_TxTid);
-       ts->ts_antenna = 0;
-
-       return 0;
-}
-
-static void ar9002_hw_set11n_txdesc(struct ath_hw *ah, void *ds,
-                                   u32 pktLen, enum ath9k_pkt_type type,
-                                   u32 txPower, u32 keyIx,
-                                   enum ath9k_key_type keyType, u32 flags)
-{
-       struct ar5416_desc *ads = AR5416DESC(ds);
-
-       txPower += ah->txpower_indexoffset;
-       if (txPower > 63)
-               txPower = 63;
-
-       ads->ds_ctl0 = (pktLen & AR_FrameLen)
-               | (flags & ATH9K_TXDESC_VMF ? AR_VirtMoreFrag : 0)
-               | SM(txPower, AR_XmitPower)
-               | (flags & ATH9K_TXDESC_VEOL ? AR_VEOL : 0)
-               | (flags & ATH9K_TXDESC_CLRDMASK ? AR_ClrDestMask : 0)
-               | (flags & ATH9K_TXDESC_INTREQ ? AR_TxIntrReq : 0)
-               | (keyIx != ATH9K_TXKEYIX_INVALID ? AR_DestIdxValid : 0);
-
-       ads->ds_ctl1 =
-               (keyIx != ATH9K_TXKEYIX_INVALID ? SM(keyIx, AR_DestIdx) : 0)
-               | SM(type, AR_FrameType)
-               | (flags & ATH9K_TXDESC_NOACK ? AR_NoAck : 0)
-               | (flags & ATH9K_TXDESC_EXT_ONLY ? AR_ExtOnly : 0)
-               | (flags & ATH9K_TXDESC_EXT_AND_CTL ? AR_ExtAndCtl : 0);
-
-       ads->ds_ctl6 = SM(keyType, AR_EncrType);
-
-       if (AR_SREV_9285(ah) || AR_SREV_9271(ah)) {
-               ads->ds_ctl8 = 0;
-               ads->ds_ctl9 = 0;
-               ads->ds_ctl10 = 0;
-               ads->ds_ctl11 = 0;
-       }
-}
-
-static void ar9002_hw_set11n_ratescenario(struct ath_hw *ah, void *ds,
-                                         void *lastds,
-                                         u32 durUpdateEn, u32 rtsctsRate,
-                                         u32 rtsctsDuration,
-                                         struct ath9k_11n_rate_series series[],
-                                         u32 nseries, u32 flags)
-{
-       struct ar5416_desc *ads = AR5416DESC(ds);
-       struct ar5416_desc *last_ads = AR5416DESC(lastds);
-       u32 ds_ctl0;
-
-       if (flags & (ATH9K_TXDESC_RTSENA | ATH9K_TXDESC_CTSENA)) {
-               ds_ctl0 = ads->ds_ctl0;
-
-               if (flags & ATH9K_TXDESC_RTSENA) {
-                       ds_ctl0 &= ~AR_CTSEnable;
-                       ds_ctl0 |= AR_RTSEnable;
-               } else {
-                       ds_ctl0 &= ~AR_RTSEnable;
-                       ds_ctl0 |= AR_CTSEnable;
-               }
-
-               ads->ds_ctl0 = ds_ctl0;
-       } else {
-               ads->ds_ctl0 =
-                       (ads->ds_ctl0 & ~(AR_RTSEnable | AR_CTSEnable));
-       }
-
-       ads->ds_ctl2 = set11nTries(series, 0)
-               | set11nTries(series, 1)
-               | set11nTries(series, 2)
-               | set11nTries(series, 3)
-               | (durUpdateEn ? AR_DurUpdateEna : 0)
-               | SM(0, AR_BurstDur);
-
-       ads->ds_ctl3 = set11nRate(series, 0)
-               | set11nRate(series, 1)
-               | set11nRate(series, 2)
-               | set11nRate(series, 3);
-
-       ads->ds_ctl4 = set11nPktDurRTSCTS(series, 0)
-               | set11nPktDurRTSCTS(series, 1);
-
-       ads->ds_ctl5 = set11nPktDurRTSCTS(series, 2)
-               | set11nPktDurRTSCTS(series, 3);
-
-       ads->ds_ctl7 = set11nRateFlags(series, 0)
-               | set11nRateFlags(series, 1)
-               | set11nRateFlags(series, 2)
-               | set11nRateFlags(series, 3)
-               | SM(rtsctsRate, AR_RTSCTSRate);
-       last_ads->ds_ctl2 = ads->ds_ctl2;
-       last_ads->ds_ctl3 = ads->ds_ctl3;
-}
-
-static void ar9002_hw_set11n_aggr_first(struct ath_hw *ah, void *ds,
-                                       u32 aggrLen)
-{
-       struct ar5416_desc *ads = AR5416DESC(ds);
-
-       ads->ds_ctl1 |= (AR_IsAggr | AR_MoreAggr);
-       ads->ds_ctl6 &= ~AR_AggrLen;
-       ads->ds_ctl6 |= SM(aggrLen, AR_AggrLen);
-}
-
-static void ar9002_hw_set11n_aggr_middle(struct ath_hw *ah, void *ds,
-                                        u32 numDelims)
-{
-       struct ar5416_desc *ads = AR5416DESC(ds);
-       unsigned int ctl6;
-
-       ads->ds_ctl1 |= (AR_IsAggr | AR_MoreAggr);
-
-       ctl6 = ads->ds_ctl6;
-       ctl6 &= ~AR_PadDelim;
-       ctl6 |= SM(numDelims, AR_PadDelim);
-       ads->ds_ctl6 = ctl6;
-}
-
-static void ar9002_hw_set11n_aggr_last(struct ath_hw *ah, void *ds)
-{
-       struct ar5416_desc *ads = AR5416DESC(ds);
-
-       ads->ds_ctl1 |= AR_IsAggr;
-       ads->ds_ctl1 &= ~AR_MoreAggr;
-       ads->ds_ctl6 &= ~AR_PadDelim;
-}
-
-static void ar9002_hw_clr11n_aggr(struct ath_hw *ah, void *ds)
-{
-       struct ar5416_desc *ads = AR5416DESC(ds);
-
-       ads->ds_ctl1 &= (~AR_IsAggr & ~AR_MoreAggr);
-}
-
-static void ar9002_hw_set11n_burstduration(struct ath_hw *ah, void *ds,
-                                          u32 burstDuration)
-{
-       struct ar5416_desc *ads = AR5416DESC(ds);
-
-       ads->ds_ctl2 &= ~AR_BurstDur;
-       ads->ds_ctl2 |= SM(burstDuration, AR_BurstDur);
-}
-
-static void ar9002_hw_set11n_virtualmorefrag(struct ath_hw *ah, void *ds,
-                                           u32 vmf)
-{
-       struct ar5416_desc *ads = AR5416DESC(ds);
-
-       if (vmf)
-               ads->ds_ctl0 |= AR_VirtMoreFrag;
-       else
-               ads->ds_ctl0 &= ~AR_VirtMoreFrag;
-}
-
-void ath9k_hw_setuprxdesc(struct ath_hw *ah, struct ath_desc *ds,
-                         u32 size, u32 flags)
-{
-       struct ar5416_desc *ads = AR5416DESC(ds);
-       struct ath9k_hw_capabilities *pCap = &ah->caps;
-
-       ads->ds_ctl1 = size & AR_BufLen;
-       if (flags & ATH9K_RXDESC_INTREQ)
-               ads->ds_ctl1 |= AR_RxIntrReq;
-
-       ads->ds_rxstatus8 &= ~AR_RxDone;
-       if (!(pCap->hw_caps & ATH9K_HW_CAP_AUTOSLEEP))
-               memset(&(ads->u), 0, sizeof(ads->u));
-}
-EXPORT_SYMBOL(ath9k_hw_setuprxdesc);
-
-void ar9002_hw_attach_mac_ops(struct ath_hw *ah)
-{
-       struct ath_hw_ops *ops = ath9k_hw_ops(ah);
-
-       ops->rx_enable = ar9002_hw_rx_enable;
-       ops->set_desc_link = ar9002_hw_set_desc_link;
-       ops->get_desc_link = ar9002_hw_get_desc_link;
-       ops->get_isr = ar9002_hw_get_isr;
-       ops->fill_txdesc = ar9002_hw_fill_txdesc;
-       ops->proc_txdesc = ar9002_hw_proc_txdesc;
-       ops->set11n_txdesc = ar9002_hw_set11n_txdesc;
-       ops->set11n_ratescenario = ar9002_hw_set11n_ratescenario;
-       ops->set11n_aggr_first = ar9002_hw_set11n_aggr_first;
-       ops->set11n_aggr_middle = ar9002_hw_set11n_aggr_middle;
-       ops->set11n_aggr_last = ar9002_hw_set11n_aggr_last;
-       ops->clr11n_aggr = ar9002_hw_clr11n_aggr;
-       ops->set11n_burstduration = ar9002_hw_set11n_burstduration;
-       ops->set11n_virtualmorefrag = ar9002_hw_set11n_virtualmorefrag;
-}
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_phy.c b/drivers/net/wireless/ath/ath9k/ar9002_phy.c
deleted file mode 100644 (file)
index adbf031..0000000
+++ /dev/null
@@ -1,532 +0,0 @@
-/*
- * Copyright (c) 2008-2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/**
- * DOC: Programming Atheros 802.11n analog front end radios
- *
- * AR5416 MAC based PCI devices and AR518 MAC based PCI-Express
- * devices have either an external AR2133 analog front end radio for single
- * band 2.4 GHz communication or an AR5133 analog front end radio for dual
- * band 2.4 GHz / 5 GHz communication.
- *
- * All devices after the AR5416 and AR5418 family starting with the AR9280
- * have their analog front radios, MAC/BB and host PCIe/USB interface embedded
- * into a single-chip and require less programming.
- *
- * The following single-chips exist with a respective embedded radio:
- *
- * AR9280 - 11n dual-band 2x2 MIMO for PCIe
- * AR9281 - 11n single-band 1x2 MIMO for PCIe
- * AR9285 - 11n single-band 1x1 for PCIe
- * AR9287 - 11n single-band 2x2 MIMO for PCIe
- *
- * AR9220 - 11n dual-band 2x2 MIMO for PCI
- * AR9223 - 11n single-band 2x2 MIMO for PCI
- *
- * AR9287 - 11n single-band 1x1 MIMO for USB
- */
-
-#include "hw.h"
-#include "ar9002_phy.h"
-
-/**
- * ar9002_hw_set_channel - set channel on single-chip device
- * @ah: atheros hardware structure
- * @chan:
- *
- * This is the function to change channel on single-chip devices, that is
- * all devices after ar9280.
- *
- * This function takes the channel value in MHz and sets
- * hardware channel value. Assumes writes have been enabled to analog bus.
- *
- * Actual Expression,
- *
- * For 2GHz channel,
- * Channel Frequency = (3/4) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^17)
- * (freq_ref = 40MHz)
- *
- * For 5GHz channel,
- * Channel Frequency = (3/2) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^10)
- * (freq_ref = 40MHz/(24>>amodeRefSel))
- */
-static int ar9002_hw_set_channel(struct ath_hw *ah, struct ath9k_channel *chan)
-{
-       u16 bMode, fracMode, aModeRefSel = 0;
-       u32 freq, ndiv, channelSel = 0, channelFrac = 0, reg32 = 0;
-       struct chan_centers centers;
-       u32 refDivA = 24;
-
-       ath9k_hw_get_channel_centers(ah, chan, &centers);
-       freq = centers.synth_center;
-
-       reg32 = REG_READ(ah, AR_PHY_SYNTH_CONTROL);
-       reg32 &= 0xc0000000;
-
-       if (freq < 4800) { /* 2 GHz, fractional mode */
-               u32 txctl;
-               int regWrites = 0;
-
-               bMode = 1;
-               fracMode = 1;
-               aModeRefSel = 0;
-               channelSel = CHANSEL_2G(freq);
-
-               if (AR_SREV_9287_11_OR_LATER(ah)) {
-                       if (freq == 2484) {
-                               /* Enable channel spreading for channel 14 */
-                               REG_WRITE_ARRAY(&ah->iniCckfirJapan2484,
-                                               1, regWrites);
-                       } else {
-                               REG_WRITE_ARRAY(&ah->iniCckfirNormal,
-                                               1, regWrites);
-                       }
-               } else {
-                       txctl = REG_READ(ah, AR_PHY_CCK_TX_CTRL);
-                       if (freq == 2484) {
-                               /* Enable channel spreading for channel 14 */
-                               REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
-                                         txctl | AR_PHY_CCK_TX_CTRL_JAPAN);
-                       } else {
-                               REG_WRITE(ah, AR_PHY_CCK_TX_CTRL,
-                                         txctl & ~AR_PHY_CCK_TX_CTRL_JAPAN);
-                       }
-               }
-       } else {
-               bMode = 0;
-               fracMode = 0;
-
-               switch (ah->eep_ops->get_eeprom(ah, EEP_FRAC_N_5G)) {
-               case 0:
-                       if ((freq % 20) == 0)
-                               aModeRefSel = 3;
-                       else if ((freq % 10) == 0)
-                               aModeRefSel = 2;
-                       if (aModeRefSel)
-                               break;
-               case 1:
-               default:
-                       aModeRefSel = 0;
-                       /*
-                        * Enable 2G (fractional) mode for channels
-                        * which are 5MHz spaced.
-                        */
-                       fracMode = 1;
-                       refDivA = 1;
-                       channelSel = CHANSEL_5G(freq);
-
-                       /* RefDivA setting */
-                       REG_RMW_FIELD(ah, AR_AN_SYNTH9,
-                                     AR_AN_SYNTH9_REFDIVA, refDivA);
-
-               }
-
-               if (!fracMode) {
-                       ndiv = (freq * (refDivA >> aModeRefSel)) / 60;
-                       channelSel = ndiv & 0x1ff;
-                       channelFrac = (ndiv & 0xfffffe00) * 2;
-                       channelSel = (channelSel << 17) | channelFrac;
-               }
-       }
-
-       reg32 = reg32 |
-           (bMode << 29) |
-           (fracMode << 28) | (aModeRefSel << 26) | (channelSel);
-
-       REG_WRITE(ah, AR_PHY_SYNTH_CONTROL, reg32);
-
-       ah->curchan = chan;
-       ah->curchan_rad_index = -1;
-
-       return 0;
-}
-
-/**
- * ar9002_hw_spur_mitigate - convert baseband spur frequency
- * @ah: atheros hardware structure
- * @chan:
- *
- * For single-chip solutions. Converts to baseband spur frequency given the
- * input channel frequency and compute register settings below.
- */
-static void ar9002_hw_spur_mitigate(struct ath_hw *ah,
-                                   struct ath9k_channel *chan)
-{
-       int bb_spur = AR_NO_SPUR;
-       int freq;
-       int bin, cur_bin;
-       int bb_spur_off, spur_subchannel_sd;
-       int spur_freq_sd;
-       int spur_delta_phase;
-       int denominator;
-       int upper, lower, cur_vit_mask;
-       int tmp, newVal;
-       int i;
-       int pilot_mask_reg[4] = { AR_PHY_TIMING7, AR_PHY_TIMING8,
-                         AR_PHY_PILOT_MASK_01_30, AR_PHY_PILOT_MASK_31_60
-       };
-       int chan_mask_reg[4] = { AR_PHY_TIMING9, AR_PHY_TIMING10,
-                        AR_PHY_CHANNEL_MASK_01_30, AR_PHY_CHANNEL_MASK_31_60
-       };
-       int inc[4] = { 0, 100, 0, 0 };
-       struct chan_centers centers;
-
-       int8_t mask_m[123];
-       int8_t mask_p[123];
-       int8_t mask_amt;
-       int tmp_mask;
-       int cur_bb_spur;
-       bool is2GHz = IS_CHAN_2GHZ(chan);
-
-       memset(&mask_m, 0, sizeof(int8_t) * 123);
-       memset(&mask_p, 0, sizeof(int8_t) * 123);
-
-       ath9k_hw_get_channel_centers(ah, chan, &centers);
-       freq = centers.synth_center;
-
-       ah->config.spurmode = SPUR_ENABLE_EEPROM;
-       for (i = 0; i < AR_EEPROM_MODAL_SPURS; i++) {
-               cur_bb_spur = ah->eep_ops->get_spur_channel(ah, i, is2GHz);
-
-               if (is2GHz)
-                       cur_bb_spur = (cur_bb_spur / 10) + AR_BASE_FREQ_2GHZ;
-               else
-                       cur_bb_spur = (cur_bb_spur / 10) + AR_BASE_FREQ_5GHZ;
-
-               if (AR_NO_SPUR == cur_bb_spur)
-                       break;
-               cur_bb_spur = cur_bb_spur - freq;
-
-               if (IS_CHAN_HT40(chan)) {
-                       if ((cur_bb_spur > -AR_SPUR_FEEQ_BOUND_HT40) &&
-                           (cur_bb_spur < AR_SPUR_FEEQ_BOUND_HT40)) {
-                               bb_spur = cur_bb_spur;
-                               break;
-                       }
-               } else if ((cur_bb_spur > -AR_SPUR_FEEQ_BOUND_HT20) &&
-                          (cur_bb_spur < AR_SPUR_FEEQ_BOUND_HT20)) {
-                       bb_spur = cur_bb_spur;
-                       break;
-               }
-       }
-
-       if (AR_NO_SPUR == bb_spur) {
-               REG_CLR_BIT(ah, AR_PHY_FORCE_CLKEN_CCK,
-                           AR_PHY_FORCE_CLKEN_CCK_MRC_MUX);
-               return;
-       } else {
-               REG_CLR_BIT(ah, AR_PHY_FORCE_CLKEN_CCK,
-                           AR_PHY_FORCE_CLKEN_CCK_MRC_MUX);
-       }
-
-       bin = bb_spur * 320;
-
-       tmp = REG_READ(ah, AR_PHY_TIMING_CTRL4(0));
-
-       ENABLE_REGWRITE_BUFFER(ah);
-
-       newVal = tmp | (AR_PHY_TIMING_CTRL4_ENABLE_SPUR_RSSI |
-                       AR_PHY_TIMING_CTRL4_ENABLE_SPUR_FILTER |
-                       AR_PHY_TIMING_CTRL4_ENABLE_CHAN_MASK |
-                       AR_PHY_TIMING_CTRL4_ENABLE_PILOT_MASK);
-       REG_WRITE(ah, AR_PHY_TIMING_CTRL4(0), newVal);
-
-       newVal = (AR_PHY_SPUR_REG_MASK_RATE_CNTL |
-                 AR_PHY_SPUR_REG_ENABLE_MASK_PPM |
-                 AR_PHY_SPUR_REG_MASK_RATE_SELECT |
-                 AR_PHY_SPUR_REG_ENABLE_VIT_SPUR_RSSI |
-                 SM(SPUR_RSSI_THRESH, AR_PHY_SPUR_REG_SPUR_RSSI_THRESH));
-       REG_WRITE(ah, AR_PHY_SPUR_REG, newVal);
-
-       if (IS_CHAN_HT40(chan)) {
-               if (bb_spur < 0) {
-                       spur_subchannel_sd = 1;
-                       bb_spur_off = bb_spur + 10;
-               } else {
-                       spur_subchannel_sd = 0;
-                       bb_spur_off = bb_spur - 10;
-               }
-       } else {
-               spur_subchannel_sd = 0;
-               bb_spur_off = bb_spur;
-       }
-
-       if (IS_CHAN_HT40(chan))
-               spur_delta_phase =
-                       ((bb_spur * 262144) /
-                        10) & AR_PHY_TIMING11_SPUR_DELTA_PHASE;
-       else
-               spur_delta_phase =
-                       ((bb_spur * 524288) /
-                        10) & AR_PHY_TIMING11_SPUR_DELTA_PHASE;
-
-       denominator = IS_CHAN_2GHZ(chan) ? 44 : 40;
-       spur_freq_sd = ((bb_spur_off * 2048) / denominator) & 0x3ff;
-
-       newVal = (AR_PHY_TIMING11_USE_SPUR_IN_AGC |
-                 SM(spur_freq_sd, AR_PHY_TIMING11_SPUR_FREQ_SD) |
-                 SM(spur_delta_phase, AR_PHY_TIMING11_SPUR_DELTA_PHASE));
-       REG_WRITE(ah, AR_PHY_TIMING11, newVal);
-
-       newVal = spur_subchannel_sd << AR_PHY_SFCORR_SPUR_SUBCHNL_SD_S;
-       REG_WRITE(ah, AR_PHY_SFCORR_EXT, newVal);
-
-       cur_bin = -6000;
-       upper = bin + 100;
-       lower = bin - 100;
-
-       for (i = 0; i < 4; i++) {
-               int pilot_mask = 0;
-               int chan_mask = 0;
-               int bp = 0;
-               for (bp = 0; bp < 30; bp++) {
-                       if ((cur_bin > lower) && (cur_bin < upper)) {
-                               pilot_mask = pilot_mask | 0x1 << bp;
-                               chan_mask = chan_mask | 0x1 << bp;
-                       }
-                       cur_bin += 100;
-               }
-               cur_bin += inc[i];
-               REG_WRITE(ah, pilot_mask_reg[i], pilot_mask);
-               REG_WRITE(ah, chan_mask_reg[i], chan_mask);
-       }
-
-       cur_vit_mask = 6100;
-       upper = bin + 120;
-       lower = bin - 120;
-
-       for (i = 0; i < 123; i++) {
-               if ((cur_vit_mask > lower) && (cur_vit_mask < upper)) {
-
-                       /* workaround for gcc bug #37014 */
-                       volatile int tmp_v = abs(cur_vit_mask - bin);
-
-                       if (tmp_v < 75)
-                               mask_amt = 1;
-                       else
-                               mask_amt = 0;
-                       if (cur_vit_mask < 0)
-                               mask_m[abs(cur_vit_mask / 100)] = mask_amt;
-                       else
-                               mask_p[cur_vit_mask / 100] = mask_amt;
-               }
-               cur_vit_mask -= 100;
-       }
-
-       tmp_mask = (mask_m[46] << 30) | (mask_m[47] << 28)
-               | (mask_m[48] << 26) | (mask_m[49] << 24)
-               | (mask_m[50] << 22) | (mask_m[51] << 20)
-               | (mask_m[52] << 18) | (mask_m[53] << 16)
-               | (mask_m[54] << 14) | (mask_m[55] << 12)
-               | (mask_m[56] << 10) | (mask_m[57] << 8)
-               | (mask_m[58] << 6) | (mask_m[59] << 4)
-               | (mask_m[60] << 2) | (mask_m[61] << 0);
-       REG_WRITE(ah, AR_PHY_BIN_MASK_1, tmp_mask);
-       REG_WRITE(ah, AR_PHY_VIT_MASK2_M_46_61, tmp_mask);
-
-       tmp_mask = (mask_m[31] << 28)
-               | (mask_m[32] << 26) | (mask_m[33] << 24)
-               | (mask_m[34] << 22) | (mask_m[35] << 20)
-               | (mask_m[36] << 18) | (mask_m[37] << 16)
-               | (mask_m[48] << 14) | (mask_m[39] << 12)
-               | (mask_m[40] << 10) | (mask_m[41] << 8)
-               | (mask_m[42] << 6) | (mask_m[43] << 4)
-               | (mask_m[44] << 2) | (mask_m[45] << 0);
-       REG_WRITE(ah, AR_PHY_BIN_MASK_2, tmp_mask);
-       REG_WRITE(ah, AR_PHY_MASK2_M_31_45, tmp_mask);
-
-       tmp_mask = (mask_m[16] << 30) | (mask_m[16] << 28)
-               | (mask_m[18] << 26) | (mask_m[18] << 24)
-               | (mask_m[20] << 22) | (mask_m[20] << 20)
-               | (mask_m[22] << 18) | (mask_m[22] << 16)
-               | (mask_m[24] << 14) | (mask_m[24] << 12)
-               | (mask_m[25] << 10) | (mask_m[26] << 8)
-               | (mask_m[27] << 6) | (mask_m[28] << 4)
-               | (mask_m[29] << 2) | (mask_m[30] << 0);
-       REG_WRITE(ah, AR_PHY_BIN_MASK_3, tmp_mask);
-       REG_WRITE(ah, AR_PHY_MASK2_M_16_30, tmp_mask);
-
-       tmp_mask = (mask_m[0] << 30) | (mask_m[1] << 28)
-               | (mask_m[2] << 26) | (mask_m[3] << 24)
-               | (mask_m[4] << 22) | (mask_m[5] << 20)
-               | (mask_m[6] << 18) | (mask_m[7] << 16)
-               | (mask_m[8] << 14) | (mask_m[9] << 12)
-               | (mask_m[10] << 10) | (mask_m[11] << 8)
-               | (mask_m[12] << 6) | (mask_m[13] << 4)
-               | (mask_m[14] << 2) | (mask_m[15] << 0);
-       REG_WRITE(ah, AR_PHY_MASK_CTL, tmp_mask);
-       REG_WRITE(ah, AR_PHY_MASK2_M_00_15, tmp_mask);
-
-       tmp_mask = (mask_p[15] << 28)
-               | (mask_p[14] << 26) | (mask_p[13] << 24)
-               | (mask_p[12] << 22) | (mask_p[11] << 20)
-               | (mask_p[10] << 18) | (mask_p[9] << 16)
-               | (mask_p[8] << 14) | (mask_p[7] << 12)
-               | (mask_p[6] << 10) | (mask_p[5] << 8)
-               | (mask_p[4] << 6) | (mask_p[3] << 4)
-               | (mask_p[2] << 2) | (mask_p[1] << 0);
-       REG_WRITE(ah, AR_PHY_BIN_MASK2_1, tmp_mask);
-       REG_WRITE(ah, AR_PHY_MASK2_P_15_01, tmp_mask);
-
-       tmp_mask = (mask_p[30] << 28)
-               | (mask_p[29] << 26) | (mask_p[28] << 24)
-               | (mask_p[27] << 22) | (mask_p[26] << 20)
-               | (mask_p[25] << 18) | (mask_p[24] << 16)
-               | (mask_p[23] << 14) | (mask_p[22] << 12)
-               | (mask_p[21] << 10) | (mask_p[20] << 8)
-               | (mask_p[19] << 6) | (mask_p[18] << 4)
-               | (mask_p[17] << 2) | (mask_p[16] << 0);
-       REG_WRITE(ah, AR_PHY_BIN_MASK2_2, tmp_mask);
-       REG_WRITE(ah, AR_PHY_MASK2_P_30_16, tmp_mask);
-
-       tmp_mask = (mask_p[45] << 28)
-               | (mask_p[44] << 26) | (mask_p[43] << 24)
-               | (mask_p[42] << 22) | (mask_p[41] << 20)
-               | (mask_p[40] << 18) | (mask_p[39] << 16)
-               | (mask_p[38] << 14) | (mask_p[37] << 12)
-               | (mask_p[36] << 10) | (mask_p[35] << 8)
-               | (mask_p[34] << 6) | (mask_p[33] << 4)
-               | (mask_p[32] << 2) | (mask_p[31] << 0);
-       REG_WRITE(ah, AR_PHY_BIN_MASK2_3, tmp_mask);
-       REG_WRITE(ah, AR_PHY_MASK2_P_45_31, tmp_mask);
-
-       tmp_mask = (mask_p[61] << 30) | (mask_p[60] << 28)
-               | (mask_p[59] << 26) | (mask_p[58] << 24)
-               | (mask_p[57] << 22) | (mask_p[56] << 20)
-               | (mask_p[55] << 18) | (mask_p[54] << 16)
-               | (mask_p[53] << 14) | (mask_p[52] << 12)
-               | (mask_p[51] << 10) | (mask_p[50] << 8)
-               | (mask_p[49] << 6) | (mask_p[48] << 4)
-               | (mask_p[47] << 2) | (mask_p[46] << 0);
-       REG_WRITE(ah, AR_PHY_BIN_MASK2_4, tmp_mask);
-       REG_WRITE(ah, AR_PHY_MASK2_P_61_45, tmp_mask);
-
-       REGWRITE_BUFFER_FLUSH(ah);
-       DISABLE_REGWRITE_BUFFER(ah);
-}
-
-static void ar9002_olc_init(struct ath_hw *ah)
-{
-       u32 i;
-
-       if (!OLC_FOR_AR9280_20_LATER)
-               return;
-
-       if (OLC_FOR_AR9287_10_LATER) {
-               REG_SET_BIT(ah, AR_PHY_TX_PWRCTRL9,
-                               AR_PHY_TX_PWRCTRL9_RES_DC_REMOVAL);
-               ath9k_hw_analog_shift_rmw(ah, AR9287_AN_TXPC0,
-                               AR9287_AN_TXPC0_TXPCMODE,
-                               AR9287_AN_TXPC0_TXPCMODE_S,
-                               AR9287_AN_TXPC0_TXPCMODE_TEMPSENSE);
-               udelay(100);
-       } else {
-               for (i = 0; i < AR9280_TX_GAIN_TABLE_SIZE; i++)
-                       ah->originalGain[i] =
-                               MS(REG_READ(ah, AR_PHY_TX_GAIN_TBL1 + i * 4),
-                                               AR_PHY_TX_GAIN);
-               ah->PDADCdelta = 0;
-       }
-}
-
-static u32 ar9002_hw_compute_pll_control(struct ath_hw *ah,
-                                        struct ath9k_channel *chan)
-{
-       u32 pll;
-
-       pll = SM(0x5, AR_RTC_9160_PLL_REFDIV);
-
-       if (chan && IS_CHAN_HALF_RATE(chan))
-               pll |= SM(0x1, AR_RTC_9160_PLL_CLKSEL);
-       else if (chan && IS_CHAN_QUARTER_RATE(chan))
-               pll |= SM(0x2, AR_RTC_9160_PLL_CLKSEL);
-
-       if (chan && IS_CHAN_5GHZ(chan)) {
-               if (IS_CHAN_A_FAST_CLOCK(ah, chan))
-                       pll = 0x142c;
-               else if (AR_SREV_9280_20(ah))
-                       pll = 0x2850;
-               else
-                       pll |= SM(0x28, AR_RTC_9160_PLL_DIV);
-       } else {
-               pll |= SM(0x2c, AR_RTC_9160_PLL_DIV);
-       }
-
-       return pll;
-}
-
-static void ar9002_hw_do_getnf(struct ath_hw *ah,
-                             int16_t nfarray[NUM_NF_READINGS])
-{
-       int16_t nf;
-
-       nf = MS(REG_READ(ah, AR_PHY_CCA), AR9280_PHY_MINCCA_PWR);
-       nfarray[0] = sign_extend(nf, 9);
-
-       nf = MS(REG_READ(ah, AR_PHY_EXT_CCA), AR9280_PHY_EXT_MINCCA_PWR);
-       if (IS_CHAN_HT40(ah->curchan))
-               nfarray[3] = sign_extend(nf, 9);
-
-       if (AR_SREV_9285(ah) || AR_SREV_9271(ah))
-               return;
-
-       nf = MS(REG_READ(ah, AR_PHY_CH1_CCA), AR9280_PHY_CH1_MINCCA_PWR);
-       nfarray[1] = sign_extend(nf, 9);
-
-       nf = MS(REG_READ(ah, AR_PHY_CH1_EXT_CCA), AR9280_PHY_CH1_EXT_MINCCA_PWR);
-       if (IS_CHAN_HT40(ah->curchan))
-               nfarray[4] = sign_extend(nf, 9);
-}
-
-static void ar9002_hw_set_nf_limits(struct ath_hw *ah)
-{
-       if (AR_SREV_9285(ah)) {
-               ah->nf_2g.max = AR_PHY_CCA_MAX_GOOD_VAL_9285_2GHZ;
-               ah->nf_2g.min = AR_PHY_CCA_MIN_GOOD_VAL_9285_2GHZ;
-               ah->nf_2g.nominal = AR_PHY_CCA_NOM_VAL_9285_2GHZ;
-       } else if (AR_SREV_9287(ah)) {
-               ah->nf_2g.max = AR_PHY_CCA_MAX_GOOD_VAL_9287_2GHZ;
-               ah->nf_2g.min = AR_PHY_CCA_MIN_GOOD_VAL_9287_2GHZ;
-               ah->nf_2g.nominal = AR_PHY_CCA_NOM_VAL_9287_2GHZ;
-       } else if (AR_SREV_9271(ah)) {
-               ah->nf_2g.max = AR_PHY_CCA_MAX_GOOD_VAL_9271_2GHZ;
-               ah->nf_2g.min = AR_PHY_CCA_MIN_GOOD_VAL_9271_2GHZ;
-               ah->nf_2g.nominal = AR_PHY_CCA_NOM_VAL_9271_2GHZ;
-       } else {
-               ah->nf_2g.max = AR_PHY_CCA_MAX_GOOD_VAL_9280_2GHZ;
-               ah->nf_2g.min = AR_PHY_CCA_MIN_GOOD_VAL_9280_2GHZ;
-               ah->nf_2g.nominal = AR_PHY_CCA_NOM_VAL_9280_2GHZ;
-               ah->nf_5g.max = AR_PHY_CCA_MAX_GOOD_VAL_9280_5GHZ;
-               ah->nf_5g.min = AR_PHY_CCA_MIN_GOOD_VAL_9280_5GHZ;
-               ah->nf_5g.nominal = AR_PHY_CCA_NOM_VAL_9280_5GHZ;
-       }
-}
-
-void ar9002_hw_attach_phy_ops(struct ath_hw *ah)
-{
-       struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
-
-       priv_ops->set_rf_regs = NULL;
-       priv_ops->rf_alloc_ext_banks = NULL;
-       priv_ops->rf_free_ext_banks = NULL;
-       priv_ops->rf_set_freq = ar9002_hw_set_channel;
-       priv_ops->spur_mitigate_freq = ar9002_hw_spur_mitigate;
-       priv_ops->olc_init = ar9002_olc_init;
-       priv_ops->compute_pll_control = ar9002_hw_compute_pll_control;
-       priv_ops->do_getnf = ar9002_hw_do_getnf;
-
-       ar9002_hw_set_nf_limits(ah);
-}
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_phy.h b/drivers/net/wireless/ath/ath9k/ar9002_phy.h
deleted file mode 100644 (file)
index c5151a4..0000000
+++ /dev/null
@@ -1,605 +0,0 @@
-/*
- * Copyright (c) 2008-2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-#ifndef AR9002_PHY_H
-#define AR9002_PHY_H
-
-#define AR_PHY_TEST             0x9800
-#define PHY_AGC_CLR             0x10000000
-#define RFSILENT_BB             0x00002000
-
-#define AR_PHY_TURBO                0x9804
-#define AR_PHY_FC_TURBO_MODE        0x00000001
-#define AR_PHY_FC_TURBO_SHORT       0x00000002
-#define AR_PHY_FC_DYN2040_EN        0x00000004
-#define AR_PHY_FC_DYN2040_PRI_ONLY  0x00000008
-#define AR_PHY_FC_DYN2040_PRI_CH    0x00000010
-/* For 25 MHz channel spacing -- not used but supported by hw */
-#define AR_PHY_FC_DYN2040_EXT_CH    0x00000020
-#define AR_PHY_FC_HT_EN             0x00000040
-#define AR_PHY_FC_SHORT_GI_40       0x00000080
-#define AR_PHY_FC_WALSH             0x00000100
-#define AR_PHY_FC_SINGLE_HT_LTF1    0x00000200
-#define AR_PHY_FC_ENABLE_DAC_FIFO   0x00000800
-
-#define AR_PHY_TEST2                   0x9808
-
-#define AR_PHY_TIMING2           0x9810
-#define AR_PHY_TIMING3           0x9814
-#define AR_PHY_TIMING3_DSC_MAN   0xFFFE0000
-#define AR_PHY_TIMING3_DSC_MAN_S 17
-#define AR_PHY_TIMING3_DSC_EXP   0x0001E000
-#define AR_PHY_TIMING3_DSC_EXP_S 13
-
-#define AR_PHY_CHIP_ID_REV_0      0x80
-#define AR_PHY_CHIP_ID_REV_1      0x81
-#define AR_PHY_CHIP_ID_9160_REV_0 0xb0
-
-#define AR_PHY_ACTIVE       0x981C
-#define AR_PHY_ACTIVE_EN    0x00000001
-#define AR_PHY_ACTIVE_DIS   0x00000000
-
-#define AR_PHY_RF_CTL2             0x9824
-#define AR_PHY_TX_END_DATA_START   0x000000FF
-#define AR_PHY_TX_END_DATA_START_S 0
-#define AR_PHY_TX_END_PA_ON        0x0000FF00
-#define AR_PHY_TX_END_PA_ON_S      8
-
-#define AR_PHY_RF_CTL3                  0x9828
-#define AR_PHY_TX_END_TO_A2_RX_ON       0x00FF0000
-#define AR_PHY_TX_END_TO_A2_RX_ON_S     16
-
-#define AR_PHY_ADC_CTL                  0x982C
-#define AR_PHY_ADC_CTL_OFF_INBUFGAIN    0x00000003
-#define AR_PHY_ADC_CTL_OFF_INBUFGAIN_S  0
-#define AR_PHY_ADC_CTL_OFF_PWDDAC       0x00002000
-#define AR_PHY_ADC_CTL_OFF_PWDBANDGAP   0x00004000
-#define AR_PHY_ADC_CTL_OFF_PWDADC       0x00008000
-#define AR_PHY_ADC_CTL_ON_INBUFGAIN     0x00030000
-#define AR_PHY_ADC_CTL_ON_INBUFGAIN_S   16
-
-#define AR_PHY_ADC_SERIAL_CTL       0x9830
-#define AR_PHY_SEL_INTERNAL_ADDAC   0x00000000
-#define AR_PHY_SEL_EXTERNAL_RADIO   0x00000001
-
-#define AR_PHY_RF_CTL4                    0x9834
-#define AR_PHY_RF_CTL4_TX_END_XPAB_OFF    0xFF000000
-#define AR_PHY_RF_CTL4_TX_END_XPAB_OFF_S  24
-#define AR_PHY_RF_CTL4_TX_END_XPAA_OFF    0x00FF0000
-#define AR_PHY_RF_CTL4_TX_END_XPAA_OFF_S  16
-#define AR_PHY_RF_CTL4_FRAME_XPAB_ON      0x0000FF00
-#define AR_PHY_RF_CTL4_FRAME_XPAB_ON_S    8
-#define AR_PHY_RF_CTL4_FRAME_XPAA_ON      0x000000FF
-#define AR_PHY_RF_CTL4_FRAME_XPAA_ON_S    0
-
-#define AR_PHY_TSTDAC_CONST               0x983c
-
-#define AR_PHY_SETTLING          0x9844
-#define AR_PHY_SETTLING_SWITCH   0x00003F80
-#define AR_PHY_SETTLING_SWITCH_S 7
-
-#define AR_PHY_RXGAIN                   0x9848
-#define AR_PHY_RXGAIN_TXRX_ATTEN        0x0003F000
-#define AR_PHY_RXGAIN_TXRX_ATTEN_S      12
-#define AR_PHY_RXGAIN_TXRX_RF_MAX       0x007C0000
-#define AR_PHY_RXGAIN_TXRX_RF_MAX_S     18
-#define AR9280_PHY_RXGAIN_TXRX_ATTEN    0x00003F80
-#define AR9280_PHY_RXGAIN_TXRX_ATTEN_S  7
-#define AR9280_PHY_RXGAIN_TXRX_MARGIN   0x001FC000
-#define AR9280_PHY_RXGAIN_TXRX_MARGIN_S 14
-
-#define AR_PHY_DESIRED_SZ           0x9850
-#define AR_PHY_DESIRED_SZ_ADC       0x000000FF
-#define AR_PHY_DESIRED_SZ_ADC_S     0
-#define AR_PHY_DESIRED_SZ_PGA       0x0000FF00
-#define AR_PHY_DESIRED_SZ_PGA_S     8
-#define AR_PHY_DESIRED_SZ_TOT_DES   0x0FF00000
-#define AR_PHY_DESIRED_SZ_TOT_DES_S 20
-
-#define AR_PHY_FIND_SIG           0x9858
-#define AR_PHY_FIND_SIG_FIRSTEP   0x0003F000
-#define AR_PHY_FIND_SIG_FIRSTEP_S 12
-#define AR_PHY_FIND_SIG_FIRPWR    0x03FC0000
-#define AR_PHY_FIND_SIG_FIRPWR_S  18
-
-#define AR_PHY_FIND_SIG_LOW           0x9840
-#define AR_PHY_FIND_SIG_FIRSTEP_LOW   0x00000FC0L
-#define AR_PHY_FIND_SIG_FIRSTEP_LOW_S 6
-
-#define AR_PHY_AGC_CTL1                  0x985C
-#define AR_PHY_AGC_CTL1_COARSE_LOW       0x00007F80
-#define AR_PHY_AGC_CTL1_COARSE_LOW_S     7
-#define AR_PHY_AGC_CTL1_COARSE_HIGH      0x003F8000
-#define AR_PHY_AGC_CTL1_COARSE_HIGH_S    15
-
-#define AR_PHY_CCA                  0x9864
-#define AR_PHY_MINCCA_PWR           0x0FF80000
-#define AR_PHY_MINCCA_PWR_S         19
-#define AR_PHY_CCA_THRESH62         0x0007F000
-#define AR_PHY_CCA_THRESH62_S       12
-#define AR9280_PHY_MINCCA_PWR       0x1FF00000
-#define AR9280_PHY_MINCCA_PWR_S     20
-#define AR9280_PHY_CCA_THRESH62     0x000FF000
-#define AR9280_PHY_CCA_THRESH62_S   12
-
-#define AR_PHY_SFCORR_LOW                    0x986C
-#define AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW  0x00000001
-#define AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW    0x00003F00
-#define AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW_S  8
-#define AR_PHY_SFCORR_LOW_M1_THRESH_LOW      0x001FC000
-#define AR_PHY_SFCORR_LOW_M1_THRESH_LOW_S    14
-#define AR_PHY_SFCORR_LOW_M2_THRESH_LOW      0x0FE00000
-#define AR_PHY_SFCORR_LOW_M2_THRESH_LOW_S    21
-
-#define AR_PHY_SFCORR                0x9868
-#define AR_PHY_SFCORR_M2COUNT_THR    0x0000001F
-#define AR_PHY_SFCORR_M2COUNT_THR_S  0
-#define AR_PHY_SFCORR_M1_THRESH      0x00FE0000
-#define AR_PHY_SFCORR_M1_THRESH_S    17
-#define AR_PHY_SFCORR_M2_THRESH      0x7F000000
-#define AR_PHY_SFCORR_M2_THRESH_S    24
-
-#define AR_PHY_SLEEP_CTR_CONTROL    0x9870
-#define AR_PHY_SLEEP_CTR_LIMIT      0x9874
-#define AR_PHY_SYNTH_CONTROL        0x9874
-#define AR_PHY_SLEEP_SCAL           0x9878
-
-#define AR_PHY_PLL_CTL          0x987c
-#define AR_PHY_PLL_CTL_40       0xaa
-#define AR_PHY_PLL_CTL_40_5413  0x04
-#define AR_PHY_PLL_CTL_44       0xab
-#define AR_PHY_PLL_CTL_44_2133  0xeb
-#define AR_PHY_PLL_CTL_40_2133  0xea
-
-#define AR_PHY_SPECTRAL_SCAN                   0x9910  /* AR9280 spectral scan configuration register */
-#define        AR_PHY_SPECTRAL_SCAN_ENABLE             0x1
-#define AR_PHY_SPECTRAL_SCAN_ENA               0x00000001  /* Enable spectral scan, reg 68, bit 0 */
-#define AR_PHY_SPECTRAL_SCAN_ENA_S             0  /* Enable spectral scan, reg 68, bit 0 */
-#define AR_PHY_SPECTRAL_SCAN_ACTIVE            0x00000002  /* Activate spectral scan reg 68, bit 1*/
-#define AR_PHY_SPECTRAL_SCAN_ACTIVE_S          1  /* Activate spectral scan reg 68, bit 1*/
-#define AR_PHY_SPECTRAL_SCAN_FFT_PERIOD                0x000000F0  /* Interval for FFT reports, reg 68, bits 4-7*/
-#define AR_PHY_SPECTRAL_SCAN_FFT_PERIOD_S      4
-#define AR_PHY_SPECTRAL_SCAN_PERIOD            0x0000FF00  /* Interval for FFT reports, reg 68, bits 8-15*/
-#define AR_PHY_SPECTRAL_SCAN_PERIOD_S          8
-#define AR_PHY_SPECTRAL_SCAN_COUNT             0x00FF0000  /* Number of reports, reg 68, bits 16-23*/
-#define AR_PHY_SPECTRAL_SCAN_COUNT_S           16
-#define AR_PHY_SPECTRAL_SCAN_SHORT_REPEAT      0x01000000  /* Short repeat, reg 68, bit 24*/
-#define AR_PHY_SPECTRAL_SCAN_SHORT_REPEAT_S    24  /* Short repeat, reg 68, bit 24*/
-
-#define AR_PHY_RX_DELAY           0x9914
-#define AR_PHY_SEARCH_START_DELAY 0x9918
-#define AR_PHY_RX_DELAY_DELAY     0x00003FFF
-
-#define AR_PHY_TIMING_CTRL4(_i)     (0x9920 + ((_i) << 12))
-#define AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF 0x01F
-#define AR_PHY_TIMING_CTRL4_IQCORR_Q_Q_COFF_S   0
-#define AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF 0x7E0
-#define AR_PHY_TIMING_CTRL4_IQCORR_Q_I_COFF_S   5
-#define AR_PHY_TIMING_CTRL4_IQCORR_ENABLE   0x800
-#define AR_PHY_TIMING_CTRL4_IQCAL_LOG_COUNT_MAX 0xF000
-#define AR_PHY_TIMING_CTRL4_IQCAL_LOG_COUNT_MAX_S   12
-#define AR_PHY_TIMING_CTRL4_DO_CAL    0x10000
-
-#define AR_PHY_TIMING_CTRL4_ENABLE_SPUR_RSSI   0x80000000
-#define        AR_PHY_TIMING_CTRL4_ENABLE_SPUR_FILTER  0x40000000
-#define        AR_PHY_TIMING_CTRL4_ENABLE_CHAN_MASK    0x20000000
-#define        AR_PHY_TIMING_CTRL4_ENABLE_PILOT_MASK   0x10000000
-
-#define AR_PHY_TIMING5               0x9924
-#define AR_PHY_TIMING5_CYCPWR_THR1   0x000000FE
-#define AR_PHY_TIMING5_CYCPWR_THR1_S 1
-
-#define AR_PHY_POWER_TX_RATE1               0x9934
-#define AR_PHY_POWER_TX_RATE2               0x9938
-#define AR_PHY_POWER_TX_RATE_MAX            0x993c
-#define AR_PHY_POWER_TX_RATE_MAX_TPC_ENABLE 0x00000040
-
-#define AR_PHY_FRAME_CTL            0x9944
-#define AR_PHY_FRAME_CTL_TX_CLIP    0x00000038
-#define AR_PHY_FRAME_CTL_TX_CLIP_S  3
-
-#define AR_PHY_TXPWRADJ                   0x994C
-#define AR_PHY_TXPWRADJ_CCK_GAIN_DELTA    0x00000FC0
-#define AR_PHY_TXPWRADJ_CCK_GAIN_DELTA_S  6
-#define AR_PHY_TXPWRADJ_CCK_PCDAC_INDEX   0x00FC0000
-#define AR_PHY_TXPWRADJ_CCK_PCDAC_INDEX_S 18
-
-#define AR_PHY_RADAR_EXT      0x9940
-#define AR_PHY_RADAR_EXT_ENA  0x00004000
-
-#define AR_PHY_RADAR_0          0x9954
-#define AR_PHY_RADAR_0_ENA      0x00000001
-#define AR_PHY_RADAR_0_FFT_ENA  0x80000000
-#define AR_PHY_RADAR_0_INBAND   0x0000003e
-#define AR_PHY_RADAR_0_INBAND_S 1
-#define AR_PHY_RADAR_0_PRSSI    0x00000FC0
-#define AR_PHY_RADAR_0_PRSSI_S  6
-#define AR_PHY_RADAR_0_HEIGHT   0x0003F000
-#define AR_PHY_RADAR_0_HEIGHT_S 12
-#define AR_PHY_RADAR_0_RRSSI    0x00FC0000
-#define AR_PHY_RADAR_0_RRSSI_S  18
-#define AR_PHY_RADAR_0_FIRPWR   0x7F000000
-#define AR_PHY_RADAR_0_FIRPWR_S 24
-
-#define AR_PHY_RADAR_1                  0x9958
-#define AR_PHY_RADAR_1_RELPWR_ENA       0x00800000
-#define AR_PHY_RADAR_1_USE_FIR128       0x00400000
-#define AR_PHY_RADAR_1_RELPWR_THRESH    0x003F0000
-#define AR_PHY_RADAR_1_RELPWR_THRESH_S  16
-#define AR_PHY_RADAR_1_BLOCK_CHECK      0x00008000
-#define AR_PHY_RADAR_1_MAX_RRSSI        0x00004000
-#define AR_PHY_RADAR_1_RELSTEP_CHECK    0x00002000
-#define AR_PHY_RADAR_1_RELSTEP_THRESH   0x00001F00
-#define AR_PHY_RADAR_1_RELSTEP_THRESH_S 8
-#define AR_PHY_RADAR_1_MAXLEN           0x000000FF
-#define AR_PHY_RADAR_1_MAXLEN_S         0
-
-#define AR_PHY_SWITCH_CHAIN_0     0x9960
-#define AR_PHY_SWITCH_COM         0x9964
-
-#define AR_PHY_SIGMA_DELTA            0x996C
-#define AR_PHY_SIGMA_DELTA_ADC_SEL    0x00000003
-#define AR_PHY_SIGMA_DELTA_ADC_SEL_S  0
-#define AR_PHY_SIGMA_DELTA_FILT2      0x000000F8
-#define AR_PHY_SIGMA_DELTA_FILT2_S    3
-#define AR_PHY_SIGMA_DELTA_FILT1      0x00001F00
-#define AR_PHY_SIGMA_DELTA_FILT1_S    8
-#define AR_PHY_SIGMA_DELTA_ADC_CLIP   0x01FFE000
-#define AR_PHY_SIGMA_DELTA_ADC_CLIP_S 13
-
-#define AR_PHY_RESTART          0x9970
-#define AR_PHY_RESTART_DIV_GC   0x001C0000
-#define AR_PHY_RESTART_DIV_GC_S 18
-
-#define AR_PHY_RFBUS_REQ        0x997C
-#define AR_PHY_RFBUS_REQ_EN     0x00000001
-
-#define        AR_PHY_TIMING7                  0x9980
-#define        AR_PHY_TIMING8                  0x9984
-#define        AR_PHY_TIMING8_PILOT_MASK_2     0x000FFFFF
-#define        AR_PHY_TIMING8_PILOT_MASK_2_S   0
-
-#define        AR_PHY_BIN_MASK2_1      0x9988
-#define        AR_PHY_BIN_MASK2_2      0x998c
-#define        AR_PHY_BIN_MASK2_3      0x9990
-#define        AR_PHY_BIN_MASK2_4      0x9994
-
-#define        AR_PHY_BIN_MASK_1       0x9900
-#define        AR_PHY_BIN_MASK_2       0x9904
-#define        AR_PHY_BIN_MASK_3       0x9908
-
-#define        AR_PHY_MASK_CTL         0x990c
-
-#define        AR_PHY_BIN_MASK2_4_MASK_4       0x00003FFF
-#define        AR_PHY_BIN_MASK2_4_MASK_4_S     0
-
-#define        AR_PHY_TIMING9                  0x9998
-#define        AR_PHY_TIMING10                 0x999c
-#define        AR_PHY_TIMING10_PILOT_MASK_2    0x000FFFFF
-#define        AR_PHY_TIMING10_PILOT_MASK_2_S  0
-
-#define        AR_PHY_TIMING11                         0x99a0
-#define        AR_PHY_TIMING11_SPUR_DELTA_PHASE        0x000FFFFF
-#define        AR_PHY_TIMING11_SPUR_DELTA_PHASE_S      0
-#define AR_PHY_TIMING11_USE_SPUR_IN_AGC                0x40000000
-#define AR_PHY_TIMING11_USE_SPUR_IN_SELFCOR    0x80000000
-
-#define AR_PHY_RX_CHAINMASK     0x99a4
-#define AR_PHY_NEW_ADC_DC_GAIN_CORR(_i) (0x99b4 + ((_i) << 12))
-#define AR_PHY_NEW_ADC_GAIN_CORR_ENABLE 0x40000000
-#define AR_PHY_NEW_ADC_DC_OFFSET_CORR_ENABLE 0x80000000
-
-#define AR_PHY_MULTICHAIN_GAIN_CTL          0x99ac
-#define AR_PHY_9285_ANT_DIV_CTL_ALL         0x7f000000
-#define AR_PHY_9285_ANT_DIV_CTL             0x01000000
-#define AR_PHY_9285_ANT_DIV_CTL_S           24
-#define AR_PHY_9285_ANT_DIV_ALT_LNACONF     0x06000000
-#define AR_PHY_9285_ANT_DIV_ALT_LNACONF_S   25
-#define AR_PHY_9285_ANT_DIV_MAIN_LNACONF    0x18000000
-#define AR_PHY_9285_ANT_DIV_MAIN_LNACONF_S  27
-#define AR_PHY_9285_ANT_DIV_ALT_GAINTB      0x20000000
-#define AR_PHY_9285_ANT_DIV_ALT_GAINTB_S    29
-#define AR_PHY_9285_ANT_DIV_MAIN_GAINTB     0x40000000
-#define AR_PHY_9285_ANT_DIV_MAIN_GAINTB_S   30
-#define AR_PHY_9285_ANT_DIV_LNA1            2
-#define AR_PHY_9285_ANT_DIV_LNA2            1
-#define AR_PHY_9285_ANT_DIV_LNA1_PLUS_LNA2  3
-#define AR_PHY_9285_ANT_DIV_LNA1_MINUS_LNA2 0
-#define AR_PHY_9285_ANT_DIV_GAINTB_0        0
-#define AR_PHY_9285_ANT_DIV_GAINTB_1        1
-
-#define AR_PHY_EXT_CCA0             0x99b8
-#define AR_PHY_EXT_CCA0_THRESH62    0x000000FF
-#define AR_PHY_EXT_CCA0_THRESH62_S  0
-
-#define AR_PHY_EXT_CCA                  0x99bc
-#define AR_PHY_EXT_CCA_CYCPWR_THR1      0x0000FE00
-#define AR_PHY_EXT_CCA_CYCPWR_THR1_S    9
-#define AR_PHY_EXT_CCA_THRESH62         0x007F0000
-#define AR_PHY_EXT_CCA_THRESH62_S       16
-#define AR_PHY_EXT_TIMING5_CYCPWR_THR1   0x0000FE00L
-#define AR_PHY_EXT_TIMING5_CYCPWR_THR1_S 9
-
-#define AR_PHY_EXT_MINCCA_PWR           0xFF800000
-#define AR_PHY_EXT_MINCCA_PWR_S         23
-#define AR9280_PHY_EXT_MINCCA_PWR       0x01FF0000
-#define AR9280_PHY_EXT_MINCCA_PWR_S     16
-
-#define AR_PHY_SFCORR_EXT                 0x99c0
-#define AR_PHY_SFCORR_EXT_M1_THRESH       0x0000007F
-#define AR_PHY_SFCORR_EXT_M1_THRESH_S     0
-#define AR_PHY_SFCORR_EXT_M2_THRESH       0x00003F80
-#define AR_PHY_SFCORR_EXT_M2_THRESH_S     7
-#define AR_PHY_SFCORR_EXT_M1_THRESH_LOW   0x001FC000
-#define AR_PHY_SFCORR_EXT_M1_THRESH_LOW_S 14
-#define AR_PHY_SFCORR_EXT_M2_THRESH_LOW   0x0FE00000
-#define AR_PHY_SFCORR_EXT_M2_THRESH_LOW_S 21
-#define AR_PHY_SFCORR_SPUR_SUBCHNL_SD_S   28
-
-#define AR_PHY_HALFGI           0x99D0
-#define AR_PHY_HALFGI_DSC_MAN   0x0007FFF0
-#define AR_PHY_HALFGI_DSC_MAN_S 4
-#define AR_PHY_HALFGI_DSC_EXP   0x0000000F
-#define AR_PHY_HALFGI_DSC_EXP_S 0
-
-#define AR_PHY_CHAN_INFO_MEMORY               0x99DC
-#define AR_PHY_CHAN_INFO_MEMORY_CAPTURE_MASK  0x0001
-
-#define AR_PHY_HEAVY_CLIP_ENABLE         0x99E0
-
-#define AR_PHY_HEAVY_CLIP_FACTOR_RIFS    0x99EC
-#define AR_PHY_RIFS_INIT_DELAY         0x03ff0000
-
-#define AR_PHY_M_SLEEP      0x99f0
-#define AR_PHY_REFCLKDLY    0x99f4
-#define AR_PHY_REFCLKPD     0x99f8
-
-#define AR_PHY_CALMODE      0x99f0
-
-#define AR_PHY_CALMODE_IQ           0x00000000
-#define AR_PHY_CALMODE_ADC_GAIN     0x00000001
-#define AR_PHY_CALMODE_ADC_DC_PER   0x00000002
-#define AR_PHY_CALMODE_ADC_DC_INIT  0x00000003
-
-#define AR_PHY_CAL_MEAS_0(_i)     (0x9c10 + ((_i) << 12))
-#define AR_PHY_CAL_MEAS_1(_i)     (0x9c14 + ((_i) << 12))
-#define AR_PHY_CAL_MEAS_2(_i)     (0x9c18 + ((_i) << 12))
-#define AR_PHY_CAL_MEAS_3(_i)     (0x9c1c + ((_i) << 12))
-
-#define AR_PHY_CURRENT_RSSI 0x9c1c
-#define AR9280_PHY_CURRENT_RSSI 0x9c3c
-
-#define AR_PHY_RFBUS_GRANT       0x9C20
-#define AR_PHY_RFBUS_GRANT_EN    0x00000001
-
-#define AR_PHY_CHAN_INFO_GAIN_DIFF             0x9CF4
-#define AR_PHY_CHAN_INFO_GAIN_DIFF_UPPER_LIMIT 320
-
-#define AR_PHY_CHAN_INFO_GAIN          0x9CFC
-
-#define AR_PHY_MODE         0xA200
-#define AR_PHY_MODE_ASYNCFIFO 0x80
-#define AR_PHY_MODE_AR2133  0x08
-#define AR_PHY_MODE_AR5111  0x00
-#define AR_PHY_MODE_AR5112  0x08
-#define AR_PHY_MODE_DYNAMIC 0x04
-#define AR_PHY_MODE_RF2GHZ  0x02
-#define AR_PHY_MODE_RF5GHZ  0x00
-#define AR_PHY_MODE_CCK     0x01
-#define AR_PHY_MODE_OFDM    0x00
-#define AR_PHY_MODE_DYN_CCK_DISABLE 0x100
-
-#define AR_PHY_CCK_TX_CTRL       0xA204
-#define AR_PHY_CCK_TX_CTRL_JAPAN 0x00000010
-#define AR_PHY_CCK_TX_CTRL_TX_DAC_SCALE_CCK         0x0000000C
-#define AR_PHY_CCK_TX_CTRL_TX_DAC_SCALE_CCK_S       2
-
-#define AR_PHY_CCK_DETECT                           0xA208
-#define AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK          0x0000003F
-#define AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK_S        0
-/* [12:6] settling time for antenna switch */
-#define AR_PHY_CCK_DETECT_ANT_SWITCH_TIME           0x00001FC0
-#define AR_PHY_CCK_DETECT_ANT_SWITCH_TIME_S         6
-#define AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV    0x2000
-#define AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV_S  13
-
-#define AR_PHY_GAIN_2GHZ                0xA20C
-#define AR_PHY_GAIN_2GHZ_RXTX_MARGIN    0x00FC0000
-#define AR_PHY_GAIN_2GHZ_RXTX_MARGIN_S  18
-#define AR_PHY_GAIN_2GHZ_BSW_MARGIN     0x00003C00
-#define AR_PHY_GAIN_2GHZ_BSW_MARGIN_S   10
-#define AR_PHY_GAIN_2GHZ_BSW_ATTEN      0x0000001F
-#define AR_PHY_GAIN_2GHZ_BSW_ATTEN_S    0
-
-#define AR_PHY_GAIN_2GHZ_XATTEN2_MARGIN     0x003E0000
-#define AR_PHY_GAIN_2GHZ_XATTEN2_MARGIN_S   17
-#define AR_PHY_GAIN_2GHZ_XATTEN1_MARGIN     0x0001F000
-#define AR_PHY_GAIN_2GHZ_XATTEN1_MARGIN_S   12
-#define AR_PHY_GAIN_2GHZ_XATTEN2_DB         0x00000FC0
-#define AR_PHY_GAIN_2GHZ_XATTEN2_DB_S       6
-#define AR_PHY_GAIN_2GHZ_XATTEN1_DB         0x0000003F
-#define AR_PHY_GAIN_2GHZ_XATTEN1_DB_S       0
-
-#define AR_PHY_CCK_RXCTRL4  0xA21C
-#define AR_PHY_CCK_RXCTRL4_FREQ_EST_SHORT   0x01F80000
-#define AR_PHY_CCK_RXCTRL4_FREQ_EST_SHORT_S 19
-
-#define AR_PHY_DAG_CTRLCCK  0xA228
-#define AR_PHY_DAG_CTRLCCK_EN_RSSI_THR  0x00000200
-#define AR_PHY_DAG_CTRLCCK_RSSI_THR     0x0001FC00
-#define AR_PHY_DAG_CTRLCCK_RSSI_THR_S   10
-
-#define AR_PHY_FORCE_CLKEN_CCK              0xA22C
-#define AR_PHY_FORCE_CLKEN_CCK_MRC_MUX      0x00000040
-
-#define AR_PHY_POWER_TX_RATE3   0xA234
-#define AR_PHY_POWER_TX_RATE4   0xA238
-
-#define AR_PHY_SCRM_SEQ_XR       0xA23C
-#define AR_PHY_HEADER_DETECT_XR  0xA240
-#define AR_PHY_CHIRP_DETECTED_XR 0xA244
-#define AR_PHY_BLUETOOTH         0xA254
-
-#define AR_PHY_TPCRG1   0xA258
-#define AR_PHY_TPCRG1_NUM_PD_GAIN   0x0000c000
-#define AR_PHY_TPCRG1_NUM_PD_GAIN_S 14
-
-#define AR_PHY_TPCRG1_PD_GAIN_1    0x00030000
-#define AR_PHY_TPCRG1_PD_GAIN_1_S  16
-#define AR_PHY_TPCRG1_PD_GAIN_2    0x000C0000
-#define AR_PHY_TPCRG1_PD_GAIN_2_S  18
-#define AR_PHY_TPCRG1_PD_GAIN_3    0x00300000
-#define AR_PHY_TPCRG1_PD_GAIN_3_S  20
-
-#define AR_PHY_TPCRG1_PD_CAL_ENABLE   0x00400000
-#define AR_PHY_TPCRG1_PD_CAL_ENABLE_S 22
-
-#define AR_PHY_TX_PWRCTRL4       0xa264
-#define AR_PHY_TX_PWRCTRL_PD_AVG_VALID     0x00000001
-#define AR_PHY_TX_PWRCTRL_PD_AVG_VALID_S   0
-#define AR_PHY_TX_PWRCTRL_PD_AVG_OUT       0x000001FE
-#define AR_PHY_TX_PWRCTRL_PD_AVG_OUT_S     1
-
-#define AR_PHY_TX_PWRCTRL6_0     0xa270
-#define AR_PHY_TX_PWRCTRL6_1     0xb270
-#define AR_PHY_TX_PWRCTRL_ERR_EST_MODE     0x03000000
-#define AR_PHY_TX_PWRCTRL_ERR_EST_MODE_S   24
-
-#define AR_PHY_TX_PWRCTRL7       0xa274
-#define AR_PHY_TX_PWRCTRL_INIT_TX_GAIN     0x01F80000
-#define AR_PHY_TX_PWRCTRL_INIT_TX_GAIN_S   19
-
-#define AR_PHY_TX_PWRCTRL9       0xa27C
-#define AR_PHY_TX_DESIRED_SCALE_CCK        0x00007C00
-#define AR_PHY_TX_DESIRED_SCALE_CCK_S      10
-#define AR_PHY_TX_PWRCTRL9_RES_DC_REMOVAL  0x80000000
-#define AR_PHY_TX_PWRCTRL9_RES_DC_REMOVAL_S 31
-
-#define AR_PHY_TX_GAIN_TBL1      0xa300
-#define AR_PHY_TX_GAIN                     0x0007F000
-#define AR_PHY_TX_GAIN_S                   12
-
-#define AR_PHY_CH0_TX_PWRCTRL11  0xa398
-#define AR_PHY_CH1_TX_PWRCTRL11  0xb398
-#define AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP   0x0000FC00
-#define AR_PHY_TX_PWRCTRL_OLPC_TEMP_COMP_S 10
-
-#define AR_PHY_VIT_MASK2_M_46_61 0xa3a0
-#define AR_PHY_MASK2_M_31_45     0xa3a4
-#define AR_PHY_MASK2_M_16_30     0xa3a8
-#define AR_PHY_MASK2_M_00_15     0xa3ac
-#define AR_PHY_MASK2_P_15_01     0xa3b8
-#define AR_PHY_MASK2_P_30_16     0xa3bc
-#define AR_PHY_MASK2_P_45_31     0xa3c0
-#define AR_PHY_MASK2_P_61_45     0xa3c4
-#define AR_PHY_SPUR_REG          0x994c
-
-#define AR_PHY_SPUR_REG_MASK_RATE_CNTL       (0xFF << 18)
-#define AR_PHY_SPUR_REG_MASK_RATE_CNTL_S     18
-
-#define AR_PHY_SPUR_REG_ENABLE_MASK_PPM      0x20000
-#define AR_PHY_SPUR_REG_MASK_RATE_SELECT     (0xFF << 9)
-#define AR_PHY_SPUR_REG_MASK_RATE_SELECT_S   9
-#define AR_PHY_SPUR_REG_ENABLE_VIT_SPUR_RSSI 0x100
-#define AR_PHY_SPUR_REG_SPUR_RSSI_THRESH     0x7F
-#define AR_PHY_SPUR_REG_SPUR_RSSI_THRESH_S   0
-
-#define AR_PHY_PILOT_MASK_01_30   0xa3b0
-#define AR_PHY_PILOT_MASK_31_60   0xa3b4
-
-#define AR_PHY_CHANNEL_MASK_01_30 0x99d4
-#define AR_PHY_CHANNEL_MASK_31_60 0x99d8
-
-#define AR_PHY_ANALOG_SWAP      0xa268
-#define AR_PHY_SWAP_ALT_CHAIN   0x00000040
-
-#define AR_PHY_TPCRG5   0xA26C
-#define AR_PHY_TPCRG5_PD_GAIN_OVERLAP       0x0000000F
-#define AR_PHY_TPCRG5_PD_GAIN_OVERLAP_S     0
-#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_1    0x000003F0
-#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_1_S  4
-#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_2    0x0000FC00
-#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_2_S  10
-#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_3    0x003F0000
-#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_3_S  16
-#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_4    0x0FC00000
-#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_4_S  22
-
-/* Carrier leak calibration control, do it after AGC calibration */
-#define AR_PHY_CL_CAL_CTL       0xA358
-#define AR_PHY_CL_CAL_ENABLE    0x00000002
-#define AR_PHY_PARALLEL_CAL_ENABLE    0x00000001
-
-#define AR_PHY_POWER_TX_RATE5   0xA38C
-#define AR_PHY_POWER_TX_RATE6   0xA390
-
-#define AR_PHY_CAL_CHAINMASK    0xA39C
-
-#define AR_PHY_POWER_TX_SUB     0xA3C8
-#define AR_PHY_POWER_TX_RATE7   0xA3CC
-#define AR_PHY_POWER_TX_RATE8   0xA3D0
-#define AR_PHY_POWER_TX_RATE9   0xA3D4
-
-#define AR_PHY_XPA_CFG         0xA3D8
-#define AR_PHY_FORCE_XPA_CFG   0x000000001
-#define AR_PHY_FORCE_XPA_CFG_S 0
-
-#define AR_PHY_CH1_CCA          0xa864
-#define AR_PHY_CH1_MINCCA_PWR   0x0FF80000
-#define AR_PHY_CH1_MINCCA_PWR_S 19
-#define AR9280_PHY_CH1_MINCCA_PWR   0x1FF00000
-#define AR9280_PHY_CH1_MINCCA_PWR_S 20
-
-#define AR_PHY_CH2_CCA          0xb864
-#define AR_PHY_CH2_MINCCA_PWR   0x0FF80000
-#define AR_PHY_CH2_MINCCA_PWR_S 19
-
-#define AR_PHY_CH1_EXT_CCA          0xa9bc
-#define AR_PHY_CH1_EXT_MINCCA_PWR   0xFF800000
-#define AR_PHY_CH1_EXT_MINCCA_PWR_S 23
-#define AR9280_PHY_CH1_EXT_MINCCA_PWR   0x01FF0000
-#define AR9280_PHY_CH1_EXT_MINCCA_PWR_S 16
-
-#define AR_PHY_CH2_EXT_CCA          0xb9bc
-#define AR_PHY_CH2_EXT_MINCCA_PWR   0xFF800000
-#define AR_PHY_CH2_EXT_MINCCA_PWR_S 23
-
-#define AR_PHY_CCA_NOM_VAL_5416_2GHZ            -90
-#define AR_PHY_CCA_NOM_VAL_5416_5GHZ            -100
-#define AR_PHY_CCA_MIN_GOOD_VAL_5416_2GHZ     -100
-#define AR_PHY_CCA_MIN_GOOD_VAL_5416_5GHZ     -110
-#define AR_PHY_CCA_MAX_GOOD_VAL_5416_2GHZ     -80
-#define AR_PHY_CCA_MAX_GOOD_VAL_5416_5GHZ     -90
-
-#define AR_PHY_CCA_NOM_VAL_9280_2GHZ         -112
-#define AR_PHY_CCA_NOM_VAL_9280_5GHZ         -112
-#define AR_PHY_CCA_MIN_GOOD_VAL_9280_2GHZ  -127
-#define AR_PHY_CCA_MIN_GOOD_VAL_9280_5GHZ  -122
-#define AR_PHY_CCA_MAX_GOOD_VAL_9280_2GHZ  -97
-#define AR_PHY_CCA_MAX_GOOD_VAL_9280_5GHZ  -102
-
-#define AR_PHY_CCA_NOM_VAL_9285_2GHZ           -118
-#define AR_PHY_CCA_MIN_GOOD_VAL_9285_2GHZ    -127
-#define AR_PHY_CCA_MAX_GOOD_VAL_9285_2GHZ    -108
-
-#define AR_PHY_CCA_NOM_VAL_9271_2GHZ             -118
-#define AR_PHY_CCA_MIN_GOOD_VAL_9271_2GHZ      -127
-#define AR_PHY_CCA_MAX_GOOD_VAL_9271_2GHZ      -116
-
-#define AR_PHY_CCA_NOM_VAL_9287_2GHZ           -120
-#define AR_PHY_CCA_MIN_GOOD_VAL_9287_2GHZ    -127
-#define AR_PHY_CCA_MAX_GOOD_VAL_9287_2GHZ    -110
-
-#endif
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_2p0_initvals.h b/drivers/net/wireless/ath/ath9k/ar9003_2p0_initvals.h
deleted file mode 100644 (file)
index d3375fc..0000000
+++ /dev/null
@@ -1,1784 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef INITVALS_9003_2P0_H
-#define INITVALS_9003_2P0_H
-
-/* AR9003 2.0 */
-
-static const u32 ar9300_2p0_radio_postamble[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x0001609c, 0x0dd08f29, 0x0dd08f29, 0x0b283f31, 0x0b283f31},
-       {0x000160ac, 0xa4653c00, 0xa4653c00, 0x24652800, 0x24652800},
-       {0x000160b0, 0x03284f3e, 0x03284f3e, 0x05d08f20, 0x05d08f20},
-       {0x0001610c, 0x08000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00016140, 0x10804008, 0x10804008, 0x50804008, 0x50804008},
-       {0x0001650c, 0x08000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00016540, 0x10804008, 0x10804008, 0x50804008, 0x50804008},
-       {0x0001690c, 0x08000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00016940, 0x10804008, 0x10804008, 0x50804008, 0x50804008},
-};
-
-static const u32 ar9300Modes_lowest_ob_db_tx_gain_table_2p0[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9},
-       {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002},
-       {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004},
-       {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200},
-       {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202},
-       {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400},
-       {0x0000a518, 0x21020220, 0x21020220, 0x16000402, 0x16000402},
-       {0x0000a51c, 0x27020223, 0x27020223, 0x19000404, 0x19000404},
-       {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603},
-       {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02},
-       {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04},
-       {0x0000a52c, 0x3a02222a, 0x3a02222a, 0x28000a20, 0x28000a20},
-       {0x0000a530, 0x3e02222c, 0x3e02222c, 0x2c000e20, 0x2c000e20},
-       {0x0000a534, 0x4202242a, 0x4202242a, 0x30000e22, 0x30000e22},
-       {0x0000a538, 0x4702244a, 0x4702244a, 0x34000e24, 0x34000e24},
-       {0x0000a53c, 0x4b02244c, 0x4b02244c, 0x38001640, 0x38001640},
-       {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660},
-       {0x0000a544, 0x5302266c, 0x5302266c, 0x3f001861, 0x3f001861},
-       {0x0000a548, 0x5702286c, 0x5702286c, 0x43001a81, 0x43001a81},
-       {0x0000a54c, 0x5c04286b, 0x5c04286b, 0x47001a83, 0x47001a83},
-       {0x0000a550, 0x61042a6c, 0x61042a6c, 0x4a001c84, 0x4a001c84},
-       {0x0000a554, 0x66062a6c, 0x66062a6c, 0x4e001ce3, 0x4e001ce3},
-       {0x0000a558, 0x6b062e6c, 0x6b062e6c, 0x52001ce5, 0x52001ce5},
-       {0x0000a55c, 0x7006308c, 0x7006308c, 0x56001ce9, 0x56001ce9},
-       {0x0000a560, 0x730a308a, 0x730a308a, 0x5a001ceb, 0x5a001ceb},
-       {0x0000a564, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
-       {0x0000a568, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
-       {0x0000a56c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
-       {0x0000a570, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
-       {0x0000a574, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
-       {0x0000a578, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
-       {0x0000a57c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
-       {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
-       {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002},
-       {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004},
-       {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200},
-       {0x0000a590, 0x16800220, 0x16800220, 0x0f800202, 0x0f800202},
-       {0x0000a594, 0x1c800223, 0x1c800223, 0x12800400, 0x12800400},
-       {0x0000a598, 0x21820220, 0x21820220, 0x16800402, 0x16800402},
-       {0x0000a59c, 0x27820223, 0x27820223, 0x19800404, 0x19800404},
-       {0x0000a5a0, 0x2b822220, 0x2b822220, 0x1c800603, 0x1c800603},
-       {0x0000a5a4, 0x2f822222, 0x2f822222, 0x21800a02, 0x21800a02},
-       {0x0000a5a8, 0x34822225, 0x34822225, 0x25800a04, 0x25800a04},
-       {0x0000a5ac, 0x3a82222a, 0x3a82222a, 0x28800a20, 0x28800a20},
-       {0x0000a5b0, 0x3e82222c, 0x3e82222c, 0x2c800e20, 0x2c800e20},
-       {0x0000a5b4, 0x4282242a, 0x4282242a, 0x30800e22, 0x30800e22},
-       {0x0000a5b8, 0x4782244a, 0x4782244a, 0x34800e24, 0x34800e24},
-       {0x0000a5bc, 0x4b82244c, 0x4b82244c, 0x38801640, 0x38801640},
-       {0x0000a5c0, 0x4e82246c, 0x4e82246c, 0x3c801660, 0x3c801660},
-       {0x0000a5c4, 0x5382266c, 0x5382266c, 0x3f801861, 0x3f801861},
-       {0x0000a5c8, 0x5782286c, 0x5782286c, 0x43801a81, 0x43801a81},
-       {0x0000a5cc, 0x5c84286b, 0x5c84286b, 0x47801a83, 0x47801a83},
-       {0x0000a5d0, 0x61842a6c, 0x61842a6c, 0x4a801c84, 0x4a801c84},
-       {0x0000a5d4, 0x66862a6c, 0x66862a6c, 0x4e801ce3, 0x4e801ce3},
-       {0x0000a5d8, 0x6b862e6c, 0x6b862e6c, 0x52801ce5, 0x52801ce5},
-       {0x0000a5dc, 0x7086308c, 0x7086308c, 0x56801ce9, 0x56801ce9},
-       {0x0000a5e0, 0x738a308a, 0x738a308a, 0x5a801ceb, 0x5a801ceb},
-       {0x0000a5e4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5e8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5ec, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5f0, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5f4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5f8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5fc, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
-       {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
-       {0x00016048, 0x62480001, 0x62480001, 0x62480001, 0x62480001},
-       {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
-       {0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
-       {0x00016448, 0x62480001, 0x62480001, 0x62480001, 0x62480001},
-       {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
-       {0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
-       {0x00016848, 0x62480001, 0x62480001, 0x62480001, 0x62480001},
-       {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
-};
-
-static const u32 ar9300Modes_fast_clock_2p0[][3] = {
-       /* Addr      5G_HT20     5G_HT40   */
-       {0x00001030, 0x00000268, 0x000004d0},
-       {0x00001070, 0x0000018c, 0x00000318},
-       {0x000010b0, 0x00000fd0, 0x00001fa0},
-       {0x00008014, 0x044c044c, 0x08980898},
-       {0x0000801c, 0x148ec02b, 0x148ec057},
-       {0x00008318, 0x000044c0, 0x00008980},
-       {0x00009e00, 0x03721821, 0x03721821},
-       {0x0000a230, 0x0000000b, 0x00000016},
-       {0x0000a254, 0x00000898, 0x00001130},
-};
-
-static const u32 ar9300_2p0_radio_core[][2] = {
-       /* Addr      allmodes  */
-       {0x00016000, 0x36db6db6},
-       {0x00016004, 0x6db6db40},
-       {0x00016008, 0x73f00000},
-       {0x0001600c, 0x00000000},
-       {0x00016040, 0x7f80fff8},
-       {0x0001604c, 0x76d005b5},
-       {0x00016050, 0x556cf031},
-       {0x00016054, 0x13449440},
-       {0x00016058, 0x0c51c92c},
-       {0x0001605c, 0x3db7fffc},
-       {0x00016060, 0xfffffffc},
-       {0x00016064, 0x000f0278},
-       {0x0001606c, 0x6db60000},
-       {0x00016080, 0x00000000},
-       {0x00016084, 0x0e48048c},
-       {0x00016088, 0x54214514},
-       {0x0001608c, 0x119f481e},
-       {0x00016090, 0x24926490},
-       {0x00016098, 0xd2888888},
-       {0x000160a0, 0x0a108ffe},
-       {0x000160a4, 0x812fc370},
-       {0x000160a8, 0x423c8000},
-       {0x000160b4, 0x92480080},
-       {0x000160c0, 0x00adb6d0},
-       {0x000160c4, 0x6db6db60},
-       {0x000160c8, 0x6db6db6c},
-       {0x000160cc, 0x01e6c000},
-       {0x00016100, 0x3fffbe01},
-       {0x00016104, 0xfff80000},
-       {0x00016108, 0x00080010},
-       {0x00016144, 0x02084080},
-       {0x00016148, 0x00000000},
-       {0x00016280, 0x058a0001},
-       {0x00016284, 0x3d840208},
-       {0x00016288, 0x05a20408},
-       {0x0001628c, 0x00038c07},
-       {0x00016290, 0x40000004},
-       {0x00016294, 0x458aa14f},
-       {0x00016380, 0x00000000},
-       {0x00016384, 0x00000000},
-       {0x00016388, 0x00800700},
-       {0x0001638c, 0x00800700},
-       {0x00016390, 0x00800700},
-       {0x00016394, 0x00000000},
-       {0x00016398, 0x00000000},
-       {0x0001639c, 0x00000000},
-       {0x000163a0, 0x00000001},
-       {0x000163a4, 0x00000001},
-       {0x000163a8, 0x00000000},
-       {0x000163ac, 0x00000000},
-       {0x000163b0, 0x00000000},
-       {0x000163b4, 0x00000000},
-       {0x000163b8, 0x00000000},
-       {0x000163bc, 0x00000000},
-       {0x000163c0, 0x000000a0},
-       {0x000163c4, 0x000c0000},
-       {0x000163c8, 0x14021402},
-       {0x000163cc, 0x00001402},
-       {0x000163d0, 0x00000000},
-       {0x000163d4, 0x00000000},
-       {0x00016400, 0x36db6db6},
-       {0x00016404, 0x6db6db40},
-       {0x00016408, 0x73f00000},
-       {0x0001640c, 0x00000000},
-       {0x00016440, 0x7f80fff8},
-       {0x0001644c, 0x76d005b5},
-       {0x00016450, 0x556cf031},
-       {0x00016454, 0x13449440},
-       {0x00016458, 0x0c51c92c},
-       {0x0001645c, 0x3db7fffc},
-       {0x00016460, 0xfffffffc},
-       {0x00016464, 0x000f0278},
-       {0x0001646c, 0x6db60000},
-       {0x00016500, 0x3fffbe01},
-       {0x00016504, 0xfff80000},
-       {0x00016508, 0x00080010},
-       {0x00016544, 0x02084080},
-       {0x00016548, 0x00000000},
-       {0x00016780, 0x00000000},
-       {0x00016784, 0x00000000},
-       {0x00016788, 0x00800700},
-       {0x0001678c, 0x00800700},
-       {0x00016790, 0x00800700},
-       {0x00016794, 0x00000000},
-       {0x00016798, 0x00000000},
-       {0x0001679c, 0x00000000},
-       {0x000167a0, 0x00000001},
-       {0x000167a4, 0x00000001},
-       {0x000167a8, 0x00000000},
-       {0x000167ac, 0x00000000},
-       {0x000167b0, 0x00000000},
-       {0x000167b4, 0x00000000},
-       {0x000167b8, 0x00000000},
-       {0x000167bc, 0x00000000},
-       {0x000167c0, 0x000000a0},
-       {0x000167c4, 0x000c0000},
-       {0x000167c8, 0x14021402},
-       {0x000167cc, 0x00001402},
-       {0x000167d0, 0x00000000},
-       {0x000167d4, 0x00000000},
-       {0x00016800, 0x36db6db6},
-       {0x00016804, 0x6db6db40},
-       {0x00016808, 0x73f00000},
-       {0x0001680c, 0x00000000},
-       {0x00016840, 0x7f80fff8},
-       {0x0001684c, 0x76d005b5},
-       {0x00016850, 0x556cf031},
-       {0x00016854, 0x13449440},
-       {0x00016858, 0x0c51c92c},
-       {0x0001685c, 0x3db7fffc},
-       {0x00016860, 0xfffffffc},
-       {0x00016864, 0x000f0278},
-       {0x0001686c, 0x6db60000},
-       {0x00016900, 0x3fffbe01},
-       {0x00016904, 0xfff80000},
-       {0x00016908, 0x00080010},
-       {0x00016944, 0x02084080},
-       {0x00016948, 0x00000000},
-       {0x00016b80, 0x00000000},
-       {0x00016b84, 0x00000000},
-       {0x00016b88, 0x00800700},
-       {0x00016b8c, 0x00800700},
-       {0x00016b90, 0x00800700},
-       {0x00016b94, 0x00000000},
-       {0x00016b98, 0x00000000},
-       {0x00016b9c, 0x00000000},
-       {0x00016ba0, 0x00000001},
-       {0x00016ba4, 0x00000001},
-       {0x00016ba8, 0x00000000},
-       {0x00016bac, 0x00000000},
-       {0x00016bb0, 0x00000000},
-       {0x00016bb4, 0x00000000},
-       {0x00016bb8, 0x00000000},
-       {0x00016bbc, 0x00000000},
-       {0x00016bc0, 0x000000a0},
-       {0x00016bc4, 0x000c0000},
-       {0x00016bc8, 0x14021402},
-       {0x00016bcc, 0x00001402},
-       {0x00016bd0, 0x00000000},
-       {0x00016bd4, 0x00000000},
-};
-
-static const u32 ar9300Common_rx_gain_table_merlin_2p0[][2] = {
-       /* Addr      allmodes  */
-       {0x0000a000, 0x02000101},
-       {0x0000a004, 0x02000102},
-       {0x0000a008, 0x02000103},
-       {0x0000a00c, 0x02000104},
-       {0x0000a010, 0x02000200},
-       {0x0000a014, 0x02000201},
-       {0x0000a018, 0x02000202},
-       {0x0000a01c, 0x02000203},
-       {0x0000a020, 0x02000204},
-       {0x0000a024, 0x02000205},
-       {0x0000a028, 0x02000208},
-       {0x0000a02c, 0x02000302},
-       {0x0000a030, 0x02000303},
-       {0x0000a034, 0x02000304},
-       {0x0000a038, 0x02000400},
-       {0x0000a03c, 0x02010300},
-       {0x0000a040, 0x02010301},
-       {0x0000a044, 0x02010302},
-       {0x0000a048, 0x02000500},
-       {0x0000a04c, 0x02010400},
-       {0x0000a050, 0x02020300},
-       {0x0000a054, 0x02020301},
-       {0x0000a058, 0x02020302},
-       {0x0000a05c, 0x02020303},
-       {0x0000a060, 0x02020400},
-       {0x0000a064, 0x02030300},
-       {0x0000a068, 0x02030301},
-       {0x0000a06c, 0x02030302},
-       {0x0000a070, 0x02030303},
-       {0x0000a074, 0x02030400},
-       {0x0000a078, 0x02040300},
-       {0x0000a07c, 0x02040301},
-       {0x0000a080, 0x02040302},
-       {0x0000a084, 0x02040303},
-       {0x0000a088, 0x02030500},
-       {0x0000a08c, 0x02040400},
-       {0x0000a090, 0x02050203},
-       {0x0000a094, 0x02050204},
-       {0x0000a098, 0x02050205},
-       {0x0000a09c, 0x02040500},
-       {0x0000a0a0, 0x02050301},
-       {0x0000a0a4, 0x02050302},
-       {0x0000a0a8, 0x02050303},
-       {0x0000a0ac, 0x02050400},
-       {0x0000a0b0, 0x02050401},
-       {0x0000a0b4, 0x02050402},
-       {0x0000a0b8, 0x02050403},
-       {0x0000a0bc, 0x02050500},
-       {0x0000a0c0, 0x02050501},
-       {0x0000a0c4, 0x02050502},
-       {0x0000a0c8, 0x02050503},
-       {0x0000a0cc, 0x02050504},
-       {0x0000a0d0, 0x02050600},
-       {0x0000a0d4, 0x02050601},
-       {0x0000a0d8, 0x02050602},
-       {0x0000a0dc, 0x02050603},
-       {0x0000a0e0, 0x02050604},
-       {0x0000a0e4, 0x02050700},
-       {0x0000a0e8, 0x02050701},
-       {0x0000a0ec, 0x02050702},
-       {0x0000a0f0, 0x02050703},
-       {0x0000a0f4, 0x02050704},
-       {0x0000a0f8, 0x02050705},
-       {0x0000a0fc, 0x02050708},
-       {0x0000a100, 0x02050709},
-       {0x0000a104, 0x0205070a},
-       {0x0000a108, 0x0205070b},
-       {0x0000a10c, 0x0205070c},
-       {0x0000a110, 0x0205070d},
-       {0x0000a114, 0x02050710},
-       {0x0000a118, 0x02050711},
-       {0x0000a11c, 0x02050712},
-       {0x0000a120, 0x02050713},
-       {0x0000a124, 0x02050714},
-       {0x0000a128, 0x02050715},
-       {0x0000a12c, 0x02050730},
-       {0x0000a130, 0x02050731},
-       {0x0000a134, 0x02050732},
-       {0x0000a138, 0x02050733},
-       {0x0000a13c, 0x02050734},
-       {0x0000a140, 0x02050735},
-       {0x0000a144, 0x02050750},
-       {0x0000a148, 0x02050751},
-       {0x0000a14c, 0x02050752},
-       {0x0000a150, 0x02050753},
-       {0x0000a154, 0x02050754},
-       {0x0000a158, 0x02050755},
-       {0x0000a15c, 0x02050770},
-       {0x0000a160, 0x02050771},
-       {0x0000a164, 0x02050772},
-       {0x0000a168, 0x02050773},
-       {0x0000a16c, 0x02050774},
-       {0x0000a170, 0x02050775},
-       {0x0000a174, 0x00000776},
-       {0x0000a178, 0x00000776},
-       {0x0000a17c, 0x00000776},
-       {0x0000a180, 0x00000776},
-       {0x0000a184, 0x00000776},
-       {0x0000a188, 0x00000776},
-       {0x0000a18c, 0x00000776},
-       {0x0000a190, 0x00000776},
-       {0x0000a194, 0x00000776},
-       {0x0000a198, 0x00000776},
-       {0x0000a19c, 0x00000776},
-       {0x0000a1a0, 0x00000776},
-       {0x0000a1a4, 0x00000776},
-       {0x0000a1a8, 0x00000776},
-       {0x0000a1ac, 0x00000776},
-       {0x0000a1b0, 0x00000776},
-       {0x0000a1b4, 0x00000776},
-       {0x0000a1b8, 0x00000776},
-       {0x0000a1bc, 0x00000776},
-       {0x0000a1c0, 0x00000776},
-       {0x0000a1c4, 0x00000776},
-       {0x0000a1c8, 0x00000776},
-       {0x0000a1cc, 0x00000776},
-       {0x0000a1d0, 0x00000776},
-       {0x0000a1d4, 0x00000776},
-       {0x0000a1d8, 0x00000776},
-       {0x0000a1dc, 0x00000776},
-       {0x0000a1e0, 0x00000776},
-       {0x0000a1e4, 0x00000776},
-       {0x0000a1e8, 0x00000776},
-       {0x0000a1ec, 0x00000776},
-       {0x0000a1f0, 0x00000776},
-       {0x0000a1f4, 0x00000776},
-       {0x0000a1f8, 0x00000776},
-       {0x0000a1fc, 0x00000776},
-       {0x0000b000, 0x02000101},
-       {0x0000b004, 0x02000102},
-       {0x0000b008, 0x02000103},
-       {0x0000b00c, 0x02000104},
-       {0x0000b010, 0x02000200},
-       {0x0000b014, 0x02000201},
-       {0x0000b018, 0x02000202},
-       {0x0000b01c, 0x02000203},
-       {0x0000b020, 0x02000204},
-       {0x0000b024, 0x02000205},
-       {0x0000b028, 0x02000208},
-       {0x0000b02c, 0x02000302},
-       {0x0000b030, 0x02000303},
-       {0x0000b034, 0x02000304},
-       {0x0000b038, 0x02000400},
-       {0x0000b03c, 0x02010300},
-       {0x0000b040, 0x02010301},
-       {0x0000b044, 0x02010302},
-       {0x0000b048, 0x02000500},
-       {0x0000b04c, 0x02010400},
-       {0x0000b050, 0x02020300},
-       {0x0000b054, 0x02020301},
-       {0x0000b058, 0x02020302},
-       {0x0000b05c, 0x02020303},
-       {0x0000b060, 0x02020400},
-       {0x0000b064, 0x02030300},
-       {0x0000b068, 0x02030301},
-       {0x0000b06c, 0x02030302},
-       {0x0000b070, 0x02030303},
-       {0x0000b074, 0x02030400},
-       {0x0000b078, 0x02040300},
-       {0x0000b07c, 0x02040301},
-       {0x0000b080, 0x02040302},
-       {0x0000b084, 0x02040303},
-       {0x0000b088, 0x02030500},
-       {0x0000b08c, 0x02040400},
-       {0x0000b090, 0x02050203},
-       {0x0000b094, 0x02050204},
-       {0x0000b098, 0x02050205},
-       {0x0000b09c, 0x02040500},
-       {0x0000b0a0, 0x02050301},
-       {0x0000b0a4, 0x02050302},
-       {0x0000b0a8, 0x02050303},
-       {0x0000b0ac, 0x02050400},
-       {0x0000b0b0, 0x02050401},
-       {0x0000b0b4, 0x02050402},
-       {0x0000b0b8, 0x02050403},
-       {0x0000b0bc, 0x02050500},
-       {0x0000b0c0, 0x02050501},
-       {0x0000b0c4, 0x02050502},
-       {0x0000b0c8, 0x02050503},
-       {0x0000b0cc, 0x02050504},
-       {0x0000b0d0, 0x02050600},
-       {0x0000b0d4, 0x02050601},
-       {0x0000b0d8, 0x02050602},
-       {0x0000b0dc, 0x02050603},
-       {0x0000b0e0, 0x02050604},
-       {0x0000b0e4, 0x02050700},
-       {0x0000b0e8, 0x02050701},
-       {0x0000b0ec, 0x02050702},
-       {0x0000b0f0, 0x02050703},
-       {0x0000b0f4, 0x02050704},
-       {0x0000b0f8, 0x02050705},
-       {0x0000b0fc, 0x02050708},
-       {0x0000b100, 0x02050709},
-       {0x0000b104, 0x0205070a},
-       {0x0000b108, 0x0205070b},
-       {0x0000b10c, 0x0205070c},
-       {0x0000b110, 0x0205070d},
-       {0x0000b114, 0x02050710},
-       {0x0000b118, 0x02050711},
-       {0x0000b11c, 0x02050712},
-       {0x0000b120, 0x02050713},
-       {0x0000b124, 0x02050714},
-       {0x0000b128, 0x02050715},
-       {0x0000b12c, 0x02050730},
-       {0x0000b130, 0x02050731},
-       {0x0000b134, 0x02050732},
-       {0x0000b138, 0x02050733},
-       {0x0000b13c, 0x02050734},
-       {0x0000b140, 0x02050735},
-       {0x0000b144, 0x02050750},
-       {0x0000b148, 0x02050751},
-       {0x0000b14c, 0x02050752},
-       {0x0000b150, 0x02050753},
-       {0x0000b154, 0x02050754},
-       {0x0000b158, 0x02050755},
-       {0x0000b15c, 0x02050770},
-       {0x0000b160, 0x02050771},
-       {0x0000b164, 0x02050772},
-       {0x0000b168, 0x02050773},
-       {0x0000b16c, 0x02050774},
-       {0x0000b170, 0x02050775},
-       {0x0000b174, 0x00000776},
-       {0x0000b178, 0x00000776},
-       {0x0000b17c, 0x00000776},
-       {0x0000b180, 0x00000776},
-       {0x0000b184, 0x00000776},
-       {0x0000b188, 0x00000776},
-       {0x0000b18c, 0x00000776},
-       {0x0000b190, 0x00000776},
-       {0x0000b194, 0x00000776},
-       {0x0000b198, 0x00000776},
-       {0x0000b19c, 0x00000776},
-       {0x0000b1a0, 0x00000776},
-       {0x0000b1a4, 0x00000776},
-       {0x0000b1a8, 0x00000776},
-       {0x0000b1ac, 0x00000776},
-       {0x0000b1b0, 0x00000776},
-       {0x0000b1b4, 0x00000776},
-       {0x0000b1b8, 0x00000776},
-       {0x0000b1bc, 0x00000776},
-       {0x0000b1c0, 0x00000776},
-       {0x0000b1c4, 0x00000776},
-       {0x0000b1c8, 0x00000776},
-       {0x0000b1cc, 0x00000776},
-       {0x0000b1d0, 0x00000776},
-       {0x0000b1d4, 0x00000776},
-       {0x0000b1d8, 0x00000776},
-       {0x0000b1dc, 0x00000776},
-       {0x0000b1e0, 0x00000776},
-       {0x0000b1e4, 0x00000776},
-       {0x0000b1e8, 0x00000776},
-       {0x0000b1ec, 0x00000776},
-       {0x0000b1f0, 0x00000776},
-       {0x0000b1f4, 0x00000776},
-       {0x0000b1f8, 0x00000776},
-       {0x0000b1fc, 0x00000776},
-};
-
-static const u32 ar9300_2p0_mac_postamble[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160},
-       {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c},
-       {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38},
-       {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00},
-       {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b},
-       {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810},
-       {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a},
-       {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440},
-};
-
-static const u32 ar9300_2p0_soc_postamble[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x00007010, 0x00000023, 0x00000023, 0x00000023, 0x00000023},
-};
-
-static const u32 ar9200_merlin_2p0_radio_core[][2] = {
-       /* Addr      allmodes  */
-       {0x00007800, 0x00040000},
-       {0x00007804, 0xdb005012},
-       {0x00007808, 0x04924914},
-       {0x0000780c, 0x21084210},
-       {0x00007810, 0x6d801300},
-       {0x00007814, 0x0019beff},
-       {0x00007818, 0x07e41000},
-       {0x0000781c, 0x00392000},
-       {0x00007820, 0x92592480},
-       {0x00007824, 0x00040000},
-       {0x00007828, 0xdb005012},
-       {0x0000782c, 0x04924914},
-       {0x00007830, 0x21084210},
-       {0x00007834, 0x6d801300},
-       {0x00007838, 0x0019beff},
-       {0x0000783c, 0x07e40000},
-       {0x00007840, 0x00392000},
-       {0x00007844, 0x92592480},
-       {0x00007848, 0x00100000},
-       {0x0000784c, 0x773f0567},
-       {0x00007850, 0x54214514},
-       {0x00007854, 0x12035828},
-       {0x00007858, 0x92592692},
-       {0x0000785c, 0x00000000},
-       {0x00007860, 0x56400000},
-       {0x00007864, 0x0a8e370e},
-       {0x00007868, 0xc0102850},
-       {0x0000786c, 0x812d4000},
-       {0x00007870, 0x807ec400},
-       {0x00007874, 0x001b6db0},
-       {0x00007878, 0x00376b63},
-       {0x0000787c, 0x06db6db6},
-       {0x00007880, 0x006d8000},
-       {0x00007884, 0xffeffffe},
-       {0x00007888, 0xffeffffe},
-       {0x0000788c, 0x00010000},
-       {0x00007890, 0x02060aeb},
-       {0x00007894, 0x5a108000},
-};
-
-static const u32 ar9300_2p0_baseband_postamble[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8011, 0xd00a8011},
-       {0x00009820, 0x206a022e, 0x206a022e, 0x206a012e, 0x206a012e},
-       {0x00009824, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0},
-       {0x00009828, 0x06903081, 0x06903081, 0x06903881, 0x06903881},
-       {0x0000982c, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4},
-       {0x00009830, 0x0000059c, 0x0000059c, 0x0000119c, 0x0000119c},
-       {0x00009c00, 0x00000044, 0x000000c4, 0x000000c4, 0x00000044},
-       {0x00009e00, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0},
-       {0x00009e04, 0x00802020, 0x00802020, 0x00802020, 0x00802020},
-       {0x00009e0c, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2},
-       {0x00009e10, 0x7ec88d2e, 0x7ec88d2e, 0x7ec84d2e, 0x7ec84d2e},
-       {0x00009e14, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e},
-       {0x00009e18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00009e1c, 0x0001cf9c, 0x0001cf9c, 0x00021f9c, 0x00021f9c},
-       {0x00009e20, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce},
-       {0x00009e2c, 0x0000001c, 0x0000001c, 0x00000021, 0x00000021},
-       {0x00009e44, 0x02321e27, 0x02321e27, 0x02291e27, 0x02291e27},
-       {0x00009e48, 0x5030201a, 0x5030201a, 0x50302012, 0x50302012},
-       {0x00009fc8, 0x0003f000, 0x0003f000, 0x0001a000, 0x0001a000},
-       {0x0000a204, 0x000037c0, 0x000037c4, 0x000037c4, 0x000037c0},
-       {0x0000a208, 0x00000104, 0x00000104, 0x00000004, 0x00000004},
-       {0x0000a230, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b},
-       {0x0000a238, 0xffb81018, 0xffb81018, 0xffb81018, 0xffb81018},
-       {0x0000a250, 0x00000000, 0x00000000, 0x00000210, 0x00000108},
-       {0x0000a254, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898},
-       {0x0000a258, 0x02020002, 0x02020002, 0x02020002, 0x02020002},
-       {0x0000a25c, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e},
-       {0x0000a260, 0x0a021501, 0x0a021501, 0x3a021501, 0x3a021501},
-       {0x0000a264, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e},
-       {0x0000a280, 0x00000007, 0x00000007, 0x0000000b, 0x0000000b},
-       {0x0000a284, 0x00000000, 0x00000000, 0x00000150, 0x00000150},
-       {0x0000a288, 0x00000110, 0x00000110, 0x00000110, 0x00000110},
-       {0x0000a28c, 0x00022222, 0x00022222, 0x00022222, 0x00022222},
-       {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18},
-       {0x0000a2d0, 0x00071981, 0x00071981, 0x00071981, 0x00071982},
-       {0x0000a2d8, 0xf999a83a, 0xf999a83a, 0xf999a83a, 0xf999a83a},
-       {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a830, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
-       {0x0000ae04, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
-       {0x0000ae18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000ae1c, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
-       {0x0000ae20, 0x000001b5, 0x000001b5, 0x000001ce, 0x000001ce},
-       {0x0000b284, 0x00000000, 0x00000000, 0x00000150, 0x00000150},
-       {0x0000b830, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
-       {0x0000be04, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
-       {0x0000be18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000be1c, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
-       {0x0000be20, 0x000001b5, 0x000001b5, 0x000001ce, 0x000001ce},
-       {0x0000c284, 0x00000000, 0x00000000, 0x00000150, 0x00000150},
-};
-
-static const u32 ar9300_2p0_baseband_core[][2] = {
-       /* Addr      allmodes  */
-       {0x00009800, 0xafe68e30},
-       {0x00009804, 0xfd14e000},
-       {0x00009808, 0x9c0a9f6b},
-       {0x0000980c, 0x04900000},
-       {0x00009814, 0x9280c00a},
-       {0x00009818, 0x00000000},
-       {0x0000981c, 0x00020028},
-       {0x00009834, 0x5f3ca3de},
-       {0x00009838, 0x0108ecff},
-       {0x0000983c, 0x14750600},
-       {0x00009880, 0x201fff00},
-       {0x00009884, 0x00001042},
-       {0x000098a4, 0x00200400},
-       {0x000098b0, 0x52440bbe},
-       {0x000098d0, 0x004b6a8e},
-       {0x000098d4, 0x00000820},
-       {0x000098dc, 0x00000000},
-       {0x000098f0, 0x00000000},
-       {0x000098f4, 0x00000000},
-       {0x00009c04, 0xff55ff55},
-       {0x00009c08, 0x0320ff55},
-       {0x00009c0c, 0x00000000},
-       {0x00009c10, 0x00000000},
-       {0x00009c14, 0x00046384},
-       {0x00009c18, 0x05b6b440},
-       {0x00009c1c, 0x00b6b440},
-       {0x00009d00, 0xc080a333},
-       {0x00009d04, 0x40206c10},
-       {0x00009d08, 0x009c4060},
-       {0x00009d0c, 0x9883800a},
-       {0x00009d10, 0x01834061},
-       {0x00009d14, 0x00c0040b},
-       {0x00009d18, 0x00000000},
-       {0x00009e08, 0x0038230c},
-       {0x00009e24, 0x990bb515},
-       {0x00009e28, 0x0c6f0000},
-       {0x00009e30, 0x06336f77},
-       {0x00009e34, 0x6af6532f},
-       {0x00009e38, 0x0cc80c00},
-       {0x00009e3c, 0xcf946222},
-       {0x00009e40, 0x0d261820},
-       {0x00009e4c, 0x00001004},
-       {0x00009e50, 0x00ff03f1},
-       {0x00009e54, 0x00000000},
-       {0x00009fc0, 0x803e4788},
-       {0x00009fc4, 0x0001efb5},
-       {0x00009fcc, 0x40000014},
-       {0x00009fd0, 0x01193b93},
-       {0x0000a20c, 0x00000000},
-       {0x0000a220, 0x00000000},
-       {0x0000a224, 0x00000000},
-       {0x0000a228, 0x10002310},
-       {0x0000a22c, 0x01036a1e},
-       {0x0000a234, 0x10000fff},
-       {0x0000a23c, 0x00000000},
-       {0x0000a244, 0x0c000000},
-       {0x0000a2a0, 0x00000001},
-       {0x0000a2c0, 0x00000001},
-       {0x0000a2c8, 0x00000000},
-       {0x0000a2cc, 0x18c43433},
-       {0x0000a2d4, 0x00000000},
-       {0x0000a2dc, 0x00000000},
-       {0x0000a2e0, 0x00000000},
-       {0x0000a2e4, 0x00000000},
-       {0x0000a2e8, 0x00000000},
-       {0x0000a2ec, 0x00000000},
-       {0x0000a2f0, 0x00000000},
-       {0x0000a2f4, 0x00000000},
-       {0x0000a2f8, 0x00000000},
-       {0x0000a344, 0x00000000},
-       {0x0000a34c, 0x00000000},
-       {0x0000a350, 0x0000a000},
-       {0x0000a364, 0x00000000},
-       {0x0000a370, 0x00000000},
-       {0x0000a390, 0x00000001},
-       {0x0000a394, 0x00000444},
-       {0x0000a398, 0x001f0e0f},
-       {0x0000a39c, 0x0075393f},
-       {0x0000a3a0, 0xb79f6427},
-       {0x0000a3a4, 0x00000000},
-       {0x0000a3a8, 0xaaaaaaaa},
-       {0x0000a3ac, 0x3c466478},
-       {0x0000a3c0, 0x20202020},
-       {0x0000a3c4, 0x22222220},
-       {0x0000a3c8, 0x20200020},
-       {0x0000a3cc, 0x20202020},
-       {0x0000a3d0, 0x20202020},
-       {0x0000a3d4, 0x20202020},
-       {0x0000a3d8, 0x20202020},
-       {0x0000a3dc, 0x20202020},
-       {0x0000a3e0, 0x20202020},
-       {0x0000a3e4, 0x20202020},
-       {0x0000a3e8, 0x20202020},
-       {0x0000a3ec, 0x20202020},
-       {0x0000a3f0, 0x00000000},
-       {0x0000a3f4, 0x00000246},
-       {0x0000a3f8, 0x0cdbd380},
-       {0x0000a3fc, 0x000f0f01},
-       {0x0000a400, 0x8fa91f01},
-       {0x0000a404, 0x00000000},
-       {0x0000a408, 0x0e79e5c6},
-       {0x0000a40c, 0x00820820},
-       {0x0000a414, 0x1ce739ce},
-       {0x0000a418, 0x2d001dce},
-       {0x0000a41c, 0x1ce739ce},
-       {0x0000a420, 0x000001ce},
-       {0x0000a424, 0x1ce739ce},
-       {0x0000a428, 0x000001ce},
-       {0x0000a42c, 0x1ce739ce},
-       {0x0000a430, 0x1ce739ce},
-       {0x0000a434, 0x00000000},
-       {0x0000a438, 0x00001801},
-       {0x0000a43c, 0x00000000},
-       {0x0000a440, 0x00000000},
-       {0x0000a444, 0x00000000},
-       {0x0000a448, 0x04000080},
-       {0x0000a44c, 0x00000001},
-       {0x0000a450, 0x00010000},
-       {0x0000a458, 0x00000000},
-       {0x0000a600, 0x00000000},
-       {0x0000a604, 0x00000000},
-       {0x0000a608, 0x00000000},
-       {0x0000a60c, 0x00000000},
-       {0x0000a610, 0x00000000},
-       {0x0000a614, 0x00000000},
-       {0x0000a618, 0x00000000},
-       {0x0000a61c, 0x00000000},
-       {0x0000a620, 0x00000000},
-       {0x0000a624, 0x00000000},
-       {0x0000a628, 0x00000000},
-       {0x0000a62c, 0x00000000},
-       {0x0000a630, 0x00000000},
-       {0x0000a634, 0x00000000},
-       {0x0000a638, 0x00000000},
-       {0x0000a63c, 0x00000000},
-       {0x0000a640, 0x00000000},
-       {0x0000a644, 0x3fad9d74},
-       {0x0000a648, 0x0048060a},
-       {0x0000a64c, 0x00000637},
-       {0x0000a670, 0x03020100},
-       {0x0000a674, 0x09080504},
-       {0x0000a678, 0x0d0c0b0a},
-       {0x0000a67c, 0x13121110},
-       {0x0000a680, 0x31301514},
-       {0x0000a684, 0x35343332},
-       {0x0000a688, 0x00000036},
-       {0x0000a690, 0x00000838},
-       {0x0000a7c0, 0x00000000},
-       {0x0000a7c4, 0xfffffffc},
-       {0x0000a7c8, 0x00000000},
-       {0x0000a7cc, 0x00000000},
-       {0x0000a7d0, 0x00000000},
-       {0x0000a7d4, 0x00000004},
-       {0x0000a7dc, 0x00000001},
-       {0x0000a8d0, 0x004b6a8e},
-       {0x0000a8d4, 0x00000820},
-       {0x0000a8dc, 0x00000000},
-       {0x0000a8f0, 0x00000000},
-       {0x0000a8f4, 0x00000000},
-       {0x0000b2d0, 0x00000080},
-       {0x0000b2d4, 0x00000000},
-       {0x0000b2dc, 0x00000000},
-       {0x0000b2e0, 0x00000000},
-       {0x0000b2e4, 0x00000000},
-       {0x0000b2e8, 0x00000000},
-       {0x0000b2ec, 0x00000000},
-       {0x0000b2f0, 0x00000000},
-       {0x0000b2f4, 0x00000000},
-       {0x0000b2f8, 0x00000000},
-       {0x0000b408, 0x0e79e5c0},
-       {0x0000b40c, 0x00820820},
-       {0x0000b420, 0x00000000},
-       {0x0000b8d0, 0x004b6a8e},
-       {0x0000b8d4, 0x00000820},
-       {0x0000b8dc, 0x00000000},
-       {0x0000b8f0, 0x00000000},
-       {0x0000b8f4, 0x00000000},
-       {0x0000c2d0, 0x00000080},
-       {0x0000c2d4, 0x00000000},
-       {0x0000c2dc, 0x00000000},
-       {0x0000c2e0, 0x00000000},
-       {0x0000c2e4, 0x00000000},
-       {0x0000c2e8, 0x00000000},
-       {0x0000c2ec, 0x00000000},
-       {0x0000c2f0, 0x00000000},
-       {0x0000c2f4, 0x00000000},
-       {0x0000c2f8, 0x00000000},
-       {0x0000c408, 0x0e79e5c0},
-       {0x0000c40c, 0x00820820},
-       {0x0000c420, 0x00000000},
-};
-
-static const u32 ar9300Modes_high_power_tx_gain_table_2p0[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x0000a410, 0x000050d8, 0x000050d8, 0x000050d9, 0x000050d9},
-       {0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000},
-       {0x0000a504, 0x04002222, 0x04002222, 0x04000002, 0x04000002},
-       {0x0000a508, 0x09002421, 0x09002421, 0x08000004, 0x08000004},
-       {0x0000a50c, 0x0d002621, 0x0d002621, 0x0b000200, 0x0b000200},
-       {0x0000a510, 0x13004620, 0x13004620, 0x0f000202, 0x0f000202},
-       {0x0000a514, 0x19004a20, 0x19004a20, 0x11000400, 0x11000400},
-       {0x0000a518, 0x1d004e20, 0x1d004e20, 0x15000402, 0x15000402},
-       {0x0000a51c, 0x21005420, 0x21005420, 0x19000404, 0x19000404},
-       {0x0000a520, 0x26005e20, 0x26005e20, 0x1b000603, 0x1b000603},
-       {0x0000a524, 0x2b005e40, 0x2b005e40, 0x1f000a02, 0x1f000a02},
-       {0x0000a528, 0x2f005e42, 0x2f005e42, 0x23000a04, 0x23000a04},
-       {0x0000a52c, 0x33005e44, 0x33005e44, 0x26000a20, 0x26000a20},
-       {0x0000a530, 0x38005e65, 0x38005e65, 0x2a000e20, 0x2a000e20},
-       {0x0000a534, 0x3c005e69, 0x3c005e69, 0x2e000e22, 0x2e000e22},
-       {0x0000a538, 0x40005e6b, 0x40005e6b, 0x31000e24, 0x31000e24},
-       {0x0000a53c, 0x44005e6d, 0x44005e6d, 0x34001640, 0x34001640},
-       {0x0000a540, 0x49005e72, 0x49005e72, 0x38001660, 0x38001660},
-       {0x0000a544, 0x4e005eb2, 0x4e005eb2, 0x3b001861, 0x3b001861},
-       {0x0000a548, 0x53005f12, 0x53005f12, 0x3e001a81, 0x3e001a81},
-       {0x0000a54c, 0x59025eb5, 0x59025eb5, 0x42001a83, 0x42001a83},
-       {0x0000a550, 0x5e025f12, 0x5e025f12, 0x44001c84, 0x44001c84},
-       {0x0000a554, 0x61027f12, 0x61027f12, 0x48001ce3, 0x48001ce3},
-       {0x0000a558, 0x6702bf12, 0x6702bf12, 0x4c001ce5, 0x4c001ce5},
-       {0x0000a55c, 0x6b02bf14, 0x6b02bf14, 0x50001ce9, 0x50001ce9},
-       {0x0000a560, 0x6f02bf16, 0x6f02bf16, 0x54001ceb, 0x54001ceb},
-       {0x0000a564, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a568, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a56c, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a570, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a574, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a578, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a57c, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a580, 0x00802220, 0x00802220, 0x00800000, 0x00800000},
-       {0x0000a584, 0x04802222, 0x04802222, 0x04800002, 0x04800002},
-       {0x0000a588, 0x09802421, 0x09802421, 0x08800004, 0x08800004},
-       {0x0000a58c, 0x0d802621, 0x0d802621, 0x0b800200, 0x0b800200},
-       {0x0000a590, 0x13804620, 0x13804620, 0x0f800202, 0x0f800202},
-       {0x0000a594, 0x19804a20, 0x19804a20, 0x11800400, 0x11800400},
-       {0x0000a598, 0x1d804e20, 0x1d804e20, 0x15800402, 0x15800402},
-       {0x0000a59c, 0x21805420, 0x21805420, 0x19800404, 0x19800404},
-       {0x0000a5a0, 0x26805e20, 0x26805e20, 0x1b800603, 0x1b800603},
-       {0x0000a5a4, 0x2b805e40, 0x2b805e40, 0x1f800a02, 0x1f800a02},
-       {0x0000a5a8, 0x2f805e42, 0x2f805e42, 0x23800a04, 0x23800a04},
-       {0x0000a5ac, 0x33805e44, 0x33805e44, 0x26800a20, 0x26800a20},
-       {0x0000a5b0, 0x38805e65, 0x38805e65, 0x2a800e20, 0x2a800e20},
-       {0x0000a5b4, 0x3c805e69, 0x3c805e69, 0x2e800e22, 0x2e800e22},
-       {0x0000a5b8, 0x40805e6b, 0x40805e6b, 0x31800e24, 0x31800e24},
-       {0x0000a5bc, 0x44805e6d, 0x44805e6d, 0x34801640, 0x34801640},
-       {0x0000a5c0, 0x49805e72, 0x49805e72, 0x38801660, 0x38801660},
-       {0x0000a5c4, 0x4e805eb2, 0x4e805eb2, 0x3b801861, 0x3b801861},
-       {0x0000a5c8, 0x53805f12, 0x53805f12, 0x3e801a81, 0x3e801a81},
-       {0x0000a5cc, 0x59825eb2, 0x59825eb2, 0x42801a83, 0x42801a83},
-       {0x0000a5d0, 0x5e825f12, 0x5e825f12, 0x44801c84, 0x44801c84},
-       {0x0000a5d4, 0x61827f12, 0x61827f12, 0x48801ce3, 0x48801ce3},
-       {0x0000a5d8, 0x6782bf12, 0x6782bf12, 0x4c801ce5, 0x4c801ce5},
-       {0x0000a5dc, 0x6b82bf14, 0x6b82bf14, 0x50801ce9, 0x50801ce9},
-       {0x0000a5e0, 0x6f82bf16, 0x6f82bf16, 0x54801ceb, 0x54801ceb},
-       {0x0000a5e4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5e8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5ec, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5f0, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5f4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5f8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5fc, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x00016044, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6},
-       {0x00016048, 0xae480001, 0xae480001, 0xae480001, 0xae480001},
-       {0x00016068, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c},
-       {0x00016444, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6},
-       {0x00016448, 0xae480001, 0xae480001, 0xae480001, 0xae480001},
-       {0x00016468, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c},
-       {0x00016844, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6},
-       {0x00016848, 0xae480001, 0xae480001, 0xae480001, 0xae480001},
-       {0x00016868, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c},
-};
-
-static const u32 ar9300Modes_high_ob_db_tx_gain_table_2p0[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x0000a410, 0x000050d8, 0x000050d8, 0x000050d9, 0x000050d9},
-       {0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000},
-       {0x0000a504, 0x04002222, 0x04002222, 0x04000002, 0x04000002},
-       {0x0000a508, 0x09002421, 0x09002421, 0x08000004, 0x08000004},
-       {0x0000a50c, 0x0d002621, 0x0d002621, 0x0b000200, 0x0b000200},
-       {0x0000a510, 0x13004620, 0x13004620, 0x0f000202, 0x0f000202},
-       {0x0000a514, 0x19004a20, 0x19004a20, 0x11000400, 0x11000400},
-       {0x0000a518, 0x1d004e20, 0x1d004e20, 0x15000402, 0x15000402},
-       {0x0000a51c, 0x21005420, 0x21005420, 0x19000404, 0x19000404},
-       {0x0000a520, 0x26005e20, 0x26005e20, 0x1b000603, 0x1b000603},
-       {0x0000a524, 0x2b005e40, 0x2b005e40, 0x1f000a02, 0x1f000a02},
-       {0x0000a528, 0x2f005e42, 0x2f005e42, 0x23000a04, 0x23000a04},
-       {0x0000a52c, 0x33005e44, 0x33005e44, 0x26000a20, 0x26000a20},
-       {0x0000a530, 0x38005e65, 0x38005e65, 0x2a000e20, 0x2a000e20},
-       {0x0000a534, 0x3c005e69, 0x3c005e69, 0x2e000e22, 0x2e000e22},
-       {0x0000a538, 0x40005e6b, 0x40005e6b, 0x31000e24, 0x31000e24},
-       {0x0000a53c, 0x44005e6d, 0x44005e6d, 0x34001640, 0x34001640},
-       {0x0000a540, 0x49005e72, 0x49005e72, 0x38001660, 0x38001660},
-       {0x0000a544, 0x4e005eb2, 0x4e005eb2, 0x3b001861, 0x3b001861},
-       {0x0000a548, 0x53005f12, 0x53005f12, 0x3e001a81, 0x3e001a81},
-       {0x0000a54c, 0x59025eb5, 0x59025eb5, 0x42001a83, 0x42001a83},
-       {0x0000a550, 0x5e025f12, 0x5e025f12, 0x44001c84, 0x44001c84},
-       {0x0000a554, 0x61027f12, 0x61027f12, 0x48001ce3, 0x48001ce3},
-       {0x0000a558, 0x6702bf12, 0x6702bf12, 0x4c001ce5, 0x4c001ce5},
-       {0x0000a55c, 0x6b02bf14, 0x6b02bf14, 0x50001ce9, 0x50001ce9},
-       {0x0000a560, 0x6f02bf16, 0x6f02bf16, 0x54001ceb, 0x54001ceb},
-       {0x0000a564, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a568, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a56c, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a570, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a574, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a578, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a57c, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a580, 0x00802220, 0x00802220, 0x00800000, 0x00800000},
-       {0x0000a584, 0x04802222, 0x04802222, 0x04800002, 0x04800002},
-       {0x0000a588, 0x09802421, 0x09802421, 0x08800004, 0x08800004},
-       {0x0000a58c, 0x0d802621, 0x0d802621, 0x0b800200, 0x0b800200},
-       {0x0000a590, 0x13804620, 0x13804620, 0x0f800202, 0x0f800202},
-       {0x0000a594, 0x19804a20, 0x19804a20, 0x11800400, 0x11800400},
-       {0x0000a598, 0x1d804e20, 0x1d804e20, 0x15800402, 0x15800402},
-       {0x0000a59c, 0x21805420, 0x21805420, 0x19800404, 0x19800404},
-       {0x0000a5a0, 0x26805e20, 0x26805e20, 0x1b800603, 0x1b800603},
-       {0x0000a5a4, 0x2b805e40, 0x2b805e40, 0x1f800a02, 0x1f800a02},
-       {0x0000a5a8, 0x2f805e42, 0x2f805e42, 0x23800a04, 0x23800a04},
-       {0x0000a5ac, 0x33805e44, 0x33805e44, 0x26800a20, 0x26800a20},
-       {0x0000a5b0, 0x38805e65, 0x38805e65, 0x2a800e20, 0x2a800e20},
-       {0x0000a5b4, 0x3c805e69, 0x3c805e69, 0x2e800e22, 0x2e800e22},
-       {0x0000a5b8, 0x40805e6b, 0x40805e6b, 0x31800e24, 0x31800e24},
-       {0x0000a5bc, 0x44805e6d, 0x44805e6d, 0x34801640, 0x34801640},
-       {0x0000a5c0, 0x49805e72, 0x49805e72, 0x38801660, 0x38801660},
-       {0x0000a5c4, 0x4e805eb2, 0x4e805eb2, 0x3b801861, 0x3b801861},
-       {0x0000a5c8, 0x53805f12, 0x53805f12, 0x3e801a81, 0x3e801a81},
-       {0x0000a5cc, 0x59825eb2, 0x59825eb2, 0x42801a83, 0x42801a83},
-       {0x0000a5d0, 0x5e825f12, 0x5e825f12, 0x44801c84, 0x44801c84},
-       {0x0000a5d4, 0x61827f12, 0x61827f12, 0x48801ce3, 0x48801ce3},
-       {0x0000a5d8, 0x6782bf12, 0x6782bf12, 0x4c801ce5, 0x4c801ce5},
-       {0x0000a5dc, 0x6b82bf14, 0x6b82bf14, 0x50801ce9, 0x50801ce9},
-       {0x0000a5e0, 0x6f82bf16, 0x6f82bf16, 0x54801ceb, 0x54801ceb},
-       {0x0000a5e4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5e8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5ec, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5f0, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5f4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5f8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5fc, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x00016044, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4},
-       {0x00016048, 0x8e480001, 0x8e480001, 0x8e480001, 0x8e480001},
-       {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
-       {0x00016444, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4},
-       {0x00016448, 0x8e480001, 0x8e480001, 0x8e480001, 0x8e480001},
-       {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
-       {0x00016844, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4},
-       {0x00016848, 0x8e480001, 0x8e480001, 0x8e480001, 0x8e480001},
-       {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
-};
-
-static const u32 ar9300Common_rx_gain_table_2p0[][2] = {
-       /* Addr      allmodes  */
-       {0x0000a000, 0x00010000},
-       {0x0000a004, 0x00030002},
-       {0x0000a008, 0x00050004},
-       {0x0000a00c, 0x00810080},
-       {0x0000a010, 0x00830082},
-       {0x0000a014, 0x01810180},
-       {0x0000a018, 0x01830182},
-       {0x0000a01c, 0x01850184},
-       {0x0000a020, 0x01890188},
-       {0x0000a024, 0x018b018a},
-       {0x0000a028, 0x018d018c},
-       {0x0000a02c, 0x01910190},
-       {0x0000a030, 0x01930192},
-       {0x0000a034, 0x01950194},
-       {0x0000a038, 0x038a0196},
-       {0x0000a03c, 0x038c038b},
-       {0x0000a040, 0x0390038d},
-       {0x0000a044, 0x03920391},
-       {0x0000a048, 0x03940393},
-       {0x0000a04c, 0x03960395},
-       {0x0000a050, 0x00000000},
-       {0x0000a054, 0x00000000},
-       {0x0000a058, 0x00000000},
-       {0x0000a05c, 0x00000000},
-       {0x0000a060, 0x00000000},
-       {0x0000a064, 0x00000000},
-       {0x0000a068, 0x00000000},
-       {0x0000a06c, 0x00000000},
-       {0x0000a070, 0x00000000},
-       {0x0000a074, 0x00000000},
-       {0x0000a078, 0x00000000},
-       {0x0000a07c, 0x00000000},
-       {0x0000a080, 0x22222229},
-       {0x0000a084, 0x1d1d1d1d},
-       {0x0000a088, 0x1d1d1d1d},
-       {0x0000a08c, 0x1d1d1d1d},
-       {0x0000a090, 0x171d1d1d},
-       {0x0000a094, 0x11111717},
-       {0x0000a098, 0x00030311},
-       {0x0000a09c, 0x00000000},
-       {0x0000a0a0, 0x00000000},
-       {0x0000a0a4, 0x00000000},
-       {0x0000a0a8, 0x00000000},
-       {0x0000a0ac, 0x00000000},
-       {0x0000a0b0, 0x00000000},
-       {0x0000a0b4, 0x00000000},
-       {0x0000a0b8, 0x00000000},
-       {0x0000a0bc, 0x00000000},
-       {0x0000a0c0, 0x001f0000},
-       {0x0000a0c4, 0x01000101},
-       {0x0000a0c8, 0x011e011f},
-       {0x0000a0cc, 0x011c011d},
-       {0x0000a0d0, 0x02030204},
-       {0x0000a0d4, 0x02010202},
-       {0x0000a0d8, 0x021f0200},
-       {0x0000a0dc, 0x0302021e},
-       {0x0000a0e0, 0x03000301},
-       {0x0000a0e4, 0x031e031f},
-       {0x0000a0e8, 0x0402031d},
-       {0x0000a0ec, 0x04000401},
-       {0x0000a0f0, 0x041e041f},
-       {0x0000a0f4, 0x0502041d},
-       {0x0000a0f8, 0x05000501},
-       {0x0000a0fc, 0x051e051f},
-       {0x0000a100, 0x06010602},
-       {0x0000a104, 0x061f0600},
-       {0x0000a108, 0x061d061e},
-       {0x0000a10c, 0x07020703},
-       {0x0000a110, 0x07000701},
-       {0x0000a114, 0x00000000},
-       {0x0000a118, 0x00000000},
-       {0x0000a11c, 0x00000000},
-       {0x0000a120, 0x00000000},
-       {0x0000a124, 0x00000000},
-       {0x0000a128, 0x00000000},
-       {0x0000a12c, 0x00000000},
-       {0x0000a130, 0x00000000},
-       {0x0000a134, 0x00000000},
-       {0x0000a138, 0x00000000},
-       {0x0000a13c, 0x00000000},
-       {0x0000a140, 0x001f0000},
-       {0x0000a144, 0x01000101},
-       {0x0000a148, 0x011e011f},
-       {0x0000a14c, 0x011c011d},
-       {0x0000a150, 0x02030204},
-       {0x0000a154, 0x02010202},
-       {0x0000a158, 0x021f0200},
-       {0x0000a15c, 0x0302021e},
-       {0x0000a160, 0x03000301},
-       {0x0000a164, 0x031e031f},
-       {0x0000a168, 0x0402031d},
-       {0x0000a16c, 0x04000401},
-       {0x0000a170, 0x041e041f},
-       {0x0000a174, 0x0502041d},
-       {0x0000a178, 0x05000501},
-       {0x0000a17c, 0x051e051f},
-       {0x0000a180, 0x06010602},
-       {0x0000a184, 0x061f0600},
-       {0x0000a188, 0x061d061e},
-       {0x0000a18c, 0x07020703},
-       {0x0000a190, 0x07000701},
-       {0x0000a194, 0x00000000},
-       {0x0000a198, 0x00000000},
-       {0x0000a19c, 0x00000000},
-       {0x0000a1a0, 0x00000000},
-       {0x0000a1a4, 0x00000000},
-       {0x0000a1a8, 0x00000000},
-       {0x0000a1ac, 0x00000000},
-       {0x0000a1b0, 0x00000000},
-       {0x0000a1b4, 0x00000000},
-       {0x0000a1b8, 0x00000000},
-       {0x0000a1bc, 0x00000000},
-       {0x0000a1c0, 0x00000000},
-       {0x0000a1c4, 0x00000000},
-       {0x0000a1c8, 0x00000000},
-       {0x0000a1cc, 0x00000000},
-       {0x0000a1d0, 0x00000000},
-       {0x0000a1d4, 0x00000000},
-       {0x0000a1d8, 0x00000000},
-       {0x0000a1dc, 0x00000000},
-       {0x0000a1e0, 0x00000000},
-       {0x0000a1e4, 0x00000000},
-       {0x0000a1e8, 0x00000000},
-       {0x0000a1ec, 0x00000000},
-       {0x0000a1f0, 0x00000396},
-       {0x0000a1f4, 0x00000396},
-       {0x0000a1f8, 0x00000396},
-       {0x0000a1fc, 0x00000196},
-       {0x0000b000, 0x00010000},
-       {0x0000b004, 0x00030002},
-       {0x0000b008, 0x00050004},
-       {0x0000b00c, 0x00810080},
-       {0x0000b010, 0x00830082},
-       {0x0000b014, 0x01810180},
-       {0x0000b018, 0x01830182},
-       {0x0000b01c, 0x01850184},
-       {0x0000b020, 0x02810280},
-       {0x0000b024, 0x02830282},
-       {0x0000b028, 0x02850284},
-       {0x0000b02c, 0x02890288},
-       {0x0000b030, 0x028b028a},
-       {0x0000b034, 0x0388028c},
-       {0x0000b038, 0x038a0389},
-       {0x0000b03c, 0x038c038b},
-       {0x0000b040, 0x0390038d},
-       {0x0000b044, 0x03920391},
-       {0x0000b048, 0x03940393},
-       {0x0000b04c, 0x03960395},
-       {0x0000b050, 0x00000000},
-       {0x0000b054, 0x00000000},
-       {0x0000b058, 0x00000000},
-       {0x0000b05c, 0x00000000},
-       {0x0000b060, 0x00000000},
-       {0x0000b064, 0x00000000},
-       {0x0000b068, 0x00000000},
-       {0x0000b06c, 0x00000000},
-       {0x0000b070, 0x00000000},
-       {0x0000b074, 0x00000000},
-       {0x0000b078, 0x00000000},
-       {0x0000b07c, 0x00000000},
-       {0x0000b080, 0x32323232},
-       {0x0000b084, 0x2f2f3232},
-       {0x0000b088, 0x23282a2d},
-       {0x0000b08c, 0x1c1e2123},
-       {0x0000b090, 0x14171919},
-       {0x0000b094, 0x0e0e1214},
-       {0x0000b098, 0x03050707},
-       {0x0000b09c, 0x00030303},
-       {0x0000b0a0, 0x00000000},
-       {0x0000b0a4, 0x00000000},
-       {0x0000b0a8, 0x00000000},
-       {0x0000b0ac, 0x00000000},
-       {0x0000b0b0, 0x00000000},
-       {0x0000b0b4, 0x00000000},
-       {0x0000b0b8, 0x00000000},
-       {0x0000b0bc, 0x00000000},
-       {0x0000b0c0, 0x003f0020},
-       {0x0000b0c4, 0x00400041},
-       {0x0000b0c8, 0x0140005f},
-       {0x0000b0cc, 0x0160015f},
-       {0x0000b0d0, 0x017e017f},
-       {0x0000b0d4, 0x02410242},
-       {0x0000b0d8, 0x025f0240},
-       {0x0000b0dc, 0x027f0260},
-       {0x0000b0e0, 0x0341027e},
-       {0x0000b0e4, 0x035f0340},
-       {0x0000b0e8, 0x037f0360},
-       {0x0000b0ec, 0x04400441},
-       {0x0000b0f0, 0x0460045f},
-       {0x0000b0f4, 0x0541047f},
-       {0x0000b0f8, 0x055f0540},
-       {0x0000b0fc, 0x057f0560},
-       {0x0000b100, 0x06400641},
-       {0x0000b104, 0x0660065f},
-       {0x0000b108, 0x067e067f},
-       {0x0000b10c, 0x07410742},
-       {0x0000b110, 0x075f0740},
-       {0x0000b114, 0x077f0760},
-       {0x0000b118, 0x07800781},
-       {0x0000b11c, 0x07a0079f},
-       {0x0000b120, 0x07c107bf},
-       {0x0000b124, 0x000007c0},
-       {0x0000b128, 0x00000000},
-       {0x0000b12c, 0x00000000},
-       {0x0000b130, 0x00000000},
-       {0x0000b134, 0x00000000},
-       {0x0000b138, 0x00000000},
-       {0x0000b13c, 0x00000000},
-       {0x0000b140, 0x003f0020},
-       {0x0000b144, 0x00400041},
-       {0x0000b148, 0x0140005f},
-       {0x0000b14c, 0x0160015f},
-       {0x0000b150, 0x017e017f},
-       {0x0000b154, 0x02410242},
-       {0x0000b158, 0x025f0240},
-       {0x0000b15c, 0x027f0260},
-       {0x0000b160, 0x0341027e},
-       {0x0000b164, 0x035f0340},
-       {0x0000b168, 0x037f0360},
-       {0x0000b16c, 0x04400441},
-       {0x0000b170, 0x0460045f},
-       {0x0000b174, 0x0541047f},
-       {0x0000b178, 0x055f0540},
-       {0x0000b17c, 0x057f0560},
-       {0x0000b180, 0x06400641},
-       {0x0000b184, 0x0660065f},
-       {0x0000b188, 0x067e067f},
-       {0x0000b18c, 0x07410742},
-       {0x0000b190, 0x075f0740},
-       {0x0000b194, 0x077f0760},
-       {0x0000b198, 0x07800781},
-       {0x0000b19c, 0x07a0079f},
-       {0x0000b1a0, 0x07c107bf},
-       {0x0000b1a4, 0x000007c0},
-       {0x0000b1a8, 0x00000000},
-       {0x0000b1ac, 0x00000000},
-       {0x0000b1b0, 0x00000000},
-       {0x0000b1b4, 0x00000000},
-       {0x0000b1b8, 0x00000000},
-       {0x0000b1bc, 0x00000000},
-       {0x0000b1c0, 0x00000000},
-       {0x0000b1c4, 0x00000000},
-       {0x0000b1c8, 0x00000000},
-       {0x0000b1cc, 0x00000000},
-       {0x0000b1d0, 0x00000000},
-       {0x0000b1d4, 0x00000000},
-       {0x0000b1d8, 0x00000000},
-       {0x0000b1dc, 0x00000000},
-       {0x0000b1e0, 0x00000000},
-       {0x0000b1e4, 0x00000000},
-       {0x0000b1e8, 0x00000000},
-       {0x0000b1ec, 0x00000000},
-       {0x0000b1f0, 0x00000396},
-       {0x0000b1f4, 0x00000396},
-       {0x0000b1f8, 0x00000396},
-       {0x0000b1fc, 0x00000196},
-};
-
-static const u32 ar9300Modes_low_ob_db_tx_gain_table_2p0[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9},
-       {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002},
-       {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004},
-       {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200},
-       {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202},
-       {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400},
-       {0x0000a518, 0x21020220, 0x21020220, 0x16000402, 0x16000402},
-       {0x0000a51c, 0x27020223, 0x27020223, 0x19000404, 0x19000404},
-       {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603},
-       {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02},
-       {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04},
-       {0x0000a52c, 0x3a02222a, 0x3a02222a, 0x28000a20, 0x28000a20},
-       {0x0000a530, 0x3e02222c, 0x3e02222c, 0x2c000e20, 0x2c000e20},
-       {0x0000a534, 0x4202242a, 0x4202242a, 0x30000e22, 0x30000e22},
-       {0x0000a538, 0x4702244a, 0x4702244a, 0x34000e24, 0x34000e24},
-       {0x0000a53c, 0x4b02244c, 0x4b02244c, 0x38001640, 0x38001640},
-       {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660},
-       {0x0000a544, 0x5302266c, 0x5302266c, 0x3f001861, 0x3f001861},
-       {0x0000a548, 0x5702286c, 0x5702286c, 0x43001a81, 0x43001a81},
-       {0x0000a54c, 0x5c04286b, 0x5c04286b, 0x47001a83, 0x47001a83},
-       {0x0000a550, 0x61042a6c, 0x61042a6c, 0x4a001c84, 0x4a001c84},
-       {0x0000a554, 0x66062a6c, 0x66062a6c, 0x4e001ce3, 0x4e001ce3},
-       {0x0000a558, 0x6b062e6c, 0x6b062e6c, 0x52001ce5, 0x52001ce5},
-       {0x0000a55c, 0x7006308c, 0x7006308c, 0x56001ce9, 0x56001ce9},
-       {0x0000a560, 0x730a308a, 0x730a308a, 0x5a001ceb, 0x5a001ceb},
-       {0x0000a564, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
-       {0x0000a568, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
-       {0x0000a56c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
-       {0x0000a570, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
-       {0x0000a574, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
-       {0x0000a578, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
-       {0x0000a57c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec},
-       {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
-       {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002},
-       {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004},
-       {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200},
-       {0x0000a590, 0x16800220, 0x16800220, 0x0f800202, 0x0f800202},
-       {0x0000a594, 0x1c800223, 0x1c800223, 0x12800400, 0x12800400},
-       {0x0000a598, 0x21820220, 0x21820220, 0x16800402, 0x16800402},
-       {0x0000a59c, 0x27820223, 0x27820223, 0x19800404, 0x19800404},
-       {0x0000a5a0, 0x2b822220, 0x2b822220, 0x1c800603, 0x1c800603},
-       {0x0000a5a4, 0x2f822222, 0x2f822222, 0x21800a02, 0x21800a02},
-       {0x0000a5a8, 0x34822225, 0x34822225, 0x25800a04, 0x25800a04},
-       {0x0000a5ac, 0x3a82222a, 0x3a82222a, 0x28800a20, 0x28800a20},
-       {0x0000a5b0, 0x3e82222c, 0x3e82222c, 0x2c800e20, 0x2c800e20},
-       {0x0000a5b4, 0x4282242a, 0x4282242a, 0x30800e22, 0x30800e22},
-       {0x0000a5b8, 0x4782244a, 0x4782244a, 0x34800e24, 0x34800e24},
-       {0x0000a5bc, 0x4b82244c, 0x4b82244c, 0x38801640, 0x38801640},
-       {0x0000a5c0, 0x4e82246c, 0x4e82246c, 0x3c801660, 0x3c801660},
-       {0x0000a5c4, 0x5382266c, 0x5382266c, 0x3f801861, 0x3f801861},
-       {0x0000a5c8, 0x5782286c, 0x5782286c, 0x43801a81, 0x43801a81},
-       {0x0000a5cc, 0x5c84286b, 0x5c84286b, 0x47801a83, 0x47801a83},
-       {0x0000a5d0, 0x61842a6c, 0x61842a6c, 0x4a801c84, 0x4a801c84},
-       {0x0000a5d4, 0x66862a6c, 0x66862a6c, 0x4e801ce3, 0x4e801ce3},
-       {0x0000a5d8, 0x6b862e6c, 0x6b862e6c, 0x52801ce5, 0x52801ce5},
-       {0x0000a5dc, 0x7086308c, 0x7086308c, 0x56801ce9, 0x56801ce9},
-       {0x0000a5e0, 0x738a308a, 0x738a308a, 0x5a801ceb, 0x5a801ceb},
-       {0x0000a5e4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5e8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5ec, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5f0, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5f4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5f8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5fc, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
-       {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
-       {0x00016048, 0x64000001, 0x64000001, 0x64000001, 0x64000001},
-       {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
-       {0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
-       {0x00016448, 0x64000001, 0x64000001, 0x64000001, 0x64000001},
-       {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
-       {0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
-       {0x00016848, 0x64000001, 0x64000001, 0x64000001, 0x64000001},
-       {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
-};
-
-static const u32 ar9300_2p0_mac_core[][2] = {
-       /* Addr      allmodes  */
-       {0x00000008, 0x00000000},
-       {0x00000030, 0x00020085},
-       {0x00000034, 0x00000005},
-       {0x00000040, 0x00000000},
-       {0x00000044, 0x00000000},
-       {0x00000048, 0x00000008},
-       {0x0000004c, 0x00000010},
-       {0x00000050, 0x00000000},
-       {0x00001040, 0x002ffc0f},
-       {0x00001044, 0x002ffc0f},
-       {0x00001048, 0x002ffc0f},
-       {0x0000104c, 0x002ffc0f},
-       {0x00001050, 0x002ffc0f},
-       {0x00001054, 0x002ffc0f},
-       {0x00001058, 0x002ffc0f},
-       {0x0000105c, 0x002ffc0f},
-       {0x00001060, 0x002ffc0f},
-       {0x00001064, 0x002ffc0f},
-       {0x000010f0, 0x00000100},
-       {0x00001270, 0x00000000},
-       {0x000012b0, 0x00000000},
-       {0x000012f0, 0x00000000},
-       {0x0000143c, 0x00000000},
-       {0x0000147c, 0x00000000},
-       {0x00008000, 0x00000000},
-       {0x00008004, 0x00000000},
-       {0x00008008, 0x00000000},
-       {0x0000800c, 0x00000000},
-       {0x00008018, 0x00000000},
-       {0x00008020, 0x00000000},
-       {0x00008038, 0x00000000},
-       {0x0000803c, 0x00000000},
-       {0x00008040, 0x00000000},
-       {0x00008044, 0x00000000},
-       {0x00008048, 0x00000000},
-       {0x0000804c, 0xffffffff},
-       {0x00008054, 0x00000000},
-       {0x00008058, 0x00000000},
-       {0x0000805c, 0x000fc78f},
-       {0x00008060, 0x0000000f},
-       {0x00008064, 0x00000000},
-       {0x00008070, 0x00000310},
-       {0x00008074, 0x00000020},
-       {0x00008078, 0x00000000},
-       {0x0000809c, 0x0000000f},
-       {0x000080a0, 0x00000000},
-       {0x000080a4, 0x02ff0000},
-       {0x000080a8, 0x0e070605},
-       {0x000080ac, 0x0000000d},
-       {0x000080b0, 0x00000000},
-       {0x000080b4, 0x00000000},
-       {0x000080b8, 0x00000000},
-       {0x000080bc, 0x00000000},
-       {0x000080c0, 0x2a800000},
-       {0x000080c4, 0x06900168},
-       {0x000080c8, 0x13881c20},
-       {0x000080cc, 0x01f40000},
-       {0x000080d0, 0x00252500},
-       {0x000080d4, 0x00a00000},
-       {0x000080d8, 0x00400000},
-       {0x000080dc, 0x00000000},
-       {0x000080e0, 0xffffffff},
-       {0x000080e4, 0x0000ffff},
-       {0x000080e8, 0x3f3f3f3f},
-       {0x000080ec, 0x00000000},
-       {0x000080f0, 0x00000000},
-       {0x000080f4, 0x00000000},
-       {0x000080fc, 0x00020000},
-       {0x00008100, 0x00000000},
-       {0x00008108, 0x00000052},
-       {0x0000810c, 0x00000000},
-       {0x00008110, 0x00000000},
-       {0x00008114, 0x000007ff},
-       {0x00008118, 0x000000aa},
-       {0x0000811c, 0x00003210},
-       {0x00008124, 0x00000000},
-       {0x00008128, 0x00000000},
-       {0x0000812c, 0x00000000},
-       {0x00008130, 0x00000000},
-       {0x00008134, 0x00000000},
-       {0x00008138, 0x00000000},
-       {0x0000813c, 0x0000ffff},
-       {0x00008144, 0xffffffff},
-       {0x00008168, 0x00000000},
-       {0x0000816c, 0x00000000},
-       {0x00008170, 0x18486200},
-       {0x00008174, 0x33332210},
-       {0x00008178, 0x00000000},
-       {0x0000817c, 0x00020000},
-       {0x000081c0, 0x00000000},
-       {0x000081c4, 0x33332210},
-       {0x000081c8, 0x00000000},
-       {0x000081cc, 0x00000000},
-       {0x000081d4, 0x00000000},
-       {0x000081ec, 0x00000000},
-       {0x000081f0, 0x00000000},
-       {0x000081f4, 0x00000000},
-       {0x000081f8, 0x00000000},
-       {0x000081fc, 0x00000000},
-       {0x00008240, 0x00100000},
-       {0x00008244, 0x0010f424},
-       {0x00008248, 0x00000800},
-       {0x0000824c, 0x0001e848},
-       {0x00008250, 0x00000000},
-       {0x00008254, 0x00000000},
-       {0x00008258, 0x00000000},
-       {0x0000825c, 0x40000000},
-       {0x00008260, 0x00080922},
-       {0x00008264, 0x98a00010},
-       {0x00008268, 0xffffffff},
-       {0x0000826c, 0x0000ffff},
-       {0x00008270, 0x00000000},
-       {0x00008274, 0x40000000},
-       {0x00008278, 0x003e4180},
-       {0x0000827c, 0x00000004},
-       {0x00008284, 0x0000002c},
-       {0x00008288, 0x0000002c},
-       {0x0000828c, 0x000000ff},
-       {0x00008294, 0x00000000},
-       {0x00008298, 0x00000000},
-       {0x0000829c, 0x00000000},
-       {0x00008300, 0x00000140},
-       {0x00008314, 0x00000000},
-       {0x0000831c, 0x0000010d},
-       {0x00008328, 0x00000000},
-       {0x0000832c, 0x00000007},
-       {0x00008330, 0x00000302},
-       {0x00008334, 0x00000700},
-       {0x00008338, 0x00ff0000},
-       {0x0000833c, 0x02400000},
-       {0x00008340, 0x000107ff},
-       {0x00008344, 0xaa48105b},
-       {0x00008348, 0x008f0000},
-       {0x0000835c, 0x00000000},
-       {0x00008360, 0xffffffff},
-       {0x00008364, 0xffffffff},
-       {0x00008368, 0x00000000},
-       {0x00008370, 0x00000000},
-       {0x00008374, 0x000000ff},
-       {0x00008378, 0x00000000},
-       {0x0000837c, 0x00000000},
-       {0x00008380, 0xffffffff},
-       {0x00008384, 0xffffffff},
-       {0x00008390, 0xffffffff},
-       {0x00008394, 0xffffffff},
-       {0x00008398, 0x00000000},
-       {0x0000839c, 0x00000000},
-       {0x000083a0, 0x00000000},
-       {0x000083a4, 0x0000fa14},
-       {0x000083a8, 0x000f0c00},
-       {0x000083ac, 0x33332210},
-       {0x000083b0, 0x33332210},
-       {0x000083b4, 0x33332210},
-       {0x000083b8, 0x33332210},
-       {0x000083bc, 0x00000000},
-       {0x000083c0, 0x00000000},
-       {0x000083c4, 0x00000000},
-       {0x000083c8, 0x00000000},
-       {0x000083cc, 0x00000200},
-       {0x000083d0, 0x000301ff},
-};
-
-static const u32 ar9300Common_wo_xlna_rx_gain_table_2p0[][2] = {
-       /* Addr      allmodes  */
-       {0x0000a000, 0x00010000},
-       {0x0000a004, 0x00030002},
-       {0x0000a008, 0x00050004},
-       {0x0000a00c, 0x00810080},
-       {0x0000a010, 0x00830082},
-       {0x0000a014, 0x01810180},
-       {0x0000a018, 0x01830182},
-       {0x0000a01c, 0x01850184},
-       {0x0000a020, 0x01890188},
-       {0x0000a024, 0x018b018a},
-       {0x0000a028, 0x018d018c},
-       {0x0000a02c, 0x03820190},
-       {0x0000a030, 0x03840383},
-       {0x0000a034, 0x03880385},
-       {0x0000a038, 0x038a0389},
-       {0x0000a03c, 0x038c038b},
-       {0x0000a040, 0x0390038d},
-       {0x0000a044, 0x03920391},
-       {0x0000a048, 0x03940393},
-       {0x0000a04c, 0x03960395},
-       {0x0000a050, 0x00000000},
-       {0x0000a054, 0x00000000},
-       {0x0000a058, 0x00000000},
-       {0x0000a05c, 0x00000000},
-       {0x0000a060, 0x00000000},
-       {0x0000a064, 0x00000000},
-       {0x0000a068, 0x00000000},
-       {0x0000a06c, 0x00000000},
-       {0x0000a070, 0x00000000},
-       {0x0000a074, 0x00000000},
-       {0x0000a078, 0x00000000},
-       {0x0000a07c, 0x00000000},
-       {0x0000a080, 0x29292929},
-       {0x0000a084, 0x29292929},
-       {0x0000a088, 0x29292929},
-       {0x0000a08c, 0x29292929},
-       {0x0000a090, 0x22292929},
-       {0x0000a094, 0x1d1d2222},
-       {0x0000a098, 0x0c111117},
-       {0x0000a09c, 0x00030303},
-       {0x0000a0a0, 0x00000000},
-       {0x0000a0a4, 0x00000000},
-       {0x0000a0a8, 0x00000000},
-       {0x0000a0ac, 0x00000000},
-       {0x0000a0b0, 0x00000000},
-       {0x0000a0b4, 0x00000000},
-       {0x0000a0b8, 0x00000000},
-       {0x0000a0bc, 0x00000000},
-       {0x0000a0c0, 0x001f0000},
-       {0x0000a0c4, 0x01000101},
-       {0x0000a0c8, 0x011e011f},
-       {0x0000a0cc, 0x011c011d},
-       {0x0000a0d0, 0x02030204},
-       {0x0000a0d4, 0x02010202},
-       {0x0000a0d8, 0x021f0200},
-       {0x0000a0dc, 0x0302021e},
-       {0x0000a0e0, 0x03000301},
-       {0x0000a0e4, 0x031e031f},
-       {0x0000a0e8, 0x0402031d},
-       {0x0000a0ec, 0x04000401},
-       {0x0000a0f0, 0x041e041f},
-       {0x0000a0f4, 0x0502041d},
-       {0x0000a0f8, 0x05000501},
-       {0x0000a0fc, 0x051e051f},
-       {0x0000a100, 0x06010602},
-       {0x0000a104, 0x061f0600},
-       {0x0000a108, 0x061d061e},
-       {0x0000a10c, 0x07020703},
-       {0x0000a110, 0x07000701},
-       {0x0000a114, 0x00000000},
-       {0x0000a118, 0x00000000},
-       {0x0000a11c, 0x00000000},
-       {0x0000a120, 0x00000000},
-       {0x0000a124, 0x00000000},
-       {0x0000a128, 0x00000000},
-       {0x0000a12c, 0x00000000},
-       {0x0000a130, 0x00000000},
-       {0x0000a134, 0x00000000},
-       {0x0000a138, 0x00000000},
-       {0x0000a13c, 0x00000000},
-       {0x0000a140, 0x001f0000},
-       {0x0000a144, 0x01000101},
-       {0x0000a148, 0x011e011f},
-       {0x0000a14c, 0x011c011d},
-       {0x0000a150, 0x02030204},
-       {0x0000a154, 0x02010202},
-       {0x0000a158, 0x021f0200},
-       {0x0000a15c, 0x0302021e},
-       {0x0000a160, 0x03000301},
-       {0x0000a164, 0x031e031f},
-       {0x0000a168, 0x0402031d},
-       {0x0000a16c, 0x04000401},
-       {0x0000a170, 0x041e041f},
-       {0x0000a174, 0x0502041d},
-       {0x0000a178, 0x05000501},
-       {0x0000a17c, 0x051e051f},
-       {0x0000a180, 0x06010602},
-       {0x0000a184, 0x061f0600},
-       {0x0000a188, 0x061d061e},
-       {0x0000a18c, 0x07020703},
-       {0x0000a190, 0x07000701},
-       {0x0000a194, 0x00000000},
-       {0x0000a198, 0x00000000},
-       {0x0000a19c, 0x00000000},
-       {0x0000a1a0, 0x00000000},
-       {0x0000a1a4, 0x00000000},
-       {0x0000a1a8, 0x00000000},
-       {0x0000a1ac, 0x00000000},
-       {0x0000a1b0, 0x00000000},
-       {0x0000a1b4, 0x00000000},
-       {0x0000a1b8, 0x00000000},
-       {0x0000a1bc, 0x00000000},
-       {0x0000a1c0, 0x00000000},
-       {0x0000a1c4, 0x00000000},
-       {0x0000a1c8, 0x00000000},
-       {0x0000a1cc, 0x00000000},
-       {0x0000a1d0, 0x00000000},
-       {0x0000a1d4, 0x00000000},
-       {0x0000a1d8, 0x00000000},
-       {0x0000a1dc, 0x00000000},
-       {0x0000a1e0, 0x00000000},
-       {0x0000a1e4, 0x00000000},
-       {0x0000a1e8, 0x00000000},
-       {0x0000a1ec, 0x00000000},
-       {0x0000a1f0, 0x00000396},
-       {0x0000a1f4, 0x00000396},
-       {0x0000a1f8, 0x00000396},
-       {0x0000a1fc, 0x00000196},
-       {0x0000b000, 0x00010000},
-       {0x0000b004, 0x00030002},
-       {0x0000b008, 0x00050004},
-       {0x0000b00c, 0x00810080},
-       {0x0000b010, 0x00830082},
-       {0x0000b014, 0x01810180},
-       {0x0000b018, 0x01830182},
-       {0x0000b01c, 0x01850184},
-       {0x0000b020, 0x02810280},
-       {0x0000b024, 0x02830282},
-       {0x0000b028, 0x02850284},
-       {0x0000b02c, 0x02890288},
-       {0x0000b030, 0x028b028a},
-       {0x0000b034, 0x0388028c},
-       {0x0000b038, 0x038a0389},
-       {0x0000b03c, 0x038c038b},
-       {0x0000b040, 0x0390038d},
-       {0x0000b044, 0x03920391},
-       {0x0000b048, 0x03940393},
-       {0x0000b04c, 0x03960395},
-       {0x0000b050, 0x00000000},
-       {0x0000b054, 0x00000000},
-       {0x0000b058, 0x00000000},
-       {0x0000b05c, 0x00000000},
-       {0x0000b060, 0x00000000},
-       {0x0000b064, 0x00000000},
-       {0x0000b068, 0x00000000},
-       {0x0000b06c, 0x00000000},
-       {0x0000b070, 0x00000000},
-       {0x0000b074, 0x00000000},
-       {0x0000b078, 0x00000000},
-       {0x0000b07c, 0x00000000},
-       {0x0000b080, 0x32323232},
-       {0x0000b084, 0x2f2f3232},
-       {0x0000b088, 0x23282a2d},
-       {0x0000b08c, 0x1c1e2123},
-       {0x0000b090, 0x14171919},
-       {0x0000b094, 0x0e0e1214},
-       {0x0000b098, 0x03050707},
-       {0x0000b09c, 0x00030303},
-       {0x0000b0a0, 0x00000000},
-       {0x0000b0a4, 0x00000000},
-       {0x0000b0a8, 0x00000000},
-       {0x0000b0ac, 0x00000000},
-       {0x0000b0b0, 0x00000000},
-       {0x0000b0b4, 0x00000000},
-       {0x0000b0b8, 0x00000000},
-       {0x0000b0bc, 0x00000000},
-       {0x0000b0c0, 0x003f0020},
-       {0x0000b0c4, 0x00400041},
-       {0x0000b0c8, 0x0140005f},
-       {0x0000b0cc, 0x0160015f},
-       {0x0000b0d0, 0x017e017f},
-       {0x0000b0d4, 0x02410242},
-       {0x0000b0d8, 0x025f0240},
-       {0x0000b0dc, 0x027f0260},
-       {0x0000b0e0, 0x0341027e},
-       {0x0000b0e4, 0x035f0340},
-       {0x0000b0e8, 0x037f0360},
-       {0x0000b0ec, 0x04400441},
-       {0x0000b0f0, 0x0460045f},
-       {0x0000b0f4, 0x0541047f},
-       {0x0000b0f8, 0x055f0540},
-       {0x0000b0fc, 0x057f0560},
-       {0x0000b100, 0x06400641},
-       {0x0000b104, 0x0660065f},
-       {0x0000b108, 0x067e067f},
-       {0x0000b10c, 0x07410742},
-       {0x0000b110, 0x075f0740},
-       {0x0000b114, 0x077f0760},
-       {0x0000b118, 0x07800781},
-       {0x0000b11c, 0x07a0079f},
-       {0x0000b120, 0x07c107bf},
-       {0x0000b124, 0x000007c0},
-       {0x0000b128, 0x00000000},
-       {0x0000b12c, 0x00000000},
-       {0x0000b130, 0x00000000},
-       {0x0000b134, 0x00000000},
-       {0x0000b138, 0x00000000},
-       {0x0000b13c, 0x00000000},
-       {0x0000b140, 0x003f0020},
-       {0x0000b144, 0x00400041},
-       {0x0000b148, 0x0140005f},
-       {0x0000b14c, 0x0160015f},
-       {0x0000b150, 0x017e017f},
-       {0x0000b154, 0x02410242},
-       {0x0000b158, 0x025f0240},
-       {0x0000b15c, 0x027f0260},
-       {0x0000b160, 0x0341027e},
-       {0x0000b164, 0x035f0340},
-       {0x0000b168, 0x037f0360},
-       {0x0000b16c, 0x04400441},
-       {0x0000b170, 0x0460045f},
-       {0x0000b174, 0x0541047f},
-       {0x0000b178, 0x055f0540},
-       {0x0000b17c, 0x057f0560},
-       {0x0000b180, 0x06400641},
-       {0x0000b184, 0x0660065f},
-       {0x0000b188, 0x067e067f},
-       {0x0000b18c, 0x07410742},
-       {0x0000b190, 0x075f0740},
-       {0x0000b194, 0x077f0760},
-       {0x0000b198, 0x07800781},
-       {0x0000b19c, 0x07a0079f},
-       {0x0000b1a0, 0x07c107bf},
-       {0x0000b1a4, 0x000007c0},
-       {0x0000b1a8, 0x00000000},
-       {0x0000b1ac, 0x00000000},
-       {0x0000b1b0, 0x00000000},
-       {0x0000b1b4, 0x00000000},
-       {0x0000b1b8, 0x00000000},
-       {0x0000b1bc, 0x00000000},
-       {0x0000b1c0, 0x00000000},
-       {0x0000b1c4, 0x00000000},
-       {0x0000b1c8, 0x00000000},
-       {0x0000b1cc, 0x00000000},
-       {0x0000b1d0, 0x00000000},
-       {0x0000b1d4, 0x00000000},
-       {0x0000b1d8, 0x00000000},
-       {0x0000b1dc, 0x00000000},
-       {0x0000b1e0, 0x00000000},
-       {0x0000b1e4, 0x00000000},
-       {0x0000b1e8, 0x00000000},
-       {0x0000b1ec, 0x00000000},
-       {0x0000b1f0, 0x00000396},
-       {0x0000b1f4, 0x00000396},
-       {0x0000b1f8, 0x00000396},
-       {0x0000b1fc, 0x00000196},
-};
-
-static const u32 ar9300_2p0_soc_preamble[][2] = {
-       /* Addr      allmodes  */
-       {0x000040a4, 0x00a0c1c9},
-       {0x00007008, 0x00000000},
-       {0x00007020, 0x00000000},
-       {0x00007034, 0x00000002},
-       {0x00007038, 0x000004c2},
-};
-
-static const u32 ar9300PciePhy_pll_on_clkreq_disable_L1_2p0[][2] = {
-       /* Addr      allmodes  */
-       {0x00004040, 0x08212e5e},
-       {0x00004040, 0x0008003b},
-       {0x00004044, 0x00000000},
-};
-
-static const u32 ar9300PciePhy_clkreq_enable_L1_2p0[][2] = {
-       /* Addr      allmodes  */
-       {0x00004040, 0x08253e5e},
-       {0x00004040, 0x0008003b},
-       {0x00004044, 0x00000000},
-};
-
-static const u32 ar9300PciePhy_clkreq_disable_L1_2p0[][2] = {
-       /* Addr      allmodes  */
-       {0x00004040, 0x08213e5e},
-       {0x00004040, 0x0008003b},
-       {0x00004044, 0x00000000},
-};
-
-#endif /* INITVALS_9003_2P0_H */
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
deleted file mode 100644 (file)
index a14a5e4..0000000
+++ /dev/null
@@ -1,1864 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef INITVALS_9003_2P2_H
-#define INITVALS_9003_2P2_H
-
-/* AR9003 2.2 */
-
-static const u32 ar9300_2p2_radio_postamble[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x0001609c, 0x0dd08f29, 0x0dd08f29, 0x0b283f31, 0x0b283f31},
-       {0x000160ac, 0xa4653c00, 0xa4653c00, 0x24652800, 0x24652800},
-       {0x000160b0, 0x03284f3e, 0x03284f3e, 0x05d08f20, 0x05d08f20},
-       {0x0001610c, 0x08000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00016140, 0x10804008, 0x10804008, 0x50804008, 0x50804008},
-       {0x0001650c, 0x08000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00016540, 0x10804008, 0x10804008, 0x50804008, 0x50804008},
-       {0x0001690c, 0x08000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00016940, 0x10804008, 0x10804008, 0x50804008, 0x50804008},
-};
-
-static const u32 ar9300Modes_lowest_ob_db_tx_gain_table_2p2[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x0000a2dc, 0x0380c7fc, 0x0380c7fc, 0x00637800, 0x00637800},
-       {0x0000a2e0, 0x0000f800, 0x0000f800, 0x03838000, 0x03838000},
-       {0x0000a2e4, 0x03ff0000, 0x03ff0000, 0x03fc0000, 0x03fc0000},
-       {0x0000a2e8, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9},
-       {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002},
-       {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004},
-       {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200},
-       {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202},
-       {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400},
-       {0x0000a518, 0x21002220, 0x21002220, 0x16000402, 0x16000402},
-       {0x0000a51c, 0x27002223, 0x27002223, 0x19000404, 0x19000404},
-       {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603},
-       {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02},
-       {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04},
-       {0x0000a52c, 0x3a02222a, 0x3a02222a, 0x28000a20, 0x28000a20},
-       {0x0000a530, 0x3e02222c, 0x3e02222c, 0x2c000e20, 0x2c000e20},
-       {0x0000a534, 0x4202242a, 0x4202242a, 0x30000e22, 0x30000e22},
-       {0x0000a538, 0x4702244a, 0x4702244a, 0x34000e24, 0x34000e24},
-       {0x0000a53c, 0x4b02244c, 0x4b02244c, 0x38001640, 0x38001640},
-       {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660},
-       {0x0000a544, 0x5302266c, 0x5302266c, 0x3f001861, 0x3f001861},
-       {0x0000a548, 0x5702286c, 0x5702286c, 0x43001a81, 0x43001a81},
-       {0x0000a54c, 0x5c02486b, 0x5c02486b, 0x47001a83, 0x47001a83},
-       {0x0000a550, 0x61024a6c, 0x61024a6c, 0x4a001c84, 0x4a001c84},
-       {0x0000a554, 0x66026a6c, 0x66026a6c, 0x4e001ce3, 0x4e001ce3},
-       {0x0000a558, 0x6b026e6c, 0x6b026e6c, 0x52001ce5, 0x52001ce5},
-       {0x0000a55c, 0x7002708c, 0x7002708c, 0x56001ce9, 0x56001ce9},
-       {0x0000a560, 0x7302b08a, 0x7302b08a, 0x5a001ceb, 0x5a001ceb},
-       {0x0000a564, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-       {0x0000a568, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-       {0x0000a56c, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-       {0x0000a570, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-       {0x0000a574, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-       {0x0000a578, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-       {0x0000a57c, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-       {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
-       {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002},
-       {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004},
-       {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200},
-       {0x0000a590, 0x16800220, 0x16800220, 0x0f800202, 0x0f800202},
-       {0x0000a594, 0x1c800223, 0x1c800223, 0x12800400, 0x12800400},
-       {0x0000a598, 0x21802220, 0x21802220, 0x16800402, 0x16800402},
-       {0x0000a59c, 0x27802223, 0x27802223, 0x19800404, 0x19800404},
-       {0x0000a5a0, 0x2b822220, 0x2b822220, 0x1c800603, 0x1c800603},
-       {0x0000a5a4, 0x2f822222, 0x2f822222, 0x21800a02, 0x21800a02},
-       {0x0000a5a8, 0x34822225, 0x34822225, 0x25800a04, 0x25800a04},
-       {0x0000a5ac, 0x3a82222a, 0x3a82222a, 0x28800a20, 0x28800a20},
-       {0x0000a5b0, 0x3e82222c, 0x3e82222c, 0x2c800e20, 0x2c800e20},
-       {0x0000a5b4, 0x4282242a, 0x4282242a, 0x30800e22, 0x30800e22},
-       {0x0000a5b8, 0x4782244a, 0x4782244a, 0x34800e24, 0x34800e24},
-       {0x0000a5bc, 0x4b82244c, 0x4b82244c, 0x38801640, 0x38801640},
-       {0x0000a5c0, 0x4e82246c, 0x4e82246c, 0x3c801660, 0x3c801660},
-       {0x0000a5c4, 0x5382266c, 0x5382266c, 0x3f801861, 0x3f801861},
-       {0x0000a5c8, 0x5782286c, 0x5782286c, 0x43801a81, 0x43801a81},
-       {0x0000a5cc, 0x5c82486b, 0x5c82486b, 0x47801a83, 0x47801a83},
-       {0x0000a5d0, 0x61824a6c, 0x61824a6c, 0x4a801c84, 0x4a801c84},
-       {0x0000a5d4, 0x66826a6c, 0x66826a6c, 0x4e801ce3, 0x4e801ce3},
-       {0x0000a5d8, 0x6b826e6c, 0x6b826e6c, 0x52801ce5, 0x52801ce5},
-       {0x0000a5dc, 0x7082708c, 0x7082708c, 0x56801ce9, 0x56801ce9},
-       {0x0000a5e0, 0x7382b08a, 0x7382b08a, 0x5a801ceb, 0x5a801ceb},
-       {0x0000a5e4, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5e8, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5ec, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5f0, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5f4, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5f8, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5fc, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
-       {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a610, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a614, 0x01404000, 0x01404000, 0x01404000, 0x01404000},
-       {0x0000a618, 0x01404501, 0x01404501, 0x01404501, 0x01404501},
-       {0x0000a61c, 0x02008802, 0x02008802, 0x02008501, 0x02008501},
-       {0x0000a620, 0x0300cc03, 0x0300cc03, 0x0280ca03, 0x0280ca03},
-       {0x0000a624, 0x0300cc03, 0x0300cc03, 0x03010c04, 0x03010c04},
-       {0x0000a628, 0x0300cc03, 0x0300cc03, 0x04014c04, 0x04014c04},
-       {0x0000a62c, 0x03810c03, 0x03810c03, 0x04015005, 0x04015005},
-       {0x0000a630, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-       {0x0000a634, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-       {0x0000a638, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-       {0x0000a63c, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-       {0x0000b2dc, 0x0380c7fc, 0x0380c7fc, 0x00637800, 0x00637800},
-       {0x0000b2e0, 0x0000f800, 0x0000f800, 0x03838000, 0x03838000},
-       {0x0000b2e4, 0x03ff0000, 0x03ff0000, 0x03fc0000, 0x03fc0000},
-       {0x0000b2e8, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000c2dc, 0x0380c7fc, 0x0380c7fc, 0x00637800, 0x00637800},
-       {0x0000c2e0, 0x0000f800, 0x0000f800, 0x03838000, 0x03838000},
-       {0x0000c2e4, 0x03ff0000, 0x03ff0000, 0x03fc0000, 0x03fc0000},
-       {0x0000c2e8, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
-       {0x00016048, 0x62480001, 0x62480001, 0x62480001, 0x62480001},
-       {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
-       {0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
-       {0x00016448, 0x62480001, 0x62480001, 0x62480001, 0x62480001},
-       {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
-       {0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
-       {0x00016848, 0x62480001, 0x62480001, 0x62480001, 0x62480001},
-       {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
-};
-
-static const u32 ar9300Modes_fast_clock_2p2[][3] = {
-       /* Addr      5G_HT20     5G_HT40   */
-       {0x00001030, 0x00000268, 0x000004d0},
-       {0x00001070, 0x0000018c, 0x00000318},
-       {0x000010b0, 0x00000fd0, 0x00001fa0},
-       {0x00008014, 0x044c044c, 0x08980898},
-       {0x0000801c, 0x148ec02b, 0x148ec057},
-       {0x00008318, 0x000044c0, 0x00008980},
-       {0x00009e00, 0x0372131c, 0x0372131c},
-       {0x0000a230, 0x0000000b, 0x00000016},
-       {0x0000a254, 0x00000898, 0x00001130},
-};
-
-static const u32 ar9300_2p2_radio_core[][2] = {
-       /* Addr      allmodes  */
-       {0x00016000, 0x36db6db6},
-       {0x00016004, 0x6db6db40},
-       {0x00016008, 0x73f00000},
-       {0x0001600c, 0x00000000},
-       {0x00016040, 0x7f80fff8},
-       {0x0001604c, 0x76d005b5},
-       {0x00016050, 0x556cf031},
-       {0x00016054, 0x13449440},
-       {0x00016058, 0x0c51c92c},
-       {0x0001605c, 0x3db7fffc},
-       {0x00016060, 0xfffffffc},
-       {0x00016064, 0x000f0278},
-       {0x0001606c, 0x6db60000},
-       {0x00016080, 0x00000000},
-       {0x00016084, 0x0e48048c},
-       {0x00016088, 0x54214514},
-       {0x0001608c, 0x119f481e},
-       {0x00016090, 0x24926490},
-       {0x00016098, 0xd2888888},
-       {0x000160a0, 0x0a108ffe},
-       {0x000160a4, 0x812fc370},
-       {0x000160a8, 0x423c8000},
-       {0x000160b4, 0x92480080},
-       {0x000160c0, 0x00adb6d0},
-       {0x000160c4, 0x6db6db60},
-       {0x000160c8, 0x6db6db6c},
-       {0x000160cc, 0x01e6c000},
-       {0x00016100, 0x3fffbe01},
-       {0x00016104, 0xfff80000},
-       {0x00016108, 0x00080010},
-       {0x00016144, 0x02084080},
-       {0x00016148, 0x00000000},
-       {0x00016280, 0x058a0001},
-       {0x00016284, 0x3d840208},
-       {0x00016288, 0x05a20408},
-       {0x0001628c, 0x00038c07},
-       {0x00016290, 0x00000004},
-       {0x00016294, 0x458aa14f},
-       {0x00016380, 0x00000000},
-       {0x00016384, 0x00000000},
-       {0x00016388, 0x00800700},
-       {0x0001638c, 0x00800700},
-       {0x00016390, 0x00800700},
-       {0x00016394, 0x00000000},
-       {0x00016398, 0x00000000},
-       {0x0001639c, 0x00000000},
-       {0x000163a0, 0x00000001},
-       {0x000163a4, 0x00000001},
-       {0x000163a8, 0x00000000},
-       {0x000163ac, 0x00000000},
-       {0x000163b0, 0x00000000},
-       {0x000163b4, 0x00000000},
-       {0x000163b8, 0x00000000},
-       {0x000163bc, 0x00000000},
-       {0x000163c0, 0x000000a0},
-       {0x000163c4, 0x000c0000},
-       {0x000163c8, 0x14021402},
-       {0x000163cc, 0x00001402},
-       {0x000163d0, 0x00000000},
-       {0x000163d4, 0x00000000},
-       {0x00016400, 0x36db6db6},
-       {0x00016404, 0x6db6db40},
-       {0x00016408, 0x73f00000},
-       {0x0001640c, 0x00000000},
-       {0x00016440, 0x7f80fff8},
-       {0x0001644c, 0x76d005b5},
-       {0x00016450, 0x556cf031},
-       {0x00016454, 0x13449440},
-       {0x00016458, 0x0c51c92c},
-       {0x0001645c, 0x3db7fffc},
-       {0x00016460, 0xfffffffc},
-       {0x00016464, 0x000f0278},
-       {0x0001646c, 0x6db60000},
-       {0x00016500, 0x3fffbe01},
-       {0x00016504, 0xfff80000},
-       {0x00016508, 0x00080010},
-       {0x00016544, 0x02084080},
-       {0x00016548, 0x00000000},
-       {0x00016780, 0x00000000},
-       {0x00016784, 0x00000000},
-       {0x00016788, 0x00800700},
-       {0x0001678c, 0x00800700},
-       {0x00016790, 0x00800700},
-       {0x00016794, 0x00000000},
-       {0x00016798, 0x00000000},
-       {0x0001679c, 0x00000000},
-       {0x000167a0, 0x00000001},
-       {0x000167a4, 0x00000001},
-       {0x000167a8, 0x00000000},
-       {0x000167ac, 0x00000000},
-       {0x000167b0, 0x00000000},
-       {0x000167b4, 0x00000000},
-       {0x000167b8, 0x00000000},
-       {0x000167bc, 0x00000000},
-       {0x000167c0, 0x000000a0},
-       {0x000167c4, 0x000c0000},
-       {0x000167c8, 0x14021402},
-       {0x000167cc, 0x00001402},
-       {0x000167d0, 0x00000000},
-       {0x000167d4, 0x00000000},
-       {0x00016800, 0x36db6db6},
-       {0x00016804, 0x6db6db40},
-       {0x00016808, 0x73f00000},
-       {0x0001680c, 0x00000000},
-       {0x00016840, 0x7f80fff8},
-       {0x0001684c, 0x76d005b5},
-       {0x00016850, 0x556cf031},
-       {0x00016854, 0x13449440},
-       {0x00016858, 0x0c51c92c},
-       {0x0001685c, 0x3db7fffc},
-       {0x00016860, 0xfffffffc},
-       {0x00016864, 0x000f0278},
-       {0x0001686c, 0x6db60000},
-       {0x00016900, 0x3fffbe01},
-       {0x00016904, 0xfff80000},
-       {0x00016908, 0x00080010},
-       {0x00016944, 0x02084080},
-       {0x00016948, 0x00000000},
-       {0x00016b80, 0x00000000},
-       {0x00016b84, 0x00000000},
-       {0x00016b88, 0x00800700},
-       {0x00016b8c, 0x00800700},
-       {0x00016b90, 0x00800700},
-       {0x00016b94, 0x00000000},
-       {0x00016b98, 0x00000000},
-       {0x00016b9c, 0x00000000},
-       {0x00016ba0, 0x00000001},
-       {0x00016ba4, 0x00000001},
-       {0x00016ba8, 0x00000000},
-       {0x00016bac, 0x00000000},
-       {0x00016bb0, 0x00000000},
-       {0x00016bb4, 0x00000000},
-       {0x00016bb8, 0x00000000},
-       {0x00016bbc, 0x00000000},
-       {0x00016bc0, 0x000000a0},
-       {0x00016bc4, 0x000c0000},
-       {0x00016bc8, 0x14021402},
-       {0x00016bcc, 0x00001402},
-       {0x00016bd0, 0x00000000},
-       {0x00016bd4, 0x00000000},
-};
-
-static const u32 ar9300Common_rx_gain_table_merlin_2p2[][2] = {
-       /* Addr      allmodes  */
-       {0x0000a000, 0x02000101},
-       {0x0000a004, 0x02000102},
-       {0x0000a008, 0x02000103},
-       {0x0000a00c, 0x02000104},
-       {0x0000a010, 0x02000200},
-       {0x0000a014, 0x02000201},
-       {0x0000a018, 0x02000202},
-       {0x0000a01c, 0x02000203},
-       {0x0000a020, 0x02000204},
-       {0x0000a024, 0x02000205},
-       {0x0000a028, 0x02000208},
-       {0x0000a02c, 0x02000302},
-       {0x0000a030, 0x02000303},
-       {0x0000a034, 0x02000304},
-       {0x0000a038, 0x02000400},
-       {0x0000a03c, 0x02010300},
-       {0x0000a040, 0x02010301},
-       {0x0000a044, 0x02010302},
-       {0x0000a048, 0x02000500},
-       {0x0000a04c, 0x02010400},
-       {0x0000a050, 0x02020300},
-       {0x0000a054, 0x02020301},
-       {0x0000a058, 0x02020302},
-       {0x0000a05c, 0x02020303},
-       {0x0000a060, 0x02020400},
-       {0x0000a064, 0x02030300},
-       {0x0000a068, 0x02030301},
-       {0x0000a06c, 0x02030302},
-       {0x0000a070, 0x02030303},
-       {0x0000a074, 0x02030400},
-       {0x0000a078, 0x02040300},
-       {0x0000a07c, 0x02040301},
-       {0x0000a080, 0x02040302},
-       {0x0000a084, 0x02040303},
-       {0x0000a088, 0x02030500},
-       {0x0000a08c, 0x02040400},
-       {0x0000a090, 0x02050203},
-       {0x0000a094, 0x02050204},
-       {0x0000a098, 0x02050205},
-       {0x0000a09c, 0x02040500},
-       {0x0000a0a0, 0x02050301},
-       {0x0000a0a4, 0x02050302},
-       {0x0000a0a8, 0x02050303},
-       {0x0000a0ac, 0x02050400},
-       {0x0000a0b0, 0x02050401},
-       {0x0000a0b4, 0x02050402},
-       {0x0000a0b8, 0x02050403},
-       {0x0000a0bc, 0x02050500},
-       {0x0000a0c0, 0x02050501},
-       {0x0000a0c4, 0x02050502},
-       {0x0000a0c8, 0x02050503},
-       {0x0000a0cc, 0x02050504},
-       {0x0000a0d0, 0x02050600},
-       {0x0000a0d4, 0x02050601},
-       {0x0000a0d8, 0x02050602},
-       {0x0000a0dc, 0x02050603},
-       {0x0000a0e0, 0x02050604},
-       {0x0000a0e4, 0x02050700},
-       {0x0000a0e8, 0x02050701},
-       {0x0000a0ec, 0x02050702},
-       {0x0000a0f0, 0x02050703},
-       {0x0000a0f4, 0x02050704},
-       {0x0000a0f8, 0x02050705},
-       {0x0000a0fc, 0x02050708},
-       {0x0000a100, 0x02050709},
-       {0x0000a104, 0x0205070a},
-       {0x0000a108, 0x0205070b},
-       {0x0000a10c, 0x0205070c},
-       {0x0000a110, 0x0205070d},
-       {0x0000a114, 0x02050710},
-       {0x0000a118, 0x02050711},
-       {0x0000a11c, 0x02050712},
-       {0x0000a120, 0x02050713},
-       {0x0000a124, 0x02050714},
-       {0x0000a128, 0x02050715},
-       {0x0000a12c, 0x02050730},
-       {0x0000a130, 0x02050731},
-       {0x0000a134, 0x02050732},
-       {0x0000a138, 0x02050733},
-       {0x0000a13c, 0x02050734},
-       {0x0000a140, 0x02050735},
-       {0x0000a144, 0x02050750},
-       {0x0000a148, 0x02050751},
-       {0x0000a14c, 0x02050752},
-       {0x0000a150, 0x02050753},
-       {0x0000a154, 0x02050754},
-       {0x0000a158, 0x02050755},
-       {0x0000a15c, 0x02050770},
-       {0x0000a160, 0x02050771},
-       {0x0000a164, 0x02050772},
-       {0x0000a168, 0x02050773},
-       {0x0000a16c, 0x02050774},
-       {0x0000a170, 0x02050775},
-       {0x0000a174, 0x00000776},
-       {0x0000a178, 0x00000776},
-       {0x0000a17c, 0x00000776},
-       {0x0000a180, 0x00000776},
-       {0x0000a184, 0x00000776},
-       {0x0000a188, 0x00000776},
-       {0x0000a18c, 0x00000776},
-       {0x0000a190, 0x00000776},
-       {0x0000a194, 0x00000776},
-       {0x0000a198, 0x00000776},
-       {0x0000a19c, 0x00000776},
-       {0x0000a1a0, 0x00000776},
-       {0x0000a1a4, 0x00000776},
-       {0x0000a1a8, 0x00000776},
-       {0x0000a1ac, 0x00000776},
-       {0x0000a1b0, 0x00000776},
-       {0x0000a1b4, 0x00000776},
-       {0x0000a1b8, 0x00000776},
-       {0x0000a1bc, 0x00000776},
-       {0x0000a1c0, 0x00000776},
-       {0x0000a1c4, 0x00000776},
-       {0x0000a1c8, 0x00000776},
-       {0x0000a1cc, 0x00000776},
-       {0x0000a1d0, 0x00000776},
-       {0x0000a1d4, 0x00000776},
-       {0x0000a1d8, 0x00000776},
-       {0x0000a1dc, 0x00000776},
-       {0x0000a1e0, 0x00000776},
-       {0x0000a1e4, 0x00000776},
-       {0x0000a1e8, 0x00000776},
-       {0x0000a1ec, 0x00000776},
-       {0x0000a1f0, 0x00000776},
-       {0x0000a1f4, 0x00000776},
-       {0x0000a1f8, 0x00000776},
-       {0x0000a1fc, 0x00000776},
-       {0x0000b000, 0x02000101},
-       {0x0000b004, 0x02000102},
-       {0x0000b008, 0x02000103},
-       {0x0000b00c, 0x02000104},
-       {0x0000b010, 0x02000200},
-       {0x0000b014, 0x02000201},
-       {0x0000b018, 0x02000202},
-       {0x0000b01c, 0x02000203},
-       {0x0000b020, 0x02000204},
-       {0x0000b024, 0x02000205},
-       {0x0000b028, 0x02000208},
-       {0x0000b02c, 0x02000302},
-       {0x0000b030, 0x02000303},
-       {0x0000b034, 0x02000304},
-       {0x0000b038, 0x02000400},
-       {0x0000b03c, 0x02010300},
-       {0x0000b040, 0x02010301},
-       {0x0000b044, 0x02010302},
-       {0x0000b048, 0x02000500},
-       {0x0000b04c, 0x02010400},
-       {0x0000b050, 0x02020300},
-       {0x0000b054, 0x02020301},
-       {0x0000b058, 0x02020302},
-       {0x0000b05c, 0x02020303},
-       {0x0000b060, 0x02020400},
-       {0x0000b064, 0x02030300},
-       {0x0000b068, 0x02030301},
-       {0x0000b06c, 0x02030302},
-       {0x0000b070, 0x02030303},
-       {0x0000b074, 0x02030400},
-       {0x0000b078, 0x02040300},
-       {0x0000b07c, 0x02040301},
-       {0x0000b080, 0x02040302},
-       {0x0000b084, 0x02040303},
-       {0x0000b088, 0x02030500},
-       {0x0000b08c, 0x02040400},
-       {0x0000b090, 0x02050203},
-       {0x0000b094, 0x02050204},
-       {0x0000b098, 0x02050205},
-       {0x0000b09c, 0x02040500},
-       {0x0000b0a0, 0x02050301},
-       {0x0000b0a4, 0x02050302},
-       {0x0000b0a8, 0x02050303},
-       {0x0000b0ac, 0x02050400},
-       {0x0000b0b0, 0x02050401},
-       {0x0000b0b4, 0x02050402},
-       {0x0000b0b8, 0x02050403},
-       {0x0000b0bc, 0x02050500},
-       {0x0000b0c0, 0x02050501},
-       {0x0000b0c4, 0x02050502},
-       {0x0000b0c8, 0x02050503},
-       {0x0000b0cc, 0x02050504},
-       {0x0000b0d0, 0x02050600},
-       {0x0000b0d4, 0x02050601},
-       {0x0000b0d8, 0x02050602},
-       {0x0000b0dc, 0x02050603},
-       {0x0000b0e0, 0x02050604},
-       {0x0000b0e4, 0x02050700},
-       {0x0000b0e8, 0x02050701},
-       {0x0000b0ec, 0x02050702},
-       {0x0000b0f0, 0x02050703},
-       {0x0000b0f4, 0x02050704},
-       {0x0000b0f8, 0x02050705},
-       {0x0000b0fc, 0x02050708},
-       {0x0000b100, 0x02050709},
-       {0x0000b104, 0x0205070a},
-       {0x0000b108, 0x0205070b},
-       {0x0000b10c, 0x0205070c},
-       {0x0000b110, 0x0205070d},
-       {0x0000b114, 0x02050710},
-       {0x0000b118, 0x02050711},
-       {0x0000b11c, 0x02050712},
-       {0x0000b120, 0x02050713},
-       {0x0000b124, 0x02050714},
-       {0x0000b128, 0x02050715},
-       {0x0000b12c, 0x02050730},
-       {0x0000b130, 0x02050731},
-       {0x0000b134, 0x02050732},
-       {0x0000b138, 0x02050733},
-       {0x0000b13c, 0x02050734},
-       {0x0000b140, 0x02050735},
-       {0x0000b144, 0x02050750},
-       {0x0000b148, 0x02050751},
-       {0x0000b14c, 0x02050752},
-       {0x0000b150, 0x02050753},
-       {0x0000b154, 0x02050754},
-       {0x0000b158, 0x02050755},
-       {0x0000b15c, 0x02050770},
-       {0x0000b160, 0x02050771},
-       {0x0000b164, 0x02050772},
-       {0x0000b168, 0x02050773},
-       {0x0000b16c, 0x02050774},
-       {0x0000b170, 0x02050775},
-       {0x0000b174, 0x00000776},
-       {0x0000b178, 0x00000776},
-       {0x0000b17c, 0x00000776},
-       {0x0000b180, 0x00000776},
-       {0x0000b184, 0x00000776},
-       {0x0000b188, 0x00000776},
-       {0x0000b18c, 0x00000776},
-       {0x0000b190, 0x00000776},
-       {0x0000b194, 0x00000776},
-       {0x0000b198, 0x00000776},
-       {0x0000b19c, 0x00000776},
-       {0x0000b1a0, 0x00000776},
-       {0x0000b1a4, 0x00000776},
-       {0x0000b1a8, 0x00000776},
-       {0x0000b1ac, 0x00000776},
-       {0x0000b1b0, 0x00000776},
-       {0x0000b1b4, 0x00000776},
-       {0x0000b1b8, 0x00000776},
-       {0x0000b1bc, 0x00000776},
-       {0x0000b1c0, 0x00000776},
-       {0x0000b1c4, 0x00000776},
-       {0x0000b1c8, 0x00000776},
-       {0x0000b1cc, 0x00000776},
-       {0x0000b1d0, 0x00000776},
-       {0x0000b1d4, 0x00000776},
-       {0x0000b1d8, 0x00000776},
-       {0x0000b1dc, 0x00000776},
-       {0x0000b1e0, 0x00000776},
-       {0x0000b1e4, 0x00000776},
-       {0x0000b1e8, 0x00000776},
-       {0x0000b1ec, 0x00000776},
-       {0x0000b1f0, 0x00000776},
-       {0x0000b1f4, 0x00000776},
-       {0x0000b1f8, 0x00000776},
-       {0x0000b1fc, 0x00000776},
-};
-
-static const u32 ar9300_2p2_mac_postamble[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160},
-       {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c},
-       {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38},
-       {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00},
-       {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b},
-       {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810},
-       {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a},
-       {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440},
-};
-
-static const u32 ar9300_2p2_soc_postamble[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x00007010, 0x00000023, 0x00000023, 0x00000023, 0x00000023},
-};
-
-static const u32 ar9200_merlin_2p2_radio_core[][2] = {
-       /* Addr      allmodes  */
-       {0x00007800, 0x00040000},
-       {0x00007804, 0xdb005012},
-       {0x00007808, 0x04924914},
-       {0x0000780c, 0x21084210},
-       {0x00007810, 0x6d801300},
-       {0x00007814, 0x0019beff},
-       {0x00007818, 0x07e41000},
-       {0x0000781c, 0x00392000},
-       {0x00007820, 0x92592480},
-       {0x00007824, 0x00040000},
-       {0x00007828, 0xdb005012},
-       {0x0000782c, 0x04924914},
-       {0x00007830, 0x21084210},
-       {0x00007834, 0x6d801300},
-       {0x00007838, 0x0019beff},
-       {0x0000783c, 0x07e40000},
-       {0x00007840, 0x00392000},
-       {0x00007844, 0x92592480},
-       {0x00007848, 0x00100000},
-       {0x0000784c, 0x773f0567},
-       {0x00007850, 0x54214514},
-       {0x00007854, 0x12035828},
-       {0x00007858, 0x92592692},
-       {0x0000785c, 0x00000000},
-       {0x00007860, 0x56400000},
-       {0x00007864, 0x0a8e370e},
-       {0x00007868, 0xc0102850},
-       {0x0000786c, 0x812d4000},
-       {0x00007870, 0x807ec400},
-       {0x00007874, 0x001b6db0},
-       {0x00007878, 0x00376b63},
-       {0x0000787c, 0x06db6db6},
-       {0x00007880, 0x006d8000},
-       {0x00007884, 0xffeffffe},
-       {0x00007888, 0xffeffffe},
-       {0x0000788c, 0x00010000},
-       {0x00007890, 0x02060aeb},
-       {0x00007894, 0x5a108000},
-};
-
-static const u32 ar9300_2p2_baseband_postamble[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8011, 0xd00a8011},
-       {0x00009820, 0x206a022e, 0x206a022e, 0x206a012e, 0x206a012e},
-       {0x00009824, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0},
-       {0x00009828, 0x06903081, 0x06903081, 0x06903881, 0x06903881},
-       {0x0000982c, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4},
-       {0x00009830, 0x0000059c, 0x0000059c, 0x0000119c, 0x0000119c},
-       {0x00009c00, 0x000000c4, 0x000000c4, 0x000000c4, 0x000000c4},
-       {0x00009e00, 0x0372111a, 0x0372111a, 0x037216a0, 0x037216a0},
-       {0x00009e04, 0x001c2020, 0x001c2020, 0x001c2020, 0x001c2020},
-       {0x00009e0c, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2},
-       {0x00009e10, 0x7ec88d2e, 0x7ec88d2e, 0x7ec84d2e, 0x7ec84d2e},
-       {0x00009e14, 0x37b95d5e, 0x37b9605e, 0x3379605e, 0x33795d5e},
-       {0x00009e18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00009e1c, 0x0001cf9c, 0x0001cf9c, 0x00021f9c, 0x00021f9c},
-       {0x00009e20, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce},
-       {0x00009e2c, 0x0000001c, 0x0000001c, 0x00000021, 0x00000021},
-       {0x00009e3c, 0xcf946220, 0xcf946220, 0xcf946222, 0xcf946222},
-       {0x00009e44, 0x02321e27, 0x02321e27, 0x02291e27, 0x02291e27},
-       {0x00009e48, 0x5030201a, 0x5030201a, 0x50302012, 0x50302012},
-       {0x00009fc8, 0x0003f000, 0x0003f000, 0x0001a000, 0x0001a000},
-       {0x0000a204, 0x000037c0, 0x000037c4, 0x000037c4, 0x000037c0},
-       {0x0000a208, 0x00000104, 0x00000104, 0x00000004, 0x00000004},
-       {0x0000a230, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b},
-       {0x0000a234, 0x00000fff, 0x10000fff, 0x10000fff, 0x00000fff},
-       {0x0000a238, 0xffb81018, 0xffb81018, 0xffb81018, 0xffb81018},
-       {0x0000a250, 0x00000000, 0x00000000, 0x00000210, 0x00000108},
-       {0x0000a254, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898},
-       {0x0000a258, 0x02020002, 0x02020002, 0x02020002, 0x02020002},
-       {0x0000a25c, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e},
-       {0x0000a260, 0x0a021501, 0x0a021501, 0x3a021501, 0x3a021501},
-       {0x0000a264, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e},
-       {0x0000a280, 0x00000007, 0x00000007, 0x0000000b, 0x0000000b},
-       {0x0000a284, 0x00000000, 0x00000000, 0x00000150, 0x00000150},
-       {0x0000a288, 0x00000110, 0x00000110, 0x00000110, 0x00000110},
-       {0x0000a28c, 0x00022222, 0x00022222, 0x00022222, 0x00022222},
-       {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18},
-       {0x0000a2d0, 0x00071981, 0x00071981, 0x00071981, 0x00071982},
-       {0x0000a2d8, 0x7999a83a, 0x7999a83a, 0x7999a83a, 0x7999a83a},
-       {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a830, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
-       {0x0000ae04, 0x001c0000, 0x001c0000, 0x001c0000, 0x001c0000},
-       {0x0000ae18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000ae1c, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
-       {0x0000ae20, 0x000001b5, 0x000001b5, 0x000001ce, 0x000001ce},
-       {0x0000b284, 0x00000000, 0x00000000, 0x00000150, 0x00000150},
-       {0x0000b830, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
-       {0x0000be04, 0x001c0000, 0x001c0000, 0x001c0000, 0x001c0000},
-       {0x0000be18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000be1c, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
-       {0x0000be20, 0x000001b5, 0x000001b5, 0x000001ce, 0x000001ce},
-       {0x0000c284, 0x00000000, 0x00000000, 0x00000150, 0x00000150},
-};
-
-static const u32 ar9300_2p2_baseband_core[][2] = {
-       /* Addr      allmodes  */
-       {0x00009800, 0xafe68e30},
-       {0x00009804, 0xfd14e000},
-       {0x00009808, 0x9c0a9f6b},
-       {0x0000980c, 0x04900000},
-       {0x00009814, 0x9280c00a},
-       {0x00009818, 0x00000000},
-       {0x0000981c, 0x00020028},
-       {0x00009834, 0x6400a290},
-       {0x00009838, 0x0108ecff},
-       {0x0000983c, 0x14750600},
-       {0x00009880, 0x201fff00},
-       {0x00009884, 0x00001042},
-       {0x000098a4, 0x00200400},
-       {0x000098b0, 0x32840bbe},
-       {0x000098d0, 0x004b6a8e},
-       {0x000098d4, 0x00000820},
-       {0x000098dc, 0x00000000},
-       {0x000098f0, 0x00000000},
-       {0x000098f4, 0x00000000},
-       {0x00009c04, 0xff55ff55},
-       {0x00009c08, 0x0320ff55},
-       {0x00009c0c, 0x00000000},
-       {0x00009c10, 0x00000000},
-       {0x00009c14, 0x00046384},
-       {0x00009c18, 0x05b6b440},
-       {0x00009c1c, 0x00b6b440},
-       {0x00009d00, 0xc080a333},
-       {0x00009d04, 0x40206c10},
-       {0x00009d08, 0x009c4060},
-       {0x00009d0c, 0x9883800a},
-       {0x00009d10, 0x01834061},
-       {0x00009d14, 0x00c0040b},
-       {0x00009d18, 0x00000000},
-       {0x00009e08, 0x0038230c},
-       {0x00009e24, 0x990bb515},
-       {0x00009e28, 0x0c6f0000},
-       {0x00009e30, 0x06336f77},
-       {0x00009e34, 0x6af6532f},
-       {0x00009e38, 0x0cc80c00},
-       {0x00009e40, 0x0d261820},
-       {0x00009e4c, 0x00001004},
-       {0x00009e50, 0x00ff03f1},
-       {0x00009e54, 0x00000000},
-       {0x00009fc0, 0x803e4788},
-       {0x00009fc4, 0x0001efb5},
-       {0x00009fcc, 0x40000014},
-       {0x00009fd0, 0x01193b93},
-       {0x0000a20c, 0x00000000},
-       {0x0000a220, 0x00000000},
-       {0x0000a224, 0x00000000},
-       {0x0000a228, 0x10002310},
-       {0x0000a22c, 0x01036a27},
-       {0x0000a23c, 0x00000000},
-       {0x0000a244, 0x0c000000},
-       {0x0000a2a0, 0x00000001},
-       {0x0000a2c0, 0x00000001},
-       {0x0000a2c8, 0x00000000},
-       {0x0000a2cc, 0x18c43433},
-       {0x0000a2d4, 0x00000000},
-       {0x0000a2ec, 0x00000000},
-       {0x0000a2f0, 0x00000000},
-       {0x0000a2f4, 0x00000000},
-       {0x0000a2f8, 0x00000000},
-       {0x0000a344, 0x00000000},
-       {0x0000a34c, 0x00000000},
-       {0x0000a350, 0x0000a000},
-       {0x0000a364, 0x00000000},
-       {0x0000a370, 0x00000000},
-       {0x0000a390, 0x00000001},
-       {0x0000a394, 0x00000444},
-       {0x0000a398, 0x001f0e0f},
-       {0x0000a39c, 0x0075393f},
-       {0x0000a3a0, 0xb79f6427},
-       {0x0000a3a4, 0x00000000},
-       {0x0000a3a8, 0xaaaaaaaa},
-       {0x0000a3ac, 0x3c466478},
-       {0x0000a3c0, 0x20202020},
-       {0x0000a3c4, 0x22222220},
-       {0x0000a3c8, 0x20200020},
-       {0x0000a3cc, 0x20202020},
-       {0x0000a3d0, 0x20202020},
-       {0x0000a3d4, 0x20202020},
-       {0x0000a3d8, 0x20202020},
-       {0x0000a3dc, 0x20202020},
-       {0x0000a3e0, 0x20202020},
-       {0x0000a3e4, 0x20202020},
-       {0x0000a3e8, 0x20202020},
-       {0x0000a3ec, 0x20202020},
-       {0x0000a3f0, 0x00000000},
-       {0x0000a3f4, 0x00000246},
-       {0x0000a3f8, 0x0cdbd380},
-       {0x0000a3fc, 0x000f0f01},
-       {0x0000a400, 0x8fa91f01},
-       {0x0000a404, 0x00000000},
-       {0x0000a408, 0x0e79e5c6},
-       {0x0000a40c, 0x00820820},
-       {0x0000a414, 0x1ce739ce},
-       {0x0000a418, 0x2d001dce},
-       {0x0000a41c, 0x1ce739ce},
-       {0x0000a420, 0x000001ce},
-       {0x0000a424, 0x1ce739ce},
-       {0x0000a428, 0x000001ce},
-       {0x0000a42c, 0x1ce739ce},
-       {0x0000a430, 0x1ce739ce},
-       {0x0000a434, 0x00000000},
-       {0x0000a438, 0x00001801},
-       {0x0000a43c, 0x00100000},
-       {0x0000a440, 0x00000000},
-       {0x0000a444, 0x00000000},
-       {0x0000a448, 0x06000080},
-       {0x0000a44c, 0x00000001},
-       {0x0000a450, 0x00010000},
-       {0x0000a458, 0x00000000},
-       {0x0000a640, 0x00000000},
-       {0x0000a644, 0x3fad9d74},
-       {0x0000a648, 0x0048060a},
-       {0x0000a64c, 0x00003c37},
-       {0x0000a670, 0x03020100},
-       {0x0000a674, 0x09080504},
-       {0x0000a678, 0x0d0c0b0a},
-       {0x0000a67c, 0x13121110},
-       {0x0000a680, 0x31301514},
-       {0x0000a684, 0x35343332},
-       {0x0000a688, 0x00000036},
-       {0x0000a690, 0x00000838},
-       {0x0000a7c0, 0x00000000},
-       {0x0000a7c4, 0xfffffffc},
-       {0x0000a7c8, 0x00000000},
-       {0x0000a7cc, 0x00000000},
-       {0x0000a7d0, 0x00000000},
-       {0x0000a7d4, 0x00000004},
-       {0x0000a7dc, 0x00000001},
-       {0x0000a8d0, 0x004b6a8e},
-       {0x0000a8d4, 0x00000820},
-       {0x0000a8dc, 0x00000000},
-       {0x0000a8f0, 0x00000000},
-       {0x0000a8f4, 0x00000000},
-       {0x0000b2d0, 0x00000080},
-       {0x0000b2d4, 0x00000000},
-       {0x0000b2ec, 0x00000000},
-       {0x0000b2f0, 0x00000000},
-       {0x0000b2f4, 0x00000000},
-       {0x0000b2f8, 0x00000000},
-       {0x0000b408, 0x0e79e5c0},
-       {0x0000b40c, 0x00820820},
-       {0x0000b420, 0x00000000},
-       {0x0000b8d0, 0x004b6a8e},
-       {0x0000b8d4, 0x00000820},
-       {0x0000b8dc, 0x00000000},
-       {0x0000b8f0, 0x00000000},
-       {0x0000b8f4, 0x00000000},
-       {0x0000c2d0, 0x00000080},
-       {0x0000c2d4, 0x00000000},
-       {0x0000c2ec, 0x00000000},
-       {0x0000c2f0, 0x00000000},
-       {0x0000c2f4, 0x00000000},
-       {0x0000c2f8, 0x00000000},
-       {0x0000c408, 0x0e79e5c0},
-       {0x0000c40c, 0x00820820},
-       {0x0000c420, 0x00000000},
-};
-
-static const u32 ar9300Modes_high_power_tx_gain_table_2p2[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x0000a2dc, 0x0380c7fc, 0x0380c7fc, 0x00637800, 0x00637800},
-       {0x0000a2e0, 0x0000f800, 0x0000f800, 0x03838000, 0x03838000},
-       {0x0000a2e4, 0x03ff0000, 0x03ff0000, 0x03fc0000, 0x03fc0000},
-       {0x0000a2e8, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a410, 0x000050d8, 0x000050d8, 0x000050d9, 0x000050d9},
-       {0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000},
-       {0x0000a504, 0x04002222, 0x04002222, 0x04000002, 0x04000002},
-       {0x0000a508, 0x09002421, 0x09002421, 0x08000004, 0x08000004},
-       {0x0000a50c, 0x0d002621, 0x0d002621, 0x0b000200, 0x0b000200},
-       {0x0000a510, 0x13004620, 0x13004620, 0x0f000202, 0x0f000202},
-       {0x0000a514, 0x19004a20, 0x19004a20, 0x11000400, 0x11000400},
-       {0x0000a518, 0x1d004e20, 0x1d004e20, 0x15000402, 0x15000402},
-       {0x0000a51c, 0x21005420, 0x21005420, 0x19000404, 0x19000404},
-       {0x0000a520, 0x26005e20, 0x26005e20, 0x1b000603, 0x1b000603},
-       {0x0000a524, 0x2b005e40, 0x2b005e40, 0x1f000a02, 0x1f000a02},
-       {0x0000a528, 0x2f005e42, 0x2f005e42, 0x23000a04, 0x23000a04},
-       {0x0000a52c, 0x33005e44, 0x33005e44, 0x26000a20, 0x26000a20},
-       {0x0000a530, 0x38005e65, 0x38005e65, 0x2a000e20, 0x2a000e20},
-       {0x0000a534, 0x3c005e69, 0x3c005e69, 0x2e000e22, 0x2e000e22},
-       {0x0000a538, 0x40005e6b, 0x40005e6b, 0x31000e24, 0x31000e24},
-       {0x0000a53c, 0x44005e6d, 0x44005e6d, 0x34001640, 0x34001640},
-       {0x0000a540, 0x49005e72, 0x49005e72, 0x38001660, 0x38001660},
-       {0x0000a544, 0x4e005eb2, 0x4e005eb2, 0x3b001861, 0x3b001861},
-       {0x0000a548, 0x53005f12, 0x53005f12, 0x3e001a81, 0x3e001a81},
-       {0x0000a54c, 0x59025eb2, 0x59025eb2, 0x42001a83, 0x42001a83},
-       {0x0000a550, 0x5e025f12, 0x5e025f12, 0x44001c84, 0x44001c84},
-       {0x0000a554, 0x61027f12, 0x61027f12, 0x48001ce3, 0x48001ce3},
-       {0x0000a558, 0x6702bf12, 0x6702bf12, 0x4c001ce5, 0x4c001ce5},
-       {0x0000a55c, 0x6b02bf14, 0x6b02bf14, 0x50001ce9, 0x50001ce9},
-       {0x0000a560, 0x6f02bf16, 0x6f02bf16, 0x54001ceb, 0x54001ceb},
-       {0x0000a564, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a568, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a56c, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a570, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a574, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a578, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a57c, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a580, 0x00802220, 0x00802220, 0x00800000, 0x00800000},
-       {0x0000a584, 0x04802222, 0x04802222, 0x04800002, 0x04800002},
-       {0x0000a588, 0x09802421, 0x09802421, 0x08800004, 0x08800004},
-       {0x0000a58c, 0x0d802621, 0x0d802621, 0x0b800200, 0x0b800200},
-       {0x0000a590, 0x13804620, 0x13804620, 0x0f800202, 0x0f800202},
-       {0x0000a594, 0x19804a20, 0x19804a20, 0x11800400, 0x11800400},
-       {0x0000a598, 0x1d804e20, 0x1d804e20, 0x15800402, 0x15800402},
-       {0x0000a59c, 0x21805420, 0x21805420, 0x19800404, 0x19800404},
-       {0x0000a5a0, 0x26805e20, 0x26805e20, 0x1b800603, 0x1b800603},
-       {0x0000a5a4, 0x2b805e40, 0x2b805e40, 0x1f800a02, 0x1f800a02},
-       {0x0000a5a8, 0x2f805e42, 0x2f805e42, 0x23800a04, 0x23800a04},
-       {0x0000a5ac, 0x33805e44, 0x33805e44, 0x26800a20, 0x26800a20},
-       {0x0000a5b0, 0x38805e65, 0x38805e65, 0x2a800e20, 0x2a800e20},
-       {0x0000a5b4, 0x3c805e69, 0x3c805e69, 0x2e800e22, 0x2e800e22},
-       {0x0000a5b8, 0x40805e6b, 0x40805e6b, 0x31800e24, 0x31800e24},
-       {0x0000a5bc, 0x44805e6d, 0x44805e6d, 0x34801640, 0x34801640},
-       {0x0000a5c0, 0x49805e72, 0x49805e72, 0x38801660, 0x38801660},
-       {0x0000a5c4, 0x4e805eb2, 0x4e805eb2, 0x3b801861, 0x3b801861},
-       {0x0000a5c8, 0x53805f12, 0x53805f12, 0x3e801a81, 0x3e801a81},
-       {0x0000a5cc, 0x59825eb2, 0x59825eb2, 0x42801a83, 0x42801a83},
-       {0x0000a5d0, 0x5e825f12, 0x5e825f12, 0x44801c84, 0x44801c84},
-       {0x0000a5d4, 0x61827f12, 0x61827f12, 0x48801ce3, 0x48801ce3},
-       {0x0000a5d8, 0x6782bf12, 0x6782bf12, 0x4c801ce5, 0x4c801ce5},
-       {0x0000a5dc, 0x6b82bf14, 0x6b82bf14, 0x50801ce9, 0x50801ce9},
-       {0x0000a5e0, 0x6f82bf16, 0x6f82bf16, 0x54801ceb, 0x54801ceb},
-       {0x0000a5e4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5e8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5ec, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5f0, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5f4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5f8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5fc, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a610, 0x00804000, 0x00804000, 0x00000000, 0x00000000},
-       {0x0000a614, 0x00804201, 0x00804201, 0x01404000, 0x01404000},
-       {0x0000a618, 0x0280c802, 0x0280c802, 0x01404501, 0x01404501},
-       {0x0000a61c, 0x0280ca03, 0x0280ca03, 0x02008501, 0x02008501},
-       {0x0000a620, 0x04c15104, 0x04c15104, 0x0280ca03, 0x0280ca03},
-       {0x0000a624, 0x04c15305, 0x04c15305, 0x03010c04, 0x03010c04},
-       {0x0000a628, 0x04c15305, 0x04c15305, 0x04014c04, 0x04014c04},
-       {0x0000a62c, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-       {0x0000a630, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-       {0x0000a634, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-       {0x0000a638, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-       {0x0000a63c, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-       {0x0000b2dc, 0x0380c7fc, 0x0380c7fc, 0x00637800, 0x00637800},
-       {0x0000b2e0, 0x0000f800, 0x0000f800, 0x03838000, 0x03838000},
-       {0x0000b2e4, 0x03ff0000, 0x03ff0000, 0x03fc0000, 0x03fc0000},
-       {0x0000b2e8, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000c2dc, 0x0380c7fc, 0x0380c7fc, 0x00637800, 0x00637800},
-       {0x0000c2e0, 0x0000f800, 0x0000f800, 0x03838000, 0x03838000},
-       {0x0000c2e4, 0x03ff0000, 0x03ff0000, 0x03fc0000, 0x03fc0000},
-       {0x0000c2e8, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00016044, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6},
-       {0x00016048, 0xae480001, 0xae480001, 0xae480001, 0xae480001},
-       {0x00016068, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c},
-       {0x00016444, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6},
-       {0x00016448, 0xae480001, 0xae480001, 0xae480001, 0xae480001},
-       {0x00016468, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c},
-       {0x00016844, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6},
-       {0x00016848, 0xae480001, 0xae480001, 0xae480001, 0xae480001},
-       {0x00016868, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c},
-};
-
-static const u32 ar9300Modes_high_ob_db_tx_gain_table_2p2[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x0000a2dc, 0x01feee00, 0x01feee00, 0x00637800, 0x00637800},
-       {0x0000a2e0, 0x0000f000, 0x0000f000, 0x03838000, 0x03838000},
-       {0x0000a2e4, 0x01ff0000, 0x01ff0000, 0x03fc0000, 0x03fc0000},
-       {0x0000a2e8, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a410, 0x000050d8, 0x000050d8, 0x000050d9, 0x000050d9},
-       {0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000},
-       {0x0000a504, 0x04002222, 0x04002222, 0x04000002, 0x04000002},
-       {0x0000a508, 0x09002421, 0x09002421, 0x08000004, 0x08000004},
-       {0x0000a50c, 0x0d002621, 0x0d002621, 0x0b000200, 0x0b000200},
-       {0x0000a510, 0x13004620, 0x13004620, 0x0f000202, 0x0f000202},
-       {0x0000a514, 0x19004a20, 0x19004a20, 0x11000400, 0x11000400},
-       {0x0000a518, 0x1d004e20, 0x1d004e20, 0x15000402, 0x15000402},
-       {0x0000a51c, 0x21005420, 0x21005420, 0x19000404, 0x19000404},
-       {0x0000a520, 0x26005e20, 0x26005e20, 0x1b000603, 0x1b000603},
-       {0x0000a524, 0x2b005e40, 0x2b005e40, 0x1f000a02, 0x1f000a02},
-       {0x0000a528, 0x2f005e42, 0x2f005e42, 0x23000a04, 0x23000a04},
-       {0x0000a52c, 0x33005e44, 0x33005e44, 0x26000a20, 0x26000a20},
-       {0x0000a530, 0x38005e65, 0x38005e65, 0x2a000e20, 0x2a000e20},
-       {0x0000a534, 0x3c005e69, 0x3c005e69, 0x2e000e22, 0x2e000e22},
-       {0x0000a538, 0x40005e6b, 0x40005e6b, 0x31000e24, 0x31000e24},
-       {0x0000a53c, 0x44005e6d, 0x44005e6d, 0x34001640, 0x34001640},
-       {0x0000a540, 0x49005e72, 0x49005e72, 0x38001660, 0x38001660},
-       {0x0000a544, 0x4e005eb2, 0x4e005eb2, 0x3b001861, 0x3b001861},
-       {0x0000a548, 0x53005f12, 0x53005f12, 0x3e001a81, 0x3e001a81},
-       {0x0000a54c, 0x59025eb2, 0x59025eb2, 0x42001a83, 0x42001a83},
-       {0x0000a550, 0x5e025f12, 0x5e025f12, 0x44001c84, 0x44001c84},
-       {0x0000a554, 0x61027f12, 0x61027f12, 0x48001ce3, 0x48001ce3},
-       {0x0000a558, 0x6702bf12, 0x6702bf12, 0x4c001ce5, 0x4c001ce5},
-       {0x0000a55c, 0x6b02bf14, 0x6b02bf14, 0x50001ce9, 0x50001ce9},
-       {0x0000a560, 0x6f02bf16, 0x6f02bf16, 0x54001ceb, 0x54001ceb},
-       {0x0000a564, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a568, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a56c, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a570, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a574, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a578, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a57c, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
-       {0x0000a580, 0x00802220, 0x00802220, 0x00800000, 0x00800000},
-       {0x0000a584, 0x04802222, 0x04802222, 0x04800002, 0x04800002},
-       {0x0000a588, 0x09802421, 0x09802421, 0x08800004, 0x08800004},
-       {0x0000a58c, 0x0d802621, 0x0d802621, 0x0b800200, 0x0b800200},
-       {0x0000a590, 0x13804620, 0x13804620, 0x0f800202, 0x0f800202},
-       {0x0000a594, 0x19804a20, 0x19804a20, 0x11800400, 0x11800400},
-       {0x0000a598, 0x1d804e20, 0x1d804e20, 0x15800402, 0x15800402},
-       {0x0000a59c, 0x21805420, 0x21805420, 0x19800404, 0x19800404},
-       {0x0000a5a0, 0x26805e20, 0x26805e20, 0x1b800603, 0x1b800603},
-       {0x0000a5a4, 0x2b805e40, 0x2b805e40, 0x1f800a02, 0x1f800a02},
-       {0x0000a5a8, 0x2f805e42, 0x2f805e42, 0x23800a04, 0x23800a04},
-       {0x0000a5ac, 0x33805e44, 0x33805e44, 0x26800a20, 0x26800a20},
-       {0x0000a5b0, 0x38805e65, 0x38805e65, 0x2a800e20, 0x2a800e20},
-       {0x0000a5b4, 0x3c805e69, 0x3c805e69, 0x2e800e22, 0x2e800e22},
-       {0x0000a5b8, 0x40805e6b, 0x40805e6b, 0x31800e24, 0x31800e24},
-       {0x0000a5bc, 0x44805e6d, 0x44805e6d, 0x34801640, 0x34801640},
-       {0x0000a5c0, 0x49805e72, 0x49805e72, 0x38801660, 0x38801660},
-       {0x0000a5c4, 0x4e805eb2, 0x4e805eb2, 0x3b801861, 0x3b801861},
-       {0x0000a5c8, 0x53805f12, 0x53805f12, 0x3e801a81, 0x3e801a81},
-       {0x0000a5cc, 0x59825eb2, 0x59825eb2, 0x42801a83, 0x42801a83},
-       {0x0000a5d0, 0x5e825f12, 0x5e825f12, 0x44801c84, 0x44801c84},
-       {0x0000a5d4, 0x61827f12, 0x61827f12, 0x48801ce3, 0x48801ce3},
-       {0x0000a5d8, 0x6782bf12, 0x6782bf12, 0x4c801ce5, 0x4c801ce5},
-       {0x0000a5dc, 0x6b82bf14, 0x6b82bf14, 0x50801ce9, 0x50801ce9},
-       {0x0000a5e0, 0x6f82bf16, 0x6f82bf16, 0x54801ceb, 0x54801ceb},
-       {0x0000a5e4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5e8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5ec, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5f0, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5f4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5f8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a5fc, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-       {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a610, 0x00804000, 0x00804000, 0x00000000, 0x00000000},
-       {0x0000a614, 0x00804201, 0x00804201, 0x01404000, 0x01404000},
-       {0x0000a618, 0x0280c802, 0x0280c802, 0x01404501, 0x01404501},
-       {0x0000a61c, 0x0280ca03, 0x0280ca03, 0x02008501, 0x02008501},
-       {0x0000a620, 0x04c15104, 0x04c15104, 0x0280ca03, 0x0280ca03},
-       {0x0000a624, 0x04c15305, 0x04c15305, 0x03010c04, 0x03010c04},
-       {0x0000a628, 0x04c15305, 0x04c15305, 0x04014c04, 0x04014c04},
-       {0x0000a62c, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-       {0x0000a630, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-       {0x0000a634, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-       {0x0000a638, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-       {0x0000a63c, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
-       {0x0000b2dc, 0x01feee00, 0x01feee00, 0x00637800, 0x00637800},
-       {0x0000b2e0, 0x0000f000, 0x0000f000, 0x03838000, 0x03838000},
-       {0x0000b2e4, 0x01ff0000, 0x01ff0000, 0x03fc0000, 0x03fc0000},
-       {0x0000b2e8, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000c2dc, 0x01feee00, 0x01feee00, 0x00637800, 0x00637800},
-       {0x0000c2e0, 0x0000f000, 0x0000f000, 0x03838000, 0x03838000},
-       {0x0000c2e4, 0x01ff0000, 0x01ff0000, 0x03fc0000, 0x03fc0000},
-       {0x0000c2e8, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00016044, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4},
-       {0x00016048, 0x8e480001, 0x8e480001, 0x8e480001, 0x8e480001},
-       {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
-       {0x00016444, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4},
-       {0x00016448, 0x8e480001, 0x8e480001, 0x8e480001, 0x8e480001},
-       {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
-       {0x00016844, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4},
-       {0x00016848, 0x8e480001, 0x8e480001, 0x8e480001, 0x8e480001},
-       {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
-};
-
-static const u32 ar9300Common_rx_gain_table_2p2[][2] = {
-       /* Addr      allmodes  */
-       {0x0000a000, 0x00010000},
-       {0x0000a004, 0x00030002},
-       {0x0000a008, 0x00050004},
-       {0x0000a00c, 0x00810080},
-       {0x0000a010, 0x00830082},
-       {0x0000a014, 0x01810180},
-       {0x0000a018, 0x01830182},
-       {0x0000a01c, 0x01850184},
-       {0x0000a020, 0x01890188},
-       {0x0000a024, 0x018b018a},
-       {0x0000a028, 0x018d018c},
-       {0x0000a02c, 0x01910190},
-       {0x0000a030, 0x01930192},
-       {0x0000a034, 0x01950194},
-       {0x0000a038, 0x038a0196},
-       {0x0000a03c, 0x038c038b},
-       {0x0000a040, 0x0390038d},
-       {0x0000a044, 0x03920391},
-       {0x0000a048, 0x03940393},
-       {0x0000a04c, 0x03960395},
-       {0x0000a050, 0x00000000},
-       {0x0000a054, 0x00000000},
-       {0x0000a058, 0x00000000},
-       {0x0000a05c, 0x00000000},
-       {0x0000a060, 0x00000000},
-       {0x0000a064, 0x00000000},
-       {0x0000a068, 0x00000000},
-       {0x0000a06c, 0x00000000},
-       {0x0000a070, 0x00000000},
-       {0x0000a074, 0x00000000},
-       {0x0000a078, 0x00000000},
-       {0x0000a07c, 0x00000000},
-       {0x0000a080, 0x22222229},
-       {0x0000a084, 0x1d1d1d1d},
-       {0x0000a088, 0x1d1d1d1d},
-       {0x0000a08c, 0x1d1d1d1d},
-       {0x0000a090, 0x171d1d1d},
-       {0x0000a094, 0x11111717},
-       {0x0000a098, 0x00030311},
-       {0x0000a09c, 0x00000000},
-       {0x0000a0a0, 0x00000000},
-       {0x0000a0a4, 0x00000000},
-       {0x0000a0a8, 0x00000000},
-       {0x0000a0ac, 0x00000000},
-       {0x0000a0b0, 0x00000000},
-       {0x0000a0b4, 0x00000000},
-       {0x0000a0b8, 0x00000000},
-       {0x0000a0bc, 0x00000000},
-       {0x0000a0c0, 0x001f0000},
-       {0x0000a0c4, 0x01000101},
-       {0x0000a0c8, 0x011e011f},
-       {0x0000a0cc, 0x011c011d},
-       {0x0000a0d0, 0x02030204},
-       {0x0000a0d4, 0x02010202},
-       {0x0000a0d8, 0x021f0200},
-       {0x0000a0dc, 0x0302021e},
-       {0x0000a0e0, 0x03000301},
-       {0x0000a0e4, 0x031e031f},
-       {0x0000a0e8, 0x0402031d},
-       {0x0000a0ec, 0x04000401},
-       {0x0000a0f0, 0x041e041f},
-       {0x0000a0f4, 0x0502041d},
-       {0x0000a0f8, 0x05000501},
-       {0x0000a0fc, 0x051e051f},
-       {0x0000a100, 0x06010602},
-       {0x0000a104, 0x061f0600},
-       {0x0000a108, 0x061d061e},
-       {0x0000a10c, 0x07020703},
-       {0x0000a110, 0x07000701},
-       {0x0000a114, 0x00000000},
-       {0x0000a118, 0x00000000},
-       {0x0000a11c, 0x00000000},
-       {0x0000a120, 0x00000000},
-       {0x0000a124, 0x00000000},
-       {0x0000a128, 0x00000000},
-       {0x0000a12c, 0x00000000},
-       {0x0000a130, 0x00000000},
-       {0x0000a134, 0x00000000},
-       {0x0000a138, 0x00000000},
-       {0x0000a13c, 0x00000000},
-       {0x0000a140, 0x001f0000},
-       {0x0000a144, 0x01000101},
-       {0x0000a148, 0x011e011f},
-       {0x0000a14c, 0x011c011d},
-       {0x0000a150, 0x02030204},
-       {0x0000a154, 0x02010202},
-       {0x0000a158, 0x021f0200},
-       {0x0000a15c, 0x0302021e},
-       {0x0000a160, 0x03000301},
-       {0x0000a164, 0x031e031f},
-       {0x0000a168, 0x0402031d},
-       {0x0000a16c, 0x04000401},
-       {0x0000a170, 0x041e041f},
-       {0x0000a174, 0x0502041d},
-       {0x0000a178, 0x05000501},
-       {0x0000a17c, 0x051e051f},
-       {0x0000a180, 0x06010602},
-       {0x0000a184, 0x061f0600},
-       {0x0000a188, 0x061d061e},
-       {0x0000a18c, 0x07020703},
-       {0x0000a190, 0x07000701},
-       {0x0000a194, 0x00000000},
-       {0x0000a198, 0x00000000},
-       {0x0000a19c, 0x00000000},
-       {0x0000a1a0, 0x00000000},
-       {0x0000a1a4, 0x00000000},
-       {0x0000a1a8, 0x00000000},
-       {0x0000a1ac, 0x00000000},
-       {0x0000a1b0, 0x00000000},
-       {0x0000a1b4, 0x00000000},
-       {0x0000a1b8, 0x00000000},
-       {0x0000a1bc, 0x00000000},
-       {0x0000a1c0, 0x00000000},
-       {0x0000a1c4, 0x00000000},
-       {0x0000a1c8, 0x00000000},
-       {0x0000a1cc, 0x00000000},
-       {0x0000a1d0, 0x00000000},
-       {0x0000a1d4, 0x00000000},
-       {0x0000a1d8, 0x00000000},
-       {0x0000a1dc, 0x00000000},
-       {0x0000a1e0, 0x00000000},
-       {0x0000a1e4, 0x00000000},
-       {0x0000a1e8, 0x00000000},
-       {0x0000a1ec, 0x00000000},
-       {0x0000a1f0, 0x00000396},
-       {0x0000a1f4, 0x00000396},
-       {0x0000a1f8, 0x00000396},
-       {0x0000a1fc, 0x00000196},
-       {0x0000b000, 0x00010000},
-       {0x0000b004, 0x00030002},
-       {0x0000b008, 0x00050004},
-       {0x0000b00c, 0x00810080},
-       {0x0000b010, 0x00830082},
-       {0x0000b014, 0x01810180},
-       {0x0000b018, 0x01830182},
-       {0x0000b01c, 0x01850184},
-       {0x0000b020, 0x02810280},
-       {0x0000b024, 0x02830282},
-       {0x0000b028, 0x02850284},
-       {0x0000b02c, 0x02890288},
-       {0x0000b030, 0x028b028a},
-       {0x0000b034, 0x0388028c},
-       {0x0000b038, 0x038a0389},
-       {0x0000b03c, 0x038c038b},
-       {0x0000b040, 0x0390038d},
-       {0x0000b044, 0x03920391},
-       {0x0000b048, 0x03940393},
-       {0x0000b04c, 0x03960395},
-       {0x0000b050, 0x00000000},
-       {0x0000b054, 0x00000000},
-       {0x0000b058, 0x00000000},
-       {0x0000b05c, 0x00000000},
-       {0x0000b060, 0x00000000},
-       {0x0000b064, 0x00000000},
-       {0x0000b068, 0x00000000},
-       {0x0000b06c, 0x00000000},
-       {0x0000b070, 0x00000000},
-       {0x0000b074, 0x00000000},
-       {0x0000b078, 0x00000000},
-       {0x0000b07c, 0x00000000},
-       {0x0000b080, 0x2a2d2f32},
-       {0x0000b084, 0x21232328},
-       {0x0000b088, 0x19191c1e},
-       {0x0000b08c, 0x12141417},
-       {0x0000b090, 0x07070e0e},
-       {0x0000b094, 0x03030305},
-       {0x0000b098, 0x00000003},
-       {0x0000b09c, 0x00000000},
-       {0x0000b0a0, 0x00000000},
-       {0x0000b0a4, 0x00000000},
-       {0x0000b0a8, 0x00000000},
-       {0x0000b0ac, 0x00000000},
-       {0x0000b0b0, 0x00000000},
-       {0x0000b0b4, 0x00000000},
-       {0x0000b0b8, 0x00000000},
-       {0x0000b0bc, 0x00000000},
-       {0x0000b0c0, 0x003f0020},
-       {0x0000b0c4, 0x00400041},
-       {0x0000b0c8, 0x0140005f},
-       {0x0000b0cc, 0x0160015f},
-       {0x0000b0d0, 0x017e017f},
-       {0x0000b0d4, 0x02410242},
-       {0x0000b0d8, 0x025f0240},
-       {0x0000b0dc, 0x027f0260},
-       {0x0000b0e0, 0x0341027e},
-       {0x0000b0e4, 0x035f0340},
-       {0x0000b0e8, 0x037f0360},
-       {0x0000b0ec, 0x04400441},
-       {0x0000b0f0, 0x0460045f},
-       {0x0000b0f4, 0x0541047f},
-       {0x0000b0f8, 0x055f0540},
-       {0x0000b0fc, 0x057f0560},
-       {0x0000b100, 0x06400641},
-       {0x0000b104, 0x0660065f},
-       {0x0000b108, 0x067e067f},
-       {0x0000b10c, 0x07410742},
-       {0x0000b110, 0x075f0740},
-       {0x0000b114, 0x077f0760},
-       {0x0000b118, 0x07800781},
-       {0x0000b11c, 0x07a0079f},
-       {0x0000b120, 0x07c107bf},
-       {0x0000b124, 0x000007c0},
-       {0x0000b128, 0x00000000},
-       {0x0000b12c, 0x00000000},
-       {0x0000b130, 0x00000000},
-       {0x0000b134, 0x00000000},
-       {0x0000b138, 0x00000000},
-       {0x0000b13c, 0x00000000},
-       {0x0000b140, 0x003f0020},
-       {0x0000b144, 0x00400041},
-       {0x0000b148, 0x0140005f},
-       {0x0000b14c, 0x0160015f},
-       {0x0000b150, 0x017e017f},
-       {0x0000b154, 0x02410242},
-       {0x0000b158, 0x025f0240},
-       {0x0000b15c, 0x027f0260},
-       {0x0000b160, 0x0341027e},
-       {0x0000b164, 0x035f0340},
-       {0x0000b168, 0x037f0360},
-       {0x0000b16c, 0x04400441},
-       {0x0000b170, 0x0460045f},
-       {0x0000b174, 0x0541047f},
-       {0x0000b178, 0x055f0540},
-       {0x0000b17c, 0x057f0560},
-       {0x0000b180, 0x06400641},
-       {0x0000b184, 0x0660065f},
-       {0x0000b188, 0x067e067f},
-       {0x0000b18c, 0x07410742},
-       {0x0000b190, 0x075f0740},
-       {0x0000b194, 0x077f0760},
-       {0x0000b198, 0x07800781},
-       {0x0000b19c, 0x07a0079f},
-       {0x0000b1a0, 0x07c107bf},
-       {0x0000b1a4, 0x000007c0},
-       {0x0000b1a8, 0x00000000},
-       {0x0000b1ac, 0x00000000},
-       {0x0000b1b0, 0x00000000},
-       {0x0000b1b4, 0x00000000},
-       {0x0000b1b8, 0x00000000},
-       {0x0000b1bc, 0x00000000},
-       {0x0000b1c0, 0x00000000},
-       {0x0000b1c4, 0x00000000},
-       {0x0000b1c8, 0x00000000},
-       {0x0000b1cc, 0x00000000},
-       {0x0000b1d0, 0x00000000},
-       {0x0000b1d4, 0x00000000},
-       {0x0000b1d8, 0x00000000},
-       {0x0000b1dc, 0x00000000},
-       {0x0000b1e0, 0x00000000},
-       {0x0000b1e4, 0x00000000},
-       {0x0000b1e8, 0x00000000},
-       {0x0000b1ec, 0x00000000},
-       {0x0000b1f0, 0x00000396},
-       {0x0000b1f4, 0x00000396},
-       {0x0000b1f8, 0x00000396},
-       {0x0000b1fc, 0x00000196},
-};
-
-static const u32 ar9300Modes_low_ob_db_tx_gain_table_2p2[][5] = {
-       /* Addr      5G_HT20     5G_HT40     2G_HT40     2G_HT20   */
-       {0x0000a2dc, 0x0380c7fc, 0x0380c7fc, 0x00637800, 0x00637800},
-       {0x0000a2e0, 0x0000f800, 0x0000f800, 0x03838000, 0x03838000},
-       {0x0000a2e4, 0x03ff0000, 0x03ff0000, 0x03fc0000, 0x03fc0000},
-       {0x0000a2e8, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9},
-       {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002},
-       {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004},
-       {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200},
-       {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202},
-       {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400},
-       {0x0000a518, 0x21002220, 0x21002220, 0x16000402, 0x16000402},
-       {0x0000a51c, 0x27002223, 0x27002223, 0x19000404, 0x19000404},
-       {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603},
-       {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02},
-       {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04},
-       {0x0000a52c, 0x3a02222a, 0x3a02222a, 0x28000a20, 0x28000a20},
-       {0x0000a530, 0x3e02222c, 0x3e02222c, 0x2c000e20, 0x2c000e20},
-       {0x0000a534, 0x4202242a, 0x4202242a, 0x30000e22, 0x30000e22},
-       {0x0000a538, 0x4702244a, 0x4702244a, 0x34000e24, 0x34000e24},
-       {0x0000a53c, 0x4b02244c, 0x4b02244c, 0x38001640, 0x38001640},
-       {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660},
-       {0x0000a544, 0x5302266c, 0x5302266c, 0x3f001861, 0x3f001861},
-       {0x0000a548, 0x5702286c, 0x5702286c, 0x43001a81, 0x43001a81},
-       {0x0000a54c, 0x5c02486b, 0x5c02486b, 0x47001a83, 0x47001a83},
-       {0x0000a550, 0x61024a6c, 0x61024a6c, 0x4a001c84, 0x4a001c84},
-       {0x0000a554, 0x66026a6c, 0x66026a6c, 0x4e001ce3, 0x4e001ce3},
-       {0x0000a558, 0x6b026e6c, 0x6b026e6c, 0x52001ce5, 0x52001ce5},
-       {0x0000a55c, 0x7002708c, 0x7002708c, 0x56001ce9, 0x56001ce9},
-       {0x0000a560, 0x7302b08a, 0x7302b08a, 0x5a001ceb, 0x5a001ceb},
-       {0x0000a564, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-       {0x0000a568, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-       {0x0000a56c, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-       {0x0000a570, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-       {0x0000a574, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-       {0x0000a578, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-       {0x0000a57c, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec},
-       {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
-       {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002},
-       {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004},
-       {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200},
-       {0x0000a590, 0x16800220, 0x16800220, 0x0f800202, 0x0f800202},
-       {0x0000a594, 0x1c800223, 0x1c800223, 0x12800400, 0x12800400},
-       {0x0000a598, 0x21802220, 0x21802220, 0x16800402, 0x16800402},
-       {0x0000a59c, 0x27802223, 0x27802223, 0x19800404, 0x19800404},
-       {0x0000a5a0, 0x2b822220, 0x2b822220, 0x1c800603, 0x1c800603},
-       {0x0000a5a4, 0x2f822222, 0x2f822222, 0x21800a02, 0x21800a02},
-       {0x0000a5a8, 0x34822225, 0x34822225, 0x25800a04, 0x25800a04},
-       {0x0000a5ac, 0x3a82222a, 0x3a82222a, 0x28800a20, 0x28800a20},
-       {0x0000a5b0, 0x3e82222c, 0x3e82222c, 0x2c800e20, 0x2c800e20},
-       {0x0000a5b4, 0x4282242a, 0x4282242a, 0x30800e22, 0x30800e22},
-       {0x0000a5b8, 0x4782244a, 0x4782244a, 0x34800e24, 0x34800e24},
-       {0x0000a5bc, 0x4b82244c, 0x4b82244c, 0x38801640, 0x38801640},
-       {0x0000a5c0, 0x4e82246c, 0x4e82246c, 0x3c801660, 0x3c801660},
-       {0x0000a5c4, 0x5382266c, 0x5382266c, 0x3f801861, 0x3f801861},
-       {0x0000a5c8, 0x5782286c, 0x5782286c, 0x43801a81, 0x43801a81},
-       {0x0000a5cc, 0x5c82486b, 0x5c82486b, 0x47801a83, 0x47801a83},
-       {0x0000a5d0, 0x61824a6c, 0x61824a6c, 0x4a801c84, 0x4a801c84},
-       {0x0000a5d4, 0x66826a6c, 0x66826a6c, 0x4e801ce3, 0x4e801ce3},
-       {0x0000a5d8, 0x6b826e6c, 0x6b826e6c, 0x52801ce5, 0x52801ce5},
-       {0x0000a5dc, 0x7082708c, 0x7082708c, 0x56801ce9, 0x56801ce9},
-       {0x0000a5e0, 0x7382b08a, 0x7382b08a, 0x5a801ceb, 0x5a801ceb},
-       {0x0000a5e4, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5e8, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5ec, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5f0, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5f4, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5f8, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
-       {0x0000a5fc, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec},
-       {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a610, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000a614, 0x01404000, 0x01404000, 0x01404000, 0x01404000},
-       {0x0000a618, 0x01404501, 0x01404501, 0x01404501, 0x01404501},
-       {0x0000a61c, 0x02008802, 0x02008802, 0x02008501, 0x02008501},
-       {0x0000a620, 0x0300cc03, 0x0300cc03, 0x0280ca03, 0x0280ca03},
-       {0x0000a624, 0x0300cc03, 0x0300cc03, 0x03010c04, 0x03010c04},
-       {0x0000a628, 0x0300cc03, 0x0300cc03, 0x04014c04, 0x04014c04},
-       {0x0000a62c, 0x03810c03, 0x03810c03, 0x04015005, 0x04015005},
-       {0x0000a630, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-       {0x0000a634, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-       {0x0000a638, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-       {0x0000a63c, 0x03810e04, 0x03810e04, 0x04015005, 0x04015005},
-       {0x0000b2dc, 0x0380c7fc, 0x0380c7fc, 0x00637800, 0x00637800},
-       {0x0000b2e0, 0x0000f800, 0x0000f800, 0x03838000, 0x03838000},
-       {0x0000b2e4, 0x03ff0000, 0x03ff0000, 0x03fc0000, 0x03fc0000},
-       {0x0000b2e8, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x0000c2dc, 0x0380c7fc, 0x0380c7fc, 0x00637800, 0x00637800},
-       {0x0000c2e0, 0x0000f800, 0x0000f800, 0x03838000, 0x03838000},
-       {0x0000c2e4, 0x03ff0000, 0x03ff0000, 0x03fc0000, 0x03fc0000},
-       {0x0000c2e8, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-       {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
-       {0x00016048, 0x66480001, 0x66480001, 0x66480001, 0x66480001},
-       {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
-       {0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
-       {0x00016448, 0x66480001, 0x66480001, 0x66480001, 0x66480001},
-       {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
-       {0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
-       {0x00016848, 0x66480001, 0x66480001, 0x66480001, 0x66480001},
-       {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
-};
-
-static const u32 ar9300_2p2_mac_core[][2] = {
-       /* Addr      allmodes  */
-       {0x00000008, 0x00000000},
-       {0x00000030, 0x00020085},
-       {0x00000034, 0x00000005},
-       {0x00000040, 0x00000000},
-       {0x00000044, 0x00000000},
-       {0x00000048, 0x00000008},
-       {0x0000004c, 0x00000010},
-       {0x00000050, 0x00000000},
-       {0x00001040, 0x002ffc0f},
-       {0x00001044, 0x002ffc0f},
-       {0x00001048, 0x002ffc0f},
-       {0x0000104c, 0x002ffc0f},
-       {0x00001050, 0x002ffc0f},
-       {0x00001054, 0x002ffc0f},
-       {0x00001058, 0x002ffc0f},
-       {0x0000105c, 0x002ffc0f},
-       {0x00001060, 0x002ffc0f},
-       {0x00001064, 0x002ffc0f},
-       {0x000010f0, 0x00000100},
-       {0x00001270, 0x00000000},
-       {0x000012b0, 0x00000000},
-       {0x000012f0, 0x00000000},
-       {0x0000143c, 0x00000000},
-       {0x0000147c, 0x00000000},
-       {0x00008000, 0x00000000},
-       {0x00008004, 0x00000000},
-       {0x00008008, 0x00000000},
-       {0x0000800c, 0x00000000},
-       {0x00008018, 0x00000000},
-       {0x00008020, 0x00000000},
-       {0x00008038, 0x00000000},
-       {0x0000803c, 0x00000000},
-       {0x00008040, 0x00000000},
-       {0x00008044, 0x00000000},
-       {0x00008048, 0x00000000},
-       {0x0000804c, 0xffffffff},
-       {0x00008054, 0x00000000},
-       {0x00008058, 0x00000000},
-       {0x0000805c, 0x000fc78f},
-       {0x00008060, 0x0000000f},
-       {0x00008064, 0x00000000},
-       {0x00008070, 0x00000310},
-       {0x00008074, 0x00000020},
-       {0x00008078, 0x00000000},
-       {0x0000809c, 0x0000000f},
-       {0x000080a0, 0x00000000},
-       {0x000080a4, 0x02ff0000},
-       {0x000080a8, 0x0e070605},
-       {0x000080ac, 0x0000000d},
-       {0x000080b0, 0x00000000},
-       {0x000080b4, 0x00000000},
-       {0x000080b8, 0x00000000},
-       {0x000080bc, 0x00000000},
-       {0x000080c0, 0x2a800000},
-       {0x000080c4, 0x06900168},
-       {0x000080c8, 0x13881c20},
-       {0x000080cc, 0x01f40000},
-       {0x000080d0, 0x00252500},
-       {0x000080d4, 0x00a00000},
-       {0x000080d8, 0x00400000},
-       {0x000080dc, 0x00000000},
-       {0x000080e0, 0xffffffff},
-       {0x000080e4, 0x0000ffff},
-       {0x000080e8, 0x3f3f3f3f},
-       {0x000080ec, 0x00000000},
-       {0x000080f0, 0x00000000},
-       {0x000080f4, 0x00000000},
-       {0x000080fc, 0x00020000},
-       {0x00008100, 0x00000000},
-       {0x00008108, 0x00000052},
-       {0x0000810c, 0x00000000},
-       {0x00008110, 0x00000000},
-       {0x00008114, 0x000007ff},
-       {0x00008118, 0x000000aa},
-       {0x0000811c, 0x00003210},
-       {0x00008124, 0x00000000},
-       {0x00008128, 0x00000000},
-       {0x0000812c, 0x00000000},
-       {0x00008130, 0x00000000},
-       {0x00008134, 0x00000000},
-       {0x00008138, 0x00000000},
-       {0x0000813c, 0x0000ffff},
-       {0x00008144, 0xffffffff},
-       {0x00008168, 0x00000000},
-       {0x0000816c, 0x00000000},
-       {0x000081c0, 0x00000000},
-       {0x000081c4, 0x33332210},
-       {0x000081c8, 0x00000000},
-       {0x000081cc, 0x00000000},
-       {0x000081ec, 0x00000000},
-       {0x000081f0, 0x00000000},
-       {0x000081f4, 0x00000000},
-       {0x000081f8, 0x00000000},
-       {0x000081fc, 0x00000000},
-       {0x00008240, 0x00100000},
-       {0x00008244, 0x0010f424},
-       {0x00008248, 0x00000800},
-       {0x0000824c, 0x0001e848},
-       {0x00008250, 0x00000000},
-       {0x00008254, 0x00000000},
-       {0x00008258, 0x00000000},
-       {0x0000825c, 0x40000000},
-       {0x00008260, 0x00080922},
-       {0x00008264, 0x9bc00010},
-       {0x00008268, 0xffffffff},
-       {0x0000826c, 0x0000ffff},
-       {0x00008270, 0x00000000},
-       {0x00008274, 0x40000000},
-       {0x00008278, 0x003e4180},
-       {0x0000827c, 0x00000004},
-       {0x00008284, 0x0000002c},
-       {0x00008288, 0x0000002c},
-       {0x0000828c, 0x000000ff},
-       {0x00008294, 0x00000000},
-       {0x00008298, 0x00000000},
-       {0x0000829c, 0x00000000},
-       {0x00008300, 0x00000140},
-       {0x00008314, 0x00000000},
-       {0x0000831c, 0x0000010d},
-       {0x00008328, 0x00000000},
-       {0x0000832c, 0x00000007},
-       {0x00008330, 0x00000302},
-       {0x00008334, 0x00000700},
-       {0x00008338, 0x00ff0000},
-       {0x0000833c, 0x02400000},
-       {0x00008340, 0x000107ff},
-       {0x00008344, 0xaa48105b},
-       {0x00008348, 0x008f0000},
-       {0x0000835c, 0x00000000},
-       {0x00008360, 0xffffffff},
-       {0x00008364, 0xffffffff},
-       {0x00008368, 0x00000000},
-       {0x00008370, 0x00000000},
-       {0x00008374, 0x000000ff},
-       {0x00008378, 0x00000000},
-       {0x0000837c, 0x00000000},
-       {0x00008380, 0xffffffff},
-       {0x00008384, 0xffffffff},
-       {0x00008390, 0xffffffff},
-       {0x00008394, 0xffffffff},
-       {0x00008398, 0x00000000},
-       {0x0000839c, 0x00000000},
-       {0x000083a0, 0x00000000},
-       {0x000083a4, 0x0000fa14},
-       {0x000083a8, 0x000f0c00},
-       {0x000083ac, 0x33332210},
-       {0x000083b0, 0x33332210},
-       {0x000083b4, 0x33332210},
-       {0x000083b8, 0x33332210},
-       {0x000083bc, 0x00000000},
-       {0x000083c0, 0x00000000},
-       {0x000083c4, 0x00000000},
-       {0x000083c8, 0x00000000},
-       {0x000083cc, 0x00000200},
-       {0x000083d0, 0x000301ff},
-};
-
-static const u32 ar9300Common_wo_xlna_rx_gain_table_2p2[][2] = {
-       /* Addr      allmodes  */
-       {0x0000a000, 0x00010000},
-       {0x0000a004, 0x00030002},
-       {0x0000a008, 0x00050004},
-       {0x0000a00c, 0x00810080},
-       {0x0000a010, 0x00830082},
-       {0x0000a014, 0x01810180},
-       {0x0000a018, 0x01830182},
-       {0x0000a01c, 0x01850184},
-       {0x0000a020, 0x01890188},
-       {0x0000a024, 0x018b018a},
-       {0x0000a028, 0x018d018c},
-       {0x0000a02c, 0x03820190},
-       {0x0000a030, 0x03840383},
-       {0x0000a034, 0x03880385},
-       {0x0000a038, 0x038a0389},
-       {0x0000a03c, 0x038c038b},
-       {0x0000a040, 0x0390038d},
-       {0x0000a044, 0x03920391},
-       {0x0000a048, 0x03940393},
-       {0x0000a04c, 0x03960395},
-       {0x0000a050, 0x00000000},
-       {0x0000a054, 0x00000000},
-       {0x0000a058, 0x00000000},
-       {0x0000a05c, 0x00000000},
-       {0x0000a060, 0x00000000},
-       {0x0000a064, 0x00000000},
-       {0x0000a068, 0x00000000},
-       {0x0000a06c, 0x00000000},
-       {0x0000a070, 0x00000000},
-       {0x0000a074, 0x00000000},
-       {0x0000a078, 0x00000000},
-       {0x0000a07c, 0x00000000},
-       {0x0000a080, 0x29292929},
-       {0x0000a084, 0x29292929},
-       {0x0000a088, 0x29292929},
-       {0x0000a08c, 0x29292929},
-       {0x0000a090, 0x22292929},
-       {0x0000a094, 0x1d1d2222},
-       {0x0000a098, 0x0c111117},
-       {0x0000a09c, 0x00030303},
-       {0x0000a0a0, 0x00000000},
-       {0x0000a0a4, 0x00000000},
-       {0x0000a0a8, 0x00000000},
-       {0x0000a0ac, 0x00000000},
-       {0x0000a0b0, 0x00000000},
-       {0x0000a0b4, 0x00000000},
-       {0x0000a0b8, 0x00000000},
-       {0x0000a0bc, 0x00000000},
-       {0x0000a0c0, 0x001f0000},
-       {0x0000a0c4, 0x01000101},
-       {0x0000a0c8, 0x011e011f},
-       {0x0000a0cc, 0x011c011d},
-       {0x0000a0d0, 0x02030204},
-       {0x0000a0d4, 0x02010202},
-       {0x0000a0d8, 0x021f0200},
-       {0x0000a0dc, 0x0302021e},
-       {0x0000a0e0, 0x03000301},
-       {0x0000a0e4, 0x031e031f},
-       {0x0000a0e8, 0x0402031d},
-       {0x0000a0ec, 0x04000401},
-       {0x0000a0f0, 0x041e041f},
-       {0x0000a0f4, 0x0502041d},
-       {0x0000a0f8, 0x05000501},
-       {0x0000a0fc, 0x051e051f},
-       {0x0000a100, 0x06010602},
-       {0x0000a104, 0x061f0600},
-       {0x0000a108, 0x061d061e},
-       {0x0000a10c, 0x07020703},
-       {0x0000a110, 0x07000701},
-       {0x0000a114, 0x00000000},
-       {0x0000a118, 0x00000000},
-       {0x0000a11c, 0x00000000},
-       {0x0000a120, 0x00000000},
-       {0x0000a124, 0x00000000},
-       {0x0000a128, 0x00000000},
-       {0x0000a12c, 0x00000000},
-       {0x0000a130, 0x00000000},
-       {0x0000a134, 0x00000000},
-       {0x0000a138, 0x00000000},
-       {0x0000a13c, 0x00000000},
-       {0x0000a140, 0x001f0000},
-       {0x0000a144, 0x01000101},
-       {0x0000a148, 0x011e011f},
-       {0x0000a14c, 0x011c011d},
-       {0x0000a150, 0x02030204},
-       {0x0000a154, 0x02010202},
-       {0x0000a158, 0x021f0200},
-       {0x0000a15c, 0x0302021e},
-       {0x0000a160, 0x03000301},
-       {0x0000a164, 0x031e031f},
-       {0x0000a168, 0x0402031d},
-       {0x0000a16c, 0x04000401},
-       {0x0000a170, 0x041e041f},
-       {0x0000a174, 0x0502041d},
-       {0x0000a178, 0x05000501},
-       {0x0000a17c, 0x051e051f},
-       {0x0000a180, 0x06010602},
-       {0x0000a184, 0x061f0600},
-       {0x0000a188, 0x061d061e},
-       {0x0000a18c, 0x07020703},
-       {0x0000a190, 0x07000701},
-       {0x0000a194, 0x00000000},
-       {0x0000a198, 0x00000000},
-       {0x0000a19c, 0x00000000},
-       {0x0000a1a0, 0x00000000},
-       {0x0000a1a4, 0x00000000},
-       {0x0000a1a8, 0x00000000},
-       {0x0000a1ac, 0x00000000},
-       {0x0000a1b0, 0x00000000},
-       {0x0000a1b4, 0x00000000},
-       {0x0000a1b8, 0x00000000},
-       {0x0000a1bc, 0x00000000},
-       {0x0000a1c0, 0x00000000},
-       {0x0000a1c4, 0x00000000},
-       {0x0000a1c8, 0x00000000},
-       {0x0000a1cc, 0x00000000},
-       {0x0000a1d0, 0x00000000},
-       {0x0000a1d4, 0x00000000},
-       {0x0000a1d8, 0x00000000},
-       {0x0000a1dc, 0x00000000},
-       {0x0000a1e0, 0x00000000},
-       {0x0000a1e4, 0x00000000},
-       {0x0000a1e8, 0x00000000},
-       {0x0000a1ec, 0x00000000},
-       {0x0000a1f0, 0x00000396},
-       {0x0000a1f4, 0x00000396},
-       {0x0000a1f8, 0x00000396},
-       {0x0000a1fc, 0x00000196},
-       {0x0000b000, 0x00010000},
-       {0x0000b004, 0x00030002},
-       {0x0000b008, 0x00050004},
-       {0x0000b00c, 0x00810080},
-       {0x0000b010, 0x00830082},
-       {0x0000b014, 0x01810180},
-       {0x0000b018, 0x01830182},
-       {0x0000b01c, 0x01850184},
-       {0x0000b020, 0x02810280},
-       {0x0000b024, 0x02830282},
-       {0x0000b028, 0x02850284},
-       {0x0000b02c, 0x02890288},
-       {0x0000b030, 0x028b028a},
-       {0x0000b034, 0x0388028c},
-       {0x0000b038, 0x038a0389},
-       {0x0000b03c, 0x038c038b},
-       {0x0000b040, 0x0390038d},
-       {0x0000b044, 0x03920391},
-       {0x0000b048, 0x03940393},
-       {0x0000b04c, 0x03960395},
-       {0x0000b050, 0x00000000},
-       {0x0000b054, 0x00000000},
-       {0x0000b058, 0x00000000},
-       {0x0000b05c, 0x00000000},
-       {0x0000b060, 0x00000000},
-       {0x0000b064, 0x00000000},
-       {0x0000b068, 0x00000000},
-       {0x0000b06c, 0x00000000},
-       {0x0000b070, 0x00000000},
-       {0x0000b074, 0x00000000},
-       {0x0000b078, 0x00000000},
-       {0x0000b07c, 0x00000000},
-       {0x0000b080, 0x32323232},
-       {0x0000b084, 0x2f2f3232},
-       {0x0000b088, 0x23282a2d},
-       {0x0000b08c, 0x1c1e2123},
-       {0x0000b090, 0x14171919},
-       {0x0000b094, 0x0e0e1214},
-       {0x0000b098, 0x03050707},
-       {0x0000b09c, 0x00030303},
-       {0x0000b0a0, 0x00000000},
-       {0x0000b0a4, 0x00000000},
-       {0x0000b0a8, 0x00000000},
-       {0x0000b0ac, 0x00000000},
-       {0x0000b0b0, 0x00000000},
-       {0x0000b0b4, 0x00000000},
-       {0x0000b0b8, 0x00000000},
-       {0x0000b0bc, 0x00000000},
-       {0x0000b0c0, 0x003f0020},
-       {0x0000b0c4, 0x00400041},
-       {0x0000b0c8, 0x0140005f},
-       {0x0000b0cc, 0x0160015f},
-       {0x0000b0d0, 0x017e017f},
-       {0x0000b0d4, 0x02410242},
-       {0x0000b0d8, 0x025f0240},
-       {0x0000b0dc, 0x027f0260},
-       {0x0000b0e0, 0x0341027e},
-       {0x0000b0e4, 0x035f0340},
-       {0x0000b0e8, 0x037f0360},
-       {0x0000b0ec, 0x04400441},
-       {0x0000b0f0, 0x0460045f},
-       {0x0000b0f4, 0x0541047f},
-       {0x0000b0f8, 0x055f0540},
-       {0x0000b0fc, 0x057f0560},
-       {0x0000b100, 0x06400641},
-       {0x0000b104, 0x0660065f},
-       {0x0000b108, 0x067e067f},
-       {0x0000b10c, 0x07410742},
-       {0x0000b110, 0x075f0740},
-       {0x0000b114, 0x077f0760},
-       {0x0000b118, 0x07800781},
-       {0x0000b11c, 0x07a0079f},
-       {0x0000b120, 0x07c107bf},
-       {0x0000b124, 0x000007c0},
-       {0x0000b128, 0x00000000},
-       {0x0000b12c, 0x00000000},
-       {0x0000b130, 0x00000000},
-       {0x0000b134, 0x00000000},
-       {0x0000b138, 0x00000000},
-       {0x0000b13c, 0x00000000},
-       {0x0000b140, 0x003f0020},
-       {0x0000b144, 0x00400041},
-       {0x0000b148, 0x0140005f},
-       {0x0000b14c, 0x0160015f},
-       {0x0000b150, 0x017e017f},
-       {0x0000b154, 0x02410242},
-       {0x0000b158, 0x025f0240},
-       {0x0000b15c, 0x027f0260},
-       {0x0000b160, 0x0341027e},
-       {0x0000b164, 0x035f0340},
-       {0x0000b168, 0x037f0360},
-       {0x0000b16c, 0x04400441},
-       {0x0000b170, 0x0460045f},
-       {0x0000b174, 0x0541047f},
-       {0x0000b178, 0x055f0540},
-       {0x0000b17c, 0x057f0560},
-       {0x0000b180, 0x06400641},
-       {0x0000b184, 0x0660065f},
-       {0x0000b188, 0x067e067f},
-       {0x0000b18c, 0x07410742},
-       {0x0000b190, 0x075f0740},
-       {0x0000b194, 0x077f0760},
-       {0x0000b198, 0x07800781},
-       {0x0000b19c, 0x07a0079f},
-       {0x0000b1a0, 0x07c107bf},
-       {0x0000b1a4, 0x000007c0},
-       {0x0000b1a8, 0x00000000},
-       {0x0000b1ac, 0x00000000},
-       {0x0000b1b0, 0x00000000},
-       {0x0000b1b4, 0x00000000},
-       {0x0000b1b8, 0x00000000},
-       {0x0000b1bc, 0x00000000},
-       {0x0000b1c0, 0x00000000},
-       {0x0000b1c4, 0x00000000},
-       {0x0000b1c8, 0x00000000},
-       {0x0000b1cc, 0x00000000},
-       {0x0000b1d0, 0x00000000},
-       {0x0000b1d4, 0x00000000},
-       {0x0000b1d8, 0x00000000},
-       {0x0000b1dc, 0x00000000},
-       {0x0000b1e0, 0x00000000},
-       {0x0000b1e4, 0x00000000},
-       {0x0000b1e8, 0x00000000},
-       {0x0000b1ec, 0x00000000},
-       {0x0000b1f0, 0x00000396},
-       {0x0000b1f4, 0x00000396},
-       {0x0000b1f8, 0x00000396},
-       {0x0000b1fc, 0x00000196},
-};
-
-static const u32 ar9300_2p2_soc_preamble[][2] = {
-       /* Addr      allmodes  */
-       {0x000040a4, 0x00a0c1c9},
-       {0x00007008, 0x00000000},
-       {0x00007020, 0x00000000},
-       {0x00007034, 0x00000002},
-       {0x00007038, 0x000004c2},
-       {0x00007048, 0x00000008},
-};
-
-static const u32 ar9300PciePhy_pll_on_clkreq_disable_L1_2p2[][2] = {
-       /* Addr      allmodes  */
-       {0x00004040, 0x08212e5e},
-       {0x00004040, 0x0008003b},
-       {0x00004044, 0x00000000},
-};
-
-static const u32 ar9300PciePhy_clkreq_enable_L1_2p2[][2] = {
-       /* Addr      allmodes  */
-       {0x00004040, 0x08253e5e},
-       {0x00004040, 0x0008003b},
-       {0x00004044, 0x00000000},
-};
-
-static const u32 ar9300PciePhy_clkreq_disable_L1_2p2[][2] = {
-       /* Addr      allmodes  */
-       {0x00004040, 0x08213e5e},
-       {0x00004040, 0x0008003b},
-       {0x00004044, 0x00000000},
-};
-
-#endif /* INITVALS_9003_2P2_H */
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_calib.c b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
deleted file mode 100644 (file)
index 4674ea8..0000000
+++ /dev/null
@@ -1,814 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "hw.h"
-#include "hw-ops.h"
-#include "ar9003_phy.h"
-
-static void ar9003_hw_setup_calibration(struct ath_hw *ah,
-                                       struct ath9k_cal_list *currCal)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-
-       /* Select calibration to run */
-       switch (currCal->calData->calType) {
-       case IQ_MISMATCH_CAL:
-               /*
-                * Start calibration with
-                * 2^(INIT_IQCAL_LOG_COUNT_MAX+1) samples
-                */
-               REG_RMW_FIELD(ah, AR_PHY_TIMING4,
-                             AR_PHY_TIMING4_IQCAL_LOG_COUNT_MAX,
-               currCal->calData->calCountMax);
-               REG_WRITE(ah, AR_PHY_CALMODE, AR_PHY_CALMODE_IQ);
-
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "starting IQ Mismatch Calibration\n");
-
-               /* Kick-off cal */
-               REG_SET_BIT(ah, AR_PHY_TIMING4, AR_PHY_TIMING4_DO_CAL);
-               break;
-       case TEMP_COMP_CAL:
-               REG_RMW_FIELD(ah, AR_PHY_65NM_CH0_THERM,
-                             AR_PHY_65NM_CH0_THERM_LOCAL, 1);
-               REG_RMW_FIELD(ah, AR_PHY_65NM_CH0_THERM,
-                             AR_PHY_65NM_CH0_THERM_START, 1);
-
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "starting Temperature Compensation Calibration\n");
-               break;
-       case ADC_DC_INIT_CAL:
-       case ADC_GAIN_CAL:
-       case ADC_DC_CAL:
-               /* Not yet */
-               break;
-       }
-}
-
-/*
- * Generic calibration routine.
- * Recalibrate the lower PHY chips to account for temperature/environment
- * changes.
- */
-static bool ar9003_hw_per_calibration(struct ath_hw *ah,
-                                     struct ath9k_channel *ichan,
-                                     u8 rxchainmask,
-                                     struct ath9k_cal_list *currCal)
-{
-       struct ath9k_hw_cal_data *caldata = ah->caldata;
-       /* Cal is assumed not done until explicitly set below */
-       bool iscaldone = false;
-
-       /* Calibration in progress. */
-       if (currCal->calState == CAL_RUNNING) {
-               /* Check to see if it has finished. */
-               if (!(REG_READ(ah, AR_PHY_TIMING4) & AR_PHY_TIMING4_DO_CAL)) {
-                       /*
-                       * Accumulate cal measures for active chains
-                       */
-                       currCal->calData->calCollect(ah);
-                       ah->cal_samples++;
-
-                       if (ah->cal_samples >=
-                           currCal->calData->calNumSamples) {
-                               unsigned int i, numChains = 0;
-                               for (i = 0; i < AR9300_MAX_CHAINS; i++) {
-                                       if (rxchainmask & (1 << i))
-                                               numChains++;
-                               }
-
-                               /*
-                               * Process accumulated data
-                               */
-                               currCal->calData->calPostProc(ah, numChains);
-
-                               /* Calibration has finished. */
-                               caldata->CalValid |= currCal->calData->calType;
-                               currCal->calState = CAL_DONE;
-                               iscaldone = true;
-                       } else {
-                       /*
-                        * Set-up collection of another sub-sample until we
-                        * get desired number
-                        */
-                       ar9003_hw_setup_calibration(ah, currCal);
-                       }
-               }
-       } else if (!(caldata->CalValid & currCal->calData->calType)) {
-               /* If current cal is marked invalid in channel, kick it off */
-               ath9k_hw_reset_calibration(ah, currCal);
-       }
-
-       return iscaldone;
-}
-
-static bool ar9003_hw_calibrate(struct ath_hw *ah,
-                               struct ath9k_channel *chan,
-                               u8 rxchainmask,
-                               bool longcal)
-{
-       bool iscaldone = true;
-       struct ath9k_cal_list *currCal = ah->cal_list_curr;
-
-       /*
-        * For given calibration:
-        * 1. Call generic cal routine
-        * 2. When this cal is done (isCalDone) if we have more cals waiting
-        *    (eg after reset), mask this to upper layers by not propagating
-        *    isCalDone if it is set to TRUE.
-        *    Instead, change isCalDone to FALSE and setup the waiting cal(s)
-        *    to be run.
-        */
-       if (currCal &&
-           (currCal->calState == CAL_RUNNING ||
-            currCal->calState == CAL_WAITING)) {
-               iscaldone = ar9003_hw_per_calibration(ah, chan,
-                                                     rxchainmask, currCal);
-               if (iscaldone) {
-                       ah->cal_list_curr = currCal = currCal->calNext;
-
-                       if (currCal->calState == CAL_WAITING) {
-                               iscaldone = false;
-                               ath9k_hw_reset_calibration(ah, currCal);
-                       }
-               }
-       }
-
-       /* Do NF cal only at longer intervals */
-       if (longcal) {
-               /*
-                * Get the value from the previous NF cal and update
-                * history buffer.
-                */
-               ath9k_hw_getnf(ah, chan);
-
-               /*
-                * Load the NF from history buffer of the current channel.
-                * NF is slow time-variant, so it is OK to use a historical
-                * value.
-                */
-               ath9k_hw_loadnf(ah, ah->curchan);
-
-               /* start NF calibration, without updating BB NF register */
-               ath9k_hw_start_nfcal(ah, false);
-       }
-
-       return iscaldone;
-}
-
-static void ar9003_hw_iqcal_collect(struct ath_hw *ah)
-{
-       int i;
-
-       /* Accumulate IQ cal measures for active chains */
-       for (i = 0; i < AR5416_MAX_CHAINS; i++) {
-               ah->totalPowerMeasI[i] +=
-                       REG_READ(ah, AR_PHY_CAL_MEAS_0(i));
-               ah->totalPowerMeasQ[i] +=
-                       REG_READ(ah, AR_PHY_CAL_MEAS_1(i));
-               ah->totalIqCorrMeas[i] +=
-                       (int32_t) REG_READ(ah, AR_PHY_CAL_MEAS_2(i));
-               ath_print(ath9k_hw_common(ah), ATH_DBG_CALIBRATE,
-                         "%d: Chn %d pmi=0x%08x;pmq=0x%08x;iqcm=0x%08x;\n",
-                         ah->cal_samples, i, ah->totalPowerMeasI[i],
-                         ah->totalPowerMeasQ[i],
-                         ah->totalIqCorrMeas[i]);
-       }
-}
-
-static void ar9003_hw_iqcalibrate(struct ath_hw *ah, u8 numChains)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-       u32 powerMeasQ, powerMeasI, iqCorrMeas;
-       u32 qCoffDenom, iCoffDenom;
-       int32_t qCoff, iCoff;
-       int iqCorrNeg, i;
-       const u_int32_t offset_array[3] = {
-               AR_PHY_RX_IQCAL_CORR_B0,
-               AR_PHY_RX_IQCAL_CORR_B1,
-               AR_PHY_RX_IQCAL_CORR_B2,
-       };
-
-       for (i = 0; i < numChains; i++) {
-               powerMeasI = ah->totalPowerMeasI[i];
-               powerMeasQ = ah->totalPowerMeasQ[i];
-               iqCorrMeas = ah->totalIqCorrMeas[i];
-
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Starting IQ Cal and Correction for Chain %d\n",
-                         i);
-
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Orignal: Chn %diq_corr_meas = 0x%08x\n",
-                         i, ah->totalIqCorrMeas[i]);
-
-               iqCorrNeg = 0;
-
-               if (iqCorrMeas > 0x80000000) {
-                       iqCorrMeas = (0xffffffff - iqCorrMeas) + 1;
-                       iqCorrNeg = 1;
-               }
-
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Chn %d pwr_meas_i = 0x%08x\n", i, powerMeasI);
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Chn %d pwr_meas_q = 0x%08x\n", i, powerMeasQ);
-               ath_print(common, ATH_DBG_CALIBRATE, "iqCorrNeg is 0x%08x\n",
-                         iqCorrNeg);
-
-               iCoffDenom = (powerMeasI / 2 + powerMeasQ / 2) / 256;
-               qCoffDenom = powerMeasQ / 64;
-
-               if ((iCoffDenom != 0) && (qCoffDenom != 0)) {
-                       iCoff = iqCorrMeas / iCoffDenom;
-                       qCoff = powerMeasI / qCoffDenom - 64;
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "Chn %d iCoff = 0x%08x\n", i, iCoff);
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "Chn %d qCoff = 0x%08x\n", i, qCoff);
-
-                       /* Force bounds on iCoff */
-                       if (iCoff >= 63)
-                               iCoff = 63;
-                       else if (iCoff <= -63)
-                               iCoff = -63;
-
-                       /* Negate iCoff if iqCorrNeg == 0 */
-                       if (iqCorrNeg == 0x0)
-                               iCoff = -iCoff;
-
-                       /* Force bounds on qCoff */
-                       if (qCoff >= 63)
-                               qCoff = 63;
-                       else if (qCoff <= -63)
-                               qCoff = -63;
-
-                       iCoff = iCoff & 0x7f;
-                       qCoff = qCoff & 0x7f;
-
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "Chn %d : iCoff = 0x%x  qCoff = 0x%x\n",
-                                 i, iCoff, qCoff);
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "Register offset (0x%04x) "
-                                 "before update = 0x%x\n",
-                                 offset_array[i],
-                                 REG_READ(ah, offset_array[i]));
-
-                       REG_RMW_FIELD(ah, offset_array[i],
-                                     AR_PHY_RX_IQCAL_CORR_IQCORR_Q_I_COFF,
-                                     iCoff);
-                       REG_RMW_FIELD(ah, offset_array[i],
-                                     AR_PHY_RX_IQCAL_CORR_IQCORR_Q_Q_COFF,
-                                     qCoff);
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "Register offset (0x%04x) QI COFF "
-                                 "(bitfields 0x%08x) after update = 0x%x\n",
-                                 offset_array[i],
-                                 AR_PHY_RX_IQCAL_CORR_IQCORR_Q_I_COFF,
-                                 REG_READ(ah, offset_array[i]));
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "Register offset (0x%04x) QQ COFF "
-                                 "(bitfields 0x%08x) after update = 0x%x\n",
-                                 offset_array[i],
-                                 AR_PHY_RX_IQCAL_CORR_IQCORR_Q_Q_COFF,
-                                 REG_READ(ah, offset_array[i]));
-
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "IQ Cal and Correction done for Chain %d\n",
-                                 i);
-               }
-       }
-
-       REG_SET_BIT(ah, AR_PHY_RX_IQCAL_CORR_B0,
-                   AR_PHY_RX_IQCAL_CORR_IQCORR_ENABLE);
-       ath_print(common, ATH_DBG_CALIBRATE,
-                 "IQ Cal and Correction (offset 0x%04x) enabled "
-                 "(bit position 0x%08x). New Value 0x%08x\n",
-                 (unsigned) (AR_PHY_RX_IQCAL_CORR_B0),
-                 AR_PHY_RX_IQCAL_CORR_IQCORR_ENABLE,
-                 REG_READ(ah, AR_PHY_RX_IQCAL_CORR_B0));
-}
-
-static const struct ath9k_percal_data iq_cal_single_sample = {
-       IQ_MISMATCH_CAL,
-       MIN_CAL_SAMPLES,
-       PER_MAX_LOG_COUNT,
-       ar9003_hw_iqcal_collect,
-       ar9003_hw_iqcalibrate
-};
-
-static void ar9003_hw_init_cal_settings(struct ath_hw *ah)
-{
-       ah->iq_caldata.calData = &iq_cal_single_sample;
-       ah->supp_cals = IQ_MISMATCH_CAL;
-}
-
-static bool ar9003_hw_iscal_supported(struct ath_hw *ah,
-                                     enum ath9k_cal_types calType)
-{
-       switch (calType & ah->supp_cals) {
-       case IQ_MISMATCH_CAL:
-               /*
-                * XXX: Run IQ Mismatch for non-CCK only
-                * Note that CHANNEL_B is never set though.
-                */
-               return true;
-       case ADC_GAIN_CAL:
-       case ADC_DC_CAL:
-               return false;
-       case TEMP_COMP_CAL:
-               return true;
-       }
-
-       return false;
-}
-
-/*
- * solve 4x4 linear equation used in loopback iq cal.
- */
-static bool ar9003_hw_solve_iq_cal(struct ath_hw *ah,
-                                  s32 sin_2phi_1,
-                                  s32 cos_2phi_1,
-                                  s32 sin_2phi_2,
-                                  s32 cos_2phi_2,
-                                  s32 mag_a0_d0,
-                                  s32 phs_a0_d0,
-                                  s32 mag_a1_d0,
-                                  s32 phs_a1_d0,
-                                  s32 solved_eq[])
-{
-       s32 f1 = cos_2phi_1 - cos_2phi_2,
-           f3 = sin_2phi_1 - sin_2phi_2,
-           f2;
-       s32 mag_tx, phs_tx, mag_rx, phs_rx;
-       const s32 result_shift = 1 << 15;
-       struct ath_common *common = ath9k_hw_common(ah);
-
-       f2 = (f1 * f1 + f3 * f3) / result_shift;
-
-       if (!f2) {
-               ath_print(common, ATH_DBG_CALIBRATE, "Divide by 0\n");
-               return false;
-       }
-
-       /* mag mismatch, tx */
-       mag_tx = f1 * (mag_a0_d0  - mag_a1_d0) + f3 * (phs_a0_d0 - phs_a1_d0);
-       /* phs mismatch, tx */
-       phs_tx = f3 * (-mag_a0_d0 + mag_a1_d0) + f1 * (phs_a0_d0 - phs_a1_d0);
-
-       mag_tx = (mag_tx / f2);
-       phs_tx = (phs_tx / f2);
-
-       /* mag mismatch, rx */
-       mag_rx = mag_a0_d0 - (cos_2phi_1 * mag_tx + sin_2phi_1 * phs_tx) /
-                result_shift;
-       /* phs mismatch, rx */
-       phs_rx = phs_a0_d0 + (sin_2phi_1 * mag_tx - cos_2phi_1 * phs_tx) /
-                result_shift;
-
-       solved_eq[0] = mag_tx;
-       solved_eq[1] = phs_tx;
-       solved_eq[2] = mag_rx;
-       solved_eq[3] = phs_rx;
-
-       return true;
-}
-
-static s32 ar9003_hw_find_mag_approx(struct ath_hw *ah, s32 in_re, s32 in_im)
-{
-       s32 abs_i = abs(in_re),
-           abs_q = abs(in_im),
-           max_abs, min_abs;
-
-       if (abs_i > abs_q) {
-               max_abs = abs_i;
-               min_abs = abs_q;
-       } else {
-               max_abs = abs_q;
-               min_abs = abs_i;
-       }
-
-       return max_abs - (max_abs / 32) + (min_abs / 8) + (min_abs / 4);
-}
-
-#define DELPT 32
-
-static bool ar9003_hw_calc_iq_corr(struct ath_hw *ah,
-                                  s32 chain_idx,
-                                  const s32 iq_res[],
-                                  s32 iqc_coeff[])
-{
-       s32 i2_m_q2_a0_d0, i2_p_q2_a0_d0, iq_corr_a0_d0,
-           i2_m_q2_a0_d1, i2_p_q2_a0_d1, iq_corr_a0_d1,
-           i2_m_q2_a1_d0, i2_p_q2_a1_d0, iq_corr_a1_d0,
-           i2_m_q2_a1_d1, i2_p_q2_a1_d1, iq_corr_a1_d1;
-       s32 mag_a0_d0, mag_a1_d0, mag_a0_d1, mag_a1_d1,
-           phs_a0_d0, phs_a1_d0, phs_a0_d1, phs_a1_d1,
-           sin_2phi_1, cos_2phi_1,
-           sin_2phi_2, cos_2phi_2;
-       s32 mag_tx, phs_tx, mag_rx, phs_rx;
-       s32 solved_eq[4], mag_corr_tx, phs_corr_tx, mag_corr_rx, phs_corr_rx,
-           q_q_coff, q_i_coff;
-       const s32 res_scale = 1 << 15;
-       const s32 delpt_shift = 1 << 8;
-       s32 mag1, mag2;
-       struct ath_common *common = ath9k_hw_common(ah);
-
-       i2_m_q2_a0_d0 = iq_res[0] & 0xfff;
-       i2_p_q2_a0_d0 = (iq_res[0] >> 12) & 0xfff;
-       iq_corr_a0_d0 = ((iq_res[0] >> 24) & 0xff) + ((iq_res[1] & 0xf) << 8);
-
-       if (i2_m_q2_a0_d0 > 0x800)
-               i2_m_q2_a0_d0 = -((0xfff - i2_m_q2_a0_d0) + 1);
-
-       if (i2_p_q2_a0_d0 > 0x800)
-               i2_p_q2_a0_d0 = -((0xfff - i2_p_q2_a0_d0) + 1);
-
-       if (iq_corr_a0_d0 > 0x800)
-               iq_corr_a0_d0 = -((0xfff - iq_corr_a0_d0) + 1);
-
-       i2_m_q2_a0_d1 = (iq_res[1] >> 4) & 0xfff;
-       i2_p_q2_a0_d1 = (iq_res[2] & 0xfff);
-       iq_corr_a0_d1 = (iq_res[2] >> 12) & 0xfff;
-
-       if (i2_m_q2_a0_d1 > 0x800)
-               i2_m_q2_a0_d1 = -((0xfff - i2_m_q2_a0_d1) + 1);
-
-       if (i2_p_q2_a0_d1 > 0x800)
-               i2_p_q2_a0_d1 = -((0xfff - i2_p_q2_a0_d1) + 1);
-
-       if (iq_corr_a0_d1 > 0x800)
-               iq_corr_a0_d1 = -((0xfff - iq_corr_a0_d1) + 1);
-
-       i2_m_q2_a1_d0 = ((iq_res[2] >> 24) & 0xff) + ((iq_res[3] & 0xf) << 8);
-       i2_p_q2_a1_d0 = (iq_res[3] >> 4) & 0xfff;
-       iq_corr_a1_d0 = iq_res[4] & 0xfff;
-
-       if (i2_m_q2_a1_d0 > 0x800)
-               i2_m_q2_a1_d0 = -((0xfff - i2_m_q2_a1_d0) + 1);
-
-       if (i2_p_q2_a1_d0 > 0x800)
-               i2_p_q2_a1_d0 = -((0xfff - i2_p_q2_a1_d0) + 1);
-
-       if (iq_corr_a1_d0 > 0x800)
-               iq_corr_a1_d0 = -((0xfff - iq_corr_a1_d0) + 1);
-
-       i2_m_q2_a1_d1 = (iq_res[4] >> 12) & 0xfff;
-       i2_p_q2_a1_d1 = ((iq_res[4] >> 24) & 0xff) + ((iq_res[5] & 0xf) << 8);
-       iq_corr_a1_d1 = (iq_res[5] >> 4) & 0xfff;
-
-       if (i2_m_q2_a1_d1 > 0x800)
-               i2_m_q2_a1_d1 = -((0xfff - i2_m_q2_a1_d1) + 1);
-
-       if (i2_p_q2_a1_d1 > 0x800)
-               i2_p_q2_a1_d1 = -((0xfff - i2_p_q2_a1_d1) + 1);
-
-       if (iq_corr_a1_d1 > 0x800)
-               iq_corr_a1_d1 = -((0xfff - iq_corr_a1_d1) + 1);
-
-       if ((i2_p_q2_a0_d0 == 0) || (i2_p_q2_a0_d1 == 0) ||
-           (i2_p_q2_a1_d0 == 0) || (i2_p_q2_a1_d1 == 0)) {
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Divide by 0:\na0_d0=%d\n"
-                         "a0_d1=%d\na2_d0=%d\na1_d1=%d\n",
-                         i2_p_q2_a0_d0, i2_p_q2_a0_d1,
-                         i2_p_q2_a1_d0, i2_p_q2_a1_d1);
-               return false;
-       }
-
-       mag_a0_d0 = (i2_m_q2_a0_d0 * res_scale) / i2_p_q2_a0_d0;
-       phs_a0_d0 = (iq_corr_a0_d0 * res_scale) / i2_p_q2_a0_d0;
-
-       mag_a0_d1 = (i2_m_q2_a0_d1 * res_scale) / i2_p_q2_a0_d1;
-       phs_a0_d1 = (iq_corr_a0_d1 * res_scale) / i2_p_q2_a0_d1;
-
-       mag_a1_d0 = (i2_m_q2_a1_d0 * res_scale) / i2_p_q2_a1_d0;
-       phs_a1_d0 = (iq_corr_a1_d0 * res_scale) / i2_p_q2_a1_d0;
-
-       mag_a1_d1 = (i2_m_q2_a1_d1 * res_scale) / i2_p_q2_a1_d1;
-       phs_a1_d1 = (iq_corr_a1_d1 * res_scale) / i2_p_q2_a1_d1;
-
-       /* w/o analog phase shift */
-       sin_2phi_1 = (((mag_a0_d0 - mag_a0_d1) * delpt_shift) / DELPT);
-       /* w/o analog phase shift */
-       cos_2phi_1 = (((phs_a0_d1 - phs_a0_d0) * delpt_shift) / DELPT);
-       /* w/  analog phase shift */
-       sin_2phi_2 = (((mag_a1_d0 - mag_a1_d1) * delpt_shift) / DELPT);
-       /* w/  analog phase shift */
-       cos_2phi_2 = (((phs_a1_d1 - phs_a1_d0) * delpt_shift) / DELPT);
-
-       /*
-        * force sin^2 + cos^2 = 1;
-        * find magnitude by approximation
-        */
-       mag1 = ar9003_hw_find_mag_approx(ah, cos_2phi_1, sin_2phi_1);
-       mag2 = ar9003_hw_find_mag_approx(ah, cos_2phi_2, sin_2phi_2);
-
-       if ((mag1 == 0) || (mag2 == 0)) {
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Divide by 0: mag1=%d, mag2=%d\n",
-                         mag1, mag2);
-               return false;
-       }
-
-       /* normalization sin and cos by mag */
-       sin_2phi_1 = (sin_2phi_1 * res_scale / mag1);
-       cos_2phi_1 = (cos_2phi_1 * res_scale / mag1);
-       sin_2phi_2 = (sin_2phi_2 * res_scale / mag2);
-       cos_2phi_2 = (cos_2phi_2 * res_scale / mag2);
-
-       /* calculate IQ mismatch */
-       if (!ar9003_hw_solve_iq_cal(ah,
-                            sin_2phi_1, cos_2phi_1,
-                            sin_2phi_2, cos_2phi_2,
-                            mag_a0_d0, phs_a0_d0,
-                            mag_a1_d0,
-                            phs_a1_d0, solved_eq)) {
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Call to ar9003_hw_solve_iq_cal() failed.\n");
-               return false;
-       }
-
-       mag_tx = solved_eq[0];
-       phs_tx = solved_eq[1];
-       mag_rx = solved_eq[2];
-       phs_rx = solved_eq[3];
-
-       ath_print(common, ATH_DBG_CALIBRATE,
-                 "chain %d: mag mismatch=%d phase mismatch=%d\n",
-                 chain_idx, mag_tx/res_scale, phs_tx/res_scale);
-
-       if (res_scale == mag_tx) {
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Divide by 0: mag_tx=%d, res_scale=%d\n",
-                         mag_tx, res_scale);
-               return false;
-       }
-
-       /* calculate and quantize Tx IQ correction factor */
-       mag_corr_tx = (mag_tx * res_scale) / (res_scale - mag_tx);
-       phs_corr_tx = -phs_tx;
-
-       q_q_coff = (mag_corr_tx * 128 / res_scale);
-       q_i_coff = (phs_corr_tx * 256 / res_scale);
-
-       ath_print(common, ATH_DBG_CALIBRATE,
-                 "tx chain %d: mag corr=%d  phase corr=%d\n",
-                 chain_idx, q_q_coff, q_i_coff);
-
-       if (q_i_coff < -63)
-               q_i_coff = -63;
-       if (q_i_coff > 63)
-               q_i_coff = 63;
-       if (q_q_coff < -63)
-               q_q_coff = -63;
-       if (q_q_coff > 63)
-               q_q_coff = 63;
-
-       iqc_coeff[0] = (q_q_coff * 128) + q_i_coff;
-
-       ath_print(common, ATH_DBG_CALIBRATE,
-                 "tx chain %d: iq corr coeff=%x\n",
-                 chain_idx, iqc_coeff[0]);
-
-       if (-mag_rx == res_scale) {
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Divide by 0: mag_rx=%d, res_scale=%d\n",
-                         mag_rx, res_scale);
-               return false;
-       }
-
-       /* calculate and quantize Rx IQ correction factors */
-       mag_corr_rx = (-mag_rx * res_scale) / (res_scale + mag_rx);
-       phs_corr_rx = -phs_rx;
-
-       q_q_coff = (mag_corr_rx * 128 / res_scale);
-       q_i_coff = (phs_corr_rx * 256 / res_scale);
-
-       ath_print(common, ATH_DBG_CALIBRATE,
-                 "rx chain %d: mag corr=%d  phase corr=%d\n",
-                 chain_idx, q_q_coff, q_i_coff);
-
-       if (q_i_coff < -63)
-               q_i_coff = -63;
-       if (q_i_coff > 63)
-               q_i_coff = 63;
-       if (q_q_coff < -63)
-               q_q_coff = -63;
-       if (q_q_coff > 63)
-               q_q_coff = 63;
-
-       iqc_coeff[1] = (q_q_coff * 128) + q_i_coff;
-
-       ath_print(common, ATH_DBG_CALIBRATE,
-                 "rx chain %d: iq corr coeff=%x\n",
-                 chain_idx, iqc_coeff[1]);
-
-       return true;
-}
-
-static void ar9003_hw_tx_iq_cal(struct ath_hw *ah)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-       const u32 txiqcal_status[AR9300_MAX_CHAINS] = {
-               AR_PHY_TX_IQCAL_STATUS_B0,
-               AR_PHY_TX_IQCAL_STATUS_B1,
-               AR_PHY_TX_IQCAL_STATUS_B2,
-       };
-       const u32 tx_corr_coeff[AR9300_MAX_CHAINS] = {
-               AR_PHY_TX_IQCAL_CORR_COEFF_01_B0,
-               AR_PHY_TX_IQCAL_CORR_COEFF_01_B1,
-               AR_PHY_TX_IQCAL_CORR_COEFF_01_B2,
-       };
-       const u32 rx_corr[AR9300_MAX_CHAINS] = {
-               AR_PHY_RX_IQCAL_CORR_B0,
-               AR_PHY_RX_IQCAL_CORR_B1,
-               AR_PHY_RX_IQCAL_CORR_B2,
-       };
-       const u_int32_t chan_info_tab[] = {
-               AR_PHY_CHAN_INFO_TAB_0,
-               AR_PHY_CHAN_INFO_TAB_1,
-               AR_PHY_CHAN_INFO_TAB_2,
-       };
-       s32 iq_res[6];
-       s32 iqc_coeff[2];
-       s32 i, j;
-       u32 num_chains = 0;
-
-       for (i = 0; i < AR9300_MAX_CHAINS; i++) {
-               if (ah->txchainmask & (1 << i))
-                       num_chains++;
-       }
-
-       REG_RMW_FIELD(ah, AR_PHY_TX_IQCAL_CONTROL_1,
-                     AR_PHY_TX_IQCAQL_CONTROL_1_IQCORR_I_Q_COFF_DELPT,
-                     DELPT);
-       REG_RMW_FIELD(ah, AR_PHY_TX_IQCAL_START,
-                     AR_PHY_TX_IQCAL_START_DO_CAL,
-                     AR_PHY_TX_IQCAL_START_DO_CAL);
-
-       if (!ath9k_hw_wait(ah, AR_PHY_TX_IQCAL_START,
-                          AR_PHY_TX_IQCAL_START_DO_CAL,
-                          0, AH_WAIT_TIMEOUT)) {
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Tx IQ Cal not complete.\n");
-               goto TX_IQ_CAL_FAILED;
-       }
-
-       for (i = 0; i < num_chains; i++) {
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "Doing Tx IQ Cal for chain %d.\n", i);
-
-               if (REG_READ(ah, txiqcal_status[i]) &
-                            AR_PHY_TX_IQCAL_STATUS_FAILED) {
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "Tx IQ Cal failed for chain %d.\n", i);
-                       goto TX_IQ_CAL_FAILED;
-               }
-
-               for (j = 0; j < 3; j++) {
-                       u_int8_t idx = 2 * j,
-                       offset = 4 * j;
-
-                       REG_RMW_FIELD(ah, AR_PHY_CHAN_INFO_MEMORY,
-                                     AR_PHY_CHAN_INFO_TAB_S2_READ, 0);
-
-                       /* 32 bits */
-                       iq_res[idx] = REG_READ(ah, chan_info_tab[i] + offset);
-
-                       REG_RMW_FIELD(ah, AR_PHY_CHAN_INFO_MEMORY,
-                                     AR_PHY_CHAN_INFO_TAB_S2_READ, 1);
-
-                       /* 16 bits */
-                       iq_res[idx+1] = 0xffff & REG_READ(ah,
-                                                         chan_info_tab[i] +
-                                                         offset);
-
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "IQ RES[%d]=0x%x IQ_RES[%d]=0x%x\n",
-                                 idx, iq_res[idx], idx+1, iq_res[idx+1]);
-               }
-
-               if (!ar9003_hw_calc_iq_corr(ah, i, iq_res, iqc_coeff)) {
-                       ath_print(common, ATH_DBG_CALIBRATE,
-                                 "Failed in calculation of IQ correction.\n");
-                       goto TX_IQ_CAL_FAILED;
-               }
-
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "IQ_COEFF[0] = 0x%x IQ_COEFF[1] = 0x%x\n",
-                         iqc_coeff[0], iqc_coeff[1]);
-
-               REG_RMW_FIELD(ah, tx_corr_coeff[i],
-                             AR_PHY_TX_IQCAL_CORR_COEFF_01_COEFF_TABLE,
-                             iqc_coeff[0]);
-               REG_RMW_FIELD(ah, rx_corr[i],
-                             AR_PHY_RX_IQCAL_CORR_LOOPBACK_IQCORR_Q_Q_COFF,
-                             iqc_coeff[1] >> 7);
-               REG_RMW_FIELD(ah, rx_corr[i],
-                             AR_PHY_RX_IQCAL_CORR_LOOPBACK_IQCORR_Q_I_COFF,
-                             iqc_coeff[1]);
-       }
-
-       REG_RMW_FIELD(ah, AR_PHY_TX_IQCAL_CONTROL_3,
-                     AR_PHY_TX_IQCAL_CONTROL_3_IQCORR_EN, 0x1);
-       REG_RMW_FIELD(ah, AR_PHY_RX_IQCAL_CORR_B0,
-                     AR_PHY_RX_IQCAL_CORR_B0_LOOPBACK_IQCORR_EN, 0x1);
-
-       return;
-
-TX_IQ_CAL_FAILED:
-       ath_print(common, ATH_DBG_CALIBRATE, "Tx IQ Cal failed\n");
-}
-
-static bool ar9003_hw_init_cal(struct ath_hw *ah,
-                              struct ath9k_channel *chan)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-
-       /*
-        * 0x7 = 0b111 , AR9003 needs to be configured for 3-chain mode before
-        * running AGC/TxIQ cals
-        */
-       ar9003_hw_set_chain_masks(ah, 0x7, 0x7);
-
-       /* Do Tx IQ Calibration */
-       ar9003_hw_tx_iq_cal(ah);
-       REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_DIS);
-       udelay(5);
-       REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_EN);
-
-       /* Calibrate the AGC */
-       REG_WRITE(ah, AR_PHY_AGC_CONTROL,
-                 REG_READ(ah, AR_PHY_AGC_CONTROL) |
-                 AR_PHY_AGC_CONTROL_CAL);
-
-       /* Poll for offset calibration complete */
-       if (!ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL,
-                          0, AH_WAIT_TIMEOUT)) {
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "offset calibration failed to "
-                         "complete in 1ms; noisy environment?\n");
-               return false;
-       }
-
-       /* Revert chainmasks to their original values before NF cal */
-       ar9003_hw_set_chain_masks(ah, ah->rxchainmask, ah->txchainmask);
-
-       ath9k_hw_start_nfcal(ah, true);
-
-       /* Initialize list pointers */
-       ah->cal_list = ah->cal_list_last = ah->cal_list_curr = NULL;
-
-       if (ar9003_hw_iscal_supported(ah, IQ_MISMATCH_CAL)) {
-               INIT_CAL(&ah->iq_caldata);
-               INSERT_CAL(ah, &ah->iq_caldata);
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "enabling IQ Calibration.\n");
-       }
-
-       if (ar9003_hw_iscal_supported(ah, TEMP_COMP_CAL)) {
-               INIT_CAL(&ah->tempCompCalData);
-               INSERT_CAL(ah, &ah->tempCompCalData);
-               ath_print(common, ATH_DBG_CALIBRATE,
-                         "enabling Temperature Compensation Calibration.\n");
-       }
-
-       /* Initialize current pointer to first element in list */
-       ah->cal_list_curr = ah->cal_list;
-
-       if (ah->cal_list_curr)
-               ath9k_hw_reset_calibration(ah, ah->cal_list_curr);
-
-       if (ah->caldata)
-               ah->caldata->CalValid = 0;
-
-       return true;
-}
-
-void ar9003_hw_attach_calib_ops(struct ath_hw *ah)
-{
-       struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
-       struct ath_hw_ops *ops = ath9k_hw_ops(ah);
-
-       priv_ops->init_cal_settings = ar9003_hw_init_cal_settings;
-       priv_ops->init_cal = ar9003_hw_init_cal;
-       priv_ops->setup_calibration = ar9003_hw_setup_calibration;
-       priv_ops->iscal_supported = ar9003_hw_iscal_supported;
-
-       ops->calibrate = ar9003_hw_calibrate;
-}
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
deleted file mode 100644 (file)
index 0e802ca..0000000
+++ /dev/null
@@ -1,2222 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "hw.h"
-#include "ar9003_phy.h"
-#include "ar9003_eeprom.h"
-
-#define COMP_HDR_LEN 4
-#define COMP_CKSUM_LEN 2
-
-#define AR_CH0_TOP (0x00016288)
-#define AR_CH0_TOP_XPABIASLVL (0x3)
-#define AR_CH0_TOP_XPABIASLVL_S (8)
-
-#define AR_CH0_THERM (0x00016290)
-#define AR_CH0_THERM_SPARE (0x3f)
-#define AR_CH0_THERM_SPARE_S (0)
-
-#define AR_SWITCH_TABLE_COM_ALL (0xffff)
-#define AR_SWITCH_TABLE_COM_ALL_S (0)
-
-#define AR_SWITCH_TABLE_COM2_ALL (0xffffff)
-#define AR_SWITCH_TABLE_COM2_ALL_S (0)
-
-#define AR_SWITCH_TABLE_ALL (0xfff)
-#define AR_SWITCH_TABLE_ALL_S (0)
-
-#define LE16(x) __constant_cpu_to_le16(x)
-#define LE32(x) __constant_cpu_to_le32(x)
-
-/* Local defines to distinguish between extension and control CTL's */
-#define EXT_ADDITIVE (0x8000)
-#define CTL_11A_EXT (CTL_11A | EXT_ADDITIVE)
-#define CTL_11G_EXT (CTL_11G | EXT_ADDITIVE)
-#define CTL_11B_EXT (CTL_11B | EXT_ADDITIVE)
-#define REDUCE_SCALED_POWER_BY_TWO_CHAIN     6  /* 10*log10(2)*2 */
-#define REDUCE_SCALED_POWER_BY_THREE_CHAIN   9  /* 10*log10(3)*2 */
-#define PWRINCR_3_TO_1_CHAIN      9             /* 10*log(3)*2 */
-#define PWRINCR_3_TO_2_CHAIN      3             /* floor(10*log(3/2)*2) */
-#define PWRINCR_2_TO_1_CHAIN      6             /* 10*log(2)*2 */
-
-#define SUB_NUM_CTL_MODES_AT_5G_40 2    /* excluding HT40, EXT-OFDM */
-#define SUB_NUM_CTL_MODES_AT_2G_40 3    /* excluding HT40, EXT-OFDM, EXT-CCK */
-
-#define CTL(_tpower, _flag) ((_tpower) | ((_flag) << 6))
-
-static const struct ar9300_eeprom ar9300_default = {
-       .eepromVersion = 2,
-       .templateVersion = 2,
-       .macAddr = {1, 2, 3, 4, 5, 6},
-       .custData = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
-       .baseEepHeader = {
-               .regDmn = { LE16(0), LE16(0x1f) },
-               .txrxMask =  0x77, /* 4 bits tx and 4 bits rx */
-               .opCapFlags = {
-                       .opFlags = AR9300_OPFLAGS_11G | AR9300_OPFLAGS_11A,
-                       .eepMisc = 0,
-               },
-               .rfSilent = 0,
-               .blueToothOptions = 0,
-               .deviceCap = 0,
-               .deviceType = 5, /* takes lower byte in eeprom location */
-               .pwrTableOffset = AR9300_PWR_TABLE_OFFSET,
-               .params_for_tuning_caps = {0, 0},
-               .featureEnable = 0x0c,
-                /*
-                 * bit0 - enable tx temp comp - disabled
-                 * bit1 - enable tx volt comp - disabled
-                 * bit2 - enable fastClock - enabled
-                 * bit3 - enable doubling - enabled
-                 * bit4 - enable internal regulator - disabled
-                 * bit5 - enable pa predistortion - disabled
-                 */
-               .miscConfiguration = 0, /* bit0 - turn down drivestrength */
-               .eepromWriteEnableGpio = 3,
-               .wlanDisableGpio = 0,
-               .wlanLedGpio = 8,
-               .rxBandSelectGpio = 0xff,
-               .txrxgain = 0,
-               .swreg = 0,
-        },
-       .modalHeader2G = {
-       /* ar9300_modal_eep_header  2g */
-               /* 4 idle,t1,t2,b(4 bits per setting) */
-               .antCtrlCommon = LE32(0x110),
-               /* 4 ra1l1, ra2l1, ra1l2, ra2l2, ra12 */
-               .antCtrlCommon2 = LE32(0x22222),
-
-               /*
-                * antCtrlChain[AR9300_MAX_CHAINS]; 6 idle, t, r,
-                * rx1, rx12, b (2 bits each)
-                */
-               .antCtrlChain = { LE16(0x150), LE16(0x150), LE16(0x150) },
-
-               /*
-                * xatten1DB[AR9300_MAX_CHAINS];  3 xatten1_db
-                * for ar9280 (0xa20c/b20c 5:0)
-                */
-               .xatten1DB = {0, 0, 0},
-
-               /*
-                * xatten1Margin[AR9300_MAX_CHAINS]; 3 xatten1_margin
-                * for ar9280 (0xa20c/b20c 16:12
-                */
-               .xatten1Margin = {0, 0, 0},
-               .tempSlope = 36,
-               .voltSlope = 0,
-
-               /*
-                * spurChans[OSPREY_EEPROM_MODAL_SPURS]; spur
-                * channels in usual fbin coding format
-                */
-               .spurChans = {0, 0, 0, 0, 0},
-
-               /*
-                * noiseFloorThreshCh[AR9300_MAX_CHAINS]; 3 Check
-                * if the register is per chain
-                */
-               .noiseFloorThreshCh = {-1, 0, 0},
-               .ob = {1, 1, 1},/* 3 chain */
-               .db_stage2 = {1, 1, 1}, /* 3 chain  */
-               .db_stage3 = {0, 0, 0},
-               .db_stage4 = {0, 0, 0},
-               .xpaBiasLvl = 0,
-               .txFrameToDataStart = 0x0e,
-               .txFrameToPaOn = 0x0e,
-               .txClip = 3, /* 4 bits tx_clip, 4 bits dac_scale_cck */
-               .antennaGain = 0,
-               .switchSettling = 0x2c,
-               .adcDesiredSize = -30,
-               .txEndToXpaOff = 0,
-               .txEndToRxOn = 0x2,
-               .txFrameToXpaOn = 0xe,
-               .thresh62 = 28,
-               .papdRateMaskHt20 = LE32(0x80c080),
-               .papdRateMaskHt40 = LE32(0x80c080),
-               .futureModal = {
-                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                       0, 0, 0, 0, 0, 0, 0, 0
-               },
-        },
-       .calFreqPier2G = {
-               FREQ2FBIN(2412, 1),
-               FREQ2FBIN(2437, 1),
-               FREQ2FBIN(2472, 1),
-        },
-       /* ar9300_cal_data_per_freq_op_loop 2g */
-       .calPierData2G = {
-               { {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0} },
-               { {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0} },
-               { {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0} },
-        },
-       .calTarget_freqbin_Cck = {
-               FREQ2FBIN(2412, 1),
-               FREQ2FBIN(2484, 1),
-        },
-       .calTarget_freqbin_2G = {
-               FREQ2FBIN(2412, 1),
-               FREQ2FBIN(2437, 1),
-               FREQ2FBIN(2472, 1)
-        },
-       .calTarget_freqbin_2GHT20 = {
-               FREQ2FBIN(2412, 1),
-               FREQ2FBIN(2437, 1),
-               FREQ2FBIN(2472, 1)
-        },
-       .calTarget_freqbin_2GHT40 = {
-               FREQ2FBIN(2412, 1),
-               FREQ2FBIN(2437, 1),
-               FREQ2FBIN(2472, 1)
-        },
-       .calTargetPowerCck = {
-                /* 1L-5L,5S,11L,11S */
-                { {36, 36, 36, 36} },
-                { {36, 36, 36, 36} },
-       },
-       .calTargetPower2G = {
-                /* 6-24,36,48,54 */
-                { {32, 32, 28, 24} },
-                { {32, 32, 28, 24} },
-                { {32, 32, 28, 24} },
-       },
-       .calTargetPower2GHT20 = {
-               { {32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20} },
-               { {32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20} },
-               { {32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20} },
-       },
-       .calTargetPower2GHT40 = {
-               { {32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20} },
-               { {32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20} },
-               { {32, 32, 32, 32, 28, 20, 32, 32, 28, 20, 32, 32, 28, 20} },
-       },
-       .ctlIndex_2G =  {
-               0x11, 0x12, 0x15, 0x17, 0x41, 0x42,
-               0x45, 0x47, 0x31, 0x32, 0x35, 0x37,
-       },
-       .ctl_freqbin_2G = {
-               {
-                       FREQ2FBIN(2412, 1),
-                       FREQ2FBIN(2417, 1),
-                       FREQ2FBIN(2457, 1),
-                       FREQ2FBIN(2462, 1)
-               },
-               {
-                       FREQ2FBIN(2412, 1),
-                       FREQ2FBIN(2417, 1),
-                       FREQ2FBIN(2462, 1),
-                       0xFF,
-               },
-
-               {
-                       FREQ2FBIN(2412, 1),
-                       FREQ2FBIN(2417, 1),
-                       FREQ2FBIN(2462, 1),
-                       0xFF,
-               },
-               {
-                       FREQ2FBIN(2422, 1),
-                       FREQ2FBIN(2427, 1),
-                       FREQ2FBIN(2447, 1),
-                       FREQ2FBIN(2452, 1)
-               },
-
-               {
-                       /* Data[4].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
-                       /* Data[4].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
-                       /* Data[4].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
-                       /* Data[4].ctlEdges[3].bChannel */ FREQ2FBIN(2484, 1),
-               },
-
-               {
-                       /* Data[5].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
-                       /* Data[5].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
-                       /* Data[5].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
-                       0,
-               },
-
-               {
-                       /* Data[6].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
-                       /* Data[6].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
-                       FREQ2FBIN(2472, 1),
-                       0,
-               },
-
-               {
-                       /* Data[7].ctlEdges[0].bChannel */ FREQ2FBIN(2422, 1),
-                       /* Data[7].ctlEdges[1].bChannel */ FREQ2FBIN(2427, 1),
-                       /* Data[7].ctlEdges[2].bChannel */ FREQ2FBIN(2447, 1),
-                       /* Data[7].ctlEdges[3].bChannel */ FREQ2FBIN(2462, 1),
-               },
-
-               {
-                       /* Data[8].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
-                       /* Data[8].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
-                       /* Data[8].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
-               },
-
-               {
-                       /* Data[9].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
-                       /* Data[9].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
-                       /* Data[9].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
-                       0
-               },
-
-               {
-                       /* Data[10].ctlEdges[0].bChannel */ FREQ2FBIN(2412, 1),
-                       /* Data[10].ctlEdges[1].bChannel */ FREQ2FBIN(2417, 1),
-                       /* Data[10].ctlEdges[2].bChannel */ FREQ2FBIN(2472, 1),
-                       0
-               },
-
-               {
-                       /* Data[11].ctlEdges[0].bChannel */ FREQ2FBIN(2422, 1),
-                       /* Data[11].ctlEdges[1].bChannel */ FREQ2FBIN(2427, 1),
-                       /* Data[11].ctlEdges[2].bChannel */ FREQ2FBIN(2447, 1),
-                       /* Data[11].ctlEdges[3].bChannel */
-                       FREQ2FBIN(2462, 1),
-               }
-        },
-       .ctlPowerData_2G = {
-                { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
-                { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
-                { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 1) } },
-
-                { { CTL(60, 1), CTL(60, 0), CTL(0, 0), CTL(0, 0) } },
-                { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
-                { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
-
-                { { CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 0) } },
-                { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
-                { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
-
-                { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } },
-                { { CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 1) } },
-                { { CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 1) } },
-        },
-       .modalHeader5G = {
-               /* 4 idle,t1,t2,b (4 bits per setting) */
-               .antCtrlCommon = LE32(0x110),
-               /* 4 ra1l1, ra2l1, ra1l2,ra2l2,ra12 */
-               .antCtrlCommon2 = LE32(0x22222),
-                /* antCtrlChain 6 idle, t,r,rx1,rx12,b (2 bits each) */
-               .antCtrlChain = {
-                       LE16(0x000), LE16(0x000), LE16(0x000),
-               },
-                /* xatten1DB 3 xatten1_db for AR9280 (0xa20c/b20c 5:0) */
-               .xatten1DB = {0, 0, 0},
-
-               /*
-                * xatten1Margin[AR9300_MAX_CHAINS]; 3 xatten1_margin
-                * for merlin (0xa20c/b20c 16:12
-                */
-               .xatten1Margin = {0, 0, 0},
-               .tempSlope = 68,
-               .voltSlope = 0,
-               /* spurChans spur channels in usual fbin coding format */
-               .spurChans = {0, 0, 0, 0, 0},
-               /* noiseFloorThreshCh Check if the register is per chain */
-               .noiseFloorThreshCh = {-1, 0, 0},
-               .ob = {3, 3, 3}, /* 3 chain */
-               .db_stage2 = {3, 3, 3}, /* 3 chain */
-               .db_stage3 = {3, 3, 3}, /* doesn't exist for 2G */
-               .db_stage4 = {3, 3, 3},  /* don't exist for 2G */
-               .xpaBiasLvl = 0,
-               .txFrameToDataStart = 0x0e,
-               .txFrameToPaOn = 0x0e,
-               .txClip = 3, /* 4 bits tx_clip, 4 bits dac_scale_cck */
-               .antennaGain = 0,
-               .switchSettling = 0x2d,
-               .adcDesiredSize = -30,
-               .txEndToXpaOff = 0,
-               .txEndToRxOn = 0x2,
-               .txFrameToXpaOn = 0xe,
-               .thresh62 = 28,
-               .papdRateMaskHt20 = LE32(0xf0e0e0),
-               .papdRateMaskHt40 = LE32(0xf0e0e0),
-               .futureModal = {
-                       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                       0, 0, 0, 0, 0, 0, 0, 0
-               },
-        },
-       .calFreqPier5G = {
-               FREQ2FBIN(5180, 0),
-               FREQ2FBIN(5220, 0),
-               FREQ2FBIN(5320, 0),
-               FREQ2FBIN(5400, 0),
-               FREQ2FBIN(5500, 0),
-               FREQ2FBIN(5600, 0),
-               FREQ2FBIN(5725, 0),
-               FREQ2FBIN(5825, 0)
-       },
-       .calPierData5G = {
-                       {
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                       },
-                       {
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                       },
-                       {
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                               {0, 0, 0, 0, 0},
-                       },
-
-       },
-       .calTarget_freqbin_5G = {
-               FREQ2FBIN(5180, 0),
-               FREQ2FBIN(5220, 0),
-               FREQ2FBIN(5320, 0),
-               FREQ2FBIN(5400, 0),
-               FREQ2FBIN(5500, 0),
-               FREQ2FBIN(5600, 0),
-               FREQ2FBIN(5725, 0),
-               FREQ2FBIN(5825, 0)
-       },
-       .calTarget_freqbin_5GHT20 = {
-               FREQ2FBIN(5180, 0),
-               FREQ2FBIN(5240, 0),
-               FREQ2FBIN(5320, 0),
-               FREQ2FBIN(5500, 0),
-               FREQ2FBIN(5700, 0),
-               FREQ2FBIN(5745, 0),
-               FREQ2FBIN(5725, 0),
-               FREQ2FBIN(5825, 0)
-       },
-       .calTarget_freqbin_5GHT40 = {
-               FREQ2FBIN(5180, 0),
-               FREQ2FBIN(5240, 0),
-               FREQ2FBIN(5320, 0),
-               FREQ2FBIN(5500, 0),
-               FREQ2FBIN(5700, 0),
-               FREQ2FBIN(5745, 0),
-               FREQ2FBIN(5725, 0),
-               FREQ2FBIN(5825, 0)
-        },
-       .calTargetPower5G = {
-               /* 6-24,36,48,54 */
-               { {20, 20, 20, 10} },
-               { {20, 20, 20, 10} },
-               { {20, 20, 20, 10} },
-               { {20, 20, 20, 10} },
-               { {20, 20, 20, 10} },
-               { {20, 20, 20, 10} },
-               { {20, 20, 20, 10} },
-               { {20, 20, 20, 10} },
-        },
-       .calTargetPower5GHT20 = {
-               /*
-                * 0_8_16,1-3_9-11_17-19,
-                * 4,5,6,7,12,13,14,15,20,21,22,23
-                */
-               { {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
-               { {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
-               { {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
-               { {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
-               { {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
-               { {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
-               { {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
-               { {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
-        },
-       .calTargetPower5GHT40 =  {
-               /*
-                * 0_8_16,1-3_9-11_17-19,
-                * 4,5,6,7,12,13,14,15,20,21,22,23
-                */
-               { {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
-               { {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
-               { {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
-               { {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
-               { {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
-               { {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
-               { {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
-               { {20, 20, 10, 10, 0, 0, 10, 10, 0, 0, 10, 10, 0, 0} },
-        },
-       .ctlIndex_5G =  {
-               0x10, 0x16, 0x18, 0x40, 0x46,
-               0x48, 0x30, 0x36, 0x38
-       },
-       .ctl_freqbin_5G =  {
-               {
-                       /* Data[0].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
-                       /* Data[0].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
-                       /* Data[0].ctlEdges[2].bChannel */ FREQ2FBIN(5280, 0),
-                       /* Data[0].ctlEdges[3].bChannel */ FREQ2FBIN(5500, 0),
-                       /* Data[0].ctlEdges[4].bChannel */ FREQ2FBIN(5600, 0),
-                       /* Data[0].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
-                       /* Data[0].ctlEdges[6].bChannel */ FREQ2FBIN(5745, 0),
-                       /* Data[0].ctlEdges[7].bChannel */ FREQ2FBIN(5825, 0)
-               },
-               {
-                       /* Data[1].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
-                       /* Data[1].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
-                       /* Data[1].ctlEdges[2].bChannel */ FREQ2FBIN(5280, 0),
-                       /* Data[1].ctlEdges[3].bChannel */ FREQ2FBIN(5500, 0),
-                       /* Data[1].ctlEdges[4].bChannel */ FREQ2FBIN(5520, 0),
-                       /* Data[1].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
-                       /* Data[1].ctlEdges[6].bChannel */ FREQ2FBIN(5745, 0),
-                       /* Data[1].ctlEdges[7].bChannel */ FREQ2FBIN(5825, 0)
-               },
-
-               {
-                       /* Data[2].ctlEdges[0].bChannel */ FREQ2FBIN(5190, 0),
-                       /* Data[2].ctlEdges[1].bChannel */ FREQ2FBIN(5230, 0),
-                       /* Data[2].ctlEdges[2].bChannel */ FREQ2FBIN(5270, 0),
-                       /* Data[2].ctlEdges[3].bChannel */ FREQ2FBIN(5310, 0),
-                       /* Data[2].ctlEdges[4].bChannel */ FREQ2FBIN(5510, 0),
-                       /* Data[2].ctlEdges[5].bChannel */ FREQ2FBIN(5550, 0),
-                       /* Data[2].ctlEdges[6].bChannel */ FREQ2FBIN(5670, 0),
-                       /* Data[2].ctlEdges[7].bChannel */ FREQ2FBIN(5755, 0)
-               },
-
-               {
-                       /* Data[3].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
-                       /* Data[3].ctlEdges[1].bChannel */ FREQ2FBIN(5200, 0),
-                       /* Data[3].ctlEdges[2].bChannel */ FREQ2FBIN(5260, 0),
-                       /* Data[3].ctlEdges[3].bChannel */ FREQ2FBIN(5320, 0),
-                       /* Data[3].ctlEdges[4].bChannel */ FREQ2FBIN(5500, 0),
-                       /* Data[3].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
-                       /* Data[3].ctlEdges[6].bChannel */ 0xFF,
-                       /* Data[3].ctlEdges[7].bChannel */ 0xFF,
-               },
-
-               {
-                       /* Data[4].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
-                       /* Data[4].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
-                       /* Data[4].ctlEdges[2].bChannel */ FREQ2FBIN(5500, 0),
-                       /* Data[4].ctlEdges[3].bChannel */ FREQ2FBIN(5700, 0),
-                       /* Data[4].ctlEdges[4].bChannel */ 0xFF,
-                       /* Data[4].ctlEdges[5].bChannel */ 0xFF,
-                       /* Data[4].ctlEdges[6].bChannel */ 0xFF,
-                       /* Data[4].ctlEdges[7].bChannel */ 0xFF,
-               },
-
-               {
-                       /* Data[5].ctlEdges[0].bChannel */ FREQ2FBIN(5190, 0),
-                       /* Data[5].ctlEdges[1].bChannel */ FREQ2FBIN(5270, 0),
-                       /* Data[5].ctlEdges[2].bChannel */ FREQ2FBIN(5310, 0),
-                       /* Data[5].ctlEdges[3].bChannel */ FREQ2FBIN(5510, 0),
-                       /* Data[5].ctlEdges[4].bChannel */ FREQ2FBIN(5590, 0),
-                       /* Data[5].ctlEdges[5].bChannel */ FREQ2FBIN(5670, 0),
-                       /* Data[5].ctlEdges[6].bChannel */ 0xFF,
-                       /* Data[5].ctlEdges[7].bChannel */ 0xFF
-               },
-
-               {
-                       /* Data[6].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
-                       /* Data[6].ctlEdges[1].bChannel */ FREQ2FBIN(5200, 0),
-                       /* Data[6].ctlEdges[2].bChannel */ FREQ2FBIN(5220, 0),
-                       /* Data[6].ctlEdges[3].bChannel */ FREQ2FBIN(5260, 0),
-                       /* Data[6].ctlEdges[4].bChannel */ FREQ2FBIN(5500, 0),
-                       /* Data[6].ctlEdges[5].bChannel */ FREQ2FBIN(5600, 0),
-                       /* Data[6].ctlEdges[6].bChannel */ FREQ2FBIN(5700, 0),
-                       /* Data[6].ctlEdges[7].bChannel */ FREQ2FBIN(5745, 0)
-               },
-
-               {
-                       /* Data[7].ctlEdges[0].bChannel */ FREQ2FBIN(5180, 0),
-                       /* Data[7].ctlEdges[1].bChannel */ FREQ2FBIN(5260, 0),
-                       /* Data[7].ctlEdges[2].bChannel */ FREQ2FBIN(5320, 0),
-                       /* Data[7].ctlEdges[3].bChannel */ FREQ2FBIN(5500, 0),
-                       /* Data[7].ctlEdges[4].bChannel */ FREQ2FBIN(5560, 0),
-                       /* Data[7].ctlEdges[5].bChannel */ FREQ2FBIN(5700, 0),
-                       /* Data[7].ctlEdges[6].bChannel */ FREQ2FBIN(5745, 0),
-                       /* Data[7].ctlEdges[7].bChannel */ FREQ2FBIN(5825, 0)
-               },
-
-               {
-                       /* Data[8].ctlEdges[0].bChannel */ FREQ2FBIN(5190, 0),
-                       /* Data[8].ctlEdges[1].bChannel */ FREQ2FBIN(5230, 0),
-                       /* Data[8].ctlEdges[2].bChannel */ FREQ2FBIN(5270, 0),
-                       /* Data[8].ctlEdges[3].bChannel */ FREQ2FBIN(5510, 0),
-                       /* Data[8].ctlEdges[4].bChannel */ FREQ2FBIN(5550, 0),
-                       /* Data[8].ctlEdges[5].bChannel */ FREQ2FBIN(5670, 0),
-                       /* Data[8].ctlEdges[6].bChannel */ FREQ2FBIN(5755, 0),
-                       /* Data[8].ctlEdges[7].bChannel */ FREQ2FBIN(5795, 0)
-               }
-        },
-       .ctlPowerData_5G = {
-               {
-                       {
-                               CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
-                               CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
-                       }
-               },
-               {
-                       {
-                               CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
-                               CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
-                       }
-               },
-               {
-                       {
-                               CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 1),
-                               CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
-                       }
-               },
-               {
-                       {
-                               CTL(60, 0), CTL(60, 1), CTL(60, 1), CTL(60, 0),
-                               CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0),
-                       }
-               },
-               {
-                       {
-                               CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
-                               CTL(60, 0), CTL(60, 0), CTL(60, 0), CTL(60, 0),
-                       }
-               },
-               {
-                       {
-                               CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
-                               CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0),
-                       }
-               },
-               {
-                       {
-                               CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
-                               CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 1),
-                       }
-               },
-               {
-                       {
-                               CTL(60, 1), CTL(60, 1), CTL(60, 0), CTL(60, 1),
-                               CTL(60, 1), CTL(60, 1), CTL(60, 1), CTL(60, 0),
-                       }
-               },
-               {
-                       {
-                               CTL(60, 1), CTL(60, 0), CTL(60, 1), CTL(60, 1),
-                               CTL(60, 1), CTL(60, 1), CTL(60, 0), CTL(60, 1),
-                       }
-               },
-        }
-};
-
-static u16 ath9k_hw_fbin2freq(u8 fbin, bool is2GHz)
-{
-       if (fbin == AR9300_BCHAN_UNUSED)
-               return fbin;
-
-       return (u16) ((is2GHz) ? (2300 + fbin) : (4800 + 5 * fbin));
-}
-
-static int ath9k_hw_ar9300_check_eeprom(struct ath_hw *ah)
-{
-       return 0;
-}
-
-static u32 ath9k_hw_ar9300_get_eeprom(struct ath_hw *ah,
-                                     enum eeprom_param param)
-{
-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
-       struct ar9300_base_eep_hdr *pBase = &eep->baseEepHeader;
-
-       switch (param) {
-       case EEP_MAC_LSW:
-               return eep->macAddr[0] << 8 | eep->macAddr[1];
-       case EEP_MAC_MID:
-               return eep->macAddr[2] << 8 | eep->macAddr[3];
-       case EEP_MAC_MSW:
-               return eep->macAddr[4] << 8 | eep->macAddr[5];
-       case EEP_REG_0:
-               return le16_to_cpu(pBase->regDmn[0]);
-       case EEP_REG_1:
-               return le16_to_cpu(pBase->regDmn[1]);
-       case EEP_OP_CAP:
-               return pBase->deviceCap;
-       case EEP_OP_MODE:
-               return pBase->opCapFlags.opFlags;
-       case EEP_RF_SILENT:
-               return pBase->rfSilent;
-       case EEP_TX_MASK:
-               return (pBase->txrxMask >> 4) & 0xf;
-       case EEP_RX_MASK:
-               return pBase->txrxMask & 0xf;
-       case EEP_DRIVE_STRENGTH:
-#define AR9300_EEP_BASE_DRIV_STRENGTH  0x1
-               return pBase->miscConfiguration & AR9300_EEP_BASE_DRIV_STRENGTH;
-       case EEP_INTERNAL_REGULATOR:
-               /* Bit 4 is internal regulator flag */
-               return (pBase->featureEnable & 0x10) >> 4;
-       case EEP_SWREG:
-               return le32_to_cpu(pBase->swreg);
-       case EEP_PAPRD:
-               return !!(pBase->featureEnable & BIT(5));
-       default:
-               return 0;
-       }
-}
-
-static bool ar9300_eeprom_read_byte(struct ath_common *common, int address,
-                                   u8 *buffer)
-{
-       u16 val;
-
-       if (unlikely(!ath9k_hw_nvram_read(common, address / 2, &val)))
-               return false;
-
-       *buffer = (val >> (8 * (address % 2))) & 0xff;
-       return true;
-}
-
-static bool ar9300_eeprom_read_word(struct ath_common *common, int address,
-                                   u8 *buffer)
-{
-       u16 val;
-
-       if (unlikely(!ath9k_hw_nvram_read(common, address / 2, &val)))
-               return false;
-
-       buffer[0] = val >> 8;
-       buffer[1] = val & 0xff;
-
-       return true;
-}
-
-static bool ar9300_read_eeprom(struct ath_hw *ah, int address, u8 *buffer,
-                              int count)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-       int i;
-
-       if ((address < 0) || ((address + count) / 2 > AR9300_EEPROM_SIZE - 1)) {
-               ath_print(common, ATH_DBG_EEPROM,
-                         "eeprom address not in range\n");
-               return false;
-       }
-
-       /*
-        * Since we're reading the bytes in reverse order from a little-endian
-        * word stream, an even address means we only use the lower half of
-        * the 16-bit word at that address
-        */
-       if (address % 2 == 0) {
-               if (!ar9300_eeprom_read_byte(common, address--, buffer++))
-                       goto error;
-
-               count--;
-       }
-
-       for (i = 0; i < count / 2; i++) {
-               if (!ar9300_eeprom_read_word(common, address, buffer))
-                       goto error;
-
-               address -= 2;
-               buffer += 2;
-       }
-
-       if (count % 2)
-               if (!ar9300_eeprom_read_byte(common, address, buffer))
-                       goto error;
-
-       return true;
-
-error:
-       ath_print(common, ATH_DBG_EEPROM,
-                 "unable to read eeprom region at offset %d\n", address);
-       return false;
-}
-
-static void ar9300_comp_hdr_unpack(u8 *best, int *code, int *reference,
-                                  int *length, int *major, int *minor)
-{
-       unsigned long value[4];
-
-       value[0] = best[0];
-       value[1] = best[1];
-       value[2] = best[2];
-       value[3] = best[3];
-       *code = ((value[0] >> 5) & 0x0007);
-       *reference = (value[0] & 0x001f) | ((value[1] >> 2) & 0x0020);
-       *length = ((value[1] << 4) & 0x07f0) | ((value[2] >> 4) & 0x000f);
-       *major = (value[2] & 0x000f);
-       *minor = (value[3] & 0x00ff);
-}
-
-static u16 ar9300_comp_cksum(u8 *data, int dsize)
-{
-       int it, checksum = 0;
-
-       for (it = 0; it < dsize; it++) {
-               checksum += data[it];
-               checksum &= 0xffff;
-       }
-
-       return checksum;
-}
-
-static bool ar9300_uncompress_block(struct ath_hw *ah,
-                                   u8 *mptr,
-                                   int mdataSize,
-                                   u8 *block,
-                                   int size)
-{
-       int it;
-       int spot;
-       int offset;
-       int length;
-       struct ath_common *common = ath9k_hw_common(ah);
-
-       spot = 0;
-
-       for (it = 0; it < size; it += (length+2)) {
-               offset = block[it];
-               offset &= 0xff;
-               spot += offset;
-               length = block[it+1];
-               length &= 0xff;
-
-               if (length > 0 && spot >= 0 && spot+length <= mdataSize) {
-                       ath_print(common, ATH_DBG_EEPROM,
-                                 "Restore at %d: spot=%d "
-                                 "offset=%d length=%d\n",
-                                  it, spot, offset, length);
-                       memcpy(&mptr[spot], &block[it+2], length);
-                       spot += length;
-               } else if (length > 0) {
-                       ath_print(common, ATH_DBG_EEPROM,
-                                 "Bad restore at %d: spot=%d "
-                                 "offset=%d length=%d\n",
-                                 it, spot, offset, length);
-                       return false;
-               }
-       }
-       return true;
-}
-
-static int ar9300_compress_decision(struct ath_hw *ah,
-                                   int it,
-                                   int code,
-                                   int reference,
-                                   u8 *mptr,
-                                   u8 *word, int length, int mdata_size)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-       u8 *dptr;
-
-       switch (code) {
-       case _CompressNone:
-               if (length != mdata_size) {
-                       ath_print(common, ATH_DBG_EEPROM,
-                                 "EEPROM structure size mismatch"
-                                 "memory=%d eeprom=%d\n", mdata_size, length);
-                       return -1;
-               }
-               memcpy(mptr, (u8 *) (word + COMP_HDR_LEN), length);
-               ath_print(common, ATH_DBG_EEPROM, "restored eeprom %d:"
-                         " uncompressed, length %d\n", it, length);
-               break;
-       case _CompressBlock:
-               if (reference == 0) {
-                       dptr = mptr;
-               } else {
-                       if (reference != 2) {
-                               ath_print(common, ATH_DBG_EEPROM,
-                                         "cant find reference eeprom"
-                                         "struct %d\n", reference);
-                               return -1;
-                       }
-                       memcpy(mptr, &ar9300_default, mdata_size);
-               }
-               ath_print(common, ATH_DBG_EEPROM,
-                         "restore eeprom %d: block, reference %d,"
-                         " length %d\n", it, reference, length);
-               ar9300_uncompress_block(ah, mptr, mdata_size,
-                                       (u8 *) (word + COMP_HDR_LEN), length);
-               break;
-       default:
-               ath_print(common, ATH_DBG_EEPROM, "unknown compression"
-                         " code %d\n", code);
-               return -1;
-       }
-       return 0;
-}
-
-/*
- * Read the configuration data from the eeprom.
- * The data can be put in any specified memory buffer.
- *
- * Returns -1 on error.
- * Returns address of next memory location on success.
- */
-static int ar9300_eeprom_restore_internal(struct ath_hw *ah,
-                                         u8 *mptr, int mdata_size)
-{
-#define MDEFAULT 15
-#define MSTATE 100
-       int cptr;
-       u8 *word;
-       int code;
-       int reference, length, major, minor;
-       int osize;
-       int it;
-       u16 checksum, mchecksum;
-       struct ath_common *common = ath9k_hw_common(ah);
-
-       word = kzalloc(2048, GFP_KERNEL);
-       if (!word)
-               return -1;
-
-       memcpy(mptr, &ar9300_default, mdata_size);
-
-       cptr = AR9300_BASE_ADDR;
-       for (it = 0; it < MSTATE; it++) {
-               if (!ar9300_read_eeprom(ah, cptr, word, COMP_HDR_LEN))
-                       goto fail;
-
-               if ((word[0] == 0 && word[1] == 0 && word[2] == 0 &&
-                    word[3] == 0) || (word[0] == 0xff && word[1] == 0xff
-                                      && word[2] == 0xff && word[3] == 0xff))
-                       break;
-
-               ar9300_comp_hdr_unpack(word, &code, &reference,
-                                      &length, &major, &minor);
-               ath_print(common, ATH_DBG_EEPROM,
-                         "Found block at %x: code=%d ref=%d"
-                         "length=%d major=%d minor=%d\n", cptr, code,
-                         reference, length, major, minor);
-               if (length >= 1024) {
-                       ath_print(common, ATH_DBG_EEPROM,
-                                 "Skipping bad header\n");
-                       cptr -= COMP_HDR_LEN;
-                       continue;
-               }
-
-               osize = length;
-               ar9300_read_eeprom(ah, cptr, word,
-                                  COMP_HDR_LEN + osize + COMP_CKSUM_LEN);
-               checksum = ar9300_comp_cksum(&word[COMP_HDR_LEN], length);
-               mchecksum = word[COMP_HDR_LEN + osize] |
-                   (word[COMP_HDR_LEN + osize + 1] << 8);
-               ath_print(common, ATH_DBG_EEPROM,
-                         "checksum %x %x\n", checksum, mchecksum);
-               if (checksum == mchecksum) {
-                       ar9300_compress_decision(ah, it, code, reference, mptr,
-                                                word, length, mdata_size);
-               } else {
-                       ath_print(common, ATH_DBG_EEPROM,
-                                 "skipping block with bad checksum\n");
-               }
-               cptr -= (COMP_HDR_LEN + osize + COMP_CKSUM_LEN);
-       }
-
-       kfree(word);
-       return cptr;
-
-fail:
-       kfree(word);
-       return -1;
-}
-
-/*
- * Restore the configuration structure by reading the eeprom.
- * This function destroys any existing in-memory structure
- * content.
- */
-static bool ath9k_hw_ar9300_fill_eeprom(struct ath_hw *ah)
-{
-       u8 *mptr = (u8 *) &ah->eeprom.ar9300_eep;
-
-       if (ar9300_eeprom_restore_internal(ah, mptr,
-                       sizeof(struct ar9300_eeprom)) < 0)
-               return false;
-
-       return true;
-}
-
-/* XXX: review hardware docs */
-static int ath9k_hw_ar9300_get_eeprom_ver(struct ath_hw *ah)
-{
-       return ah->eeprom.ar9300_eep.eepromVersion;
-}
-
-/* XXX: could be read from the eepromVersion, not sure yet */
-static int ath9k_hw_ar9300_get_eeprom_rev(struct ath_hw *ah)
-{
-       return 0;
-}
-
-static u8 ath9k_hw_ar9300_get_num_ant_config(struct ath_hw *ah,
-                                            enum ieee80211_band freq_band)
-{
-       return 1;
-}
-
-static u32 ath9k_hw_ar9300_get_eeprom_antenna_cfg(struct ath_hw *ah,
-                                                 struct ath9k_channel *chan)
-{
-       return -EINVAL;
-}
-
-static s32 ar9003_hw_xpa_bias_level_get(struct ath_hw *ah, bool is2ghz)
-{
-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
-
-       if (is2ghz)
-               return eep->modalHeader2G.xpaBiasLvl;
-       else
-               return eep->modalHeader5G.xpaBiasLvl;
-}
-
-static void ar9003_hw_xpa_bias_level_apply(struct ath_hw *ah, bool is2ghz)
-{
-       int bias = ar9003_hw_xpa_bias_level_get(ah, is2ghz);
-       REG_RMW_FIELD(ah, AR_CH0_TOP, AR_CH0_TOP_XPABIASLVL, (bias & 0x3));
-       REG_RMW_FIELD(ah, AR_CH0_THERM, AR_CH0_THERM_SPARE,
-                     ((bias >> 2) & 0x3));
-}
-
-static u32 ar9003_hw_ant_ctrl_common_get(struct ath_hw *ah, bool is2ghz)
-{
-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
-       __le32 val;
-
-       if (is2ghz)
-               val = eep->modalHeader2G.antCtrlCommon;
-       else
-               val = eep->modalHeader5G.antCtrlCommon;
-       return le32_to_cpu(val);
-}
-
-static u32 ar9003_hw_ant_ctrl_common_2_get(struct ath_hw *ah, bool is2ghz)
-{
-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
-       __le32 val;
-
-       if (is2ghz)
-               val = eep->modalHeader2G.antCtrlCommon2;
-       else
-               val = eep->modalHeader5G.antCtrlCommon2;
-       return le32_to_cpu(val);
-}
-
-static u16 ar9003_hw_ant_ctrl_chain_get(struct ath_hw *ah,
-                                       int chain,
-                                       bool is2ghz)
-{
-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
-       __le16 val = 0;
-
-       if (chain >= 0 && chain < AR9300_MAX_CHAINS) {
-               if (is2ghz)
-                       val = eep->modalHeader2G.antCtrlChain[chain];
-               else
-                       val = eep->modalHeader5G.antCtrlChain[chain];
-       }
-
-       return le16_to_cpu(val);
-}
-
-static void ar9003_hw_ant_ctrl_apply(struct ath_hw *ah, bool is2ghz)
-{
-       u32 value = ar9003_hw_ant_ctrl_common_get(ah, is2ghz);
-       REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM, AR_SWITCH_TABLE_COM_ALL, value);
-
-       value = ar9003_hw_ant_ctrl_common_2_get(ah, is2ghz);
-       REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM_2, AR_SWITCH_TABLE_COM2_ALL, value);
-
-       value = ar9003_hw_ant_ctrl_chain_get(ah, 0, is2ghz);
-       REG_RMW_FIELD(ah, AR_PHY_SWITCH_CHAIN_0, AR_SWITCH_TABLE_ALL, value);
-
-       value = ar9003_hw_ant_ctrl_chain_get(ah, 1, is2ghz);
-       REG_RMW_FIELD(ah, AR_PHY_SWITCH_CHAIN_1, AR_SWITCH_TABLE_ALL, value);
-
-       value = ar9003_hw_ant_ctrl_chain_get(ah, 2, is2ghz);
-       REG_RMW_FIELD(ah, AR_PHY_SWITCH_CHAIN_2, AR_SWITCH_TABLE_ALL, value);
-}
-
-static void ar9003_hw_drive_strength_apply(struct ath_hw *ah)
-{
-       int drive_strength;
-       unsigned long reg;
-
-       drive_strength = ath9k_hw_ar9300_get_eeprom(ah, EEP_DRIVE_STRENGTH);
-
-       if (!drive_strength)
-               return;
-
-       reg = REG_READ(ah, AR_PHY_65NM_CH0_BIAS1);
-       reg &= ~0x00ffffc0;
-       reg |= 0x5 << 21;
-       reg |= 0x5 << 18;
-       reg |= 0x5 << 15;
-       reg |= 0x5 << 12;
-       reg |= 0x5 << 9;
-       reg |= 0x5 << 6;
-       REG_WRITE(ah, AR_PHY_65NM_CH0_BIAS1, reg);
-
-       reg = REG_READ(ah, AR_PHY_65NM_CH0_BIAS2);
-       reg &= ~0xffffffe0;
-       reg |= 0x5 << 29;
-       reg |= 0x5 << 26;
-       reg |= 0x5 << 23;
-       reg |= 0x5 << 20;
-       reg |= 0x5 << 17;
-       reg |= 0x5 << 14;
-       reg |= 0x5 << 11;
-       reg |= 0x5 << 8;
-       reg |= 0x5 << 5;
-       REG_WRITE(ah, AR_PHY_65NM_CH0_BIAS2, reg);
-
-       reg = REG_READ(ah, AR_PHY_65NM_CH0_BIAS4);
-       reg &= ~0xff800000;
-       reg |= 0x5 << 29;
-       reg |= 0x5 << 26;
-       reg |= 0x5 << 23;
-       REG_WRITE(ah, AR_PHY_65NM_CH0_BIAS4, reg);
-}
-
-static void ar9003_hw_internal_regulator_apply(struct ath_hw *ah)
-{
-       int internal_regulator =
-               ath9k_hw_ar9300_get_eeprom(ah, EEP_INTERNAL_REGULATOR);
-
-       if (internal_regulator) {
-               /* Internal regulator is ON. Write swreg register. */
-               int swreg = ath9k_hw_ar9300_get_eeprom(ah, EEP_SWREG);
-               REG_WRITE(ah, AR_RTC_REG_CONTROL1,
-               REG_READ(ah, AR_RTC_REG_CONTROL1) &
-                        (~AR_RTC_REG_CONTROL1_SWREG_PROGRAM));
-               REG_WRITE(ah, AR_RTC_REG_CONTROL0, swreg);
-               /* Set REG_CONTROL1.SWREG_PROGRAM */
-               REG_WRITE(ah, AR_RTC_REG_CONTROL1,
-                         REG_READ(ah,
-                                  AR_RTC_REG_CONTROL1) |
-                                  AR_RTC_REG_CONTROL1_SWREG_PROGRAM);
-       } else {
-               REG_WRITE(ah, AR_RTC_SLEEP_CLK,
-                         (REG_READ(ah,
-                                   AR_RTC_SLEEP_CLK) |
-                                   AR_RTC_FORCE_SWREG_PRD));
-       }
-}
-
-static void ath9k_hw_ar9300_set_board_values(struct ath_hw *ah,
-                                            struct ath9k_channel *chan)
-{
-       ar9003_hw_xpa_bias_level_apply(ah, IS_CHAN_2GHZ(chan));
-       ar9003_hw_ant_ctrl_apply(ah, IS_CHAN_2GHZ(chan));
-       ar9003_hw_drive_strength_apply(ah);
-       ar9003_hw_internal_regulator_apply(ah);
-}
-
-static void ath9k_hw_ar9300_set_addac(struct ath_hw *ah,
-                                     struct ath9k_channel *chan)
-{
-}
-
-/*
- * Returns the interpolated y value corresponding to the specified x value
- * from the np ordered pairs of data (px,py).
- * The pairs do not have to be in any order.
- * If the specified x value is less than any of the px,
- * the returned y value is equal to the py for the lowest px.
- * If the specified x value is greater than any of the px,
- * the returned y value is equal to the py for the highest px.
- */
-static int ar9003_hw_power_interpolate(int32_t x,
-                                      int32_t *px, int32_t *py, u_int16_t np)
-{
-       int ip = 0;
-       int lx = 0, ly = 0, lhave = 0;
-       int hx = 0, hy = 0, hhave = 0;
-       int dx = 0;
-       int y = 0;
-
-       lhave = 0;
-       hhave = 0;
-
-       /* identify best lower and higher x calibration measurement */
-       for (ip = 0; ip < np; ip++) {
-               dx = x - px[ip];
-
-               /* this measurement is higher than our desired x */
-               if (dx <= 0) {
-                       if (!hhave || dx > (x - hx)) {
-                               /* new best higher x measurement */
-                               hx = px[ip];
-                               hy = py[ip];
-                               hhave = 1;
-                       }
-               }
-               /* this measurement is lower than our desired x */
-               if (dx >= 0) {
-                       if (!lhave || dx < (x - lx)) {
-                               /* new best lower x measurement */
-                               lx = px[ip];
-                               ly = py[ip];
-                               lhave = 1;
-                       }
-               }
-       }
-
-       /* the low x is good */
-       if (lhave) {
-               /* so is the high x */
-               if (hhave) {
-                       /* they're the same, so just pick one */
-                       if (hx == lx)
-                               y = ly;
-                       else    /* interpolate  */
-                               y = ly + (((x - lx) * (hy - ly)) / (hx - lx));
-               } else          /* only low is good, use it */
-                       y = ly;
-       } else if (hhave)       /* only high is good, use it */
-               y = hy;
-       else /* nothing is good,this should never happen unless np=0, ???? */
-               y = -(1 << 30);
-       return y;
-}
-
-static u8 ar9003_hw_eeprom_get_tgt_pwr(struct ath_hw *ah,
-                                      u16 rateIndex, u16 freq, bool is2GHz)
-{
-       u16 numPiers, i;
-       s32 targetPowerArray[AR9300_NUM_5G_20_TARGET_POWERS];
-       s32 freqArray[AR9300_NUM_5G_20_TARGET_POWERS];
-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
-       struct cal_tgt_pow_legacy *pEepromTargetPwr;
-       u8 *pFreqBin;
-
-       if (is2GHz) {
-               numPiers = AR9300_NUM_2G_20_TARGET_POWERS;
-               pEepromTargetPwr = eep->calTargetPower2G;
-               pFreqBin = eep->calTarget_freqbin_2G;
-       } else {
-               numPiers = AR9300_NUM_5G_20_TARGET_POWERS;
-               pEepromTargetPwr = eep->calTargetPower5G;
-               pFreqBin = eep->calTarget_freqbin_5G;
-       }
-
-       /*
-        * create array of channels and targetpower from
-        * targetpower piers stored on eeprom
-        */
-       for (i = 0; i < numPiers; i++) {
-               freqArray[i] = FBIN2FREQ(pFreqBin[i], is2GHz);
-               targetPowerArray[i] = pEepromTargetPwr[i].tPow2x[rateIndex];
-       }
-
-       /* interpolate to get target power for given frequency */
-       return (u8) ar9003_hw_power_interpolate((s32) freq,
-                                                freqArray,
-                                                targetPowerArray, numPiers);
-}
-
-static u8 ar9003_hw_eeprom_get_ht20_tgt_pwr(struct ath_hw *ah,
-                                           u16 rateIndex,
-                                           u16 freq, bool is2GHz)
-{
-       u16 numPiers, i;
-       s32 targetPowerArray[AR9300_NUM_5G_20_TARGET_POWERS];
-       s32 freqArray[AR9300_NUM_5G_20_TARGET_POWERS];
-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
-       struct cal_tgt_pow_ht *pEepromTargetPwr;
-       u8 *pFreqBin;
-
-       if (is2GHz) {
-               numPiers = AR9300_NUM_2G_20_TARGET_POWERS;
-               pEepromTargetPwr = eep->calTargetPower2GHT20;
-               pFreqBin = eep->calTarget_freqbin_2GHT20;
-       } else {
-               numPiers = AR9300_NUM_5G_20_TARGET_POWERS;
-               pEepromTargetPwr = eep->calTargetPower5GHT20;
-               pFreqBin = eep->calTarget_freqbin_5GHT20;
-       }
-
-       /*
-        * create array of channels and targetpower
-        * from targetpower piers stored on eeprom
-        */
-       for (i = 0; i < numPiers; i++) {
-               freqArray[i] = FBIN2FREQ(pFreqBin[i], is2GHz);
-               targetPowerArray[i] = pEepromTargetPwr[i].tPow2x[rateIndex];
-       }
-
-       /* interpolate to get target power for given frequency */
-       return (u8) ar9003_hw_power_interpolate((s32) freq,
-                                                freqArray,
-                                                targetPowerArray, numPiers);
-}
-
-static u8 ar9003_hw_eeprom_get_ht40_tgt_pwr(struct ath_hw *ah,
-                                           u16 rateIndex,
-                                           u16 freq, bool is2GHz)
-{
-       u16 numPiers, i;
-       s32 targetPowerArray[AR9300_NUM_5G_40_TARGET_POWERS];
-       s32 freqArray[AR9300_NUM_5G_40_TARGET_POWERS];
-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
-       struct cal_tgt_pow_ht *pEepromTargetPwr;
-       u8 *pFreqBin;
-
-       if (is2GHz) {
-               numPiers = AR9300_NUM_2G_40_TARGET_POWERS;
-               pEepromTargetPwr = eep->calTargetPower2GHT40;
-               pFreqBin = eep->calTarget_freqbin_2GHT40;
-       } else {
-               numPiers = AR9300_NUM_5G_40_TARGET_POWERS;
-               pEepromTargetPwr = eep->calTargetPower5GHT40;
-               pFreqBin = eep->calTarget_freqbin_5GHT40;
-       }
-
-       /*
-        * create array of channels and targetpower from
-        * targetpower piers stored on eeprom
-        */
-       for (i = 0; i < numPiers; i++) {
-               freqArray[i] = FBIN2FREQ(pFreqBin[i], is2GHz);
-               targetPowerArray[i] = pEepromTargetPwr[i].tPow2x[rateIndex];
-       }
-
-       /* interpolate to get target power for given frequency */
-       return (u8) ar9003_hw_power_interpolate((s32) freq,
-                                                freqArray,
-                                                targetPowerArray, numPiers);
-}
-
-static u8 ar9003_hw_eeprom_get_cck_tgt_pwr(struct ath_hw *ah,
-                                          u16 rateIndex, u16 freq)
-{
-       u16 numPiers = AR9300_NUM_2G_CCK_TARGET_POWERS, i;
-       s32 targetPowerArray[AR9300_NUM_2G_CCK_TARGET_POWERS];
-       s32 freqArray[AR9300_NUM_2G_CCK_TARGET_POWERS];
-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
-       struct cal_tgt_pow_legacy *pEepromTargetPwr = eep->calTargetPowerCck;
-       u8 *pFreqBin = eep->calTarget_freqbin_Cck;
-
-       /*
-        * create array of channels and targetpower from
-        * targetpower piers stored on eeprom
-        */
-       for (i = 0; i < numPiers; i++) {
-               freqArray[i] = FBIN2FREQ(pFreqBin[i], 1);
-               targetPowerArray[i] = pEepromTargetPwr[i].tPow2x[rateIndex];
-       }
-
-       /* interpolate to get target power for given frequency */
-       return (u8) ar9003_hw_power_interpolate((s32) freq,
-                                                freqArray,
-                                                targetPowerArray, numPiers);
-}
-
-/* Set tx power registers to array of values passed in */
-static int ar9003_hw_tx_power_regwrite(struct ath_hw *ah, u8 * pPwrArray)
-{
-#define POW_SM(_r, _s)     (((_r) & 0x3f) << (_s))
-       /* make sure forced gain is not set */
-       REG_WRITE(ah, 0xa458, 0);
-
-       /* Write the OFDM power per rate set */
-
-       /* 6 (LSB), 9, 12, 18 (MSB) */
-       REG_WRITE(ah, 0xa3c0,
-                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_6_24], 24) |
-                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_6_24], 16) |
-                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_6_24], 8) |
-                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_6_24], 0));
-
-       /* 24 (LSB), 36, 48, 54 (MSB) */
-       REG_WRITE(ah, 0xa3c4,
-                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_54], 24) |
-                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_48], 16) |
-                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_36], 8) |
-                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_6_24], 0));
-
-       /* Write the CCK power per rate set */
-
-       /* 1L (LSB), reserved, 2L, 2S (MSB) */
-       REG_WRITE(ah, 0xa3c8,
-                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_1L_5L], 24) |
-                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_1L_5L], 16) |
-                 /* POW_SM(txPowerTimes2,  8) | this is reserved for AR9003 */
-                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_1L_5L], 0));
-
-       /* 5.5L (LSB), 5.5S, 11L, 11S (MSB) */
-       REG_WRITE(ah, 0xa3cc,
-                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_11S], 24) |
-                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_11L], 16) |
-                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_5S], 8) |
-                 POW_SM(pPwrArray[ALL_TARGET_LEGACY_1L_5L], 0)
-           );
-
-       /* Write the HT20 power per rate set */
-
-       /* 0/8/16 (LSB), 1-3/9-11/17-19, 4, 5 (MSB) */
-       REG_WRITE(ah, 0xa3d0,
-                 POW_SM(pPwrArray[ALL_TARGET_HT20_5], 24) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT20_4], 16) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT20_1_3_9_11_17_19], 8) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT20_0_8_16], 0)
-           );
-
-       /* 6 (LSB), 7, 12, 13 (MSB) */
-       REG_WRITE(ah, 0xa3d4,
-                 POW_SM(pPwrArray[ALL_TARGET_HT20_13], 24) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT20_12], 16) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT20_7], 8) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT20_6], 0)
-           );
-
-       /* 14 (LSB), 15, 20, 21 */
-       REG_WRITE(ah, 0xa3e4,
-                 POW_SM(pPwrArray[ALL_TARGET_HT20_21], 24) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT20_20], 16) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT20_15], 8) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT20_14], 0)
-           );
-
-       /* Mixed HT20 and HT40 rates */
-
-       /* HT20 22 (LSB), HT20 23, HT40 22, HT40 23 (MSB) */
-       REG_WRITE(ah, 0xa3e8,
-                 POW_SM(pPwrArray[ALL_TARGET_HT40_23], 24) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT40_22], 16) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT20_23], 8) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT20_22], 0)
-           );
-
-       /*
-        * Write the HT40 power per rate set
-        * correct PAR difference between HT40 and HT20/LEGACY
-        * 0/8/16 (LSB), 1-3/9-11/17-19, 4, 5 (MSB)
-        */
-       REG_WRITE(ah, 0xa3d8,
-                 POW_SM(pPwrArray[ALL_TARGET_HT40_5], 24) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT40_4], 16) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT40_1_3_9_11_17_19], 8) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT40_0_8_16], 0)
-           );
-
-       /* 6 (LSB), 7, 12, 13 (MSB) */
-       REG_WRITE(ah, 0xa3dc,
-                 POW_SM(pPwrArray[ALL_TARGET_HT40_13], 24) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT40_12], 16) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT40_7], 8) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT40_6], 0)
-           );
-
-       /* 14 (LSB), 15, 20, 21 */
-       REG_WRITE(ah, 0xa3ec,
-                 POW_SM(pPwrArray[ALL_TARGET_HT40_21], 24) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT40_20], 16) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT40_15], 8) |
-                 POW_SM(pPwrArray[ALL_TARGET_HT40_14], 0)
-           );
-
-       return 0;
-#undef POW_SM
-}
-
-static void ar9003_hw_set_target_power_eeprom(struct ath_hw *ah, u16 freq,
-                                             u8 *targetPowerValT2)
-{
-       /* XXX: hard code for now, need to get from eeprom struct */
-       u8 ht40PowerIncForPdadc = 0;
-       bool is2GHz = false;
-       unsigned int i = 0;
-       struct ath_common *common = ath9k_hw_common(ah);
-
-       if (freq < 4000)
-               is2GHz = true;
-
-       targetPowerValT2[ALL_TARGET_LEGACY_6_24] =
-           ar9003_hw_eeprom_get_tgt_pwr(ah, LEGACY_TARGET_RATE_6_24, freq,
-                                        is2GHz);
-       targetPowerValT2[ALL_TARGET_LEGACY_36] =
-           ar9003_hw_eeprom_get_tgt_pwr(ah, LEGACY_TARGET_RATE_36, freq,
-                                        is2GHz);
-       targetPowerValT2[ALL_TARGET_LEGACY_48] =
-           ar9003_hw_eeprom_get_tgt_pwr(ah, LEGACY_TARGET_RATE_48, freq,
-                                        is2GHz);
-       targetPowerValT2[ALL_TARGET_LEGACY_54] =
-           ar9003_hw_eeprom_get_tgt_pwr(ah, LEGACY_TARGET_RATE_54, freq,
-                                        is2GHz);
-       targetPowerValT2[ALL_TARGET_LEGACY_1L_5L] =
-           ar9003_hw_eeprom_get_cck_tgt_pwr(ah, LEGACY_TARGET_RATE_1L_5L,
-                                            freq);
-       targetPowerValT2[ALL_TARGET_LEGACY_5S] =
-           ar9003_hw_eeprom_get_cck_tgt_pwr(ah, LEGACY_TARGET_RATE_5S, freq);
-       targetPowerValT2[ALL_TARGET_LEGACY_11L] =
-           ar9003_hw_eeprom_get_cck_tgt_pwr(ah, LEGACY_TARGET_RATE_11L, freq);
-       targetPowerValT2[ALL_TARGET_LEGACY_11S] =
-           ar9003_hw_eeprom_get_cck_tgt_pwr(ah, LEGACY_TARGET_RATE_11S, freq);
-       targetPowerValT2[ALL_TARGET_HT20_0_8_16] =
-           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_0_8_16, freq,
-                                             is2GHz);
-       targetPowerValT2[ALL_TARGET_HT20_1_3_9_11_17_19] =
-           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_1_3_9_11_17_19,
-                                             freq, is2GHz);
-       targetPowerValT2[ALL_TARGET_HT20_4] =
-           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_4, freq,
-                                             is2GHz);
-       targetPowerValT2[ALL_TARGET_HT20_5] =
-           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_5, freq,
-                                             is2GHz);
-       targetPowerValT2[ALL_TARGET_HT20_6] =
-           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_6, freq,
-                                             is2GHz);
-       targetPowerValT2[ALL_TARGET_HT20_7] =
-           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_7, freq,
-                                             is2GHz);
-       targetPowerValT2[ALL_TARGET_HT20_12] =
-           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_12, freq,
-                                             is2GHz);
-       targetPowerValT2[ALL_TARGET_HT20_13] =
-           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_13, freq,
-                                             is2GHz);
-       targetPowerValT2[ALL_TARGET_HT20_14] =
-           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_14, freq,
-                                             is2GHz);
-       targetPowerValT2[ALL_TARGET_HT20_15] =
-           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_15, freq,
-                                             is2GHz);
-       targetPowerValT2[ALL_TARGET_HT20_20] =
-           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_20, freq,
-                                             is2GHz);
-       targetPowerValT2[ALL_TARGET_HT20_21] =
-           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_21, freq,
-                                             is2GHz);
-       targetPowerValT2[ALL_TARGET_HT20_22] =
-           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_22, freq,
-                                             is2GHz);
-       targetPowerValT2[ALL_TARGET_HT20_23] =
-           ar9003_hw_eeprom_get_ht20_tgt_pwr(ah, HT_TARGET_RATE_23, freq,
-                                             is2GHz);
-       targetPowerValT2[ALL_TARGET_HT40_0_8_16] =
-           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_0_8_16, freq,
-                                             is2GHz) + ht40PowerIncForPdadc;
-       targetPowerValT2[ALL_TARGET_HT40_1_3_9_11_17_19] =
-           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_1_3_9_11_17_19,
-                                             freq,
-                                             is2GHz) + ht40PowerIncForPdadc;
-       targetPowerValT2[ALL_TARGET_HT40_4] =
-           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_4, freq,
-                                             is2GHz) + ht40PowerIncForPdadc;
-       targetPowerValT2[ALL_TARGET_HT40_5] =
-           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_5, freq,
-                                             is2GHz) + ht40PowerIncForPdadc;
-       targetPowerValT2[ALL_TARGET_HT40_6] =
-           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_6, freq,
-                                             is2GHz) + ht40PowerIncForPdadc;
-       targetPowerValT2[ALL_TARGET_HT40_7] =
-           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_7, freq,
-                                             is2GHz) + ht40PowerIncForPdadc;
-       targetPowerValT2[ALL_TARGET_HT40_12] =
-           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_12, freq,
-                                             is2GHz) + ht40PowerIncForPdadc;
-       targetPowerValT2[ALL_TARGET_HT40_13] =
-           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_13, freq,
-                                             is2GHz) + ht40PowerIncForPdadc;
-       targetPowerValT2[ALL_TARGET_HT40_14] =
-           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_14, freq,
-                                             is2GHz) + ht40PowerIncForPdadc;
-       targetPowerValT2[ALL_TARGET_HT40_15] =
-           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_15, freq,
-                                             is2GHz) + ht40PowerIncForPdadc;
-       targetPowerValT2[ALL_TARGET_HT40_20] =
-           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_20, freq,
-                                             is2GHz) + ht40PowerIncForPdadc;
-       targetPowerValT2[ALL_TARGET_HT40_21] =
-           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_21, freq,
-                                             is2GHz) + ht40PowerIncForPdadc;
-       targetPowerValT2[ALL_TARGET_HT40_22] =
-           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_22, freq,
-                                             is2GHz) + ht40PowerIncForPdadc;
-       targetPowerValT2[ALL_TARGET_HT40_23] =
-           ar9003_hw_eeprom_get_ht40_tgt_pwr(ah, HT_TARGET_RATE_23, freq,
-                                             is2GHz) + ht40PowerIncForPdadc;
-
-       while (i < ar9300RateSize) {
-               ath_print(common, ATH_DBG_EEPROM,
-                         "TPC[%02d] 0x%08x ", i, targetPowerValT2[i]);
-               i++;
-
-               ath_print(common, ATH_DBG_EEPROM,
-                         "TPC[%02d] 0x%08x ", i, targetPowerValT2[i]);
-               i++;
-
-               ath_print(common, ATH_DBG_EEPROM,
-                         "TPC[%02d] 0x%08x ", i, targetPowerValT2[i]);
-               i++;
-
-               ath_print(common, ATH_DBG_EEPROM,
-                         "TPC[%02d] 0x%08x\n", i, targetPowerValT2[i]);
-               i++;
-       }
-}
-
-static int ar9003_hw_cal_pier_get(struct ath_hw *ah,
-                                 int mode,
-                                 int ipier,
-                                 int ichain,
-                                 int *pfrequency,
-                                 int *pcorrection,
-                                 int *ptemperature, int *pvoltage)
-{
-       u8 *pCalPier;
-       struct ar9300_cal_data_per_freq_op_loop *pCalPierStruct;
-       int is2GHz;
-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
-       struct ath_common *common = ath9k_hw_common(ah);
-
-       if (ichain >= AR9300_MAX_CHAINS) {
-               ath_print(common, ATH_DBG_EEPROM,
-                         "Invalid chain index, must be less than %d\n",
-                         AR9300_MAX_CHAINS);
-               return -1;
-       }
-
-       if (mode) {             /* 5GHz */
-               if (ipier >= AR9300_NUM_5G_CAL_PIERS) {
-                       ath_print(common, ATH_DBG_EEPROM,
-                                 "Invalid 5GHz cal pier index, must "
-                                 "be less than %d\n",
-                                 AR9300_NUM_5G_CAL_PIERS);
-                       return -1;
-               }
-               pCalPier = &(eep->calFreqPier5G[ipier]);
-               pCalPierStruct = &(eep->calPierData5G[ichain][ipier]);
-               is2GHz = 0;
-       } else {
-               if (ipier >= AR9300_NUM_2G_CAL_PIERS) {
-                       ath_print(common, ATH_DBG_EEPROM,
-                                 "Invalid 2GHz cal pier index, must "
-                                 "be less than %d\n", AR9300_NUM_2G_CAL_PIERS);
-                       return -1;
-               }
-
-               pCalPier = &(eep->calFreqPier2G[ipier]);
-               pCalPierStruct = &(eep->calPierData2G[ichain][ipier]);
-               is2GHz = 1;
-       }
-
-       *pfrequency = FBIN2FREQ(*pCalPier, is2GHz);
-       *pcorrection = pCalPierStruct->refPower;
-       *ptemperature = pCalPierStruct->tempMeas;
-       *pvoltage = pCalPierStruct->voltMeas;
-
-       return 0;
-}
-
-static int ar9003_hw_power_control_override(struct ath_hw *ah,
-                                           int frequency,
-                                           int *correction,
-                                           int *voltage, int *temperature)
-{
-       int tempSlope = 0;
-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
-
-       REG_RMW(ah, AR_PHY_TPC_11_B0,
-               (correction[0] << AR_PHY_TPC_OLPC_GAIN_DELTA_S),
-               AR_PHY_TPC_OLPC_GAIN_DELTA);
-       REG_RMW(ah, AR_PHY_TPC_11_B1,
-               (correction[1] << AR_PHY_TPC_OLPC_GAIN_DELTA_S),
-               AR_PHY_TPC_OLPC_GAIN_DELTA);
-       REG_RMW(ah, AR_PHY_TPC_11_B2,
-               (correction[2] << AR_PHY_TPC_OLPC_GAIN_DELTA_S),
-               AR_PHY_TPC_OLPC_GAIN_DELTA);
-
-       /* enable open loop power control on chip */
-       REG_RMW(ah, AR_PHY_TPC_6_B0,
-               (3 << AR_PHY_TPC_6_ERROR_EST_MODE_S),
-               AR_PHY_TPC_6_ERROR_EST_MODE);
-       REG_RMW(ah, AR_PHY_TPC_6_B1,
-               (3 << AR_PHY_TPC_6_ERROR_EST_MODE_S),
-               AR_PHY_TPC_6_ERROR_EST_MODE);
-       REG_RMW(ah, AR_PHY_TPC_6_B2,
-               (3 << AR_PHY_TPC_6_ERROR_EST_MODE_S),
-               AR_PHY_TPC_6_ERROR_EST_MODE);
-
-       /*
-        * enable temperature compensation
-        * Need to use register names
-        */
-       if (frequency < 4000)
-               tempSlope = eep->modalHeader2G.tempSlope;
-       else
-               tempSlope = eep->modalHeader5G.tempSlope;
-
-       REG_RMW_FIELD(ah, AR_PHY_TPC_19, AR_PHY_TPC_19_ALPHA_THERM, tempSlope);
-       REG_RMW_FIELD(ah, AR_PHY_TPC_18, AR_PHY_TPC_18_THERM_CAL_VALUE,
-                     temperature[0]);
-
-       return 0;
-}
-
-/* Apply the recorded correction values. */
-static int ar9003_hw_calibration_apply(struct ath_hw *ah, int frequency)
-{
-       int ichain, ipier, npier;
-       int mode;
-       int lfrequency[AR9300_MAX_CHAINS],
-           lcorrection[AR9300_MAX_CHAINS],
-           ltemperature[AR9300_MAX_CHAINS], lvoltage[AR9300_MAX_CHAINS];
-       int hfrequency[AR9300_MAX_CHAINS],
-           hcorrection[AR9300_MAX_CHAINS],
-           htemperature[AR9300_MAX_CHAINS], hvoltage[AR9300_MAX_CHAINS];
-       int fdiff;
-       int correction[AR9300_MAX_CHAINS],
-           voltage[AR9300_MAX_CHAINS], temperature[AR9300_MAX_CHAINS];
-       int pfrequency, pcorrection, ptemperature, pvoltage;
-       struct ath_common *common = ath9k_hw_common(ah);
-
-       mode = (frequency >= 4000);
-       if (mode)
-               npier = AR9300_NUM_5G_CAL_PIERS;
-       else
-               npier = AR9300_NUM_2G_CAL_PIERS;
-
-       for (ichain = 0; ichain < AR9300_MAX_CHAINS; ichain++) {
-               lfrequency[ichain] = 0;
-               hfrequency[ichain] = 100000;
-       }
-       /* identify best lower and higher frequency calibration measurement */
-       for (ichain = 0; ichain < AR9300_MAX_CHAINS; ichain++) {
-               for (ipier = 0; ipier < npier; ipier++) {
-                       if (!ar9003_hw_cal_pier_get(ah, mode, ipier, ichain,
-                                                   &pfrequency, &pcorrection,
-                                                   &ptemperature, &pvoltage)) {
-                               fdiff = frequency - pfrequency;
-
-                               /*
-                                * this measurement is higher than
-                                * our desired frequency
-                                */
-                               if (fdiff <= 0) {
-                                       if (hfrequency[ichain] <= 0 ||
-                                           hfrequency[ichain] >= 100000 ||
-                                           fdiff >
-                                           (frequency - hfrequency[ichain])) {
-                                               /*
-                                                * new best higher
-                                                * frequency measurement
-                                                */
-                                               hfrequency[ichain] = pfrequency;
-                                               hcorrection[ichain] =
-                                                   pcorrection;
-                                               htemperature[ichain] =
-                                                   ptemperature;
-                                               hvoltage[ichain] = pvoltage;
-                                       }
-                               }
-                               if (fdiff >= 0) {
-                                       if (lfrequency[ichain] <= 0
-                                           || fdiff <
-                                           (frequency - lfrequency[ichain])) {
-                                               /*
-                                                * new best lower
-                                                * frequency measurement
-                                                */
-                                               lfrequency[ichain] = pfrequency;
-                                               lcorrection[ichain] =
-                                                   pcorrection;
-                                               ltemperature[ichain] =
-                                                   ptemperature;
-                                               lvoltage[ichain] = pvoltage;
-                                       }
-                               }
-                       }
-               }
-       }
-
-       /* interpolate  */
-       for (ichain = 0; ichain < AR9300_MAX_CHAINS; ichain++) {
-               ath_print(common, ATH_DBG_EEPROM,
-                         "ch=%d f=%d low=%d %d h=%d %d\n",
-                         ichain, frequency, lfrequency[ichain],
-                         lcorrection[ichain], hfrequency[ichain],
-                         hcorrection[ichain]);
-               /* they're the same, so just pick one */
-               if (hfrequency[ichain] == lfrequency[ichain]) {
-                       correction[ichain] = lcorrection[ichain];
-                       voltage[ichain] = lvoltage[ichain];
-                       temperature[ichain] = ltemperature[ichain];
-               }
-               /* the low frequency is good */
-               else if (frequency - lfrequency[ichain] < 1000) {
-                       /* so is the high frequency, interpolate */
-                       if (hfrequency[ichain] - frequency < 1000) {
-
-                               correction[ichain] = lcorrection[ichain] +
-                                   (((frequency - lfrequency[ichain]) *
-                                     (hcorrection[ichain] -
-                                      lcorrection[ichain])) /
-                                    (hfrequency[ichain] - lfrequency[ichain]));
-
-                               temperature[ichain] = ltemperature[ichain] +
-                                   (((frequency - lfrequency[ichain]) *
-                                     (htemperature[ichain] -
-                                      ltemperature[ichain])) /
-                                    (hfrequency[ichain] - lfrequency[ichain]));
-
-                               voltage[ichain] =
-                                   lvoltage[ichain] +
-                                   (((frequency -
-                                      lfrequency[ichain]) * (hvoltage[ichain] -
-                                                             lvoltage[ichain]))
-                                    / (hfrequency[ichain] -
-                                       lfrequency[ichain]));
-                       }
-                       /* only low is good, use it */
-                       else {
-                               correction[ichain] = lcorrection[ichain];
-                               temperature[ichain] = ltemperature[ichain];
-                               voltage[ichain] = lvoltage[ichain];
-                       }
-               }
-               /* only high is good, use it */
-               else if (hfrequency[ichain] - frequency < 1000) {
-                       correction[ichain] = hcorrection[ichain];
-                       temperature[ichain] = htemperature[ichain];
-                       voltage[ichain] = hvoltage[ichain];
-               } else {        /* nothing is good, presume 0???? */
-                       correction[ichain] = 0;
-                       temperature[ichain] = 0;
-                       voltage[ichain] = 0;
-               }
-       }
-
-       ar9003_hw_power_control_override(ah, frequency, correction, voltage,
-                                        temperature);
-
-       ath_print(common, ATH_DBG_EEPROM,
-                 "for frequency=%d, calibration correction = %d %d %d\n",
-                 frequency, correction[0], correction[1], correction[2]);
-
-       return 0;
-}
-
-static u16 ar9003_hw_get_direct_edge_power(struct ar9300_eeprom *eep,
-                                          int idx,
-                                          int edge,
-                                          bool is2GHz)
-{
-       struct cal_ctl_data_2g *ctl_2g = eep->ctlPowerData_2G;
-       struct cal_ctl_data_5g *ctl_5g = eep->ctlPowerData_5G;
-
-       if (is2GHz)
-               return CTL_EDGE_TPOWER(ctl_2g[idx].ctlEdges[edge]);
-       else
-               return CTL_EDGE_TPOWER(ctl_5g[idx].ctlEdges[edge]);
-}
-
-static u16 ar9003_hw_get_indirect_edge_power(struct ar9300_eeprom *eep,
-                                            int idx,
-                                            unsigned int edge,
-                                            u16 freq,
-                                            bool is2GHz)
-{
-       struct cal_ctl_data_2g *ctl_2g = eep->ctlPowerData_2G;
-       struct cal_ctl_data_5g *ctl_5g = eep->ctlPowerData_5G;
-
-       u8 *ctl_freqbin = is2GHz ?
-               &eep->ctl_freqbin_2G[idx][0] :
-               &eep->ctl_freqbin_5G[idx][0];
-
-       if (is2GHz) {
-               if (ath9k_hw_fbin2freq(ctl_freqbin[edge - 1], 1) < freq &&
-                   CTL_EDGE_FLAGS(ctl_2g[idx].ctlEdges[edge - 1]))
-                       return CTL_EDGE_TPOWER(ctl_2g[idx].ctlEdges[edge - 1]);
-       } else {
-               if (ath9k_hw_fbin2freq(ctl_freqbin[edge - 1], 0) < freq &&
-                   CTL_EDGE_FLAGS(ctl_5g[idx].ctlEdges[edge - 1]))
-                       return CTL_EDGE_TPOWER(ctl_5g[idx].ctlEdges[edge - 1]);
-       }
-
-       return AR9300_MAX_RATE_POWER;
-}
-
-/*
- * Find the maximum conformance test limit for the given channel and CTL info
- */
-static u16 ar9003_hw_get_max_edge_power(struct ar9300_eeprom *eep,
-                                       u16 freq, int idx, bool is2GHz)
-{
-       u16 twiceMaxEdgePower = AR9300_MAX_RATE_POWER;
-       u8 *ctl_freqbin = is2GHz ?
-               &eep->ctl_freqbin_2G[idx][0] :
-               &eep->ctl_freqbin_5G[idx][0];
-       u16 num_edges = is2GHz ?
-               AR9300_NUM_BAND_EDGES_2G : AR9300_NUM_BAND_EDGES_5G;
-       unsigned int edge;
-
-       /* Get the edge power */
-       for (edge = 0;
-            (edge < num_edges) && (ctl_freqbin[edge] != AR9300_BCHAN_UNUSED);
-            edge++) {
-               /*
-                * If there's an exact channel match or an inband flag set
-                * on the lower channel use the given rdEdgePower
-                */
-               if (freq == ath9k_hw_fbin2freq(ctl_freqbin[edge], is2GHz)) {
-                       twiceMaxEdgePower =
-                               ar9003_hw_get_direct_edge_power(eep, idx,
-                                                               edge, is2GHz);
-                       break;
-               } else if ((edge > 0) &&
-                          (freq < ath9k_hw_fbin2freq(ctl_freqbin[edge],
-                                                     is2GHz))) {
-                       twiceMaxEdgePower =
-                               ar9003_hw_get_indirect_edge_power(eep, idx,
-                                                                 edge, freq,
-                                                                 is2GHz);
-                       /*
-                        * Leave loop - no more affecting edges possible in
-                        * this monotonic increasing list
-                        */
-                       break;
-               }
-       }
-       return twiceMaxEdgePower;
-}
-
-static void ar9003_hw_set_power_per_rate_table(struct ath_hw *ah,
-                                              struct ath9k_channel *chan,
-                                              u8 *pPwrArray, u16 cfgCtl,
-                                              u8 twiceAntennaReduction,
-                                              u8 twiceMaxRegulatoryPower,
-                                              u16 powerLimit)
-{
-       struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ar9300_eeprom *pEepData = &ah->eeprom.ar9300_eep;
-       u16 twiceMaxEdgePower = AR9300_MAX_RATE_POWER;
-       static const u16 tpScaleReductionTable[5] = {
-               0, 3, 6, 9, AR9300_MAX_RATE_POWER
-       };
-       int i;
-       int16_t  twiceLargestAntenna;
-       u16 scaledPower = 0, minCtlPower, maxRegAllowedPower;
-       u16 ctlModesFor11a[] = {
-               CTL_11A, CTL_5GHT20, CTL_11A_EXT, CTL_5GHT40
-       };
-       u16 ctlModesFor11g[] = {
-               CTL_11B, CTL_11G, CTL_2GHT20, CTL_11B_EXT,
-               CTL_11G_EXT, CTL_2GHT40
-       };
-       u16 numCtlModes, *pCtlMode, ctlMode, freq;
-       struct chan_centers centers;
-       u8 *ctlIndex;
-       u8 ctlNum;
-       u16 twiceMinEdgePower;
-       bool is2ghz = IS_CHAN_2GHZ(chan);
-
-       ath9k_hw_get_channel_centers(ah, chan, &centers);
-
-       /* Compute TxPower reduction due to Antenna Gain */
-       if (is2ghz)
-               twiceLargestAntenna = pEepData->modalHeader2G.antennaGain;
-       else
-               twiceLargestAntenna = pEepData->modalHeader5G.antennaGain;
-
-       twiceLargestAntenna = (int16_t)min((twiceAntennaReduction) -
-                               twiceLargestAntenna, 0);
-
-       /*
-        * scaledPower is the minimum of the user input power level
-        * and the regulatory allowed power level
-        */
-       maxRegAllowedPower = twiceMaxRegulatoryPower + twiceLargestAntenna;
-
-       if (regulatory->tp_scale != ATH9K_TP_SCALE_MAX) {
-               maxRegAllowedPower -=
-                       (tpScaleReductionTable[(regulatory->tp_scale)] * 2);
-       }
-
-       scaledPower = min(powerLimit, maxRegAllowedPower);
-
-       /*
-        * Reduce scaled Power by number of chains active to get
-        * to per chain tx power level
-        */
-       switch (ar5416_get_ntxchains(ah->txchainmask)) {
-       case 1:
-               break;
-       case 2:
-               scaledPower -= REDUCE_SCALED_POWER_BY_TWO_CHAIN;
-               break;
-       case 3:
-               scaledPower -= REDUCE_SCALED_POWER_BY_THREE_CHAIN;
-               break;
-       }
-
-       scaledPower = max((u16)0, scaledPower);
-
-       /*
-        * Get target powers from EEPROM - our baseline for TX Power
-        */
-       if (is2ghz) {
-               /* Setup for CTL modes */
-               /* CTL_11B, CTL_11G, CTL_2GHT20 */
-               numCtlModes =
-                       ARRAY_SIZE(ctlModesFor11g) -
-                                  SUB_NUM_CTL_MODES_AT_2G_40;
-               pCtlMode = ctlModesFor11g;
-               if (IS_CHAN_HT40(chan))
-                       /* All 2G CTL's */
-                       numCtlModes = ARRAY_SIZE(ctlModesFor11g);
-       } else {
-               /* Setup for CTL modes */
-               /* CTL_11A, CTL_5GHT20 */
-               numCtlModes = ARRAY_SIZE(ctlModesFor11a) -
-                                        SUB_NUM_CTL_MODES_AT_5G_40;
-               pCtlMode = ctlModesFor11a;
-               if (IS_CHAN_HT40(chan))
-                       /* All 5G CTL's */
-                       numCtlModes = ARRAY_SIZE(ctlModesFor11a);
-       }
-
-       /*
-        * For MIMO, need to apply regulatory caps individually across
-        * dynamically running modes: CCK, OFDM, HT20, HT40
-        *
-        * The outer loop walks through each possible applicable runtime mode.
-        * The inner loop walks through each ctlIndex entry in EEPROM.
-        * The ctl value is encoded as [7:4] == test group, [3:0] == test mode.
-        */
-       for (ctlMode = 0; ctlMode < numCtlModes; ctlMode++) {
-               bool isHt40CtlMode = (pCtlMode[ctlMode] == CTL_5GHT40) ||
-                       (pCtlMode[ctlMode] == CTL_2GHT40);
-               if (isHt40CtlMode)
-                       freq = centers.synth_center;
-               else if (pCtlMode[ctlMode] & EXT_ADDITIVE)
-                       freq = centers.ext_center;
-               else
-                       freq = centers.ctl_center;
-
-               ath_print(common, ATH_DBG_REGULATORY,
-                         "LOOP-Mode ctlMode %d < %d, isHt40CtlMode %d, "
-                         "EXT_ADDITIVE %d\n",
-                         ctlMode, numCtlModes, isHt40CtlMode,
-                         (pCtlMode[ctlMode] & EXT_ADDITIVE));
-
-               /* walk through each CTL index stored in EEPROM */
-               if (is2ghz) {
-                       ctlIndex = pEepData->ctlIndex_2G;
-                       ctlNum = AR9300_NUM_CTLS_2G;
-               } else {
-                       ctlIndex = pEepData->ctlIndex_5G;
-                       ctlNum = AR9300_NUM_CTLS_5G;
-               }
-
-               for (i = 0; (i < ctlNum) && ctlIndex[i]; i++) {
-                       ath_print(common, ATH_DBG_REGULATORY,
-                                 "LOOP-Ctlidx %d: cfgCtl 0x%2.2x "
-                                 "pCtlMode 0x%2.2x ctlIndex 0x%2.2x "
-                                 "chan %dn",
-                                 i, cfgCtl, pCtlMode[ctlMode], ctlIndex[i],
-                                 chan->channel);
-
-                               /*
-                                * compare test group from regulatory
-                                * channel list with test mode from pCtlMode
-                                * list
-                                */
-                               if ((((cfgCtl & ~CTL_MODE_M) |
-                                      (pCtlMode[ctlMode] & CTL_MODE_M)) ==
-                                       ctlIndex[i]) ||
-                                   (((cfgCtl & ~CTL_MODE_M) |
-                                      (pCtlMode[ctlMode] & CTL_MODE_M)) ==
-                                    ((ctlIndex[i] & CTL_MODE_M) |
-                                      SD_NO_CTL))) {
-                                       twiceMinEdgePower =
-                                         ar9003_hw_get_max_edge_power(pEepData,
-                                                                      freq, i,
-                                                                      is2ghz);
-
-                                       if ((cfgCtl & ~CTL_MODE_M) == SD_NO_CTL)
-                                               /*
-                                                * Find the minimum of all CTL
-                                                * edge powers that apply to
-                                                * this channel
-                                                */
-                                               twiceMaxEdgePower =
-                                                       min(twiceMaxEdgePower,
-                                                           twiceMinEdgePower);
-                                               else {
-                                                       /* specific */
-                                                       twiceMaxEdgePower =
-                                                         twiceMinEdgePower;
-                                                       break;
-                                               }
-                               }
-                       }
-
-                       minCtlPower = (u8)min(twiceMaxEdgePower, scaledPower);
-
-                       ath_print(common, ATH_DBG_REGULATORY,
-                                 "SEL-Min ctlMode %d pCtlMode %d 2xMaxEdge %d "
-                                 "sP %d minCtlPwr %d\n",
-                                 ctlMode, pCtlMode[ctlMode], twiceMaxEdgePower,
-                                 scaledPower, minCtlPower);
-
-                       /* Apply ctl mode to correct target power set */
-                       switch (pCtlMode[ctlMode]) {
-                       case CTL_11B:
-                               for (i = ALL_TARGET_LEGACY_1L_5L;
-                                    i <= ALL_TARGET_LEGACY_11S; i++)
-                                       pPwrArray[i] =
-                                         (u8)min((u16)pPwrArray[i],
-                                                 minCtlPower);
-                               break;
-                       case CTL_11A:
-                       case CTL_11G:
-                               for (i = ALL_TARGET_LEGACY_6_24;
-                                    i <= ALL_TARGET_LEGACY_54; i++)
-                                       pPwrArray[i] =
-                                         (u8)min((u16)pPwrArray[i],
-                                                 minCtlPower);
-                               break;
-                       case CTL_5GHT20:
-                       case CTL_2GHT20:
-                               for (i = ALL_TARGET_HT20_0_8_16;
-                                    i <= ALL_TARGET_HT20_21; i++)
-                                       pPwrArray[i] =
-                                         (u8)min((u16)pPwrArray[i],
-                                                 minCtlPower);
-                               pPwrArray[ALL_TARGET_HT20_22] =
-                                 (u8)min((u16)pPwrArray[ALL_TARGET_HT20_22],
-                                         minCtlPower);
-                               pPwrArray[ALL_TARGET_HT20_23] =
-                                 (u8)min((u16)pPwrArray[ALL_TARGET_HT20_23],
-                                          minCtlPower);
-                               break;
-                       case CTL_5GHT40:
-                       case CTL_2GHT40:
-                               for (i = ALL_TARGET_HT40_0_8_16;
-                                    i <= ALL_TARGET_HT40_23; i++)
-                                       pPwrArray[i] =
-                                         (u8)min((u16)pPwrArray[i],
-                                                 minCtlPower);
-                               break;
-                       default:
-                           break;
-                       }
-       } /* end ctl mode checking */
-}
-
-static void ath9k_hw_ar9300_set_txpower(struct ath_hw *ah,
-                                       struct ath9k_channel *chan, u16 cfgCtl,
-                                       u8 twiceAntennaReduction,
-                                       u8 twiceMaxRegulatoryPower,
-                                       u8 powerLimit)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-       u8 targetPowerValT2[ar9300RateSize];
-       unsigned int i = 0;
-
-       ar9003_hw_set_target_power_eeprom(ah, chan->channel, targetPowerValT2);
-       ar9003_hw_set_power_per_rate_table(ah, chan,
-                                          targetPowerValT2, cfgCtl,
-                                          twiceAntennaReduction,
-                                          twiceMaxRegulatoryPower,
-                                          powerLimit);
-
-       while (i < ar9300RateSize) {
-               ath_print(common, ATH_DBG_EEPROM,
-                         "TPC[%02d] 0x%08x ", i, targetPowerValT2[i]);
-               i++;
-               ath_print(common, ATH_DBG_EEPROM,
-                         "TPC[%02d] 0x%08x ", i, targetPowerValT2[i]);
-               i++;
-               ath_print(common, ATH_DBG_EEPROM,
-                         "TPC[%02d] 0x%08x ", i, targetPowerValT2[i]);
-               i++;
-               ath_print(common, ATH_DBG_EEPROM,
-                         "TPC[%02d] 0x%08x\n\n", i, targetPowerValT2[i]);
-               i++;
-       }
-
-       /* Write target power array to registers */
-       ar9003_hw_tx_power_regwrite(ah, targetPowerValT2);
-
-       /*
-        * This is the TX power we send back to driver core,
-        * and it can use to pass to userspace to display our
-        * currently configured TX power setting.
-        *
-        * Since power is rate dependent, use one of the indices
-        * from the AR9300_Rates enum to select an entry from
-        * targetPowerValT2[] to report. Currently returns the
-        * power for HT40 MCS 0, HT20 MCS 0, or OFDM 6 Mbps
-        * as CCK power is less interesting (?).
-        */
-       i = ALL_TARGET_LEGACY_6_24; /* legacy */
-       if (IS_CHAN_HT40(chan))
-               i = ALL_TARGET_HT40_0_8_16; /* ht40 */
-       else if (IS_CHAN_HT20(chan))
-               i = ALL_TARGET_HT20_0_8_16; /* ht20 */
-
-       ah->txpower_limit = targetPowerValT2[i];
-
-       ar9003_hw_calibration_apply(ah, chan->channel);
-}
-
-static u16 ath9k_hw_ar9300_get_spur_channel(struct ath_hw *ah,
-                                           u16 i, bool is2GHz)
-{
-       return AR_NO_SPUR;
-}
-
-s32 ar9003_hw_get_tx_gain_idx(struct ath_hw *ah)
-{
-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
-
-       return (eep->baseEepHeader.txrxgain >> 4) & 0xf; /* bits 7:4 */
-}
-
-s32 ar9003_hw_get_rx_gain_idx(struct ath_hw *ah)
-{
-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
-
-       return (eep->baseEepHeader.txrxgain) & 0xf; /* bits 3:0 */
-}
-
-const struct eeprom_ops eep_ar9300_ops = {
-       .check_eeprom = ath9k_hw_ar9300_check_eeprom,
-       .get_eeprom = ath9k_hw_ar9300_get_eeprom,
-       .fill_eeprom = ath9k_hw_ar9300_fill_eeprom,
-       .get_eeprom_ver = ath9k_hw_ar9300_get_eeprom_ver,
-       .get_eeprom_rev = ath9k_hw_ar9300_get_eeprom_rev,
-       .get_num_ant_config = ath9k_hw_ar9300_get_num_ant_config,
-       .get_eeprom_antenna_cfg = ath9k_hw_ar9300_get_eeprom_antenna_cfg,
-       .set_board_values = ath9k_hw_ar9300_set_board_values,
-       .set_addac = ath9k_hw_ar9300_set_addac,
-       .set_txpower = ath9k_hw_ar9300_set_txpower,
-       .get_spur_channel = ath9k_hw_ar9300_get_spur_channel
-};
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h
deleted file mode 100644 (file)
index 655b303..0000000
+++ /dev/null
@@ -1,320 +0,0 @@
-#ifndef AR9003_EEPROM_H
-#define AR9003_EEPROM_H
-
-#include <linux/types.h>
-
-#define AR9300_EEP_VER               0xD000
-#define AR9300_EEP_VER_MINOR_MASK    0xFFF
-#define AR9300_EEP_MINOR_VER_1       0x1
-#define AR9300_EEP_MINOR_VER         AR9300_EEP_MINOR_VER_1
-
-/* 16-bit offset location start of calibration struct */
-#define AR9300_EEP_START_LOC         256
-#define AR9300_NUM_5G_CAL_PIERS      8
-#define AR9300_NUM_2G_CAL_PIERS      3
-#define AR9300_NUM_5G_20_TARGET_POWERS  8
-#define AR9300_NUM_5G_40_TARGET_POWERS  8
-#define AR9300_NUM_2G_CCK_TARGET_POWERS 2
-#define AR9300_NUM_2G_20_TARGET_POWERS  3
-#define AR9300_NUM_2G_40_TARGET_POWERS  3
-/* #define AR9300_NUM_CTLS              21 */
-#define AR9300_NUM_CTLS_5G           9
-#define AR9300_NUM_CTLS_2G           12
-#define AR9300_CTL_MODE_M            0xF
-#define AR9300_NUM_BAND_EDGES_5G     8
-#define AR9300_NUM_BAND_EDGES_2G     4
-#define AR9300_NUM_PD_GAINS          4
-#define AR9300_PD_GAINS_IN_MASK      4
-#define AR9300_PD_GAIN_ICEPTS        5
-#define AR9300_EEPROM_MODAL_SPURS    5
-#define AR9300_MAX_RATE_POWER        63
-#define AR9300_NUM_PDADC_VALUES      128
-#define AR9300_NUM_RATES             16
-#define AR9300_BCHAN_UNUSED          0xFF
-#define AR9300_MAX_PWR_RANGE_IN_HALF_DB 64
-#define AR9300_OPFLAGS_11A           0x01
-#define AR9300_OPFLAGS_11G           0x02
-#define AR9300_OPFLAGS_5G_HT40       0x04
-#define AR9300_OPFLAGS_2G_HT40       0x08
-#define AR9300_OPFLAGS_5G_HT20       0x10
-#define AR9300_OPFLAGS_2G_HT20       0x20
-#define AR9300_EEPMISC_BIG_ENDIAN    0x01
-#define AR9300_EEPMISC_WOW           0x02
-#define AR9300_CUSTOMER_DATA_SIZE    20
-
-#define FREQ2FBIN(x, y) ((y) ? ((x) - 2300) : (((x) - 4800) / 5))
-#define FBIN2FREQ(x, y) ((y) ? (2300 + x) : (4800 + 5 * x))
-#define AR9300_MAX_CHAINS            3
-#define AR9300_ANT_16S               25
-#define AR9300_FUTURE_MODAL_SZ       6
-
-#define AR9300_NUM_ANT_CHAIN_FIELDS     7
-#define AR9300_NUM_ANT_COMMON_FIELDS    4
-#define AR9300_SIZE_ANT_CHAIN_FIELD     3
-#define AR9300_SIZE_ANT_COMMON_FIELD    4
-#define AR9300_ANT_CHAIN_MASK           0x7
-#define AR9300_ANT_COMMON_MASK          0xf
-#define AR9300_CHAIN_0_IDX              0
-#define AR9300_CHAIN_1_IDX              1
-#define AR9300_CHAIN_2_IDX              2
-
-#define AR928X_NUM_ANT_CHAIN_FIELDS     6
-#define AR928X_SIZE_ANT_CHAIN_FIELD     2
-#define AR928X_ANT_CHAIN_MASK           0x3
-
-/* Delta from which to start power to pdadc table */
-/* This offset is used in both open loop and closed loop power control
- * schemes. In open loop power control, it is not really needed, but for
- * the "sake of consistency" it was kept. For certain AP designs, this
- * value is overwritten by the value in the flag "pwrTableOffset" just
- * before writing the pdadc vs pwr into the chip registers.
- */
-#define AR9300_PWR_TABLE_OFFSET  0
-
-/* enable flags for voltage and temp compensation */
-#define ENABLE_TEMP_COMPENSATION 0x01
-#define ENABLE_VOLT_COMPENSATION 0x02
-/* byte addressable */
-#define AR9300_EEPROM_SIZE (16*1024)
-#define FIXED_CCA_THRESHOLD 15
-
-#define AR9300_BASE_ADDR 0x3ff
-
-enum targetPowerHTRates {
-       HT_TARGET_RATE_0_8_16,
-       HT_TARGET_RATE_1_3_9_11_17_19,
-       HT_TARGET_RATE_4,
-       HT_TARGET_RATE_5,
-       HT_TARGET_RATE_6,
-       HT_TARGET_RATE_7,
-       HT_TARGET_RATE_12,
-       HT_TARGET_RATE_13,
-       HT_TARGET_RATE_14,
-       HT_TARGET_RATE_15,
-       HT_TARGET_RATE_20,
-       HT_TARGET_RATE_21,
-       HT_TARGET_RATE_22,
-       HT_TARGET_RATE_23
-};
-
-enum targetPowerLegacyRates {
-       LEGACY_TARGET_RATE_6_24,
-       LEGACY_TARGET_RATE_36,
-       LEGACY_TARGET_RATE_48,
-       LEGACY_TARGET_RATE_54
-};
-
-enum targetPowerCckRates {
-       LEGACY_TARGET_RATE_1L_5L,
-       LEGACY_TARGET_RATE_5S,
-       LEGACY_TARGET_RATE_11L,
-       LEGACY_TARGET_RATE_11S
-};
-
-enum ar9300_Rates {
-       ALL_TARGET_LEGACY_6_24,
-       ALL_TARGET_LEGACY_36,
-       ALL_TARGET_LEGACY_48,
-       ALL_TARGET_LEGACY_54,
-       ALL_TARGET_LEGACY_1L_5L,
-       ALL_TARGET_LEGACY_5S,
-       ALL_TARGET_LEGACY_11L,
-       ALL_TARGET_LEGACY_11S,
-       ALL_TARGET_HT20_0_8_16,
-       ALL_TARGET_HT20_1_3_9_11_17_19,
-       ALL_TARGET_HT20_4,
-       ALL_TARGET_HT20_5,
-       ALL_TARGET_HT20_6,
-       ALL_TARGET_HT20_7,
-       ALL_TARGET_HT20_12,
-       ALL_TARGET_HT20_13,
-       ALL_TARGET_HT20_14,
-       ALL_TARGET_HT20_15,
-       ALL_TARGET_HT20_20,
-       ALL_TARGET_HT20_21,
-       ALL_TARGET_HT20_22,
-       ALL_TARGET_HT20_23,
-       ALL_TARGET_HT40_0_8_16,
-       ALL_TARGET_HT40_1_3_9_11_17_19,
-       ALL_TARGET_HT40_4,
-       ALL_TARGET_HT40_5,
-       ALL_TARGET_HT40_6,
-       ALL_TARGET_HT40_7,
-       ALL_TARGET_HT40_12,
-       ALL_TARGET_HT40_13,
-       ALL_TARGET_HT40_14,
-       ALL_TARGET_HT40_15,
-       ALL_TARGET_HT40_20,
-       ALL_TARGET_HT40_21,
-       ALL_TARGET_HT40_22,
-       ALL_TARGET_HT40_23,
-       ar9300RateSize,
-};
-
-
-struct eepFlags {
-       u8 opFlags;
-       u8 eepMisc;
-} __packed;
-
-enum CompressAlgorithm {
-       _CompressNone = 0,
-       _CompressLzma,
-       _CompressPairs,
-       _CompressBlock,
-       _Compress4,
-       _Compress5,
-       _Compress6,
-       _Compress7,
-};
-
-struct ar9300_base_eep_hdr {
-       __le16 regDmn[2];
-       /* 4 bits tx and 4 bits rx */
-       u8 txrxMask;
-       struct eepFlags opCapFlags;
-       u8 rfSilent;
-       u8 blueToothOptions;
-       u8 deviceCap;
-       /* takes lower byte in eeprom location */
-       u8 deviceType;
-       /* offset in dB to be added to beginning
-        * of pdadc table in calibration
-        */
-       int8_t pwrTableOffset;
-       u8 params_for_tuning_caps[2];
-       /*
-        * bit0 - enable tx temp comp
-        * bit1 - enable tx volt comp
-        * bit2 - enable fastClock - default to 1
-        * bit3 - enable doubling - default to 1
-        * bit4 - enable internal regulator - default to 1
-        */
-       u8 featureEnable;
-       /* misc flags: bit0 - turn down drivestrength */
-       u8 miscConfiguration;
-       u8 eepromWriteEnableGpio;
-       u8 wlanDisableGpio;
-       u8 wlanLedGpio;
-       u8 rxBandSelectGpio;
-       u8 txrxgain;
-       /* SW controlled internal regulator fields */
-       __le32 swreg;
-} __packed;
-
-struct ar9300_modal_eep_header {
-       /* 4 idle, t1, t2, b (4 bits per setting) */
-       __le32 antCtrlCommon;
-       /* 4 ra1l1, ra2l1, ra1l2, ra2l2, ra12 */
-       __le32 antCtrlCommon2;
-       /* 6 idle, t, r, rx1, rx12, b (2 bits each) */
-       __le16 antCtrlChain[AR9300_MAX_CHAINS];
-       /* 3 xatten1_db for AR9280 (0xa20c/b20c 5:0) */
-       u8 xatten1DB[AR9300_MAX_CHAINS];
-       /* 3  xatten1_margin for merlin (0xa20c/b20c 16:12 */
-       u8 xatten1Margin[AR9300_MAX_CHAINS];
-       int8_t tempSlope;
-       int8_t voltSlope;
-       /* spur channels in usual fbin coding format */
-       u8 spurChans[AR9300_EEPROM_MODAL_SPURS];
-       /* 3  Check if the register is per chain */
-       int8_t noiseFloorThreshCh[AR9300_MAX_CHAINS];
-       u8 ob[AR9300_MAX_CHAINS];
-       u8 db_stage2[AR9300_MAX_CHAINS];
-       u8 db_stage3[AR9300_MAX_CHAINS];
-       u8 db_stage4[AR9300_MAX_CHAINS];
-       u8 xpaBiasLvl;
-       u8 txFrameToDataStart;
-       u8 txFrameToPaOn;
-       u8 txClip;
-       int8_t antennaGain;
-       u8 switchSettling;
-       int8_t adcDesiredSize;
-       u8 txEndToXpaOff;
-       u8 txEndToRxOn;
-       u8 txFrameToXpaOn;
-       u8 thresh62;
-       __le32 papdRateMaskHt20;
-       __le32 papdRateMaskHt40;
-       u8 futureModal[24];
-} __packed;
-
-struct ar9300_cal_data_per_freq_op_loop {
-       int8_t refPower;
-       /* pdadc voltage at power measurement */
-       u8 voltMeas;
-       /* pcdac used for power measurement   */
-       u8 tempMeas;
-       /* range is -60 to -127 create a mapping equation 1db resolution */
-       int8_t rxNoisefloorCal;
-       /*range is same as noisefloor */
-       int8_t rxNoisefloorPower;
-       /* temp measured when noisefloor cal was performed */
-       u8 rxTempMeas;
-} __packed;
-
-struct cal_tgt_pow_legacy {
-       u8 tPow2x[4];
-} __packed;
-
-struct cal_tgt_pow_ht {
-       u8 tPow2x[14];
-} __packed;
-
-struct cal_ctl_data_2g {
-       u8 ctlEdges[AR9300_NUM_BAND_EDGES_2G];
-} __packed;
-
-struct cal_ctl_data_5g {
-       u8 ctlEdges[AR9300_NUM_BAND_EDGES_5G];
-} __packed;
-
-struct ar9300_eeprom {
-       u8 eepromVersion;
-       u8 templateVersion;
-       u8 macAddr[6];
-       u8 custData[AR9300_CUSTOMER_DATA_SIZE];
-
-       struct ar9300_base_eep_hdr baseEepHeader;
-
-       struct ar9300_modal_eep_header modalHeader2G;
-       u8 calFreqPier2G[AR9300_NUM_2G_CAL_PIERS];
-       struct ar9300_cal_data_per_freq_op_loop
-        calPierData2G[AR9300_MAX_CHAINS][AR9300_NUM_2G_CAL_PIERS];
-       u8 calTarget_freqbin_Cck[AR9300_NUM_2G_CCK_TARGET_POWERS];
-       u8 calTarget_freqbin_2G[AR9300_NUM_2G_20_TARGET_POWERS];
-       u8 calTarget_freqbin_2GHT20[AR9300_NUM_2G_20_TARGET_POWERS];
-       u8 calTarget_freqbin_2GHT40[AR9300_NUM_2G_40_TARGET_POWERS];
-       struct cal_tgt_pow_legacy
-        calTargetPowerCck[AR9300_NUM_2G_CCK_TARGET_POWERS];
-       struct cal_tgt_pow_legacy
-        calTargetPower2G[AR9300_NUM_2G_20_TARGET_POWERS];
-       struct cal_tgt_pow_ht
-        calTargetPower2GHT20[AR9300_NUM_2G_20_TARGET_POWERS];
-       struct cal_tgt_pow_ht
-        calTargetPower2GHT40[AR9300_NUM_2G_40_TARGET_POWERS];
-       u8 ctlIndex_2G[AR9300_NUM_CTLS_2G];
-       u8 ctl_freqbin_2G[AR9300_NUM_CTLS_2G][AR9300_NUM_BAND_EDGES_2G];
-       struct cal_ctl_data_2g ctlPowerData_2G[AR9300_NUM_CTLS_2G];
-       struct ar9300_modal_eep_header modalHeader5G;
-       u8 calFreqPier5G[AR9300_NUM_5G_CAL_PIERS];
-       struct ar9300_cal_data_per_freq_op_loop
-        calPierData5G[AR9300_MAX_CHAINS][AR9300_NUM_5G_CAL_PIERS];
-       u8 calTarget_freqbin_5G[AR9300_NUM_5G_20_TARGET_POWERS];
-       u8 calTarget_freqbin_5GHT20[AR9300_NUM_5G_20_TARGET_POWERS];
-       u8 calTarget_freqbin_5GHT40[AR9300_NUM_5G_40_TARGET_POWERS];
-       struct cal_tgt_pow_legacy
-        calTargetPower5G[AR9300_NUM_5G_20_TARGET_POWERS];
-       struct cal_tgt_pow_ht
-        calTargetPower5GHT20[AR9300_NUM_5G_20_TARGET_POWERS];
-       struct cal_tgt_pow_ht
-        calTargetPower5GHT40[AR9300_NUM_5G_40_TARGET_POWERS];
-       u8 ctlIndex_5G[AR9300_NUM_CTLS_5G];
-       u8 ctl_freqbin_5G[AR9300_NUM_CTLS_5G][AR9300_NUM_BAND_EDGES_5G];
-       struct cal_ctl_data_5g ctlPowerData_5G[AR9300_NUM_CTLS_5G];
-} __packed;
-
-s32 ar9003_hw_get_tx_gain_idx(struct ath_hw *ah);
-s32 ar9003_hw_get_rx_gain_idx(struct ath_hw *ah);
-
-#endif
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_hw.c b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
deleted file mode 100644 (file)
index 0641689..0000000
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * Copyright (c) 2008-2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "hw.h"
-#include "ar9003_mac.h"
-#include "ar9003_2p0_initvals.h"
-#include "ar9003_2p2_initvals.h"
-
-/* General hardware code for the AR9003 hadware family */
-
-static bool ar9003_hw_macversion_supported(u32 macversion)
-{
-       switch (macversion) {
-       case AR_SREV_VERSION_9300:
-               return true;
-       default:
-               break;
-       }
-       return false;
-}
-
-/* AR9003 2.0 */
-static void ar9003_2p0_hw_init_mode_regs(struct ath_hw *ah)
-{
-       /* mac */
-       INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
-       INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
-                      ar9300_2p0_mac_core,
-                      ARRAY_SIZE(ar9300_2p0_mac_core), 2);
-       INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
-                      ar9300_2p0_mac_postamble,
-                      ARRAY_SIZE(ar9300_2p0_mac_postamble), 5);
-
-       /* bb */
-       INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0);
-       INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
-                      ar9300_2p0_baseband_core,
-                      ARRAY_SIZE(ar9300_2p0_baseband_core), 2);
-       INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
-                      ar9300_2p0_baseband_postamble,
-                      ARRAY_SIZE(ar9300_2p0_baseband_postamble), 5);
-
-       /* radio */
-       INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0);
-       INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
-                      ar9300_2p0_radio_core,
-                      ARRAY_SIZE(ar9300_2p0_radio_core), 2);
-       INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
-                      ar9300_2p0_radio_postamble,
-                      ARRAY_SIZE(ar9300_2p0_radio_postamble), 5);
-
-       /* soc */
-       INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
-                      ar9300_2p0_soc_preamble,
-                      ARRAY_SIZE(ar9300_2p0_soc_preamble), 2);
-       INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0);
-       INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
-                      ar9300_2p0_soc_postamble,
-                      ARRAY_SIZE(ar9300_2p0_soc_postamble), 5);
-
-       /* rx/tx gain */
-       INIT_INI_ARRAY(&ah->iniModesRxGain,
-                      ar9300Common_rx_gain_table_2p0,
-                      ARRAY_SIZE(ar9300Common_rx_gain_table_2p0), 2);
-       INIT_INI_ARRAY(&ah->iniModesTxGain,
-                      ar9300Modes_lowest_ob_db_tx_gain_table_2p0,
-                      ARRAY_SIZE(ar9300Modes_lowest_ob_db_tx_gain_table_2p0),
-                      5);
-
-       /* Load PCIE SERDES settings from INI */
-
-       /* Awake Setting */
-
-       INIT_INI_ARRAY(&ah->iniPcieSerdes,
-                      ar9300PciePhy_pll_on_clkreq_disable_L1_2p0,
-                      ARRAY_SIZE(ar9300PciePhy_pll_on_clkreq_disable_L1_2p0),
-                      2);
-
-       /* Sleep Setting */
-
-       INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower,
-                      ar9300PciePhy_clkreq_enable_L1_2p0,
-                      ARRAY_SIZE(ar9300PciePhy_clkreq_enable_L1_2p0),
-                      2);
-
-       /* Fast clock modal settings */
-       INIT_INI_ARRAY(&ah->iniModesAdditional,
-                      ar9300Modes_fast_clock_2p0,
-                      ARRAY_SIZE(ar9300Modes_fast_clock_2p0),
-                      3);
-}
-
-/* AR9003 2.2 */
-static void ar9003_2p2_hw_init_mode_regs(struct ath_hw *ah)
-{
-       /* mac */
-       INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
-       INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
-                      ar9300_2p2_mac_core,
-                      ARRAY_SIZE(ar9300_2p2_mac_core), 2);
-       INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
-                      ar9300_2p2_mac_postamble,
-                      ARRAY_SIZE(ar9300_2p2_mac_postamble), 5);
-
-       /* bb */
-       INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0);
-       INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
-                      ar9300_2p2_baseband_core,
-                      ARRAY_SIZE(ar9300_2p2_baseband_core), 2);
-       INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
-                      ar9300_2p2_baseband_postamble,
-                      ARRAY_SIZE(ar9300_2p2_baseband_postamble), 5);
-
-       /* radio */
-       INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0);
-       INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
-                      ar9300_2p2_radio_core,
-                      ARRAY_SIZE(ar9300_2p2_radio_core), 2);
-       INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
-                      ar9300_2p2_radio_postamble,
-                      ARRAY_SIZE(ar9300_2p2_radio_postamble), 5);
-
-       /* soc */
-       INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
-                      ar9300_2p2_soc_preamble,
-                      ARRAY_SIZE(ar9300_2p2_soc_preamble), 2);
-       INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0);
-       INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
-                      ar9300_2p2_soc_postamble,
-                      ARRAY_SIZE(ar9300_2p2_soc_postamble), 5);
-
-       /* rx/tx gain */
-       INIT_INI_ARRAY(&ah->iniModesRxGain,
-                      ar9300Common_rx_gain_table_2p2,
-                      ARRAY_SIZE(ar9300Common_rx_gain_table_2p2), 2);
-       INIT_INI_ARRAY(&ah->iniModesTxGain,
-                      ar9300Modes_lowest_ob_db_tx_gain_table_2p2,
-                      ARRAY_SIZE(ar9300Modes_lowest_ob_db_tx_gain_table_2p2),
-                      5);
-
-       /* Load PCIE SERDES settings from INI */
-
-       /* Awake Setting */
-
-       INIT_INI_ARRAY(&ah->iniPcieSerdes,
-                      ar9300PciePhy_pll_on_clkreq_disable_L1_2p2,
-                      ARRAY_SIZE(ar9300PciePhy_pll_on_clkreq_disable_L1_2p2),
-                      2);
-
-       /* Sleep Setting */
-
-       INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower,
-                      ar9300PciePhy_clkreq_enable_L1_2p2,
-                      ARRAY_SIZE(ar9300PciePhy_clkreq_enable_L1_2p2),
-                      2);
-
-       /* Fast clock modal settings */
-       INIT_INI_ARRAY(&ah->iniModesAdditional,
-                      ar9300Modes_fast_clock_2p2,
-                      ARRAY_SIZE(ar9300Modes_fast_clock_2p2),
-                      3);
-}
-
-/*
- * The AR9003 family uses a new INI format (pre, core, post
- * arrays per subsystem).
- */
-static void ar9003_hw_init_mode_regs(struct ath_hw *ah)
-{
-       if (AR_SREV_9300_20(ah))
-               ar9003_2p0_hw_init_mode_regs(ah);
-       else
-               ar9003_2p2_hw_init_mode_regs(ah);
-}
-
-static void ar9003_tx_gain_table_apply(struct ath_hw *ah)
-{
-       switch (ar9003_hw_get_tx_gain_idx(ah)) {
-       case 0:
-       default:
-               if (AR_SREV_9300_20(ah))
-                       INIT_INI_ARRAY(&ah->iniModesTxGain,
-                                      ar9300Modes_lowest_ob_db_tx_gain_table_2p0,
-                                      ARRAY_SIZE(ar9300Modes_lowest_ob_db_tx_gain_table_2p0),
-                                      5);
-               else
-                       INIT_INI_ARRAY(&ah->iniModesTxGain,
-                                      ar9300Modes_lowest_ob_db_tx_gain_table_2p2,
-                                      ARRAY_SIZE(ar9300Modes_lowest_ob_db_tx_gain_table_2p2),
-                                      5);
-               break;
-       case 1:
-               if (AR_SREV_9300_20(ah))
-                       INIT_INI_ARRAY(&ah->iniModesTxGain,
-                                      ar9300Modes_high_ob_db_tx_gain_table_2p0,
-                                      ARRAY_SIZE(ar9300Modes_high_ob_db_tx_gain_table_2p0),
-                                      5);
-               else
-                       INIT_INI_ARRAY(&ah->iniModesTxGain,
-                                      ar9300Modes_high_ob_db_tx_gain_table_2p2,
-                                      ARRAY_SIZE(ar9300Modes_high_ob_db_tx_gain_table_2p2),
-                                      5);
-               break;
-       case 2:
-               if (AR_SREV_9300_20(ah))
-                       INIT_INI_ARRAY(&ah->iniModesTxGain,
-                                      ar9300Modes_low_ob_db_tx_gain_table_2p0,
-                                      ARRAY_SIZE(ar9300Modes_low_ob_db_tx_gain_table_2p0),
-                                      5);
-               else
-                       INIT_INI_ARRAY(&ah->iniModesTxGain,
-                                      ar9300Modes_low_ob_db_tx_gain_table_2p2,
-                                      ARRAY_SIZE(ar9300Modes_low_ob_db_tx_gain_table_2p2),
-                                      5);
-               break;
-       }
-}
-
-static void ar9003_rx_gain_table_apply(struct ath_hw *ah)
-{
-       switch (ar9003_hw_get_rx_gain_idx(ah)) {
-       case 0:
-       default:
-               if (AR_SREV_9300_20(ah))
-                       INIT_INI_ARRAY(&ah->iniModesRxGain,
-                                      ar9300Common_rx_gain_table_2p0,
-                                      ARRAY_SIZE(ar9300Common_rx_gain_table_2p0),
-                                      2);
-               else
-                       INIT_INI_ARRAY(&ah->iniModesRxGain,
-                                      ar9300Common_rx_gain_table_2p2,
-                                      ARRAY_SIZE(ar9300Common_rx_gain_table_2p2),
-                                      2);
-               break;
-       case 1:
-               if (AR_SREV_9300_20(ah))
-                       INIT_INI_ARRAY(&ah->iniModesRxGain,
-                                      ar9300Common_wo_xlna_rx_gain_table_2p0,
-                                      ARRAY_SIZE(ar9300Common_wo_xlna_rx_gain_table_2p0),
-                                      2);
-               else
-                       INIT_INI_ARRAY(&ah->iniModesRxGain,
-                                      ar9300Common_wo_xlna_rx_gain_table_2p2,
-                                      ARRAY_SIZE(ar9300Common_wo_xlna_rx_gain_table_2p2),
-                                      2);
-               break;
-       }
-}
-
-/* set gain table pointers according to values read from the eeprom */
-static void ar9003_hw_init_mode_gain_regs(struct ath_hw *ah)
-{
-       ar9003_tx_gain_table_apply(ah);
-       ar9003_rx_gain_table_apply(ah);
-}
-
-/*
- * Helper for ASPM support.
- *
- * Disable PLL when in L0s as well as receiver clock when in L1.
- * This power saving option must be enabled through the SerDes.
- *
- * Programming the SerDes must go through the same 288 bit serial shift
- * register as the other analog registers.  Hence the 9 writes.
- */
-static void ar9003_hw_configpcipowersave(struct ath_hw *ah,
-                                        int restore,
-                                        int power_off)
-{
-       if (ah->is_pciexpress != true)
-               return;
-
-       /* Do not touch SerDes registers */
-       if (ah->config.pcie_powersave_enable == 2)
-               return;
-
-       /* Nothing to do on restore for 11N */
-       if (!restore) {
-               /* set bit 19 to allow forcing of pcie core into L1 state */
-               REG_SET_BIT(ah, AR_PCIE_PM_CTRL, AR_PCIE_PM_CTRL_ENA);
-
-               /* Several PCIe massages to ensure proper behaviour */
-               if (ah->config.pcie_waen)
-                       REG_WRITE(ah, AR_WA, ah->config.pcie_waen);
-               else
-                       REG_WRITE(ah, AR_WA, ah->WARegVal);
-       }
-
-       /*
-        * Configire PCIE after Ini init. SERDES values now come from ini file
-        * This enables PCIe low power mode.
-        */
-       if (ah->config.pcieSerDesWrite) {
-               unsigned int i;
-               struct ar5416IniArray *array;
-
-               array = power_off ? &ah->iniPcieSerdes :
-                                   &ah->iniPcieSerdesLowPower;
-
-               for (i = 0; i < array->ia_rows; i++) {
-                       REG_WRITE(ah,
-                                 INI_RA(array, i, 0),
-                                 INI_RA(array, i, 1));
-               }
-       }
-}
-
-/* Sets up the AR9003 hardware familiy callbacks */
-void ar9003_hw_attach_ops(struct ath_hw *ah)
-{
-       struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
-       struct ath_hw_ops *ops = ath9k_hw_ops(ah);
-
-       priv_ops->init_mode_regs = ar9003_hw_init_mode_regs;
-       priv_ops->init_mode_gain_regs = ar9003_hw_init_mode_gain_regs;
-       priv_ops->macversion_supported = ar9003_hw_macversion_supported;
-
-       ops->config_pci_powersave = ar9003_hw_configpcipowersave;
-
-       ar9003_hw_attach_phy_ops(ah);
-       ar9003_hw_attach_calib_ops(ah);
-       ar9003_hw_attach_mac_ops(ah);
-
-       ath9k_hw_attach_ani_ops_new(ah);
-}
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mac.c b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
deleted file mode 100644 (file)
index 1a0ab70..0000000
+++ /dev/null
@@ -1,655 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-#include "hw.h"
-#include "ar9003_mac.h"
-
-static void ar9003_hw_rx_enable(struct ath_hw *hw)
-{
-       REG_WRITE(hw, AR_CR, 0);
-}
-
-static u16 ar9003_calc_ptr_chksum(struct ar9003_txc *ads)
-{
-       int checksum;
-
-       checksum = ads->info + ads->link
-               + ads->data0 + ads->ctl3
-               + ads->data1 + ads->ctl5
-               + ads->data2 + ads->ctl7
-               + ads->data3 + ads->ctl9;
-
-       return ((checksum & 0xffff) + (checksum >> 16)) & AR_TxPtrChkSum;
-}
-
-static void ar9003_hw_set_desc_link(void *ds, u32 ds_link)
-{
-       struct ar9003_txc *ads = ds;
-
-       ads->link = ds_link;
-       ads->ctl10 &= ~AR_TxPtrChkSum;
-       ads->ctl10 |= ar9003_calc_ptr_chksum(ads);
-}
-
-static void ar9003_hw_get_desc_link(void *ds, u32 **ds_link)
-{
-       struct ar9003_txc *ads = ds;
-
-       *ds_link = &ads->link;
-}
-
-static bool ar9003_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked)
-{
-       u32 isr = 0;
-       u32 mask2 = 0;
-       struct ath9k_hw_capabilities *pCap = &ah->caps;
-       u32 sync_cause = 0;
-       struct ath_common *common = ath9k_hw_common(ah);
-
-       if (REG_READ(ah, AR_INTR_ASYNC_CAUSE) & AR_INTR_MAC_IRQ) {
-               if ((REG_READ(ah, AR_RTC_STATUS) & AR_RTC_STATUS_M)
-                               == AR_RTC_STATUS_ON)
-                       isr = REG_READ(ah, AR_ISR);
-       }
-
-       sync_cause = REG_READ(ah, AR_INTR_SYNC_CAUSE) & AR_INTR_SYNC_DEFAULT;
-
-       *masked = 0;
-
-       if (!isr && !sync_cause)
-               return false;
-
-       if (isr) {
-               if (isr & AR_ISR_BCNMISC) {
-                       u32 isr2;
-                       isr2 = REG_READ(ah, AR_ISR_S2);
-
-                       mask2 |= ((isr2 & AR_ISR_S2_TIM) >>
-                                 MAP_ISR_S2_TIM);
-                       mask2 |= ((isr2 & AR_ISR_S2_DTIM) >>
-                                 MAP_ISR_S2_DTIM);
-                       mask2 |= ((isr2 & AR_ISR_S2_DTIMSYNC) >>
-                                 MAP_ISR_S2_DTIMSYNC);
-                       mask2 |= ((isr2 & AR_ISR_S2_CABEND) >>
-                                 MAP_ISR_S2_CABEND);
-                       mask2 |= ((isr2 & AR_ISR_S2_GTT) <<
-                                 MAP_ISR_S2_GTT);
-                       mask2 |= ((isr2 & AR_ISR_S2_CST) <<
-                                 MAP_ISR_S2_CST);
-                       mask2 |= ((isr2 & AR_ISR_S2_TSFOOR) >>
-                                 MAP_ISR_S2_TSFOOR);
-                       mask2 |= ((isr2 & AR_ISR_S2_BB_WATCHDOG) >>
-                                 MAP_ISR_S2_BB_WATCHDOG);
-
-                       if (!(pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)) {
-                               REG_WRITE(ah, AR_ISR_S2, isr2);
-                               isr &= ~AR_ISR_BCNMISC;
-                       }
-               }
-
-               if ((pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED))
-                       isr = REG_READ(ah, AR_ISR_RAC);
-
-               if (isr == 0xffffffff) {
-                       *masked = 0;
-                       return false;
-               }
-
-               *masked = isr & ATH9K_INT_COMMON;
-
-               if (ah->config.rx_intr_mitigation)
-                       if (isr & (AR_ISR_RXMINTR | AR_ISR_RXINTM))
-                               *masked |= ATH9K_INT_RXLP;
-
-               if (ah->config.tx_intr_mitigation)
-                       if (isr & (AR_ISR_TXMINTR | AR_ISR_TXINTM))
-                               *masked |= ATH9K_INT_TX;
-
-               if (isr & (AR_ISR_LP_RXOK | AR_ISR_RXERR))
-                       *masked |= ATH9K_INT_RXLP;
-
-               if (isr & AR_ISR_HP_RXOK)
-                       *masked |= ATH9K_INT_RXHP;
-
-               if (isr & (AR_ISR_TXOK | AR_ISR_TXERR | AR_ISR_TXEOL)) {
-                       *masked |= ATH9K_INT_TX;
-
-                       if (!(pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)) {
-                               u32 s0, s1;
-                               s0 = REG_READ(ah, AR_ISR_S0);
-                               REG_WRITE(ah, AR_ISR_S0, s0);
-                               s1 = REG_READ(ah, AR_ISR_S1);
-                               REG_WRITE(ah, AR_ISR_S1, s1);
-
-                               isr &= ~(AR_ISR_TXOK | AR_ISR_TXERR |
-                                        AR_ISR_TXEOL);
-                       }
-               }
-
-               if (isr & AR_ISR_GENTMR) {
-                       u32 s5;
-
-                       if (pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)
-                               s5 = REG_READ(ah, AR_ISR_S5_S);
-                       else
-                               s5 = REG_READ(ah, AR_ISR_S5);
-
-                       ah->intr_gen_timer_trigger =
-                               MS(s5, AR_ISR_S5_GENTIMER_TRIG);
-
-                       ah->intr_gen_timer_thresh =
-                               MS(s5, AR_ISR_S5_GENTIMER_THRESH);
-
-                       if (ah->intr_gen_timer_trigger)
-                               *masked |= ATH9K_INT_GENTIMER;
-
-                       if (!(pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)) {
-                               REG_WRITE(ah, AR_ISR_S5, s5);
-                               isr &= ~AR_ISR_GENTMR;
-                       }
-
-               }
-
-               *masked |= mask2;
-
-               if (!(pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)) {
-                       REG_WRITE(ah, AR_ISR, isr);
-
-                       (void) REG_READ(ah, AR_ISR);
-               }
-
-               if (*masked & ATH9K_INT_BB_WATCHDOG)
-                       ar9003_hw_bb_watchdog_read(ah);
-       }
-
-       if (sync_cause) {
-               if (sync_cause & AR_INTR_SYNC_RADM_CPL_TIMEOUT) {
-                       REG_WRITE(ah, AR_RC, AR_RC_HOSTIF);
-                       REG_WRITE(ah, AR_RC, 0);
-                       *masked |= ATH9K_INT_FATAL;
-               }
-
-               if (sync_cause & AR_INTR_SYNC_LOCAL_TIMEOUT)
-                       ath_print(common, ATH_DBG_INTERRUPT,
-                                 "AR_INTR_SYNC_LOCAL_TIMEOUT\n");
-
-                       REG_WRITE(ah, AR_INTR_SYNC_CAUSE_CLR, sync_cause);
-               (void) REG_READ(ah, AR_INTR_SYNC_CAUSE_CLR);
-
-       }
-       return true;
-}
-
-static void ar9003_hw_fill_txdesc(struct ath_hw *ah, void *ds, u32 seglen,
-                                 bool is_firstseg, bool is_lastseg,
-                                 const void *ds0, dma_addr_t buf_addr,
-                                 unsigned int qcu)
-{
-       struct ar9003_txc *ads = (struct ar9003_txc *) ds;
-       unsigned int descid = 0;
-
-       ads->info = (ATHEROS_VENDOR_ID << AR_DescId_S) |
-                                    (1 << AR_TxRxDesc_S) |
-                                    (1 << AR_CtrlStat_S) |
-                                    (qcu << AR_TxQcuNum_S) | 0x17;
-
-       ads->data0 = buf_addr;
-       ads->data1 = 0;
-       ads->data2 = 0;
-       ads->data3 = 0;
-
-       ads->ctl3 = (seglen << AR_BufLen_S);
-       ads->ctl3 &= AR_BufLen;
-
-       /* Fill in pointer checksum and descriptor id */
-       ads->ctl10 = ar9003_calc_ptr_chksum(ads);
-       ads->ctl10 |= (descid << AR_TxDescId_S);
-
-       if (is_firstseg) {
-               ads->ctl12 |= (is_lastseg ? 0 : AR_TxMore);
-       } else if (is_lastseg) {
-               ads->ctl11 = 0;
-               ads->ctl12 = 0;
-               ads->ctl13 = AR9003TXC_CONST(ds0)->ctl13;
-               ads->ctl14 = AR9003TXC_CONST(ds0)->ctl14;
-       } else {
-               /* XXX Intermediate descriptor in a multi-descriptor frame.*/
-               ads->ctl11 = 0;
-               ads->ctl12 = AR_TxMore;
-               ads->ctl13 = 0;
-               ads->ctl14 = 0;
-       }
-}
-
-static int ar9003_hw_proc_txdesc(struct ath_hw *ah, void *ds,
-                                struct ath_tx_status *ts)
-{
-       struct ar9003_txs *ads;
-
-       ads = &ah->ts_ring[ah->ts_tail];
-
-       if ((ads->status8 & AR_TxDone) == 0)
-               return -EINPROGRESS;
-
-       ah->ts_tail = (ah->ts_tail + 1) % ah->ts_size;
-
-       if ((MS(ads->ds_info, AR_DescId) != ATHEROS_VENDOR_ID) ||
-           (MS(ads->ds_info, AR_TxRxDesc) != 1)) {
-               ath_print(ath9k_hw_common(ah), ATH_DBG_XMIT,
-                         "Tx Descriptor error %x\n", ads->ds_info);
-               memset(ads, 0, sizeof(*ads));
-               return -EIO;
-       }
-
-       ts->qid = MS(ads->ds_info, AR_TxQcuNum);
-       ts->desc_id = MS(ads->status1, AR_TxDescId);
-       ts->ts_seqnum = MS(ads->status8, AR_SeqNum);
-       ts->ts_tstamp = ads->status4;
-       ts->ts_status = 0;
-       ts->ts_flags  = 0;
-
-       if (ads->status3 & AR_ExcessiveRetries)
-               ts->ts_status |= ATH9K_TXERR_XRETRY;
-       if (ads->status3 & AR_Filtered)
-               ts->ts_status |= ATH9K_TXERR_FILT;
-       if (ads->status3 & AR_FIFOUnderrun) {
-               ts->ts_status |= ATH9K_TXERR_FIFO;
-               ath9k_hw_updatetxtriglevel(ah, true);
-       }
-       if (ads->status8 & AR_TxOpExceeded)
-               ts->ts_status |= ATH9K_TXERR_XTXOP;
-       if (ads->status3 & AR_TxTimerExpired)
-               ts->ts_status |= ATH9K_TXERR_TIMER_EXPIRED;
-
-       if (ads->status3 & AR_DescCfgErr)
-               ts->ts_flags |= ATH9K_TX_DESC_CFG_ERR;
-       if (ads->status3 & AR_TxDataUnderrun) {
-               ts->ts_flags |= ATH9K_TX_DATA_UNDERRUN;
-               ath9k_hw_updatetxtriglevel(ah, true);
-       }
-       if (ads->status3 & AR_TxDelimUnderrun) {
-               ts->ts_flags |= ATH9K_TX_DELIM_UNDERRUN;
-               ath9k_hw_updatetxtriglevel(ah, true);
-       }
-       if (ads->status2 & AR_TxBaStatus) {
-               ts->ts_flags |= ATH9K_TX_BA;
-               ts->ba_low = ads->status5;
-               ts->ba_high = ads->status6;
-       }
-
-       ts->ts_rateindex = MS(ads->status8, AR_FinalTxIdx);
-
-       ts->ts_rssi = MS(ads->status7, AR_TxRSSICombined);
-       ts->ts_rssi_ctl0 = MS(ads->status2, AR_TxRSSIAnt00);
-       ts->ts_rssi_ctl1 = MS(ads->status2, AR_TxRSSIAnt01);
-       ts->ts_rssi_ctl2 = MS(ads->status2, AR_TxRSSIAnt02);
-       ts->ts_rssi_ext0 = MS(ads->status7, AR_TxRSSIAnt10);
-       ts->ts_rssi_ext1 = MS(ads->status7, AR_TxRSSIAnt11);
-       ts->ts_rssi_ext2 = MS(ads->status7, AR_TxRSSIAnt12);
-       ts->ts_shortretry = MS(ads->status3, AR_RTSFailCnt);
-       ts->ts_longretry = MS(ads->status3, AR_DataFailCnt);
-       ts->ts_virtcol = MS(ads->status3, AR_VirtRetryCnt);
-       ts->ts_antenna = 0;
-
-       ts->tid = MS(ads->status8, AR_TxTid);
-
-       memset(ads, 0, sizeof(*ads));
-
-       return 0;
-}
-
-static void ar9003_hw_set11n_txdesc(struct ath_hw *ah, void *ds,
-               u32 pktlen, enum ath9k_pkt_type type, u32 txpower,
-               u32 keyIx, enum ath9k_key_type keyType, u32 flags)
-{
-       struct ar9003_txc *ads = (struct ar9003_txc *) ds;
-
-       if (txpower > ah->txpower_limit)
-               txpower = ah->txpower_limit;
-
-       txpower += ah->txpower_indexoffset;
-       if (txpower > 63)
-               txpower = 63;
-
-       ads->ctl11 = (pktlen & AR_FrameLen)
-               | (flags & ATH9K_TXDESC_VMF ? AR_VirtMoreFrag : 0)
-               | SM(txpower, AR_XmitPower)
-               | (flags & ATH9K_TXDESC_VEOL ? AR_VEOL : 0)
-               | (flags & ATH9K_TXDESC_CLRDMASK ? AR_ClrDestMask : 0)
-               | (keyIx != ATH9K_TXKEYIX_INVALID ? AR_DestIdxValid : 0)
-               | (flags & ATH9K_TXDESC_LOWRXCHAIN ? AR_LowRxChain : 0);
-
-       ads->ctl12 =
-               (keyIx != ATH9K_TXKEYIX_INVALID ? SM(keyIx, AR_DestIdx) : 0)
-               | SM(type, AR_FrameType)
-               | (flags & ATH9K_TXDESC_NOACK ? AR_NoAck : 0)
-               | (flags & ATH9K_TXDESC_EXT_ONLY ? AR_ExtOnly : 0)
-               | (flags & ATH9K_TXDESC_EXT_AND_CTL ? AR_ExtAndCtl : 0);
-
-       ads->ctl17 = SM(keyType, AR_EncrType) |
-                    (flags & ATH9K_TXDESC_LDPC ? AR_LDPC : 0);
-       ads->ctl18 = 0;
-       ads->ctl19 = AR_Not_Sounding;
-
-       ads->ctl20 = 0;
-       ads->ctl21 = 0;
-       ads->ctl22 = 0;
-}
-
-static void ar9003_hw_set11n_ratescenario(struct ath_hw *ah, void *ds,
-                                         void *lastds,
-                                         u32 durUpdateEn, u32 rtsctsRate,
-                                         u32 rtsctsDuration,
-                                         struct ath9k_11n_rate_series series[],
-                                         u32 nseries, u32 flags)
-{
-       struct ar9003_txc *ads = (struct ar9003_txc *) ds;
-       struct ar9003_txc *last_ads = (struct ar9003_txc *) lastds;
-       u_int32_t ctl11;
-
-       if (flags & (ATH9K_TXDESC_RTSENA | ATH9K_TXDESC_CTSENA)) {
-               ctl11 = ads->ctl11;
-
-               if (flags & ATH9K_TXDESC_RTSENA) {
-                       ctl11 &= ~AR_CTSEnable;
-                       ctl11 |= AR_RTSEnable;
-               } else {
-                       ctl11 &= ~AR_RTSEnable;
-                       ctl11 |= AR_CTSEnable;
-               }
-
-               ads->ctl11 = ctl11;
-       } else {
-               ads->ctl11 = (ads->ctl11 & ~(AR_RTSEnable | AR_CTSEnable));
-       }
-
-       ads->ctl13 = set11nTries(series, 0)
-               |  set11nTries(series, 1)
-               |  set11nTries(series, 2)
-               |  set11nTries(series, 3)
-               |  (durUpdateEn ? AR_DurUpdateEna : 0)
-               |  SM(0, AR_BurstDur);
-
-       ads->ctl14 = set11nRate(series, 0)
-               |  set11nRate(series, 1)
-               |  set11nRate(series, 2)
-               |  set11nRate(series, 3);
-
-       ads->ctl15 = set11nPktDurRTSCTS(series, 0)
-               |  set11nPktDurRTSCTS(series, 1);
-
-       ads->ctl16 = set11nPktDurRTSCTS(series, 2)
-               |  set11nPktDurRTSCTS(series, 3);
-
-       ads->ctl18 = set11nRateFlags(series, 0)
-               |  set11nRateFlags(series, 1)
-               |  set11nRateFlags(series, 2)
-               |  set11nRateFlags(series, 3)
-               | SM(rtsctsRate, AR_RTSCTSRate);
-       ads->ctl19 = AR_Not_Sounding;
-
-       last_ads->ctl13 = ads->ctl13;
-       last_ads->ctl14 = ads->ctl14;
-}
-
-static void ar9003_hw_set11n_aggr_first(struct ath_hw *ah, void *ds,
-                                       u32 aggrLen)
-{
-       struct ar9003_txc *ads = (struct ar9003_txc *) ds;
-
-       ads->ctl12 |= (AR_IsAggr | AR_MoreAggr);
-
-       ads->ctl17 &= ~AR_AggrLen;
-       ads->ctl17 |= SM(aggrLen, AR_AggrLen);
-}
-
-static void ar9003_hw_set11n_aggr_middle(struct ath_hw *ah, void *ds,
-                                        u32 numDelims)
-{
-       struct ar9003_txc *ads = (struct ar9003_txc *) ds;
-       unsigned int ctl17;
-
-       ads->ctl12 |= (AR_IsAggr | AR_MoreAggr);
-
-       /*
-        * We use a stack variable to manipulate ctl6 to reduce uncached
-        * read modify, modfiy, write.
-        */
-       ctl17 = ads->ctl17;
-       ctl17 &= ~AR_PadDelim;
-       ctl17 |= SM(numDelims, AR_PadDelim);
-       ads->ctl17 = ctl17;
-}
-
-static void ar9003_hw_set11n_aggr_last(struct ath_hw *ah, void *ds)
-{
-       struct ar9003_txc *ads = (struct ar9003_txc *) ds;
-
-       ads->ctl12 |= AR_IsAggr;
-       ads->ctl12 &= ~AR_MoreAggr;
-       ads->ctl17 &= ~AR_PadDelim;
-}
-
-static void ar9003_hw_clr11n_aggr(struct ath_hw *ah, void *ds)
-{
-       struct ar9003_txc *ads = (struct ar9003_txc *) ds;
-
-       ads->ctl12 &= (~AR_IsAggr & ~AR_MoreAggr);
-}
-
-static void ar9003_hw_set11n_burstduration(struct ath_hw *ah, void *ds,
-                                          u32 burstDuration)
-{
-       struct ar9003_txc *ads = (struct ar9003_txc *) ds;
-
-       ads->ctl13 &= ~AR_BurstDur;
-       ads->ctl13 |= SM(burstDuration, AR_BurstDur);
-
-}
-
-static void ar9003_hw_set11n_virtualmorefrag(struct ath_hw *ah, void *ds,
-                                            u32 vmf)
-{
-       struct ar9003_txc *ads = (struct ar9003_txc *) ds;
-
-       if (vmf)
-               ads->ctl11 |=  AR_VirtMoreFrag;
-       else
-               ads->ctl11 &= ~AR_VirtMoreFrag;
-}
-
-void ar9003_hw_set_paprd_txdesc(struct ath_hw *ah, void *ds, u8 chains)
-{
-       struct ar9003_txc *ads = ds;
-
-       ads->ctl12 |= SM(chains, AR_PAPRDChainMask);
-}
-EXPORT_SYMBOL(ar9003_hw_set_paprd_txdesc);
-
-void ar9003_hw_attach_mac_ops(struct ath_hw *hw)
-{
-       struct ath_hw_ops *ops = ath9k_hw_ops(hw);
-
-       ops->rx_enable = ar9003_hw_rx_enable;
-       ops->set_desc_link = ar9003_hw_set_desc_link;
-       ops->get_desc_link = ar9003_hw_get_desc_link;
-       ops->get_isr = ar9003_hw_get_isr;
-       ops->fill_txdesc = ar9003_hw_fill_txdesc;
-       ops->proc_txdesc = ar9003_hw_proc_txdesc;
-       ops->set11n_txdesc = ar9003_hw_set11n_txdesc;
-       ops->set11n_ratescenario = ar9003_hw_set11n_ratescenario;
-       ops->set11n_aggr_first = ar9003_hw_set11n_aggr_first;
-       ops->set11n_aggr_middle = ar9003_hw_set11n_aggr_middle;
-       ops->set11n_aggr_last = ar9003_hw_set11n_aggr_last;
-       ops->clr11n_aggr = ar9003_hw_clr11n_aggr;
-       ops->set11n_burstduration = ar9003_hw_set11n_burstduration;
-       ops->set11n_virtualmorefrag = ar9003_hw_set11n_virtualmorefrag;
-}
-
-void ath9k_hw_set_rx_bufsize(struct ath_hw *ah, u16 buf_size)
-{
-       REG_WRITE(ah, AR_DATABUF_SIZE, buf_size & AR_DATABUF_SIZE_MASK);
-}
-EXPORT_SYMBOL(ath9k_hw_set_rx_bufsize);
-
-void ath9k_hw_addrxbuf_edma(struct ath_hw *ah, u32 rxdp,
-                           enum ath9k_rx_qtype qtype)
-{
-       if (qtype == ATH9K_RX_QUEUE_HP)
-               REG_WRITE(ah, AR_HP_RXDP, rxdp);
-       else
-               REG_WRITE(ah, AR_LP_RXDP, rxdp);
-}
-EXPORT_SYMBOL(ath9k_hw_addrxbuf_edma);
-
-int ath9k_hw_process_rxdesc_edma(struct ath_hw *ah, struct ath_rx_status *rxs,
-                                void *buf_addr)
-{
-       struct ar9003_rxs *rxsp = (struct ar9003_rxs *) buf_addr;
-       unsigned int phyerr;
-
-       /* TODO: byte swap on big endian for ar9300_10 */
-
-       if ((rxsp->status11 & AR_RxDone) == 0)
-               return -EINPROGRESS;
-
-       if (MS(rxsp->ds_info, AR_DescId) != 0x168c)
-               return -EINVAL;
-
-       if ((rxsp->ds_info & (AR_TxRxDesc | AR_CtrlStat)) != 0)
-               return -EINPROGRESS;
-
-       if (!rxs)
-               return 0;
-
-       rxs->rs_status = 0;
-       rxs->rs_flags =  0;
-
-       rxs->rs_datalen = rxsp->status2 & AR_DataLen;
-       rxs->rs_tstamp =  rxsp->status3;
-
-       /* XXX: Keycache */
-       rxs->rs_rssi = MS(rxsp->status5, AR_RxRSSICombined);
-       rxs->rs_rssi_ctl0 = MS(rxsp->status1, AR_RxRSSIAnt00);
-       rxs->rs_rssi_ctl1 = MS(rxsp->status1, AR_RxRSSIAnt01);
-       rxs->rs_rssi_ctl2 = MS(rxsp->status1, AR_RxRSSIAnt02);
-       rxs->rs_rssi_ext0 = MS(rxsp->status5, AR_RxRSSIAnt10);
-       rxs->rs_rssi_ext1 = MS(rxsp->status5, AR_RxRSSIAnt11);
-       rxs->rs_rssi_ext2 = MS(rxsp->status5, AR_RxRSSIAnt12);
-
-       if (rxsp->status11 & AR_RxKeyIdxValid)
-               rxs->rs_keyix = MS(rxsp->status11, AR_KeyIdx);
-       else
-               rxs->rs_keyix = ATH9K_RXKEYIX_INVALID;
-
-       rxs->rs_rate = MS(rxsp->status1, AR_RxRate);
-       rxs->rs_more = (rxsp->status2 & AR_RxMore) ? 1 : 0;
-
-       rxs->rs_isaggr = (rxsp->status11 & AR_RxAggr) ? 1 : 0;
-       rxs->rs_moreaggr = (rxsp->status11 & AR_RxMoreAggr) ? 1 : 0;
-       rxs->rs_antenna = (MS(rxsp->status4, AR_RxAntenna) & 0x7);
-       rxs->rs_flags  = (rxsp->status4 & AR_GI) ? ATH9K_RX_GI : 0;
-       rxs->rs_flags  |= (rxsp->status4 & AR_2040) ? ATH9K_RX_2040 : 0;
-
-       rxs->evm0 = rxsp->status6;
-       rxs->evm1 = rxsp->status7;
-       rxs->evm2 = rxsp->status8;
-       rxs->evm3 = rxsp->status9;
-       rxs->evm4 = (rxsp->status10 & 0xffff);
-
-       if (rxsp->status11 & AR_PreDelimCRCErr)
-               rxs->rs_flags |= ATH9K_RX_DELIM_CRC_PRE;
-
-       if (rxsp->status11 & AR_PostDelimCRCErr)
-               rxs->rs_flags |= ATH9K_RX_DELIM_CRC_POST;
-
-       if (rxsp->status11 & AR_DecryptBusyErr)
-               rxs->rs_flags |= ATH9K_RX_DECRYPT_BUSY;
-
-       if ((rxsp->status11 & AR_RxFrameOK) == 0) {
-               /*
-                * AR_CRCErr will bet set to true if we're on the last
-                * subframe and the AR_PostDelimCRCErr is caught.
-                * In a way this also gives us a guarantee that when
-                * (!(AR_CRCErr) && (AR_PostDelimCRCErr)) we cannot
-                * possibly be reviewing the last subframe. AR_CRCErr
-                * is the CRC of the actual data.
-                */
-               if (rxsp->status11 & AR_CRCErr) {
-                       rxs->rs_status |= ATH9K_RXERR_CRC;
-               } else if (rxsp->status11 & AR_PHYErr) {
-                       phyerr = MS(rxsp->status11, AR_PHYErrCode);
-                       /*
-                        * If we reach a point here where AR_PostDelimCRCErr is
-                        * true it implies we're *not* on the last subframe. In
-                        * in that case that we know already that the CRC of
-                        * the frame was OK, and MAC would send an ACK for that
-                        * subframe, even if we did get a phy error of type
-                        * ATH9K_PHYERR_OFDM_RESTART. This is only applicable
-                        * to frame that are prior to the last subframe.
-                        * The AR_PostDelimCRCErr is the CRC for the MPDU
-                        * delimiter, which contains the 4 reserved bits,
-                        * the MPDU length (12 bits), and follows the MPDU
-                        * delimiter for an A-MPDU subframe (0x4E = 'N' ASCII).
-                        */
-                       if ((phyerr == ATH9K_PHYERR_OFDM_RESTART) &&
-                           (rxsp->status11 & AR_PostDelimCRCErr)) {
-                               rxs->rs_phyerr = 0;
-                       } else {
-                               rxs->rs_status |= ATH9K_RXERR_PHY;
-                               rxs->rs_phyerr = phyerr;
-                       }
-
-               } else if (rxsp->status11 & AR_DecryptCRCErr) {
-                       rxs->rs_status |= ATH9K_RXERR_DECRYPT;
-               } else if (rxsp->status11 & AR_MichaelErr) {
-                       rxs->rs_status |= ATH9K_RXERR_MIC;
-               } else if (rxsp->status11 & AR_KeyMiss)
-                       rxs->rs_status |= ATH9K_RXERR_DECRYPT;
-       }
-
-       return 0;
-}
-EXPORT_SYMBOL(ath9k_hw_process_rxdesc_edma);
-
-void ath9k_hw_reset_txstatus_ring(struct ath_hw *ah)
-{
-       ah->ts_tail = 0;
-
-       memset((void *) ah->ts_ring, 0,
-               ah->ts_size * sizeof(struct ar9003_txs));
-
-       ath_print(ath9k_hw_common(ah), ATH_DBG_XMIT,
-                 "TS Start 0x%x End 0x%x Virt %p, Size %d\n",
-                  ah->ts_paddr_start, ah->ts_paddr_end,
-                  ah->ts_ring, ah->ts_size);
-
-       REG_WRITE(ah, AR_Q_STATUS_RING_START, ah->ts_paddr_start);
-       REG_WRITE(ah, AR_Q_STATUS_RING_END, ah->ts_paddr_end);
-}
-
-void ath9k_hw_setup_statusring(struct ath_hw *ah, void *ts_start,
-                              u32 ts_paddr_start,
-                              u8 size)
-{
-
-       ah->ts_paddr_start = ts_paddr_start;
-       ah->ts_paddr_end = ts_paddr_start + (size * sizeof(struct ar9003_txs));
-       ah->ts_size = size;
-       ah->ts_ring = (struct ar9003_txs *) ts_start;
-
-       ath9k_hw_reset_txstatus_ring(ah);
-}
-EXPORT_SYMBOL(ath9k_hw_setup_statusring);
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mac.h b/drivers/net/wireless/ath/ath9k/ar9003_mac.h
deleted file mode 100644 (file)
index 9f2cea7..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef AR9003_MAC_H
-#define AR9003_MAC_H
-
-#define AR_DescId      0xffff0000
-#define AR_DescId_S    16
-#define AR_CtrlStat    0x00004000
-#define AR_CtrlStat_S  14
-#define AR_TxRxDesc    0x00008000
-#define AR_TxRxDesc_S  15
-#define AR_TxQcuNum    0x00000f00
-#define AR_TxQcuNum_S  8
-
-#define AR_BufLen      0x0fff0000
-#define AR_BufLen_S    16
-
-#define AR_TxDescId    0xffff0000
-#define AR_TxDescId_S  16
-#define AR_TxPtrChkSum 0x0000ffff
-
-#define AR_LowRxChain  0x00004000
-
-#define AR_Not_Sounding        0x20000000
-
-/* ctl 12 */
-#define AR_PAPRDChainMask      0x00000e00
-#define AR_PAPRDChainMask_S    9
-
-#define MAP_ISR_S2_CST          6
-#define MAP_ISR_S2_GTT          6
-#define MAP_ISR_S2_TIM          3
-#define MAP_ISR_S2_CABEND       0
-#define MAP_ISR_S2_DTIMSYNC     7
-#define MAP_ISR_S2_DTIM         7
-#define MAP_ISR_S2_TSFOOR       4
-#define MAP_ISR_S2_BB_WATCHDOG  6
-
-#define AR9003TXC_CONST(_ds) ((const struct ar9003_txc *) _ds)
-
-struct ar9003_rxs {
-       u32 ds_info;
-       u32 status1;
-       u32 status2;
-       u32 status3;
-       u32 status4;
-       u32 status5;
-       u32 status6;
-       u32 status7;
-       u32 status8;
-       u32 status9;
-       u32 status10;
-       u32 status11;
-} __packed;
-
-/* Transmit Control Descriptor */
-struct ar9003_txc {
-       u32 info;   /* descriptor information */
-       u32 link;   /* link pointer */
-       u32 data0;  /* data pointer to 1st buffer */
-       u32 ctl3;   /* DMA control 3  */
-       u32 data1;  /* data pointer to 2nd buffer */
-       u32 ctl5;   /* DMA control 5  */
-       u32 data2;  /* data pointer to 3rd buffer */
-       u32 ctl7;   /* DMA control 7  */
-       u32 data3;  /* data pointer to 4th buffer */
-       u32 ctl9;   /* DMA control 9  */
-       u32 ctl10;  /* DMA control 10 */
-       u32 ctl11;  /* DMA control 11 */
-       u32 ctl12;  /* DMA control 12 */
-       u32 ctl13;  /* DMA control 13 */
-       u32 ctl14;  /* DMA control 14 */
-       u32 ctl15;  /* DMA control 15 */
-       u32 ctl16;  /* DMA control 16 */
-       u32 ctl17;  /* DMA control 17 */
-       u32 ctl18;  /* DMA control 18 */
-       u32 ctl19;  /* DMA control 19 */
-       u32 ctl20;  /* DMA control 20 */
-       u32 ctl21;  /* DMA control 21 */
-       u32 ctl22;  /* DMA control 22 */
-       u32 pad[9]; /* pad to cache line (128 bytes/32 dwords) */
-} __packed;
-
-struct ar9003_txs {
-       u32 ds_info;
-       u32 status1;
-       u32 status2;
-       u32 status3;
-       u32 status4;
-       u32 status5;
-       u32 status6;
-       u32 status7;
-       u32 status8;
-} __packed;
-
-void ar9003_hw_attach_mac_ops(struct ath_hw *hw);
-void ath9k_hw_set_rx_bufsize(struct ath_hw *ah, u16 buf_size);
-void ath9k_hw_addrxbuf_edma(struct ath_hw *ah, u32 rxdp,
-                           enum ath9k_rx_qtype qtype);
-
-int ath9k_hw_process_rxdesc_edma(struct ath_hw *ah,
-                                struct ath_rx_status *rxs,
-                                void *buf_addr);
-void ath9k_hw_reset_txstatus_ring(struct ath_hw *ah);
-void ath9k_hw_setup_statusring(struct ath_hw *ah, void *ts_start,
-                              u32 ts_paddr_start,
-                              u8 size);
-#endif
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_paprd.c b/drivers/net/wireless/ath/ath9k/ar9003_paprd.c
deleted file mode 100644 (file)
index 716db41..0000000
+++ /dev/null
@@ -1,719 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "hw.h"
-#include "ar9003_phy.h"
-
-void ar9003_paprd_enable(struct ath_hw *ah, bool val)
-{
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_CTRL0_B0,
-                     AR_PHY_PAPRD_CTRL0_PAPRD_ENABLE, !!val);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_CTRL0_B1,
-                     AR_PHY_PAPRD_CTRL0_PAPRD_ENABLE, !!val);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_CTRL0_B2,
-                     AR_PHY_PAPRD_CTRL0_PAPRD_ENABLE, !!val);
-}
-EXPORT_SYMBOL(ar9003_paprd_enable);
-
-static void ar9003_paprd_setup_single_table(struct ath_hw *ah)
-{
-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
-       struct ar9300_modal_eep_header *hdr;
-       const u32 ctrl0[3] = {
-               AR_PHY_PAPRD_CTRL0_B0,
-               AR_PHY_PAPRD_CTRL0_B1,
-               AR_PHY_PAPRD_CTRL0_B2
-       };
-       const u32 ctrl1[3] = {
-               AR_PHY_PAPRD_CTRL1_B0,
-               AR_PHY_PAPRD_CTRL1_B1,
-               AR_PHY_PAPRD_CTRL1_B2
-       };
-       u32 am_mask, ht40_mask;
-       int i;
-
-       if (ah->curchan && IS_CHAN_5GHZ(ah->curchan))
-               hdr = &eep->modalHeader5G;
-       else
-               hdr = &eep->modalHeader2G;
-
-       am_mask = le32_to_cpu(hdr->papdRateMaskHt20);
-       ht40_mask = le32_to_cpu(hdr->papdRateMaskHt40);
-
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_AM2AM, AR_PHY_PAPRD_AM2AM_MASK, am_mask);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_AM2PM, AR_PHY_PAPRD_AM2PM_MASK, am_mask);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_HT40, AR_PHY_PAPRD_HT40_MASK, ht40_mask);
-
-       for (i = 0; i < 3; i++) {
-               REG_RMW_FIELD(ah, ctrl0[i],
-                             AR_PHY_PAPRD_CTRL0_USE_SINGLE_TABLE_MASK, 1);
-               REG_RMW_FIELD(ah, ctrl1[i],
-                             AR_PHY_PAPRD_CTRL1_ADAPTIVE_AM2PM_ENABLE, 1);
-               REG_RMW_FIELD(ah, ctrl1[i],
-                             AR_PHY_PAPRD_CTRL1_ADAPTIVE_AM2AM_ENABLE, 1);
-               REG_RMW_FIELD(ah, ctrl1[i],
-                             AR_PHY_PAPRD_CTRL1_ADAPTIVE_SCALING_ENA, 0);
-               REG_RMW_FIELD(ah, ctrl1[i],
-                             AR_PHY_PAPRD_CTRL1_PA_GAIN_SCALE_FACT_MASK, 181);
-               REG_RMW_FIELD(ah, ctrl1[i],
-                             AR_PHY_PAPRD_CTRL1_PAPRD_MAG_SCALE_FACT, 361);
-               REG_RMW_FIELD(ah, ctrl1[i],
-                             AR_PHY_PAPRD_CTRL1_ADAPTIVE_SCALING_ENA, 0);
-               REG_RMW_FIELD(ah, ctrl0[i],
-                             AR_PHY_PAPRD_CTRL0_PAPRD_MAG_THRSH, 3);
-       }
-
-       ar9003_paprd_enable(ah, false);
-
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL1,
-                     AR_PHY_PAPRD_TRAINER_CNTL1_CF_PAPRD_LB_SKIP, 0x30);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL1,
-                     AR_PHY_PAPRD_TRAINER_CNTL1_CF_PAPRD_LB_ENABLE, 1);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL1,
-                     AR_PHY_PAPRD_TRAINER_CNTL1_CF_PAPRD_TX_GAIN_FORCE, 1);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL1,
-                     AR_PHY_PAPRD_TRAINER_CNTL1_CF_PAPRD_RX_BB_GAIN_FORCE, 0);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL1,
-                     AR_PHY_PAPRD_TRAINER_CNTL1_CF_PAPRD_IQCORR_ENABLE, 0);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL1,
-                     AR_PHY_PAPRD_TRAINER_CNTL1_CF_PAPRD_AGC2_SETTLING, 28);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL1,
-                     AR_PHY_PAPRD_TRAINER_CNTL1_CF_CF_PAPRD_TRAIN_ENABLE, 1);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL2,
-                     AR_PHY_PAPRD_TRAINER_CNTL2_CF_PAPRD_INIT_RX_BB_GAIN, 147);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3,
-                     AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_FINE_CORR_LEN, 4);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3,
-                     AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_COARSE_CORR_LEN, 4);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3,
-                     AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_NUM_CORR_STAGES, 7);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3,
-                     AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_MIN_LOOPBACK_DEL, 1);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3,
-                     AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_QUICK_DROP, -6);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3,
-                     AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_ADC_DESIRED_SIZE,
-                     -15);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3,
-                     AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_BBTXMIX_DISABLE, 1);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL4,
-                     AR_PHY_PAPRD_TRAINER_CNTL4_CF_PAPRD_SAFETY_DELTA, 0);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL4,
-                     AR_PHY_PAPRD_TRAINER_CNTL4_CF_PAPRD_MIN_CORR, 400);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL4,
-                     AR_PHY_PAPRD_TRAINER_CNTL4_CF_PAPRD_NUM_TRAIN_SAMPLES,
-                     100);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_PRE_POST_SCALE_0_B0,
-                     AR_PHY_PAPRD_PRE_POST_SCALING, 261376);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_PRE_POST_SCALE_1_B0,
-                     AR_PHY_PAPRD_PRE_POST_SCALING, 248079);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_PRE_POST_SCALE_2_B0,
-                     AR_PHY_PAPRD_PRE_POST_SCALING, 233759);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_PRE_POST_SCALE_3_B0,
-                     AR_PHY_PAPRD_PRE_POST_SCALING, 220464);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_PRE_POST_SCALE_4_B0,
-                     AR_PHY_PAPRD_PRE_POST_SCALING, 208194);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_PRE_POST_SCALE_5_B0,
-                     AR_PHY_PAPRD_PRE_POST_SCALING, 196949);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_PRE_POST_SCALE_6_B0,
-                     AR_PHY_PAPRD_PRE_POST_SCALING, 185706);
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_PRE_POST_SCALE_7_B0,
-                     AR_PHY_PAPRD_PRE_POST_SCALING, 175487);
-}
-
-static void ar9003_paprd_get_gain_table(struct ath_hw *ah)
-{
-       u32 *entry = ah->paprd_gain_table_entries;
-       u8 *index = ah->paprd_gain_table_index;
-       u32 reg = AR_PHY_TXGAIN_TABLE;
-       int i;
-
-       memset(entry, 0, sizeof(ah->paprd_gain_table_entries));
-       memset(index, 0, sizeof(ah->paprd_gain_table_index));
-
-       for (i = 0; i < 32; i++) {
-               entry[i] = REG_READ(ah, reg);
-               index[i] = (entry[i] >> 24) & 0xff;
-               reg += 4;
-       }
-}
-
-static unsigned int ar9003_get_desired_gain(struct ath_hw *ah, int chain,
-                                           int target_power)
-{
-       int olpc_gain_delta = 0;
-       int alpha_therm, alpha_volt;
-       int therm_cal_value, volt_cal_value;
-       int therm_value, volt_value;
-       int thermal_gain_corr, voltage_gain_corr;
-       int desired_scale, desired_gain = 0;
-       u32 reg;
-
-       REG_CLR_BIT(ah, AR_PHY_PAPRD_TRAINER_STAT1,
-                   AR_PHY_PAPRD_TRAINER_STAT1_PAPRD_TRAIN_DONE);
-       desired_scale = REG_READ_FIELD(ah, AR_PHY_TPC_12,
-                                      AR_PHY_TPC_12_DESIRED_SCALE_HT40_5);
-       alpha_therm = REG_READ_FIELD(ah, AR_PHY_TPC_19,
-                                    AR_PHY_TPC_19_ALPHA_THERM);
-       alpha_volt = REG_READ_FIELD(ah, AR_PHY_TPC_19,
-                                   AR_PHY_TPC_19_ALPHA_VOLT);
-       therm_cal_value = REG_READ_FIELD(ah, AR_PHY_TPC_18,
-                                        AR_PHY_TPC_18_THERM_CAL_VALUE);
-       volt_cal_value = REG_READ_FIELD(ah, AR_PHY_TPC_18,
-                                       AR_PHY_TPC_18_VOLT_CAL_VALUE);
-       therm_value = REG_READ_FIELD(ah, AR_PHY_BB_THERM_ADC_4,
-                                    AR_PHY_BB_THERM_ADC_4_LATEST_THERM_VALUE);
-       volt_value = REG_READ_FIELD(ah, AR_PHY_BB_THERM_ADC_4,
-                                   AR_PHY_BB_THERM_ADC_4_LATEST_VOLT_VALUE);
-
-       if (chain == 0)
-               reg = AR_PHY_TPC_11_B0;
-       else if (chain == 1)
-               reg = AR_PHY_TPC_11_B1;
-       else
-               reg = AR_PHY_TPC_11_B2;
-
-       olpc_gain_delta = REG_READ_FIELD(ah, reg,
-                                        AR_PHY_TPC_11_OLPC_GAIN_DELTA);
-
-       if (olpc_gain_delta >= 128)
-               olpc_gain_delta = olpc_gain_delta - 256;
-
-       thermal_gain_corr = (alpha_therm * (therm_value - therm_cal_value) +
-                            (256 / 2)) / 256;
-       voltage_gain_corr = (alpha_volt * (volt_value - volt_cal_value) +
-                            (128 / 2)) / 128;
-       desired_gain = target_power - olpc_gain_delta - thermal_gain_corr -
-           voltage_gain_corr + desired_scale;
-
-       return desired_gain;
-}
-
-static void ar9003_tx_force_gain(struct ath_hw *ah, unsigned int gain_index)
-{
-       int selected_gain_entry, txbb1dbgain, txbb6dbgain, txmxrgain;
-       int padrvgnA, padrvgnB, padrvgnC, padrvgnD;
-       u32 *gain_table_entries = ah->paprd_gain_table_entries;
-
-       selected_gain_entry = gain_table_entries[gain_index];
-       txbb1dbgain = selected_gain_entry & 0x7;
-       txbb6dbgain = (selected_gain_entry >> 3) & 0x3;
-       txmxrgain = (selected_gain_entry >> 5) & 0xf;
-       padrvgnA = (selected_gain_entry >> 9) & 0xf;
-       padrvgnB = (selected_gain_entry >> 13) & 0xf;
-       padrvgnC = (selected_gain_entry >> 17) & 0xf;
-       padrvgnD = (selected_gain_entry >> 21) & 0x3;
-
-       REG_RMW_FIELD(ah, AR_PHY_TX_FORCED_GAIN,
-                     AR_PHY_TX_FORCED_GAIN_FORCED_TXBB1DBGAIN, txbb1dbgain);
-       REG_RMW_FIELD(ah, AR_PHY_TX_FORCED_GAIN,
-                     AR_PHY_TX_FORCED_GAIN_FORCED_TXBB6DBGAIN, txbb6dbgain);
-       REG_RMW_FIELD(ah, AR_PHY_TX_FORCED_GAIN,
-                     AR_PHY_TX_FORCED_GAIN_FORCED_TXMXRGAIN, txmxrgain);
-       REG_RMW_FIELD(ah, AR_PHY_TX_FORCED_GAIN,
-                     AR_PHY_TX_FORCED_GAIN_FORCED_PADRVGNA, padrvgnA);
-       REG_RMW_FIELD(ah, AR_PHY_TX_FORCED_GAIN,
-                     AR_PHY_TX_FORCED_GAIN_FORCED_PADRVGNB, padrvgnB);
-       REG_RMW_FIELD(ah, AR_PHY_TX_FORCED_GAIN,
-                     AR_PHY_TX_FORCED_GAIN_FORCED_PADRVGNC, padrvgnC);
-       REG_RMW_FIELD(ah, AR_PHY_TX_FORCED_GAIN,
-                     AR_PHY_TX_FORCED_GAIN_FORCED_PADRVGND, padrvgnD);
-       REG_RMW_FIELD(ah, AR_PHY_TX_FORCED_GAIN,
-                     AR_PHY_TX_FORCED_GAIN_FORCED_ENABLE_PAL, 0);
-       REG_RMW_FIELD(ah, AR_PHY_TX_FORCED_GAIN,
-                     AR_PHY_TX_FORCED_GAIN_FORCE_TX_GAIN, 0);
-       REG_RMW_FIELD(ah, AR_PHY_TPC_1, AR_PHY_TPC_1_FORCED_DAC_GAIN, 0);
-       REG_RMW_FIELD(ah, AR_PHY_TPC_1, AR_PHY_TPC_1_FORCE_DAC_GAIN, 0);
-}
-
-static inline int find_expn(int num)
-{
-       return fls(num) - 1;
-}
-
-static inline int find_proper_scale(int expn, int N)
-{
-       return (expn > N) ? expn - 10 : 0;
-}
-
-#define NUM_BIN 23
-
-static bool create_pa_curve(u32 *data_L, u32 *data_U, u32 *pa_table, u16 *gain)
-{
-       unsigned int thresh_accum_cnt;
-       int x_est[NUM_BIN + 1], Y[NUM_BIN + 1], theta[NUM_BIN + 1];
-       int PA_in[NUM_BIN + 1];
-       int B1_tmp[NUM_BIN + 1], B2_tmp[NUM_BIN + 1];
-       unsigned int B1_abs_max, B2_abs_max;
-       int max_index, scale_factor;
-       int y_est[NUM_BIN + 1];
-       int x_est_fxp1_nonlin, x_tilde[NUM_BIN + 1];
-       unsigned int x_tilde_abs;
-       int G_fxp, Y_intercept, order_x_by_y, M, I, L, sum_y_sqr, sum_y_quad;
-       int Q_x, Q_B1, Q_B2, beta_raw, alpha_raw, scale_B;
-       int Q_scale_B, Q_beta, Q_alpha, alpha, beta, order_1, order_2;
-       int order1_5x, order2_3x, order1_5x_rem, order2_3x_rem;
-       int y5, y3, tmp;
-       int theta_low_bin = 0;
-       int i;
-
-       /* disregard any bin that contains <= 16 samples */
-       thresh_accum_cnt = 16;
-       scale_factor = 5;
-       max_index = 0;
-       memset(theta, 0, sizeof(theta));
-       memset(x_est, 0, sizeof(x_est));
-       memset(Y, 0, sizeof(Y));
-       memset(y_est, 0, sizeof(y_est));
-       memset(x_tilde, 0, sizeof(x_tilde));
-
-       for (i = 0; i < NUM_BIN; i++) {
-               s32 accum_cnt, accum_tx, accum_rx, accum_ang;
-
-               /* number of samples */
-               accum_cnt = data_L[i] & 0xffff;
-
-               if (accum_cnt <= thresh_accum_cnt)
-                       continue;
-
-               /* sum(tx amplitude) */
-               accum_tx = ((data_L[i] >> 16) & 0xffff) |
-                   ((data_U[i] & 0x7ff) << 16);
-
-               /* sum(rx amplitude distance to lower bin edge) */
-               accum_rx = ((data_U[i] >> 11) & 0x1f) |
-                   ((data_L[i + 23] & 0xffff) << 5);
-
-               /* sum(angles) */
-               accum_ang = ((data_L[i + 23] >> 16) & 0xffff) |
-                   ((data_U[i + 23] & 0x7ff) << 16);
-
-               accum_tx <<= scale_factor;
-               accum_rx <<= scale_factor;
-               x_est[i + 1] = (((accum_tx + accum_cnt) / accum_cnt) + 32) >>
-                   scale_factor;
-
-               Y[i + 1] = ((((accum_rx + accum_cnt) / accum_cnt) + 32) >>
-                           scale_factor) +
-                           (1 << scale_factor) * max_index + 16;
-
-               if (accum_ang >= (1 << 26))
-                       accum_ang -= 1 << 27;
-
-               theta[i + 1] = ((accum_ang * (1 << scale_factor)) + accum_cnt) /
-                   accum_cnt;
-
-               max_index++;
-       }
-
-       /*
-        * Find average theta of first 5 bin and all of those to same value.
-        * Curve is linear at that range.
-        */
-       for (i = 1; i < 6; i++)
-               theta_low_bin += theta[i];
-
-       theta_low_bin = theta_low_bin / 5;
-       for (i = 1; i < 6; i++)
-               theta[i] = theta_low_bin;
-
-       /* Set values at origin */
-       theta[0] = theta_low_bin;
-       for (i = 0; i <= max_index; i++)
-               theta[i] -= theta_low_bin;
-
-       x_est[0] = 0;
-       Y[0] = 0;
-       scale_factor = 8;
-
-       /* low signal gain */
-       if (x_est[6] == x_est[3])
-               return false;
-
-       G_fxp =
-           (((Y[6] - Y[3]) * 1 << scale_factor) +
-            (x_est[6] - x_est[3])) / (x_est[6] - x_est[3]);
-
-       /* prevent division by zero */
-       if (G_fxp == 0)
-               return false;
-
-       Y_intercept =
-           (G_fxp * (x_est[0] - x_est[3]) +
-            (1 << scale_factor)) / (1 << scale_factor) + Y[3];
-
-       for (i = 0; i <= max_index; i++)
-               y_est[i] = Y[i] - Y_intercept;
-
-       for (i = 0; i <= 3; i++) {
-               y_est[i] = i * 32;
-               x_est[i] = ((y_est[i] * 1 << scale_factor) + G_fxp) / G_fxp;
-       }
-
-       if (y_est[max_index] == 0)
-               return false;
-
-       x_est_fxp1_nonlin =
-           x_est[max_index] - ((1 << scale_factor) * y_est[max_index] +
-                               G_fxp) / G_fxp;
-
-       order_x_by_y =
-           (x_est_fxp1_nonlin + y_est[max_index]) / y_est[max_index];
-
-       if (order_x_by_y == 0)
-               M = 10;
-       else if (order_x_by_y == 1)
-               M = 9;
-       else
-               M = 8;
-
-       I = (max_index > 15) ? 7 : max_index >> 1;
-       L = max_index - I;
-       scale_factor = 8;
-       sum_y_sqr = 0;
-       sum_y_quad = 0;
-       x_tilde_abs = 0;
-
-       for (i = 0; i <= L; i++) {
-               unsigned int y_sqr;
-               unsigned int y_quad;
-               unsigned int tmp_abs;
-
-               /* prevent division by zero */
-               if (y_est[i + I] == 0)
-                       return false;
-
-               x_est_fxp1_nonlin =
-                   x_est[i + I] - ((1 << scale_factor) * y_est[i + I] +
-                                   G_fxp) / G_fxp;
-
-               x_tilde[i] =
-                   (x_est_fxp1_nonlin * (1 << M) + y_est[i + I]) / y_est[i +
-                                                                         I];
-               x_tilde[i] =
-                   (x_tilde[i] * (1 << M) + y_est[i + I]) / y_est[i + I];
-               x_tilde[i] =
-                   (x_tilde[i] * (1 << M) + y_est[i + I]) / y_est[i + I];
-               y_sqr =
-                   (y_est[i + I] * y_est[i + I] +
-                    (scale_factor * scale_factor)) / (scale_factor *
-                                                      scale_factor);
-               tmp_abs = abs(x_tilde[i]);
-               if (tmp_abs > x_tilde_abs)
-                       x_tilde_abs = tmp_abs;
-
-               y_quad = y_sqr * y_sqr;
-               sum_y_sqr = sum_y_sqr + y_sqr;
-               sum_y_quad = sum_y_quad + y_quad;
-               B1_tmp[i] = y_sqr * (L + 1);
-               B2_tmp[i] = y_sqr;
-       }
-
-       B1_abs_max = 0;
-       B2_abs_max = 0;
-       for (i = 0; i <= L; i++) {
-               int abs_val;
-
-               B1_tmp[i] -= sum_y_sqr;
-               B2_tmp[i] = sum_y_quad - sum_y_sqr * B2_tmp[i];
-
-               abs_val = abs(B1_tmp[i]);
-               if (abs_val > B1_abs_max)
-                       B1_abs_max = abs_val;
-
-               abs_val = abs(B2_tmp[i]);
-               if (abs_val > B2_abs_max)
-                       B2_abs_max = abs_val;
-       }
-
-       Q_x = find_proper_scale(find_expn(x_tilde_abs), 10);
-       Q_B1 = find_proper_scale(find_expn(B1_abs_max), 10);
-       Q_B2 = find_proper_scale(find_expn(B2_abs_max), 10);
-
-       beta_raw = 0;
-       alpha_raw = 0;
-       for (i = 0; i <= L; i++) {
-               x_tilde[i] = x_tilde[i] / (1 << Q_x);
-               B1_tmp[i] = B1_tmp[i] / (1 << Q_B1);
-               B2_tmp[i] = B2_tmp[i] / (1 << Q_B2);
-               beta_raw = beta_raw + B1_tmp[i] * x_tilde[i];
-               alpha_raw = alpha_raw + B2_tmp[i] * x_tilde[i];
-       }
-
-       scale_B =
-           ((sum_y_quad / scale_factor) * (L + 1) -
-            (sum_y_sqr / scale_factor) * sum_y_sqr) * scale_factor;
-
-       Q_scale_B = find_proper_scale(find_expn(abs(scale_B)), 10);
-       scale_B = scale_B / (1 << Q_scale_B);
-       if (scale_B == 0)
-               return false;
-       Q_beta = find_proper_scale(find_expn(abs(beta_raw)), 10);
-       Q_alpha = find_proper_scale(find_expn(abs(alpha_raw)), 10);
-       beta_raw = beta_raw / (1 << Q_beta);
-       alpha_raw = alpha_raw / (1 << Q_alpha);
-       alpha = (alpha_raw << 10) / scale_B;
-       beta = (beta_raw << 10) / scale_B;
-       order_1 = 3 * M - Q_x - Q_B1 - Q_beta + 10 + Q_scale_B;
-       order_2 = 3 * M - Q_x - Q_B2 - Q_alpha + 10 + Q_scale_B;
-       order1_5x = order_1 / 5;
-       order2_3x = order_2 / 3;
-       order1_5x_rem = order_1 - 5 * order1_5x;
-       order2_3x_rem = order_2 - 3 * order2_3x;
-
-       for (i = 0; i < PAPRD_TABLE_SZ; i++) {
-               tmp = i * 32;
-               y5 = ((beta * tmp) >> 6) >> order1_5x;
-               y5 = (y5 * tmp) >> order1_5x;
-               y5 = (y5 * tmp) >> order1_5x;
-               y5 = (y5 * tmp) >> order1_5x;
-               y5 = (y5 * tmp) >> order1_5x;
-               y5 = y5 >> order1_5x_rem;
-               y3 = (alpha * tmp) >> order2_3x;
-               y3 = (y3 * tmp) >> order2_3x;
-               y3 = (y3 * tmp) >> order2_3x;
-               y3 = y3 >> order2_3x_rem;
-               PA_in[i] = y5 + y3 + (256 * tmp) / G_fxp;
-
-               if (i >= 2) {
-                       tmp = PA_in[i] - PA_in[i - 1];
-                       if (tmp < 0)
-                               PA_in[i] =
-                                   PA_in[i - 1] + (PA_in[i - 1] -
-                                                   PA_in[i - 2]);
-               }
-
-               PA_in[i] = (PA_in[i] < 1400) ? PA_in[i] : 1400;
-       }
-
-       beta_raw = 0;
-       alpha_raw = 0;
-
-       for (i = 0; i <= L; i++) {
-               int theta_tilde =
-                   ((theta[i + I] << M) + y_est[i + I]) / y_est[i + I];
-               theta_tilde =
-                   ((theta_tilde << M) + y_est[i + I]) / y_est[i + I];
-               theta_tilde =
-                   ((theta_tilde << M) + y_est[i + I]) / y_est[i + I];
-               beta_raw = beta_raw + B1_tmp[i] * theta_tilde;
-               alpha_raw = alpha_raw + B2_tmp[i] * theta_tilde;
-       }
-
-       Q_beta = find_proper_scale(find_expn(abs(beta_raw)), 10);
-       Q_alpha = find_proper_scale(find_expn(abs(alpha_raw)), 10);
-       beta_raw = beta_raw / (1 << Q_beta);
-       alpha_raw = alpha_raw / (1 << Q_alpha);
-
-       alpha = (alpha_raw << 10) / scale_B;
-       beta = (beta_raw << 10) / scale_B;
-       order_1 = 3 * M - Q_x - Q_B1 - Q_beta + 10 + Q_scale_B + 5;
-       order_2 = 3 * M - Q_x - Q_B2 - Q_alpha + 10 + Q_scale_B + 5;
-       order1_5x = order_1 / 5;
-       order2_3x = order_2 / 3;
-       order1_5x_rem = order_1 - 5 * order1_5x;
-       order2_3x_rem = order_2 - 3 * order2_3x;
-
-       for (i = 0; i < PAPRD_TABLE_SZ; i++) {
-               int PA_angle;
-
-               /* pa_table[4] is calculated from PA_angle for i=5 */
-               if (i == 4)
-                       continue;
-
-               tmp = i * 32;
-               if (beta > 0)
-                       y5 = (((beta * tmp - 64) >> 6) -
-                             (1 << order1_5x)) / (1 << order1_5x);
-               else
-                       y5 = ((((beta * tmp - 64) >> 6) +
-                              (1 << order1_5x)) / (1 << order1_5x));
-
-               y5 = (y5 * tmp) / (1 << order1_5x);
-               y5 = (y5 * tmp) / (1 << order1_5x);
-               y5 = (y5 * tmp) / (1 << order1_5x);
-               y5 = (y5 * tmp) / (1 << order1_5x);
-               y5 = y5 / (1 << order1_5x_rem);
-
-               if (beta > 0)
-                       y3 = (alpha * tmp -
-                             (1 << order2_3x)) / (1 << order2_3x);
-               else
-                       y3 = (alpha * tmp +
-                             (1 << order2_3x)) / (1 << order2_3x);
-               y3 = (y3 * tmp) / (1 << order2_3x);
-               y3 = (y3 * tmp) / (1 << order2_3x);
-               y3 = y3 / (1 << order2_3x_rem);
-
-               if (i < 4) {
-                       PA_angle = 0;
-               } else {
-                       PA_angle = y5 + y3;
-                       if (PA_angle < -150)
-                               PA_angle = -150;
-                       else if (PA_angle > 150)
-                               PA_angle = 150;
-               }
-
-               pa_table[i] = ((PA_in[i] & 0x7ff) << 11) + (PA_angle & 0x7ff);
-               if (i == 5) {
-                       PA_angle = (PA_angle + 2) >> 1;
-                       pa_table[i - 1] = ((PA_in[i - 1] & 0x7ff) << 11) +
-                           (PA_angle & 0x7ff);
-               }
-       }
-
-       *gain = G_fxp;
-       return true;
-}
-
-void ar9003_paprd_populate_single_table(struct ath_hw *ah,
-                                       struct ath9k_hw_cal_data *caldata,
-                                       int chain)
-{
-       u32 *paprd_table_val = caldata->pa_table[chain];
-       u32 small_signal_gain = caldata->small_signal_gain[chain];
-       u32 training_power;
-       u32 reg = 0;
-       int i;
-
-       training_power =
-           REG_READ_FIELD(ah, AR_PHY_POWERTX_RATE5,
-                          AR_PHY_POWERTX_RATE5_POWERTXHT20_0);
-       training_power -= 4;
-
-       if (chain == 0)
-               reg = AR_PHY_PAPRD_MEM_TAB_B0;
-       else if (chain == 1)
-               reg = AR_PHY_PAPRD_MEM_TAB_B1;
-       else if (chain == 2)
-               reg = AR_PHY_PAPRD_MEM_TAB_B2;
-
-       for (i = 0; i < PAPRD_TABLE_SZ; i++) {
-               REG_WRITE(ah, reg, paprd_table_val[i]);
-               reg = reg + 4;
-       }
-
-       if (chain == 0)
-               reg = AR_PHY_PA_GAIN123_B0;
-       else if (chain == 1)
-               reg = AR_PHY_PA_GAIN123_B1;
-       else
-               reg = AR_PHY_PA_GAIN123_B2;
-
-       REG_RMW_FIELD(ah, reg, AR_PHY_PA_GAIN123_PA_GAIN1, small_signal_gain);
-
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_CTRL1_B0,
-                     AR_PHY_PAPRD_CTRL1_PAPRD_POWER_AT_AM2AM_CAL,
-                     training_power);
-
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_CTRL1_B1,
-                     AR_PHY_PAPRD_CTRL1_PAPRD_POWER_AT_AM2AM_CAL,
-                     training_power);
-
-       REG_RMW_FIELD(ah, AR_PHY_PAPRD_CTRL1_B2,
-                     AR_PHY_PAPRD_CTRL1_PAPRD_POWER_AT_AM2AM_CAL,
-                     training_power);
-}
-EXPORT_SYMBOL(ar9003_paprd_populate_single_table);
-
-int ar9003_paprd_setup_gain_table(struct ath_hw *ah, int chain)
-{
-
-       unsigned int i, desired_gain, gain_index;
-       unsigned int train_power;
-
-       train_power = REG_READ_FIELD(ah, AR_PHY_POWERTX_RATE5,
-                                    AR_PHY_POWERTX_RATE5_POWERTXHT20_0);
-
-       train_power = train_power - 4;
-
-       desired_gain = ar9003_get_desired_gain(ah, chain, train_power);
-
-       gain_index = 0;
-       for (i = 0; i < 32; i++) {
-               if (ah->paprd_gain_table_index[i] >= desired_gain)
-                       break;
-               gain_index++;
-       }
-
-       ar9003_tx_force_gain(ah, gain_index);
-
-       REG_CLR_BIT(ah, AR_PHY_PAPRD_TRAINER_STAT1,
-                       AR_PHY_PAPRD_TRAINER_STAT1_PAPRD_TRAIN_DONE);
-
-       return 0;
-}
-EXPORT_SYMBOL(ar9003_paprd_setup_gain_table);
-
-int ar9003_paprd_create_curve(struct ath_hw *ah,
-                             struct ath9k_hw_cal_data *caldata, int chain)
-{
-       u16 *small_signal_gain = &caldata->small_signal_gain[chain];
-       u32 *pa_table = caldata->pa_table[chain];
-       u32 *data_L, *data_U;
-       int i, status = 0;
-       u32 *buf;
-       u32 reg;
-
-       memset(caldata->pa_table[chain], 0, sizeof(caldata->pa_table[chain]));
-
-       buf = kmalloc(2 * 48 * sizeof(u32), GFP_ATOMIC);
-       if (!buf)
-               return -ENOMEM;
-
-       data_L = &buf[0];
-       data_U = &buf[48];
-
-       REG_CLR_BIT(ah, AR_PHY_CHAN_INFO_MEMORY,
-                   AR_PHY_CHAN_INFO_MEMORY_CHANINFOMEM_S2_READ);
-
-       reg = AR_PHY_CHAN_INFO_TAB_0;
-       for (i = 0; i < 48; i++)
-               data_L[i] = REG_READ(ah, reg + (i << 2));
-
-       REG_SET_BIT(ah, AR_PHY_CHAN_INFO_MEMORY,
-                   AR_PHY_CHAN_INFO_MEMORY_CHANINFOMEM_S2_READ);
-
-       for (i = 0; i < 48; i++)
-               data_U[i] = REG_READ(ah, reg + (i << 2));
-
-       if (!create_pa_curve(data_L, data_U, pa_table, small_signal_gain))
-               status = -2;
-
-       REG_CLR_BIT(ah, AR_PHY_PAPRD_TRAINER_STAT1,
-                   AR_PHY_PAPRD_TRAINER_STAT1_PAPRD_TRAIN_DONE);
-
-       kfree(buf);
-
-       return status;
-}
-EXPORT_SYMBOL(ar9003_paprd_create_curve);
-
-int ar9003_paprd_init_table(struct ath_hw *ah)
-{
-       ar9003_paprd_setup_single_table(ah);
-       ar9003_paprd_get_gain_table(ah);
-       return 0;
-}
-EXPORT_SYMBOL(ar9003_paprd_init_table);
-
-bool ar9003_paprd_is_done(struct ath_hw *ah)
-{
-       return !!REG_READ_FIELD(ah, AR_PHY_PAPRD_TRAINER_STAT1,
-                               AR_PHY_PAPRD_TRAINER_STAT1_PAPRD_TRAIN_DONE);
-}
-EXPORT_SYMBOL(ar9003_paprd_is_done);
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
deleted file mode 100644 (file)
index a491854..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "hw.h"
-#include "ar9003_phy.h"
-
-static const int firstep_table[] =
-/* level:  0   1   2   3   4   5   6   7   8  */
-       { -4, -2,  0,  2,  4,  6,  8, 10, 12 }; /* lvl 0-8, default 2 */
-
-static const int cycpwrThr1_table[] =
-/* level:  0   1   2   3   4   5   6   7   8  */
-       { -6, -4, -2,  0,  2,  4,  6,  8 };     /* lvl 0-7, default 3 */
-
-/*
- * register values to turn OFDM weak signal detection OFF
- */
-static const int m1ThreshLow_off = 127;
-static const int m2ThreshLow_off = 127;
-static const int m1Thresh_off = 127;
-static const int m2Thresh_off = 127;
-static const int m2CountThr_off =  31;
-static const int m2CountThrLow_off =  63;
-static const int m1ThreshLowExt_off = 127;
-static const int m2ThreshLowExt_off = 127;
-static const int m1ThreshExt_off = 127;
-static const int m2ThreshExt_off = 127;
-
-/**
- * ar9003_hw_set_channel - set channel on single-chip device
- * @ah: atheros hardware structure
- * @chan:
- *
- * This is the function to change channel on single-chip devices, that is
- * all devices after ar9280.
- *
- * This function takes the channel value in MHz and sets
- * hardware channel value. Assumes writes have been enabled to analog bus.
- *
- * Actual Expression,
- *
- * For 2GHz channel,
- * Channel Frequency = (3/4) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^17)
- * (freq_ref = 40MHz)
- *
- * For 5GHz channel,
- * Channel Frequency = (3/2) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^10)
- * (freq_ref = 40MHz/(24>>amodeRefSel))
- *
- * For 5GHz channels which are 5MHz spaced,
- * Channel Frequency = (3/2) * freq_ref * (chansel[8:0] + chanfrac[16:0]/2^17)
- * (freq_ref = 40MHz)
- */
-static int ar9003_hw_set_channel(struct ath_hw *ah, struct ath9k_channel *chan)
-{
-       u16 bMode, fracMode = 0, aModeRefSel = 0;
-       u32 freq, channelSel = 0, reg32 = 0;
-       struct chan_centers centers;
-       int loadSynthChannel;
-
-       ath9k_hw_get_channel_centers(ah, chan, &centers);
-       freq = centers.synth_center;
-
-       if (freq < 4800) {     /* 2 GHz, fractional mode */
-               channelSel = CHANSEL_2G(freq);
-               /* Set to 2G mode */
-               bMode = 1;
-       } else {
-               channelSel = CHANSEL_5G(freq);
-               /* Doubler is ON, so, divide channelSel by 2. */
-               channelSel >>= 1;
-               /* Set to 5G mode */
-               bMode = 0;
-       }
-
-       /* Enable fractional mode for all channels */
-       fracMode = 1;
-       aModeRefSel = 0;
-       loadSynthChannel = 0;
-
-       reg32 = (bMode << 29);
-       REG_WRITE(ah, AR_PHY_SYNTH_CONTROL, reg32);
-
-       /* Enable Long shift Select for Synthesizer */
-       REG_RMW_FIELD(ah, AR_PHY_65NM_CH0_SYNTH4,
-                     AR_PHY_SYNTH4_LONG_SHIFT_SELECT, 1);
-
-       /* Program Synth. setting */
-       reg32 = (channelSel << 2) | (fracMode << 30) |
-               (aModeRefSel << 28) | (loadSynthChannel << 31);
-       REG_WRITE(ah, AR_PHY_65NM_CH0_SYNTH7, reg32);
-
-       /* Toggle Load Synth channel bit */
-       loadSynthChannel = 1;
-       reg32 = (channelSel << 2) | (fracMode << 30) |
-               (aModeRefSel << 28) | (loadSynthChannel << 31);
-       REG_WRITE(ah, AR_PHY_65NM_CH0_SYNTH7, reg32);
-
-       ah->curchan = chan;
-       ah->curchan_rad_index = -1;
-
-       return 0;
-}
-
-/**
- * ar9003_hw_spur_mitigate_mrc_cck - convert baseband spur frequency
- * @ah: atheros hardware structure
- * @chan:
- *
- * For single-chip solutions. Converts to baseband spur frequency given the
- * input channel frequency and compute register settings below.
- *
- * Spur mitigation for MRC CCK
- */
-static void ar9003_hw_spur_mitigate_mrc_cck(struct ath_hw *ah,
-                                           struct ath9k_channel *chan)
-{
-       u32 spur_freq[4] = { 2420, 2440, 2464, 2480 };
-       int cur_bb_spur, negative = 0, cck_spur_freq;
-       int i;
-
-       /*
-        * Need to verify range +/- 10 MHz in control channel, otherwise spur
-        * is out-of-band and can be ignored.
-        */
-
-       for (i = 0; i < 4; i++) {
-               negative = 0;
-               cur_bb_spur = spur_freq[i] - chan->channel;
-
-               if (cur_bb_spur < 0) {
-                       negative = 1;
-                       cur_bb_spur = -cur_bb_spur;
-               }
-               if (cur_bb_spur < 10) {
-                       cck_spur_freq = (int)((cur_bb_spur << 19) / 11);
-
-                       if (negative == 1)
-                               cck_spur_freq = -cck_spur_freq;
-
-                       cck_spur_freq = cck_spur_freq & 0xfffff;
-
-                       REG_RMW_FIELD(ah, AR_PHY_AGC_CONTROL,
-                                     AR_PHY_AGC_CONTROL_YCOK_MAX, 0x7);
-                       REG_RMW_FIELD(ah, AR_PHY_CCK_SPUR_MIT,
-                                     AR_PHY_CCK_SPUR_MIT_SPUR_RSSI_THR, 0x7f);
-                       REG_RMW_FIELD(ah, AR_PHY_CCK_SPUR_MIT,
-                                     AR_PHY_CCK_SPUR_MIT_SPUR_FILTER_TYPE,
-                                     0x2);
-                       REG_RMW_FIELD(ah, AR_PHY_CCK_SPUR_MIT,
-                                     AR_PHY_CCK_SPUR_MIT_USE_CCK_SPUR_MIT,
-                                     0x1);
-                       REG_RMW_FIELD(ah, AR_PHY_CCK_SPUR_MIT,
-                                     AR_PHY_CCK_SPUR_MIT_CCK_SPUR_FREQ,
-                                     cck_spur_freq);
-
-                       return;
-               }
-       }
-
-       REG_RMW_FIELD(ah, AR_PHY_AGC_CONTROL,
-                     AR_PHY_AGC_CONTROL_YCOK_MAX, 0x5);
-       REG_RMW_FIELD(ah, AR_PHY_CCK_SPUR_MIT,
-                     AR_PHY_CCK_SPUR_MIT_USE_CCK_SPUR_MIT, 0x0);
-       REG_RMW_FIELD(ah, AR_PHY_CCK_SPUR_MIT,
-                     AR_PHY_CCK_SPUR_MIT_CCK_SPUR_FREQ, 0x0);
-}
-
-/* Clean all spur register fields */
-static void ar9003_hw_spur_ofdm_clear(struct ath_hw *ah)
-{
-       REG_RMW_FIELD(ah, AR_PHY_TIMING4,
-                     AR_PHY_TIMING4_ENABLE_SPUR_FILTER, 0);
-       REG_RMW_FIELD(ah, AR_PHY_TIMING11,
-                     AR_PHY_TIMING11_SPUR_FREQ_SD, 0);
-       REG_RMW_FIELD(ah, AR_PHY_TIMING11,
-                     AR_PHY_TIMING11_SPUR_DELTA_PHASE, 0);
-       REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
-                     AR_PHY_SFCORR_EXT_SPUR_SUBCHANNEL_SD, 0);
-       REG_RMW_FIELD(ah, AR_PHY_TIMING11,
-                     AR_PHY_TIMING11_USE_SPUR_FILTER_IN_AGC, 0);
-       REG_RMW_FIELD(ah, AR_PHY_TIMING11,
-                     AR_PHY_TIMING11_USE_SPUR_FILTER_IN_SELFCOR, 0);
-       REG_RMW_FIELD(ah, AR_PHY_TIMING4,
-                     AR_PHY_TIMING4_ENABLE_SPUR_RSSI, 0);
-       REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
-                     AR_PHY_SPUR_REG_EN_VIT_SPUR_RSSI, 0);
-       REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
-                     AR_PHY_SPUR_REG_ENABLE_NF_RSSI_SPUR_MIT, 0);
-
-       REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
-                     AR_PHY_SPUR_REG_ENABLE_MASK_PPM, 0);
-       REG_RMW_FIELD(ah, AR_PHY_TIMING4,
-                     AR_PHY_TIMING4_ENABLE_PILOT_MASK, 0);
-       REG_RMW_FIELD(ah, AR_PHY_TIMING4,
-                     AR_PHY_TIMING4_ENABLE_CHAN_MASK, 0);
-       REG_RMW_FIELD(ah, AR_PHY_PILOT_SPUR_MASK,
-                     AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_IDX_A, 0);
-       REG_RMW_FIELD(ah, AR_PHY_SPUR_MASK_A,
-                     AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_IDX_A, 0);
-       REG_RMW_FIELD(ah, AR_PHY_CHAN_SPUR_MASK,
-                     AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_IDX_A, 0);
-       REG_RMW_FIELD(ah, AR_PHY_PILOT_SPUR_MASK,
-                     AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_A, 0);
-       REG_RMW_FIELD(ah, AR_PHY_CHAN_SPUR_MASK,
-                     AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_A, 0);
-       REG_RMW_FIELD(ah, AR_PHY_SPUR_MASK_A,
-                     AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_A, 0);
-       REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
-                     AR_PHY_SPUR_REG_MASK_RATE_CNTL, 0);
-}
-
-static void ar9003_hw_spur_ofdm(struct ath_hw *ah,
-                               int freq_offset,
-                               int spur_freq_sd,
-                               int spur_delta_phase,
-                               int spur_subchannel_sd)
-{
-       int mask_index = 0;
-
-       /* OFDM Spur mitigation */
-       REG_RMW_FIELD(ah, AR_PHY_TIMING4,
-                AR_PHY_TIMING4_ENABLE_SPUR_FILTER, 0x1);
-       REG_RMW_FIELD(ah, AR_PHY_TIMING11,
-                     AR_PHY_TIMING11_SPUR_FREQ_SD, spur_freq_sd);
-       REG_RMW_FIELD(ah, AR_PHY_TIMING11,
-                     AR_PHY_TIMING11_SPUR_DELTA_PHASE, spur_delta_phase);
-       REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
-                     AR_PHY_SFCORR_EXT_SPUR_SUBCHANNEL_SD, spur_subchannel_sd);
-       REG_RMW_FIELD(ah, AR_PHY_TIMING11,
-                     AR_PHY_TIMING11_USE_SPUR_FILTER_IN_AGC, 0x1);
-       REG_RMW_FIELD(ah, AR_PHY_TIMING11,
-                     AR_PHY_TIMING11_USE_SPUR_FILTER_IN_SELFCOR, 0x1);
-       REG_RMW_FIELD(ah, AR_PHY_TIMING4,
-                     AR_PHY_TIMING4_ENABLE_SPUR_RSSI, 0x1);
-       REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
-                     AR_PHY_SPUR_REG_SPUR_RSSI_THRESH, 34);
-       REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
-                     AR_PHY_SPUR_REG_EN_VIT_SPUR_RSSI, 1);
-
-       if (REG_READ_FIELD(ah, AR_PHY_MODE,
-                          AR_PHY_MODE_DYNAMIC) == 0x1)
-               REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
-                             AR_PHY_SPUR_REG_ENABLE_NF_RSSI_SPUR_MIT, 1);
-
-       mask_index = (freq_offset << 4) / 5;
-       if (mask_index < 0)
-               mask_index = mask_index - 1;
-
-       mask_index = mask_index & 0x7f;
-
-       REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
-                     AR_PHY_SPUR_REG_ENABLE_MASK_PPM, 0x1);
-       REG_RMW_FIELD(ah, AR_PHY_TIMING4,
-                     AR_PHY_TIMING4_ENABLE_PILOT_MASK, 0x1);
-       REG_RMW_FIELD(ah, AR_PHY_TIMING4,
-                     AR_PHY_TIMING4_ENABLE_CHAN_MASK, 0x1);
-       REG_RMW_FIELD(ah, AR_PHY_PILOT_SPUR_MASK,
-                     AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_IDX_A, mask_index);
-       REG_RMW_FIELD(ah, AR_PHY_SPUR_MASK_A,
-                     AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_IDX_A, mask_index);
-       REG_RMW_FIELD(ah, AR_PHY_CHAN_SPUR_MASK,
-                     AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_IDX_A, mask_index);
-       REG_RMW_FIELD(ah, AR_PHY_PILOT_SPUR_MASK,
-                     AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_A, 0xc);
-       REG_RMW_FIELD(ah, AR_PHY_CHAN_SPUR_MASK,
-                     AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_A, 0xc);
-       REG_RMW_FIELD(ah, AR_PHY_SPUR_MASK_A,
-                     AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_A, 0xa0);
-       REG_RMW_FIELD(ah, AR_PHY_SPUR_REG,
-                     AR_PHY_SPUR_REG_MASK_RATE_CNTL, 0xff);
-}
-
-static void ar9003_hw_spur_ofdm_work(struct ath_hw *ah,
-                                    struct ath9k_channel *chan,
-                                    int freq_offset)
-{
-       int spur_freq_sd = 0;
-       int spur_subchannel_sd = 0;
-       int spur_delta_phase = 0;
-
-       if (IS_CHAN_HT40(chan)) {
-               if (freq_offset < 0) {
-                       if (REG_READ_FIELD(ah, AR_PHY_GEN_CTRL,
-                                          AR_PHY_GC_DYN2040_PRI_CH) == 0x0)
-                               spur_subchannel_sd = 1;
-                       else
-                               spur_subchannel_sd = 0;
-
-                       spur_freq_sd = ((freq_offset + 10) << 9) / 11;
-
-               } else {
-                       if (REG_READ_FIELD(ah, AR_PHY_GEN_CTRL,
-                           AR_PHY_GC_DYN2040_PRI_CH) == 0x0)
-                               spur_subchannel_sd = 0;
-                       else
-                               spur_subchannel_sd = 1;
-
-                       spur_freq_sd = ((freq_offset - 10) << 9) / 11;
-
-               }
-
-               spur_delta_phase = (freq_offset << 17) / 5;
-
-       } else {
-               spur_subchannel_sd = 0;
-               spur_freq_sd = (freq_offset << 9) /11;
-               spur_delta_phase = (freq_offset << 18) / 5;
-       }
-
-       spur_freq_sd = spur_freq_sd & 0x3ff;
-       spur_delta_phase = spur_delta_phase & 0xfffff;
-
-       ar9003_hw_spur_ofdm(ah,
-                           freq_offset,
-                           spur_freq_sd,
-                           spur_delta_phase,
-                           spur_subchannel_sd);
-}
-
-/* Spur mitigation for OFDM */
-static void ar9003_hw_spur_mitigate_ofdm(struct ath_hw *ah,
-                                        struct ath9k_channel *chan)
-{
-       int synth_freq;
-       int range = 10;
-       int freq_offset = 0;
-       int mode;
-       u8* spurChansPtr;
-       unsigned int i;
-       struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
-
-       if (IS_CHAN_5GHZ(chan)) {
-               spurChansPtr = &(eep->modalHeader5G.spurChans[0]);
-               mode = 0;
-       }
-       else {
-               spurChansPtr = &(eep->modalHeader2G.spurChans[0]);
-               mode = 1;
-       }
-
-       if (spurChansPtr[0] == 0)
-               return; /* No spur in the mode */
-
-       if (IS_CHAN_HT40(chan)) {
-               range = 19;
-               if (REG_READ_FIELD(ah, AR_PHY_GEN_CTRL,
-                                  AR_PHY_GC_DYN2040_PRI_CH) == 0x0)
-                       synth_freq = chan->channel - 10;
-               else
-                       synth_freq = chan->channel + 10;
-       } else {
-               range = 10;
-               synth_freq = chan->channel;
-       }
-
-       ar9003_hw_spur_ofdm_clear(ah);
-
-       for (i = 0; spurChansPtr[i] && i < 5; i++) {
-               freq_offset = FBIN2FREQ(spurChansPtr[i], mode) - synth_freq;
-               if (abs(freq_offset) < range) {
-                       ar9003_hw_spur_ofdm_work(ah, chan, freq_offset);
-                       break;
-               }
-       }
-}
-
-static void ar9003_hw_spur_mitigate(struct ath_hw *ah,
-                                   struct ath9k_channel *chan)
-{
-       ar9003_hw_spur_mitigate_mrc_cck(ah, chan);
-       ar9003_hw_spur_mitigate_ofdm(ah, chan);
-}
-
-static u32 ar9003_hw_compute_pll_control(struct ath_hw *ah,
-                                        struct ath9k_channel *chan)
-{
-       u32 pll;
-
-       pll = SM(0x5, AR_RTC_9300_PLL_REFDIV);
-
-       if (chan && IS_CHAN_HALF_RATE(chan))
-               pll |= SM(0x1, AR_RTC_9300_PLL_CLKSEL);
-       else if (chan && IS_CHAN_QUARTER_RATE(chan))
-               pll |= SM(0x2, AR_RTC_9300_PLL_CLKSEL);
-
-       pll |= SM(0x2c, AR_RTC_9300_PLL_DIV);
-
-       return pll;
-}
-
-static void ar9003_hw_set_channel_regs(struct ath_hw *ah,
-                                      struct ath9k_channel *chan)
-{
-       u32 phymode;
-       u32 enableDacFifo = 0;
-
-       enableDacFifo =
-               (REG_READ(ah, AR_PHY_GEN_CTRL) & AR_PHY_GC_ENABLE_DAC_FIFO);
-
-       /* Enable 11n HT, 20 MHz */
-       phymode = AR_PHY_GC_HT_EN | AR_PHY_GC_SINGLE_HT_LTF1 | AR_PHY_GC_WALSH |
-                 AR_PHY_GC_SHORT_GI_40 | enableDacFifo;
-
-       /* Configure baseband for dynamic 20/40 operation */
-       if (IS_CHAN_HT40(chan)) {
-               phymode |= AR_PHY_GC_DYN2040_EN;
-               /* Configure control (primary) channel at +-10MHz */
-               if ((chan->chanmode == CHANNEL_A_HT40PLUS) ||
-                   (chan->chanmode == CHANNEL_G_HT40PLUS))
-                       phymode |= AR_PHY_GC_DYN2040_PRI_CH;
-
-       }
-
-       /* make sure we preserve INI settings */
-       phymode |= REG_READ(ah, AR_PHY_GEN_CTRL);
-       /* turn off Green Field detection for STA for now */
-       phymode &= ~AR_PHY_GC_GF_DETECT_EN;
-
-       REG_WRITE(ah, AR_PHY_GEN_CTRL, phymode);
-
-       /* Configure MAC for 20/40 operation */
-       ath9k_hw_set11nmac2040(ah);
-
-       /* global transmit timeout (25 TUs default)*/
-       REG_WRITE(ah, AR_GTXTO, 25 << AR_GTXTO_TIMEOUT_LIMIT_S);
-       /* carrier sense timeout */
-       REG_WRITE(ah, AR_CST, 0xF << AR_CST_TIMEOUT_LIMIT_S);
-}
-
-static void ar9003_hw_init_bb(struct ath_hw *ah,
-                             struct ath9k_channel *chan)
-{
-       u32 synthDelay;
-
-       /*
-        * Wait for the frequency synth to settle (synth goes on
-        * via AR_PHY_ACTIVE_EN).  Read the phy active delay register.
-        * Value is in 100ns increments.
-        */
-       synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY;
-       if (IS_CHAN_B(chan))
-               synthDelay = (4 * synthDelay) / 22;
-       else
-               synthDelay /= 10;
-
-       /* Activate the PHY (includes baseband activate + synthesizer on) */
-       REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_EN);
-
-       /*
-        * There is an issue if the AP starts the calibration before
-        * the base band timeout completes.  This could result in the
-        * rx_clear false triggering.  As a workaround we add delay an
-        * extra BASE_ACTIVATE_DELAY usecs to ensure this condition
-        * does not happen.
-        */
-       udelay(synthDelay + BASE_ACTIVATE_DELAY);
-}
-
-void ar9003_hw_set_chain_masks(struct ath_hw *ah, u8 rx, u8 tx)
-{
-       switch (rx) {
-       case 0x5:
-               REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
-                           AR_PHY_SWAP_ALT_CHAIN);
-       case 0x3:
-       case 0x1:
-       case 0x2:
-       case 0x7:
-               REG_WRITE(ah, AR_PHY_RX_CHAINMASK, rx);
-               REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, rx);
-               break;
-       default:
-               break;
-       }
-
-       REG_WRITE(ah, AR_SELFGEN_MASK, tx);
-       if (tx == 0x5) {
-               REG_SET_BIT(ah, AR_PHY_ANALOG_SWAP,
-                           AR_PHY_SWAP_ALT_CHAIN);
-       }
-}
-
-/*
- * Override INI values with chip specific configuration.
- */
-static void ar9003_hw_override_ini(struct ath_hw *ah)
-{
-       u32 val;
-
-       /*
-        * Set the RX_ABORT and RX_DIS and clear it only after
-        * RXE is set for MAC. This prevents frames with
-        * corrupted descriptor status.
-        */
-       REG_SET_BIT(ah, AR_DIAG_SW, (AR_DIAG_RX_DIS | AR_DIAG_RX_ABORT));
-
-       /*
-        * For AR9280 and above, there is a new feature that allows
-        * Multicast search based on both MAC Address and Key ID. By default,
-        * this feature is enabled. But since the driver is not using this
-        * feature, we switch it off; otherwise multicast search based on
-        * MAC addr only will fail.
-        */
-       val = REG_READ(ah, AR_PCU_MISC_MODE2) & (~AR_ADHOC_MCAST_KEYID_ENABLE);
-       REG_WRITE(ah, AR_PCU_MISC_MODE2,
-                 val | AR_AGG_WEP_ENABLE_FIX | AR_AGG_WEP_ENABLE);
-}
-
-static void ar9003_hw_prog_ini(struct ath_hw *ah,
-                              struct ar5416IniArray *iniArr,
-                              int column)
-{
-       unsigned int i, regWrites = 0;
-
-       /* New INI format: Array may be undefined (pre, core, post arrays) */
-       if (!iniArr->ia_array)
-               return;
-
-       /*
-        * New INI format: Pre, core, and post arrays for a given subsystem
-        * may be modal (> 2 columns) or non-modal (2 columns). Determine if
-        * the array is non-modal and force the column to 1.
-        */
-       if (column >= iniArr->ia_columns)
-               column = 1;
-
-       for (i = 0; i < iniArr->ia_rows; i++) {
-               u32 reg = INI_RA(iniArr, i, 0);
-               u32 val = INI_RA(iniArr, i, column);
-
-               if (reg >= 0x16000 && reg < 0x17000)
-                       ath9k_hw_analog_shift_regwrite(ah, reg, val);
-               else
-                       REG_WRITE(ah, reg, val);
-
-               DO_DELAY(regWrites);
-       }
-}
-
-static int ar9003_hw_process_ini(struct ath_hw *ah,
-                                struct ath9k_channel *chan)
-{
-       struct ath_regulatory *regulatory = ath9k_hw_regulatory(ah);
-       unsigned int regWrites = 0, i;
-       struct ieee80211_channel *channel = chan->chan;
-       u32 modesIndex, freqIndex;
-
-       switch (chan->chanmode) {
-       case CHANNEL_A:
-       case CHANNEL_A_HT20:
-               modesIndex = 1;
-               freqIndex = 1;
-               break;
-       case CHANNEL_A_HT40PLUS:
-       case CHANNEL_A_HT40MINUS:
-               modesIndex = 2;
-               freqIndex = 1;
-               break;
-       case CHANNEL_G:
-       case CHANNEL_G_HT20:
-       case CHANNEL_B:
-               modesIndex = 4;
-               freqIndex = 2;
-               break;
-       case CHANNEL_G_HT40PLUS:
-       case CHANNEL_G_HT40MINUS:
-               modesIndex = 3;
-               freqIndex = 2;
-               break;
-
-       default:
-               return -EINVAL;
-       }
-
-       for (i = 0; i < ATH_INI_NUM_SPLIT; i++) {
-               ar9003_hw_prog_ini(ah, &ah->iniSOC[i], modesIndex);
-               ar9003_hw_prog_ini(ah, &ah->iniMac[i], modesIndex);
-               ar9003_hw_prog_ini(ah, &ah->iniBB[i], modesIndex);
-               ar9003_hw_prog_ini(ah, &ah->iniRadio[i], modesIndex);
-       }
-
-       REG_WRITE_ARRAY(&ah->iniModesRxGain, 1, regWrites);
-       REG_WRITE_ARRAY(&ah->iniModesTxGain, modesIndex, regWrites);
-
-       /*
-        * For 5GHz channels requiring Fast Clock, apply
-        * different modal values.
-        */
-       if (IS_CHAN_A_FAST_CLOCK(ah, chan))
-               REG_WRITE_ARRAY(&ah->iniModesAdditional,
-                               modesIndex, regWrites);
-
-       ar9003_hw_override_ini(ah);
-       ar9003_hw_set_channel_regs(ah, chan);
-       ar9003_hw_set_chain_masks(ah, ah->rxchainmask, ah->txchainmask);
-
-       /* Set TX power */
-       ah->eep_ops->set_txpower(ah, chan,
-                                ath9k_regd_get_ctl(regulatory, chan),
-                                channel->max_antenna_gain * 2,
-                                channel->max_power * 2,
-                                min((u32) MAX_RATE_POWER,
-                                (u32) regulatory->power_limit));
-
-       return 0;
-}
-
-static void ar9003_hw_set_rfmode(struct ath_hw *ah,
-                                struct ath9k_channel *chan)
-{
-       u32 rfMode = 0;
-
-       if (chan == NULL)
-               return;
-
-       rfMode |= (IS_CHAN_B(chan) || IS_CHAN_G(chan))
-               ? AR_PHY_MODE_DYNAMIC : AR_PHY_MODE_OFDM;
-
-       if (IS_CHAN_A_FAST_CLOCK(ah, chan))
-               rfMode |= (AR_PHY_MODE_DYNAMIC | AR_PHY_MODE_DYN_CCK_DISABLE);
-
-       REG_WRITE(ah, AR_PHY_MODE, rfMode);
-}
-
-static void ar9003_hw_mark_phy_inactive(struct ath_hw *ah)
-{
-       REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_DIS);
-}
-
-static void ar9003_hw_set_delta_slope(struct ath_hw *ah,
-                                     struct ath9k_channel *chan)
-{
-       u32 coef_scaled, ds_coef_exp, ds_coef_man;
-       u32 clockMhzScaled = 0x64000000;
-       struct chan_centers centers;
-
-       /*
-        * half and quarter rate can divide the scaled clock by 2 or 4
-        * scale for selected channel bandwidth
-        */
-       if (IS_CHAN_HALF_RATE(chan))
-               clockMhzScaled = clockMhzScaled >> 1;
-       else if (IS_CHAN_QUARTER_RATE(chan))
-               clockMhzScaled = clockMhzScaled >> 2;
-
-       /*
-        * ALGO -> coef = 1e8/fcarrier*fclock/40;
-        * scaled coef to provide precision for this floating calculation
-        */
-       ath9k_hw_get_channel_centers(ah, chan, &centers);
-       coef_scaled = clockMhzScaled / centers.synth_center;
-
-       ath9k_hw_get_delta_slope_vals(ah, coef_scaled, &ds_coef_man,
-                                     &ds_coef_exp);
-
-       REG_RMW_FIELD(ah, AR_PHY_TIMING3,
-                     AR_PHY_TIMING3_DSC_MAN, ds_coef_man);
-       REG_RMW_FIELD(ah, AR_PHY_TIMING3,
-                     AR_PHY_TIMING3_DSC_EXP, ds_coef_exp);
-
-       /*
-        * For Short GI,
-        * scaled coeff is 9/10 that of normal coeff
-        */
-       coef_scaled = (9 * coef_scaled) / 10;
-
-       ath9k_hw_get_delta_slope_vals(ah, coef_scaled, &ds_coef_man,
-                                     &ds_coef_exp);
-
-       /* for short gi */
-       REG_RMW_FIELD(ah, AR_PHY_SGI_DELTA,
-                     AR_PHY_SGI_DSC_MAN, ds_coef_man);
-       REG_RMW_FIELD(ah, AR_PHY_SGI_DELTA,
-                     AR_PHY_SGI_DSC_EXP, ds_coef_exp);
-}
-
-static bool ar9003_hw_rfbus_req(struct ath_hw *ah)
-{
-       REG_WRITE(ah, AR_PHY_RFBUS_REQ, AR_PHY_RFBUS_REQ_EN);
-       return ath9k_hw_wait(ah, AR_PHY_RFBUS_GRANT, AR_PHY_RFBUS_GRANT_EN,
-                            AR_PHY_RFBUS_GRANT_EN, AH_WAIT_TIMEOUT);
-}
-
-/*
- * Wait for the frequency synth to settle (synth goes on via PHY_ACTIVE_EN).
- * Read the phy active delay register. Value is in 100ns increments.
- */
-static void ar9003_hw_rfbus_done(struct ath_hw *ah)
-{
-       u32 synthDelay = REG_READ(ah, AR_PHY_RX_DELAY) & AR_PHY_RX_DELAY_DELAY;
-       if (IS_CHAN_B(ah->curchan))
-               synthDelay = (4 * synthDelay) / 22;
-       else
-               synthDelay /= 10;
-
-       udelay(synthDelay + BASE_ACTIVATE_DELAY);
-
-       REG_WRITE(ah, AR_PHY_RFBUS_REQ, 0);
-}
-
-/*
- * Set the interrupt and GPIO values so the ISR can disable RF
- * on a switch signal.  Assumes GPIO port and interrupt polarity
- * are set prior to call.
- */
-static void ar9003_hw_enable_rfkill(struct ath_hw *ah)
-{
-       /* Connect rfsilent_bb_l to baseband */
-       REG_SET_BIT(ah, AR_GPIO_INPUT_EN_VAL,
-                   AR_GPIO_INPUT_EN_VAL_RFSILENT_BB);
-       /* Set input mux for rfsilent_bb_l to GPIO #0 */
-       REG_CLR_BIT(ah, AR_GPIO_INPUT_MUX2,
-                   AR_GPIO_INPUT_MUX2_RFSILENT);
-
-       /*
-        * Configure the desired GPIO port for input and
-        * enable baseband rf silence.
-        */
-       ath9k_hw_cfg_gpio_input(ah, ah->rfkill_gpio);
-       REG_SET_BIT(ah, AR_PHY_TEST, RFSILENT_BB);
-}
-
-static void ar9003_hw_set_diversity(struct ath_hw *ah, bool value)
-{
-       u32 v = REG_READ(ah, AR_PHY_CCK_DETECT);
-       if (value)
-               v |= AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV;
-       else
-               v &= ~AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV;
-       REG_WRITE(ah, AR_PHY_CCK_DETECT, v);
-}
-
-static bool ar9003_hw_ani_control(struct ath_hw *ah,
-                                 enum ath9k_ani_cmd cmd, int param)
-{
-       struct ar5416AniState *aniState = ah->curani;
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath9k_channel *chan = ah->curchan;
-       s32 value, value2;
-
-       switch (cmd & ah->ani_function) {
-       case ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION:{
-               /*
-                * on == 1 means ofdm weak signal detection is ON
-                * on == 1 is the default, for less noise immunity
-                *
-                * on == 0 means ofdm weak signal detection is OFF
-                * on == 0 means more noise imm
-                */
-               u32 on = param ? 1 : 0;
-               /*
-                * make register setting for default
-                * (weak sig detect ON) come from INI file
-                */
-               int m1ThreshLow = on ?
-                       aniState->iniDef.m1ThreshLow : m1ThreshLow_off;
-               int m2ThreshLow = on ?
-                       aniState->iniDef.m2ThreshLow : m2ThreshLow_off;
-               int m1Thresh = on ?
-                       aniState->iniDef.m1Thresh : m1Thresh_off;
-               int m2Thresh = on ?
-                       aniState->iniDef.m2Thresh : m2Thresh_off;
-               int m2CountThr = on ?
-                       aniState->iniDef.m2CountThr : m2CountThr_off;
-               int m2CountThrLow = on ?
-                       aniState->iniDef.m2CountThrLow : m2CountThrLow_off;
-               int m1ThreshLowExt = on ?
-                       aniState->iniDef.m1ThreshLowExt : m1ThreshLowExt_off;
-               int m2ThreshLowExt = on ?
-                       aniState->iniDef.m2ThreshLowExt : m2ThreshLowExt_off;
-               int m1ThreshExt = on ?
-                       aniState->iniDef.m1ThreshExt : m1ThreshExt_off;
-               int m2ThreshExt = on ?
-                       aniState->iniDef.m2ThreshExt : m2ThreshExt_off;
-
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
-                             AR_PHY_SFCORR_LOW_M1_THRESH_LOW,
-                             m1ThreshLow);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
-                             AR_PHY_SFCORR_LOW_M2_THRESH_LOW,
-                             m2ThreshLow);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR,
-                             AR_PHY_SFCORR_M1_THRESH, m1Thresh);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR,
-                             AR_PHY_SFCORR_M2_THRESH, m2Thresh);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR,
-                             AR_PHY_SFCORR_M2COUNT_THR, m2CountThr);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_LOW,
-                             AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW,
-                             m2CountThrLow);
-
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
-                             AR_PHY_SFCORR_EXT_M1_THRESH_LOW, m1ThreshLowExt);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
-                             AR_PHY_SFCORR_EXT_M2_THRESH_LOW, m2ThreshLowExt);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
-                             AR_PHY_SFCORR_EXT_M1_THRESH, m1ThreshExt);
-               REG_RMW_FIELD(ah, AR_PHY_SFCORR_EXT,
-                             AR_PHY_SFCORR_EXT_M2_THRESH, m2ThreshExt);
-
-               if (on)
-                       REG_SET_BIT(ah, AR_PHY_SFCORR_LOW,
-                                   AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
-               else
-                       REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
-                                   AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
-
-               if (!on != aniState->ofdmWeakSigDetectOff) {
-                       ath_print(common, ATH_DBG_ANI,
-                                 "** ch %d: ofdm weak signal: %s=>%s\n",
-                                 chan->channel,
-                                 !aniState->ofdmWeakSigDetectOff ?
-                                       "on" : "off",
-                                 on ? "on" : "off");
-                       if (on)
-                               ah->stats.ast_ani_ofdmon++;
-                       else
-                               ah->stats.ast_ani_ofdmoff++;
-                       aniState->ofdmWeakSigDetectOff = !on;
-               }
-               break;
-       }
-       case ATH9K_ANI_FIRSTEP_LEVEL:{
-               u32 level = param;
-
-               if (level >= ARRAY_SIZE(firstep_table)) {
-                       ath_print(common, ATH_DBG_ANI,
-                                 "ATH9K_ANI_FIRSTEP_LEVEL: level "
-                                 "out of range (%u > %u)\n",
-                                 level,
-                                 (unsigned) ARRAY_SIZE(firstep_table));
-                       return false;
-               }
-
-               /*
-                * make register setting relative to default
-                * from INI file & cap value
-                */
-               value = firstep_table[level] -
-                       firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
-                       aniState->iniDef.firstep;
-               if (value < ATH9K_SIG_FIRSTEP_SETTING_MIN)
-                       value = ATH9K_SIG_FIRSTEP_SETTING_MIN;
-               if (value > ATH9K_SIG_FIRSTEP_SETTING_MAX)
-                       value = ATH9K_SIG_FIRSTEP_SETTING_MAX;
-               REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
-                             AR_PHY_FIND_SIG_FIRSTEP,
-                             value);
-               /*
-                * we need to set first step low register too
-                * make register setting relative to default
-                * from INI file & cap value
-                */
-               value2 = firstep_table[level] -
-                        firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
-                        aniState->iniDef.firstepLow;
-               if (value2 < ATH9K_SIG_FIRSTEP_SETTING_MIN)
-                       value2 = ATH9K_SIG_FIRSTEP_SETTING_MIN;
-               if (value2 > ATH9K_SIG_FIRSTEP_SETTING_MAX)
-                       value2 = ATH9K_SIG_FIRSTEP_SETTING_MAX;
-
-               REG_RMW_FIELD(ah, AR_PHY_FIND_SIG_LOW,
-                             AR_PHY_FIND_SIG_LOW_FIRSTEP_LOW, value2);
-
-               if (level != aniState->firstepLevel) {
-                       ath_print(common, ATH_DBG_ANI,
-                                 "** ch %d: level %d=>%d[def:%d] "
-                                 "firstep[level]=%d ini=%d\n",
-                                 chan->channel,
-                                 aniState->firstepLevel,
-                                 level,
-                                 ATH9K_ANI_FIRSTEP_LVL_NEW,
-                                 value,
-                                 aniState->iniDef.firstep);
-                       ath_print(common, ATH_DBG_ANI,
-                                 "** ch %d: level %d=>%d[def:%d] "
-                                 "firstep_low[level]=%d ini=%d\n",
-                                 chan->channel,
-                                 aniState->firstepLevel,
-                                 level,
-                                 ATH9K_ANI_FIRSTEP_LVL_NEW,
-                                 value2,
-                                 aniState->iniDef.firstepLow);
-                       if (level > aniState->firstepLevel)
-                               ah->stats.ast_ani_stepup++;
-                       else if (level < aniState->firstepLevel)
-                               ah->stats.ast_ani_stepdown++;
-                       aniState->firstepLevel = level;
-               }
-               break;
-       }
-       case ATH9K_ANI_SPUR_IMMUNITY_LEVEL:{
-               u32 level = param;
-
-               if (level >= ARRAY_SIZE(cycpwrThr1_table)) {
-                       ath_print(common, ATH_DBG_ANI,
-                                 "ATH9K_ANI_SPUR_IMMUNITY_LEVEL: level "
-                                 "out of range (%u > %u)\n",
-                                 level,
-                                 (unsigned) ARRAY_SIZE(cycpwrThr1_table));
-                       return false;
-               }
-               /*
-                * make register setting relative to default
-                * from INI file & cap value
-                */
-               value = cycpwrThr1_table[level] -
-                       cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
-                       aniState->iniDef.cycpwrThr1;
-               if (value < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
-                       value = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
-               if (value > ATH9K_SIG_SPUR_IMM_SETTING_MAX)
-                       value = ATH9K_SIG_SPUR_IMM_SETTING_MAX;
-               REG_RMW_FIELD(ah, AR_PHY_TIMING5,
-                             AR_PHY_TIMING5_CYCPWR_THR1,
-                             value);
-
-               /*
-                * set AR_PHY_EXT_CCA for extension channel
-                * make register setting relative to default
-                * from INI file & cap value
-                */
-               value2 = cycpwrThr1_table[level] -
-                        cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
-                        aniState->iniDef.cycpwrThr1Ext;
-               if (value2 < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
-                       value2 = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
-               if (value2 > ATH9K_SIG_SPUR_IMM_SETTING_MAX)
-                       value2 = ATH9K_SIG_SPUR_IMM_SETTING_MAX;
-               REG_RMW_FIELD(ah, AR_PHY_EXT_CCA,
-                             AR_PHY_EXT_CYCPWR_THR1, value2);
-
-               if (level != aniState->spurImmunityLevel) {
-                       ath_print(common, ATH_DBG_ANI,
-                                 "** ch %d: level %d=>%d[def:%d] "
-                                 "cycpwrThr1[level]=%d ini=%d\n",
-                                 chan->channel,
-                                 aniState->spurImmunityLevel,
-                                 level,
-                                 ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
-                                 value,
-                                 aniState->iniDef.cycpwrThr1);
-                       ath_print(common, ATH_DBG_ANI,
-                                 "** ch %d: level %d=>%d[def:%d] "
-                                 "cycpwrThr1Ext[level]=%d ini=%d\n",
-                                 chan->channel,
-                                 aniState->spurImmunityLevel,
-                                 level,
-                                 ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
-                                 value2,
-                                 aniState->iniDef.cycpwrThr1Ext);
-                       if (level > aniState->spurImmunityLevel)
-                               ah->stats.ast_ani_spurup++;
-                       else if (level < aniState->spurImmunityLevel)
-                               ah->stats.ast_ani_spurdown++;
-                       aniState->spurImmunityLevel = level;
-               }
-               break;
-       }
-       case ATH9K_ANI_MRC_CCK:{
-               /*
-                * is_on == 1 means MRC CCK ON (default, less noise imm)
-                * is_on == 0 means MRC CCK is OFF (more noise imm)
-                */
-               bool is_on = param ? 1 : 0;
-               REG_RMW_FIELD(ah, AR_PHY_MRC_CCK_CTRL,
-                             AR_PHY_MRC_CCK_ENABLE, is_on);
-               REG_RMW_FIELD(ah, AR_PHY_MRC_CCK_CTRL,
-                             AR_PHY_MRC_CCK_MUX_REG, is_on);
-               if (!is_on != aniState->mrcCCKOff) {
-                       ath_print(common, ATH_DBG_ANI,
-                                 "** ch %d: MRC CCK: %s=>%s\n",
-                                 chan->channel,
-                                 !aniState->mrcCCKOff ? "on" : "off",
-                                 is_on ? "on" : "off");
-               if (is_on)
-                       ah->stats.ast_ani_ccklow++;
-               else
-                       ah->stats.ast_ani_cckhigh++;
-               aniState->mrcCCKOff = !is_on;
-               }
-       break;
-       }
-       case ATH9K_ANI_PRESENT:
-               break;
-       default:
-               ath_print(common, ATH_DBG_ANI,
-                         "invalid cmd %u\n", cmd);
-               return false;
-       }
-
-       ath_print(common, ATH_DBG_ANI,
-                 "ANI parameters: SI=%d, ofdmWS=%s FS=%d "
-                 "MRCcck=%s listenTime=%d CC=%d listen=%d "
-                 "ofdmErrs=%d cckErrs=%d\n",
-                 aniState->spurImmunityLevel,
-                 !aniState->ofdmWeakSigDetectOff ? "on" : "off",
-                 aniState->firstepLevel,
-                 !aniState->mrcCCKOff ? "on" : "off",
-                 aniState->listenTime,
-                 aniState->cycleCount,
-                 aniState->listenTime,
-                 aniState->ofdmPhyErrCount,
-                 aniState->cckPhyErrCount);
-       return true;
-}
-
-static void ar9003_hw_do_getnf(struct ath_hw *ah,
-                             int16_t nfarray[NUM_NF_READINGS])
-{
-       int16_t nf;
-
-       nf = MS(REG_READ(ah, AR_PHY_CCA_0), AR_PHY_MINCCA_PWR);
-       nfarray[0] = sign_extend(nf, 9);
-
-       nf = MS(REG_READ(ah, AR_PHY_CCA_1), AR_PHY_CH1_MINCCA_PWR);
-       nfarray[1] = sign_extend(nf, 9);
-
-       nf = MS(REG_READ(ah, AR_PHY_CCA_2), AR_PHY_CH2_MINCCA_PWR);
-       nfarray[2] = sign_extend(nf, 9);
-
-       if (!IS_CHAN_HT40(ah->curchan))
-               return;
-
-       nf = MS(REG_READ(ah, AR_PHY_EXT_CCA), AR_PHY_EXT_MINCCA_PWR);
-       nfarray[3] = sign_extend(nf, 9);
-
-       nf = MS(REG_READ(ah, AR_PHY_EXT_CCA_1), AR_PHY_CH1_EXT_MINCCA_PWR);
-       nfarray[4] = sign_extend(nf, 9);
-
-       nf = MS(REG_READ(ah, AR_PHY_EXT_CCA_2), AR_PHY_CH2_EXT_MINCCA_PWR);
-       nfarray[5] = sign_extend(nf, 9);
-}
-
-static void ar9003_hw_set_nf_limits(struct ath_hw *ah)
-{
-       ah->nf_2g.max = AR_PHY_CCA_MAX_GOOD_VAL_9300_2GHZ;
-       ah->nf_2g.min = AR_PHY_CCA_MIN_GOOD_VAL_9300_2GHZ;
-       ah->nf_2g.nominal = AR_PHY_CCA_NOM_VAL_9300_2GHZ;
-       ah->nf_5g.max = AR_PHY_CCA_MAX_GOOD_VAL_9300_5GHZ;
-       ah->nf_5g.min = AR_PHY_CCA_MIN_GOOD_VAL_9300_5GHZ;
-       ah->nf_5g.nominal = AR_PHY_CCA_NOM_VAL_9300_5GHZ;
-}
-
-/*
- * Initialize the ANI register values with default (ini) values.
- * This routine is called during a (full) hardware reset after
- * all the registers are initialised from the INI.
- */
-static void ar9003_hw_ani_cache_ini_regs(struct ath_hw *ah)
-{
-       struct ar5416AniState *aniState;
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath9k_channel *chan = ah->curchan;
-       struct ath9k_ani_default *iniDef;
-       int index;
-       u32 val;
-
-       index = ath9k_hw_get_ani_channel_idx(ah, chan);
-       aniState = &ah->ani[index];
-       ah->curani = aniState;
-       iniDef = &aniState->iniDef;
-
-       ath_print(common, ATH_DBG_ANI,
-                 "ver %d.%d opmode %u chan %d Mhz/0x%x\n",
-                 ah->hw_version.macVersion,
-                 ah->hw_version.macRev,
-                 ah->opmode,
-                 chan->channel,
-                 chan->channelFlags);
-
-       val = REG_READ(ah, AR_PHY_SFCORR);
-       iniDef->m1Thresh = MS(val, AR_PHY_SFCORR_M1_THRESH);
-       iniDef->m2Thresh = MS(val, AR_PHY_SFCORR_M2_THRESH);
-       iniDef->m2CountThr = MS(val, AR_PHY_SFCORR_M2COUNT_THR);
-
-       val = REG_READ(ah, AR_PHY_SFCORR_LOW);
-       iniDef->m1ThreshLow = MS(val, AR_PHY_SFCORR_LOW_M1_THRESH_LOW);
-       iniDef->m2ThreshLow = MS(val, AR_PHY_SFCORR_LOW_M2_THRESH_LOW);
-       iniDef->m2CountThrLow = MS(val, AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW);
-
-       val = REG_READ(ah, AR_PHY_SFCORR_EXT);
-       iniDef->m1ThreshExt = MS(val, AR_PHY_SFCORR_EXT_M1_THRESH);
-       iniDef->m2ThreshExt = MS(val, AR_PHY_SFCORR_EXT_M2_THRESH);
-       iniDef->m1ThreshLowExt = MS(val, AR_PHY_SFCORR_EXT_M1_THRESH_LOW);
-       iniDef->m2ThreshLowExt = MS(val, AR_PHY_SFCORR_EXT_M2_THRESH_LOW);
-       iniDef->firstep = REG_READ_FIELD(ah,
-                                        AR_PHY_FIND_SIG,
-                                        AR_PHY_FIND_SIG_FIRSTEP);
-       iniDef->firstepLow = REG_READ_FIELD(ah,
-                                           AR_PHY_FIND_SIG_LOW,
-                                           AR_PHY_FIND_SIG_LOW_FIRSTEP_LOW);
-       iniDef->cycpwrThr1 = REG_READ_FIELD(ah,
-                                           AR_PHY_TIMING5,
-                                           AR_PHY_TIMING5_CYCPWR_THR1);
-       iniDef->cycpwrThr1Ext = REG_READ_FIELD(ah,
-                                              AR_PHY_EXT_CCA,
-                                              AR_PHY_EXT_CYCPWR_THR1);
-
-       /* these levels just got reset to defaults by the INI */
-       aniState->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL_NEW;
-       aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
-       aniState->ofdmWeakSigDetectOff = !ATH9K_ANI_USE_OFDM_WEAK_SIG;
-       aniState->mrcCCKOff = !ATH9K_ANI_ENABLE_MRC_CCK;
-
-       aniState->cycleCount = 0;
-}
-
-void ar9003_hw_attach_phy_ops(struct ath_hw *ah)
-{
-       struct ath_hw_private_ops *priv_ops = ath9k_hw_private_ops(ah);
-       const u32 ar9300_cca_regs[6] = {
-               AR_PHY_CCA_0,
-               AR_PHY_CCA_1,
-               AR_PHY_CCA_2,
-               AR_PHY_EXT_CCA,
-               AR_PHY_EXT_CCA_1,
-               AR_PHY_EXT_CCA_2,
-       };
-
-       priv_ops->rf_set_freq = ar9003_hw_set_channel;
-       priv_ops->spur_mitigate_freq = ar9003_hw_spur_mitigate;
-       priv_ops->compute_pll_control = ar9003_hw_compute_pll_control;
-       priv_ops->set_channel_regs = ar9003_hw_set_channel_regs;
-       priv_ops->init_bb = ar9003_hw_init_bb;
-       priv_ops->process_ini = ar9003_hw_process_ini;
-       priv_ops->set_rfmode = ar9003_hw_set_rfmode;
-       priv_ops->mark_phy_inactive = ar9003_hw_mark_phy_inactive;
-       priv_ops->set_delta_slope = ar9003_hw_set_delta_slope;
-       priv_ops->rfbus_req = ar9003_hw_rfbus_req;
-       priv_ops->rfbus_done = ar9003_hw_rfbus_done;
-       priv_ops->enable_rfkill = ar9003_hw_enable_rfkill;
-       priv_ops->set_diversity = ar9003_hw_set_diversity;
-       priv_ops->ani_control = ar9003_hw_ani_control;
-       priv_ops->do_getnf = ar9003_hw_do_getnf;
-       priv_ops->ani_cache_ini_regs = ar9003_hw_ani_cache_ini_regs;
-
-       ar9003_hw_set_nf_limits(ah);
-       memcpy(ah->nf_regs, ar9300_cca_regs, sizeof(ah->nf_regs));
-}
-
-void ar9003_hw_bb_watchdog_config(struct ath_hw *ah)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-       u32 idle_tmo_ms = ah->bb_watchdog_timeout_ms;
-       u32 val, idle_count;
-
-       if (!idle_tmo_ms) {
-               /* disable IRQ, disable chip-reset for BB panic */
-               REG_WRITE(ah, AR_PHY_WATCHDOG_CTL_2,
-                         REG_READ(ah, AR_PHY_WATCHDOG_CTL_2) &
-                         ~(AR_PHY_WATCHDOG_RST_ENABLE |
-                           AR_PHY_WATCHDOG_IRQ_ENABLE));
-
-               /* disable watchdog in non-IDLE mode, disable in IDLE mode */
-               REG_WRITE(ah, AR_PHY_WATCHDOG_CTL_1,
-                         REG_READ(ah, AR_PHY_WATCHDOG_CTL_1) &
-                         ~(AR_PHY_WATCHDOG_NON_IDLE_ENABLE |
-                           AR_PHY_WATCHDOG_IDLE_ENABLE));
-
-               ath_print(common, ATH_DBG_RESET, "Disabled BB Watchdog\n");
-               return;
-       }
-
-       /* enable IRQ, disable chip-reset for BB watchdog */
-       val = REG_READ(ah, AR_PHY_WATCHDOG_CTL_2) & AR_PHY_WATCHDOG_CNTL2_MASK;
-       REG_WRITE(ah, AR_PHY_WATCHDOG_CTL_2,
-                 (val | AR_PHY_WATCHDOG_IRQ_ENABLE) &
-                 ~AR_PHY_WATCHDOG_RST_ENABLE);
-
-       /* bound limit to 10 secs */
-       if (idle_tmo_ms > 10000)
-               idle_tmo_ms = 10000;
-
-       /*
-        * The time unit for watchdog event is 2^15 44/88MHz cycles.
-        *
-        * For HT20 we have a time unit of 2^15/44 MHz = .74 ms per tick
-        * For HT40 we have a time unit of 2^15/88 MHz = .37 ms per tick
-        *
-        * Given we use fast clock now in 5 GHz, these time units should
-        * be common for both 2 GHz and 5 GHz.
-        */
-       idle_count = (100 * idle_tmo_ms) / 74;
-       if (ah->curchan && IS_CHAN_HT40(ah->curchan))
-               idle_count = (100 * idle_tmo_ms) / 37;
-
-       /*
-        * enable watchdog in non-IDLE mode, disable in IDLE mode,
-        * set idle time-out.
-        */
-       REG_WRITE(ah, AR_PHY_WATCHDOG_CTL_1,
-                 AR_PHY_WATCHDOG_NON_IDLE_ENABLE |
-                 AR_PHY_WATCHDOG_IDLE_MASK |
-                 (AR_PHY_WATCHDOG_NON_IDLE_MASK & (idle_count << 2)));
-
-       ath_print(common, ATH_DBG_RESET,
-                 "Enabled BB Watchdog timeout (%u ms)\n",
-                 idle_tmo_ms);
-}
-
-void ar9003_hw_bb_watchdog_read(struct ath_hw *ah)
-{
-       /*
-        * we want to avoid printing in ISR context so we save the
-        * watchdog status to be printed later in bottom half context.
-        */
-       ah->bb_watchdog_last_status = REG_READ(ah, AR_PHY_WATCHDOG_STATUS);
-
-       /*
-        * the watchdog timer should reset on status read but to be sure
-        * sure we write 0 to the watchdog status bit.
-        */
-       REG_WRITE(ah, AR_PHY_WATCHDOG_STATUS,
-                 ah->bb_watchdog_last_status & ~AR_PHY_WATCHDOG_STATUS_CLR);
-}
-
-void ar9003_hw_bb_watchdog_dbg_info(struct ath_hw *ah)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-       u32 rxc_pcnt = 0, rxf_pcnt = 0, txf_pcnt = 0, status;
-
-       if (likely(!(common->debug_mask & ATH_DBG_RESET)))
-               return;
-
-       status = ah->bb_watchdog_last_status;
-       ath_print(common, ATH_DBG_RESET,
-                 "\n==== BB update: BB status=0x%08x ====\n", status);
-       ath_print(common, ATH_DBG_RESET,
-                 "** BB state: wd=%u det=%u rdar=%u rOFDM=%d "
-                 "rCCK=%u tOFDM=%u tCCK=%u agc=%u src=%u **\n",
-                 MS(status, AR_PHY_WATCHDOG_INFO),
-                 MS(status, AR_PHY_WATCHDOG_DET_HANG),
-                 MS(status, AR_PHY_WATCHDOG_RADAR_SM),
-                 MS(status, AR_PHY_WATCHDOG_RX_OFDM_SM),
-                 MS(status, AR_PHY_WATCHDOG_RX_CCK_SM),
-                 MS(status, AR_PHY_WATCHDOG_TX_OFDM_SM),
-                 MS(status, AR_PHY_WATCHDOG_TX_CCK_SM),
-                 MS(status, AR_PHY_WATCHDOG_AGC_SM),
-                 MS(status,AR_PHY_WATCHDOG_SRCH_SM));
-
-       ath_print(common, ATH_DBG_RESET,
-                 "** BB WD cntl: cntl1=0x%08x cntl2=0x%08x **\n",
-                 REG_READ(ah, AR_PHY_WATCHDOG_CTL_1),
-                 REG_READ(ah, AR_PHY_WATCHDOG_CTL_2));
-       ath_print(common, ATH_DBG_RESET,
-                 "** BB mode: BB_gen_controls=0x%08x **\n",
-                 REG_READ(ah, AR_PHY_GEN_CTRL));
-
-       if (ath9k_hw_GetMibCycleCountsPct(ah, &rxc_pcnt, &rxf_pcnt, &txf_pcnt))
-               ath_print(common, ATH_DBG_RESET,
-                         "** BB busy times: rx_clear=%d%%, "
-                         "rx_frame=%d%%, tx_frame=%d%% **\n",
-                         rxc_pcnt, rxf_pcnt, txf_pcnt);
-
-       ath_print(common, ATH_DBG_RESET,
-                 "==== BB update: done ====\n\n");
-}
-EXPORT_SYMBOL(ar9003_hw_bb_watchdog_dbg_info);
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.h b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
deleted file mode 100644 (file)
index 3394dfe..0000000
+++ /dev/null
@@ -1,1045 +0,0 @@
-/*
- * Copyright (c) 2002-2010 Atheros Communications, Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef AR9003_PHY_H
-#define AR9003_PHY_H
-
-/*
- * Channel Register Map
- */
-#define AR_CHAN_BASE   0x9800
-
-#define AR_PHY_TIMING1      (AR_CHAN_BASE + 0x0)
-#define AR_PHY_TIMING2      (AR_CHAN_BASE + 0x4)
-#define AR_PHY_TIMING3      (AR_CHAN_BASE + 0x8)
-#define AR_PHY_TIMING4      (AR_CHAN_BASE + 0xc)
-#define AR_PHY_TIMING5      (AR_CHAN_BASE + 0x10)
-#define AR_PHY_TIMING6      (AR_CHAN_BASE + 0x14)
-#define AR_PHY_TIMING11     (AR_CHAN_BASE + 0x18)
-#define AR_PHY_SPUR_REG     (AR_CHAN_BASE + 0x1c)
-#define AR_PHY_RX_IQCAL_CORR_B0    (AR_CHAN_BASE + 0xdc)
-#define AR_PHY_TX_IQCAL_CONTROL_3  (AR_CHAN_BASE + 0xb0)
-
-#define AR_PHY_TIMING11_SPUR_FREQ_SD    0x3FF00000
-#define AR_PHY_TIMING11_SPUR_FREQ_SD_S  20
-
-#define AR_PHY_TIMING11_SPUR_DELTA_PHASE 0x000FFFFF
-#define AR_PHY_TIMING11_SPUR_DELTA_PHASE_S 0
-
-#define AR_PHY_TIMING11_USE_SPUR_FILTER_IN_AGC 0x40000000
-#define AR_PHY_TIMING11_USE_SPUR_FILTER_IN_AGC_S 30
-
-#define AR_PHY_TIMING11_USE_SPUR_FILTER_IN_SELFCOR 0x80000000
-#define AR_PHY_TIMING11_USE_SPUR_FILTER_IN_SELFCOR_S 31
-
-#define AR_PHY_SPUR_REG_ENABLE_NF_RSSI_SPUR_MIT         0x4000000
-#define AR_PHY_SPUR_REG_ENABLE_NF_RSSI_SPUR_MIT_S       26
-
-#define AR_PHY_SPUR_REG_ENABLE_MASK_PPM                         0x20000     /* bins move with freq offset */
-#define AR_PHY_SPUR_REG_ENABLE_MASK_PPM_S                       17
-#define AR_PHY_SPUR_REG_SPUR_RSSI_THRESH            0x000000FF
-#define AR_PHY_SPUR_REG_SPUR_RSSI_THRESH_S          0
-#define AR_PHY_SPUR_REG_EN_VIT_SPUR_RSSI                        0x00000100
-#define AR_PHY_SPUR_REG_EN_VIT_SPUR_RSSI_S                      8
-#define AR_PHY_SPUR_REG_MASK_RATE_CNTL                          0x03FC0000
-#define AR_PHY_SPUR_REG_MASK_RATE_CNTL_S                       18
-
-#define AR_PHY_RX_IQCAL_CORR_B0_LOOPBACK_IQCORR_EN   0x20000000
-#define AR_PHY_RX_IQCAL_CORR_B0_LOOPBACK_IQCORR_EN_S         29
-
-#define AR_PHY_TX_IQCAL_CONTROL_3_IQCORR_EN   0x80000000
-#define AR_PHY_TX_IQCAL_CONTROL_3_IQCORR_EN_S         31
-
-#define AR_PHY_FIND_SIG_LOW  (AR_CHAN_BASE + 0x20)
-
-#define AR_PHY_SFCORR           (AR_CHAN_BASE + 0x24)
-#define AR_PHY_SFCORR_LOW       (AR_CHAN_BASE + 0x28)
-#define AR_PHY_SFCORR_EXT       (AR_CHAN_BASE + 0x2c)
-
-#define AR_PHY_EXT_CCA              (AR_CHAN_BASE + 0x30)
-#define AR_PHY_RADAR_0              (AR_CHAN_BASE + 0x34)
-#define AR_PHY_RADAR_1              (AR_CHAN_BASE + 0x38)
-#define AR_PHY_RADAR_EXT            (AR_CHAN_BASE + 0x3c)
-#define AR_PHY_MULTICHAIN_CTRL      (AR_CHAN_BASE + 0x80)
-#define AR_PHY_PERCHAIN_CSD         (AR_CHAN_BASE + 0x84)
-
-#define AR_PHY_TX_PHASE_RAMP_0      (AR_CHAN_BASE + 0xd0)
-#define AR_PHY_ADC_GAIN_DC_CORR_0   (AR_CHAN_BASE + 0xd4)
-#define AR_PHY_IQ_ADC_MEAS_0_B0     (AR_CHAN_BASE + 0xc0)
-#define AR_PHY_IQ_ADC_MEAS_1_B0     (AR_CHAN_BASE + 0xc4)
-#define AR_PHY_IQ_ADC_MEAS_2_B0     (AR_CHAN_BASE + 0xc8)
-#define AR_PHY_IQ_ADC_MEAS_3_B0     (AR_CHAN_BASE + 0xcc)
-
-/* The following registers changed position from AR9300 1.0 to AR9300 2.0 */
-#define AR_PHY_TX_PHASE_RAMP_0_9300_10      (AR_CHAN_BASE + 0xd0 - 0x10)
-#define AR_PHY_ADC_GAIN_DC_CORR_0_9300_10   (AR_CHAN_BASE + 0xd4 - 0x10)
-#define AR_PHY_IQ_ADC_MEAS_0_B0_9300_10     (AR_CHAN_BASE + 0xc0 + 0x8)
-#define AR_PHY_IQ_ADC_MEAS_1_B0_9300_10     (AR_CHAN_BASE + 0xc4 + 0x8)
-#define AR_PHY_IQ_ADC_MEAS_2_B0_9300_10     (AR_CHAN_BASE + 0xc8 + 0x8)
-#define AR_PHY_IQ_ADC_MEAS_3_B0_9300_10     (AR_CHAN_BASE + 0xcc + 0x8)
-
-#define AR_PHY_TX_CRC               (AR_CHAN_BASE + 0xa0)
-#define AR_PHY_TST_DAC_CONST        (AR_CHAN_BASE + 0xa4)
-#define AR_PHY_SPUR_REPORT_0        (AR_CHAN_BASE + 0xa8)
-#define AR_PHY_CHAN_INFO_TAB_0      (AR_CHAN_BASE + 0x300)
-
-/*
- * Channel Field Definitions
- */
-#define AR_PHY_TIMING2_USE_FORCE_PPM    0x00001000
-#define AR_PHY_TIMING2_FORCE_PPM_VAL    0x00000fff
-#define AR_PHY_TIMING3_DSC_MAN      0xFFFE0000
-#define AR_PHY_TIMING3_DSC_MAN_S    17
-#define AR_PHY_TIMING3_DSC_EXP      0x0001E000
-#define AR_PHY_TIMING3_DSC_EXP_S    13
-#define AR_PHY_TIMING4_IQCAL_LOG_COUNT_MAX 0xF000
-#define AR_PHY_TIMING4_IQCAL_LOG_COUNT_MAX_S   12
-#define AR_PHY_TIMING4_DO_CAL    0x10000
-
-#define AR_PHY_TIMING4_ENABLE_PILOT_MASK        0x10000000
-#define AR_PHY_TIMING4_ENABLE_PILOT_MASK_S      28
-#define AR_PHY_TIMING4_ENABLE_CHAN_MASK         0x20000000
-#define AR_PHY_TIMING4_ENABLE_CHAN_MASK_S       29
-
-#define AR_PHY_TIMING4_ENABLE_SPUR_FILTER 0x40000000
-#define AR_PHY_TIMING4_ENABLE_SPUR_FILTER_S 30
-#define AR_PHY_TIMING4_ENABLE_SPUR_RSSI 0x80000000
-#define AR_PHY_TIMING4_ENABLE_SPUR_RSSI_S 31
-
-#define AR_PHY_NEW_ADC_GAIN_CORR_ENABLE 0x40000000
-#define AR_PHY_NEW_ADC_DC_OFFSET_CORR_ENABLE 0x80000000
-#define AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW  0x00000001
-#define AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW    0x00003F00
-#define AR_PHY_SFCORR_LOW_M2COUNT_THR_LOW_S  8
-#define AR_PHY_SFCORR_LOW_M1_THRESH_LOW      0x001FC000
-#define AR_PHY_SFCORR_LOW_M1_THRESH_LOW_S    14
-#define AR_PHY_SFCORR_LOW_M2_THRESH_LOW      0x0FE00000
-#define AR_PHY_SFCORR_LOW_M2_THRESH_LOW_S    21
-#define AR_PHY_SFCORR_M2COUNT_THR    0x0000001F
-#define AR_PHY_SFCORR_M2COUNT_THR_S  0
-#define AR_PHY_SFCORR_M1_THRESH      0x00FE0000
-#define AR_PHY_SFCORR_M1_THRESH_S    17
-#define AR_PHY_SFCORR_M2_THRESH      0x7F000000
-#define AR_PHY_SFCORR_M2_THRESH_S    24
-#define AR_PHY_SFCORR_EXT_M1_THRESH       0x0000007F
-#define AR_PHY_SFCORR_EXT_M1_THRESH_S     0
-#define AR_PHY_SFCORR_EXT_M2_THRESH       0x00003F80
-#define AR_PHY_SFCORR_EXT_M2_THRESH_S     7
-#define AR_PHY_SFCORR_EXT_M1_THRESH_LOW   0x001FC000
-#define AR_PHY_SFCORR_EXT_M1_THRESH_LOW_S 14
-#define AR_PHY_SFCORR_EXT_M2_THRESH_LOW   0x0FE00000
-#define AR_PHY_SFCORR_EXT_M2_THRESH_LOW_S 21
-#define AR_PHY_SFCORR_EXT_SPUR_SUBCHANNEL_SD 0x10000000
-#define AR_PHY_SFCORR_EXT_SPUR_SUBCHANNEL_SD_S 28
-#define AR_PHY_SFCORR_SPUR_SUBCHNL_SD_S   28
-#define AR_PHY_EXT_CCA_THRESH62 0x007F0000
-#define AR_PHY_EXT_CCA_THRESH62_S       16
-#define AR_PHY_EXT_MINCCA_PWR   0x01FF0000
-#define AR_PHY_EXT_MINCCA_PWR_S 16
-#define AR_PHY_EXT_CYCPWR_THR1 0x0000FE00L
-#define AR_PHY_EXT_CYCPWR_THR1_S 9
-#define AR_PHY_TIMING5_CYCPWR_THR1  0x000000FE
-#define AR_PHY_TIMING5_CYCPWR_THR1_S    1
-#define AR_PHY_TIMING5_CYCPWR_THR1_ENABLE  0x00000001
-#define AR_PHY_TIMING5_CYCPWR_THR1_ENABLE_S    0
-#define AR_PHY_TIMING5_CYCPWR_THR1A  0x007F0000
-#define AR_PHY_TIMING5_CYCPWR_THR1A_S    16
-#define AR_PHY_TIMING5_RSSI_THR1A     (0x7F << 16)
-#define AR_PHY_TIMING5_RSSI_THR1A_S   16
-#define AR_PHY_TIMING5_RSSI_THR1A_ENA (0x1 << 15)
-#define AR_PHY_RADAR_0_ENA  0x00000001
-#define AR_PHY_RADAR_0_FFT_ENA  0x80000000
-#define AR_PHY_RADAR_0_INBAND   0x0000003e
-#define AR_PHY_RADAR_0_INBAND_S 1
-#define AR_PHY_RADAR_0_PRSSI    0x00000FC0
-#define AR_PHY_RADAR_0_PRSSI_S  6
-#define AR_PHY_RADAR_0_HEIGHT   0x0003F000
-#define AR_PHY_RADAR_0_HEIGHT_S 12
-#define AR_PHY_RADAR_0_RRSSI    0x00FC0000
-#define AR_PHY_RADAR_0_RRSSI_S  18
-#define AR_PHY_RADAR_0_FIRPWR   0x7F000000
-#define AR_PHY_RADAR_0_FIRPWR_S 24
-#define AR_PHY_RADAR_1_RELPWR_ENA       0x00800000
-#define AR_PHY_RADAR_1_USE_FIR128       0x00400000
-#define AR_PHY_RADAR_1_RELPWR_THRESH    0x003F0000
-#define AR_PHY_RADAR_1_RELPWR_THRESH_S  16
-#define AR_PHY_RADAR_1_BLOCK_CHECK      0x00008000
-#define AR_PHY_RADAR_1_MAX_RRSSI        0x00004000
-#define AR_PHY_RADAR_1_RELSTEP_CHECK    0x00002000
-#define AR_PHY_RADAR_1_RELSTEP_THRESH   0x00001F00
-#define AR_PHY_RADAR_1_RELSTEP_THRESH_S 8
-#define AR_PHY_RADAR_1_MAXLEN           0x000000FF
-#define AR_PHY_RADAR_1_MAXLEN_S         0
-#define AR_PHY_RADAR_EXT_ENA            0x00004000
-#define AR_PHY_RADAR_DC_PWR_THRESH      0x007f8000
-#define AR_PHY_RADAR_DC_PWR_THRESH_S    15
-#define AR_PHY_RADAR_LB_DC_CAP          0x7f800000
-#define AR_PHY_RADAR_LB_DC_CAP_S        23
-#define AR_PHY_FIND_SIG_LOW_FIRSTEP_LOW (0x3f << 6)
-#define AR_PHY_FIND_SIG_LOW_FIRSTEP_LOW_S   6
-#define AR_PHY_FIND_SIG_LOW_FIRPWR      (0x7f << 12)
-#define AR_PHY_FIND_SIG_LOW_FIRPWR_S    12
-#define AR_PHY_FIND_SIG_LOW_FIRPWR_SIGN_BIT 19
-#define AR_PHY_FIND_SIG_LOW_RELSTEP     0x1f
-#define AR_PHY_FIND_SIG_LOW_RELSTEP_S   0
-#define AR_PHY_FIND_SIG_LOW_RELSTEP_SIGN_BIT 5
-#define AR_PHY_CHAN_INFO_TAB_S2_READ    0x00000008
-#define AR_PHY_CHAN_INFO_TAB_S2_READ_S           3
-#define AR_PHY_RX_IQCAL_CORR_IQCORR_Q_Q_COFF 0x0000007F
-#define AR_PHY_RX_IQCAL_CORR_IQCORR_Q_Q_COFF_S   0
-#define AR_PHY_RX_IQCAL_CORR_IQCORR_Q_I_COFF 0x00003F80
-#define AR_PHY_RX_IQCAL_CORR_IQCORR_Q_I_COFF_S   7
-#define AR_PHY_RX_IQCAL_CORR_IQCORR_ENABLE   0x00004000
-#define AR_PHY_RX_IQCAL_CORR_LOOPBACK_IQCORR_Q_Q_COFF   0x003f8000
-#define AR_PHY_RX_IQCAL_CORR_LOOPBACK_IQCORR_Q_Q_COFF_S 15
-#define AR_PHY_RX_IQCAL_CORR_LOOPBACK_IQCORR_Q_I_COFF   0x1fc00000
-#define AR_PHY_RX_IQCAL_CORR_LOOPBACK_IQCORR_Q_I_COFF_S 22
-
-/*
- * MRC Register Map
- */
-#define AR_MRC_BASE    0x9c00
-
-#define AR_PHY_TIMING_3A       (AR_MRC_BASE + 0x0)
-#define AR_PHY_LDPC_CNTL1      (AR_MRC_BASE + 0x4)
-#define AR_PHY_LDPC_CNTL2      (AR_MRC_BASE + 0x8)
-#define AR_PHY_PILOT_SPUR_MASK (AR_MRC_BASE + 0xc)
-#define AR_PHY_CHAN_SPUR_MASK  (AR_MRC_BASE + 0x10)
-#define AR_PHY_SGI_DELTA       (AR_MRC_BASE + 0x14)
-#define AR_PHY_ML_CNTL_1       (AR_MRC_BASE + 0x18)
-#define AR_PHY_ML_CNTL_2       (AR_MRC_BASE + 0x1c)
-#define AR_PHY_TST_ADC         (AR_MRC_BASE + 0x20)
-
-#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_IDX_A              0x00000FE0
-#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_IDX_A_S    5
-#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_A                  0x1F
-#define AR_PHY_PILOT_SPUR_MASK_CF_PILOT_MASK_A_S                0
-
-#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_IDX_A        0x00000FE0
-#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_IDX_A_S      5
-#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_A            0x1F
-#define AR_PHY_CHAN_SPUR_MASK_CF_CHAN_MASK_A_S         0
-
-/*
- * MRC Feild Definitions
- */
-#define AR_PHY_SGI_DSC_MAN   0x0007FFF0
-#define AR_PHY_SGI_DSC_MAN_S 4
-#define AR_PHY_SGI_DSC_EXP   0x0000000F
-#define AR_PHY_SGI_DSC_EXP_S 0
-/*
- * BBB Register Map
- */
-#define AR_BBB_BASE    0x9d00
-
-/*
- * AGC Register Map
- */
-#define AR_AGC_BASE    0x9e00
-
-#define AR_PHY_SETTLING         (AR_AGC_BASE + 0x0)
-#define AR_PHY_FORCEMAX_GAINS_0 (AR_AGC_BASE + 0x4)
-#define AR_PHY_GAINS_MINOFF0    (AR_AGC_BASE + 0x8)
-#define AR_PHY_DESIRED_SZ       (AR_AGC_BASE + 0xc)
-#define AR_PHY_FIND_SIG         (AR_AGC_BASE + 0x10)
-#define AR_PHY_AGC              (AR_AGC_BASE + 0x14)
-#define AR_PHY_EXT_ATTEN_CTL_0  (AR_AGC_BASE + 0x18)
-#define AR_PHY_CCA_0            (AR_AGC_BASE + 0x1c)
-#define AR_PHY_EXT_CCA0         (AR_AGC_BASE + 0x20)
-#define AR_PHY_RESTART          (AR_AGC_BASE + 0x24)
-#define AR_PHY_MC_GAIN_CTRL     (AR_AGC_BASE + 0x28)
-#define AR_PHY_EXTCHN_PWRTHR1   (AR_AGC_BASE + 0x2c)
-#define AR_PHY_EXT_CHN_WIN      (AR_AGC_BASE + 0x30)
-#define AR_PHY_20_40_DET_THR    (AR_AGC_BASE + 0x34)
-#define AR_PHY_RIFS_SRCH        (AR_AGC_BASE + 0x38)
-#define AR_PHY_PEAK_DET_CTRL_1  (AR_AGC_BASE + 0x3c)
-#define AR_PHY_PEAK_DET_CTRL_2  (AR_AGC_BASE + 0x40)
-#define AR_PHY_RX_GAIN_BOUNDS_1 (AR_AGC_BASE + 0x44)
-#define AR_PHY_RX_GAIN_BOUNDS_2 (AR_AGC_BASE + 0x48)
-#define AR_PHY_RSSI_0           (AR_AGC_BASE + 0x180)
-#define AR_PHY_SPUR_CCK_REP0    (AR_AGC_BASE + 0x184)
-#define AR_PHY_CCK_DETECT       (AR_AGC_BASE + 0x1c0)
-#define AR_PHY_DAG_CTRLCCK      (AR_AGC_BASE + 0x1c4)
-#define AR_PHY_IQCORR_CTRL_CCK  (AR_AGC_BASE + 0x1c8)
-
-#define AR_PHY_CCK_SPUR_MIT     (AR_AGC_BASE + 0x1cc)
-#define AR_PHY_CCK_SPUR_MIT_SPUR_RSSI_THR                           0x000001fe
-#define AR_PHY_CCK_SPUR_MIT_SPUR_RSSI_THR_S                                  1
-#define AR_PHY_CCK_SPUR_MIT_SPUR_FILTER_TYPE                        0x60000000
-#define AR_PHY_CCK_SPUR_MIT_SPUR_FILTER_TYPE_S                              29
-#define AR_PHY_CCK_SPUR_MIT_USE_CCK_SPUR_MIT                        0x00000001
-#define AR_PHY_CCK_SPUR_MIT_USE_CCK_SPUR_MIT_S                               0
-#define AR_PHY_CCK_SPUR_MIT_CCK_SPUR_FREQ                           0x1ffffe00
-#define AR_PHY_CCK_SPUR_MIT_CCK_SPUR_FREQ_S                                  9
-
-#define AR_PHY_MRC_CCK_CTRL         (AR_AGC_BASE + 0x1d0)
-#define AR_PHY_MRC_CCK_ENABLE       0x00000001
-#define AR_PHY_MRC_CCK_ENABLE_S              0
-#define AR_PHY_MRC_CCK_MUX_REG      0x00000002
-#define AR_PHY_MRC_CCK_MUX_REG_S             1
-
-#define AR_PHY_RX_OCGAIN        (AR_AGC_BASE + 0x200)
-
-#define AR_PHY_CCA_NOM_VAL_9300_2GHZ          -110
-#define AR_PHY_CCA_NOM_VAL_9300_5GHZ          -115
-#define AR_PHY_CCA_MIN_GOOD_VAL_9300_2GHZ     -125
-#define AR_PHY_CCA_MIN_GOOD_VAL_9300_5GHZ     -125
-#define AR_PHY_CCA_MAX_GOOD_VAL_9300_2GHZ     -95
-#define AR_PHY_CCA_MAX_GOOD_VAL_9300_5GHZ     -100
-
-/*
- * AGC Field Definitions
- */
-#define AR_PHY_EXT_ATTEN_CTL_RXTX_MARGIN    0x00FC0000
-#define AR_PHY_EXT_ATTEN_CTL_RXTX_MARGIN_S  18
-#define AR_PHY_EXT_ATTEN_CTL_BSW_MARGIN     0x00003C00
-#define AR_PHY_EXT_ATTEN_CTL_BSW_MARGIN_S   10
-#define AR_PHY_EXT_ATTEN_CTL_BSW_ATTEN      0x0000001F
-#define AR_PHY_EXT_ATTEN_CTL_BSW_ATTEN_S    0
-#define AR_PHY_EXT_ATTEN_CTL_XATTEN2_MARGIN     0x003E0000
-#define AR_PHY_EXT_ATTEN_CTL_XATTEN2_MARGIN_S   17
-#define AR_PHY_EXT_ATTEN_CTL_XATTEN1_MARGIN     0x0001F000
-#define AR_PHY_EXT_ATTEN_CTL_XATTEN1_MARGIN_S   12
-#define AR_PHY_EXT_ATTEN_CTL_XATTEN2_DB         0x00000FC0
-#define AR_PHY_EXT_ATTEN_CTL_XATTEN2_DB_S       6
-#define AR_PHY_EXT_ATTEN_CTL_XATTEN1_DB         0x0000003F
-#define AR_PHY_EXT_ATTEN_CTL_XATTEN1_DB_S       0
-#define AR_PHY_RXGAIN_TXRX_ATTEN    0x0003F000
-#define AR_PHY_RXGAIN_TXRX_ATTEN_S  12
-#define AR_PHY_RXGAIN_TXRX_RF_MAX   0x007C0000
-#define AR_PHY_RXGAIN_TXRX_RF_MAX_S 18
-#define AR9280_PHY_RXGAIN_TXRX_ATTEN    0x00003F80
-#define AR9280_PHY_RXGAIN_TXRX_ATTEN_S  7
-#define AR9280_PHY_RXGAIN_TXRX_MARGIN   0x001FC000
-#define AR9280_PHY_RXGAIN_TXRX_MARGIN_S 14
-#define AR_PHY_SETTLING_SWITCH  0x00003F80
-#define AR_PHY_SETTLING_SWITCH_S    7
-#define AR_PHY_DESIRED_SZ_ADC       0x000000FF
-#define AR_PHY_DESIRED_SZ_ADC_S     0
-#define AR_PHY_DESIRED_SZ_PGA       0x0000FF00
-#define AR_PHY_DESIRED_SZ_PGA_S     8
-#define AR_PHY_DESIRED_SZ_TOT_DES   0x0FF00000
-#define AR_PHY_DESIRED_SZ_TOT_DES_S 20
-#define AR_PHY_MINCCA_PWR       0x1FF00000
-#define AR_PHY_MINCCA_PWR_S     20
-#define AR_PHY_CCA_THRESH62     0x0007F000
-#define AR_PHY_CCA_THRESH62_S   12
-#define AR9280_PHY_MINCCA_PWR       0x1FF00000
-#define AR9280_PHY_MINCCA_PWR_S     20
-#define AR9280_PHY_CCA_THRESH62     0x000FF000
-#define AR9280_PHY_CCA_THRESH62_S   12
-#define AR_PHY_EXT_CCA0_THRESH62    0x000000FF
-#define AR_PHY_EXT_CCA0_THRESH62_S  0
-#define AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK          0x0000003F
-#define AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK_S        0
-#define AR_PHY_CCK_DETECT_ANT_SWITCH_TIME           0x00001FC0
-#define AR_PHY_CCK_DETECT_ANT_SWITCH_TIME_S         6
-#define AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV    0x2000
-
-#define AR_PHY_DAG_CTRLCCK_EN_RSSI_THR  0x00000200
-#define AR_PHY_DAG_CTRLCCK_EN_RSSI_THR_S  9
-#define AR_PHY_DAG_CTRLCCK_RSSI_THR 0x0001FC00
-#define AR_PHY_DAG_CTRLCCK_RSSI_THR_S   10
-
-#define AR_PHY_RIFS_INIT_DELAY         0x3ff0000
-#define AR_PHY_AGC_COARSE_LOW       0x00007F80
-#define AR_PHY_AGC_COARSE_LOW_S     7
-#define AR_PHY_AGC_COARSE_HIGH      0x003F8000
-#define AR_PHY_AGC_COARSE_HIGH_S    15
-#define AR_PHY_AGC_COARSE_PWR_CONST 0x0000007F
-#define AR_PHY_AGC_COARSE_PWR_CONST_S   0
-#define AR_PHY_FIND_SIG_FIRSTEP  0x0003F000
-#define AR_PHY_FIND_SIG_FIRSTEP_S        12
-#define AR_PHY_FIND_SIG_FIRPWR   0x03FC0000
-#define AR_PHY_FIND_SIG_FIRPWR_S         18
-#define AR_PHY_FIND_SIG_FIRPWR_SIGN_BIT  25
-#define AR_PHY_FIND_SIG_RELPWR   (0x1f << 6)
-#define AR_PHY_FIND_SIG_RELPWR_S          6
-#define AR_PHY_FIND_SIG_RELPWR_SIGN_BIT  11
-#define AR_PHY_FIND_SIG_RELSTEP        0x1f
-#define AR_PHY_FIND_SIG_RELSTEP_S         0
-#define AR_PHY_FIND_SIG_RELSTEP_SIGN_BIT  5
-#define AR_PHY_RESTART_DIV_GC   0x001C0000
-#define AR_PHY_RESTART_DIV_GC_S 18
-#define AR_PHY_RESTART_ENA      0x01
-#define AR_PHY_DC_RESTART_DIS   0x40000000
-
-#define AR_PHY_TPC_OLPC_GAIN_DELTA_PAL_ON       0xFF000000
-#define AR_PHY_TPC_OLPC_GAIN_DELTA_PAL_ON_S     24
-#define AR_PHY_TPC_OLPC_GAIN_DELTA              0x00FF0000
-#define AR_PHY_TPC_OLPC_GAIN_DELTA_S            16
-
-#define AR_PHY_TPC_6_ERROR_EST_MODE             0x03000000
-#define AR_PHY_TPC_6_ERROR_EST_MODE_S           24
-
-/*
- * SM Register Map
- */
-#define AR_SM_BASE     0xa200
-
-#define AR_PHY_D2_CHIP_ID        (AR_SM_BASE + 0x0)
-#define AR_PHY_GEN_CTRL          (AR_SM_BASE + 0x4)
-#define AR_PHY_MODE              (AR_SM_BASE + 0x8)
-#define AR_PHY_ACTIVE            (AR_SM_BASE + 0xc)
-#define AR_PHY_SPUR_MASK_A       (AR_SM_BASE + 0x20)
-#define AR_PHY_SPUR_MASK_B       (AR_SM_BASE + 0x24)
-#define AR_PHY_SPECTRAL_SCAN     (AR_SM_BASE + 0x28)
-#define AR_PHY_RADAR_BW_FILTER   (AR_SM_BASE + 0x2c)
-#define AR_PHY_SEARCH_START_DELAY (AR_SM_BASE + 0x30)
-#define AR_PHY_MAX_RX_LEN        (AR_SM_BASE + 0x34)
-#define AR_PHY_FRAME_CTL         (AR_SM_BASE + 0x38)
-#define AR_PHY_RFBUS_REQ         (AR_SM_BASE + 0x3c)
-#define AR_PHY_RFBUS_GRANT       (AR_SM_BASE + 0x40)
-#define AR_PHY_RIFS              (AR_SM_BASE + 0x44)
-#define AR_PHY_RX_CLR_DELAY      (AR_SM_BASE + 0x50)
-#define AR_PHY_RX_DELAY          (AR_SM_BASE + 0x54)
-
-#define AR_PHY_XPA_TIMING_CTL    (AR_SM_BASE + 0x64)
-#define AR_PHY_MISC_PA_CTL       (AR_SM_BASE + 0x80)
-#define AR_PHY_SWITCH_CHAIN_0    (AR_SM_BASE + 0x84)
-#define AR_PHY_SWITCH_COM        (AR_SM_BASE + 0x88)
-#define AR_PHY_SWITCH_COM_2      (AR_SM_BASE + 0x8c)
-#define AR_PHY_RX_CHAINMASK      (AR_SM_BASE + 0xa0)
-#define AR_PHY_CAL_CHAINMASK     (AR_SM_BASE + 0xc0)
-#define AR_PHY_CALMODE           (AR_SM_BASE + 0xc8)
-#define AR_PHY_FCAL_1            (AR_SM_BASE + 0xcc)
-#define AR_PHY_FCAL_2_0          (AR_SM_BASE + 0xd0)
-#define AR_PHY_DFT_TONE_CTL_0    (AR_SM_BASE + 0xd4)
-#define AR_PHY_CL_CAL_CTL        (AR_SM_BASE + 0xd8)
-#define AR_PHY_CL_TAB_0          (AR_SM_BASE + 0x100)
-#define AR_PHY_SYNTH_CONTROL     (AR_SM_BASE + 0x140)
-#define AR_PHY_ADDAC_CLK_SEL     (AR_SM_BASE + 0x144)
-#define AR_PHY_PLL_CTL           (AR_SM_BASE + 0x148)
-#define AR_PHY_ANALOG_SWAP       (AR_SM_BASE + 0x14c)
-#define AR_PHY_ADDAC_PARA_CTL    (AR_SM_BASE + 0x150)
-#define AR_PHY_XPA_CFG           (AR_SM_BASE + 0x158)
-
-#define AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_IDX_A           0x0001FC00
-#define AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_IDX_A_S         10
-#define AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_A                       0x3FF
-#define AR_PHY_SPUR_MASK_A_CF_PUNC_MASK_A_S                     0
-
-#define AR_PHY_TEST              (AR_SM_BASE + 0x160)
-
-#define AR_PHY_TEST_BBB_OBS_SEL       0x780000
-#define AR_PHY_TEST_BBB_OBS_SEL_S     19
-
-#define AR_PHY_TEST_RX_OBS_SEL_BIT5_S 23
-#define AR_PHY_TEST_RX_OBS_SEL_BIT5   (1 << AR_PHY_TEST_RX_OBS_SEL_BIT5_S)
-
-#define AR_PHY_TEST_CHAIN_SEL      0xC0000000
-#define AR_PHY_TEST_CHAIN_SEL_S    30
-
-#define AR_PHY_TEST_CTL_STATUS   (AR_SM_BASE + 0x164)
-#define AR_PHY_TEST_CTL_TSTDAC_EN         0x1
-#define AR_PHY_TEST_CTL_TSTDAC_EN_S       0
-#define AR_PHY_TEST_CTL_TX_OBS_SEL        0x1C
-#define AR_PHY_TEST_CTL_TX_OBS_SEL_S      2
-#define AR_PHY_TEST_CTL_TX_OBS_MUX_SEL    0x60
-#define AR_PHY_TEST_CTL_TX_OBS_MUX_SEL_S  5
-#define AR_PHY_TEST_CTL_TSTADC_EN         0x100
-#define AR_PHY_TEST_CTL_TSTADC_EN_S       8
-#define AR_PHY_TEST_CTL_RX_OBS_SEL        0x3C00
-#define AR_PHY_TEST_CTL_RX_OBS_SEL_S      10
-
-
-#define AR_PHY_TSTDAC            (AR_SM_BASE + 0x168)
-
-#define AR_PHY_CHAN_STATUS       (AR_SM_BASE + 0x16c)
-
-#define AR_PHY_CHAN_INFO_MEMORY                                (AR_SM_BASE + 0x170)
-#define AR_PHY_CHAN_INFO_MEMORY_CHANINFOMEM_S2_READ    0x00000008
-#define AR_PHY_CHAN_INFO_MEMORY_CHANINFOMEM_S2_READ_S  3
-
-#define AR_PHY_CHNINFO_NOISEPWR  (AR_SM_BASE + 0x174)
-#define AR_PHY_CHNINFO_GAINDIFF  (AR_SM_BASE + 0x178)
-#define AR_PHY_CHNINFO_FINETIM   (AR_SM_BASE + 0x17c)
-#define AR_PHY_CHAN_INFO_GAIN_0  (AR_SM_BASE + 0x180)
-#define AR_PHY_SCRAMBLER_SEED    (AR_SM_BASE + 0x190)
-#define AR_PHY_CCK_TX_CTRL       (AR_SM_BASE + 0x194)
-
-#define AR_PHY_HEAVYCLIP_CTL     (AR_SM_BASE + 0x1a4)
-#define AR_PHY_HEAVYCLIP_20      (AR_SM_BASE + 0x1a8)
-#define AR_PHY_HEAVYCLIP_40      (AR_SM_BASE + 0x1ac)
-#define AR_PHY_ILLEGAL_TXRATE    (AR_SM_BASE + 0x1b0)
-
-#define AR_PHY_PWRTX_MAX         (AR_SM_BASE + 0x1f0)
-#define AR_PHY_POWER_TX_SUB      (AR_SM_BASE + 0x1f4)
-
-#define AR_PHY_TPC_1                           (AR_SM_BASE + 0x1f8)
-#define AR_PHY_TPC_1_FORCED_DAC_GAIN           0x0000003e
-#define AR_PHY_TPC_1_FORCED_DAC_GAIN_S         1
-#define AR_PHY_TPC_1_FORCE_DAC_GAIN            0x00000001
-#define AR_PHY_TPC_1_FORCE_DAC_GAIN_S          0
-
-#define AR_PHY_TPC_4_B0                                (AR_SM_BASE + 0x204)
-#define AR_PHY_TPC_5_B0                                (AR_SM_BASE + 0x208)
-#define AR_PHY_TPC_6_B0                                (AR_SM_BASE + 0x20c)
-
-#define AR_PHY_TPC_11_B0                       (AR_SM_BASE + 0x220)
-#define AR_PHY_TPC_11_B1                       (AR_SM1_BASE + 0x220)
-#define AR_PHY_TPC_11_B2                       (AR_SM2_BASE + 0x220)
-#define AR_PHY_TPC_11_OLPC_GAIN_DELTA          0x00ff0000
-#define AR_PHY_TPC_11_OLPC_GAIN_DELTA_S                16
-
-#define AR_PHY_TPC_12                          (AR_SM_BASE + 0x224)
-#define AR_PHY_TPC_12_DESIRED_SCALE_HT40_5     0x3e000000
-#define AR_PHY_TPC_12_DESIRED_SCALE_HT40_5_S   25
-
-#define AR_PHY_TPC_18                          (AR_SM_BASE + 0x23c)
-#define AR_PHY_TPC_18_THERM_CAL_VALUE           0x000000ff
-#define AR_PHY_TPC_18_THERM_CAL_VALUE_S         0
-#define AR_PHY_TPC_18_VOLT_CAL_VALUE           0x0000ff00
-#define AR_PHY_TPC_18_VOLT_CAL_VALUE_S         8
-
-#define AR_PHY_TPC_19                          (AR_SM_BASE + 0x240)
-#define AR_PHY_TPC_19_ALPHA_VOLT               0x001f0000
-#define AR_PHY_TPC_19_ALPHA_VOLT_S             16
-#define AR_PHY_TPC_19_ALPHA_THERM              0xff
-#define AR_PHY_TPC_19_ALPHA_THERM_S            0
-
-#define AR_PHY_TX_FORCED_GAIN                          (AR_SM_BASE + 0x258)
-#define AR_PHY_TX_FORCED_GAIN_FORCE_TX_GAIN            0x00000001
-#define AR_PHY_TX_FORCED_GAIN_FORCE_TX_GAIN_S          0
-#define AR_PHY_TX_FORCED_GAIN_FORCED_TXBB1DBGAIN       0x0000000e
-#define AR_PHY_TX_FORCED_GAIN_FORCED_TXBB1DBGAIN_S     1
-#define AR_PHY_TX_FORCED_GAIN_FORCED_TXBB6DBGAIN       0x00000030
-#define AR_PHY_TX_FORCED_GAIN_FORCED_TXBB6DBGAIN_S     4
-#define AR_PHY_TX_FORCED_GAIN_FORCED_TXMXRGAIN         0x000003c0
-#define AR_PHY_TX_FORCED_GAIN_FORCED_TXMXRGAIN_S       6
-#define AR_PHY_TX_FORCED_GAIN_FORCED_PADRVGNA          0x00003c00
-#define AR_PHY_TX_FORCED_GAIN_FORCED_PADRVGNA_S                10
-#define AR_PHY_TX_FORCED_GAIN_FORCED_PADRVGNB          0x0003c000
-#define AR_PHY_TX_FORCED_GAIN_FORCED_PADRVGNB_S                14
-#define AR_PHY_TX_FORCED_GAIN_FORCED_PADRVGNC          0x003c0000
-#define AR_PHY_TX_FORCED_GAIN_FORCED_PADRVGNC_S                18
-#define AR_PHY_TX_FORCED_GAIN_FORCED_PADRVGND          0x00c00000
-#define AR_PHY_TX_FORCED_GAIN_FORCED_PADRVGND_S                22
-#define AR_PHY_TX_FORCED_GAIN_FORCED_ENABLE_PAL                0x01000000
-#define AR_PHY_TX_FORCED_GAIN_FORCED_ENABLE_PAL_S      24
-
-
-#define AR_PHY_PDADC_TAB_0       (AR_SM_BASE + 0x280)
-
-#define AR_PHY_TXGAIN_TABLE      (AR_SM_BASE + 0x300)
-
-#define AR_PHY_TX_IQCAL_CONTROL_1   (AR_SM_BASE + 0x448)
-#define AR_PHY_TX_IQCAL_START       (AR_SM_BASE + 0x440)
-#define AR_PHY_TX_IQCAL_STATUS_B0   (AR_SM_BASE + 0x48c)
-#define AR_PHY_TX_IQCAL_CORR_COEFF_01_B0    (AR_SM_BASE + 0x450)
-
-#define AR_PHY_WATCHDOG_STATUS      (AR_SM_BASE + 0x5c0)
-#define AR_PHY_WATCHDOG_CTL_1       (AR_SM_BASE + 0x5c4)
-#define AR_PHY_WATCHDOG_CTL_2       (AR_SM_BASE + 0x5c8)
-#define AR_PHY_WATCHDOG_CTL         (AR_SM_BASE + 0x5cc)
-#define AR_PHY_ONLY_WARMRESET       (AR_SM_BASE + 0x5d0)
-#define AR_PHY_ONLY_CTL             (AR_SM_BASE + 0x5d4)
-#define AR_PHY_ECO_CTRL             (AR_SM_BASE + 0x5dc)
-
-#define AR_PHY_BB_THERM_ADC_1                          (AR_SM_BASE + 0x248)
-#define AR_PHY_BB_THERM_ADC_1_INIT_THERM               0x000000ff
-#define AR_PHY_BB_THERM_ADC_1_INIT_THERM_S             0
-
-#define AR_PHY_BB_THERM_ADC_4                          (AR_SM_BASE + 0x254)
-#define AR_PHY_BB_THERM_ADC_4_LATEST_THERM_VALUE       0x000000ff
-#define AR_PHY_BB_THERM_ADC_4_LATEST_THERM_VALUE_S     0
-#define AR_PHY_BB_THERM_ADC_4_LATEST_VOLT_VALUE                0x0000ff00
-#define AR_PHY_BB_THERM_ADC_4_LATEST_VOLT_VALUE_S      8
-
-
-#define AR_PHY_65NM_CH0_SYNTH4      0x1608c
-#define AR_PHY_SYNTH4_LONG_SHIFT_SELECT   0x00000002
-#define AR_PHY_SYNTH4_LONG_SHIFT_SELECT_S 1
-#define AR_PHY_65NM_CH0_SYNTH7      0x16098
-#define AR_PHY_65NM_CH0_BIAS1       0x160c0
-#define AR_PHY_65NM_CH0_BIAS2       0x160c4
-#define AR_PHY_65NM_CH0_BIAS4       0x160cc
-#define AR_PHY_65NM_CH0_RXTX4       0x1610c
-#define AR_PHY_65NM_CH0_THERM       0x16290
-
-#define AR_PHY_65NM_CH0_THERM_LOCAL   0x80000000
-#define AR_PHY_65NM_CH0_THERM_LOCAL_S 31
-#define AR_PHY_65NM_CH0_THERM_START   0x20000000
-#define AR_PHY_65NM_CH0_THERM_START_S 29
-#define AR_PHY_65NM_CH0_THERM_SAR_ADC_OUT   0x0000ff00
-#define AR_PHY_65NM_CH0_THERM_SAR_ADC_OUT_S 8
-
-#define AR_PHY_65NM_CH0_RXTX1       0x16100
-#define AR_PHY_65NM_CH0_RXTX2       0x16104
-#define AR_PHY_65NM_CH1_RXTX1       0x16500
-#define AR_PHY_65NM_CH1_RXTX2       0x16504
-#define AR_PHY_65NM_CH2_RXTX1       0x16900
-#define AR_PHY_65NM_CH2_RXTX2       0x16904
-
-#define AR_PHY_RX1DB_BIQUAD_LONG_SHIFT         0x00380000
-#define AR_PHY_RX1DB_BIQUAD_LONG_SHIFT_S       19
-#define AR_PHY_RX6DB_BIQUAD_LONG_SHIFT         0x00c00000
-#define AR_PHY_RX6DB_BIQUAD_LONG_SHIFT_S       22
-#define AR_PHY_LNAGAIN_LONG_SHIFT              0xe0000000
-#define AR_PHY_LNAGAIN_LONG_SHIFT_S            29
-#define AR_PHY_MXRGAIN_LONG_SHIFT              0x03000000
-#define AR_PHY_MXRGAIN_LONG_SHIFT_S            24
-#define AR_PHY_VGAGAIN_LONG_SHIFT              0x1c000000
-#define AR_PHY_VGAGAIN_LONG_SHIFT_S            26
-#define AR_PHY_SCFIR_GAIN_LONG_SHIFT           0x00000001
-#define AR_PHY_SCFIR_GAIN_LONG_SHIFT_S         0
-#define AR_PHY_MANRXGAIN_LONG_SHIFT            0x00000002
-#define AR_PHY_MANRXGAIN_LONG_SHIFT_S          1
-
-/*
- * SM Field Definitions
- */
-#define AR_PHY_CL_CAL_ENABLE          0x00000002
-#define AR_PHY_PARALLEL_CAL_ENABLE    0x00000001
-#define AR_PHY_TPCRG1_PD_CAL_ENABLE   0x00400000
-#define AR_PHY_TPCRG1_PD_CAL_ENABLE_S 22
-
-#define AR_PHY_ADDAC_PARACTL_OFF_PWDADC 0x00008000
-
-#define AR_PHY_FCAL20_CAP_STATUS_0    0x01f00000
-#define AR_PHY_FCAL20_CAP_STATUS_0_S  20
-
-#define AR_PHY_RFBUS_REQ_EN     0x00000001  /* request for RF bus */
-#define AR_PHY_RFBUS_GRANT_EN   0x00000001  /* RF bus granted */
-#define AR_PHY_GC_TURBO_MODE       0x00000001  /* set turbo mode bits */
-#define AR_PHY_GC_TURBO_SHORT      0x00000002  /* set short symbols to turbo mode setting */
-#define AR_PHY_GC_DYN2040_EN       0x00000004  /* enable dyn 20/40 mode */
-#define AR_PHY_GC_DYN2040_PRI_ONLY 0x00000008  /* dyn 20/40 - primary only */
-#define AR_PHY_GC_DYN2040_PRI_CH   0x00000010  /* dyn 20/40 - primary ch offset (0=+10MHz, 1=-10MHz)*/
-#define AR_PHY_GC_DYN2040_PRI_CH_S 4
-#define AR_PHY_GC_DYN2040_EXT_CH   0x00000020  /* dyn 20/40 - ext ch spacing (0=20MHz/ 1=25MHz) */
-#define AR_PHY_GC_HT_EN            0x00000040  /* ht enable */
-#define AR_PHY_GC_SHORT_GI_40      0x00000080  /* allow short GI for HT 40 */
-#define AR_PHY_GC_WALSH            0x00000100  /* walsh spatial spreading for 2 chains,2 streams TX */
-#define AR_PHY_GC_SINGLE_HT_LTF1   0x00000200  /* single length (4us) 1st HT long training symbol */
-#define AR_PHY_GC_GF_DETECT_EN     0x00000400  /* enable Green Field detection. Only affects rx, not tx */
-#define AR_PHY_GC_ENABLE_DAC_FIFO  0x00000800  /* fifo between bb and dac */
-#define AR_PHY_RX_DELAY_DELAY      0x00003FFF  /* delay from wakeup to rx ena */
-
-#define AR_PHY_CALMODE_IQ           0x00000000
-#define AR_PHY_CALMODE_ADC_GAIN     0x00000001
-#define AR_PHY_CALMODE_ADC_DC_PER   0x00000002
-#define AR_PHY_CALMODE_ADC_DC_INIT  0x00000003
-#define AR_PHY_SWAP_ALT_CHAIN       0x00000040
-#define AR_PHY_MODE_OFDM            0x00000000
-#define AR_PHY_MODE_CCK             0x00000001
-#define AR_PHY_MODE_DYNAMIC         0x00000004
-#define AR_PHY_MODE_DYNAMIC_S       2
-#define AR_PHY_MODE_HALF            0x00000020
-#define AR_PHY_MODE_QUARTER         0x00000040
-#define AR_PHY_MAC_CLK_MODE         0x00000080
-#define AR_PHY_MODE_DYN_CCK_DISABLE 0x00000100
-#define AR_PHY_MODE_SVD_HALF        0x00000200
-#define AR_PHY_ACTIVE_EN    0x00000001
-#define AR_PHY_ACTIVE_DIS   0x00000000
-#define AR_PHY_FORCE_XPA_CFG    0x000000001
-#define AR_PHY_FORCE_XPA_CFG_S  0
-#define AR_PHY_XPA_TIMING_CTL_TX_END_XPAB_OFF    0xFF000000
-#define AR_PHY_XPA_TIMING_CTL_TX_END_XPAB_OFF_S  24
-#define AR_PHY_XPA_TIMING_CTL_TX_END_XPAA_OFF    0x00FF0000
-#define AR_PHY_XPA_TIMING_CTL_TX_END_XPAA_OFF_S  16
-#define AR_PHY_XPA_TIMING_CTL_FRAME_XPAB_ON      0x0000FF00
-#define AR_PHY_XPA_TIMING_CTL_FRAME_XPAB_ON_S    8
-#define AR_PHY_XPA_TIMING_CTL_FRAME_XPAA_ON      0x000000FF
-#define AR_PHY_XPA_TIMING_CTL_FRAME_XPAA_ON_S    0
-#define AR_PHY_TX_END_TO_A2_RX_ON       0x00FF0000
-#define AR_PHY_TX_END_TO_A2_RX_ON_S     16
-#define AR_PHY_TX_END_DATA_START  0x000000FF
-#define AR_PHY_TX_END_DATA_START_S  0
-#define AR_PHY_TX_END_PA_ON       0x0000FF00
-#define AR_PHY_TX_END_PA_ON_S       8
-#define AR_PHY_TPCRG5_PD_GAIN_OVERLAP   0x0000000F
-#define AR_PHY_TPCRG5_PD_GAIN_OVERLAP_S     0
-#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_1    0x000003F0
-#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_1_S  4
-#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_2    0x0000FC00
-#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_2_S  10
-#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_3    0x003F0000
-#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_3_S  16
-#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_4    0x0FC00000
-#define AR_PHY_TPCRG5_PD_GAIN_BOUNDARY_4_S  22
-#define AR_PHY_TPCRG1_NUM_PD_GAIN   0x0000c000
-#define AR_PHY_TPCRG1_NUM_PD_GAIN_S 14
-#define AR_PHY_TPCRG1_PD_GAIN_1    0x00030000
-#define AR_PHY_TPCRG1_PD_GAIN_1_S  16
-#define AR_PHY_TPCRG1_PD_GAIN_2    0x000C0000
-#define AR_PHY_TPCRG1_PD_GAIN_2_S  18
-#define AR_PHY_TPCRG1_PD_GAIN_3    0x00300000
-#define AR_PHY_TPCRG1_PD_GAIN_3_S  20
-#define AR_PHY_TPCGR1_FORCED_DAC_GAIN   0x0000003e
-#define AR_PHY_TPCGR1_FORCED_DAC_GAIN_S 1
-#define AR_PHY_TPCGR1_FORCE_DAC_GAIN    0x00000001
-#define AR_PHY_TXGAIN_FORCE               0x00000001
-#define AR_PHY_TXGAIN_FORCED_PADVGNRA     0x00003c00
-#define AR_PHY_TXGAIN_FORCED_PADVGNRA_S   10
-#define AR_PHY_TXGAIN_FORCED_PADVGNRB     0x0003c000
-#define AR_PHY_TXGAIN_FORCED_PADVGNRB_S   14
-#define AR_PHY_TXGAIN_FORCED_PADVGNRD     0x00c00000
-#define AR_PHY_TXGAIN_FORCED_PADVGNRD_S   22
-#define AR_PHY_TXGAIN_FORCED_TXMXRGAIN    0x000003c0
-#define AR_PHY_TXGAIN_FORCED_TXMXRGAIN_S  6
-#define AR_PHY_TXGAIN_FORCED_TXBB1DBGAIN  0x0000000e
-#define AR_PHY_TXGAIN_FORCED_TXBB1DBGAIN_S 1
-
-#define AR_PHY_POWER_TX_RATE1   0x9934
-#define AR_PHY_POWER_TX_RATE2   0x9938
-#define AR_PHY_POWER_TX_RATE_MAX    0x993c
-#define AR_PHY_POWER_TX_RATE_MAX_TPC_ENABLE 0x00000040
-#define PHY_AGC_CLR             0x10000000
-#define RFSILENT_BB             0x00002000
-#define AR_PHY_CHAN_INFO_GAIN_DIFF_PPM_MASK          0xFFF
-#define AR_PHY_CHAN_INFO_GAIN_DIFF_PPM_SIGNED_BIT    0x800
-#define AR_PHY_CHAN_INFO_GAIN_DIFF_UPPER_LIMIT         320
-#define AR_PHY_CHAN_INFO_MEMORY_CAPTURE_MASK         0x0001
-#define AR_PHY_RX_DELAY_DELAY   0x00003FFF
-#define AR_PHY_CCK_TX_CTRL_JAPAN    0x00000010
-#define AR_PHY_SPECTRAL_SCAN_ENABLE         0x00000001
-#define AR_PHY_SPECTRAL_SCAN_ENABLE_S       0
-#define AR_PHY_SPECTRAL_SCAN_ACTIVE         0x00000002
-#define AR_PHY_SPECTRAL_SCAN_ACTIVE_S       1
-#define AR_PHY_SPECTRAL_SCAN_FFT_PERIOD     0x000000F0
-#define AR_PHY_SPECTRAL_SCAN_FFT_PERIOD_S   4
-#define AR_PHY_SPECTRAL_SCAN_PERIOD         0x0000FF00
-#define AR_PHY_SPECTRAL_SCAN_PERIOD_S       8
-#define AR_PHY_SPECTRAL_SCAN_COUNT          0x00FF0000
-#define AR_PHY_SPECTRAL_SCAN_COUNT_S        16
-#define AR_PHY_SPECTRAL_SCAN_SHORT_REPEAT   0x01000000
-#define AR_PHY_SPECTRAL_SCAN_SHORT_REPEAT_S 24
-#define AR_PHY_CHANNEL_STATUS_RX_CLEAR      0x00000004
-#define AR_PHY_TX_IQCAQL_CONTROL_1_IQCORR_I_Q_COFF_DELPT             0x01fc0000
-#define AR_PHY_TX_IQCAQL_CONTROL_1_IQCORR_I_Q_COFF_DELPT_S                   18
-#define AR_PHY_TX_IQCAL_START_DO_CAL        0x00000001
-#define AR_PHY_TX_IQCAL_START_DO_CAL_S      0
-
-#define AR_PHY_TX_IQCAL_STATUS_FAILED    0x00000001
-#define AR_PHY_TX_IQCAL_CORR_COEFF_01_COEFF_TABLE      0x00003fff
-#define AR_PHY_TX_IQCAL_CORR_COEFF_01_COEFF_TABLE_S    0
-
-#define AR_PHY_65NM_CH0_RXTX4_THERM_ON          0x10000000
-#define AR_PHY_65NM_CH0_RXTX4_THERM_ON_S        28
-
-/*
- * Channel 1 Register Map
- */
-#define AR_CHAN1_BASE  0xa800
-
-#define AR_PHY_EXT_CCA_1            (AR_CHAN1_BASE + 0x30)
-#define AR_PHY_TX_PHASE_RAMP_1      (AR_CHAN1_BASE + 0xd0)
-#define AR_PHY_ADC_GAIN_DC_CORR_1   (AR_CHAN1_BASE + 0xd4)
-
-#define AR_PHY_SPUR_REPORT_1        (AR_CHAN1_BASE + 0xa8)
-#define AR_PHY_CHAN_INFO_TAB_1      (AR_CHAN1_BASE + 0x300)
-#define AR_PHY_RX_IQCAL_CORR_B1     (AR_CHAN1_BASE + 0xdc)
-
-/*
- * Channel 1 Field Definitions
- */
-#define AR_PHY_CH1_EXT_MINCCA_PWR   0x01FF0000
-#define AR_PHY_CH1_EXT_MINCCA_PWR_S 16
-
-/*
- * AGC 1 Register Map
- */
-#define AR_AGC1_BASE   0xae00
-
-#define AR_PHY_FORCEMAX_GAINS_1      (AR_AGC1_BASE + 0x4)
-#define AR_PHY_EXT_ATTEN_CTL_1       (AR_AGC1_BASE + 0x18)
-#define AR_PHY_CCA_1                 (AR_AGC1_BASE + 0x1c)
-#define AR_PHY_CCA_CTRL_1            (AR_AGC1_BASE + 0x20)
-#define AR_PHY_RSSI_1                (AR_AGC1_BASE + 0x180)
-#define AR_PHY_SPUR_CCK_REP_1        (AR_AGC1_BASE + 0x184)
-#define AR_PHY_RX_OCGAIN_2           (AR_AGC1_BASE + 0x200)
-
-/*
- * AGC 1 Field Definitions
- */
-#define AR_PHY_CH1_MINCCA_PWR   0x1FF00000
-#define AR_PHY_CH1_MINCCA_PWR_S 20
-
-/*
- * SM 1 Register Map
- */
-#define AR_SM1_BASE    0xb200
-
-#define AR_PHY_SWITCH_CHAIN_1    (AR_SM1_BASE + 0x84)
-#define AR_PHY_FCAL_2_1          (AR_SM1_BASE + 0xd0)
-#define AR_PHY_DFT_TONE_CTL_1    (AR_SM1_BASE + 0xd4)
-#define AR_PHY_CL_TAB_1          (AR_SM1_BASE + 0x100)
-#define AR_PHY_CHAN_INFO_GAIN_1  (AR_SM1_BASE + 0x180)
-#define AR_PHY_TPC_4_B1          (AR_SM1_BASE + 0x204)
-#define AR_PHY_TPC_5_B1          (AR_SM1_BASE + 0x208)
-#define AR_PHY_TPC_6_B1          (AR_SM1_BASE + 0x20c)
-#define AR_PHY_TPC_11_B1         (AR_SM1_BASE + 0x220)
-#define AR_PHY_PDADC_TAB_1       (AR_SM1_BASE + 0x240)
-#define AR_PHY_TX_IQCAL_STATUS_B1   (AR_SM1_BASE + 0x48c)
-#define AR_PHY_TX_IQCAL_CORR_COEFF_01_B1    (AR_SM1_BASE + 0x450)
-
-/*
- * Channel 2 Register Map
- */
-#define AR_CHAN2_BASE  0xb800
-
-#define AR_PHY_EXT_CCA_2            (AR_CHAN2_BASE + 0x30)
-#define AR_PHY_TX_PHASE_RAMP_2      (AR_CHAN2_BASE + 0xd0)
-#define AR_PHY_ADC_GAIN_DC_CORR_2   (AR_CHAN2_BASE + 0xd4)
-
-#define AR_PHY_SPUR_REPORT_2        (AR_CHAN2_BASE + 0xa8)
-#define AR_PHY_CHAN_INFO_TAB_2      (AR_CHAN2_BASE + 0x300)
-#define AR_PHY_RX_IQCAL_CORR_B2     (AR_CHAN2_BASE + 0xdc)
-
-/*
- * Channel 2 Field Definitions
- */
-#define AR_PHY_CH2_EXT_MINCCA_PWR   0x01FF0000
-#define AR_PHY_CH2_EXT_MINCCA_PWR_S 16
-/*
- * AGC 2 Register Map
- */
-#define AR_AGC2_BASE   0xbe00
-
-#define AR_PHY_FORCEMAX_GAINS_2      (AR_AGC2_BASE + 0x4)
-#define AR_PHY_EXT_ATTEN_CTL_2       (AR_AGC2_BASE + 0x18)
-#define AR_PHY_CCA_2                 (AR_AGC2_BASE + 0x1c)
-#define AR_PHY_CCA_CTRL_2            (AR_AGC2_BASE + 0x20)
-#define AR_PHY_RSSI_2                (AR_AGC2_BASE + 0x180)
-
-/*
- * AGC 2 Field Definitions
- */
-#define AR_PHY_CH2_MINCCA_PWR   0x1FF00000
-#define AR_PHY_CH2_MINCCA_PWR_S 20
-
-/*
- * SM 2 Register Map
- */
-#define AR_SM2_BASE    0xc200
-
-#define AR_PHY_SWITCH_CHAIN_2    (AR_SM2_BASE + 0x84)
-#define AR_PHY_FCAL_2_2          (AR_SM2_BASE + 0xd0)
-#define AR_PHY_DFT_TONE_CTL_2    (AR_SM2_BASE + 0xd4)
-#define AR_PHY_CL_TAB_2          (AR_SM2_BASE + 0x100)
-#define AR_PHY_CHAN_INFO_GAIN_2  (AR_SM2_BASE + 0x180)
-#define AR_PHY_TPC_4_B2          (AR_SM2_BASE + 0x204)
-#define AR_PHY_TPC_5_B2          (AR_SM2_BASE + 0x208)
-#define AR_PHY_TPC_6_B2          (AR_SM2_BASE + 0x20c)
-#define AR_PHY_TPC_11_B2         (AR_SM2_BASE + 0x220)
-#define AR_PHY_PDADC_TAB_2       (AR_SM2_BASE + 0x240)
-#define AR_PHY_TX_IQCAL_STATUS_B2   (AR_SM2_BASE + 0x48c)
-#define AR_PHY_TX_IQCAL_CORR_COEFF_01_B2    (AR_SM2_BASE + 0x450)
-
-#define AR_PHY_TX_IQCAL_STATUS_B2_FAILED    0x00000001
-
-/*
- * AGC 3 Register Map
- */
-#define AR_AGC3_BASE   0xce00
-
-#define AR_PHY_RSSI_3            (AR_AGC3_BASE + 0x180)
-
-/*
- * Misc helper defines
- */
-#define AR_PHY_CHAIN_OFFSET     (AR_CHAN1_BASE - AR_CHAN_BASE)
-
-#define AR_PHY_NEW_ADC_DC_GAIN_CORR(_i) (AR_PHY_ADC_GAIN_DC_CORR_0 + (AR_PHY_CHAIN_OFFSET * (_i)))
-#define AR_PHY_NEW_ADC_DC_GAIN_CORR_9300_10(_i) (AR_PHY_ADC_GAIN_DC_CORR_0_9300_10 + (AR_PHY_CHAIN_OFFSET * (_i)))
-#define AR_PHY_SWITCH_CHAIN(_i)     (AR_PHY_SWITCH_CHAIN_0 + (AR_PHY_CHAIN_OFFSET * (_i)))
-#define AR_PHY_EXT_ATTEN_CTL(_i)    (AR_PHY_EXT_ATTEN_CTL_0 + (AR_PHY_CHAIN_OFFSET * (_i)))
-
-#define AR_PHY_RXGAIN(_i)           (AR_PHY_FORCEMAX_GAINS_0 + (AR_PHY_CHAIN_OFFSET * (_i)))
-#define AR_PHY_TPCRG5(_i)           (AR_PHY_TPC_5_B0 + (AR_PHY_CHAIN_OFFSET * (_i)))
-#define AR_PHY_PDADC_TAB(_i)        (AR_PHY_PDADC_TAB_0 + (AR_PHY_CHAIN_OFFSET * (_i)))
-
-#define AR_PHY_CAL_MEAS_0(_i)       (AR_PHY_IQ_ADC_MEAS_0_B0 + (AR_PHY_CHAIN_OFFSET * (_i)))
-#define AR_PHY_CAL_MEAS_1(_i)       (AR_PHY_IQ_ADC_MEAS_1_B0 + (AR_PHY_CHAIN_OFFSET * (_i)))
-#define AR_PHY_CAL_MEAS_2(_i)       (AR_PHY_IQ_ADC_MEAS_2_B0 + (AR_PHY_CHAIN_OFFSET * (_i)))
-#define AR_PHY_CAL_MEAS_3(_i)       (AR_PHY_IQ_ADC_MEAS_3_B0 + (AR_PHY_CHAIN_OFFSET * (_i)))
-#define AR_PHY_CAL_MEAS_0_9300_10(_i) (AR_PHY_IQ_ADC_MEAS_0_B0_9300_10 + (AR_PHY_CHAIN_OFFSET * (_i)))
-#define AR_PHY_CAL_MEAS_1_9300_10(_i) (AR_PHY_IQ_ADC_MEAS_1_B0_9300_10 + (AR_PHY_CHAIN_OFFSET * (_i)))
-#define AR_PHY_CAL_MEAS_2_9300_10(_i) (AR_PHY_IQ_ADC_MEAS_2_B0_9300_10 + (AR_PHY_CHAIN_OFFSET * (_i)))
-#define AR_PHY_CAL_MEAS_3_9300_10(_i) (AR_PHY_IQ_ADC_MEAS_3_B0_9300_10 + (AR_PHY_CHAIN_OFFSET * (_i)))
-
-#define AR_PHY_WATCHDOG_NON_IDLE_ENABLE    0x00000001
-#define AR_PHY_WATCHDOG_IDLE_ENABLE        0x00000002
-#define AR_PHY_WATCHDOG_IDLE_MASK          0xFFFF0000
-#define AR_PHY_WATCHDOG_NON_IDLE_MASK      0x0000FFFC
-
-#define AR_PHY_WATCHDOG_RST_ENABLE         0x00000002
-#define AR_PHY_WATCHDOG_IRQ_ENABLE         0x00000004
-#define AR_PHY_WATCHDOG_CNTL2_MASK         0xFFFFFFF9
-
-#define AR_PHY_WATCHDOG_INFO               0x00000007
-#define AR_PHY_WATCHDOG_INFO_S             0
-#define AR_PHY_WATCHDOG_DET_HANG           0x00000008
-#define AR_PHY_WATCHDOG_DET_HANG_S         3
-#define AR_PHY_WATCHDOG_RADAR_SM           0x000000F0
-#define AR_PHY_WATCHDOG_RADAR_SM_S         4
-#define AR_PHY_WATCHDOG_RX_OFDM_SM         0x00000F00
-#define AR_PHY_WATCHDOG_RX_OFDM_SM_S       8
-#define AR_PHY_WATCHDOG_RX_CCK_SM          0x0000F000
-#define AR_PHY_WATCHDOG_RX_CCK_SM_S        12
-#define AR_PHY_WATCHDOG_TX_OFDM_SM         0x000F0000
-#define AR_PHY_WATCHDOG_TX_OFDM_SM_S       16
-#define AR_PHY_WATCHDOG_TX_CCK_SM          0x00F00000
-#define AR_PHY_WATCHDOG_TX_CCK_SM_S        20
-#define AR_PHY_WATCHDOG_AGC_SM             0x0F000000
-#define AR_PHY_WATCHDOG_AGC_SM_S           24
-#define AR_PHY_WATCHDOG_SRCH_SM            0xF0000000
-#define AR_PHY_WATCHDOG_SRCH_SM_S          28
-
-#define AR_PHY_WATCHDOG_STATUS_CLR         0x00000008
-
-/*
- * PAPRD registers
- */
-#define AR_PHY_XPA_TIMING_CTL          (AR_SM_BASE + 0x64)
-
-#define AR_PHY_PAPRD_AM2AM             (AR_CHAN_BASE + 0xe4)
-#define AR_PHY_PAPRD_AM2AM_MASK                0x01ffffff
-#define AR_PHY_PAPRD_AM2AM_MASK_S      0
-
-#define AR_PHY_PAPRD_AM2PM             (AR_CHAN_BASE + 0xe8)
-#define AR_PHY_PAPRD_AM2PM_MASK                0x01ffffff
-#define AR_PHY_PAPRD_AM2PM_MASK_S      0
-
-#define AR_PHY_PAPRD_HT40              (AR_CHAN_BASE + 0xec)
-#define AR_PHY_PAPRD_HT40_MASK         0x01ffffff
-#define AR_PHY_PAPRD_HT40_MASK_S       0
-
-#define AR_PHY_PAPRD_CTRL0_B0                          (AR_CHAN_BASE + 0xf0)
-#define AR_PHY_PAPRD_CTRL0_B1                          (AR_CHAN1_BASE + 0xf0)
-#define AR_PHY_PAPRD_CTRL0_B2                          (AR_CHAN2_BASE + 0xf0)
-#define AR_PHY_PAPRD_CTRL0_PAPRD_ENABLE                        0x00000001
-#define AR_PHY_PAPRD_CTRL0_PAPRD_ENABLE_S              0
-#define AR_PHY_PAPRD_CTRL0_USE_SINGLE_TABLE_MASK       0x00000002
-#define AR_PHY_PAPRD_CTRL0_USE_SINGLE_TABLE_MASK_S     1
-#define AR_PHY_PAPRD_CTRL0_PAPRD_MAG_THRSH             0xf8000000
-#define AR_PHY_PAPRD_CTRL0_PAPRD_MAG_THRSH_S           27
-
-#define AR_PHY_PAPRD_CTRL1_B0                          (AR_CHAN_BASE + 0xf4)
-#define AR_PHY_PAPRD_CTRL1_B1                          (AR_CHAN1_BASE + 0xf4)
-#define AR_PHY_PAPRD_CTRL1_B2                          (AR_CHAN2_BASE + 0xf4)
-#define AR_PHY_PAPRD_CTRL1_ADAPTIVE_SCALING_ENA                0x00000001
-#define AR_PHY_PAPRD_CTRL1_ADAPTIVE_SCALING_ENA_S      0
-#define AR_PHY_PAPRD_CTRL1_ADAPTIVE_AM2AM_ENABLE       0x00000002
-#define AR_PHY_PAPRD_CTRL1_ADAPTIVE_AM2AM_ENABLE_S     1
-#define AR_PHY_PAPRD_CTRL1_ADAPTIVE_AM2PM_ENABLE       0x00000004
-#define AR_PHY_PAPRD_CTRL1_ADAPTIVE_AM2PM_ENABLE_S     2
-#define AR_PHY_PAPRD_CTRL1_PAPRD_POWER_AT_AM2AM_CAL    0x000001f8
-#define AR_PHY_PAPRD_CTRL1_PAPRD_POWER_AT_AM2AM_CAL_S  3
-#define AR_PHY_PAPRD_CTRL1_PA_GAIN_SCALE_FACT_MASK     0x0001fe00
-#define AR_PHY_PAPRD_CTRL1_PA_GAIN_SCALE_FACT_MASK_S   9
-#define AR_PHY_PAPRD_CTRL1_PAPRD_MAG_SCALE_FACT                0x0ffe0000
-#define AR_PHY_PAPRD_CTRL1_PAPRD_MAG_SCALE_FACT_S      17
-
-#define AR_PHY_PAPRD_TRAINER_CNTL1                             (AR_SM_BASE + 0x490)
-#define AR_PHY_PAPRD_TRAINER_CNTL1_CF_CF_PAPRD_TRAIN_ENABLE    0x00000001
-#define AR_PHY_PAPRD_TRAINER_CNTL1_CF_CF_PAPRD_TRAIN_ENABLE_S  0
-#define AR_PHY_PAPRD_TRAINER_CNTL1_CF_PAPRD_AGC2_SETTLING      0x0000007e
-#define AR_PHY_PAPRD_TRAINER_CNTL1_CF_PAPRD_AGC2_SETTLING_S    1
-#define AR_PHY_PAPRD_TRAINER_CNTL1_CF_PAPRD_IQCORR_ENABLE      0x00000100
-#define AR_PHY_PAPRD_TRAINER_CNTL1_CF_PAPRD_IQCORR_ENABLE_S    8
-#define AR_PHY_PAPRD_TRAINER_CNTL1_CF_PAPRD_RX_BB_GAIN_FORCE   0x00000200
-#define AR_PHY_PAPRD_TRAINER_CNTL1_CF_PAPRD_RX_BB_GAIN_FORCE_S 9
-#define AR_PHY_PAPRD_TRAINER_CNTL1_CF_PAPRD_TX_GAIN_FORCE      0x00000400
-#define AR_PHY_PAPRD_TRAINER_CNTL1_CF_PAPRD_TX_GAIN_FORCE_S    10
-#define AR_PHY_PAPRD_TRAINER_CNTL1_CF_PAPRD_LB_ENABLE          0x00000800
-#define AR_PHY_PAPRD_TRAINER_CNTL1_CF_PAPRD_LB_ENABLE_S                11
-#define AR_PHY_PAPRD_TRAINER_CNTL1_CF_PAPRD_LB_SKIP            0x0003f000
-#define AR_PHY_PAPRD_TRAINER_CNTL1_CF_PAPRD_LB_SKIP_S          12
-
-#define AR_PHY_PAPRD_TRAINER_CNTL2                             (AR_SM_BASE + 0x494)
-#define AR_PHY_PAPRD_TRAINER_CNTL2_CF_PAPRD_INIT_RX_BB_GAIN    0xFFFFFFFF
-#define AR_PHY_PAPRD_TRAINER_CNTL2_CF_PAPRD_INIT_RX_BB_GAIN_S  0
-
-#define AR_PHY_PAPRD_TRAINER_CNTL3                             (AR_SM_BASE + 0x498)
-#define AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_ADC_DESIRED_SIZE   0x0000003f
-#define AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_ADC_DESIRED_SIZE_S 0
-#define AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_QUICK_DROP         0x00000fc0
-#define AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_QUICK_DROP_S       6
-#define AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_MIN_LOOPBACK_DEL   0x0001f000
-#define AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_MIN_LOOPBACK_DEL_S 12
-#define AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_NUM_CORR_STAGES    0x000e0000
-#define AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_NUM_CORR_STAGES_S  17
-#define AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_COARSE_CORR_LEN    0x00f00000
-#define AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_COARSE_CORR_LEN_S  20
-#define AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_FINE_CORR_LEN      0x0f000000
-#define AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_FINE_CORR_LEN_S    24
-#define AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_BBTXMIX_DISABLE    0x20000000
-#define AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_BBTXMIX_DISABLE_S  29
-
-#define AR_PHY_PAPRD_TRAINER_CNTL4                             (AR_SM_BASE + 0x49c)
-#define AR_PHY_PAPRD_TRAINER_CNTL4_CF_PAPRD_NUM_TRAIN_SAMPLES  0x03ff0000
-#define AR_PHY_PAPRD_TRAINER_CNTL4_CF_PAPRD_NUM_TRAIN_SAMPLES_S        16
-#define AR_PHY_PAPRD_TRAINER_CNTL4_CF_PAPRD_SAFETY_DELTA       0x0000f000
-#define AR_PHY_PAPRD_TRAINER_CNTL4_CF_PAPRD_SAFETY_DELTA_S     12
-#define AR_PHY_PAPRD_TRAINER_CNTL4_CF_PAPRD_MIN_CORR           0x00000fff
-#define AR_PHY_PAPRD_TRAINER_CNTL4_CF_PAPRD_MIN_CORR_S         0
-
-#define AR_PHY_PAPRD_PRE_POST_SCALE_0_B0                       (AR_CHAN_BASE + 0x100)
-#define AR_PHY_PAPRD_PRE_POST_SCALE_1_B0                       (AR_CHAN_BASE + 0x104)
-#define AR_PHY_PAPRD_PRE_POST_SCALE_2_B0                       (AR_CHAN_BASE + 0x108)
-#define AR_PHY_PAPRD_PRE_POST_SCALE_3_B0                       (AR_CHAN_BASE + 0x10c)
-#define AR_PHY_PAPRD_PRE_POST_SCALE_4_B0                       (AR_CHAN_BASE + 0x110)
-#define AR_PHY_PAPRD_PRE_POST_SCALE_5_B0                       (AR_CHAN_BASE + 0x114)
-#define AR_PHY_PAPRD_PRE_POST_SCALE_6_B0                       (AR_CHAN_BASE + 0x118)
-#define AR_PHY_PAPRD_PRE_POST_SCALE_7_B0                       (AR_CHAN_BASE + 0x11c)
-#define AR_PHY_PAPRD_PRE_POST_SCALING                          0x3FFFF
-#define AR_PHY_PAPRD_PRE_POST_SCALING_S                                0
-
-#define AR_PHY_PAPRD_TRAINER_STAT1                             (AR_SM_BASE + 0x4a0)
-#define AR_PHY_PAPRD_TRAINER_STAT1_PAPRD_TRAIN_DONE            0x00000001
-#define AR_PHY_PAPRD_TRAINER_STAT1_PAPRD_TRAIN_DONE_S          0
-#define AR_PHY_PAPRD_TRAINER_STAT1_PAPRD_TRAIN_INCOMPLETE      0x00000002
-#define AR_PHY_PAPRD_TRAINER_STAT1_PAPRD_TRAIN_INCOMPLETE_S    1
-#define AR_PHY_PAPRD_TRAINER_STAT1_PAPRD_CORR_ERR              0x00000004
-#define AR_PHY_PAPRD_TRAINER_STAT1_PAPRD_CORR_ERR_S            2
-#define AR_PHY_PAPRD_TRAINER_STAT1_PAPRD_TRAIN_ACTIVE          0x00000008
-#define AR_PHY_PAPRD_TRAINER_STAT1_PAPRD_TRAIN_ACTIVE_S                3
-#define AR_PHY_PAPRD_TRAINER_STAT1_PAPRD_RX_GAIN_IDX           0x000001f0
-#define AR_PHY_PAPRD_TRAINER_STAT1_PAPRD_RX_GAIN_IDX_S         4
-#define AR_PHY_PAPRD_TRAINER_STAT1_PAPRD_AGC2_PWR              0x0001fe00
-#define AR_PHY_PAPRD_TRAINER_STAT1_PAPRD_AGC2_PWR_S            9
-
-#define AR_PHY_PAPRD_TRAINER_STAT2                             (AR_SM_BASE + 0x4a4)
-#define AR_PHY_PAPRD_TRAINER_STAT2_PAPRD_FINE_VAL              0x0000ffff
-#define AR_PHY_PAPRD_TRAINER_STAT2_PAPRD_FINE_VAL_S            0
-#define AR_PHY_PAPRD_TRAINER_STAT2_PAPRD_COARSE_IDX            0x001f0000
-#define AR_PHY_PAPRD_TRAINER_STAT2_PAPRD_COARSE_IDX_S          16
-#define AR_PHY_PAPRD_TRAINER_STAT2_PAPRD_FINE_IDX              0x00600000
-#define AR_PHY_PAPRD_TRAINER_STAT2_PAPRD_FINE_IDX_S            21
-
-#define AR_PHY_PAPRD_TRAINER_STAT3                             (AR_SM_BASE + 0x4a8)
-#define AR_PHY_PAPRD_TRAINER_STAT3_PAPRD_TRAIN_SAMPLES_CNT     0x000fffff
-#define AR_PHY_PAPRD_TRAINER_STAT3_PAPRD_TRAIN_SAMPLES_CNT_S   0
-
-#define AR_PHY_PAPRD_MEM_TAB_B0                        (AR_CHAN_BASE + 0x120)
-#define AR_PHY_PAPRD_MEM_TAB_B1                        (AR_CHAN1_BASE + 0x120)
-#define AR_PHY_PAPRD_MEM_TAB_B2                        (AR_CHAN2_BASE + 0x120)
-
-#define AR_PHY_PA_GAIN123_B0                   (AR_CHAN_BASE + 0xf8)
-#define AR_PHY_PA_GAIN123_B1                   (AR_CHAN1_BASE + 0xf8)
-#define AR_PHY_PA_GAIN123_B2                   (AR_CHAN2_BASE + 0xf8)
-#define AR_PHY_PA_GAIN123_PA_GAIN1             0x3FF
-#define AR_PHY_PA_GAIN123_PA_GAIN1_S           0
-
-#define AR_PHY_POWERTX_RATE5                   (AR_SM_BASE + 0x1d0)
-#define AR_PHY_POWERTX_RATE5_POWERTXHT20_0     0x3F
-#define AR_PHY_POWERTX_RATE5_POWERTXHT20_0_S   0
-
-void ar9003_hw_set_chain_masks(struct ath_hw *ah, u8 rx, u8 tx);
-
-#endif  /* AR9003_PHY_H */
diff --git a/drivers/net/wireless/ath/ath9k/common.c b/drivers/net/wireless/ath/ath9k/common.c
deleted file mode 100644 (file)
index 108b433..0000000
+++ /dev/null
@@ -1,438 +0,0 @@
-/*
- * Copyright (c) 2009 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Module for common driver code between ath9k and ath9k_htc
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-
-#include "common.h"
-
-MODULE_AUTHOR("Atheros Communications");
-MODULE_DESCRIPTION("Shared library for Atheros wireless 802.11n LAN cards.");
-MODULE_LICENSE("Dual BSD/GPL");
-
-int ath9k_cmn_padpos(__le16 frame_control)
-{
-       int padpos = 24;
-       if (ieee80211_has_a4(frame_control)) {
-               padpos += ETH_ALEN;
-       }
-       if (ieee80211_is_data_qos(frame_control)) {
-               padpos += IEEE80211_QOS_CTL_LEN;
-       }
-
-       return padpos;
-}
-EXPORT_SYMBOL(ath9k_cmn_padpos);
-
-int ath9k_cmn_get_hw_crypto_keytype(struct sk_buff *skb)
-{
-       struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
-
-       if (tx_info->control.hw_key) {
-               if (tx_info->control.hw_key->alg == ALG_WEP)
-                       return ATH9K_KEY_TYPE_WEP;
-               else if (tx_info->control.hw_key->alg == ALG_TKIP)
-                       return ATH9K_KEY_TYPE_TKIP;
-               else if (tx_info->control.hw_key->alg == ALG_CCMP)
-                       return ATH9K_KEY_TYPE_AES;
-       }
-
-       return ATH9K_KEY_TYPE_CLEAR;
-}
-EXPORT_SYMBOL(ath9k_cmn_get_hw_crypto_keytype);
-
-static u32 ath9k_get_extchanmode(struct ieee80211_channel *chan,
-                                enum nl80211_channel_type channel_type)
-{
-       u32 chanmode = 0;
-
-       switch (chan->band) {
-       case IEEE80211_BAND_2GHZ:
-               switch (channel_type) {
-               case NL80211_CHAN_NO_HT:
-               case NL80211_CHAN_HT20:
-                       chanmode = CHANNEL_G_HT20;
-                       break;
-               case NL80211_CHAN_HT40PLUS:
-                       chanmode = CHANNEL_G_HT40PLUS;
-                       break;
-               case NL80211_CHAN_HT40MINUS:
-                       chanmode = CHANNEL_G_HT40MINUS;
-                       break;
-               }
-               break;
-       case IEEE80211_BAND_5GHZ:
-               switch (channel_type) {
-               case NL80211_CHAN_NO_HT:
-               case NL80211_CHAN_HT20:
-                       chanmode = CHANNEL_A_HT20;
-                       break;
-               case NL80211_CHAN_HT40PLUS:
-                       chanmode = CHANNEL_A_HT40PLUS;
-                       break;
-               case NL80211_CHAN_HT40MINUS:
-                       chanmode = CHANNEL_A_HT40MINUS;
-                       break;
-               }
-               break;
-       default:
-               break;
-       }
-
-       return chanmode;
-}
-
-/*
- * Update internal channel flags.
- */
-void ath9k_cmn_update_ichannel(struct ieee80211_hw *hw,
-                              struct ath9k_channel *ichan)
-{
-       struct ieee80211_channel *chan = hw->conf.channel;
-       struct ieee80211_conf *conf = &hw->conf;
-
-       ichan->channel = chan->center_freq;
-       ichan->chan = chan;
-
-       if (chan->band == IEEE80211_BAND_2GHZ) {
-               ichan->chanmode = CHANNEL_G;
-               ichan->channelFlags = CHANNEL_2GHZ | CHANNEL_OFDM | CHANNEL_G;
-       } else {
-               ichan->chanmode = CHANNEL_A;
-               ichan->channelFlags = CHANNEL_5GHZ | CHANNEL_OFDM;
-       }
-
-       if (conf_is_ht(conf))
-               ichan->chanmode = ath9k_get_extchanmode(chan,
-                                                       conf->channel_type);
-}
-EXPORT_SYMBOL(ath9k_cmn_update_ichannel);
-
-/*
- * Get the internal channel reference.
- */
-struct ath9k_channel *ath9k_cmn_get_curchannel(struct ieee80211_hw *hw,
-                                              struct ath_hw *ah)
-{
-       struct ieee80211_channel *curchan = hw->conf.channel;
-       struct ath9k_channel *channel;
-       u8 chan_idx;
-
-       chan_idx = curchan->hw_value;
-       channel = &ah->channels[chan_idx];
-       ath9k_cmn_update_ichannel(hw, channel);
-
-       return channel;
-}
-EXPORT_SYMBOL(ath9k_cmn_get_curchannel);
-
-static int ath_setkey_tkip(struct ath_common *common, u16 keyix, const u8 *key,
-                          struct ath9k_keyval *hk, const u8 *addr,
-                          bool authenticator)
-{
-       struct ath_hw *ah = common->ah;
-       const u8 *key_rxmic;
-       const u8 *key_txmic;
-
-       key_txmic = key + NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY;
-       key_rxmic = key + NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY;
-
-       if (addr == NULL) {
-               /*
-                * Group key installation - only two key cache entries are used
-                * regardless of splitmic capability since group key is only
-                * used either for TX or RX.
-                */
-               if (authenticator) {
-                       memcpy(hk->kv_mic, key_txmic, sizeof(hk->kv_mic));
-                       memcpy(hk->kv_txmic, key_txmic, sizeof(hk->kv_mic));
-               } else {
-                       memcpy(hk->kv_mic, key_rxmic, sizeof(hk->kv_mic));
-                       memcpy(hk->kv_txmic, key_rxmic, sizeof(hk->kv_mic));
-               }
-               return ath9k_hw_set_keycache_entry(ah, keyix, hk, addr);
-       }
-       if (!common->splitmic) {
-               /* TX and RX keys share the same key cache entry. */
-               memcpy(hk->kv_mic, key_rxmic, sizeof(hk->kv_mic));
-               memcpy(hk->kv_txmic, key_txmic, sizeof(hk->kv_txmic));
-               return ath9k_hw_set_keycache_entry(ah, keyix, hk, addr);
-       }
-
-       /* Separate key cache entries for TX and RX */
-
-       /* TX key goes at first index, RX key at +32. */
-       memcpy(hk->kv_mic, key_txmic, sizeof(hk->kv_mic));
-       if (!ath9k_hw_set_keycache_entry(ah, keyix, hk, NULL)) {
-               /* TX MIC entry failed. No need to proceed further */
-               ath_print(common, ATH_DBG_FATAL,
-                         "Setting TX MIC Key Failed\n");
-               return 0;
-       }
-
-       memcpy(hk->kv_mic, key_rxmic, sizeof(hk->kv_mic));
-       /* XXX delete tx key on failure? */
-       return ath9k_hw_set_keycache_entry(ah, keyix + 32, hk, addr);
-}
-
-static int ath_reserve_key_cache_slot_tkip(struct ath_common *common)
-{
-       int i;
-
-       for (i = IEEE80211_WEP_NKID; i < common->keymax / 2; i++) {
-               if (test_bit(i, common->keymap) ||
-                   test_bit(i + 64, common->keymap))
-                       continue; /* At least one part of TKIP key allocated */
-               if (common->splitmic &&
-                   (test_bit(i + 32, common->keymap) ||
-                    test_bit(i + 64 + 32, common->keymap)))
-                       continue; /* At least one part of TKIP key allocated */
-
-               /* Found a free slot for a TKIP key */
-               return i;
-       }
-       return -1;
-}
-
-static int ath_reserve_key_cache_slot(struct ath_common *common,
-                                     enum ieee80211_key_alg alg)
-{
-       int i;
-
-       if (alg == ALG_TKIP)
-               return ath_reserve_key_cache_slot_tkip(common);
-
-       /* First, try to find slots that would not be available for TKIP. */
-       if (common->splitmic) {
-               for (i = IEEE80211_WEP_NKID; i < common->keymax / 4; i++) {
-                       if (!test_bit(i, common->keymap) &&
-                           (test_bit(i + 32, common->keymap) ||
-                            test_bit(i + 64, common->keymap) ||
-                            test_bit(i + 64 + 32, common->keymap)))
-                               return i;
-                       if (!test_bit(i + 32, common->keymap) &&
-                           (test_bit(i, common->keymap) ||
-                            test_bit(i + 64, common->keymap) ||
-                            test_bit(i + 64 + 32, common->keymap)))
-                               return i + 32;
-                       if (!test_bit(i + 64, common->keymap) &&
-                           (test_bit(i , common->keymap) ||
-                            test_bit(i + 32, common->keymap) ||
-                            test_bit(i + 64 + 32, common->keymap)))
-                               return i + 64;
-                       if (!test_bit(i + 64 + 32, common->keymap) &&
-                           (test_bit(i, common->keymap) ||
-                            test_bit(i + 32, common->keymap) ||
-                            test_bit(i + 64, common->keymap)))
-                               return i + 64 + 32;
-               }
-       } else {
-               for (i = IEEE80211_WEP_NKID; i < common->keymax / 2; i++) {
-                       if (!test_bit(i, common->keymap) &&
-                           test_bit(i + 64, common->keymap))
-                               return i;
-                       if (test_bit(i, common->keymap) &&
-                           !test_bit(i + 64, common->keymap))
-                               return i + 64;
-               }
-       }
-
-       /* No partially used TKIP slots, pick any available slot */
-       for (i = IEEE80211_WEP_NKID; i < common->keymax; i++) {
-               /* Do not allow slots that could be needed for TKIP group keys
-                * to be used. This limitation could be removed if we know that
-                * TKIP will not be used. */
-               if (i >= 64 && i < 64 + IEEE80211_WEP_NKID)
-                       continue;
-               if (common->splitmic) {
-                       if (i >= 32 && i < 32 + IEEE80211_WEP_NKID)
-                               continue;
-                       if (i >= 64 + 32 && i < 64 + 32 + IEEE80211_WEP_NKID)
-                               continue;
-               }
-
-               if (!test_bit(i, common->keymap))
-                       return i; /* Found a free slot for a key */
-       }
-
-       /* No free slot found */
-       return -1;
-}
-
-/*
- * Configure encryption in the HW.
- */
-int ath9k_cmn_key_config(struct ath_common *common,
-                        struct ieee80211_vif *vif,
-                        struct ieee80211_sta *sta,
-                        struct ieee80211_key_conf *key)
-{
-       struct ath_hw *ah = common->ah;
-       struct ath9k_keyval hk;
-       const u8 *mac = NULL;
-       u8 gmac[ETH_ALEN];
-       int ret = 0;
-       int idx;
-
-       memset(&hk, 0, sizeof(hk));
-
-       switch (key->alg) {
-       case ALG_WEP:
-               hk.kv_type = ATH9K_CIPHER_WEP;
-               break;
-       case ALG_TKIP:
-               hk.kv_type = ATH9K_CIPHER_TKIP;
-               break;
-       case ALG_CCMP:
-               hk.kv_type = ATH9K_CIPHER_AES_CCM;
-               break;
-       default:
-               return -EOPNOTSUPP;
-       }
-
-       hk.kv_len = key->keylen;
-       memcpy(hk.kv_val, key->key, key->keylen);
-
-       if (!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) {
-               switch (vif->type) {
-               case NL80211_IFTYPE_AP:
-                       memcpy(gmac, vif->addr, ETH_ALEN);
-                       gmac[0] |= 0x01;
-                       mac = gmac;
-                       idx = ath_reserve_key_cache_slot(common, key->alg);
-                       break;
-               case NL80211_IFTYPE_ADHOC:
-                       if (!sta) {
-                               idx = key->keyidx;
-                               break;
-                       }
-                       memcpy(gmac, sta->addr, ETH_ALEN);
-                       gmac[0] |= 0x01;
-                       mac = gmac;
-                       idx = ath_reserve_key_cache_slot(common, key->alg);
-                       break;
-               default:
-                       idx = key->keyidx;
-                       break;
-               }
-       } else if (key->keyidx) {
-               if (WARN_ON(!sta))
-                       return -EOPNOTSUPP;
-               mac = sta->addr;
-
-               if (vif->type != NL80211_IFTYPE_AP) {
-                       /* Only keyidx 0 should be used with unicast key, but
-                        * allow this for client mode for now. */
-                       idx = key->keyidx;
-               } else
-                       return -EIO;
-       } else {
-               if (WARN_ON(!sta))
-                       return -EOPNOTSUPP;
-               mac = sta->addr;
-
-               idx = ath_reserve_key_cache_slot(common, key->alg);
-       }
-
-       if (idx < 0)
-               return -ENOSPC; /* no free key cache entries */
-
-       if (key->alg == ALG_TKIP)
-               ret = ath_setkey_tkip(common, idx, key->key, &hk, mac,
-                                     vif->type == NL80211_IFTYPE_AP);
-       else
-               ret = ath9k_hw_set_keycache_entry(ah, idx, &hk, mac);
-
-       if (!ret)
-               return -EIO;
-
-       set_bit(idx, common->keymap);
-       if (key->alg == ALG_TKIP) {
-               set_bit(idx + 64, common->keymap);
-               set_bit(idx, common->tkip_keymap);
-               set_bit(idx + 64, common->tkip_keymap);
-               if (common->splitmic) {
-                       set_bit(idx + 32, common->keymap);
-                       set_bit(idx + 64 + 32, common->keymap);
-                       set_bit(idx + 32, common->tkip_keymap);
-                       set_bit(idx + 64 + 32, common->tkip_keymap);
-               }
-       }
-
-       return idx;
-}
-EXPORT_SYMBOL(ath9k_cmn_key_config);
-
-/*
- * Delete Key.
- */
-void ath9k_cmn_key_delete(struct ath_common *common,
-                         struct ieee80211_key_conf *key)
-{
-       struct ath_hw *ah = common->ah;
-
-       ath9k_hw_keyreset(ah, key->hw_key_idx);
-       if (key->hw_key_idx < IEEE80211_WEP_NKID)
-               return;
-
-       clear_bit(key->hw_key_idx, common->keymap);
-       if (key->alg != ALG_TKIP)
-               return;
-
-       clear_bit(key->hw_key_idx + 64, common->keymap);
-
-       clear_bit(key->hw_key_idx, common->tkip_keymap);
-       clear_bit(key->hw_key_idx + 64, common->tkip_keymap);
-
-       if (common->splitmic) {
-               ath9k_hw_keyreset(ah, key->hw_key_idx + 32);
-               clear_bit(key->hw_key_idx + 32, common->keymap);
-               clear_bit(key->hw_key_idx + 64 + 32, common->keymap);
-
-               clear_bit(key->hw_key_idx + 32, common->tkip_keymap);
-               clear_bit(key->hw_key_idx + 64 + 32, common->tkip_keymap);
-       }
-}
-EXPORT_SYMBOL(ath9k_cmn_key_delete);
-
-int ath9k_cmn_count_streams(unsigned int chainmask, int max)
-{
-       int streams = 0;
-
-       do {
-               if (++streams == max)
-                       break;
-       } while ((chainmask = chainmask & (chainmask - 1)));
-
-       return streams;
-}
-EXPORT_SYMBOL(ath9k_cmn_count_streams);
-
-static int __init ath9k_cmn_init(void)
-{
-       return 0;
-}
-module_init(ath9k_cmn_init);
-
-static void __exit ath9k_cmn_exit(void)
-{
-       return;
-}
-module_exit(ath9k_cmn_exit);
diff --git a/drivers/net/wireless/ath/ath9k/common.h b/drivers/net/wireless/ath/ath9k/common.h
deleted file mode 100644 (file)
index 97809d3..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2009 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <net/mac80211.h>
-
-#include "../ath.h"
-#include "../debug.h"
-
-#include "hw.h"
-#include "hw-ops.h"
-
-/* Common header for Atheros 802.11n base driver cores */
-
-#define IEEE80211_WEP_NKID 4
-
-#define WME_NUM_TID             16
-#define WME_BA_BMP_SIZE         64
-#define WME_MAX_BA              WME_BA_BMP_SIZE
-#define ATH_TID_MAX_BUFS        (2 * WME_MAX_BA)
-
-#define WME_AC_BE   0
-#define WME_AC_BK   1
-#define WME_AC_VI   2
-#define WME_AC_VO   3
-#define WME_NUM_AC  4
-
-#define ATH_RSSI_DUMMY_MARKER   0x127
-#define ATH_RSSI_LPF_LEN               10
-#define RSSI_LPF_THRESHOLD             -20
-#define ATH_RSSI_EP_MULTIPLIER     (1<<7)
-#define ATH_EP_MUL(x, mul)         ((x) * (mul))
-#define ATH_RSSI_IN(x)             (ATH_EP_MUL((x), ATH_RSSI_EP_MULTIPLIER))
-#define ATH_LPF_RSSI(x, y, len) \
-    ((x != ATH_RSSI_DUMMY_MARKER) ? (((x) * ((len) - 1) + (y)) / (len)) : (y))
-#define ATH_RSSI_LPF(x, y) do {                                        \
-    if ((y) >= RSSI_LPF_THRESHOLD)                                     \
-       x = ATH_LPF_RSSI((x), ATH_RSSI_IN((y)), ATH_RSSI_LPF_LEN);      \
-} while (0)
-#define ATH_EP_RND(x, mul)                                             \
-       ((((x)%(mul)) >= ((mul)/2)) ? ((x) + ((mul) - 1)) / (mul) : (x)/(mul))
-
-int ath9k_cmn_padpos(__le16 frame_control);
-int ath9k_cmn_get_hw_crypto_keytype(struct sk_buff *skb);
-void ath9k_cmn_update_ichannel(struct ieee80211_hw *hw,
-                              struct ath9k_channel *ichan);
-struct ath9k_channel *ath9k_cmn_get_curchannel(struct ieee80211_hw *hw,
-                                              struct ath_hw *ah);
-int ath9k_cmn_key_config(struct ath_common *common,
-                        struct ieee80211_vif *vif,
-                        struct ieee80211_sta *sta,
-                        struct ieee80211_key_conf *key);
-void ath9k_cmn_key_delete(struct ath_common *common,
-                         struct ieee80211_key_conf *key);
-int ath9k_cmn_count_streams(unsigned int chainmask, int max);
diff --git a/drivers/net/wireless/ath/ath9k/gpio.c b/drivers/net/wireless/ath/ath9k/gpio.c
deleted file mode 100644 (file)
index 3a8ee99..0000000
+++ /dev/null
@@ -1,440 +0,0 @@
-/*
- * Copyright (c) 2008-2009 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "ath9k.h"
-
-/********************************/
-/*      LED functions          */
-/********************************/
-
-static void ath_led_blink_work(struct work_struct *work)
-{
-       struct ath_softc *sc = container_of(work, struct ath_softc,
-                                           ath_led_blink_work.work);
-
-       if (!(sc->sc_flags & SC_OP_LED_ASSOCIATED))
-               return;
-
-       if ((sc->led_on_duration == ATH_LED_ON_DURATION_IDLE) ||
-           (sc->led_off_duration == ATH_LED_OFF_DURATION_IDLE))
-               ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, 0);
-       else
-               ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin,
-                                 (sc->sc_flags & SC_OP_LED_ON) ? 1 : 0);
-
-       ieee80211_queue_delayed_work(sc->hw,
-                                    &sc->ath_led_blink_work,
-                                    (sc->sc_flags & SC_OP_LED_ON) ?
-                                       msecs_to_jiffies(sc->led_off_duration) :
-                                       msecs_to_jiffies(sc->led_on_duration));
-
-       sc->led_on_duration = sc->led_on_cnt ?
-                       max((ATH_LED_ON_DURATION_IDLE - sc->led_on_cnt), 25) :
-                       ATH_LED_ON_DURATION_IDLE;
-       sc->led_off_duration = sc->led_off_cnt ?
-                       max((ATH_LED_OFF_DURATION_IDLE - sc->led_off_cnt), 10) :
-                       ATH_LED_OFF_DURATION_IDLE;
-       sc->led_on_cnt = sc->led_off_cnt = 0;
-       if (sc->sc_flags & SC_OP_LED_ON)
-               sc->sc_flags &= ~SC_OP_LED_ON;
-       else
-               sc->sc_flags |= SC_OP_LED_ON;
-}
-
-static void ath_led_brightness(struct led_classdev *led_cdev,
-                              enum led_brightness brightness)
-{
-       struct ath_led *led = container_of(led_cdev, struct ath_led, led_cdev);
-       struct ath_softc *sc = led->sc;
-
-       switch (brightness) {
-       case LED_OFF:
-               if (led->led_type == ATH_LED_ASSOC ||
-                   led->led_type == ATH_LED_RADIO) {
-                       ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin,
-                               (led->led_type == ATH_LED_RADIO));
-                       sc->sc_flags &= ~SC_OP_LED_ASSOCIATED;
-                       if (led->led_type == ATH_LED_RADIO)
-                               sc->sc_flags &= ~SC_OP_LED_ON;
-               } else {
-                       sc->led_off_cnt++;
-               }
-               break;
-       case LED_FULL:
-               if (led->led_type == ATH_LED_ASSOC) {
-                       sc->sc_flags |= SC_OP_LED_ASSOCIATED;
-                       if (led_blink)
-                               ieee80211_queue_delayed_work(sc->hw,
-                                                    &sc->ath_led_blink_work, 0);
-               } else if (led->led_type == ATH_LED_RADIO) {
-                       ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, 0);
-                       sc->sc_flags |= SC_OP_LED_ON;
-               } else {
-                       sc->led_on_cnt++;
-               }
-               break;
-       default:
-               break;
-       }
-}
-
-static int ath_register_led(struct ath_softc *sc, struct ath_led *led,
-                           char *trigger)
-{
-       int ret;
-
-       led->sc = sc;
-       led->led_cdev.name = led->name;
-       led->led_cdev.default_trigger = trigger;
-       led->led_cdev.brightness_set = ath_led_brightness;
-
-       ret = led_classdev_register(wiphy_dev(sc->hw->wiphy), &led->led_cdev);
-       if (ret)
-               ath_print(ath9k_hw_common(sc->sc_ah), ATH_DBG_FATAL,
-                         "Failed to register led:%s", led->name);
-       else
-               led->registered = 1;
-       return ret;
-}
-
-static void ath_unregister_led(struct ath_led *led)
-{
-       if (led->registered) {
-               led_classdev_unregister(&led->led_cdev);
-               led->registered = 0;
-       }
-}
-
-void ath_deinit_leds(struct ath_softc *sc)
-{
-       ath_unregister_led(&sc->assoc_led);
-       sc->sc_flags &= ~SC_OP_LED_ASSOCIATED;
-       ath_unregister_led(&sc->tx_led);
-       ath_unregister_led(&sc->rx_led);
-       ath_unregister_led(&sc->radio_led);
-       ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, 1);
-}
-
-void ath_init_leds(struct ath_softc *sc)
-{
-       char *trigger;
-       int ret;
-
-       if (AR_SREV_9287(sc->sc_ah))
-               sc->sc_ah->led_pin = ATH_LED_PIN_9287;
-       else
-               sc->sc_ah->led_pin = ATH_LED_PIN_DEF;
-
-       /* Configure gpio 1 for output */
-       ath9k_hw_cfg_output(sc->sc_ah, sc->sc_ah->led_pin,
-                           AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
-       /* LED off, active low */
-       ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, 1);
-
-       if (led_blink)
-               INIT_DELAYED_WORK(&sc->ath_led_blink_work, ath_led_blink_work);
-
-       trigger = ieee80211_get_radio_led_name(sc->hw);
-       snprintf(sc->radio_led.name, sizeof(sc->radio_led.name),
-               "ath9k-%s::radio", wiphy_name(sc->hw->wiphy));
-       ret = ath_register_led(sc, &sc->radio_led, trigger);
-       sc->radio_led.led_type = ATH_LED_RADIO;
-       if (ret)
-               goto fail;
-
-       trigger = ieee80211_get_assoc_led_name(sc->hw);
-       snprintf(sc->assoc_led.name, sizeof(sc->assoc_led.name),
-               "ath9k-%s::assoc", wiphy_name(sc->hw->wiphy));
-       ret = ath_register_led(sc, &sc->assoc_led, trigger);
-       sc->assoc_led.led_type = ATH_LED_ASSOC;
-       if (ret)
-               goto fail;
-
-       trigger = ieee80211_get_tx_led_name(sc->hw);
-       snprintf(sc->tx_led.name, sizeof(sc->tx_led.name),
-               "ath9k-%s::tx", wiphy_name(sc->hw->wiphy));
-       ret = ath_register_led(sc, &sc->tx_led, trigger);
-       sc->tx_led.led_type = ATH_LED_TX;
-       if (ret)
-               goto fail;
-
-       trigger = ieee80211_get_rx_led_name(sc->hw);
-       snprintf(sc->rx_led.name, sizeof(sc->rx_led.name),
-               "ath9k-%s::rx", wiphy_name(sc->hw->wiphy));
-       ret = ath_register_led(sc, &sc->rx_led, trigger);
-       sc->rx_led.led_type = ATH_LED_RX;
-       if (ret)
-               goto fail;
-
-       return;
-
-fail:
-       if (led_blink)
-               cancel_delayed_work_sync(&sc->ath_led_blink_work);
-       ath_deinit_leds(sc);
-}
-
-/*******************/
-/*     Rfkill     */
-/*******************/
-
-static bool ath_is_rfkill_set(struct ath_softc *sc)
-{
-       struct ath_hw *ah = sc->sc_ah;
-
-       return ath9k_hw_gpio_get(ah, ah->rfkill_gpio) ==
-                                 ah->rfkill_polarity;
-}
-
-void ath9k_rfkill_poll_state(struct ieee80211_hw *hw)
-{
-       struct ath_wiphy *aphy = hw->priv;
-       struct ath_softc *sc = aphy->sc;
-       bool blocked = !!ath_is_rfkill_set(sc);
-
-       wiphy_rfkill_set_hw_state(hw->wiphy, blocked);
-}
-
-void ath_start_rfkill_poll(struct ath_softc *sc)
-{
-       struct ath_hw *ah = sc->sc_ah;
-
-       if (ah->caps.hw_caps & ATH9K_HW_CAP_RFSILENT)
-               wiphy_rfkill_start_polling(sc->hw->wiphy);
-}
-
-/******************/
-/*     BTCOEX     */
-/******************/
-
-/*
- * Detects if there is any priority bt traffic
- */
-static void ath_detect_bt_priority(struct ath_softc *sc)
-{
-       struct ath_btcoex *btcoex = &sc->btcoex;
-       struct ath_hw *ah = sc->sc_ah;
-
-       if (ath9k_hw_gpio_get(sc->sc_ah, ah->btcoex_hw.btpriority_gpio))
-               btcoex->bt_priority_cnt++;
-
-       if (time_after(jiffies, btcoex->bt_priority_time +
-                       msecs_to_jiffies(ATH_BT_PRIORITY_TIME_THRESHOLD))) {
-               sc->sc_flags &= ~(SC_OP_BT_PRIORITY_DETECTED | SC_OP_BT_SCAN);
-               /* Detect if colocated bt started scanning */
-               if (btcoex->bt_priority_cnt >= ATH_BT_CNT_SCAN_THRESHOLD) {
-                       ath_print(ath9k_hw_common(sc->sc_ah), ATH_DBG_BTCOEX,
-                                 "BT scan detected");
-                       sc->sc_flags |= (SC_OP_BT_SCAN |
-                                        SC_OP_BT_PRIORITY_DETECTED);
-               } else if (btcoex->bt_priority_cnt >= ATH_BT_CNT_THRESHOLD) {
-                       ath_print(ath9k_hw_common(sc->sc_ah), ATH_DBG_BTCOEX,
-                                 "BT priority traffic detected");
-                       sc->sc_flags |= SC_OP_BT_PRIORITY_DETECTED;
-               }
-
-               btcoex->bt_priority_cnt = 0;
-               btcoex->bt_priority_time = jiffies;
-       }
-}
-
-/*
- * Configures appropriate weight based on stomp type.
- */
-static void ath9k_btcoex_bt_stomp(struct ath_softc *sc,
-                                 enum ath_stomp_type stomp_type)
-{
-       struct ath_hw *ah = sc->sc_ah;
-
-       switch (stomp_type) {
-       case ATH_BTCOEX_STOMP_ALL:
-               ath9k_hw_btcoex_set_weight(ah, AR_BT_COEX_WGHT,
-                                          AR_STOMP_ALL_WLAN_WGHT);
-               break;
-       case ATH_BTCOEX_STOMP_LOW:
-               ath9k_hw_btcoex_set_weight(ah, AR_BT_COEX_WGHT,
-                                          AR_STOMP_LOW_WLAN_WGHT);
-               break;
-       case ATH_BTCOEX_STOMP_NONE:
-               ath9k_hw_btcoex_set_weight(ah, AR_BT_COEX_WGHT,
-                                          AR_STOMP_NONE_WLAN_WGHT);
-               break;
-       default:
-               ath_print(ath9k_hw_common(ah), ATH_DBG_BTCOEX,
-                         "Invalid Stomptype\n");
-               break;
-       }
-
-       ath9k_hw_btcoex_enable(ah);
-}
-
-static void ath9k_gen_timer_start(struct ath_hw *ah,
-                                 struct ath_gen_timer *timer,
-                                 u32 timer_next,
-                                 u32 timer_period)
-{
-       ath9k_hw_gen_timer_start(ah, timer, timer_next, timer_period);
-
-       if ((ah->imask & ATH9K_INT_GENTIMER) == 0) {
-               ath9k_hw_set_interrupts(ah, 0);
-               ah->imask |= ATH9K_INT_GENTIMER;
-               ath9k_hw_set_interrupts(ah, ah->imask);
-       }
-}
-
-static void ath9k_gen_timer_stop(struct ath_hw *ah, struct ath_gen_timer *timer)
-{
-       struct ath_gen_timer_table *timer_table = &ah->hw_gen_timers;
-
-       ath9k_hw_gen_timer_stop(ah, timer);
-
-       /* if no timer is enabled, turn off interrupt mask */
-       if (timer_table->timer_mask.val == 0) {
-               ath9k_hw_set_interrupts(ah, 0);
-               ah->imask &= ~ATH9K_INT_GENTIMER;
-               ath9k_hw_set_interrupts(ah, ah->imask);
-       }
-}
-
-/*
- * This is the master bt coex timer which runs for every
- * 45ms, bt traffic will be given priority during 55% of this
- * period while wlan gets remaining 45%
- */
-static void ath_btcoex_period_timer(unsigned long data)
-{
-       struct ath_softc *sc = (struct ath_softc *) data;
-       struct ath_hw *ah = sc->sc_ah;
-       struct ath_btcoex *btcoex = &sc->btcoex;
-       u32 timer_period;
-       bool is_btscan;
-
-       ath_detect_bt_priority(sc);
-
-       is_btscan = sc->sc_flags & SC_OP_BT_SCAN;
-
-       spin_lock_bh(&btcoex->btcoex_lock);
-
-       ath9k_btcoex_bt_stomp(sc, is_btscan ? ATH_BTCOEX_STOMP_ALL :
-                             btcoex->bt_stomp_type);
-
-       spin_unlock_bh(&btcoex->btcoex_lock);
-
-       if (btcoex->btcoex_period != btcoex->btcoex_no_stomp) {
-               if (btcoex->hw_timer_enabled)
-                       ath9k_gen_timer_stop(ah, btcoex->no_stomp_timer);
-
-               timer_period = is_btscan ? btcoex->btscan_no_stomp :
-                                          btcoex->btcoex_no_stomp;
-               ath9k_gen_timer_start(ah,
-                                     btcoex->no_stomp_timer,
-                                     (ath9k_hw_gettsf32(ah) +
-                                      timer_period), timer_period * 10);
-               btcoex->hw_timer_enabled = true;
-       }
-
-       mod_timer(&btcoex->period_timer, jiffies +
-                                 msecs_to_jiffies(ATH_BTCOEX_DEF_BT_PERIOD));
-}
-
-/*
- * Generic tsf based hw timer which configures weight
- * registers to time slice between wlan and bt traffic
- */
-static void ath_btcoex_no_stomp_timer(void *arg)
-{
-       struct ath_softc *sc = (struct ath_softc *)arg;
-       struct ath_hw *ah = sc->sc_ah;
-       struct ath_btcoex *btcoex = &sc->btcoex;
-       bool is_btscan = sc->sc_flags & SC_OP_BT_SCAN;
-
-       ath_print(ath9k_hw_common(ah), ATH_DBG_BTCOEX,
-                 "no stomp timer running\n");
-
-       spin_lock_bh(&btcoex->btcoex_lock);
-
-       if (btcoex->bt_stomp_type == ATH_BTCOEX_STOMP_LOW || is_btscan)
-               ath9k_btcoex_bt_stomp(sc, ATH_BTCOEX_STOMP_NONE);
-        else if (btcoex->bt_stomp_type == ATH_BTCOEX_STOMP_ALL)
-               ath9k_btcoex_bt_stomp(sc, ATH_BTCOEX_STOMP_LOW);
-
-       spin_unlock_bh(&btcoex->btcoex_lock);
-}
-
-int ath_init_btcoex_timer(struct ath_softc *sc)
-{
-       struct ath_btcoex *btcoex = &sc->btcoex;
-
-       btcoex->btcoex_period = ATH_BTCOEX_DEF_BT_PERIOD * 1000;
-       btcoex->btcoex_no_stomp = (100 - ATH_BTCOEX_DEF_DUTY_CYCLE) *
-               btcoex->btcoex_period / 100;
-       btcoex->btscan_no_stomp = (100 - ATH_BTCOEX_BTSCAN_DUTY_CYCLE) *
-                                  btcoex->btcoex_period / 100;
-
-       setup_timer(&btcoex->period_timer, ath_btcoex_period_timer,
-                       (unsigned long) sc);
-
-       spin_lock_init(&btcoex->btcoex_lock);
-
-       btcoex->no_stomp_timer = ath_gen_timer_alloc(sc->sc_ah,
-                       ath_btcoex_no_stomp_timer,
-                       ath_btcoex_no_stomp_timer,
-                       (void *) sc, AR_FIRST_NDP_TIMER);
-
-       if (!btcoex->no_stomp_timer)
-               return -ENOMEM;
-
-       return 0;
-}
-
-/*
- * (Re)start btcoex timers
- */
-void ath9k_btcoex_timer_resume(struct ath_softc *sc)
-{
-       struct ath_btcoex *btcoex = &sc->btcoex;
-       struct ath_hw *ah = sc->sc_ah;
-
-       ath_print(ath9k_hw_common(ah), ATH_DBG_BTCOEX,
-                 "Starting btcoex timers");
-
-       /* make sure duty cycle timer is also stopped when resuming */
-       if (btcoex->hw_timer_enabled)
-               ath9k_gen_timer_stop(sc->sc_ah, btcoex->no_stomp_timer);
-
-       btcoex->bt_priority_cnt = 0;
-       btcoex->bt_priority_time = jiffies;
-       sc->sc_flags &= ~(SC_OP_BT_PRIORITY_DETECTED | SC_OP_BT_SCAN);
-
-       mod_timer(&btcoex->period_timer, jiffies);
-}
-
-
-/*
- * Pause btcoex timer and bt duty cycle timer
- */
-void ath9k_btcoex_timer_pause(struct ath_softc *sc)
-{
-       struct ath_btcoex *btcoex = &sc->btcoex;
-       struct ath_hw *ah = sc->sc_ah;
-
-       del_timer_sync(&btcoex->period_timer);
-
-       if (btcoex->hw_timer_enabled)
-               ath9k_gen_timer_stop(ah, btcoex->no_stomp_timer);
-
-       btcoex->hw_timer_enabled = false;
-}
diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c
deleted file mode 100644 (file)
index aba49bf..0000000
+++ /dev/null
@@ -1,1069 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "htc.h"
-
-/* identify firmware images */
-#define FIRMWARE_AR7010                "ar7010.fw"
-#define FIRMWARE_AR7010_1_1    "ar7010_1_1.fw"
-#define FIRMWARE_AR9271                "ar9271.fw"
-
-MODULE_FIRMWARE(FIRMWARE_AR7010);
-MODULE_FIRMWARE(FIRMWARE_AR7010_1_1);
-MODULE_FIRMWARE(FIRMWARE_AR9271);
-
-static struct usb_device_id ath9k_hif_usb_ids[] = {
-       { USB_DEVICE(0x0cf3, 0x9271) }, /* Atheros */
-       { USB_DEVICE(0x0cf3, 0x1006) }, /* Atheros */
-       { USB_DEVICE(0x0cf3, 0x7010) }, /* Atheros */
-       { USB_DEVICE(0x0cf3, 0x7015) }, /* Atheros */
-       { USB_DEVICE(0x0846, 0x9030) }, /* Netgear N150 */
-       { USB_DEVICE(0x0846, 0x9018) }, /* Netgear WNDA3200 */
-       { USB_DEVICE(0x07D1, 0x3A10) }, /* Dlink Wireless 150 */
-       { USB_DEVICE(0x13D3, 0x3327) }, /* Azurewave */
-       { USB_DEVICE(0x13D3, 0x3328) }, /* Azurewave */
-       { USB_DEVICE(0x13D3, 0x3346) }, /* IMC Networks */
-       { USB_DEVICE(0x13D3, 0x3348) }, /* Azurewave */
-       { USB_DEVICE(0x13D3, 0x3349) }, /* Azurewave */
-       { USB_DEVICE(0x13D3, 0x3350) }, /* Azurewave */
-       { USB_DEVICE(0x04CA, 0x4605) }, /* Liteon */
-       { USB_DEVICE(0x083A, 0xA704) }, /* SMC Networks */
-       { USB_DEVICE(0x040D, 0x3801) }, /* VIA */
-       { USB_DEVICE(0x1668, 0x1200) }, /* Verizon */
-       { },
-};
-
-MODULE_DEVICE_TABLE(usb, ath9k_hif_usb_ids);
-
-static int __hif_usb_tx(struct hif_device_usb *hif_dev);
-
-static void hif_usb_regout_cb(struct urb *urb)
-{
-       struct cmd_buf *cmd = (struct cmd_buf *)urb->context;
-
-       switch (urb->status) {
-       case 0:
-               break;
-       case -ENOENT:
-       case -ECONNRESET:
-       case -ENODEV:
-       case -ESHUTDOWN:
-               goto free;
-       default:
-               break;
-       }
-
-       if (cmd) {
-               ath9k_htc_txcompletion_cb(cmd->hif_dev->htc_handle,
-                                         cmd->skb, 1);
-               kfree(cmd);
-       }
-
-       return;
-free:
-       kfree_skb(cmd->skb);
-       kfree(cmd);
-}
-
-static int hif_usb_send_regout(struct hif_device_usb *hif_dev,
-                              struct sk_buff *skb)
-{
-       struct urb *urb;
-       struct cmd_buf *cmd;
-       int ret = 0;
-
-       urb = usb_alloc_urb(0, GFP_KERNEL);
-       if (urb == NULL)
-               return -ENOMEM;
-
-       cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
-       if (cmd == NULL) {
-               usb_free_urb(urb);
-               return -ENOMEM;
-       }
-
-       cmd->skb = skb;
-       cmd->hif_dev = hif_dev;
-
-       usb_fill_int_urb(urb, hif_dev->udev,
-                        usb_sndintpipe(hif_dev->udev, USB_REG_OUT_PIPE),
-                        skb->data, skb->len,
-                        hif_usb_regout_cb, cmd, 1);
-
-       usb_anchor_urb(urb, &hif_dev->regout_submitted);
-       ret = usb_submit_urb(urb, GFP_KERNEL);
-       if (ret) {
-               usb_unanchor_urb(urb);
-               kfree(cmd);
-       }
-       usb_free_urb(urb);
-
-       return ret;
-}
-
-static inline void ath9k_skb_queue_purge(struct hif_device_usb *hif_dev,
-                                        struct sk_buff_head *list)
-{
-       struct sk_buff *skb;
-
-       while ((skb = __skb_dequeue(list)) != NULL) {
-               dev_kfree_skb_any(skb);
-               TX_STAT_INC(skb_dropped);
-       }
-}
-
-static void hif_usb_tx_cb(struct urb *urb)
-{
-       struct tx_buf *tx_buf = (struct tx_buf *) urb->context;
-       struct hif_device_usb *hif_dev;
-       struct sk_buff *skb;
-
-       if (!tx_buf || !tx_buf->hif_dev)
-               return;
-
-       hif_dev = tx_buf->hif_dev;
-
-       switch (urb->status) {
-       case 0:
-               break;
-       case -ENOENT:
-       case -ECONNRESET:
-       case -ENODEV:
-       case -ESHUTDOWN:
-               /*
-                * The URB has been killed, free the SKBs
-                * and return.
-                */
-               ath9k_skb_queue_purge(hif_dev, &tx_buf->skb_queue);
-               return;
-       default:
-               break;
-       }
-
-       /* Check if TX has been stopped */
-       spin_lock(&hif_dev->tx.tx_lock);
-       if (hif_dev->tx.flags & HIF_USB_TX_STOP) {
-               spin_unlock(&hif_dev->tx.tx_lock);
-               ath9k_skb_queue_purge(hif_dev, &tx_buf->skb_queue);
-               goto add_free;
-       }
-       spin_unlock(&hif_dev->tx.tx_lock);
-
-       /* Complete the queued SKBs. */
-       while ((skb = __skb_dequeue(&tx_buf->skb_queue)) != NULL) {
-               ath9k_htc_txcompletion_cb(hif_dev->htc_handle,
-                                         skb, 1);
-               TX_STAT_INC(skb_completed);
-       }
-
-add_free:
-       /* Re-initialize the SKB queue */
-       tx_buf->len = tx_buf->offset = 0;
-       __skb_queue_head_init(&tx_buf->skb_queue);
-
-       /* Add this TX buffer to the free list */
-       spin_lock(&hif_dev->tx.tx_lock);
-       list_move_tail(&tx_buf->list, &hif_dev->tx.tx_buf);
-       hif_dev->tx.tx_buf_cnt++;
-       if (!(hif_dev->tx.flags & HIF_USB_TX_STOP))
-               __hif_usb_tx(hif_dev); /* Check for pending SKBs */
-       TX_STAT_INC(buf_completed);
-       spin_unlock(&hif_dev->tx.tx_lock);
-}
-
-/* TX lock has to be taken */
-static int __hif_usb_tx(struct hif_device_usb *hif_dev)
-{
-       struct tx_buf *tx_buf = NULL;
-       struct sk_buff *nskb = NULL;
-       int ret = 0, i;
-       u16 *hdr, tx_skb_cnt = 0;
-       u8 *buf;
-
-       if (hif_dev->tx.tx_skb_cnt == 0)
-               return 0;
-
-       /* Check if a free TX buffer is available */
-       if (list_empty(&hif_dev->tx.tx_buf))
-               return 0;
-
-       tx_buf = list_first_entry(&hif_dev->tx.tx_buf, struct tx_buf, list);
-       list_move_tail(&tx_buf->list, &hif_dev->tx.tx_pending);
-       hif_dev->tx.tx_buf_cnt--;
-
-       tx_skb_cnt = min_t(u16, hif_dev->tx.tx_skb_cnt, MAX_TX_AGGR_NUM);
-
-       for (i = 0; i < tx_skb_cnt; i++) {
-               nskb = __skb_dequeue(&hif_dev->tx.tx_skb_queue);
-
-               /* Should never be NULL */
-               BUG_ON(!nskb);
-
-               hif_dev->tx.tx_skb_cnt--;
-
-               buf = tx_buf->buf;
-               buf += tx_buf->offset;
-               hdr = (u16 *)buf;
-               *hdr++ = nskb->len;
-               *hdr++ = ATH_USB_TX_STREAM_MODE_TAG;
-               buf += 4;
-               memcpy(buf, nskb->data, nskb->len);
-               tx_buf->len = nskb->len + 4;
-
-               if (i < (tx_skb_cnt - 1))
-                       tx_buf->offset += (((tx_buf->len - 1) / 4) + 1) * 4;
-
-               if (i == (tx_skb_cnt - 1))
-                       tx_buf->len += tx_buf->offset;
-
-               __skb_queue_tail(&tx_buf->skb_queue, nskb);
-               TX_STAT_INC(skb_queued);
-       }
-
-       usb_fill_bulk_urb(tx_buf->urb, hif_dev->udev,
-                         usb_sndbulkpipe(hif_dev->udev, USB_WLAN_TX_PIPE),
-                         tx_buf->buf, tx_buf->len,
-                         hif_usb_tx_cb, tx_buf);
-
-       ret = usb_submit_urb(tx_buf->urb, GFP_ATOMIC);
-       if (ret) {
-               tx_buf->len = tx_buf->offset = 0;
-               ath9k_skb_queue_purge(hif_dev, &tx_buf->skb_queue);
-               __skb_queue_head_init(&tx_buf->skb_queue);
-               list_move_tail(&tx_buf->list, &hif_dev->tx.tx_buf);
-               hif_dev->tx.tx_buf_cnt++;
-       }
-
-       if (!ret)
-               TX_STAT_INC(buf_queued);
-
-       return ret;
-}
-
-static int hif_usb_send_tx(struct hif_device_usb *hif_dev, struct sk_buff *skb,
-                          struct ath9k_htc_tx_ctl *tx_ctl)
-{
-       unsigned long flags;
-
-       spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
-
-       if (hif_dev->tx.flags & HIF_USB_TX_STOP) {
-               spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
-               return -ENODEV;
-       }
-
-       /* Check if the max queue count has been reached */
-       if (hif_dev->tx.tx_skb_cnt > MAX_TX_BUF_NUM) {
-               spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
-               return -ENOMEM;
-       }
-
-       __skb_queue_tail(&hif_dev->tx.tx_skb_queue, skb);
-       hif_dev->tx.tx_skb_cnt++;
-
-       /* Send normal frames immediately */
-       if (!tx_ctl || (tx_ctl && (tx_ctl->type == ATH9K_HTC_NORMAL)))
-               __hif_usb_tx(hif_dev);
-
-       /* Check if AMPDUs have to be sent immediately */
-       if (tx_ctl && (tx_ctl->type == ATH9K_HTC_AMPDU) &&
-           (hif_dev->tx.tx_buf_cnt == MAX_TX_URB_NUM) &&
-           (hif_dev->tx.tx_skb_cnt < 2)) {
-               __hif_usb_tx(hif_dev);
-       }
-
-       spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
-
-       return 0;
-}
-
-static void hif_usb_start(void *hif_handle, u8 pipe_id)
-{
-       struct hif_device_usb *hif_dev = (struct hif_device_usb *)hif_handle;
-       unsigned long flags;
-
-       hif_dev->flags |= HIF_USB_START;
-
-       spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
-       hif_dev->tx.flags &= ~HIF_USB_TX_STOP;
-       spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
-}
-
-static void hif_usb_stop(void *hif_handle, u8 pipe_id)
-{
-       struct hif_device_usb *hif_dev = (struct hif_device_usb *)hif_handle;
-       unsigned long flags;
-
-       spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
-       ath9k_skb_queue_purge(hif_dev, &hif_dev->tx.tx_skb_queue);
-       hif_dev->tx.tx_skb_cnt = 0;
-       hif_dev->tx.flags |= HIF_USB_TX_STOP;
-       spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
-}
-
-static int hif_usb_send(void *hif_handle, u8 pipe_id, struct sk_buff *skb,
-                       struct ath9k_htc_tx_ctl *tx_ctl)
-{
-       struct hif_device_usb *hif_dev = (struct hif_device_usb *)hif_handle;
-       int ret = 0;
-
-       switch (pipe_id) {
-       case USB_WLAN_TX_PIPE:
-               ret = hif_usb_send_tx(hif_dev, skb, tx_ctl);
-               break;
-       case USB_REG_OUT_PIPE:
-               ret = hif_usb_send_regout(hif_dev, skb);
-               break;
-       default:
-               dev_err(&hif_dev->udev->dev,
-                       "ath9k_htc: Invalid TX pipe: %d\n", pipe_id);
-               ret = -EINVAL;
-               break;
-       }
-
-       return ret;
-}
-
-static struct ath9k_htc_hif hif_usb = {
-       .transport = ATH9K_HIF_USB,
-       .name = "ath9k_hif_usb",
-
-       .control_ul_pipe = USB_REG_OUT_PIPE,
-       .control_dl_pipe = USB_REG_IN_PIPE,
-
-       .start = hif_usb_start,
-       .stop = hif_usb_stop,
-       .send = hif_usb_send,
-};
-
-static void ath9k_hif_usb_rx_stream(struct hif_device_usb *hif_dev,
-                                   struct sk_buff *skb)
-{
-       struct sk_buff *nskb, *skb_pool[MAX_PKT_NUM_IN_TRANSFER];
-       int index = 0, i = 0, chk_idx, len = skb->len;
-       int rx_remain_len = 0, rx_pkt_len = 0;
-       u16 pkt_len, pkt_tag, pool_index = 0;
-       u8 *ptr;
-
-       spin_lock(&hif_dev->rx_lock);
-
-       rx_remain_len = hif_dev->rx_remain_len;
-       rx_pkt_len = hif_dev->rx_transfer_len;
-
-       if (rx_remain_len != 0) {
-               struct sk_buff *remain_skb = hif_dev->remain_skb;
-
-               if (remain_skb) {
-                       ptr = (u8 *) remain_skb->data;
-
-                       index = rx_remain_len;
-                       rx_remain_len -= hif_dev->rx_pad_len;
-                       ptr += rx_pkt_len;
-
-                       memcpy(ptr, skb->data, rx_remain_len);
-
-                       rx_pkt_len += rx_remain_len;
-                       hif_dev->rx_remain_len = 0;
-                       skb_put(remain_skb, rx_pkt_len);
-
-                       skb_pool[pool_index++] = remain_skb;
-
-               } else {
-                       index = rx_remain_len;
-               }
-       }
-
-       spin_unlock(&hif_dev->rx_lock);
-
-       while (index < len) {
-               ptr = (u8 *) skb->data;
-
-               pkt_len = ptr[index] + (ptr[index+1] << 8);
-               pkt_tag = ptr[index+2] + (ptr[index+3] << 8);
-
-               if (pkt_tag == ATH_USB_RX_STREAM_MODE_TAG) {
-                       u16 pad_len;
-
-                       pad_len = 4 - (pkt_len & 0x3);
-                       if (pad_len == 4)
-                               pad_len = 0;
-
-                       chk_idx = index;
-                       index = index + 4 + pkt_len + pad_len;
-
-                       if (index > MAX_RX_BUF_SIZE) {
-                               spin_lock(&hif_dev->rx_lock);
-                               hif_dev->rx_remain_len = index - MAX_RX_BUF_SIZE;
-                               hif_dev->rx_transfer_len =
-                                       MAX_RX_BUF_SIZE - chk_idx - 4;
-                               hif_dev->rx_pad_len = pad_len;
-
-                               nskb = __dev_alloc_skb(pkt_len + 32,
-                                                      GFP_ATOMIC);
-                               if (!nskb) {
-                                       dev_err(&hif_dev->udev->dev,
-                                       "ath9k_htc: RX memory allocation"
-                                       " error\n");
-                                       spin_unlock(&hif_dev->rx_lock);
-                                       goto err;
-                               }
-                               skb_reserve(nskb, 32);
-                               RX_STAT_INC(skb_allocated);
-
-                               memcpy(nskb->data, &(skb->data[chk_idx+4]),
-                                      hif_dev->rx_transfer_len);
-
-                               /* Record the buffer pointer */
-                               hif_dev->remain_skb = nskb;
-                               spin_unlock(&hif_dev->rx_lock);
-                       } else {
-                               nskb = __dev_alloc_skb(pkt_len + 32, GFP_ATOMIC);
-                               if (!nskb) {
-                                       dev_err(&hif_dev->udev->dev,
-                                       "ath9k_htc: RX memory allocation"
-                                       " error\n");
-                                       goto err;
-                               }
-                               skb_reserve(nskb, 32);
-                               RX_STAT_INC(skb_allocated);
-
-                               memcpy(nskb->data, &(skb->data[chk_idx+4]), pkt_len);
-                               skb_put(nskb, pkt_len);
-                               skb_pool[pool_index++] = nskb;
-                       }
-               } else {
-                       RX_STAT_INC(skb_dropped);
-                       return;
-               }
-       }
-
-err:
-       for (i = 0; i < pool_index; i++) {
-               ath9k_htc_rx_msg(hif_dev->htc_handle, skb_pool[i],
-                                skb_pool[i]->len, USB_WLAN_RX_PIPE);
-               RX_STAT_INC(skb_completed);
-       }
-}
-
-static void ath9k_hif_usb_rx_cb(struct urb *urb)
-{
-       struct sk_buff *skb = (struct sk_buff *) urb->context;
-       struct hif_device_usb *hif_dev = (struct hif_device_usb *)
-               usb_get_intfdata(usb_ifnum_to_if(urb->dev, 0));
-       int ret;
-
-       if (!skb)
-               return;
-
-       if (!hif_dev)
-               goto free;
-
-       switch (urb->status) {
-       case 0:
-               break;
-       case -ENOENT:
-       case -ECONNRESET:
-       case -ENODEV:
-       case -ESHUTDOWN:
-               goto free;
-       default:
-               goto resubmit;
-       }
-
-       if (likely(urb->actual_length != 0)) {
-               skb_put(skb, urb->actual_length);
-               ath9k_hif_usb_rx_stream(hif_dev, skb);
-       }
-
-resubmit:
-       skb_reset_tail_pointer(skb);
-       skb_trim(skb, 0);
-
-       usb_anchor_urb(urb, &hif_dev->rx_submitted);
-       ret = usb_submit_urb(urb, GFP_ATOMIC);
-       if (ret) {
-               usb_unanchor_urb(urb);
-               goto free;
-       }
-
-       return;
-free:
-       kfree_skb(skb);
-}
-
-static void ath9k_hif_usb_reg_in_cb(struct urb *urb)
-{
-       struct sk_buff *skb = (struct sk_buff *) urb->context;
-       struct sk_buff *nskb;
-       struct hif_device_usb *hif_dev = (struct hif_device_usb *)
-               usb_get_intfdata(usb_ifnum_to_if(urb->dev, 0));
-       int ret;
-
-       if (!skb)
-               return;
-
-       if (!hif_dev)
-               goto free;
-
-       switch (urb->status) {
-       case 0:
-               break;
-       case -ENOENT:
-       case -ECONNRESET:
-       case -ENODEV:
-       case -ESHUTDOWN:
-               goto free;
-       default:
-               goto resubmit;
-       }
-
-       if (likely(urb->actual_length != 0)) {
-               skb_put(skb, urb->actual_length);
-
-               /* Process the command first */
-               ath9k_htc_rx_msg(hif_dev->htc_handle, skb,
-                                skb->len, USB_REG_IN_PIPE);
-
-
-               nskb = alloc_skb(MAX_REG_IN_BUF_SIZE, GFP_ATOMIC);
-               if (!nskb) {
-                       dev_err(&hif_dev->udev->dev,
-                               "ath9k_htc: REG_IN memory allocation failure\n");
-                       urb->context = NULL;
-                       return;
-               }
-
-               usb_fill_int_urb(urb, hif_dev->udev,
-                                usb_rcvintpipe(hif_dev->udev, USB_REG_IN_PIPE),
-                                nskb->data, MAX_REG_IN_BUF_SIZE,
-                                ath9k_hif_usb_reg_in_cb, nskb, 1);
-
-               ret = usb_submit_urb(urb, GFP_ATOMIC);
-               if (ret) {
-                       kfree_skb(nskb);
-                       urb->context = NULL;
-               }
-
-               return;
-       }
-
-resubmit:
-       skb_reset_tail_pointer(skb);
-       skb_trim(skb, 0);
-
-       ret = usb_submit_urb(urb, GFP_ATOMIC);
-       if (ret)
-               goto free;
-
-       return;
-free:
-       kfree_skb(skb);
-       urb->context = NULL;
-}
-
-static void ath9k_hif_usb_dealloc_tx_urbs(struct hif_device_usb *hif_dev)
-{
-       struct tx_buf *tx_buf = NULL, *tx_buf_tmp = NULL;
-
-       list_for_each_entry_safe(tx_buf, tx_buf_tmp,
-                                &hif_dev->tx.tx_buf, list) {
-               usb_kill_urb(tx_buf->urb);
-               list_del(&tx_buf->list);
-               usb_free_urb(tx_buf->urb);
-               kfree(tx_buf->buf);
-               kfree(tx_buf);
-       }
-
-       list_for_each_entry_safe(tx_buf, tx_buf_tmp,
-                                &hif_dev->tx.tx_pending, list) {
-               usb_kill_urb(tx_buf->urb);
-               list_del(&tx_buf->list);
-               usb_free_urb(tx_buf->urb);
-               kfree(tx_buf->buf);
-               kfree(tx_buf);
-       }
-}
-
-static int ath9k_hif_usb_alloc_tx_urbs(struct hif_device_usb *hif_dev)
-{
-       struct tx_buf *tx_buf;
-       int i;
-
-       INIT_LIST_HEAD(&hif_dev->tx.tx_buf);
-       INIT_LIST_HEAD(&hif_dev->tx.tx_pending);
-       spin_lock_init(&hif_dev->tx.tx_lock);
-       __skb_queue_head_init(&hif_dev->tx.tx_skb_queue);
-
-       for (i = 0; i < MAX_TX_URB_NUM; i++) {
-               tx_buf = kzalloc(sizeof(struct tx_buf), GFP_KERNEL);
-               if (!tx_buf)
-                       goto err;
-
-               tx_buf->buf = kzalloc(MAX_TX_BUF_SIZE, GFP_KERNEL);
-               if (!tx_buf->buf)
-                       goto err;
-
-               tx_buf->urb = usb_alloc_urb(0, GFP_KERNEL);
-               if (!tx_buf->urb)
-                       goto err;
-
-               tx_buf->hif_dev = hif_dev;
-               __skb_queue_head_init(&tx_buf->skb_queue);
-
-               list_add_tail(&tx_buf->list, &hif_dev->tx.tx_buf);
-       }
-
-       hif_dev->tx.tx_buf_cnt = MAX_TX_URB_NUM;
-
-       return 0;
-err:
-       if (tx_buf) {
-               kfree(tx_buf->buf);
-               kfree(tx_buf);
-       }
-       ath9k_hif_usb_dealloc_tx_urbs(hif_dev);
-       return -ENOMEM;
-}
-
-static void ath9k_hif_usb_dealloc_rx_urbs(struct hif_device_usb *hif_dev)
-{
-       usb_kill_anchored_urbs(&hif_dev->rx_submitted);
-}
-
-static int ath9k_hif_usb_alloc_rx_urbs(struct hif_device_usb *hif_dev)
-{
-       struct urb *urb = NULL;
-       struct sk_buff *skb = NULL;
-       int i, ret;
-
-       init_usb_anchor(&hif_dev->rx_submitted);
-       spin_lock_init(&hif_dev->rx_lock);
-
-       for (i = 0; i < MAX_RX_URB_NUM; i++) {
-
-               /* Allocate URB */
-               urb = usb_alloc_urb(0, GFP_KERNEL);
-               if (urb == NULL) {
-                       ret = -ENOMEM;
-                       goto err_urb;
-               }
-
-               /* Allocate buffer */
-               skb = alloc_skb(MAX_RX_BUF_SIZE, GFP_KERNEL);
-               if (!skb) {
-                       ret = -ENOMEM;
-                       goto err_skb;
-               }
-
-               usb_fill_bulk_urb(urb, hif_dev->udev,
-                                 usb_rcvbulkpipe(hif_dev->udev,
-                                                 USB_WLAN_RX_PIPE),
-                                 skb->data, MAX_RX_BUF_SIZE,
-                                 ath9k_hif_usb_rx_cb, skb);
-
-               /* Anchor URB */
-               usb_anchor_urb(urb, &hif_dev->rx_submitted);
-
-               /* Submit URB */
-               ret = usb_submit_urb(urb, GFP_KERNEL);
-               if (ret) {
-                       usb_unanchor_urb(urb);
-                       goto err_submit;
-               }
-
-               /*
-                * Drop reference count.
-                * This ensures that the URB is freed when killing them.
-                */
-               usb_free_urb(urb);
-       }
-
-       return 0;
-
-err_submit:
-       kfree_skb(skb);
-err_skb:
-       usb_free_urb(urb);
-err_urb:
-       ath9k_hif_usb_dealloc_rx_urbs(hif_dev);
-       return ret;
-}
-
-static void ath9k_hif_usb_dealloc_reg_in_urb(struct hif_device_usb *hif_dev)
-{
-       if (hif_dev->reg_in_urb) {
-               usb_kill_urb(hif_dev->reg_in_urb);
-               if (hif_dev->reg_in_urb->context)
-                       kfree_skb((void *)hif_dev->reg_in_urb->context);
-               usb_free_urb(hif_dev->reg_in_urb);
-               hif_dev->reg_in_urb = NULL;
-       }
-}
-
-static int ath9k_hif_usb_alloc_reg_in_urb(struct hif_device_usb *hif_dev)
-{
-       struct sk_buff *skb;
-
-       hif_dev->reg_in_urb = usb_alloc_urb(0, GFP_KERNEL);
-       if (hif_dev->reg_in_urb == NULL)
-               return -ENOMEM;
-
-       skb = alloc_skb(MAX_REG_IN_BUF_SIZE, GFP_KERNEL);
-       if (!skb)
-               goto err;
-
-       usb_fill_int_urb(hif_dev->reg_in_urb, hif_dev->udev,
-                        usb_rcvintpipe(hif_dev->udev, USB_REG_IN_PIPE),
-                        skb->data, MAX_REG_IN_BUF_SIZE,
-                        ath9k_hif_usb_reg_in_cb, skb, 1);
-
-       if (usb_submit_urb(hif_dev->reg_in_urb, GFP_KERNEL) != 0)
-               goto err;
-
-       return 0;
-
-err:
-       ath9k_hif_usb_dealloc_reg_in_urb(hif_dev);
-       return -ENOMEM;
-}
-
-static int ath9k_hif_usb_alloc_urbs(struct hif_device_usb *hif_dev)
-{
-       /* Register Write */
-       init_usb_anchor(&hif_dev->regout_submitted);
-
-       /* TX */
-       if (ath9k_hif_usb_alloc_tx_urbs(hif_dev) < 0)
-               goto err;
-
-       /* RX */
-       if (ath9k_hif_usb_alloc_rx_urbs(hif_dev) < 0)
-               goto err_rx;
-
-       /* Register Read */
-       if (ath9k_hif_usb_alloc_reg_in_urb(hif_dev) < 0)
-               goto err_reg;
-
-       return 0;
-err_reg:
-       ath9k_hif_usb_dealloc_rx_urbs(hif_dev);
-err_rx:
-       ath9k_hif_usb_dealloc_tx_urbs(hif_dev);
-err:
-       return -ENOMEM;
-}
-
-static void ath9k_hif_usb_dealloc_urbs(struct hif_device_usb *hif_dev)
-{
-       usb_kill_anchored_urbs(&hif_dev->regout_submitted);
-       ath9k_hif_usb_dealloc_reg_in_urb(hif_dev);
-       ath9k_hif_usb_dealloc_tx_urbs(hif_dev);
-       ath9k_hif_usb_dealloc_rx_urbs(hif_dev);
-}
-
-static int ath9k_hif_usb_download_fw(struct hif_device_usb *hif_dev)
-{
-       int transfer, err;
-       const void *data = hif_dev->firmware->data;
-       size_t len = hif_dev->firmware->size;
-       u32 addr = AR9271_FIRMWARE;
-       u8 *buf = kzalloc(4096, GFP_KERNEL);
-       u32 firm_offset;
-
-       if (!buf)
-               return -ENOMEM;
-
-       while (len) {
-               transfer = min_t(int, len, 4096);
-               memcpy(buf, data, transfer);
-
-               err = usb_control_msg(hif_dev->udev,
-                                     usb_sndctrlpipe(hif_dev->udev, 0),
-                                     FIRMWARE_DOWNLOAD, 0x40 | USB_DIR_OUT,
-                                     addr >> 8, 0, buf, transfer, HZ);
-               if (err < 0) {
-                       kfree(buf);
-                       return err;
-               }
-
-               len -= transfer;
-               data += transfer;
-               addr += transfer;
-       }
-       kfree(buf);
-
-       switch (hif_dev->device_id) {
-       case 0x7010:
-       case 0x7015:
-       case 0x9018:
-       case 0xA704:
-       case 0x1200:
-               firm_offset = AR7010_FIRMWARE_TEXT;
-               break;
-       default:
-               firm_offset = AR9271_FIRMWARE_TEXT;
-               break;
-       }
-
-       /*
-        * Issue FW download complete command to firmware.
-        */
-       err = usb_control_msg(hif_dev->udev, usb_sndctrlpipe(hif_dev->udev, 0),
-                             FIRMWARE_DOWNLOAD_COMP,
-                             0x40 | USB_DIR_OUT,
-                             firm_offset >> 8, 0, NULL, 0, HZ);
-       if (err)
-               return -EIO;
-
-       dev_info(&hif_dev->udev->dev, "ath9k_htc: Transferred FW: %s, size: %ld\n",
-                hif_dev->fw_name, (unsigned long) hif_dev->firmware->size);
-
-       return 0;
-}
-
-static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev)
-{
-       int ret;
-
-       /* Request firmware */
-       ret = request_firmware(&hif_dev->firmware, hif_dev->fw_name,
-                              &hif_dev->udev->dev);
-       if (ret) {
-               dev_err(&hif_dev->udev->dev,
-                       "ath9k_htc: Firmware - %s not found\n", hif_dev->fw_name);
-               goto err_fw_req;
-       }
-
-       /* Alloc URBs */
-       ret = ath9k_hif_usb_alloc_urbs(hif_dev);
-       if (ret) {
-               dev_err(&hif_dev->udev->dev,
-                       "ath9k_htc: Unable to allocate URBs\n");
-               goto err_urb;
-       }
-
-       /* Download firmware */
-       ret = ath9k_hif_usb_download_fw(hif_dev);
-       if (ret) {
-               dev_err(&hif_dev->udev->dev,
-                       "ath9k_htc: Firmware - %s download failed\n",
-                       hif_dev->fw_name);
-               goto err_fw_download;
-       }
-
-       return 0;
-
-err_fw_download:
-       ath9k_hif_usb_dealloc_urbs(hif_dev);
-err_urb:
-       release_firmware(hif_dev->firmware);
-err_fw_req:
-       hif_dev->firmware = NULL;
-       return ret;
-}
-
-static void ath9k_hif_usb_dev_deinit(struct hif_device_usb *hif_dev)
-{
-       ath9k_hif_usb_dealloc_urbs(hif_dev);
-       if (hif_dev->firmware)
-               release_firmware(hif_dev->firmware);
-}
-
-static int ath9k_hif_usb_probe(struct usb_interface *interface,
-                              const struct usb_device_id *id)
-{
-       struct usb_device *udev = interface_to_usbdev(interface);
-       struct hif_device_usb *hif_dev;
-       int ret = 0;
-
-       hif_dev = kzalloc(sizeof(struct hif_device_usb), GFP_KERNEL);
-       if (!hif_dev) {
-               ret = -ENOMEM;
-               goto err_alloc;
-       }
-
-       usb_get_dev(udev);
-       hif_dev->udev = udev;
-       hif_dev->interface = interface;
-       hif_dev->device_id = id->idProduct;
-#ifdef CONFIG_PM
-       udev->reset_resume = 1;
-#endif
-       usb_set_intfdata(interface, hif_dev);
-
-       hif_dev->htc_handle = ath9k_htc_hw_alloc(hif_dev, &hif_usb,
-                                                &hif_dev->udev->dev);
-       if (hif_dev->htc_handle == NULL) {
-               ret = -ENOMEM;
-               goto err_htc_hw_alloc;
-       }
-
-       /* Find out which firmware to load */
-
-       switch(hif_dev->device_id) {
-       case 0x7010:
-       case 0x7015:
-       case 0x9018:
-       case 0xA704:
-       case 0x1200:
-               if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x0202)
-                       hif_dev->fw_name = FIRMWARE_AR7010_1_1;
-               else
-                       hif_dev->fw_name = FIRMWARE_AR7010;
-               break;
-       default:
-               hif_dev->fw_name = FIRMWARE_AR9271;
-               break;
-       }
-
-       ret = ath9k_hif_usb_dev_init(hif_dev);
-       if (ret) {
-               ret = -EINVAL;
-               goto err_hif_init_usb;
-       }
-
-       ret = ath9k_htc_hw_init(hif_dev->htc_handle,
-                               &hif_dev->udev->dev, hif_dev->device_id);
-       if (ret) {
-               ret = -EINVAL;
-               goto err_htc_hw_init;
-       }
-
-       dev_info(&hif_dev->udev->dev, "ath9k_htc: USB layer initialized\n");
-
-       return 0;
-
-err_htc_hw_init:
-       ath9k_hif_usb_dev_deinit(hif_dev);
-err_hif_init_usb:
-       ath9k_htc_hw_free(hif_dev->htc_handle);
-err_htc_hw_alloc:
-       usb_set_intfdata(interface, NULL);
-       kfree(hif_dev);
-       usb_put_dev(udev);
-err_alloc:
-       return ret;
-}
-
-static void ath9k_hif_usb_reboot(struct usb_device *udev)
-{
-       u32 reboot_cmd = 0xffffffff;
-       void *buf;
-       int ret;
-
-       buf = kmemdup(&reboot_cmd, 4, GFP_KERNEL);
-       if (!buf)
-               return;
-
-       ret = usb_bulk_msg(udev, usb_sndbulkpipe(udev, USB_REG_OUT_PIPE),
-                          buf, 4, NULL, HZ);
-       if (ret)
-               dev_err(&udev->dev, "ath9k_htc: USB reboot failed\n");
-
-       kfree(buf);
-}
-
-static void ath9k_hif_usb_disconnect(struct usb_interface *interface)
-{
-       struct usb_device *udev = interface_to_usbdev(interface);
-       struct hif_device_usb *hif_dev =
-               (struct hif_device_usb *) usb_get_intfdata(interface);
-
-       if (hif_dev) {
-               ath9k_htc_hw_deinit(hif_dev->htc_handle,
-                   (udev->state == USB_STATE_NOTATTACHED) ? true : false);
-               ath9k_htc_hw_free(hif_dev->htc_handle);
-               ath9k_hif_usb_dev_deinit(hif_dev);
-               usb_set_intfdata(interface, NULL);
-       }
-
-       if (hif_dev->flags & HIF_USB_START)
-               ath9k_hif_usb_reboot(udev);
-
-       kfree(hif_dev);
-       dev_info(&udev->dev, "ath9k_htc: USB layer deinitialized\n");
-       usb_put_dev(udev);
-}
-
-#ifdef CONFIG_PM
-static int ath9k_hif_usb_suspend(struct usb_interface *interface,
-                                pm_message_t message)
-{
-       struct hif_device_usb *hif_dev =
-               (struct hif_device_usb *) usb_get_intfdata(interface);
-
-       ath9k_hif_usb_dealloc_urbs(hif_dev);
-
-       return 0;
-}
-
-static int ath9k_hif_usb_resume(struct usb_interface *interface)
-{
-       struct hif_device_usb *hif_dev =
-               (struct hif_device_usb *) usb_get_intfdata(interface);
-       int ret;
-
-       ret = ath9k_hif_usb_alloc_urbs(hif_dev);
-       if (ret)
-               return ret;
-
-       if (hif_dev->firmware) {
-               ret = ath9k_hif_usb_download_fw(hif_dev);
-               if (ret)
-                       goto fail_resume;
-       } else {
-               ath9k_hif_usb_dealloc_urbs(hif_dev);
-               return -EIO;
-       }
-
-       mdelay(100);
-
-       ret = ath9k_htc_resume(hif_dev->htc_handle);
-
-       if (ret)
-               goto fail_resume;
-
-       return 0;
-
-fail_resume:
-       ath9k_hif_usb_dealloc_urbs(hif_dev);
-
-       return ret;
-}
-#endif
-
-static struct usb_driver ath9k_hif_usb_driver = {
-       .name = "ath9k_hif_usb",
-       .probe = ath9k_hif_usb_probe,
-       .disconnect = ath9k_hif_usb_disconnect,
-#ifdef CONFIG_PM
-       .suspend = ath9k_hif_usb_suspend,
-       .resume = ath9k_hif_usb_resume,
-       .reset_resume = ath9k_hif_usb_resume,
-#endif
-       .id_table = ath9k_hif_usb_ids,
-       .soft_unbind = 1,
-};
-
-int ath9k_hif_usb_init(void)
-{
-       return usb_register(&ath9k_hif_usb_driver);
-}
-
-void ath9k_hif_usb_exit(void)
-{
-       usb_deregister(&ath9k_hif_usb_driver);
-}
diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.h b/drivers/net/wireless/ath/ath9k/hif_usb.h
deleted file mode 100644 (file)
index 2daf97b..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef HTC_USB_H
-#define HTC_USB_H
-
-#define AR9271_FIRMWARE       0x501000
-#define AR9271_FIRMWARE_TEXT  0x903000
-#define AR7010_FIRMWARE_TEXT  0x906000
-
-#define FIRMWARE_DOWNLOAD       0x30
-#define FIRMWARE_DOWNLOAD_COMP  0x31
-
-#define ATH_USB_RX_STREAM_MODE_TAG 0x4e00
-#define ATH_USB_TX_STREAM_MODE_TAG 0x697e
-
-/* FIXME: Verify these numbers (with Windows) */
-#define MAX_TX_URB_NUM  8
-#define MAX_TX_BUF_NUM  1024
-#define MAX_TX_BUF_SIZE 32768
-#define MAX_TX_AGGR_NUM 20
-
-#define MAX_RX_URB_NUM  8
-#define MAX_RX_BUF_SIZE 16384
-#define MAX_PKT_NUM_IN_TRANSFER 10
-
-#define MAX_REG_OUT_URB_NUM  1
-#define MAX_REG_OUT_BUF_NUM  8
-
-#define MAX_REG_IN_BUF_SIZE 64
-
-/* USB Endpoint definition */
-#define USB_WLAN_TX_PIPE  1
-#define USB_WLAN_RX_PIPE  2
-#define USB_REG_IN_PIPE   3
-#define USB_REG_OUT_PIPE  4
-
-#define HIF_USB_MAX_RXPIPES 2
-#define HIF_USB_MAX_TXPIPES 4
-
-struct tx_buf {
-       u8 *buf;
-       u16 len;
-       u16 offset;
-       struct urb *urb;
-       struct sk_buff_head skb_queue;
-       struct hif_device_usb *hif_dev;
-       struct list_head list;
-};
-
-#define HIF_USB_TX_STOP  BIT(0)
-
-struct hif_usb_tx {
-       u8 flags;
-       u8 tx_buf_cnt;
-       u16 tx_skb_cnt;
-       struct sk_buff_head tx_skb_queue;
-       struct list_head tx_buf;
-       struct list_head tx_pending;
-       spinlock_t tx_lock;
-};
-
-struct cmd_buf {
-       struct sk_buff *skb;
-       struct hif_device_usb *hif_dev;
-};
-
-#define HIF_USB_START BIT(0)
-
-struct hif_device_usb {
-       u16 device_id;
-       struct usb_device *udev;
-       struct usb_interface *interface;
-       const struct firmware *firmware;
-       struct htc_target *htc_handle;
-       struct hif_usb_tx tx;
-       struct urb *reg_in_urb;
-       struct usb_anchor regout_submitted;
-       struct usb_anchor rx_submitted;
-       struct sk_buff *remain_skb;
-       const char *fw_name;
-       int rx_remain_len;
-       int rx_pkt_len;
-       int rx_transfer_len;
-       int rx_pad_len;
-       spinlock_t rx_lock;
-       u8 flags; /* HIF_USB_* */
-};
-
-int ath9k_hif_usb_init(void);
-void ath9k_hif_usb_exit(void);
-
-#endif /* HTC_USB_H */
diff --git a/drivers/net/wireless/ath/ath9k/htc.h b/drivers/net/wireless/ath/ath9k/htc.h
deleted file mode 100644 (file)
index 43b9e21..0000000
+++ /dev/null
@@ -1,463 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef HTC_H
-#define HTC_H
-
-#include <linux/module.h>
-#include <linux/usb.h>
-#include <linux/firmware.h>
-#include <linux/skbuff.h>
-#include <linux/netdevice.h>
-#include <linux/leds.h>
-#include <linux/slab.h>
-#include <net/mac80211.h>
-
-#include "common.h"
-#include "htc_hst.h"
-#include "hif_usb.h"
-#include "wmi.h"
-
-#define ATH_STA_SHORT_CALINTERVAL 1000    /* 1 second */
-#define ATH_ANI_POLLINTERVAL      100     /* 100 ms */
-#define ATH_LONG_CALINTERVAL      30000   /* 30 seconds */
-#define ATH_RESTART_CALINTERVAL   1200000 /* 20 minutes */
-
-#define ATH_DEFAULT_BMISS_LIMIT 10
-#define IEEE80211_MS_TO_TU(x)   (((x) * 1000) / 1024)
-#define TSF_TO_TU(_h, _l) \
-       ((((u32)(_h)) << 22) | (((u32)(_l)) >> 10))
-
-extern struct ieee80211_ops ath9k_htc_ops;
-extern int htc_modparam_nohwcrypt;
-
-enum htc_phymode {
-       HTC_MODE_AUTO           = 0,
-       HTC_MODE_11A            = 1,
-       HTC_MODE_11B            = 2,
-       HTC_MODE_11G            = 3,
-       HTC_MODE_FH             = 4,
-       HTC_MODE_TURBO_A        = 5,
-       HTC_MODE_TURBO_G        = 6,
-       HTC_MODE_11NA           = 7,
-       HTC_MODE_11NG           = 8
-};
-
-enum htc_opmode {
-       HTC_M_STA       = 1,
-       HTC_M_IBSS      = 0,
-       HTC_M_AHDEMO    = 3,
-       HTC_M_HOSTAP    = 6,
-       HTC_M_MONITOR   = 8,
-       HTC_M_WDS       = 2
-};
-
-#define ATH9K_HTC_HDRSPACE sizeof(struct htc_frame_hdr)
-#define ATH9K_HTC_AMPDU        1
-#define ATH9K_HTC_NORMAL 2
-
-#define ATH9K_HTC_TX_CTSONLY      0x1
-#define ATH9K_HTC_TX_RTSCTS       0x2
-#define ATH9K_HTC_TX_USE_MIN_RATE 0x100
-
-struct tx_frame_hdr {
-       u8 data_type;
-       u8 node_idx;
-       u8 vif_idx;
-       u8 tidno;
-       u32 flags; /* ATH9K_HTC_TX_* */
-       u8 key_type;
-       u8 keyix;
-       u8 reserved[26];
-} __packed;
-
-struct tx_mgmt_hdr {
-       u8 node_idx;
-       u8 vif_idx;
-       u8 tidno;
-       u8 flags;
-       u8 key_type;
-       u8 keyix;
-       u16 reserved;
-} __packed;
-
-struct tx_beacon_header {
-       u8 len_changed;
-       u8 vif_index;
-       u16 rev;
-} __packed;
-
-struct ath9k_htc_target_hw {
-       u32 flags;
-       u32 flags_ext;
-       u32 ampdu_limit;
-       u8 ampdu_subframes;
-       u8 tx_chainmask;
-       u8 tx_chainmask_legacy;
-       u8 rtscts_ratecode;
-       u8 protmode;
-} __packed;
-
-struct ath9k_htc_cap_target {
-       u32 flags;
-       u32 flags_ext;
-       u32 ampdu_limit;
-       u8 ampdu_subframes;
-       u8 tx_chainmask;
-       u8 tx_chainmask_legacy;
-       u8 rtscts_ratecode;
-       u8 protmode;
-} __packed;
-
-struct ath9k_htc_target_vif {
-       u8 index;
-       u8 des_bssid[ETH_ALEN];
-       __be32 opmode;
-       u8 myaddr[ETH_ALEN];
-       u8 bssid[ETH_ALEN];
-       u32 flags;
-       u32 flags_ext;
-       u16 ps_sta;
-       __be16 rtsthreshold;
-       u8 ath_cap;
-       u8 node;
-       s8 mcast_rate;
-} __packed;
-
-#define ATH_HTC_STA_AUTH  0x0001
-#define ATH_HTC_STA_QOS   0x0002
-#define ATH_HTC_STA_ERP   0x0004
-#define ATH_HTC_STA_HT    0x0008
-
-/* FIXME: UAPSD variables */
-struct ath9k_htc_target_sta {
-       u16 associd;
-       u16 txpower;
-       u32 ucastkey;
-       u8 macaddr[ETH_ALEN];
-       u8 bssid[ETH_ALEN];
-       u8 sta_index;
-       u8 vif_index;
-       u8 vif_sta;
-       __be16 flags; /* ATH_HTC_STA_* */
-       u16 htcap;
-       u8 valid;
-       u16 capinfo;
-       struct ath9k_htc_target_hw *hw;
-       struct ath9k_htc_target_vif *vif;
-       u16 txseqmgmt;
-       u8 is_vif_sta;
-       u16 maxampdu;
-       u16 iv16;
-       u32 iv32;
-} __packed;
-
-struct ath9k_htc_target_aggr {
-       u8 sta_index;
-       u8 tidno;
-       u8 aggr_enable;
-       u8 padding;
-} __packed;
-
-#define ATH_HTC_RATE_MAX 30
-
-#define WLAN_RC_DS_FLAG  0x01
-#define WLAN_RC_40_FLAG  0x02
-#define WLAN_RC_SGI_FLAG 0x04
-#define WLAN_RC_HT_FLAG  0x08
-
-struct ath9k_htc_rateset {
-       u8 rs_nrates;
-       u8 rs_rates[ATH_HTC_RATE_MAX];
-};
-
-struct ath9k_htc_rate {
-       struct ath9k_htc_rateset legacy_rates;
-       struct ath9k_htc_rateset ht_rates;
-} __packed;
-
-struct ath9k_htc_target_rate {
-       u8 sta_index;
-       u8 isnew;
-       __be32 capflags;
-       struct ath9k_htc_rate rates;
-};
-
-struct ath9k_htc_target_stats {
-       __be32 tx_shortretry;
-       __be32 tx_longretry;
-       __be32 tx_xretries;
-       __be32 ht_txunaggr_xretry;
-       __be32 ht_tx_xretries;
-} __packed;
-
-struct ath9k_htc_vif {
-       u8 index;
-};
-
-#define ATH9K_HTC_MAX_STA 8
-#define ATH9K_HTC_MAX_TID 8
-
-enum tid_aggr_state {
-       AGGR_STOP = 0,
-       AGGR_PROGRESS,
-       AGGR_START,
-       AGGR_OPERATIONAL
-};
-
-struct ath9k_htc_sta {
-       u8 index;
-       enum tid_aggr_state tid_state[ATH9K_HTC_MAX_TID];
-};
-
-#define ATH9K_HTC_RXBUF 256
-#define HTC_RX_FRAME_HEADER_SIZE 40
-
-struct ath9k_htc_rxbuf {
-       bool in_process;
-       struct sk_buff *skb;
-       struct ath_htc_rx_status rxstatus;
-       struct list_head list;
-};
-
-struct ath9k_htc_rx {
-       int last_rssi; /* FIXME: per-STA */
-       struct list_head rxbuf;
-       spinlock_t rxbuflock;
-};
-
-struct ath9k_htc_tx_ctl {
-       u8 type; /* ATH9K_HTC_* */
-};
-
-#ifdef CONFIG_ATH9K_HTC_DEBUGFS
-
-#define TX_STAT_INC(c) (hif_dev->htc_handle->drv_priv->debug.tx_stats.c++)
-#define RX_STAT_INC(c) (hif_dev->htc_handle->drv_priv->debug.rx_stats.c++)
-
-#define TX_QSTAT_INC(q) (priv->debug.tx_stats.queue_stats[q]++)
-
-struct ath_tx_stats {
-       u32 buf_queued;
-       u32 buf_completed;
-       u32 skb_queued;
-       u32 skb_completed;
-       u32 skb_dropped;
-       u32 queue_stats[WME_NUM_AC];
-};
-
-struct ath_rx_stats {
-       u32 skb_allocated;
-       u32 skb_completed;
-       u32 skb_dropped;
-};
-
-struct ath9k_debug {
-       struct dentry *debugfs_phy;
-       struct dentry *debugfs_tgt_stats;
-       struct dentry *debugfs_xmit;
-       struct dentry *debugfs_recv;
-       struct ath_tx_stats tx_stats;
-       struct ath_rx_stats rx_stats;
-       u32 txrate;
-};
-
-#else
-
-#define TX_STAT_INC(c) do { } while (0)
-#define RX_STAT_INC(c) do { } while (0)
-
-#define TX_QSTAT_INC(c) do { } while (0)
-
-#endif /* CONFIG_ATH9K_HTC_DEBUGFS */
-
-#define ATH_LED_PIN_DEF             1
-#define ATH_LED_PIN_9287            8
-#define ATH_LED_PIN_9271            15
-#define ATH_LED_PIN_7010            12
-#define ATH_LED_ON_DURATION_IDLE    350        /* in msecs */
-#define ATH_LED_OFF_DURATION_IDLE   250        /* in msecs */
-
-enum ath_led_type {
-       ATH_LED_RADIO,
-       ATH_LED_ASSOC,
-       ATH_LED_TX,
-       ATH_LED_RX
-};
-
-struct ath_led {
-       struct ath9k_htc_priv *priv;
-       struct led_classdev led_cdev;
-       enum ath_led_type led_type;
-       struct delayed_work brightness_work;
-       char name[32];
-       bool registered;
-       int brightness;
-};
-
-struct htc_beacon_config {
-       u16 beacon_interval;
-       u16 listen_interval;
-       u16 dtim_period;
-       u16 bmiss_timeout;
-       u8 dtim_count;
-};
-
-#define OP_INVALID        BIT(0)
-#define OP_SCANNING       BIT(1)
-#define OP_FULL_RESET     BIT(2)
-#define OP_LED_ASSOCIATED BIT(3)
-#define OP_LED_ON         BIT(4)
-#define OP_PREAMBLE_SHORT BIT(5)
-#define OP_PROTECT_ENABLE BIT(6)
-#define OP_ASSOCIATED     BIT(7)
-#define OP_ENABLE_BEACON  BIT(8)
-#define OP_LED_DEINIT     BIT(9)
-#define OP_UNPLUGGED      BIT(10)
-
-struct ath9k_htc_priv {
-       struct device *dev;
-       struct ieee80211_hw *hw;
-       struct ath_hw *ah;
-       struct htc_target *htc;
-       struct wmi *wmi;
-
-       enum htc_endpoint_id wmi_cmd_ep;
-       enum htc_endpoint_id beacon_ep;
-       enum htc_endpoint_id cab_ep;
-       enum htc_endpoint_id uapsd_ep;
-       enum htc_endpoint_id mgmt_ep;
-       enum htc_endpoint_id data_be_ep;
-       enum htc_endpoint_id data_bk_ep;
-       enum htc_endpoint_id data_vi_ep;
-       enum htc_endpoint_id data_vo_ep;
-
-       u16 op_flags;
-       u16 curtxpow;
-       u16 txpowlimit;
-       u16 nvifs;
-       u16 nstations;
-       u16 seq_no;
-       u32 bmiss_cnt;
-
-       struct ath9k_hw_cal_data caldata[38];
-
-       spinlock_t beacon_lock;
-
-       bool tx_queues_stop;
-       spinlock_t tx_lock;
-
-       struct ieee80211_vif *vif;
-       struct htc_beacon_config cur_beacon_conf;
-       unsigned int rxfilter;
-       struct tasklet_struct wmi_tasklet;
-       struct tasklet_struct rx_tasklet;
-       struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
-       struct ath9k_htc_rx rx;
-       struct tasklet_struct tx_tasklet;
-       struct sk_buff_head tx_queue;
-       struct delayed_work ath9k_ani_work;
-       struct work_struct ps_work;
-
-       struct mutex htc_pm_lock;
-       unsigned long ps_usecount;
-       bool ps_enabled;
-       bool ps_idle;
-
-       struct ath_led radio_led;
-       struct ath_led assoc_led;
-       struct ath_led tx_led;
-       struct ath_led rx_led;
-       struct delayed_work ath9k_led_blink_work;
-       int led_on_duration;
-       int led_off_duration;
-       int led_on_cnt;
-       int led_off_cnt;
-
-       int beaconq;
-       int cabq;
-       int hwq_map[WME_NUM_AC];
-
-#ifdef CONFIG_ATH9K_HTC_DEBUGFS
-       struct ath9k_debug debug;
-#endif
-       struct mutex mutex;
-};
-
-static inline void ath_read_cachesize(struct ath_common *common, int *csz)
-{
-       common->bus_ops->read_cachesize(common, csz);
-}
-
-void ath9k_htc_beaconq_config(struct ath9k_htc_priv *priv);
-void ath9k_htc_beacon_config(struct ath9k_htc_priv *priv,
-                            struct ieee80211_vif *vif);
-void ath9k_htc_swba(struct ath9k_htc_priv *priv, u8 beacon_pending);
-
-void ath9k_htc_rxep(void *priv, struct sk_buff *skb,
-                   enum htc_endpoint_id ep_id);
-void ath9k_htc_txep(void *priv, struct sk_buff *skb, enum htc_endpoint_id ep_id,
-                   bool txok);
-void ath9k_htc_beaconep(void *drv_priv, struct sk_buff *skb,
-                       enum htc_endpoint_id ep_id, bool txok);
-
-void ath9k_htc_station_work(struct work_struct *work);
-void ath9k_htc_aggr_work(struct work_struct *work);
-void ath9k_ani_work(struct work_struct *work);;
-
-int ath9k_tx_init(struct ath9k_htc_priv *priv);
-void ath9k_tx_tasklet(unsigned long data);
-int ath9k_htc_tx_start(struct ath9k_htc_priv *priv, struct sk_buff *skb);
-void ath9k_tx_cleanup(struct ath9k_htc_priv *priv);
-bool ath9k_htc_txq_setup(struct ath9k_htc_priv *priv, int subtype);
-int ath9k_htc_cabq_setup(struct ath9k_htc_priv *priv);
-int get_hw_qnum(u16 queue, int *hwq_map);
-int ath_htc_txq_update(struct ath9k_htc_priv *priv, int qnum,
-                      struct ath9k_tx_queue_info *qinfo);
-
-int ath9k_rx_init(struct ath9k_htc_priv *priv);
-void ath9k_rx_cleanup(struct ath9k_htc_priv *priv);
-void ath9k_host_rx_init(struct ath9k_htc_priv *priv);
-void ath9k_rx_tasklet(unsigned long data);
-u32 ath9k_htc_calcrxfilter(struct ath9k_htc_priv *priv);
-
-void ath9k_htc_ps_wakeup(struct ath9k_htc_priv *priv);
-void ath9k_htc_ps_restore(struct ath9k_htc_priv *priv);
-void ath9k_ps_work(struct work_struct *work);
-
-void ath9k_start_rfkill_poll(struct ath9k_htc_priv *priv);
-void ath9k_init_leds(struct ath9k_htc_priv *priv);
-void ath9k_deinit_leds(struct ath9k_htc_priv *priv);
-
-int ath9k_htc_probe_device(struct htc_target *htc_handle, struct device *dev,
-                          u16 devid);
-void ath9k_htc_disconnect_device(struct htc_target *htc_handle, bool hotunplug);
-#ifdef CONFIG_PM
-int ath9k_htc_resume(struct htc_target *htc_handle);
-#endif
-#ifdef CONFIG_ATH9K_HTC_DEBUGFS
-int ath9k_htc_debug_create_root(void);
-void ath9k_htc_debug_remove_root(void);
-int ath9k_htc_init_debug(struct ath_hw *ah);
-void ath9k_htc_exit_debug(struct ath_hw *ah);
-#else
-static inline int ath9k_htc_debug_create_root(void) { return 0; };
-static inline void ath9k_htc_debug_remove_root(void) {};
-static inline int ath9k_htc_init_debug(struct ath_hw *ah) { return 0; };
-static inline void ath9k_htc_exit_debug(struct ath_hw *ah) {};
-#endif /* CONFIG_ATH9K_HTC_DEBUGFS */
-
-#endif /* HTC_H */
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_beacon.c b/drivers/net/wireless/ath/ath9k/htc_drv_beacon.c
deleted file mode 100644 (file)
index bd1506e..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "htc.h"
-
-#define FUDGE 2
-
-static void ath9k_htc_beacon_config_sta(struct ath9k_htc_priv *priv,
-                                       struct htc_beacon_config *bss_conf)
-{
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       struct ath9k_beacon_state bs;
-       enum ath9k_int imask = 0;
-       int dtimperiod, dtimcount, sleepduration;
-       int cfpperiod, cfpcount, bmiss_timeout;
-       u32 nexttbtt = 0, intval, tsftu;
-       __be32 htc_imask = 0;
-       u64 tsf;
-       int num_beacons, offset, dtim_dec_count, cfp_dec_count;
-       int ret;
-       u8 cmd_rsp;
-
-       memset(&bs, 0, sizeof(bs));
-
-       intval = bss_conf->beacon_interval & ATH9K_BEACON_PERIOD;
-       bmiss_timeout = (ATH_DEFAULT_BMISS_LIMIT * bss_conf->beacon_interval);
-
-       /*
-        * Setup dtim and cfp parameters according to
-        * last beacon we received (which may be none).
-        */
-       dtimperiod = bss_conf->dtim_period;
-       if (dtimperiod <= 0)            /* NB: 0 if not known */
-               dtimperiod = 1;
-       dtimcount = 1;
-       if (dtimcount >= dtimperiod)    /* NB: sanity check */
-               dtimcount = 0;
-       cfpperiod = 1;                  /* NB: no PCF support yet */
-       cfpcount = 0;
-
-       sleepduration = intval;
-       if (sleepduration <= 0)
-               sleepduration = intval;
-
-       /*
-        * Pull nexttbtt forward to reflect the current
-        * TSF and calculate dtim+cfp state for the result.
-        */
-       tsf = ath9k_hw_gettsf64(priv->ah);
-       tsftu = TSF_TO_TU(tsf>>32, tsf) + FUDGE;
-
-       num_beacons = tsftu / intval + 1;
-       offset = tsftu % intval;
-       nexttbtt = tsftu - offset;
-       if (offset)
-               nexttbtt += intval;
-
-       /* DTIM Beacon every dtimperiod Beacon */
-       dtim_dec_count = num_beacons % dtimperiod;
-       /* CFP every cfpperiod DTIM Beacon */
-       cfp_dec_count = (num_beacons / dtimperiod) % cfpperiod;
-       if (dtim_dec_count)
-               cfp_dec_count++;
-
-       dtimcount -= dtim_dec_count;
-       if (dtimcount < 0)
-               dtimcount += dtimperiod;
-
-       cfpcount -= cfp_dec_count;
-       if (cfpcount < 0)
-               cfpcount += cfpperiod;
-
-       bs.bs_intval = intval;
-       bs.bs_nexttbtt = nexttbtt;
-       bs.bs_dtimperiod = dtimperiod*intval;
-       bs.bs_nextdtim = bs.bs_nexttbtt + dtimcount*intval;
-       bs.bs_cfpperiod = cfpperiod*bs.bs_dtimperiod;
-       bs.bs_cfpnext = bs.bs_nextdtim + cfpcount*bs.bs_dtimperiod;
-       bs.bs_cfpmaxduration = 0;
-
-       /*
-        * Calculate the number of consecutive beacons to miss* before taking
-        * a BMISS interrupt. The configuration is specified in TU so we only
-        * need calculate based on the beacon interval.  Note that we clamp the
-        * result to at most 15 beacons.
-        */
-       if (sleepduration > intval) {
-               bs.bs_bmissthreshold = ATH_DEFAULT_BMISS_LIMIT / 2;
-       } else {
-               bs.bs_bmissthreshold = DIV_ROUND_UP(bmiss_timeout, intval);
-               if (bs.bs_bmissthreshold > 15)
-                       bs.bs_bmissthreshold = 15;
-               else if (bs.bs_bmissthreshold <= 0)
-                       bs.bs_bmissthreshold = 1;
-       }
-
-       /*
-        * Calculate sleep duration. The configuration is given in ms.
-        * We ensure a multiple of the beacon period is used. Also, if the sleep
-        * duration is greater than the DTIM period then it makes senses
-        * to make it a multiple of that.
-        *
-        * XXX fixed at 100ms
-        */
-
-       bs.bs_sleepduration = roundup(IEEE80211_MS_TO_TU(100), sleepduration);
-       if (bs.bs_sleepduration > bs.bs_dtimperiod)
-               bs.bs_sleepduration = bs.bs_dtimperiod;
-
-       /* TSF out of range threshold fixed at 1 second */
-       bs.bs_tsfoor_threshold = ATH9K_TSFOOR_THRESHOLD;
-
-       ath_print(common, ATH_DBG_BEACON, "tsf: %llu tsftu: %u\n", tsf, tsftu);
-       ath_print(common, ATH_DBG_BEACON,
-                 "bmiss: %u sleep: %u cfp-period: %u maxdur: %u next: %u\n",
-                 bs.bs_bmissthreshold, bs.bs_sleepduration,
-                 bs.bs_cfpperiod, bs.bs_cfpmaxduration, bs.bs_cfpnext);
-
-       /* Set the computed STA beacon timers */
-
-       WMI_CMD(WMI_DISABLE_INTR_CMDID);
-       ath9k_hw_set_sta_beacon_timers(priv->ah, &bs);
-       imask |= ATH9K_INT_BMISS;
-       htc_imask = cpu_to_be32(imask);
-       WMI_CMD_BUF(WMI_ENABLE_INTR_CMDID, &htc_imask);
-}
-
-static void ath9k_htc_beacon_config_adhoc(struct ath9k_htc_priv *priv,
-                                         struct htc_beacon_config *bss_conf)
-{
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       enum ath9k_int imask = 0;
-       u32 nexttbtt, intval;
-       __be32 htc_imask = 0;
-       int ret;
-       u8 cmd_rsp;
-
-       intval = bss_conf->beacon_interval & ATH9K_BEACON_PERIOD;
-       nexttbtt = intval;
-       intval |= ATH9K_BEACON_ENA;
-       if (priv->op_flags & OP_ENABLE_BEACON)
-               imask |= ATH9K_INT_SWBA;
-
-       ath_print(common, ATH_DBG_BEACON,
-                 "IBSS Beacon config, intval: %d, imask: 0x%x\n",
-                 bss_conf->beacon_interval, imask);
-
-       WMI_CMD(WMI_DISABLE_INTR_CMDID);
-       ath9k_hw_beaconinit(priv->ah, nexttbtt, intval);
-       priv->bmiss_cnt = 0;
-       htc_imask = cpu_to_be32(imask);
-       WMI_CMD_BUF(WMI_ENABLE_INTR_CMDID, &htc_imask);
-}
-
-void ath9k_htc_beaconep(void *drv_priv, struct sk_buff *skb,
-                       enum htc_endpoint_id ep_id, bool txok)
-{
-       dev_kfree_skb_any(skb);
-}
-
-void ath9k_htc_swba(struct ath9k_htc_priv *priv, u8 beacon_pending)
-{
-       struct ath9k_htc_vif *avp = (void *)priv->vif->drv_priv;
-       struct tx_beacon_header beacon_hdr;
-       struct ath9k_htc_tx_ctl tx_ctl;
-       struct ieee80211_tx_info *info;
-       struct sk_buff *beacon;
-       u8 *tx_fhdr;
-
-       memset(&beacon_hdr, 0, sizeof(struct tx_beacon_header));
-       memset(&tx_ctl, 0, sizeof(struct ath9k_htc_tx_ctl));
-
-       /* FIXME: Handle BMISS */
-       if (beacon_pending != 0) {
-               priv->bmiss_cnt++;
-               return;
-       }
-
-       spin_lock_bh(&priv->beacon_lock);
-
-       if (unlikely(priv->op_flags & OP_SCANNING)) {
-               spin_unlock_bh(&priv->beacon_lock);
-               return;
-       }
-
-       /* Get a new beacon */
-       beacon = ieee80211_beacon_get(priv->hw, priv->vif);
-       if (!beacon) {
-               spin_unlock_bh(&priv->beacon_lock);
-               return;
-       }
-
-       info = IEEE80211_SKB_CB(beacon);
-       if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) {
-               struct ieee80211_hdr *hdr =
-                       (struct ieee80211_hdr *) beacon->data;
-               priv->seq_no += 0x10;
-               hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG);
-               hdr->seq_ctrl |= cpu_to_le16(priv->seq_no);
-       }
-
-       tx_ctl.type = ATH9K_HTC_NORMAL;
-       beacon_hdr.vif_index = avp->index;
-       tx_fhdr = skb_push(beacon, sizeof(beacon_hdr));
-       memcpy(tx_fhdr, (u8 *) &beacon_hdr, sizeof(beacon_hdr));
-
-       htc_send(priv->htc, beacon, priv->beacon_ep, &tx_ctl);
-
-       spin_unlock_bh(&priv->beacon_lock);
-}
-
-/* Currently, only for IBSS */
-void ath9k_htc_beaconq_config(struct ath9k_htc_priv *priv)
-{
-       struct ath_hw *ah = priv->ah;
-       struct ath9k_tx_queue_info qi, qi_be;
-       int qnum = priv->hwq_map[WME_AC_BE];
-
-       memset(&qi, 0, sizeof(struct ath9k_tx_queue_info));
-       memset(&qi_be, 0, sizeof(struct ath9k_tx_queue_info));
-
-       ath9k_hw_get_txq_props(ah, qnum, &qi_be);
-
-       qi.tqi_aifs = qi_be.tqi_aifs;
-       qi.tqi_cwmin = 4*qi_be.tqi_cwmin;
-       qi.tqi_cwmax = qi_be.tqi_cwmax;
-
-       if (!ath9k_hw_set_txq_props(ah, priv->beaconq, &qi)) {
-               ath_print(ath9k_hw_common(ah), ATH_DBG_FATAL,
-                         "Unable to update beacon queue %u!\n", qnum);
-       } else {
-               ath9k_hw_resettxqueue(ah, priv->beaconq);
-       }
-}
-
-void ath9k_htc_beacon_config(struct ath9k_htc_priv *priv,
-                            struct ieee80211_vif *vif)
-{
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       struct htc_beacon_config *cur_conf = &priv->cur_beacon_conf;
-       struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
-
-       cur_conf->beacon_interval = bss_conf->beacon_int;
-       if (cur_conf->beacon_interval == 0)
-               cur_conf->beacon_interval = 100;
-
-       cur_conf->dtim_period = bss_conf->dtim_period;
-       cur_conf->listen_interval = 1;
-       cur_conf->dtim_count = 1;
-       cur_conf->bmiss_timeout =
-               ATH_DEFAULT_BMISS_LIMIT * cur_conf->beacon_interval;
-
-       switch (vif->type) {
-       case NL80211_IFTYPE_STATION:
-               ath9k_htc_beacon_config_sta(priv, cur_conf);
-               break;
-       case NL80211_IFTYPE_ADHOC:
-               ath9k_htc_beacon_config_adhoc(priv, cur_conf);
-               break;
-       default:
-               ath_print(common, ATH_DBG_CONFIG,
-                         "Unsupported beaconing mode\n");
-               return;
-       }
-}
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
deleted file mode 100644 (file)
index e5a0122..0000000
+++ /dev/null
@@ -1,918 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "htc.h"
-
-MODULE_AUTHOR("Atheros Communications");
-MODULE_LICENSE("Dual BSD/GPL");
-MODULE_DESCRIPTION("Atheros driver 802.11n HTC based wireless devices");
-
-static unsigned int ath9k_debug = ATH_DBG_DEFAULT;
-module_param_named(debug, ath9k_debug, uint, 0);
-MODULE_PARM_DESC(debug, "Debugging mask");
-
-int htc_modparam_nohwcrypt;
-module_param_named(nohwcrypt, htc_modparam_nohwcrypt, int, 0444);
-MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption");
-
-#define CHAN2G(_freq, _idx)  { \
-       .center_freq = (_freq), \
-       .hw_value = (_idx), \
-       .max_power = 20, \
-}
-
-#define CHAN5G(_freq, _idx) { \
-       .band = IEEE80211_BAND_5GHZ, \
-       .center_freq = (_freq), \
-       .hw_value = (_idx), \
-       .max_power = 20, \
-}
-
-static struct ieee80211_channel ath9k_2ghz_channels[] = {
-       CHAN2G(2412, 0), /* Channel 1 */
-       CHAN2G(2417, 1), /* Channel 2 */
-       CHAN2G(2422, 2), /* Channel 3 */
-       CHAN2G(2427, 3), /* Channel 4 */
-       CHAN2G(2432, 4), /* Channel 5 */
-       CHAN2G(2437, 5), /* Channel 6 */
-       CHAN2G(2442, 6), /* Channel 7 */
-       CHAN2G(2447, 7), /* Channel 8 */
-       CHAN2G(2452, 8), /* Channel 9 */
-       CHAN2G(2457, 9), /* Channel 10 */
-       CHAN2G(2462, 10), /* Channel 11 */
-       CHAN2G(2467, 11), /* Channel 12 */
-       CHAN2G(2472, 12), /* Channel 13 */
-       CHAN2G(2484, 13), /* Channel 14 */
-};
-
-static struct ieee80211_channel ath9k_5ghz_channels[] = {
-       /* _We_ call this UNII 1 */
-       CHAN5G(5180, 14), /* Channel 36 */
-       CHAN5G(5200, 15), /* Channel 40 */
-       CHAN5G(5220, 16), /* Channel 44 */
-       CHAN5G(5240, 17), /* Channel 48 */
-       /* _We_ call this UNII 2 */
-       CHAN5G(5260, 18), /* Channel 52 */
-       CHAN5G(5280, 19), /* Channel 56 */
-       CHAN5G(5300, 20), /* Channel 60 */
-       CHAN5G(5320, 21), /* Channel 64 */
-       /* _We_ call this "Middle band" */
-       CHAN5G(5500, 22), /* Channel 100 */
-       CHAN5G(5520, 23), /* Channel 104 */
-       CHAN5G(5540, 24), /* Channel 108 */
-       CHAN5G(5560, 25), /* Channel 112 */
-       CHAN5G(5580, 26), /* Channel 116 */
-       CHAN5G(5600, 27), /* Channel 120 */
-       CHAN5G(5620, 28), /* Channel 124 */
-       CHAN5G(5640, 29), /* Channel 128 */
-       CHAN5G(5660, 30), /* Channel 132 */
-       CHAN5G(5680, 31), /* Channel 136 */
-       CHAN5G(5700, 32), /* Channel 140 */
-       /* _We_ call this UNII 3 */
-       CHAN5G(5745, 33), /* Channel 149 */
-       CHAN5G(5765, 34), /* Channel 153 */
-       CHAN5G(5785, 35), /* Channel 157 */
-       CHAN5G(5805, 36), /* Channel 161 */
-       CHAN5G(5825, 37), /* Channel 165 */
-};
-
-/* Atheros hardware rate code addition for short premble */
-#define SHPCHECK(__hw_rate, __flags) \
-       ((__flags & IEEE80211_RATE_SHORT_PREAMBLE) ? (__hw_rate | 0x04) : 0)
-
-#define RATE(_bitrate, _hw_rate, _flags) {             \
-       .bitrate        = (_bitrate),                   \
-       .flags          = (_flags),                     \
-       .hw_value       = (_hw_rate),                   \
-       .hw_value_short = (SHPCHECK(_hw_rate, _flags))  \
-}
-
-static struct ieee80211_rate ath9k_legacy_rates[] = {
-       RATE(10, 0x1b, 0),
-       RATE(20, 0x1a, IEEE80211_RATE_SHORT_PREAMBLE), /* shortp : 0x1e */
-       RATE(55, 0x19, IEEE80211_RATE_SHORT_PREAMBLE), /* shortp: 0x1d */
-       RATE(110, 0x18, IEEE80211_RATE_SHORT_PREAMBLE), /* short: 0x1c */
-       RATE(60, 0x0b, 0),
-       RATE(90, 0x0f, 0),
-       RATE(120, 0x0a, 0),
-       RATE(180, 0x0e, 0),
-       RATE(240, 0x09, 0),
-       RATE(360, 0x0d, 0),
-       RATE(480, 0x08, 0),
-       RATE(540, 0x0c, 0),
-};
-
-static int ath9k_htc_wait_for_target(struct ath9k_htc_priv *priv)
-{
-       int time_left;
-
-       if (atomic_read(&priv->htc->tgt_ready) > 0) {
-               atomic_dec(&priv->htc->tgt_ready);
-               return 0;
-       }
-
-       /* Firmware can take up to 50ms to get ready, to be safe use 1 second */
-       time_left = wait_for_completion_timeout(&priv->htc->target_wait, HZ);
-       if (!time_left) {
-               dev_err(priv->dev, "ath9k_htc: Target is unresponsive\n");
-               return -ETIMEDOUT;
-       }
-
-       atomic_dec(&priv->htc->tgt_ready);
-
-       return 0;
-}
-
-static void ath9k_deinit_priv(struct ath9k_htc_priv *priv)
-{
-       ath9k_htc_exit_debug(priv->ah);
-       ath9k_hw_deinit(priv->ah);
-       tasklet_kill(&priv->wmi_tasklet);
-       tasklet_kill(&priv->rx_tasklet);
-       tasklet_kill(&priv->tx_tasklet);
-       kfree(priv->ah);
-       priv->ah = NULL;
-}
-
-static void ath9k_deinit_device(struct ath9k_htc_priv *priv)
-{
-       struct ieee80211_hw *hw = priv->hw;
-
-       wiphy_rfkill_stop_polling(hw->wiphy);
-       ath9k_deinit_leds(priv);
-       ieee80211_unregister_hw(hw);
-       ath9k_rx_cleanup(priv);
-       ath9k_tx_cleanup(priv);
-       ath9k_deinit_priv(priv);
-}
-
-static inline int ath9k_htc_connect_svc(struct ath9k_htc_priv *priv,
-                                       u16 service_id,
-                                       void (*tx) (void *,
-                                                   struct sk_buff *,
-                                                   enum htc_endpoint_id,
-                                                   bool txok),
-                                       enum htc_endpoint_id *ep_id)
-{
-       struct htc_service_connreq req;
-
-       memset(&req, 0, sizeof(struct htc_service_connreq));
-
-       req.service_id = service_id;
-       req.ep_callbacks.priv = priv;
-       req.ep_callbacks.rx = ath9k_htc_rxep;
-       req.ep_callbacks.tx = tx;
-
-       return htc_connect_service(priv->htc, &req, ep_id);
-}
-
-static int ath9k_init_htc_services(struct ath9k_htc_priv *priv, u16 devid)
-{
-       int ret;
-
-       /* WMI CMD*/
-       ret = ath9k_wmi_connect(priv->htc, priv->wmi, &priv->wmi_cmd_ep);
-       if (ret)
-               goto err;
-
-       /* Beacon */
-       ret = ath9k_htc_connect_svc(priv, WMI_BEACON_SVC, ath9k_htc_beaconep,
-                                   &priv->beacon_ep);
-       if (ret)
-               goto err;
-
-       /* CAB */
-       ret = ath9k_htc_connect_svc(priv, WMI_CAB_SVC, ath9k_htc_txep,
-                                   &priv->cab_ep);
-       if (ret)
-               goto err;
-
-
-       /* UAPSD */
-       ret = ath9k_htc_connect_svc(priv, WMI_UAPSD_SVC, ath9k_htc_txep,
-                                   &priv->uapsd_ep);
-       if (ret)
-               goto err;
-
-       /* MGMT */
-       ret = ath9k_htc_connect_svc(priv, WMI_MGMT_SVC, ath9k_htc_txep,
-                                   &priv->mgmt_ep);
-       if (ret)
-               goto err;
-
-       /* DATA BE */
-       ret = ath9k_htc_connect_svc(priv, WMI_DATA_BE_SVC, ath9k_htc_txep,
-                                   &priv->data_be_ep);
-       if (ret)
-               goto err;
-
-       /* DATA BK */
-       ret = ath9k_htc_connect_svc(priv, WMI_DATA_BK_SVC, ath9k_htc_txep,
-                                   &priv->data_bk_ep);
-       if (ret)
-               goto err;
-
-       /* DATA VI */
-       ret = ath9k_htc_connect_svc(priv, WMI_DATA_VI_SVC, ath9k_htc_txep,
-                                   &priv->data_vi_ep);
-       if (ret)
-               goto err;
-
-       /* DATA VO */
-       ret = ath9k_htc_connect_svc(priv, WMI_DATA_VO_SVC, ath9k_htc_txep,
-                                   &priv->data_vo_ep);
-       if (ret)
-               goto err;
-
-       /*
-        * Setup required credits before initializing HTC.
-        * This is a bit hacky, but, since queuing is done in
-        * the HIF layer, shouldn't matter much.
-        */
-
-       switch(devid) {
-       case 0x7010:
-       case 0x7015:
-       case 0x9018:
-       case 0xA704:
-       case 0x1200:
-               priv->htc->credits = 45;
-               break;
-       default:
-               priv->htc->credits = 33;
-       }
-
-       ret = htc_init(priv->htc);
-       if (ret)
-               goto err;
-
-       dev_info(priv->dev, "ath9k_htc: HTC initialized with %d credits\n",
-                priv->htc->credits);
-
-       return 0;
-
-err:
-       dev_err(priv->dev, "ath9k_htc: Unable to initialize HTC services\n");
-       return ret;
-}
-
-static int ath9k_reg_notifier(struct wiphy *wiphy,
-                             struct regulatory_request *request)
-{
-       struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
-       struct ath9k_htc_priv *priv = hw->priv;
-
-       return ath_reg_notifier_apply(wiphy, request,
-                                     ath9k_hw_regulatory(priv->ah));
-}
-
-static unsigned int ath9k_regread(void *hw_priv, u32 reg_offset)
-{
-       struct ath_hw *ah = (struct ath_hw *) hw_priv;
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
-       __be32 val, reg = cpu_to_be32(reg_offset);
-       int r;
-
-       r = ath9k_wmi_cmd(priv->wmi, WMI_REG_READ_CMDID,
-                         (u8 *) &reg, sizeof(reg),
-                         (u8 *) &val, sizeof(val),
-                         100);
-       if (unlikely(r)) {
-               ath_print(common, ATH_DBG_WMI,
-                         "REGISTER READ FAILED: (0x%04x, %d)\n",
-                          reg_offset, r);
-               return -EIO;
-       }
-
-       return be32_to_cpu(val);
-}
-
-static void ath9k_regwrite_single(void *hw_priv, u32 val, u32 reg_offset)
-{
-       struct ath_hw *ah = (struct ath_hw *) hw_priv;
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
-       __be32 buf[2] = {
-               cpu_to_be32(reg_offset),
-               cpu_to_be32(val),
-       };
-       int r;
-
-       r = ath9k_wmi_cmd(priv->wmi, WMI_REG_WRITE_CMDID,
-                         (u8 *) &buf, sizeof(buf),
-                         (u8 *) &val, sizeof(val),
-                         100);
-       if (unlikely(r)) {
-               ath_print(common, ATH_DBG_WMI,
-                         "REGISTER WRITE FAILED:(0x%04x, %d)\n",
-                         reg_offset, r);
-       }
-}
-
-static void ath9k_regwrite_buffer(void *hw_priv, u32 val, u32 reg_offset)
-{
-       struct ath_hw *ah = (struct ath_hw *) hw_priv;
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
-       u32 rsp_status;
-       int r;
-
-       mutex_lock(&priv->wmi->multi_write_mutex);
-
-       /* Store the register/value */
-       priv->wmi->multi_write[priv->wmi->multi_write_idx].reg =
-               cpu_to_be32(reg_offset);
-       priv->wmi->multi_write[priv->wmi->multi_write_idx].val =
-               cpu_to_be32(val);
-
-       priv->wmi->multi_write_idx++;
-
-       /* If the buffer is full, send it out. */
-       if (priv->wmi->multi_write_idx == MAX_CMD_NUMBER) {
-               r = ath9k_wmi_cmd(priv->wmi, WMI_REG_WRITE_CMDID,
-                         (u8 *) &priv->wmi->multi_write,
-                         sizeof(struct register_write) * priv->wmi->multi_write_idx,
-                         (u8 *) &rsp_status, sizeof(rsp_status),
-                         100);
-               if (unlikely(r)) {
-                       ath_print(common, ATH_DBG_WMI,
-                                 "REGISTER WRITE FAILED, multi len: %d\n",
-                                 priv->wmi->multi_write_idx);
-               }
-               priv->wmi->multi_write_idx = 0;
-       }
-
-       mutex_unlock(&priv->wmi->multi_write_mutex);
-}
-
-static void ath9k_regwrite(void *hw_priv, u32 val, u32 reg_offset)
-{
-       struct ath_hw *ah = (struct ath_hw *) hw_priv;
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
-
-       if (atomic_read(&priv->wmi->mwrite_cnt))
-               ath9k_regwrite_buffer(hw_priv, val, reg_offset);
-       else
-               ath9k_regwrite_single(hw_priv, val, reg_offset);
-}
-
-static void ath9k_enable_regwrite_buffer(void *hw_priv)
-{
-       struct ath_hw *ah = (struct ath_hw *) hw_priv;
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
-
-       atomic_inc(&priv->wmi->mwrite_cnt);
-}
-
-static void ath9k_disable_regwrite_buffer(void *hw_priv)
-{
-       struct ath_hw *ah = (struct ath_hw *) hw_priv;
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
-
-       atomic_dec(&priv->wmi->mwrite_cnt);
-}
-
-static void ath9k_regwrite_flush(void *hw_priv)
-{
-       struct ath_hw *ah = (struct ath_hw *) hw_priv;
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
-       u32 rsp_status;
-       int r;
-
-       mutex_lock(&priv->wmi->multi_write_mutex);
-
-       if (priv->wmi->multi_write_idx) {
-               r = ath9k_wmi_cmd(priv->wmi, WMI_REG_WRITE_CMDID,
-                         (u8 *) &priv->wmi->multi_write,
-                         sizeof(struct register_write) * priv->wmi->multi_write_idx,
-                         (u8 *) &rsp_status, sizeof(rsp_status),
-                         100);
-               if (unlikely(r)) {
-                       ath_print(common, ATH_DBG_WMI,
-                                 "REGISTER WRITE FAILED, multi len: %d\n",
-                                 priv->wmi->multi_write_idx);
-               }
-               priv->wmi->multi_write_idx = 0;
-       }
-
-       mutex_unlock(&priv->wmi->multi_write_mutex);
-}
-
-static const struct ath_ops ath9k_common_ops = {
-       .read = ath9k_regread,
-       .write = ath9k_regwrite,
-       .enable_write_buffer = ath9k_enable_regwrite_buffer,
-       .disable_write_buffer = ath9k_disable_regwrite_buffer,
-       .write_flush = ath9k_regwrite_flush,
-};
-
-static void ath_usb_read_cachesize(struct ath_common *common, int *csz)
-{
-       *csz = L1_CACHE_BYTES >> 2;
-}
-
-static bool ath_usb_eeprom_read(struct ath_common *common, u32 off, u16 *data)
-{
-       struct ath_hw *ah = (struct ath_hw *) common->ah;
-
-       (void)REG_READ(ah, AR5416_EEPROM_OFFSET + (off << AR5416_EEPROM_S));
-
-       if (!ath9k_hw_wait(ah,
-                          AR_EEPROM_STATUS_DATA,
-                          AR_EEPROM_STATUS_DATA_BUSY |
-                          AR_EEPROM_STATUS_DATA_PROT_ACCESS, 0,
-                          AH_WAIT_TIMEOUT))
-               return false;
-
-       *data = MS(REG_READ(ah, AR_EEPROM_STATUS_DATA),
-                  AR_EEPROM_STATUS_DATA_VAL);
-
-       return true;
-}
-
-static const struct ath_bus_ops ath9k_usb_bus_ops = {
-       .ath_bus_type = ATH_USB,
-       .read_cachesize = ath_usb_read_cachesize,
-       .eeprom_read = ath_usb_eeprom_read,
-};
-
-static void setup_ht_cap(struct ath9k_htc_priv *priv,
-                        struct ieee80211_sta_ht_cap *ht_info)
-{
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       u8 tx_streams, rx_streams;
-       int i;
-
-       ht_info->ht_supported = true;
-       ht_info->cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
-                      IEEE80211_HT_CAP_SM_PS |
-                      IEEE80211_HT_CAP_SGI_40 |
-                      IEEE80211_HT_CAP_DSSSCCK40;
-
-       if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_SGI_20)
-               ht_info->cap |= IEEE80211_HT_CAP_SGI_20;
-
-       ht_info->cap |= (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT);
-
-       ht_info->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
-       ht_info->ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
-
-       memset(&ht_info->mcs, 0, sizeof(ht_info->mcs));
-
-       /* ath9k_htc supports only 1 or 2 stream devices */
-       tx_streams = ath9k_cmn_count_streams(common->tx_chainmask, 2);
-       rx_streams = ath9k_cmn_count_streams(common->rx_chainmask, 2);
-
-       ath_print(common, ATH_DBG_CONFIG,
-                 "TX streams %d, RX streams: %d\n",
-                 tx_streams, rx_streams);
-
-       if (tx_streams != rx_streams) {
-               ht_info->mcs.tx_params |= IEEE80211_HT_MCS_TX_RX_DIFF;
-               ht_info->mcs.tx_params |= ((tx_streams - 1) <<
-                                          IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT);
-       }
-
-       for (i = 0; i < rx_streams; i++)
-               ht_info->mcs.rx_mask[i] = 0xff;
-
-       ht_info->mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
-}
-
-static int ath9k_init_queues(struct ath9k_htc_priv *priv)
-{
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       int i;
-
-       for (i = 0; i < ARRAY_SIZE(priv->hwq_map); i++)
-               priv->hwq_map[i] = -1;
-
-       priv->beaconq = ath9k_hw_beaconq_setup(priv->ah);
-       if (priv->beaconq == -1) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to setup BEACON xmit queue\n");
-               goto err;
-       }
-
-       priv->cabq = ath9k_htc_cabq_setup(priv);
-       if (priv->cabq == -1) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to setup CAB xmit queue\n");
-               goto err;
-       }
-
-       if (!ath9k_htc_txq_setup(priv, WME_AC_BE)) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to setup xmit queue for BE traffic\n");
-               goto err;
-       }
-
-       if (!ath9k_htc_txq_setup(priv, WME_AC_BK)) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to setup xmit queue for BK traffic\n");
-               goto err;
-       }
-       if (!ath9k_htc_txq_setup(priv, WME_AC_VI)) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to setup xmit queue for VI traffic\n");
-               goto err;
-       }
-       if (!ath9k_htc_txq_setup(priv, WME_AC_VO)) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to setup xmit queue for VO traffic\n");
-               goto err;
-       }
-
-       return 0;
-
-err:
-       return -EINVAL;
-}
-
-static void ath9k_init_crypto(struct ath9k_htc_priv *priv)
-{
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       int i = 0;
-
-       /* Get the hardware key cache size. */
-       common->keymax = priv->ah->caps.keycache_size;
-       if (common->keymax > ATH_KEYMAX) {
-               ath_print(common, ATH_DBG_ANY,
-                         "Warning, using only %u entries in %u key cache\n",
-                         ATH_KEYMAX, common->keymax);
-               common->keymax = ATH_KEYMAX;
-       }
-
-       /*
-        * Reset the key cache since some parts do not
-        * reset the contents on initial power up.
-        */
-       for (i = 0; i < common->keymax; i++)
-               ath9k_hw_keyreset(priv->ah, (u16) i);
-}
-
-static void ath9k_init_channels_rates(struct ath9k_htc_priv *priv)
-{
-       if (test_bit(ATH9K_MODE_11G, priv->ah->caps.wireless_modes)) {
-               priv->sbands[IEEE80211_BAND_2GHZ].channels =
-                       ath9k_2ghz_channels;
-               priv->sbands[IEEE80211_BAND_2GHZ].band = IEEE80211_BAND_2GHZ;
-               priv->sbands[IEEE80211_BAND_2GHZ].n_channels =
-                       ARRAY_SIZE(ath9k_2ghz_channels);
-               priv->sbands[IEEE80211_BAND_2GHZ].bitrates = ath9k_legacy_rates;
-               priv->sbands[IEEE80211_BAND_2GHZ].n_bitrates =
-                       ARRAY_SIZE(ath9k_legacy_rates);
-       }
-
-       if (test_bit(ATH9K_MODE_11A, priv->ah->caps.wireless_modes)) {
-               priv->sbands[IEEE80211_BAND_5GHZ].channels = ath9k_5ghz_channels;
-               priv->sbands[IEEE80211_BAND_5GHZ].band = IEEE80211_BAND_5GHZ;
-               priv->sbands[IEEE80211_BAND_5GHZ].n_channels =
-                       ARRAY_SIZE(ath9k_5ghz_channels);
-               priv->sbands[IEEE80211_BAND_5GHZ].bitrates =
-                       ath9k_legacy_rates + 4;
-               priv->sbands[IEEE80211_BAND_5GHZ].n_bitrates =
-                       ARRAY_SIZE(ath9k_legacy_rates) - 4;
-       }
-}
-
-static void ath9k_init_misc(struct ath9k_htc_priv *priv)
-{
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-
-       common->tx_chainmask = priv->ah->caps.tx_chainmask;
-       common->rx_chainmask = priv->ah->caps.rx_chainmask;
-
-       if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_BSSIDMASK)
-               memcpy(common->bssidmask, ath_bcast_mac, ETH_ALEN);
-
-       priv->ah->opmode = NL80211_IFTYPE_STATION;
-}
-
-static int ath9k_init_priv(struct ath9k_htc_priv *priv, u16 devid)
-{
-       struct ath_hw *ah = NULL;
-       struct ath_common *common;
-       int ret = 0, csz = 0;
-
-       priv->op_flags |= OP_INVALID;
-
-       ah = kzalloc(sizeof(struct ath_hw), GFP_KERNEL);
-       if (!ah)
-               return -ENOMEM;
-
-       ah->hw_version.devid = devid;
-       ah->hw_version.subsysid = 0; /* FIXME */
-       priv->ah = ah;
-
-       common = ath9k_hw_common(ah);
-       common->ops = &ath9k_common_ops;
-       common->bus_ops = &ath9k_usb_bus_ops;
-       common->ah = ah;
-       common->hw = priv->hw;
-       common->priv = priv;
-       common->debug_mask = ath9k_debug;
-
-       spin_lock_init(&priv->wmi->wmi_lock);
-       spin_lock_init(&priv->beacon_lock);
-       spin_lock_init(&priv->tx_lock);
-       mutex_init(&priv->mutex);
-       mutex_init(&priv->htc_pm_lock);
-       tasklet_init(&priv->wmi_tasklet, ath9k_wmi_tasklet,
-                    (unsigned long)priv);
-       tasklet_init(&priv->rx_tasklet, ath9k_rx_tasklet,
-                    (unsigned long)priv);
-       tasklet_init(&priv->tx_tasklet, ath9k_tx_tasklet, (unsigned long)priv);
-       INIT_DELAYED_WORK(&priv->ath9k_ani_work, ath9k_ani_work);
-       INIT_WORK(&priv->ps_work, ath9k_ps_work);
-
-       /*
-        * Cache line size is used to size and align various
-        * structures used to communicate with the hardware.
-        */
-       ath_read_cachesize(common, &csz);
-       common->cachelsz = csz << 2; /* convert to bytes */
-
-       ret = ath9k_hw_init(ah);
-       if (ret) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to initialize hardware; "
-                         "initialization status: %d\n", ret);
-               goto err_hw;
-       }
-
-       ret = ath9k_htc_init_debug(ah);
-       if (ret) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to create debugfs files\n");
-               goto err_debug;
-       }
-
-       ret = ath9k_init_queues(priv);
-       if (ret)
-               goto err_queues;
-
-       ath9k_init_crypto(priv);
-       ath9k_init_channels_rates(priv);
-       ath9k_init_misc(priv);
-
-       return 0;
-
-err_queues:
-       ath9k_htc_exit_debug(ah);
-err_debug:
-       ath9k_hw_deinit(ah);
-err_hw:
-
-       kfree(ah);
-       priv->ah = NULL;
-
-       return ret;
-}
-
-static void ath9k_set_hw_capab(struct ath9k_htc_priv *priv,
-                              struct ieee80211_hw *hw)
-{
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-
-       hw->flags = IEEE80211_HW_SIGNAL_DBM |
-               IEEE80211_HW_AMPDU_AGGREGATION |
-               IEEE80211_HW_SPECTRUM_MGMT |
-               IEEE80211_HW_HAS_RATE_CONTROL |
-               IEEE80211_HW_RX_INCLUDES_FCS |
-               IEEE80211_HW_SUPPORTS_PS |
-               IEEE80211_HW_PS_NULLFUNC_STACK;
-
-       hw->wiphy->interface_modes =
-               BIT(NL80211_IFTYPE_STATION) |
-               BIT(NL80211_IFTYPE_ADHOC);
-
-       hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
-
-       hw->queues = 4;
-       hw->channel_change_time = 5000;
-       hw->max_listen_interval = 10;
-       hw->vif_data_size = sizeof(struct ath9k_htc_vif);
-       hw->sta_data_size = sizeof(struct ath9k_htc_sta);
-
-       /* tx_frame_hdr is larger than tx_mgmt_hdr anyway */
-       hw->extra_tx_headroom = sizeof(struct tx_frame_hdr) +
-               sizeof(struct htc_frame_hdr) + 4;
-
-       if (test_bit(ATH9K_MODE_11G, priv->ah->caps.wireless_modes))
-               hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
-                       &priv->sbands[IEEE80211_BAND_2GHZ];
-       if (test_bit(ATH9K_MODE_11A, priv->ah->caps.wireless_modes))
-               hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
-                       &priv->sbands[IEEE80211_BAND_5GHZ];
-
-       if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_HT) {
-               if (test_bit(ATH9K_MODE_11G, priv->ah->caps.wireless_modes))
-                       setup_ht_cap(priv,
-                                    &priv->sbands[IEEE80211_BAND_2GHZ].ht_cap);
-               if (test_bit(ATH9K_MODE_11A, priv->ah->caps.wireless_modes))
-                       setup_ht_cap(priv,
-                                    &priv->sbands[IEEE80211_BAND_5GHZ].ht_cap);
-       }
-
-       SET_IEEE80211_PERM_ADDR(hw, common->macaddr);
-}
-
-static int ath9k_init_device(struct ath9k_htc_priv *priv, u16 devid)
-{
-       struct ieee80211_hw *hw = priv->hw;
-       struct ath_common *common;
-       struct ath_hw *ah;
-       int error = 0;
-       struct ath_regulatory *reg;
-
-       /* Bring up device */
-       error = ath9k_init_priv(priv, devid);
-       if (error != 0)
-               goto err_init;
-
-       ah = priv->ah;
-       common = ath9k_hw_common(ah);
-       ath9k_set_hw_capab(priv, hw);
-
-       /* Initialize regulatory */
-       error = ath_regd_init(&common->regulatory, priv->hw->wiphy,
-                             ath9k_reg_notifier);
-       if (error)
-               goto err_regd;
-
-       reg = &common->regulatory;
-
-       /* Setup TX */
-       error = ath9k_tx_init(priv);
-       if (error != 0)
-               goto err_tx;
-
-       /* Setup RX */
-       error = ath9k_rx_init(priv);
-       if (error != 0)
-               goto err_rx;
-
-       /* Register with mac80211 */
-       error = ieee80211_register_hw(hw);
-       if (error)
-               goto err_register;
-
-       /* Handle world regulatory */
-       if (!ath_is_world_regd(reg)) {
-               error = regulatory_hint(hw->wiphy, reg->alpha2);
-               if (error)
-                       goto err_world;
-       }
-
-       ath9k_init_leds(priv);
-       ath9k_start_rfkill_poll(priv);
-
-       return 0;
-
-err_world:
-       ieee80211_unregister_hw(hw);
-err_register:
-       ath9k_rx_cleanup(priv);
-err_rx:
-       ath9k_tx_cleanup(priv);
-err_tx:
-       /* Nothing */
-err_regd:
-       ath9k_deinit_priv(priv);
-err_init:
-       return error;
-}
-
-int ath9k_htc_probe_device(struct htc_target *htc_handle, struct device *dev,
-                          u16 devid)
-{
-       struct ieee80211_hw *hw;
-       struct ath9k_htc_priv *priv;
-       int ret;
-
-       hw = ieee80211_alloc_hw(sizeof(struct ath9k_htc_priv), &ath9k_htc_ops);
-       if (!hw)
-               return -ENOMEM;
-
-       priv = hw->priv;
-       priv->hw = hw;
-       priv->htc = htc_handle;
-       priv->dev = dev;
-       htc_handle->drv_priv = priv;
-       SET_IEEE80211_DEV(hw, priv->dev);
-
-       ret = ath9k_htc_wait_for_target(priv);
-       if (ret)
-               goto err_free;
-
-       priv->wmi = ath9k_init_wmi(priv);
-       if (!priv->wmi) {
-               ret = -EINVAL;
-               goto err_free;
-       }
-
-       ret = ath9k_init_htc_services(priv, devid);
-       if (ret)
-               goto err_init;
-
-       /* The device may have been unplugged earlier. */
-       priv->op_flags &= ~OP_UNPLUGGED;
-
-       ret = ath9k_init_device(priv, devid);
-       if (ret)
-               goto err_init;
-
-       return 0;
-
-err_init:
-       ath9k_deinit_wmi(priv);
-err_free:
-       ieee80211_free_hw(hw);
-       return ret;
-}
-
-void ath9k_htc_disconnect_device(struct htc_target *htc_handle, bool hotunplug)
-{
-       if (htc_handle->drv_priv) {
-
-               /* Check if the device has been yanked out. */
-               if (hotunplug)
-                       htc_handle->drv_priv->op_flags |= OP_UNPLUGGED;
-
-               ath9k_deinit_device(htc_handle->drv_priv);
-               ath9k_deinit_wmi(htc_handle->drv_priv);
-               ieee80211_free_hw(htc_handle->drv_priv->hw);
-       }
-}
-
-#ifdef CONFIG_PM
-int ath9k_htc_resume(struct htc_target *htc_handle)
-{
-       int ret;
-
-       ret = ath9k_htc_wait_for_target(htc_handle->drv_priv);
-       if (ret)
-               return ret;
-
-       ret = ath9k_init_htc_services(htc_handle->drv_priv,
-                             htc_handle->drv_priv->ah->hw_version.devid);
-       return ret;
-}
-#endif
-
-static int __init ath9k_htc_init(void)
-{
-       int error;
-
-       error = ath9k_htc_debug_create_root();
-       if (error < 0) {
-               printk(KERN_ERR
-                       "ath9k_htc: Unable to create debugfs root: %d\n",
-                       error);
-               goto err_dbg;
-       }
-
-       error = ath9k_hif_usb_init();
-       if (error < 0) {
-               printk(KERN_ERR
-                       "ath9k_htc: No USB devices found,"
-                       " driver not installed.\n");
-               error = -ENODEV;
-               goto err_usb;
-       }
-
-       return 0;
-
-err_usb:
-       ath9k_htc_debug_remove_root();
-err_dbg:
-       return error;
-}
-module_init(ath9k_htc_init);
-
-static void __exit ath9k_htc_exit(void)
-{
-       ath9k_hif_usb_exit();
-       ath9k_htc_debug_remove_root();
-       printk(KERN_INFO "ath9k_htc: Driver unloaded\n");
-}
-module_exit(ath9k_htc_exit);
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
deleted file mode 100644 (file)
index 7d09b4b..0000000
+++ /dev/null
@@ -1,1838 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "htc.h"
-
-#ifdef CONFIG_ATH9K_HTC_DEBUGFS
-static struct dentry *ath9k_debugfs_root;
-#endif
-
-/*************/
-/* Utilities */
-/*************/
-
-static void ath_update_txpow(struct ath9k_htc_priv *priv)
-{
-       struct ath_hw *ah = priv->ah;
-
-       if (priv->curtxpow != priv->txpowlimit) {
-               ath9k_hw_set_txpowerlimit(ah, priv->txpowlimit);
-               /* read back in case value is clamped */
-               priv->curtxpow = ath9k_hw_regulatory(ah)->power_limit;
-       }
-}
-
-/* HACK Alert: Use 11NG for 2.4, use 11NA for 5 */
-static enum htc_phymode ath9k_htc_get_curmode(struct ath9k_htc_priv *priv,
-                                             struct ath9k_channel *ichan)
-{
-       enum htc_phymode mode;
-
-       mode = HTC_MODE_AUTO;
-
-       switch (ichan->chanmode) {
-       case CHANNEL_G:
-       case CHANNEL_G_HT20:
-       case CHANNEL_G_HT40PLUS:
-       case CHANNEL_G_HT40MINUS:
-               mode = HTC_MODE_11NG;
-               break;
-       case CHANNEL_A:
-       case CHANNEL_A_HT20:
-       case CHANNEL_A_HT40PLUS:
-       case CHANNEL_A_HT40MINUS:
-               mode = HTC_MODE_11NA;
-               break;
-       default:
-               break;
-       }
-
-       return mode;
-}
-
-static bool ath9k_htc_setpower(struct ath9k_htc_priv *priv,
-                              enum ath9k_power_mode mode)
-{
-       bool ret;
-
-       mutex_lock(&priv->htc_pm_lock);
-       ret = ath9k_hw_setpower(priv->ah, mode);
-       mutex_unlock(&priv->htc_pm_lock);
-
-       return ret;
-}
-
-void ath9k_htc_ps_wakeup(struct ath9k_htc_priv *priv)
-{
-       mutex_lock(&priv->htc_pm_lock);
-       if (++priv->ps_usecount != 1)
-               goto unlock;
-       ath9k_hw_setpower(priv->ah, ATH9K_PM_AWAKE);
-
-unlock:
-       mutex_unlock(&priv->htc_pm_lock);
-}
-
-void ath9k_htc_ps_restore(struct ath9k_htc_priv *priv)
-{
-       mutex_lock(&priv->htc_pm_lock);
-       if (--priv->ps_usecount != 0)
-               goto unlock;
-
-       if (priv->ps_idle)
-               ath9k_hw_setpower(priv->ah, ATH9K_PM_FULL_SLEEP);
-       else if (priv->ps_enabled)
-               ath9k_hw_setpower(priv->ah, ATH9K_PM_NETWORK_SLEEP);
-
-unlock:
-       mutex_unlock(&priv->htc_pm_lock);
-}
-
-void ath9k_ps_work(struct work_struct *work)
-{
-       struct ath9k_htc_priv *priv =
-               container_of(work, struct ath9k_htc_priv,
-                            ps_work);
-       ath9k_htc_setpower(priv, ATH9K_PM_AWAKE);
-
-       /* The chip wakes up after receiving the first beacon
-          while network sleep is enabled. For the driver to
-          be in sync with the hw, set the chip to awake and
-          only then set it to sleep.
-        */
-       ath9k_htc_setpower(priv, ATH9K_PM_NETWORK_SLEEP);
-}
-
-static int ath9k_htc_set_channel(struct ath9k_htc_priv *priv,
-                                struct ieee80211_hw *hw,
-                                struct ath9k_channel *hchan)
-{
-       struct ath_hw *ah = priv->ah;
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ieee80211_conf *conf = &common->hw->conf;
-       bool fastcc = true;
-       struct ieee80211_channel *channel = hw->conf.channel;
-       struct ath9k_hw_cal_data *caldata;
-       enum htc_phymode mode;
-       __be16 htc_mode;
-       u8 cmd_rsp;
-       int ret;
-
-       if (priv->op_flags & OP_INVALID)
-               return -EIO;
-
-       if (priv->op_flags & OP_FULL_RESET)
-               fastcc = false;
-
-       /* Fiddle around with fastcc later on, for now just use full reset */
-       fastcc = false;
-       ath9k_htc_ps_wakeup(priv);
-       htc_stop(priv->htc);
-       WMI_CMD(WMI_DISABLE_INTR_CMDID);
-       WMI_CMD(WMI_DRAIN_TXQ_ALL_CMDID);
-       WMI_CMD(WMI_STOP_RECV_CMDID);
-
-       ath_print(common, ATH_DBG_CONFIG,
-                 "(%u MHz) -> (%u MHz), HT: %d, HT40: %d\n",
-                 priv->ah->curchan->channel,
-                 channel->center_freq, conf_is_ht(conf), conf_is_ht40(conf));
-
-       caldata = &priv->caldata[channel->hw_value];
-       ret = ath9k_hw_reset(ah, hchan, caldata, fastcc);
-       if (ret) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to reset channel (%u Mhz) "
-                         "reset status %d\n", channel->center_freq, ret);
-               goto err;
-       }
-
-       ath_update_txpow(priv);
-
-       WMI_CMD(WMI_START_RECV_CMDID);
-       if (ret)
-               goto err;
-
-       ath9k_host_rx_init(priv);
-
-       mode = ath9k_htc_get_curmode(priv, hchan);
-       htc_mode = cpu_to_be16(mode);
-       WMI_CMD_BUF(WMI_SET_MODE_CMDID, &htc_mode);
-       if (ret)
-               goto err;
-
-       WMI_CMD(WMI_ENABLE_INTR_CMDID);
-       if (ret)
-               goto err;
-
-       htc_start(priv->htc);
-
-       priv->op_flags &= ~OP_FULL_RESET;
-err:
-       ath9k_htc_ps_restore(priv);
-       return ret;
-}
-
-static int ath9k_htc_add_monitor_interface(struct ath9k_htc_priv *priv)
-{
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       struct ath9k_htc_target_vif hvif;
-       int ret = 0;
-       u8 cmd_rsp;
-
-       if (priv->nvifs > 0)
-               return -ENOBUFS;
-
-       memset(&hvif, 0, sizeof(struct ath9k_htc_target_vif));
-       memcpy(&hvif.myaddr, common->macaddr, ETH_ALEN);
-
-       hvif.opmode = cpu_to_be32(HTC_M_MONITOR);
-       priv->ah->opmode = NL80211_IFTYPE_MONITOR;
-       hvif.index = priv->nvifs;
-
-       WMI_CMD_BUF(WMI_VAP_CREATE_CMDID, &hvif);
-       if (ret)
-               return ret;
-
-       priv->nvifs++;
-       return 0;
-}
-
-static int ath9k_htc_remove_monitor_interface(struct ath9k_htc_priv *priv)
-{
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       struct ath9k_htc_target_vif hvif;
-       int ret = 0;
-       u8 cmd_rsp;
-
-       memset(&hvif, 0, sizeof(struct ath9k_htc_target_vif));
-       memcpy(&hvif.myaddr, common->macaddr, ETH_ALEN);
-       hvif.index = 0; /* Should do for now */
-       WMI_CMD_BUF(WMI_VAP_REMOVE_CMDID, &hvif);
-       priv->nvifs--;
-
-       return ret;
-}
-
-static int ath9k_htc_add_station(struct ath9k_htc_priv *priv,
-                                struct ieee80211_vif *vif,
-                                struct ieee80211_sta *sta)
-{
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       struct ath9k_htc_target_sta tsta;
-       struct ath9k_htc_vif *avp = (struct ath9k_htc_vif *) vif->drv_priv;
-       struct ath9k_htc_sta *ista;
-       int ret;
-       u8 cmd_rsp;
-
-       if (priv->nstations >= ATH9K_HTC_MAX_STA)
-               return -ENOBUFS;
-
-       memset(&tsta, 0, sizeof(struct ath9k_htc_target_sta));
-
-       if (sta) {
-               ista = (struct ath9k_htc_sta *) sta->drv_priv;
-               memcpy(&tsta.macaddr, sta->addr, ETH_ALEN);
-               memcpy(&tsta.bssid, common->curbssid, ETH_ALEN);
-               tsta.associd = common->curaid;
-               tsta.is_vif_sta = 0;
-               tsta.valid = true;
-               ista->index = priv->nstations;
-       } else {
-               memcpy(&tsta.macaddr, vif->addr, ETH_ALEN);
-               tsta.is_vif_sta = 1;
-       }
-
-       tsta.sta_index = priv->nstations;
-       tsta.vif_index = avp->index;
-       tsta.maxampdu = 0xffff;
-       if (sta && sta->ht_cap.ht_supported)
-               tsta.flags = cpu_to_be16(ATH_HTC_STA_HT);
-
-       WMI_CMD_BUF(WMI_NODE_CREATE_CMDID, &tsta);
-       if (ret) {
-               if (sta)
-                       ath_print(common, ATH_DBG_FATAL,
-                         "Unable to add station entry for: %pM\n", sta->addr);
-               return ret;
-       }
-
-       if (sta)
-               ath_print(common, ATH_DBG_CONFIG,
-                         "Added a station entry for: %pM (idx: %d)\n",
-                         sta->addr, tsta.sta_index);
-
-       priv->nstations++;
-       return 0;
-}
-
-static int ath9k_htc_remove_station(struct ath9k_htc_priv *priv,
-                                   struct ieee80211_vif *vif,
-                                   struct ieee80211_sta *sta)
-{
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       struct ath9k_htc_sta *ista;
-       int ret;
-       u8 cmd_rsp, sta_idx;
-
-       if (sta) {
-               ista = (struct ath9k_htc_sta *) sta->drv_priv;
-               sta_idx = ista->index;
-       } else {
-               sta_idx = 0;
-       }
-
-       WMI_CMD_BUF(WMI_NODE_REMOVE_CMDID, &sta_idx);
-       if (ret) {
-               if (sta)
-                       ath_print(common, ATH_DBG_FATAL,
-                         "Unable to remove station entry for: %pM\n",
-                         sta->addr);
-               return ret;
-       }
-
-       if (sta)
-               ath_print(common, ATH_DBG_CONFIG,
-                         "Removed a station entry for: %pM (idx: %d)\n",
-                         sta->addr, sta_idx);
-
-       priv->nstations--;
-       return 0;
-}
-
-static int ath9k_htc_update_cap_target(struct ath9k_htc_priv *priv)
-{
-       struct ath9k_htc_cap_target tcap;
-       int ret;
-       u8 cmd_rsp;
-
-       memset(&tcap, 0, sizeof(struct ath9k_htc_cap_target));
-
-       /* FIXME: Values are hardcoded */
-       tcap.flags = 0x240c40;
-       tcap.flags_ext = 0x80601000;
-       tcap.ampdu_limit = 0xffff0000;
-       tcap.ampdu_subframes = 20;
-       tcap.tx_chainmask_legacy = priv->ah->caps.tx_chainmask;
-       tcap.protmode = 1;
-       tcap.tx_chainmask = priv->ah->caps.tx_chainmask;
-
-       WMI_CMD_BUF(WMI_TARGET_IC_UPDATE_CMDID, &tcap);
-
-       return ret;
-}
-
-static void ath9k_htc_setup_rate(struct ath9k_htc_priv *priv,
-                                struct ieee80211_sta *sta,
-                                struct ath9k_htc_target_rate *trate)
-{
-       struct ath9k_htc_sta *ista = (struct ath9k_htc_sta *) sta->drv_priv;
-       struct ieee80211_supported_band *sband;
-       u32 caps = 0;
-       int i, j;
-
-       sband = priv->hw->wiphy->bands[priv->hw->conf.channel->band];
-
-       for (i = 0, j = 0; i < sband->n_bitrates; i++) {
-               if (sta->supp_rates[sband->band] & BIT(i)) {
-                       trate->rates.legacy_rates.rs_rates[j]
-                               = (sband->bitrates[i].bitrate * 2) / 10;
-                       j++;
-               }
-       }
-       trate->rates.legacy_rates.rs_nrates = j;
-
-       if (sta->ht_cap.ht_supported) {
-               for (i = 0, j = 0; i < 77; i++) {
-                       if (sta->ht_cap.mcs.rx_mask[i/8] & (1<<(i%8)))
-                               trate->rates.ht_rates.rs_rates[j++] = i;
-                       if (j == ATH_HTC_RATE_MAX)
-                               break;
-               }
-               trate->rates.ht_rates.rs_nrates = j;
-
-               caps = WLAN_RC_HT_FLAG;
-               if (sta->ht_cap.mcs.rx_mask[1])
-                       caps |= WLAN_RC_DS_FLAG;
-               if ((sta->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) &&
-                    (conf_is_ht40(&priv->hw->conf)))
-                       caps |= WLAN_RC_40_FLAG;
-               if (conf_is_ht40(&priv->hw->conf) &&
-                   (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40))
-                       caps |= WLAN_RC_SGI_FLAG;
-               else if (conf_is_ht20(&priv->hw->conf) &&
-                        (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20))
-                       caps |= WLAN_RC_SGI_FLAG;
-       }
-
-       trate->sta_index = ista->index;
-       trate->isnew = 1;
-       trate->capflags = cpu_to_be32(caps);
-}
-
-static int ath9k_htc_send_rate_cmd(struct ath9k_htc_priv *priv,
-                                   struct ath9k_htc_target_rate *trate)
-{
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       int ret;
-       u8 cmd_rsp;
-
-       WMI_CMD_BUF(WMI_RC_RATE_UPDATE_CMDID, trate);
-       if (ret) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to initialize Rate information on target\n");
-       }
-
-       return ret;
-}
-
-static void ath9k_htc_init_rate(struct ath9k_htc_priv *priv,
-                               struct ieee80211_sta *sta)
-{
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       struct ath9k_htc_target_rate trate;
-       int ret;
-
-       memset(&trate, 0, sizeof(struct ath9k_htc_target_rate));
-       ath9k_htc_setup_rate(priv, sta, &trate);
-       ret = ath9k_htc_send_rate_cmd(priv, &trate);
-       if (!ret)
-               ath_print(common, ATH_DBG_CONFIG,
-                         "Updated target sta: %pM, rate caps: 0x%X\n",
-                         sta->addr, be32_to_cpu(trate.capflags));
-}
-
-static void ath9k_htc_update_rate(struct ath9k_htc_priv *priv,
-                                 struct ieee80211_vif *vif,
-                                 struct ieee80211_bss_conf *bss_conf)
-{
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       struct ath9k_htc_target_rate trate;
-       struct ieee80211_sta *sta;
-       int ret;
-
-       memset(&trate, 0, sizeof(struct ath9k_htc_target_rate));
-
-       rcu_read_lock();
-       sta = ieee80211_find_sta(vif, bss_conf->bssid);
-       if (!sta) {
-               rcu_read_unlock();
-               return;
-       }
-       ath9k_htc_setup_rate(priv, sta, &trate);
-       rcu_read_unlock();
-
-       ret = ath9k_htc_send_rate_cmd(priv, &trate);
-       if (!ret)
-               ath_print(common, ATH_DBG_CONFIG,
-                         "Updated target sta: %pM, rate caps: 0x%X\n",
-                         bss_conf->bssid, be32_to_cpu(trate.capflags));
-}
-
-static int ath9k_htc_tx_aggr_oper(struct ath9k_htc_priv *priv,
-                                 struct ieee80211_vif *vif,
-                                 struct ieee80211_sta *sta,
-                                 enum ieee80211_ampdu_mlme_action action,
-                                 u16 tid)
-{
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       struct ath9k_htc_target_aggr aggr;
-       struct ath9k_htc_sta *ista;
-       int ret = 0;
-       u8 cmd_rsp;
-
-       if (tid >= ATH9K_HTC_MAX_TID)
-               return -EINVAL;
-
-       memset(&aggr, 0, sizeof(struct ath9k_htc_target_aggr));
-       ista = (struct ath9k_htc_sta *) sta->drv_priv;
-
-       aggr.sta_index = ista->index;
-       aggr.tidno = tid & 0xf;
-       aggr.aggr_enable = (action == IEEE80211_AMPDU_TX_START) ? true : false;
-
-       WMI_CMD_BUF(WMI_TX_AGGR_ENABLE_CMDID, &aggr);
-       if (ret)
-               ath_print(common, ATH_DBG_CONFIG,
-                         "Unable to %s TX aggregation for (%pM, %d)\n",
-                         (aggr.aggr_enable) ? "start" : "stop", sta->addr, tid);
-       else
-               ath_print(common, ATH_DBG_CONFIG,
-                         "%s TX aggregation for (%pM, %d)\n",
-                         (aggr.aggr_enable) ? "Starting" : "Stopping",
-                         sta->addr, tid);
-
-       spin_lock_bh(&priv->tx_lock);
-       ista->tid_state[tid] = (aggr.aggr_enable && !ret) ? AGGR_START : AGGR_STOP;
-       spin_unlock_bh(&priv->tx_lock);
-
-       return ret;
-}
-
-/*********/
-/* DEBUG */
-/*********/
-
-#ifdef CONFIG_ATH9K_HTC_DEBUGFS
-
-static int ath9k_debugfs_open(struct inode *inode, struct file *file)
-{
-       file->private_data = inode->i_private;
-       return 0;
-}
-
-static ssize_t read_file_tgt_stats(struct file *file, char __user *user_buf,
-                                  size_t count, loff_t *ppos)
-{
-       struct ath9k_htc_priv *priv = file->private_data;
-       struct ath9k_htc_target_stats cmd_rsp;
-       char buf[512];
-       unsigned int len = 0;
-       int ret = 0;
-
-       memset(&cmd_rsp, 0, sizeof(cmd_rsp));
-
-       WMI_CMD(WMI_TGT_STATS_CMDID);
-       if (ret)
-               return -EINVAL;
-
-
-       len += snprintf(buf + len, sizeof(buf) - len,
-                       "%19s : %10u\n", "TX Short Retries",
-                       be32_to_cpu(cmd_rsp.tx_shortretry));
-       len += snprintf(buf + len, sizeof(buf) - len,
-                       "%19s : %10u\n", "TX Long Retries",
-                       be32_to_cpu(cmd_rsp.tx_longretry));
-       len += snprintf(buf + len, sizeof(buf) - len,
-                       "%19s : %10u\n", "TX Xretries",
-                       be32_to_cpu(cmd_rsp.tx_xretries));
-       len += snprintf(buf + len, sizeof(buf) - len,
-                       "%19s : %10u\n", "TX Unaggr. Xretries",
-                       be32_to_cpu(cmd_rsp.ht_txunaggr_xretry));
-       len += snprintf(buf + len, sizeof(buf) - len,
-                       "%19s : %10u\n", "TX Xretries (HT)",
-                       be32_to_cpu(cmd_rsp.ht_tx_xretries));
-       len += snprintf(buf + len, sizeof(buf) - len,
-                       "%19s : %10u\n", "TX Rate", priv->debug.txrate);
-
-       if (len > sizeof(buf))
-               len = sizeof(buf);
-
-       return simple_read_from_buffer(user_buf, count, ppos, buf, len);
-}
-
-static const struct file_operations fops_tgt_stats = {
-       .read = read_file_tgt_stats,
-       .open = ath9k_debugfs_open,
-       .owner = THIS_MODULE
-};
-
-static ssize_t read_file_xmit(struct file *file, char __user *user_buf,
-                             size_t count, loff_t *ppos)
-{
-       struct ath9k_htc_priv *priv = file->private_data;
-       char buf[512];
-       unsigned int len = 0;
-
-       len += snprintf(buf + len, sizeof(buf) - len,
-                       "%20s : %10u\n", "Buffers queued",
-                       priv->debug.tx_stats.buf_queued);
-       len += snprintf(buf + len, sizeof(buf) - len,
-                       "%20s : %10u\n", "Buffers completed",
-                       priv->debug.tx_stats.buf_completed);
-       len += snprintf(buf + len, sizeof(buf) - len,
-                       "%20s : %10u\n", "SKBs queued",
-                       priv->debug.tx_stats.skb_queued);
-       len += snprintf(buf + len, sizeof(buf) - len,
-                       "%20s : %10u\n", "SKBs completed",
-                       priv->debug.tx_stats.skb_completed);
-       len += snprintf(buf + len, sizeof(buf) - len,
-                       "%20s : %10u\n", "SKBs dropped",
-                       priv->debug.tx_stats.skb_dropped);
-
-       len += snprintf(buf + len, sizeof(buf) - len,
-                       "%20s : %10u\n", "BE queued",
-                       priv->debug.tx_stats.queue_stats[WME_AC_BE]);
-       len += snprintf(buf + len, sizeof(buf) - len,
-                       "%20s : %10u\n", "BK queued",
-                       priv->debug.tx_stats.queue_stats[WME_AC_BK]);
-       len += snprintf(buf + len, sizeof(buf) - len,
-                       "%20s : %10u\n", "VI queued",
-                       priv->debug.tx_stats.queue_stats[WME_AC_VI]);
-       len += snprintf(buf + len, sizeof(buf) - len,
-                       "%20s : %10u\n", "VO queued",
-                       priv->debug.tx_stats.queue_stats[WME_AC_VO]);
-
-       if (len > sizeof(buf))
-               len = sizeof(buf);
-
-       return simple_read_from_buffer(user_buf, count, ppos, buf, len);
-}
-
-static const struct file_operations fops_xmit = {
-       .read = read_file_xmit,
-       .open = ath9k_debugfs_open,
-       .owner = THIS_MODULE
-};
-
-static ssize_t read_file_recv(struct file *file, char __user *user_buf,
-                             size_t count, loff_t *ppos)
-{
-       struct ath9k_htc_priv *priv = file->private_data;
-       char buf[512];
-       unsigned int len = 0;
-
-       len += snprintf(buf + len, sizeof(buf) - len,
-                       "%20s : %10u\n", "SKBs allocated",
-                       priv->debug.rx_stats.skb_allocated);
-       len += snprintf(buf + len, sizeof(buf) - len,
-                       "%20s : %10u\n", "SKBs completed",
-                       priv->debug.rx_stats.skb_completed);
-       len += snprintf(buf + len, sizeof(buf) - len,
-                       "%20s : %10u\n", "SKBs Dropped",
-                       priv->debug.rx_stats.skb_dropped);
-
-       if (len > sizeof(buf))
-               len = sizeof(buf);
-
-       return simple_read_from_buffer(user_buf, count, ppos, buf, len);
-}
-
-static const struct file_operations fops_recv = {
-       .read = read_file_recv,
-       .open = ath9k_debugfs_open,
-       .owner = THIS_MODULE
-};
-
-int ath9k_htc_init_debug(struct ath_hw *ah)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
-
-       if (!ath9k_debugfs_root)
-               return -ENOENT;
-
-       priv->debug.debugfs_phy = debugfs_create_dir(wiphy_name(priv->hw->wiphy),
-                                                    ath9k_debugfs_root);
-       if (!priv->debug.debugfs_phy)
-               goto err;
-
-       priv->debug.debugfs_tgt_stats = debugfs_create_file("tgt_stats", S_IRUSR,
-                                                   priv->debug.debugfs_phy,
-                                                   priv, &fops_tgt_stats);
-       if (!priv->debug.debugfs_tgt_stats)
-               goto err;
-
-
-       priv->debug.debugfs_xmit = debugfs_create_file("xmit", S_IRUSR,
-                                                      priv->debug.debugfs_phy,
-                                                      priv, &fops_xmit);
-       if (!priv->debug.debugfs_xmit)
-               goto err;
-
-       priv->debug.debugfs_recv = debugfs_create_file("recv", S_IRUSR,
-                                                      priv->debug.debugfs_phy,
-                                                      priv, &fops_recv);
-       if (!priv->debug.debugfs_recv)
-               goto err;
-
-       return 0;
-
-err:
-       ath9k_htc_exit_debug(ah);
-       return -ENOMEM;
-}
-
-void ath9k_htc_exit_debug(struct ath_hw *ah)
-{
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) common->priv;
-
-       debugfs_remove(priv->debug.debugfs_recv);
-       debugfs_remove(priv->debug.debugfs_xmit);
-       debugfs_remove(priv->debug.debugfs_tgt_stats);
-       debugfs_remove(priv->debug.debugfs_phy);
-}
-
-int ath9k_htc_debug_create_root(void)
-{
-       ath9k_debugfs_root = debugfs_create_dir(KBUILD_MODNAME, NULL);
-       if (!ath9k_debugfs_root)
-               return -ENOENT;
-
-       return 0;
-}
-
-void ath9k_htc_debug_remove_root(void)
-{
-       debugfs_remove(ath9k_debugfs_root);
-       ath9k_debugfs_root = NULL;
-}
-
-#endif /* CONFIG_ATH9K_HTC_DEBUGFS */
-
-/*******/
-/* ANI */
-/*******/
-
-static void ath_start_ani(struct ath9k_htc_priv *priv)
-{
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       unsigned long timestamp = jiffies_to_msecs(jiffies);
-
-       common->ani.longcal_timer = timestamp;
-       common->ani.shortcal_timer = timestamp;
-       common->ani.checkani_timer = timestamp;
-
-       ieee80211_queue_delayed_work(common->hw, &priv->ath9k_ani_work,
-                                    msecs_to_jiffies(ATH_ANI_POLLINTERVAL));
-}
-
-void ath9k_ani_work(struct work_struct *work)
-{
-       struct ath9k_htc_priv *priv =
-               container_of(work, struct ath9k_htc_priv,
-                            ath9k_ani_work.work);
-       struct ath_hw *ah = priv->ah;
-       struct ath_common *common = ath9k_hw_common(ah);
-       bool longcal = false;
-       bool shortcal = false;
-       bool aniflag = false;
-       unsigned int timestamp = jiffies_to_msecs(jiffies);
-       u32 cal_interval, short_cal_interval;
-
-       short_cal_interval = ATH_STA_SHORT_CALINTERVAL;
-
-       /* Only calibrate if awake */
-       if (ah->power_mode != ATH9K_PM_AWAKE)
-               goto set_timer;
-
-       /* Long calibration runs independently of short calibration. */
-       if ((timestamp - common->ani.longcal_timer) >= ATH_LONG_CALINTERVAL) {
-               longcal = true;
-               ath_print(common, ATH_DBG_ANI, "longcal @%lu\n", jiffies);
-               common->ani.longcal_timer = timestamp;
-       }
-
-       /* Short calibration applies only while caldone is false */
-       if (!common->ani.caldone) {
-               if ((timestamp - common->ani.shortcal_timer) >=
-                   short_cal_interval) {
-                       shortcal = true;
-                       ath_print(common, ATH_DBG_ANI,
-                                 "shortcal @%lu\n", jiffies);
-                       common->ani.shortcal_timer = timestamp;
-                       common->ani.resetcal_timer = timestamp;
-               }
-       } else {
-               if ((timestamp - common->ani.resetcal_timer) >=
-                   ATH_RESTART_CALINTERVAL) {
-                       common->ani.caldone = ath9k_hw_reset_calvalid(ah);
-                       if (common->ani.caldone)
-                               common->ani.resetcal_timer = timestamp;
-               }
-       }
-
-       /* Verify whether we must check ANI */
-       if ((timestamp - common->ani.checkani_timer) >= ATH_ANI_POLLINTERVAL) {
-               aniflag = true;
-               common->ani.checkani_timer = timestamp;
-       }
-
-       /* Skip all processing if there's nothing to do. */
-       if (longcal || shortcal || aniflag) {
-
-               ath9k_htc_ps_wakeup(priv);
-
-               /* Call ANI routine if necessary */
-               if (aniflag)
-                       ath9k_hw_ani_monitor(ah, ah->curchan);
-
-               /* Perform calibration if necessary */
-               if (longcal || shortcal) {
-                       common->ani.caldone =
-                               ath9k_hw_calibrate(ah, ah->curchan,
-                                                  common->rx_chainmask,
-                                                  longcal);
-
-                       if (longcal)
-                               common->ani.noise_floor =
-                                       ath9k_hw_getchan_noise(ah, ah->curchan);
-
-                       ath_print(common, ATH_DBG_ANI,
-                                 " calibrate chan %u/%x nf: %d\n",
-                                 ah->curchan->channel,
-                                 ah->curchan->channelFlags,
-                                 common->ani.noise_floor);
-               }
-
-               ath9k_htc_ps_restore(priv);
-       }
-
-set_timer:
-       /*
-       * Set timer interval based on previous results.
-       * The interval must be the shortest necessary to satisfy ANI,
-       * short calibration and long calibration.
-       */
-       cal_interval = ATH_LONG_CALINTERVAL;
-       if (priv->ah->config.enable_ani)
-               cal_interval = min(cal_interval, (u32)ATH_ANI_POLLINTERVAL);
-       if (!common->ani.caldone)
-               cal_interval = min(cal_interval, (u32)short_cal_interval);
-
-       ieee80211_queue_delayed_work(common->hw, &priv->ath9k_ani_work,
-                                    msecs_to_jiffies(cal_interval));
-}
-
-/*******/
-/* LED */
-/*******/
-
-static void ath9k_led_blink_work(struct work_struct *work)
-{
-       struct ath9k_htc_priv *priv = container_of(work, struct ath9k_htc_priv,
-                                                  ath9k_led_blink_work.work);
-
-       if (!(priv->op_flags & OP_LED_ASSOCIATED))
-               return;
-
-       if ((priv->led_on_duration == ATH_LED_ON_DURATION_IDLE) ||
-           (priv->led_off_duration == ATH_LED_OFF_DURATION_IDLE))
-               ath9k_hw_set_gpio(priv->ah, priv->ah->led_pin, 0);
-       else
-               ath9k_hw_set_gpio(priv->ah, priv->ah->led_pin,
-                                 (priv->op_flags & OP_LED_ON) ? 1 : 0);
-
-       ieee80211_queue_delayed_work(priv->hw,
-                                    &priv->ath9k_led_blink_work,
-                                    (priv->op_flags & OP_LED_ON) ?
-                                    msecs_to_jiffies(priv->led_off_duration) :
-                                    msecs_to_jiffies(priv->led_on_duration));
-
-       priv->led_on_duration = priv->led_on_cnt ?
-               max((ATH_LED_ON_DURATION_IDLE - priv->led_on_cnt), 25) :
-               ATH_LED_ON_DURATION_IDLE;
-       priv->led_off_duration = priv->led_off_cnt ?
-               max((ATH_LED_OFF_DURATION_IDLE - priv->led_off_cnt), 10) :
-               ATH_LED_OFF_DURATION_IDLE;
-       priv->led_on_cnt = priv->led_off_cnt = 0;
-
-       if (priv->op_flags & OP_LED_ON)
-               priv->op_flags &= ~OP_LED_ON;
-       else
-               priv->op_flags |= OP_LED_ON;
-}
-
-static void ath9k_led_brightness_work(struct work_struct *work)
-{
-       struct ath_led *led = container_of(work, struct ath_led,
-                                          brightness_work.work);
-       struct ath9k_htc_priv *priv = led->priv;
-
-       switch (led->brightness) {
-       case LED_OFF:
-               if (led->led_type == ATH_LED_ASSOC ||
-                   led->led_type == ATH_LED_RADIO) {
-                       ath9k_hw_set_gpio(priv->ah, priv->ah->led_pin,
-                                         (led->led_type == ATH_LED_RADIO));
-                       priv->op_flags &= ~OP_LED_ASSOCIATED;
-                       if (led->led_type == ATH_LED_RADIO)
-                               priv->op_flags &= ~OP_LED_ON;
-               } else {
-                       priv->led_off_cnt++;
-               }
-               break;
-       case LED_FULL:
-               if (led->led_type == ATH_LED_ASSOC) {
-                       priv->op_flags |= OP_LED_ASSOCIATED;
-                       ieee80211_queue_delayed_work(priv->hw,
-                                            &priv->ath9k_led_blink_work, 0);
-               } else if (led->led_type == ATH_LED_RADIO) {
-                       ath9k_hw_set_gpio(priv->ah, priv->ah->led_pin, 0);
-                       priv->op_flags |= OP_LED_ON;
-               } else {
-                       priv->led_on_cnt++;
-               }
-               break;
-       default:
-               break;
-       }
-}
-
-static void ath9k_led_brightness(struct led_classdev *led_cdev,
-                                enum led_brightness brightness)
-{
-       struct ath_led *led = container_of(led_cdev, struct ath_led, led_cdev);
-       struct ath9k_htc_priv *priv = led->priv;
-
-       led->brightness = brightness;
-       if (!(priv->op_flags & OP_LED_DEINIT))
-               ieee80211_queue_delayed_work(priv->hw,
-                                            &led->brightness_work, 0);
-}
-
-static void ath9k_led_stop_brightness(struct ath9k_htc_priv *priv)
-{
-       cancel_delayed_work_sync(&priv->radio_led.brightness_work);
-       cancel_delayed_work_sync(&priv->assoc_led.brightness_work);
-       cancel_delayed_work_sync(&priv->tx_led.brightness_work);
-       cancel_delayed_work_sync(&priv->rx_led.brightness_work);
-}
-
-static int ath9k_register_led(struct ath9k_htc_priv *priv, struct ath_led *led,
-                             char *trigger)
-{
-       int ret;
-
-       led->priv = priv;
-       led->led_cdev.name = led->name;
-       led->led_cdev.default_trigger = trigger;
-       led->led_cdev.brightness_set = ath9k_led_brightness;
-
-       ret = led_classdev_register(wiphy_dev(priv->hw->wiphy), &led->led_cdev);
-       if (ret)
-               ath_print(ath9k_hw_common(priv->ah), ATH_DBG_FATAL,
-                         "Failed to register led:%s", led->name);
-       else
-               led->registered = 1;
-
-       INIT_DELAYED_WORK(&led->brightness_work, ath9k_led_brightness_work);
-
-       return ret;
-}
-
-static void ath9k_unregister_led(struct ath_led *led)
-{
-       if (led->registered) {
-               led_classdev_unregister(&led->led_cdev);
-               led->registered = 0;
-       }
-}
-
-void ath9k_deinit_leds(struct ath9k_htc_priv *priv)
-{
-       priv->op_flags |= OP_LED_DEINIT;
-       ath9k_unregister_led(&priv->assoc_led);
-       priv->op_flags &= ~OP_LED_ASSOCIATED;
-       ath9k_unregister_led(&priv->tx_led);
-       ath9k_unregister_led(&priv->rx_led);
-       ath9k_unregister_led(&priv->radio_led);
-}
-
-void ath9k_init_leds(struct ath9k_htc_priv *priv)
-{
-       char *trigger;
-       int ret;
-
-       if (AR_SREV_9287(priv->ah))
-               priv->ah->led_pin = ATH_LED_PIN_9287;
-       else if (AR_SREV_9271(priv->ah))
-               priv->ah->led_pin = ATH_LED_PIN_9271;
-       else if (AR_DEVID_7010(priv->ah))
-               priv->ah->led_pin = ATH_LED_PIN_7010;
-       else
-               priv->ah->led_pin = ATH_LED_PIN_DEF;
-
-       /* Configure gpio 1 for output */
-       ath9k_hw_cfg_output(priv->ah, priv->ah->led_pin,
-                           AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
-       /* LED off, active low */
-       ath9k_hw_set_gpio(priv->ah, priv->ah->led_pin, 1);
-
-       INIT_DELAYED_WORK(&priv->ath9k_led_blink_work, ath9k_led_blink_work);
-
-       trigger = ieee80211_get_radio_led_name(priv->hw);
-       snprintf(priv->radio_led.name, sizeof(priv->radio_led.name),
-               "ath9k-%s::radio", wiphy_name(priv->hw->wiphy));
-       ret = ath9k_register_led(priv, &priv->radio_led, trigger);
-       priv->radio_led.led_type = ATH_LED_RADIO;
-       if (ret)
-               goto fail;
-
-       trigger = ieee80211_get_assoc_led_name(priv->hw);
-       snprintf(priv->assoc_led.name, sizeof(priv->assoc_led.name),
-               "ath9k-%s::assoc", wiphy_name(priv->hw->wiphy));
-       ret = ath9k_register_led(priv, &priv->assoc_led, trigger);
-       priv->assoc_led.led_type = ATH_LED_ASSOC;
-       if (ret)
-               goto fail;
-
-       trigger = ieee80211_get_tx_led_name(priv->hw);
-       snprintf(priv->tx_led.name, sizeof(priv->tx_led.name),
-               "ath9k-%s::tx", wiphy_name(priv->hw->wiphy));
-       ret = ath9k_register_led(priv, &priv->tx_led, trigger);
-       priv->tx_led.led_type = ATH_LED_TX;
-       if (ret)
-               goto fail;
-
-       trigger = ieee80211_get_rx_led_name(priv->hw);
-       snprintf(priv->rx_led.name, sizeof(priv->rx_led.name),
-               "ath9k-%s::rx", wiphy_name(priv->hw->wiphy));
-       ret = ath9k_register_led(priv, &priv->rx_led, trigger);
-       priv->rx_led.led_type = ATH_LED_RX;
-       if (ret)
-               goto fail;
-
-       priv->op_flags &= ~OP_LED_DEINIT;
-
-       return;
-
-fail:
-       cancel_delayed_work_sync(&priv->ath9k_led_blink_work);
-       ath9k_deinit_leds(priv);
-}
-
-/*******************/
-/*     Rfkill     */
-/*******************/
-
-static bool ath_is_rfkill_set(struct ath9k_htc_priv *priv)
-{
-       return ath9k_hw_gpio_get(priv->ah, priv->ah->rfkill_gpio) ==
-               priv->ah->rfkill_polarity;
-}
-
-static void ath9k_htc_rfkill_poll_state(struct ieee80211_hw *hw)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-       bool blocked = !!ath_is_rfkill_set(priv);
-
-       wiphy_rfkill_set_hw_state(hw->wiphy, blocked);
-}
-
-void ath9k_start_rfkill_poll(struct ath9k_htc_priv *priv)
-{
-       if (priv->ah->caps.hw_caps & ATH9K_HW_CAP_RFSILENT)
-               wiphy_rfkill_start_polling(priv->hw->wiphy);
-}
-
-static void ath9k_htc_radio_enable(struct ieee80211_hw *hw)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-       struct ath_hw *ah = priv->ah;
-       struct ath_common *common = ath9k_hw_common(ah);
-       int ret;
-       u8 cmd_rsp;
-
-       if (!ah->curchan)
-               ah->curchan = ath9k_cmn_get_curchannel(hw, ah);
-
-       /* Reset the HW */
-       ret = ath9k_hw_reset(ah, ah->curchan, ah->caldata, false);
-       if (ret) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to reset hardware; reset status %d "
-                         "(freq %u MHz)\n", ret, ah->curchan->channel);
-       }
-
-       ath_update_txpow(priv);
-
-       /* Start RX */
-       WMI_CMD(WMI_START_RECV_CMDID);
-       ath9k_host_rx_init(priv);
-
-       /* Start TX */
-       htc_start(priv->htc);
-       spin_lock_bh(&priv->tx_lock);
-       priv->tx_queues_stop = false;
-       spin_unlock_bh(&priv->tx_lock);
-       ieee80211_wake_queues(hw);
-
-       WMI_CMD(WMI_ENABLE_INTR_CMDID);
-
-       /* Enable LED */
-       ath9k_hw_cfg_output(ah, ah->led_pin,
-                           AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
-       ath9k_hw_set_gpio(ah, ah->led_pin, 0);
-}
-
-static void ath9k_htc_radio_disable(struct ieee80211_hw *hw)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-       struct ath_hw *ah = priv->ah;
-       struct ath_common *common = ath9k_hw_common(ah);
-       int ret;
-       u8 cmd_rsp;
-
-       ath9k_htc_ps_wakeup(priv);
-
-       /* Disable LED */
-       ath9k_hw_set_gpio(ah, ah->led_pin, 1);
-       ath9k_hw_cfg_gpio_input(ah, ah->led_pin);
-
-       WMI_CMD(WMI_DISABLE_INTR_CMDID);
-
-       /* Stop TX */
-       ieee80211_stop_queues(hw);
-       htc_stop(priv->htc);
-       WMI_CMD(WMI_DRAIN_TXQ_ALL_CMDID);
-       skb_queue_purge(&priv->tx_queue);
-
-       /* Stop RX */
-       WMI_CMD(WMI_STOP_RECV_CMDID);
-
-       /*
-        * The MIB counters have to be disabled here,
-        * since the target doesn't do it.
-        */
-       ath9k_hw_disable_mib_counters(ah);
-
-       if (!ah->curchan)
-               ah->curchan = ath9k_cmn_get_curchannel(hw, ah);
-
-       /* Reset the HW */
-       ret = ath9k_hw_reset(ah, ah->curchan, ah->caldata, false);
-       if (ret) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to reset hardware; reset status %d "
-                         "(freq %u MHz)\n", ret, ah->curchan->channel);
-       }
-
-       /* Disable the PHY */
-       ath9k_hw_phy_disable(ah);
-
-       ath9k_htc_ps_restore(priv);
-       ath9k_htc_setpower(priv, ATH9K_PM_FULL_SLEEP);
-}
-
-/**********************/
-/* mac80211 Callbacks */
-/**********************/
-
-static int ath9k_htc_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
-{
-       struct ieee80211_hdr *hdr;
-       struct ath9k_htc_priv *priv = hw->priv;
-       int padpos, padsize, ret;
-
-       hdr = (struct ieee80211_hdr *) skb->data;
-
-       /* Add the padding after the header if this is not already done */
-       padpos = ath9k_cmn_padpos(hdr->frame_control);
-       padsize = padpos & 3;
-       if (padsize && skb->len > padpos) {
-               if (skb_headroom(skb) < padsize)
-                       return -1;
-               skb_push(skb, padsize);
-               memmove(skb->data, skb->data + padsize, padpos);
-       }
-
-       ret = ath9k_htc_tx_start(priv, skb);
-       if (ret != 0) {
-               if (ret == -ENOMEM) {
-                       ath_print(ath9k_hw_common(priv->ah), ATH_DBG_XMIT,
-                                 "Stopping TX queues\n");
-                       ieee80211_stop_queues(hw);
-                       spin_lock_bh(&priv->tx_lock);
-                       priv->tx_queues_stop = true;
-                       spin_unlock_bh(&priv->tx_lock);
-               } else {
-                       ath_print(ath9k_hw_common(priv->ah), ATH_DBG_XMIT,
-                                 "Tx failed");
-               }
-               goto fail_tx;
-       }
-
-       return 0;
-
-fail_tx:
-       dev_kfree_skb_any(skb);
-       return 0;
-}
-
-static int ath9k_htc_start(struct ieee80211_hw *hw)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-       struct ath_hw *ah = priv->ah;
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ieee80211_channel *curchan = hw->conf.channel;
-       struct ath9k_channel *init_channel;
-       int ret = 0;
-       enum htc_phymode mode;
-       __be16 htc_mode;
-       u8 cmd_rsp;
-
-       mutex_lock(&priv->mutex);
-
-       ath_print(common, ATH_DBG_CONFIG,
-                 "Starting driver with initial channel: %d MHz\n",
-                 curchan->center_freq);
-
-       /* Ensure that HW is awake before flushing RX */
-       ath9k_htc_setpower(priv, ATH9K_PM_AWAKE);
-       WMI_CMD(WMI_FLUSH_RECV_CMDID);
-
-       /* setup initial channel */
-       init_channel = ath9k_cmn_get_curchannel(hw, ah);
-
-       /* Reset SERDES registers */
-       ath9k_hw_configpcipowersave(ah, 0, 0);
-
-       ath9k_hw_htc_resetinit(ah);
-       ret = ath9k_hw_reset(ah, init_channel, ah->caldata, false);
-       if (ret) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to reset hardware; reset status %d "
-                         "(freq %u MHz)\n", ret, curchan->center_freq);
-               mutex_unlock(&priv->mutex);
-               return ret;
-       }
-
-       ath_update_txpow(priv);
-
-       mode = ath9k_htc_get_curmode(priv, init_channel);
-       htc_mode = cpu_to_be16(mode);
-       WMI_CMD_BUF(WMI_SET_MODE_CMDID, &htc_mode);
-       WMI_CMD(WMI_ATH_INIT_CMDID);
-       WMI_CMD(WMI_START_RECV_CMDID);
-
-       ath9k_host_rx_init(priv);
-
-       priv->op_flags &= ~OP_INVALID;
-       htc_start(priv->htc);
-
-       spin_lock_bh(&priv->tx_lock);
-       priv->tx_queues_stop = false;
-       spin_unlock_bh(&priv->tx_lock);
-
-       ieee80211_wake_queues(hw);
-
-       mutex_unlock(&priv->mutex);
-
-       return ret;
-}
-
-static void ath9k_htc_stop(struct ieee80211_hw *hw)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-       struct ath_hw *ah = priv->ah;
-       struct ath_common *common = ath9k_hw_common(ah);
-       int ret = 0;
-       u8 cmd_rsp;
-
-       mutex_lock(&priv->mutex);
-
-       if (priv->op_flags & OP_INVALID) {
-               ath_print(common, ATH_DBG_ANY, "Device not present\n");
-               mutex_unlock(&priv->mutex);
-               return;
-       }
-
-       /* Cancel all the running timers/work .. */
-       cancel_work_sync(&priv->ps_work);
-       cancel_delayed_work_sync(&priv->ath9k_ani_work);
-       cancel_delayed_work_sync(&priv->ath9k_led_blink_work);
-       ath9k_led_stop_brightness(priv);
-
-       ath9k_htc_ps_wakeup(priv);
-       htc_stop(priv->htc);
-       WMI_CMD(WMI_DISABLE_INTR_CMDID);
-       WMI_CMD(WMI_DRAIN_TXQ_ALL_CMDID);
-       WMI_CMD(WMI_STOP_RECV_CMDID);
-       skb_queue_purge(&priv->tx_queue);
-
-       /* Remove monitor interface here */
-       if (ah->opmode == NL80211_IFTYPE_MONITOR) {
-               if (ath9k_htc_remove_monitor_interface(priv))
-                       ath_print(common, ATH_DBG_FATAL,
-                                 "Unable to remove monitor interface\n");
-               else
-                       ath_print(common, ATH_DBG_CONFIG,
-                                 "Monitor interface removed\n");
-       }
-
-       ath9k_hw_phy_disable(ah);
-       ath9k_hw_disable(ah);
-       ath9k_hw_configpcipowersave(ah, 1, 1);
-       ath9k_htc_ps_restore(priv);
-       ath9k_htc_setpower(priv, ATH9K_PM_FULL_SLEEP);
-
-       priv->op_flags |= OP_INVALID;
-
-       ath_print(common, ATH_DBG_CONFIG, "Driver halt\n");
-       mutex_unlock(&priv->mutex);
-}
-
-static int ath9k_htc_add_interface(struct ieee80211_hw *hw,
-                                  struct ieee80211_vif *vif)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-       struct ath9k_htc_vif *avp = (void *)vif->drv_priv;
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       struct ath9k_htc_target_vif hvif;
-       int ret = 0;
-       u8 cmd_rsp;
-
-       mutex_lock(&priv->mutex);
-
-       /* Only one interface for now */
-       if (priv->nvifs > 0) {
-               ret = -ENOBUFS;
-               goto out;
-       }
-
-       ath9k_htc_ps_wakeup(priv);
-       memset(&hvif, 0, sizeof(struct ath9k_htc_target_vif));
-       memcpy(&hvif.myaddr, vif->addr, ETH_ALEN);
-
-       switch (vif->type) {
-       case NL80211_IFTYPE_STATION:
-               hvif.opmode = cpu_to_be32(HTC_M_STA);
-               break;
-       case NL80211_IFTYPE_ADHOC:
-               hvif.opmode = cpu_to_be32(HTC_M_IBSS);
-               break;
-       default:
-               ath_print(common, ATH_DBG_FATAL,
-                       "Interface type %d not yet supported\n", vif->type);
-               ret = -EOPNOTSUPP;
-               goto out;
-       }
-
-       ath_print(common, ATH_DBG_CONFIG,
-                 "Attach a VIF of type: %d\n", vif->type);
-
-       priv->ah->opmode = vif->type;
-
-       /* Index starts from zero on the target */
-       avp->index = hvif.index = priv->nvifs;
-       hvif.rtsthreshold = cpu_to_be16(2304);
-       WMI_CMD_BUF(WMI_VAP_CREATE_CMDID, &hvif);
-       if (ret)
-               goto out;
-
-       priv->nvifs++;
-
-       /*
-        * We need a node in target to tx mgmt frames
-        * before association.
-        */
-       ret = ath9k_htc_add_station(priv, vif, NULL);
-       if (ret)
-               goto out;
-
-       ret = ath9k_htc_update_cap_target(priv);
-       if (ret)
-               ath_print(common, ATH_DBG_CONFIG, "Failed to update"
-                         " capability in target \n");
-
-       priv->vif = vif;
-out:
-       ath9k_htc_ps_restore(priv);
-       mutex_unlock(&priv->mutex);
-
-       return ret;
-}
-
-static void ath9k_htc_remove_interface(struct ieee80211_hw *hw,
-                                      struct ieee80211_vif *vif)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       struct ath9k_htc_vif *avp = (void *)vif->drv_priv;
-       struct ath9k_htc_target_vif hvif;
-       int ret = 0;
-       u8 cmd_rsp;
-
-       ath_print(common, ATH_DBG_CONFIG, "Detach Interface\n");
-
-       mutex_lock(&priv->mutex);
-       ath9k_htc_ps_wakeup(priv);
-
-       memset(&hvif, 0, sizeof(struct ath9k_htc_target_vif));
-       memcpy(&hvif.myaddr, vif->addr, ETH_ALEN);
-       hvif.index = avp->index;
-       WMI_CMD_BUF(WMI_VAP_REMOVE_CMDID, &hvif);
-       priv->nvifs--;
-
-       ath9k_htc_remove_station(priv, vif, NULL);
-       priv->vif = NULL;
-
-       ath9k_htc_ps_restore(priv);
-       mutex_unlock(&priv->mutex);
-}
-
-static int ath9k_htc_config(struct ieee80211_hw *hw, u32 changed)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       struct ieee80211_conf *conf = &hw->conf;
-
-       mutex_lock(&priv->mutex);
-
-       if (changed & IEEE80211_CONF_CHANGE_IDLE) {
-               bool enable_radio = false;
-               bool idle = !!(conf->flags & IEEE80211_CONF_IDLE);
-
-               mutex_lock(&priv->htc_pm_lock);
-               if (!idle && priv->ps_idle)
-                       enable_radio = true;
-               priv->ps_idle = idle;
-               mutex_unlock(&priv->htc_pm_lock);
-
-               if (enable_radio) {
-                       ath_print(common, ATH_DBG_CONFIG,
-                                 "not-idle: enabling radio\n");
-                       ath9k_htc_setpower(priv, ATH9K_PM_AWAKE);
-                       ath9k_htc_radio_enable(hw);
-               }
-       }
-
-       if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
-               struct ieee80211_channel *curchan = hw->conf.channel;
-               int pos = curchan->hw_value;
-
-               ath_print(common, ATH_DBG_CONFIG, "Set channel: %d MHz\n",
-                         curchan->center_freq);
-
-               ath9k_cmn_update_ichannel(hw, &priv->ah->channels[pos]);
-
-               if (ath9k_htc_set_channel(priv, hw, &priv->ah->channels[pos]) < 0) {
-                       ath_print(common, ATH_DBG_FATAL,
-                                 "Unable to set channel\n");
-                       mutex_unlock(&priv->mutex);
-                       return -EINVAL;
-               }
-
-       }
-       if (changed & IEEE80211_CONF_CHANGE_PS) {
-               if (conf->flags & IEEE80211_CONF_PS) {
-                       ath9k_htc_setpower(priv, ATH9K_PM_NETWORK_SLEEP);
-                       priv->ps_enabled = true;
-               } else {
-                       priv->ps_enabled = false;
-                       cancel_work_sync(&priv->ps_work);
-                       ath9k_htc_setpower(priv, ATH9K_PM_AWAKE);
-               }
-       }
-
-       if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
-               if (conf->flags & IEEE80211_CONF_MONITOR) {
-                       if (ath9k_htc_add_monitor_interface(priv))
-                               ath_print(common, ATH_DBG_FATAL,
-                                         "Failed to set monitor mode\n");
-                       else
-                               ath_print(common, ATH_DBG_CONFIG,
-                                         "HW opmode set to Monitor mode\n");
-               }
-       }
-
-       if (changed & IEEE80211_CONF_CHANGE_IDLE) {
-               mutex_lock(&priv->htc_pm_lock);
-               if (!priv->ps_idle) {
-                       mutex_unlock(&priv->htc_pm_lock);
-                       goto out;
-               }
-               mutex_unlock(&priv->htc_pm_lock);
-
-               ath_print(common, ATH_DBG_CONFIG,
-                         "idle: disabling radio\n");
-               ath9k_htc_radio_disable(hw);
-       }
-
-out:
-       mutex_unlock(&priv->mutex);
-       return 0;
-}
-
-#define SUPPORTED_FILTERS                      \
-       (FIF_PROMISC_IN_BSS |                   \
-       FIF_ALLMULTI |                          \
-       FIF_CONTROL |                           \
-       FIF_PSPOLL |                            \
-       FIF_OTHER_BSS |                         \
-       FIF_BCN_PRBRESP_PROMISC |               \
-       FIF_FCSFAIL)
-
-static void ath9k_htc_configure_filter(struct ieee80211_hw *hw,
-                                      unsigned int changed_flags,
-                                      unsigned int *total_flags,
-                                      u64 multicast)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-       u32 rfilt;
-
-       mutex_lock(&priv->mutex);
-       ath9k_htc_ps_wakeup(priv);
-
-       changed_flags &= SUPPORTED_FILTERS;
-       *total_flags &= SUPPORTED_FILTERS;
-
-       priv->rxfilter = *total_flags;
-       rfilt = ath9k_htc_calcrxfilter(priv);
-       ath9k_hw_setrxfilter(priv->ah, rfilt);
-
-       ath_print(ath9k_hw_common(priv->ah), ATH_DBG_CONFIG,
-                 "Set HW RX filter: 0x%x\n", rfilt);
-
-       ath9k_htc_ps_restore(priv);
-       mutex_unlock(&priv->mutex);
-}
-
-static int ath9k_htc_sta_add(struct ieee80211_hw *hw,
-                            struct ieee80211_vif *vif,
-                            struct ieee80211_sta *sta)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-       int ret;
-
-       mutex_lock(&priv->mutex);
-       ath9k_htc_ps_wakeup(priv);
-       ret = ath9k_htc_add_station(priv, vif, sta);
-       if (!ret)
-               ath9k_htc_init_rate(priv, sta);
-       ath9k_htc_ps_restore(priv);
-       mutex_unlock(&priv->mutex);
-
-       return ret;
-}
-
-static int ath9k_htc_sta_remove(struct ieee80211_hw *hw,
-                               struct ieee80211_vif *vif,
-                               struct ieee80211_sta *sta)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-       int ret;
-
-       mutex_lock(&priv->mutex);
-       ath9k_htc_ps_wakeup(priv);
-       ret = ath9k_htc_remove_station(priv, vif, sta);
-       ath9k_htc_ps_restore(priv);
-       mutex_unlock(&priv->mutex);
-
-       return ret;
-}
-
-static int ath9k_htc_conf_tx(struct ieee80211_hw *hw, u16 queue,
-                            const struct ieee80211_tx_queue_params *params)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       struct ath9k_tx_queue_info qi;
-       int ret = 0, qnum;
-
-       if (queue >= WME_NUM_AC)
-               return 0;
-
-       mutex_lock(&priv->mutex);
-       ath9k_htc_ps_wakeup(priv);
-
-       memset(&qi, 0, sizeof(struct ath9k_tx_queue_info));
-
-       qi.tqi_aifs = params->aifs;
-       qi.tqi_cwmin = params->cw_min;
-       qi.tqi_cwmax = params->cw_max;
-       qi.tqi_burstTime = params->txop;
-
-       qnum = get_hw_qnum(queue, priv->hwq_map);
-
-       ath_print(common, ATH_DBG_CONFIG,
-                 "Configure tx [queue/hwq] [%d/%d],  "
-                 "aifs: %d, cw_min: %d, cw_max: %d, txop: %d\n",
-                 queue, qnum, params->aifs, params->cw_min,
-                 params->cw_max, params->txop);
-
-       ret = ath_htc_txq_update(priv, qnum, &qi);
-       if (ret) {
-               ath_print(common, ATH_DBG_FATAL, "TXQ Update failed\n");
-               goto out;
-       }
-
-       if ((priv->ah->opmode == NL80211_IFTYPE_ADHOC) &&
-           (qnum == priv->hwq_map[WME_AC_BE]))
-                   ath9k_htc_beaconq_config(priv);
-out:
-       ath9k_htc_ps_restore(priv);
-       mutex_unlock(&priv->mutex);
-
-       return ret;
-}
-
-static int ath9k_htc_set_key(struct ieee80211_hw *hw,
-                            enum set_key_cmd cmd,
-                            struct ieee80211_vif *vif,
-                            struct ieee80211_sta *sta,
-                            struct ieee80211_key_conf *key)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       int ret = 0;
-
-       if (htc_modparam_nohwcrypt)
-               return -ENOSPC;
-
-       mutex_lock(&priv->mutex);
-       ath_print(common, ATH_DBG_CONFIG, "Set HW Key\n");
-       ath9k_htc_ps_wakeup(priv);
-
-       switch (cmd) {
-       case SET_KEY:
-               ret = ath9k_cmn_key_config(common, vif, sta, key);
-               if (ret >= 0) {
-                       key->hw_key_idx = ret;
-                       /* push IV and Michael MIC generation to stack */
-                       key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
-                       if (key->alg == ALG_TKIP)
-                               key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
-                       if (priv->ah->sw_mgmt_crypto && key->alg == ALG_CCMP)
-                               key->flags |= IEEE80211_KEY_FLAG_SW_MGMT;
-                       ret = 0;
-               }
-               break;
-       case DISABLE_KEY:
-               ath9k_cmn_key_delete(common, key);
-               break;
-       default:
-               ret = -EINVAL;
-       }
-
-       ath9k_htc_ps_restore(priv);
-       mutex_unlock(&priv->mutex);
-
-       return ret;
-}
-
-static void ath9k_htc_bss_info_changed(struct ieee80211_hw *hw,
-                                      struct ieee80211_vif *vif,
-                                      struct ieee80211_bss_conf *bss_conf,
-                                      u32 changed)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-       struct ath_hw *ah = priv->ah;
-       struct ath_common *common = ath9k_hw_common(ah);
-
-       mutex_lock(&priv->mutex);
-       ath9k_htc_ps_wakeup(priv);
-
-       if (changed & BSS_CHANGED_ASSOC) {
-               common->curaid = bss_conf->assoc ?
-                                bss_conf->aid : 0;
-               ath_print(common, ATH_DBG_CONFIG, "BSS Changed ASSOC %d\n",
-                       bss_conf->assoc);
-
-               if (bss_conf->assoc) {
-                       priv->op_flags |= OP_ASSOCIATED;
-                       ath_start_ani(priv);
-               } else {
-                       priv->op_flags &= ~OP_ASSOCIATED;
-                       cancel_delayed_work_sync(&priv->ath9k_ani_work);
-               }
-       }
-
-       if (changed & BSS_CHANGED_BSSID) {
-               /* Set BSSID */
-               memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
-               ath9k_hw_write_associd(ah);
-
-               ath_print(common, ATH_DBG_CONFIG,
-                         "BSSID: %pM aid: 0x%x\n",
-                         common->curbssid, common->curaid);
-       }
-
-       if ((changed & BSS_CHANGED_BEACON_INT) ||
-           (changed & BSS_CHANGED_BEACON) ||
-           ((changed & BSS_CHANGED_BEACON_ENABLED) &&
-           bss_conf->enable_beacon)) {
-               priv->op_flags |= OP_ENABLE_BEACON;
-               ath9k_htc_beacon_config(priv, vif);
-       }
-
-       if ((changed & BSS_CHANGED_BEACON_ENABLED) &&
-           !bss_conf->enable_beacon) {
-               priv->op_flags &= ~OP_ENABLE_BEACON;
-               ath9k_htc_beacon_config(priv, vif);
-       }
-
-       if (changed & BSS_CHANGED_ERP_PREAMBLE) {
-               ath_print(common, ATH_DBG_CONFIG, "BSS Changed PREAMBLE %d\n",
-                         bss_conf->use_short_preamble);
-               if (bss_conf->use_short_preamble)
-                       priv->op_flags |= OP_PREAMBLE_SHORT;
-               else
-                       priv->op_flags &= ~OP_PREAMBLE_SHORT;
-       }
-
-       if (changed & BSS_CHANGED_ERP_CTS_PROT) {
-               ath_print(common, ATH_DBG_CONFIG, "BSS Changed CTS PROT %d\n",
-                         bss_conf->use_cts_prot);
-               if (bss_conf->use_cts_prot &&
-                   hw->conf.channel->band != IEEE80211_BAND_5GHZ)
-                       priv->op_flags |= OP_PROTECT_ENABLE;
-               else
-                       priv->op_flags &= ~OP_PROTECT_ENABLE;
-       }
-
-       if (changed & BSS_CHANGED_ERP_SLOT) {
-               if (bss_conf->use_short_slot)
-                       ah->slottime = 9;
-               else
-                       ah->slottime = 20;
-
-               ath9k_hw_init_global_settings(ah);
-       }
-
-       if (changed & BSS_CHANGED_HT)
-               ath9k_htc_update_rate(priv, vif, bss_conf);
-
-       ath9k_htc_ps_restore(priv);
-       mutex_unlock(&priv->mutex);
-}
-
-static u64 ath9k_htc_get_tsf(struct ieee80211_hw *hw)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-       u64 tsf;
-
-       mutex_lock(&priv->mutex);
-       ath9k_htc_ps_wakeup(priv);
-       tsf = ath9k_hw_gettsf64(priv->ah);
-       ath9k_htc_ps_restore(priv);
-       mutex_unlock(&priv->mutex);
-
-       return tsf;
-}
-
-static void ath9k_htc_set_tsf(struct ieee80211_hw *hw, u64 tsf)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-
-       mutex_lock(&priv->mutex);
-       ath9k_htc_ps_wakeup(priv);
-       ath9k_hw_settsf64(priv->ah, tsf);
-       ath9k_htc_ps_restore(priv);
-       mutex_unlock(&priv->mutex);
-}
-
-static void ath9k_htc_reset_tsf(struct ieee80211_hw *hw)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-
-       mutex_lock(&priv->mutex);
-       ath9k_htc_ps_wakeup(priv);
-       ath9k_hw_reset_tsf(priv->ah);
-       ath9k_htc_ps_restore(priv);
-       mutex_unlock(&priv->mutex);
-}
-
-static int ath9k_htc_ampdu_action(struct ieee80211_hw *hw,
-                                 struct ieee80211_vif *vif,
-                                 enum ieee80211_ampdu_mlme_action action,
-                                 struct ieee80211_sta *sta,
-                                 u16 tid, u16 *ssn)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-       struct ath9k_htc_sta *ista;
-       int ret = 0;
-
-       switch (action) {
-       case IEEE80211_AMPDU_RX_START:
-               break;
-       case IEEE80211_AMPDU_RX_STOP:
-               break;
-       case IEEE80211_AMPDU_TX_START:
-               ret = ath9k_htc_tx_aggr_oper(priv, vif, sta, action, tid);
-               if (!ret)
-                       ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-               break;
-       case IEEE80211_AMPDU_TX_STOP:
-               ath9k_htc_tx_aggr_oper(priv, vif, sta, action, tid);
-               ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-               break;
-       case IEEE80211_AMPDU_TX_OPERATIONAL:
-               ista = (struct ath9k_htc_sta *) sta->drv_priv;
-               spin_lock_bh(&priv->tx_lock);
-               ista->tid_state[tid] = AGGR_OPERATIONAL;
-               spin_unlock_bh(&priv->tx_lock);
-               break;
-       default:
-               ath_print(ath9k_hw_common(priv->ah), ATH_DBG_FATAL,
-                         "Unknown AMPDU action\n");
-       }
-
-       return ret;
-}
-
-static void ath9k_htc_sw_scan_start(struct ieee80211_hw *hw)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-
-       mutex_lock(&priv->mutex);
-       spin_lock_bh(&priv->beacon_lock);
-       priv->op_flags |= OP_SCANNING;
-       spin_unlock_bh(&priv->beacon_lock);
-       cancel_work_sync(&priv->ps_work);
-       cancel_delayed_work_sync(&priv->ath9k_ani_work);
-       mutex_unlock(&priv->mutex);
-}
-
-static void ath9k_htc_sw_scan_complete(struct ieee80211_hw *hw)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-
-       mutex_lock(&priv->mutex);
-       ath9k_htc_ps_wakeup(priv);
-       spin_lock_bh(&priv->beacon_lock);
-       priv->op_flags &= ~OP_SCANNING;
-       spin_unlock_bh(&priv->beacon_lock);
-       priv->op_flags |= OP_FULL_RESET;
-       if (priv->op_flags & OP_ASSOCIATED)
-               ath9k_htc_beacon_config(priv, priv->vif);
-       ath_start_ani(priv);
-       ath9k_htc_ps_restore(priv);
-       mutex_unlock(&priv->mutex);
-}
-
-static int ath9k_htc_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
-{
-       return 0;
-}
-
-static void ath9k_htc_set_coverage_class(struct ieee80211_hw *hw,
-                                        u8 coverage_class)
-{
-       struct ath9k_htc_priv *priv = hw->priv;
-
-       mutex_lock(&priv->mutex);
-       ath9k_htc_ps_wakeup(priv);
-       priv->ah->coverage_class = coverage_class;
-       ath9k_hw_init_global_settings(priv->ah);
-       ath9k_htc_ps_restore(priv);
-       mutex_unlock(&priv->mutex);
-}
-
-struct ieee80211_ops ath9k_htc_ops = {
-       .tx                 = ath9k_htc_tx,
-       .start              = ath9k_htc_start,
-       .stop               = ath9k_htc_stop,
-       .add_interface      = ath9k_htc_add_interface,
-       .remove_interface   = ath9k_htc_remove_interface,
-       .config             = ath9k_htc_config,
-       .configure_filter   = ath9k_htc_configure_filter,
-       .sta_add            = ath9k_htc_sta_add,
-       .sta_remove         = ath9k_htc_sta_remove,
-       .conf_tx            = ath9k_htc_conf_tx,
-       .bss_info_changed   = ath9k_htc_bss_info_changed,
-       .set_key            = ath9k_htc_set_key,
-       .get_tsf            = ath9k_htc_get_tsf,
-       .set_tsf            = ath9k_htc_set_tsf,
-       .reset_tsf          = ath9k_htc_reset_tsf,
-       .ampdu_action       = ath9k_htc_ampdu_action,
-       .sw_scan_start      = ath9k_htc_sw_scan_start,
-       .sw_scan_complete   = ath9k_htc_sw_scan_complete,
-       .set_rts_threshold  = ath9k_htc_set_rts_threshold,
-       .rfkill_poll        = ath9k_htc_rfkill_poll_state,
-       .set_coverage_class = ath9k_htc_set_coverage_class,
-};
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
deleted file mode 100644 (file)
index f06eeab..0000000
+++ /dev/null
@@ -1,738 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "htc.h"
-
-/******/
-/* TX */
-/******/
-
-#define ATH9K_HTC_INIT_TXQ(subtype) do {                       \
-               qi.tqi_subtype = subtype;                       \
-               qi.tqi_aifs = ATH9K_TXQ_USEDEFAULT;             \
-               qi.tqi_cwmin = ATH9K_TXQ_USEDEFAULT;            \
-               qi.tqi_cwmax = ATH9K_TXQ_USEDEFAULT;            \
-               qi.tqi_physCompBuf = 0;                         \
-               qi.tqi_qflags = TXQ_FLAG_TXEOLINT_ENABLE |      \
-                       TXQ_FLAG_TXDESCINT_ENABLE;              \
-       } while (0)
-
-int get_hw_qnum(u16 queue, int *hwq_map)
-{
-       switch (queue) {
-       case 0:
-               return hwq_map[WME_AC_VO];
-       case 1:
-               return hwq_map[WME_AC_VI];
-       case 2:
-               return hwq_map[WME_AC_BE];
-       case 3:
-               return hwq_map[WME_AC_BK];
-       default:
-               return hwq_map[WME_AC_BE];
-       }
-}
-
-int ath_htc_txq_update(struct ath9k_htc_priv *priv, int qnum,
-                      struct ath9k_tx_queue_info *qinfo)
-{
-       struct ath_hw *ah = priv->ah;
-       int error = 0;
-       struct ath9k_tx_queue_info qi;
-
-       ath9k_hw_get_txq_props(ah, qnum, &qi);
-
-       qi.tqi_aifs = qinfo->tqi_aifs;
-       qi.tqi_cwmin = qinfo->tqi_cwmin / 2; /* XXX */
-       qi.tqi_cwmax = qinfo->tqi_cwmax;
-       qi.tqi_burstTime = qinfo->tqi_burstTime;
-       qi.tqi_readyTime = qinfo->tqi_readyTime;
-
-       if (!ath9k_hw_set_txq_props(ah, qnum, &qi)) {
-               ath_print(ath9k_hw_common(ah), ATH_DBG_FATAL,
-                         "Unable to update hardware queue %u!\n", qnum);
-               error = -EIO;
-       } else {
-               ath9k_hw_resettxqueue(ah, qnum);
-       }
-
-       return error;
-}
-
-int ath9k_htc_tx_start(struct ath9k_htc_priv *priv, struct sk_buff *skb)
-{
-       struct ieee80211_hdr *hdr;
-       struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
-       struct ieee80211_sta *sta = tx_info->control.sta;
-       struct ath9k_htc_sta *ista;
-       struct ath9k_htc_tx_ctl tx_ctl;
-       enum htc_endpoint_id epid;
-       u16 qnum;
-       __le16 fc;
-       u8 *tx_fhdr;
-       u8 sta_idx, vif_idx;
-
-       hdr = (struct ieee80211_hdr *) skb->data;
-       fc = hdr->frame_control;
-
-       if (tx_info->control.vif &&
-                       (struct ath9k_htc_vif *) tx_info->control.vif->drv_priv)
-               vif_idx = ((struct ath9k_htc_vif *)
-                               tx_info->control.vif->drv_priv)->index;
-       else
-               vif_idx = priv->nvifs;
-
-       if (sta) {
-               ista = (struct ath9k_htc_sta *) sta->drv_priv;
-               sta_idx = ista->index;
-       } else {
-               sta_idx = 0;
-       }
-
-       memset(&tx_ctl, 0, sizeof(struct ath9k_htc_tx_ctl));
-
-       if (ieee80211_is_data(fc)) {
-               struct tx_frame_hdr tx_hdr;
-               u8 *qc;
-
-               memset(&tx_hdr, 0, sizeof(struct tx_frame_hdr));
-
-               tx_hdr.node_idx = sta_idx;
-               tx_hdr.vif_idx = vif_idx;
-
-               if (tx_info->flags & IEEE80211_TX_CTL_AMPDU) {
-                       tx_ctl.type = ATH9K_HTC_AMPDU;
-                       tx_hdr.data_type = ATH9K_HTC_AMPDU;
-               } else {
-                       tx_ctl.type = ATH9K_HTC_NORMAL;
-                       tx_hdr.data_type = ATH9K_HTC_NORMAL;
-               }
-
-               if (ieee80211_is_data_qos(fc)) {
-                       qc = ieee80211_get_qos_ctl(hdr);
-                       tx_hdr.tidno = qc[0] & IEEE80211_QOS_CTL_TID_MASK;
-               }
-
-               /* Check for RTS protection */
-               if (priv->hw->wiphy->rts_threshold != (u32) -1)
-                       if (skb->len > priv->hw->wiphy->rts_threshold)
-                               tx_hdr.flags |= ATH9K_HTC_TX_RTSCTS;
-
-               /* CTS-to-self */
-               if (!(tx_hdr.flags & ATH9K_HTC_TX_RTSCTS) &&
-                   (priv->op_flags & OP_PROTECT_ENABLE))
-                       tx_hdr.flags |= ATH9K_HTC_TX_CTSONLY;
-
-               tx_hdr.key_type = ath9k_cmn_get_hw_crypto_keytype(skb);
-               if (tx_hdr.key_type == ATH9K_KEY_TYPE_CLEAR)
-                       tx_hdr.keyix = (u8) ATH9K_TXKEYIX_INVALID;
-               else
-                       tx_hdr.keyix = tx_info->control.hw_key->hw_key_idx;
-
-               tx_fhdr = skb_push(skb, sizeof(tx_hdr));
-               memcpy(tx_fhdr, (u8 *) &tx_hdr, sizeof(tx_hdr));
-
-               qnum = skb_get_queue_mapping(skb);
-
-               switch (qnum) {
-               case 0:
-                       TX_QSTAT_INC(WME_AC_VO);
-                       epid = priv->data_vo_ep;
-                       break;
-               case 1:
-                       TX_QSTAT_INC(WME_AC_VI);
-                       epid = priv->data_vi_ep;
-                       break;
-               case 2:
-                       TX_QSTAT_INC(WME_AC_BE);
-                       epid = priv->data_be_ep;
-                       break;
-               case 3:
-               default:
-                       TX_QSTAT_INC(WME_AC_BK);
-                       epid = priv->data_bk_ep;
-                       break;
-               }
-       } else {
-               struct tx_mgmt_hdr mgmt_hdr;
-
-               memset(&mgmt_hdr, 0, sizeof(struct tx_mgmt_hdr));
-
-               tx_ctl.type = ATH9K_HTC_NORMAL;
-
-               mgmt_hdr.node_idx = sta_idx;
-               mgmt_hdr.vif_idx = vif_idx;
-               mgmt_hdr.tidno = 0;
-               mgmt_hdr.flags = 0;
-
-               mgmt_hdr.key_type = ath9k_cmn_get_hw_crypto_keytype(skb);
-               if (mgmt_hdr.key_type == ATH9K_KEY_TYPE_CLEAR)
-                       mgmt_hdr.keyix = (u8) ATH9K_TXKEYIX_INVALID;
-               else
-                       mgmt_hdr.keyix = tx_info->control.hw_key->hw_key_idx;
-
-               tx_fhdr = skb_push(skb, sizeof(mgmt_hdr));
-               memcpy(tx_fhdr, (u8 *) &mgmt_hdr, sizeof(mgmt_hdr));
-               epid = priv->mgmt_ep;
-       }
-
-       return htc_send(priv->htc, skb, epid, &tx_ctl);
-}
-
-static bool ath9k_htc_check_tx_aggr(struct ath9k_htc_priv *priv,
-                                   struct ath9k_htc_sta *ista, u8 tid)
-{
-       bool ret = false;
-
-       spin_lock_bh(&priv->tx_lock);
-       if ((tid < ATH9K_HTC_MAX_TID) && (ista->tid_state[tid] == AGGR_STOP))
-               ret = true;
-       spin_unlock_bh(&priv->tx_lock);
-
-       return ret;
-}
-
-void ath9k_tx_tasklet(unsigned long data)
-{
-       struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *)data;
-       struct ieee80211_sta *sta;
-       struct ieee80211_hdr *hdr;
-       struct ieee80211_tx_info *tx_info;
-       struct sk_buff *skb = NULL;
-       __le16 fc;
-
-       while ((skb = skb_dequeue(&priv->tx_queue)) != NULL) {
-
-               hdr = (struct ieee80211_hdr *) skb->data;
-               fc = hdr->frame_control;
-               tx_info = IEEE80211_SKB_CB(skb);
-
-               memset(&tx_info->status, 0, sizeof(tx_info->status));
-
-               rcu_read_lock();
-
-               sta = ieee80211_find_sta(priv->vif, hdr->addr1);
-               if (!sta) {
-                       rcu_read_unlock();
-                       ieee80211_tx_status(priv->hw, skb);
-                       continue;
-               }
-
-               /* Check if we need to start aggregation */
-
-               if (sta && conf_is_ht(&priv->hw->conf) &&
-                   !(skb->protocol == cpu_to_be16(ETH_P_PAE))) {
-                       if (ieee80211_is_data_qos(fc)) {
-                               u8 *qc, tid;
-                               struct ath9k_htc_sta *ista;
-
-                               qc = ieee80211_get_qos_ctl(hdr);
-                               tid = qc[0] & 0xf;
-                               ista = (struct ath9k_htc_sta *)sta->drv_priv;
-
-                               if (ath9k_htc_check_tx_aggr(priv, ista, tid)) {
-                                       ieee80211_start_tx_ba_session(sta, tid);
-                                       spin_lock_bh(&priv->tx_lock);
-                                       ista->tid_state[tid] = AGGR_PROGRESS;
-                                       spin_unlock_bh(&priv->tx_lock);
-                               }
-                       }
-               }
-
-               rcu_read_unlock();
-
-               /* Send status to mac80211 */
-               ieee80211_tx_status(priv->hw, skb);
-       }
-
-       /* Wake TX queues if needed */
-       spin_lock_bh(&priv->tx_lock);
-       if (priv->tx_queues_stop) {
-               priv->tx_queues_stop = false;
-               spin_unlock_bh(&priv->tx_lock);
-               ath_print(ath9k_hw_common(priv->ah), ATH_DBG_XMIT,
-                         "Waking up TX queues\n");
-               ieee80211_wake_queues(priv->hw);
-               return;
-       }
-       spin_unlock_bh(&priv->tx_lock);
-}
-
-void ath9k_htc_txep(void *drv_priv, struct sk_buff *skb,
-                   enum htc_endpoint_id ep_id, bool txok)
-{
-       struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *) drv_priv;
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       struct ieee80211_tx_info *tx_info;
-
-       if (!skb)
-               return;
-
-       if (ep_id == priv->mgmt_ep) {
-               skb_pull(skb, sizeof(struct tx_mgmt_hdr));
-       } else if ((ep_id == priv->data_bk_ep) ||
-                  (ep_id == priv->data_be_ep) ||
-                  (ep_id == priv->data_vi_ep) ||
-                  (ep_id == priv->data_vo_ep)) {
-               skb_pull(skb, sizeof(struct tx_frame_hdr));
-       } else {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unsupported TX EPID: %d\n", ep_id);
-               dev_kfree_skb_any(skb);
-               return;
-       }
-
-       tx_info = IEEE80211_SKB_CB(skb);
-
-       if (txok)
-               tx_info->flags |= IEEE80211_TX_STAT_ACK;
-
-       skb_queue_tail(&priv->tx_queue, skb);
-       tasklet_schedule(&priv->tx_tasklet);
-}
-
-int ath9k_tx_init(struct ath9k_htc_priv *priv)
-{
-       skb_queue_head_init(&priv->tx_queue);
-       return 0;
-}
-
-void ath9k_tx_cleanup(struct ath9k_htc_priv *priv)
-{
-
-}
-
-bool ath9k_htc_txq_setup(struct ath9k_htc_priv *priv, int subtype)
-{
-       struct ath_hw *ah = priv->ah;
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath9k_tx_queue_info qi;
-       int qnum;
-
-       memset(&qi, 0, sizeof(qi));
-       ATH9K_HTC_INIT_TXQ(subtype);
-
-       qnum = ath9k_hw_setuptxqueue(priv->ah, ATH9K_TX_QUEUE_DATA, &qi);
-       if (qnum == -1)
-               return false;
-
-       if (qnum >= ARRAY_SIZE(priv->hwq_map)) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "qnum %u out of range, max %u!\n",
-                         qnum, (unsigned int)ARRAY_SIZE(priv->hwq_map));
-               ath9k_hw_releasetxqueue(ah, qnum);
-               return false;
-       }
-
-       priv->hwq_map[subtype] = qnum;
-       return true;
-}
-
-int ath9k_htc_cabq_setup(struct ath9k_htc_priv *priv)
-{
-       struct ath9k_tx_queue_info qi;
-
-       memset(&qi, 0, sizeof(qi));
-       ATH9K_HTC_INIT_TXQ(0);
-
-       return ath9k_hw_setuptxqueue(priv->ah, ATH9K_TX_QUEUE_CAB, &qi);
-}
-
-/******/
-/* RX */
-/******/
-
-/*
- * Calculate the RX filter to be set in the HW.
- */
-u32 ath9k_htc_calcrxfilter(struct ath9k_htc_priv *priv)
-{
-#define        RX_FILTER_PRESERVE (ATH9K_RX_FILTER_PHYERR | ATH9K_RX_FILTER_PHYRADAR)
-
-       struct ath_hw *ah = priv->ah;
-       u32 rfilt;
-
-       rfilt = (ath9k_hw_getrxfilter(ah) & RX_FILTER_PRESERVE)
-               | ATH9K_RX_FILTER_UCAST | ATH9K_RX_FILTER_BCAST
-               | ATH9K_RX_FILTER_MCAST;
-
-       /* If not a STA, enable processing of Probe Requests */
-       if (ah->opmode != NL80211_IFTYPE_STATION)
-               rfilt |= ATH9K_RX_FILTER_PROBEREQ;
-
-       /*
-        * Set promiscuous mode when FIF_PROMISC_IN_BSS is enabled for station
-        * mode interface or when in monitor mode. AP mode does not need this
-        * since it receives all in-BSS frames anyway.
-        */
-       if (((ah->opmode != NL80211_IFTYPE_AP) &&
-            (priv->rxfilter & FIF_PROMISC_IN_BSS)) ||
-           (ah->opmode == NL80211_IFTYPE_MONITOR))
-               rfilt |= ATH9K_RX_FILTER_PROM;
-
-       if (priv->rxfilter & FIF_CONTROL)
-               rfilt |= ATH9K_RX_FILTER_CONTROL;
-
-       if ((ah->opmode == NL80211_IFTYPE_STATION) &&
-           !(priv->rxfilter & FIF_BCN_PRBRESP_PROMISC))
-               rfilt |= ATH9K_RX_FILTER_MYBEACON;
-       else
-               rfilt |= ATH9K_RX_FILTER_BEACON;
-
-       if (conf_is_ht(&priv->hw->conf))
-               rfilt |= ATH9K_RX_FILTER_COMP_BAR;
-
-       return rfilt;
-
-#undef RX_FILTER_PRESERVE
-}
-
-/*
- * Recv initialization for opmode change.
- */
-static void ath9k_htc_opmode_init(struct ath9k_htc_priv *priv)
-{
-       struct ath_hw *ah = priv->ah;
-       struct ath_common *common = ath9k_hw_common(ah);
-
-       u32 rfilt, mfilt[2];
-
-       /* configure rx filter */
-       rfilt = ath9k_htc_calcrxfilter(priv);
-       ath9k_hw_setrxfilter(ah, rfilt);
-
-       /* configure bssid mask */
-       if (ah->caps.hw_caps & ATH9K_HW_CAP_BSSIDMASK)
-               ath_hw_setbssidmask(common);
-
-       /* configure operational mode */
-       ath9k_hw_setopmode(ah);
-
-       /* calculate and install multicast filter */
-       mfilt[0] = mfilt[1] = ~0;
-       ath9k_hw_setmcastfilter(ah, mfilt[0], mfilt[1]);
-}
-
-void ath9k_host_rx_init(struct ath9k_htc_priv *priv)
-{
-       ath9k_hw_rxena(priv->ah);
-       ath9k_htc_opmode_init(priv);
-       ath9k_hw_startpcureceive(priv->ah, (priv->op_flags & OP_SCANNING));
-       priv->rx.last_rssi = ATH_RSSI_DUMMY_MARKER;
-}
-
-static void ath9k_process_rate(struct ieee80211_hw *hw,
-                              struct ieee80211_rx_status *rxs,
-                              u8 rx_rate, u8 rs_flags)
-{
-       struct ieee80211_supported_band *sband;
-       enum ieee80211_band band;
-       unsigned int i = 0;
-
-       if (rx_rate & 0x80) {
-               /* HT rate */
-               rxs->flag |= RX_FLAG_HT;
-               if (rs_flags & ATH9K_RX_2040)
-                       rxs->flag |= RX_FLAG_40MHZ;
-               if (rs_flags & ATH9K_RX_GI)
-                       rxs->flag |= RX_FLAG_SHORT_GI;
-               rxs->rate_idx = rx_rate & 0x7f;
-               return;
-       }
-
-       band = hw->conf.channel->band;
-       sband = hw->wiphy->bands[band];
-
-       for (i = 0; i < sband->n_bitrates; i++) {
-               if (sband->bitrates[i].hw_value == rx_rate) {
-                       rxs->rate_idx = i;
-                       return;
-               }
-               if (sband->bitrates[i].hw_value_short == rx_rate) {
-                       rxs->rate_idx = i;
-                       rxs->flag |= RX_FLAG_SHORTPRE;
-                       return;
-               }
-       }
-
-}
-
-static bool ath9k_rx_prepare(struct ath9k_htc_priv *priv,
-                            struct ath9k_htc_rxbuf *rxbuf,
-                            struct ieee80211_rx_status *rx_status)
-
-{
-       struct ieee80211_hdr *hdr;
-       struct ieee80211_hw *hw = priv->hw;
-       struct sk_buff *skb = rxbuf->skb;
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       struct ath_htc_rx_status *rxstatus;
-       int hdrlen, padpos, padsize;
-       int last_rssi = ATH_RSSI_DUMMY_MARKER;
-       __le16 fc;
-
-       if (skb->len <= HTC_RX_FRAME_HEADER_SIZE) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Corrupted RX frame, dropping\n");
-               goto rx_next;
-       }
-
-       rxstatus = (struct ath_htc_rx_status *)skb->data;
-
-       if (be16_to_cpu(rxstatus->rs_datalen) -
-           (skb->len - HTC_RX_FRAME_HEADER_SIZE) != 0) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Corrupted RX data len, dropping "
-                         "(dlen: %d, skblen: %d)\n",
-                         rxstatus->rs_datalen, skb->len);
-               goto rx_next;
-       }
-
-       /* Get the RX status information */
-       memcpy(&rxbuf->rxstatus, rxstatus, HTC_RX_FRAME_HEADER_SIZE);
-       skb_pull(skb, HTC_RX_FRAME_HEADER_SIZE);
-
-       hdr = (struct ieee80211_hdr *)skb->data;
-       fc = hdr->frame_control;
-       hdrlen = ieee80211_get_hdrlen_from_skb(skb);
-
-       padpos = ath9k_cmn_padpos(fc);
-
-       padsize = padpos & 3;
-       if (padsize && skb->len >= padpos+padsize+FCS_LEN) {
-               memmove(skb->data + padsize, skb->data, padpos);
-               skb_pull(skb, padsize);
-       }
-
-       memset(rx_status, 0, sizeof(struct ieee80211_rx_status));
-
-       if (rxbuf->rxstatus.rs_status != 0) {
-               if (rxbuf->rxstatus.rs_status & ATH9K_RXERR_CRC)
-                       rx_status->flag |= RX_FLAG_FAILED_FCS_CRC;
-               if (rxbuf->rxstatus.rs_status & ATH9K_RXERR_PHY)
-                       goto rx_next;
-
-               if (rxbuf->rxstatus.rs_status & ATH9K_RXERR_DECRYPT) {
-                       /* FIXME */
-               } else if (rxbuf->rxstatus.rs_status & ATH9K_RXERR_MIC) {
-                       if (ieee80211_is_ctl(fc))
-                               /*
-                                * Sometimes, we get invalid
-                                * MIC failures on valid control frames.
-                                * Remove these mic errors.
-                                */
-                               rxbuf->rxstatus.rs_status &= ~ATH9K_RXERR_MIC;
-                       else
-                               rx_status->flag |= RX_FLAG_MMIC_ERROR;
-               }
-
-               /*
-                * Reject error frames with the exception of
-                * decryption and MIC failures. For monitor mode,
-                * we also ignore the CRC error.
-                */
-               if (priv->ah->opmode == NL80211_IFTYPE_MONITOR) {
-                       if (rxbuf->rxstatus.rs_status &
-                           ~(ATH9K_RXERR_DECRYPT | ATH9K_RXERR_MIC |
-                             ATH9K_RXERR_CRC))
-                               goto rx_next;
-               } else {
-                       if (rxbuf->rxstatus.rs_status &
-                           ~(ATH9K_RXERR_DECRYPT | ATH9K_RXERR_MIC)) {
-                               goto rx_next;
-                       }
-               }
-       }
-
-       if (!(rxbuf->rxstatus.rs_status & ATH9K_RXERR_DECRYPT)) {
-               u8 keyix;
-               keyix = rxbuf->rxstatus.rs_keyix;
-               if (keyix != ATH9K_RXKEYIX_INVALID) {
-                       rx_status->flag |= RX_FLAG_DECRYPTED;
-               } else if (ieee80211_has_protected(fc) &&
-                          skb->len >= hdrlen + 4) {
-                       keyix = skb->data[hdrlen + 3] >> 6;
-                       if (test_bit(keyix, common->keymap))
-                               rx_status->flag |= RX_FLAG_DECRYPTED;
-               }
-       }
-
-       ath9k_process_rate(hw, rx_status, rxbuf->rxstatus.rs_rate,
-                          rxbuf->rxstatus.rs_flags);
-
-       if (priv->op_flags & OP_ASSOCIATED) {
-               if (rxbuf->rxstatus.rs_rssi != ATH9K_RSSI_BAD &&
-                   !rxbuf->rxstatus.rs_moreaggr)
-                       ATH_RSSI_LPF(priv->rx.last_rssi,
-                                    rxbuf->rxstatus.rs_rssi);
-
-               last_rssi = priv->rx.last_rssi;
-
-               if (likely(last_rssi != ATH_RSSI_DUMMY_MARKER))
-                       rxbuf->rxstatus.rs_rssi = ATH_EP_RND(last_rssi,
-                                                            ATH_RSSI_EP_MULTIPLIER);
-
-               if (rxbuf->rxstatus.rs_rssi < 0)
-                       rxbuf->rxstatus.rs_rssi = 0;
-
-               if (ieee80211_is_beacon(fc))
-                       priv->ah->stats.avgbrssi = rxbuf->rxstatus.rs_rssi;
-       }
-
-       rx_status->mactime = be64_to_cpu(rxbuf->rxstatus.rs_tstamp);
-       rx_status->band = hw->conf.channel->band;
-       rx_status->freq = hw->conf.channel->center_freq;
-       rx_status->signal =  rxbuf->rxstatus.rs_rssi + ATH_DEFAULT_NOISE_FLOOR;
-       rx_status->antenna = rxbuf->rxstatus.rs_antenna;
-       rx_status->flag |= RX_FLAG_TSFT;
-
-       return true;
-
-rx_next:
-       return false;
-}
-
-/*
- * FIXME: Handle FLUSH later on.
- */
-void ath9k_rx_tasklet(unsigned long data)
-{
-       struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *)data;
-       struct ath9k_htc_rxbuf *rxbuf = NULL, *tmp_buf = NULL;
-       struct ieee80211_rx_status rx_status;
-       struct sk_buff *skb;
-       unsigned long flags;
-       struct ieee80211_hdr *hdr;
-
-       do {
-               spin_lock_irqsave(&priv->rx.rxbuflock, flags);
-               list_for_each_entry(tmp_buf, &priv->rx.rxbuf, list) {
-                       if (tmp_buf->in_process) {
-                               rxbuf = tmp_buf;
-                               break;
-                       }
-               }
-
-               if (rxbuf == NULL) {
-                       spin_unlock_irqrestore(&priv->rx.rxbuflock, flags);
-                       break;
-               }
-
-               if (!rxbuf->skb)
-                       goto requeue;
-
-               if (!ath9k_rx_prepare(priv, rxbuf, &rx_status)) {
-                       dev_kfree_skb_any(rxbuf->skb);
-                       goto requeue;
-               }
-
-               memcpy(IEEE80211_SKB_RXCB(rxbuf->skb), &rx_status,
-                      sizeof(struct ieee80211_rx_status));
-               skb = rxbuf->skb;
-               hdr = (struct ieee80211_hdr *) skb->data;
-
-               if (ieee80211_is_beacon(hdr->frame_control) && priv->ps_enabled)
-                               ieee80211_queue_work(priv->hw, &priv->ps_work);
-
-               spin_unlock_irqrestore(&priv->rx.rxbuflock, flags);
-
-               ieee80211_rx(priv->hw, skb);
-
-               spin_lock_irqsave(&priv->rx.rxbuflock, flags);
-requeue:
-               rxbuf->in_process = false;
-               rxbuf->skb = NULL;
-               list_move_tail(&rxbuf->list, &priv->rx.rxbuf);
-               rxbuf = NULL;
-               spin_unlock_irqrestore(&priv->rx.rxbuflock, flags);
-       } while (1);
-
-}
-
-void ath9k_htc_rxep(void *drv_priv, struct sk_buff *skb,
-                   enum htc_endpoint_id ep_id)
-{
-       struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *)drv_priv;
-       struct ath_hw *ah = priv->ah;
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath9k_htc_rxbuf *rxbuf = NULL, *tmp_buf = NULL;
-
-       spin_lock(&priv->rx.rxbuflock);
-       list_for_each_entry(tmp_buf, &priv->rx.rxbuf, list) {
-               if (!tmp_buf->in_process) {
-                       rxbuf = tmp_buf;
-                       break;
-               }
-       }
-       spin_unlock(&priv->rx.rxbuflock);
-
-       if (rxbuf == NULL) {
-               ath_print(common, ATH_DBG_ANY,
-                         "No free RX buffer\n");
-               goto err;
-       }
-
-       spin_lock(&priv->rx.rxbuflock);
-       rxbuf->skb = skb;
-       rxbuf->in_process = true;
-       spin_unlock(&priv->rx.rxbuflock);
-
-       tasklet_schedule(&priv->rx_tasklet);
-       return;
-err:
-       dev_kfree_skb_any(skb);
-}
-
-/* FIXME: Locking for cleanup/init */
-
-void ath9k_rx_cleanup(struct ath9k_htc_priv *priv)
-{
-       struct ath9k_htc_rxbuf *rxbuf, *tbuf;
-
-       list_for_each_entry_safe(rxbuf, tbuf, &priv->rx.rxbuf, list) {
-               list_del(&rxbuf->list);
-               if (rxbuf->skb)
-                       dev_kfree_skb_any(rxbuf->skb);
-               kfree(rxbuf);
-       }
-}
-
-int ath9k_rx_init(struct ath9k_htc_priv *priv)
-{
-       struct ath_hw *ah = priv->ah;
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath9k_htc_rxbuf *rxbuf;
-       int i = 0;
-
-       INIT_LIST_HEAD(&priv->rx.rxbuf);
-       spin_lock_init(&priv->rx.rxbuflock);
-
-       for (i = 0; i < ATH9K_HTC_RXBUF; i++) {
-               rxbuf = kzalloc(sizeof(struct ath9k_htc_rxbuf), GFP_KERNEL);
-               if (rxbuf == NULL) {
-                       ath_print(common, ATH_DBG_FATAL,
-                                 "Unable to allocate RX buffers\n");
-                       goto err;
-               }
-               list_add_tail(&rxbuf->list, &priv->rx.rxbuf);
-       }
-
-       return 0;
-
-err:
-       ath9k_rx_cleanup(priv);
-       return -ENOMEM;
-}
diff --git a/drivers/net/wireless/ath/ath9k/htc_hst.c b/drivers/net/wireless/ath/ath9k/htc_hst.c
deleted file mode 100644 (file)
index 705c0f3..0000000
+++ /dev/null
@@ -1,479 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "htc.h"
-
-static int htc_issue_send(struct htc_target *target, struct sk_buff* skb,
-                         u16 len, u8 flags, u8 epid,
-                         struct ath9k_htc_tx_ctl *tx_ctl)
-{
-       struct htc_frame_hdr *hdr;
-       struct htc_endpoint *endpoint = &target->endpoint[epid];
-       int status;
-
-       hdr = (struct htc_frame_hdr *)
-               skb_push(skb, sizeof(struct htc_frame_hdr));
-       hdr->endpoint_id = epid;
-       hdr->flags = flags;
-       hdr->payload_len = cpu_to_be16(len);
-
-       status = target->hif->send(target->hif_dev, endpoint->ul_pipeid, skb,
-                                  tx_ctl);
-       return status;
-}
-
-static struct htc_endpoint *get_next_avail_ep(struct htc_endpoint *endpoint)
-{
-       enum htc_endpoint_id avail_epid;
-
-       for (avail_epid = (ENDPOINT_MAX - 1); avail_epid > ENDPOINT0; avail_epid--)
-               if (endpoint[avail_epid].service_id == 0)
-                       return &endpoint[avail_epid];
-       return NULL;
-}
-
-static u8 service_to_ulpipe(u16 service_id)
-{
-       switch (service_id) {
-       case WMI_CONTROL_SVC:
-               return 4;
-       case WMI_BEACON_SVC:
-       case WMI_CAB_SVC:
-       case WMI_UAPSD_SVC:
-       case WMI_MGMT_SVC:
-       case WMI_DATA_VO_SVC:
-       case WMI_DATA_VI_SVC:
-       case WMI_DATA_BE_SVC:
-       case WMI_DATA_BK_SVC:
-               return 1;
-       default:
-               return 0;
-       }
-}
-
-static u8 service_to_dlpipe(u16 service_id)
-{
-       switch (service_id) {
-       case WMI_CONTROL_SVC:
-               return 3;
-       case WMI_BEACON_SVC:
-       case WMI_CAB_SVC:
-       case WMI_UAPSD_SVC:
-       case WMI_MGMT_SVC:
-       case WMI_DATA_VO_SVC:
-       case WMI_DATA_VI_SVC:
-       case WMI_DATA_BE_SVC:
-       case WMI_DATA_BK_SVC:
-               return 2;
-       default:
-               return 0;
-       }
-}
-
-static void htc_process_target_rdy(struct htc_target *target,
-                                  void *buf)
-{
-       struct htc_endpoint *endpoint;
-       struct htc_ready_msg *htc_ready_msg = (struct htc_ready_msg *) buf;
-
-       target->credit_size = be16_to_cpu(htc_ready_msg->credit_size);
-
-       endpoint = &target->endpoint[ENDPOINT0];
-       endpoint->service_id = HTC_CTRL_RSVD_SVC;
-       endpoint->max_msglen = HTC_MAX_CONTROL_MESSAGE_LENGTH;
-       atomic_inc(&target->tgt_ready);
-       complete(&target->target_wait);
-}
-
-static void htc_process_conn_rsp(struct htc_target *target,
-                                struct htc_frame_hdr *htc_hdr)
-{
-       struct htc_conn_svc_rspmsg *svc_rspmsg;
-       struct htc_endpoint *endpoint, *tmp_endpoint = NULL;
-       u16 service_id;
-       u16 max_msglen;
-       enum htc_endpoint_id epid, tepid;
-
-       svc_rspmsg = (struct htc_conn_svc_rspmsg *)
-               ((void *) htc_hdr + sizeof(struct htc_frame_hdr));
-
-       if (svc_rspmsg->status == HTC_SERVICE_SUCCESS) {
-               epid = svc_rspmsg->endpoint_id;
-               service_id = be16_to_cpu(svc_rspmsg->service_id);
-               max_msglen = be16_to_cpu(svc_rspmsg->max_msg_len);
-               endpoint = &target->endpoint[epid];
-
-               for (tepid = (ENDPOINT_MAX - 1); tepid > ENDPOINT0; tepid--) {
-                       tmp_endpoint = &target->endpoint[tepid];
-                       if (tmp_endpoint->service_id == service_id) {
-                               tmp_endpoint->service_id = 0;
-                               break;
-                       }
-               }
-
-               if (tepid == ENDPOINT0)
-                       return;
-
-               endpoint->service_id = service_id;
-               endpoint->max_txqdepth = tmp_endpoint->max_txqdepth;
-               endpoint->ep_callbacks = tmp_endpoint->ep_callbacks;
-               endpoint->ul_pipeid = tmp_endpoint->ul_pipeid;
-               endpoint->dl_pipeid = tmp_endpoint->dl_pipeid;
-               endpoint->max_msglen = max_msglen;
-               target->conn_rsp_epid = epid;
-               complete(&target->cmd_wait);
-       } else {
-               target->conn_rsp_epid = ENDPOINT_UNUSED;
-       }
-}
-
-static int htc_config_pipe_credits(struct htc_target *target)
-{
-       struct sk_buff *skb;
-       struct htc_config_pipe_msg *cp_msg;
-       int ret, time_left;
-
-       skb = alloc_skb(50 + sizeof(struct htc_frame_hdr), GFP_ATOMIC);
-       if (!skb) {
-               dev_err(target->dev, "failed to allocate send buffer\n");
-               return -ENOMEM;
-       }
-       skb_reserve(skb, sizeof(struct htc_frame_hdr));
-
-       cp_msg = (struct htc_config_pipe_msg *)
-               skb_put(skb, sizeof(struct htc_config_pipe_msg));
-
-       cp_msg->message_id = cpu_to_be16(HTC_MSG_CONFIG_PIPE_ID);
-       cp_msg->pipe_id = USB_WLAN_TX_PIPE;
-       cp_msg->credits = target->credits;
-
-       target->htc_flags |= HTC_OP_CONFIG_PIPE_CREDITS;
-
-       ret = htc_issue_send(target, skb, skb->len, 0, ENDPOINT0, NULL);
-       if (ret)
-               goto err;
-
-       time_left = wait_for_completion_timeout(&target->cmd_wait, HZ);
-       if (!time_left) {
-               dev_err(target->dev, "HTC credit config timeout\n");
-               return -ETIMEDOUT;
-       }
-
-       return 0;
-err:
-       kfree_skb(skb);
-       return -EINVAL;
-}
-
-static int htc_setup_complete(struct htc_target *target)
-{
-       struct sk_buff *skb;
-       struct htc_comp_msg *comp_msg;
-       int ret = 0, time_left;
-
-       skb = alloc_skb(50 + sizeof(struct htc_frame_hdr), GFP_ATOMIC);
-       if (!skb) {
-               dev_err(target->dev, "failed to allocate send buffer\n");
-               return -ENOMEM;
-       }
-       skb_reserve(skb, sizeof(struct htc_frame_hdr));
-
-       comp_msg = (struct htc_comp_msg *)
-               skb_put(skb, sizeof(struct htc_comp_msg));
-       comp_msg->msg_id = cpu_to_be16(HTC_MSG_SETUP_COMPLETE_ID);
-
-       target->htc_flags |= HTC_OP_START_WAIT;
-
-       ret = htc_issue_send(target, skb, skb->len, 0, ENDPOINT0, NULL);
-       if (ret)
-               goto err;
-
-       time_left = wait_for_completion_timeout(&target->cmd_wait, HZ);
-       if (!time_left) {
-               dev_err(target->dev, "HTC start timeout\n");
-               return -ETIMEDOUT;
-       }
-
-       return 0;
-
-err:
-       kfree_skb(skb);
-       return -EINVAL;
-}
-
-/* HTC APIs */
-
-int htc_init(struct htc_target *target)
-{
-       int ret;
-
-       ret = htc_config_pipe_credits(target);
-       if (ret)
-               return ret;
-
-       return htc_setup_complete(target);
-}
-
-int htc_connect_service(struct htc_target *target,
-                    struct htc_service_connreq *service_connreq,
-                    enum htc_endpoint_id *conn_rsp_epid)
-{
-       struct sk_buff *skb;
-       struct htc_endpoint *endpoint;
-       struct htc_conn_svc_msg *conn_msg;
-       int ret, time_left;
-
-       /* Find an available endpoint */
-       endpoint = get_next_avail_ep(target->endpoint);
-       if (!endpoint) {
-               dev_err(target->dev, "Endpoint is not available for"
-                       "service %d\n", service_connreq->service_id);
-               return -EINVAL;
-       }
-
-       endpoint->service_id = service_connreq->service_id;
-       endpoint->max_txqdepth = service_connreq->max_send_qdepth;
-       endpoint->ul_pipeid = service_to_ulpipe(service_connreq->service_id);
-       endpoint->dl_pipeid = service_to_dlpipe(service_connreq->service_id);
-       endpoint->ep_callbacks = service_connreq->ep_callbacks;
-
-       skb = alloc_skb(sizeof(struct htc_conn_svc_msg) +
-                           sizeof(struct htc_frame_hdr), GFP_ATOMIC);
-       if (!skb) {
-               dev_err(target->dev, "Failed to allocate buf to send"
-                       "service connect req\n");
-               return -ENOMEM;
-       }
-
-       skb_reserve(skb, sizeof(struct htc_frame_hdr));
-
-       conn_msg = (struct htc_conn_svc_msg *)
-                       skb_put(skb, sizeof(struct htc_conn_svc_msg));
-       conn_msg->service_id = cpu_to_be16(service_connreq->service_id);
-       conn_msg->msg_id = cpu_to_be16(HTC_MSG_CONNECT_SERVICE_ID);
-       conn_msg->con_flags = cpu_to_be16(service_connreq->con_flags);
-       conn_msg->dl_pipeid = endpoint->dl_pipeid;
-       conn_msg->ul_pipeid = endpoint->ul_pipeid;
-
-       ret = htc_issue_send(target, skb, skb->len, 0, ENDPOINT0, NULL);
-       if (ret)
-               goto err;
-
-       time_left = wait_for_completion_timeout(&target->cmd_wait, HZ);
-       if (!time_left) {
-               dev_err(target->dev, "Service connection timeout for: %d\n",
-                       service_connreq->service_id);
-               return -ETIMEDOUT;
-       }
-
-       *conn_rsp_epid = target->conn_rsp_epid;
-       return 0;
-err:
-       kfree_skb(skb);
-       return ret;
-}
-
-int htc_send(struct htc_target *target, struct sk_buff *skb,
-            enum htc_endpoint_id epid, struct ath9k_htc_tx_ctl *tx_ctl)
-{
-       return htc_issue_send(target, skb, skb->len, 0, epid, tx_ctl);
-}
-
-void htc_stop(struct htc_target *target)
-{
-       enum htc_endpoint_id epid;
-       struct htc_endpoint *endpoint;
-
-       for (epid = ENDPOINT0; epid < ENDPOINT_MAX; epid++) {
-               endpoint = &target->endpoint[epid];
-               if (endpoint->service_id != 0)
-                       target->hif->stop(target->hif_dev, endpoint->ul_pipeid);
-       }
-}
-
-void htc_start(struct htc_target *target)
-{
-       enum htc_endpoint_id epid;
-       struct htc_endpoint *endpoint;
-
-       for (epid = ENDPOINT0; epid < ENDPOINT_MAX; epid++) {
-               endpoint = &target->endpoint[epid];
-               if (endpoint->service_id != 0)
-                       target->hif->start(target->hif_dev,
-                                          endpoint->ul_pipeid);
-       }
-}
-
-void ath9k_htc_txcompletion_cb(struct htc_target *htc_handle,
-                              struct sk_buff *skb, bool txok)
-{
-       struct htc_endpoint *endpoint;
-       struct htc_frame_hdr *htc_hdr = NULL;
-
-       if (htc_handle->htc_flags & HTC_OP_CONFIG_PIPE_CREDITS) {
-               complete(&htc_handle->cmd_wait);
-               htc_handle->htc_flags &= ~HTC_OP_CONFIG_PIPE_CREDITS;
-               goto ret;
-       }
-
-       if (htc_handle->htc_flags & HTC_OP_START_WAIT) {
-               complete(&htc_handle->cmd_wait);
-               htc_handle->htc_flags &= ~HTC_OP_START_WAIT;
-               goto ret;
-       }
-
-       if (skb) {
-               htc_hdr = (struct htc_frame_hdr *) skb->data;
-               endpoint = &htc_handle->endpoint[htc_hdr->endpoint_id];
-               skb_pull(skb, sizeof(struct htc_frame_hdr));
-
-               if (endpoint->ep_callbacks.tx) {
-                       endpoint->ep_callbacks.tx(endpoint->ep_callbacks.priv,
-                                                 skb, htc_hdr->endpoint_id,
-                                                 txok);
-               }
-       }
-
-       return;
-ret:
-       /* HTC-generated packets are freed here. */
-       if (htc_hdr && htc_hdr->endpoint_id != ENDPOINT0)
-               dev_kfree_skb_any(skb);
-       else
-               kfree_skb(skb);
-}
-
-/*
- * HTC Messages are handled directly here and the obtained SKB
- * is freed.
- *
- * Sevice messages (Data, WMI) passed to the corresponding
- * endpoint RX handlers, which have to free the SKB.
- */
-void ath9k_htc_rx_msg(struct htc_target *htc_handle,
-                     struct sk_buff *skb, u32 len, u8 pipe_id)
-{
-       struct htc_frame_hdr *htc_hdr;
-       enum htc_endpoint_id epid;
-       struct htc_endpoint *endpoint;
-       __be16 *msg_id;
-
-       if (!htc_handle || !skb)
-               return;
-
-       htc_hdr = (struct htc_frame_hdr *) skb->data;
-       epid = htc_hdr->endpoint_id;
-
-       if (epid >= ENDPOINT_MAX) {
-               if (pipe_id != USB_REG_IN_PIPE)
-                       dev_kfree_skb_any(skb);
-               else
-                       kfree_skb(skb);
-               return;
-       }
-
-       if (epid == ENDPOINT0) {
-
-               /* Handle trailer */
-               if (htc_hdr->flags & HTC_FLAGS_RECV_TRAILER) {
-                       if (be32_to_cpu(*(__be32 *) skb->data) == 0x00C60000)
-                               /* Move past the Watchdog pattern */
-                               htc_hdr = (struct htc_frame_hdr *)(skb->data + 4);
-               }
-
-               /* Get the message ID */
-               msg_id = (__be16 *) ((void *) htc_hdr +
-                                    sizeof(struct htc_frame_hdr));
-
-               /* Now process HTC messages */
-               switch (be16_to_cpu(*msg_id)) {
-               case HTC_MSG_READY_ID:
-                       htc_process_target_rdy(htc_handle, htc_hdr);
-                       break;
-               case HTC_MSG_CONNECT_SERVICE_RESPONSE_ID:
-                       htc_process_conn_rsp(htc_handle, htc_hdr);
-                       break;
-               default:
-                       break;
-               }
-
-               kfree_skb(skb);
-
-       } else {
-               if (htc_hdr->flags & HTC_FLAGS_RECV_TRAILER)
-                       skb_trim(skb, len - htc_hdr->control[0]);
-
-               skb_pull(skb, sizeof(struct htc_frame_hdr));
-
-               endpoint = &htc_handle->endpoint[epid];
-               if (endpoint->ep_callbacks.rx)
-                       endpoint->ep_callbacks.rx(endpoint->ep_callbacks.priv,
-                                                 skb, epid);
-       }
-}
-
-struct htc_target *ath9k_htc_hw_alloc(void *hif_handle,
-                                     struct ath9k_htc_hif *hif,
-                                     struct device *dev)
-{
-       struct htc_endpoint *endpoint;
-       struct htc_target *target;
-
-       target = kzalloc(sizeof(struct htc_target), GFP_KERNEL);
-       if (!target) {
-               printk(KERN_ERR "Unable to allocate memory for"
-                       "target device\n");
-               return NULL;
-       }
-
-       init_completion(&target->target_wait);
-       init_completion(&target->cmd_wait);
-
-       target->hif = hif;
-       target->hif_dev = hif_handle;
-       target->dev = dev;
-
-       /* Assign control endpoint pipe IDs */
-       endpoint = &target->endpoint[ENDPOINT0];
-       endpoint->ul_pipeid = hif->control_ul_pipe;
-       endpoint->dl_pipeid = hif->control_dl_pipe;
-
-       atomic_set(&target->tgt_ready, 0);
-
-       return target;
-}
-
-void ath9k_htc_hw_free(struct htc_target *htc)
-{
-       kfree(htc);
-}
-
-int ath9k_htc_hw_init(struct htc_target *target,
-                     struct device *dev, u16 devid)
-{
-       if (ath9k_htc_probe_device(target, dev, devid)) {
-               printk(KERN_ERR "Failed to initialize the device\n");
-               return -ENODEV;
-       }
-
-       return 0;
-}
-
-void ath9k_htc_hw_deinit(struct htc_target *target, bool hot_unplug)
-{
-       if (target)
-               ath9k_htc_disconnect_device(target, hot_unplug);
-}
diff --git a/drivers/net/wireless/ath/ath9k/htc_hst.h b/drivers/net/wireless/ath/ath9k/htc_hst.h
deleted file mode 100644 (file)
index faba679..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef HTC_HST_H
-#define HTC_HST_H
-
-struct ath9k_htc_priv;
-struct htc_target;
-struct ath9k_htc_tx_ctl;
-
-enum ath9k_hif_transports {
-       ATH9K_HIF_USB,
-};
-
-struct ath9k_htc_hif {
-       struct list_head list;
-       const enum ath9k_hif_transports transport;
-       const char *name;
-
-       u8 control_dl_pipe;
-       u8 control_ul_pipe;
-
-       void (*start) (void *hif_handle, u8 pipe);
-       void (*stop) (void *hif_handle, u8 pipe);
-       int (*send) (void *hif_handle, u8 pipe, struct sk_buff *buf,
-                    struct ath9k_htc_tx_ctl *tx_ctl);
-};
-
-enum htc_endpoint_id {
-       ENDPOINT_UNUSED = -1,
-       ENDPOINT0 = 0,
-       ENDPOINT1 = 1,
-       ENDPOINT2 = 2,
-       ENDPOINT3 = 3,
-       ENDPOINT4 = 4,
-       ENDPOINT5 = 5,
-       ENDPOINT6 = 6,
-       ENDPOINT7 = 7,
-       ENDPOINT8 = 8,
-       ENDPOINT_MAX = 22
-};
-
-/* Htc frame hdr flags */
-#define HTC_FLAGS_RECV_TRAILER (1 << 1)
-
-struct htc_frame_hdr {
-       u8 endpoint_id;
-       u8 flags;
-       __be16 payload_len;
-       u8 control[4];
-} __packed;
-
-struct htc_ready_msg {
-       __be16 message_id;
-       __be16 credits;
-       __be16 credit_size;
-       u8 max_endpoints;
-       u8 pad;
-} __packed;
-
-struct htc_config_pipe_msg {
-       __be16 message_id;
-       u8 pipe_id;
-       u8 credits;
-} __packed;
-
-struct htc_packet {
-       void *pktcontext;
-       u8 *buf;
-       u8 *buf_payload;
-       u32 buflen;
-       u32 payload_len;
-
-       int endpoint;
-       int status;
-
-       void *context;
-       u32 reserved;
-};
-
-struct htc_ep_callbacks {
-       void *priv;
-       void (*tx) (void *, struct sk_buff *, enum htc_endpoint_id, bool txok);
-       void (*rx) (void *, struct sk_buff *, enum htc_endpoint_id);
-};
-
-#define HTC_TX_QUEUE_SIZE 256
-
-struct htc_txq {
-       struct sk_buff *buf[HTC_TX_QUEUE_SIZE];
-       u32 txqdepth;
-       u16 txbuf_cnt;
-       u16 txq_head;
-       u16 txq_tail;
-};
-
-struct htc_endpoint {
-       u16 service_id;
-
-       struct htc_ep_callbacks ep_callbacks;
-       struct htc_txq htc_txq;
-       u32 max_txqdepth;
-       int max_msglen;
-
-       u8 ul_pipeid;
-       u8 dl_pipeid;
-};
-
-#define HTC_MAX_CONTROL_MESSAGE_LENGTH 255
-#define HTC_CONTROL_BUFFER_SIZE        \
-       (HTC_MAX_CONTROL_MESSAGE_LENGTH + sizeof(struct htc_frame_hdr))
-
-struct htc_control_buf {
-       struct htc_packet htc_pkt;
-       u8 buf[HTC_CONTROL_BUFFER_SIZE];
-};
-
-#define HTC_OP_START_WAIT           BIT(0)
-#define HTC_OP_CONFIG_PIPE_CREDITS  BIT(1)
-
-struct htc_target {
-       void *hif_dev;
-       struct ath9k_htc_priv *drv_priv;
-       struct device *dev;
-       struct ath9k_htc_hif *hif;
-       struct htc_endpoint endpoint[ENDPOINT_MAX];
-       struct completion target_wait;
-       struct completion cmd_wait;
-       struct list_head list;
-       enum htc_endpoint_id conn_rsp_epid;
-       u16 credits;
-       u16 credit_size;
-       u8 htc_flags;
-       atomic_t tgt_ready;
-};
-
-enum htc_msg_id {
-       HTC_MSG_READY_ID = 1,
-       HTC_MSG_CONNECT_SERVICE_ID,
-       HTC_MSG_CONNECT_SERVICE_RESPONSE_ID,
-       HTC_MSG_SETUP_COMPLETE_ID,
-       HTC_MSG_CONFIG_PIPE_ID,
-       HTC_MSG_CONFIG_PIPE_RESPONSE_ID,
-};
-
-struct htc_service_connreq {
-       u16 service_id;
-       u16 con_flags;
-       u32 max_send_qdepth;
-       struct htc_ep_callbacks ep_callbacks;
-};
-
-/* Current service IDs */
-
-enum htc_service_group_ids{
-       RSVD_SERVICE_GROUP = 0,
-       WMI_SERVICE_GROUP = 1,
-
-       HTC_SERVICE_GROUP_LAST = 255
-};
-
-#define MAKE_SERVICE_ID(group, index)          \
-       (int)(((int)group << 8) | (int)(index))
-
-/* NOTE: service ID of 0x0000 is reserved and should never be used */
-#define HTC_CTRL_RSVD_SVC MAKE_SERVICE_ID(RSVD_SERVICE_GROUP, 1)
-#define HTC_LOOPBACK_RSVD_SVC MAKE_SERVICE_ID(RSVD_SERVICE_GROUP, 2)
-
-#define WMI_CONTROL_SVC   MAKE_SERVICE_ID(WMI_SERVICE_GROUP, 0)
-#define WMI_BEACON_SVC   MAKE_SERVICE_ID(WMI_SERVICE_GROUP, 1)
-#define WMI_CAB_SVC      MAKE_SERVICE_ID(WMI_SERVICE_GROUP, 2)
-#define WMI_UAPSD_SVC    MAKE_SERVICE_ID(WMI_SERVICE_GROUP, 3)
-#define WMI_MGMT_SVC     MAKE_SERVICE_ID(WMI_SERVICE_GROUP, 4)
-#define WMI_DATA_VO_SVC   MAKE_SERVICE_ID(WMI_SERVICE_GROUP, 5)
-#define WMI_DATA_VI_SVC   MAKE_SERVICE_ID(WMI_SERVICE_GROUP, 6)
-#define WMI_DATA_BE_SVC   MAKE_SERVICE_ID(WMI_SERVICE_GROUP, 7)
-#define WMI_DATA_BK_SVC   MAKE_SERVICE_ID(WMI_SERVICE_GROUP, 8)
-
-struct htc_conn_svc_msg {
-       __be16 msg_id;
-       __be16 service_id;
-       __be16 con_flags;
-       u8 dl_pipeid;
-       u8 ul_pipeid;
-       u8 svc_meta_len;
-       u8 pad;
-} __packed;
-
-/* connect response status codes */
-#define HTC_SERVICE_SUCCESS      0
-#define HTC_SERVICE_NOT_FOUND    1
-#define HTC_SERVICE_FAILED       2
-#define HTC_SERVICE_NO_RESOURCES 3
-#define HTC_SERVICE_NO_MORE_EP   4
-
-struct htc_conn_svc_rspmsg {
-       __be16 msg_id;
-       __be16 service_id;
-       u8 status;
-       u8 endpoint_id;
-       __be16 max_msg_len;
-       u8 svc_meta_len;
-       u8 pad;
-} __packed;
-
-struct htc_comp_msg {
-       __be16 msg_id;
-} __packed;
-
-int htc_init(struct htc_target *target);
-int htc_connect_service(struct htc_target *target,
-                         struct htc_service_connreq *service_connreq,
-                         enum htc_endpoint_id *conn_rsp_eid);
-int htc_send(struct htc_target *target, struct sk_buff *skb,
-            enum htc_endpoint_id eid, struct ath9k_htc_tx_ctl *tx_ctl);
-void htc_stop(struct htc_target *target);
-void htc_start(struct htc_target *target);
-
-void ath9k_htc_rx_msg(struct htc_target *htc_handle,
-                     struct sk_buff *skb, u32 len, u8 pipe_id);
-void ath9k_htc_txcompletion_cb(struct htc_target *htc_handle,
-                              struct sk_buff *skb, bool txok);
-
-struct htc_target *ath9k_htc_hw_alloc(void *hif_handle,
-                                     struct ath9k_htc_hif *hif,
-                                     struct device *dev);
-void ath9k_htc_hw_free(struct htc_target *htc);
-int ath9k_htc_hw_init(struct htc_target *target,
-                     struct device *dev, u16 devid);
-void ath9k_htc_hw_deinit(struct htc_target *target, bool hot_unplug);
-
-#endif /* HTC_HST_H */
diff --git a/drivers/net/wireless/ath/ath9k/hw-ops.h b/drivers/net/wireless/ath/ath9k/hw-ops.h
deleted file mode 100644 (file)
index ffecbad..0000000
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ATH9K_HW_OPS_H
-#define ATH9K_HW_OPS_H
-
-#include "hw.h"
-
-/* Hardware core and driver accessible callbacks */
-
-static inline void ath9k_hw_configpcipowersave(struct ath_hw *ah,
-                                              int restore,
-                                              int power_off)
-{
-       ath9k_hw_ops(ah)->config_pci_powersave(ah, restore, power_off);
-}
-
-static inline void ath9k_hw_rxena(struct ath_hw *ah)
-{
-       ath9k_hw_ops(ah)->rx_enable(ah);
-}
-
-static inline void ath9k_hw_set_desc_link(struct ath_hw *ah, void *ds,
-                                         u32 link)
-{
-       ath9k_hw_ops(ah)->set_desc_link(ds, link);
-}
-
-static inline void ath9k_hw_get_desc_link(struct ath_hw *ah, void *ds,
-                                         u32 **link)
-{
-       ath9k_hw_ops(ah)->get_desc_link(ds, link);
-}
-static inline bool ath9k_hw_calibrate(struct ath_hw *ah,
-                                     struct ath9k_channel *chan,
-                                     u8 rxchainmask,
-                                     bool longcal)
-{
-       return ath9k_hw_ops(ah)->calibrate(ah, chan, rxchainmask, longcal);
-}
-
-static inline bool ath9k_hw_getisr(struct ath_hw *ah, enum ath9k_int *masked)
-{
-       return ath9k_hw_ops(ah)->get_isr(ah, masked);
-}
-
-static inline void ath9k_hw_filltxdesc(struct ath_hw *ah, void *ds, u32 seglen,
-                                 bool is_firstseg, bool is_lastseg,
-                                 const void *ds0, dma_addr_t buf_addr,
-                                 unsigned int qcu)
-{
-       ath9k_hw_ops(ah)->fill_txdesc(ah, ds, seglen, is_firstseg, is_lastseg,
-                                     ds0, buf_addr, qcu);
-}
-
-static inline int ath9k_hw_txprocdesc(struct ath_hw *ah, void *ds,
-                                     struct ath_tx_status *ts)
-{
-       return ath9k_hw_ops(ah)->proc_txdesc(ah, ds, ts);
-}
-
-static inline void ath9k_hw_set11n_txdesc(struct ath_hw *ah, void *ds,
-                                         u32 pktLen, enum ath9k_pkt_type type,
-                                         u32 txPower, u32 keyIx,
-                                         enum ath9k_key_type keyType,
-                                         u32 flags)
-{
-       ath9k_hw_ops(ah)->set11n_txdesc(ah, ds, pktLen, type, txPower, keyIx,
-                                     keyType, flags);
-}
-
-static inline void ath9k_hw_set11n_ratescenario(struct ath_hw *ah, void *ds,
-                                       void *lastds,
-                                       u32 durUpdateEn, u32 rtsctsRate,
-                                       u32 rtsctsDuration,
-                                       struct ath9k_11n_rate_series series[],
-                                       u32 nseries, u32 flags)
-{
-       ath9k_hw_ops(ah)->set11n_ratescenario(ah, ds, lastds, durUpdateEn,
-                                           rtsctsRate, rtsctsDuration, series,
-                                           nseries, flags);
-}
-
-static inline void ath9k_hw_set11n_aggr_first(struct ath_hw *ah, void *ds,
-                                       u32 aggrLen)
-{
-       ath9k_hw_ops(ah)->set11n_aggr_first(ah, ds, aggrLen);
-}
-
-static inline void ath9k_hw_set11n_aggr_middle(struct ath_hw *ah, void *ds,
-                                              u32 numDelims)
-{
-       ath9k_hw_ops(ah)->set11n_aggr_middle(ah, ds, numDelims);
-}
-
-static inline void ath9k_hw_set11n_aggr_last(struct ath_hw *ah, void *ds)
-{
-       ath9k_hw_ops(ah)->set11n_aggr_last(ah, ds);
-}
-
-static inline void ath9k_hw_clr11n_aggr(struct ath_hw *ah, void *ds)
-{
-       ath9k_hw_ops(ah)->clr11n_aggr(ah, ds);
-}
-
-static inline void ath9k_hw_set11n_burstduration(struct ath_hw *ah, void *ds,
-                                                u32 burstDuration)
-{
-       ath9k_hw_ops(ah)->set11n_burstduration(ah, ds, burstDuration);
-}
-
-static inline void ath9k_hw_set11n_virtualmorefrag(struct ath_hw *ah, void *ds,
-                                                  u32 vmf)
-{
-       ath9k_hw_ops(ah)->set11n_virtualmorefrag(ah, ds, vmf);
-}
-
-static inline void ath9k_hw_procmibevent(struct ath_hw *ah)
-{
-       ath9k_hw_ops(ah)->ani_proc_mib_event(ah);
-}
-
-static inline void ath9k_hw_ani_monitor(struct ath_hw *ah,
-                                       struct ath9k_channel *chan)
-{
-       ath9k_hw_ops(ah)->ani_monitor(ah, chan);
-}
-
-/* Private hardware call ops */
-
-/* PHY ops */
-
-static inline int ath9k_hw_rf_set_freq(struct ath_hw *ah,
-                                      struct ath9k_channel *chan)
-{
-       return ath9k_hw_private_ops(ah)->rf_set_freq(ah, chan);
-}
-
-static inline void ath9k_hw_spur_mitigate_freq(struct ath_hw *ah,
-                                              struct ath9k_channel *chan)
-{
-       ath9k_hw_private_ops(ah)->spur_mitigate_freq(ah, chan);
-}
-
-static inline int ath9k_hw_rf_alloc_ext_banks(struct ath_hw *ah)
-{
-       if (!ath9k_hw_private_ops(ah)->rf_alloc_ext_banks)
-               return 0;
-
-       return ath9k_hw_private_ops(ah)->rf_alloc_ext_banks(ah);
-}
-
-static inline void ath9k_hw_rf_free_ext_banks(struct ath_hw *ah)
-{
-       if (!ath9k_hw_private_ops(ah)->rf_free_ext_banks)
-               return;
-
-       ath9k_hw_private_ops(ah)->rf_free_ext_banks(ah);
-}
-
-static inline bool ath9k_hw_set_rf_regs(struct ath_hw *ah,
-                                       struct ath9k_channel *chan,
-                                       u16 modesIndex)
-{
-       if (!ath9k_hw_private_ops(ah)->set_rf_regs)
-               return true;
-
-       return ath9k_hw_private_ops(ah)->set_rf_regs(ah, chan, modesIndex);
-}
-
-static inline void ath9k_hw_init_bb(struct ath_hw *ah,
-                                   struct ath9k_channel *chan)
-{
-       return ath9k_hw_private_ops(ah)->init_bb(ah, chan);
-}
-
-static inline void ath9k_hw_set_channel_regs(struct ath_hw *ah,
-                                            struct ath9k_channel *chan)
-{
-       return ath9k_hw_private_ops(ah)->set_channel_regs(ah, chan);
-}
-
-static inline int ath9k_hw_process_ini(struct ath_hw *ah,
-                                       struct ath9k_channel *chan)
-{
-       return ath9k_hw_private_ops(ah)->process_ini(ah, chan);
-}
-
-static inline void ath9k_olc_init(struct ath_hw *ah)
-{
-       if (!ath9k_hw_private_ops(ah)->olc_init)
-               return;
-
-       return ath9k_hw_private_ops(ah)->olc_init(ah);
-}
-
-static inline void ath9k_hw_set_rfmode(struct ath_hw *ah,
-                                      struct ath9k_channel *chan)
-{
-       return ath9k_hw_private_ops(ah)->set_rfmode(ah, chan);
-}
-
-static inline void ath9k_hw_mark_phy_inactive(struct ath_hw *ah)
-{
-       return ath9k_hw_private_ops(ah)->mark_phy_inactive(ah);
-}
-
-static inline void ath9k_hw_set_delta_slope(struct ath_hw *ah,
-                                           struct ath9k_channel *chan)
-{
-       return ath9k_hw_private_ops(ah)->set_delta_slope(ah, chan);
-}
-
-static inline bool ath9k_hw_rfbus_req(struct ath_hw *ah)
-{
-       return ath9k_hw_private_ops(ah)->rfbus_req(ah);
-}
-
-static inline void ath9k_hw_rfbus_done(struct ath_hw *ah)
-{
-       return ath9k_hw_private_ops(ah)->rfbus_done(ah);
-}
-
-static inline void ath9k_enable_rfkill(struct ath_hw *ah)
-{
-       return ath9k_hw_private_ops(ah)->enable_rfkill(ah);
-}
-
-static inline void ath9k_hw_restore_chainmask(struct ath_hw *ah)
-{
-       if (!ath9k_hw_private_ops(ah)->restore_chainmask)
-               return;
-
-       return ath9k_hw_private_ops(ah)->restore_chainmask(ah);
-}
-
-static inline void ath9k_hw_set_diversity(struct ath_hw *ah, bool value)
-{
-       return ath9k_hw_private_ops(ah)->set_diversity(ah, value);
-}
-
-static inline bool ath9k_hw_ani_control(struct ath_hw *ah,
-                                       enum ath9k_ani_cmd cmd, int param)
-{
-       return ath9k_hw_private_ops(ah)->ani_control(ah, cmd, param);
-}
-
-static inline void ath9k_hw_do_getnf(struct ath_hw *ah,
-                                    int16_t nfarray[NUM_NF_READINGS])
-{
-       ath9k_hw_private_ops(ah)->do_getnf(ah, nfarray);
-}
-
-static inline bool ath9k_hw_init_cal(struct ath_hw *ah,
-                                    struct ath9k_channel *chan)
-{
-       return ath9k_hw_private_ops(ah)->init_cal(ah, chan);
-}
-
-static inline void ath9k_hw_setup_calibration(struct ath_hw *ah,
-                                             struct ath9k_cal_list *currCal)
-{
-       ath9k_hw_private_ops(ah)->setup_calibration(ah, currCal);
-}
-
-static inline bool ath9k_hw_iscal_supported(struct ath_hw *ah,
-                                           enum ath9k_cal_types calType)
-{
-       return ath9k_hw_private_ops(ah)->iscal_supported(ah, calType);
-}
-
-static inline void ath9k_ani_reset(struct ath_hw *ah, bool is_scanning)
-{
-       ath9k_hw_private_ops(ah)->ani_reset(ah, is_scanning);
-}
-
-#endif /* ATH9K_HW_OPS_H */
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
deleted file mode 100644 (file)
index 7924123..0000000
+++ /dev/null
@@ -1,898 +0,0 @@
-/*
- * Copyright (c) 2008-2009 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <linux/slab.h>
-
-#include "ath9k.h"
-
-static char *dev_info = "ath9k";
-
-MODULE_AUTHOR("Atheros Communications");
-MODULE_DESCRIPTION("Support for Atheros 802.11n wireless LAN cards.");
-MODULE_SUPPORTED_DEVICE("Atheros 802.11n WLAN cards");
-MODULE_LICENSE("Dual BSD/GPL");
-
-static unsigned int ath9k_debug = ATH_DBG_DEFAULT;
-module_param_named(debug, ath9k_debug, uint, 0);
-MODULE_PARM_DESC(debug, "Debugging mask");
-
-int modparam_nohwcrypt;
-module_param_named(nohwcrypt, modparam_nohwcrypt, int, 0444);
-MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption");
-
-int led_blink = 1;
-module_param_named(blink, led_blink, int, 0444);
-MODULE_PARM_DESC(blink, "Enable LED blink on activity");
-
-/* We use the hw_value as an index into our private channel structure */
-
-#define CHAN2G(_freq, _idx)  { \
-       .center_freq = (_freq), \
-       .hw_value = (_idx), \
-       .max_power = 20, \
-}
-
-#define CHAN5G(_freq, _idx) { \
-       .band = IEEE80211_BAND_5GHZ, \
-       .center_freq = (_freq), \
-       .hw_value = (_idx), \
-       .max_power = 20, \
-}
-
-/* Some 2 GHz radios are actually tunable on 2312-2732
- * on 5 MHz steps, we support the channels which we know
- * we have calibration data for all cards though to make
- * this static */
-static const struct ieee80211_channel ath9k_2ghz_chantable[] = {
-       CHAN2G(2412, 0), /* Channel 1 */
-       CHAN2G(2417, 1), /* Channel 2 */
-       CHAN2G(2422, 2), /* Channel 3 */
-       CHAN2G(2427, 3), /* Channel 4 */
-       CHAN2G(2432, 4), /* Channel 5 */
-       CHAN2G(2437, 5), /* Channel 6 */
-       CHAN2G(2442, 6), /* Channel 7 */
-       CHAN2G(2447, 7), /* Channel 8 */
-       CHAN2G(2452, 8), /* Channel 9 */
-       CHAN2G(2457, 9), /* Channel 10 */
-       CHAN2G(2462, 10), /* Channel 11 */
-       CHAN2G(2467, 11), /* Channel 12 */
-       CHAN2G(2472, 12), /* Channel 13 */
-       CHAN2G(2484, 13), /* Channel 14 */
-};
-
-/* Some 5 GHz radios are actually tunable on XXXX-YYYY
- * on 5 MHz steps, we support the channels which we know
- * we have calibration data for all cards though to make
- * this static */
-static const struct ieee80211_channel ath9k_5ghz_chantable[] = {
-       /* _We_ call this UNII 1 */
-       CHAN5G(5180, 14), /* Channel 36 */
-       CHAN5G(5200, 15), /* Channel 40 */
-       CHAN5G(5220, 16), /* Channel 44 */
-       CHAN5G(5240, 17), /* Channel 48 */
-       /* _We_ call this UNII 2 */
-       CHAN5G(5260, 18), /* Channel 52 */
-       CHAN5G(5280, 19), /* Channel 56 */
-       CHAN5G(5300, 20), /* Channel 60 */
-       CHAN5G(5320, 21), /* Channel 64 */
-       /* _We_ call this "Middle band" */
-       CHAN5G(5500, 22), /* Channel 100 */
-       CHAN5G(5520, 23), /* Channel 104 */
-       CHAN5G(5540, 24), /* Channel 108 */
-       CHAN5G(5560, 25), /* Channel 112 */
-       CHAN5G(5580, 26), /* Channel 116 */
-       CHAN5G(5600, 27), /* Channel 120 */
-       CHAN5G(5620, 28), /* Channel 124 */
-       CHAN5G(5640, 29), /* Channel 128 */
-       CHAN5G(5660, 30), /* Channel 132 */
-       CHAN5G(5680, 31), /* Channel 136 */
-       CHAN5G(5700, 32), /* Channel 140 */
-       /* _We_ call this UNII 3 */
-       CHAN5G(5745, 33), /* Channel 149 */
-       CHAN5G(5765, 34), /* Channel 153 */
-       CHAN5G(5785, 35), /* Channel 157 */
-       CHAN5G(5805, 36), /* Channel 161 */
-       CHAN5G(5825, 37), /* Channel 165 */
-};
-
-/* Atheros hardware rate code addition for short premble */
-#define SHPCHECK(__hw_rate, __flags) \
-       ((__flags & IEEE80211_RATE_SHORT_PREAMBLE) ? (__hw_rate | 0x04 ) : 0)
-
-#define RATE(_bitrate, _hw_rate, _flags) {              \
-       .bitrate        = (_bitrate),                   \
-       .flags          = (_flags),                     \
-       .hw_value       = (_hw_rate),                   \
-       .hw_value_short = (SHPCHECK(_hw_rate, _flags))  \
-}
-
-static struct ieee80211_rate ath9k_legacy_rates[] = {
-       RATE(10, 0x1b, 0),
-       RATE(20, 0x1a, IEEE80211_RATE_SHORT_PREAMBLE),
-       RATE(55, 0x19, IEEE80211_RATE_SHORT_PREAMBLE),
-       RATE(110, 0x18, IEEE80211_RATE_SHORT_PREAMBLE),
-       RATE(60, 0x0b, 0),
-       RATE(90, 0x0f, 0),
-       RATE(120, 0x0a, 0),
-       RATE(180, 0x0e, 0),
-       RATE(240, 0x09, 0),
-       RATE(360, 0x0d, 0),
-       RATE(480, 0x08, 0),
-       RATE(540, 0x0c, 0),
-};
-
-static void ath9k_deinit_softc(struct ath_softc *sc);
-
-/*
- * Read and write, they both share the same lock. We do this to serialize
- * reads and writes on Atheros 802.11n PCI devices only. This is required
- * as the FIFO on these devices can only accept sanely 2 requests.
- */
-
-static void ath9k_iowrite32(void *hw_priv, u32 val, u32 reg_offset)
-{
-       struct ath_hw *ah = (struct ath_hw *) hw_priv;
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath_softc *sc = (struct ath_softc *) common->priv;
-
-       if (ah->config.serialize_regmode == SER_REG_MODE_ON) {
-               unsigned long flags;
-               spin_lock_irqsave(&sc->sc_serial_rw, flags);
-               iowrite32(val, sc->mem + reg_offset);
-               spin_unlock_irqrestore(&sc->sc_serial_rw, flags);
-       } else
-               iowrite32(val, sc->mem + reg_offset);
-}
-
-static unsigned int ath9k_ioread32(void *hw_priv, u32 reg_offset)
-{
-       struct ath_hw *ah = (struct ath_hw *) hw_priv;
-       struct ath_common *common = ath9k_hw_common(ah);
-       struct ath_softc *sc = (struct ath_softc *) common->priv;
-       u32 val;
-
-       if (ah->config.serialize_regmode == SER_REG_MODE_ON) {
-               unsigned long flags;
-               spin_lock_irqsave(&sc->sc_serial_rw, flags);
-               val = ioread32(sc->mem + reg_offset);
-               spin_unlock_irqrestore(&sc->sc_serial_rw, flags);
-       } else
-               val = ioread32(sc->mem + reg_offset);
-       return val;
-}
-
-static const struct ath_ops ath9k_common_ops = {
-       .read = ath9k_ioread32,
-       .write = ath9k_iowrite32,
-};
-
-/**************************/
-/*     Initialization     */
-/**************************/
-
-static void setup_ht_cap(struct ath_softc *sc,
-                        struct ieee80211_sta_ht_cap *ht_info)
-{
-       struct ath_hw *ah = sc->sc_ah;
-       struct ath_common *common = ath9k_hw_common(ah);
-       u8 tx_streams, rx_streams;
-       int i, max_streams;
-
-       ht_info->ht_supported = true;
-       ht_info->cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
-                      IEEE80211_HT_CAP_SM_PS |
-                      IEEE80211_HT_CAP_SGI_40 |
-                      IEEE80211_HT_CAP_DSSSCCK40;
-
-       if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_LDPC)
-               ht_info->cap |= IEEE80211_HT_CAP_LDPC_CODING;
-
-       if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_SGI_20)
-               ht_info->cap |= IEEE80211_HT_CAP_SGI_20;
-
-       ht_info->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
-       ht_info->ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
-
-       if (AR_SREV_9300_20_OR_LATER(ah))
-               max_streams = 3;
-       else
-               max_streams = 2;
-
-       if (AR_SREV_9280_10_OR_LATER(ah)) {
-               if (max_streams >= 2)
-                       ht_info->cap |= IEEE80211_HT_CAP_TX_STBC;
-               ht_info->cap |= (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT);
-       }
-
-       /* set up supported mcs set */
-       memset(&ht_info->mcs, 0, sizeof(ht_info->mcs));
-       tx_streams = ath9k_cmn_count_streams(common->tx_chainmask, max_streams);
-       rx_streams = ath9k_cmn_count_streams(common->rx_chainmask, max_streams);
-
-       ath_print(common, ATH_DBG_CONFIG,
-                 "TX streams %d, RX streams: %d\n",
-                 tx_streams, rx_streams);
-
-       if (tx_streams != rx_streams) {
-               ht_info->mcs.tx_params |= IEEE80211_HT_MCS_TX_RX_DIFF;
-               ht_info->mcs.tx_params |= ((tx_streams - 1) <<
-                               IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT);
-       }
-
-       for (i = 0; i < rx_streams; i++)
-               ht_info->mcs.rx_mask[i] = 0xff;
-
-       ht_info->mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED;
-}
-
-static int ath9k_reg_notifier(struct wiphy *wiphy,
-                             struct regulatory_request *request)
-{
-       struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
-       struct ath_wiphy *aphy = hw->priv;
-       struct ath_softc *sc = aphy->sc;
-       struct ath_regulatory *reg = ath9k_hw_regulatory(sc->sc_ah);
-
-       return ath_reg_notifier_apply(wiphy, request, reg);
-}
-
-/*
- *  This function will allocate both the DMA descriptor structure, and the
- *  buffers it contains.  These are used to contain the descriptors used
- *  by the system.
-*/
-int ath_descdma_setup(struct ath_softc *sc, struct ath_descdma *dd,
-                     struct list_head *head, const char *name,
-                     int nbuf, int ndesc, bool is_tx)
-{
-#define        DS2PHYS(_dd, _ds)                                               \
-       ((_dd)->dd_desc_paddr + ((caddr_t)(_ds) - (caddr_t)(_dd)->dd_desc))
-#define ATH_DESC_4KB_BOUND_CHECK(_daddr) ((((_daddr) & 0xFFF) > 0xF7F) ? 1 : 0)
-#define ATH_DESC_4KB_BOUND_NUM_SKIPPED(_len) ((_len) / 4096)
-       struct ath_common *common = ath9k_hw_common(sc->sc_ah);
-       u8 *ds;
-       struct ath_buf *bf;
-       int i, bsize, error, desc_len;
-
-       ath_print(common, ATH_DBG_CONFIG, "%s DMA: %u buffers %u desc/buf\n",
-                 name, nbuf, ndesc);
-
-       INIT_LIST_HEAD(head);
-
-       if (is_tx)
-               desc_len = sc->sc_ah->caps.tx_desc_len;
-       else
-               desc_len = sizeof(struct ath_desc);
-
-       /* ath_desc must be a multiple of DWORDs */
-       if ((desc_len % 4) != 0) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "ath_desc not DWORD aligned\n");
-               BUG_ON((desc_len % 4) != 0);
-               error = -ENOMEM;
-               goto fail;
-       }
-
-       dd->dd_desc_len = desc_len * nbuf * ndesc;
-
-       /*
-        * Need additional DMA memory because we can't use
-        * descriptors that cross the 4K page boundary. Assume
-        * one skipped descriptor per 4K page.
-        */
-       if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_4KB_SPLITTRANS)) {
-               u32 ndesc_skipped =
-                       ATH_DESC_4KB_BOUND_NUM_SKIPPED(dd->dd_desc_len);
-               u32 dma_len;
-
-               while (ndesc_skipped) {
-                       dma_len = ndesc_skipped * desc_len;
-                       dd->dd_desc_len += dma_len;
-
-                       ndesc_skipped = ATH_DESC_4KB_BOUND_NUM_SKIPPED(dma_len);
-               }
-       }
-
-       /* allocate descriptors */
-       dd->dd_desc = dma_alloc_coherent(sc->dev, dd->dd_desc_len,
-                                        &dd->dd_desc_paddr, GFP_KERNEL);
-       if (dd->dd_desc == NULL) {
-               error = -ENOMEM;
-               goto fail;
-       }
-       ds = (u8 *) dd->dd_desc;
-       ath_print(common, ATH_DBG_CONFIG, "%s DMA map: %p (%u) -> %llx (%u)\n",
-                 name, ds, (u32) dd->dd_desc_len,
-                 ito64(dd->dd_desc_paddr), /*XXX*/(u32) dd->dd_desc_len);
-
-       /* allocate buffers */
-       bsize = sizeof(struct ath_buf) * nbuf;
-       bf = kzalloc(bsize, GFP_KERNEL);
-       if (bf == NULL) {
-               error = -ENOMEM;
-               goto fail2;
-       }
-       dd->dd_bufptr = bf;
-
-       for (i = 0; i < nbuf; i++, bf++, ds += (desc_len * ndesc)) {
-               bf->bf_desc = ds;
-               bf->bf_daddr = DS2PHYS(dd, ds);
-
-               if (!(sc->sc_ah->caps.hw_caps &
-                     ATH9K_HW_CAP_4KB_SPLITTRANS)) {
-                       /*
-                        * Skip descriptor addresses which can cause 4KB
-                        * boundary crossing (addr + length) with a 32 dword
-                        * descriptor fetch.
-                        */
-                       while (ATH_DESC_4KB_BOUND_CHECK(bf->bf_daddr)) {
-                               BUG_ON((caddr_t) bf->bf_desc >=
-                                      ((caddr_t) dd->dd_desc +
-                                       dd->dd_desc_len));
-
-                               ds += (desc_len * ndesc);
-                               bf->bf_desc = ds;
-                               bf->bf_daddr = DS2PHYS(dd, ds);
-                       }
-               }
-               list_add_tail(&bf->list, head);
-       }
-       return 0;
-fail2:
-       dma_free_coherent(sc->dev, dd->dd_desc_len, dd->dd_desc,
-                         dd->dd_desc_paddr);
-fail:
-       memset(dd, 0, sizeof(*dd));
-       return error;
-#undef ATH_DESC_4KB_BOUND_CHECK
-#undef ATH_DESC_4KB_BOUND_NUM_SKIPPED
-#undef DS2PHYS
-}
-
-static void ath9k_init_crypto(struct ath_softc *sc)
-{
-       struct ath_common *common = ath9k_hw_common(sc->sc_ah);
-       int i = 0;
-
-       /* Get the hardware key cache size. */
-       common->keymax = sc->sc_ah->caps.keycache_size;
-       if (common->keymax > ATH_KEYMAX) {
-               ath_print(common, ATH_DBG_ANY,
-                         "Warning, using only %u entries in %u key cache\n",
-                         ATH_KEYMAX, common->keymax);
-               common->keymax = ATH_KEYMAX;
-       }
-
-       /*
-        * Reset the key cache since some parts do not
-        * reset the contents on initial power up.
-        */
-       for (i = 0; i < common->keymax; i++)
-               ath9k_hw_keyreset(sc->sc_ah, (u16) i);
-
-       /*
-        * Check whether the separate key cache entries
-        * are required to handle both tx+rx MIC keys.
-        * With split mic keys the number of stations is limited
-        * to 27 otherwise 59.
-        */
-       if (!(sc->sc_ah->misc_mode & AR_PCU_MIC_NEW_LOC_ENA))
-               common->splitmic = 1;
-}
-
-static int ath9k_init_btcoex(struct ath_softc *sc)
-{
-       int r, qnum;
-
-       switch (sc->sc_ah->btcoex_hw.scheme) {
-       case ATH_BTCOEX_CFG_NONE:
-               break;
-       case ATH_BTCOEX_CFG_2WIRE:
-               ath9k_hw_btcoex_init_2wire(sc->sc_ah);
-               break;
-       case ATH_BTCOEX_CFG_3WIRE:
-               ath9k_hw_btcoex_init_3wire(sc->sc_ah);
-               r = ath_init_btcoex_timer(sc);
-               if (r)
-                       return -1;
-               qnum = sc->tx.hwq_map[WME_AC_BE];
-               ath9k_hw_init_btcoex_hw(sc->sc_ah, qnum);
-               sc->btcoex.bt_stomp_type = ATH_BTCOEX_STOMP_LOW;
-               break;
-       default:
-               WARN_ON(1);
-               break;
-       }
-
-       return 0;
-}
-
-static int ath9k_init_queues(struct ath_softc *sc)
-{
-       struct ath_common *common = ath9k_hw_common(sc->sc_ah);
-       int i = 0;
-
-       for (i = 0; i < ARRAY_SIZE(sc->tx.hwq_map); i++)
-               sc->tx.hwq_map[i] = -1;
-
-       sc->beacon.beaconq = ath9k_hw_beaconq_setup(sc->sc_ah);
-       if (sc->beacon.beaconq == -1) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to setup a beacon xmit queue\n");
-               goto err;
-       }
-
-       sc->beacon.cabq = ath_txq_setup(sc, ATH9K_TX_QUEUE_CAB, 0);
-       if (sc->beacon.cabq == NULL) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to setup CAB xmit queue\n");
-               goto err;
-       }
-
-       sc->config.cabqReadytime = ATH_CABQ_READY_TIME;
-       ath_cabq_update(sc);
-
-       if (!ath_tx_setup(sc, WME_AC_BK)) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to setup xmit queue for BK traffic\n");
-               goto err;
-       }
-
-       if (!ath_tx_setup(sc, WME_AC_BE)) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to setup xmit queue for BE traffic\n");
-               goto err;
-       }
-       if (!ath_tx_setup(sc, WME_AC_VI)) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to setup xmit queue for VI traffic\n");
-               goto err;
-       }
-       if (!ath_tx_setup(sc, WME_AC_VO)) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to setup xmit queue for VO traffic\n");
-               goto err;
-       }
-
-       return 0;
-
-err:
-       for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)
-               if (ATH_TXQ_SETUP(sc, i))
-                       ath_tx_cleanupq(sc, &sc->tx.txq[i]);
-
-       return -EIO;
-}
-
-static int ath9k_init_channels_rates(struct ath_softc *sc)
-{
-       void *channels;
-
-       if (test_bit(ATH9K_MODE_11G, sc->sc_ah->caps.wireless_modes)) {
-               channels = kmemdup(ath9k_2ghz_chantable,
-                       sizeof(ath9k_2ghz_chantable), GFP_KERNEL);
-               if (!channels)
-                   return -ENOMEM;
-
-               sc->sbands[IEEE80211_BAND_2GHZ].channels = channels;
-               sc->sbands[IEEE80211_BAND_2GHZ].band = IEEE80211_BAND_2GHZ;
-               sc->sbands[IEEE80211_BAND_2GHZ].n_channels =
-                       ARRAY_SIZE(ath9k_2ghz_chantable);
-               sc->sbands[IEEE80211_BAND_2GHZ].bitrates = ath9k_legacy_rates;
-               sc->sbands[IEEE80211_BAND_2GHZ].n_bitrates =
-                       ARRAY_SIZE(ath9k_legacy_rates);
-       }
-
-       if (test_bit(ATH9K_MODE_11A, sc->sc_ah->caps.wireless_modes)) {
-               channels = kmemdup(ath9k_5ghz_chantable,
-                       sizeof(ath9k_5ghz_chantable), GFP_KERNEL);
-               if (!channels) {
-                       if (sc->sbands[IEEE80211_BAND_2GHZ].channels)
-                               kfree(sc->sbands[IEEE80211_BAND_2GHZ].channels);
-                       return -ENOMEM;
-               }
-
-               sc->sbands[IEEE80211_BAND_5GHZ].channels = channels;
-               sc->sbands[IEEE80211_BAND_5GHZ].band = IEEE80211_BAND_5GHZ;
-               sc->sbands[IEEE80211_BAND_5GHZ].n_channels =
-                       ARRAY_SIZE(ath9k_5ghz_chantable);
-               sc->sbands[IEEE80211_BAND_5GHZ].bitrates =
-                       ath9k_legacy_rates + 4;
-               sc->sbands[IEEE80211_BAND_5GHZ].n_bitrates =
-                       ARRAY_SIZE(ath9k_legacy_rates) - 4;
-       }
-       return 0;
-}
-
-static void ath9k_init_misc(struct ath_softc *sc)
-{
-       struct ath_common *common = ath9k_hw_common(sc->sc_ah);
-       int i = 0;
-
-       common->ani.noise_floor = ATH_DEFAULT_NOISE_FLOOR;
-       setup_timer(&common->ani.timer, ath_ani_calibrate, (unsigned long)sc);
-
-       sc->config.txpowlimit = ATH_TXPOWER_MAX;
-
-       if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) {
-               sc->sc_flags |= SC_OP_TXAGGR;
-               sc->sc_flags |= SC_OP_RXAGGR;
-       }
-
-       common->tx_chainmask = sc->sc_ah->caps.tx_chainmask;
-       common->rx_chainmask = sc->sc_ah->caps.rx_chainmask;
-
-       ath9k_hw_set_diversity(sc->sc_ah, true);
-       sc->rx.defant = ath9k_hw_getdefantenna(sc->sc_ah);
-
-       if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_BSSIDMASK)
-               memcpy(common->bssidmask, ath_bcast_mac, ETH_ALEN);
-
-       sc->beacon.slottime = ATH9K_SLOT_TIME_9;
-
-       for (i = 0; i < ARRAY_SIZE(sc->beacon.bslot); i++) {
-               sc->beacon.bslot[i] = NULL;
-               sc->beacon.bslot_aphy[i] = NULL;
-       }
-}
-
-static int ath9k_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid,
-                           const struct ath_bus_ops *bus_ops)
-{
-       struct ath_hw *ah = NULL;
-       struct ath_common *common;
-       int ret = 0, i;
-       int csz = 0;
-
-       ah = kzalloc(sizeof(struct ath_hw), GFP_KERNEL);
-       if (!ah)
-               return -ENOMEM;
-
-       ah->hw_version.devid = devid;
-       ah->hw_version.subsysid = subsysid;
-       sc->sc_ah = ah;
-
-       common = ath9k_hw_common(ah);
-       common->ops = &ath9k_common_ops;
-       common->bus_ops = bus_ops;
-       common->ah = ah;
-       common->hw = sc->hw;
-       common->priv = sc;
-       common->debug_mask = ath9k_debug;
-
-       spin_lock_init(&sc->wiphy_lock);
-       spin_lock_init(&sc->sc_resetlock);
-       spin_lock_init(&sc->sc_serial_rw);
-       spin_lock_init(&sc->sc_pm_lock);
-       mutex_init(&sc->mutex);
-       tasklet_init(&sc->intr_tq, ath9k_tasklet, (unsigned long)sc);
-       tasklet_init(&sc->bcon_tasklet, ath_beacon_tasklet,
-                    (unsigned long)sc);
-
-       /*
-        * Cache line size is used to size and align various
-        * structures used to communicate with the hardware.
-        */
-       ath_read_cachesize(common, &csz);
-       common->cachelsz = csz << 2; /* convert to bytes */
-
-       /* Initializes the hardware for all supported chipsets */
-       ret = ath9k_hw_init(ah);
-       if (ret)
-               goto err_hw;
-
-       ret = ath9k_init_debug(ah);
-       if (ret) {
-               ath_print(common, ATH_DBG_FATAL,
-                         "Unable to create debugfs files\n");
-               goto err_debug;
-       }
-
-       ret = ath9k_init_queues(sc);
-       if (ret)
-               goto err_queues;
-
-       ret =  ath9k_init_btcoex(sc);
-       if (ret)
-               goto err_btcoex;
-
-       ret = ath9k_init_channels_rates(sc);
-       if (ret)
-               goto err_btcoex;
-
-       ath9k_init_crypto(sc);
-       ath9k_init_misc(sc);
-
-       return 0;
-
-err_btcoex:
-       for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)
-               if (ATH_TXQ_SETUP(sc, i))
-                       ath_tx_cleanupq(sc, &sc->tx.txq[i]);
-err_queues:
-       ath9k_exit_debug(ah);
-err_debug:
-       ath9k_hw_deinit(ah);
-err_hw:
-       tasklet_kill(&sc->intr_tq);
-       tasklet_kill(&sc->bcon_tasklet);
-
-       kfree(ah);
-       sc->sc_ah = NULL;
-
-       return ret;
-}
-
-void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
-{
-       struct ath_common *common = ath9k_hw_common(sc->sc_ah);
-
-       hw->flags = IEEE80211_HW_RX_INCLUDES_FCS |
-               IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
-               IEEE80211_HW_SIGNAL_DBM |
-               IEEE80211_HW_SUPPORTS_PS |
-               IEEE80211_HW_PS_NULLFUNC_STACK |
-               IEEE80211_HW_SPECTRUM_MGMT |
-               IEEE80211_HW_REPORTS_TX_ACK_STATUS;
-
-       if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT)
-                hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
-
-       if (AR_SREV_9160_10_OR_LATER(sc->sc_ah) || modparam_nohwcrypt)
-               hw->flags |= IEEE80211_HW_MFP_CAPABLE;
-
-       hw->wiphy->interface_modes =
-               BIT(NL80211_IFTYPE_AP) |
-               BIT(NL80211_IFTYPE_STATION) |
-               BIT(NL80211_IFTYPE_ADHOC) |
-               BIT(NL80211_IFTYPE_MESH_POINT);
-
-       if (AR_SREV_5416(sc->sc_ah))
-               hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
-
-       hw->queues = 4;
-       hw->max_rates = 4;
-       hw->channel_change_time = 5000;
-       hw->max_listen_interval = 10;
-       hw->max_rate_tries = 10;
-       hw->sta_data_size = sizeof(struct ath_node);
-       hw->vif_data_size = sizeof(struct ath_vif);
-
-       hw->rate_control_algorithm = "ath9k_rate_control";
-
-       if (test_bit(ATH9K_MODE_11G, sc->sc_ah->caps.wireless_modes))
-               hw->wiphy->bands[IEEE80211_BAND_2GHZ] =
-                       &sc->sbands[IEEE80211_BAND_2GHZ];
-       if (test_bit(ATH9K_MODE_11A, sc->sc_ah->caps.wireless_modes))
-               hw->wiphy->bands[IEEE80211_BAND_5GHZ] =
-                       &sc->sbands[IEEE80211_BAND_5GHZ];
-
-       if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) {
-               if (test_bit(ATH9K_MODE_11G, sc->sc_ah->caps.wireless_modes))
-                       setup_ht_cap(sc, &sc->sbands[IEEE80211_BAND_2GHZ].ht_cap);
-               if (test_bit(ATH9K_MODE_11A, sc->sc_ah->caps.wireless_modes))
-                       setup_ht_cap(sc, &sc->sbands[IEEE80211_BAND_5GHZ].ht_cap);
-       }
-
-       SET_IEEE80211_PERM_ADDR(hw, common->macaddr);
-}
-
-int ath9k_init_device(u16 devid, struct ath_softc *sc, u16 subsysid,
-                   const struct ath_bus_ops *bus_ops)
-{
-       struct ieee80211_hw *hw = sc->hw;
-       struct ath_common *common;
-       struct ath_hw *ah;
-       int error = 0;
-       struct ath_regulatory *reg;
-
-       /* Bring up device */
-       error = ath9k_init_softc(devid, sc, subsysid, bus_ops);
-       if (error != 0)
-               goto error_init;
-
-       ah = sc->sc_ah;
-       common = ath9k_hw_common(ah);
-       ath9k_set_hw_capab(sc, hw);
-
-       /* Initialize regulatory */
-       error = ath_regd_init(&common->regulatory, sc->hw->wiphy,
-                             ath9k_reg_notifier);
-       if (error)
-               goto error_regd;
-
-       reg = &common->regulatory;
-
-       /* Setup TX DMA */
-       error = ath_tx_init(sc, ATH_TXBUF);
-       if (error != 0)
-               goto error_tx;
-
-       /* Setup RX DMA */
-       error = ath_rx_init(sc, ATH_RXBUF);
-       if (error != 0)
-               goto error_rx;
-
-       /* Register with mac80211 */
-       error = ieee80211_register_hw(hw);
-       if (error)
-               goto error_register;
-
-       /* Handle world regulatory */
-       if (!ath_is_world_regd(reg)) {
-               error = regulatory_hint(hw->wiphy, reg->alpha2);
-               if (error)
-                       goto error_world;
-       }
-
-       INIT_WORK(&sc->hw_check_work, ath_hw_check);
-       INIT_WORK(&sc->paprd_work, ath_paprd_calibrate);
-       INIT_WORK(&sc->chan_work, ath9k_wiphy_chan_work);
-       INIT_DELAYED_WORK(&sc->wiphy_work, ath9k_wiphy_work);
-       sc->wiphy_scheduler_int = msecs_to_jiffies(500);
-
-       ath_init_leds(sc);
-       ath_start_rfkill_poll(sc);
-
-       return 0;
-
-error_world:
-       ieee80211_unregister_hw(hw);
-error_register:
-       ath_rx_cleanup(sc);
-error_rx:
-       ath_tx_cleanup(sc);
-error_tx:
-       /* Nothing */
-error_regd:
-       ath9k_deinit_softc(sc);
-error_init:
-       return error;
-}
-
-/*****************************/
-/*     De-Initialization     */
-/*****************************/
-
-static void ath9k_deinit_softc(struct ath_softc *sc)
-{
-       int i = 0;
-
-       if (sc->sbands[IEEE80211_BAND_2GHZ].channels)
-               kfree(sc->sbands[IEEE80211_BAND_2GHZ].channels);
-
-       if (sc->sbands[IEEE80211_BAND_5GHZ].channels)
-               kfree(sc->sbands[IEEE80211_BAND_5GHZ].channels);
-
-        if ((sc->btcoex.no_stomp_timer) &&
-           sc->sc_ah->btcoex_hw.scheme == ATH_BTCOEX_CFG_3WIRE)
-               ath_gen_timer_free(sc->sc_ah, sc->btcoex.no_stomp_timer);
-
-       for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)
-               if (ATH_TXQ_SETUP(sc, i))
-                       ath_tx_cleanupq(sc, &sc->tx.txq[i]);
-
-       ath9k_exit_debug(sc->sc_ah);
-       ath9k_hw_deinit(sc->sc_ah);
-
-       tasklet_kill(&sc->intr_tq);
-       tasklet_kill(&sc->bcon_tasklet);
-
-       kfree(sc->sc_ah);
-       sc->sc_ah = NULL;
-}
-
-void ath9k_deinit_device(struct ath_softc *sc)
-{
-       struct ieee80211_hw *hw = sc->hw;
-       int i = 0;
-
-       ath9k_ps_wakeup(sc);
-
-       wiphy_rfkill_stop_polling(sc->hw->wiphy);
-       ath_deinit_leds(sc);
-
-       for (i = 0; i < sc->num_sec_wiphy; i++) {
-               struct ath_wiphy *aphy = sc->sec_wiphy[i];
-               if (aphy == NULL)
-                       continue;
-               sc->sec_wiphy[i] = NULL;
-               ieee80211_unregister_hw(aphy->hw);
-               ieee80211_free_hw(aphy->hw);
-       }
-
-       ieee80211_unregister_hw(hw);
-       ath_rx_cleanup(sc);
-       ath_tx_cleanup(sc);
-       ath9k_deinit_softc(sc);
-       kfree(sc->sec_wiphy);
-}
-
-void ath_descdma_cleanup(struct ath_softc *sc,
-                        struct ath_descdma *dd,
-                        struct list_head *head)
-{
-       dma_free_coherent(sc->dev, dd->dd_desc_len, dd->dd_desc,
-                         dd->dd_desc_paddr);
-
-       INIT_LIST_HEAD(head);
-       kfree(dd->dd_bufptr);
-       memset(dd, 0, sizeof(*dd));
-}
-
-/************************/
-/*     Module Hooks     */
-/************************/
-
-static int __init ath9k_init(void)
-{
-       int error;
-
-       /* Register rate control algorithm */
-       error = ath_rate_control_register();
-       if (error != 0) {
-               printk(KERN_ERR
-                       "ath9k: Unable to register rate control "
-                       "algorithm: %d\n",
-                       error);
-               goto err_out;
-       }
-
-       error = ath9k_debug_create_root();
-       if (error) {
-               printk(KERN_ERR
-                       "ath9k: Unable to create debugfs root: %d\n",
-                       error);
-               goto err_rate_unregister;
-       }
-
-       error = ath_pci_init();
-       if (error < 0) {
-               printk(KERN_ERR
-                       "ath9k: No PCI devices found, driver not installed.\n");
-               error = -ENODEV;
-               goto err_remove_root;
-       }
-
-       error = ath_ahb_init();
-       if (error < 0) {
-               error = -ENODEV;
-               goto err_pci_exit;
-       }
-
-       return 0;
-
- err_pci_exit:
-       ath_pci_exit();
-
- err_remove_root:
-       ath9k_debug_remove_root();
- err_rate_unregister:
-       ath_rate_control_unregister();
- err_out:
-       return error;
-}
-module_init(ath9k_init);
-
-static void __exit ath9k_exit(void)
-{
-       ath_ahb_exit();
-       ath_pci_exit();
-       ath9k_debug_remove_root();
-       ath_rate_control_unregister();
-       printk(KERN_INFO "%s: Driver unloaded\n", dev_info);
-}
-module_exit(ath9k_exit);
diff --git a/drivers/net/wireless/ath/ath9k/wmi.c b/drivers/net/wireless/ath/ath9k/wmi.c
deleted file mode 100644 (file)
index 6260faa..0000000
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "htc.h"
-
-static const char *wmi_cmd_to_name(enum wmi_cmd_id wmi_cmd)
-{
-       switch (wmi_cmd) {
-       case WMI_ECHO_CMDID:
-               return "WMI_ECHO_CMDID";
-       case WMI_ACCESS_MEMORY_CMDID:
-               return "WMI_ACCESS_MEMORY_CMDID";
-       case WMI_DISABLE_INTR_CMDID:
-               return "WMI_DISABLE_INTR_CMDID";
-       case WMI_ENABLE_INTR_CMDID:
-               return "WMI_ENABLE_INTR_CMDID";
-       case WMI_RX_LINK_CMDID:
-               return "WMI_RX_LINK_CMDID";
-       case WMI_ATH_INIT_CMDID:
-               return "WMI_ATH_INIT_CMDID";
-       case WMI_ABORT_TXQ_CMDID:
-               return "WMI_ABORT_TXQ_CMDID";
-       case WMI_STOP_TX_DMA_CMDID:
-               return "WMI_STOP_TX_DMA_CMDID";
-       case WMI_STOP_DMA_RECV_CMDID:
-               return "WMI_STOP_DMA_RECV_CMDID";
-       case WMI_ABORT_TX_DMA_CMDID:
-               return "WMI_ABORT_TX_DMA_CMDID";
-       case WMI_DRAIN_TXQ_CMDID:
-               return "WMI_DRAIN_TXQ_CMDID";
-       case WMI_DRAIN_TXQ_ALL_CMDID:
-               return "WMI_DRAIN_TXQ_ALL_CMDID";
-       case WMI_START_RECV_CMDID:
-               return "WMI_START_RECV_CMDID";
-       case WMI_STOP_RECV_CMDID:
-               return "WMI_STOP_RECV_CMDID";
-       case WMI_FLUSH_RECV_CMDID:
-               return "WMI_FLUSH_RECV_CMDID";
-       case WMI_SET_MODE_CMDID:
-               return "WMI_SET_MODE_CMDID";
-       case WMI_RESET_CMDID:
-               return "WMI_RESET_CMDID";
-       case WMI_NODE_CREATE_CMDID:
-               return "WMI_NODE_CREATE_CMDID";
-       case WMI_NODE_REMOVE_CMDID:
-               return "WMI_NODE_REMOVE_CMDID";
-       case WMI_VAP_REMOVE_CMDID:
-               return "WMI_VAP_REMOVE_CMDID";
-       case WMI_VAP_CREATE_CMDID:
-               return "WMI_VAP_CREATE_CMDID";
-       case WMI_BEACON_UPDATE_CMDID:
-               return "WMI_BEACON_UPDATE_CMDID";
-       case WMI_REG_READ_CMDID:
-               return "WMI_REG_READ_CMDID";
-       case WMI_REG_WRITE_CMDID:
-               return "WMI_REG_WRITE_CMDID";
-       case WMI_RC_STATE_CHANGE_CMDID:
-               return "WMI_RC_STATE_CHANGE_CMDID";
-       case WMI_RC_RATE_UPDATE_CMDID:
-               return "WMI_RC_RATE_UPDATE_CMDID";
-       case WMI_DEBUG_INFO_CMDID:
-               return "WMI_DEBUG_INFO_CMDID";
-       case WMI_HOST_ATTACH:
-               return "WMI_HOST_ATTACH";
-       case WMI_TARGET_IC_UPDATE_CMDID:
-               return "WMI_TARGET_IC_UPDATE_CMDID";
-       case WMI_TGT_STATS_CMDID:
-               return "WMI_TGT_STATS_CMDID";
-       case WMI_TX_AGGR_ENABLE_CMDID:
-               return "WMI_TX_AGGR_ENABLE_CMDID";
-       case WMI_TGT_DETACH_CMDID:
-               return "WMI_TGT_DETACH_CMDID";
-       case WMI_TGT_TXQ_ENABLE_CMDID:
-               return "WMI_TGT_TXQ_ENABLE_CMDID";
-       }
-
-       return "Bogus";
-}
-
-struct wmi *ath9k_init_wmi(struct ath9k_htc_priv *priv)
-{
-       struct wmi *wmi;
-
-       wmi = kzalloc(sizeof(struct wmi), GFP_KERNEL);
-       if (!wmi)
-               return NULL;
-
-       wmi->drv_priv = priv;
-       wmi->stopped = false;
-       mutex_init(&wmi->op_mutex);
-       mutex_init(&wmi->multi_write_mutex);
-       init_completion(&wmi->cmd_wait);
-
-       return wmi;
-}
-
-void ath9k_deinit_wmi(struct ath9k_htc_priv *priv)
-{
-       struct wmi *wmi = priv->wmi;
-
-       mutex_lock(&wmi->op_mutex);
-       wmi->stopped = true;
-       mutex_unlock(&wmi->op_mutex);
-
-       kfree(priv->wmi);
-}
-
-void ath9k_wmi_tasklet(unsigned long data)
-{
-       struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *)data;
-       struct ath_common *common = ath9k_hw_common(priv->ah);
-       struct wmi_cmd_hdr *hdr;
-       struct wmi_swba *swba_hdr;
-       enum wmi_event_id event;
-       struct sk_buff *skb;
-       void *wmi_event;
-       unsigned long flags;
-#ifdef CONFIG_ATH9K_HTC_DEBUGFS
-       __be32 txrate;
-#endif
-
-       spin_lock_irqsave(&priv->wmi->wmi_lock, flags);
-       skb = priv->wmi->wmi_skb;
-       spin_unlock_irqrestore(&priv->wmi->wmi_lock, flags);
-
-       hdr = (struct wmi_cmd_hdr *) skb->data;
-       event = be16_to_cpu(hdr->command_id);
-       wmi_event = skb_pull(skb, sizeof(struct wmi_cmd_hdr));
-
-       ath_print(common, ATH_DBG_WMI,
-                 "WMI Event: 0x%x\n", event);
-
-       switch (event) {
-       case WMI_TGT_RDY_EVENTID:
-               break;
-       case WMI_SWBA_EVENTID:
-               swba_hdr = (struct wmi_swba *) wmi_event;
-               ath9k_htc_swba(priv, swba_hdr->beacon_pending);
-               break;
-       case WMI_FATAL_EVENTID:
-               break;
-       case WMI_TXTO_EVENTID:
-               break;
-       case WMI_BMISS_EVENTID:
-               break;
-       case WMI_WLAN_TXCOMP_EVENTID:
-               break;
-       case WMI_DELBA_EVENTID:
-               break;
-       case WMI_TXRATE_EVENTID:
-#ifdef CONFIG_ATH9K_HTC_DEBUGFS
-               txrate = ((struct wmi_event_txrate *)wmi_event)->txrate;
-               priv->debug.txrate = be32_to_cpu(txrate);
-#endif
-               break;
-       default:
-               break;
-       }
-
-       kfree_skb(skb);
-}
-
-static void ath9k_wmi_rsp_callback(struct wmi *wmi, struct sk_buff *skb)
-{
-       skb_pull(skb, sizeof(struct wmi_cmd_hdr));
-
-       if (wmi->cmd_rsp_buf != NULL && wmi->cmd_rsp_len != 0)
-               memcpy(wmi->cmd_rsp_buf, skb->data, wmi->cmd_rsp_len);
-
-       complete(&wmi->cmd_wait);
-}
-
-static void ath9k_wmi_ctrl_rx(void *priv, struct sk_buff *skb,
-                             enum htc_endpoint_id epid)
-{
-       struct wmi *wmi = (struct wmi *) priv;
-       struct wmi_cmd_hdr *hdr;
-       u16 cmd_id;
-
-       if (unlikely(wmi->stopped))
-               goto free_skb;
-
-       hdr = (struct wmi_cmd_hdr *) skb->data;
-       cmd_id = be16_to_cpu(hdr->command_id);
-
-       if (cmd_id & 0x1000) {
-               spin_lock(&wmi->wmi_lock);
-               wmi->wmi_skb = skb;
-               spin_unlock(&wmi->wmi_lock);
-               tasklet_schedule(&wmi->drv_priv->wmi_tasklet);
-               return;
-       }
-
-       /* Check if there has been a timeout. */
-       spin_lock(&wmi->wmi_lock);
-       if (cmd_id != wmi->last_cmd_id) {
-               spin_unlock(&wmi->wmi_lock);
-               goto free_skb;
-       }
-       spin_unlock(&wmi->wmi_lock);
-
-       /* WMI command response */
-       ath9k_wmi_rsp_callback(wmi, skb);
-
-free_skb:
-       kfree_skb(skb);
-}
-
-static void ath9k_wmi_ctrl_tx(void *priv, struct sk_buff *skb,
-                             enum htc_endpoint_id epid, bool txok)
-{
-       kfree_skb(skb);
-}
-
-int ath9k_wmi_connect(struct htc_target *htc, struct wmi *wmi,
-                     enum htc_endpoint_id *wmi_ctrl_epid)
-{
-       struct htc_service_connreq connect;
-       int ret;
-
-       wmi->htc = htc;
-
-       memset(&connect, 0, sizeof(connect));
-
-       connect.ep_callbacks.priv = wmi;
-       connect.ep_callbacks.tx = ath9k_wmi_ctrl_tx;
-       connect.ep_callbacks.rx = ath9k_wmi_ctrl_rx;
-       connect.service_id = WMI_CONTROL_SVC;
-
-       ret = htc_connect_service(htc, &connect, &wmi->ctrl_epid);
-       if (ret)
-               return ret;
-
-       *wmi_ctrl_epid = wmi->ctrl_epid;
-
-       return 0;
-}
-
-static int ath9k_wmi_cmd_issue(struct wmi *wmi,
-                              struct sk_buff *skb,
-                              enum wmi_cmd_id cmd, u16 len)
-{
-       struct wmi_cmd_hdr *hdr;
-
-       hdr = (struct wmi_cmd_hdr *) skb_push(skb, sizeof(struct wmi_cmd_hdr));
-       hdr->command_id = cpu_to_be16(cmd);
-       hdr->seq_no = cpu_to_be16(++wmi->tx_seq_id);
-
-       return htc_send(wmi->htc, skb, wmi->ctrl_epid, NULL);
-}
-
-int ath9k_wmi_cmd(struct wmi *wmi, enum wmi_cmd_id cmd_id,
-                 u8 *cmd_buf, u32 cmd_len,
-                 u8 *rsp_buf, u32 rsp_len,
-                 u32 timeout)
-{
-       struct ath_hw *ah = wmi->drv_priv->ah;
-       struct ath_common *common = ath9k_hw_common(ah);
-       u16 headroom = sizeof(struct htc_frame_hdr) +
-                      sizeof(struct wmi_cmd_hdr);
-       struct sk_buff *skb;
-       u8 *data;
-       int time_left, ret = 0;
-       unsigned long flags;
-
-       if (wmi->drv_priv->op_flags & OP_UNPLUGGED)
-               return 0;
-
-       skb = alloc_skb(headroom + cmd_len, GFP_ATOMIC);
-       if (!skb)
-               return -ENOMEM;
-
-       skb_reserve(skb, headroom);
-
-       if (cmd_len != 0 && cmd_buf != NULL) {
-               data = (u8 *) skb_put(skb, cmd_len);
-               memcpy(data, cmd_buf, cmd_len);
-       }
-
-       mutex_lock(&wmi->op_mutex);
-
-       /* check if wmi stopped flag is set */
-       if (unlikely(wmi->stopped)) {
-               ret = -EPROTO;
-               goto out;
-       }
-
-       /* record the rsp buffer and length */
-       wmi->cmd_rsp_buf = rsp_buf;
-       wmi->cmd_rsp_len = rsp_len;
-
-       spin_lock_irqsave(&wmi->wmi_lock, flags);
-       wmi->last_cmd_id = cmd_id;
-       spin_unlock_irqrestore(&wmi->wmi_lock, flags);
-
-       ret = ath9k_wmi_cmd_issue(wmi, skb, cmd_id, cmd_len);
-       if (ret)
-               goto out;
-
-       time_left = wait_for_completion_timeout(&wmi->cmd_wait, timeout);
-       if (!time_left) {
-               ath_print(common, ATH_DBG_WMI,
-                         "Timeout waiting for WMI command: %s\n",
-                         wmi_cmd_to_name(cmd_id));
-               mutex_unlock(&wmi->op_mutex);
-               return -ETIMEDOUT;
-       }
-
-       mutex_unlock(&wmi->op_mutex);
-
-       return 0;
-
-out:
-       ath_print(common, ATH_DBG_WMI,
-                 "WMI failure for: %s\n", wmi_cmd_to_name(cmd_id));
-       mutex_unlock(&wmi->op_mutex);
-       kfree_skb(skb);
-
-       return ret;
-}
diff --git a/drivers/net/wireless/ath/ath9k/wmi.h b/drivers/net/wireless/ath/ath9k/wmi.h
deleted file mode 100644 (file)
index 765db5f..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (c) 2010 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef WMI_H
-#define WMI_H
-
-
-struct wmi_event_txrate {
-       __be32 txrate;
-       struct {
-               u8 rssi_thresh;
-               u8 per;
-       } rc_stats;
-} __packed;
-
-struct wmi_cmd_hdr {
-       __be16 command_id;
-       __be16 seq_no;
-} __packed;
-
-struct wmi_swba {
-       u8 beacon_pending;
-} __packed;
-
-enum wmi_cmd_id {
-       WMI_ECHO_CMDID = 0x0001,
-       WMI_ACCESS_MEMORY_CMDID,
-
-       /* Commands to Target */
-       WMI_DISABLE_INTR_CMDID,
-       WMI_ENABLE_INTR_CMDID,
-       WMI_RX_LINK_CMDID,
-       WMI_ATH_INIT_CMDID,
-       WMI_ABORT_TXQ_CMDID,
-       WMI_STOP_TX_DMA_CMDID,
-       WMI_STOP_DMA_RECV_CMDID,
-       WMI_ABORT_TX_DMA_CMDID,
-       WMI_DRAIN_TXQ_CMDID,
-       WMI_DRAIN_TXQ_ALL_CMDID,
-       WMI_START_RECV_CMDID,
-       WMI_STOP_RECV_CMDID,
-       WMI_FLUSH_RECV_CMDID,
-       WMI_SET_MODE_CMDID,
-       WMI_RESET_CMDID,
-       WMI_NODE_CREATE_CMDID,
-       WMI_NODE_REMOVE_CMDID,
-       WMI_VAP_REMOVE_CMDID,
-       WMI_VAP_CREATE_CMDID,
-       WMI_BEACON_UPDATE_CMDID,
-       WMI_REG_READ_CMDID,
-       WMI_REG_WRITE_CMDID,
-       WMI_RC_STATE_CHANGE_CMDID,
-       WMI_RC_RATE_UPDATE_CMDID,
-       WMI_DEBUG_INFO_CMDID,
-       WMI_HOST_ATTACH,
-       WMI_TARGET_IC_UPDATE_CMDID,
-       WMI_TGT_STATS_CMDID,
-       WMI_TX_AGGR_ENABLE_CMDID,
-       WMI_TGT_DETACH_CMDID,
-       WMI_TGT_TXQ_ENABLE_CMDID,
-};
-
-enum wmi_event_id {
-       WMI_TGT_RDY_EVENTID = 0x1001,
-       WMI_SWBA_EVENTID,
-       WMI_FATAL_EVENTID,
-       WMI_TXTO_EVENTID,
-       WMI_BMISS_EVENTID,
-       WMI_WLAN_TXCOMP_EVENTID,
-       WMI_DELBA_EVENTID,
-       WMI_TXRATE_EVENTID,
-};
-
-#define MAX_CMD_NUMBER 62
-
-struct register_write {
-       __be32 reg;
-       __be32 val;
-};
-
-struct wmi {
-       struct ath9k_htc_priv *drv_priv;
-       struct htc_target *htc;
-       enum htc_endpoint_id ctrl_epid;
-       struct mutex op_mutex;
-       struct completion cmd_wait;
-       enum wmi_cmd_id last_cmd_id;
-       u16 tx_seq_id;
-       u8 *cmd_rsp_buf;
-       u32 cmd_rsp_len;
-       bool stopped;
-
-       struct sk_buff *wmi_skb;
-       spinlock_t wmi_lock;
-
-       atomic_t mwrite_cnt;
-       struct register_write multi_write[MAX_CMD_NUMBER];
-       u32 multi_write_idx;
-       struct mutex multi_write_mutex;
-};
-
-struct wmi *ath9k_init_wmi(struct ath9k_htc_priv *priv);
-void ath9k_deinit_wmi(struct ath9k_htc_priv *priv);
-int ath9k_wmi_connect(struct htc_target *htc, struct wmi *wmi,
-                     enum htc_endpoint_id *wmi_ctrl_epid);
-int ath9k_wmi_cmd(struct wmi *wmi, enum wmi_cmd_id cmd_id,
-                 u8 *cmd_buf, u32 cmd_len,
-                 u8 *rsp_buf, u32 rsp_len,
-                 u32 timeout);
-void ath9k_wmi_tasklet(unsigned long data);
-
-#define WMI_CMD(_wmi_cmd)                                              \
-       do {                                                            \
-               ret = ath9k_wmi_cmd(priv->wmi, _wmi_cmd, NULL, 0,       \
-                                   (u8 *) &cmd_rsp,                    \
-                                   sizeof(cmd_rsp), HZ*2);             \
-       } while (0)
-
-#define WMI_CMD_BUF(_wmi_cmd, _buf)                                    \
-       do {                                                            \
-               ret = ath9k_wmi_cmd(priv->wmi, _wmi_cmd,                \
-                                   (u8 *) _buf, sizeof(*_buf),         \
-                                   &cmd_rsp, sizeof(cmd_rsp), HZ*2);   \
-       } while (0)
-
-#endif /* WMI_H */
diff --git a/drivers/net/wireless/ath/debug.c b/drivers/net/wireless/ath/debug.c
deleted file mode 100644 (file)
index 53e77bd..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2009 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "ath.h"
-#include "debug.h"
-
-void ath_print(struct ath_common *common, int dbg_mask, const char *fmt, ...)
-{
-       va_list args;
-
-       if (likely(!(common->debug_mask & dbg_mask)))
-               return;
-
-       va_start(args, fmt);
-       printk(KERN_DEBUG "ath: ");
-       vprintk(fmt, args);
-       va_end(args);
-}
-EXPORT_SYMBOL(ath_print);
diff --git a/drivers/net/wireless/ath/debug.h b/drivers/net/wireless/ath/debug.h
deleted file mode 100644 (file)
index 873bf52..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 2008-2009 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ATH_DEBUG_H
-#define ATH_DEBUG_H
-
-#include "ath.h"
-
-/**
- * enum ath_debug_level - atheros wireless debug level
- *
- * @ATH_DBG_RESET: reset processing
- * @ATH_DBG_QUEUE: hardware queue management
- * @ATH_DBG_EEPROM: eeprom processing
- * @ATH_DBG_CALIBRATE: periodic calibration
- * @ATH_DBG_INTERRUPT: interrupt processing
- * @ATH_DBG_REGULATORY: regulatory processing
- * @ATH_DBG_ANI: adaptive noise immunitive processing
- * @ATH_DBG_XMIT: basic xmit operation
- * @ATH_DBG_BEACON: beacon handling
- * @ATH_DBG_CONFIG: configuration of the hardware
- * @ATH_DBG_FATAL: fatal errors, this is the default, DBG_DEFAULT
- * @ATH_DBG_PS: power save processing
- * @ATH_DBG_HWTIMER: hardware timer handling
- * @ATH_DBG_BTCOEX: bluetooth coexistance
- * @ATH_DBG_ANY: enable all debugging
- *
- * The debug level is used to control the amount and type of debugging output
- * we want to see. Each driver has its own method for enabling debugging and
- * modifying debug level states -- but this is typically done through a
- * module parameter 'debug' along with a respective 'debug' debugfs file
- * entry.
- */
-enum ATH_DEBUG {
-       ATH_DBG_RESET           = 0x00000001,
-       ATH_DBG_QUEUE           = 0x00000002,
-       ATH_DBG_EEPROM          = 0x00000004,
-       ATH_DBG_CALIBRATE       = 0x00000008,
-       ATH_DBG_INTERRUPT       = 0x00000010,
-       ATH_DBG_REGULATORY      = 0x00000020,
-       ATH_DBG_ANI             = 0x00000040,
-       ATH_DBG_XMIT            = 0x00000080,
-       ATH_DBG_BEACON          = 0x00000100,
-       ATH_DBG_CONFIG          = 0x00000200,
-       ATH_DBG_FATAL           = 0x00000400,
-       ATH_DBG_PS              = 0x00000800,
-       ATH_DBG_HWTIMER         = 0x00001000,
-       ATH_DBG_BTCOEX          = 0x00002000,
-       ATH_DBG_WMI             = 0x00004000,
-       ATH_DBG_ANY             = 0xffffffff
-};
-
-#define ATH_DBG_DEFAULT (ATH_DBG_FATAL)
-
-#ifdef CONFIG_ATH_DEBUG
-void ath_print(struct ath_common *common, int dbg_mask, const char *fmt, ...)
-       __attribute__ ((format (printf, 3, 4)));
-#else
-static inline void __attribute__ ((format (printf, 3, 4)))
-ath_print(struct ath_common *common, int dbg_mask, const char *fmt, ...)
-{
-}
-#endif /* CONFIG_ATH_DEBUG */
-
-#endif /* ATH_DEBUG_H */
diff --git a/drivers/net/wireless/ath/hw.c b/drivers/net/wireless/ath/hw.c
deleted file mode 100644 (file)
index a8f81ea..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (c) 2009 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <asm/unaligned.h>
-
-#include "ath.h"
-#include "reg.h"
-
-#define REG_READ       (common->ops->read)
-#define REG_WRITE      (common->ops->write)
-
-/**
- * ath_hw_set_bssid_mask - filter out bssids we listen
- *
- * @common: the ath_common struct for the device.
- *
- * BSSID masking is a method used by AR5212 and newer hardware to inform PCU
- * which bits of the interface's MAC address should be looked at when trying
- * to decide which packets to ACK. In station mode and AP mode with a single
- * BSS every bit matters since we lock to only one BSS. In AP mode with
- * multiple BSSes (virtual interfaces) not every bit matters because hw must
- * accept frames for all BSSes and so we tweak some bits of our mac address
- * in order to have multiple BSSes.
- *
- * NOTE: This is a simple filter and does *not* filter out all
- * relevant frames. Some frames that are not for us might get ACKed from us
- * by PCU because they just match the mask.
- *
- * When handling multiple BSSes you can get the BSSID mask by computing the
- * set of  ~ ( MAC XOR BSSID ) for all bssids we handle.
- *
- * When you do this you are essentially computing the common bits of all your
- * BSSes. Later it is assumed the harware will "and" (&) the BSSID mask with
- * the MAC address to obtain the relevant bits and compare the result with
- * (frame's BSSID & mask) to see if they match.
- *
- * Simple example: on your card you have have two BSSes you have created with
- * BSSID-01 and BSSID-02. Lets assume BSSID-01 will not use the MAC address.
- * There is another BSSID-03 but you are not part of it. For simplicity's sake,
- * assuming only 4 bits for a mac address and for BSSIDs you can then have:
- *
- *                  \
- * MAC:        0001 |
- * BSSID-01:   0100 | --> Belongs to us
- * BSSID-02:   1001 |
- *                  /
- * -------------------
- * BSSID-03:   0110  | --> External
- * -------------------
- *
- * Our bssid_mask would then be:
- *
- *             On loop iteration for BSSID-01:
- *             ~(0001 ^ 0100)  -> ~(0101)
- *                             ->   1010
- *             bssid_mask      =    1010
- *
- *             On loop iteration for BSSID-02:
- *             bssid_mask &= ~(0001   ^   1001)
- *             bssid_mask =   (1010)  & ~(0001 ^ 1001)
- *             bssid_mask =   (1010)  & ~(1001)
- *             bssid_mask =   (1010)  &  (0110)
- *             bssid_mask =   0010
- *
- * A bssid_mask of 0010 means "only pay attention to the second least
- * significant bit". This is because its the only bit common
- * amongst the MAC and all BSSIDs we support. To findout what the real
- * common bit is we can simply "&" the bssid_mask now with any BSSID we have
- * or our MAC address (we assume the hardware uses the MAC address).
- *
- * Now, suppose there's an incoming frame for BSSID-03:
- *
- * IFRAME-01:  0110
- *
- * An easy eye-inspeciton of this already should tell you that this frame
- * will not pass our check. This is beacuse the bssid_mask tells the
- * hardware to only look at the second least significant bit and the
- * common bit amongst the MAC and BSSIDs is 0, this frame has the 2nd LSB
- * as 1, which does not match 0.
- *
- * So with IFRAME-01 we *assume* the hardware will do:
- *
- *     allow = (IFRAME-01 & bssid_mask) == (bssid_mask & MAC) ? 1 : 0;
- *  --> allow = (0110 & 0010) == (0010 & 0001) ? 1 : 0;
- *  --> allow = (0010) == 0000 ? 1 : 0;
- *  --> allow = 0
- *
- *  Lets now test a frame that should work:
- *
- * IFRAME-02:  0001 (we should allow)
- *
- *     allow = (0001 & 1010) == 1010
- *
- *     allow = (IFRAME-02 & bssid_mask) == (bssid_mask & MAC) ? 1 : 0;
- *  --> allow = (0001 & 0010) ==  (0010 & 0001) ? 1 :0;
- *  --> allow = (0010) == (0010)
- *  --> allow = 1
- *
- * Other examples:
- *
- * IFRAME-03:  0100 --> allowed
- * IFRAME-04:  1001 --> allowed
- * IFRAME-05:  1101 --> allowed but its not for us!!!
- *
- */
-void ath_hw_setbssidmask(struct ath_common *common)
-{
-       void *ah = common->ah;
-
-       REG_WRITE(ah, get_unaligned_le32(common->bssidmask), AR_BSSMSKL);
-       REG_WRITE(ah, get_unaligned_le16(common->bssidmask + 4), AR_BSSMSKU);
-}
-EXPORT_SYMBOL(ath_hw_setbssidmask);
diff --git a/drivers/net/wireless/ath/reg.h b/drivers/net/wireless/ath/reg.h
deleted file mode 100644 (file)
index dfe1fbe..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (c) 2008-2009 Atheros Communications Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef ATH_REGISTERS_H
-#define ATH_REGISTERS_H
-
-/*
- * BSSID mask registers. See ath_hw_set_bssid_mask()
- * for detailed documentation about these registers.
- */
-#define AR_BSSMSKL             0x80e0
-#define AR_BSSMSKU             0x80e4
-
-#endif /* ATH_REGISTERS_H */
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-debugfs.c b/drivers/net/wireless/iwlwifi/iwl-3945-debugfs.c
deleted file mode 100644 (file)
index ef0835b..0000000
+++ /dev/null
@@ -1,522 +0,0 @@
-/******************************************************************************
- *
- * GPL LICENSE SUMMARY
- *
- * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
- * USA
- *
- * The full GNU General Public License is included in this distribution
- * in the file called LICENSE.GPL.
- *
- * Contact Information:
- *  Intel Linux Wireless <ilw@linux.intel.com>
- * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
- *****************************************************************************/
-
-#include "iwl-3945-debugfs.h"
-
-
-static int iwl3945_statistics_flag(struct iwl_priv *priv, char *buf, int bufsz)
-{
-       int p = 0;
-
-       p += scnprintf(buf + p, bufsz - p, "Statistics Flag(0x%X):\n",
-                      le32_to_cpu(priv->_3945.statistics.flag));
-       if (le32_to_cpu(priv->_3945.statistics.flag) &
-                       UCODE_STATISTICS_CLEAR_MSK)
-               p += scnprintf(buf + p, bufsz - p,
-                              "\tStatistics have been cleared\n");
-       p += scnprintf(buf + p, bufsz - p, "\tOperational Frequency: %s\n",
-                      (le32_to_cpu(priv->_3945.statistics.flag) &
-                       UCODE_STATISTICS_FREQUENCY_MSK)
-                       ? "2.4 GHz" : "5.2 GHz");
-       p += scnprintf(buf + p, bufsz - p, "\tTGj Narrow Band: %s\n",
-                      (le32_to_cpu(priv->_3945.statistics.flag) &
-                       UCODE_STATISTICS_NARROW_BAND_MSK)
-                       ? "enabled" : "disabled");
-       return p;
-}
-
-ssize_t iwl3945_ucode_rx_stats_read(struct file *file,
-                                   char __user *user_buf,
-                                   size_t count, loff_t *ppos)
-{
-       struct iwl_priv *priv = file->private_data;
-       int pos = 0;
-       char *buf;
-       int bufsz = sizeof(struct iwl39_statistics_rx_phy) * 40 +
-                   sizeof(struct iwl39_statistics_rx_non_phy) * 40 + 400;
-       ssize_t ret;
-       struct iwl39_statistics_rx_phy *ofdm, *accum_ofdm, *delta_ofdm, *max_ofdm;
-       struct iwl39_statistics_rx_phy *cck, *accum_cck, *delta_cck, *max_cck;
-       struct iwl39_statistics_rx_non_phy *general, *accum_general;
-       struct iwl39_statistics_rx_non_phy *delta_general, *max_general;
-
-       if (!iwl_is_alive(priv))
-               return -EAGAIN;
-
-       buf = kzalloc(bufsz, GFP_KERNEL);
-       if (!buf) {
-               IWL_ERR(priv, "Can not allocate Buffer\n");
-               return -ENOMEM;
-       }
-
-       /*
-        * The statistic information display here is based on
-        * the last statistics notification from uCode
-        * might not reflect the current uCode activity
-        */
-       ofdm = &priv->_3945.statistics.rx.ofdm;
-       cck = &priv->_3945.statistics.rx.cck;
-       general = &priv->_3945.statistics.rx.general;
-       accum_ofdm = &priv->_3945.accum_statistics.rx.ofdm;
-       accum_cck = &priv->_3945.accum_statistics.rx.cck;
-       accum_general = &priv->_3945.accum_statistics.rx.general;
-       delta_ofdm = &priv->_3945.delta_statistics.rx.ofdm;
-       delta_cck = &priv->_3945.delta_statistics.rx.cck;
-       delta_general = &priv->_3945.delta_statistics.rx.general;
-       max_ofdm = &priv->_3945.max_delta.rx.ofdm;
-       max_cck = &priv->_3945.max_delta.rx.cck;
-       max_general = &priv->_3945.max_delta.rx.general;
-
-       pos += iwl3945_statistics_flag(priv, buf, bufsz);
-       pos += scnprintf(buf + pos, bufsz - pos, "%-32s     current"
-                        "acumulative       delta         max\n",
-                        "Statistics_Rx - OFDM:");
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "ina_cnt:", le32_to_cpu(ofdm->ina_cnt),
-                        accum_ofdm->ina_cnt,
-                        delta_ofdm->ina_cnt, max_ofdm->ina_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "fina_cnt:",
-                        le32_to_cpu(ofdm->fina_cnt), accum_ofdm->fina_cnt,
-                        delta_ofdm->fina_cnt, max_ofdm->fina_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n", "plcp_err:",
-                        le32_to_cpu(ofdm->plcp_err), accum_ofdm->plcp_err,
-                        delta_ofdm->plcp_err, max_ofdm->plcp_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",  "crc32_err:",
-                        le32_to_cpu(ofdm->crc32_err), accum_ofdm->crc32_err,
-                        delta_ofdm->crc32_err, max_ofdm->crc32_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n", "overrun_err:",
-                        le32_to_cpu(ofdm->overrun_err),
-                        accum_ofdm->overrun_err, delta_ofdm->overrun_err,
-                        max_ofdm->overrun_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "early_overrun_err:",
-                        le32_to_cpu(ofdm->early_overrun_err),
-                        accum_ofdm->early_overrun_err,
-                        delta_ofdm->early_overrun_err,
-                        max_ofdm->early_overrun_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "crc32_good:", le32_to_cpu(ofdm->crc32_good),
-                        accum_ofdm->crc32_good, delta_ofdm->crc32_good,
-                        max_ofdm->crc32_good);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n", "false_alarm_cnt:",
-                        le32_to_cpu(ofdm->false_alarm_cnt),
-                        accum_ofdm->false_alarm_cnt,
-                        delta_ofdm->false_alarm_cnt,
-                        max_ofdm->false_alarm_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "fina_sync_err_cnt:",
-                        le32_to_cpu(ofdm->fina_sync_err_cnt),
-                        accum_ofdm->fina_sync_err_cnt,
-                        delta_ofdm->fina_sync_err_cnt,
-                        max_ofdm->fina_sync_err_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "sfd_timeout:",
-                        le32_to_cpu(ofdm->sfd_timeout),
-                        accum_ofdm->sfd_timeout,
-                        delta_ofdm->sfd_timeout,
-                        max_ofdm->sfd_timeout);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "fina_timeout:",
-                        le32_to_cpu(ofdm->fina_timeout),
-                        accum_ofdm->fina_timeout,
-                        delta_ofdm->fina_timeout,
-                        max_ofdm->fina_timeout);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "unresponded_rts:",
-                        le32_to_cpu(ofdm->unresponded_rts),
-                        accum_ofdm->unresponded_rts,
-                        delta_ofdm->unresponded_rts,
-                        max_ofdm->unresponded_rts);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "rxe_frame_lmt_ovrun:",
-                        le32_to_cpu(ofdm->rxe_frame_limit_overrun),
-                        accum_ofdm->rxe_frame_limit_overrun,
-                        delta_ofdm->rxe_frame_limit_overrun,
-                        max_ofdm->rxe_frame_limit_overrun);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "sent_ack_cnt:",
-                        le32_to_cpu(ofdm->sent_ack_cnt),
-                        accum_ofdm->sent_ack_cnt,
-                        delta_ofdm->sent_ack_cnt,
-                        max_ofdm->sent_ack_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "sent_cts_cnt:",
-                        le32_to_cpu(ofdm->sent_cts_cnt),
-                        accum_ofdm->sent_cts_cnt,
-                        delta_ofdm->sent_cts_cnt, max_ofdm->sent_cts_cnt);
-
-       pos += scnprintf(buf + pos, bufsz - pos, "%-32s     current"
-                        "acumulative       delta         max\n",
-                        "Statistics_Rx - CCK:");
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "ina_cnt:",
-                        le32_to_cpu(cck->ina_cnt), accum_cck->ina_cnt,
-                        delta_cck->ina_cnt, max_cck->ina_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "fina_cnt:",
-                        le32_to_cpu(cck->fina_cnt), accum_cck->fina_cnt,
-                        delta_cck->fina_cnt, max_cck->fina_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "plcp_err:",
-                        le32_to_cpu(cck->plcp_err), accum_cck->plcp_err,
-                        delta_cck->plcp_err, max_cck->plcp_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "crc32_err:",
-                        le32_to_cpu(cck->crc32_err), accum_cck->crc32_err,
-                        delta_cck->crc32_err, max_cck->crc32_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "overrun_err:",
-                        le32_to_cpu(cck->overrun_err),
-                        accum_cck->overrun_err,
-                        delta_cck->overrun_err, max_cck->overrun_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "early_overrun_err:",
-                        le32_to_cpu(cck->early_overrun_err),
-                        accum_cck->early_overrun_err,
-                        delta_cck->early_overrun_err,
-                        max_cck->early_overrun_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "crc32_good:",
-                        le32_to_cpu(cck->crc32_good), accum_cck->crc32_good,
-                        delta_cck->crc32_good,
-                        max_cck->crc32_good);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "false_alarm_cnt:",
-                        le32_to_cpu(cck->false_alarm_cnt),
-                        accum_cck->false_alarm_cnt,
-                        delta_cck->false_alarm_cnt, max_cck->false_alarm_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "fina_sync_err_cnt:",
-                        le32_to_cpu(cck->fina_sync_err_cnt),
-                        accum_cck->fina_sync_err_cnt,
-                        delta_cck->fina_sync_err_cnt,
-                        max_cck->fina_sync_err_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "sfd_timeout:",
-                        le32_to_cpu(cck->sfd_timeout),
-                        accum_cck->sfd_timeout,
-                        delta_cck->sfd_timeout, max_cck->sfd_timeout);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "fina_timeout:",
-                        le32_to_cpu(cck->fina_timeout),
-                        accum_cck->fina_timeout,
-                        delta_cck->fina_timeout, max_cck->fina_timeout);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "unresponded_rts:",
-                        le32_to_cpu(cck->unresponded_rts),
-                        accum_cck->unresponded_rts,
-                        delta_cck->unresponded_rts,
-                        max_cck->unresponded_rts);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "rxe_frame_lmt_ovrun:",
-                        le32_to_cpu(cck->rxe_frame_limit_overrun),
-                        accum_cck->rxe_frame_limit_overrun,
-                        delta_cck->rxe_frame_limit_overrun,
-                        max_cck->rxe_frame_limit_overrun);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "sent_ack_cnt:",
-                        le32_to_cpu(cck->sent_ack_cnt),
-                        accum_cck->sent_ack_cnt,
-                        delta_cck->sent_ack_cnt,
-                        max_cck->sent_ack_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "sent_cts_cnt:",
-                        le32_to_cpu(cck->sent_cts_cnt),
-                        accum_cck->sent_cts_cnt,
-                        delta_cck->sent_cts_cnt,
-                        max_cck->sent_cts_cnt);
-
-       pos += scnprintf(buf + pos, bufsz - pos, "%-32s     current"
-                        "acumulative       delta         max\n",
-                        "Statistics_Rx - GENERAL:");
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "bogus_cts:",
-                        le32_to_cpu(general->bogus_cts),
-                        accum_general->bogus_cts,
-                        delta_general->bogus_cts, max_general->bogus_cts);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "bogus_ack:",
-                        le32_to_cpu(general->bogus_ack),
-                        accum_general->bogus_ack,
-                        delta_general->bogus_ack, max_general->bogus_ack);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "non_bssid_frames:",
-                        le32_to_cpu(general->non_bssid_frames),
-                        accum_general->non_bssid_frames,
-                        delta_general->non_bssid_frames,
-                        max_general->non_bssid_frames);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "filtered_frames:",
-                        le32_to_cpu(general->filtered_frames),
-                        accum_general->filtered_frames,
-                        delta_general->filtered_frames,
-                        max_general->filtered_frames);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "non_channel_beacons:",
-                        le32_to_cpu(general->non_channel_beacons),
-                        accum_general->non_channel_beacons,
-                        delta_general->non_channel_beacons,
-                        max_general->non_channel_beacons);
-
-       ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
-       kfree(buf);
-       return ret;
-}
-
-ssize_t iwl3945_ucode_tx_stats_read(struct file *file,
-                                   char __user *user_buf,
-                                   size_t count, loff_t *ppos)
-{
-       struct iwl_priv *priv = file->private_data;
-       int pos = 0;
-       char *buf;
-       int bufsz = (sizeof(struct iwl39_statistics_tx) * 48) + 250;
-       ssize_t ret;
-       struct iwl39_statistics_tx *tx, *accum_tx, *delta_tx, *max_tx;
-
-       if (!iwl_is_alive(priv))
-               return -EAGAIN;
-
-       buf = kzalloc(bufsz, GFP_KERNEL);
-       if (!buf) {
-               IWL_ERR(priv, "Can not allocate Buffer\n");
-               return -ENOMEM;
-       }
-
-       /*
-        * The statistic information display here is based on
-        * the last statistics notification from uCode
-        * might not reflect the current uCode activity
-        */
-       tx = &priv->_3945.statistics.tx;
-       accum_tx = &priv->_3945.accum_statistics.tx;
-       delta_tx = &priv->_3945.delta_statistics.tx;
-       max_tx = &priv->_3945.max_delta.tx;
-       pos += iwl3945_statistics_flag(priv, buf, bufsz);
-       pos += scnprintf(buf + pos, bufsz - pos, "%-32s     current"
-                        "acumulative       delta         max\n",
-                        "Statistics_Tx:");
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "preamble:",
-                        le32_to_cpu(tx->preamble_cnt),
-                        accum_tx->preamble_cnt,
-                        delta_tx->preamble_cnt, max_tx->preamble_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "rx_detected_cnt:",
-                        le32_to_cpu(tx->rx_detected_cnt),
-                        accum_tx->rx_detected_cnt,
-                        delta_tx->rx_detected_cnt, max_tx->rx_detected_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "bt_prio_defer_cnt:",
-                        le32_to_cpu(tx->bt_prio_defer_cnt),
-                        accum_tx->bt_prio_defer_cnt,
-                        delta_tx->bt_prio_defer_cnt,
-                        max_tx->bt_prio_defer_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "bt_prio_kill_cnt:",
-                        le32_to_cpu(tx->bt_prio_kill_cnt),
-                        accum_tx->bt_prio_kill_cnt,
-                        delta_tx->bt_prio_kill_cnt,
-                        max_tx->bt_prio_kill_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "few_bytes_cnt:",
-                        le32_to_cpu(tx->few_bytes_cnt),
-                        accum_tx->few_bytes_cnt,
-                        delta_tx->few_bytes_cnt, max_tx->few_bytes_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "cts_timeout:",
-                        le32_to_cpu(tx->cts_timeout), accum_tx->cts_timeout,
-                        delta_tx->cts_timeout, max_tx->cts_timeout);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "ack_timeout:",
-                        le32_to_cpu(tx->ack_timeout),
-                        accum_tx->ack_timeout,
-                        delta_tx->ack_timeout, max_tx->ack_timeout);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "expected_ack_cnt:",
-                        le32_to_cpu(tx->expected_ack_cnt),
-                        accum_tx->expected_ack_cnt,
-                        delta_tx->expected_ack_cnt,
-                        max_tx->expected_ack_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "actual_ack_cnt:",
-                        le32_to_cpu(tx->actual_ack_cnt),
-                        accum_tx->actual_ack_cnt,
-                        delta_tx->actual_ack_cnt,
-                        max_tx->actual_ack_cnt);
-
-       ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
-       kfree(buf);
-       return ret;
-}
-
-ssize_t iwl3945_ucode_general_stats_read(struct file *file,
-                                        char __user *user_buf,
-                                        size_t count, loff_t *ppos)
-{
-       struct iwl_priv *priv = file->private_data;
-       int pos = 0;
-       char *buf;
-       int bufsz = sizeof(struct iwl39_statistics_general) * 10 + 300;
-       ssize_t ret;
-       struct iwl39_statistics_general *general, *accum_general;
-       struct iwl39_statistics_general *delta_general, *max_general;
-       struct statistics_dbg *dbg, *accum_dbg, *delta_dbg, *max_dbg;
-       struct iwl39_statistics_div *div, *accum_div, *delta_div, *max_div;
-
-       if (!iwl_is_alive(priv))
-               return -EAGAIN;
-
-       buf = kzalloc(bufsz, GFP_KERNEL);
-       if (!buf) {
-               IWL_ERR(priv, "Can not allocate Buffer\n");
-               return -ENOMEM;
-       }
-
-       /*
-        * The statistic information display here is based on
-        * the last statistics notification from uCode
-        * might not reflect the current uCode activity
-        */
-       general = &priv->_3945.statistics.general;
-       dbg = &priv->_3945.statistics.general.dbg;
-       div = &priv->_3945.statistics.general.div;
-       accum_general = &priv->_3945.accum_statistics.general;
-       delta_general = &priv->_3945.delta_statistics.general;
-       max_general = &priv->_3945.max_delta.general;
-       accum_dbg = &priv->_3945.accum_statistics.general.dbg;
-       delta_dbg = &priv->_3945.delta_statistics.general.dbg;
-       max_dbg = &priv->_3945.max_delta.general.dbg;
-       accum_div = &priv->_3945.accum_statistics.general.div;
-       delta_div = &priv->_3945.delta_statistics.general.div;
-       max_div = &priv->_3945.max_delta.general.div;
-       pos += iwl3945_statistics_flag(priv, buf, bufsz);
-       pos += scnprintf(buf + pos, bufsz - pos, "%-32s     current"
-                        "acumulative       delta         max\n",
-                        "Statistics_General:");
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "burst_check:",
-                        le32_to_cpu(dbg->burst_check),
-                        accum_dbg->burst_check,
-                        delta_dbg->burst_check, max_dbg->burst_check);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "burst_count:",
-                        le32_to_cpu(dbg->burst_count),
-                        accum_dbg->burst_count,
-                        delta_dbg->burst_count, max_dbg->burst_count);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "sleep_time:",
-                        le32_to_cpu(general->sleep_time),
-                        accum_general->sleep_time,
-                        delta_general->sleep_time, max_general->sleep_time);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "slots_out:",
-                        le32_to_cpu(general->slots_out),
-                        accum_general->slots_out,
-                        delta_general->slots_out, max_general->slots_out);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "slots_idle:",
-                        le32_to_cpu(general->slots_idle),
-                        accum_general->slots_idle,
-                        delta_general->slots_idle, max_general->slots_idle);
-       pos += scnprintf(buf + pos, bufsz - pos, "ttl_timestamp:\t\t\t%u\n",
-                        le32_to_cpu(general->ttl_timestamp));
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "tx_on_a:",
-                        le32_to_cpu(div->tx_on_a), accum_div->tx_on_a,
-                        delta_div->tx_on_a, max_div->tx_on_a);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "tx_on_b:",
-                        le32_to_cpu(div->tx_on_b), accum_div->tx_on_b,
-                        delta_div->tx_on_b, max_div->tx_on_b);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "exec_time:",
-                        le32_to_cpu(div->exec_time), accum_div->exec_time,
-                        delta_div->exec_time, max_div->exec_time);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "probe_time:",
-                        le32_to_cpu(div->probe_time), accum_div->probe_time,
-                        delta_div->probe_time, max_div->probe_time);
-       ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
-       kfree(buf);
-       return ret;
-}
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945-debugfs.h b/drivers/net/wireless/iwlwifi/iwl-3945-debugfs.h
deleted file mode 100644 (file)
index 70809c5..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/******************************************************************************
- *
- * GPL LICENSE SUMMARY
- *
- * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
- * USA
- *
- * The full GNU General Public License is included in this distribution
- * in the file called LICENSE.GPL.
- *
- * Contact Information:
- *  Intel Linux Wireless <ilw@linux.intel.com>
- * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
- *****************************************************************************/
-
-#include "iwl-dev.h"
-#include "iwl-core.h"
-#include "iwl-debug.h"
-
-#ifdef CONFIG_IWLWIFI_DEBUGFS
-ssize_t iwl3945_ucode_rx_stats_read(struct file *file, char __user *user_buf,
-                                   size_t count, loff_t *ppos);
-ssize_t iwl3945_ucode_tx_stats_read(struct file *file, char __user *user_buf,
-                                   size_t count, loff_t *ppos);
-ssize_t iwl3945_ucode_general_stats_read(struct file *file,
-                                        char __user *user_buf, size_t count,
-                                        loff_t *ppos);
-#else
-static ssize_t iwl3945_ucode_rx_stats_read(struct file *file,
-                                          char __user *user_buf, size_t count,
-                                          loff_t *ppos)
-{
-       return 0;
-}
-static ssize_t iwl3945_ucode_tx_stats_read(struct file *file,
-                                          char __user *user_buf, size_t count,
-                                          loff_t *ppos)
-{
-       return 0;
-}
-static ssize_t iwl3945_ucode_general_stats_read(struct file *file,
-                                               char __user *user_buf,
-                                               size_t count, loff_t *ppos)
-{
-       return 0;
-}
-#endif
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-calib.c b/drivers/net/wireless/iwlwifi/iwl-agn-calib.c
deleted file mode 100644 (file)
index c4c5691..0000000
+++ /dev/null
@@ -1,1013 +0,0 @@
-/******************************************************************************
- *
- * This file is provided under a dual BSD/GPLv2 license.  When using or
- * redistributing this file, you may do so under either license.
- *
- * GPL LICENSE SUMMARY
- *
- * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
- * USA
- *
- * The full GNU General Public License is included in this distribution
- * in the file called LICENSE.GPL.
- *
- * Contact Information:
- *  Intel Linux Wireless <ilw@linux.intel.com>
- * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
- *
- * BSD LICENSE
- *
- * Copyright(c) 2005 - 2010 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *  * Neither the name Intel Corporation nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#include <linux/slab.h>
-#include <net/mac80211.h>
-
-#include "iwl-dev.h"
-#include "iwl-core.h"
-#include "iwl-calib.h"
-
-/*****************************************************************************
- * INIT calibrations framework
- *****************************************************************************/
-
-struct statistics_general_data {
-       u32 beacon_silence_rssi_a;
-       u32 beacon_silence_rssi_b;
-       u32 beacon_silence_rssi_c;
-       u32 beacon_energy_a;
-       u32 beacon_energy_b;
-       u32 beacon_energy_c;
-};
-
-int iwl_send_calib_results(struct iwl_priv *priv)
-{
-       int ret = 0;
-       int i = 0;
-
-       struct iwl_host_cmd hcmd = {
-               .id = REPLY_PHY_CALIBRATION_CMD,
-               .flags = CMD_SIZE_HUGE,
-       };
-
-       for (i = 0; i < IWL_CALIB_MAX; i++) {
-               if ((BIT(i) & priv->hw_params.calib_init_cfg) &&
-                   priv->calib_results[i].buf) {
-                       hcmd.len = priv->calib_results[i].buf_len;
-                       hcmd.data = priv->calib_results[i].buf;
-                       ret = iwl_send_cmd_sync(priv, &hcmd);
-                       if (ret) {
-                               IWL_ERR(priv, "Error %d iteration %d\n",
-                                       ret, i);
-                               break;
-                       }
-               }
-       }
-
-       return ret;
-}
-
-int iwl_calib_set(struct iwl_calib_result *res, const u8 *buf, int len)
-{
-       if (res->buf_len != len) {
-               kfree(res->buf);
-               res->buf = kzalloc(len, GFP_ATOMIC);
-       }
-       if (unlikely(res->buf == NULL))
-               return -ENOMEM;
-
-       res->buf_len = len;
-       memcpy(res->buf, buf, len);
-       return 0;
-}
-
-void iwl_calib_free_results(struct iwl_priv *priv)
-{
-       int i;
-
-       for (i = 0; i < IWL_CALIB_MAX; i++) {
-               kfree(priv->calib_results[i].buf);
-               priv->calib_results[i].buf = NULL;
-               priv->calib_results[i].buf_len = 0;
-       }
-}
-
-/*****************************************************************************
- * RUNTIME calibrations framework
- *****************************************************************************/
-
-/* "false alarms" are signals that our DSP tries to lock onto,
- *   but then determines that they are either noise, or transmissions
- *   from a distant wireless network (also "noise", really) that get
- *   "stepped on" by stronger transmissions within our own network.
- * This algorithm attempts to set a sensitivity level that is high
- *   enough to receive all of our own network traffic, but not so
- *   high that our DSP gets too busy trying to lock onto non-network
- *   activity/noise. */
-static int iwl_sens_energy_cck(struct iwl_priv *priv,
-                                  u32 norm_fa,
-                                  u32 rx_enable_time,
-                                  struct statistics_general_data *rx_info)
-{
-       u32 max_nrg_cck = 0;
-       int i = 0;
-       u8 max_silence_rssi = 0;
-       u32 silence_ref = 0;
-       u8 silence_rssi_a = 0;
-       u8 silence_rssi_b = 0;
-       u8 silence_rssi_c = 0;
-       u32 val;
-
-       /* "false_alarms" values below are cross-multiplications to assess the
-        *   numbers of false alarms within the measured period of actual Rx
-        *   (Rx is off when we're txing), vs the min/max expected false alarms
-        *   (some should be expected if rx is sensitive enough) in a
-        *   hypothetical listening period of 200 time units (TU), 204.8 msec:
-        *
-        * MIN_FA/fixed-time < false_alarms/actual-rx-time < MAX_FA/beacon-time
-        *
-        * */
-       u32 false_alarms = norm_fa * 200 * 1024;
-       u32 max_false_alarms = MAX_FA_CCK * rx_enable_time;
-       u32 min_false_alarms = MIN_FA_CCK * rx_enable_time;
-       struct iwl_sensitivity_data *data = NULL;
-       const struct iwl_sensitivity_ranges *ranges = priv->hw_params.sens;
-
-       data = &(priv->sensitivity_data);
-
-       data->nrg_auto_corr_silence_diff = 0;
-
-       /* Find max silence rssi among all 3 receivers.
-        * This is background noise, which may include transmissions from other
-        *    networks, measured during silence before our network's beacon */
-       silence_rssi_a = (u8)((rx_info->beacon_silence_rssi_a &
-                           ALL_BAND_FILTER) >> 8);
-       silence_rssi_b = (u8)((rx_info->beacon_silence_rssi_b &
-                           ALL_BAND_FILTER) >> 8);
-       silence_rssi_c = (u8)((rx_info->beacon_silence_rssi_c &
-                           ALL_BAND_FILTER) >> 8);
-
-       val = max(silence_rssi_b, silence_rssi_c);
-       max_silence_rssi = max(silence_rssi_a, (u8) val);
-
-       /* Store silence rssi in 20-beacon history table */
-       data->nrg_silence_rssi[data->nrg_silence_idx] = max_silence_rssi;
-       data->nrg_silence_idx++;
-       if (data->nrg_silence_idx >= NRG_NUM_PREV_STAT_L)
-               data->nrg_silence_idx = 0;
-
-       /* Find max silence rssi across 20 beacon history */
-       for (i = 0; i < NRG_NUM_PREV_STAT_L; i++) {
-               val = data->nrg_silence_rssi[i];
-               silence_ref = max(silence_ref, val);
-       }
-       IWL_DEBUG_CALIB(priv, "silence a %u, b %u, c %u, 20-bcn max %u\n",
-                       silence_rssi_a, silence_rssi_b, silence_rssi_c,
-                       silence_ref);
-
-       /* Find max rx energy (min value!) among all 3 receivers,
-        *   measured during beacon frame.
-        * Save it in 10-beacon history table. */
-       i = data->nrg_energy_idx;
-       val = min(rx_info->beacon_energy_b, rx_info->beacon_energy_c);
-       data->nrg_value[i] = min(rx_info->beacon_energy_a, val);
-
-       data->nrg_energy_idx++;
-       if (data->nrg_energy_idx >= 10)
-               data->nrg_energy_idx = 0;
-
-       /* Find min rx energy (max value) across 10 beacon history.
-        * This is the minimum signal level that we want to receive well.
-        * Add backoff (margin so we don't miss slightly lower energy frames).
-        * This establishes an upper bound (min value) for energy threshold. */
-       max_nrg_cck = data->nrg_value[0];
-       for (i = 1; i < 10; i++)
-               max_nrg_cck = (u32) max(max_nrg_cck, (data->nrg_value[i]));
-       max_nrg_cck += 6;
-
-       IWL_DEBUG_CALIB(priv, "rx energy a %u, b %u, c %u, 10-bcn max/min %u\n",
-                       rx_info->beacon_energy_a, rx_info->beacon_energy_b,
-                       rx_info->beacon_energy_c, max_nrg_cck - 6);
-
-       /* Count number of consecutive beacons with fewer-than-desired
-        *   false alarms. */
-       if (false_alarms < min_false_alarms)
-               data->num_in_cck_no_fa++;
-       else
-               data->num_in_cck_no_fa = 0;
-       IWL_DEBUG_CALIB(priv, "consecutive bcns with few false alarms = %u\n",
-                       data->num_in_cck_no_fa);
-
-       /* If we got too many false alarms this time, reduce sensitivity */
-       if ((false_alarms > max_false_alarms) &&
-               (data->auto_corr_cck > AUTO_CORR_MAX_TH_CCK)) {
-               IWL_DEBUG_CALIB(priv, "norm FA %u > max FA %u\n",
-                    false_alarms, max_false_alarms);
-               IWL_DEBUG_CALIB(priv, "... reducing sensitivity\n");
-               data->nrg_curr_state = IWL_FA_TOO_MANY;
-               /* Store for "fewer than desired" on later beacon */
-               data->nrg_silence_ref = silence_ref;
-
-               /* increase energy threshold (reduce nrg value)
-                *   to decrease sensitivity */
-               data->nrg_th_cck = data->nrg_th_cck - NRG_STEP_CCK;
-       /* Else if we got fewer than desired, increase sensitivity */
-       } else if (false_alarms < min_false_alarms) {
-               data->nrg_curr_state = IWL_FA_TOO_FEW;
-
-               /* Compare silence level with silence level for most recent
-                *   healthy number or too many false alarms */
-               data->nrg_auto_corr_silence_diff = (s32)data->nrg_silence_ref -
-                                                  (s32)silence_ref;
-
-               IWL_DEBUG_CALIB(priv, "norm FA %u < min FA %u, silence diff %d\n",
-                        false_alarms, min_false_alarms,
-                        data->nrg_auto_corr_silence_diff);
-
-               /* Increase value to increase sensitivity, but only if:
-                * 1a) previous beacon did *not* have *too many* false alarms
-                * 1b) AND there's a significant difference in Rx levels
-                *      from a previous beacon with too many, or healthy # FAs
-                * OR 2) We've seen a lot of beacons (100) with too few
-                *       false alarms */
-               if ((data->nrg_prev_state != IWL_FA_TOO_MANY) &&
-                       ((data->nrg_auto_corr_silence_diff > NRG_DIFF) ||
-                       (data->num_in_cck_no_fa > MAX_NUMBER_CCK_NO_FA))) {
-
-                       IWL_DEBUG_CALIB(priv, "... increasing sensitivity\n");
-                       /* Increase nrg value to increase sensitivity */
-                       val = data->nrg_th_cck + NRG_STEP_CCK;
-                       data->nrg_th_cck = min((u32)ranges->min_nrg_cck, val);
-               } else {
-                       IWL_DEBUG_CALIB(priv, "... but not changing sensitivity\n");
-               }
-
-       /* Else we got a healthy number of false alarms, keep status quo */
-       } else {
-               IWL_DEBUG_CALIB(priv, " FA in safe zone\n");
-               data->nrg_curr_state = IWL_FA_GOOD_RANGE;
-
-               /* Store for use in "fewer than desired" with later beacon */
-               data->nrg_silence_ref = silence_ref;
-
-               /* If previous beacon had too many false alarms,
-                *   give it some extra margin by reducing sensitivity again
-                *   (but don't go below measured energy of desired Rx) */
-               if (IWL_FA_TOO_MANY == data->nrg_prev_state) {
-                       IWL_DEBUG_CALIB(priv, "... increasing margin\n");
-                       if (data->nrg_th_cck > (max_nrg_cck + NRG_MARGIN))
-                               data->nrg_th_cck -= NRG_MARGIN;
-                       else
-                               data->nrg_th_cck = max_nrg_cck;
-               }
-       }
-
-       /* Make sure the energy threshold does not go above the measured
-        * energy of the desired Rx signals (reduced by backoff margin),
-        * or else we might start missing Rx frames.
-        * Lower value is higher energy, so we use max()!
-        */
-       data->nrg_th_cck = max(max_nrg_cck, data->nrg_th_cck);
-       IWL_DEBUG_CALIB(priv, "new nrg_th_cck %u\n", data->nrg_th_cck);
-
-       data->nrg_prev_state = data->nrg_curr_state;
-
-       /* Auto-correlation CCK algorithm */
-       if (false_alarms > min_false_alarms) {
-
-               /* increase auto_corr values to decrease sensitivity
-                * so the DSP won't be disturbed by the noise
-                */
-               if (data->auto_corr_cck < AUTO_CORR_MAX_TH_CCK)
-                       data->auto_corr_cck = AUTO_CORR_MAX_TH_CCK + 1;
-               else {
-                       val = data->auto_corr_cck + AUTO_CORR_STEP_CCK;
-                       data->auto_corr_cck =
-                               min((u32)ranges->auto_corr_max_cck, val);
-               }
-               val = data->auto_corr_cck_mrc + AUTO_CORR_STEP_CCK;
-               data->auto_corr_cck_mrc =
-                       min((u32)ranges->auto_corr_max_cck_mrc, val);
-       } else if ((false_alarms < min_false_alarms) &&
-          ((data->nrg_auto_corr_silence_diff > NRG_DIFF) ||
-          (data->num_in_cck_no_fa > MAX_NUMBER_CCK_NO_FA))) {
-
-               /* Decrease auto_corr values to increase sensitivity */
-               val = data->auto_corr_cck - AUTO_CORR_STEP_CCK;
-               data->auto_corr_cck =
-                       max((u32)ranges->auto_corr_min_cck, val);
-               val = data->auto_corr_cck_mrc - AUTO_CORR_STEP_CCK;
-               data->auto_corr_cck_mrc =
-                       max((u32)ranges->auto_corr_min_cck_mrc, val);
-       }
-
-       return 0;
-}
-
-
-static int iwl_sens_auto_corr_ofdm(struct iwl_priv *priv,
-                                      u32 norm_fa,
-                                      u32 rx_enable_time)
-{
-       u32 val;
-       u32 false_alarms = norm_fa * 200 * 1024;
-       u32 max_false_alarms = MAX_FA_OFDM * rx_enable_time;
-       u32 min_false_alarms = MIN_FA_OFDM * rx_enable_time;
-       struct iwl_sensitivity_data *data = NULL;
-       const struct iwl_sensitivity_ranges *ranges = priv->hw_params.sens;
-
-       data = &(priv->sensitivity_data);
-
-       /* If we got too many false alarms this time, reduce sensitivity */
-       if (false_alarms > max_false_alarms) {
-
-               IWL_DEBUG_CALIB(priv, "norm FA %u > max FA %u)\n",
-                            false_alarms, max_false_alarms);
-
-               val = data->auto_corr_ofdm + AUTO_CORR_STEP_OFDM;
-               data->auto_corr_ofdm =
-                       min((u32)ranges->auto_corr_max_ofdm, val);
-
-               val = data->auto_corr_ofdm_mrc + AUTO_CORR_STEP_OFDM;
-               data->auto_corr_ofdm_mrc =
-                       min((u32)ranges->auto_corr_max_ofdm_mrc, val);
-
-               val = data->auto_corr_ofdm_x1 + AUTO_CORR_STEP_OFDM;
-               data->auto_corr_ofdm_x1 =
-                       min((u32)ranges->auto_corr_max_ofdm_x1, val);
-
-               val = data->auto_corr_ofdm_mrc_x1 + AUTO_CORR_STEP_OFDM;
-               data->auto_corr_ofdm_mrc_x1 =
-                       min((u32)ranges->auto_corr_max_ofdm_mrc_x1, val);
-       }
-
-       /* Else if we got fewer than desired, increase sensitivity */
-       else if (false_alarms < min_false_alarms) {
-
-               IWL_DEBUG_CALIB(priv, "norm FA %u < min FA %u\n",
-                            false_alarms, min_false_alarms);
-
-               val = data->auto_corr_ofdm - AUTO_CORR_STEP_OFDM;
-               data->auto_corr_ofdm =
-                       max((u32)ranges->auto_corr_min_ofdm, val);
-
-               val = data->auto_corr_ofdm_mrc - AUTO_CORR_STEP_OFDM;
-               data->auto_corr_ofdm_mrc =
-                       max((u32)ranges->auto_corr_min_ofdm_mrc, val);
-
-               val = data->auto_corr_ofdm_x1 - AUTO_CORR_STEP_OFDM;
-               data->auto_corr_ofdm_x1 =
-                       max((u32)ranges->auto_corr_min_ofdm_x1, val);
-
-               val = data->auto_corr_ofdm_mrc_x1 - AUTO_CORR_STEP_OFDM;
-               data->auto_corr_ofdm_mrc_x1 =
-                       max((u32)ranges->auto_corr_min_ofdm_mrc_x1, val);
-       } else {
-               IWL_DEBUG_CALIB(priv, "min FA %u < norm FA %u < max FA %u OK\n",
-                        min_false_alarms, false_alarms, max_false_alarms);
-       }
-       return 0;
-}
-
-static void iwl_prepare_legacy_sensitivity_tbl(struct iwl_priv *priv,
-                               struct iwl_sensitivity_data *data,
-                               __le16 *tbl)
-{
-       tbl[HD_AUTO_CORR32_X4_TH_ADD_MIN_INDEX] =
-                               cpu_to_le16((u16)data->auto_corr_ofdm);
-       tbl[HD_AUTO_CORR32_X4_TH_ADD_MIN_MRC_INDEX] =
-                               cpu_to_le16((u16)data->auto_corr_ofdm_mrc);
-       tbl[HD_AUTO_CORR32_X1_TH_ADD_MIN_INDEX] =
-                               cpu_to_le16((u16)data->auto_corr_ofdm_x1);
-       tbl[HD_AUTO_CORR32_X1_TH_ADD_MIN_MRC_INDEX] =
-                               cpu_to_le16((u16)data->auto_corr_ofdm_mrc_x1);
-
-       tbl[HD_AUTO_CORR40_X4_TH_ADD_MIN_INDEX] =
-                               cpu_to_le16((u16)data->auto_corr_cck);
-       tbl[HD_AUTO_CORR40_X4_TH_ADD_MIN_MRC_INDEX] =
-                               cpu_to_le16((u16)data->auto_corr_cck_mrc);
-
-       tbl[HD_MIN_ENERGY_CCK_DET_INDEX] =
-                               cpu_to_le16((u16)data->nrg_th_cck);
-       tbl[HD_MIN_ENERGY_OFDM_DET_INDEX] =
-                               cpu_to_le16((u16)data->nrg_th_ofdm);
-
-       tbl[HD_BARKER_CORR_TH_ADD_MIN_INDEX] =
-                               cpu_to_le16(data->barker_corr_th_min);
-       tbl[HD_BARKER_CORR_TH_ADD_MIN_MRC_INDEX] =
-                               cpu_to_le16(data->barker_corr_th_min_mrc);
-       tbl[HD_OFDM_ENERGY_TH_IN_INDEX] =
-                               cpu_to_le16(data->nrg_th_cca);
-
-       IWL_DEBUG_CALIB(priv, "ofdm: ac %u mrc %u x1 %u mrc_x1 %u thresh %u\n",
-                       data->auto_corr_ofdm, data->auto_corr_ofdm_mrc,
-                       data->auto_corr_ofdm_x1, data->auto_corr_ofdm_mrc_x1,
-                       data->nrg_th_ofdm);
-
-       IWL_DEBUG_CALIB(priv, "cck: ac %u mrc %u thresh %u\n",
-                       data->auto_corr_cck, data->auto_corr_cck_mrc,
-                       data->nrg_th_cck);
-}
-
-/* Prepare a SENSITIVITY_CMD, send to uCode if values have changed */
-static int iwl_sensitivity_write(struct iwl_priv *priv)
-{
-       struct iwl_sensitivity_cmd cmd;
-       struct iwl_sensitivity_data *data = NULL;
-       struct iwl_host_cmd cmd_out = {
-               .id = SENSITIVITY_CMD,
-               .len = sizeof(struct iwl_sensitivity_cmd),
-               .flags = CMD_ASYNC,
-               .data = &cmd,
-       };
-
-       data = &(priv->sensitivity_data);
-
-       memset(&cmd, 0, sizeof(cmd));
-
-       iwl_prepare_legacy_sensitivity_tbl(priv, data, &cmd.table[0]);
-
-       /* Update uCode's "work" table, and copy it to DSP */
-       cmd.control = SENSITIVITY_CMD_CONTROL_WORK_TABLE;
-
-       /* Don't send command to uCode if nothing has changed */
-       if (!memcmp(&cmd.table[0], &(priv->sensitivity_tbl[0]),
-                   sizeof(u16)*HD_TABLE_SIZE)) {
-               IWL_DEBUG_CALIB(priv, "No change in SENSITIVITY_CMD\n");
-               return 0;
-       }
-
-       /* Copy table for comparison next time */
-       memcpy(&(priv->sensitivity_tbl[0]), &(cmd.table[0]),
-              sizeof(u16)*HD_TABLE_SIZE);
-
-       return iwl_send_cmd(priv, &cmd_out);
-}
-
-/* Prepare a SENSITIVITY_CMD, send to uCode if values have changed */
-static int iwl_enhance_sensitivity_write(struct iwl_priv *priv)
-{
-       struct iwl_enhance_sensitivity_cmd cmd;
-       struct iwl_sensitivity_data *data = NULL;
-       struct iwl_host_cmd cmd_out = {
-               .id = SENSITIVITY_CMD,
-               .len = sizeof(struct iwl_enhance_sensitivity_cmd),
-               .flags = CMD_ASYNC,
-               .data = &cmd,
-       };
-
-       data = &(priv->sensitivity_data);
-
-       memset(&cmd, 0, sizeof(cmd));
-
-       iwl_prepare_legacy_sensitivity_tbl(priv, data, &cmd.enhance_table[0]);
-
-       cmd.enhance_table[HD_INA_NON_SQUARE_DET_OFDM_INDEX] =
-               HD_INA_NON_SQUARE_DET_OFDM_DATA;
-       cmd.enhance_table[HD_INA_NON_SQUARE_DET_CCK_INDEX] =
-               HD_INA_NON_SQUARE_DET_CCK_DATA;
-       cmd.enhance_table[HD_CORR_11_INSTEAD_OF_CORR_9_EN_INDEX] =
-               HD_CORR_11_INSTEAD_OF_CORR_9_EN_DATA;
-       cmd.enhance_table[HD_OFDM_NON_SQUARE_DET_SLOPE_MRC_INDEX] =
-               HD_OFDM_NON_SQUARE_DET_SLOPE_MRC_DATA;
-       cmd.enhance_table[HD_OFDM_NON_SQUARE_DET_INTERCEPT_MRC_INDEX] =
-               HD_OFDM_NON_SQUARE_DET_INTERCEPT_MRC_DATA;
-       cmd.enhance_table[HD_OFDM_NON_SQUARE_DET_SLOPE_INDEX] =
-               HD_OFDM_NON_SQUARE_DET_SLOPE_DATA;
-       cmd.enhance_table[HD_OFDM_NON_SQUARE_DET_INTERCEPT_INDEX] =
-               HD_OFDM_NON_SQUARE_DET_INTERCEPT_DATA;
-       cmd.enhance_table[HD_CCK_NON_SQUARE_DET_SLOPE_MRC_INDEX] =
-               HD_CCK_NON_SQUARE_DET_SLOPE_MRC_DATA;
-       cmd.enhance_table[HD_CCK_NON_SQUARE_DET_INTERCEPT_MRC_INDEX] =
-               HD_CCK_NON_SQUARE_DET_INTERCEPT_MRC_DATA;
-       cmd.enhance_table[HD_CCK_NON_SQUARE_DET_SLOPE_INDEX] =
-               HD_CCK_NON_SQUARE_DET_SLOPE_DATA;
-       cmd.enhance_table[HD_CCK_NON_SQUARE_DET_INTERCEPT_INDEX] =
-               HD_CCK_NON_SQUARE_DET_INTERCEPT_DATA;
-
-       /* Update uCode's "work" table, and copy it to DSP */
-       cmd.control = SENSITIVITY_CMD_CONTROL_WORK_TABLE;
-
-       /* Don't send command to uCode if nothing has changed */
-       if (!memcmp(&cmd.enhance_table[0], &(priv->sensitivity_tbl[0]),
-                   sizeof(u16)*HD_TABLE_SIZE) &&
-           !memcmp(&cmd.enhance_table[HD_INA_NON_SQUARE_DET_OFDM_INDEX],
-                   &(priv->enhance_sensitivity_tbl[0]),
-                   sizeof(u16)*ENHANCE_HD_TABLE_ENTRIES)) {
-               IWL_DEBUG_CALIB(priv, "No change in SENSITIVITY_CMD\n");
-               return 0;
-       }
-
-       /* Copy table for comparison next time */
-       memcpy(&(priv->sensitivity_tbl[0]), &(cmd.enhance_table[0]),
-              sizeof(u16)*HD_TABLE_SIZE);
-       memcpy(&(priv->enhance_sensitivity_tbl[0]),
-              &(cmd.enhance_table[HD_INA_NON_SQUARE_DET_OFDM_INDEX]),
-              sizeof(u16)*ENHANCE_HD_TABLE_ENTRIES);
-
-       return iwl_send_cmd(priv, &cmd_out);
-}
-
-void iwl_init_sensitivity(struct iwl_priv *priv)
-{
-       int ret = 0;
-       int i;
-       struct iwl_sensitivity_data *data = NULL;
-       const struct iwl_sensitivity_ranges *ranges = priv->hw_params.sens;
-
-       if (priv->disable_sens_cal)
-               return;
-
-       IWL_DEBUG_CALIB(priv, "Start iwl_init_sensitivity\n");
-
-       /* Clear driver's sensitivity algo data */
-       data = &(priv->sensitivity_data);
-
-       if (ranges == NULL)
-               return;
-
-       memset(data, 0, sizeof(struct iwl_sensitivity_data));
-
-       data->num_in_cck_no_fa = 0;
-       data->nrg_curr_state = IWL_FA_TOO_MANY;
-       data->nrg_prev_state = IWL_FA_TOO_MANY;
-       data->nrg_silence_ref = 0;
-       data->nrg_silence_idx = 0;
-       data->nrg_energy_idx = 0;
-
-       for (i = 0; i < 10; i++)
-               data->nrg_value[i] = 0;
-
-       for (i = 0; i < NRG_NUM_PREV_STAT_L; i++)
-               data->nrg_silence_rssi[i] = 0;
-
-       data->auto_corr_ofdm =  ranges->auto_corr_min_ofdm;
-       data->auto_corr_ofdm_mrc = ranges->auto_corr_min_ofdm_mrc;
-       data->auto_corr_ofdm_x1  = ranges->auto_corr_min_ofdm_x1;
-       data->auto_corr_ofdm_mrc_x1 = ranges->auto_corr_min_ofdm_mrc_x1;
-       data->auto_corr_cck = AUTO_CORR_CCK_MIN_VAL_DEF;
-       data->auto_corr_cck_mrc = ranges->auto_corr_min_cck_mrc;
-       data->nrg_th_cck = ranges->nrg_th_cck;
-       data->nrg_th_ofdm = ranges->nrg_th_ofdm;
-       data->barker_corr_th_min = ranges->barker_corr_th_min;
-       data->barker_corr_th_min_mrc = ranges->barker_corr_th_min_mrc;
-       data->nrg_th_cca = ranges->nrg_th_cca;
-
-       data->last_bad_plcp_cnt_ofdm = 0;
-       data->last_fa_cnt_ofdm = 0;
-       data->last_bad_plcp_cnt_cck = 0;
-       data->last_fa_cnt_cck = 0;
-
-       if (priv->enhance_sensitivity_table)
-               ret |= iwl_enhance_sensitivity_write(priv);
-       else
-               ret |= iwl_sensitivity_write(priv);
-       IWL_DEBUG_CALIB(priv, "<<return 0x%X\n", ret);
-}
-
-void iwl_sensitivity_calibration(struct iwl_priv *priv, void *resp)
-{
-       u32 rx_enable_time;
-       u32 fa_cck;
-       u32 fa_ofdm;
-       u32 bad_plcp_cck;
-       u32 bad_plcp_ofdm;
-       u32 norm_fa_ofdm;
-       u32 norm_fa_cck;
-       struct iwl_sensitivity_data *data = NULL;
-       struct statistics_rx_non_phy *rx_info;
-       struct statistics_rx_phy *ofdm, *cck;
-       unsigned long flags;
-       struct statistics_general_data statis;
-
-       if (priv->disable_sens_cal)
-               return;
-
-       data = &(priv->sensitivity_data);
-
-       if (!iwl_is_associated(priv)) {
-               IWL_DEBUG_CALIB(priv, "<< - not associated\n");
-               return;
-       }
-
-       spin_lock_irqsave(&priv->lock, flags);
-       if (priv->cfg->bt_statistics) {
-               rx_info = &(((struct iwl_bt_notif_statistics *)resp)->
-                             rx.general.common);
-               ofdm = &(((struct iwl_bt_notif_statistics *)resp)->rx.ofdm);
-               cck = &(((struct iwl_bt_notif_statistics *)resp)->rx.cck);
-       } else {
-               rx_info = &(((struct iwl_notif_statistics *)resp)->rx.general);
-               ofdm = &(((struct iwl_notif_statistics *)resp)->rx.ofdm);
-               cck = &(((struct iwl_notif_statistics *)resp)->rx.cck);
-       }
-       if (rx_info->interference_data_flag != INTERFERENCE_DATA_AVAILABLE) {
-               IWL_DEBUG_CALIB(priv, "<< invalid data.\n");
-               spin_unlock_irqrestore(&priv->lock, flags);
-               return;
-       }
-
-       /* Extract Statistics: */
-       rx_enable_time = le32_to_cpu(rx_info->channel_load);
-       fa_cck = le32_to_cpu(cck->false_alarm_cnt);
-       fa_ofdm = le32_to_cpu(ofdm->false_alarm_cnt);
-       bad_plcp_cck = le32_to_cpu(cck->plcp_err);
-       bad_plcp_ofdm = le32_to_cpu(ofdm->plcp_err);
-
-       statis.beacon_silence_rssi_a =
-                       le32_to_cpu(rx_info->beacon_silence_rssi_a);
-       statis.beacon_silence_rssi_b =
-                       le32_to_cpu(rx_info->beacon_silence_rssi_b);
-       statis.beacon_silence_rssi_c =
-                       le32_to_cpu(rx_info->beacon_silence_rssi_c);
-       statis.beacon_energy_a =
-                       le32_to_cpu(rx_info->beacon_energy_a);
-       statis.beacon_energy_b =
-                       le32_to_cpu(rx_info->beacon_energy_b);
-       statis.beacon_energy_c =
-                       le32_to_cpu(rx_info->beacon_energy_c);
-
-       spin_unlock_irqrestore(&priv->lock, flags);
-
-       IWL_DEBUG_CALIB(priv, "rx_enable_time = %u usecs\n", rx_enable_time);
-
-       if (!rx_enable_time) {
-               IWL_DEBUG_CALIB(priv, "<< RX Enable Time == 0!\n");
-               return;
-       }
-
-       /* These statistics increase monotonically, and do not reset
-        *   at each beacon.  Calculate difference from last value, or just
-        *   use the new statistics value if it has reset or wrapped around. */
-       if (data->last_bad_plcp_cnt_cck > bad_plcp_cck)
-               data->last_bad_plcp_cnt_cck = bad_plcp_cck;
-       else {
-               bad_plcp_cck -= data->last_bad_plcp_cnt_cck;
-               data->last_bad_plcp_cnt_cck += bad_plcp_cck;
-       }
-
-       if (data->last_bad_plcp_cnt_ofdm > bad_plcp_ofdm)
-               data->last_bad_plcp_cnt_ofdm = bad_plcp_ofdm;
-       else {
-               bad_plcp_ofdm -= data->last_bad_plcp_cnt_ofdm;
-               data->last_bad_plcp_cnt_ofdm += bad_plcp_ofdm;
-       }
-
-       if (data->last_fa_cnt_ofdm > fa_ofdm)
-               data->last_fa_cnt_ofdm = fa_ofdm;
-       else {
-               fa_ofdm -= data->last_fa_cnt_ofdm;
-               data->last_fa_cnt_ofdm += fa_ofdm;
-       }
-
-       if (data->last_fa_cnt_cck > fa_cck)
-               data->last_fa_cnt_cck = fa_cck;
-       else {
-               fa_cck -= data->last_fa_cnt_cck;
-               data->last_fa_cnt_cck += fa_cck;
-       }
-
-       /* Total aborted signal locks */
-       norm_fa_ofdm = fa_ofdm + bad_plcp_ofdm;
-       norm_fa_cck = fa_cck + bad_plcp_cck;
-
-       IWL_DEBUG_CALIB(priv, "cck: fa %u badp %u  ofdm: fa %u badp %u\n", fa_cck,
-                       bad_plcp_cck, fa_ofdm, bad_plcp_ofdm);
-
-       iwl_sens_auto_corr_ofdm(priv, norm_fa_ofdm, rx_enable_time);
-       iwl_sens_energy_cck(priv, norm_fa_cck, rx_enable_time, &statis);
-       if (priv->enhance_sensitivity_table)
-               iwl_enhance_sensitivity_write(priv);
-       else
-               iwl_sensitivity_write(priv);
-}
-
-static inline u8 find_first_chain(u8 mask)
-{
-       if (mask & ANT_A)
-               return CHAIN_A;
-       if (mask & ANT_B)
-               return CHAIN_B;
-       return CHAIN_C;
-}
-
-/*
- * Accumulate 20 beacons of signal and noise statistics for each of
- *   3 receivers/antennas/rx-chains, then figure out:
- * 1)  Which antennas are connected.
- * 2)  Differential rx gain settings to balance the 3 receivers.
- */
-void iwl_chain_noise_calibration(struct iwl_priv *priv, void *stat_resp)
-{
-       struct iwl_chain_noise_data *data = NULL;
-
-       u32 chain_noise_a;
-       u32 chain_noise_b;
-       u32 chain_noise_c;
-       u32 chain_sig_a;
-       u32 chain_sig_b;
-       u32 chain_sig_c;
-       u32 average_sig[NUM_RX_CHAINS] = {INITIALIZATION_VALUE};
-       u32 average_noise[NUM_RX_CHAINS] = {INITIALIZATION_VALUE};
-       u32 max_average_sig;
-       u16 max_average_sig_antenna_i;
-       u32 min_average_noise = MIN_AVERAGE_NOISE_MAX_VALUE;
-       u16 min_average_noise_antenna_i = INITIALIZATION_VALUE;
-       u16 i = 0;
-       u16 rxon_chnum = INITIALIZATION_VALUE;
-       u16 stat_chnum = INITIALIZATION_VALUE;
-       u8 rxon_band24;
-       u8 stat_band24;
-       u32 active_chains = 0;
-       u8 num_tx_chains;
-       unsigned long flags;
-       struct statistics_rx_non_phy *rx_info;
-       u8 first_chain;
-
-       if (priv->disable_chain_noise_cal)
-               return;
-
-       data = &(priv->chain_noise_data);
-
-       /*
-        * Accumulate just the first "chain_noise_num_beacons" after
-        * the first association, then we're done forever.
-        */
-       if (data->state != IWL_CHAIN_NOISE_ACCUMULATE) {
-               if (data->state == IWL_CHAIN_NOISE_ALIVE)
-                       IWL_DEBUG_CALIB(priv, "Wait for noise calib reset\n");
-               return;
-       }
-
-       spin_lock_irqsave(&priv->lock, flags);
-       if (priv->cfg->bt_statistics) {
-               rx_info = &(((struct iwl_bt_notif_statistics *)stat_resp)->
-                             rx.general.common);
-       } else {
-               rx_info = &(((struct iwl_notif_statistics *)stat_resp)->
-                             rx.general);
-       }
-       if (rx_info->interference_data_flag != INTERFERENCE_DATA_AVAILABLE) {
-               IWL_DEBUG_CALIB(priv, " << Interference data unavailable\n");
-               spin_unlock_irqrestore(&priv->lock, flags);
-               return;
-       }
-
-       rxon_band24 = !!(priv->staging_rxon.flags & RXON_FLG_BAND_24G_MSK);
-       rxon_chnum = le16_to_cpu(priv->staging_rxon.channel);
-       if (priv->cfg->bt_statistics) {
-               stat_band24 = !!(((struct iwl_bt_notif_statistics *)
-                                stat_resp)->flag &
-                                STATISTICS_REPLY_FLG_BAND_24G_MSK);
-               stat_chnum = le32_to_cpu(((struct iwl_bt_notif_statistics *)
-                                        stat_resp)->flag) >> 16;
-       } else {
-               stat_band24 = !!(((struct iwl_notif_statistics *)
-                                stat_resp)->flag &
-                                STATISTICS_REPLY_FLG_BAND_24G_MSK);
-               stat_chnum = le32_to_cpu(((struct iwl_notif_statistics *)
-                                        stat_resp)->flag) >> 16;
-       }
-
-       /* Make sure we accumulate data for just the associated channel
-        *   (even if scanning). */
-       if ((rxon_chnum != stat_chnum) || (rxon_band24 != stat_band24)) {
-               IWL_DEBUG_CALIB(priv, "Stats not from chan=%d, band24=%d\n",
-                               rxon_chnum, rxon_band24);
-               spin_unlock_irqrestore(&priv->lock, flags);
-               return;
-       }
-
-       /*
-        *  Accumulate beacon statistics values across
-        * "chain_noise_num_beacons"
-        */
-       chain_noise_a = le32_to_cpu(rx_info->beacon_silence_rssi_a) &
-                               IN_BAND_FILTER;
-       chain_noise_b = le32_to_cpu(rx_info->beacon_silence_rssi_b) &
-                               IN_BAND_FILTER;
-       chain_noise_c = le32_to_cpu(rx_info->beacon_silence_rssi_c) &
-                               IN_BAND_FILTER;
-
-       chain_sig_a = le32_to_cpu(rx_info->beacon_rssi_a) & IN_BAND_FILTER;
-       chain_sig_b = le32_to_cpu(rx_info->beacon_rssi_b) & IN_BAND_FILTER;
-       chain_sig_c = le32_to_cpu(rx_info->beacon_rssi_c) & IN_BAND_FILTER;
-
-       spin_unlock_irqrestore(&priv->lock, flags);
-
-       data->beacon_count++;
-
-       data->chain_noise_a = (chain_noise_a + data->chain_noise_a);
-       data->chain_noise_b = (chain_noise_b + data->chain_noise_b);
-       data->chain_noise_c = (chain_noise_c + data->chain_noise_c);
-
-       data->chain_signal_a = (chain_sig_a + data->chain_signal_a);
-       data->chain_signal_b = (chain_sig_b + data->chain_signal_b);
-       data->chain_signal_c = (chain_sig_c + data->chain_signal_c);
-
-       IWL_DEBUG_CALIB(priv, "chan=%d, band24=%d, beacon=%d\n",
-                       rxon_chnum, rxon_band24, data->beacon_count);
-       IWL_DEBUG_CALIB(priv, "chain_sig: a %d b %d c %d\n",
-                       chain_sig_a, chain_sig_b, chain_sig_c);
-       IWL_DEBUG_CALIB(priv, "chain_noise: a %d b %d c %d\n",
-                       chain_noise_a, chain_noise_b, chain_noise_c);
-
-       /* If this is the "chain_noise_num_beacons", determine:
-        * 1)  Disconnected antennas (using signal strengths)
-        * 2)  Differential gain (using silence noise) to balance receivers */
-       if (data->beacon_count != priv->cfg->chain_noise_num_beacons)
-               return;
-
-       /* Analyze signal for disconnected antenna */
-       average_sig[0] =
-               (data->chain_signal_a) / priv->cfg->chain_noise_num_beacons;
-       average_sig[1] =
-               (data->chain_signal_b) / priv->cfg->chain_noise_num_beacons;
-       average_sig[2] =
-               (data->chain_signal_c) / priv->cfg->chain_noise_num_beacons;
-
-       if (average_sig[0] >= average_sig[1]) {
-               max_average_sig = average_sig[0];
-               max_average_sig_antenna_i = 0;
-               active_chains = (1 << max_average_sig_antenna_i);
-       } else {
-               max_average_sig = average_sig[1];
-               max_average_sig_antenna_i = 1;
-               active_chains = (1 << max_average_sig_antenna_i);
-       }
-
-       if (average_sig[2] >= max_average_sig) {
-               max_average_sig = average_sig[2];
-               max_average_sig_antenna_i = 2;
-               active_chains = (1 << max_average_sig_antenna_i);
-       }
-
-       IWL_DEBUG_CALIB(priv, "average_sig: a %d b %d c %d\n",
-                    average_sig[0], average_sig[1], average_sig[2]);
-       IWL_DEBUG_CALIB(priv, "max_average_sig = %d, antenna %d\n",
-                    max_average_sig, max_average_sig_antenna_i);
-
-       /* Compare signal strengths for all 3 receivers. */
-       for (i = 0; i < NUM_RX_CHAINS; i++) {
-               if (i != max_average_sig_antenna_i) {
-                       s32 rssi_delta = (max_average_sig - average_sig[i]);
-
-                       /* If signal is very weak, compared with
-                        * strongest, mark it as disconnected. */
-                       if (rssi_delta > MAXIMUM_ALLOWED_PATHLOSS)
-                               data->disconn_array[i] = 1;
-                       else
-                               active_chains |= (1 << i);
-                       IWL_DEBUG_CALIB(priv, "i = %d  rssiDelta = %d  "
-                            "disconn_array[i] = %d\n",
-                            i, rssi_delta, data->disconn_array[i]);
-               }
-       }
-
-       /*
-        * The above algorithm sometimes fails when the ucode
-        * reports 0 for all chains. It's not clear why that
-        * happens to start with, but it is then causing trouble
-        * because this can make us enable more chains than the
-        * hardware really has.
-        *
-        * To be safe, simply mask out any chains that we know
-        * are not on the device.
-        */
-       active_chains &= priv->hw_params.valid_rx_ant;
-
-       num_tx_chains = 0;
-       for (i = 0; i < NUM_RX_CHAINS; i++) {
-               /* loops on all the bits of
-                * priv->hw_setting.valid_tx_ant */
-               u8 ant_msk = (1 << i);
-               if (!(priv->hw_params.valid_tx_ant & ant_msk))
-                       continue;
-
-               num_tx_chains++;
-               if (data->disconn_array[i] == 0)
-                       /* there is a Tx antenna connected */
-                       break;
-               if (num_tx_chains == priv->hw_params.tx_chains_num &&
-                   data->disconn_array[i]) {
-                       /*
-                        * If all chains are disconnected
-                        * connect the first valid tx chain
-                        */
-                       first_chain =
-                               find_first_chain(priv->cfg->valid_tx_ant);
-                       data->disconn_array[first_chain] = 0;
-                       active_chains |= BIT(first_chain);
-                       IWL_DEBUG_CALIB(priv, "All Tx chains are disconnected W/A - declare %d as connected\n",
-                                       first_chain);
-                       break;
-               }
-       }
-
-       if (active_chains != priv->hw_params.valid_rx_ant &&
-           active_chains != priv->chain_noise_data.active_chains)
-               IWL_DEBUG_CALIB(priv,
-                               "Detected that not all antennas are connected! "
-                               "Connected: %#x, valid: %#x.\n",
-                               active_chains, priv->hw_params.valid_rx_ant);
-
-       /* Save for use within RXON, TX, SCAN commands, etc. */
-       priv->chain_noise_data.active_chains = active_chains;
-       IWL_DEBUG_CALIB(priv, "active_chains (bitwise) = 0x%x\n",
-                       active_chains);
-
-       /* Analyze noise for rx balance */
-       average_noise[0] =
-               ((data->chain_noise_a) / priv->cfg->chain_noise_num_beacons);
-       average_noise[1] =
-               ((data->chain_noise_b) / priv->cfg->chain_noise_num_beacons);
-       average_noise[2] =
-               ((data->chain_noise_c) / priv->cfg->chain_noise_num_beacons);
-
-       for (i = 0; i < NUM_RX_CHAINS; i++) {
-               if (!(data->disconn_array[i]) &&
-                  (average_noise[i] <= min_average_noise)) {
-                       /* This means that chain i is active and has
-                        * lower noise values so far: */
-                       min_average_noise = average_noise[i];
-                       min_average_noise_antenna_i = i;
-               }
-       }
-
-       IWL_DEBUG_CALIB(priv, "average_noise: a %d b %d c %d\n",
-                       average_noise[0], average_noise[1],
-                       average_noise[2]);
-
-       IWL_DEBUG_CALIB(priv, "min_average_noise = %d, antenna %d\n",
-                       min_average_noise, min_average_noise_antenna_i);
-
-       if (priv->cfg->ops->utils->gain_computation)
-               priv->cfg->ops->utils->gain_computation(priv, average_noise,
-                               min_average_noise_antenna_i, min_average_noise,
-                               find_first_chain(priv->cfg->valid_rx_ant));
-
-       /* Some power changes may have been made during the calibration.
-        * Update and commit the RXON
-        */
-       if (priv->cfg->ops->lib->update_chain_flags)
-               priv->cfg->ops->lib->update_chain_flags(priv);
-
-       data->state = IWL_CHAIN_NOISE_DONE;
-       iwl_power_update_mode(priv, false);
-}
-
-void iwl_reset_run_time_calib(struct iwl_priv *priv)
-{
-       int i;
-       memset(&(priv->sensitivity_data), 0,
-              sizeof(struct iwl_sensitivity_data));
-       memset(&(priv->chain_noise_data), 0,
-              sizeof(struct iwl_chain_noise_data));
-       for (i = 0; i < NUM_RX_CHAINS; i++)
-               priv->chain_noise_data.delta_gain_code[i] =
-                               CHAIN_NOISE_DELTA_GAIN_INIT_VAL;
-
-       /* Ask for statistics now, the uCode will send notification
-        * periodically after association */
-       iwl_send_statistics_request(priv, CMD_ASYNC, true);
-}
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-debugfs.c b/drivers/net/wireless/iwlwifi/iwl-agn-debugfs.c
deleted file mode 100644 (file)
index d706b8a..0000000
+++ /dev/null
@@ -1,1013 +0,0 @@
-/******************************************************************************
-*
-* GPL LICENSE SUMMARY
-*
-* Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved.
-*
-* This program is free software; you can redistribute it and/or modify
-* it under the terms of version 2 of the GNU General Public License as
-* published by the Free Software Foundation.
-*
-* This program is distributed in the hope that it will be useful, but
-* WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
-* USA
-*
-* The full GNU General Public License is included in this distribution
-* in the file called LICENSE.GPL.
-*
-* Contact Information:
-*  Intel Linux Wireless <ilw@linux.intel.com>
-* Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
-*****************************************************************************/
-
-#include "iwl-agn-debugfs.h"
-
-static int iwl_statistics_flag(struct iwl_priv *priv, char *buf, int bufsz)
-{
-       int p = 0;
-       u32 flag;
-
-       if (priv->cfg->bt_statistics)
-               flag = le32_to_cpu(priv->_agn.statistics_bt.flag);
-       else
-               flag = le32_to_cpu(priv->_agn.statistics.flag);
-
-       p += scnprintf(buf + p, bufsz - p, "Statistics Flag(0x%X):\n", flag);
-       if (flag & UCODE_STATISTICS_CLEAR_MSK)
-               p += scnprintf(buf + p, bufsz - p,
-               "\tStatistics have been cleared\n");
-       p += scnprintf(buf + p, bufsz - p, "\tOperational Frequency: %s\n",
-               (flag & UCODE_STATISTICS_FREQUENCY_MSK)
-               ? "2.4 GHz" : "5.2 GHz");
-       p += scnprintf(buf + p, bufsz - p, "\tTGj Narrow Band: %s\n",
-               (flag & UCODE_STATISTICS_NARROW_BAND_MSK)
-                ? "enabled" : "disabled");
-
-       return p;
-}
-
-ssize_t iwl_ucode_rx_stats_read(struct file *file, char __user *user_buf,
-                               size_t count, loff_t *ppos)
-  {
-       struct iwl_priv *priv = file->private_data;
-       int pos = 0;
-       char *buf;
-       int bufsz = sizeof(struct statistics_rx_phy) * 40 +
-                   sizeof(struct statistics_rx_non_phy) * 40 +
-                   sizeof(struct statistics_rx_ht_phy) * 40 + 400;
-       ssize_t ret;
-       struct statistics_rx_phy *ofdm, *accum_ofdm, *delta_ofdm, *max_ofdm;
-       struct statistics_rx_phy *cck, *accum_cck, *delta_cck, *max_cck;
-       struct statistics_rx_non_phy *general, *accum_general;
-       struct statistics_rx_non_phy *delta_general, *max_general;
-       struct statistics_rx_ht_phy *ht, *accum_ht, *delta_ht, *max_ht;
-
-       if (!iwl_is_alive(priv))
-               return -EAGAIN;
-
-       buf = kzalloc(bufsz, GFP_KERNEL);
-       if (!buf) {
-               IWL_ERR(priv, "Can not allocate Buffer\n");
-               return -ENOMEM;
-       }
-
-       /*
-        * the statistic information display here is based on
-        * the last statistics notification from uCode
-        * might not reflect the current uCode activity
-        */
-       if (priv->cfg->bt_statistics) {
-               ofdm = &priv->_agn.statistics_bt.rx.ofdm;
-               cck = &priv->_agn.statistics_bt.rx.cck;
-               general = &priv->_agn.statistics_bt.rx.general.common;
-               ht = &priv->_agn.statistics_bt.rx.ofdm_ht;
-               accum_ofdm = &priv->_agn.accum_statistics_bt.rx.ofdm;
-               accum_cck = &priv->_agn.accum_statistics_bt.rx.cck;
-               accum_general =
-                       &priv->_agn.accum_statistics_bt.rx.general.common;
-               accum_ht = &priv->_agn.accum_statistics_bt.rx.ofdm_ht;
-               delta_ofdm = &priv->_agn.delta_statistics_bt.rx.ofdm;
-               delta_cck = &priv->_agn.delta_statistics_bt.rx.cck;
-               delta_general =
-                       &priv->_agn.delta_statistics_bt.rx.general.common;
-               delta_ht = &priv->_agn.delta_statistics_bt.rx.ofdm_ht;
-               max_ofdm = &priv->_agn.max_delta_bt.rx.ofdm;
-               max_cck = &priv->_agn.max_delta_bt.rx.cck;
-               max_general = &priv->_agn.max_delta_bt.rx.general.common;
-               max_ht = &priv->_agn.max_delta_bt.rx.ofdm_ht;
-       } else {
-               ofdm = &priv->_agn.statistics.rx.ofdm;
-               cck = &priv->_agn.statistics.rx.cck;
-               general = &priv->_agn.statistics.rx.general;
-               ht = &priv->_agn.statistics.rx.ofdm_ht;
-               accum_ofdm = &priv->_agn.accum_statistics.rx.ofdm;
-               accum_cck = &priv->_agn.accum_statistics.rx.cck;
-               accum_general = &priv->_agn.accum_statistics.rx.general;
-               accum_ht = &priv->_agn.accum_statistics.rx.ofdm_ht;
-               delta_ofdm = &priv->_agn.delta_statistics.rx.ofdm;
-               delta_cck = &priv->_agn.delta_statistics.rx.cck;
-               delta_general = &priv->_agn.delta_statistics.rx.general;
-               delta_ht = &priv->_agn.delta_statistics.rx.ofdm_ht;
-               max_ofdm = &priv->_agn.max_delta.rx.ofdm;
-               max_cck = &priv->_agn.max_delta.rx.cck;
-               max_general = &priv->_agn.max_delta.rx.general;
-               max_ht = &priv->_agn.max_delta.rx.ofdm_ht;
-       }
-
-       pos += iwl_statistics_flag(priv, buf, bufsz);
-       pos += scnprintf(buf + pos, bufsz - pos, "%-32s     current"
-                        "acumulative       delta         max\n",
-                        "Statistics_Rx - OFDM:");
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "ina_cnt:", le32_to_cpu(ofdm->ina_cnt),
-                        accum_ofdm->ina_cnt,
-                        delta_ofdm->ina_cnt, max_ofdm->ina_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "fina_cnt:",
-                        le32_to_cpu(ofdm->fina_cnt), accum_ofdm->fina_cnt,
-                        delta_ofdm->fina_cnt, max_ofdm->fina_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "plcp_err:",
-                        le32_to_cpu(ofdm->plcp_err), accum_ofdm->plcp_err,
-                        delta_ofdm->plcp_err, max_ofdm->plcp_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n", "crc32_err:",
-                        le32_to_cpu(ofdm->crc32_err), accum_ofdm->crc32_err,
-                        delta_ofdm->crc32_err, max_ofdm->crc32_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n", "overrun_err:",
-                        le32_to_cpu(ofdm->overrun_err),
-                        accum_ofdm->overrun_err, delta_ofdm->overrun_err,
-                        max_ofdm->overrun_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "early_overrun_err:",
-                        le32_to_cpu(ofdm->early_overrun_err),
-                        accum_ofdm->early_overrun_err,
-                        delta_ofdm->early_overrun_err,
-                        max_ofdm->early_overrun_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "crc32_good:", le32_to_cpu(ofdm->crc32_good),
-                        accum_ofdm->crc32_good, delta_ofdm->crc32_good,
-                        max_ofdm->crc32_good);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n", "false_alarm_cnt:",
-                        le32_to_cpu(ofdm->false_alarm_cnt),
-                        accum_ofdm->false_alarm_cnt,
-                        delta_ofdm->false_alarm_cnt,
-                        max_ofdm->false_alarm_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "fina_sync_err_cnt:",
-                        le32_to_cpu(ofdm->fina_sync_err_cnt),
-                        accum_ofdm->fina_sync_err_cnt,
-                        delta_ofdm->fina_sync_err_cnt,
-                        max_ofdm->fina_sync_err_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n", "sfd_timeout:",
-                        le32_to_cpu(ofdm->sfd_timeout),
-                        accum_ofdm->sfd_timeout, delta_ofdm->sfd_timeout,
-                        max_ofdm->sfd_timeout);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n", "fina_timeout:",
-                        le32_to_cpu(ofdm->fina_timeout),
-                        accum_ofdm->fina_timeout, delta_ofdm->fina_timeout,
-                        max_ofdm->fina_timeout);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "unresponded_rts:",
-                        le32_to_cpu(ofdm->unresponded_rts),
-                        accum_ofdm->unresponded_rts,
-                        delta_ofdm->unresponded_rts,
-                        max_ofdm->unresponded_rts);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "rxe_frame_lmt_ovrun:",
-                        le32_to_cpu(ofdm->rxe_frame_limit_overrun),
-                        accum_ofdm->rxe_frame_limit_overrun,
-                        delta_ofdm->rxe_frame_limit_overrun,
-                        max_ofdm->rxe_frame_limit_overrun);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n", "sent_ack_cnt:",
-                        le32_to_cpu(ofdm->sent_ack_cnt),
-                        accum_ofdm->sent_ack_cnt, delta_ofdm->sent_ack_cnt,
-                        max_ofdm->sent_ack_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n", "sent_cts_cnt:",
-                        le32_to_cpu(ofdm->sent_cts_cnt),
-                        accum_ofdm->sent_cts_cnt, delta_ofdm->sent_cts_cnt,
-                        max_ofdm->sent_cts_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "sent_ba_rsp_cnt:",
-                        le32_to_cpu(ofdm->sent_ba_rsp_cnt),
-                        accum_ofdm->sent_ba_rsp_cnt,
-                        delta_ofdm->sent_ba_rsp_cnt,
-                        max_ofdm->sent_ba_rsp_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n", "dsp_self_kill:",
-                        le32_to_cpu(ofdm->dsp_self_kill),
-                        accum_ofdm->dsp_self_kill,
-                        delta_ofdm->dsp_self_kill,
-                        max_ofdm->dsp_self_kill);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "mh_format_err:",
-                        le32_to_cpu(ofdm->mh_format_err),
-                        accum_ofdm->mh_format_err,
-                        delta_ofdm->mh_format_err,
-                        max_ofdm->mh_format_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "re_acq_main_rssi_sum:",
-                        le32_to_cpu(ofdm->re_acq_main_rssi_sum),
-                        accum_ofdm->re_acq_main_rssi_sum,
-                        delta_ofdm->re_acq_main_rssi_sum,
-                        max_ofdm->re_acq_main_rssi_sum);
-
-       pos += scnprintf(buf + pos, bufsz - pos, "%-32s     current"
-                        "acumulative       delta         max\n",
-                        "Statistics_Rx - CCK:");
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "ina_cnt:",
-                        le32_to_cpu(cck->ina_cnt), accum_cck->ina_cnt,
-                        delta_cck->ina_cnt, max_cck->ina_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "fina_cnt:",
-                        le32_to_cpu(cck->fina_cnt), accum_cck->fina_cnt,
-                        delta_cck->fina_cnt, max_cck->fina_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "plcp_err:",
-                        le32_to_cpu(cck->plcp_err), accum_cck->plcp_err,
-                        delta_cck->plcp_err, max_cck->plcp_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "crc32_err:",
-                        le32_to_cpu(cck->crc32_err), accum_cck->crc32_err,
-                        delta_cck->crc32_err, max_cck->crc32_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "overrun_err:",
-                        le32_to_cpu(cck->overrun_err),
-                        accum_cck->overrun_err, delta_cck->overrun_err,
-                        max_cck->overrun_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "early_overrun_err:",
-                        le32_to_cpu(cck->early_overrun_err),
-                        accum_cck->early_overrun_err,
-                        delta_cck->early_overrun_err,
-                        max_cck->early_overrun_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "crc32_good:",
-                        le32_to_cpu(cck->crc32_good), accum_cck->crc32_good,
-                        delta_cck->crc32_good, max_cck->crc32_good);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "false_alarm_cnt:",
-                        le32_to_cpu(cck->false_alarm_cnt),
-                        accum_cck->false_alarm_cnt,
-                        delta_cck->false_alarm_cnt, max_cck->false_alarm_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "fina_sync_err_cnt:",
-                        le32_to_cpu(cck->fina_sync_err_cnt),
-                        accum_cck->fina_sync_err_cnt,
-                        delta_cck->fina_sync_err_cnt,
-                        max_cck->fina_sync_err_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "sfd_timeout:",
-                        le32_to_cpu(cck->sfd_timeout),
-                        accum_cck->sfd_timeout, delta_cck->sfd_timeout,
-                        max_cck->sfd_timeout);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n", "fina_timeout:",
-                        le32_to_cpu(cck->fina_timeout),
-                        accum_cck->fina_timeout, delta_cck->fina_timeout,
-                        max_cck->fina_timeout);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "unresponded_rts:",
-                        le32_to_cpu(cck->unresponded_rts),
-                        accum_cck->unresponded_rts, delta_cck->unresponded_rts,
-                        max_cck->unresponded_rts);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "rxe_frame_lmt_ovrun:",
-                        le32_to_cpu(cck->rxe_frame_limit_overrun),
-                        accum_cck->rxe_frame_limit_overrun,
-                        delta_cck->rxe_frame_limit_overrun,
-                        max_cck->rxe_frame_limit_overrun);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n", "sent_ack_cnt:",
-                        le32_to_cpu(cck->sent_ack_cnt),
-                        accum_cck->sent_ack_cnt, delta_cck->sent_ack_cnt,
-                        max_cck->sent_ack_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n", "sent_cts_cnt:",
-                        le32_to_cpu(cck->sent_cts_cnt),
-                        accum_cck->sent_cts_cnt, delta_cck->sent_cts_cnt,
-                        max_cck->sent_cts_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n", "sent_ba_rsp_cnt:",
-                        le32_to_cpu(cck->sent_ba_rsp_cnt),
-                        accum_cck->sent_ba_rsp_cnt,
-                        delta_cck->sent_ba_rsp_cnt,
-                        max_cck->sent_ba_rsp_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n", "dsp_self_kill:",
-                        le32_to_cpu(cck->dsp_self_kill),
-                        accum_cck->dsp_self_kill, delta_cck->dsp_self_kill,
-                        max_cck->dsp_self_kill);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n", "mh_format_err:",
-                        le32_to_cpu(cck->mh_format_err),
-                        accum_cck->mh_format_err, delta_cck->mh_format_err,
-                        max_cck->mh_format_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "re_acq_main_rssi_sum:",
-                        le32_to_cpu(cck->re_acq_main_rssi_sum),
-                        accum_cck->re_acq_main_rssi_sum,
-                        delta_cck->re_acq_main_rssi_sum,
-                        max_cck->re_acq_main_rssi_sum);
-
-       pos += scnprintf(buf + pos, bufsz - pos, "%-32s     current"
-                        "acumulative       delta         max\n",
-                        "Statistics_Rx - GENERAL:");
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n", "bogus_cts:",
-                        le32_to_cpu(general->bogus_cts),
-                        accum_general->bogus_cts, delta_general->bogus_cts,
-                        max_general->bogus_cts);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n", "bogus_ack:",
-                        le32_to_cpu(general->bogus_ack),
-                        accum_general->bogus_ack, delta_general->bogus_ack,
-                        max_general->bogus_ack);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "non_bssid_frames:",
-                        le32_to_cpu(general->non_bssid_frames),
-                        accum_general->non_bssid_frames,
-                        delta_general->non_bssid_frames,
-                        max_general->non_bssid_frames);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "filtered_frames:",
-                        le32_to_cpu(general->filtered_frames),
-                        accum_general->filtered_frames,
-                        delta_general->filtered_frames,
-                        max_general->filtered_frames);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "non_channel_beacons:",
-                        le32_to_cpu(general->non_channel_beacons),
-                        accum_general->non_channel_beacons,
-                        delta_general->non_channel_beacons,
-                        max_general->non_channel_beacons);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "channel_beacons:",
-                        le32_to_cpu(general->channel_beacons),
-                        accum_general->channel_beacons,
-                        delta_general->channel_beacons,
-                        max_general->channel_beacons);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "num_missed_bcon:",
-                        le32_to_cpu(general->num_missed_bcon),
-                        accum_general->num_missed_bcon,
-                        delta_general->num_missed_bcon,
-                        max_general->num_missed_bcon);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "adc_rx_saturation_time:",
-                        le32_to_cpu(general->adc_rx_saturation_time),
-                        accum_general->adc_rx_saturation_time,
-                        delta_general->adc_rx_saturation_time,
-                        max_general->adc_rx_saturation_time);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "ina_detect_search_tm:",
-                        le32_to_cpu(general->ina_detection_search_time),
-                        accum_general->ina_detection_search_time,
-                        delta_general->ina_detection_search_time,
-                        max_general->ina_detection_search_time);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "beacon_silence_rssi_a:",
-                        le32_to_cpu(general->beacon_silence_rssi_a),
-                        accum_general->beacon_silence_rssi_a,
-                        delta_general->beacon_silence_rssi_a,
-                        max_general->beacon_silence_rssi_a);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "beacon_silence_rssi_b:",
-                        le32_to_cpu(general->beacon_silence_rssi_b),
-                        accum_general->beacon_silence_rssi_b,
-                        delta_general->beacon_silence_rssi_b,
-                        max_general->beacon_silence_rssi_b);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "beacon_silence_rssi_c:",
-                        le32_to_cpu(general->beacon_silence_rssi_c),
-                        accum_general->beacon_silence_rssi_c,
-                        delta_general->beacon_silence_rssi_c,
-                        max_general->beacon_silence_rssi_c);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "interference_data_flag:",
-                        le32_to_cpu(general->interference_data_flag),
-                        accum_general->interference_data_flag,
-                        delta_general->interference_data_flag,
-                        max_general->interference_data_flag);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "channel_load:",
-                        le32_to_cpu(general->channel_load),
-                        accum_general->channel_load,
-                        delta_general->channel_load,
-                        max_general->channel_load);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "dsp_false_alarms:",
-                        le32_to_cpu(general->dsp_false_alarms),
-                        accum_general->dsp_false_alarms,
-                        delta_general->dsp_false_alarms,
-                        max_general->dsp_false_alarms);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "beacon_rssi_a:",
-                        le32_to_cpu(general->beacon_rssi_a),
-                        accum_general->beacon_rssi_a,
-                        delta_general->beacon_rssi_a,
-                        max_general->beacon_rssi_a);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "beacon_rssi_b:",
-                        le32_to_cpu(general->beacon_rssi_b),
-                        accum_general->beacon_rssi_b,
-                        delta_general->beacon_rssi_b,
-                        max_general->beacon_rssi_b);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "beacon_rssi_c:",
-                        le32_to_cpu(general->beacon_rssi_c),
-                        accum_general->beacon_rssi_c,
-                        delta_general->beacon_rssi_c,
-                        max_general->beacon_rssi_c);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "beacon_energy_a:",
-                        le32_to_cpu(general->beacon_energy_a),
-                        accum_general->beacon_energy_a,
-                        delta_general->beacon_energy_a,
-                        max_general->beacon_energy_a);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "beacon_energy_b:",
-                        le32_to_cpu(general->beacon_energy_b),
-                        accum_general->beacon_energy_b,
-                        delta_general->beacon_energy_b,
-                        max_general->beacon_energy_b);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "beacon_energy_c:",
-                        le32_to_cpu(general->beacon_energy_c),
-                        accum_general->beacon_energy_c,
-                        delta_general->beacon_energy_c,
-                        max_general->beacon_energy_c);
-
-       pos += scnprintf(buf + pos, bufsz - pos, "Statistics_Rx - OFDM_HT:\n");
-       pos += scnprintf(buf + pos, bufsz - pos, "%-32s     current"
-                        "acumulative       delta         max\n",
-                        "Statistics_Rx - OFDM_HT:");
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "plcp_err:",
-                        le32_to_cpu(ht->plcp_err), accum_ht->plcp_err,
-                        delta_ht->plcp_err, max_ht->plcp_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "overrun_err:",
-                        le32_to_cpu(ht->overrun_err), accum_ht->overrun_err,
-                        delta_ht->overrun_err, max_ht->overrun_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "early_overrun_err:",
-                        le32_to_cpu(ht->early_overrun_err),
-                        accum_ht->early_overrun_err,
-                        delta_ht->early_overrun_err,
-                        max_ht->early_overrun_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "crc32_good:",
-                        le32_to_cpu(ht->crc32_good), accum_ht->crc32_good,
-                        delta_ht->crc32_good, max_ht->crc32_good);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "crc32_err:",
-                        le32_to_cpu(ht->crc32_err), accum_ht->crc32_err,
-                        delta_ht->crc32_err, max_ht->crc32_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "mh_format_err:",
-                        le32_to_cpu(ht->mh_format_err),
-                        accum_ht->mh_format_err,
-                        delta_ht->mh_format_err, max_ht->mh_format_err);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "agg_crc32_good:",
-                        le32_to_cpu(ht->agg_crc32_good),
-                        accum_ht->agg_crc32_good,
-                        delta_ht->agg_crc32_good, max_ht->agg_crc32_good);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "agg_mpdu_cnt:",
-                        le32_to_cpu(ht->agg_mpdu_cnt),
-                        accum_ht->agg_mpdu_cnt,
-                        delta_ht->agg_mpdu_cnt, max_ht->agg_mpdu_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "agg_cnt:",
-                        le32_to_cpu(ht->agg_cnt), accum_ht->agg_cnt,
-                        delta_ht->agg_cnt, max_ht->agg_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "unsupport_mcs:",
-                        le32_to_cpu(ht->unsupport_mcs),
-                        accum_ht->unsupport_mcs,
-                        delta_ht->unsupport_mcs, max_ht->unsupport_mcs);
-
-       ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
-       kfree(buf);
-       return ret;
-}
-
-ssize_t iwl_ucode_tx_stats_read(struct file *file,
-                               char __user *user_buf,
-                               size_t count, loff_t *ppos)
-{
-       struct iwl_priv *priv = file->private_data;
-       int pos = 0;
-       char *buf;
-       int bufsz = (sizeof(struct statistics_tx) * 48) + 250;
-       ssize_t ret;
-       struct statistics_tx *tx, *accum_tx, *delta_tx, *max_tx;
-
-       if (!iwl_is_alive(priv))
-               return -EAGAIN;
-
-       buf = kzalloc(bufsz, GFP_KERNEL);
-       if (!buf) {
-               IWL_ERR(priv, "Can not allocate Buffer\n");
-               return -ENOMEM;
-       }
-
-       /* the statistic information display here is based on
-         * the last statistics notification from uCode
-         * might not reflect the current uCode activity
-         */
-       if (priv->cfg->bt_statistics) {
-               tx = &priv->_agn.statistics_bt.tx;
-               accum_tx = &priv->_agn.accum_statistics_bt.tx;
-               delta_tx = &priv->_agn.delta_statistics_bt.tx;
-               max_tx = &priv->_agn.max_delta_bt.tx;
-       } else {
-               tx = &priv->_agn.statistics.tx;
-               accum_tx = &priv->_agn.accum_statistics.tx;
-               delta_tx = &priv->_agn.delta_statistics.tx;
-               max_tx = &priv->_agn.max_delta.tx;
-       }
-
-       pos += iwl_statistics_flag(priv, buf, bufsz);
-       pos += scnprintf(buf + pos, bufsz - pos,  "%-32s     current"
-                        "acumulative       delta         max\n",
-                        "Statistics_Tx:");
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "preamble:",
-                        le32_to_cpu(tx->preamble_cnt),
-                        accum_tx->preamble_cnt,
-                        delta_tx->preamble_cnt, max_tx->preamble_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "rx_detected_cnt:",
-                        le32_to_cpu(tx->rx_detected_cnt),
-                        accum_tx->rx_detected_cnt,
-                        delta_tx->rx_detected_cnt, max_tx->rx_detected_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "bt_prio_defer_cnt:",
-                        le32_to_cpu(tx->bt_prio_defer_cnt),
-                        accum_tx->bt_prio_defer_cnt,
-                        delta_tx->bt_prio_defer_cnt,
-                        max_tx->bt_prio_defer_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "bt_prio_kill_cnt:",
-                        le32_to_cpu(tx->bt_prio_kill_cnt),
-                        accum_tx->bt_prio_kill_cnt,
-                        delta_tx->bt_prio_kill_cnt,
-                        max_tx->bt_prio_kill_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "few_bytes_cnt:",
-                        le32_to_cpu(tx->few_bytes_cnt),
-                        accum_tx->few_bytes_cnt,
-                        delta_tx->few_bytes_cnt, max_tx->few_bytes_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "cts_timeout:",
-                        le32_to_cpu(tx->cts_timeout), accum_tx->cts_timeout,
-                        delta_tx->cts_timeout, max_tx->cts_timeout);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "ack_timeout:",
-                        le32_to_cpu(tx->ack_timeout),
-                        accum_tx->ack_timeout,
-                        delta_tx->ack_timeout, max_tx->ack_timeout);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "expected_ack_cnt:",
-                        le32_to_cpu(tx->expected_ack_cnt),
-                        accum_tx->expected_ack_cnt,
-                        delta_tx->expected_ack_cnt,
-                        max_tx->expected_ack_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "actual_ack_cnt:",
-                        le32_to_cpu(tx->actual_ack_cnt),
-                        accum_tx->actual_ack_cnt,
-                        delta_tx->actual_ack_cnt,
-                        max_tx->actual_ack_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "dump_msdu_cnt:",
-                        le32_to_cpu(tx->dump_msdu_cnt),
-                        accum_tx->dump_msdu_cnt,
-                        delta_tx->dump_msdu_cnt,
-                        max_tx->dump_msdu_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "abort_nxt_frame_mismatch:",
-                        le32_to_cpu(tx->burst_abort_next_frame_mismatch_cnt),
-                        accum_tx->burst_abort_next_frame_mismatch_cnt,
-                        delta_tx->burst_abort_next_frame_mismatch_cnt,
-                        max_tx->burst_abort_next_frame_mismatch_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "abort_missing_nxt_frame:",
-                        le32_to_cpu(tx->burst_abort_missing_next_frame_cnt),
-                        accum_tx->burst_abort_missing_next_frame_cnt,
-                        delta_tx->burst_abort_missing_next_frame_cnt,
-                        max_tx->burst_abort_missing_next_frame_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "cts_timeout_collision:",
-                        le32_to_cpu(tx->cts_timeout_collision),
-                        accum_tx->cts_timeout_collision,
-                        delta_tx->cts_timeout_collision,
-                        max_tx->cts_timeout_collision);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "ack_ba_timeout_collision:",
-                        le32_to_cpu(tx->ack_or_ba_timeout_collision),
-                        accum_tx->ack_or_ba_timeout_collision,
-                        delta_tx->ack_or_ba_timeout_collision,
-                        max_tx->ack_or_ba_timeout_collision);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "agg ba_timeout:",
-                        le32_to_cpu(tx->agg.ba_timeout),
-                        accum_tx->agg.ba_timeout,
-                        delta_tx->agg.ba_timeout,
-                        max_tx->agg.ba_timeout);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "agg ba_resched_frames:",
-                        le32_to_cpu(tx->agg.ba_reschedule_frames),
-                        accum_tx->agg.ba_reschedule_frames,
-                        delta_tx->agg.ba_reschedule_frames,
-                        max_tx->agg.ba_reschedule_frames);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "agg scd_query_agg_frame:",
-                        le32_to_cpu(tx->agg.scd_query_agg_frame_cnt),
-                        accum_tx->agg.scd_query_agg_frame_cnt,
-                        delta_tx->agg.scd_query_agg_frame_cnt,
-                        max_tx->agg.scd_query_agg_frame_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "agg scd_query_no_agg:",
-                        le32_to_cpu(tx->agg.scd_query_no_agg),
-                        accum_tx->agg.scd_query_no_agg,
-                        delta_tx->agg.scd_query_no_agg,
-                        max_tx->agg.scd_query_no_agg);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "agg scd_query_agg:",
-                        le32_to_cpu(tx->agg.scd_query_agg),
-                        accum_tx->agg.scd_query_agg,
-                        delta_tx->agg.scd_query_agg,
-                        max_tx->agg.scd_query_agg);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "agg scd_query_mismatch:",
-                        le32_to_cpu(tx->agg.scd_query_mismatch),
-                        accum_tx->agg.scd_query_mismatch,
-                        delta_tx->agg.scd_query_mismatch,
-                        max_tx->agg.scd_query_mismatch);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "agg frame_not_ready:",
-                        le32_to_cpu(tx->agg.frame_not_ready),
-                        accum_tx->agg.frame_not_ready,
-                        delta_tx->agg.frame_not_ready,
-                        max_tx->agg.frame_not_ready);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "agg underrun:",
-                        le32_to_cpu(tx->agg.underrun),
-                        accum_tx->agg.underrun,
-                        delta_tx->agg.underrun, max_tx->agg.underrun);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "agg bt_prio_kill:",
-                        le32_to_cpu(tx->agg.bt_prio_kill),
-                        accum_tx->agg.bt_prio_kill,
-                        delta_tx->agg.bt_prio_kill,
-                        max_tx->agg.bt_prio_kill);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "agg rx_ba_rsp_cnt:",
-                        le32_to_cpu(tx->agg.rx_ba_rsp_cnt),
-                        accum_tx->agg.rx_ba_rsp_cnt,
-                        delta_tx->agg.rx_ba_rsp_cnt,
-                        max_tx->agg.rx_ba_rsp_cnt);
-
-       if (tx->tx_power.ant_a || tx->tx_power.ant_b || tx->tx_power.ant_c) {
-               pos += scnprintf(buf + pos, bufsz - pos,
-                       "tx power: (1/2 dB step)\n");
-               if ((priv->cfg->valid_tx_ant & ANT_A) && tx->tx_power.ant_a)
-                       pos += scnprintf(buf + pos, bufsz - pos,
-                                       "\tantenna A: 0x%X\n",
-                                       tx->tx_power.ant_a);
-               if ((priv->cfg->valid_tx_ant & ANT_B) && tx->tx_power.ant_b)
-                       pos += scnprintf(buf + pos, bufsz - pos,
-                                       "\tantenna B: 0x%X\n",
-                                       tx->tx_power.ant_b);
-               if ((priv->cfg->valid_tx_ant & ANT_C) && tx->tx_power.ant_c)
-                       pos += scnprintf(buf + pos, bufsz - pos,
-                                       "\tantenna C: 0x%X\n",
-                                       tx->tx_power.ant_c);
-       }
-       ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
-       kfree(buf);
-       return ret;
-}
-
-ssize_t iwl_ucode_general_stats_read(struct file *file, char __user *user_buf,
-                                    size_t count, loff_t *ppos)
-{
-       struct iwl_priv *priv = file->private_data;
-       int pos = 0;
-       char *buf;
-       int bufsz = sizeof(struct statistics_general) * 10 + 300;
-       ssize_t ret;
-       struct statistics_general_common *general, *accum_general;
-       struct statistics_general_common *delta_general, *max_general;
-       struct statistics_dbg *dbg, *accum_dbg, *delta_dbg, *max_dbg;
-       struct statistics_div *div, *accum_div, *delta_div, *max_div;
-
-       if (!iwl_is_alive(priv))
-               return -EAGAIN;
-
-       buf = kzalloc(bufsz, GFP_KERNEL);
-       if (!buf) {
-               IWL_ERR(priv, "Can not allocate Buffer\n");
-               return -ENOMEM;
-       }
-
-       /* the statistic information display here is based on
-         * the last statistics notification from uCode
-         * might not reflect the current uCode activity
-         */
-       if (priv->cfg->bt_statistics) {
-               general = &priv->_agn.statistics_bt.general.common;
-               dbg = &priv->_agn.statistics_bt.general.common.dbg;
-               div = &priv->_agn.statistics_bt.general.common.div;
-               accum_general = &priv->_agn.accum_statistics_bt.general.common;
-               accum_dbg = &priv->_agn.accum_statistics_bt.general.common.dbg;
-               accum_div = &priv->_agn.accum_statistics_bt.general.common.div;
-               delta_general = &priv->_agn.delta_statistics_bt.general.common;
-               max_general = &priv->_agn.max_delta_bt.general.common;
-               delta_dbg = &priv->_agn.delta_statistics_bt.general.common.dbg;
-               max_dbg = &priv->_agn.max_delta_bt.general.common.dbg;
-               delta_div = &priv->_agn.delta_statistics_bt.general.common.div;
-               max_div = &priv->_agn.max_delta_bt.general.common.div;
-       } else {
-               general = &priv->_agn.statistics.general.common;
-               dbg = &priv->_agn.statistics.general.common.dbg;
-               div = &priv->_agn.statistics.general.common.div;
-               accum_general = &priv->_agn.accum_statistics.general.common;
-               accum_dbg = &priv->_agn.accum_statistics.general.common.dbg;
-               accum_div = &priv->_agn.accum_statistics.general.common.div;
-               delta_general = &priv->_agn.delta_statistics.general.common;
-               max_general = &priv->_agn.max_delta.general.common;
-               delta_dbg = &priv->_agn.delta_statistics.general.common.dbg;
-               max_dbg = &priv->_agn.max_delta.general.common.dbg;
-               delta_div = &priv->_agn.delta_statistics.general.common.div;
-               max_div = &priv->_agn.max_delta.general.common.div;
-       }
-
-       pos += iwl_statistics_flag(priv, buf, bufsz);
-       pos += scnprintf(buf + pos, bufsz - pos, "%-32s     current"
-                        "acumulative       delta         max\n",
-                        "Statistics_General:");
-       pos += scnprintf(buf + pos, bufsz - pos, "  %-30s %10u\n",
-                        "temperature:",
-                        le32_to_cpu(general->temperature));
-       pos += scnprintf(buf + pos, bufsz - pos, "  %-30s %10u\n",
-                        "temperature_m:",
-                        le32_to_cpu(general->temperature_m));
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "burst_check:",
-                        le32_to_cpu(dbg->burst_check),
-                        accum_dbg->burst_check,
-                        delta_dbg->burst_check, max_dbg->burst_check);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "burst_count:",
-                        le32_to_cpu(dbg->burst_count),
-                        accum_dbg->burst_count,
-                        delta_dbg->burst_count, max_dbg->burst_count);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "wait_for_silence_timeout_count:",
-                        le32_to_cpu(dbg->wait_for_silence_timeout_cnt),
-                        accum_dbg->wait_for_silence_timeout_cnt,
-                        delta_dbg->wait_for_silence_timeout_cnt,
-                        max_dbg->wait_for_silence_timeout_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "sleep_time:",
-                        le32_to_cpu(general->sleep_time),
-                        accum_general->sleep_time,
-                        delta_general->sleep_time, max_general->sleep_time);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "slots_out:",
-                        le32_to_cpu(general->slots_out),
-                        accum_general->slots_out,
-                        delta_general->slots_out, max_general->slots_out);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "slots_idle:",
-                        le32_to_cpu(general->slots_idle),
-                        accum_general->slots_idle,
-                        delta_general->slots_idle, max_general->slots_idle);
-       pos += scnprintf(buf + pos, bufsz - pos, "ttl_timestamp:\t\t\t%u\n",
-                        le32_to_cpu(general->ttl_timestamp));
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "tx_on_a:",
-                        le32_to_cpu(div->tx_on_a), accum_div->tx_on_a,
-                        delta_div->tx_on_a, max_div->tx_on_a);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "tx_on_b:",
-                        le32_to_cpu(div->tx_on_b), accum_div->tx_on_b,
-                        delta_div->tx_on_b, max_div->tx_on_b);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "exec_time:",
-                        le32_to_cpu(div->exec_time), accum_div->exec_time,
-                        delta_div->exec_time, max_div->exec_time);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "probe_time:",
-                        le32_to_cpu(div->probe_time), accum_div->probe_time,
-                        delta_div->probe_time, max_div->probe_time);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "rx_enable_counter:",
-                        le32_to_cpu(general->rx_enable_counter),
-                        accum_general->rx_enable_counter,
-                        delta_general->rx_enable_counter,
-                        max_general->rx_enable_counter);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "  %-30s %10u  %10u  %10u  %10u\n",
-                        "num_of_sos_states:",
-                        le32_to_cpu(general->num_of_sos_states),
-                        accum_general->num_of_sos_states,
-                        delta_general->num_of_sos_states,
-                        max_general->num_of_sos_states);
-       ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
-       kfree(buf);
-       return ret;
-}
-
-ssize_t iwl_ucode_bt_stats_read(struct file *file,
-                               char __user *user_buf,
-                               size_t count, loff_t *ppos)
-{
-       struct iwl_priv *priv = (struct iwl_priv *)file->private_data;
-       int pos = 0;
-       char *buf;
-       int bufsz = (sizeof(struct statistics_bt_activity) * 24) + 200;
-       ssize_t ret;
-       struct statistics_bt_activity *bt, *accum_bt;
-
-       if (!iwl_is_alive(priv))
-               return -EAGAIN;
-
-       /* make request to uCode to retrieve statistics information */
-       mutex_lock(&priv->mutex);
-       ret = iwl_send_statistics_request(priv, CMD_SYNC, false);
-       mutex_unlock(&priv->mutex);
-
-       if (ret) {
-               IWL_ERR(priv,
-                       "Error sending statistics request: %zd\n", ret);
-               return -EAGAIN;
-       }
-       buf = kzalloc(bufsz, GFP_KERNEL);
-       if (!buf) {
-               IWL_ERR(priv, "Can not allocate Buffer\n");
-               return -ENOMEM;
-       }
-
-       /*
-        * the statistic information display here is based on
-        * the last statistics notification from uCode
-        * might not reflect the current uCode activity
-        */
-       bt = &priv->_agn.statistics_bt.general.activity;
-       accum_bt = &priv->_agn.accum_statistics_bt.general.activity;
-
-       pos += iwl_statistics_flag(priv, buf, bufsz);
-       pos += scnprintf(buf + pos, bufsz - pos, "Statistics_BT:\n");
-       pos += scnprintf(buf + pos, bufsz - pos,
-                       "\t\t\tcurrent\t\t\taccumulative\n");
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "hi_priority_tx_req_cnt:\t\t%u\t\t\t%u\n",
-                        le32_to_cpu(bt->hi_priority_tx_req_cnt),
-                        accum_bt->hi_priority_tx_req_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "hi_priority_tx_denied_cnt:\t%u\t\t\t%u\n",
-                        le32_to_cpu(bt->hi_priority_tx_denied_cnt),
-                        accum_bt->hi_priority_tx_denied_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "lo_priority_tx_req_cnt:\t\t%u\t\t\t%u\n",
-                        le32_to_cpu(bt->lo_priority_tx_req_cnt),
-                        accum_bt->lo_priority_tx_req_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "lo_priority_tx_denied_cnt:\t%u\t\t\t%u\n",
-                        le32_to_cpu(bt->lo_priority_tx_denied_cnt),
-                        accum_bt->lo_priority_tx_denied_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "hi_priority_rx_req_cnt:\t\t%u\t\t\t%u\n",
-                        le32_to_cpu(bt->hi_priority_rx_req_cnt),
-                        accum_bt->hi_priority_rx_req_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "hi_priority_rx_denied_cnt:\t%u\t\t\t%u\n",
-                        le32_to_cpu(bt->hi_priority_rx_denied_cnt),
-                        accum_bt->hi_priority_rx_denied_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "lo_priority_rx_req_cnt:\t\t%u\t\t\t%u\n",
-                        le32_to_cpu(bt->lo_priority_rx_req_cnt),
-                        accum_bt->lo_priority_rx_req_cnt);
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "lo_priority_rx_denied_cnt:\t%u\t\t\t%u\n",
-                        le32_to_cpu(bt->lo_priority_rx_denied_cnt),
-                        accum_bt->lo_priority_rx_denied_cnt);
-
-       pos += scnprintf(buf + pos, bufsz - pos,
-                        "(rx)num_bt_kills:\t\t%u\t\t\t%u\n",
-                        le32_to_cpu(priv->_agn.statistics_bt.rx.
-                               general.num_bt_kills),
-                        priv->_agn.accum_statistics_bt.rx.
-                               general.num_bt_kills);
-
-       ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
-       kfree(buf);
-       return ret;
-}
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-debugfs.h b/drivers/net/wireless/iwlwifi/iwl-agn-debugfs.h
deleted file mode 100644 (file)
index bbdce59..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/******************************************************************************
- *
- * GPL LICENSE SUMMARY
- *
- * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
- * USA
- *
- * The full GNU General Public License is included in this distribution
- * in the file called LICENSE.GPL.
- *
- * Contact Information:
- *  Intel Linux Wireless <ilw@linux.intel.com>
- * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
- *****************************************************************************/
-
-#include "iwl-dev.h"
-#include "iwl-core.h"
-#include "iwl-debug.h"
-
-#ifdef CONFIG_IWLWIFI_DEBUGFS
-ssize_t iwl_ucode_rx_stats_read(struct file *file, char __user *user_buf,
-                               size_t count, loff_t *ppos);
-ssize_t iwl_ucode_tx_stats_read(struct file *file, char __user *user_buf,
-                               size_t count, loff_t *ppos);
-ssize_t iwl_ucode_general_stats_read(struct file *file, char __user *user_buf,
-                                    size_t count, loff_t *ppos);
-ssize_t iwl_ucode_bt_stats_read(struct file *file, char __user *user_buf,
-                               size_t count, loff_t *ppos);
-#else
-static ssize_t iwl_ucode_rx_stats_read(struct file *file, char __user *user_buf,
-                                      size_t count, loff_t *ppos)
-{
-       return 0;
-}
-static ssize_t iwl_ucode_tx_stats_read(struct file *file, char __user *user_buf,
-                                      size_t count, loff_t *ppos)
-{
-       return 0;
-}
-static ssize_t iwl_ucode_general_stats_read(struct file *file, char __user *user_buf,
-                                           size_t count, loff_t *ppos)
-{
-       return 0;
-}
-static ssize_t iwl_ucode_bt_stats_read(struct file *file, char __user *user_buf,
-                                      size_t count, loff_t *ppos)
-{
-       return 0;
-}
-#endif
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-hcmd.c b/drivers/net/wireless/iwlwifi/iwl-agn-hcmd.c
deleted file mode 100644 (file)
index 75b901b..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-/******************************************************************************
- *
- * GPL LICENSE SUMMARY
- *
- * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
- * USA
- *
- * The full GNU General Public License is included in this distribution
- * in the file called LICENSE.GPL.
- *
- * Contact Information:
- *  Intel Linux Wireless <ilw@linux.intel.com>
- * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
- *
- *****************************************************************************/
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/sched.h>
-
-#include "iwl-dev.h"
-#include "iwl-core.h"
-#include "iwl-io.h"
-#include "iwl-agn.h"
-
-int iwlagn_send_rxon_assoc(struct iwl_priv *priv)
-{
-       int ret = 0;
-       struct iwl5000_rxon_assoc_cmd rxon_assoc;
-       const struct iwl_rxon_cmd *rxon1 = &priv->staging_rxon;
-       const struct iwl_rxon_cmd *rxon2 = &priv->active_rxon;
-
-       if ((rxon1->flags == rxon2->flags) &&
-           (rxon1->filter_flags == rxon2->filter_flags) &&
-           (rxon1->cck_basic_rates == rxon2->cck_basic_rates) &&
-           (rxon1->ofdm_ht_single_stream_basic_rates ==
-            rxon2->ofdm_ht_single_stream_basic_rates) &&
-           (rxon1->ofdm_ht_dual_stream_basic_rates ==
-            rxon2->ofdm_ht_dual_stream_basic_rates) &&
-           (rxon1->ofdm_ht_triple_stream_basic_rates ==
-            rxon2->ofdm_ht_triple_stream_basic_rates) &&
-           (rxon1->acquisition_data == rxon2->acquisition_data) &&
-           (rxon1->rx_chain == rxon2->rx_chain) &&
-           (rxon1->ofdm_basic_rates == rxon2->ofdm_basic_rates)) {
-               IWL_DEBUG_INFO(priv, "Using current RXON_ASSOC.  Not resending.\n");
-               return 0;
-       }
-
-       rxon_assoc.flags = priv->staging_rxon.flags;
-       rxon_assoc.filter_flags = priv->staging_rxon.filter_flags;
-       rxon_assoc.ofdm_basic_rates = priv->staging_rxon.ofdm_basic_rates;
-       rxon_assoc.cck_basic_rates = priv->staging_rxon.cck_basic_rates;
-       rxon_assoc.reserved1 = 0;
-       rxon_assoc.reserved2 = 0;
-       rxon_assoc.reserved3 = 0;
-       rxon_assoc.ofdm_ht_single_stream_basic_rates =
-           priv->staging_rxon.ofdm_ht_single_stream_basic_rates;
-       rxon_assoc.ofdm_ht_dual_stream_basic_rates =
-           priv->staging_rxon.ofdm_ht_dual_stream_basic_rates;
-       rxon_assoc.rx_chain_select_flags = priv->staging_rxon.rx_chain;
-       rxon_assoc.ofdm_ht_triple_stream_basic_rates =
-                priv->staging_rxon.ofdm_ht_triple_stream_basic_rates;
-       rxon_assoc.acquisition_data = priv->staging_rxon.acquisition_data;
-
-       ret = iwl_send_cmd_pdu_async(priv, REPLY_RXON_ASSOC,
-                                    sizeof(rxon_assoc), &rxon_assoc, NULL);
-       if (ret)
-               return ret;
-
-       return ret;
-}
-
-int iwlagn_send_tx_ant_config(struct iwl_priv *priv, u8 valid_tx_ant)
-{
-       struct iwl_tx_ant_config_cmd tx_ant_cmd = {
-         .valid = cpu_to_le32(valid_tx_ant),
-       };
-
-       if (IWL_UCODE_API(priv->ucode_ver) > 1) {
-               IWL_DEBUG_HC(priv, "select valid tx ant: %u\n", valid_tx_ant);
-               return iwl_send_cmd_pdu(priv, TX_ANT_CONFIGURATION_CMD,
-                                       sizeof(struct iwl_tx_ant_config_cmd),
-                                       &tx_ant_cmd);
-       } else {
-               IWL_DEBUG_HC(priv, "TX_ANT_CONFIGURATION_CMD not supported\n");
-               return -EOPNOTSUPP;
-       }
-}
-
-/* Currently this is the superset of everything */
-static u16 iwlagn_get_hcmd_size(u8 cmd_id, u16 len)
-{
-       return len;
-}
-
-static u16 iwlagn_build_addsta_hcmd(const struct iwl_addsta_cmd *cmd, u8 *data)
-{
-       u16 size = (u16)sizeof(struct iwl_addsta_cmd);
-       struct iwl_addsta_cmd *addsta = (struct iwl_addsta_cmd *)data;
-       memcpy(addsta, cmd, size);
-       /* resrved in 5000 */
-       addsta->rate_n_flags = cpu_to_le16(0);
-       return size;
-}
-
-static void iwlagn_gain_computation(struct iwl_priv *priv,
-               u32 average_noise[NUM_RX_CHAINS],
-               u16 min_average_noise_antenna_i,
-               u32 min_average_noise,
-               u8 default_chain)
-{
-       int i;
-       s32 delta_g;
-       struct iwl_chain_noise_data *data = &priv->chain_noise_data;
-
-       /*
-        * Find Gain Code for the chains based on "default chain"
-        */
-       for (i = default_chain + 1; i < NUM_RX_CHAINS; i++) {
-               if ((data->disconn_array[i])) {
-                       data->delta_gain_code[i] = 0;
-                       continue;
-               }
-
-               delta_g = (priv->cfg->chain_noise_scale *
-                       ((s32)average_noise[default_chain] -
-                       (s32)average_noise[i])) / 1500;
-
-               /* bound gain by 2 bits value max, 3rd bit is sign */
-               data->delta_gain_code[i] =
-                       min(abs(delta_g), (long) CHAIN_NOISE_MAX_DELTA_GAIN_CODE);
-
-               if (delta_g < 0)
-                       /*
-                        * set negative sign ...
-                        * note to Intel developers:  This is uCode API format,
-                        *   not the format of any internal device registers.
-                        *   Do not change this format for e.g. 6050 or similar
-                        *   devices.  Change format only if more resolution
-                        *   (i.e. more than 2 bits magnitude) is needed.
-                        */
-                       data->delta_gain_code[i] |= (1 << 2);
-       }
-
-       IWL_DEBUG_CALIB(priv, "Delta gains: ANT_B = %d  ANT_C = %d\n",
-                       data->delta_gain_code[1], data->delta_gain_code[2]);
-
-       if (!data->radio_write) {
-               struct iwl_calib_chain_noise_gain_cmd cmd;
-
-               memset(&cmd, 0, sizeof(cmd));
-
-               cmd.hdr.op_code = priv->_agn.phy_calib_chain_noise_gain_cmd;
-               cmd.hdr.first_group = 0;
-               cmd.hdr.groups_num = 1;
-               cmd.hdr.data_valid = 1;
-               cmd.delta_gain_1 = data->delta_gain_code[1];
-               cmd.delta_gain_2 = data->delta_gain_code[2];
-               iwl_send_cmd_pdu_async(priv, REPLY_PHY_CALIBRATION_CMD,
-                       sizeof(cmd), &cmd, NULL);
-
-               data->radio_write = 1;
-               data->state = IWL_CHAIN_NOISE_CALIBRATED;
-       }
-}
-
-static void iwlagn_chain_noise_reset(struct iwl_priv *priv)
-{
-       struct iwl_chain_noise_data *data = &priv->chain_noise_data;
-       int ret;
-
-       if ((data->state == IWL_CHAIN_NOISE_ALIVE) &&
-            iwl_is_associated(priv)) {
-               struct iwl_calib_chain_noise_reset_cmd cmd;
-
-               /* clear data for chain noise calibration algorithm */
-               data->chain_noise_a = 0;
-               data->chain_noise_b = 0;
-               data->chain_noise_c = 0;
-               data->chain_signal_a = 0;
-               data->chain_signal_b = 0;
-               data->chain_signal_c = 0;
-               data->beacon_count = 0;
-
-               memset(&cmd, 0, sizeof(cmd));
-               cmd.hdr.op_code = priv->_agn.phy_calib_chain_noise_reset_cmd;
-               cmd.hdr.first_group = 0;
-               cmd.hdr.groups_num = 1;
-               cmd.hdr.data_valid = 1;
-               ret = iwl_send_cmd_pdu(priv, REPLY_PHY_CALIBRATION_CMD,
-                                       sizeof(cmd), &cmd);
-               if (ret)
-                       IWL_ERR(priv,
-                               "Could not send REPLY_PHY_CALIBRATION_CMD\n");
-               data->state = IWL_CHAIN_NOISE_ACCUMULATE;
-               IWL_DEBUG_CALIB(priv, "Run chain_noise_calibrate\n");
-       }
-}
-
-static void iwlagn_tx_cmd_protection(struct iwl_priv *priv,
-                                    struct ieee80211_tx_info *info,
-                                    __le16 fc, __le32 *tx_flags)
-{
-       if (info->control.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS ||
-           info->control.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT) {
-               *tx_flags |= TX_CMD_FLG_PROT_REQUIRE_MSK;
-               return;
-       }
-
-       if (priv->cfg->use_rts_for_aggregation &&
-           info->flags & IEEE80211_TX_CTL_AMPDU) {
-               *tx_flags |= TX_CMD_FLG_PROT_REQUIRE_MSK;
-               return;
-       }
-}
-
-/* Calc max signal level (dBm) among 3 possible receivers */
-static int iwlagn_calc_rssi(struct iwl_priv *priv,
-                            struct iwl_rx_phy_res *rx_resp)
-{
-       /* data from PHY/DSP regarding signal strength, etc.,
-        *   contents are always there, not configurable by host
-        */
-       struct iwl5000_non_cfg_phy *ncphy =
-               (struct iwl5000_non_cfg_phy *)rx_resp->non_cfg_phy_buf;
-       u32 val, rssi_a, rssi_b, rssi_c, max_rssi;
-       u8 agc;
-
-       val  = le32_to_cpu(ncphy->non_cfg_phy[IWL50_RX_RES_AGC_IDX]);
-       agc = (val & IWL50_OFDM_AGC_MSK) >> IWL50_OFDM_AGC_BIT_POS;
-
-       /* Find max rssi among 3 possible receivers.
-        * These values are measured by the digital signal processor (DSP).
-        * They should stay fairly constant even as the signal strength varies,
-        *   if the radio's automatic gain control (AGC) is working right.
-        * AGC value (see below) will provide the "interesting" info.
-        */
-       val = le32_to_cpu(ncphy->non_cfg_phy[IWL50_RX_RES_RSSI_AB_IDX]);
-       rssi_a = (val & IWL50_OFDM_RSSI_A_MSK) >> IWL50_OFDM_RSSI_A_BIT_POS;
-       rssi_b = (val & IWL50_OFDM_RSSI_B_MSK) >> IWL50_OFDM_RSSI_B_BIT_POS;
-       val = le32_to_cpu(ncphy->non_cfg_phy[IWL50_RX_RES_RSSI_C_IDX]);
-       rssi_c = (val & IWL50_OFDM_RSSI_C_MSK) >> IWL50_OFDM_RSSI_C_BIT_POS;
-
-       max_rssi = max_t(u32, rssi_a, rssi_b);
-       max_rssi = max_t(u32, max_rssi, rssi_c);
-
-       IWL_DEBUG_STATS(priv, "Rssi In A %d B %d C %d Max %d AGC dB %d\n",
-               rssi_a, rssi_b, rssi_c, max_rssi, agc);
-
-       /* dBm = max_rssi dB - agc dB - constant.
-        * Higher AGC (higher radio gain) means lower signal. */
-       return max_rssi - agc - IWLAGN_RSSI_OFFSET;
-}
-
-struct iwl_hcmd_ops iwlagn_hcmd = {
-       .rxon_assoc = iwlagn_send_rxon_assoc,
-       .commit_rxon = iwl_commit_rxon,
-       .set_rxon_chain = iwl_set_rxon_chain,
-       .set_tx_ant = iwlagn_send_tx_ant_config,
-       .send_bt_config = iwl_send_bt_config,
-};
-
-struct iwl_hcmd_utils_ops iwlagn_hcmd_utils = {
-       .get_hcmd_size = iwlagn_get_hcmd_size,
-       .build_addsta_hcmd = iwlagn_build_addsta_hcmd,
-       .gain_computation = iwlagn_gain_computation,
-       .chain_noise_reset = iwlagn_chain_noise_reset,
-       .tx_cmd_protection = iwlagn_tx_cmd_protection,
-       .calc_rssi = iwlagn_calc_rssi,
-       .request_scan = iwlagn_request_scan,
-};
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-hw.h b/drivers/net/wireless/iwlwifi/iwl-agn-hw.h
deleted file mode 100644 (file)
index a52b82c..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/******************************************************************************
- *
- * This file is provided under a dual BSD/GPLv2 license.  When using or
- * redistributing this file, you may do so under either license.
- *
- * GPL LICENSE SUMMARY
- *
- * Copyright(c) 2007 - 2010 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
- * USA
- *
- * The full GNU General Public License is included in this distribution
- * in the file called LICENSE.GPL.
- *
- * Contact Information:
- *  Intel Linux Wireless <ilw@linux.intel.com>
- * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
- *
- * BSD LICENSE
- *
- * Copyright(c) 2005 - 2010 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *  * Neither the name Intel Corporation nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *****************************************************************************/
-/*
- * Please use this file (iwl-agn-hw.h) only for hardware-related definitions.
- */
-
-#ifndef __iwl_agn_hw_h__
-#define __iwl_agn_hw_h__
-
-#define IWLAGN_RTC_INST_LOWER_BOUND            (0x000000)
-#define IWLAGN_RTC_INST_UPPER_BOUND            (0x020000)
-
-#define IWLAGN_RTC_DATA_LOWER_BOUND            (0x800000)
-#define IWLAGN_RTC_DATA_UPPER_BOUND            (0x80C000)
-
-#define IWLAGN_RTC_INST_SIZE (IWLAGN_RTC_INST_UPPER_BOUND - \
-                               IWLAGN_RTC_INST_LOWER_BOUND)
-#define IWLAGN_RTC_DATA_SIZE (IWLAGN_RTC_DATA_UPPER_BOUND - \
-                               IWLAGN_RTC_DATA_LOWER_BOUND)
-
-/* RSSI to dBm */
-#define IWLAGN_RSSI_OFFSET     44
-
-/* PCI registers */
-#define PCI_CFG_RETRY_TIMEOUT  0x041
-
-/* PCI register values */
-#define PCI_CFG_LINK_CTRL_VAL_L0S_EN   0x01
-#define PCI_CFG_LINK_CTRL_VAL_L1_EN    0x02
-
-#define IWLAGN_DEFAULT_TX_RETRY  15
-
-/* Limit range of txpower output target to be between these values */
-#define IWLAGN_TX_POWER_TARGET_POWER_MIN       (0)     /* 0 dBm: 1 milliwatt */
-#define IWLAGN_TX_POWER_TARGET_POWER_MAX       (16)    /* 16 dBm */
-
-/* EEPROM */
-#define IWLAGN_EEPROM_IMG_SIZE         2048
-
-#define IWLAGN_CMD_FIFO_NUM            7
-#define IWLAGN_NUM_QUEUES              20
-#define IWLAGN_NUM_AMPDU_QUEUES                10
-#define IWLAGN_FIRST_AMPDU_QUEUE       10
-
-/* Fixed (non-configurable) rx data from phy */
-
-/**
- * struct iwlagn_schedq_bc_tbl scheduler byte count table
- *     base physical address provided by SCD_DRAM_BASE_ADDR
- * @tfd_offset  0-12 - tx command byte count
- *            12-16 - station index
- */
-struct iwlagn_scd_bc_tbl {
-       __le16 tfd_offset[TFD_QUEUE_BC_SIZE];
-} __packed;
-
-
-#endif /* __iwl_agn_hw_h__ */
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-ict.c b/drivers/net/wireless/iwlwifi/iwl-agn-ict.c
deleted file mode 100644 (file)
index c92b2c0..0000000
+++ /dev/null
@@ -1,308 +0,0 @@
-/******************************************************************************
- *
- * GPL LICENSE SUMMARY
- *
- * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
- * USA
- *
- * The full GNU General Public License is included in this distribution
- * in the file called LICENSE.GPL.
- *
- * Contact Information:
- *  Intel Linux Wireless <ilw@linux.intel.com>
- * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
- *****************************************************************************/
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/etherdevice.h>
-#include <linux/sched.h>
-#include <linux/gfp.h>
-#include <net/mac80211.h>
-
-#include "iwl-dev.h"
-#include "iwl-core.h"
-#include "iwl-agn.h"
-#include "iwl-helpers.h"
-
-#define ICT_COUNT (PAGE_SIZE/sizeof(u32))
-
-/* Free dram table */
-void iwl_free_isr_ict(struct iwl_priv *priv)
-{
-       if (priv->_agn.ict_tbl_vir) {
-               dma_free_coherent(&priv->pci_dev->dev,
-                                 (sizeof(u32) * ICT_COUNT) + PAGE_SIZE,
-                                 priv->_agn.ict_tbl_vir,
-                                 priv->_agn.ict_tbl_dma);
-               priv->_agn.ict_tbl_vir = NULL;
-       }
-}
-
-
-/* allocate dram shared table it is a PAGE_SIZE aligned
- * also reset all data related to ICT table interrupt.
- */
-int iwl_alloc_isr_ict(struct iwl_priv *priv)
-{
-
-       if (priv->cfg->use_isr_legacy)
-               return 0;
-       /* allocate shrared data table */
-       priv->_agn.ict_tbl_vir =
-               dma_alloc_coherent(&priv->pci_dev->dev,
-                                  (sizeof(u32) * ICT_COUNT) + PAGE_SIZE,
-                                  &priv->_agn.ict_tbl_dma, GFP_KERNEL);
-       if (!priv->_agn.ict_tbl_vir)
-               return -ENOMEM;
-
-       /* align table to PAGE_SIZE boundry */
-       priv->_agn.aligned_ict_tbl_dma = ALIGN(priv->_agn.ict_tbl_dma, PAGE_SIZE);
-
-       IWL_DEBUG_ISR(priv, "ict dma addr %Lx dma aligned %Lx diff %d\n",
-                            (unsigned long long)priv->_agn.ict_tbl_dma,
-                            (unsigned long long)priv->_agn.aligned_ict_tbl_dma,
-                       (int)(priv->_agn.aligned_ict_tbl_dma - priv->_agn.ict_tbl_dma));
-
-       priv->_agn.ict_tbl =  priv->_agn.ict_tbl_vir +
-                         (priv->_agn.aligned_ict_tbl_dma - priv->_agn.ict_tbl_dma);
-
-       IWL_DEBUG_ISR(priv, "ict vir addr %p vir aligned %p diff %d\n",
-                            priv->_agn.ict_tbl, priv->_agn.ict_tbl_vir,
-                       (int)(priv->_agn.aligned_ict_tbl_dma - priv->_agn.ict_tbl_dma));
-
-       /* reset table and index to all 0 */
-       memset(priv->_agn.ict_tbl_vir,0, (sizeof(u32) * ICT_COUNT) + PAGE_SIZE);
-       priv->_agn.ict_index = 0;
-
-       /* add periodic RX interrupt */
-       priv->inta_mask |= CSR_INT_BIT_RX_PERIODIC;
-       return 0;
-}
-
-/* Device is going up inform it about using ICT interrupt table,
- * also we need to tell the driver to start using ICT interrupt.
- */
-int iwl_reset_ict(struct iwl_priv *priv)
-{
-       u32 val;
-       unsigned long flags;
-
-       if (!priv->_agn.ict_tbl_vir)
-               return 0;
-
-       spin_lock_irqsave(&priv->lock, flags);
-       iwl_disable_interrupts(priv);
-
-       memset(&priv->_agn.ict_tbl[0], 0, sizeof(u32) * ICT_COUNT);
-
-       val = priv->_agn.aligned_ict_tbl_dma >> PAGE_SHIFT;
-
-       val |= CSR_DRAM_INT_TBL_ENABLE;
-       val |= CSR_DRAM_INIT_TBL_WRAP_CHECK;
-
-       IWL_DEBUG_ISR(priv, "CSR_DRAM_INT_TBL_REG =0x%X "
-                       "aligned dma address %Lx\n",
-                       val, (unsigned long long)priv->_agn.aligned_ict_tbl_dma);
-
-       iwl_write32(priv, CSR_DRAM_INT_TBL_REG, val);
-       priv->_agn.use_ict = true;
-       priv->_agn.ict_index = 0;
-       iwl_write32(priv, CSR_INT, priv->inta_mask);
-       iwl_enable_interrupts(priv);
-       spin_unlock_irqrestore(&priv->lock, flags);
-
-       return 0;
-}
-
-/* Device is going down disable ict interrupt usage */
-void iwl_disable_ict(struct iwl_priv *priv)
-{
-       unsigned long flags;
-
-       spin_lock_irqsave(&priv->lock, flags);
-       priv->_agn.use_ict = false;
-       spin_unlock_irqrestore(&priv->lock, flags);
-}
-
-static irqreturn_t iwl_isr(int irq, void *data)
-{
-       struct iwl_priv *priv = data;
-       u32 inta, inta_mask;
-       unsigned long flags;
-#ifdef CONFIG_IWLWIFI_DEBUG
-       u32 inta_fh;
-#endif
-       if (!priv)
-               return IRQ_NONE;
-
-       spin_lock_irqsave(&priv->lock, flags);
-
-       /* Disable (but don't clear!) interrupts here to avoid
-        *    back-to-back ISRs and sporadic interrupts from our NIC.
-        * If we have something to service, the tasklet will re-enable ints.
-        * If we *don't* have something, we'll re-enable before leaving here. */
-       inta_mask = iwl_read32(priv, CSR_INT_MASK);  /* just for debug */
-       iwl_write32(priv, CSR_INT_MASK, 0x00000000);
-
-       /* Discover which interrupts are active/pending */
-       inta = iwl_read32(priv, CSR_INT);
-
-       /* Ignore interrupt if there's nothing in NIC to service.
-        * This may be due to IRQ shared with another device,
-        * or due to sporadic interrupts thrown from our NIC. */
-       if (!inta) {
-               IWL_DEBUG_ISR(priv, "Ignore interrupt, inta == 0\n");
-               goto none;
-       }
-
-       if ((inta == 0xFFFFFFFF) || ((inta & 0xFFFFFFF0) == 0xa5a5a5a0)) {
-               /* Hardware disappeared. It might have already raised
-                * an interrupt */
-               IWL_WARN(priv, "HARDWARE GONE?? INTA == 0x%08x\n", inta);
-               goto unplugged;
-       }
-
-#ifdef CONFIG_IWLWIFI_DEBUG
-       if (iwl_get_debug_level(priv) & (IWL_DL_ISR)) {
-               inta_fh = iwl_read32(priv, CSR_FH_INT_STATUS);
-               IWL_DEBUG_ISR(priv, "ISR inta 0x%08x, enabled 0x%08x, "
-                             "fh 0x%08x\n", inta, inta_mask, inta_fh);
-       }
-#endif
-
-       priv->_agn.inta |= inta;
-       /* iwl_irq_tasklet() will service interrupts and re-enable them */
-       if (likely(inta))
-               tasklet_schedule(&priv->irq_tasklet);
-       else if (test_bit(STATUS_INT_ENABLED, &priv->status) && !priv->_agn.inta)
-               iwl_enable_interrupts(priv);
-
- unplugged:
-       spin_unlock_irqrestore(&priv->lock, flags);
-       return IRQ_HANDLED;
-
- none:
-       /* re-enable interrupts here since we don't have anything to service. */
-       /* only Re-enable if diabled by irq  and no schedules tasklet. */
-       if (test_bit(STATUS_INT_ENABLED, &priv->status) && !priv->_agn.inta)
-               iwl_enable_interrupts(priv);
-
-       spin_unlock_irqrestore(&priv->lock, flags);
-       return IRQ_NONE;
-}
-
-/* interrupt handler using ict table, with this interrupt driver will
- * stop using INTA register to get device's interrupt, reading this register
- * is expensive, device will write interrupts in ICT dram table, increment
- * index then will fire interrupt to driver, driver will OR all ICT table
- * entries from current index up to table entry with 0 value. the result is
- * the interrupt we need to service, driver will set the entries back to 0 and
- * set index.
- */
-irqreturn_t iwl_isr_ict(int irq, void *data)
-{
-       struct iwl_priv *priv = data;
-       u32 inta, inta_mask;
-       u32 val = 0;
-       unsigned long flags;
-
-       if (!priv)
-               return IRQ_NONE;
-
-       /* dram interrupt table not set yet,
-        * use legacy interrupt.
-        */
-       if (!priv->_agn.use_ict)
-               return iwl_isr(irq, data);
-
-       spin_lock_irqsave(&priv->lock, flags);
-
-       /* Disable (but don't clear!) interrupts here to avoid
-        * back-to-back ISRs and sporadic interrupts from our NIC.
-        * If we have something to service, the tasklet will re-enable ints.
-        * If we *don't* have something, we'll re-enable before leaving here.
-        */
-       inta_mask = iwl_read32(priv, CSR_INT_MASK);  /* just for debug */
-       iwl_write32(priv, CSR_INT_MASK, 0x00000000);
-
-
-       /* Ignore interrupt if there's nothing in NIC to service.
-        * This may be due to IRQ shared with another device,
-        * or due to sporadic interrupts thrown from our NIC. */
-       if (!priv->_agn.ict_tbl[priv->_agn.ict_index]) {
-               IWL_DEBUG_ISR(priv, "Ignore interrupt, inta == 0\n");
-               goto none;
-       }
-
-       /* read all entries that not 0 start with ict_index */
-       while (priv->_agn.ict_tbl[priv->_agn.ict_index]) {
-
-               val |= le32_to_cpu(priv->_agn.ict_tbl[priv->_agn.ict_index]);
-               IWL_DEBUG_ISR(priv, "ICT index %d value 0x%08X\n",
-                               priv->_agn.ict_index,
-                               le32_to_cpu(priv->_agn.ict_tbl[priv->_agn.ict_index]));
-               priv->_agn.ict_tbl[priv->_agn.ict_index] = 0;
-               priv->_agn.ict_index = iwl_queue_inc_wrap(priv->_agn.ict_index,
-                                                    ICT_COUNT);
-
-       }
-
-       /* We should not get this value, just ignore it. */
-       if (val == 0xffffffff)
-               val = 0;
-
-       /*
-        * this is a w/a for a h/w bug. the h/w bug may cause the Rx bit
-        * (bit 15 before shifting it to 31) to clear when using interrupt
-        * coalescing. fortunately, bits 18 and 19 stay set when this happens
-        * so we use them to decide on the real state of the Rx bit.
-        * In order words, bit 15 is set if bit 18 or bit 19 are set.
-        */
-       if (val & 0xC0000)
-               val |= 0x8000;
-
-       inta = (0xff & val) | ((0xff00 & val) << 16);
-       IWL_DEBUG_ISR(priv, "ISR inta 0x%08x, enabled 0x%08x ict 0x%08x\n",
-                       inta, inta_mask, val);
-
-       inta &= priv->inta_mask;
-       priv->_agn.inta |= inta;
-
-       /* iwl_irq_tasklet() will service interrupts and re-enable them */
-       if (likely(inta))
-               tasklet_schedule(&priv->irq_tasklet);
-       else if (test_bit(STATUS_INT_ENABLED, &priv->status) && !priv->_agn.inta) {
-               /* Allow interrupt if was disabled by this handler and
-                * no tasklet was schedules, We should not enable interrupt,
-                * tasklet will enable it.
-                */
-               iwl_enable_interrupts(priv);
-       }
-
-       spin_unlock_irqrestore(&priv->lock, flags);
-       return IRQ_HANDLED;
-
- none:
-       /* re-enable interrupts here since we don't have anything to service.
-        * only Re-enable if disabled by irq.
-        */
-       if (test_bit(STATUS_INT_ENABLED, &priv->status) && !priv->_agn.inta)
-               iwl_enable_interrupts(priv);
-
-       spin_unlock_irqrestore(&priv->lock, flags);
-       return IRQ_NONE;
-}
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-led.c b/drivers/net/wireless/iwlwifi/iwl-agn-led.c
deleted file mode 100644 (file)
index 1a24946..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2003 - 2010 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- * The full GNU General Public License is included in this distribution in the
- * file called LICENSE.
- *
- * Contact Information:
- *  Intel Linux Wireless <ilw@linux.intel.com>
- * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
- *
- *****************************************************************************/
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/pci.h>
-#include <linux/dma-mapping.h>
-#include <linux/delay.h>
-#include <linux/skbuff.h>
-#include <linux/netdevice.h>
-#include <linux/wireless.h>
-#include <net/mac80211.h>
-#include <linux/etherdevice.h>
-#include <asm/unaligned.h>
-
-#include "iwl-commands.h"
-#include "iwl-dev.h"
-#include "iwl-core.h"
-#include "iwl-io.h"
-#include "iwl-agn-led.h"
-
-/* Send led command */
-static int iwl_send_led_cmd(struct iwl_priv *priv, struct iwl_led_cmd *led_cmd)
-{
-       struct iwl_host_cmd cmd = {
-               .id = REPLY_LEDS_CMD,
-               .len = sizeof(struct iwl_led_cmd),
-               .data = led_cmd,
-               .flags = CMD_ASYNC,
-               .callback = NULL,
-       };
-       u32 reg;
-
-       reg = iwl_read32(priv, CSR_LED_REG);
-       if (reg != (reg & CSR_LED_BSM_CTRL_MSK))
-               iwl_write32(priv, CSR_LED_REG, reg & CSR_LED_BSM_CTRL_MSK);
-
-       return iwl_send_cmd(priv, &cmd);
-}
-
-/* Set led register off */
-static int iwl_led_on_reg(struct iwl_priv *priv)
-{
-       IWL_DEBUG_LED(priv, "led on\n");
-       iwl_write32(priv, CSR_LED_REG, CSR_LED_REG_TRUN_ON);
-       return 0;
-}
-
-/* Set led register off */
-static int iwl_led_off_reg(struct iwl_priv *priv)
-{
-       IWL_DEBUG_LED(priv, "LED Reg off\n");
-       iwl_write32(priv, CSR_LED_REG, CSR_LED_REG_TRUN_OFF);
-       return 0;
-}
-
-const struct iwl_led_ops iwlagn_led_ops = {
-       .cmd = iwl_send_led_cmd,
-       .on = iwl_led_on_reg,
-       .off = iwl_led_off_reg,
-};
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-led.h b/drivers/net/wireless/iwlwifi/iwl-agn-led.h
deleted file mode 100644 (file)
index a594e4f..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2003 - 2010 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- * The full GNU General Public License is included in this distribution in the
- * file called LICENSE.
- *
- * Contact Information:
- *  Intel Linux Wireless <ilw@linux.intel.com>
- * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
- *
- *****************************************************************************/
-
-#ifndef __iwl_agn_led_h__
-#define __iwl_agn_led_h__
-
-extern const struct iwl_led_ops iwlagn_led_ops;
-
-#endif /* __iwl_agn_led_h__ */
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
deleted file mode 100644 (file)
index 8fd00a6..0000000
+++ /dev/null
@@ -1,1520 +0,0 @@
-/******************************************************************************
- *
- * GPL LICENSE SUMMARY
- *
- * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
- * USA
- *
- * The full GNU General Public License is included in this distribution
- * in the file called LICENSE.GPL.
- *
- * Contact Information:
- *  Intel Linux Wireless <ilw@linux.intel.com>
- * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
- *
- *****************************************************************************/
-#include <linux/etherdevice.h>
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/sched.h>
-
-#include "iwl-dev.h"
-#include "iwl-core.h"
-#include "iwl-io.h"
-#include "iwl-helpers.h"
-#include "iwl-agn-hw.h"
-#include "iwl-agn.h"
-#include "iwl-sta.h"
-
-static inline u32 iwlagn_get_scd_ssn(struct iwl5000_tx_resp *tx_resp)
-{
-       return le32_to_cpup((__le32 *)&tx_resp->status +
-                           tx_resp->frame_count) & MAX_SN;
-}
-
-static int iwlagn_tx_status_reply_tx(struct iwl_priv *priv,
-                                     struct iwl_ht_agg *agg,
-                                     struct iwl5000_tx_resp *tx_resp,
-                                     int txq_id, u16 start_idx)
-{
-       u16 status;
-       struct agg_tx_status *frame_status = &tx_resp->status;
-       struct ieee80211_tx_info *info = NULL;
-       struct ieee80211_hdr *hdr = NULL;
-       u32 rate_n_flags = le32_to_cpu(tx_resp->rate_n_flags);
-       int i, sh, idx;
-       u16 seq;
-
-       if (agg->wait_for_ba)
-               IWL_DEBUG_TX_REPLY(priv, "got tx response w/o block-ack\n");
-
-       agg->frame_count = tx_resp->frame_count;
-       agg->start_idx = start_idx;
-       agg->rate_n_flags = rate_n_flags;
-       agg->bitmap = 0;
-
-       /* # frames attempted by Tx command */
-       if (agg->frame_count == 1) {
-               /* Only one frame was attempted; no block-ack will arrive */
-               status = le16_to_cpu(frame_status[0].status);
-               idx = start_idx;
-
-               /* FIXME: code repetition */
-               IWL_DEBUG_TX_REPLY(priv, "FrameCnt = %d, StartIdx=%d idx=%d\n",
-                                  agg->frame_count, agg->start_idx, idx);
-
-               info = IEEE80211_SKB_CB(priv->txq[txq_id].txb[idx].skb);
-               info->status.rates[0].count = tx_resp->failure_frame + 1;
-               info->flags &= ~IEEE80211_TX_CTL_AMPDU;
-               info->flags |= iwl_tx_status_to_mac80211(status);
-               iwlagn_hwrate_to_tx_control(priv, rate_n_flags, info);
-
-               /* FIXME: code repetition end */
-
-               IWL_DEBUG_TX_REPLY(priv, "1 Frame 0x%x failure :%d\n",
-                                   status & 0xff, tx_resp->failure_frame);
-               IWL_DEBUG_TX_REPLY(priv, "Rate Info rate_n_flags=%x\n", rate_n_flags);
-
-               agg->wait_for_ba = 0;
-       } else {
-               /* Two or more frames were attempted; expect block-ack */
-               u64 bitmap = 0;
-
-               /*
-                * Start is the lowest frame sent. It may not be the first
-                * frame in the batch; we figure this out dynamically during
-                * the following loop.
-                */
-               int start = agg->start_idx;
-
-               /* Construct bit-map of pending frames within Tx window */
-               for (i = 0; i < agg->frame_count; i++) {
-                       u16 sc;
-                       status = le16_to_cpu(frame_status[i].status);
-                       seq  = le16_to_cpu(frame_status[i].sequence);
-                       idx = SEQ_TO_INDEX(seq);
-                       txq_id = SEQ_TO_QUEUE(seq);
-
-                       if (status & (AGG_TX_STATE_FEW_BYTES_MSK |
-                                     AGG_TX_STATE_ABORT_MSK))
-                               continue;
-
-                       IWL_DEBUG_TX_REPLY(priv, "FrameCnt = %d, txq_id=%d idx=%d\n",
-                                          agg->frame_count, txq_id, idx);
-
-                       hdr = iwl_tx_queue_get_hdr(priv, txq_id, idx);
-                       if (!hdr) {
-                               IWL_ERR(priv,
-                                       "BUG_ON idx doesn't point to valid skb"
-                                       " idx=%d, txq_id=%d\n", idx, txq_id);
-                               return -1;
-                       }
-
-                       sc = le16_to_cpu(hdr->seq_ctrl);
-                       if (idx != (SEQ_TO_SN(sc) & 0xff)) {
-                               IWL_ERR(priv,
-                                       "BUG_ON idx doesn't match seq control"
-                                       " idx=%d, seq_idx=%d, seq=%d\n",
-                                         idx, SEQ_TO_SN(sc),
-                                         hdr->seq_ctrl);
-                               return -1;
-                       }
-
-                       IWL_DEBUG_TX_REPLY(priv, "AGG Frame i=%d idx %d seq=%d\n",
-                                          i, idx, SEQ_TO_SN(sc));
-
-                       /*
-                        * sh -> how many frames ahead of the starting frame is
-                        * the current one?
-                        *
-                        * Note that all frames sent in the batch must be in a
-                        * 64-frame window, so this number should be in [0,63].
-                        * If outside of this window, then we've found a new
-                        * "first" frame in the batch and need to change start.
-                        */
-                       sh = idx - start;
-
-                       /*
-                        * If >= 64, out of window. start must be at the front
-                        * of the circular buffer, idx must be near the end of
-                        * the buffer, and idx is the new "first" frame. Shift
-                        * the indices around.
-                        */
-                       if (sh >= 64) {
-                               /* Shift bitmap by start - idx, wrapped */
-                               sh = 0x100 - idx + start;
-                               bitmap = bitmap << sh;
-                               /* Now idx is the new start so sh = 0 */
-                               sh = 0;
-                               start = idx;
-                       /*
-                        * If <= -64 then wraps the 256-pkt circular buffer
-                        * (e.g., start = 255 and idx = 0, sh should be 1)
-                        */
-                       } else if (sh <= -64) {
-                               sh  = 0x100 - start + idx;
-                       /*
-                        * If < 0 but > -64, out of window. idx is before start
-                        * but not wrapped. Shift the indices around.
-                        */
-                       } else if (sh < 0) {
-                               /* Shift by how far start is ahead of idx */
-                               sh = start - idx;
-                               bitmap = bitmap << sh;
-                               /* Now idx is the new start so sh = 0 */
-                               start = idx;
-                               sh = 0;
-                       }
-                       /* Sequence number start + sh was sent in this batch */
-                       bitmap |= 1ULL << sh;
-                       IWL_DEBUG_TX_REPLY(priv, "start=%d bitmap=0x%llx\n",
-                                          start, (unsigned long long)bitmap);
-               }
-
-               /*
-                * Store the bitmap and possibly the new start, if we wrapped
-                * the buffer above
-                */
-               agg->bitmap = bitmap;
-               agg->start_idx = start;
-               IWL_DEBUG_TX_REPLY(priv, "Frames %d start_idx=%d bitmap=0x%llx\n",
-                                  agg->frame_count, agg->start_idx,
-                                  (unsigned long long)agg->bitmap);
-
-               if (bitmap)
-                       agg->wait_for_ba = 1;
-       }
-       return 0;
-}
-
-void iwl_check_abort_status(struct iwl_priv *priv,
-                           u8 frame_count, u32 status)
-{
-       if (frame_count == 1 && status == TX_STATUS_FAIL_RFKILL_FLUSH) {
-               IWL_ERR(priv, "Tx flush command to flush out all frames\n");
-               if (!test_bit(STATUS_EXIT_PENDING, &priv->status))
-                       queue_work(priv->workqueue, &priv->tx_flush);
-       }
-}
-
-static void iwlagn_rx_reply_tx(struct iwl_priv *priv,
-                               struct iwl_rx_mem_buffer *rxb)
-{
-       struct iwl_rx_packet *pkt = rxb_addr(rxb);
-       u16 sequence = le16_to_cpu(pkt->hdr.sequence);
-       int txq_id = SEQ_TO_QUEUE(sequence);
-       int index = SEQ_TO_INDEX(sequence);
-       struct iwl_tx_queue *txq = &priv->txq[txq_id];
-       struct ieee80211_tx_info *info;
-       struct iwl5000_tx_resp *tx_resp = (void *)&pkt->u.raw[0];
-       u32  status = le16_to_cpu(tx_resp->status.status);
-       int tid;
-       int sta_id;
-       int freed;
-       unsigned long flags;
-
-       if ((index >= txq->q.n_bd) || (iwl_queue_used(&txq->q, index) == 0)) {
-               IWL_ERR(priv, "Read index for DMA queue txq_id (%d) index %d "
-                         "is out of range [0-%d] %d %d\n", txq_id,
-                         index, txq->q.n_bd, txq->q.write_ptr,
-                         txq->q.read_ptr);
-               return;
-       }
-
-       info = IEEE80211_SKB_CB(txq->txb[txq->q.read_ptr].skb);
-       memset(&info->status, 0, sizeof(info->status));
-
-       tid = (tx_resp->ra_tid & IWL50_TX_RES_TID_MSK) >> IWL50_TX_RES_TID_POS;
-       sta_id = (tx_resp->ra_tid & IWL50_TX_RES_RA_MSK) >> IWL50_TX_RES_RA_POS;
-
-       spin_lock_irqsave(&priv->sta_lock, flags);
-       if (txq->sched_retry) {
-               const u32 scd_ssn = iwlagn_get_scd_ssn(tx_resp);
-               struct iwl_ht_agg *agg;
-
-               agg = &priv->stations[sta_id].tid[tid].agg;
-
-               iwlagn_tx_status_reply_tx(priv, agg, tx_resp, txq_id, index);
-
-               /* check if BAR is needed */
-               if ((tx_resp->frame_count == 1) && !iwl_is_tx_success(status))
-                       info->flags |= IEEE80211_TX_STAT_AMPDU_NO_BACK;
-
-               if (txq->q.read_ptr != (scd_ssn & 0xff)) {
-                       index = iwl_queue_dec_wrap(scd_ssn & 0xff, txq->q.n_bd);
-                       IWL_DEBUG_TX_REPLY(priv, "Retry scheduler reclaim "
-                                       "scd_ssn=%d idx=%d txq=%d swq=%d\n",
-                                       scd_ssn , index, txq_id, txq->swq_id);
-
-                       freed = iwlagn_tx_queue_reclaim(priv, txq_id, index);
-                       iwl_free_tfds_in_queue(priv, sta_id, tid, freed);
-
-                       if (priv->mac80211_registered &&
-                           (iwl_queue_space(&txq->q) > txq->q.low_mark) &&
-                           (agg->state != IWL_EMPTYING_HW_QUEUE_DELBA)) {
-                               if (agg->state == IWL_AGG_OFF)
-                                       iwl_wake_queue(priv, txq_id);
-                               else
-                                       iwl_wake_queue(priv, txq->swq_id);
-                       }
-               }
-       } else {
-               BUG_ON(txq_id != txq->swq_id);
-
-               info->status.rates[0].count = tx_resp->failure_frame + 1;
-               info->flags |= iwl_tx_status_to_mac80211(status);
-               iwlagn_hwrate_to_tx_control(priv,
-                                       le32_to_cpu(tx_resp->rate_n_flags),
-                                       info);
-
-               IWL_DEBUG_TX_REPLY(priv, "TXQ %d status %s (0x%08x) rate_n_flags "
-                                  "0x%x retries %d\n",
-                                  txq_id,
-                                  iwl_get_tx_fail_reason(status), status,
-                                  le32_to_cpu(tx_resp->rate_n_flags),
-                                  tx_resp->failure_frame);
-
-               freed = iwlagn_tx_queue_reclaim(priv, txq_id, index);
-               iwl_free_tfds_in_queue(priv, sta_id, tid, freed);
-
-               if (priv->mac80211_registered &&
-                   (iwl_queue_space(&txq->q) > txq->q.low_mark))
-                       iwl_wake_queue(priv, txq_id);
-       }
-
-       iwlagn_txq_check_empty(priv, sta_id, tid, txq_id);
-
-       iwl_check_abort_status(priv, tx_resp->frame_count, status);
-       spin_unlock_irqrestore(&priv->sta_lock, flags);
-}
-
-void iwlagn_rx_handler_setup(struct iwl_priv *priv)
-{
-       /* init calibration handlers */
-       priv->rx_handlers[CALIBRATION_RES_NOTIFICATION] =
-                                       iwlagn_rx_calib_result;
-       priv->rx_handlers[CALIBRATION_COMPLETE_NOTIFICATION] =
-                                       iwlagn_rx_calib_complete;
-       priv->rx_handlers[REPLY_TX] = iwlagn_rx_reply_tx;
-}
-
-void iwlagn_setup_deferred_work(struct iwl_priv *priv)
-{
-       /* in agn, the tx power calibration is done in uCode */
-       priv->disable_tx_power_cal = 1;
-}
-
-int iwlagn_hw_valid_rtc_data_addr(u32 addr)
-{
-       return (addr >= IWLAGN_RTC_DATA_LOWER_BOUND) &&
-               (addr < IWLAGN_RTC_DATA_UPPER_BOUND);
-}
-
-int iwlagn_send_tx_power(struct iwl_priv *priv)
-{
-       struct iwl5000_tx_power_dbm_cmd tx_power_cmd;
-       u8 tx_ant_cfg_cmd;
-
-       /* half dBm need to multiply */
-       tx_power_cmd.global_lmt = (s8)(2 * priv->tx_power_user_lmt);
-
-       if (priv->tx_power_lmt_in_half_dbm &&
-           priv->tx_power_lmt_in_half_dbm < tx_power_cmd.global_lmt) {
-               /*
-                * For the newer devices which using enhanced/extend tx power
-                * table in EEPROM, the format is in half dBm. driver need to
-                * convert to dBm format before report to mac80211.
-                * By doing so, there is a possibility of 1/2 dBm resolution
-                * lost. driver will perform "round-up" operation before
-                * reporting, but it will cause 1/2 dBm tx power over the
-                * regulatory limit. Perform the checking here, if the
-                * "tx_power_user_lmt" is higher than EEPROM value (in
-                * half-dBm format), lower the tx power based on EEPROM
-                */
-               tx_power_cmd.global_lmt = priv->tx_power_lmt_in_half_dbm;
-       }
-       tx_power_cmd.flags = IWL50_TX_POWER_NO_CLOSED;
-       tx_power_cmd.srv_chan_lmt = IWL50_TX_POWER_AUTO;
-
-       if (IWL_UCODE_API(priv->ucode_ver) == 1)
-               tx_ant_cfg_cmd = REPLY_TX_POWER_DBM_CMD_V1;
-       else
-               tx_ant_cfg_cmd = REPLY_TX_POWER_DBM_CMD;
-
-       return  iwl_send_cmd_pdu_async(priv, tx_ant_cfg_cmd,
-                                      sizeof(tx_power_cmd), &tx_power_cmd,
-                                      NULL);
-}
-
-void iwlagn_temperature(struct iwl_priv *priv)
-{
-       /* store temperature from statistics (in Celsius) */
-       priv->temperature =
-               le32_to_cpu(priv->_agn.statistics.general.common.temperature);
-       iwl_tt_handler(priv);
-}
-
-u16 iwlagn_eeprom_calib_version(struct iwl_priv *priv)
-{
-       struct iwl_eeprom_calib_hdr {
-               u8 version;
-               u8 pa_type;
-               u16 voltage;
-       } *hdr;
-
-       hdr = (struct iwl_eeprom_calib_hdr *)iwl_eeprom_query_addr(priv,
-                                                       EEPROM_CALIB_ALL);
-       return hdr->version;
-
-}
-
-/*
- * EEPROM
- */
-static u32 eeprom_indirect_address(const struct iwl_priv *priv, u32 address)
-{
-       u16 offset = 0;
-
-       if ((address & INDIRECT_ADDRESS) == 0)
-               return address;
-
-       switch (address & INDIRECT_TYPE_MSK) {
-       case INDIRECT_HOST:
-               offset = iwl_eeprom_query16(priv, EEPROM_LINK_HOST);
-               break;
-       case INDIRECT_GENERAL:
-               offset = iwl_eeprom_query16(priv, EEPROM_LINK_GENERAL);
-               break;
-       case INDIRECT_REGULATORY:
-               offset = iwl_eeprom_query16(priv, EEPROM_LINK_REGULATORY);
-               break;
-       case INDIRECT_CALIBRATION:
-               offset = iwl_eeprom_query16(priv, EEPROM_LINK_CALIBRATION);
-               break;
-       case INDIRECT_PROCESS_ADJST:
-               offset = iwl_eeprom_query16(priv, EEPROM_LINK_PROCESS_ADJST);
-               break;
-       case INDIRECT_OTHERS:
-               offset = iwl_eeprom_query16(priv, EEPROM_LINK_OTHERS);
-               break;
-       default:
-               IWL_ERR(priv, "illegal indirect type: 0x%X\n",
-               address & INDIRECT_TYPE_MSK);
-               break;
-       }
-
-       /* translate the offset from words to byte */
-       return (address & ADDRESS_MSK) + (offset << 1);
-}
-
-const u8 *iwlagn_eeprom_query_addr(const struct iwl_priv *priv,
-                                          size_t offset)
-{
-       u32 address = eeprom_indirect_address(priv, offset);
-       BUG_ON(address >= priv->cfg->eeprom_size);
-       return &priv->eeprom[address];
-}
-
-struct iwl_mod_params iwlagn_mod_params = {
-       .amsdu_size_8K = 1,
-       .restart_fw = 1,
-       /* the rest are 0 by default */
-};
-
-void iwlagn_rx_queue_reset(struct iwl_priv *priv, struct iwl_rx_queue *rxq)
-{
-       unsigned long flags;
-       int i;
-       spin_lock_irqsave(&rxq->lock, flags);
-       INIT_LIST_HEAD(&rxq->rx_free);
-       INIT_LIST_HEAD(&rxq->rx_used);
-       /* Fill the rx_used queue with _all_ of the Rx buffers */
-       for (i = 0; i < RX_FREE_BUFFERS + RX_QUEUE_SIZE; i++) {
-               /* In the reset function, these buffers may have been allocated
-                * to an SKB, so we need to unmap and free potential storage */
-               if (rxq->pool[i].page != NULL) {
-                       pci_unmap_page(priv->pci_dev, rxq->pool[i].page_dma,
-                               PAGE_SIZE << priv->hw_params.rx_page_order,
-                               PCI_DMA_FROMDEVICE);
-                       __iwl_free_pages(priv, rxq->pool[i].page);
-                       rxq->pool[i].page = NULL;
-               }
-               list_add_tail(&rxq->pool[i].list, &rxq->rx_used);
-       }
-
-       for (i = 0; i < RX_QUEUE_SIZE; i++)
-               rxq->queue[i] = NULL;
-
-       /* Set us so that we have processed and used all buffers, but have
-        * not restocked the Rx queue with fresh buffers */
-       rxq->read = rxq->write = 0;
-       rxq->write_actual = 0;
-       rxq->free_count = 0;
-       spin_unlock_irqrestore(&rxq->lock, flags);
-}
-
-int iwlagn_rx_init(struct iwl_priv *priv, struct iwl_rx_queue *rxq)
-{
-       u32 rb_size;
-       const u32 rfdnlog = RX_QUEUE_SIZE_LOG; /* 256 RBDs */
-       u32 rb_timeout = 0; /* FIXME: RX_RB_TIMEOUT for all devices? */
-
-       if (!priv->cfg->use_isr_legacy)
-               rb_timeout = RX_RB_TIMEOUT;
-
-       if (priv->cfg->mod_params->amsdu_size_8K)
-               rb_size = FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_8K;
-       else
-               rb_size = FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_4K;
-
-       /* Stop Rx DMA */
-       iwl_write_direct32(priv, FH_MEM_RCSR_CHNL0_CONFIG_REG, 0);
-
-       /* Reset driver's Rx queue write index */
-       iwl_write_direct32(priv, FH_RSCSR_CHNL0_RBDCB_WPTR_REG, 0);
-
-       /* Tell device where to find RBD circular buffer in DRAM */
-       iwl_write_direct32(priv, FH_RSCSR_CHNL0_RBDCB_BASE_REG,
-                          (u32)(rxq->bd_dma >> 8));
-
-       /* Tell device where in DRAM to update its Rx status */
-       iwl_write_direct32(priv, FH_RSCSR_CHNL0_STTS_WPTR_REG,
-                          rxq->rb_stts_dma >> 4);
-
-       /* Enable Rx DMA
-        * FH_RCSR_CHNL0_RX_IGNORE_RXF_EMPTY is set because of HW bug in
-        *      the credit mechanism in 5000 HW RX FIFO
-        * Direct rx interrupts to hosts
-        * Rx buffer size 4 or 8k
-        * RB timeout 0x10
-        * 256 RBDs
-        */
-       iwl_write_direct32(priv, FH_MEM_RCSR_CHNL0_CONFIG_REG,
-                          FH_RCSR_RX_CONFIG_CHNL_EN_ENABLE_VAL |
-                          FH_RCSR_CHNL0_RX_IGNORE_RXF_EMPTY |
-                          FH_RCSR_CHNL0_RX_CONFIG_IRQ_DEST_INT_HOST_VAL |
-                          FH_RCSR_CHNL0_RX_CONFIG_SINGLE_FRAME_MSK |
-                          rb_size|
-                          (rb_timeout << FH_RCSR_RX_CONFIG_REG_IRQ_RBTH_POS)|
-                          (rfdnlog << FH_RCSR_RX_CONFIG_RBDCB_SIZE_POS));
-
-       /* Set interrupt coalescing timer to default (2048 usecs) */
-       iwl_write8(priv, CSR_INT_COALESCING, IWL_HOST_INT_TIMEOUT_DEF);
-
-       return 0;
-}
-
-int iwlagn_hw_nic_init(struct iwl_priv *priv)
-{
-       unsigned long flags;
-       struct iwl_rx_queue *rxq = &priv->rxq;
-       int ret;
-
-       /* nic_init */
-       spin_lock_irqsave(&priv->lock, flags);
-       priv->cfg->ops->lib->apm_ops.init(priv);
-
-       /* Set interrupt coalescing calibration timer to default (512 usecs) */
-       iwl_write8(priv, CSR_INT_COALESCING, IWL_HOST_INT_CALIB_TIMEOUT_DEF);
-
-       spin_unlock_irqrestore(&priv->lock, flags);
-
-       ret = priv->cfg->ops->lib->apm_ops.set_pwr_src(priv, IWL_PWR_SRC_VMAIN);
-
-       priv->cfg->ops->lib->apm_ops.config(priv);
-
-       /* Allocate the RX queue, or reset if it is already allocated */
-       if (!rxq->bd) {
-               ret = iwl_rx_queue_alloc(priv);
-               if (ret) {
-                       IWL_ERR(priv, "Unable to initialize Rx queue\n");
-                       return -ENOMEM;
-               }
-       } else
-               iwlagn_rx_queue_reset(priv, rxq);
-
-       iwlagn_rx_replenish(priv);
-
-       iwlagn_rx_init(priv, rxq);
-
-       spin_lock_irqsave(&priv->lock, flags);
-
-       rxq->need_update = 1;
-       iwl_rx_queue_update_write_ptr(priv, rxq);
-
-       spin_unlock_irqrestore(&priv->lock, flags);
-
-       /* Allocate or reset and init all Tx and Command queues */
-       if (!priv->txq) {
-               ret = iwlagn_txq_ctx_alloc(priv);
-               if (ret)
-                       return ret;
-       } else
-               iwlagn_txq_ctx_reset(priv);
-
-       set_bit(STATUS_INIT, &priv->status);
-
-       return 0;
-}
-
-/**
- * iwlagn_dma_addr2rbd_ptr - convert a DMA address to a uCode read buffer ptr
- */
-static inline __le32 iwlagn_dma_addr2rbd_ptr(struct iwl_priv *priv,
-                                         dma_addr_t dma_addr)
-{
-       return cpu_to_le32((u32)(dma_addr >> 8));
-}
-
-/**
- * iwlagn_rx_queue_restock - refill RX queue from pre-allocated pool
- *
- * If there are slots in the RX queue that need to be restocked,
- * and we have free pre-allocated buffers, fill the ranks as much
- * as we can, pulling from rx_free.
- *
- * This moves the 'write' index forward to catch up with 'processed', and
- * also updates the memory address in the firmware to reference the new
- * target buffer.
- */
-void iwlagn_rx_queue_restock(struct iwl_priv *priv)
-{
-       struct iwl_rx_queue *rxq = &priv->rxq;
-       struct list_head *element;
-       struct iwl_rx_mem_buffer *rxb;
-       unsigned long flags;
-
-       spin_lock_irqsave(&rxq->lock, flags);
-       while ((iwl_rx_queue_space(rxq) > 0) && (rxq->free_count)) {
-               /* The overwritten rxb must be a used one */
-               rxb = rxq->queue[rxq->write];
-               BUG_ON(rxb && rxb->page);
-
-               /* Get next free Rx buffer, remove from free list */
-               element = rxq->rx_free.next;
-               rxb = list_entry(element, struct iwl_rx_mem_buffer, list);
-               list_del(element);
-
-               /* Point to Rx buffer via next RBD in circular buffer */
-               rxq->bd[rxq->write] = iwlagn_dma_addr2rbd_ptr(priv,
-                                                             rxb->page_dma);
-               rxq->queue[rxq->write] = rxb;
-               rxq->write = (rxq->write + 1) & RX_QUEUE_MASK;
-               rxq->free_count--;
-       }
-       spin_unlock_irqrestore(&rxq->lock, flags);
-       /* If the pre-allocated buffer pool is dropping low, schedule to
-        * refill it */
-       if (rxq->free_count <= RX_LOW_WATERMARK)
-               queue_work(priv->workqueue, &priv->rx_replenish);
-
-
-       /* If we've added more space for the firmware to place data, tell it.
-        * Increment device's write pointer in multiples of 8. */
-       if (rxq->write_actual != (rxq->write & ~0x7)) {
-               spin_lock_irqsave(&rxq->lock, flags);
-               rxq->need_update = 1;
-               spin_unlock_irqrestore(&rxq->lock, flags);
-               iwl_rx_queue_update_write_ptr(priv, rxq);
-       }
-}
-
-/**
- * iwlagn_rx_replenish - Move all used packet from rx_used to rx_free
- *
- * When moving to rx_free an SKB is allocated for the slot.
- *
- * Also restock the Rx queue via iwl_rx_queue_restock.
- * This is called as a scheduled work item (except for during initialization)
- */
-void iwlagn_rx_allocate(struct iwl_priv *priv, gfp_t priority)
-{
-       struct iwl_rx_queue *rxq = &priv->rxq;
-       struct list_head *element;
-       struct iwl_rx_mem_buffer *rxb;
-       struct page *page;
-       unsigned long flags;
-       gfp_t gfp_mask = priority;
-
-       while (1) {
-               spin_lock_irqsave(&rxq->lock, flags);
-               if (list_empty(&rxq->rx_used)) {
-                       spin_unlock_irqrestore(&rxq->lock, flags);
-                       return;
-               }
-               spin_unlock_irqrestore(&rxq->lock, flags);
-
-               if (rxq->free_count > RX_LOW_WATERMARK)
-                       gfp_mask |= __GFP_NOWARN;
-
-               if (priv->hw_params.rx_page_order > 0)
-                       gfp_mask |= __GFP_COMP;
-
-               /* Alloc a new receive buffer */
-               page = alloc_pages(gfp_mask, priv->hw_params.rx_page_order);
-               if (!page) {
-                       if (net_ratelimit())
-                               IWL_DEBUG_INFO(priv, "alloc_pages failed, "
-                                              "order: %d\n",
-                                              priv->hw_params.rx_page_order);
-
-                       if ((rxq->free_count <= RX_LOW_WATERMARK) &&
-                           net_ratelimit())
-                               IWL_CRIT(priv, "Failed to alloc_pages with %s. Only %u free buffers remaining.\n",
-                                        priority == GFP_ATOMIC ?  "GFP_ATOMIC" : "GFP_KERNEL",
-                                        rxq->free_count);
-                       /* We don't reschedule replenish work here -- we will
-                        * call the restock method and if it still needs
-                        * more buffers it will schedule replenish */
-                       return;
-               }
-
-               spin_lock_irqsave(&rxq->lock, flags);
-
-               if (list_empty(&rxq->rx_used)) {
-                       spin_unlock_irqrestore(&rxq->lock, flags);
-                       __free_pages(page, priv->hw_params.rx_page_order);
-                       return;
-               }
-               element = rxq->rx_used.next;
-               rxb = list_entry(element, struct iwl_rx_mem_buffer, list);
-               list_del(element);
-
-               spin_unlock_irqrestore(&rxq->lock, flags);
-
-               BUG_ON(rxb->page);
-               rxb->page = page;
-               /* Get physical address of the RB */
-               rxb->page_dma = pci_map_page(priv->pci_dev, page, 0,
-                               PAGE_SIZE << priv->hw_params.rx_page_order,
-                               PCI_DMA_FROMDEVICE);
-               /* dma address must be no more than 36 bits */
-               BUG_ON(rxb->page_dma & ~DMA_BIT_MASK(36));
-               /* and also 256 byte aligned! */
-               BUG_ON(rxb->page_dma & DMA_BIT_MASK(8));
-
-               spin_lock_irqsave(&rxq->lock, flags);
-
-               list_add_tail(&rxb->list, &rxq->rx_free);
-               rxq->free_count++;
-               priv->alloc_rxb_page++;
-
-               spin_unlock_irqrestore(&rxq->lock, flags);
-       }
-}
-
-void iwlagn_rx_replenish(struct iwl_priv *priv)
-{
-       unsigned long flags;
-
-       iwlagn_rx_allocate(priv, GFP_KERNEL);
-
-       spin_lock_irqsave(&priv->lock, flags);
-       iwlagn_rx_queue_restock(priv);
-       spin_unlock_irqrestore(&priv->lock, flags);
-}
-
-void iwlagn_rx_replenish_now(struct iwl_priv *priv)
-{
-       iwlagn_rx_allocate(priv, GFP_ATOMIC);
-
-       iwlagn_rx_queue_restock(priv);
-}
-
-/* Assumes that the skb field of the buffers in 'pool' is kept accurate.
- * If an SKB has been detached, the POOL needs to have its SKB set to NULL
- * This free routine walks the list of POOL entries and if SKB is set to
- * non NULL it is unmapped and freed
- */
-void iwlagn_rx_queue_free(struct iwl_priv *priv, struct iwl_rx_queue *rxq)
-{
-       int i;
-       for (i = 0; i < RX_QUEUE_SIZE + RX_FREE_BUFFERS; i++) {
-               if (rxq->pool[i].page != NULL) {
-                       pci_unmap_page(priv->pci_dev, rxq->pool[i].page_dma,
-                               PAGE_SIZE << priv->hw_params.rx_page_order,
-                               PCI_DMA_FROMDEVICE);
-                       __iwl_free_pages(priv, rxq->pool[i].page);
-                       rxq->pool[i].page = NULL;
-               }
-       }
-
-       dma_free_coherent(&priv->pci_dev->dev, 4 * RX_QUEUE_SIZE, rxq->bd,
-                         rxq->bd_dma);
-       dma_free_coherent(&priv->pci_dev->dev, sizeof(struct iwl_rb_status),
-                         rxq->rb_stts, rxq->rb_stts_dma);
-       rxq->bd = NULL;
-       rxq->rb_stts  = NULL;
-}
-
-int iwlagn_rxq_stop(struct iwl_priv *priv)
-{
-
-       /* stop Rx DMA */
-       iwl_write_direct32(priv, FH_MEM_RCSR_CHNL0_CONFIG_REG, 0);
-       iwl_poll_direct_bit(priv, FH_MEM_RSSR_RX_STATUS_REG,
-                           FH_RSSR_CHNL0_RX_STATUS_CHNL_IDLE, 1000);
-
-       return 0;
-}
-
-int iwlagn_hwrate_to_mac80211_idx(u32 rate_n_flags, enum ieee80211_band band)
-{
-       int idx = 0;
-       int band_offset = 0;
-
-       /* HT rate format: mac80211 wants an MCS number, which is just LSB */
-       if (rate_n_flags & RATE_MCS_HT_MSK) {
-               idx = (rate_n_flags & 0xff);
-               return idx;
-       /* Legacy rate format, search for match in table */
-       } else {
-               if (band == IEEE80211_BAND_5GHZ)
-                       band_offset = IWL_FIRST_OFDM_RATE;
-               for (idx = band_offset; idx < IWL_RATE_COUNT_LEGACY; idx++)
-                       if (iwl_rates[idx].plcp == (rate_n_flags & 0xFF))
-                               return idx - band_offset;
-       }
-
-       return -1;
-}
-
-/* Calc max signal level (dBm) among 3 possible receivers */
-static inline int iwlagn_calc_rssi(struct iwl_priv *priv,
-                               struct iwl_rx_phy_res *rx_resp)
-{
-       return priv->cfg->ops->utils->calc_rssi(priv, rx_resp);
-}
-
-static u32 iwlagn_translate_rx_status(struct iwl_priv *priv, u32 decrypt_in)
-{
-       u32 decrypt_out = 0;
-
-       if ((decrypt_in & RX_RES_STATUS_STATION_FOUND) ==
-                                       RX_RES_STATUS_STATION_FOUND)
-               decrypt_out |= (RX_RES_STATUS_STATION_FOUND |
-                               RX_RES_STATUS_NO_STATION_INFO_MISMATCH);
-
-       decrypt_out |= (decrypt_in & RX_RES_STATUS_SEC_TYPE_MSK);
-
-       /* packet was not encrypted */
-       if ((decrypt_in & RX_RES_STATUS_SEC_TYPE_MSK) ==
-                                       RX_RES_STATUS_SEC_TYPE_NONE)
-               return decrypt_out;
-
-       /* packet was encrypted with unknown alg */
-       if ((decrypt_in & RX_RES_STATUS_SEC_TYPE_MSK) ==
-                                       RX_RES_STATUS_SEC_TYPE_ERR)
-               return decrypt_out;
-
-       /* decryption was not done in HW */
-       if ((decrypt_in & RX_MPDU_RES_STATUS_DEC_DONE_MSK) !=
-                                       RX_MPDU_RES_STATUS_DEC_DONE_MSK)
-               return decrypt_out;
-
-       switch (decrypt_in & RX_RES_STATUS_SEC_TYPE_MSK) {
-
-       case RX_RES_STATUS_SEC_TYPE_CCMP:
-               /* alg is CCM: check MIC only */
-               if (!(decrypt_in & RX_MPDU_RES_STATUS_MIC_OK))
-                       /* Bad MIC */
-                       decrypt_out |= RX_RES_STATUS_BAD_ICV_MIC;
-               else
-                       decrypt_out |= RX_RES_STATUS_DECRYPT_OK;
-
-               break;
-
-       case RX_RES_STATUS_SEC_TYPE_TKIP:
-               if (!(decrypt_in & RX_MPDU_RES_STATUS_TTAK_OK)) {
-                       /* Bad TTAK */
-                       decrypt_out |= RX_RES_STATUS_BAD_KEY_TTAK;
-                       break;
-               }
-               /* fall through if TTAK OK */
-       default:
-               if (!(decrypt_in & RX_MPDU_RES_STATUS_ICV_OK))
-                       decrypt_out |= RX_RES_STATUS_BAD_ICV_MIC;
-               else
-                       decrypt_out |= RX_RES_STATUS_DECRYPT_OK;
-               break;
-       }
-
-       IWL_DEBUG_RX(priv, "decrypt_in:0x%x  decrypt_out = 0x%x\n",
-                                       decrypt_in, decrypt_out);
-
-       return decrypt_out;
-}
-
-static void iwlagn_pass_packet_to_mac80211(struct iwl_priv *priv,
-                                       struct ieee80211_hdr *hdr,
-                                       u16 len,
-                                       u32 ampdu_status,
-                                       struct iwl_rx_mem_buffer *rxb,
-                                       struct ieee80211_rx_status *stats)
-{
-       struct sk_buff *skb;
-       __le16 fc = hdr->frame_control;
-
-       /* We only process data packets if the interface is open */
-       if (unlikely(!priv->is_open)) {
-               IWL_DEBUG_DROP_LIMIT(priv,
-                   "Dropping packet while interface is not open.\n");
-               return;
-       }
-
-       /* In case of HW accelerated crypto and bad decryption, drop */
-       if (!priv->cfg->mod_params->sw_crypto &&
-           iwl_set_decrypted_flag(priv, hdr, ampdu_status, stats))
-               return;
-
-       skb = dev_alloc_skb(128);
-       if (!skb) {
-               IWL_ERR(priv, "dev_alloc_skb failed\n");
-               return;
-       }
-
-       skb_add_rx_frag(skb, 0, rxb->page, (void *)hdr - rxb_addr(rxb), len);
-
-       iwl_update_stats(priv, false, fc, len);
-       memcpy(IEEE80211_SKB_RXCB(skb), stats, sizeof(*stats));
-
-       ieee80211_rx(priv->hw, skb);
-       priv->alloc_rxb_page--;
-       rxb->page = NULL;
-}
-
-/* Called for REPLY_RX (legacy ABG frames), or
- * REPLY_RX_MPDU_CMD (HT high-throughput N frames). */
-void iwlagn_rx_reply_rx(struct iwl_priv *priv,
-                               struct iwl_rx_mem_buffer *rxb)
-{
-       struct ieee80211_hdr *header;
-       struct ieee80211_rx_status rx_status;
-       struct iwl_rx_packet *pkt = rxb_addr(rxb);
-       struct iwl_rx_phy_res *phy_res;
-       __le32 rx_pkt_status;
-       struct iwl_rx_mpdu_res_start *amsdu;
-       u32 len;
-       u32 ampdu_status;
-       u32 rate_n_flags;
-
-       /**
-        * REPLY_RX and REPLY_RX_MPDU_CMD are handled differently.
-        *      REPLY_RX: physical layer info is in this buffer
-        *      REPLY_RX_MPDU_CMD: physical layer info was sent in separate
-        *              command and cached in priv->last_phy_res
-        *
-        * Here we set up local variables depending on which command is
-        * received.
-        */
-       if (pkt->hdr.cmd == REPLY_RX) {
-               phy_res = (struct iwl_rx_phy_res *)pkt->u.raw;
-               header = (struct ieee80211_hdr *)(pkt->u.raw + sizeof(*phy_res)
-                               + phy_res->cfg_phy_cnt);
-
-               len = le16_to_cpu(phy_res->byte_count);
-               rx_pkt_status = *(__le32 *)(pkt->u.raw + sizeof(*phy_res) +
-                               phy_res->cfg_phy_cnt + len);
-               ampdu_status = le32_to_cpu(rx_pkt_status);
-       } else {
-               if (!priv->_agn.last_phy_res_valid) {
-                       IWL_ERR(priv, "MPDU frame without cached PHY data\n");
-                       return;
-               }
-               phy_res = &priv->_agn.last_phy_res;
-               amsdu = (struct iwl_rx_mpdu_res_start *)pkt->u.raw;
-               header = (struct ieee80211_hdr *)(pkt->u.raw + sizeof(*amsdu));
-               len = le16_to_cpu(amsdu->byte_count);
-               rx_pkt_status = *(__le32 *)(pkt->u.raw + sizeof(*amsdu) + len);
-               ampdu_status = iwlagn_translate_rx_status(priv,
-                               le32_to_cpu(rx_pkt_status));
-       }
-
-       if ((unlikely(phy_res->cfg_phy_cnt > 20))) {
-               IWL_DEBUG_DROP(priv, "dsp size out of range [0,20]: %d/n",
-                               phy_res->cfg_phy_cnt);
-               return;
-       }
-
-       if (!(rx_pkt_status & RX_RES_STATUS_NO_CRC32_ERROR) ||
-           !(rx_pkt_status & RX_RES_STATUS_NO_RXE_OVERFLOW)) {
-               IWL_DEBUG_RX(priv, "Bad CRC or FIFO: 0x%08X.\n",
-                               le32_to_cpu(rx_pkt_status));
-               return;
-       }
-
-       /* This will be used in several places later */
-       rate_n_flags = le32_to_cpu(phy_res->rate_n_flags);
-
-       /* rx_status carries information about the packet to mac80211 */
-       rx_status.mactime = le64_to_cpu(phy_res->timestamp);
-       rx_status.freq =
-               ieee80211_channel_to_frequency(le16_to_cpu(phy_res->channel));
-       rx_status.band = (phy_res->phy_flags & RX_RES_PHY_FLAGS_BAND_24_MSK) ?
-                               IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ;
-       rx_status.rate_idx =
-               iwlagn_hwrate_to_mac80211_idx(rate_n_flags, rx_status.band);
-       rx_status.flag = 0;
-
-       /* TSF isn't reliable. In order to allow smooth user experience,
-        * this W/A doesn't propagate it to the mac80211 */
-       /*rx_status.flag |= RX_FLAG_TSFT;*/
-
-       priv->ucode_beacon_time = le32_to_cpu(phy_res->beacon_time_stamp);
-
-       /* Find max signal strength (dBm) among 3 antenna/receiver chains */
-       rx_status.signal = iwlagn_calc_rssi(priv, phy_res);
-
-       iwl_dbg_log_rx_data_frame(priv, len, header);
-       IWL_DEBUG_STATS_LIMIT(priv, "Rssi %d, TSF %llu\n",
-               rx_status.signal, (unsigned long long)rx_status.mactime);
-
-       /*
-        * "antenna number"
-        *
-        * It seems that the antenna field in the phy flags value
-        * is actually a bit field. This is undefined by radiotap,
-        * it wants an actual antenna number but I always get "7"
-        * for most legacy frames I receive indicating that the
-        * same frame was received on all three RX chains.
-        *
-        * I think this field should be removed in favor of a
-        * new 802.11n radiotap field "RX chains" that is defined
-        * as a bitmask.
-        */
-       rx_status.antenna =
-               (le16_to_cpu(phy_res->phy_flags) & RX_RES_PHY_FLAGS_ANTENNA_MSK)
-               >> RX_RES_PHY_FLAGS_ANTENNA_POS;
-
-       /* set the preamble flag if appropriate */
-       if (phy_res->phy_flags & RX_RES_PHY_FLAGS_SHORT_PREAMBLE_MSK)
-               rx_status.flag |= RX_FLAG_SHORTPRE;
-
-       /* Set up the HT phy flags */
-       if (rate_n_flags & RATE_MCS_HT_MSK)
-               rx_status.flag |= RX_FLAG_HT;
-       if (rate_n_flags & RATE_MCS_HT40_MSK)
-               rx_status.flag |= RX_FLAG_40MHZ;
-       if (rate_n_flags & RATE_MCS_SGI_MSK)
-               rx_status.flag |= RX_FLAG_SHORT_GI;
-
-       iwlagn_pass_packet_to_mac80211(priv, header, len, ampdu_status,
-                                   rxb, &rx_status);
-}
-
-/* Cache phy data (Rx signal strength, etc) for HT frame (REPLY_RX_PHY_CMD).
- * This will be used later in iwl_rx_reply_rx() for REPLY_RX_MPDU_CMD. */
-void iwlagn_rx_reply_rx_phy(struct iwl_priv *priv,
-                           struct iwl_rx_mem_buffer *rxb)
-{
-       struct iwl_rx_packet *pkt = rxb_addr(rxb);
-       priv->_agn.last_phy_res_valid = true;
-       memcpy(&priv->_agn.last_phy_res, pkt->u.raw,
-              sizeof(struct iwl_rx_phy_res));
-}
-
-static int iwl_get_single_channel_for_scan(struct iwl_priv *priv,
-                                          struct ieee80211_vif *vif,
-                                          enum ieee80211_band band,
-                                          struct iwl_scan_channel *scan_ch)
-{
-       const struct ieee80211_supported_band *sband;
-       u16 passive_dwell = 0;
-       u16 active_dwell = 0;
-       int added = 0;
-       u16 channel = 0;
-
-       sband = iwl_get_hw_mode(priv, band);
-       if (!sband) {
-               IWL_ERR(priv, "invalid band\n");
-               return added;
-       }
-
-       active_dwell = iwl_get_active_dwell_time(priv, band, 0);
-       passive_dwell = iwl_get_passive_dwell_time(priv, band, vif);
-
-       if (passive_dwell <= active_dwell)
-               passive_dwell = active_dwell + 1;
-
-       channel = iwl_get_single_channel_number(priv, band);
-       if (channel) {
-               scan_ch->channel = cpu_to_le16(channel);
-               scan_ch->type = SCAN_CHANNEL_TYPE_PASSIVE;
-               scan_ch->active_dwell = cpu_to_le16(active_dwell);
-               scan_ch->passive_dwell = cpu_to_le16(passive_dwell);
-               /* Set txpower levels to defaults */
-               scan_ch->dsp_atten = 110;
-               if (band == IEEE80211_BAND_5GHZ)
-                       scan_ch->tx_gain = ((1 << 5) | (3 << 3)) | 3;
-               else
-                       scan_ch->tx_gain = ((1 << 5) | (5 << 3));
-               added++;
-       } else
-               IWL_ERR(priv, "no valid channel found\n");
-       return added;
-}
-
-static int iwl_get_channels_for_scan(struct iwl_priv *priv,
-                                    struct ieee80211_vif *vif,
-                                    enum ieee80211_band band,
-                                    u8 is_active, u8 n_probes,
-                                    struct iwl_scan_channel *scan_ch)
-{
-       struct ieee80211_channel *chan;
-       const struct ieee80211_supported_band *sband;
-       const struct iwl_channel_info *ch_info;
-       u16 passive_dwell = 0;
-       u16 active_dwell = 0;
-       int added, i;
-       u16 channel;
-
-       sband = iwl_get_hw_mode(priv, band);
-       if (!sband)
-               return 0;
-
-       active_dwell = iwl_get_active_dwell_time(priv, band, n_probes);
-       passive_dwell = iwl_get_passive_dwell_time(priv, band, vif);
-
-       if (passive_dwell <= active_dwell)
-               passive_dwell = active_dwell + 1;
-
-       for (i = 0, added = 0; i < priv->scan_request->n_channels; i++) {
-               chan = priv->scan_request->channels[i];
-
-               if (chan->band != band)
-                       continue;
-
-               channel = ieee80211_frequency_to_channel(chan->center_freq);
-               scan_ch->channel = cpu_to_le16(channel);
-
-               ch_info = iwl_get_channel_info(priv, band, channel);
-               if (!is_channel_valid(ch_info)) {
-                       IWL_DEBUG_SCAN(priv, "Channel %d is INVALID for this band.\n",
-                                       channel);
-                       continue;
-               }
-
-               if (!is_active || is_channel_passive(ch_info) ||
-                   (chan->flags & IEEE80211_CHAN_PASSIVE_SCAN))
-                       scan_ch->type = SCAN_CHANNEL_TYPE_PASSIVE;
-               else
-                       scan_ch->type = SCAN_CHANNEL_TYPE_ACTIVE;
-
-               if (n_probes)
-                       scan_ch->type |= IWL_SCAN_PROBE_MASK(n_probes);
-
-               scan_ch->active_dwell = cpu_to_le16(active_dwell);
-               scan_ch->passive_dwell = cpu_to_le16(passive_dwell);
-
-               /* Set txpower levels to defaults */
-               scan_ch->dsp_atten = 110;
-
-               /* NOTE: if we were doing 6Mb OFDM for scans we'd use
-                * power level:
-                * scan_ch->tx_gain = ((1 << 5) | (2 << 3)) | 3;
-                */
-               if (band == IEEE80211_BAND_5GHZ)
-                       scan_ch->tx_gain = ((1 << 5) | (3 << 3)) | 3;
-               else
-                       scan_ch->tx_gain = ((1 << 5) | (5 << 3));
-
-               IWL_DEBUG_SCAN(priv, "Scanning ch=%d prob=0x%X [%s %d]\n",
-                              channel, le32_to_cpu(scan_ch->type),
-                              (scan_ch->type & SCAN_CHANNEL_TYPE_ACTIVE) ?
-                               "ACTIVE" : "PASSIVE",
-                              (scan_ch->type & SCAN_CHANNEL_TYPE_ACTIVE) ?
-                              active_dwell : passive_dwell);
-
-               scan_ch++;
-               added++;
-       }
-
-       IWL_DEBUG_SCAN(priv, "total channels to scan %d\n", added);
-       return added;
-}
-
-void iwlagn_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif)
-{
-       struct iwl_host_cmd cmd = {
-               .id = REPLY_SCAN_CMD,
-               .len = sizeof(struct iwl_scan_cmd),
-               .flags = CMD_SIZE_HUGE,
-       };
-       struct iwl_scan_cmd *scan;
-       struct ieee80211_conf *conf = NULL;
-       u32 rate_flags = 0;
-       u16 cmd_len;
-       u16 rx_chain = 0;
-       enum ieee80211_band band;
-       u8 n_probes = 0;
-       u8 rx_ant = priv->hw_params.valid_rx_ant;
-       u8 rate;
-       bool is_active = false;
-       int  chan_mod;
-       u8 active_chains;
-       u8 scan_tx_antennas = priv->hw_params.valid_tx_ant;
-
-       conf = ieee80211_get_hw_conf(priv->hw);
-
-       cancel_delayed_work(&priv->scan_check);
-
-       if (!iwl_is_ready(priv)) {
-               IWL_WARN(priv, "request scan called when driver not ready.\n");
-               goto done;
-       }
-
-       /* Make sure the scan wasn't canceled before this queued work
-        * was given the chance to run... */
-       if (!test_bit(STATUS_SCANNING, &priv->status))
-               goto done;
-
-       /* This should never be called or scheduled if there is currently
-        * a scan active in the hardware. */
-       if (test_bit(STATUS_SCAN_HW, &priv->status)) {
-               IWL_DEBUG_INFO(priv, "Multiple concurrent scan requests in parallel. "
-                              "Ignoring second request.\n");
-               goto done;
-       }
-
-       if (test_bit(STATUS_EXIT_PENDING, &priv->status)) {
-               IWL_DEBUG_SCAN(priv, "Aborting scan due to device shutdown\n");
-               goto done;
-       }
-
-       if (test_bit(STATUS_SCAN_ABORTING, &priv->status)) {
-               IWL_DEBUG_HC(priv, "Scan request while abort pending.  Queuing.\n");
-               goto done;
-       }
-
-       if (iwl_is_rfkill(priv)) {
-               IWL_DEBUG_HC(priv, "Aborting scan due to RF Kill activation\n");
-               goto done;
-       }
-
-       if (!test_bit(STATUS_READY, &priv->status)) {
-               IWL_DEBUG_HC(priv, "Scan request while uninitialized.  Queuing.\n");
-               goto done;
-       }
-
-       if (!priv->scan_cmd) {
-               priv->scan_cmd = kmalloc(sizeof(struct iwl_scan_cmd) +
-                                        IWL_MAX_SCAN_SIZE, GFP_KERNEL);
-               if (!priv->scan_cmd) {
-                       IWL_DEBUG_SCAN(priv,
-                                      "fail to allocate memory for scan\n");
-                       goto done;
-               }
-       }
-       scan = priv->scan_cmd;
-       memset(scan, 0, sizeof(struct iwl_scan_cmd) + IWL_MAX_SCAN_SIZE);
-
-       scan->quiet_plcp_th = IWL_PLCP_QUIET_THRESH;
-       scan->quiet_time = IWL_ACTIVE_QUIET_TIME;
-
-       if (iwl_is_associated(priv)) {
-               u16 interval = 0;
-               u32 extra;
-               u32 suspend_time = 100;
-               u32 scan_suspend_time = 100;
-               unsigned long flags;
-
-               IWL_DEBUG_INFO(priv, "Scanning while associated...\n");
-               spin_lock_irqsave(&priv->lock, flags);
-               if (priv->is_internal_short_scan)
-                       interval = 0;
-               else
-                       interval = vif->bss_conf.beacon_int;
-               spin_unlock_irqrestore(&priv->lock, flags);
-
-               scan->suspend_time = 0;
-               scan->max_out_time = cpu_to_le32(200 * 1024);
-               if (!interval)
-                       interval = suspend_time;
-
-               extra = (suspend_time / interval) << 22;
-               scan_suspend_time = (extra |
-                   ((suspend_time % interval) * 1024));
-               scan->suspend_time = cpu_to_le32(scan_suspend_time);
-               IWL_DEBUG_SCAN(priv, "suspend_time 0x%X beacon interval %d\n",
-                              scan_suspend_time, interval);
-       }
-
-       if (priv->is_internal_short_scan) {
-               IWL_DEBUG_SCAN(priv, "Start internal passive scan.\n");
-       } else if (priv->scan_request->n_ssids) {
-               int i, p = 0;
-               IWL_DEBUG_SCAN(priv, "Kicking off active scan\n");
-               for (i = 0; i < priv->scan_request->n_ssids; i++) {
-                       /* always does wildcard anyway */
-                       if (!priv->scan_request->ssids[i].ssid_len)
-                               continue;
-                       scan->direct_scan[p].id = WLAN_EID_SSID;
-                       scan->direct_scan[p].len =
-                               priv->scan_request->ssids[i].ssid_len;
-                       memcpy(scan->direct_scan[p].ssid,
-                              priv->scan_request->ssids[i].ssid,
-                              priv->scan_request->ssids[i].ssid_len);
-                       n_probes++;
-                       p++;
-               }
-               is_active = true;
-       } else
-               IWL_DEBUG_SCAN(priv, "Start passive scan.\n");
-
-       scan->tx_cmd.tx_flags = TX_CMD_FLG_SEQ_CTL_MSK;
-       scan->tx_cmd.sta_id = priv->hw_params.bcast_sta_id;
-       scan->tx_cmd.stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE;
-
-       switch (priv->scan_band) {
-       case IEEE80211_BAND_2GHZ:
-               scan->flags = RXON_FLG_BAND_24G_MSK | RXON_FLG_AUTO_DETECT_MSK;
-               chan_mod = le32_to_cpu(priv->active_rxon.flags & RXON_FLG_CHANNEL_MODE_MSK)
-                                      >> RXON_FLG_CHANNEL_MODE_POS;
-               if (chan_mod == CHANNEL_MODE_PURE_40) {
-                       rate = IWL_RATE_6M_PLCP;
-               } else {
-                       rate = IWL_RATE_1M_PLCP;
-                       rate_flags = RATE_MCS_CCK_MSK;
-               }
-               scan->good_CRC_th = IWL_GOOD_CRC_TH_DISABLED;
-               break;
-       case IEEE80211_BAND_5GHZ:
-               rate = IWL_RATE_6M_PLCP;
-               /*
-                * If active scanning is requested but a certain channel is
-                * marked passive, we can do active scanning if we detect
-                * transmissions.
-                *
-                * There is an issue with some firmware versions that triggers
-                * a sysassert on a "good CRC threshold" of zero (== disabled),
-                * on a radar channel even though this means that we should NOT
-                * send probes.
-                *
-                * The "good CRC threshold" is the number of frames that we
-                * need to receive during our dwell time on a channel before
-                * sending out probes -- setting this to a huge value will
-                * mean we never reach it, but at the same time work around
-                * the aforementioned issue. Thus use IWL_GOOD_CRC_TH_NEVER
-                * here instead of IWL_GOOD_CRC_TH_DISABLED.
-                */
-               scan->good_CRC_th = is_active ? IWL_GOOD_CRC_TH_DEFAULT :
-                                               IWL_GOOD_CRC_TH_NEVER;
-               break;
-       default:
-               IWL_WARN(priv, "Invalid scan band count\n");
-               goto done;
-       }
-
-       band = priv->scan_band;
-
-       if (priv->cfg->scan_rx_antennas[band])
-               rx_ant = priv->cfg->scan_rx_antennas[band];
-
-       if (priv->cfg->scan_tx_antennas[band])
-               scan_tx_antennas = priv->cfg->scan_tx_antennas[band];
-
-       priv->scan_tx_ant[band] = iwl_toggle_tx_ant(priv, priv->scan_tx_ant[band],
-                                                   scan_tx_antennas);
-       rate_flags |= iwl_ant_idx_to_flags(priv->scan_tx_ant[band]);
-       scan->tx_cmd.rate_n_flags = iwl_hw_set_rate_n_flags(rate, rate_flags);
-
-       /* In power save mode use one chain, otherwise use all chains */
-       if (test_bit(STATUS_POWER_PMI, &priv->status)) {
-               /* rx_ant has been set to all valid chains previously */
-               active_chains = rx_ant &
-                               ((u8)(priv->chain_noise_data.active_chains));
-               if (!active_chains)
-                       active_chains = rx_ant;
-
-               IWL_DEBUG_SCAN(priv, "chain_noise_data.active_chains: %u\n",
-                               priv->chain_noise_data.active_chains);
-
-               rx_ant = first_antenna(active_chains);
-       }
-       /* MIMO is not used here, but value is required */
-       rx_chain |= priv->hw_params.valid_rx_ant << RXON_RX_CHAIN_VALID_POS;
-       rx_chain |= rx_ant << RXON_RX_CHAIN_FORCE_MIMO_SEL_POS;
-       rx_chain |= rx_ant << RXON_RX_CHAIN_FORCE_SEL_POS;
-       rx_chain |= 0x1 << RXON_RX_CHAIN_DRIVER_FORCE_POS;
-       scan->rx_chain = cpu_to_le16(rx_chain);
-       if (!priv->is_internal_short_scan) {
-               cmd_len = iwl_fill_probe_req(priv,
-                                       (struct ieee80211_mgmt *)scan->data,
-                                       vif->addr,
-                                       priv->scan_request->ie,
-                                       priv->scan_request->ie_len,
-                                       IWL_MAX_SCAN_SIZE - sizeof(*scan));
-       } else {
-               /* use bcast addr, will not be transmitted but must be valid */
-               cmd_len = iwl_fill_probe_req(priv,
-                                       (struct ieee80211_mgmt *)scan->data,
-                                       iwl_bcast_addr, NULL, 0,
-                                       IWL_MAX_SCAN_SIZE - sizeof(*scan));
-
-       }
-       scan->tx_cmd.len = cpu_to_le16(cmd_len);
-
-       scan->filter_flags |= (RXON_FILTER_ACCEPT_GRP_MSK |
-                              RXON_FILTER_BCON_AWARE_MSK);
-
-       if (priv->is_internal_short_scan) {
-               scan->channel_count =
-                       iwl_get_single_channel_for_scan(priv, vif, band,
-                               (void *)&scan->data[le16_to_cpu(
-                               scan->tx_cmd.len)]);
-       } else {
-               scan->channel_count =
-                       iwl_get_channels_for_scan(priv, vif, band,
-                               is_active, n_probes,
-                               (void *)&scan->data[le16_to_cpu(
-                               scan->tx_cmd.len)]);
-       }
-       if (scan->channel_count == 0) {
-               IWL_DEBUG_SCAN(priv, "channel count %d\n", scan->channel_count);
-               goto done;
-       }
-
-       cmd.len += le16_to_cpu(scan->tx_cmd.len) +
-           scan->channel_count * sizeof(struct iwl_scan_channel);
-       cmd.data = scan;
-       scan->len = cpu_to_le16(cmd.len);
-
-       set_bit(STATUS_SCAN_HW, &priv->status);
-       if (iwl_send_cmd_sync(priv, &cmd))
-               goto done;
-
-       queue_delayed_work(priv->workqueue, &priv->scan_check,
-                          IWL_SCAN_CHECK_WATCHDOG);
-
-       return;
-
- done:
-       /* Cannot perform scan. Make sure we clear scanning
-       * bits from status so next scan request can be performed.
-       * If we don't clear scanning status bit here all next scan
-       * will fail
-       */
-       clear_bit(STATUS_SCAN_HW, &priv->status);
-       clear_bit(STATUS_SCANNING, &priv->status);
-       /* inform mac80211 scan aborted */
-       queue_work(priv->workqueue, &priv->abort_scan);
-}
-
-int iwlagn_manage_ibss_station(struct iwl_priv *priv,
-                              struct ieee80211_vif *vif, bool add)
-{
-       struct iwl_vif_priv *vif_priv = (void *)vif->drv_priv;
-
-       if (add)
-               return iwl_add_bssid_station(priv, vif->bss_conf.bssid, true,
-                                            &vif_priv->ibss_bssid_sta_id);
-       return iwl_remove_station(priv, vif_priv->ibss_bssid_sta_id,
-                                 vif->bss_conf.bssid);
-}
-
-void iwl_free_tfds_in_queue(struct iwl_priv *priv,
-                           int sta_id, int tid, int freed)
-{
-       lockdep_assert_held(&priv->sta_lock);
-
-       if (priv->stations[sta_id].tid[tid].tfds_in_queue >= freed)
-               priv->stations[sta_id].tid[tid].tfds_in_queue -= freed;
-       else {
-               IWL_DEBUG_TX(priv, "free more than tfds_in_queue (%u:%d)\n",
-                       priv->stations[sta_id].tid[tid].tfds_in_queue,
-                       freed);
-               priv->stations[sta_id].tid[tid].tfds_in_queue = 0;
-       }
-}
-
-#define IWL_FLUSH_WAIT_MS      2000
-
-int iwlagn_wait_tx_queue_empty(struct iwl_priv *priv)
-{
-       struct iwl_tx_queue *txq;
-       struct iwl_queue *q;
-       int cnt;
-       unsigned long now = jiffies;
-       int ret = 0;
-
-       /* waiting for all the tx frames complete might take a while */
-       for (cnt = 0; cnt < priv->hw_params.max_txq_num; cnt++) {
-               if (cnt == IWL_CMD_QUEUE_NUM)
-                       continue;
-               txq = &priv->txq[cnt];
-               q = &txq->q;
-               while (q->read_ptr != q->write_ptr && !time_after(jiffies,
-                      now + msecs_to_jiffies(IWL_FLUSH_WAIT_MS)))
-                               msleep(1);
-
-               if (q->read_ptr != q->write_ptr) {
-                       IWL_ERR(priv, "fail to flush all tx fifo queues\n");
-                       ret = -ETIMEDOUT;
-                       break;
-               }
-       }
-       return ret;
-}
-
-#define IWL_TX_QUEUE_MSK       0xfffff
-
-/**
- * iwlagn_txfifo_flush: send REPLY_TXFIFO_FLUSH command to uCode
- *
- * pre-requirements:
- *  1. acquire mutex before calling
- *  2. make sure rf is on and not in exit state
- */
-int iwlagn_txfifo_flush(struct iwl_priv *priv, u16 flush_control)
-{
-       struct iwl_txfifo_flush_cmd flush_cmd;
-       struct iwl_host_cmd cmd = {
-               .id = REPLY_TXFIFO_FLUSH,
-               .len = sizeof(struct iwl_txfifo_flush_cmd),
-               .flags = CMD_SYNC,
-               .data = &flush_cmd,
-       };
-
-       might_sleep();
-
-       memset(&flush_cmd, 0, sizeof(flush_cmd));
-       flush_cmd.fifo_control = IWL_TX_FIFO_VO_MSK | IWL_TX_FIFO_VI_MSK |
-                                IWL_TX_FIFO_BE_MSK | IWL_TX_FIFO_BK_MSK;
-       if (priv->cfg->sku & IWL_SKU_N)
-               flush_cmd.fifo_control |= IWL_AGG_TX_QUEUE_MSK;
-
-       IWL_DEBUG_INFO(priv, "fifo queue control: 0X%x\n",
-                      flush_cmd.fifo_control);
-       flush_cmd.flush_control = cpu_to_le16(flush_control);
-
-       return iwl_send_cmd(priv, &cmd);
-}
-
-void iwlagn_dev_txfifo_flush(struct iwl_priv *priv, u16 flush_control)
-{
-       mutex_lock(&priv->mutex);
-       ieee80211_stop_queues(priv->hw);
-       if (priv->cfg->ops->lib->txfifo_flush(priv, IWL_DROP_ALL)) {
-               IWL_ERR(priv, "flush request fail\n");
-               goto done;
-       }
-       IWL_DEBUG_INFO(priv, "wait transmit/flush all frames\n");
-       iwlagn_wait_tx_queue_empty(priv);
-done:
-       ieee80211_wake_queues(priv->hw);
-       mutex_unlock(&priv->mutex);
-}
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rx.c b/drivers/net/wireless/iwlwifi/iwl-agn-rx.c
deleted file mode 100644 (file)
index 9490ece..0000000
+++ /dev/null
@@ -1,351 +0,0 @@
-/******************************************************************************
- *
- * GPL LICENSE SUMMARY
- *
- * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
- * USA
- *
- * The full GNU General Public License is included in this distribution
- * in the file called LICENSE.GPL.
- *
- * Contact Information:
- *  Intel Linux Wireless <ilw@linux.intel.com>
- * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
- *
- *****************************************************************************/
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/sched.h>
-
-#include "iwl-dev.h"
-#include "iwl-core.h"
-#include "iwl-calib.h"
-#include "iwl-sta.h"
-#include "iwl-io.h"
-#include "iwl-helpers.h"
-#include "iwl-agn-hw.h"
-#include "iwl-agn.h"
-
-void iwl_rx_missed_beacon_notif(struct iwl_priv *priv,
-                               struct iwl_rx_mem_buffer *rxb)
-
-{
-       struct iwl_rx_packet *pkt = rxb_addr(rxb);
-       struct iwl_missed_beacon_notif *missed_beacon;
-
-       missed_beacon = &pkt->u.missed_beacon;
-       if (le32_to_cpu(missed_beacon->consecutive_missed_beacons) >
-           priv->missed_beacon_threshold) {
-               IWL_DEBUG_CALIB(priv,
-                   "missed bcn cnsq %d totl %d rcd %d expctd %d\n",
-                   le32_to_cpu(missed_beacon->consecutive_missed_beacons),
-                   le32_to_cpu(missed_beacon->total_missed_becons),
-                   le32_to_cpu(missed_beacon->num_recvd_beacons),
-                   le32_to_cpu(missed_beacon->num_expected_beacons));
-               if (!test_bit(STATUS_SCANNING, &priv->status))
-                       iwl_init_sensitivity(priv);
-       }
-}
-
-/* Calculate noise level, based on measurements during network silence just
- *   before arriving beacon.  This measurement can be done only if we know
- *   exactly when to expect beacons, therefore only when we're associated. */
-static void iwl_rx_calc_noise(struct iwl_priv *priv)
-{
-       struct statistics_rx_non_phy *rx_info;
-       int num_active_rx = 0;
-       int total_silence = 0;
-       int bcn_silence_a, bcn_silence_b, bcn_silence_c;
-       int last_rx_noise;
-
-       if (priv->cfg->bt_statistics)
-               rx_info = &(priv->_agn.statistics_bt.rx.general.common);
-       else
-               rx_info = &(priv->_agn.statistics.rx.general);
-       bcn_silence_a =
-               le32_to_cpu(rx_info->beacon_silence_rssi_a) & IN_BAND_FILTER;
-       bcn_silence_b =
-               le32_to_cpu(rx_info->beacon_silence_rssi_b) & IN_BAND_FILTER;
-       bcn_silence_c =
-               le32_to_cpu(rx_info->beacon_silence_rssi_c) & IN_BAND_FILTER;
-
-       if (bcn_silence_a) {
-               total_silence += bcn_silence_a;
-               num_active_rx++;
-       }
-       if (bcn_silence_b) {
-               total_silence += bcn_silence_b;
-               num_active_rx++;
-       }
-       if (bcn_silence_c) {
-               total_silence += bcn_silence_c;
-               num_active_rx++;
-       }
-
-       /* Average among active antennas */
-       if (num_active_rx)
-               last_rx_noise = (total_silence / num_active_rx) - 107;
-       else
-               last_rx_noise = IWL_NOISE_MEAS_NOT_AVAILABLE;
-
-       IWL_DEBUG_CALIB(priv, "inband silence a %u, b %u, c %u, dBm %d\n",
-                       bcn_silence_a, bcn_silence_b, bcn_silence_c,
-                       last_rx_noise);
-}
-
-#ifdef CONFIG_IWLWIFI_DEBUGFS
-/*
- *  based on the assumption of all statistics counter are in DWORD
- *  FIXME: This function is for debugging, do not deal with
- *  the case of counters roll-over.
- */
-static void iwl_accumulative_statistics(struct iwl_priv *priv,
-                                       __le32 *stats)
-{
-       int i, size;
-       __le32 *prev_stats;
-       u32 *accum_stats;
-       u32 *delta, *max_delta;
-       struct statistics_general_common *general, *accum_general;
-       struct statistics_tx *tx, *accum_tx;
-
-       if (priv->cfg->bt_statistics) {
-               prev_stats = (__le32 *)&priv->_agn.statistics_bt;
-               accum_stats = (u32 *)&priv->_agn.accum_statistics_bt;
-               size = sizeof(struct iwl_bt_notif_statistics);
-               general = &priv->_agn.statistics_bt.general.common;
-               accum_general = &priv->_agn.accum_statistics_bt.general.common;
-               tx = &priv->_agn.statistics_bt.tx;
-               accum_tx = &priv->_agn.accum_statistics_bt.tx;
-               delta = (u32 *)&priv->_agn.delta_statistics_bt;
-               max_delta = (u32 *)&priv->_agn.max_delta_bt;
-       } else {
-               prev_stats = (__le32 *)&priv->_agn.statistics;
-               accum_stats = (u32 *)&priv->_agn.accum_statistics;
-               size = sizeof(struct iwl_notif_statistics);
-               general = &priv->_agn.statistics.general.common;
-               accum_general = &priv->_agn.accum_statistics.general.common;
-               tx = &priv->_agn.statistics.tx;
-               accum_tx = &priv->_agn.accum_statistics.tx;
-               delta = (u32 *)&priv->_agn.delta_statistics;
-               max_delta = (u32 *)&priv->_agn.max_delta;
-       }
-       for (i = sizeof(__le32); i < size;
-            i += sizeof(__le32), stats++, prev_stats++, delta++,
-            max_delta++, accum_stats++) {
-               if (le32_to_cpu(*stats) > le32_to_cpu(*prev_stats)) {
-                       *delta = (le32_to_cpu(*stats) -
-                               le32_to_cpu(*prev_stats));
-                       *accum_stats += *delta;
-                       if (*delta > *max_delta)
-                               *max_delta = *delta;
-               }
-       }
-
-       /* reset accumulative statistics for "no-counter" type statistics */
-       accum_general->temperature = general->temperature;
-       accum_general->temperature_m = general->temperature_m;
-       accum_general->ttl_timestamp = general->ttl_timestamp;
-       accum_tx->tx_power.ant_a = tx->tx_power.ant_a;
-       accum_tx->tx_power.ant_b = tx->tx_power.ant_b;
-       accum_tx->tx_power.ant_c = tx->tx_power.ant_c;
-}
-#endif
-
-#define REG_RECALIB_PERIOD (60)
-
-/**
- * iwl_good_plcp_health - checks for plcp error.
- *
- * When the plcp error is exceeding the thresholds, reset the radio
- * to improve the throughput.
- */
-bool iwl_good_plcp_health(struct iwl_priv *priv,
-                               struct iwl_rx_packet *pkt)
-{
-       bool rc = true;
-       int combined_plcp_delta;
-       unsigned int plcp_msec;
-       unsigned long plcp_received_jiffies;
-
-       if (priv->cfg->plcp_delta_threshold ==
-           IWL_MAX_PLCP_ERR_THRESHOLD_DISABLE) {
-               IWL_DEBUG_RADIO(priv, "plcp_err check disabled\n");
-               return rc;
-       }
-
-       /*
-        * check for plcp_err and trigger radio reset if it exceeds
-        * the plcp error threshold plcp_delta.
-        */
-       plcp_received_jiffies = jiffies;
-       plcp_msec = jiffies_to_msecs((long) plcp_received_jiffies -
-                                       (long) priv->plcp_jiffies);
-       priv->plcp_jiffies = plcp_received_jiffies;
-       /*
-        * check to make sure plcp_msec is not 0 to prevent division
-        * by zero.
-        */
-       if (plcp_msec) {
-               struct statistics_rx_phy *ofdm;
-               struct statistics_rx_ht_phy *ofdm_ht;
-
-               if (priv->cfg->bt_statistics) {
-                       ofdm = &pkt->u.stats_bt.rx.ofdm;
-                       ofdm_ht = &pkt->u.stats_bt.rx.ofdm_ht;
-                       combined_plcp_delta =
-                          (le32_to_cpu(ofdm->plcp_err) -
-                          le32_to_cpu(priv->_agn.statistics_bt.
-                                      rx.ofdm.plcp_err)) +
-                          (le32_to_cpu(ofdm_ht->plcp_err) -
-                          le32_to_cpu(priv->_agn.statistics_bt.
-                                      rx.ofdm_ht.plcp_err));
-               } else {
-                       ofdm = &pkt->u.stats.rx.ofdm;
-                       ofdm_ht = &pkt->u.stats.rx.ofdm_ht;
-                       combined_plcp_delta =
-                           (le32_to_cpu(ofdm->plcp_err) -
-                           le32_to_cpu(priv->_agn.statistics.
-                                       rx.ofdm.plcp_err)) +
-                           (le32_to_cpu(ofdm_ht->plcp_err) -
-                           le32_to_cpu(priv->_agn.statistics.
-                                       rx.ofdm_ht.plcp_err));
-               }
-
-               if ((combined_plcp_delta > 0) &&
-                   ((combined_plcp_delta * 100) / plcp_msec) >
-                       priv->cfg->plcp_delta_threshold) {
-                       /*
-                        * if plcp_err exceed the threshold,
-                        * the following data is printed in csv format:
-                        *    Text: plcp_err exceeded %d,
-                        *    Received ofdm.plcp_err,
-                        *    Current ofdm.plcp_err,
-                        *    Received ofdm_ht.plcp_err,
-                        *    Current ofdm_ht.plcp_err,
-                        *    combined_plcp_delta,
-                        *    plcp_msec
-                        */
-                       IWL_DEBUG_RADIO(priv, "plcp_err exceeded %u, "
-                                   "%u, %u, %u, %u, %d, %u mSecs\n",
-                                   priv->cfg->plcp_delta_threshold,
-                                   le32_to_cpu(ofdm->plcp_err),
-                                   le32_to_cpu(ofdm->plcp_err),
-                                   le32_to_cpu(ofdm_ht->plcp_err),
-                                   le32_to_cpu(ofdm_ht->plcp_err),
-                                   combined_plcp_delta, plcp_msec);
-
-                       rc = false;
-               }
-       }
-       return rc;
-}
-
-void iwl_rx_statistics(struct iwl_priv *priv,
-                             struct iwl_rx_mem_buffer *rxb)
-{
-       int change;
-       struct iwl_rx_packet *pkt = rxb_addr(rxb);
-
-       if (priv->cfg->bt_statistics) {
-               IWL_DEBUG_RX(priv,
-                            "Statistics notification received (%d vs %d).\n",
-                            (int)sizeof(struct iwl_bt_notif_statistics),
-                            le32_to_cpu(pkt->len_n_flags) &
-                            FH_RSCSR_FRAME_SIZE_MSK);
-
-               change = ((priv->_agn.statistics_bt.general.common.temperature !=
-                          pkt->u.stats_bt.general.common.temperature) ||
-                          ((priv->_agn.statistics_bt.flag &
-                          STATISTICS_REPLY_FLG_HT40_MODE_MSK) !=
-                          (pkt->u.stats_bt.flag &
-                          STATISTICS_REPLY_FLG_HT40_MODE_MSK)));
-#ifdef CONFIG_IWLWIFI_DEBUGFS
-               iwl_accumulative_statistics(priv, (__le32 *)&pkt->u.stats_bt);
-#endif
-
-       } else {
-               IWL_DEBUG_RX(priv,
-                            "Statistics notification received (%d vs %d).\n",
-                            (int)sizeof(struct iwl_notif_statistics),
-                            le32_to_cpu(pkt->len_n_flags) &
-                            FH_RSCSR_FRAME_SIZE_MSK);
-
-               change = ((priv->_agn.statistics.general.common.temperature !=
-                          pkt->u.stats.general.common.temperature) ||
-                          ((priv->_agn.statistics.flag &
-                          STATISTICS_REPLY_FLG_HT40_MODE_MSK) !=
-                          (pkt->u.stats.flag &
-                          STATISTICS_REPLY_FLG_HT40_MODE_MSK)));
-#ifdef CONFIG_IWLWIFI_DEBUGFS
-               iwl_accumulative_statistics(priv, (__le32 *)&pkt->u.stats);
-#endif
-
-       }
-
-       iwl_recover_from_statistics(priv, pkt);
-
-       if (priv->cfg->bt_statistics)
-               memcpy(&priv->_agn.statistics_bt, &pkt->u.stats_bt,
-                       sizeof(priv->_agn.statistics_bt));
-       else
-               memcpy(&priv->_agn.statistics, &pkt->u.stats,
-                       sizeof(priv->_agn.statistics));
-
-       set_bit(STATUS_STATISTICS, &priv->status);
-
-       /* Reschedule the statistics timer to occur in
-        * REG_RECALIB_PERIOD seconds to ensure we get a
-        * thermal update even if the uCode doesn't give
-        * us one */
-       mod_timer(&priv->statistics_periodic, jiffies +
-                 msecs_to_jiffies(REG_RECALIB_PERIOD * 1000));
-
-       if (unlikely(!test_bit(STATUS_SCANNING, &priv->status)) &&
-           (pkt->hdr.cmd == STATISTICS_NOTIFICATION)) {
-               iwl_rx_calc_noise(priv);
-               queue_work(priv->workqueue, &priv->run_time_calib_work);
-       }
-       if (priv->cfg->ops->lib->temp_ops.temperature && change)
-               priv->cfg->ops->lib->temp_ops.temperature(priv);
-}
-
-void iwl_reply_statistics(struct iwl_priv *priv,
-                             struct iwl_rx_mem_buffer *rxb)
-{
-       struct iwl_rx_packet *pkt = rxb_addr(rxb);
-
-       if (le32_to_cpu(pkt->u.stats.flag) & UCODE_STATISTICS_CLEAR_MSK) {
-#ifdef CONFIG_IWLWIFI_DEBUGFS
-               memset(&priv->_agn.accum_statistics, 0,
-                       sizeof(struct iwl_notif_statistics));
-               memset(&priv->_agn.delta_statistics, 0,
-                       sizeof(struct iwl_notif_statistics));
-               memset(&priv->_agn.max_delta, 0,
-                       sizeof(struct iwl_notif_statistics));
-               memset(&priv->_agn.accum_statistics_bt, 0,
-                       sizeof(struct iwl_bt_notif_statistics));
-               memset(&priv->_agn.delta_statistics_bt, 0,
-                       sizeof(struct iwl_bt_notif_statistics));
-               memset(&priv->_agn.max_delta_bt, 0,
-                       sizeof(struct iwl_bt_notif_statistics));
-#endif
-               IWL_DEBUG_RX(priv, "Statistics have been cleared\n");
-       }
-       iwl_rx_statistics(priv, rxb);
-}
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
deleted file mode 100644 (file)
index 69155aa..0000000
+++ /dev/null
@@ -1,1369 +0,0 @@
-/******************************************************************************
- *
- * GPL LICENSE SUMMARY
- *
- * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
- * USA
- *
- * The full GNU General Public License is included in this distribution
- * in the file called LICENSE.GPL.
- *
- * Contact Information:
- *  Intel Linux Wireless <ilw@linux.intel.com>
- * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
- *
- *****************************************************************************/
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/sched.h>
-
-#include "iwl-dev.h"
-#include "iwl-core.h"
-#include "iwl-sta.h"
-#include "iwl-io.h"
-#include "iwl-helpers.h"
-#include "iwl-agn-hw.h"
-#include "iwl-agn.h"
-
-/*
- * mac80211 queues, ACs, hardware queues, FIFOs.
- *
- * Cf. http://wireless.kernel.org/en/developers/Documentation/mac80211/queues
- *
- * Mac80211 uses the following numbers, which we get as from it
- * by way of skb_get_queue_mapping(skb):
- *
- *     VO      0
- *     VI      1
- *     BE      2
- *     BK      3
- *
- *
- * Regular (not A-MPDU) frames are put into hardware queues corresponding
- * to the FIFOs, see comments in iwl-prph.h. Aggregated frames get their
- * own queue per aggregation session (RA/TID combination), such queues are
- * set up to map into FIFOs too, for which we need an AC->FIFO mapping. In
- * order to map frames to the right queue, we also need an AC->hw queue
- * mapping. This is implemented here.
- *
- * Due to the way hw queues are set up (by the hw specific modules like
- * iwl-4965.c, iwl-5000.c etc.), the AC->hw queue mapping is the identity
- * mapping.
- */
-
-static const u8 tid_to_ac[] = {
-       /* this matches the mac80211 numbers */
-       2, 3, 3, 2, 1, 1, 0, 0
-};
-
-static const u8 ac_to_fifo[] = {
-       IWL_TX_FIFO_VO,
-       IWL_TX_FIFO_VI,
-       IWL_TX_FIFO_BE,
-       IWL_TX_FIFO_BK,
-};
-
-static inline int get_fifo_from_ac(u8 ac)
-{
-       return ac_to_fifo[ac];
-}
-
-static inline int get_ac_from_tid(u16 tid)
-{
-       if (likely(tid < ARRAY_SIZE(tid_to_ac)))
-               return tid_to_ac[tid];
-
-       /* no support for TIDs 8-15 yet */
-       return -EINVAL;
-}
-
-static inline int get_fifo_from_tid(u16 tid)
-{
-       if (likely(tid < ARRAY_SIZE(tid_to_ac)))
-               return get_fifo_from_ac(tid_to_ac[tid]);
-
-       /* no support for TIDs 8-15 yet */
-       return -EINVAL;
-}
-
-/**
- * iwlagn_txq_update_byte_cnt_tbl - Set up entry in Tx byte-count array
- */
-void iwlagn_txq_update_byte_cnt_tbl(struct iwl_priv *priv,
-                                           struct iwl_tx_queue *txq,
-                                           u16 byte_cnt)
-{
-       struct iwlagn_scd_bc_tbl *scd_bc_tbl = priv->scd_bc_tbls.addr;
-       int write_ptr = txq->q.write_ptr;
-       int txq_id = txq->q.id;
-       u8 sec_ctl = 0;
-       u8 sta_id = 0;
-       u16 len = byte_cnt + IWL_TX_CRC_SIZE + IWL_TX_DELIMITER_SIZE;
-       __le16 bc_ent;
-
-       WARN_ON(len > 0xFFF || write_ptr >= TFD_QUEUE_SIZE_MAX);
-
-       if (txq_id != IWL_CMD_QUEUE_NUM) {
-               sta_id = txq->cmd[txq->q.write_ptr]->cmd.tx.sta_id;
-               sec_ctl = txq->cmd[txq->q.write_ptr]->cmd.tx.sec_ctl;
-
-               switch (sec_ctl & TX_CMD_SEC_MSK) {
-               case TX_CMD_SEC_CCM:
-                       len += CCMP_MIC_LEN;
-                       break;
-               case TX_CMD_SEC_TKIP:
-                       len += TKIP_ICV_LEN;
-                       break;
-               case TX_CMD_SEC_WEP:
-                       len += WEP_IV_LEN + WEP_ICV_LEN;
-                       break;
-               }
-       }
-
-       bc_ent = cpu_to_le16((len & 0xFFF) | (sta_id << 12));
-
-       scd_bc_tbl[txq_id].tfd_offset[write_ptr] = bc_ent;
-
-       if (write_ptr < TFD_QUEUE_SIZE_BC_DUP)
-               scd_bc_tbl[txq_id].
-                       tfd_offset[TFD_QUEUE_SIZE_MAX + write_ptr] = bc_ent;
-}
-
-void iwlagn_txq_inval_byte_cnt_tbl(struct iwl_priv *priv,
-                                          struct iwl_tx_queue *txq)
-{
-       struct iwlagn_scd_bc_tbl *scd_bc_tbl = priv->scd_bc_tbls.addr;
-       int txq_id = txq->q.id;
-       int read_ptr = txq->q.read_ptr;
-       u8 sta_id = 0;
-       __le16 bc_ent;
-
-       WARN_ON(read_ptr >= TFD_QUEUE_SIZE_MAX);
-
-       if (txq_id != IWL_CMD_QUEUE_NUM)
-               sta_id = txq->cmd[read_ptr]->cmd.tx.sta_id;
-
-       bc_ent = cpu_to_le16(1 | (sta_id << 12));
-       scd_bc_tbl[txq_id].tfd_offset[read_ptr] = bc_ent;
-
-       if (read_ptr < TFD_QUEUE_SIZE_BC_DUP)
-               scd_bc_tbl[txq_id].
-                       tfd_offset[TFD_QUEUE_SIZE_MAX + read_ptr] = bc_ent;
-}
-
-static int iwlagn_tx_queue_set_q2ratid(struct iwl_priv *priv, u16 ra_tid,
-                                       u16 txq_id)
-{
-       u32 tbl_dw_addr;
-       u32 tbl_dw;
-       u16 scd_q2ratid;
-
-       scd_q2ratid = ra_tid & IWL_SCD_QUEUE_RA_TID_MAP_RATID_MSK;
-
-       tbl_dw_addr = priv->scd_base_addr +
-                       IWLAGN_SCD_TRANSLATE_TBL_OFFSET_QUEUE(txq_id);
-
-       tbl_dw = iwl_read_targ_mem(priv, tbl_dw_addr);
-
-       if (txq_id & 0x1)
-               tbl_dw = (scd_q2ratid << 16) | (tbl_dw & 0x0000FFFF);
-       else
-               tbl_dw = scd_q2ratid | (tbl_dw & 0xFFFF0000);
-
-       iwl_write_targ_mem(priv, tbl_dw_addr, tbl_dw);
-
-       return 0;
-}
-
-static void iwlagn_tx_queue_stop_scheduler(struct iwl_priv *priv, u16 txq_id)
-{
-       /* Simply stop the queue, but don't change any configuration;
-        * the SCD_ACT_EN bit is the write-enable mask for the ACTIVE bit. */
-       iwl_write_prph(priv,
-               IWLAGN_SCD_QUEUE_STATUS_BITS(txq_id),
-               (0 << IWLAGN_SCD_QUEUE_STTS_REG_POS_ACTIVE)|
-               (1 << IWLAGN_SCD_QUEUE_STTS_REG_POS_SCD_ACT_EN));
-}
-
-void iwlagn_set_wr_ptrs(struct iwl_priv *priv,
-                               int txq_id, u32 index)
-{
-       iwl_write_direct32(priv, HBUS_TARG_WRPTR,
-                       (index & 0xff) | (txq_id << 8));
-       iwl_write_prph(priv, IWLAGN_SCD_QUEUE_RDPTR(txq_id), index);
-}
-
-void iwlagn_tx_queue_set_status(struct iwl_priv *priv,
-                                       struct iwl_tx_queue *txq,
-                                       int tx_fifo_id, int scd_retry)
-{
-       int txq_id = txq->q.id;
-       int active = test_bit(txq_id, &priv->txq_ctx_active_msk) ? 1 : 0;
-
-       iwl_write_prph(priv, IWLAGN_SCD_QUEUE_STATUS_BITS(txq_id),
-                       (active << IWLAGN_SCD_QUEUE_STTS_REG_POS_ACTIVE) |
-                       (tx_fifo_id << IWLAGN_SCD_QUEUE_STTS_REG_POS_TXF) |
-                       (1 << IWLAGN_SCD_QUEUE_STTS_REG_POS_WSL) |
-                       IWLAGN_SCD_QUEUE_STTS_REG_MSK);
-
-       txq->sched_retry = scd_retry;
-
-       IWL_DEBUG_INFO(priv, "%s %s Queue %d on FIFO %d\n",
-                      active ? "Activate" : "Deactivate",
-                      scd_retry ? "BA" : "AC/CMD", txq_id, tx_fifo_id);
-}
-
-int iwlagn_txq_agg_enable(struct iwl_priv *priv, int txq_id,
-                         int tx_fifo, int sta_id, int tid, u16 ssn_idx)
-{
-       unsigned long flags;
-       u16 ra_tid;
-       int ret;
-
-       if ((IWLAGN_FIRST_AMPDU_QUEUE > txq_id) ||
-           (IWLAGN_FIRST_AMPDU_QUEUE + priv->cfg->num_of_ampdu_queues
-            <= txq_id)) {
-               IWL_WARN(priv,
-                       "queue number out of range: %d, must be %d to %d\n",
-                       txq_id, IWLAGN_FIRST_AMPDU_QUEUE,
-                       IWLAGN_FIRST_AMPDU_QUEUE +
-                       priv->cfg->num_of_ampdu_queues - 1);
-               return -EINVAL;
-       }
-
-       ra_tid = BUILD_RAxTID(sta_id, tid);
-
-       /* Modify device's station table to Tx this TID */
-       ret = iwl_sta_tx_modify_enable_tid(priv, sta_id, tid);
-       if (ret)
-               return ret;
-
-       spin_lock_irqsave(&priv->lock, flags);
-
-       /* Stop this Tx queue before configuring it */
-       iwlagn_tx_queue_stop_scheduler(priv, txq_id);
-
-       /* Map receiver-address / traffic-ID to this queue */
-       iwlagn_tx_queue_set_q2ratid(priv, ra_tid, txq_id);
-
-       /* Set this queue as a chain-building queue */
-       iwl_set_bits_prph(priv, IWLAGN_SCD_QUEUECHAIN_SEL, (1<<txq_id));
-
-       /* enable aggregations for the queue */
-       iwl_set_bits_prph(priv, IWLAGN_SCD_AGGR_SEL, (1<<txq_id));
-
-       /* Place first TFD at index corresponding to start sequence number.
-        * Assumes that ssn_idx is valid (!= 0xFFF) */
-       priv->txq[txq_id].q.read_ptr = (ssn_idx & 0xff);
-       priv->txq[txq_id].q.write_ptr = (ssn_idx & 0xff);
-       iwlagn_set_wr_ptrs(priv, txq_id, ssn_idx);
-
-       /* Set up Tx window size and frame limit for this queue */
-       iwl_write_targ_mem(priv, priv->scd_base_addr +
-                       IWLAGN_SCD_CONTEXT_QUEUE_OFFSET(txq_id) +
-                       sizeof(u32),
-                       ((SCD_WIN_SIZE <<
-                       IWLAGN_SCD_QUEUE_CTX_REG2_WIN_SIZE_POS) &
-                       IWLAGN_SCD_QUEUE_CTX_REG2_WIN_SIZE_MSK) |
-                       ((SCD_FRAME_LIMIT <<
-                       IWLAGN_SCD_QUEUE_CTX_REG2_FRAME_LIMIT_POS) &
-                       IWLAGN_SCD_QUEUE_CTX_REG2_FRAME_LIMIT_MSK));
-
-       iwl_set_bits_prph(priv, IWLAGN_SCD_INTERRUPT_MASK, (1 << txq_id));
-
-       /* Set up Status area in SRAM, map to Tx DMA/FIFO, activate the queue */
-       iwlagn_tx_queue_set_status(priv, &priv->txq[txq_id], tx_fifo, 1);
-
-       spin_unlock_irqrestore(&priv->lock, flags);
-
-       return 0;
-}
-
-int iwlagn_txq_agg_disable(struct iwl_priv *priv, u16 txq_id,
-                          u16 ssn_idx, u8 tx_fifo)
-{
-       if ((IWLAGN_FIRST_AMPDU_QUEUE > txq_id) ||
-           (IWLAGN_FIRST_AMPDU_QUEUE + priv->cfg->num_of_ampdu_queues
-            <= txq_id)) {
-               IWL_ERR(priv,
-                       "queue number out of range: %d, must be %d to %d\n",
-                       txq_id, IWLAGN_FIRST_AMPDU_QUEUE,
-                       IWLAGN_FIRST_AMPDU_QUEUE +
-                       priv->cfg->num_of_ampdu_queues - 1);
-               return -EINVAL;
-       }
-
-       iwlagn_tx_queue_stop_scheduler(priv, txq_id);
-
-       iwl_clear_bits_prph(priv, IWLAGN_SCD_AGGR_SEL, (1 << txq_id));
-
-       priv->txq[txq_id].q.read_ptr = (ssn_idx & 0xff);
-       priv->txq[txq_id].q.write_ptr = (ssn_idx & 0xff);
-       /* supposes that ssn_idx is valid (!= 0xFFF) */
-       iwlagn_set_wr_ptrs(priv, txq_id, ssn_idx);
-
-       iwl_clear_bits_prph(priv, IWLAGN_SCD_INTERRUPT_MASK, (1 << txq_id));
-       iwl_txq_ctx_deactivate(priv, txq_id);
-       iwlagn_tx_queue_set_status(priv, &priv->txq[txq_id], tx_fifo, 0);
-
-       return 0;
-}
-
-/*
- * Activate/Deactivate Tx DMA/FIFO channels according tx fifos mask
- * must be called under priv->lock and mac access
- */
-void iwlagn_txq_set_sched(struct iwl_priv *priv, u32 mask)
-{
-       iwl_write_prph(priv, IWLAGN_SCD_TXFACT, mask);
-}
-
-static inline int get_queue_from_ac(u16 ac)
-{
-       return ac;
-}
-
-/*
- * handle build REPLY_TX command notification.
- */
-static void iwlagn_tx_cmd_build_basic(struct iwl_priv *priv,
-                                 struct iwl_tx_cmd *tx_cmd,
-                                 struct ieee80211_tx_info *info,
-                                 struct ieee80211_hdr *hdr,
-                                 u8 std_id)
-{
-       __le16 fc = hdr->frame_control;
-       __le32 tx_flags = tx_cmd->tx_flags;
-
-       tx_cmd->stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE;
-       if (!(info->flags & IEEE80211_TX_CTL_NO_ACK)) {
-               tx_flags |= TX_CMD_FLG_ACK_MSK;
-               if (ieee80211_is_mgmt(fc))
-                       tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK;
-               if (ieee80211_is_probe_resp(fc) &&
-                   !(le16_to_cpu(hdr->seq_ctrl) & 0xf))
-                       tx_flags |= TX_CMD_FLG_TSF_MSK;
-       } else {
-               tx_flags &= (~TX_CMD_FLG_ACK_MSK);
-               tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK;
-       }
-
-       if (ieee80211_is_back_req(fc))
-               tx_flags |= TX_CMD_FLG_ACK_MSK | TX_CMD_FLG_IMM_BA_RSP_MASK;
-
-
-       tx_cmd->sta_id = std_id;
-       if (ieee80211_has_morefrags(fc))
-               tx_flags |= TX_CMD_FLG_MORE_FRAG_MSK;
-
-       if (ieee80211_is_data_qos(fc)) {
-               u8 *qc = ieee80211_get_qos_ctl(hdr);
-               tx_cmd->tid_tspec = qc[0] & 0xf;
-               tx_flags &= ~TX_CMD_FLG_SEQ_CTL_MSK;
-       } else {
-               tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK;
-       }
-
-       priv->cfg->ops->utils->tx_cmd_protection(priv, info, fc, &tx_flags);
-
-       tx_flags &= ~(TX_CMD_FLG_ANT_SEL_MSK);
-       if (ieee80211_is_mgmt(fc)) {
-               if (ieee80211_is_assoc_req(fc) || ieee80211_is_reassoc_req(fc))
-                       tx_cmd->timeout.pm_frame_timeout = cpu_to_le16(3);
-               else
-                       tx_cmd->timeout.pm_frame_timeout = cpu_to_le16(2);
-       } else {
-               tx_cmd->timeout.pm_frame_timeout = 0;
-       }
-
-       tx_cmd->driver_txop = 0;
-       tx_cmd->tx_flags = tx_flags;
-       tx_cmd->next_frame_len = 0;
-}
-
-#define RTS_DFAULT_RETRY_LIMIT         60
-
-static void iwlagn_tx_cmd_build_rate(struct iwl_priv *priv,
-                             struct iwl_tx_cmd *tx_cmd,
-                             struct ieee80211_tx_info *info,
-                             __le16 fc)
-{
-       u32 rate_flags;
-       int rate_idx;
-       u8 rts_retry_limit;
-       u8 data_retry_limit;
-       u8 rate_plcp;
-
-       /* Set retry limit on DATA packets and Probe Responses*/
-       if (ieee80211_is_probe_resp(fc))
-               data_retry_limit = 3;
-       else
-               data_retry_limit = IWLAGN_DEFAULT_TX_RETRY;
-       tx_cmd->data_retry_limit = data_retry_limit;
-
-       /* Set retry limit on RTS packets */
-       rts_retry_limit = RTS_DFAULT_RETRY_LIMIT;
-       if (data_retry_limit < rts_retry_limit)
-               rts_retry_limit = data_retry_limit;
-       tx_cmd->rts_retry_limit = rts_retry_limit;
-
-       /* DATA packets will use the uCode station table for rate/antenna
-        * selection */
-       if (ieee80211_is_data(fc)) {
-               tx_cmd->initial_rate_index = 0;
-               tx_cmd->tx_flags |= TX_CMD_FLG_STA_RATE_MSK;
-               return;
-       }
-
-       /**
-        * If the current TX rate stored in mac80211 has the MCS bit set, it's
-        * not really a TX rate.  Thus, we use the lowest supported rate for
-        * this band.  Also use the lowest supported rate if the stored rate
-        * index is invalid.
-        */
-       rate_idx = info->control.rates[0].idx;
-       if (info->control.rates[0].flags & IEEE80211_TX_RC_MCS ||
-                       (rate_idx < 0) || (rate_idx > IWL_RATE_COUNT_LEGACY))
-               rate_idx = rate_lowest_index(&priv->bands[info->band],
-                               info->control.sta);
-       /* For 5 GHZ band, remap mac80211 rate indices into driver indices */
-       if (info->band == IEEE80211_BAND_5GHZ)
-               rate_idx += IWL_FIRST_OFDM_RATE;
-       /* Get PLCP rate for tx_cmd->rate_n_flags */
-       rate_plcp = iwl_rates[rate_idx].plcp;
-       /* Zero out flags for this packet */
-       rate_flags = 0;
-
-       /* Set CCK flag as needed */
-       if ((rate_idx >= IWL_FIRST_CCK_RATE) && (rate_idx <= IWL_LAST_CCK_RATE))
-               rate_flags |= RATE_MCS_CCK_MSK;
-
-       /* Set up antennas */
-       priv->mgmt_tx_ant = iwl_toggle_tx_ant(priv, priv->mgmt_tx_ant,
-                                             priv->hw_params.valid_tx_ant);
-       rate_flags |= iwl_ant_idx_to_flags(priv->mgmt_tx_ant);
-
-       /* Set the rate in the TX cmd */
-       tx_cmd->rate_n_flags = iwl_hw_set_rate_n_flags(rate_plcp, rate_flags);
-}
-
-static void iwlagn_tx_cmd_build_hwcrypto(struct iwl_priv *priv,
-                                     struct ieee80211_tx_info *info,
-                                     struct iwl_tx_cmd *tx_cmd,
-                                     struct sk_buff *skb_frag,
-                                     int sta_id)
-{
-       struct ieee80211_key_conf *keyconf = info->control.hw_key;
-
-       switch (keyconf->alg) {
-       case ALG_CCMP:
-               tx_cmd->sec_ctl = TX_CMD_SEC_CCM;
-               memcpy(tx_cmd->key, keyconf->key, keyconf->keylen);
-               if (info->flags & IEEE80211_TX_CTL_AMPDU)
-                       tx_cmd->tx_flags |= TX_CMD_FLG_AGG_CCMP_MSK;
-               IWL_DEBUG_TX(priv, "tx_cmd with AES hwcrypto\n");
-               break;
-
-       case ALG_TKIP:
-               tx_cmd->sec_ctl = TX_CMD_SEC_TKIP;
-               ieee80211_get_tkip_key(keyconf, skb_frag,
-                       IEEE80211_TKIP_P2_KEY, tx_cmd->key);
-               IWL_DEBUG_TX(priv, "tx_cmd with tkip hwcrypto\n");
-               break;
-
-       case ALG_WEP:
-               tx_cmd->sec_ctl |= (TX_CMD_SEC_WEP |
-                       (keyconf->keyidx & TX_CMD_SEC_MSK) << TX_CMD_SEC_SHIFT);
-
-               if (keyconf->keylen == WEP_KEY_LEN_128)
-                       tx_cmd->sec_ctl |= TX_CMD_SEC_KEY128;
-
-               memcpy(&tx_cmd->key[3], keyconf->key, keyconf->keylen);
-
-               IWL_DEBUG_TX(priv, "Configuring packet for WEP encryption "
-                            "with key %d\n", keyconf->keyidx);
-               break;
-
-       default:
-               IWL_ERR(priv, "Unknown encode alg %d\n", keyconf->alg);
-               break;
-       }
-}
-
-/*
- * start REPLY_TX command process
- */
-int iwlagn_tx_skb(struct iwl_priv *priv, struct sk_buff *skb)
-{
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
-       struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-       struct ieee80211_sta *sta = info->control.sta;
-       struct iwl_station_priv *sta_priv = NULL;
-       struct iwl_tx_queue *txq;
-       struct iwl_queue *q;
-       struct iwl_device_cmd *out_cmd;
-       struct iwl_cmd_meta *out_meta;
-       struct iwl_tx_cmd *tx_cmd;
-       int swq_id, txq_id;
-       dma_addr_t phys_addr;
-       dma_addr_t txcmd_phys;
-       dma_addr_t scratch_phys;
-       u16 len, len_org, firstlen, secondlen;
-       u16 seq_number = 0;
-       __le16 fc;
-       u8 hdr_len;
-       u8 sta_id;
-       u8 wait_write_ptr = 0;
-       u8 tid = 0;
-       u8 *qc = NULL;
-       unsigned long flags;
-
-       spin_lock_irqsave(&priv->lock, flags);
-       if (iwl_is_rfkill(priv)) {
-               IWL_DEBUG_DROP(priv, "Dropping - RF KILL\n");
-               goto drop_unlock;
-       }
-
-       fc = hdr->frame_control;
-
-#ifdef CONFIG_IWLWIFI_DEBUG
-       if (ieee80211_is_auth(fc))
-               IWL_DEBUG_TX(priv, "Sending AUTH frame\n");
-       else if (ieee80211_is_assoc_req(fc))
-               IWL_DEBUG_TX(priv, "Sending ASSOC frame\n");
-       else if (ieee80211_is_reassoc_req(fc))
-               IWL_DEBUG_TX(priv, "Sending REASSOC frame\n");
-#endif
-
-       hdr_len = ieee80211_hdrlen(fc);
-
-       /* Find index into station table for destination station */
-       sta_id = iwl_sta_id_or_broadcast(priv, info->control.sta);
-       if (sta_id == IWL_INVALID_STATION) {
-               IWL_DEBUG_DROP(priv, "Dropping - INVALID STATION: %pM\n",
-                              hdr->addr1);
-               goto drop_unlock;
-       }
-
-       IWL_DEBUG_TX(priv, "station Id %d\n", sta_id);
-
-       if (sta)
-               sta_priv = (void *)sta->drv_priv;
-
-       if (sta_priv && sta_id != priv->hw_params.bcast_sta_id &&
-           sta_priv->asleep) {
-               WARN_ON(!(info->flags & IEEE80211_TX_CTL_PSPOLL_RESPONSE));
-               /*
-                * This sends an asynchronous command to the device,
-                * but we can rely on it being processed before the
-                * next frame is processed -- and the next frame to
-                * this station is the one that will consume this
-                * counter.
-                * For now set the counter to just 1 since we do not
-                * support uAPSD yet.
-                */
-               iwl_sta_modify_sleep_tx_count(priv, sta_id, 1);
-       }
-
-       txq_id = get_queue_from_ac(skb_get_queue_mapping(skb));
-
-       /* irqs already disabled/saved above when locking priv->lock */
-       spin_lock(&priv->sta_lock);
-
-       if (ieee80211_is_data_qos(fc)) {
-               qc = ieee80211_get_qos_ctl(hdr);
-               tid = qc[0] & IEEE80211_QOS_CTL_TID_MASK;
-               if (WARN_ON_ONCE(tid >= MAX_TID_COUNT)) {
-                       spin_unlock(&priv->sta_lock);
-                       goto drop_unlock;
-               }
-               seq_number = priv->stations[sta_id].tid[tid].seq_number;
-               seq_number &= IEEE80211_SCTL_SEQ;
-               hdr->seq_ctrl = hdr->seq_ctrl &
-                               cpu_to_le16(IEEE80211_SCTL_FRAG);
-               hdr->seq_ctrl |= cpu_to_le16(seq_number);
-               seq_number += 0x10;
-               /* aggregation is on for this <sta,tid> */
-               if (info->flags & IEEE80211_TX_CTL_AMPDU &&
-                   priv->stations[sta_id].tid[tid].agg.state == IWL_AGG_ON) {
-                       txq_id = priv->stations[sta_id].tid[tid].agg.txq_id;
-               }
-       }
-
-       txq = &priv->txq[txq_id];
-       swq_id = txq->swq_id;
-       q = &txq->q;
-
-       if (unlikely(iwl_queue_space(q) < q->high_mark)) {
-               spin_unlock(&priv->sta_lock);
-               goto drop_unlock;
-       }
-
-       if (ieee80211_is_data_qos(fc)) {
-               priv->stations[sta_id].tid[tid].tfds_in_queue++;
-               if (!ieee80211_has_morefrags(fc))
-                       priv->stations[sta_id].tid[tid].seq_number = seq_number;
-       }
-
-       spin_unlock(&priv->sta_lock);
-
-       /* Set up driver data for this TFD */
-       memset(&(txq->txb[q->write_ptr]), 0, sizeof(struct iwl_tx_info));
-       txq->txb[q->write_ptr].skb = skb;
-
-       /* Set up first empty entry in queue's array of Tx/cmd buffers */
-       out_cmd = txq->cmd[q->write_ptr];
-       out_meta = &txq->meta[q->write_ptr];
-       tx_cmd = &out_cmd->cmd.tx;
-       memset(&out_cmd->hdr, 0, sizeof(out_cmd->hdr));
-       memset(tx_cmd, 0, sizeof(struct iwl_tx_cmd));
-
-       /*
-        * Set up the Tx-command (not MAC!) header.
-        * Store the chosen Tx queue and TFD index within the sequence field;
-        * after Tx, uCode's Tx response will return this value so driver can
-        * locate the frame within the tx queue and do post-tx processing.
-        */
-       out_cmd->hdr.cmd = REPLY_TX;
-       out_cmd->hdr.sequence = cpu_to_le16((u16)(QUEUE_TO_SEQ(txq_id) |
-                               INDEX_TO_SEQ(q->write_ptr)));
-
-       /* Copy MAC header from skb into command buffer */
-       memcpy(tx_cmd->hdr, hdr, hdr_len);
-
-
-       /* Total # bytes to be transmitted */
-       len = (u16)skb->len;
-       tx_cmd->len = cpu_to_le16(len);
-
-       if (info->control.hw_key)
-               iwlagn_tx_cmd_build_hwcrypto(priv, info, tx_cmd, skb, sta_id);
-
-       /* TODO need this for burst mode later on */
-       iwlagn_tx_cmd_build_basic(priv, tx_cmd, info, hdr, sta_id);
-       iwl_dbg_log_tx_data_frame(priv, len, hdr);
-
-       iwlagn_tx_cmd_build_rate(priv, tx_cmd, info, fc);
-
-       iwl_update_stats(priv, true, fc, len);
-       /*
-        * Use the first empty entry in this queue's command buffer array
-        * to contain the Tx command and MAC header concatenated together
-        * (payload data will be in another buffer).
-        * Size of this varies, due to varying MAC header length.
-        * If end is not dword aligned, we'll have 2 extra bytes at the end
-        * of the MAC header (device reads on dword boundaries).
-        * We'll tell device about this padding later.
-        */
-       len = sizeof(struct iwl_tx_cmd) +
-               sizeof(struct iwl_cmd_header) + hdr_len;
-
-       len_org = len;
-       firstlen = len = (len + 3) & ~3;
-
-       if (len_org != len)
-               len_org = 1;
-       else
-               len_org = 0;
-
-       /* Tell NIC about any 2-byte padding after MAC header */
-       if (len_org)
-               tx_cmd->tx_flags |= TX_CMD_FLG_MH_PAD_MSK;
-
-       /* Physical address of this Tx command's header (not MAC header!),
-        * within command buffer array. */
-       txcmd_phys = pci_map_single(priv->pci_dev,
-                                   &out_cmd->hdr, len,
-                                   PCI_DMA_BIDIRECTIONAL);
-       dma_unmap_addr_set(out_meta, mapping, txcmd_phys);
-       dma_unmap_len_set(out_meta, len, len);
-       /* Add buffer containing Tx command and MAC(!) header to TFD's
-        * first entry */
-       priv->cfg->ops->lib->txq_attach_buf_to_tfd(priv, txq,
-                                                  txcmd_phys, len, 1, 0);
-
-       if (!ieee80211_has_morefrags(hdr->frame_control)) {
-               txq->need_update = 1;
-       } else {
-               wait_write_ptr = 1;
-               txq->need_update = 0;
-       }
-
-       /* Set up TFD's 2nd entry to point directly to remainder of skb,
-        * if any (802.11 null frames have no payload). */
-       secondlen = len = skb->len - hdr_len;
-       if (len) {
-               phys_addr = pci_map_single(priv->pci_dev, skb->data + hdr_len,
-                                          len, PCI_DMA_TODEVICE);
-               priv->cfg->ops->lib->txq_attach_buf_to_tfd(priv, txq,
-                                                          phys_addr, len,
-                                                          0, 0);
-       }
-
-       scratch_phys = txcmd_phys + sizeof(struct iwl_cmd_header) +
-                               offsetof(struct iwl_tx_cmd, scratch);
-
-       len = sizeof(struct iwl_tx_cmd) +
-               sizeof(struct iwl_cmd_header) + hdr_len;
-       /* take back ownership of DMA buffer to enable update */
-       pci_dma_sync_single_for_cpu(priv->pci_dev, txcmd_phys,
-                                   len, PCI_DMA_BIDIRECTIONAL);
-       tx_cmd->dram_lsb_ptr = cpu_to_le32(scratch_phys);
-       tx_cmd->dram_msb_ptr = iwl_get_dma_hi_addr(scratch_phys);
-
-       IWL_DEBUG_TX(priv, "sequence nr = 0X%x\n",
-                    le16_to_cpu(out_cmd->hdr.sequence));
-       IWL_DEBUG_TX(priv, "tx_flags = 0X%x\n", le32_to_cpu(tx_cmd->tx_flags));
-       iwl_print_hex_dump(priv, IWL_DL_TX, (u8 *)tx_cmd, sizeof(*tx_cmd));
-       iwl_print_hex_dump(priv, IWL_DL_TX, (u8 *)tx_cmd->hdr, hdr_len);
-
-       /* Set up entry for this TFD in Tx byte-count array */
-       if (info->flags & IEEE80211_TX_CTL_AMPDU)
-               priv->cfg->ops->lib->txq_update_byte_cnt_tbl(priv, txq,
-                                                    le16_to_cpu(tx_cmd->len));
-
-       pci_dma_sync_single_for_device(priv->pci_dev, txcmd_phys,
-                                      len, PCI_DMA_BIDIRECTIONAL);
-
-       trace_iwlwifi_dev_tx(priv,
-                            &((struct iwl_tfd *)txq->tfds)[txq->q.write_ptr],
-                            sizeof(struct iwl_tfd),
-                            &out_cmd->hdr, firstlen,
-                            skb->data + hdr_len, secondlen);
-
-       /* Tell device the write index *just past* this latest filled TFD */
-       q->write_ptr = iwl_queue_inc_wrap(q->write_ptr, q->n_bd);
-       iwl_txq_update_write_ptr(priv, txq);
-       spin_unlock_irqrestore(&priv->lock, flags);
-
-       /*
-        * At this point the frame is "transmitted" successfully
-        * and we will get a TX status notification eventually,
-        * regardless of the value of ret. "ret" only indicates
-        * whether or not we should update the write pointer.
-        */
-
-       /* avoid atomic ops if it isn't an associated client */
-       if (sta_priv && sta_priv->client)
-               atomic_inc(&sta_priv->pending_frames);
-
-       if ((iwl_queue_space(q) < q->high_mark) && priv->mac80211_registered) {
-               if (wait_write_ptr) {
-                       spin_lock_irqsave(&priv->lock, flags);
-                       txq->need_update = 1;
-                       iwl_txq_update_write_ptr(priv, txq);
-                       spin_unlock_irqrestore(&priv->lock, flags);
-               } else {
-                       iwl_stop_queue(priv, txq->swq_id);
-               }
-       }
-
-       return 0;
-
-drop_unlock:
-       spin_unlock_irqrestore(&priv->lock, flags);
-       return -1;
-}
-
-static inline int iwlagn_alloc_dma_ptr(struct iwl_priv *priv,
-                                   struct iwl_dma_ptr *ptr, size_t size)
-{
-       ptr->addr = dma_alloc_coherent(&priv->pci_dev->dev, size, &ptr->dma,
-                                      GFP_KERNEL);
-       if (!ptr->addr)
-               return -ENOMEM;
-       ptr->size = size;
-       return 0;
-}
-
-static inline void iwlagn_free_dma_ptr(struct iwl_priv *priv,
-                                   struct iwl_dma_ptr *ptr)
-{
-       if (unlikely(!ptr->addr))
-               return;
-
-       dma_free_coherent(&priv->pci_dev->dev, ptr->size, ptr->addr, ptr->dma);
-       memset(ptr, 0, sizeof(*ptr));
-}
-
-/**
- * iwlagn_hw_txq_ctx_free - Free TXQ Context
- *
- * Destroy all TX DMA queues and structures
- */
-void iwlagn_hw_txq_ctx_free(struct iwl_priv *priv)
-{
-       int txq_id;
-
-       /* Tx queues */
-       if (priv->txq) {
-               for (txq_id = 0; txq_id < priv->hw_params.max_txq_num; txq_id++)
-                       if (txq_id == IWL_CMD_QUEUE_NUM)
-                               iwl_cmd_queue_free(priv);
-                       else
-                               iwl_tx_queue_free(priv, txq_id);
-       }
-       iwlagn_free_dma_ptr(priv, &priv->kw);
-
-       iwlagn_free_dma_ptr(priv, &priv->scd_bc_tbls);
-
-       /* free tx queue structure */
-       iwl_free_txq_mem(priv);
-}
-
-/**
- * iwlagn_txq_ctx_alloc - allocate TX queue context
- * Allocate all Tx DMA structures and initialize them
- *
- * @param priv
- * @return error code
- */
-int iwlagn_txq_ctx_alloc(struct iwl_priv *priv)
-{
-       int ret;
-       int txq_id, slots_num;
-       unsigned long flags;
-
-       /* Free all tx/cmd queues and keep-warm buffer */
-       iwlagn_hw_txq_ctx_free(priv);
-
-       ret = iwlagn_alloc_dma_ptr(priv, &priv->scd_bc_tbls,
-                               priv->hw_params.scd_bc_tbls_size);
-       if (ret) {
-               IWL_ERR(priv, "Scheduler BC Table allocation failed\n");
-               goto error_bc_tbls;
-       }
-       /* Alloc keep-warm buffer */
-       ret = iwlagn_alloc_dma_ptr(priv, &priv->kw, IWL_KW_SIZE);
-       if (ret) {
-               IWL_ERR(priv, "Keep Warm allocation failed\n");
-               goto error_kw;
-       }
-
-       /* allocate tx queue structure */
-       ret = iwl_alloc_txq_mem(priv);
-       if (ret)
-               goto error;
-
-       spin_lock_irqsave(&priv->lock, flags);
-
-       /* Turn off all Tx DMA fifos */
-       priv->cfg->ops->lib->txq_set_sched(priv, 0);
-
-       /* Tell NIC where to find the "keep warm" buffer */
-       iwl_write_direct32(priv, FH_KW_MEM_ADDR_REG, priv->kw.dma >> 4);
-
-       spin_unlock_irqrestore(&priv->lock, flags);
-
-       /* Alloc and init all Tx queues, including the command queue (#4) */
-       for (txq_id = 0; txq_id < priv->hw_params.max_txq_num; txq_id++) {
-               slots_num = (txq_id == IWL_CMD_QUEUE_NUM) ?
-                                       TFD_CMD_SLOTS : TFD_TX_CMD_SLOTS;
-               ret = iwl_tx_queue_init(priv, &priv->txq[txq_id], slots_num,
-                                      txq_id);
-               if (ret) {
-                       IWL_ERR(priv, "Tx %d queue init failed\n", txq_id);
-                       goto error;
-               }
-       }
-
-       return ret;
-
- error:
-       iwlagn_hw_txq_ctx_free(priv);
-       iwlagn_free_dma_ptr(priv, &priv->kw);
- error_kw:
-       iwlagn_free_dma_ptr(priv, &priv->scd_bc_tbls);
- error_bc_tbls:
-       return ret;
-}
-
-void iwlagn_txq_ctx_reset(struct iwl_priv *priv)
-{
-       int txq_id, slots_num;
-       unsigned long flags;
-
-       spin_lock_irqsave(&priv->lock, flags);
-
-       /* Turn off all Tx DMA fifos */
-       priv->cfg->ops->lib->txq_set_sched(priv, 0);
-
-       /* Tell NIC where to find the "keep warm" buffer */
-       iwl_write_direct32(priv, FH_KW_MEM_ADDR_REG, priv->kw.dma >> 4);
-
-       spin_unlock_irqrestore(&priv->lock, flags);
-
-       /* Alloc and init all Tx queues, including the command queue (#4) */
-       for (txq_id = 0; txq_id < priv->hw_params.max_txq_num; txq_id++) {
-               slots_num = txq_id == IWL_CMD_QUEUE_NUM ?
-                           TFD_CMD_SLOTS : TFD_TX_CMD_SLOTS;
-               iwl_tx_queue_reset(priv, &priv->txq[txq_id], slots_num, txq_id);
-       }
-}
-
-/**
- * iwlagn_txq_ctx_stop - Stop all Tx DMA channels
- */
-void iwlagn_txq_ctx_stop(struct iwl_priv *priv)
-{
-       int ch;
-       unsigned long flags;
-
-       /* Turn off all Tx DMA fifos */
-       spin_lock_irqsave(&priv->lock, flags);
-
-       priv->cfg->ops->lib->txq_set_sched(priv, 0);
-
-       /* Stop each Tx DMA channel, and wait for it to be idle */
-       for (ch = 0; ch < priv->hw_params.dma_chnl_num; ch++) {
-               iwl_write_direct32(priv, FH_TCSR_CHNL_TX_CONFIG_REG(ch), 0x0);
-               if (iwl_poll_direct_bit(priv, FH_TSSR_TX_STATUS_REG,
-                                   FH_TSSR_TX_STATUS_REG_MSK_CHNL_IDLE(ch),
-                                   1000))
-                       IWL_ERR(priv, "Failing on timeout while stopping"
-                           " DMA channel %d [0x%08x]", ch,
-                           iwl_read_direct32(priv, FH_TSSR_TX_STATUS_REG));
-       }
-       spin_unlock_irqrestore(&priv->lock, flags);
-}
-
-/*
- * Find first available (lowest unused) Tx Queue, mark it "active".
- * Called only when finding queue for aggregation.
- * Should never return anything < 7, because they should already
- * be in use as EDCA AC (0-3), Command (4), reserved (5, 6)
- */
-static int iwlagn_txq_ctx_activate_free(struct iwl_priv *priv)
-{
-       int txq_id;
-
-       for (txq_id = 0; txq_id < priv->hw_params.max_txq_num; txq_id++)
-               if (!test_and_set_bit(txq_id, &priv->txq_ctx_active_msk))
-                       return txq_id;
-       return -1;
-}
-
-int iwlagn_tx_agg_start(struct iwl_priv *priv, struct ieee80211_vif *vif,
-                       struct ieee80211_sta *sta, u16 tid, u16 *ssn)
-{
-       int sta_id;
-       int tx_fifo;
-       int txq_id;
-       int ret;
-       unsigned long flags;
-       struct iwl_tid_data *tid_data;
-
-       tx_fifo = get_fifo_from_tid(tid);
-       if (unlikely(tx_fifo < 0))
-               return tx_fifo;
-
-       IWL_WARN(priv, "%s on ra = %pM tid = %d\n",
-                       __func__, sta->addr, tid);
-
-       sta_id = iwl_sta_id(sta);
-       if (sta_id == IWL_INVALID_STATION) {
-               IWL_ERR(priv, "Start AGG on invalid station\n");
-               return -ENXIO;
-       }
-       if (unlikely(tid >= MAX_TID_COUNT))
-               return -EINVAL;
-
-       if (priv->stations[sta_id].tid[tid].agg.state != IWL_AGG_OFF) {
-               IWL_ERR(priv, "Start AGG when state is not IWL_AGG_OFF !\n");
-               return -ENXIO;
-       }
-
-       txq_id = iwlagn_txq_ctx_activate_free(priv);
-       if (txq_id == -1) {
-               IWL_ERR(priv, "No free aggregation queue available\n");
-               return -ENXIO;
-       }
-
-       spin_lock_irqsave(&priv->sta_lock, flags);
-       tid_data = &priv->stations[sta_id].tid[tid];
-       *ssn = SEQ_TO_SN(tid_data->seq_number);
-       tid_data->agg.txq_id = txq_id;
-       priv->txq[txq_id].swq_id = iwl_virtual_agg_queue_num(get_ac_from_tid(tid), txq_id);
-       spin_unlock_irqrestore(&priv->sta_lock, flags);
-
-       ret = priv->cfg->ops->lib->txq_agg_enable(priv, txq_id, tx_fifo,
-                                                 sta_id, tid, *ssn);
-       if (ret)
-               return ret;
-
-       spin_lock_irqsave(&priv->sta_lock, flags);
-       tid_data = &priv->stations[sta_id].tid[tid];
-       if (tid_data->tfds_in_queue == 0) {
-               IWL_DEBUG_HT(priv, "HW queue is empty\n");
-               tid_data->agg.state = IWL_AGG_ON;
-               ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-       } else {
-               IWL_DEBUG_HT(priv, "HW queue is NOT empty: %d packets in HW queue\n",
-                            tid_data->tfds_in_queue);
-               tid_data->agg.state = IWL_EMPTYING_HW_QUEUE_ADDBA;
-       }
-       spin_unlock_irqrestore(&priv->sta_lock, flags);
-       return ret;
-}
-
-int iwlagn_tx_agg_stop(struct iwl_priv *priv, struct ieee80211_vif *vif,
-                      struct ieee80211_sta *sta, u16 tid)
-{
-       int tx_fifo_id, txq_id, sta_id, ssn = -1;
-       struct iwl_tid_data *tid_data;
-       int write_ptr, read_ptr;
-       unsigned long flags;
-
-       tx_fifo_id = get_fifo_from_tid(tid);
-       if (unlikely(tx_fifo_id < 0))
-               return tx_fifo_id;
-
-       sta_id = iwl_sta_id(sta);
-
-       if (sta_id == IWL_INVALID_STATION) {
-               IWL_ERR(priv, "Invalid station for AGG tid %d\n", tid);
-               return -ENXIO;
-       }
-
-       spin_lock_irqsave(&priv->sta_lock, flags);
-
-       if (priv->stations[sta_id].tid[tid].agg.state ==
-                               IWL_EMPTYING_HW_QUEUE_ADDBA) {
-               IWL_DEBUG_HT(priv, "AGG stop before setup done\n");
-               ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-               priv->stations[sta_id].tid[tid].agg.state = IWL_AGG_OFF;
-               spin_unlock_irqrestore(&priv->sta_lock, flags);
-               return 0;
-       }
-
-       if (priv->stations[sta_id].tid[tid].agg.state != IWL_AGG_ON)
-               IWL_WARN(priv, "Stopping AGG while state not ON or starting\n");
-
-       tid_data = &priv->stations[sta_id].tid[tid];
-       ssn = (tid_data->seq_number & IEEE80211_SCTL_SEQ) >> 4;
-       txq_id = tid_data->agg.txq_id;
-       write_ptr = priv->txq[txq_id].q.write_ptr;
-       read_ptr = priv->txq[txq_id].q.read_ptr;
-
-       /* The queue is not empty */
-       if (write_ptr != read_ptr) {
-               IWL_DEBUG_HT(priv, "Stopping a non empty AGG HW QUEUE\n");
-               priv->stations[sta_id].tid[tid].agg.state =
-                               IWL_EMPTYING_HW_QUEUE_DELBA;
-               spin_unlock_irqrestore(&priv->sta_lock, flags);
-               return 0;
-       }
-
-       IWL_DEBUG_HT(priv, "HW queue is empty\n");
-       priv->stations[sta_id].tid[tid].agg.state = IWL_AGG_OFF;
-
-       /* do not restore/save irqs */
-       spin_unlock(&priv->sta_lock);
-       spin_lock(&priv->lock);
-
-       /*
-        * the only reason this call can fail is queue number out of range,
-        * which can happen if uCode is reloaded and all the station
-        * information are lost. if it is outside the range, there is no need
-        * to deactivate the uCode queue, just return "success" to allow
-        *  mac80211 to clean up it own data.
-        */
-       priv->cfg->ops->lib->txq_agg_disable(priv, txq_id, ssn,
-                                                  tx_fifo_id);
-       spin_unlock_irqrestore(&priv->lock, flags);
-
-       ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-
-       return 0;
-}
-
-int iwlagn_txq_check_empty(struct iwl_priv *priv,
-                          int sta_id, u8 tid, int txq_id)
-{
-       struct iwl_queue *q = &priv->txq[txq_id].q;
-       u8 *addr = priv->stations[sta_id].sta.sta.addr;
-       struct iwl_tid_data *tid_data = &priv->stations[sta_id].tid[tid];
-
-       lockdep_assert_held(&priv->sta_lock);
-
-       switch (priv->stations[sta_id].tid[tid].agg.state) {
-       case IWL_EMPTYING_HW_QUEUE_DELBA:
-               /* We are reclaiming the last packet of the */
-               /* aggregated HW queue */
-               if ((txq_id  == tid_data->agg.txq_id) &&
-                   (q->read_ptr == q->write_ptr)) {
-                       u16 ssn = SEQ_TO_SN(tid_data->seq_number);
-                       int tx_fifo = get_fifo_from_tid(tid);
-                       IWL_DEBUG_HT(priv, "HW queue empty: continue DELBA flow\n");
-                       priv->cfg->ops->lib->txq_agg_disable(priv, txq_id,
-                                                            ssn, tx_fifo);
-                       tid_data->agg.state = IWL_AGG_OFF;
-                       ieee80211_stop_tx_ba_cb_irqsafe(priv->vif, addr, tid);
-               }
-               break;
-       case IWL_EMPTYING_HW_QUEUE_ADDBA:
-               /* We are reclaiming the last packet of the queue */
-               if (tid_data->tfds_in_queue == 0) {
-                       IWL_DEBUG_HT(priv, "HW queue empty: continue ADDBA flow\n");
-                       tid_data->agg.state = IWL_AGG_ON;
-                       ieee80211_start_tx_ba_cb_irqsafe(priv->vif, addr, tid);
-               }
-               break;
-       }
-
-       return 0;
-}
-
-static void iwlagn_tx_status(struct iwl_priv *priv, struct sk_buff *skb)
-{
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
-       struct ieee80211_sta *sta;
-       struct iwl_station_priv *sta_priv;
-
-       rcu_read_lock();
-       sta = ieee80211_find_sta(priv->vif, hdr->addr1);
-       if (sta) {
-               sta_priv = (void *)sta->drv_priv;
-               /* avoid atomic ops if this isn't a client */
-               if (sta_priv->client &&
-                   atomic_dec_return(&sta_priv->pending_frames) == 0)
-                       ieee80211_sta_block_awake(priv->hw, sta, false);
-       }
-       rcu_read_unlock();
-
-       ieee80211_tx_status_irqsafe(priv->hw, skb);
-}
-
-int iwlagn_tx_queue_reclaim(struct iwl_priv *priv, int txq_id, int index)
-{
-       struct iwl_tx_queue *txq = &priv->txq[txq_id];
-       struct iwl_queue *q = &txq->q;
-       struct iwl_tx_info *tx_info;
-       int nfreed = 0;
-       struct ieee80211_hdr *hdr;
-
-       if ((index >= q->n_bd) || (iwl_queue_used(q, index) == 0)) {
-               IWL_ERR(priv, "Read index for DMA queue txq id (%d), index %d, "
-                         "is out of range [0-%d] %d %d.\n", txq_id,
-                         index, q->n_bd, q->write_ptr, q->read_ptr);
-               return 0;
-       }
-
-       for (index = iwl_queue_inc_wrap(index, q->n_bd);
-            q->read_ptr != index;
-            q->read_ptr = iwl_queue_inc_wrap(q->read_ptr, q->n_bd)) {
-
-               tx_info = &txq->txb[txq->q.read_ptr];
-               iwlagn_tx_status(priv, tx_info->skb);
-
-               hdr = (struct ieee80211_hdr *)tx_info->skb->data;
-               if (hdr && ieee80211_is_data_qos(hdr->frame_control))
-                       nfreed++;
-               tx_info->skb = NULL;
-
-               if (priv->cfg->ops->lib->txq_inval_byte_cnt_tbl)
-                       priv->cfg->ops->lib->txq_inval_byte_cnt_tbl(priv, txq);
-
-               priv->cfg->ops->lib->txq_free_tfd(priv, txq);
-       }
-       return nfreed;
-}
-
-/**
- * iwlagn_tx_status_reply_compressed_ba - Update tx status from block-ack
- *
- * Go through block-ack's bitmap of ACK'd frames, update driver's record of
- * ACK vs. not.  This gets sent to mac80211, then to rate scaling algo.
- */
-static int iwlagn_tx_status_reply_compressed_ba(struct iwl_priv *priv,
-                                struct iwl_ht_agg *agg,
-                                struct iwl_compressed_ba_resp *ba_resp)
-
-{
-       int i, sh, ack;
-       u16 seq_ctl = le16_to_cpu(ba_resp->seq_ctl);
-       u16 scd_flow = le16_to_cpu(ba_resp->scd_flow);
-       u64 bitmap, sent_bitmap;
-       int successes = 0;
-       struct ieee80211_tx_info *info;
-
-       if (unlikely(!agg->wait_for_ba))  {
-               IWL_ERR(priv, "Received BA when not expected\n");
-               return -EINVAL;
-       }
-
-       /* Mark that the expected block-ack response arrived */
-       agg->wait_for_ba = 0;
-       IWL_DEBUG_TX_REPLY(priv, "BA %d %d\n", agg->start_idx, ba_resp->seq_ctl);
-
-       /* Calculate shift to align block-ack bits with our Tx window bits */
-       sh = agg->start_idx - SEQ_TO_INDEX(seq_ctl >> 4);
-       if (sh < 0) /* tbw something is wrong with indices */
-               sh += 0x100;
-
-       /* don't use 64-bit values for now */
-       bitmap = le64_to_cpu(ba_resp->bitmap) >> sh;
-
-       if (agg->frame_count > (64 - sh)) {
-               IWL_DEBUG_TX_REPLY(priv, "more frames than bitmap size");
-               return -1;
-       }
-
-       /* check for success or failure according to the
-        * transmitted bitmap and block-ack bitmap */
-       sent_bitmap = bitmap & agg->bitmap;
-
-       /* For each frame attempted in aggregation,
-        * update driver's record of tx frame's status. */
-       i = 0;
-       while (sent_bitmap) {
-               ack = sent_bitmap & 1ULL;
-               successes += ack;
-               IWL_DEBUG_TX_REPLY(priv, "%s ON i=%d idx=%d raw=%d\n",
-                       ack ? "ACK" : "NACK", i, (agg->start_idx + i) & 0xff,
-                       agg->start_idx + i);
-               sent_bitmap >>= 1;
-               ++i;
-       }
-
-       info = IEEE80211_SKB_CB(priv->txq[scd_flow].txb[agg->start_idx].skb);
-       memset(&info->status, 0, sizeof(info->status));
-       info->flags |= IEEE80211_TX_STAT_ACK;
-       info->flags |= IEEE80211_TX_STAT_AMPDU;
-       info->status.ampdu_ack_len = successes;
-       info->status.ampdu_len = agg->frame_count;
-       iwlagn_hwrate_to_tx_control(priv, agg->rate_n_flags, info);
-
-       IWL_DEBUG_TX_REPLY(priv, "Bitmap %llx\n", (unsigned long long)bitmap);
-
-       return 0;
-}
-
-/**
- * translate ucode response to mac80211 tx status control values
- */
-void iwlagn_hwrate_to_tx_control(struct iwl_priv *priv, u32 rate_n_flags,
-                                 struct ieee80211_tx_info *info)
-{
-       struct ieee80211_tx_rate *r = &info->control.rates[0];
-
-       info->antenna_sel_tx =
-               ((rate_n_flags & RATE_MCS_ANT_ABC_MSK) >> RATE_MCS_ANT_POS);
-       if (rate_n_flags & RATE_MCS_HT_MSK)
-               r->flags |= IEEE80211_TX_RC_MCS;
-       if (rate_n_flags & RATE_MCS_GF_MSK)
-               r->flags |= IEEE80211_TX_RC_GREEN_FIELD;
-       if (rate_n_flags & RATE_MCS_HT40_MSK)
-               r->flags |= IEEE80211_TX_RC_40_MHZ_WIDTH;
-       if (rate_n_flags & RATE_MCS_DUP_MSK)
-               r->flags |= IEEE80211_TX_RC_DUP_DATA;
-       if (rate_n_flags & RATE_MCS_SGI_MSK)
-               r->flags |= IEEE80211_TX_RC_SHORT_GI;
-       r->idx = iwlagn_hwrate_to_mac80211_idx(rate_n_flags, info->band);
-}
-
-/**
- * iwlagn_rx_reply_compressed_ba - Handler for REPLY_COMPRESSED_BA
- *
- * Handles block-acknowledge notification from device, which reports success
- * of frames sent via aggregation.
- */
-void iwlagn_rx_reply_compressed_ba(struct iwl_priv *priv,
-                                          struct iwl_rx_mem_buffer *rxb)
-{
-       struct iwl_rx_packet *pkt = rxb_addr(rxb);
-       struct iwl_compressed_ba_resp *ba_resp = &pkt->u.compressed_ba;
-       struct iwl_tx_queue *txq = NULL;
-       struct iwl_ht_agg *agg;
-       int index;
-       int sta_id;
-       int tid;
-       unsigned long flags;
-
-       /* "flow" corresponds to Tx queue */
-       u16 scd_flow = le16_to_cpu(ba_resp->scd_flow);
-
-       /* "ssn" is start of block-ack Tx window, corresponds to index
-        * (in Tx queue's circular buffer) of first TFD/frame in window */
-       u16 ba_resp_scd_ssn = le16_to_cpu(ba_resp->scd_ssn);
-
-       if (scd_flow >= priv->hw_params.max_txq_num) {
-               IWL_ERR(priv,
-                       "BUG_ON scd_flow is bigger than number of queues\n");
-               return;
-       }
-
-       txq = &priv->txq[scd_flow];
-       sta_id = ba_resp->sta_id;
-       tid = ba_resp->tid;
-       agg = &priv->stations[sta_id].tid[tid].agg;
-       if (unlikely(agg->txq_id != scd_flow)) {
-               /*
-                * FIXME: this is a uCode bug which need to be addressed,
-                * log the information and return for now!
-                * since it is possible happen very often and in order
-                * not to fill the syslog, don't enable the logging by default
-                */
-               IWL_DEBUG_TX_REPLY(priv,
-                       "BA scd_flow %d does not match txq_id %d\n",
-                       scd_flow, agg->txq_id);
-               return;
-       }
-
-       /* Find index just before block-ack window */
-       index = iwl_queue_dec_wrap(ba_resp_scd_ssn & 0xff, txq->q.n_bd);
-
-       spin_lock_irqsave(&priv->sta_lock, flags);
-
-       IWL_DEBUG_TX_REPLY(priv, "REPLY_COMPRESSED_BA [%d] Received from %pM, "
-                          "sta_id = %d\n",
-                          agg->wait_for_ba,
-                          (u8 *) &ba_resp->sta_addr_lo32,
-                          ba_resp->sta_id);
-       IWL_DEBUG_TX_REPLY(priv, "TID = %d, SeqCtl = %d, bitmap = 0x%llx, scd_flow = "
-                          "%d, scd_ssn = %d\n",
-                          ba_resp->tid,
-                          ba_resp->seq_ctl,
-                          (unsigned long long)le64_to_cpu(ba_resp->bitmap),
-                          ba_resp->scd_flow,
-                          ba_resp->scd_ssn);
-       IWL_DEBUG_TX_REPLY(priv, "DAT start_idx = %d, bitmap = 0x%llx\n",
-                          agg->start_idx,
-                          (unsigned long long)agg->bitmap);
-
-       /* Update driver's record of ACK vs. not for each frame in window */
-       iwlagn_tx_status_reply_compressed_ba(priv, agg, ba_resp);
-
-       /* Release all TFDs before the SSN, i.e. all TFDs in front of
-        * block-ack window (we assume that they've been successfully
-        * transmitted ... if not, it's too late anyway). */
-       if (txq->q.read_ptr != (ba_resp_scd_ssn & 0xff)) {
-               /* calculate mac80211 ampdu sw queue to wake */
-               int freed = iwlagn_tx_queue_reclaim(priv, scd_flow, index);
-               iwl_free_tfds_in_queue(priv, sta_id, tid, freed);
-
-               if ((iwl_queue_space(&txq->q) > txq->q.low_mark) &&
-                   priv->mac80211_registered &&
-                   (agg->state != IWL_EMPTYING_HW_QUEUE_DELBA))
-                       iwl_wake_queue(priv, txq->swq_id);
-
-               iwlagn_txq_check_empty(priv, sta_id, tid, scd_flow);
-       }
-
-       spin_unlock_irqrestore(&priv->sta_lock, flags);
-}
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-ucode.c b/drivers/net/wireless/iwlwifi/iwl-agn-ucode.c
deleted file mode 100644 (file)
index 6f77441..0000000
+++ /dev/null
@@ -1,548 +0,0 @@
-/******************************************************************************
- *
- * GPL LICENSE SUMMARY
- *
- * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
- * USA
- *
- * The full GNU General Public License is included in this distribution
- * in the file called LICENSE.GPL.
- *
- * Contact Information:
- *  Intel Linux Wireless <ilw@linux.intel.com>
- * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
- *
- *****************************************************************************/
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/sched.h>
-
-#include "iwl-dev.h"
-#include "iwl-core.h"
-#include "iwl-io.h"
-#include "iwl-helpers.h"
-#include "iwl-agn-hw.h"
-#include "iwl-agn.h"
-
-static const s8 iwlagn_default_queue_to_tx_fifo[] = {
-       IWL_TX_FIFO_VO,
-       IWL_TX_FIFO_VI,
-       IWL_TX_FIFO_BE,
-       IWL_TX_FIFO_BK,
-       IWLAGN_CMD_FIFO_NUM,
-       IWL_TX_FIFO_UNUSED,
-       IWL_TX_FIFO_UNUSED,
-       IWL_TX_FIFO_UNUSED,
-       IWL_TX_FIFO_UNUSED,
-       IWL_TX_FIFO_UNUSED,
-};
-
-static struct iwl_wimax_coex_event_entry cu_priorities[COEX_NUM_OF_EVENTS] = {
-       {COEX_CU_UNASSOC_IDLE_RP, COEX_CU_UNASSOC_IDLE_WP,
-        0, COEX_UNASSOC_IDLE_FLAGS},
-       {COEX_CU_UNASSOC_MANUAL_SCAN_RP, COEX_CU_UNASSOC_MANUAL_SCAN_WP,
-        0, COEX_UNASSOC_MANUAL_SCAN_FLAGS},
-       {COEX_CU_UNASSOC_AUTO_SCAN_RP, COEX_CU_UNASSOC_AUTO_SCAN_WP,
-        0, COEX_UNASSOC_AUTO_SCAN_FLAGS},
-       {COEX_CU_CALIBRATION_RP, COEX_CU_CALIBRATION_WP,
-        0, COEX_CALIBRATION_FLAGS},
-       {COEX_CU_PERIODIC_CALIBRATION_RP, COEX_CU_PERIODIC_CALIBRATION_WP,
-        0, COEX_PERIODIC_CALIBRATION_FLAGS},
-       {COEX_CU_CONNECTION_ESTAB_RP, COEX_CU_CONNECTION_ESTAB_WP,
-        0, COEX_CONNECTION_ESTAB_FLAGS},
-       {COEX_CU_ASSOCIATED_IDLE_RP, COEX_CU_ASSOCIATED_IDLE_WP,
-        0, COEX_ASSOCIATED_IDLE_FLAGS},
-       {COEX_CU_ASSOC_MANUAL_SCAN_RP, COEX_CU_ASSOC_MANUAL_SCAN_WP,
-        0, COEX_ASSOC_MANUAL_SCAN_FLAGS},
-       {COEX_CU_ASSOC_AUTO_SCAN_RP, COEX_CU_ASSOC_AUTO_SCAN_WP,
-        0, COEX_ASSOC_AUTO_SCAN_FLAGS},
-       {COEX_CU_ASSOC_ACTIVE_LEVEL_RP, COEX_CU_ASSOC_ACTIVE_LEVEL_WP,
-        0, COEX_ASSOC_ACTIVE_LEVEL_FLAGS},
-       {COEX_CU_RF_ON_RP, COEX_CU_RF_ON_WP, 0, COEX_CU_RF_ON_FLAGS},
-       {COEX_CU_RF_OFF_RP, COEX_CU_RF_OFF_WP, 0, COEX_RF_OFF_FLAGS},
-       {COEX_CU_STAND_ALONE_DEBUG_RP, COEX_CU_STAND_ALONE_DEBUG_WP,
-        0, COEX_STAND_ALONE_DEBUG_FLAGS},
-       {COEX_CU_IPAN_ASSOC_LEVEL_RP, COEX_CU_IPAN_ASSOC_LEVEL_WP,
-        0, COEX_IPAN_ASSOC_LEVEL_FLAGS},
-       {COEX_CU_RSRVD1_RP, COEX_CU_RSRVD1_WP, 0, COEX_RSRVD1_FLAGS},
-       {COEX_CU_RSRVD2_RP, COEX_CU_RSRVD2_WP, 0, COEX_RSRVD2_FLAGS}
-};
-
-/*
- * ucode
- */
-static int iwlagn_load_section(struct iwl_priv *priv, const char *name,
-                               struct fw_desc *image, u32 dst_addr)
-{
-       dma_addr_t phy_addr = image->p_addr;
-       u32 byte_cnt = image->len;
-       int ret;
-
-       priv->ucode_write_complete = 0;
-
-       iwl_write_direct32(priv,
-               FH_TCSR_CHNL_TX_CONFIG_REG(FH_SRVC_CHNL),
-               FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_PAUSE);
-
-       iwl_write_direct32(priv,
-               FH_SRVC_CHNL_SRAM_ADDR_REG(FH_SRVC_CHNL), dst_addr);
-
-       iwl_write_direct32(priv,
-               FH_TFDIB_CTRL0_REG(FH_SRVC_CHNL),
-               phy_addr & FH_MEM_TFDIB_DRAM_ADDR_LSB_MSK);
-
-       iwl_write_direct32(priv,
-               FH_TFDIB_CTRL1_REG(FH_SRVC_CHNL),
-               (iwl_get_dma_hi_addr(phy_addr)
-                       << FH_MEM_TFDIB_REG1_ADDR_BITSHIFT) | byte_cnt);
-
-       iwl_write_direct32(priv,
-               FH_TCSR_CHNL_TX_BUF_STS_REG(FH_SRVC_CHNL),
-               1 << FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_NUM |
-               1 << FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_IDX |
-               FH_TCSR_CHNL_TX_BUF_STS_REG_VAL_TFDB_VALID);
-
-       iwl_write_direct32(priv,
-               FH_TCSR_CHNL_TX_CONFIG_REG(FH_SRVC_CHNL),
-               FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_ENABLE       |
-               FH_TCSR_TX_CONFIG_REG_VAL_DMA_CREDIT_DISABLE    |
-               FH_TCSR_TX_CONFIG_REG_VAL_CIRQ_HOST_ENDTFD);
-
-       IWL_DEBUG_INFO(priv, "%s uCode section being loaded...\n", name);
-       ret = wait_event_interruptible_timeout(priv->wait_command_queue,
-                                       priv->ucode_write_complete, 5 * HZ);
-       if (ret == -ERESTARTSYS) {
-               IWL_ERR(priv, "Could not load the %s uCode section due "
-                       "to interrupt\n", name);
-               return ret;
-       }
-       if (!ret) {
-               IWL_ERR(priv, "Could not load the %s uCode section\n",
-                       name);
-               return -ETIMEDOUT;
-       }
-
-       return 0;
-}
-
-static int iwlagn_load_given_ucode(struct iwl_priv *priv,
-               struct fw_desc *inst_image,
-               struct fw_desc *data_image)
-{
-       int ret = 0;
-
-       ret = iwlagn_load_section(priv, "INST", inst_image,
-                                  IWLAGN_RTC_INST_LOWER_BOUND);
-       if (ret)
-               return ret;
-
-       return iwlagn_load_section(priv, "DATA", data_image,
-                                   IWLAGN_RTC_DATA_LOWER_BOUND);
-}
-
-int iwlagn_load_ucode(struct iwl_priv *priv)
-{
-       int ret = 0;
-
-       /* check whether init ucode should be loaded, or rather runtime ucode */
-       if (priv->ucode_init.len && (priv->ucode_type == UCODE_NONE)) {
-               IWL_DEBUG_INFO(priv, "Init ucode found. Loading init ucode...\n");
-               ret = iwlagn_load_given_ucode(priv,
-                       &priv->ucode_init, &priv->ucode_init_data);
-               if (!ret) {
-                       IWL_DEBUG_INFO(priv, "Init ucode load complete.\n");
-                       priv->ucode_type = UCODE_INIT;
-               }
-       } else {
-               IWL_DEBUG_INFO(priv, "Init ucode not found, or already loaded. "
-                       "Loading runtime ucode...\n");
-               ret = iwlagn_load_given_ucode(priv,
-                       &priv->ucode_code, &priv->ucode_data);
-               if (!ret) {
-                       IWL_DEBUG_INFO(priv, "Runtime ucode load complete.\n");
-                       priv->ucode_type = UCODE_RT;
-               }
-       }
-
-       return ret;
-}
-
-/*
- *  Calibration
- */
-static int iwlagn_set_Xtal_calib(struct iwl_priv *priv)
-{
-       struct iwl_calib_xtal_freq_cmd cmd;
-       __le16 *xtal_calib =
-               (__le16 *)iwl_eeprom_query_addr(priv, EEPROM_XTAL);
-
-       cmd.hdr.op_code = IWL_PHY_CALIBRATE_CRYSTAL_FRQ_CMD;
-       cmd.hdr.first_group = 0;
-       cmd.hdr.groups_num = 1;
-       cmd.hdr.data_valid = 1;
-       cmd.cap_pin1 = le16_to_cpu(xtal_calib[0]);
-       cmd.cap_pin2 = le16_to_cpu(xtal_calib[1]);
-       return iwl_calib_set(&priv->calib_results[IWL_CALIB_XTAL],
-                            (u8 *)&cmd, sizeof(cmd));
-}
-
-static int iwlagn_send_calib_cfg(struct iwl_priv *priv)
-{
-       struct iwl_calib_cfg_cmd calib_cfg_cmd;
-       struct iwl_host_cmd cmd = {
-               .id = CALIBRATION_CFG_CMD,
-               .len = sizeof(struct iwl_calib_cfg_cmd),
-               .data = &calib_cfg_cmd,
-       };
-
-       memset(&calib_cfg_cmd, 0, sizeof(calib_cfg_cmd));
-       calib_cfg_cmd.ucd_calib_cfg.once.is_enable = IWL_CALIB_INIT_CFG_ALL;
-       calib_cfg_cmd.ucd_calib_cfg.once.start = IWL_CALIB_INIT_CFG_ALL;
-       calib_cfg_cmd.ucd_calib_cfg.once.send_res = IWL_CALIB_INIT_CFG_ALL;
-       calib_cfg_cmd.ucd_calib_cfg.flags = IWL_CALIB_INIT_CFG_ALL;
-
-       return iwl_send_cmd(priv, &cmd);
-}
-
-void iwlagn_rx_calib_result(struct iwl_priv *priv,
-                            struct iwl_rx_mem_buffer *rxb)
-{
-       struct iwl_rx_packet *pkt = rxb_addr(rxb);
-       struct iwl_calib_hdr *hdr = (struct iwl_calib_hdr *)pkt->u.raw;
-       int len = le32_to_cpu(pkt->len_n_flags) & FH_RSCSR_FRAME_SIZE_MSK;
-       int index;
-
-       /* reduce the size of the length field itself */
-       len -= 4;
-
-       /* Define the order in which the results will be sent to the runtime
-        * uCode. iwl_send_calib_results sends them in a row according to
-        * their index. We sort them here
-        */
-       switch (hdr->op_code) {
-       case IWL_PHY_CALIBRATE_DC_CMD:
-               index = IWL_CALIB_DC;
-               break;
-       case IWL_PHY_CALIBRATE_LO_CMD:
-               index = IWL_CALIB_LO;
-               break;
-       case IWL_PHY_CALIBRATE_TX_IQ_CMD:
-               index = IWL_CALIB_TX_IQ;
-               break;
-       case IWL_PHY_CALIBRATE_TX_IQ_PERD_CMD:
-               index = IWL_CALIB_TX_IQ_PERD;
-               break;
-       case IWL_PHY_CALIBRATE_BASE_BAND_CMD:
-               index = IWL_CALIB_BASE_BAND;
-               break;
-       default:
-               IWL_ERR(priv, "Unknown calibration notification %d\n",
-                         hdr->op_code);
-               return;
-       }
-       iwl_calib_set(&priv->calib_results[index], pkt->u.raw, len);
-}
-
-void iwlagn_rx_calib_complete(struct iwl_priv *priv,
-                              struct iwl_rx_mem_buffer *rxb)
-{
-       IWL_DEBUG_INFO(priv, "Init. calibration is completed, restarting fw.\n");
-       queue_work(priv->workqueue, &priv->restart);
-}
-
-void iwlagn_init_alive_start(struct iwl_priv *priv)
-{
-       int ret = 0;
-
-       /* Check alive response for "valid" sign from uCode */
-       if (priv->card_alive_init.is_valid != UCODE_VALID_OK) {
-               /* We had an error bringing up the hardware, so take it
-                * all the way back down so we can try again */
-               IWL_DEBUG_INFO(priv, "Initialize Alive failed.\n");
-               goto restart;
-       }
-
-       /* initialize uCode was loaded... verify inst image.
-        * This is a paranoid check, because we would not have gotten the
-        * "initialize" alive if code weren't properly loaded.  */
-       if (iwl_verify_ucode(priv)) {
-               /* Runtime instruction load was bad;
-                * take it all the way back down so we can try again */
-               IWL_DEBUG_INFO(priv, "Bad \"initialize\" uCode load.\n");
-               goto restart;
-       }
-
-       ret = priv->cfg->ops->lib->alive_notify(priv);
-       if (ret) {
-               IWL_WARN(priv,
-                       "Could not complete ALIVE transition: %d\n", ret);
-               goto restart;
-       }
-
-       iwlagn_send_calib_cfg(priv);
-       return;
-
-restart:
-       /* real restart (first load init_ucode) */
-       queue_work(priv->workqueue, &priv->restart);
-}
-
-static int iwlagn_send_wimax_coex(struct iwl_priv *priv)
-{
-       struct iwl_wimax_coex_cmd coex_cmd;
-
-       if (priv->cfg->support_wimax_coexist) {
-               /* UnMask wake up src at associated sleep */
-               coex_cmd.flags = COEX_FLAGS_ASSOC_WA_UNMASK_MSK;
-
-               /* UnMask wake up src at unassociated sleep */
-               coex_cmd.flags |= COEX_FLAGS_UNASSOC_WA_UNMASK_MSK;
-               memcpy(coex_cmd.sta_prio, cu_priorities,
-                       sizeof(struct iwl_wimax_coex_event_entry) *
-                        COEX_NUM_OF_EVENTS);
-
-               /* enabling the coexistence feature */
-               coex_cmd.flags |= COEX_FLAGS_COEX_ENABLE_MSK;
-
-               /* enabling the priorities tables */
-               coex_cmd.flags |= COEX_FLAGS_STA_TABLE_VALID_MSK;
-       } else {
-               /* coexistence is disabled */
-               memset(&coex_cmd, 0, sizeof(coex_cmd));
-       }
-       return iwl_send_cmd_pdu(priv, COEX_PRIORITY_TABLE_CMD,
-                               sizeof(coex_cmd), &coex_cmd);
-}
-
-int iwlagn_alive_notify(struct iwl_priv *priv)
-{
-       u32 a;
-       unsigned long flags;
-       int i, chan;
-       u32 reg_val;
-
-       spin_lock_irqsave(&priv->lock, flags);
-
-       priv->scd_base_addr = iwl_read_prph(priv, IWLAGN_SCD_SRAM_BASE_ADDR);
-       a = priv->scd_base_addr + IWLAGN_SCD_CONTEXT_DATA_OFFSET;
-       for (; a < priv->scd_base_addr + IWLAGN_SCD_TX_STTS_BITMAP_OFFSET;
-               a += 4)
-               iwl_write_targ_mem(priv, a, 0);
-       for (; a < priv->scd_base_addr + IWLAGN_SCD_TRANSLATE_TBL_OFFSET;
-               a += 4)
-               iwl_write_targ_mem(priv, a, 0);
-       for (; a < priv->scd_base_addr +
-              IWLAGN_SCD_TRANSLATE_TBL_OFFSET_QUEUE(priv->hw_params.max_txq_num); a += 4)
-               iwl_write_targ_mem(priv, a, 0);
-
-       iwl_write_prph(priv, IWLAGN_SCD_DRAM_BASE_ADDR,
-                      priv->scd_bc_tbls.dma >> 10);
-
-       /* Enable DMA channel */
-       for (chan = 0; chan < FH50_TCSR_CHNL_NUM ; chan++)
-               iwl_write_direct32(priv, FH_TCSR_CHNL_TX_CONFIG_REG(chan),
-                               FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_ENABLE |
-                               FH_TCSR_TX_CONFIG_REG_VAL_DMA_CREDIT_ENABLE);
-
-       /* Update FH chicken bits */
-       reg_val = iwl_read_direct32(priv, FH_TX_CHICKEN_BITS_REG);
-       iwl_write_direct32(priv, FH_TX_CHICKEN_BITS_REG,
-                          reg_val | FH_TX_CHICKEN_BITS_SCD_AUTO_RETRY_EN);
-
-       iwl_write_prph(priv, IWLAGN_SCD_QUEUECHAIN_SEL,
-               IWLAGN_SCD_QUEUECHAIN_SEL_ALL(priv->hw_params.max_txq_num));
-       iwl_write_prph(priv, IWLAGN_SCD_AGGR_SEL, 0);
-
-       /* initiate the queues */
-       for (i = 0; i < priv->hw_params.max_txq_num; i++) {
-               iwl_write_prph(priv, IWLAGN_SCD_QUEUE_RDPTR(i), 0);
-               iwl_write_direct32(priv, HBUS_TARG_WRPTR, 0 | (i << 8));
-               iwl_write_targ_mem(priv, priv->scd_base_addr +
-                               IWLAGN_SCD_CONTEXT_QUEUE_OFFSET(i), 0);
-               iwl_write_targ_mem(priv, priv->scd_base_addr +
-                               IWLAGN_SCD_CONTEXT_QUEUE_OFFSET(i) +
-                               sizeof(u32),
-                               ((SCD_WIN_SIZE <<
-                               IWLAGN_SCD_QUEUE_CTX_REG2_WIN_SIZE_POS) &
-                               IWLAGN_SCD_QUEUE_CTX_REG2_WIN_SIZE_MSK) |
-                               ((SCD_FRAME_LIMIT <<
-                               IWLAGN_SCD_QUEUE_CTX_REG2_FRAME_LIMIT_POS) &
-                               IWLAGN_SCD_QUEUE_CTX_REG2_FRAME_LIMIT_MSK));
-       }
-
-       iwl_write_prph(priv, IWLAGN_SCD_INTERRUPT_MASK,
-                       IWL_MASK(0, priv->hw_params.max_txq_num));
-
-       /* Activate all Tx DMA/FIFO channels */
-       priv->cfg->ops->lib->txq_set_sched(priv, IWL_MASK(0, 7));
-
-       iwlagn_set_wr_ptrs(priv, IWL_CMD_QUEUE_NUM, 0);
-
-       /* make sure all queue are not stopped */
-       memset(&priv->queue_stopped[0], 0, sizeof(priv->queue_stopped));
-       for (i = 0; i < 4; i++)
-               atomic_set(&priv->queue_stop_count[i], 0);
-
-       /* reset to 0 to enable all the queue first */
-       priv->txq_ctx_active_msk = 0;
-       /* map qos queues to fifos one-to-one */
-       BUILD_BUG_ON(ARRAY_SIZE(iwlagn_default_queue_to_tx_fifo) != 10);
-
-       for (i = 0; i < ARRAY_SIZE(iwlagn_default_queue_to_tx_fifo); i++) {
-               int ac = iwlagn_default_queue_to_tx_fifo[i];
-
-               iwl_txq_ctx_activate(priv, i);
-
-               if (ac == IWL_TX_FIFO_UNUSED)
-                       continue;
-
-               iwlagn_tx_queue_set_status(priv, &priv->txq[i], ac, 0);
-       }
-
-       spin_unlock_irqrestore(&priv->lock, flags);
-
-       iwlagn_send_wimax_coex(priv);
-
-       iwlagn_set_Xtal_calib(priv);
-       iwl_send_calib_results(priv);
-
-       return 0;
-}
-
-
-/**
- * iwl_verify_inst_sparse - verify runtime uCode image in card vs. host,
- *   using sample data 100 bytes apart.  If these sample points are good,
- *   it's a pretty good bet that everything between them is good, too.
- */
-static int iwlcore_verify_inst_sparse(struct iwl_priv *priv, __le32 *image, u32 len)
-{
-       u32 val;
-       int ret = 0;
-       u32 errcnt = 0;
-       u32 i;
-
-       IWL_DEBUG_INFO(priv, "ucode inst image size is %u\n", len);
-
-       for (i = 0; i < len; i += 100, image += 100/sizeof(u32)) {
-               /* read data comes through single port, auto-incr addr */
-               /* NOTE: Use the debugless read so we don't flood kernel log
-                * if IWL_DL_IO is set */
-               iwl_write_direct32(priv, HBUS_TARG_MEM_RADDR,
-                       i + IWLAGN_RTC_INST_LOWER_BOUND);
-               val = _iwl_read_direct32(priv, HBUS_TARG_MEM_RDAT);
-               if (val != le32_to_cpu(*image)) {
-                       ret = -EIO;
-                       errcnt++;
-                       if (errcnt >= 3)
-                               break;
-               }
-       }
-
-       return ret;
-}
-
-/**
- * iwlcore_verify_inst_full - verify runtime uCode image in card vs. host,
- *     looking at all data.
- */
-static int iwl_verify_inst_full(struct iwl_priv *priv, __le32 *image,
-                                u32 len)
-{
-       u32 val;
-       u32 save_len = len;
-       int ret = 0;
-       u32 errcnt;
-
-       IWL_DEBUG_INFO(priv, "ucode inst image size is %u\n", len);
-
-       iwl_write_direct32(priv, HBUS_TARG_MEM_RADDR,
-                          IWLAGN_RTC_INST_LOWER_BOUND);
-
-       errcnt = 0;
-       for (; len > 0; len -= sizeof(u32), image++) {
-               /* read data comes through single port, auto-incr addr */
-               /* NOTE: Use the debugless read so we don't flood kernel log
-                * if IWL_DL_IO is set */
-               val = _iwl_read_direct32(priv, HBUS_TARG_MEM_RDAT);
-               if (val != le32_to_cpu(*image)) {
-                       IWL_ERR(priv, "uCode INST section is invalid at "
-                                 "offset 0x%x, is 0x%x, s/b 0x%x\n",
-                                 save_len - len, val, le32_to_cpu(*image));
-                       ret = -EIO;
-                       errcnt++;
-                       if (errcnt >= 20)
-                               break;
-               }
-       }
-
-       if (!errcnt)
-               IWL_DEBUG_INFO(priv,
-                   "ucode image in INSTRUCTION memory is good\n");
-
-       return ret;
-}
-
-/**
- * iwl_verify_ucode - determine which instruction image is in SRAM,
- *    and verify its contents
- */
-int iwl_verify_ucode(struct iwl_priv *priv)
-{
-       __le32 *image;
-       u32 len;
-       int ret;
-
-       /* Try bootstrap */
-       image = (__le32 *)priv->ucode_boot.v_addr;
-       len = priv->ucode_boot.len;
-       ret = iwlcore_verify_inst_sparse(priv, image, len);
-       if (!ret) {
-               IWL_DEBUG_INFO(priv, "Bootstrap uCode is good in inst SRAM\n");
-               return 0;
-       }
-
-       /* Try initialize */
-       image = (__le32 *)priv->ucode_init.v_addr;
-       len = priv->ucode_init.len;
-       ret = iwlcore_verify_inst_sparse(priv, image, len);
-       if (!ret) {
-               IWL_DEBUG_INFO(priv, "Initialize uCode is good in inst SRAM\n");
-               return 0;
-       }
-
-       /* Try runtime/protocol */
-       image = (__le32 *)priv->ucode_code.v_addr;
-       len = priv->ucode_code.len;
-       ret = iwlcore_verify_inst_sparse(priv, image, len);
-       if (!ret) {
-               IWL_DEBUG_INFO(priv, "Runtime uCode is good in inst SRAM\n");
-               return 0;
-       }
-
-       IWL_ERR(priv, "NO VALID UCODE IMAGE IN INSTRUCTION SRAM!!\n");
-
-       /* Since nothing seems to match, show first several data entries in
-        * instruction SRAM, so maybe visual inspection will give a clue.
-        * Selection of bootstrap image (vs. other images) is arbitrary. */
-       image = (__le32 *)priv->ucode_boot.v_addr;
-       len = priv->ucode_boot.len;
-       ret = iwl_verify_inst_full(priv, image, len);
-
-       return ret;
-}
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.h b/drivers/net/wireless/iwlwifi/iwl-agn.h
deleted file mode 100644 (file)
index cc6464d..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-/******************************************************************************
- *
- * This file is provided under a dual BSD/GPLv2 license.  When using or
- * redistributing this file, you may do so under either license.
- *
- * GPL LICENSE SUMMARY
- *
- * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
- * USA
- *
- * The full GNU General Public License is included in this distribution
- * in the file called LICENSE.GPL.
- *
- * Contact Information:
- *  Intel Linux Wireless <ilw@linux.intel.com>
- * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
- *
- * BSD LICENSE
- *
- * Copyright(c) 2005 - 2010 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *  * Neither the name Intel Corporation nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
-
-#ifndef __iwl_agn_h__
-#define __iwl_agn_h__
-
-#include "iwl-dev.h"
-
-/* configuration for the _agn devices */
-extern struct iwl_cfg iwl4965_agn_cfg;
-extern struct iwl_cfg iwl5300_agn_cfg;
-extern struct iwl_cfg iwl5100_agn_cfg;
-extern struct iwl_cfg iwl5350_agn_cfg;
-extern struct iwl_cfg iwl5100_bgn_cfg;
-extern struct iwl_cfg iwl5100_abg_cfg;
-extern struct iwl_cfg iwl5150_agn_cfg;
-extern struct iwl_cfg iwl5150_abg_cfg;
-extern struct iwl_cfg iwl6000g2a_2agn_cfg;
-extern struct iwl_cfg iwl6000g2a_2abg_cfg;
-extern struct iwl_cfg iwl6000g2a_2bg_cfg;
-extern struct iwl_cfg iwl6000g2b_bgn_cfg;
-extern struct iwl_cfg iwl6000g2b_bg_cfg;
-extern struct iwl_cfg iwl6000g2b_2agn_cfg;
-extern struct iwl_cfg iwl6000g2b_2abg_cfg;
-extern struct iwl_cfg iwl6000g2b_2bgn_cfg;
-extern struct iwl_cfg iwl6000g2b_2bg_cfg;
-extern struct iwl_cfg iwl6000i_2agn_cfg;
-extern struct iwl_cfg iwl6000i_2abg_cfg;
-extern struct iwl_cfg iwl6000i_2bg_cfg;
-extern struct iwl_cfg iwl6000_3agn_cfg;
-extern struct iwl_cfg iwl6050_2agn_cfg;
-extern struct iwl_cfg iwl6050_2abg_cfg;
-extern struct iwl_cfg iwl6050g2_bgn_cfg;
-extern struct iwl_cfg iwl1000_bgn_cfg;
-extern struct iwl_cfg iwl1000_bg_cfg;
-
-extern struct iwl_mod_params iwlagn_mod_params;
-extern struct iwl_hcmd_ops iwlagn_hcmd;
-extern struct iwl_hcmd_utils_ops iwlagn_hcmd_utils;
-
-int iwl_reset_ict(struct iwl_priv *priv);
-void iwl_disable_ict(struct iwl_priv *priv);
-int iwl_alloc_isr_ict(struct iwl_priv *priv);
-void iwl_free_isr_ict(struct iwl_priv *priv);
-irqreturn_t iwl_isr_ict(int irq, void *data);
-bool iwl_good_ack_health(struct iwl_priv *priv,
-                        struct iwl_rx_packet *pkt);
-
-/* tx queue */
-void iwlagn_set_wr_ptrs(struct iwl_priv *priv,
-                    int txq_id, u32 index);
-void iwlagn_tx_queue_set_status(struct iwl_priv *priv,
-                            struct iwl_tx_queue *txq,
-                            int tx_fifo_id, int scd_retry);
-void iwlagn_txq_update_byte_cnt_tbl(struct iwl_priv *priv,
-                                   struct iwl_tx_queue *txq,
-                                   u16 byte_cnt);
-void iwlagn_txq_inval_byte_cnt_tbl(struct iwl_priv *priv,
-                                  struct iwl_tx_queue *txq);
-int iwlagn_txq_agg_enable(struct iwl_priv *priv, int txq_id,
-                         int tx_fifo, int sta_id, int tid, u16 ssn_idx);
-int iwlagn_txq_agg_disable(struct iwl_priv *priv, u16 txq_id,
-                          u16 ssn_idx, u8 tx_fifo);
-void iwlagn_txq_set_sched(struct iwl_priv *priv, u32 mask);
-void iwl_free_tfds_in_queue(struct iwl_priv *priv,
-                           int sta_id, int tid, int freed);
-
-/* uCode */
-int iwlagn_load_ucode(struct iwl_priv *priv);
-void iwlagn_rx_calib_result(struct iwl_priv *priv,
-                        struct iwl_rx_mem_buffer *rxb);
-void iwlagn_rx_calib_complete(struct iwl_priv *priv,
-                          struct iwl_rx_mem_buffer *rxb);
-void iwlagn_init_alive_start(struct iwl_priv *priv);
-int iwlagn_alive_notify(struct iwl_priv *priv);
-int iwl_verify_ucode(struct iwl_priv *priv);
-
-/* lib */
-void iwl_check_abort_status(struct iwl_priv *priv,
-                           u8 frame_count, u32 status);
-void iwlagn_rx_handler_setup(struct iwl_priv *priv);
-void iwlagn_setup_deferred_work(struct iwl_priv *priv);
-int iwlagn_hw_valid_rtc_data_addr(u32 addr);
-int iwlagn_send_tx_power(struct iwl_priv *priv);
-void iwlagn_temperature(struct iwl_priv *priv);
-u16 iwlagn_eeprom_calib_version(struct iwl_priv *priv);
-const u8 *iwlagn_eeprom_query_addr(const struct iwl_priv *priv,
-                                  size_t offset);
-void iwlagn_rx_queue_reset(struct iwl_priv *priv, struct iwl_rx_queue *rxq);
-int iwlagn_rx_init(struct iwl_priv *priv, struct iwl_rx_queue *rxq);
-int iwlagn_hw_nic_init(struct iwl_priv *priv);
-int iwlagn_wait_tx_queue_empty(struct iwl_priv *priv);
-int iwlagn_txfifo_flush(struct iwl_priv *priv, u16 flush_control);
-void iwlagn_dev_txfifo_flush(struct iwl_priv *priv, u16 flush_control);
-
-/* rx */
-void iwlagn_rx_queue_restock(struct iwl_priv *priv);
-void iwlagn_rx_allocate(struct iwl_priv *priv, gfp_t priority);
-void iwlagn_rx_replenish(struct iwl_priv *priv);
-void iwlagn_rx_replenish_now(struct iwl_priv *priv);
-void iwlagn_rx_queue_free(struct iwl_priv *priv, struct iwl_rx_queue *rxq);
-int iwlagn_rxq_stop(struct iwl_priv *priv);
-int iwlagn_hwrate_to_mac80211_idx(u32 rate_n_flags, enum ieee80211_band band);
-void iwlagn_rx_reply_rx(struct iwl_priv *priv,
-                    struct iwl_rx_mem_buffer *rxb);
-void iwlagn_rx_reply_rx_phy(struct iwl_priv *priv,
-                        struct iwl_rx_mem_buffer *rxb);
-
-/* tx */
-void iwlagn_hwrate_to_tx_control(struct iwl_priv *priv, u32 rate_n_flags,
-                             struct ieee80211_tx_info *info);
-int iwlagn_tx_skb(struct iwl_priv *priv, struct sk_buff *skb);
-int iwlagn_tx_agg_start(struct iwl_priv *priv, struct ieee80211_vif *vif,
-                       struct ieee80211_sta *sta, u16 tid, u16 *ssn);
-int iwlagn_tx_agg_stop(struct iwl_priv *priv, struct ieee80211_vif *vif,
-                      struct ieee80211_sta *sta, u16 tid);
-int iwlagn_txq_check_empty(struct iwl_priv *priv,
-                          int sta_id, u8 tid, int txq_id);
-void iwlagn_rx_reply_compressed_ba(struct iwl_priv *priv,
-                               struct iwl_rx_mem_buffer *rxb);
-int iwlagn_tx_queue_reclaim(struct iwl_priv *priv, int txq_id, int index);
-void iwlagn_hw_txq_ctx_free(struct iwl_priv *priv);
-int iwlagn_txq_ctx_alloc(struct iwl_priv *priv);
-void iwlagn_txq_ctx_reset(struct iwl_priv *priv);
-void iwlagn_txq_ctx_stop(struct iwl_priv *priv);
-
-static inline u32 iwl_tx_status_to_mac80211(u32 status)
-{
-       status &= TX_STATUS_MSK;
-
-       switch (status) {
-       case TX_STATUS_SUCCESS:
-       case TX_STATUS_DIRECT_DONE:
-               return IEEE80211_TX_STAT_ACK;
-       case TX_STATUS_FAIL_DEST_PS:
-               return IEEE80211_TX_STAT_TX_FILTERED;
-       default:
-               return 0;
-       }
-}
-
-static inline bool iwl_is_tx_success(u32 status)
-{
-       status &= TX_STATUS_MSK;
-       return (status == TX_STATUS_SUCCESS) ||
-              (status == TX_STATUS_DIRECT_DONE);
-}
-
-/* rx */
-void iwl_rx_missed_beacon_notif(struct iwl_priv *priv,
-                               struct iwl_rx_mem_buffer *rxb);
-bool iwl_good_plcp_health(struct iwl_priv *priv,
-                         struct iwl_rx_packet *pkt);
-void iwl_rx_statistics(struct iwl_priv *priv,
-                      struct iwl_rx_mem_buffer *rxb);
-void iwl_reply_statistics(struct iwl_priv *priv,
-                         struct iwl_rx_mem_buffer *rxb);
-
-/* scan */
-void iwlagn_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif);
-
-/* station mgmt */
-int iwlagn_manage_ibss_station(struct iwl_priv *priv,
-                              struct ieee80211_vif *vif, bool add);
-
-/* hcmd */
-int iwlagn_send_rxon_assoc(struct iwl_priv *priv);
-int iwlagn_send_tx_ant_config(struct iwl_priv *priv, u8 valid_tx_ant);
-
-#endif /* __iwl_agn_h__ */
diff --git a/drivers/net/wireless/iwlwifi/iwl-devtrace.c b/drivers/net/wireless/iwlwifi/iwl-devtrace.c
deleted file mode 100644 (file)
index 4a48763..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2009 - 2010 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- * The full GNU General Public License is included in this distribution in the
- * file called LICENSE.
- *
- * Contact Information:
- *  Intel Linux Wireless <ilw@linux.intel.com>
- * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
- *
- *****************************************************************************/
-
-#include <linux/module.h>
-
-/* sparse doesn't like tracepoint macros */
-#ifndef __CHECKER__
-#include "iwl-dev.h"
-
-#define CREATE_TRACE_POINTS
-#include "iwl-devtrace.h"
-
-EXPORT_TRACEPOINT_SYMBOL(iwlwifi_dev_iowrite8);
-EXPORT_TRACEPOINT_SYMBOL(iwlwifi_dev_ioread32);
-EXPORT_TRACEPOINT_SYMBOL(iwlwifi_dev_iowrite32);
-EXPORT_TRACEPOINT_SYMBOL(iwlwifi_dev_rx);
-EXPORT_TRACEPOINT_SYMBOL(iwlwifi_dev_tx);
-EXPORT_TRACEPOINT_SYMBOL(iwlwifi_dev_ucode_event);
-EXPORT_TRACEPOINT_SYMBOL(iwlwifi_dev_ucode_error);
-EXPORT_TRACEPOINT_SYMBOL(iwlwifi_dev_ucode_cont_event);
-EXPORT_TRACEPOINT_SYMBOL(iwlwifi_dev_ucode_wrap_event);
-#endif
diff --git a/drivers/net/wireless/iwlwifi/iwl-devtrace.h b/drivers/net/wireless/iwlwifi/iwl-devtrace.h
deleted file mode 100644 (file)
index 4cf864c..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2009 - 2010 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- * The full GNU General Public License is included in this distribution in the
- * file called LICENSE.
- *
- * Contact Information:
- *  Intel Linux Wireless <ilw@linux.intel.com>
- * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
- *
- *****************************************************************************/
-
-#if !defined(__IWLWIFI_DEVICE_TRACE) || defined(TRACE_HEADER_MULTI_READ)
-#define __IWLWIFI_DEVICE_TRACE
-
-#include <linux/tracepoint.h>
-
-#if !defined(CONFIG_IWLWIFI_DEVICE_TRACING) || defined(__CHECKER__)
-#undef TRACE_EVENT
-#define TRACE_EVENT(name, proto, ...) \
-static inline void trace_ ## name(proto) {}
-#endif
-
-#define PRIV_ENTRY     __field(struct iwl_priv *, priv)
-#define PRIV_ASSIGN    __entry->priv = priv
-
-#undef TRACE_SYSTEM
-#define TRACE_SYSTEM iwlwifi_io
-
-TRACE_EVENT(iwlwifi_dev_ioread32,
-       TP_PROTO(struct iwl_priv *priv, u32 offs, u32 val),
-       TP_ARGS(priv, offs, val),
-       TP_STRUCT__entry(
-               PRIV_ENTRY
-               __field(u32, offs)
-               __field(u32, val)
-       ),
-       TP_fast_assign(
-               PRIV_ASSIGN;
-               __entry->offs = offs;
-               __entry->val = val;
-       ),
-       TP_printk("[%p] read io[%#x] = %#x", __entry->priv, __entry->offs, __entry->val)
-);
-
-TRACE_EVENT(iwlwifi_dev_iowrite8,
-       TP_PROTO(struct iwl_priv *priv, u32 offs, u8 val),
-       TP_ARGS(priv, offs, val),
-       TP_STRUCT__entry(
-               PRIV_ENTRY
-               __field(u32, offs)
-               __field(u8, val)
-       ),
-       TP_fast_assign(
-               PRIV_ASSIGN;
-               __entry->offs = offs;
-               __entry->val = val;
-       ),
-       TP_printk("[%p] write io[%#x] = %#x)", __entry->priv, __entry->offs, __entry->val)
-);
-
-TRACE_EVENT(iwlwifi_dev_iowrite32,
-       TP_PROTO(struct iwl_priv *priv, u32 offs, u32 val),
-       TP_ARGS(priv, offs, val),
-       TP_STRUCT__entry(
-               PRIV_ENTRY
-               __field(u32, offs)
-               __field(u32, val)
-       ),
-       TP_fast_assign(
-               PRIV_ASSIGN;
-               __entry->offs = offs;
-               __entry->val = val;
-       ),
-       TP_printk("[%p] write io[%#x] = %#x)", __entry->priv, __entry->offs, __entry->val)
-);
-
-#undef TRACE_SYSTEM
-#define TRACE_SYSTEM iwlwifi_ucode
-
-TRACE_EVENT(iwlwifi_dev_ucode_cont_event,
-       TP_PROTO(struct iwl_priv *priv, u32 time, u32 data, u32 ev),
-       TP_ARGS(priv, time, data, ev),
-       TP_STRUCT__entry(
-               PRIV_ENTRY
-
-               __field(u32, time)
-               __field(u32, data)
-               __field(u32, ev)
-       ),
-       TP_fast_assign(
-               PRIV_ASSIGN;
-               __entry->time = time;
-               __entry->data = data;
-               __entry->ev = ev;
-       ),
-       TP_printk("[%p] EVT_LOGT:%010u:0x%08x:%04u",
-                 __entry->priv, __entry->time, __entry->data, __entry->ev)
-);
-
-TRACE_EVENT(iwlwifi_dev_ucode_wrap_event,
-       TP_PROTO(struct iwl_priv *priv, u32 wraps, u32 n_entry, u32 p_entry),
-       TP_ARGS(priv, wraps, n_entry, p_entry),
-       TP_STRUCT__entry(
-               PRIV_ENTRY
-
-               __field(u32, wraps)
-               __field(u32, n_entry)
-               __field(u32, p_entry)
-       ),
-       TP_fast_assign(
-               PRIV_ASSIGN;
-               __entry->wraps = wraps;
-               __entry->n_entry = n_entry;
-               __entry->p_entry = p_entry;
-       ),
-       TP_printk("[%p] wraps=#%02d n=0x%X p=0x%X",
-                 __entry->priv, __entry->wraps, __entry->n_entry,
-                 __entry->p_entry)
-);
-
-#undef TRACE_SYSTEM
-#define TRACE_SYSTEM iwlwifi
-
-TRACE_EVENT(iwlwifi_dev_hcmd,
-       TP_PROTO(struct iwl_priv *priv, void *hcmd, size_t len, u32 flags),
-       TP_ARGS(priv, hcmd, len, flags),
-       TP_STRUCT__entry(
-               PRIV_ENTRY
-               __dynamic_array(u8, hcmd, len)
-               __field(u32, flags)
-       ),
-       TP_fast_assign(
-               PRIV_ASSIGN;
-               memcpy(__get_dynamic_array(hcmd), hcmd, len);
-               __entry->flags = flags;
-       ),
-       TP_printk("[%p] hcmd %#.2x (%ssync)",
-                 __entry->priv, ((u8 *)__get_dynamic_array(hcmd))[0],
-                 __entry->flags & CMD_ASYNC ? "a" : "")
-);
-
-TRACE_EVENT(iwlwifi_dev_rx,
-       TP_PROTO(struct iwl_priv *priv, void *rxbuf, size_t len),
-       TP_ARGS(priv, rxbuf, len),
-       TP_STRUCT__entry(
-               PRIV_ENTRY
-               __dynamic_array(u8, rxbuf, len)
-       ),
-       TP_fast_assign(
-               PRIV_ASSIGN;
-               memcpy(__get_dynamic_array(rxbuf), rxbuf, len);
-       ),
-       TP_printk("[%p] RX cmd %#.2x",
-                 __entry->priv, ((u8 *)__get_dynamic_array(rxbuf))[4])
-);
-
-TRACE_EVENT(iwlwifi_dev_tx,
-       TP_PROTO(struct iwl_priv *priv, void *tfd, size_t tfdlen,
-                void *buf0, size_t buf0_len,
-                void *buf1, size_t buf1_len),
-       TP_ARGS(priv, tfd, tfdlen, buf0, buf0_len, buf1, buf1_len),
-       TP_STRUCT__entry(
-               PRIV_ENTRY
-
-               __field(size_t, framelen)
-               __dynamic_array(u8, tfd, tfdlen)
-
-               /*
-                * Do not insert between or below these items,
-                * we want to keep the frame together (except
-                * for the possible padding).
-                */
-               __dynamic_array(u8, buf0, buf0_len)
-               __dynamic_array(u8, buf1, buf1_len)
-       ),
-       TP_fast_assign(
-               PRIV_ASSIGN;
-               __entry->framelen = buf0_len + buf1_len;
-               memcpy(__get_dynamic_array(tfd), tfd, tfdlen);
-               memcpy(__get_dynamic_array(buf0), buf0, buf0_len);
-               memcpy(__get_dynamic_array(buf1), buf1, buf1_len);
-       ),
-       TP_printk("[%p] TX %.2x (%zu bytes)",
-                 __entry->priv,
-                 ((u8 *)__get_dynamic_array(buf0))[0],
-                 __entry->framelen)
-);
-
-TRACE_EVENT(iwlwifi_dev_ucode_error,
-       TP_PROTO(struct iwl_priv *priv, u32 desc, u32 time,
-                u32 data1, u32 data2, u32 line, u32 blink1,
-                u32 blink2, u32 ilink1, u32 ilink2),
-       TP_ARGS(priv, desc, time, data1, data2, line,
-               blink1, blink2, ilink1, ilink2),
-       TP_STRUCT__entry(
-               PRIV_ENTRY
-               __field(u32, desc)
-               __field(u32, time)
-               __field(u32, data1)
-               __field(u32, data2)
-               __field(u32, line)
-               __field(u32, blink1)
-               __field(u32, blink2)
-               __field(u32, ilink1)
-               __field(u32, ilink2)
-       ),
-       TP_fast_assign(
-               PRIV_ASSIGN;
-               __entry->desc = desc;
-               __entry->time = time;
-               __entry->data1 = data1;
-               __entry->data2 = data2;
-               __entry->line = line;
-               __entry->blink1 = blink1;
-               __entry->blink2 = blink2;
-               __entry->ilink1 = ilink1;
-               __entry->ilink2 = ilink2;
-       ),
-       TP_printk("[%p] #%02d %010u data 0x%08X 0x%08X line %u, "
-                 "blink 0x%05X 0x%05X ilink 0x%05X 0x%05X",
-                 __entry->priv, __entry->desc, __entry->time, __entry->data1,
-                 __entry->data2, __entry->line, __entry->blink1,
-                 __entry->blink2, __entry->ilink1, __entry->ilink2)
-);
-
-TRACE_EVENT(iwlwifi_dev_ucode_event,
-       TP_PROTO(struct iwl_priv *priv, u32 time, u32 data, u32 ev),
-       TP_ARGS(priv, time, data, ev),
-       TP_STRUCT__entry(
-               PRIV_ENTRY
-
-               __field(u32, time)
-               __field(u32, data)
-               __field(u32, ev)
-       ),
-       TP_fast_assign(
-               PRIV_ASSIGN;
-               __entry->time = time;
-               __entry->data = data;
-               __entry->ev = ev;
-       ),
-       TP_printk("[%p] EVT_LOGT:%010u:0x%08x:%04u",
-                 __entry->priv, __entry->time, __entry->data, __entry->ev)
-);
-#endif /* __IWLWIFI_DEVICE_TRACE */
-
-#undef TRACE_INCLUDE_PATH
-#define TRACE_INCLUDE_PATH .
-#undef TRACE_INCLUDE_FILE
-#define TRACE_INCLUDE_FILE iwl-devtrace
-#include <trace/define_trace.h>
diff --git a/drivers/net/wireless/iwmc3200wifi/trace.c b/drivers/net/wireless/iwmc3200wifi/trace.c
deleted file mode 100644 (file)
index 904d36f..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "iwm.h"
-#define CREATE_TRACE_POINTS
-#include "trace.h"
diff --git a/drivers/net/wireless/iwmc3200wifi/trace.h b/drivers/net/wireless/iwmc3200wifi/trace.h
deleted file mode 100644 (file)
index abb4805..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-#if !defined(__IWM_TRACE_H__) || defined(TRACE_HEADER_MULTI_READ)
-#define __IWM_TRACE_H__
-
-#include <linux/tracepoint.h>
-
-#if !defined(CONFIG_IWM_TRACING)
-#undef TRACE_EVENT
-#define TRACE_EVENT(name, proto, ...) \
-static inline void trace_ ## name(proto) {}
-#endif
-
-#undef TRACE_SYSTEM
-#define TRACE_SYSTEM iwm
-
-#define IWM_ENTRY      __array(char, ndev_name, 16)
-#define IWM_ASSIGN     strlcpy(__entry->ndev_name, iwm_to_ndev(iwm)->name, 16)
-#define IWM_PR_FMT     "%s"
-#define IWM_PR_ARG     __entry->ndev_name
-
-TRACE_EVENT(iwm_tx_nonwifi_cmd,
-       TP_PROTO(struct iwm_priv *iwm, struct iwm_udma_out_nonwifi_hdr *hdr),
-
-       TP_ARGS(iwm, hdr),
-
-       TP_STRUCT__entry(
-               IWM_ENTRY
-               __field(u8, opcode)
-               __field(u8, resp)
-               __field(u8, eot)
-               __field(u8, hw)
-               __field(u16, seq)
-               __field(u32, addr)
-               __field(u32, op1)
-               __field(u32, op2)
-       ),
-
-       TP_fast_assign(
-               IWM_ASSIGN;
-               __entry->opcode = GET_VAL32(hdr->cmd, UMAC_HDI_OUT_CMD_OPCODE);
-               __entry->resp = GET_VAL32(hdr->cmd, UDMA_HDI_OUT_NW_CMD_RESP);
-               __entry->eot = GET_VAL32(hdr->cmd, UMAC_HDI_OUT_CMD_EOT);
-               __entry->hw = GET_VAL32(hdr->cmd, UDMA_HDI_OUT_NW_CMD_HANDLE_BY_HW);
-               __entry->seq = GET_VAL32(hdr->cmd, UDMA_HDI_OUT_CMD_NON_WIFI_HW_SEQ_NUM);
-               __entry->addr = le32_to_cpu(hdr->addr);
-               __entry->op1 = le32_to_cpu(hdr->op1_sz);
-               __entry->op2 = le32_to_cpu(hdr->op2);
-       ),
-
-       TP_printk(
-               IWM_PR_FMT " Tx TARGET CMD: opcode 0x%x, resp %d, eot %d, "
-               "hw %d, seq 0x%x, addr 0x%x, op1 0x%x, op2 0x%x",
-               IWM_PR_ARG, __entry->opcode, __entry->resp, __entry->eot,
-               __entry->hw, __entry->seq, __entry->addr, __entry->op1,
-               __entry->op2
-       )
-);
-
-TRACE_EVENT(iwm_tx_wifi_cmd,
-       TP_PROTO(struct iwm_priv *iwm, struct iwm_umac_wifi_out_hdr *hdr),
-
-       TP_ARGS(iwm, hdr),
-
-       TP_STRUCT__entry(
-               IWM_ENTRY
-               __field(u8, opcode)
-               __field(u8, lmac)
-               __field(u8, resp)
-               __field(u8, eot)
-               __field(u8, ra_tid)
-               __field(u8, credit_group)
-               __field(u8, color)
-               __field(u16, seq)
-       ),
-
-       TP_fast_assign(
-               IWM_ASSIGN;
-               __entry->opcode = hdr->sw_hdr.cmd.cmd;
-               __entry->lmac = 0;
-               __entry->seq = __le16_to_cpu(hdr->sw_hdr.cmd.seq_num);
-               __entry->resp = GET_VAL8(hdr->sw_hdr.cmd.flags, UMAC_DEV_CMD_FLAGS_RESP_REQ);
-               __entry->color = GET_VAL32(hdr->sw_hdr.meta_data, UMAC_FW_CMD_TX_STA_COLOR);
-               __entry->eot = GET_VAL32(hdr->hw_hdr.cmd, UMAC_HDI_OUT_CMD_EOT);
-               __entry->ra_tid = GET_VAL32(hdr->hw_hdr.meta_data, UMAC_HDI_OUT_RATID);
-               __entry->credit_group = GET_VAL32(hdr->hw_hdr.meta_data, UMAC_HDI_OUT_CREDIT_GRP);
-               if (__entry->opcode == UMAC_CMD_OPCODE_WIFI_PASS_THROUGH ||
-                   __entry->opcode == UMAC_CMD_OPCODE_WIFI_IF_WRAPPER) {
-                       __entry->lmac = 1;
-                       __entry->opcode = ((struct iwm_lmac_hdr *)(hdr + 1))->id;
-               }
-       ),
-
-       TP_printk(
-               IWM_PR_FMT " Tx %cMAC CMD: opcode 0x%x, resp %d, eot %d, "
-               "seq 0x%x, sta_color 0x%x, ra_tid 0x%x, credit_group 0x%x",
-               IWM_PR_ARG, __entry->lmac ? 'L' : 'U', __entry->opcode,
-               __entry->resp, __entry->eot, __entry->seq, __entry->color,
-               __entry->ra_tid, __entry->credit_group
-       )
-);
-
-TRACE_EVENT(iwm_tx_packets,
-       TP_PROTO(struct iwm_priv *iwm, u8 *buf, int len),
-
-       TP_ARGS(iwm, buf, len),
-
-       TP_STRUCT__entry(
-               IWM_ENTRY
-               __field(u8, eot)
-               __field(u8, ra_tid)
-               __field(u8, credit_group)
-               __field(u8, color)
-               __field(u16, seq)
-               __field(u8, npkt)
-               __field(u32, bytes)
-       ),
-
-       TP_fast_assign(
-               struct iwm_umac_wifi_out_hdr *hdr =
-                       (struct iwm_umac_wifi_out_hdr *)buf;
-
-               IWM_ASSIGN;
-               __entry->eot = GET_VAL32(hdr->hw_hdr.cmd, UMAC_HDI_OUT_CMD_EOT);
-               __entry->ra_tid = GET_VAL32(hdr->hw_hdr.meta_data, UMAC_HDI_OUT_RATID);
-               __entry->credit_group = GET_VAL32(hdr->hw_hdr.meta_data, UMAC_HDI_OUT_CREDIT_GRP);
-               __entry->color = GET_VAL32(hdr->sw_hdr.meta_data, UMAC_FW_CMD_TX_STA_COLOR);
-               __entry->seq = __le16_to_cpu(hdr->sw_hdr.cmd.seq_num);
-               __entry->npkt = 1;
-               __entry->bytes = len;
-
-               if (!__entry->eot) {
-                       int count;
-                       u8 *ptr = buf;
-
-                       __entry->npkt = 0;
-                       while (ptr < buf + len) {
-                               count = GET_VAL32(hdr->sw_hdr.meta_data,
-                                                 UMAC_FW_CMD_BYTE_COUNT);
-                               ptr += ALIGN(sizeof(*hdr) + count, 16);
-                               hdr = (struct iwm_umac_wifi_out_hdr *)ptr;
-                               __entry->npkt++;
-                       }
-               }
-       ),
-
-       TP_printk(
-               IWM_PR_FMT " Tx %spacket: eot %d, seq 0x%x, sta_color 0x%x, "
-               "ra_tid 0x%x, credit_group 0x%x, embeded_packets %d, %d bytes",
-               IWM_PR_ARG, !__entry->eot ? "concatenated " : "",
-               __entry->eot, __entry->seq, __entry->color, __entry->ra_tid,
-               __entry->credit_group, __entry->npkt, __entry->bytes
-       )
-);
-
-TRACE_EVENT(iwm_rx_nonwifi_cmd,
-       TP_PROTO(struct iwm_priv *iwm, void *buf, int len),
-
-       TP_ARGS(iwm, buf, len),
-
-       TP_STRUCT__entry(
-               IWM_ENTRY
-               __field(u8, opcode)
-               __field(u16, seq)
-               __field(u32, len)
-       ),
-
-       TP_fast_assign(
-               struct iwm_udma_in_hdr *hdr = buf;
-
-               IWM_ASSIGN;
-               __entry->opcode = GET_VAL32(hdr->cmd, UDMA_HDI_IN_NW_CMD_OPCODE);
-               __entry->seq = GET_VAL32(hdr->cmd, UDMA_HDI_IN_CMD_NON_WIFI_HW_SEQ_NUM);
-               __entry->len = len;
-       ),
-
-       TP_printk(
-               IWM_PR_FMT " Rx TARGET RESP: opcode 0x%x, seq 0x%x, len 0x%x",
-               IWM_PR_ARG, __entry->opcode, __entry->seq, __entry->len
-       )
-);
-
-TRACE_EVENT(iwm_rx_wifi_cmd,
-       TP_PROTO(struct iwm_priv *iwm, struct iwm_umac_wifi_in_hdr *hdr),
-
-       TP_ARGS(iwm, hdr),
-
-       TP_STRUCT__entry(
-               IWM_ENTRY
-               __field(u8, cmd)
-               __field(u8, source)
-               __field(u16, seq)
-               __field(u32, count)
-       ),
-
-       TP_fast_assign(
-               IWM_ASSIGN;
-               __entry->cmd = hdr->sw_hdr.cmd.cmd;
-               __entry->source = GET_VAL32(hdr->hw_hdr.cmd, UMAC_HDI_IN_CMD_SOURCE);
-               __entry->count = GET_VAL32(hdr->sw_hdr.meta_data, UMAC_FW_CMD_BYTE_COUNT);
-               __entry->seq = le16_to_cpu(hdr->sw_hdr.cmd.seq_num);
-       ),
-
-       TP_printk(
-               IWM_PR_FMT " Rx %s RESP: cmd 0x%x, seq 0x%x, count 0x%x",
-               IWM_PR_ARG, __entry->source == UMAC_HDI_IN_SOURCE_FHRX ? "LMAC" :
-               __entry->source == UMAC_HDI_IN_SOURCE_FW ? "UMAC" : "UDMA",
-               __entry->cmd, __entry->seq, __entry->count
-       )
-);
-
-#define iwm_ticket_action_symbol               \
-       { IWM_RX_TICKET_DROP, "DROP" },         \
-       { IWM_RX_TICKET_RELEASE, "RELEASE" },   \
-       { IWM_RX_TICKET_SNIFFER, "SNIFFER" },   \
-       { IWM_RX_TICKET_ENQUEUE, "ENQUEUE" }
-
-TRACE_EVENT(iwm_rx_ticket,
-       TP_PROTO(struct iwm_priv *iwm, void *buf, int len),
-
-       TP_ARGS(iwm, buf, len),
-
-       TP_STRUCT__entry(
-               IWM_ENTRY
-               __field(u8, action)
-               __field(u8, reason)
-               __field(u16, id)
-               __field(u16, flags)
-       ),
-
-       TP_fast_assign(
-               struct iwm_rx_ticket *ticket =
-                       ((struct iwm_umac_notif_rx_ticket *)buf)->tickets;
-
-               IWM_ASSIGN;
-               __entry->id = le16_to_cpu(ticket->id);
-               __entry->action = le16_to_cpu(ticket->action);
-               __entry->flags = le16_to_cpu(ticket->flags);
-               __entry->reason = (__entry->flags & IWM_RX_TICKET_DROP_REASON_MSK) >> IWM_RX_TICKET_DROP_REASON_POS;
-       ),
-
-       TP_printk(
-               IWM_PR_FMT " Rx ticket: id 0x%x, action %s, %s 0x%x%s",
-               IWM_PR_ARG, __entry->id,
-               __print_symbolic(__entry->action, iwm_ticket_action_symbol),
-               __entry->reason ? "reason" : "flags",
-               __entry->reason ? __entry->reason : __entry->flags,
-               __entry->flags & IWM_RX_TICKET_AMSDU_MSK ? ", AMSDU frame" : ""
-       )
-);
-
-TRACE_EVENT(iwm_rx_packet,
-       TP_PROTO(struct iwm_priv *iwm, void *buf, int len),
-
-       TP_ARGS(iwm, buf, len),
-
-       TP_STRUCT__entry(
-               IWM_ENTRY
-               __field(u8, source)
-               __field(u16, id)
-               __field(u32, len)
-       ),
-
-       TP_fast_assign(
-               struct iwm_umac_wifi_in_hdr *hdr = buf;
-
-               IWM_ASSIGN;
-               __entry->source = GET_VAL32(hdr->hw_hdr.cmd, UMAC_HDI_IN_CMD_SOURCE);
-               __entry->id = le16_to_cpu(hdr->sw_hdr.cmd.seq_num);
-               __entry->len = len - sizeof(*hdr);
-       ),
-
-       TP_printk(
-               IWM_PR_FMT " Rx %s packet: id 0x%x, %d bytes",
-               IWM_PR_ARG, __entry->source == UMAC_HDI_IN_SOURCE_FHRX ?
-               "LMAC" : "UMAC", __entry->id, __entry->len
-       )
-);
-#endif
-
-#undef TRACE_INCLUDE_PATH
-#define TRACE_INCLUDE_PATH .
-#undef TRACE_INCLUDE_FILE
-#define TRACE_INCLUDE_FILE trace
-#include <trace/define_trace.h>
diff --git a/drivers/net/wireless/libertas/Kconfig b/drivers/net/wireless/libertas/Kconfig
deleted file mode 100644 (file)
index 0485c99..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-config LIBERTAS
-       tristate "Marvell 8xxx Libertas WLAN driver support"
-       depends on CFG80211
-       select WIRELESS_EXT
-       select WEXT_SPY
-       select LIB80211
-       select FW_LOADER
-       ---help---
-         A library for Marvell Libertas 8xxx devices.
-
-config LIBERTAS_USB
-       tristate "Marvell Libertas 8388 USB 802.11b/g cards"
-       depends on LIBERTAS && USB
-       ---help---
-         A driver for Marvell Libertas 8388 USB devices.
-
-config LIBERTAS_CS
-       tristate "Marvell Libertas 8385 CompactFlash 802.11b/g cards"
-       depends on LIBERTAS && PCMCIA
-       ---help---
-         A driver for Marvell Libertas 8385 CompactFlash devices.
-
-config LIBERTAS_SDIO
-       tristate "Marvell Libertas 8385/8686/8688 SDIO 802.11b/g cards"
-       depends on LIBERTAS && MMC
-       ---help---
-         A driver for Marvell Libertas 8385/8686/8688 SDIO devices.
-
-config LIBERTAS_SPI
-       tristate "Marvell Libertas 8686 SPI 802.11b/g cards"
-       depends on LIBERTAS && SPI
-       ---help---
-         A driver for Marvell Libertas 8686 SPI devices.
-
-config LIBERTAS_DEBUG
-       bool "Enable full debugging output in the Libertas module."
-       depends on LIBERTAS
-       ---help---
-         Debugging support.
-
-config LIBERTAS_MESH
-       bool "Enable mesh support"
-       depends on LIBERTAS
-       help
-         This enables Libertas' MESH support, used by e.g. the OLPC people.
diff --git a/drivers/net/wireless/libertas/cfg.c b/drivers/net/wireless/libertas/cfg.c
deleted file mode 100644 (file)
index 3e82f16..0000000
+++ /dev/null
@@ -1,2138 +0,0 @@
-/*
- * Implement cfg80211 ("iw") support.
- *
- * Copyright (C) 2009 M&N Solutions GmbH, 61191 Rosbach, Germany
- * Holger Schurig <hs4233@mail.mn-solutions.de>
- *
- */
-
-#include <linux/sched.h>
-#include <linux/wait.h>
-#include <linux/slab.h>
-#include <linux/sched.h>
-#include <linux/ieee80211.h>
-#include <net/cfg80211.h>
-#include <asm/unaligned.h>
-
-#include "decl.h"
-#include "cfg.h"
-#include "cmd.h"
-
-
-#define CHAN2G(_channel, _freq, _flags) {        \
-       .band             = IEEE80211_BAND_2GHZ, \
-       .center_freq      = (_freq),             \
-       .hw_value         = (_channel),          \
-       .flags            = (_flags),            \
-       .max_antenna_gain = 0,                   \
-       .max_power        = 30,                  \
-}
-
-static struct ieee80211_channel lbs_2ghz_channels[] = {
-       CHAN2G(1,  2412, 0),
-       CHAN2G(2,  2417, 0),
-       CHAN2G(3,  2422, 0),
-       CHAN2G(4,  2427, 0),
-       CHAN2G(5,  2432, 0),
-       CHAN2G(6,  2437, 0),
-       CHAN2G(7,  2442, 0),
-       CHAN2G(8,  2447, 0),
-       CHAN2G(9,  2452, 0),
-       CHAN2G(10, 2457, 0),
-       CHAN2G(11, 2462, 0),
-       CHAN2G(12, 2467, 0),
-       CHAN2G(13, 2472, 0),
-       CHAN2G(14, 2484, 0),
-};
-
-#define RATETAB_ENT(_rate, _hw_value, _flags) { \
-       .bitrate  = (_rate),                    \
-       .hw_value = (_hw_value),                \
-       .flags    = (_flags),                   \
-}
-
-
-/* Table 6 in section 3.2.1.1 */
-static struct ieee80211_rate lbs_rates[] = {
-       RATETAB_ENT(10,  0,  0),
-       RATETAB_ENT(20,  1,  0),
-       RATETAB_ENT(55,  2,  0),
-       RATETAB_ENT(110, 3,  0),
-       RATETAB_ENT(60,  9,  0),
-       RATETAB_ENT(90,  6,  0),
-       RATETAB_ENT(120, 7,  0),
-       RATETAB_ENT(180, 8,  0),
-       RATETAB_ENT(240, 9,  0),
-       RATETAB_ENT(360, 10, 0),
-       RATETAB_ENT(480, 11, 0),
-       RATETAB_ENT(540, 12, 0),
-};
-
-static struct ieee80211_supported_band lbs_band_2ghz = {
-       .channels = lbs_2ghz_channels,
-       .n_channels = ARRAY_SIZE(lbs_2ghz_channels),
-       .bitrates = lbs_rates,
-       .n_bitrates = ARRAY_SIZE(lbs_rates),
-};
-
-
-static const u32 cipher_suites[] = {
-       WLAN_CIPHER_SUITE_WEP40,
-       WLAN_CIPHER_SUITE_WEP104,
-       WLAN_CIPHER_SUITE_TKIP,
-       WLAN_CIPHER_SUITE_CCMP,
-};
-
-/* Time to stay on the channel */
-#define LBS_DWELL_PASSIVE 100
-#define LBS_DWELL_ACTIVE  40
-
-
-/***************************************************************************
- * Misc utility functions
- *
- * TLVs are Marvell specific. They are very similar to IEs, they have the
- * same structure: type, length, data*. The only difference: for IEs, the
- * type and length are u8, but for TLVs they're __le16.
- */
-
-/*
- * Convert NL80211's auth_type to the one from Libertas, see chapter 5.9.1
- * in the firmware spec
- */
-static u8 lbs_auth_to_authtype(enum nl80211_auth_type auth_type)
-{
-       int ret = -ENOTSUPP;
-
-       switch (auth_type) {
-       case NL80211_AUTHTYPE_OPEN_SYSTEM:
-       case NL80211_AUTHTYPE_SHARED_KEY:
-               ret = auth_type;
-               break;
-       case NL80211_AUTHTYPE_AUTOMATIC:
-               ret = NL80211_AUTHTYPE_OPEN_SYSTEM;
-               break;
-       case NL80211_AUTHTYPE_NETWORK_EAP:
-               ret = 0x80;
-               break;
-       default:
-               /* silence compiler */
-               break;
-       }
-       return ret;
-}
-
-
-/* Various firmware commands need the list of supported rates, but with
-   the hight-bit set for basic rates */
-static int lbs_add_rates(u8 *rates)
-{
-       size_t i;
-
-       for (i = 0; i < ARRAY_SIZE(lbs_rates); i++) {
-               u8 rate = lbs_rates[i].bitrate / 5;
-               if (rate == 0x02 || rate == 0x04 ||
-                   rate == 0x0b || rate == 0x16)
-                       rate |= 0x80;
-               rates[i] = rate;
-       }
-       return ARRAY_SIZE(lbs_rates);
-}
-
-
-/***************************************************************************
- * TLV utility functions
- *
- * TLVs are Marvell specific. They are very similar to IEs, they have the
- * same structure: type, length, data*. The only difference: for IEs, the
- * type and length are u8, but for TLVs they're __le16.
- */
-
-
-/*
- * Add ssid TLV
- */
-#define LBS_MAX_SSID_TLV_SIZE                  \
-       (sizeof(struct mrvl_ie_header)          \
-        + IEEE80211_MAX_SSID_LEN)
-
-static int lbs_add_ssid_tlv(u8 *tlv, const u8 *ssid, int ssid_len)
-{
-       struct mrvl_ie_ssid_param_set *ssid_tlv = (void *)tlv;
-
-       /*
-        * TLV-ID SSID  00 00
-        * length       06 00
-        * ssid         4d 4e 54 45 53 54
-        */
-       ssid_tlv->header.type = cpu_to_le16(TLV_TYPE_SSID);
-       ssid_tlv->header.len = cpu_to_le16(ssid_len);
-       memcpy(ssid_tlv->ssid, ssid, ssid_len);
-       return sizeof(ssid_tlv->header) + ssid_len;
-}
-
-
-/*
- * Add channel list TLV (section 8.4.2)
- *
- * Actual channel data comes from priv->wdev->wiphy->channels.
- */
-#define LBS_MAX_CHANNEL_LIST_TLV_SIZE                                  \
-       (sizeof(struct mrvl_ie_header)                                  \
-        + (LBS_SCAN_BEFORE_NAP * sizeof(struct chanscanparamset)))
-
-static int lbs_add_channel_list_tlv(struct lbs_private *priv, u8 *tlv,
-                                   int last_channel, int active_scan)
-{
-       int chanscanparamsize = sizeof(struct chanscanparamset) *
-               (last_channel - priv->scan_channel);
-
-       struct mrvl_ie_header *header = (void *) tlv;
-
-       /*
-        * TLV-ID CHANLIST  01 01
-        * length           0e 00
-        * channel          00 01 00 00 00 64 00
-        *   radio type     00
-        *   channel           01
-        *   scan type            00
-        *   min scan time           00 00
-        *   max scan time                 64 00
-        * channel 2        00 02 00 00 00 64 00
-        *
-        */
-
-       header->type = cpu_to_le16(TLV_TYPE_CHANLIST);
-       header->len  = cpu_to_le16(chanscanparamsize);
-       tlv += sizeof(struct mrvl_ie_header);
-
-       /* lbs_deb_scan("scan: channels %d to %d\n", priv->scan_channel,
-                    last_channel); */
-       memset(tlv, 0, chanscanparamsize);
-
-       while (priv->scan_channel < last_channel) {
-               struct chanscanparamset *param = (void *) tlv;
-
-               param->radiotype = CMD_SCAN_RADIO_TYPE_BG;
-               param->channumber =
-                       priv->scan_req->channels[priv->scan_channel]->hw_value;
-               if (active_scan) {
-                       param->maxscantime = cpu_to_le16(LBS_DWELL_ACTIVE);
-               } else {
-                       param->chanscanmode.passivescan = 1;
-                       param->maxscantime = cpu_to_le16(LBS_DWELL_PASSIVE);
-               }
-               tlv += sizeof(struct chanscanparamset);
-               priv->scan_channel++;
-       }
-       return sizeof(struct mrvl_ie_header) + chanscanparamsize;
-}
-
-
-/*
- * Add rates TLV
- *
- * The rates are in lbs_bg_rates[], but for the 802.11b
- * rates the high bit is set. We add this TLV only because
- * there's a firmware which otherwise doesn't report all
- * APs in range.
- */
-#define LBS_MAX_RATES_TLV_SIZE                 \
-       (sizeof(struct mrvl_ie_header)          \
-        + (ARRAY_SIZE(lbs_rates)))
-
-/* Adds a TLV with all rates the hardware supports */
-static int lbs_add_supported_rates_tlv(u8 *tlv)
-{
-       size_t i;
-       struct mrvl_ie_rates_param_set *rate_tlv = (void *)tlv;
-
-       /*
-        * TLV-ID RATES  01 00
-        * length        0e 00
-        * rates         82 84 8b 96 0c 12 18 24 30 48 60 6c
-        */
-       rate_tlv->header.type = cpu_to_le16(TLV_TYPE_RATES);
-       tlv += sizeof(rate_tlv->header);
-       i = lbs_add_rates(tlv);
-       tlv += i;
-       rate_tlv->header.len = cpu_to_le16(i);
-       return sizeof(rate_tlv->header) + i;
-}
-
-/* Add common rates from a TLV and return the new end of the TLV */
-static u8 *
-add_ie_rates(u8 *tlv, const u8 *ie, int *nrates)
-{
-       int hw, ap, ap_max = ie[1];
-       u8 hw_rate;
-
-       /* Advance past IE header */
-       ie += 2;
-
-       lbs_deb_hex(LBS_DEB_ASSOC, "AP IE Rates", (u8 *) ie, ap_max);
-
-       for (hw = 0; hw < ARRAY_SIZE(lbs_rates); hw++) {
-               hw_rate = lbs_rates[hw].bitrate / 5;
-               for (ap = 0; ap < ap_max; ap++) {
-                       if (hw_rate == (ie[ap] & 0x7f)) {
-                               *tlv++ = ie[ap];
-                               *nrates = *nrates + 1;
-                       }
-               }
-       }
-       return tlv;
-}
-
-/*
- * Adds a TLV with all rates the hardware *and* BSS supports.
- */
-static int lbs_add_common_rates_tlv(u8 *tlv, struct cfg80211_bss *bss)
-{
-       struct mrvl_ie_rates_param_set *rate_tlv = (void *)tlv;
-       const u8 *rates_eid, *ext_rates_eid;
-       int n = 0;
-
-       rates_eid = ieee80211_bss_get_ie(bss, WLAN_EID_SUPP_RATES);
-       ext_rates_eid = ieee80211_bss_get_ie(bss, WLAN_EID_EXT_SUPP_RATES);
-
-       /*
-        * 01 00                   TLV_TYPE_RATES
-        * 04 00                   len
-        * 82 84 8b 96             rates
-        */
-       rate_tlv->header.type = cpu_to_le16(TLV_TYPE_RATES);
-       tlv += sizeof(rate_tlv->header);
-
-       /* Add basic rates */
-       if (rates_eid) {
-               tlv = add_ie_rates(tlv, rates_eid, &n);
-
-               /* Add extended rates, if any */
-               if (ext_rates_eid)
-                       tlv = add_ie_rates(tlv, ext_rates_eid, &n);
-       } else {
-               lbs_deb_assoc("assoc: bss had no basic rate IE\n");
-               /* Fallback: add basic 802.11b rates */
-               *tlv++ = 0x82;
-               *tlv++ = 0x84;
-               *tlv++ = 0x8b;
-               *tlv++ = 0x96;
-               n = 4;
-       }
-
-       rate_tlv->header.len = cpu_to_le16(n);
-       return sizeof(rate_tlv->header) + n;
-}
-
-
-/*
- * Add auth type TLV.
- *
- * This is only needed for newer firmware (V9 and up).
- */
-#define LBS_MAX_AUTH_TYPE_TLV_SIZE \
-       sizeof(struct mrvl_ie_auth_type)
-
-static int lbs_add_auth_type_tlv(u8 *tlv, enum nl80211_auth_type auth_type)
-{
-       struct mrvl_ie_auth_type *auth = (void *) tlv;
-
-       /*
-        * 1f 01  TLV_TYPE_AUTH_TYPE
-        * 01 00  len
-        * 01     auth type
-        */
-       auth->header.type = cpu_to_le16(TLV_TYPE_AUTH_TYPE);
-       auth->header.len = cpu_to_le16(sizeof(*auth)-sizeof(auth->header));
-       auth->auth = cpu_to_le16(lbs_auth_to_authtype(auth_type));
-       return sizeof(*auth);
-}
-
-
-/*
- * Add channel (phy ds) TLV
- */
-#define LBS_MAX_CHANNEL_TLV_SIZE \
-       sizeof(struct mrvl_ie_header)
-
-static int lbs_add_channel_tlv(u8 *tlv, u8 channel)
-{
-       struct mrvl_ie_ds_param_set *ds = (void *) tlv;
-
-       /*
-        * 03 00  TLV_TYPE_PHY_DS
-        * 01 00  len
-        * 06     channel
-        */
-       ds->header.type = cpu_to_le16(TLV_TYPE_PHY_DS);
-       ds->header.len = cpu_to_le16(sizeof(*ds)-sizeof(ds->header));
-       ds->channel = channel;
-       return sizeof(*ds);
-}
-
-
-/*
- * Add (empty) CF param TLV of the form:
- */
-#define LBS_MAX_CF_PARAM_TLV_SIZE              \
-       sizeof(struct mrvl_ie_header)
-
-static int lbs_add_cf_param_tlv(u8 *tlv)
-{
-       struct mrvl_ie_cf_param_set *cf = (void *)tlv;
-
-       /*
-        * 04 00  TLV_TYPE_CF
-        * 06 00  len
-        * 00     cfpcnt
-        * 00     cfpperiod
-        * 00 00  cfpmaxduration
-        * 00 00  cfpdurationremaining
-        */
-       cf->header.type = cpu_to_le16(TLV_TYPE_CF);
-       cf->header.len = cpu_to_le16(sizeof(*cf)-sizeof(cf->header));
-       return sizeof(*cf);
-}
-
-/*
- * Add WPA TLV
- */
-#define LBS_MAX_WPA_TLV_SIZE                   \
-       (sizeof(struct mrvl_ie_header)          \
-        + 128 /* TODO: I guessed the size */)
-
-static int lbs_add_wpa_tlv(u8 *tlv, const u8 *ie, u8 ie_len)
-{
-       size_t tlv_len;
-
-       /*
-        * We need just convert an IE to an TLV. IEs use u8 for the header,
-        *   u8      type
-        *   u8      len
-        *   u8[]    data
-        * but TLVs use __le16 instead:
-        *   __le16  type
-        *   __le16  len
-        *   u8[]    data
-        */
-       *tlv++ = *ie++;
-       *tlv++ = 0;
-       tlv_len = *tlv++ = *ie++;
-       *tlv++ = 0;
-       while (tlv_len--)
-               *tlv++ = *ie++;
-       /* the TLV is two bytes larger than the IE */
-       return ie_len + 2;
-}
-
-/***************************************************************************
- * Set Channel
- */
-
-static int lbs_cfg_set_channel(struct wiphy *wiphy,
-       struct net_device *netdev,
-       struct ieee80211_channel *channel,
-       enum nl80211_channel_type channel_type)
-{
-       struct lbs_private *priv = wiphy_priv(wiphy);
-       int ret = -ENOTSUPP;
-
-       lbs_deb_enter_args(LBS_DEB_CFG80211, "freq %d, type %d",
-                          channel->center_freq, channel_type);
-
-       if (channel_type != NL80211_CHAN_NO_HT)
-               goto out;
-
-       ret = lbs_set_channel(priv, channel->hw_value);
-
- out:
-       lbs_deb_leave_args(LBS_DEB_CFG80211, "ret %d", ret);
-       return ret;
-}
-
-
-
-/***************************************************************************
- * Scanning
- */
-
-/*
- * When scanning, the firmware doesn't send a nul packet with the power-safe
- * bit to the AP. So we cannot stay away from our current channel too long,
- * otherwise we loose data. So take a "nap" while scanning every other
- * while.
- */
-#define LBS_SCAN_BEFORE_NAP 4
-
-
-/*
- * When the firmware reports back a scan-result, it gives us an "u8 rssi",
- * which isn't really an RSSI, as it becomes larger when moving away from
- * the AP. Anyway, we need to convert that into mBm.
- */
-#define LBS_SCAN_RSSI_TO_MBM(rssi) \
-       ((-(int)rssi + 3)*100)
-
-static int lbs_ret_scan(struct lbs_private *priv, unsigned long dummy,
-       struct cmd_header *resp)
-{
-       struct cmd_ds_802_11_scan_rsp *scanresp = (void *)resp;
-       int bsssize;
-       const u8 *pos;
-       u16 nr_sets;
-       const u8 *tsfdesc;
-       int tsfsize;
-       int i;
-       int ret = -EILSEQ;
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       bsssize = get_unaligned_le16(&scanresp->bssdescriptsize);
-       nr_sets = le16_to_cpu(scanresp->nr_sets);
-
-       lbs_deb_scan("scan response: %d BSSs (%d bytes); resp size %d bytes\n",
-                       nr_sets, bsssize, le16_to_cpu(resp->size));
-
-       if (nr_sets == 0) {
-               ret = 0;
-               goto done;
-       }
-
-       /*
-        * The general layout of the scan response is described in chapter
-        * 5.7.1. Basically we have a common part, then any number of BSS
-        * descriptor sections. Finally we have section with the same number
-        * of TSFs.
-        *
-        * cmd_ds_802_11_scan_rsp
-        *   cmd_header
-        *   pos_size
-        *   nr_sets
-        *   bssdesc 1
-        *     bssid
-        *     rssi
-        *     timestamp
-        *     intvl
-        *     capa
-        *     IEs
-        *   bssdesc 2
-        *   bssdesc n
-        *   MrvlIEtypes_TsfFimestamp_t
-        *     TSF for BSS 1
-        *     TSF for BSS 2
-        *     TSF for BSS n
-        */
-
-       pos = scanresp->bssdesc_and_tlvbuffer;
-
-       tsfdesc = pos + bsssize;
-       tsfsize = 4 + 8 * scanresp->nr_sets;
-
-       /* Validity check: we expect a Marvell-Local TLV */
-       i = get_unaligned_le16(tsfdesc);
-       tsfdesc += 2;
-       if (i != TLV_TYPE_TSFTIMESTAMP)
-               goto done;
-       /* Validity check: the TLV holds TSF values with 8 bytes each, so
-        * the size in the TLV must match the nr_sets value */
-       i = get_unaligned_le16(tsfdesc);
-       tsfdesc += 2;
-       if (i / 8 != scanresp->nr_sets)
-               goto done;
-
-       for (i = 0; i < scanresp->nr_sets; i++) {
-               const u8 *bssid;
-               const u8 *ie;
-               int left;
-               int ielen;
-               int rssi;
-               u16 intvl;
-               u16 capa;
-               int chan_no = -1;
-               const u8 *ssid = NULL;
-               u8 ssid_len = 0;
-               DECLARE_SSID_BUF(ssid_buf);
-
-               int len = get_unaligned_le16(pos);
-               pos += 2;
-
-               /* BSSID */
-               bssid = pos;
-               pos += ETH_ALEN;
-               /* RSSI */
-               rssi = *pos++;
-               /* Packet time stamp */
-               pos += 8;
-               /* Beacon interval */
-               intvl = get_unaligned_le16(pos);
-               pos += 2;
-               /* Capabilities */
-               capa = get_unaligned_le16(pos);
-               pos += 2;
-
-               /* To find out the channel, we must parse the IEs */
-               ie = pos;
-               /* 6+1+8+2+2: size of BSSID, RSSI, time stamp, beacon
-                  interval, capabilities */
-               ielen = left = len - (6 + 1 + 8 + 2 + 2);
-               while (left >= 2) {
-                       u8 id, elen;
-                       id = *pos++;
-                       elen = *pos++;
-                       left -= 2;
-                       if (elen > left || elen == 0)
-                               goto done;
-                       if (id == WLAN_EID_DS_PARAMS)
-                               chan_no = *pos;
-                       if (id == WLAN_EID_SSID) {
-                               ssid = pos;
-                               ssid_len = elen;
-                       }
-                       left -= elen;
-                       pos += elen;
-               }
-
-               /* No channel, no luck */
-               if (chan_no != -1) {
-                       struct wiphy *wiphy = priv->wdev->wiphy;
-                       int freq = ieee80211_channel_to_frequency(chan_no);
-                       struct ieee80211_channel *channel =
-                               ieee80211_get_channel(wiphy, freq);
-
-                       lbs_deb_scan("scan: %pM, capa %04x, chan %2d, %s, "
-                                    "%d dBm\n",
-                                    bssid, capa, chan_no,
-                                    print_ssid(ssid_buf, ssid, ssid_len),
-                                    LBS_SCAN_RSSI_TO_MBM(rssi)/100);
-
-                       if (channel ||
-                           !(channel->flags & IEEE80211_CHAN_DISABLED))
-                               cfg80211_inform_bss(wiphy, channel,
-                                       bssid, le64_to_cpu(*(__le64 *)tsfdesc),
-                                       capa, intvl, ie, ielen,
-                                       LBS_SCAN_RSSI_TO_MBM(rssi),
-                                       GFP_KERNEL);
-               }
-               tsfdesc += 8;
-       }
-       ret = 0;
-
- done:
-       lbs_deb_leave_args(LBS_DEB_SCAN, "ret %d", ret);
-       return ret;
-}
-
-
-/*
- * Our scan command contains a TLV, consting of a SSID TLV, a channel list
- * TLV and a rates TLV. Determine the maximum size of them:
- */
-#define LBS_SCAN_MAX_CMD_SIZE                  \
-       (sizeof(struct cmd_ds_802_11_scan)      \
-        + LBS_MAX_SSID_TLV_SIZE                \
-        + LBS_MAX_CHANNEL_LIST_TLV_SIZE        \
-        + LBS_MAX_RATES_TLV_SIZE)
-
-/*
- * Assumes priv->scan_req is initialized and valid
- * Assumes priv->scan_channel is initialized
- */
-static void lbs_scan_worker(struct work_struct *work)
-{
-       struct lbs_private *priv =
-               container_of(work, struct lbs_private, scan_work.work);
-       struct cmd_ds_802_11_scan *scan_cmd;
-       u8 *tlv; /* pointer into our current, growing TLV storage area */
-       int last_channel;
-       int running, carrier;
-
-       lbs_deb_enter(LBS_DEB_SCAN);
-
-       scan_cmd = kzalloc(LBS_SCAN_MAX_CMD_SIZE, GFP_KERNEL);
-       if (scan_cmd == NULL)
-               goto out_no_scan_cmd;
-
-       /* prepare fixed part of scan command */
-       scan_cmd->bsstype = CMD_BSS_TYPE_ANY;
-
-       /* stop network while we're away from our main channel */
-       running = !netif_queue_stopped(priv->dev);
-       carrier = netif_carrier_ok(priv->dev);
-       if (running)
-               netif_stop_queue(priv->dev);
-       if (carrier)
-               netif_carrier_off(priv->dev);
-
-       /* prepare fixed part of scan command */
-       tlv = scan_cmd->tlvbuffer;
-
-       /* add SSID TLV */
-       if (priv->scan_req->n_ssids)
-               tlv += lbs_add_ssid_tlv(tlv,
-                                       priv->scan_req->ssids[0].ssid,
-                                       priv->scan_req->ssids[0].ssid_len);
-
-       /* add channel TLVs */
-       last_channel = priv->scan_channel + LBS_SCAN_BEFORE_NAP;
-       if (last_channel > priv->scan_req->n_channels)
-               last_channel = priv->scan_req->n_channels;
-       tlv += lbs_add_channel_list_tlv(priv, tlv, last_channel,
-               priv->scan_req->n_ssids);
-
-       /* add rates TLV */
-       tlv += lbs_add_supported_rates_tlv(tlv);
-
-       if (priv->scan_channel < priv->scan_req->n_channels) {
-               cancel_delayed_work(&priv->scan_work);
-               queue_delayed_work(priv->work_thread, &priv->scan_work,
-                       msecs_to_jiffies(300));
-       }
-
-       /* This is the final data we are about to send */
-       scan_cmd->hdr.size = cpu_to_le16(tlv - (u8 *)scan_cmd);
-       lbs_deb_hex(LBS_DEB_SCAN, "SCAN_CMD", (void *)scan_cmd,
-                   sizeof(*scan_cmd));
-       lbs_deb_hex(LBS_DEB_SCAN, "SCAN_TLV", scan_cmd->tlvbuffer,
-                   tlv - scan_cmd->tlvbuffer);
-
-       __lbs_cmd(priv, CMD_802_11_SCAN, &scan_cmd->hdr,
-               le16_to_cpu(scan_cmd->hdr.size),
-               lbs_ret_scan, 0);
-
-       if (priv->scan_channel >= priv->scan_req->n_channels) {
-               /* Mark scan done */
-               if (priv->internal_scan)
-                       kfree(priv->scan_req);
-               else
-                       cfg80211_scan_done(priv->scan_req, false);
-
-               priv->scan_req = NULL;
-               priv->last_scan = jiffies;
-       }
-
-       /* Restart network */
-       if (carrier)
-               netif_carrier_on(priv->dev);
-       if (running && !priv->tx_pending_len)
-               netif_wake_queue(priv->dev);
-
-       kfree(scan_cmd);
-
-       /* Wake up anything waiting on scan completion */
-       if (priv->scan_req == NULL) {
-               lbs_deb_scan("scan: waking up waiters\n");
-               wake_up_all(&priv->scan_q);
-       }
-
- out_no_scan_cmd:
-       lbs_deb_leave(LBS_DEB_SCAN);
-}
-
-static void _internal_start_scan(struct lbs_private *priv, bool internal,
-       struct cfg80211_scan_request *request)
-{
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       lbs_deb_scan("scan: ssids %d, channels %d, ie_len %zd\n",
-               request->n_ssids, request->n_channels, request->ie_len);
-
-       priv->scan_channel = 0;
-       queue_delayed_work(priv->work_thread, &priv->scan_work,
-               msecs_to_jiffies(50));
-
-       priv->scan_req = request;
-       priv->internal_scan = internal;
-
-       lbs_deb_leave(LBS_DEB_CFG80211);
-}
-
-static int lbs_cfg_scan(struct wiphy *wiphy,
-       struct net_device *dev,
-       struct cfg80211_scan_request *request)
-{
-       struct lbs_private *priv = wiphy_priv(wiphy);
-       int ret = 0;
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       if (priv->scan_req || delayed_work_pending(&priv->scan_work)) {
-               /* old scan request not yet processed */
-               ret = -EAGAIN;
-               goto out;
-       }
-
-       _internal_start_scan(priv, false, request);
-
-       if (priv->surpriseremoved)
-               ret = -EIO;
-
- out:
-       lbs_deb_leave_args(LBS_DEB_CFG80211, "ret %d", ret);
-       return ret;
-}
-
-
-
-
-/***************************************************************************
- * Events
- */
-
-void lbs_send_disconnect_notification(struct lbs_private *priv)
-{
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       cfg80211_disconnected(priv->dev,
-               0,
-               NULL, 0,
-               GFP_KERNEL);
-
-       lbs_deb_leave(LBS_DEB_CFG80211);
-}
-
-void lbs_send_mic_failureevent(struct lbs_private *priv, u32 event)
-{
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       cfg80211_michael_mic_failure(priv->dev,
-               priv->assoc_bss,
-               event == MACREG_INT_CODE_MIC_ERR_MULTICAST ?
-                       NL80211_KEYTYPE_GROUP :
-                       NL80211_KEYTYPE_PAIRWISE,
-               -1,
-               NULL,
-               GFP_KERNEL);
-
-       lbs_deb_leave(LBS_DEB_CFG80211);
-}
-
-
-
-
-/***************************************************************************
- * Connect/disconnect
- */
-
-
-/*
- * This removes all WEP keys
- */
-static int lbs_remove_wep_keys(struct lbs_private *priv)
-{
-       struct cmd_ds_802_11_set_wep cmd;
-       int ret;
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       memset(&cmd, 0, sizeof(cmd));
-       cmd.hdr.size = cpu_to_le16(sizeof(cmd));
-       cmd.keyindex = cpu_to_le16(priv->wep_tx_key);
-       cmd.action = cpu_to_le16(CMD_ACT_REMOVE);
-
-       ret = lbs_cmd_with_response(priv, CMD_802_11_SET_WEP, &cmd);
-
-       lbs_deb_leave(LBS_DEB_CFG80211);
-       return ret;
-}
-
-/*
- * Set WEP keys
- */
-static int lbs_set_wep_keys(struct lbs_private *priv)
-{
-       struct cmd_ds_802_11_set_wep cmd;
-       int i;
-       int ret;
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       /*
-        * command         13 00
-        * size            50 00
-        * sequence        xx xx
-        * result          00 00
-        * action          02 00     ACT_ADD
-        * transmit key    00 00
-        * type for key 1  01        WEP40
-        * type for key 2  00
-        * type for key 3  00
-        * type for key 4  00
-        * key 1           39 39 39 39 39 00 00 00
-        *                 00 00 00 00 00 00 00 00
-        * key 2           00 00 00 00 00 00 00 00
-        *                 00 00 00 00 00 00 00 00
-        * key 3           00 00 00 00 00 00 00 00
-        *                 00 00 00 00 00 00 00 00
-        * key 4           00 00 00 00 00 00 00 00
-        */
-       if (priv->wep_key_len[0] || priv->wep_key_len[1] ||
-           priv->wep_key_len[2] || priv->wep_key_len[3]) {
-               /* Only set wep keys if we have at least one of them */
-               memset(&cmd, 0, sizeof(cmd));
-               cmd.hdr.size = cpu_to_le16(sizeof(cmd));
-               cmd.keyindex = cpu_to_le16(priv->wep_tx_key);
-               cmd.action = cpu_to_le16(CMD_ACT_ADD);
-
-               for (i = 0; i < 4; i++) {
-                       switch (priv->wep_key_len[i]) {
-                       case WLAN_KEY_LEN_WEP40:
-                               cmd.keytype[i] = CMD_TYPE_WEP_40_BIT;
-                               break;
-                       case WLAN_KEY_LEN_WEP104:
-                               cmd.keytype[i] = CMD_TYPE_WEP_104_BIT;
-                               break;
-                       default:
-                               cmd.keytype[i] = 0;
-                               break;
-                       }
-                       memcpy(cmd.keymaterial[i], priv->wep_key[i],
-                              priv->wep_key_len[i]);
-               }
-
-               ret = lbs_cmd_with_response(priv, CMD_802_11_SET_WEP, &cmd);
-       } else {
-               /* Otherwise remove all wep keys */
-               ret = lbs_remove_wep_keys(priv);
-       }
-
-       lbs_deb_leave(LBS_DEB_CFG80211);
-       return ret;
-}
-
-
-/*
- * Enable/Disable RSN status
- */
-static int lbs_enable_rsn(struct lbs_private *priv, int enable)
-{
-       struct cmd_ds_802_11_enable_rsn cmd;
-       int ret;
-
-       lbs_deb_enter_args(LBS_DEB_CFG80211, "%d", enable);
-
-       /*
-        * cmd       2f 00
-        * size      0c 00
-        * sequence  xx xx
-        * result    00 00
-        * action    01 00    ACT_SET
-        * enable    01 00
-        */
-       memset(&cmd, 0, sizeof(cmd));
-       cmd.hdr.size = cpu_to_le16(sizeof(cmd));
-       cmd.action = cpu_to_le16(CMD_ACT_SET);
-       cmd.enable = cpu_to_le16(enable);
-
-       ret = lbs_cmd_with_response(priv, CMD_802_11_ENABLE_RSN, &cmd);
-
-       lbs_deb_leave(LBS_DEB_CFG80211);
-       return ret;
-}
-
-
-/*
- * Set WPA/WPA key material
- */
-
-/* like "struct cmd_ds_802_11_key_material", but with cmd_header. Once we
- * get rid of WEXT, this should go into host.h */
-
-struct cmd_key_material {
-       struct cmd_header hdr;
-
-       __le16 action;
-       struct MrvlIEtype_keyParamSet param;
-} __packed;
-
-static int lbs_set_key_material(struct lbs_private *priv,
-                               int key_type,
-                               int key_info,
-                               u8 *key, u16 key_len)
-{
-       struct cmd_key_material cmd;
-       int ret;
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       /*
-        * Example for WPA (TKIP):
-        *
-        * cmd       5e 00
-        * size      34 00
-        * sequence  xx xx
-        * result    00 00
-        * action    01 00
-        * TLV type  00 01    key param
-        * length    00 26
-        * key type  01 00    TKIP
-        * key info  06 00    UNICAST | ENABLED
-        * key len   20 00
-        * key       32 bytes
-        */
-       memset(&cmd, 0, sizeof(cmd));
-       cmd.hdr.size = cpu_to_le16(sizeof(cmd));
-       cmd.action = cpu_to_le16(CMD_ACT_SET);
-       cmd.param.type = cpu_to_le16(TLV_TYPE_KEY_MATERIAL);
-       cmd.param.length = cpu_to_le16(sizeof(cmd.param) - 4);
-       cmd.param.keytypeid = cpu_to_le16(key_type);
-       cmd.param.keyinfo = cpu_to_le16(key_info);
-       cmd.param.keylen = cpu_to_le16(key_len);
-       if (key && key_len)
-               memcpy(cmd.param.key, key, key_len);
-
-       ret = lbs_cmd_with_response(priv, CMD_802_11_KEY_MATERIAL, &cmd);
-
-       lbs_deb_leave(LBS_DEB_CFG80211);
-       return ret;
-}
-
-
-/*
- * Sets the auth type (open, shared, etc) in the firmware. That
- * we use CMD_802_11_AUTHENTICATE is misleading, this firmware
- * command doesn't send an authentication frame at all, it just
- * stores the auth_type.
- */
-static int lbs_set_authtype(struct lbs_private *priv,
-                           struct cfg80211_connect_params *sme)
-{
-       struct cmd_ds_802_11_authenticate cmd;
-       int ret;
-
-       lbs_deb_enter_args(LBS_DEB_CFG80211, "%d", sme->auth_type);
-
-       /*
-        * cmd        11 00
-        * size       19 00
-        * sequence   xx xx
-        * result     00 00
-        * BSS id     00 13 19 80 da 30
-        * auth type  00
-        * reserved   00 00 00 00 00 00 00 00 00 00
-        */
-       memset(&cmd, 0, sizeof(cmd));
-       cmd.hdr.size = cpu_to_le16(sizeof(cmd));
-       if (sme->bssid)
-               memcpy(cmd.bssid, sme->bssid, ETH_ALEN);
-       /* convert auth_type */
-       ret = lbs_auth_to_authtype(sme->auth_type);
-       if (ret < 0)
-               goto done;
-
-       cmd.authtype = ret;
-       ret = lbs_cmd_with_response(priv, CMD_802_11_AUTHENTICATE, &cmd);
-
- done:
-       lbs_deb_leave_args(LBS_DEB_CFG80211, "ret %d", ret);
-       return ret;
-}
-
-
-/*
- * Create association request
- */
-#define LBS_ASSOC_MAX_CMD_SIZE                     \
-       (sizeof(struct cmd_ds_802_11_associate)    \
-        - 512 /* cmd_ds_802_11_associate.iebuf */ \
-        + LBS_MAX_SSID_TLV_SIZE                   \
-        + LBS_MAX_CHANNEL_TLV_SIZE                \
-        + LBS_MAX_CF_PARAM_TLV_SIZE               \
-        + LBS_MAX_AUTH_TYPE_TLV_SIZE              \
-        + LBS_MAX_WPA_TLV_SIZE)
-
-static int lbs_associate(struct lbs_private *priv,
-               struct cfg80211_bss *bss,
-               struct cfg80211_connect_params *sme)
-{
-       struct cmd_ds_802_11_associate_response *resp;
-       struct cmd_ds_802_11_associate *cmd = kzalloc(LBS_ASSOC_MAX_CMD_SIZE,
-                                                     GFP_KERNEL);
-       const u8 *ssid_eid;
-       size_t len, resp_ie_len;
-       int status;
-       int ret;
-       u8 *pos = &(cmd->iebuf[0]);
-       u8 *tmp;
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       if (!cmd) {
-               ret = -ENOMEM;
-               goto done;
-       }
-
-       /*
-        * cmd              50 00
-        * length           34 00
-        * sequence         xx xx
-        * result           00 00
-        * BSS id           00 13 19 80 da 30
-        * capabilities     11 00
-        * listen interval  0a 00
-        * beacon interval  00 00
-        * DTIM period      00
-        * TLVs             xx   (up to 512 bytes)
-        */
-       cmd->hdr.command = cpu_to_le16(CMD_802_11_ASSOCIATE);
-
-       /* Fill in static fields */
-       memcpy(cmd->bssid, bss->bssid, ETH_ALEN);
-       cmd->listeninterval = cpu_to_le16(MRVDRV_DEFAULT_LISTEN_INTERVAL);
-       cmd->capability = cpu_to_le16(bss->capability);
-
-       /* add SSID TLV */
-       ssid_eid = ieee80211_bss_get_ie(bss, WLAN_EID_SSID);
-       if (ssid_eid)
-               pos += lbs_add_ssid_tlv(pos, ssid_eid + 2, ssid_eid[1]);
-       else
-               lbs_deb_assoc("no SSID\n");
-
-       /* add DS param TLV */
-       if (bss->channel)
-               pos += lbs_add_channel_tlv(pos, bss->channel->hw_value);
-       else
-               lbs_deb_assoc("no channel\n");
-
-       /* add (empty) CF param TLV */
-       pos += lbs_add_cf_param_tlv(pos);
-
-       /* add rates TLV */
-       tmp = pos + 4; /* skip Marvell IE header */
-       pos += lbs_add_common_rates_tlv(pos, bss);
-       lbs_deb_hex(LBS_DEB_ASSOC, "Common Rates", tmp, pos - tmp);
-
-       /* add auth type TLV */
-       if (priv->fwrelease >= 0x09000000)
-               pos += lbs_add_auth_type_tlv(pos, sme->auth_type);
-
-       /* add WPA/WPA2 TLV */
-       if (sme->ie && sme->ie_len)
-               pos += lbs_add_wpa_tlv(pos, sme->ie, sme->ie_len);
-
-       len = (sizeof(*cmd) - sizeof(cmd->iebuf)) +
-               (u16)(pos - (u8 *) &cmd->iebuf);
-       cmd->hdr.size = cpu_to_le16(len);
-
-       /* store for later use */
-       memcpy(priv->assoc_bss, bss->bssid, ETH_ALEN);
-
-       ret = lbs_cmd_with_response(priv, CMD_802_11_ASSOCIATE, cmd);
-       if (ret)
-               goto done;
-
-
-       /* generate connect message to cfg80211 */
-
-       resp = (void *) cmd; /* recast for easier field access */
-       status = le16_to_cpu(resp->statuscode);
-
-       /* Convert statis code of old firmware */
-       if (priv->fwrelease < 0x09000000)
-               switch (status) {
-               case 0:
-                       break;
-               case 1:
-                       lbs_deb_assoc("invalid association parameters\n");
-                       status = WLAN_STATUS_CAPS_UNSUPPORTED;
-                       break;
-               case 2:
-                       lbs_deb_assoc("timer expired while waiting for AP\n");
-                       status = WLAN_STATUS_AUTH_TIMEOUT;
-                       break;
-               case 3:
-                       lbs_deb_assoc("association refused by AP\n");
-                       status = WLAN_STATUS_ASSOC_DENIED_UNSPEC;
-                       break;
-               case 4:
-                       lbs_deb_assoc("authentication refused by AP\n");
-                       status = WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION;
-                       break;
-               default:
-                       lbs_deb_assoc("association failure %d\n", status);
-                       status = WLAN_STATUS_UNSPECIFIED_FAILURE;
-       }
-
-       lbs_deb_assoc("status %d, capability 0x%04x\n", status,
-                     le16_to_cpu(resp->capability));
-
-       resp_ie_len = le16_to_cpu(resp->hdr.size)
-               - sizeof(resp->hdr)
-               - 6;
-       cfg80211_connect_result(priv->dev,
-                               priv->assoc_bss,
-                               sme->ie, sme->ie_len,
-                               resp->iebuf, resp_ie_len,
-                               status,
-                               GFP_KERNEL);
-
-       if (status == 0) {
-               /* TODO: get rid of priv->connect_status */
-               priv->connect_status = LBS_CONNECTED;
-               netif_carrier_on(priv->dev);
-               if (!priv->tx_pending_len)
-                       netif_tx_wake_all_queues(priv->dev);
-       }
-
-
-done:
-       lbs_deb_leave_args(LBS_DEB_CFG80211, "ret %d", ret);
-       return ret;
-}
-
-static struct cfg80211_scan_request *
-_new_connect_scan_req(struct wiphy *wiphy, struct cfg80211_connect_params *sme)
-{
-       struct cfg80211_scan_request *creq = NULL;
-       int i, n_channels = 0;
-       enum ieee80211_band band;
-
-       for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
-               if (wiphy->bands[band])
-                       n_channels += wiphy->bands[band]->n_channels;
-       }
-
-       creq = kzalloc(sizeof(*creq) + sizeof(struct cfg80211_ssid) +
-                      n_channels * sizeof(void *),
-                      GFP_ATOMIC);
-       if (!creq)
-               return NULL;
-
-       /* SSIDs come after channels */
-       creq->ssids = (void *)&creq->channels[n_channels];
-       creq->n_channels = n_channels;
-       creq->n_ssids = 1;
-
-       /* Scan all available channels */
-       i = 0;
-       for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
-               int j;
-
-               if (!wiphy->bands[band])
-                       continue;
-
-               for (j = 0; j < wiphy->bands[band]->n_channels; j++) {
-                       /* ignore disabled channels */
-                       if (wiphy->bands[band]->channels[j].flags &
-                                               IEEE80211_CHAN_DISABLED)
-                               continue;
-
-                       creq->channels[i] = &wiphy->bands[band]->channels[j];
-                       i++;
-               }
-       }
-       if (i) {
-               /* Set real number of channels specified in creq->channels[] */
-               creq->n_channels = i;
-
-               /* Scan for the SSID we're going to connect to */
-               memcpy(creq->ssids[0].ssid, sme->ssid, sme->ssid_len);
-               creq->ssids[0].ssid_len = sme->ssid_len;
-       } else {
-               /* No channels found... */
-               kfree(creq);
-               creq = NULL;
-       }
-
-       return creq;
-}
-
-static int lbs_cfg_connect(struct wiphy *wiphy, struct net_device *dev,
-                          struct cfg80211_connect_params *sme)
-{
-       struct lbs_private *priv = wiphy_priv(wiphy);
-       struct cfg80211_bss *bss = NULL;
-       int ret = 0;
-       u8 preamble = RADIO_PREAMBLE_SHORT;
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       if (!sme->bssid) {
-               /* Run a scan if one isn't in-progress already and if the last
-                * scan was done more than 2 seconds ago.
-                */
-               if (priv->scan_req == NULL &&
-                   time_after(jiffies, priv->last_scan + (2 * HZ))) {
-                       struct cfg80211_scan_request *creq;
-
-                       creq = _new_connect_scan_req(wiphy, sme);
-                       if (!creq) {
-                               ret = -EINVAL;
-                               goto done;
-                       }
-
-                       lbs_deb_assoc("assoc: scanning for compatible AP\n");
-                       _internal_start_scan(priv, true, creq);
-               }
-
-               /* Wait for any in-progress scan to complete */
-               lbs_deb_assoc("assoc: waiting for scan to complete\n");
-               wait_event_interruptible_timeout(priv->scan_q,
-                                                (priv->scan_req == NULL),
-                                                (15 * HZ));
-               lbs_deb_assoc("assoc: scanning competed\n");
-       }
-
-       /* Find the BSS we want using available scan results */
-       bss = cfg80211_get_bss(wiphy, sme->channel, sme->bssid,
-               sme->ssid, sme->ssid_len,
-               WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS);
-       if (!bss) {
-               lbs_pr_err("assoc: bss %pM not in scan results\n",
-                          sme->bssid);
-               ret = -ENOENT;
-               goto done;
-       }
-       lbs_deb_assoc("trying %pM\n", bss->bssid);
-       lbs_deb_assoc("cipher 0x%x, key index %d, key len %d\n",
-                     sme->crypto.cipher_group,
-                     sme->key_idx, sme->key_len);
-
-       /* As this is a new connection, clear locally stored WEP keys */
-       priv->wep_tx_key = 0;
-       memset(priv->wep_key, 0, sizeof(priv->wep_key));
-       memset(priv->wep_key_len, 0, sizeof(priv->wep_key_len));
-
-       /* set/remove WEP keys */
-       switch (sme->crypto.cipher_group) {
-       case WLAN_CIPHER_SUITE_WEP40:
-       case WLAN_CIPHER_SUITE_WEP104:
-               /* Store provided WEP keys in priv-> */
-               priv->wep_tx_key = sme->key_idx;
-               priv->wep_key_len[sme->key_idx] = sme->key_len;
-               memcpy(priv->wep_key[sme->key_idx], sme->key, sme->key_len);
-               /* Set WEP keys and WEP mode */
-               lbs_set_wep_keys(priv);
-               priv->mac_control |= CMD_ACT_MAC_WEP_ENABLE;
-               lbs_set_mac_control(priv);
-               /* No RSN mode for WEP */
-               lbs_enable_rsn(priv, 0);
-               break;
-       case 0: /* there's no WLAN_CIPHER_SUITE_NONE definition */
-               /*
-                * If we don't have no WEP, no WPA and no WPA2,
-                * we remove all keys like in the WPA/WPA2 setup,
-                * we just don't set RSN.
-                *
-                * Therefore: fall-throught
-                */
-       case WLAN_CIPHER_SUITE_TKIP:
-       case WLAN_CIPHER_SUITE_CCMP:
-               /* Remove WEP keys and WEP mode */
-               lbs_remove_wep_keys(priv);
-               priv->mac_control &= ~CMD_ACT_MAC_WEP_ENABLE;
-               lbs_set_mac_control(priv);
-
-               /* clear the WPA/WPA2 keys */
-               lbs_set_key_material(priv,
-                       KEY_TYPE_ID_WEP, /* doesn't matter */
-                       KEY_INFO_WPA_UNICAST,
-                       NULL, 0);
-               lbs_set_key_material(priv,
-                       KEY_TYPE_ID_WEP, /* doesn't matter */
-                       KEY_INFO_WPA_MCAST,
-                       NULL, 0);
-               /* RSN mode for WPA/WPA2 */
-               lbs_enable_rsn(priv, sme->crypto.cipher_group != 0);
-               break;
-       default:
-               lbs_pr_err("unsupported cipher group 0x%x\n",
-                          sme->crypto.cipher_group);
-               ret = -ENOTSUPP;
-               goto done;
-       }
-
-       lbs_set_authtype(priv, sme);
-       lbs_set_radio(priv, preamble, 1);
-
-       /* Do the actual association */
-       ret = lbs_associate(priv, bss, sme);
-
- done:
-       if (bss)
-               cfg80211_put_bss(bss);
-       lbs_deb_leave_args(LBS_DEB_CFG80211, "ret %d", ret);
-       return ret;
-}
-
-static int lbs_cfg_disconnect(struct wiphy *wiphy, struct net_device *dev,
-       u16 reason_code)
-{
-       struct lbs_private *priv = wiphy_priv(wiphy);
-       struct cmd_ds_802_11_deauthenticate cmd;
-
-       lbs_deb_enter_args(LBS_DEB_CFG80211, "reason_code %d", reason_code);
-
-       /* store for lbs_cfg_ret_disconnect() */
-       priv->disassoc_reason = reason_code;
-
-       memset(&cmd, 0, sizeof(cmd));
-       cmd.hdr.size = cpu_to_le16(sizeof(cmd));
-       /* Mildly ugly to use a locally store my own BSSID ... */
-       memcpy(cmd.macaddr, &priv->assoc_bss, ETH_ALEN);
-       cmd.reasoncode = cpu_to_le16(reason_code);
-
-       if (lbs_cmd_with_response(priv, CMD_802_11_DEAUTHENTICATE, &cmd))
-               return -EFAULT;
-
-       cfg80211_disconnected(priv->dev,
-                       priv->disassoc_reason,
-                       NULL, 0,
-                       GFP_KERNEL);
-       priv->connect_status = LBS_DISCONNECTED;
-
-       return 0;
-}
-
-
-static int lbs_cfg_set_default_key(struct wiphy *wiphy,
-                                  struct net_device *netdev,
-                                  u8 key_index)
-{
-       struct lbs_private *priv = wiphy_priv(wiphy);
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       if (key_index != priv->wep_tx_key) {
-               lbs_deb_assoc("set_default_key: to %d\n", key_index);
-               priv->wep_tx_key = key_index;
-               lbs_set_wep_keys(priv);
-       }
-
-       return 0;
-}
-
-
-static int lbs_cfg_add_key(struct wiphy *wiphy, struct net_device *netdev,
-                          u8 idx, const u8 *mac_addr,
-                          struct key_params *params)
-{
-       struct lbs_private *priv = wiphy_priv(wiphy);
-       u16 key_info;
-       u16 key_type;
-       int ret = 0;
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       lbs_deb_assoc("add_key: cipher 0x%x, mac_addr %pM\n",
-                     params->cipher, mac_addr);
-       lbs_deb_assoc("add_key: key index %d, key len %d\n",
-                     idx, params->key_len);
-       if (params->key_len)
-               lbs_deb_hex(LBS_DEB_CFG80211, "KEY",
-                           params->key, params->key_len);
-
-       lbs_deb_assoc("add_key: seq len %d\n", params->seq_len);
-       if (params->seq_len)
-               lbs_deb_hex(LBS_DEB_CFG80211, "SEQ",
-                           params->seq, params->seq_len);
-
-       switch (params->cipher) {
-       case WLAN_CIPHER_SUITE_WEP40:
-       case WLAN_CIPHER_SUITE_WEP104:
-               /* actually compare if something has changed ... */
-               if ((priv->wep_key_len[idx] != params->key_len) ||
-                       memcmp(priv->wep_key[idx],
-                              params->key, params->key_len) != 0) {
-                       priv->wep_key_len[idx] = params->key_len;
-                       memcpy(priv->wep_key[idx],
-                              params->key, params->key_len);
-                       lbs_set_wep_keys(priv);
-               }
-               break;
-       case WLAN_CIPHER_SUITE_TKIP:
-       case WLAN_CIPHER_SUITE_CCMP:
-               key_info = KEY_INFO_WPA_ENABLED | ((idx == 0)
-                                                  ? KEY_INFO_WPA_UNICAST
-                                                  : KEY_INFO_WPA_MCAST);
-               key_type = (params->cipher == WLAN_CIPHER_SUITE_TKIP)
-                       ? KEY_TYPE_ID_TKIP
-                       : KEY_TYPE_ID_AES;
-               lbs_set_key_material(priv,
-                                    key_type,
-                                    key_info,
-                                    params->key, params->key_len);
-               break;
-       default:
-               lbs_pr_err("unhandled cipher 0x%x\n", params->cipher);
-               ret = -ENOTSUPP;
-               break;
-       }
-
-       return ret;
-}
-
-
-static int lbs_cfg_del_key(struct wiphy *wiphy, struct net_device *netdev,
-                          u8 key_index, const u8 *mac_addr)
-{
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       lbs_deb_assoc("del_key: key_idx %d, mac_addr %pM\n",
-                     key_index, mac_addr);
-
-#ifdef TODO
-       struct lbs_private *priv = wiphy_priv(wiphy);
-       /*
-        * I think can keep this a NO-OP, because:
-
-        * - we clear all keys whenever we do lbs_cfg_connect() anyway
-        * - neither "iw" nor "wpa_supplicant" won't call this during
-        *   an ongoing connection
-        * - TODO: but I have to check if this is still true when
-        *   I set the AP to periodic re-keying
-        * - we've not kzallec() something when we've added a key at
-        *   lbs_cfg_connect() or lbs_cfg_add_key().
-        *
-        * This causes lbs_cfg_del_key() only called at disconnect time,
-        * where we'd just waste time deleting a key that is not going
-        * to be used anyway.
-        */
-       if (key_index < 3 && priv->wep_key_len[key_index]) {
-               priv->wep_key_len[key_index] = 0;
-               lbs_set_wep_keys(priv);
-       }
-#endif
-
-       return 0;
-}
-
-
-/***************************************************************************
- * Get station
- */
-
-static int lbs_cfg_get_station(struct wiphy *wiphy, struct net_device *dev,
-                             u8 *mac, struct station_info *sinfo)
-{
-       struct lbs_private *priv = wiphy_priv(wiphy);
-       s8 signal, noise;
-       int ret;
-       size_t i;
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       sinfo->filled |= STATION_INFO_TX_BYTES |
-                        STATION_INFO_TX_PACKETS |
-                        STATION_INFO_RX_BYTES |
-                        STATION_INFO_RX_PACKETS;
-       sinfo->tx_bytes = priv->dev->stats.tx_bytes;
-       sinfo->tx_packets = priv->dev->stats.tx_packets;
-       sinfo->rx_bytes = priv->dev->stats.rx_bytes;
-       sinfo->rx_packets = priv->dev->stats.rx_packets;
-
-       /* Get current RSSI */
-       ret = lbs_get_rssi(priv, &signal, &noise);
-       if (ret == 0) {
-               sinfo->signal = signal;
-               sinfo->filled |= STATION_INFO_SIGNAL;
-       }
-
-       /* Convert priv->cur_rate from hw_value to NL80211 value */
-       for (i = 0; i < ARRAY_SIZE(lbs_rates); i++) {
-               if (priv->cur_rate == lbs_rates[i].hw_value) {
-                       sinfo->txrate.legacy = lbs_rates[i].bitrate;
-                       sinfo->filled |= STATION_INFO_TX_BITRATE;
-                       break;
-               }
-       }
-
-       return 0;
-}
-
-
-
-
-/***************************************************************************
- * "Site survey", here just current channel and noise level
- */
-
-static int lbs_get_survey(struct wiphy *wiphy, struct net_device *dev,
-       int idx, struct survey_info *survey)
-{
-       struct lbs_private *priv = wiphy_priv(wiphy);
-       s8 signal, noise;
-       int ret;
-
-       if (idx != 0)
-               ret = -ENOENT;
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       survey->channel = ieee80211_get_channel(wiphy,
-               ieee80211_channel_to_frequency(priv->channel));
-
-       ret = lbs_get_rssi(priv, &signal, &noise);
-       if (ret == 0) {
-               survey->filled = SURVEY_INFO_NOISE_DBM;
-               survey->noise = noise;
-       }
-
-       lbs_deb_leave_args(LBS_DEB_CFG80211, "ret %d", ret);
-       return ret;
-}
-
-
-
-
-/***************************************************************************
- * Change interface
- */
-
-static int lbs_change_intf(struct wiphy *wiphy, struct net_device *dev,
-       enum nl80211_iftype type, u32 *flags,
-              struct vif_params *params)
-{
-       struct lbs_private *priv = wiphy_priv(wiphy);
-       int ret = 0;
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       switch (type) {
-       case NL80211_IFTYPE_MONITOR:
-               ret = lbs_set_monitor_mode(priv, 1);
-               break;
-       case NL80211_IFTYPE_STATION:
-               if (priv->wdev->iftype == NL80211_IFTYPE_MONITOR)
-                       ret = lbs_set_monitor_mode(priv, 0);
-               if (!ret)
-                       ret = lbs_set_snmp_mib(priv, SNMP_MIB_OID_BSS_TYPE, 1);
-               break;
-       case NL80211_IFTYPE_ADHOC:
-               if (priv->wdev->iftype == NL80211_IFTYPE_MONITOR)
-                       ret = lbs_set_monitor_mode(priv, 0);
-               if (!ret)
-                       ret = lbs_set_snmp_mib(priv, SNMP_MIB_OID_BSS_TYPE, 2);
-               break;
-       default:
-               ret = -ENOTSUPP;
-       }
-
-       if (!ret)
-               priv->wdev->iftype = type;
-
-       lbs_deb_leave_args(LBS_DEB_CFG80211, "ret %d", ret);
-       return ret;
-}
-
-
-
-/***************************************************************************
- * IBSS (Ad-Hoc)
- */
-
-/* The firmware needs the following bits masked out of the beacon-derived
- * capability field when associating/joining to a BSS:
- *  9 (QoS), 11 (APSD), 12 (unused), 14 (unused), 15 (unused)
- */
-#define CAPINFO_MASK (~(0xda00))
-
-
-static void lbs_join_post(struct lbs_private *priv,
-                         struct cfg80211_ibss_params *params,
-                         u8 *bssid, u16 capability)
-{
-       u8 fake_ie[2 + IEEE80211_MAX_SSID_LEN + /* ssid */
-                  2 + 4 +                      /* basic rates */
-                  2 + 1 +                      /* DS parameter */
-                  2 + 2 +                      /* atim */
-                  2 + 8];                      /* extended rates */
-       u8 *fake = fake_ie;
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       /*
-        * For cfg80211_inform_bss, we'll need a fake IE, as we can't get
-        * the real IE from the firmware. So we fabricate a fake IE based on
-        * what the firmware actually sends (sniffed with wireshark).
-        */
-       /* Fake SSID IE */
-       *fake++ = WLAN_EID_SSID;
-       *fake++ = params->ssid_len;
-       memcpy(fake, params->ssid, params->ssid_len);
-       fake += params->ssid_len;
-       /* Fake supported basic rates IE */
-       *fake++ = WLAN_EID_SUPP_RATES;
-       *fake++ = 4;
-       *fake++ = 0x82;
-       *fake++ = 0x84;
-       *fake++ = 0x8b;
-       *fake++ = 0x96;
-       /* Fake DS channel IE */
-       *fake++ = WLAN_EID_DS_PARAMS;
-       *fake++ = 1;
-       *fake++ = params->channel->hw_value;
-       /* Fake IBSS params IE */
-       *fake++ = WLAN_EID_IBSS_PARAMS;
-       *fake++ = 2;
-       *fake++ = 0; /* ATIM=0 */
-       *fake++ = 0;
-       /* Fake extended rates IE, TODO: don't add this for 802.11b only,
-        * but I don't know how this could be checked */
-       *fake++ = WLAN_EID_EXT_SUPP_RATES;
-       *fake++ = 8;
-       *fake++ = 0x0c;
-       *fake++ = 0x12;
-       *fake++ = 0x18;
-       *fake++ = 0x24;
-       *fake++ = 0x30;
-       *fake++ = 0x48;
-       *fake++ = 0x60;
-       *fake++ = 0x6c;
-       lbs_deb_hex(LBS_DEB_CFG80211, "IE", fake_ie, fake - fake_ie);
-
-       cfg80211_inform_bss(priv->wdev->wiphy,
-                           params->channel,
-                           bssid,
-                           0,
-                           capability,
-                           params->beacon_interval,
-                           fake_ie, fake - fake_ie,
-                           0, GFP_KERNEL);
-
-       memcpy(priv->wdev->ssid, params->ssid, params->ssid_len);
-       priv->wdev->ssid_len = params->ssid_len;
-
-       cfg80211_ibss_joined(priv->dev, bssid, GFP_KERNEL);
-
-       /* TODO: consider doing this at MACREG_INT_CODE_LINK_SENSED time */
-       priv->connect_status = LBS_CONNECTED;
-       netif_carrier_on(priv->dev);
-       if (!priv->tx_pending_len)
-               netif_wake_queue(priv->dev);
-
-       lbs_deb_leave(LBS_DEB_CFG80211);
-}
-
-static int lbs_ibss_join_existing(struct lbs_private *priv,
-       struct cfg80211_ibss_params *params,
-       struct cfg80211_bss *bss)
-{
-       const u8 *rates_eid = ieee80211_bss_get_ie(bss, WLAN_EID_SUPP_RATES);
-       struct cmd_ds_802_11_ad_hoc_join cmd;
-       u8 preamble = RADIO_PREAMBLE_SHORT;
-       int ret = 0;
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       /* TODO: set preamble based on scan result */
-       ret = lbs_set_radio(priv, preamble, 1);
-       if (ret)
-               goto out;
-
-       /*
-        * Example CMD_802_11_AD_HOC_JOIN command:
-        *
-        * command         2c 00         CMD_802_11_AD_HOC_JOIN
-        * size            65 00
-        * sequence        xx xx
-        * result          00 00
-        * bssid           02 27 27 97 2f 96
-        * ssid            49 42 53 53 00 00 00 00
-        *                 00 00 00 00 00 00 00 00
-        *                 00 00 00 00 00 00 00 00
-        *                 00 00 00 00 00 00 00 00
-        * type            02            CMD_BSS_TYPE_IBSS
-        * beacon period   64 00
-        * dtim period     00
-        * timestamp       00 00 00 00 00 00 00 00
-        * localtime       00 00 00 00 00 00 00 00
-        * IE DS           03
-        * IE DS len       01
-        * IE DS channel   01
-        * reserveed       00 00 00 00
-        * IE IBSS         06
-        * IE IBSS len     02
-        * IE IBSS atim    00 00
-        * reserved        00 00 00 00
-        * capability      02 00
-        * rates           82 84 8b 96 0c 12 18 24 30 48 60 6c 00
-        * fail timeout    ff 00
-        * probe delay     00 00
-        */
-       memset(&cmd, 0, sizeof(cmd));
-       cmd.hdr.size = cpu_to_le16(sizeof(cmd));
-
-       memcpy(cmd.bss.bssid, bss->bssid, ETH_ALEN);
-       memcpy(cmd.bss.ssid, params->ssid, params->ssid_len);
-       cmd.bss.type = CMD_BSS_TYPE_IBSS;
-       cmd.bss.beaconperiod = cpu_to_le16(params->beacon_interval);
-       cmd.bss.ds.header.id = WLAN_EID_DS_PARAMS;
-       cmd.bss.ds.header.len = 1;
-       cmd.bss.ds.channel = params->channel->hw_value;
-       cmd.bss.ibss.header.id = WLAN_EID_IBSS_PARAMS;
-       cmd.bss.ibss.header.len = 2;
-       cmd.bss.ibss.atimwindow = 0;
-       cmd.bss.capability = cpu_to_le16(bss->capability & CAPINFO_MASK);
-
-       /* set rates to the intersection of our rates and the rates in the
-          bss */
-       if (!rates_eid) {
-               lbs_add_rates(cmd.bss.rates);
-       } else {
-               int hw, i;
-               u8 rates_max = rates_eid[1];
-               u8 *rates = cmd.bss.rates;
-               for (hw = 0; hw < ARRAY_SIZE(lbs_rates); hw++) {
-                       u8 hw_rate = lbs_rates[hw].bitrate / 5;
-                       for (i = 0; i < rates_max; i++) {
-                               if (hw_rate == (rates_eid[i+2] & 0x7f)) {
-                                       u8 rate = rates_eid[i+2];
-                                       if (rate == 0x02 || rate == 0x04 ||
-                                           rate == 0x0b || rate == 0x16)
-                                               rate |= 0x80;
-                                       *rates++ = rate;
-                               }
-                       }
-               }
-       }
-
-       /* Only v8 and below support setting this */
-       if (MRVL_FW_MAJOR_REV(priv->fwrelease) <= 8) {
-               cmd.failtimeout = cpu_to_le16(MRVDRV_ASSOCIATION_TIME_OUT);
-               cmd.probedelay = cpu_to_le16(CMD_SCAN_PROBE_DELAY_TIME);
-       }
-       ret = lbs_cmd_with_response(priv, CMD_802_11_AD_HOC_JOIN, &cmd);
-       if (ret)
-               goto out;
-
-       /*
-        * This is a sample response to CMD_802_11_AD_HOC_JOIN:
-        *
-        * response        2c 80
-        * size            09 00
-        * sequence        xx xx
-        * result          00 00
-        * reserved        00
-        */
-       lbs_join_post(priv, params, bss->bssid, bss->capability);
-
- out:
-       lbs_deb_leave_args(LBS_DEB_CFG80211, "ret %d", ret);
-       return ret;
-}
-
-
-
-static int lbs_ibss_start_new(struct lbs_private *priv,
-       struct cfg80211_ibss_params *params)
-{
-       struct cmd_ds_802_11_ad_hoc_start cmd;
-       struct cmd_ds_802_11_ad_hoc_result *resp =
-               (struct cmd_ds_802_11_ad_hoc_result *) &cmd;
-       u8 preamble = RADIO_PREAMBLE_SHORT;
-       int ret = 0;
-       u16 capability;
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       ret = lbs_set_radio(priv, preamble, 1);
-       if (ret)
-               goto out;
-
-       /*
-        * Example CMD_802_11_AD_HOC_START command:
-        *
-        * command         2b 00         CMD_802_11_AD_HOC_START
-        * size            b1 00
-        * sequence        xx xx
-        * result          00 00
-        * ssid            54 45 53 54 00 00 00 00
-        *                 00 00 00 00 00 00 00 00
-        *                 00 00 00 00 00 00 00 00
-        *                 00 00 00 00 00 00 00 00
-        * bss type        02
-        * beacon period   64 00
-        * dtim period     00
-        * IE IBSS         06
-        * IE IBSS len     02
-        * IE IBSS atim    00 00
-        * reserved        00 00 00 00
-        * IE DS           03
-        * IE DS len       01
-        * IE DS channel   01
-        * reserved        00 00 00 00
-        * probe delay     00 00
-        * capability      02 00
-        * rates           82 84 8b 96   (basic rates with have bit 7 set)
-        *                 0c 12 18 24 30 48 60 6c
-        * padding         100 bytes
-        */
-       memset(&cmd, 0, sizeof(cmd));
-       cmd.hdr.size = cpu_to_le16(sizeof(cmd));
-       memcpy(cmd.ssid, params->ssid, params->ssid_len);
-       cmd.bsstype = CMD_BSS_TYPE_IBSS;
-       cmd.beaconperiod = cpu_to_le16(params->beacon_interval);
-       cmd.ibss.header.id = WLAN_EID_IBSS_PARAMS;
-       cmd.ibss.header.len = 2;
-       cmd.ibss.atimwindow = 0;
-       cmd.ds.header.id = WLAN_EID_DS_PARAMS;
-       cmd.ds.header.len = 1;
-       cmd.ds.channel = params->channel->hw_value;
-       /* Only v8 and below support setting probe delay */
-       if (MRVL_FW_MAJOR_REV(priv->fwrelease) <= 8)
-               cmd.probedelay = cpu_to_le16(CMD_SCAN_PROBE_DELAY_TIME);
-       /* TODO: mix in WLAN_CAPABILITY_PRIVACY */
-       capability = WLAN_CAPABILITY_IBSS;
-       cmd.capability = cpu_to_le16(capability);
-       lbs_add_rates(cmd.rates);
-
-
-       ret = lbs_cmd_with_response(priv, CMD_802_11_AD_HOC_START, &cmd);
-       if (ret)
-               goto out;
-
-       /*
-        * This is a sample response to CMD_802_11_AD_HOC_JOIN:
-        *
-        * response        2b 80
-        * size            14 00
-        * sequence        xx xx
-        * result          00 00
-        * reserved        00
-        * bssid           02 2b 7b 0f 86 0e
-        */
-       lbs_join_post(priv, params, resp->bssid, capability);
-
- out:
-       lbs_deb_leave_args(LBS_DEB_CFG80211, "ret %d", ret);
-       return ret;
-}
-
-
-static int lbs_join_ibss(struct wiphy *wiphy, struct net_device *dev,
-               struct cfg80211_ibss_params *params)
-{
-       struct lbs_private *priv = wiphy_priv(wiphy);
-       int ret = 0;
-       struct cfg80211_bss *bss;
-       DECLARE_SSID_BUF(ssid_buf);
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       if (!params->channel) {
-               ret = -ENOTSUPP;
-               goto out;
-       }
-
-       ret = lbs_set_channel(priv, params->channel->hw_value);
-       if (ret)
-               goto out;
-
-       /* Search if someone is beaconing. This assumes that the
-        * bss list is populated already */
-       bss = cfg80211_get_bss(wiphy, params->channel, params->bssid,
-               params->ssid, params->ssid_len,
-               WLAN_CAPABILITY_IBSS, WLAN_CAPABILITY_IBSS);
-
-       if (bss) {
-               ret = lbs_ibss_join_existing(priv, params, bss);
-               cfg80211_put_bss(bss);
-       } else
-               ret = lbs_ibss_start_new(priv, params);
-
-
- out:
-       lbs_deb_leave_args(LBS_DEB_CFG80211, "ret %d", ret);
-       return ret;
-}
-
-
-static int lbs_leave_ibss(struct wiphy *wiphy, struct net_device *dev)
-{
-       struct lbs_private *priv = wiphy_priv(wiphy);
-       struct cmd_ds_802_11_ad_hoc_stop cmd;
-       int ret = 0;
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       memset(&cmd, 0, sizeof(cmd));
-       cmd.hdr.size = cpu_to_le16(sizeof(cmd));
-       ret = lbs_cmd_with_response(priv, CMD_802_11_AD_HOC_STOP, &cmd);
-
-       /* TODO: consider doing this at MACREG_INT_CODE_ADHOC_BCN_LOST time */
-       lbs_mac_event_disconnected(priv);
-
-       lbs_deb_leave_args(LBS_DEB_CFG80211, "ret %d", ret);
-       return ret;
-}
-
-
-
-
-/***************************************************************************
- * Initialization
- */
-
-static struct cfg80211_ops lbs_cfg80211_ops = {
-       .set_channel = lbs_cfg_set_channel,
-       .scan = lbs_cfg_scan,
-       .connect = lbs_cfg_connect,
-       .disconnect = lbs_cfg_disconnect,
-       .add_key = lbs_cfg_add_key,
-       .del_key = lbs_cfg_del_key,
-       .set_default_key = lbs_cfg_set_default_key,
-       .get_station = lbs_cfg_get_station,
-       .dump_survey = lbs_get_survey,
-       .change_virtual_intf = lbs_change_intf,
-       .join_ibss = lbs_join_ibss,
-       .leave_ibss = lbs_leave_ibss,
-};
-
-
-/*
- * At this time lbs_private *priv doesn't even exist, so we just allocate
- * memory and don't initialize the wiphy further. This is postponed until we
- * can talk to the firmware and happens at registration time in
- * lbs_cfg_wiphy_register().
- */
-struct wireless_dev *lbs_cfg_alloc(struct device *dev)
-{
-       int ret = 0;
-       struct wireless_dev *wdev;
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       wdev = kzalloc(sizeof(struct wireless_dev), GFP_KERNEL);
-       if (!wdev) {
-               dev_err(dev, "cannot allocate wireless device\n");
-               return ERR_PTR(-ENOMEM);
-       }
-
-       wdev->wiphy = wiphy_new(&lbs_cfg80211_ops, sizeof(struct lbs_private));
-       if (!wdev->wiphy) {
-               dev_err(dev, "cannot allocate wiphy\n");
-               ret = -ENOMEM;
-               goto err_wiphy_new;
-       }
-
-       lbs_deb_leave(LBS_DEB_CFG80211);
-       return wdev;
-
- err_wiphy_new:
-       kfree(wdev);
-       lbs_deb_leave_args(LBS_DEB_CFG80211, "ret %d", ret);
-       return ERR_PTR(ret);
-}
-
-
-static void lbs_cfg_set_regulatory_hint(struct lbs_private *priv)
-{
-       struct region_code_mapping {
-               const char *cn;
-               int code;
-       };
-
-       /* Section 5.17.2 */
-       static struct region_code_mapping regmap[] = {
-               {"US ", 0x10}, /* US FCC */
-               {"CA ", 0x20}, /* Canada */
-               {"EU ", 0x30}, /* ETSI   */
-               {"ES ", 0x31}, /* Spain  */
-               {"FR ", 0x32}, /* France */
-               {"JP ", 0x40}, /* Japan  */
-       };
-       size_t i;
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       for (i = 0; i < ARRAY_SIZE(regmap); i++)
-               if (regmap[i].code == priv->regioncode) {
-                       regulatory_hint(priv->wdev->wiphy, regmap[i].cn);
-                       break;
-               }
-
-       lbs_deb_leave(LBS_DEB_CFG80211);
-}
-
-
-/*
- * This function get's called after lbs_setup_firmware() determined the
- * firmware capabities. So we can setup the wiphy according to our
- * hardware/firmware.
- */
-int lbs_cfg_register(struct lbs_private *priv)
-{
-       struct wireless_dev *wdev = priv->wdev;
-       int ret;
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       wdev->wiphy->max_scan_ssids = 1;
-       wdev->wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM;
-
-       wdev->wiphy->interface_modes =
-                       BIT(NL80211_IFTYPE_STATION) |
-                       BIT(NL80211_IFTYPE_ADHOC);
-       if (lbs_rtap_supported(priv))
-               wdev->wiphy->interface_modes |= BIT(NL80211_IFTYPE_MONITOR);
-
-       wdev->wiphy->bands[IEEE80211_BAND_2GHZ] = &lbs_band_2ghz;
-
-       /*
-        * We could check priv->fwcapinfo && FW_CAPINFO_WPA, but I have
-        * never seen a firmware without WPA
-        */
-       wdev->wiphy->cipher_suites = cipher_suites;
-       wdev->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
-       wdev->wiphy->reg_notifier = lbs_reg_notifier;
-
-       ret = wiphy_register(wdev->wiphy);
-       if (ret < 0)
-               lbs_pr_err("cannot register wiphy device\n");
-
-       priv->wiphy_registered = true;
-
-       ret = register_netdev(priv->dev);
-       if (ret)
-               lbs_pr_err("cannot register network device\n");
-
-       INIT_DELAYED_WORK(&priv->scan_work, lbs_scan_worker);
-
-       lbs_cfg_set_regulatory_hint(priv);
-
-       lbs_deb_leave_args(LBS_DEB_CFG80211, "ret %d", ret);
-       return ret;
-}
-
-int lbs_reg_notifier(struct wiphy *wiphy,
-               struct regulatory_request *request)
-{
-       struct lbs_private *priv = wiphy_priv(wiphy);
-       int ret;
-
-       lbs_deb_enter_args(LBS_DEB_CFG80211, "cfg80211 regulatory domain "
-                       "callback for domain %c%c\n", request->alpha2[0],
-                       request->alpha2[1]);
-
-       ret = lbs_set_11d_domain_info(priv, request, wiphy->bands);
-
-       lbs_deb_leave(LBS_DEB_CFG80211);
-       return ret;
-}
-
-void lbs_scan_deinit(struct lbs_private *priv)
-{
-       lbs_deb_enter(LBS_DEB_CFG80211);
-       cancel_delayed_work_sync(&priv->scan_work);
-}
-
-
-void lbs_cfg_free(struct lbs_private *priv)
-{
-       struct wireless_dev *wdev = priv->wdev;
-
-       lbs_deb_enter(LBS_DEB_CFG80211);
-
-       if (!wdev)
-               return;
-
-       if (priv->wiphy_registered)
-               wiphy_unregister(wdev->wiphy);
-
-       if (wdev->wiphy)
-               wiphy_free(wdev->wiphy);
-
-       kfree(wdev);
-}
diff --git a/drivers/net/wireless/libertas/cfg.h b/drivers/net/wireless/libertas/cfg.h
deleted file mode 100644 (file)
index 4f46bb7..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef __LBS_CFG80211_H__
-#define __LBS_CFG80211_H__
-
-struct device;
-struct lbs_private;
-struct regulatory_request;
-struct wiphy;
-
-struct wireless_dev *lbs_cfg_alloc(struct device *dev);
-int lbs_cfg_register(struct lbs_private *priv);
-void lbs_cfg_free(struct lbs_private *priv);
-
-int lbs_reg_notifier(struct wiphy *wiphy,
-               struct regulatory_request *request);
-
-void lbs_send_disconnect_notification(struct lbs_private *priv);
-void lbs_send_mic_failureevent(struct lbs_private *priv, u32 event);
-
-void lbs_scan_deinit(struct lbs_private *priv);
-
-#endif
diff --git a/drivers/net/wireless/libertas/mesh.c b/drivers/net/wireless/libertas/mesh.c
deleted file mode 100644 (file)
index 194762a..0000000
+++ /dev/null
@@ -1,1276 +0,0 @@
-#include <linux/delay.h>
-#include <linux/etherdevice.h>
-#include <linux/netdevice.h>
-#include <linux/if_ether.h>
-#include <linux/if_arp.h>
-#include <linux/kthread.h>
-#include <linux/kfifo.h>
-#include <net/cfg80211.h>
-
-#include "mesh.h"
-#include "decl.h"
-#include "cmd.h"
-
-
-/***************************************************************************
- * Mesh sysfs support
- */
-
-/**
- * Attributes exported through sysfs
- */
-
-/**
- * @brief Get function for sysfs attribute anycast_mask
- */
-static ssize_t lbs_anycast_get(struct device *dev,
-               struct device_attribute *attr, char * buf)
-{
-       struct lbs_private *priv = to_net_dev(dev)->ml_priv;
-       struct cmd_ds_mesh_access mesh_access;
-       int ret;
-
-       memset(&mesh_access, 0, sizeof(mesh_access));
-
-       ret = lbs_mesh_access(priv, CMD_ACT_MESH_GET_ANYCAST, &mesh_access);
-       if (ret)
-               return ret;
-
-       return snprintf(buf, 12, "0x%X\n", le32_to_cpu(mesh_access.data[0]));
-}
-
-/**
- * @brief Set function for sysfs attribute anycast_mask
- */
-static ssize_t lbs_anycast_set(struct device *dev,
-               struct device_attribute *attr, const char * buf, size_t count)
-{
-       struct lbs_private *priv = to_net_dev(dev)->ml_priv;
-       struct cmd_ds_mesh_access mesh_access;
-       uint32_t datum;
-       int ret;
-
-       memset(&mesh_access, 0, sizeof(mesh_access));
-       sscanf(buf, "%x", &datum);
-       mesh_access.data[0] = cpu_to_le32(datum);
-
-       ret = lbs_mesh_access(priv, CMD_ACT_MESH_SET_ANYCAST, &mesh_access);
-       if (ret)
-               return ret;
-
-       return strlen(buf);
-}
-
-/**
- * @brief Get function for sysfs attribute prb_rsp_limit
- */
-static ssize_t lbs_prb_rsp_limit_get(struct device *dev,
-               struct device_attribute *attr, char *buf)
-{
-       struct lbs_private *priv = to_net_dev(dev)->ml_priv;
-       struct cmd_ds_mesh_access mesh_access;
-       int ret;
-       u32 retry_limit;
-
-       memset(&mesh_access, 0, sizeof(mesh_access));
-       mesh_access.data[0] = cpu_to_le32(CMD_ACT_GET);
-
-       ret = lbs_mesh_access(priv, CMD_ACT_MESH_SET_GET_PRB_RSP_LIMIT,
-                       &mesh_access);
-       if (ret)
-               return ret;
-
-       retry_limit = le32_to_cpu(mesh_access.data[1]);
-       return snprintf(buf, 10, "%d\n", retry_limit);
-}
-
-/**
- * @brief Set function for sysfs attribute prb_rsp_limit
- */
-static ssize_t lbs_prb_rsp_limit_set(struct device *dev,
-               struct device_attribute *attr, const char *buf, size_t count)
-{
-       struct lbs_private *priv = to_net_dev(dev)->ml_priv;
-       struct cmd_ds_mesh_access mesh_access;
-       int ret;
-       unsigned long retry_limit;
-
-       memset(&mesh_access, 0, sizeof(mesh_access));
-       mesh_access.data[0] = cpu_to_le32(CMD_ACT_SET);
-
-       if (!strict_strtoul(buf, 10, &retry_limit))
-               return -ENOTSUPP;
-       if (retry_limit > 15)
-               return -ENOTSUPP;
-
-       mesh_access.data[1] = cpu_to_le32(retry_limit);
-
-       ret = lbs_mesh_access(priv, CMD_ACT_MESH_SET_GET_PRB_RSP_LIMIT,
-                       &mesh_access);
-       if (ret)
-               return ret;
-
-       return strlen(buf);
-}
-
-/**
- * Get function for sysfs attribute mesh
- */
-static ssize_t lbs_mesh_get(struct device *dev,
-               struct device_attribute *attr, char * buf)
-{
-       struct lbs_private *priv = to_net_dev(dev)->ml_priv;
-       return snprintf(buf, 5, "0x%X\n", !!priv->mesh_dev);
-}
-
-/**
- *  Set function for sysfs attribute mesh
- */
-static ssize_t lbs_mesh_set(struct device *dev,
-               struct device_attribute *attr, const char * buf, size_t count)
-{
-       struct lbs_private *priv = to_net_dev(dev)->ml_priv;
-       int enable;
-       int ret, action = CMD_ACT_MESH_CONFIG_STOP;
-
-       sscanf(buf, "%x", &enable);
-       enable = !!enable;
-       if (enable == !!priv->mesh_dev)
-               return count;
-       if (enable)
-               action = CMD_ACT_MESH_CONFIG_START;
-       ret = lbs_mesh_config(priv, action, priv->channel);
-       if (ret)
-               return ret;
-
-       if (enable)
-               lbs_add_mesh(priv);
-       else
-               lbs_remove_mesh(priv);
-
-       return count;
-}
-
-/**
- * lbs_mesh attribute to be exported per ethX interface
- * through sysfs (/sys/class/net/ethX/lbs_mesh)
- */
-static DEVICE_ATTR(lbs_mesh, 0644, lbs_mesh_get, lbs_mesh_set);
-
-/**
- * anycast_mask attribute to be exported per mshX interface
- * through sysfs (/sys/class/net/mshX/anycast_mask)
- */
-static DEVICE_ATTR(anycast_mask, 0644, lbs_anycast_get, lbs_anycast_set);
-
-/**
- * prb_rsp_limit attribute to be exported per mshX interface
- * through sysfs (/sys/class/net/mshX/prb_rsp_limit)
- */
-static DEVICE_ATTR(prb_rsp_limit, 0644, lbs_prb_rsp_limit_get,
-               lbs_prb_rsp_limit_set);
-
-static struct attribute *lbs_mesh_sysfs_entries[] = {
-       &dev_attr_anycast_mask.attr,
-       &dev_attr_prb_rsp_limit.attr,
-       NULL,
-};
-
-static struct attribute_group lbs_mesh_attr_group = {
-       .attrs = lbs_mesh_sysfs_entries,
-};
-
-
-
-/***************************************************************************
- * Initializing and starting, stopping mesh
- */
-
-/*
- * Check mesh FW version and appropriately send the mesh start
- * command
- */
-int lbs_init_mesh(struct lbs_private *priv)
-{
-       struct net_device *dev = priv->dev;
-       int ret = 0;
-
-       lbs_deb_enter(LBS_DEB_MESH);
-
-       priv->mesh_connect_status = LBS_DISCONNECTED;
-
-       /* Determine mesh_fw_ver from fwrelease and fwcapinfo */
-       /* 5.0.16p0 9.0.0.p0 is known to NOT support any mesh */
-       /* 5.110.22 have mesh command with 0xa3 command id */
-       /* 10.0.0.p0 FW brings in mesh config command with different id */
-       /* Check FW version MSB and initialize mesh_fw_ver */
-       if (MRVL_FW_MAJOR_REV(priv->fwrelease) == MRVL_FW_V5) {
-               /* Enable mesh, if supported, and work out which TLV it uses.
-                  0x100 + 291 is an unofficial value used in 5.110.20.pXX
-                  0x100 + 37 is the official value used in 5.110.21.pXX
-                  but we check them in that order because 20.pXX doesn't
-                  give an error -- it just silently fails. */
-
-               /* 5.110.20.pXX firmware will fail the command if the channel
-                  doesn't match the existing channel. But only if the TLV
-                  is correct. If the channel is wrong, _BOTH_ versions will
-                  give an error to 0x100+291, and allow 0x100+37 to succeed.
-                  It's just that 5.110.20.pXX will not have done anything
-                  useful */
-
-               priv->mesh_tlv = TLV_TYPE_OLD_MESH_ID;
-               if (lbs_mesh_config(priv, CMD_ACT_MESH_CONFIG_START,
-                                   priv->channel)) {
-                       priv->mesh_tlv = TLV_TYPE_MESH_ID;
-                       if (lbs_mesh_config(priv, CMD_ACT_MESH_CONFIG_START,
-                                           priv->channel))
-                               priv->mesh_tlv = 0;
-               }
-       } else
-       if ((MRVL_FW_MAJOR_REV(priv->fwrelease) >= MRVL_FW_V10) &&
-               (priv->fwcapinfo & MESH_CAPINFO_ENABLE_MASK)) {
-               /* 10.0.0.pXX new firmwares should succeed with TLV
-                * 0x100+37; Do not invoke command with old TLV.
-                */
-               priv->mesh_tlv = TLV_TYPE_MESH_ID;
-               if (lbs_mesh_config(priv, CMD_ACT_MESH_CONFIG_START,
-                                   priv->channel))
-                       priv->mesh_tlv = 0;
-       }
-
-
-       if (priv->mesh_tlv) {
-               sprintf(priv->mesh_ssid, "mesh");
-               priv->mesh_ssid_len = 4;
-
-               lbs_add_mesh(priv);
-
-               if (device_create_file(&dev->dev, &dev_attr_lbs_mesh))
-                       lbs_pr_err("cannot register lbs_mesh attribute\n");
-
-               ret = 1;
-       }
-
-       lbs_deb_leave_args(LBS_DEB_MESH, "ret %d", ret);
-       return ret;
-}
-
-
-int lbs_deinit_mesh(struct lbs_private *priv)
-{
-       struct net_device *dev = priv->dev;
-       int ret = 0;
-
-       lbs_deb_enter(LBS_DEB_MESH);
-
-       if (priv->mesh_tlv) {
-               device_remove_file(&dev->dev, &dev_attr_lbs_mesh);
-               ret = 1;
-       }
-
-       lbs_deb_leave_args(LBS_DEB_MESH, "ret %d", ret);
-       return ret;
-}
-
-
-/**
- *  @brief This function closes the mshX interface
- *
- *  @param dev     A pointer to net_device structure
- *  @return       0
- */
-static int lbs_mesh_stop(struct net_device *dev)
-{
-       struct lbs_private *priv = dev->ml_priv;
-
-       lbs_deb_enter(LBS_DEB_MESH);
-       spin_lock_irq(&priv->driver_lock);
-
-       priv->mesh_open = 0;
-       priv->mesh_connect_status = LBS_DISCONNECTED;
-
-       netif_stop_queue(dev);
-       netif_carrier_off(dev);
-
-       spin_unlock_irq(&priv->driver_lock);
-
-       schedule_work(&priv->mcast_work);
-
-       lbs_deb_leave(LBS_DEB_MESH);
-       return 0;
-}
-
-/**
- *  @brief This function opens the mshX interface
- *
- *  @param dev     A pointer to net_device structure
- *  @return       0 or -EBUSY if monitor mode active
- */
-static int lbs_mesh_dev_open(struct net_device *dev)
-{
-       struct lbs_private *priv = dev->ml_priv;
-       int ret = 0;
-
-       lbs_deb_enter(LBS_DEB_NET);
-
-       spin_lock_irq(&priv->driver_lock);
-
-       if (priv->wdev->iftype == NL80211_IFTYPE_MONITOR) {
-               ret = -EBUSY;
-               goto out;
-       }
-
-       priv->mesh_open = 1;
-       priv->mesh_connect_status = LBS_CONNECTED;
-       netif_carrier_on(dev);
-
-       if (!priv->tx_pending_len)
-               netif_wake_queue(dev);
- out:
-
-       spin_unlock_irq(&priv->driver_lock);
-       lbs_deb_leave_args(LBS_DEB_NET, "ret %d", ret);
-       return ret;
-}
-
-static const struct net_device_ops mesh_netdev_ops = {
-       .ndo_open               = lbs_mesh_dev_open,
-       .ndo_stop               = lbs_mesh_stop,
-       .ndo_start_xmit         = lbs_hard_start_xmit,
-       .ndo_set_mac_address    = lbs_set_mac_address,
-       .ndo_set_multicast_list = lbs_set_multicast_list,
-};
-
-/**
- * @brief This function adds mshX interface
- *
- *  @param priv    A pointer to the struct lbs_private structure
- *  @return       0 if successful, -X otherwise
- */
-int lbs_add_mesh(struct lbs_private *priv)
-{
-       struct net_device *mesh_dev = NULL;
-       int ret = 0;
-
-       lbs_deb_enter(LBS_DEB_MESH);
-
-       /* Allocate a virtual mesh device */
-       mesh_dev = alloc_netdev(0, "msh%d", ether_setup);
-       if (!mesh_dev) {
-               lbs_deb_mesh("init mshX device failed\n");
-               ret = -ENOMEM;
-               goto done;
-       }
-       mesh_dev->ml_priv = priv;
-       priv->mesh_dev = mesh_dev;
-
-       mesh_dev->netdev_ops = &mesh_netdev_ops;
-       mesh_dev->ethtool_ops = &lbs_ethtool_ops;
-       memcpy(mesh_dev->dev_addr, priv->dev->dev_addr, ETH_ALEN);
-
-       SET_NETDEV_DEV(priv->mesh_dev, priv->dev->dev.parent);
-
-       mesh_dev->flags |= IFF_BROADCAST | IFF_MULTICAST;
-       /* Register virtual mesh interface */
-       ret = register_netdev(mesh_dev);
-       if (ret) {
-               lbs_pr_err("cannot register mshX virtual interface\n");
-               goto err_free;
-       }
-
-       ret = sysfs_create_group(&(mesh_dev->dev.kobj), &lbs_mesh_attr_group);
-       if (ret)
-               goto err_unregister;
-
-       lbs_persist_config_init(mesh_dev);
-
-       /* Everything successful */
-       ret = 0;
-       goto done;
-
-err_unregister:
-       unregister_netdev(mesh_dev);
-
-err_free:
-       free_netdev(mesh_dev);
-
-done:
-       lbs_deb_leave_args(LBS_DEB_MESH, "ret %d", ret);
-       return ret;
-}
-
-void lbs_remove_mesh(struct lbs_private *priv)
-{
-       struct net_device *mesh_dev;
-
-       mesh_dev = priv->mesh_dev;
-       if (!mesh_dev)
-               return;
-
-       lbs_deb_enter(LBS_DEB_MESH);
-       netif_stop_queue(mesh_dev);
-       netif_carrier_off(mesh_dev);
-       sysfs_remove_group(&(mesh_dev->dev.kobj), &lbs_mesh_attr_group);
-       lbs_persist_config_remove(mesh_dev);
-       unregister_netdev(mesh_dev);
-       priv->mesh_dev = NULL;
-       free_netdev(mesh_dev);
-       lbs_deb_leave(LBS_DEB_MESH);
-}
-
-
-
-/***************************************************************************
- * Sending and receiving
- */
-struct net_device *lbs_mesh_set_dev(struct lbs_private *priv,
-       struct net_device *dev, struct rxpd *rxpd)
-{
-       if (priv->mesh_dev) {
-               if (priv->mesh_tlv == TLV_TYPE_OLD_MESH_ID) {
-                       if (rxpd->rx_control & RxPD_MESH_FRAME)
-                               dev = priv->mesh_dev;
-               } else if (priv->mesh_tlv == TLV_TYPE_MESH_ID) {
-                       if (rxpd->u.bss.bss_num == MESH_IFACE_ID)
-                               dev = priv->mesh_dev;
-               }
-       }
-       return dev;
-}
-
-
-void lbs_mesh_set_txpd(struct lbs_private *priv,
-       struct net_device *dev, struct txpd *txpd)
-{
-       if (dev == priv->mesh_dev) {
-               if (priv->mesh_tlv == TLV_TYPE_OLD_MESH_ID)
-                       txpd->tx_control |= cpu_to_le32(TxPD_MESH_FRAME);
-               else if (priv->mesh_tlv == TLV_TYPE_MESH_ID)
-                       txpd->u.bss.bss_num = MESH_IFACE_ID;
-       }
-}
-
-
-/***************************************************************************
- * Mesh command handling
- */
-
-/**
- *  @brief Add or delete Mesh Blinding Table entries
- *
- *  @param priv        A pointer to struct lbs_private structure
- *  @param add         TRUE to add the entry, FALSE to delete it
- *  @param addr1        Destination address to blind or unblind
- *
- *  @return            0 on success, error on failure
- */
-int lbs_mesh_bt_add_del(struct lbs_private *priv, bool add, u8 *addr1)
-{
-       struct cmd_ds_bt_access cmd;
-       int ret = 0;
-
-       lbs_deb_enter(LBS_DEB_CMD);
-
-       BUG_ON(addr1 == NULL);
-
-       memset(&cmd, 0, sizeof(cmd));
-       cmd.hdr.size = cpu_to_le16(sizeof(cmd));
-       memcpy(cmd.addr1, addr1, ETH_ALEN);
-       if (add) {
-               cmd.action = cpu_to_le16(CMD_ACT_BT_ACCESS_ADD);
-               lbs_deb_hex(LBS_DEB_MESH, "BT_ADD: blinded MAC addr",
-                       addr1, ETH_ALEN);
-       } else {
-               cmd.action = cpu_to_le16(CMD_ACT_BT_ACCESS_DEL);
-               lbs_deb_hex(LBS_DEB_MESH, "BT_DEL: blinded MAC addr",
-                       addr1, ETH_ALEN);
-       }
-
-       ret = lbs_cmd_with_response(priv, CMD_BT_ACCESS, &cmd);
-
-       lbs_deb_leave_args(LBS_DEB_CMD, "ret %d", ret);
-       return ret;
-}
-
-/**
- *  @brief Reset/clear the mesh blinding table
- *
- *  @param priv        A pointer to struct lbs_private structure
- *
- *  @return            0 on success, error on failure
- */
-int lbs_mesh_bt_reset(struct lbs_private *priv)
-{
-       struct cmd_ds_bt_access cmd;
-       int ret = 0;
-
-       lbs_deb_enter(LBS_DEB_CMD);
-
-       memset(&cmd, 0, sizeof(cmd));
-       cmd.hdr.size = cpu_to_le16(sizeof(cmd));
-       cmd.action = cpu_to_le16(CMD_ACT_BT_ACCESS_RESET);
-
-       ret = lbs_cmd_with_response(priv, CMD_BT_ACCESS, &cmd);
-
-       lbs_deb_leave_args(LBS_DEB_CMD, "ret %d", ret);
-       return ret;
-}
-
-/**
- *  @brief Gets the inverted status of the mesh blinding table
- *
- *  Normally the firmware "blinds" or ignores traffic from mesh nodes in the
- *  table, but an inverted table allows *only* traffic from nodes listed in
- *  the table.
- *
- *  @param priv        A pointer to struct lbs_private structure
- *  @param invert      On success, TRUE if the blinding table is inverted,
- *                        FALSE if it is not inverted
- *
- *  @return            0 on success, error on failure
- */
-int lbs_mesh_bt_get_inverted(struct lbs_private *priv, bool *inverted)
-{
-       struct cmd_ds_bt_access cmd;
-       int ret = 0;
-
-       lbs_deb_enter(LBS_DEB_CMD);
-
-       BUG_ON(inverted == NULL);
-
-       memset(&cmd, 0, sizeof(cmd));
-       cmd.hdr.size = cpu_to_le16(sizeof(cmd));
-       cmd.action = cpu_to_le16(CMD_ACT_BT_ACCESS_GET_INVERT);
-
-       ret = lbs_cmd_with_response(priv, CMD_BT_ACCESS, &cmd);
-       if (ret == 0)
-               *inverted = !!cmd.id;
-
-       lbs_deb_leave_args(LBS_DEB_CMD, "ret %d", ret);
-       return ret;
-}
-
-/**
- *  @brief Sets the inverted status of the mesh blinding table
- *
- *  Normally the firmware "blinds" or ignores traffic from mesh nodes in the
- *  table, but an inverted table allows *only* traffic from nodes listed in
- *  the table.
- *
- *  @param priv        A pointer to struct lbs_private structure
- *  @param invert      TRUE to invert the blinding table (only traffic from
- *                         listed nodes allowed), FALSE to return it
- *                         to normal state (listed nodes ignored)
- *
- *  @return            0 on success, error on failure
- */
-int lbs_mesh_bt_set_inverted(struct lbs_private *priv, bool inverted)
-{
-       struct cmd_ds_bt_access cmd;
-       int ret = 0;
-
-       lbs_deb_enter(LBS_DEB_CMD);
-
-       memset(&cmd, 0, sizeof(cmd));
-       cmd.hdr.size = cpu_to_le16(sizeof(cmd));
-       cmd.action = cpu_to_le16(CMD_ACT_BT_ACCESS_SET_INVERT);
-       cmd.id = !!inverted;
-
-       ret = lbs_cmd_with_response(priv, CMD_BT_ACCESS, &cmd);
-
-       lbs_deb_leave_args(LBS_DEB_CMD, "ret %d", ret);
-       return ret;
-}
-
-/**
- *  @brief List an entry in the mesh blinding table
- *
- *  @param priv        A pointer to struct lbs_private structure
- *  @param id          The ID of the entry to list
- *  @param addr1       MAC address associated with the table entry
- *
- *  @return            0 on success, error on failure
- */
-int lbs_mesh_bt_get_entry(struct lbs_private *priv, u32 id, u8 *addr1)
-{
-       struct cmd_ds_bt_access cmd;
-       int ret = 0;
-
-       lbs_deb_enter(LBS_DEB_CMD);
-
-       BUG_ON(addr1 == NULL);
-
-       memset(&cmd, 0, sizeof(cmd));
-       cmd.hdr.size = cpu_to_le16(sizeof(cmd));
-       cmd.action = cpu_to_le16(CMD_ACT_BT_ACCESS_SET_INVERT);
-       cmd.id = cpu_to_le32(id);
-
-       ret = lbs_cmd_with_response(priv, CMD_BT_ACCESS, &cmd);
-       if (ret == 0)
-               memcpy(addr1, cmd.addr1, sizeof(cmd.addr1));
-
-       lbs_deb_leave_args(LBS_DEB_CMD, "ret %d", ret);
-       return ret;
-}
-
-/**
- *  @brief Access the mesh forwarding table
- *
- *  @param priv        A pointer to struct lbs_private structure
- *  @param cmd_action  The forwarding table action to perform
- *  @param cmd         The pre-filled FWT_ACCESS command
- *
- *  @return            0 on success and 'cmd' will be filled with the
- *                        firmware's response
- */
-int lbs_cmd_fwt_access(struct lbs_private *priv, u16 cmd_action,
-                       struct cmd_ds_fwt_access *cmd)
-{
-       int ret;
-
-       lbs_deb_enter_args(LBS_DEB_CMD, "action %d", cmd_action);
-
-       cmd->hdr.command = cpu_to_le16(CMD_FWT_ACCESS);
-       cmd->hdr.size = cpu_to_le16(sizeof(struct cmd_ds_fwt_access));
-       cmd->hdr.result = 0;
-       cmd->action = cpu_to_le16(cmd_action);
-
-       ret = lbs_cmd_with_response(priv, CMD_FWT_ACCESS, cmd);
-
-       lbs_deb_leave_args(LBS_DEB_CMD, "ret %d", ret);
-       return 0;
-}
-
-int lbs_mesh_access(struct lbs_private *priv, uint16_t cmd_action,
-                   struct cmd_ds_mesh_access *cmd)
-{
-       int ret;
-
-       lbs_deb_enter_args(LBS_DEB_CMD, "action %d", cmd_action);
-
-       cmd->hdr.command = cpu_to_le16(CMD_MESH_ACCESS);
-       cmd->hdr.size = cpu_to_le16(sizeof(*cmd));
-       cmd->hdr.result = 0;
-
-       cmd->action = cpu_to_le16(cmd_action);
-
-       ret = lbs_cmd_with_response(priv, CMD_MESH_ACCESS, cmd);
-
-       lbs_deb_leave(LBS_DEB_CMD);
-       return ret;
-}
-
-static int __lbs_mesh_config_send(struct lbs_private *priv,
-                                 struct cmd_ds_mesh_config *cmd,
-                                 uint16_t action, uint16_t type)
-{
-       int ret;
-       u16 command = CMD_MESH_CONFIG_OLD;
-
-       lbs_deb_enter(LBS_DEB_CMD);
-
-       /*
-        * Command id is 0xac for v10 FW along with mesh interface
-        * id in bits 14-13-12.
-        */
-       if (priv->mesh_tlv == TLV_TYPE_MESH_ID)
-               command = CMD_MESH_CONFIG |
-                         (MESH_IFACE_ID << MESH_IFACE_BIT_OFFSET);
-
-       cmd->hdr.command = cpu_to_le16(command);
-       cmd->hdr.size = cpu_to_le16(sizeof(struct cmd_ds_mesh_config));
-       cmd->hdr.result = 0;
-
-       cmd->type = cpu_to_le16(type);
-       cmd->action = cpu_to_le16(action);
-
-       ret = lbs_cmd_with_response(priv, command, cmd);
-
-       lbs_deb_leave(LBS_DEB_CMD);
-       return ret;
-}
-
-int lbs_mesh_config_send(struct lbs_private *priv,
-                        struct cmd_ds_mesh_config *cmd,
-                        uint16_t action, uint16_t type)
-{
-       int ret;
-
-       if (!(priv->fwcapinfo & FW_CAPINFO_PERSISTENT_CONFIG))
-               return -EOPNOTSUPP;
-
-       ret = __lbs_mesh_config_send(priv, cmd, action, type);
-       return ret;
-}
-
-/* This function is the CMD_MESH_CONFIG legacy function.  It only handles the
- * START and STOP actions.  The extended actions supported by CMD_MESH_CONFIG
- * are all handled by preparing a struct cmd_ds_mesh_config and passing it to
- * lbs_mesh_config_send.
- */
-int lbs_mesh_config(struct lbs_private *priv, uint16_t action, uint16_t chan)
-{
-       struct cmd_ds_mesh_config cmd;
-       struct mrvl_meshie *ie;
-       DECLARE_SSID_BUF(ssid);
-
-       memset(&cmd, 0, sizeof(cmd));
-       cmd.channel = cpu_to_le16(chan);
-       ie = (struct mrvl_meshie *)cmd.data;
-
-       switch (action) {
-       case CMD_ACT_MESH_CONFIG_START:
-               ie->id = WLAN_EID_GENERIC;
-               ie->val.oui[0] = 0x00;
-               ie->val.oui[1] = 0x50;
-               ie->val.oui[2] = 0x43;
-               ie->val.type = MARVELL_MESH_IE_TYPE;
-               ie->val.subtype = MARVELL_MESH_IE_SUBTYPE;
-               ie->val.version = MARVELL_MESH_IE_VERSION;
-               ie->val.active_protocol_id = MARVELL_MESH_PROTO_ID_HWMP;
-               ie->val.active_metric_id = MARVELL_MESH_METRIC_ID;
-               ie->val.mesh_capability = MARVELL_MESH_CAPABILITY;
-               ie->val.mesh_id_len = priv->mesh_ssid_len;
-               memcpy(ie->val.mesh_id, priv->mesh_ssid, priv->mesh_ssid_len);
-               ie->len = sizeof(struct mrvl_meshie_val) -
-                       IEEE80211_MAX_SSID_LEN + priv->mesh_ssid_len;
-               cmd.length = cpu_to_le16(sizeof(struct mrvl_meshie_val));
-               break;
-       case CMD_ACT_MESH_CONFIG_STOP:
-               break;
-       default:
-               return -1;
-       }
-       lbs_deb_cmd("mesh config action %d type %x channel %d SSID %s\n",
-                   action, priv->mesh_tlv, chan,
-                   print_ssid(ssid, priv->mesh_ssid, priv->mesh_ssid_len));
-
-       return __lbs_mesh_config_send(priv, &cmd, action, priv->mesh_tlv);
-}
-
-
-
-/***************************************************************************
- * Persistent configuration support
- */
-
-static int mesh_get_default_parameters(struct device *dev,
-                                      struct mrvl_mesh_defaults *defs)
-{
-       struct lbs_private *priv = to_net_dev(dev)->ml_priv;
-       struct cmd_ds_mesh_config cmd;
-       int ret;
-
-       memset(&cmd, 0, sizeof(struct cmd_ds_mesh_config));
-       ret = lbs_mesh_config_send(priv, &cmd, CMD_ACT_MESH_CONFIG_GET,
-                                  CMD_TYPE_MESH_GET_DEFAULTS);
-
-       if (ret)
-               return -EOPNOTSUPP;
-
-       memcpy(defs, &cmd.data[0], sizeof(struct mrvl_mesh_defaults));
-
-       return 0;
-}
-
-/**
- * @brief Get function for sysfs attribute bootflag
- */
-static ssize_t bootflag_get(struct device *dev,
-                           struct device_attribute *attr, char *buf)
-{
-       struct mrvl_mesh_defaults defs;
-       int ret;
-
-       ret = mesh_get_default_parameters(dev, &defs);
-
-       if (ret)
-               return ret;
-
-       return snprintf(buf, 12, "%d\n", le32_to_cpu(defs.bootflag));
-}
-
-/**
- * @brief Set function for sysfs attribute bootflag
- */
-static ssize_t bootflag_set(struct device *dev, struct device_attribute *attr,
-                           const char *buf, size_t count)
-{
-       struct lbs_private *priv = to_net_dev(dev)->ml_priv;
-       struct cmd_ds_mesh_config cmd;
-       uint32_t datum;
-       int ret;
-
-       memset(&cmd, 0, sizeof(cmd));
-       ret = sscanf(buf, "%d", &datum);
-       if ((ret != 1) || (datum > 1))
-               return -EINVAL;
-
-       *((__le32 *)&cmd.data[0]) = cpu_to_le32(!!datum);
-       cmd.length = cpu_to_le16(sizeof(uint32_t));
-       ret = lbs_mesh_config_send(priv, &cmd, CMD_ACT_MESH_CONFIG_SET,
-                                  CMD_TYPE_MESH_SET_BOOTFLAG);
-       if (ret)
-               return ret;
-
-       return strlen(buf);
-}
-
-/**
- * @brief Get function for sysfs attribute boottime
- */
-static ssize_t boottime_get(struct device *dev,
-                           struct device_attribute *attr, char *buf)
-{
-       struct mrvl_mesh_defaults defs;
-       int ret;
-
-       ret = mesh_get_default_parameters(dev, &defs);
-
-       if (ret)
-               return ret;
-
-       return snprintf(buf, 12, "%d\n", defs.boottime);
-}
-
-/**
- * @brief Set function for sysfs attribute boottime
- */
-static ssize_t boottime_set(struct device *dev,
-               struct device_attribute *attr, const char *buf, size_t count)
-{
-       struct lbs_private *priv = to_net_dev(dev)->ml_priv;
-       struct cmd_ds_mesh_config cmd;
-       uint32_t datum;
-       int ret;
-
-       memset(&cmd, 0, sizeof(cmd));
-       ret = sscanf(buf, "%d", &datum);
-       if ((ret != 1) || (datum > 255))
-               return -EINVAL;
-
-       /* A too small boot time will result in the device booting into
-        * standalone (no-host) mode before the host can take control of it,
-        * so the change will be hard to revert.  This may be a desired
-        * feature (e.g to configure a very fast boot time for devices that
-        * will not be attached to a host), but dangerous.  So I'm enforcing a
-        * lower limit of 20 seconds:  remove and recompile the driver if this
-        * does not work for you.
-        */
-       datum = (datum < 20) ? 20 : datum;
-       cmd.data[0] = datum;
-       cmd.length = cpu_to_le16(sizeof(uint8_t));
-       ret = lbs_mesh_config_send(priv, &cmd, CMD_ACT_MESH_CONFIG_SET,
-                                  CMD_TYPE_MESH_SET_BOOTTIME);
-       if (ret)
-               return ret;
-
-       return strlen(buf);
-}
-
-/**
- * @brief Get function for sysfs attribute channel
- */
-static ssize_t channel_get(struct device *dev,
-                          struct device_attribute *attr, char *buf)
-{
-       struct mrvl_mesh_defaults defs;
-       int ret;
-
-       ret = mesh_get_default_parameters(dev, &defs);
-
-       if (ret)
-               return ret;
-
-       return snprintf(buf, 12, "%d\n", le16_to_cpu(defs.channel));
-}
-
-/**
- * @brief Set function for sysfs attribute channel
- */
-static ssize_t channel_set(struct device *dev, struct device_attribute *attr,
-                          const char *buf, size_t count)
-{
-       struct lbs_private *priv = to_net_dev(dev)->ml_priv;
-       struct cmd_ds_mesh_config cmd;
-       uint32_t datum;
-       int ret;
-
-       memset(&cmd, 0, sizeof(cmd));
-       ret = sscanf(buf, "%d", &datum);
-       if (ret != 1 || datum < 1 || datum > 11)
-               return -EINVAL;
-
-       *((__le16 *)&cmd.data[0]) = cpu_to_le16(datum);
-       cmd.length = cpu_to_le16(sizeof(uint16_t));
-       ret = lbs_mesh_config_send(priv, &cmd, CMD_ACT_MESH_CONFIG_SET,
-                                  CMD_TYPE_MESH_SET_DEF_CHANNEL);
-       if (ret)
-               return ret;
-
-       return strlen(buf);
-}
-
-/**
- * @brief Get function for sysfs attribute mesh_id
- */
-static ssize_t mesh_id_get(struct device *dev, struct device_attribute *attr,
-                          char *buf)
-{
-       struct mrvl_mesh_defaults defs;
-       int maxlen;
-       int ret;
-
-       ret = mesh_get_default_parameters(dev, &defs);
-
-       if (ret)
-               return ret;
-
-       if (defs.meshie.val.mesh_id_len > IEEE80211_MAX_SSID_LEN) {
-               lbs_pr_err("inconsistent mesh ID length");
-               defs.meshie.val.mesh_id_len = IEEE80211_MAX_SSID_LEN;
-       }
-
-       /* SSID not null terminated: reserve room for \0 + \n */
-       maxlen = defs.meshie.val.mesh_id_len + 2;
-       maxlen = (PAGE_SIZE > maxlen) ? maxlen : PAGE_SIZE;
-
-       defs.meshie.val.mesh_id[defs.meshie.val.mesh_id_len] = '\0';
-
-       return snprintf(buf, maxlen, "%s\n", defs.meshie.val.mesh_id);
-}
-
-/**
- * @brief Set function for sysfs attribute mesh_id
- */
-static ssize_t mesh_id_set(struct device *dev, struct device_attribute *attr,
-                          const char *buf, size_t count)
-{
-       struct cmd_ds_mesh_config cmd;
-       struct mrvl_mesh_defaults defs;
-       struct mrvl_meshie *ie;
-       struct lbs_private *priv = to_net_dev(dev)->ml_priv;
-       int len;
-       int ret;
-
-       if (count < 2 || count > IEEE80211_MAX_SSID_LEN + 1)
-               return -EINVAL;
-
-       memset(&cmd, 0, sizeof(struct cmd_ds_mesh_config));
-       ie = (struct mrvl_meshie *) &cmd.data[0];
-
-       /* fetch all other Information Element parameters */
-       ret = mesh_get_default_parameters(dev, &defs);
-
-       cmd.length = cpu_to_le16(sizeof(struct mrvl_meshie));
-
-       /* transfer IE elements */
-       memcpy(ie, &defs.meshie, sizeof(struct mrvl_meshie));
-
-       len = count - 1;
-       memcpy(ie->val.mesh_id, buf, len);
-       /* SSID len */
-       ie->val.mesh_id_len = len;
-       /* IE len */
-       ie->len = sizeof(struct mrvl_meshie_val) - IEEE80211_MAX_SSID_LEN + len;
-
-       ret = lbs_mesh_config_send(priv, &cmd, CMD_ACT_MESH_CONFIG_SET,
-                                  CMD_TYPE_MESH_SET_MESH_IE);
-       if (ret)
-               return ret;
-
-       return strlen(buf);
-}
-
-/**
- * @brief Get function for sysfs attribute protocol_id
- */
-static ssize_t protocol_id_get(struct device *dev,
-                              struct device_attribute *attr, char *buf)
-{
-       struct mrvl_mesh_defaults defs;
-       int ret;
-
-       ret = mesh_get_default_parameters(dev, &defs);
-
-       if (ret)
-               return ret;
-
-       return snprintf(buf, 5, "%d\n", defs.meshie.val.active_protocol_id);
-}
-
-/**
- * @brief Set function for sysfs attribute protocol_id
- */
-static ssize_t protocol_id_set(struct device *dev,
-               struct device_attribute *attr, const char *buf, size_t count)
-{
-       struct cmd_ds_mesh_config cmd;
-       struct mrvl_mesh_defaults defs;
-       struct mrvl_meshie *ie;
-       struct lbs_private *priv = to_net_dev(dev)->ml_priv;
-       uint32_t datum;
-       int ret;
-
-       memset(&cmd, 0, sizeof(cmd));
-       ret = sscanf(buf, "%d", &datum);
-       if ((ret != 1) || (datum > 255))
-               return -EINVAL;
-
-       /* fetch all other Information Element parameters */
-       ret = mesh_get_default_parameters(dev, &defs);
-
-       cmd.length = cpu_to_le16(sizeof(struct mrvl_meshie));
-
-       /* transfer IE elements */
-       ie = (struct mrvl_meshie *) &cmd.data[0];
-       memcpy(ie, &defs.meshie, sizeof(struct mrvl_meshie));
-       /* update protocol id */
-       ie->val.active_protocol_id = datum;
-
-       ret = lbs_mesh_config_send(priv, &cmd, CMD_ACT_MESH_CONFIG_SET,
-                                  CMD_TYPE_MESH_SET_MESH_IE);
-       if (ret)
-               return ret;
-
-       return strlen(buf);
-}
-
-/**
- * @brief Get function for sysfs attribute metric_id
- */
-static ssize_t metric_id_get(struct device *dev,
-               struct device_attribute *attr, char *buf)
-{
-       struct mrvl_mesh_defaults defs;
-       int ret;
-
-       ret = mesh_get_default_parameters(dev, &defs);
-
-       if (ret)
-               return ret;
-
-       return snprintf(buf, 5, "%d\n", defs.meshie.val.active_metric_id);
-}
-
-/**
- * @brief Set function for sysfs attribute metric_id
- */
-static ssize_t metric_id_set(struct device *dev, struct device_attribute *attr,
-                            const char *buf, size_t count)
-{
-       struct cmd_ds_mesh_config cmd;
-       struct mrvl_mesh_defaults defs;
-       struct mrvl_meshie *ie;
-       struct lbs_private *priv = to_net_dev(dev)->ml_priv;
-       uint32_t datum;
-       int ret;
-
-       memset(&cmd, 0, sizeof(cmd));
-       ret = sscanf(buf, "%d", &datum);
-       if ((ret != 1) || (datum > 255))
-               return -EINVAL;
-
-       /* fetch all other Information Element parameters */
-       ret = mesh_get_default_parameters(dev, &defs);
-
-       cmd.length = cpu_to_le16(sizeof(struct mrvl_meshie));
-
-       /* transfer IE elements */
-       ie = (struct mrvl_meshie *) &cmd.data[0];
-       memcpy(ie, &defs.meshie, sizeof(struct mrvl_meshie));
-       /* update metric id */
-       ie->val.active_metric_id = datum;
-
-       ret = lbs_mesh_config_send(priv, &cmd, CMD_ACT_MESH_CONFIG_SET,
-                                  CMD_TYPE_MESH_SET_MESH_IE);
-       if (ret)
-               return ret;
-
-       return strlen(buf);
-}
-
-/**
- * @brief Get function for sysfs attribute capability
- */
-static ssize_t capability_get(struct device *dev,
-               struct device_attribute *attr, char *buf)
-{
-       struct mrvl_mesh_defaults defs;
-       int ret;
-
-       ret = mesh_get_default_parameters(dev, &defs);
-
-       if (ret)
-               return ret;
-
-       return snprintf(buf, 5, "%d\n", defs.meshie.val.mesh_capability);
-}
-
-/**
- * @brief Set function for sysfs attribute capability
- */
-static ssize_t capability_set(struct device *dev, struct device_attribute *attr,
-                             const char *buf, size_t count)
-{
-       struct cmd_ds_mesh_config cmd;
-       struct mrvl_mesh_defaults defs;
-       struct mrvl_meshie *ie;
-       struct lbs_private *priv = to_net_dev(dev)->ml_priv;
-       uint32_t datum;
-       int ret;
-
-       memset(&cmd, 0, sizeof(cmd));
-       ret = sscanf(buf, "%d", &datum);
-       if ((ret != 1) || (datum > 255))
-               return -EINVAL;
-
-       /* fetch all other Information Element parameters */
-       ret = mesh_get_default_parameters(dev, &defs);
-
-       cmd.length = cpu_to_le16(sizeof(struct mrvl_meshie));
-
-       /* transfer IE elements */
-       ie = (struct mrvl_meshie *) &cmd.data[0];
-       memcpy(ie, &defs.meshie, sizeof(struct mrvl_meshie));
-       /* update value */
-       ie->val.mesh_capability = datum;
-
-       ret = lbs_mesh_config_send(priv, &cmd, CMD_ACT_MESH_CONFIG_SET,
-                                  CMD_TYPE_MESH_SET_MESH_IE);
-       if (ret)
-               return ret;
-
-       return strlen(buf);
-}
-
-
-static DEVICE_ATTR(bootflag, 0644, bootflag_get, bootflag_set);
-static DEVICE_ATTR(boottime, 0644, boottime_get, boottime_set);
-static DEVICE_ATTR(channel, 0644, channel_get, channel_set);
-static DEVICE_ATTR(mesh_id, 0644, mesh_id_get, mesh_id_set);
-static DEVICE_ATTR(protocol_id, 0644, protocol_id_get, protocol_id_set);
-static DEVICE_ATTR(metric_id, 0644, metric_id_get, metric_id_set);
-static DEVICE_ATTR(capability, 0644, capability_get, capability_set);
-
-static struct attribute *boot_opts_attrs[] = {
-       &dev_attr_bootflag.attr,
-       &dev_attr_boottime.attr,
-       &dev_attr_channel.attr,
-       NULL
-};
-
-static struct attribute_group boot_opts_group = {
-       .name = "boot_options",
-       .attrs = boot_opts_attrs,
-};
-
-static struct attribute *mesh_ie_attrs[] = {
-       &dev_attr_mesh_id.attr,
-       &dev_attr_protocol_id.attr,
-       &dev_attr_metric_id.attr,
-       &dev_attr_capability.attr,
-       NULL
-};
-
-static struct attribute_group mesh_ie_group = {
-       .name = "mesh_ie",
-       .attrs = mesh_ie_attrs,
-};
-
-void lbs_persist_config_init(struct net_device *dev)
-{
-       int ret;
-       ret = sysfs_create_group(&(dev->dev.kobj), &boot_opts_group);
-       ret = sysfs_create_group(&(dev->dev.kobj), &mesh_ie_group);
-}
-
-void lbs_persist_config_remove(struct net_device *dev)
-{
-       sysfs_remove_group(&(dev->dev.kobj), &boot_opts_group);
-       sysfs_remove_group(&(dev->dev.kobj), &mesh_ie_group);
-}
-
-
-
-/***************************************************************************
- * Ethtool related
- */
-
-static const char *mesh_stat_strings[] = {
-                       "drop_duplicate_bcast",
-                       "drop_ttl_zero",
-                       "drop_no_fwd_route",
-                       "drop_no_buffers",
-                       "fwded_unicast_cnt",
-                       "fwded_bcast_cnt",
-                       "drop_blind_table",
-                       "tx_failed_cnt"
-};
-
-void lbs_mesh_ethtool_get_stats(struct net_device *dev,
-       struct ethtool_stats *stats, uint64_t *data)
-{
-       struct lbs_private *priv = dev->ml_priv;
-       struct cmd_ds_mesh_access mesh_access;
-       int ret;
-
-       lbs_deb_enter(LBS_DEB_ETHTOOL);
-
-       /* Get Mesh Statistics */
-       ret = lbs_mesh_access(priv, CMD_ACT_MESH_GET_STATS, &mesh_access);
-
-       if (ret) {
-               memset(data, 0, MESH_STATS_NUM*(sizeof(uint64_t)));
-               return;
-       }
-
-       priv->mstats.fwd_drop_rbt = le32_to_cpu(mesh_access.data[0]);
-       priv->mstats.fwd_drop_ttl = le32_to_cpu(mesh_access.data[1]);
-       priv->mstats.fwd_drop_noroute = le32_to_cpu(mesh_access.data[2]);
-       priv->mstats.fwd_drop_nobuf = le32_to_cpu(mesh_access.data[3]);
-       priv->mstats.fwd_unicast_cnt = le32_to_cpu(mesh_access.data[4]);
-       priv->mstats.fwd_bcast_cnt = le32_to_cpu(mesh_access.data[5]);
-       priv->mstats.drop_blind = le32_to_cpu(mesh_access.data[6]);
-       priv->mstats.tx_failed_cnt = le32_to_cpu(mesh_access.data[7]);
-
-       data[0] = priv->mstats.fwd_drop_rbt;
-       data[1] = priv->mstats.fwd_drop_ttl;
-       data[2] = priv->mstats.fwd_drop_noroute;
-       data[3] = priv->mstats.fwd_drop_nobuf;
-       data[4] = priv->mstats.fwd_unicast_cnt;
-       data[5] = priv->mstats.fwd_bcast_cnt;
-       data[6] = priv->mstats.drop_blind;
-       data[7] = priv->mstats.tx_failed_cnt;
-
-       lbs_deb_enter(LBS_DEB_ETHTOOL);
-}
-
-int lbs_mesh_ethtool_get_sset_count(struct net_device *dev, int sset)
-{
-       struct lbs_private *priv = dev->ml_priv;
-
-       if (sset == ETH_SS_STATS && dev == priv->mesh_dev)
-               return MESH_STATS_NUM;
-
-       return -EOPNOTSUPP;
-}
-
-void lbs_mesh_ethtool_get_strings(struct net_device *dev,
-       uint32_t stringset, uint8_t *s)
-{
-       int i;
-
-       lbs_deb_enter(LBS_DEB_ETHTOOL);
-
-       switch (stringset) {
-       case ETH_SS_STATS:
-               for (i = 0; i < MESH_STATS_NUM; i++) {
-                       memcpy(s + i * ETH_GSTRING_LEN,
-                                       mesh_stat_strings[i],
-                                       ETH_GSTRING_LEN);
-               }
-               break;
-       }
-       lbs_deb_enter(LBS_DEB_ETHTOOL);
-}
diff --git a/drivers/net/wireless/libertas/mesh.h b/drivers/net/wireless/libertas/mesh.h
deleted file mode 100644 (file)
index afb2e8d..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/**
-  * Contains all definitions needed for the Libertas' MESH implementation.
-  */
-#ifndef _LBS_MESH_H_
-#define _LBS_MESH_H_
-
-
-#include <net/iw_handler.h>
-#include <net/lib80211.h>
-
-#include "host.h"
-
-#ifdef CONFIG_LIBERTAS_MESH
-
-/* Mesh statistics */
-struct lbs_mesh_stats {
-       u32     fwd_bcast_cnt;          /* Fwd: Broadcast counter */
-       u32     fwd_unicast_cnt;        /* Fwd: Unicast counter */
-       u32     fwd_drop_ttl;           /* Fwd: TTL zero */
-       u32     fwd_drop_rbt;           /* Fwd: Recently Broadcasted */
-       u32     fwd_drop_noroute;       /* Fwd: No route to Destination */
-       u32     fwd_drop_nobuf;         /* Fwd: Run out of internal buffers */
-       u32     drop_blind;             /* Rx:  Dropped by blinding table */
-       u32     tx_failed_cnt;          /* Tx:  Failed transmissions */
-};
-
-
-struct net_device;
-struct lbs_private;
-
-int lbs_init_mesh(struct lbs_private *priv);
-int lbs_deinit_mesh(struct lbs_private *priv);
-
-int lbs_add_mesh(struct lbs_private *priv);
-void lbs_remove_mesh(struct lbs_private *priv);
-
-
-/* Sending / Receiving */
-
-struct rxpd;
-struct txpd;
-
-struct net_device *lbs_mesh_set_dev(struct lbs_private *priv,
-       struct net_device *dev, struct rxpd *rxpd);
-void lbs_mesh_set_txpd(struct lbs_private *priv,
-       struct net_device *dev, struct txpd *txpd);
-
-
-/* Command handling */
-
-struct cmd_ds_command;
-struct cmd_ds_mesh_access;
-struct cmd_ds_mesh_config;
-
-int lbs_mesh_bt_add_del(struct lbs_private *priv, bool add, u8 *addr1);
-int lbs_mesh_bt_reset(struct lbs_private *priv);
-int lbs_mesh_bt_get_inverted(struct lbs_private *priv, bool *inverted);
-int lbs_mesh_bt_set_inverted(struct lbs_private *priv, bool inverted);
-int lbs_mesh_bt_get_entry(struct lbs_private *priv, u32 id, u8 *addr1);
-
-int lbs_cmd_fwt_access(struct lbs_private *priv, u16 cmd_action,
-                       struct cmd_ds_fwt_access *cmd);
-
-int lbs_mesh_access(struct lbs_private *priv, uint16_t cmd_action,
-                   struct cmd_ds_mesh_access *cmd);
-int lbs_mesh_config_send(struct lbs_private *priv,
-                        struct cmd_ds_mesh_config *cmd,
-                        uint16_t action, uint16_t type);
-int lbs_mesh_config(struct lbs_private *priv, uint16_t enable, uint16_t chan);
-
-
-
-/* Persistent configuration */
-
-void lbs_persist_config_init(struct net_device *net);
-void lbs_persist_config_remove(struct net_device *net);
-
-
-/* Ethtool statistics */
-
-struct ethtool_stats;
-
-void lbs_mesh_ethtool_get_stats(struct net_device *dev,
-       struct ethtool_stats *stats, uint64_t *data);
-int lbs_mesh_ethtool_get_sset_count(struct net_device *dev, int sset);
-void lbs_mesh_ethtool_get_strings(struct net_device *dev,
-       uint32_t stringset, uint8_t *s);
-
-
-/* Accessors */
-
-#define lbs_mesh_open(priv) (priv->mesh_open)
-#define lbs_mesh_connected(priv) (priv->mesh_connect_status == LBS_CONNECTED)
-
-#else
-
-#define lbs_init_mesh(priv)
-#define lbs_deinit_mesh(priv)
-#define lbs_add_mesh(priv)
-#define lbs_remove_mesh(priv)
-#define lbs_mesh_set_dev(priv, dev, rxpd) (dev)
-#define lbs_mesh_set_txpd(priv, dev, txpd)
-#define lbs_mesh_config(priv, enable, chan)
-#define lbs_mesh_open(priv) (0)
-#define lbs_mesh_connected(priv) (0)
-
-#endif
-
-
-
-#endif
diff --git a/drivers/net/wireless/libertas_tf/deb_defs.h b/drivers/net/wireless/libertas_tf/deb_defs.h
deleted file mode 100644 (file)
index ae75396..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
-  * This header file contains global constant/enum definitions,
-  * global variable declaration.
-  */
-#ifndef _LBS_DEB_DEFS_H_
-#define _LBS_DEB_EFS_H_
-
-#ifndef DRV_NAME
-#define DRV_NAME "libertas_tf"
-#endif
-
-#include <linux/spinlock.h>
-
-#ifdef CONFIG_LIBERTAS_THINFIRM_DEBUG
-#define DEBUG
-#define PROC_DEBUG
-#endif
-
-#define LBTF_DEB_ENTER 0x00000001
-#define LBTF_DEB_LEAVE 0x00000002
-#define LBTF_DEB_MAIN  0x00000004
-#define LBTF_DEB_NET   0x00000008
-#define LBTF_DEB_MESH  0x00000010
-#define LBTF_DEB_WEXT  0x00000020
-#define LBTF_DEB_IOCTL 0x00000040
-#define LBTF_DEB_SCAN  0x00000080
-#define LBTF_DEB_ASSOC 0x00000100
-#define LBTF_DEB_JOIN  0x00000200
-#define LBTF_DEB_11D   0x00000400
-#define LBTF_DEB_DEBUGFS       0x00000800
-#define LBTF_DEB_ETHTOOL       0x00001000
-#define LBTF_DEB_HOST  0x00002000
-#define LBTF_DEB_CMD   0x00004000
-#define LBTF_DEB_RX    0x00008000
-#define LBTF_DEB_TX    0x00010000
-#define LBTF_DEB_USB   0x00020000
-#define LBTF_DEB_CS    0x00040000
-#define LBTF_DEB_FW    0x00080000
-#define LBTF_DEB_THREAD        0x00100000
-#define LBTF_DEB_HEX   0x00200000
-#define LBTF_DEB_SDIO  0x00400000
-#define LBTF_DEB_MACOPS        0x00800000
-
-extern unsigned int lbtf_debug;
-
-
-#ifdef DEBUG
-#define LBTF_DEB_LL(grp, grpnam, fmt, args...) \
-do { if ((lbtf_debug & (grp)) == (grp)) \
-  printk(KERN_DEBUG DRV_NAME grpnam "%s: " fmt, \
-         in_interrupt() ? " (INT)" : "", ## args); } while (0)
-#else
-#define LBTF_DEB_LL(grp, grpnam, fmt, args...) do {} while (0)
-#endif
-
-#define lbtf_deb_enter(grp) \
-  LBTF_DEB_LL(grp | LBTF_DEB_ENTER, " enter", "%s()\n", __func__);
-#define lbtf_deb_enter_args(grp, fmt, args...) \
-  LBTF_DEB_LL(grp | LBTF_DEB_ENTER, " enter", "%s(" fmt ")\n", __func__, ## args);
-#define lbtf_deb_leave(grp) \
-  LBTF_DEB_LL(grp | LBTF_DEB_LEAVE, " leave", "%s()\n", __func__);
-#define lbtf_deb_leave_args(grp, fmt, args...) \
-  LBTF_DEB_LL(grp | LBTF_DEB_LEAVE, " leave", "%s(), " fmt "\n", \
-  __func__, ##args);
-#define lbtf_deb_main(fmt, args...)      LBTF_DEB_LL(LBTF_DEB_MAIN, " main", fmt, ##args)
-#define lbtf_deb_net(fmt, args...)       LBTF_DEB_LL(LBTF_DEB_NET, " net", fmt, ##args)
-#define lbtf_deb_mesh(fmt, args...)      LBTF_DEB_LL(LBTF_DEB_MESH, " mesh", fmt, ##args)
-#define lbtf_deb_wext(fmt, args...)      LBTF_DEB_LL(LBTF_DEB_WEXT, " wext", fmt, ##args)
-#define lbtf_deb_ioctl(fmt, args...)     LBTF_DEB_LL(LBTF_DEB_IOCTL, " ioctl", fmt, ##args)
-#define lbtf_deb_scan(fmt, args...)      LBTF_DEB_LL(LBTF_DEB_SCAN, " scan", fmt, ##args)
-#define lbtf_deb_assoc(fmt, args...)     LBTF_DEB_LL(LBTF_DEB_ASSOC, " assoc", fmt, ##args)
-#define lbtf_deb_join(fmt, args...)      LBTF_DEB_LL(LBTF_DEB_JOIN, " join", fmt, ##args)
-#define lbtf_deb_11d(fmt, args...)       LBTF_DEB_LL(LBTF_DEB_11D, " 11d", fmt, ##args)
-#define lbtf_deb_debugfs(fmt, args...)   LBTF_DEB_LL(LBTF_DEB_DEBUGFS, " debugfs", fmt, ##args)
-#define lbtf_deb_ethtool(fmt, args...)   LBTF_DEB_LL(LBTF_DEB_ETHTOOL, " ethtool", fmt, ##args)
-#define lbtf_deb_host(fmt, args...)      LBTF_DEB_LL(LBTF_DEB_HOST, " host", fmt, ##args)
-#define lbtf_deb_cmd(fmt, args...)       LBTF_DEB_LL(LBTF_DEB_CMD, " cmd", fmt, ##args)
-#define lbtf_deb_rx(fmt, args...)        LBTF_DEB_LL(LBTF_DEB_RX, " rx", fmt, ##args)
-#define lbtf_deb_tx(fmt, args...)        LBTF_DEB_LL(LBTF_DEB_TX, " tx", fmt, ##args)
-#define lbtf_deb_fw(fmt, args...)        LBTF_DEB_LL(LBTF_DEB_FW, " fw", fmt, ##args)
-#define lbtf_deb_usb(fmt, args...)       LBTF_DEB_LL(LBTF_DEB_USB, " usb", fmt, ##args)
-#define lbtf_deb_usbd(dev, fmt, args...) LBTF_DEB_LL(LBTF_DEB_USB, " usbd", "%s:" fmt, dev_name(dev), ##args)
-#define lbtf_deb_cs(fmt, args...)        LBTF_DEB_LL(LBTF_DEB_CS, " cs", fmt, ##args)
-#define lbtf_deb_thread(fmt, args...)    LBTF_DEB_LL(LBTF_DEB_THREAD, " thread", fmt, ##args)
-#define lbtf_deb_sdio(fmt, args...)      LBTF_DEB_LL(LBTF_DEB_SDIO, " thread", fmt, ##args)
-#define lbtf_deb_macops(fmt, args...)      LBTF_DEB_LL(LBTF_DEB_MACOPS, " thread", fmt, ##args)
-
-#ifdef DEBUG
-static inline void lbtf_deb_hex(unsigned int grp, const char *prompt, u8 *buf, int len)
-{
-       char newprompt[32];
-
-       if (len &&
-           (lbtf_debug & LBTF_DEB_HEX) &&
-           (lbtf_debug & grp)) {
-               snprintf(newprompt, sizeof(newprompt), DRV_NAME " %s: ", prompt);
-               print_hex_dump_bytes(prompt, DUMP_PREFIX_NONE, buf, len);
-       }
-}
-#else
-#define lbtf_deb_hex(grp, prompt, buf, len)    do {} while (0)
-#endif
-
-#endif
diff --git a/drivers/net/wireless/orinoco/orinoco_usb.c b/drivers/net/wireless/orinoco/orinoco_usb.c
deleted file mode 100644 (file)
index a38a7bd..0000000
+++ /dev/null
@@ -1,1793 +0,0 @@
-/*
- * USB Orinoco driver
- *
- * Copyright (c) 2003 Manuel Estrada Sainz
- *
- * The contents of this file are subject to the Mozilla Public License
- * Version 1.1 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License
- * at http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and
- * limitations under the License.
- *
- * Alternatively, the contents of this file may be used under the
- * terms of the GNU General Public License version 2 (the "GPL"), in
- * which case the provisions of the GPL are applicable instead of the
- * above.  If you wish to allow the use of your version of this file
- * only under the terms of the GPL and not to allow others to use your
- * version of this file under the MPL, indicate your decision by
- * deleting the provisions above and replace them with the notice and
- * other provisions required by the GPL.  If you do not delete the
- * provisions above, a recipient may use your version of this file
- * under either the MPL or the GPL.
- *
- * Queueing code based on linux-wlan-ng 0.2.1-pre5
- *
- * Copyright (C) 1999 AbsoluteValue Systems, Inc.  All Rights Reserved.
- *
- *     The license is the same as above.
- *
- * Initialy based on USB Skeleton driver - 0.7
- *
- * Copyright (c) 2001 Greg Kroah-Hartman (greg@kroah.com)
- *
- *     This program is free software; you can redistribute it and/or
- *     modify it under the terms of the GNU General Public License as
- *     published by the Free Software Foundation; either version 2 of
- *     the License, or (at your option) any later version.
- *
- * NOTE: The original USB Skeleton driver is GPL, but all that code is
- * gone so MPL/GPL applies.
- */
-
-#define DRIVER_NAME "orinoco_usb"
-#define PFX DRIVER_NAME ": "
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/signal.h>
-#include <linux/errno.h>
-#include <linux/poll.h>
-#include <linux/init.h>
-#include <linux/slab.h>
-#include <linux/fcntl.h>
-#include <linux/spinlock.h>
-#include <linux/list.h>
-#include <linux/smp_lock.h>
-#include <linux/usb.h>
-#include <linux/timer.h>
-
-#include <linux/netdevice.h>
-#include <linux/if_arp.h>
-#include <linux/etherdevice.h>
-#include <linux/wireless.h>
-#include <linux/firmware.h>
-
-#include "mic.h"
-#include "orinoco.h"
-
-#ifndef URB_ASYNC_UNLINK
-#define URB_ASYNC_UNLINK 0
-#endif
-
-/* 802.2 LLC/SNAP header used for Ethernet encapsulation over 802.11 */
-static const u8 encaps_hdr[] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00};
-#define ENCAPS_OVERHEAD                (sizeof(encaps_hdr) + 2)
-
-struct header_struct {
-       /* 802.3 */
-       u8 dest[ETH_ALEN];
-       u8 src[ETH_ALEN];
-       __be16 len;
-       /* 802.2 */
-       u8 dsap;
-       u8 ssap;
-       u8 ctrl;
-       /* SNAP */
-       u8 oui[3];
-       __be16 ethertype;
-} __packed;
-
-struct ez_usb_fw {
-       u16 size;
-       const u8 *code;
-};
-
-static struct ez_usb_fw firmware = {
-       .size = 0,
-       .code = NULL,
-};
-
-#ifdef CONFIG_USB_DEBUG
-static int debug = 1;
-#else
-static int debug;
-#endif
-
-/* Debugging macros */
-#undef dbg
-#define dbg(format, arg...) \
-       do { if (debug) printk(KERN_DEBUG PFX "%s: " format "\n", \
-                              __func__ , ## arg); } while (0)
-#undef err
-#define err(format, arg...) \
-       do { printk(KERN_ERR PFX format "\n", ## arg); } while (0)
-
-/* Module paramaters */
-module_param(debug, int, 0644);
-MODULE_PARM_DESC(debug, "Debug enabled or not");
-
-MODULE_FIRMWARE("orinoco_ezusb_fw");
-
-/*
- * Under some conditions, the card gets stuck and stops paying attention
- * to the world (i.e. data communication stalls) until we do something to
- * it.  Sending an INQ_TALLIES command seems to be enough and should be
- * harmless otherwise.  This behaviour has been observed when using the
- * driver on a systemimager client during installation.  In the past a
- * timer was used to send INQ_TALLIES commands when there was no other
- * activity, but it was troublesome and was removed.
- */
-
-#define USB_COMPAQ_VENDOR_ID     0x049f /* Compaq Computer Corp. */
-#define USB_COMPAQ_WL215_ID      0x001f /* Compaq WL215 USB Adapter */
-#define USB_COMPAQ_W200_ID       0x0076 /* Compaq W200 USB Adapter */
-#define USB_HP_WL215_ID          0x0082 /* Compaq WL215 USB Adapter */
-
-#define USB_MELCO_VENDOR_ID      0x0411
-#define USB_BUFFALO_L11_ID       0x0006 /* BUFFALO WLI-USB-L11 */
-#define USB_BUFFALO_L11G_WR_ID   0x000B /* BUFFALO WLI-USB-L11G-WR */
-#define USB_BUFFALO_L11G_ID      0x000D /* BUFFALO WLI-USB-L11G */
-
-#define USB_LUCENT_VENDOR_ID     0x047E /* Lucent Technologies */
-#define USB_LUCENT_ORINOCO_ID    0x0300 /* Lucent/Agere Orinoco USB Client */
-
-#define USB_AVAYA8_VENDOR_ID     0x0D98
-#define USB_AVAYAE_VENDOR_ID     0x0D9E
-#define USB_AVAYA_WIRELESS_ID    0x0300 /* Avaya Wireless USB Card */
-
-#define USB_AGERE_VENDOR_ID      0x0D4E /* Agere Systems */
-#define USB_AGERE_MODEL0801_ID   0x1000 /* Wireless USB Card Model 0801 */
-#define USB_AGERE_MODEL0802_ID   0x1001 /* Wireless USB Card Model 0802 */
-#define USB_AGERE_REBRANDED_ID   0x047A /* WLAN USB Card */
-
-#define USB_ELSA_VENDOR_ID       0x05CC
-#define USB_ELSA_AIRLANCER_ID    0x3100 /* ELSA AirLancer USB-11 */
-
-#define USB_LEGEND_VENDOR_ID     0x0E7C
-#define USB_LEGEND_JOYNET_ID     0x0300 /* Joynet WLAN USB Card */
-
-#define USB_SAMSUNG_VENDOR_ID    0x04E8
-#define USB_SAMSUNG_SEW2001U1_ID 0x5002 /* Samsung SEW-2001u Card */
-#define USB_SAMSUNG_SEW2001U2_ID 0x5B11 /* Samsung SEW-2001u Card */
-#define USB_SAMSUNG_SEW2003U_ID  0x7011 /* Samsung SEW-2003U Card */
-
-#define USB_IGATE_VENDOR_ID      0x0681
-#define USB_IGATE_IGATE_11M_ID   0x0012 /* I-GATE 11M USB Card */
-
-#define USB_FUJITSU_VENDOR_ID    0x0BF8
-#define USB_FUJITSU_E1100_ID     0x1002 /* connect2AIR WLAN E-1100 USB */
-
-#define USB_2WIRE_VENDOR_ID      0x1630
-#define USB_2WIRE_WIRELESS_ID    0xff81 /* 2Wire Wireless USB adapter */
-
-
-#define EZUSB_REQUEST_FW_TRANS         0xA0
-#define EZUSB_REQUEST_TRIGER           0xAA
-#define EZUSB_REQUEST_TRIG_AC          0xAC
-#define EZUSB_CPUCS_REG                        0x7F92
-
-#define EZUSB_RID_TX                   0x0700
-#define EZUSB_RID_RX                   0x0701
-#define EZUSB_RID_INIT1                        0x0702
-#define EZUSB_RID_ACK                  0x0710
-#define EZUSB_RID_READ_PDA             0x0800
-#define EZUSB_RID_PROG_INIT            0x0852
-#define EZUSB_RID_PROG_SET_ADDR                0x0853
-#define EZUSB_RID_PROG_BYTES           0x0854
-#define EZUSB_RID_PROG_END             0x0855
-#define EZUSB_RID_DOCMD                        0x0860
-
-/* Recognize info frames */
-#define EZUSB_IS_INFO(id)              ((id >= 0xF000) && (id <= 0xF2FF))
-
-#define EZUSB_MAGIC                    0x0210
-
-#define EZUSB_FRAME_DATA               1
-#define EZUSB_FRAME_CONTROL            2
-
-#define DEF_TIMEOUT                    (3*HZ)
-
-#define BULK_BUF_SIZE                  2048
-
-#define MAX_DL_SIZE (BULK_BUF_SIZE - sizeof(struct ezusb_packet))
-
-#define FW_BUF_SIZE                    64
-#define FW_VAR_OFFSET_PTR              0x359
-#define FW_VAR_VALUE                   0
-#define FW_HOLE_START                  0x100
-#define FW_HOLE_END                    0x300
-
-struct ezusb_packet {
-       __le16 magic;           /* 0x0210 */
-       u8 req_reply_count;
-       u8 ans_reply_count;
-       __le16 frame_type;      /* 0x01 for data frames, 0x02 otherwise */
-       __le16 size;            /* transport size */
-       __le16 crc;             /* CRC up to here */
-       __le16 hermes_len;
-       __le16 hermes_rid;
-       u8 data[0];
-} __packed;
-
-/* Table of devices that work or may work with this driver */
-static struct usb_device_id ezusb_table[] = {
-       {USB_DEVICE(USB_COMPAQ_VENDOR_ID, USB_COMPAQ_WL215_ID)},
-       {USB_DEVICE(USB_COMPAQ_VENDOR_ID, USB_HP_WL215_ID)},
-       {USB_DEVICE(USB_COMPAQ_VENDOR_ID, USB_COMPAQ_W200_ID)},
-       {USB_DEVICE(USB_MELCO_VENDOR_ID, USB_BUFFALO_L11_ID)},
-       {USB_DEVICE(USB_MELCO_VENDOR_ID, USB_BUFFALO_L11G_WR_ID)},
-       {USB_DEVICE(USB_MELCO_VENDOR_ID, USB_BUFFALO_L11G_ID)},
-       {USB_DEVICE(USB_LUCENT_VENDOR_ID, USB_LUCENT_ORINOCO_ID)},
-       {USB_DEVICE(USB_AVAYA8_VENDOR_ID, USB_AVAYA_WIRELESS_ID)},
-       {USB_DEVICE(USB_AVAYAE_VENDOR_ID, USB_AVAYA_WIRELESS_ID)},
-       {USB_DEVICE(USB_AGERE_VENDOR_ID, USB_AGERE_MODEL0801_ID)},
-       {USB_DEVICE(USB_AGERE_VENDOR_ID, USB_AGERE_MODEL0802_ID)},
-       {USB_DEVICE(USB_ELSA_VENDOR_ID, USB_ELSA_AIRLANCER_ID)},
-       {USB_DEVICE(USB_LEGEND_VENDOR_ID, USB_LEGEND_JOYNET_ID)},
-       {USB_DEVICE_VER(USB_SAMSUNG_VENDOR_ID, USB_SAMSUNG_SEW2001U1_ID,
-                       0, 0)},
-       {USB_DEVICE(USB_SAMSUNG_VENDOR_ID, USB_SAMSUNG_SEW2001U2_ID)},
-       {USB_DEVICE(USB_SAMSUNG_VENDOR_ID, USB_SAMSUNG_SEW2003U_ID)},
-       {USB_DEVICE(USB_IGATE_VENDOR_ID, USB_IGATE_IGATE_11M_ID)},
-       {USB_DEVICE(USB_FUJITSU_VENDOR_ID, USB_FUJITSU_E1100_ID)},
-       {USB_DEVICE(USB_2WIRE_VENDOR_ID, USB_2WIRE_WIRELESS_ID)},
-       {USB_DEVICE(USB_AGERE_VENDOR_ID, USB_AGERE_REBRANDED_ID)},
-       {}                      /* Terminating entry */
-};
-
-MODULE_DEVICE_TABLE(usb, ezusb_table);
-
-/* Structure to hold all of our device specific stuff */
-struct ezusb_priv {
-       struct usb_device *udev;
-       struct net_device *dev;
-       struct mutex mtx;
-       spinlock_t req_lock;
-       struct list_head req_pending;
-       struct list_head req_active;
-       spinlock_t reply_count_lock;
-       u16 hermes_reg_fake[0x40];
-       u8 *bap_buf;
-       struct urb *read_urb;
-       int read_pipe;
-       int write_pipe;
-       u8 reply_count;
-};
-
-enum ezusb_state {
-       EZUSB_CTX_START,
-       EZUSB_CTX_QUEUED,
-       EZUSB_CTX_REQ_SUBMITTED,
-       EZUSB_CTX_REQ_COMPLETE,
-       EZUSB_CTX_RESP_RECEIVED,
-       EZUSB_CTX_REQ_TIMEOUT,
-       EZUSB_CTX_REQ_FAILED,
-       EZUSB_CTX_RESP_TIMEOUT,
-       EZUSB_CTX_REQSUBMIT_FAIL,
-       EZUSB_CTX_COMPLETE,
-};
-
-struct request_context {
-       struct list_head list;
-       atomic_t refcount;
-       struct completion done; /* Signals that CTX is dead */
-       int killed;
-       struct urb *outurb;     /* OUT for req pkt */
-       struct ezusb_priv *upriv;
-       struct ezusb_packet *buf;
-       int buf_length;
-       struct timer_list timer;        /* Timeout handling */
-       enum ezusb_state state; /* Current state */
-       /* the RID that we will wait for */
-       u16 out_rid;
-       u16 in_rid;
-};
-
-
-/* Forward declarations */
-static void ezusb_ctx_complete(struct request_context *ctx);
-static void ezusb_req_queue_run(struct ezusb_priv *upriv);
-static void ezusb_bulk_in_callback(struct urb *urb);
-
-static inline u8 ezusb_reply_inc(u8 count)
-{
-       if (count < 0x7F)
-               return count + 1;
-       else
-               return 1;
-}
-
-static void ezusb_request_context_put(struct request_context *ctx)
-{
-       if (!atomic_dec_and_test(&ctx->refcount))
-               return;
-
-       WARN_ON(!ctx->done.done);
-       BUG_ON(ctx->outurb->status == -EINPROGRESS);
-       BUG_ON(timer_pending(&ctx->timer));
-       usb_free_urb(ctx->outurb);
-       kfree(ctx->buf);
-       kfree(ctx);
-}
-
-static inline void ezusb_mod_timer(struct ezusb_priv *upriv,
-                                  struct timer_list *timer,
-                                  unsigned long expire)
-{
-       if (!upriv->udev)
-               return;
-       mod_timer(timer, expire);
-}
-
-static void ezusb_request_timerfn(u_long _ctx)
-{
-       struct request_context *ctx = (void *) _ctx;
-
-       ctx->outurb->transfer_flags |= URB_ASYNC_UNLINK;
-       if (usb_unlink_urb(ctx->outurb) == -EINPROGRESS) {
-               ctx->state = EZUSB_CTX_REQ_TIMEOUT;
-       } else {
-               ctx->state = EZUSB_CTX_RESP_TIMEOUT;
-               dbg("couldn't unlink");
-               atomic_inc(&ctx->refcount);
-               ctx->killed = 1;
-               ezusb_ctx_complete(ctx);
-               ezusb_request_context_put(ctx);
-       }
-};
-
-static struct request_context *ezusb_alloc_ctx(struct ezusb_priv *upriv,
-                                              u16 out_rid, u16 in_rid)
-{
-       struct request_context *ctx;
-
-       ctx = kzalloc(sizeof(*ctx), GFP_ATOMIC);
-       if (!ctx)
-               return NULL;
-
-       ctx->buf = kmalloc(BULK_BUF_SIZE, GFP_ATOMIC);
-       if (!ctx->buf) {
-               kfree(ctx);
-               return NULL;
-       }
-       ctx->outurb = usb_alloc_urb(0, GFP_ATOMIC);
-       if (!ctx->outurb) {
-               kfree(ctx->buf);
-               kfree(ctx);
-               return NULL;
-       }
-
-       ctx->upriv = upriv;
-       ctx->state = EZUSB_CTX_START;
-       ctx->out_rid = out_rid;
-       ctx->in_rid = in_rid;
-
-       atomic_set(&ctx->refcount, 1);
-       init_completion(&ctx->done);
-
-       init_timer(&ctx->timer);
-       ctx->timer.function = ezusb_request_timerfn;
-       ctx->timer.data = (u_long) ctx;
-       return ctx;
-}
-
-
-/* Hopefully the real complete_all will soon be exported, in the mean
- * while this should work. */
-static inline void ezusb_complete_all(struct completion *comp)
-{
-       complete(comp);
-       complete(comp);
-       complete(comp);
-       complete(comp);
-}
-
-static void ezusb_ctx_complete(struct request_context *ctx)
-{
-       struct ezusb_priv *upriv = ctx->upriv;
-       unsigned long flags;
-
-       spin_lock_irqsave(&upriv->req_lock, flags);
-
-       list_del_init(&ctx->list);
-       if (upriv->udev) {
-               spin_unlock_irqrestore(&upriv->req_lock, flags);
-               ezusb_req_queue_run(upriv);
-               spin_lock_irqsave(&upriv->req_lock, flags);
-       }
-
-       switch (ctx->state) {
-       case EZUSB_CTX_COMPLETE:
-       case EZUSB_CTX_REQSUBMIT_FAIL:
-       case EZUSB_CTX_REQ_FAILED:
-       case EZUSB_CTX_REQ_TIMEOUT:
-       case EZUSB_CTX_RESP_TIMEOUT:
-               spin_unlock_irqrestore(&upriv->req_lock, flags);
-
-               if ((ctx->out_rid == EZUSB_RID_TX) && upriv->dev) {
-                       struct net_device *dev = upriv->dev;
-                       struct orinoco_private *priv = ndev_priv(dev);
-                       struct net_device_stats *stats = &priv->stats;
-
-                       if (ctx->state != EZUSB_CTX_COMPLETE)
-                               stats->tx_errors++;
-                       else
-                               stats->tx_packets++;
-
-                       netif_wake_queue(dev);
-               }
-               ezusb_complete_all(&ctx->done);
-               ezusb_request_context_put(ctx);
-               break;
-
-       default:
-               spin_unlock_irqrestore(&upriv->req_lock, flags);
-               if (!upriv->udev) {
-                       /* This is normal, as all request contexts get flushed
-                        * when the device is disconnected */
-                       err("Called, CTX not terminating, but device gone");
-                       ezusb_complete_all(&ctx->done);
-                       ezusb_request_context_put(ctx);
-                       break;
-               }
-
-               err("Called, CTX not in terminating state.");
-               /* Things are really bad if this happens. Just leak
-                * the CTX because it may still be linked to the
-                * queue or the OUT urb may still be active.
-                * Just leaking at least prevents an Oops or Panic.
-                */
-               break;
-       }
-}
-
-/**
- * ezusb_req_queue_run:
- * Description:
- *     Note: Only one active CTX at any one time, because there's no
- *     other (reliable) way to match the response URB to the correct
- *     CTX.
- **/
-static void ezusb_req_queue_run(struct ezusb_priv *upriv)
-{
-       unsigned long flags;
-       struct request_context *ctx;
-       int result;
-
-       spin_lock_irqsave(&upriv->req_lock, flags);
-
-       if (!list_empty(&upriv->req_active))
-               goto unlock;
-
-       if (list_empty(&upriv->req_pending))
-               goto unlock;
-
-       ctx =
-           list_entry(upriv->req_pending.next, struct request_context,
-                      list);
-
-       if (!ctx->upriv->udev)
-               goto unlock;
-
-       /* We need to split this off to avoid a race condition */
-       list_move_tail(&ctx->list, &upriv->req_active);
-
-       if (ctx->state == EZUSB_CTX_QUEUED) {
-               atomic_inc(&ctx->refcount);
-               result = usb_submit_urb(ctx->outurb, GFP_ATOMIC);
-               if (result) {
-                       ctx->state = EZUSB_CTX_REQSUBMIT_FAIL;
-
-                       spin_unlock_irqrestore(&upriv->req_lock, flags);
-
-                       err("Fatal, failed to submit command urb."
-                           " error=%d\n", result);
-
-                       ezusb_ctx_complete(ctx);
-                       ezusb_request_context_put(ctx);
-                       goto done;
-               }
-
-               ctx->state = EZUSB_CTX_REQ_SUBMITTED;
-               ezusb_mod_timer(ctx->upriv, &ctx->timer,
-                               jiffies + DEF_TIMEOUT);
-       }
-
- unlock:
-       spin_unlock_irqrestore(&upriv->req_lock, flags);
-
- done:
-       return;
-}
-
-static void ezusb_req_enqueue_run(struct ezusb_priv *upriv,
-                                 struct request_context *ctx)
-{
-       unsigned long flags;
-
-       spin_lock_irqsave(&upriv->req_lock, flags);
-
-       if (!ctx->upriv->udev) {
-               spin_unlock_irqrestore(&upriv->req_lock, flags);
-               goto done;
-       }
-       atomic_inc(&ctx->refcount);
-       list_add_tail(&ctx->list, &upriv->req_pending);
-       spin_unlock_irqrestore(&upriv->req_lock, flags);
-
-       ctx->state = EZUSB_CTX_QUEUED;
-       ezusb_req_queue_run(upriv);
-
- done:
-       return;
-}
-
-static void ezusb_request_out_callback(struct urb *urb)
-{
-       unsigned long flags;
-       enum ezusb_state state;
-       struct request_context *ctx = urb->context;
-       struct ezusb_priv *upriv = ctx->upriv;
-
-       spin_lock_irqsave(&upriv->req_lock, flags);
-
-       del_timer(&ctx->timer);
-
-       if (ctx->killed) {
-               spin_unlock_irqrestore(&upriv->req_lock, flags);
-               pr_warning("interrupt called with dead ctx");
-               goto out;
-       }
-
-       state = ctx->state;
-
-       if (urb->status == 0) {
-               switch (state) {
-               case EZUSB_CTX_REQ_SUBMITTED:
-                       if (ctx->in_rid) {
-                               ctx->state = EZUSB_CTX_REQ_COMPLETE;
-                               /* reply URB still pending */
-                               ezusb_mod_timer(upriv, &ctx->timer,
-                                               jiffies + DEF_TIMEOUT);
-                               spin_unlock_irqrestore(&upriv->req_lock,
-                                                      flags);
-                               break;
-                       }
-                       /* fall through */
-               case EZUSB_CTX_RESP_RECEIVED:
-                       /* IN already received before this OUT-ACK */
-                       ctx->state = EZUSB_CTX_COMPLETE;
-                       spin_unlock_irqrestore(&upriv->req_lock, flags);
-                       ezusb_ctx_complete(ctx);
-                       break;
-
-               default:
-                       spin_unlock_irqrestore(&upriv->req_lock, flags);
-                       err("Unexpected state(0x%x, %d) in OUT URB",
-                           state, urb->status);
-                       break;
-               }
-       } else {
-               /* If someone cancels the OUT URB then its status
-                * should be either -ECONNRESET or -ENOENT.
-                */
-               switch (state) {
-               case EZUSB_CTX_REQ_SUBMITTED:
-               case EZUSB_CTX_RESP_RECEIVED:
-                       ctx->state = EZUSB_CTX_REQ_FAILED;
-                       /* fall through */
-
-               case EZUSB_CTX_REQ_FAILED:
-               case EZUSB_CTX_REQ_TIMEOUT:
-                       spin_unlock_irqrestore(&upriv->req_lock, flags);
-
-                       ezusb_ctx_complete(ctx);
-                       break;
-
-               default:
-                       spin_unlock_irqrestore(&upriv->req_lock, flags);
-
-                       err("Unexpected state(0x%x, %d) in OUT URB",
-                           state, urb->status);
-                       break;
-               }
-       }
- out:
-       ezusb_request_context_put(ctx);
-}
-
-static void ezusb_request_in_callback(struct ezusb_priv *upriv,
-                                     struct urb *urb)
-{
-       struct ezusb_packet *ans = urb->transfer_buffer;
-       struct request_context *ctx = NULL;
-       enum ezusb_state state;
-       unsigned long flags;
-
-       /* Find the CTX on the active queue that requested this URB */
-       spin_lock_irqsave(&upriv->req_lock, flags);
-       if (upriv->udev) {
-               struct list_head *item;
-
-               list_for_each(item, &upriv->req_active) {
-                       struct request_context *c;
-                       int reply_count;
-
-                       c = list_entry(item, struct request_context, list);
-                       reply_count =
-                           ezusb_reply_inc(c->buf->req_reply_count);
-                       if ((ans->ans_reply_count == reply_count)
-                           && (le16_to_cpu(ans->hermes_rid) == c->in_rid)) {
-                               ctx = c;
-                               break;
-                       }
-                       dbg("Skipped (0x%x/0x%x) (%d/%d)",
-                           le16_to_cpu(ans->hermes_rid),
-                           c->in_rid, ans->ans_reply_count, reply_count);
-               }
-       }
-
-       if (ctx == NULL) {
-               spin_unlock_irqrestore(&upriv->req_lock, flags);
-               err("%s: got unexpected RID: 0x%04X", __func__,
-                   le16_to_cpu(ans->hermes_rid));
-               ezusb_req_queue_run(upriv);
-               return;
-       }
-
-       /* The data we want is in the in buffer, exchange */
-       urb->transfer_buffer = ctx->buf;
-       ctx->buf = (void *) ans;
-       ctx->buf_length = urb->actual_length;
-
-       state = ctx->state;
-       switch (state) {
-       case EZUSB_CTX_REQ_SUBMITTED:
-               /* We have received our response URB before
-                * our request has been acknowledged. Do NOT
-                * destroy our CTX yet, because our OUT URB
-                * is still alive ...
-                */
-               ctx->state = EZUSB_CTX_RESP_RECEIVED;
-               spin_unlock_irqrestore(&upriv->req_lock, flags);
-
-               /* Let the machine continue running. */
-               break;
-
-       case EZUSB_CTX_REQ_COMPLETE:
-               /* This is the usual path: our request
-                * has already been acknowledged, and
-                * we have now received the reply.
-                */
-               ctx->state = EZUSB_CTX_COMPLETE;
-
-               /* Stop the intimer */
-               del_timer(&ctx->timer);
-               spin_unlock_irqrestore(&upriv->req_lock, flags);
-
-               /* Call the completion handler */
-               ezusb_ctx_complete(ctx);
-               break;
-
-       default:
-               spin_unlock_irqrestore(&upriv->req_lock, flags);
-
-               pr_warning("Matched IN URB, unexpected context state(0x%x)",
-                    state);
-               /* Throw this CTX away and try submitting another */
-               del_timer(&ctx->timer);
-               ctx->outurb->transfer_flags |= URB_ASYNC_UNLINK;
-               usb_unlink_urb(ctx->outurb);
-               ezusb_req_queue_run(upriv);
-               break;
-       }                       /* switch */
-}
-
-
-static void ezusb_req_ctx_wait(struct ezusb_priv *upriv,
-                              struct request_context *ctx)
-{
-       switch (ctx->state) {
-       case EZUSB_CTX_QUEUED:
-       case EZUSB_CTX_REQ_SUBMITTED:
-       case EZUSB_CTX_REQ_COMPLETE:
-       case EZUSB_CTX_RESP_RECEIVED:
-               if (in_softirq()) {
-                       /* If we get called from a timer, timeout timers don't
-                        * get the chance to run themselves. So we make sure
-                        * that we don't sleep for ever */
-                       int msecs = DEF_TIMEOUT * (1000 / HZ);
-                       while (!ctx->done.done && msecs--)
-                               udelay(1000);
-               } else {
-                       wait_event_interruptible(ctx->done.wait,
-                                                ctx->done.done);
-               }
-               break;
-       default:
-               /* Done or failed - nothing to wait for */
-               break;
-       }
-}
-
-static inline u16 build_crc(struct ezusb_packet *data)
-{
-       u16 crc = 0;
-       u8 *bytes = (u8 *)data;
-       int i;
-
-       for (i = 0; i < 8; i++)
-               crc = (crc << 1) + bytes[i];
-
-       return crc;
-}
-
-/**
- * ezusb_fill_req:
- *
- * if data == NULL and length > 0 the data is assumed to be already in
- * the target buffer and only the header is filled.
- *
- */
-static int ezusb_fill_req(struct ezusb_packet *req, u16 length, u16 rid,
-                         const void *data, u16 frame_type, u8 reply_count)
-{
-       int total_size = sizeof(*req) + length;
-
-       BUG_ON(total_size > BULK_BUF_SIZE);
-
-       req->magic = cpu_to_le16(EZUSB_MAGIC);
-       req->req_reply_count = reply_count;
-       req->ans_reply_count = 0;
-       req->frame_type = cpu_to_le16(frame_type);
-       req->size = cpu_to_le16(length + 4);
-       req->crc = cpu_to_le16(build_crc(req));
-       req->hermes_len = cpu_to_le16(HERMES_BYTES_TO_RECLEN(length));
-       req->hermes_rid = cpu_to_le16(rid);
-       if (data)
-               memcpy(req->data, data, length);
-       return total_size;
-}
-
-static int ezusb_submit_in_urb(struct ezusb_priv *upriv)
-{
-       int retval = 0;
-       void *cur_buf = upriv->read_urb->transfer_buffer;
-
-       if (upriv->read_urb->status == -EINPROGRESS) {
-               dbg("urb busy, not resubmiting");
-               retval = -EBUSY;
-               goto exit;
-       }
-       usb_fill_bulk_urb(upriv->read_urb, upriv->udev, upriv->read_pipe,
-                         cur_buf, BULK_BUF_SIZE,
-                         ezusb_bulk_in_callback, upriv);
-       upriv->read_urb->transfer_flags = 0;
-       retval = usb_submit_urb(upriv->read_urb, GFP_ATOMIC);
-       if (retval)
-               err("%s submit failed %d", __func__, retval);
-
- exit:
-       return retval;
-}
-
-static inline int ezusb_8051_cpucs(struct ezusb_priv *upriv, int reset)
-{
-       u8 res_val = reset;     /* avoid argument promotion */
-
-       if (!upriv->udev) {
-               err("%s: !upriv->udev", __func__);
-               return -EFAULT;
-       }
-       return usb_control_msg(upriv->udev,
-                              usb_sndctrlpipe(upriv->udev, 0),
-                              EZUSB_REQUEST_FW_TRANS,
-                              USB_TYPE_VENDOR | USB_RECIP_DEVICE |
-                              USB_DIR_OUT, EZUSB_CPUCS_REG, 0, &res_val,
-                              sizeof(res_val), DEF_TIMEOUT);
-}
-
-static int ezusb_firmware_download(struct ezusb_priv *upriv,
-                                  struct ez_usb_fw *fw)
-{
-       u8 fw_buffer[FW_BUF_SIZE];
-       int retval, addr;
-       int variant_offset;
-
-       /*
-        * This byte is 1 and should be replaced with 0.  The offset is
-        * 0x10AD in version 0.0.6.  The byte in question should follow
-        * the end of the code pointed to by the jump in the beginning
-        * of the firmware.  Also, it is read by code located at 0x358.
-        */
-       variant_offset = be16_to_cpup((__be16 *) &fw->code[FW_VAR_OFFSET_PTR]);
-       if (variant_offset >= fw->size) {
-               printk(KERN_ERR PFX "Invalid firmware variant offset: "
-                      "0x%04x\n", variant_offset);
-               retval = -EINVAL;
-               goto fail;
-       }
-
-       retval = ezusb_8051_cpucs(upriv, 1);
-       if (retval < 0)
-               goto fail;
-       for (addr = 0; addr < fw->size; addr += FW_BUF_SIZE) {
-               /* 0x100-0x300 should be left alone, it contains card
-                * specific data, like USB enumeration information */
-               if ((addr >= FW_HOLE_START) && (addr < FW_HOLE_END))
-                       continue;
-
-               memcpy(fw_buffer, &fw->code[addr], FW_BUF_SIZE);
-               if (variant_offset >= addr &&
-                   variant_offset < addr + FW_BUF_SIZE) {
-                       dbg("Patching card_variant byte at 0x%04X",
-                           variant_offset);
-                       fw_buffer[variant_offset - addr] = FW_VAR_VALUE;
-               }
-               retval = usb_control_msg(upriv->udev,
-                                        usb_sndctrlpipe(upriv->udev, 0),
-                                        EZUSB_REQUEST_FW_TRANS,
-                                        USB_TYPE_VENDOR | USB_RECIP_DEVICE
-                                        | USB_DIR_OUT,
-                                        addr, 0x0,
-                                        fw_buffer, FW_BUF_SIZE,
-                                        DEF_TIMEOUT);
-
-               if (retval < 0)
-                       goto fail;
-       }
-       retval = ezusb_8051_cpucs(upriv, 0);
-       if (retval < 0)
-               goto fail;
-
-       goto exit;
- fail:
-       printk(KERN_ERR PFX "Firmware download failed, error %d\n",
-              retval);
- exit:
-       return retval;
-}
-
-static int ezusb_access_ltv(struct ezusb_priv *upriv,
-                           struct request_context *ctx,
-                           u16 length, const void *data, u16 frame_type,
-                           void *ans_buff, int ans_size, u16 *ans_length)
-{
-       int req_size;
-       int retval = 0;
-       enum ezusb_state state;
-
-       BUG_ON(in_irq());
-
-       if (!upriv->udev) {
-               dbg("Device disconnected");
-               return -ENODEV;
-       }
-
-       if (upriv->read_urb->status != -EINPROGRESS)
-               err("%s: in urb not pending", __func__);
-
-       /* protect upriv->reply_count, guarantee sequential numbers */
-       spin_lock_bh(&upriv->reply_count_lock);
-       req_size = ezusb_fill_req(ctx->buf, length, ctx->out_rid, data,
-                                 frame_type, upriv->reply_count);
-       usb_fill_bulk_urb(ctx->outurb, upriv->udev, upriv->write_pipe,
-                         ctx->buf, req_size,
-                         ezusb_request_out_callback, ctx);
-
-       if (ctx->in_rid)
-               upriv->reply_count = ezusb_reply_inc(upriv->reply_count);
-
-       ezusb_req_enqueue_run(upriv, ctx);
-
-       spin_unlock_bh(&upriv->reply_count_lock);
-
-       if (ctx->in_rid)
-               ezusb_req_ctx_wait(upriv, ctx);
-
-       state = ctx->state;
-       switch (state) {
-       case EZUSB_CTX_COMPLETE:
-               retval = ctx->outurb->status;
-               break;
-
-       case EZUSB_CTX_QUEUED:
-       case EZUSB_CTX_REQ_SUBMITTED:
-               if (!ctx->in_rid)
-                       break;
-       default:
-               err("%s: Unexpected context state %d", __func__,
-                   state);
-               /* fall though */
-       case EZUSB_CTX_REQ_TIMEOUT:
-       case EZUSB_CTX_REQ_FAILED:
-       case EZUSB_CTX_RESP_TIMEOUT:
-       case EZUSB_CTX_REQSUBMIT_FAIL:
-               printk(KERN_ERR PFX "Access failed, resetting (state %d,"
-                      " reply_count %d)\n", state, upriv->reply_count);
-               upriv->reply_count = 0;
-               if (state == EZUSB_CTX_REQ_TIMEOUT
-                   || state == EZUSB_CTX_RESP_TIMEOUT) {
-                       printk(KERN_ERR PFX "ctx timed out\n");
-                       retval = -ETIMEDOUT;
-               } else {
-                       printk(KERN_ERR PFX "ctx failed\n");
-                       retval = -EFAULT;
-               }
-               goto exit;
-               break;
-       }
-       if (ctx->in_rid) {
-               struct ezusb_packet *ans = ctx->buf;
-               int exp_len;
-
-               if (ans->hermes_len != 0)
-                       exp_len = le16_to_cpu(ans->hermes_len) * 2 + 12;
-               else
-                       exp_len = 14;
-
-               if (exp_len != ctx->buf_length) {
-                       err("%s: length mismatch for RID 0x%04x: "
-                           "expected %d, got %d", __func__,
-                           ctx->in_rid, exp_len, ctx->buf_length);
-                       retval = -EIO;
-                       goto exit;
-               }
-
-               if (ans_buff)
-                       memcpy(ans_buff, ans->data,
-                              min_t(int, exp_len, ans_size));
-               if (ans_length)
-                       *ans_length = le16_to_cpu(ans->hermes_len);
-       }
- exit:
-       ezusb_request_context_put(ctx);
-       return retval;
-}
-
-static int ezusb_write_ltv(hermes_t *hw, int bap, u16 rid,
-                          u16 length, const void *data)
-{
-       struct ezusb_priv *upriv = hw->priv;
-       u16 frame_type;
-       struct request_context *ctx;
-
-       if (length == 0)
-               return -EINVAL;
-
-       length = HERMES_RECLEN_TO_BYTES(length);
-
-       /* On memory mapped devices HERMES_RID_CNFGROUPADDRESSES can be
-        * set to be empty, but the USB bridge doesn't like it */
-       if (length == 0)
-               return 0;
-
-       ctx = ezusb_alloc_ctx(upriv, rid, EZUSB_RID_ACK);
-       if (!ctx)
-               return -ENOMEM;
-
-       if (rid == EZUSB_RID_TX)
-               frame_type = EZUSB_FRAME_DATA;
-       else
-               frame_type = EZUSB_FRAME_CONTROL;
-
-       return ezusb_access_ltv(upriv, ctx, length, data, frame_type,
-                               NULL, 0, NULL);
-}
-
-static int ezusb_read_ltv(hermes_t *hw, int bap, u16 rid,
-                         unsigned bufsize, u16 *length, void *buf)
-{
-       struct ezusb_priv *upriv = hw->priv;
-       struct request_context *ctx;
-
-       if ((bufsize < 0) || (bufsize % 2))
-               return -EINVAL;
-
-       ctx = ezusb_alloc_ctx(upriv, rid, rid);
-       if (!ctx)
-               return -ENOMEM;
-
-       return ezusb_access_ltv(upriv, ctx, 0, NULL, EZUSB_FRAME_CONTROL,
-                               buf, bufsize, length);
-}
-
-static int ezusb_doicmd_wait(hermes_t *hw, u16 cmd, u16 parm0, u16 parm1,
-                            u16 parm2, struct hermes_response *resp)
-{
-       struct ezusb_priv *upriv = hw->priv;
-       struct request_context *ctx;
-
-       __le16 data[4] = {
-               cpu_to_le16(cmd),
-               cpu_to_le16(parm0),
-               cpu_to_le16(parm1),
-               cpu_to_le16(parm2),
-       };
-       dbg("0x%04X, parm0 0x%04X, parm1 0x%04X, parm2 0x%04X",
-           cmd, parm0, parm1, parm2);
-       ctx = ezusb_alloc_ctx(upriv, EZUSB_RID_DOCMD, EZUSB_RID_ACK);
-       if (!ctx)
-               return -ENOMEM;
-
-       return ezusb_access_ltv(upriv, ctx, sizeof(data), &data,
-                               EZUSB_FRAME_CONTROL, NULL, 0, NULL);
-}
-
-static int ezusb_docmd_wait(hermes_t *hw, u16 cmd, u16 parm0,
-                           struct hermes_response *resp)
-{
-       struct ezusb_priv *upriv = hw->priv;
-       struct request_context *ctx;
-
-       __le16 data[4] = {
-               cpu_to_le16(cmd),
-               cpu_to_le16(parm0),
-               0,
-               0,
-       };
-       dbg("0x%04X, parm0 0x%04X", cmd, parm0);
-       ctx = ezusb_alloc_ctx(upriv, EZUSB_RID_DOCMD, EZUSB_RID_ACK);
-       if (!ctx)
-               return -ENOMEM;
-
-       return ezusb_access_ltv(upriv, ctx, sizeof(data), &data,
-                               EZUSB_FRAME_CONTROL, NULL, 0, NULL);
-}
-
-static int ezusb_bap_pread(struct hermes *hw, int bap,
-                          void *buf, int len, u16 id, u16 offset)
-{
-       struct ezusb_priv *upriv = hw->priv;
-       struct ezusb_packet *ans = (void *) upriv->read_urb->transfer_buffer;
-       int actual_length = upriv->read_urb->actual_length;
-
-       if (id == EZUSB_RID_RX) {
-               if ((sizeof(*ans) + offset + len) > actual_length) {
-                       printk(KERN_ERR PFX "BAP read beyond buffer end "
-                              "in rx frame\n");
-                       return -EINVAL;
-               }
-               memcpy(buf, ans->data + offset, len);
-               return 0;
-       }
-
-       if (EZUSB_IS_INFO(id)) {
-               /* Include 4 bytes for length/type */
-               if ((sizeof(*ans) + offset + len - 4) > actual_length) {
-                       printk(KERN_ERR PFX "BAP read beyond buffer end "
-                              "in info frame\n");
-                       return -EFAULT;
-               }
-               memcpy(buf, ans->data + offset - 4, len);
-       } else {
-               printk(KERN_ERR PFX "Unexpected fid 0x%04x\n", id);
-               return -EINVAL;
-       }
-
-       return 0;
-}
-
-static int ezusb_read_pda(struct hermes *hw, __le16 *pda,
-                         u32 pda_addr, u16 pda_len)
-{
-       struct ezusb_priv *upriv = hw->priv;
-       struct request_context *ctx;
-       __le16 data[] = {
-               cpu_to_le16(pda_addr & 0xffff),
-               cpu_to_le16(pda_len - 4)
-       };
-       ctx = ezusb_alloc_ctx(upriv, EZUSB_RID_READ_PDA, EZUSB_RID_READ_PDA);
-       if (!ctx)
-               return -ENOMEM;
-
-       /* wl_lkm does not include PDA size in the PDA area.
-        * We will pad the information into pda, so other routines
-        * don't have to be modified */
-       pda[0] = cpu_to_le16(pda_len - 2);
-       /* Includes CFG_PROD_DATA but not itself */
-       pda[1] = cpu_to_le16(0x0800); /* CFG_PROD_DATA */
-
-       return ezusb_access_ltv(upriv, ctx, sizeof(data), &data,
-                               EZUSB_FRAME_CONTROL, &pda[2], pda_len - 4,
-                               NULL);
-}
-
-static int ezusb_program_init(struct hermes *hw, u32 entry_point)
-{
-       struct ezusb_priv *upriv = hw->priv;
-       struct request_context *ctx;
-       __le32 data = cpu_to_le32(entry_point);
-
-       ctx = ezusb_alloc_ctx(upriv, EZUSB_RID_PROG_INIT, EZUSB_RID_ACK);
-       if (!ctx)
-               return -ENOMEM;
-
-       return ezusb_access_ltv(upriv, ctx, sizeof(data), &data,
-                               EZUSB_FRAME_CONTROL, NULL, 0, NULL);
-}
-
-static int ezusb_program_end(struct hermes *hw)
-{
-       struct ezusb_priv *upriv = hw->priv;
-       struct request_context *ctx;
-
-       ctx = ezusb_alloc_ctx(upriv, EZUSB_RID_PROG_END, EZUSB_RID_ACK);
-       if (!ctx)
-               return -ENOMEM;
-
-       return ezusb_access_ltv(upriv, ctx, 0, NULL,
-                               EZUSB_FRAME_CONTROL, NULL, 0, NULL);
-}
-
-static int ezusb_program_bytes(struct hermes *hw, const char *buf,
-                              u32 addr, u32 len)
-{
-       struct ezusb_priv *upriv = hw->priv;
-       struct request_context *ctx;
-       __le32 data = cpu_to_le32(addr);
-       int err;
-
-       ctx = ezusb_alloc_ctx(upriv, EZUSB_RID_PROG_SET_ADDR, EZUSB_RID_ACK);
-       if (!ctx)
-               return -ENOMEM;
-
-       err = ezusb_access_ltv(upriv, ctx, sizeof(data), &data,
-                              EZUSB_FRAME_CONTROL, NULL, 0, NULL);
-       if (err)
-               return err;
-
-       ctx = ezusb_alloc_ctx(upriv, EZUSB_RID_PROG_BYTES, EZUSB_RID_ACK);
-       if (!ctx)
-               return -ENOMEM;
-
-       return ezusb_access_ltv(upriv, ctx, len, buf,
-                               EZUSB_FRAME_CONTROL, NULL, 0, NULL);
-}
-
-static int ezusb_program(struct hermes *hw, const char *buf,
-                        u32 addr, u32 len)
-{
-       u32 ch_addr;
-       u32 ch_len;
-       int err = 0;
-
-       /* We can only send 2048 bytes out of the bulk xmit at a time,
-        * so we have to split any programming into chunks of <2048
-        * bytes. */
-
-       ch_len = (len < MAX_DL_SIZE) ? len : MAX_DL_SIZE;
-       ch_addr = addr;
-
-       while (ch_addr < (addr + len)) {
-               pr_debug("Programming subblock of length %d "
-                        "to address 0x%08x. Data @ %p\n",
-                        ch_len, ch_addr, &buf[ch_addr - addr]);
-
-               err = ezusb_program_bytes(hw, &buf[ch_addr - addr],
-                                         ch_addr, ch_len);
-               if (err)
-                       break;
-
-               ch_addr += ch_len;
-               ch_len = ((addr + len - ch_addr) < MAX_DL_SIZE) ?
-                       (addr + len - ch_addr) : MAX_DL_SIZE;
-       }
-
-       return err;
-}
-
-static netdev_tx_t ezusb_xmit(struct sk_buff *skb, struct net_device *dev)
-{
-       struct orinoco_private *priv = ndev_priv(dev);
-       struct net_device_stats *stats = &priv->stats;
-       struct ezusb_priv *upriv = priv->card;
-       u8 mic[MICHAEL_MIC_LEN+1];
-       int err = 0;
-       int tx_control;
-       unsigned long flags;
-       struct request_context *ctx;
-       u8 *buf;
-       int tx_size;
-
-       if (!netif_running(dev)) {
-               printk(KERN_ERR "%s: Tx on stopped device!\n",
-                      dev->name);
-               return NETDEV_TX_BUSY;
-       }
-
-       if (netif_queue_stopped(dev)) {
-               printk(KERN_DEBUG "%s: Tx while transmitter busy!\n",
-                      dev->name);
-               return NETDEV_TX_BUSY;
-       }
-
-       if (orinoco_lock(priv, &flags) != 0) {
-               printk(KERN_ERR
-                      "%s: ezusb_xmit() called while hw_unavailable\n",
-                      dev->name);
-               return NETDEV_TX_BUSY;
-       }
-
-       if (!netif_carrier_ok(dev) ||
-           (priv->iw_mode == NL80211_IFTYPE_MONITOR)) {
-               /* Oops, the firmware hasn't established a connection,
-                  silently drop the packet (this seems to be the
-                  safest approach). */
-               goto drop;
-       }
-
-       /* Check packet length */
-       if (skb->len < ETH_HLEN)
-               goto drop;
-
-       ctx = ezusb_alloc_ctx(upriv, EZUSB_RID_TX, 0);
-       if (!ctx)
-               goto busy;
-
-       memset(ctx->buf, 0, BULK_BUF_SIZE);
-       buf = ctx->buf->data;
-
-       tx_control = 0;
-
-       err = orinoco_process_xmit_skb(skb, dev, priv, &tx_control,
-                                      &mic[0]);
-       if (err)
-               goto drop;
-
-       {
-               __le16 *tx_cntl = (__le16 *)buf;
-               *tx_cntl = cpu_to_le16(tx_control);
-               buf += sizeof(*tx_cntl);
-       }
-
-       memcpy(buf, skb->data, skb->len);
-       buf += skb->len;
-
-       if (tx_control & HERMES_TXCTRL_MIC) {
-               u8 *m = mic;
-               /* Mic has been offset so it can be copied to an even
-                * address. We're copying eveything anyway, so we
-                * don't need to copy that first byte. */
-               if (skb->len % 2)
-                       m++;
-               memcpy(buf, m, MICHAEL_MIC_LEN);
-               buf += MICHAEL_MIC_LEN;
-       }
-
-       /* Finally, we actually initiate the send */
-       netif_stop_queue(dev);
-
-       /* The card may behave better if we send evenly sized usb transfers */
-       tx_size = ALIGN(buf - ctx->buf->data, 2);
-
-       err = ezusb_access_ltv(upriv, ctx, tx_size, NULL,
-                              EZUSB_FRAME_DATA, NULL, 0, NULL);
-
-       if (err) {
-               netif_start_queue(dev);
-               if (net_ratelimit())
-                       printk(KERN_ERR "%s: Error %d transmitting packet\n",
-                               dev->name, err);
-               goto busy;
-       }
-
-       dev->trans_start = jiffies;
-       stats->tx_bytes += skb->len;
-       goto ok;
-
- drop:
-       stats->tx_errors++;
-       stats->tx_dropped++;
-
- ok:
-       orinoco_unlock(priv, &flags);
-       dev_kfree_skb(skb);
-       return NETDEV_TX_OK;
-
- busy:
-       orinoco_unlock(priv, &flags);
-       return NETDEV_TX_BUSY;
-}
-
-static int ezusb_allocate(struct hermes *hw, u16 size, u16 *fid)
-{
-       *fid = EZUSB_RID_TX;
-       return 0;
-}
-
-
-static int ezusb_hard_reset(struct orinoco_private *priv)
-{
-       struct ezusb_priv *upriv = priv->card;
-       int retval = ezusb_8051_cpucs(upriv, 1);
-
-       if (retval < 0) {
-               err("Failed to reset");
-               return retval;
-       }
-
-       retval = ezusb_8051_cpucs(upriv, 0);
-       if (retval < 0) {
-               err("Failed to unreset");
-               return retval;
-       }
-
-       dbg("sending control message");
-       retval = usb_control_msg(upriv->udev,
-                                usb_sndctrlpipe(upriv->udev, 0),
-                                EZUSB_REQUEST_TRIGER,
-                                USB_TYPE_VENDOR | USB_RECIP_DEVICE |
-                                USB_DIR_OUT, 0x0, 0x0, NULL, 0,
-                                DEF_TIMEOUT);
-       if (retval < 0) {
-               err("EZUSB_REQUEST_TRIGER failed retval %d", retval);
-               return retval;
-       }
-#if 0
-       dbg("Sending EZUSB_REQUEST_TRIG_AC");
-       retval = usb_control_msg(upriv->udev,
-                                usb_sndctrlpipe(upriv->udev, 0),
-                                EZUSB_REQUEST_TRIG_AC,
-                                USB_TYPE_VENDOR | USB_RECIP_DEVICE |
-                                USB_DIR_OUT, 0x00FA, 0x0, NULL, 0,
-                                DEF_TIMEOUT);
-       if (retval < 0) {
-               err("EZUSB_REQUEST_TRIG_AC failed retval %d", retval);
-               return retval;
-       }
-#endif
-
-       return 0;
-}
-
-
-static int ezusb_init(hermes_t *hw)
-{
-       struct ezusb_priv *upriv = hw->priv;
-       int retval;
-
-       BUG_ON(in_interrupt());
-       BUG_ON(!upriv);
-
-       upriv->reply_count = 0;
-       /* Write the MAGIC number on the simulated registers to keep
-        * orinoco.c happy */
-       hermes_write_regn(hw, SWSUPPORT0, HERMES_MAGIC);
-       hermes_write_regn(hw, RXFID, EZUSB_RID_RX);
-
-       usb_kill_urb(upriv->read_urb);
-       ezusb_submit_in_urb(upriv);
-
-       retval = ezusb_write_ltv(hw, 0, EZUSB_RID_INIT1,
-                                HERMES_BYTES_TO_RECLEN(2), "\x10\x00");
-       if (retval < 0) {
-               printk(KERN_ERR PFX "EZUSB_RID_INIT1 error %d\n", retval);
-               return retval;
-       }
-
-       retval = ezusb_docmd_wait(hw, HERMES_CMD_INIT, 0, NULL);
-       if (retval < 0) {
-               printk(KERN_ERR PFX "HERMES_CMD_INIT error %d\n", retval);
-               return retval;
-       }
-
-       return 0;
-}
-
-static void ezusb_bulk_in_callback(struct urb *urb)
-{
-       struct ezusb_priv *upriv = (struct ezusb_priv *) urb->context;
-       struct ezusb_packet *ans = urb->transfer_buffer;
-       u16 crc;
-       u16 hermes_rid;
-
-       if (upriv->udev == NULL) {
-               dbg("disconnected");
-               return;
-       }
-
-       if (urb->status == -ETIMEDOUT) {
-               /* When a device gets unplugged we get this every time
-                * we resubmit, flooding the logs.  Since we don't use
-                * USB timeouts, it shouldn't happen any other time*/
-               pr_warning("%s: urb timed out, not resubmiting", __func__);
-               return;
-       }
-       if (urb->status == -ECONNABORTED) {
-               pr_warning("%s: connection abort, resubmiting urb",
-                    __func__);
-               goto resubmit;
-       }
-       if ((urb->status == -EILSEQ)
-           || (urb->status == -ENOENT)
-           || (urb->status == -ECONNRESET)) {
-               dbg("status %d, not resubmiting", urb->status);
-               return;
-       }
-       if (urb->status)
-               dbg("status: %d length: %d",
-                   urb->status, urb->actual_length);
-       if (urb->actual_length < sizeof(*ans)) {
-               err("%s: short read, ignoring", __func__);
-               goto resubmit;
-       }
-       crc = build_crc(ans);
-       if (le16_to_cpu(ans->crc) != crc) {
-               err("CRC error, ignoring packet");
-               goto resubmit;
-       }
-
-       hermes_rid = le16_to_cpu(ans->hermes_rid);
-       if ((hermes_rid != EZUSB_RID_RX) && !EZUSB_IS_INFO(hermes_rid)) {
-               ezusb_request_in_callback(upriv, urb);
-       } else if (upriv->dev) {
-               struct net_device *dev = upriv->dev;
-               struct orinoco_private *priv = ndev_priv(dev);
-               hermes_t *hw = &priv->hw;
-
-               if (hermes_rid == EZUSB_RID_RX) {
-                       __orinoco_ev_rx(dev, hw);
-               } else {
-                       hermes_write_regn(hw, INFOFID,
-                                         le16_to_cpu(ans->hermes_rid));
-                       __orinoco_ev_info(dev, hw);
-               }
-       }
-
- resubmit:
-       if (upriv->udev)
-               ezusb_submit_in_urb(upriv);
-}
-
-static inline void ezusb_delete(struct ezusb_priv *upriv)
-{
-       struct net_device *dev;
-       struct list_head *item;
-       struct list_head *tmp_item;
-       unsigned long flags;
-
-       BUG_ON(in_interrupt());
-       BUG_ON(!upriv);
-
-       dev = upriv->dev;
-       mutex_lock(&upriv->mtx);
-
-       upriv->udev = NULL;     /* No timer will be rearmed from here */
-
-       usb_kill_urb(upriv->read_urb);
-
-       spin_lock_irqsave(&upriv->req_lock, flags);
-       list_for_each_safe(item, tmp_item, &upriv->req_active) {
-               struct request_context *ctx;
-               int err;
-
-               ctx = list_entry(item, struct request_context, list);
-               atomic_inc(&ctx->refcount);
-
-               ctx->outurb->transfer_flags |= URB_ASYNC_UNLINK;
-               err = usb_unlink_urb(ctx->outurb);
-
-               spin_unlock_irqrestore(&upriv->req_lock, flags);
-               if (err == -EINPROGRESS)
-                       wait_for_completion(&ctx->done);
-
-               del_timer_sync(&ctx->timer);
-               /* FIXME: there is an slight chance for the irq handler to
-                * be running */
-               if (!list_empty(&ctx->list))
-                       ezusb_ctx_complete(ctx);
-
-               ezusb_request_context_put(ctx);
-               spin_lock_irqsave(&upriv->req_lock, flags);
-       }
-       spin_unlock_irqrestore(&upriv->req_lock, flags);
-
-       list_for_each_safe(item, tmp_item, &upriv->req_pending)
-           ezusb_ctx_complete(list_entry(item,
-                                         struct request_context, list));
-
-       if (upriv->read_urb && upriv->read_urb->status == -EINPROGRESS)
-               printk(KERN_ERR PFX "Some URB in progress\n");
-
-       mutex_unlock(&upriv->mtx);
-
-       if (upriv->read_urb) {
-               kfree(upriv->read_urb->transfer_buffer);
-               usb_free_urb(upriv->read_urb);
-       }
-       kfree(upriv->bap_buf);
-       if (upriv->dev) {
-               struct orinoco_private *priv = ndev_priv(upriv->dev);
-               orinoco_if_del(priv);
-               free_orinocodev(priv);
-       }
-}
-
-static void ezusb_lock_irqsave(spinlock_t *lock,
-                              unsigned long *flags) __acquires(lock)
-{
-       spin_lock_bh(lock);
-}
-
-static void ezusb_unlock_irqrestore(spinlock_t *lock,
-                                   unsigned long *flags) __releases(lock)
-{
-       spin_unlock_bh(lock);
-}
-
-static void ezusb_lock_irq(spinlock_t *lock) __acquires(lock)
-{
-       spin_lock_bh(lock);
-}
-
-static void ezusb_unlock_irq(spinlock_t *lock) __releases(lock)
-{
-       spin_unlock_bh(lock);
-}
-
-static const struct hermes_ops ezusb_ops = {
-       .init = ezusb_init,
-       .cmd_wait = ezusb_docmd_wait,
-       .init_cmd_wait = ezusb_doicmd_wait,
-       .allocate = ezusb_allocate,
-       .read_ltv = ezusb_read_ltv,
-       .write_ltv = ezusb_write_ltv,
-       .bap_pread = ezusb_bap_pread,
-       .read_pda = ezusb_read_pda,
-       .program_init = ezusb_program_init,
-       .program_end = ezusb_program_end,
-       .program = ezusb_program,
-       .lock_irqsave = ezusb_lock_irqsave,
-       .unlock_irqrestore = ezusb_unlock_irqrestore,
-       .lock_irq = ezusb_lock_irq,
-       .unlock_irq = ezusb_unlock_irq,
-};
-
-static const struct net_device_ops ezusb_netdev_ops = {
-       .ndo_open               = orinoco_open,
-       .ndo_stop               = orinoco_stop,
-       .ndo_start_xmit         = ezusb_xmit,
-       .ndo_set_multicast_list = orinoco_set_multicast_list,
-       .ndo_change_mtu         = orinoco_change_mtu,
-       .ndo_set_mac_address    = eth_mac_addr,
-       .ndo_validate_addr      = eth_validate_addr,
-       .ndo_tx_timeout         = orinoco_tx_timeout,
-       .ndo_get_stats          = orinoco_get_stats,
-};
-
-static int ezusb_probe(struct usb_interface *interface,
-                      const struct usb_device_id *id)
-{
-       struct usb_device *udev = interface_to_usbdev(interface);
-       struct orinoco_private *priv;
-       hermes_t *hw;
-       struct ezusb_priv *upriv = NULL;
-       struct usb_interface_descriptor *iface_desc;
-       struct usb_endpoint_descriptor *ep;
-       const struct firmware *fw_entry;
-       int retval = 0;
-       int i;
-
-       priv = alloc_orinocodev(sizeof(*upriv), &udev->dev,
-                               ezusb_hard_reset, NULL);
-       if (!priv) {
-               err("Couldn't allocate orinocodev");
-               goto exit;
-       }
-
-       hw = &priv->hw;
-
-       upriv = priv->card;
-
-       mutex_init(&upriv->mtx);
-       spin_lock_init(&upriv->reply_count_lock);
-
-       spin_lock_init(&upriv->req_lock);
-       INIT_LIST_HEAD(&upriv->req_pending);
-       INIT_LIST_HEAD(&upriv->req_active);
-
-       upriv->udev = udev;
-
-       hw->iobase = (void __force __iomem *) &upriv->hermes_reg_fake;
-       hw->reg_spacing = HERMES_16BIT_REGSPACING;
-       hw->priv = upriv;
-       hw->ops = &ezusb_ops;
-
-       /* set up the endpoint information */
-       /* check out the endpoints */
-
-       iface_desc = &interface->altsetting[0].desc;
-       for (i = 0; i < iface_desc->bNumEndpoints; ++i) {
-               ep = &interface->altsetting[0].endpoint[i].desc;
-
-               if (((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK)
-                    == USB_DIR_IN) &&
-                   ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
-                    == USB_ENDPOINT_XFER_BULK)) {
-                       /* we found a bulk in endpoint */
-                       if (upriv->read_urb != NULL) {
-                               pr_warning("Found a second bulk in ep, ignored");
-                               continue;
-                       }
-
-                       upriv->read_urb = usb_alloc_urb(0, GFP_KERNEL);
-                       if (!upriv->read_urb) {
-                               err("No free urbs available");
-                               goto error;
-                       }
-                       if (le16_to_cpu(ep->wMaxPacketSize) != 64)
-                               pr_warning("bulk in: wMaxPacketSize!= 64");
-                       if (ep->bEndpointAddress != (2 | USB_DIR_IN))
-                               pr_warning("bulk in: bEndpointAddress: %d",
-                                    ep->bEndpointAddress);
-                       upriv->read_pipe = usb_rcvbulkpipe(udev,
-                                                        ep->
-                                                        bEndpointAddress);
-                       upriv->read_urb->transfer_buffer =
-                           kmalloc(BULK_BUF_SIZE, GFP_KERNEL);
-                       if (!upriv->read_urb->transfer_buffer) {
-                               err("Couldn't allocate IN buffer");
-                               goto error;
-                       }
-               }
-
-               if (((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK)
-                    == USB_DIR_OUT) &&
-                   ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
-                    == USB_ENDPOINT_XFER_BULK)) {
-                       /* we found a bulk out endpoint */
-                       if (upriv->bap_buf != NULL) {
-                               pr_warning("Found a second bulk out ep, ignored");
-                               continue;
-                       }
-
-                       if (le16_to_cpu(ep->wMaxPacketSize) != 64)
-                               pr_warning("bulk out: wMaxPacketSize != 64");
-                       if (ep->bEndpointAddress != 2)
-                               pr_warning("bulk out: bEndpointAddress: %d",
-                                    ep->bEndpointAddress);
-                       upriv->write_pipe = usb_sndbulkpipe(udev,
-                                                         ep->
-                                                         bEndpointAddress);
-                       upriv->bap_buf = kmalloc(BULK_BUF_SIZE, GFP_KERNEL);
-                       if (!upriv->bap_buf) {
-                               err("Couldn't allocate bulk_out_buffer");
-                               goto error;
-                       }
-               }
-       }
-       if (!upriv->bap_buf || !upriv->read_urb) {
-               err("Didn't find the required bulk endpoints");
-               goto error;
-       }
-
-       if (request_firmware(&fw_entry, "orinoco_ezusb_fw",
-                            &interface->dev) == 0) {
-               firmware.size = fw_entry->size;
-               firmware.code = fw_entry->data;
-       }
-       if (firmware.size && firmware.code) {
-               ezusb_firmware_download(upriv, &firmware);
-       } else {
-               err("No firmware to download");
-               goto error;
-       }
-
-       if (ezusb_hard_reset(priv) < 0) {
-               err("Cannot reset the device");
-               goto error;
-       }
-
-       /* If the firmware is already downloaded orinoco.c will call
-        * ezusb_init but if the firmware is not already there, that will make
-        * the kernel very unstable, so we try initializing here and quit in
-        * case of error */
-       if (ezusb_init(hw) < 0) {
-               err("Couldn't initialize the device");
-               err("Firmware may not be downloaded or may be wrong.");
-               goto error;
-       }
-
-       /* Initialise the main driver */
-       if (orinoco_init(priv) != 0) {
-               err("orinoco_init() failed\n");
-               goto error;
-       }
-
-       if (orinoco_if_add(priv, 0, 0, &ezusb_netdev_ops) != 0) {
-               upriv->dev = NULL;
-               err("%s: orinoco_if_add() failed", __func__);
-               goto error;
-       }
-       upriv->dev = priv->ndev;
-
-       goto exit;
-
- error:
-       ezusb_delete(upriv);
-       if (upriv->dev) {
-               /* upriv->dev was 0, so ezusb_delete() didn't free it */
-               free_orinocodev(priv);
-       }
-       upriv = NULL;
-       retval = -EFAULT;
- exit:
-       if (fw_entry) {
-               firmware.code = NULL;
-               firmware.size = 0;
-               release_firmware(fw_entry);
-       }
-       usb_set_intfdata(interface, upriv);
-       return retval;
-}
-
-
-static void ezusb_disconnect(struct usb_interface *intf)
-{
-       struct ezusb_priv *upriv = usb_get_intfdata(intf);
-       usb_set_intfdata(intf, NULL);
-       ezusb_delete(upriv);
-       printk(KERN_INFO PFX "Disconnected\n");
-}
-
-
-/* usb specific object needed to register this driver with the usb subsystem */
-static struct usb_driver orinoco_driver = {
-       .name = DRIVER_NAME,
-       .probe = ezusb_probe,
-       .disconnect = ezusb_disconnect,
-       .id_table = ezusb_table,
-};
-
-/* Can't be declared "const" or the whole __initdata section will
- * become const */
-static char version[] __initdata = DRIVER_NAME " " DRIVER_VERSION
-    " (Manuel Estrada Sainz)";
-
-static int __init ezusb_module_init(void)
-{
-       int err;
-
-       printk(KERN_DEBUG "%s\n", version);
-
-       /* register this driver with the USB subsystem */
-       err = usb_register(&orinoco_driver);
-       if (err < 0) {
-               printk(KERN_ERR PFX "usb_register failed, error %d\n",
-                      err);
-               return err;
-       }
-
-       return 0;
-}
-
-static void __exit ezusb_module_exit(void)
-{
-       /* deregister this driver with the USB subsystem */
-       usb_deregister(&orinoco_driver);
-}
-
-
-module_init(ezusb_module_init);
-module_exit(ezusb_module_exit);
-
-MODULE_AUTHOR("Manuel Estrada Sainz");
-MODULE_DESCRIPTION
-    ("Driver for Orinoco wireless LAN cards using EZUSB bridge");
-MODULE_LICENSE("Dual MPL/GPL");
diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
deleted file mode 100644 (file)
index 616b71a..0000000
+++ /dev/null
@@ -1,2033 +0,0 @@
-/*
-       Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com>
-       Copyright (C) 2009 Alban Browaeys <prahal@yahoo.com>
-       Copyright (C) 2009 Felix Fietkau <nbd@openwrt.org>
-       Copyright (C) 2009 Luis Correia <luis.f.correia@gmail.com>
-       Copyright (C) 2009 Mattias Nissler <mattias.nissler@gmx.de>
-       Copyright (C) 2009 Mark Asselstine <asselsm@gmail.com>
-       Copyright (C) 2009 Xose Vazquez Perez <xose.vazquez@gmail.com>
-       Copyright (C) 2009 Bart Zolnierkiewicz <bzolnier@gmail.com>
-       <http://rt2x00.serialmonkey.com>
-
-       This program is free software; you can redistribute it and/or modify
-       it under the terms of the GNU General Public License as published by
-       the Free Software Foundation; either version 2 of the License, or
-       (at your option) any later version.
-
-       This program is distributed in the hope that it will be useful,
-       but WITHOUT ANY WARRANTY; without even the implied warranty of
-       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-       GNU General Public License for more details.
-
-       You should have received a copy of the GNU General Public License
-       along with this program; if not, write to the
-       Free Software Foundation, Inc.,
-       59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-/*
-       Module: rt2800
-       Abstract: Data structures and registers for the rt2800 modules.
-       Supported chipsets: RT2800E, RT2800ED & RT2800U.
- */
-
-#ifndef RT2800_H
-#define RT2800_H
-
-/*
- * RF chip defines.
- *
- * RF2820 2.4G 2T3R
- * RF2850 2.4G/5G 2T3R
- * RF2720 2.4G 1T2R
- * RF2750 2.4G/5G 1T2R
- * RF3020 2.4G 1T1R
- * RF2020 2.4G B/G
- * RF3021 2.4G 1T2R
- * RF3022 2.4G 2T2R
- * RF3052 2.4G 2T2R
- */
-#define RF2820                         0x0001
-#define RF2850                         0x0002
-#define RF2720                         0x0003
-#define RF2750                         0x0004
-#define RF3020                         0x0005
-#define RF2020                         0x0006
-#define RF3021                         0x0007
-#define RF3022                         0x0008
-#define RF3052                         0x0009
-#define RF3320                         0x000b
-
-/*
- * Chipset revisions.
- */
-#define REV_RT2860C                    0x0100
-#define REV_RT2860D                    0x0101
-#define REV_RT2872E                    0x0200
-#define REV_RT3070E                    0x0200
-#define REV_RT3070F                    0x0201
-#define REV_RT3071E                    0x0211
-#define REV_RT3090E                    0x0211
-#define REV_RT3390E                    0x0211
-
-/*
- * Signal information.
- * Default offset is required for RSSI <-> dBm conversion.
- */
-#define DEFAULT_RSSI_OFFSET            120
-
-/*
- * Register layout information.
- */
-#define CSR_REG_BASE                   0x1000
-#define CSR_REG_SIZE                   0x0800
-#define EEPROM_BASE                    0x0000
-#define EEPROM_SIZE                    0x0110
-#define BBP_BASE                       0x0000
-#define BBP_SIZE                       0x0080
-#define RF_BASE                                0x0004
-#define RF_SIZE                                0x0010
-
-/*
- * Number of TX queues.
- */
-#define NUM_TX_QUEUES                  4
-
-/*
- * Registers.
- */
-
-/*
- * E2PROM_CSR: PCI EEPROM control register.
- * RELOAD: Write 1 to reload eeprom content.
- * TYPE: 0: 93c46, 1:93c66.
- * LOAD_STATUS: 1:loading, 0:done.
- */
-#define E2PROM_CSR                     0x0004
-#define E2PROM_CSR_DATA_CLOCK          FIELD32(0x00000001)
-#define E2PROM_CSR_CHIP_SELECT         FIELD32(0x00000002)
-#define E2PROM_CSR_DATA_IN             FIELD32(0x00000004)
-#define E2PROM_CSR_DATA_OUT            FIELD32(0x00000008)
-#define E2PROM_CSR_TYPE                        FIELD32(0x00000030)
-#define E2PROM_CSR_LOAD_STATUS         FIELD32(0x00000040)
-#define E2PROM_CSR_RELOAD              FIELD32(0x00000080)
-
-/*
- * OPT_14: Unknown register used by rt3xxx devices.
- */
-#define OPT_14_CSR                     0x0114
-#define OPT_14_CSR_BIT0                        FIELD32(0x00000001)
-
-/*
- * INT_SOURCE_CSR: Interrupt source register.
- * Write one to clear corresponding bit.
- * TX_FIFO_STATUS: FIFO Statistics is full, sw should read TX_STA_FIFO
- */
-#define INT_SOURCE_CSR                 0x0200
-#define INT_SOURCE_CSR_RXDELAYINT      FIELD32(0x00000001)
-#define INT_SOURCE_CSR_TXDELAYINT      FIELD32(0x00000002)
-#define INT_SOURCE_CSR_RX_DONE         FIELD32(0x00000004)
-#define INT_SOURCE_CSR_AC0_DMA_DONE    FIELD32(0x00000008)
-#define INT_SOURCE_CSR_AC1_DMA_DONE    FIELD32(0x00000010)
-#define INT_SOURCE_CSR_AC2_DMA_DONE    FIELD32(0x00000020)
-#define INT_SOURCE_CSR_AC3_DMA_DONE    FIELD32(0x00000040)
-#define INT_SOURCE_CSR_HCCA_DMA_DONE   FIELD32(0x00000080)
-#define INT_SOURCE_CSR_MGMT_DMA_DONE   FIELD32(0x00000100)
-#define INT_SOURCE_CSR_MCU_COMMAND     FIELD32(0x00000200)
-#define INT_SOURCE_CSR_RXTX_COHERENT   FIELD32(0x00000400)
-#define INT_SOURCE_CSR_TBTT            FIELD32(0x00000800)
-#define INT_SOURCE_CSR_PRE_TBTT                FIELD32(0x00001000)
-#define INT_SOURCE_CSR_TX_FIFO_STATUS  FIELD32(0x00002000)
-#define INT_SOURCE_CSR_AUTO_WAKEUP     FIELD32(0x00004000)
-#define INT_SOURCE_CSR_GPTIMER         FIELD32(0x00008000)
-#define INT_SOURCE_CSR_RX_COHERENT     FIELD32(0x00010000)
-#define INT_SOURCE_CSR_TX_COHERENT     FIELD32(0x00020000)
-
-/*
- * INT_MASK_CSR: Interrupt MASK register. 1: the interrupt is mask OFF.
- */
-#define INT_MASK_CSR                   0x0204
-#define INT_MASK_CSR_RXDELAYINT                FIELD32(0x00000001)
-#define INT_MASK_CSR_TXDELAYINT                FIELD32(0x00000002)
-#define INT_MASK_CSR_RX_DONE           FIELD32(0x00000004)
-#define INT_MASK_CSR_AC0_DMA_DONE      FIELD32(0x00000008)
-#define INT_MASK_CSR_AC1_DMA_DONE      FIELD32(0x00000010)
-#define INT_MASK_CSR_AC2_DMA_DONE      FIELD32(0x00000020)
-#define INT_MASK_CSR_AC3_DMA_DONE      FIELD32(0x00000040)
-#define INT_MASK_CSR_HCCA_DMA_DONE     FIELD32(0x00000080)
-#define INT_MASK_CSR_MGMT_DMA_DONE     FIELD32(0x00000100)
-#define INT_MASK_CSR_MCU_COMMAND       FIELD32(0x00000200)
-#define INT_MASK_CSR_RXTX_COHERENT     FIELD32(0x00000400)
-#define INT_MASK_CSR_TBTT              FIELD32(0x00000800)
-#define INT_MASK_CSR_PRE_TBTT          FIELD32(0x00001000)
-#define INT_MASK_CSR_TX_FIFO_STATUS    FIELD32(0x00002000)
-#define INT_MASK_CSR_AUTO_WAKEUP       FIELD32(0x00004000)
-#define INT_MASK_CSR_GPTIMER           FIELD32(0x00008000)
-#define INT_MASK_CSR_RX_COHERENT       FIELD32(0x00010000)
-#define INT_MASK_CSR_TX_COHERENT       FIELD32(0x00020000)
-
-/*
- * WPDMA_GLO_CFG
- */
-#define WPDMA_GLO_CFG                  0x0208
-#define WPDMA_GLO_CFG_ENABLE_TX_DMA    FIELD32(0x00000001)
-#define WPDMA_GLO_CFG_TX_DMA_BUSY      FIELD32(0x00000002)
-#define WPDMA_GLO_CFG_ENABLE_RX_DMA    FIELD32(0x00000004)
-#define WPDMA_GLO_CFG_RX_DMA_BUSY      FIELD32(0x00000008)
-#define WPDMA_GLO_CFG_WP_DMA_BURST_SIZE        FIELD32(0x00000030)
-#define WPDMA_GLO_CFG_TX_WRITEBACK_DONE        FIELD32(0x00000040)
-#define WPDMA_GLO_CFG_BIG_ENDIAN       FIELD32(0x00000080)
-#define WPDMA_GLO_CFG_RX_HDR_SCATTER   FIELD32(0x0000ff00)
-#define WPDMA_GLO_CFG_HDR_SEG_LEN      FIELD32(0xffff0000)
-
-/*
- * WPDMA_RST_IDX
- */
-#define WPDMA_RST_IDX                  0x020c
-#define WPDMA_RST_IDX_DTX_IDX0         FIELD32(0x00000001)
-#define WPDMA_RST_IDX_DTX_IDX1         FIELD32(0x00000002)
-#define WPDMA_RST_IDX_DTX_IDX2         FIELD32(0x00000004)
-#define WPDMA_RST_IDX_DTX_IDX3         FIELD32(0x00000008)
-#define WPDMA_RST_IDX_DTX_IDX4         FIELD32(0x00000010)
-#define WPDMA_RST_IDX_DTX_IDX5         FIELD32(0x00000020)
-#define WPDMA_RST_IDX_DRX_IDX0         FIELD32(0x00010000)
-
-/*
- * DELAY_INT_CFG
- */
-#define DELAY_INT_CFG                  0x0210
-#define DELAY_INT_CFG_RXMAX_PTIME      FIELD32(0x000000ff)
-#define DELAY_INT_CFG_RXMAX_PINT       FIELD32(0x00007f00)
-#define DELAY_INT_CFG_RXDLY_INT_EN     FIELD32(0x00008000)
-#define DELAY_INT_CFG_TXMAX_PTIME      FIELD32(0x00ff0000)
-#define DELAY_INT_CFG_TXMAX_PINT       FIELD32(0x7f000000)
-#define DELAY_INT_CFG_TXDLY_INT_EN     FIELD32(0x80000000)
-
-/*
- * WMM_AIFSN_CFG: Aifsn for each EDCA AC
- * AIFSN0: AC_BE
- * AIFSN1: AC_BK
- * AIFSN2: AC_VI
- * AIFSN3: AC_VO
- */
-#define WMM_AIFSN_CFG                  0x0214
-#define WMM_AIFSN_CFG_AIFSN0           FIELD32(0x0000000f)
-#define WMM_AIFSN_CFG_AIFSN1           FIELD32(0x000000f0)
-#define WMM_AIFSN_CFG_AIFSN2           FIELD32(0x00000f00)
-#define WMM_AIFSN_CFG_AIFSN3           FIELD32(0x0000f000)
-
-/*
- * WMM_CWMIN_CSR: CWmin for each EDCA AC
- * CWMIN0: AC_BE
- * CWMIN1: AC_BK
- * CWMIN2: AC_VI
- * CWMIN3: AC_VO
- */
-#define WMM_CWMIN_CFG                  0x0218
-#define WMM_CWMIN_CFG_CWMIN0           FIELD32(0x0000000f)
-#define WMM_CWMIN_CFG_CWMIN1           FIELD32(0x000000f0)
-#define WMM_CWMIN_CFG_CWMIN2           FIELD32(0x00000f00)
-#define WMM_CWMIN_CFG_CWMIN3           FIELD32(0x0000f000)
-
-/*
- * WMM_CWMAX_CSR: CWmax for each EDCA AC
- * CWMAX0: AC_BE
- * CWMAX1: AC_BK
- * CWMAX2: AC_VI
- * CWMAX3: AC_VO
- */
-#define WMM_CWMAX_CFG                  0x021c
-#define WMM_CWMAX_CFG_CWMAX0           FIELD32(0x0000000f)
-#define WMM_CWMAX_CFG_CWMAX1           FIELD32(0x000000f0)
-#define WMM_CWMAX_CFG_CWMAX2           FIELD32(0x00000f00)
-#define WMM_CWMAX_CFG_CWMAX3           FIELD32(0x0000f000)
-
-/*
- * AC_TXOP0: AC_BK/AC_BE TXOP register
- * AC0TXOP: AC_BK in unit of 32us
- * AC1TXOP: AC_BE in unit of 32us
- */
-#define WMM_TXOP0_CFG                  0x0220
-#define WMM_TXOP0_CFG_AC0TXOP          FIELD32(0x0000ffff)
-#define WMM_TXOP0_CFG_AC1TXOP          FIELD32(0xffff0000)
-
-/*
- * AC_TXOP1: AC_VO/AC_VI TXOP register
- * AC2TXOP: AC_VI in unit of 32us
- * AC3TXOP: AC_VO in unit of 32us
- */
-#define WMM_TXOP1_CFG                  0x0224
-#define WMM_TXOP1_CFG_AC2TXOP          FIELD32(0x0000ffff)
-#define WMM_TXOP1_CFG_AC3TXOP          FIELD32(0xffff0000)
-
-/*
- * GPIO_CTRL_CFG:
- */
-#define GPIO_CTRL_CFG                  0x0228
-#define GPIO_CTRL_CFG_BIT0             FIELD32(0x00000001)
-#define GPIO_CTRL_CFG_BIT1             FIELD32(0x00000002)
-#define GPIO_CTRL_CFG_BIT2             FIELD32(0x00000004)
-#define GPIO_CTRL_CFG_BIT3             FIELD32(0x00000008)
-#define GPIO_CTRL_CFG_BIT4             FIELD32(0x00000010)
-#define GPIO_CTRL_CFG_BIT5             FIELD32(0x00000020)
-#define GPIO_CTRL_CFG_BIT6             FIELD32(0x00000040)
-#define GPIO_CTRL_CFG_BIT7             FIELD32(0x00000080)
-#define GPIO_CTRL_CFG_BIT8             FIELD32(0x00000100)
-
-/*
- * MCU_CMD_CFG
- */
-#define MCU_CMD_CFG                    0x022c
-
-/*
- * AC_BK register offsets
- */
-#define TX_BASE_PTR0                   0x0230
-#define TX_MAX_CNT0                    0x0234
-#define TX_CTX_IDX0                    0x0238
-#define TX_DTX_IDX0                    0x023c
-
-/*
- * AC_BE register offsets
- */
-#define TX_BASE_PTR1                   0x0240
-#define TX_MAX_CNT1                    0x0244
-#define TX_CTX_IDX1                    0x0248
-#define TX_DTX_IDX1                    0x024c
-
-/*
- * AC_VI register offsets
- */
-#define TX_BASE_PTR2                   0x0250
-#define TX_MAX_CNT2                    0x0254
-#define TX_CTX_IDX2                    0x0258
-#define TX_DTX_IDX2                    0x025c
-
-/*
- * AC_VO register offsets
- */
-#define TX_BASE_PTR3                   0x0260
-#define TX_MAX_CNT3                    0x0264
-#define TX_CTX_IDX3                    0x0268
-#define TX_DTX_IDX3                    0x026c
-
-/*
- * HCCA register offsets
- */
-#define TX_BASE_PTR4                   0x0270
-#define TX_MAX_CNT4                    0x0274
-#define TX_CTX_IDX4                    0x0278
-#define TX_DTX_IDX4                    0x027c
-
-/*
- * MGMT register offsets
- */
-#define TX_BASE_PTR5                   0x0280
-#define TX_MAX_CNT5                    0x0284
-#define TX_CTX_IDX5                    0x0288
-#define TX_DTX_IDX5                    0x028c
-
-/*
- * RX register offsets
- */
-#define RX_BASE_PTR                    0x0290
-#define RX_MAX_CNT                     0x0294
-#define RX_CRX_IDX                     0x0298
-#define RX_DRX_IDX                     0x029c
-
-/*
- * USB_DMA_CFG
- * RX_BULK_AGG_TIMEOUT: Rx Bulk Aggregation TimeOut in unit of 33ns.
- * RX_BULK_AGG_LIMIT: Rx Bulk Aggregation Limit in unit of 256 bytes.
- * PHY_CLEAR: phy watch dog enable.
- * TX_CLEAR: Clear USB DMA TX path.
- * TXOP_HALT: Halt TXOP count down when TX buffer is full.
- * RX_BULK_AGG_EN: Enable Rx Bulk Aggregation.
- * RX_BULK_EN: Enable USB DMA Rx.
- * TX_BULK_EN: Enable USB DMA Tx.
- * EP_OUT_VALID: OUT endpoint data valid.
- * RX_BUSY: USB DMA RX FSM busy.
- * TX_BUSY: USB DMA TX FSM busy.
- */
-#define USB_DMA_CFG                    0x02a0
-#define USB_DMA_CFG_RX_BULK_AGG_TIMEOUT        FIELD32(0x000000ff)
-#define USB_DMA_CFG_RX_BULK_AGG_LIMIT  FIELD32(0x0000ff00)
-#define USB_DMA_CFG_PHY_CLEAR          FIELD32(0x00010000)
-#define USB_DMA_CFG_TX_CLEAR           FIELD32(0x00080000)
-#define USB_DMA_CFG_TXOP_HALT          FIELD32(0x00100000)
-#define USB_DMA_CFG_RX_BULK_AGG_EN     FIELD32(0x00200000)
-#define USB_DMA_CFG_RX_BULK_EN         FIELD32(0x00400000)
-#define USB_DMA_CFG_TX_BULK_EN         FIELD32(0x00800000)
-#define USB_DMA_CFG_EP_OUT_VALID       FIELD32(0x3f000000)
-#define USB_DMA_CFG_RX_BUSY            FIELD32(0x40000000)
-#define USB_DMA_CFG_TX_BUSY            FIELD32(0x80000000)
-
-/*
- * US_CYC_CNT
- */
-#define US_CYC_CNT                     0x02a4
-#define US_CYC_CNT_CLOCK_CYCLE         FIELD32(0x000000ff)
-
-/*
- * PBF_SYS_CTRL
- * HOST_RAM_WRITE: enable Host program ram write selection
- */
-#define PBF_SYS_CTRL                   0x0400
-#define PBF_SYS_CTRL_READY             FIELD32(0x00000080)
-#define PBF_SYS_CTRL_HOST_RAM_WRITE    FIELD32(0x00010000)
-
-/*
- * HOST-MCU shared memory
- */
-#define HOST_CMD_CSR                   0x0404
-#define HOST_CMD_CSR_HOST_COMMAND      FIELD32(0x000000ff)
-
-/*
- * PBF registers
- * Most are for debug. Driver doesn't touch PBF register.
- */
-#define PBF_CFG                                0x0408
-#define PBF_MAX_PCNT                   0x040c
-#define PBF_CTRL                       0x0410
-#define PBF_INT_STA                    0x0414
-#define PBF_INT_ENA                    0x0418
-
-/*
- * BCN_OFFSET0:
- */
-#define BCN_OFFSET0                    0x042c
-#define BCN_OFFSET0_BCN0               FIELD32(0x000000ff)
-#define BCN_OFFSET0_BCN1               FIELD32(0x0000ff00)
-#define BCN_OFFSET0_BCN2               FIELD32(0x00ff0000)
-#define BCN_OFFSET0_BCN3               FIELD32(0xff000000)
-
-/*
- * BCN_OFFSET1:
- */
-#define BCN_OFFSET1                    0x0430
-#define BCN_OFFSET1_BCN4               FIELD32(0x000000ff)
-#define BCN_OFFSET1_BCN5               FIELD32(0x0000ff00)
-#define BCN_OFFSET1_BCN6               FIELD32(0x00ff0000)
-#define BCN_OFFSET1_BCN7               FIELD32(0xff000000)
-
-/*
- * PBF registers
- * Most are for debug. Driver doesn't touch PBF register.
- */
-#define TXRXQ_PCNT                     0x0438
-#define PBF_DBG                                0x043c
-
-/*
- * RF registers
- */
-#define        RF_CSR_CFG                      0x0500
-#define RF_CSR_CFG_DATA                        FIELD32(0x000000ff)
-#define RF_CSR_CFG_REGNUM              FIELD32(0x00001f00)
-#define RF_CSR_CFG_WRITE               FIELD32(0x00010000)
-#define RF_CSR_CFG_BUSY                        FIELD32(0x00020000)
-
-/*
- * EFUSE_CSR: RT30x0 EEPROM
- */
-#define EFUSE_CTRL                     0x0580
-#define EFUSE_CTRL_ADDRESS_IN          FIELD32(0x03fe0000)
-#define EFUSE_CTRL_MODE                        FIELD32(0x000000c0)
-#define EFUSE_CTRL_KICK                        FIELD32(0x40000000)
-#define EFUSE_CTRL_PRESENT             FIELD32(0x80000000)
-
-/*
- * EFUSE_DATA0
- */
-#define EFUSE_DATA0                    0x0590
-
-/*
- * EFUSE_DATA1
- */
-#define EFUSE_DATA1                    0x0594
-
-/*
- * EFUSE_DATA2
- */
-#define EFUSE_DATA2                    0x0598
-
-/*
- * EFUSE_DATA3
- */
-#define EFUSE_DATA3                    0x059c
-
-/*
- * LDO_CFG0
- */
-#define LDO_CFG0                       0x05d4
-#define LDO_CFG0_DELAY3                        FIELD32(0x000000ff)
-#define LDO_CFG0_DELAY2                        FIELD32(0x0000ff00)
-#define LDO_CFG0_DELAY1                        FIELD32(0x00ff0000)
-#define LDO_CFG0_BGSEL                 FIELD32(0x03000000)
-#define LDO_CFG0_LDO_CORE_VLEVEL       FIELD32(0x1c000000)
-#define LD0_CFG0_LDO25_LEVEL           FIELD32(0x60000000)
-#define LDO_CFG0_LDO25_LARGEA          FIELD32(0x80000000)
-
-/*
- * GPIO_SWITCH
- */
-#define GPIO_SWITCH                    0x05dc
-#define GPIO_SWITCH_0                  FIELD32(0x00000001)
-#define GPIO_SWITCH_1                  FIELD32(0x00000002)
-#define GPIO_SWITCH_2                  FIELD32(0x00000004)
-#define GPIO_SWITCH_3                  FIELD32(0x00000008)
-#define GPIO_SWITCH_4                  FIELD32(0x00000010)
-#define GPIO_SWITCH_5                  FIELD32(0x00000020)
-#define GPIO_SWITCH_6                  FIELD32(0x00000040)
-#define GPIO_SWITCH_7                  FIELD32(0x00000080)
-
-/*
- * MAC Control/Status Registers(CSR).
- * Some values are set in TU, whereas 1 TU == 1024 us.
- */
-
-/*
- * MAC_CSR0: ASIC revision number.
- * ASIC_REV: 0
- * ASIC_VER: 2860 or 2870
- */
-#define MAC_CSR0                       0x1000
-#define MAC_CSR0_REVISION              FIELD32(0x0000ffff)
-#define MAC_CSR0_CHIPSET               FIELD32(0xffff0000)
-
-/*
- * MAC_SYS_CTRL:
- */
-#define MAC_SYS_CTRL                   0x1004
-#define MAC_SYS_CTRL_RESET_CSR         FIELD32(0x00000001)
-#define MAC_SYS_CTRL_RESET_BBP         FIELD32(0x00000002)
-#define MAC_SYS_CTRL_ENABLE_TX         FIELD32(0x00000004)
-#define MAC_SYS_CTRL_ENABLE_RX         FIELD32(0x00000008)
-#define MAC_SYS_CTRL_CONTINUOUS_TX     FIELD32(0x00000010)
-#define MAC_SYS_CTRL_LOOPBACK          FIELD32(0x00000020)
-#define MAC_SYS_CTRL_WLAN_HALT         FIELD32(0x00000040)
-#define MAC_SYS_CTRL_RX_TIMESTAMP      FIELD32(0x00000080)
-
-/*
- * MAC_ADDR_DW0: STA MAC register 0
- */
-#define MAC_ADDR_DW0                   0x1008
-#define MAC_ADDR_DW0_BYTE0             FIELD32(0x000000ff)
-#define MAC_ADDR_DW0_BYTE1             FIELD32(0x0000ff00)
-#define MAC_ADDR_DW0_BYTE2             FIELD32(0x00ff0000)
-#define MAC_ADDR_DW0_BYTE3             FIELD32(0xff000000)
-
-/*
- * MAC_ADDR_DW1: STA MAC register 1
- * UNICAST_TO_ME_MASK:
- * Used to mask off bits from byte 5 of the MAC address
- * to determine the UNICAST_TO_ME bit for RX frames.
- * The full mask is complemented by BSS_ID_MASK:
- *    MASK = BSS_ID_MASK & UNICAST_TO_ME_MASK
- */
-#define MAC_ADDR_DW1                   0x100c
-#define MAC_ADDR_DW1_BYTE4             FIELD32(0x000000ff)
-#define MAC_ADDR_DW1_BYTE5             FIELD32(0x0000ff00)
-#define MAC_ADDR_DW1_UNICAST_TO_ME_MASK        FIELD32(0x00ff0000)
-
-/*
- * MAC_BSSID_DW0: BSSID register 0
- */
-#define MAC_BSSID_DW0                  0x1010
-#define MAC_BSSID_DW0_BYTE0            FIELD32(0x000000ff)
-#define MAC_BSSID_DW0_BYTE1            FIELD32(0x0000ff00)
-#define MAC_BSSID_DW0_BYTE2            FIELD32(0x00ff0000)
-#define MAC_BSSID_DW0_BYTE3            FIELD32(0xff000000)
-
-/*
- * MAC_BSSID_DW1: BSSID register 1
- * BSS_ID_MASK:
- *     0: 1-BSSID mode (BSS index = 0)
- *     1: 2-BSSID mode (BSS index: Byte5, bit 0)
- *     2: 4-BSSID mode (BSS index: byte5, bit 0 - 1)
- *     3: 8-BSSID mode (BSS index: byte5, bit 0 - 2)
- * This mask is used to mask off bits 0, 1 and 2 of byte 5 of the
- * BSSID. This will make sure that those bits will be ignored
- * when determining the MY_BSS of RX frames.
- */
-#define MAC_BSSID_DW1                  0x1014
-#define MAC_BSSID_DW1_BYTE4            FIELD32(0x000000ff)
-#define MAC_BSSID_DW1_BYTE5            FIELD32(0x0000ff00)
-#define MAC_BSSID_DW1_BSS_ID_MASK      FIELD32(0x00030000)
-#define MAC_BSSID_DW1_BSS_BCN_NUM      FIELD32(0x001c0000)
-
-/*
- * MAX_LEN_CFG: Maximum frame length register.
- * MAX_MPDU: rt2860b max 16k bytes
- * MAX_PSDU: Maximum PSDU length
- *     (power factor) 0:2^13, 1:2^14, 2:2^15, 3:2^16
- */
-#define MAX_LEN_CFG                    0x1018
-#define MAX_LEN_CFG_MAX_MPDU           FIELD32(0x00000fff)
-#define MAX_LEN_CFG_MAX_PSDU           FIELD32(0x00003000)
-#define MAX_LEN_CFG_MIN_PSDU           FIELD32(0x0000c000)
-#define MAX_LEN_CFG_MIN_MPDU           FIELD32(0x000f0000)
-
-/*
- * BBP_CSR_CFG: BBP serial control register
- * VALUE: Register value to program into BBP
- * REG_NUM: Selected BBP register
- * READ_CONTROL: 0 write BBP, 1 read BBP
- * BUSY: ASIC is busy executing BBP commands
- * BBP_PAR_DUR: 0 4 MAC clocks, 1 8 MAC clocks
- * BBP_RW_MODE: 0 serial, 1 paralell
- */
-#define BBP_CSR_CFG                    0x101c
-#define BBP_CSR_CFG_VALUE              FIELD32(0x000000ff)
-#define BBP_CSR_CFG_REGNUM             FIELD32(0x0000ff00)
-#define BBP_CSR_CFG_READ_CONTROL       FIELD32(0x00010000)
-#define BBP_CSR_CFG_BUSY               FIELD32(0x00020000)
-#define BBP_CSR_CFG_BBP_PAR_DUR                FIELD32(0x00040000)
-#define BBP_CSR_CFG_BBP_RW_MODE                FIELD32(0x00080000)
-
-/*
- * RF_CSR_CFG0: RF control register
- * REGID_AND_VALUE: Register value to program into RF
- * BITWIDTH: Selected RF register
- * STANDBYMODE: 0 high when standby, 1 low when standby
- * SEL: 0 RF_LE0 activate, 1 RF_LE1 activate
- * BUSY: ASIC is busy executing RF commands
- */
-#define RF_CSR_CFG0                    0x1020
-#define RF_CSR_CFG0_REGID_AND_VALUE    FIELD32(0x00ffffff)
-#define RF_CSR_CFG0_BITWIDTH           FIELD32(0x1f000000)
-#define RF_CSR_CFG0_REG_VALUE_BW       FIELD32(0x1fffffff)
-#define RF_CSR_CFG0_STANDBYMODE                FIELD32(0x20000000)
-#define RF_CSR_CFG0_SEL                        FIELD32(0x40000000)
-#define RF_CSR_CFG0_BUSY               FIELD32(0x80000000)
-
-/*
- * RF_CSR_CFG1: RF control register
- * REGID_AND_VALUE: Register value to program into RF
- * RFGAP: Gap between BB_CONTROL_RF and RF_LE
- *        0: 3 system clock cycle (37.5usec)
- *        1: 5 system clock cycle (62.5usec)
- */
-#define RF_CSR_CFG1                    0x1024
-#define RF_CSR_CFG1_REGID_AND_VALUE    FIELD32(0x00ffffff)
-#define RF_CSR_CFG1_RFGAP              FIELD32(0x1f000000)
-
-/*
- * RF_CSR_CFG2: RF control register
- * VALUE: Register value to program into RF
- */
-#define RF_CSR_CFG2                    0x1028
-#define RF_CSR_CFG2_VALUE              FIELD32(0x00ffffff)
-
-/*
- * LED_CFG: LED control
- * color LED's:
- *   0: off
- *   1: blinking upon TX2
- *   2: periodic slow blinking
- *   3: always on
- * LED polarity:
- *   0: active low
- *   1: active high
- */
-#define LED_CFG                                0x102c
-#define LED_CFG_ON_PERIOD              FIELD32(0x000000ff)
-#define LED_CFG_OFF_PERIOD             FIELD32(0x0000ff00)
-#define LED_CFG_SLOW_BLINK_PERIOD      FIELD32(0x003f0000)
-#define LED_CFG_R_LED_MODE             FIELD32(0x03000000)
-#define LED_CFG_G_LED_MODE             FIELD32(0x0c000000)
-#define LED_CFG_Y_LED_MODE             FIELD32(0x30000000)
-#define LED_CFG_LED_POLAR              FIELD32(0x40000000)
-
-/*
- * XIFS_TIME_CFG: MAC timing
- * CCKM_SIFS_TIME: unit 1us. Applied after CCK RX/TX
- * OFDM_SIFS_TIME: unit 1us. Applied after OFDM RX/TX
- * OFDM_XIFS_TIME: unit 1us. Applied after OFDM RX
- *     when MAC doesn't reference BBP signal BBRXEND
- * EIFS: unit 1us
- * BB_RXEND_ENABLE: reference RXEND signal to begin XIFS defer
- *
- */
-#define XIFS_TIME_CFG                  0x1100
-#define XIFS_TIME_CFG_CCKM_SIFS_TIME   FIELD32(0x000000ff)
-#define XIFS_TIME_CFG_OFDM_SIFS_TIME   FIELD32(0x0000ff00)
-#define XIFS_TIME_CFG_OFDM_XIFS_TIME   FIELD32(0x000f0000)
-#define XIFS_TIME_CFG_EIFS             FIELD32(0x1ff00000)
-#define XIFS_TIME_CFG_BB_RXEND_ENABLE  FIELD32(0x20000000)
-
-/*
- * BKOFF_SLOT_CFG:
- */
-#define BKOFF_SLOT_CFG                 0x1104
-#define BKOFF_SLOT_CFG_SLOT_TIME       FIELD32(0x000000ff)
-#define BKOFF_SLOT_CFG_CC_DELAY_TIME   FIELD32(0x0000ff00)
-
-/*
- * NAV_TIME_CFG:
- */
-#define NAV_TIME_CFG                   0x1108
-#define NAV_TIME_CFG_SIFS              FIELD32(0x000000ff)
-#define NAV_TIME_CFG_SLOT_TIME         FIELD32(0x0000ff00)
-#define NAV_TIME_CFG_EIFS              FIELD32(0x01ff0000)
-#define NAV_TIME_ZERO_SIFS             FIELD32(0x02000000)
-
-/*
- * CH_TIME_CFG: count as channel busy
- */
-#define CH_TIME_CFG                    0x110c
-
-/*
- * PBF_LIFE_TIMER: TX/RX MPDU timestamp timer (free run) Unit: 1us
- */
-#define PBF_LIFE_TIMER                 0x1110
-
-/*
- * BCN_TIME_CFG:
- * BEACON_INTERVAL: in unit of 1/16 TU
- * TSF_TICKING: Enable TSF auto counting
- * TSF_SYNC: Enable TSF sync, 00: disable, 01: infra mode, 10: ad-hoc mode
- * BEACON_GEN: Enable beacon generator
- */
-#define BCN_TIME_CFG                   0x1114
-#define BCN_TIME_CFG_BEACON_INTERVAL   FIELD32(0x0000ffff)
-#define BCN_TIME_CFG_TSF_TICKING       FIELD32(0x00010000)
-#define BCN_TIME_CFG_TSF_SYNC          FIELD32(0x00060000)
-#define BCN_TIME_CFG_TBTT_ENABLE       FIELD32(0x00080000)
-#define BCN_TIME_CFG_BEACON_GEN                FIELD32(0x00100000)
-#define BCN_TIME_CFG_TX_TIME_COMPENSATE        FIELD32(0xf0000000)
-
-/*
- * TBTT_SYNC_CFG:
- */
-#define TBTT_SYNC_CFG                  0x1118
-
-/*
- * TSF_TIMER_DW0: Local lsb TSF timer, read-only
- */
-#define TSF_TIMER_DW0                  0x111c
-#define TSF_TIMER_DW0_LOW_WORD         FIELD32(0xffffffff)
-
-/*
- * TSF_TIMER_DW1: Local msb TSF timer, read-only
- */
-#define TSF_TIMER_DW1                  0x1120
-#define TSF_TIMER_DW1_HIGH_WORD                FIELD32(0xffffffff)
-
-/*
- * TBTT_TIMER: TImer remains till next TBTT, read-only
- */
-#define TBTT_TIMER                     0x1124
-
-/*
- * INT_TIMER_CFG: timer configuration
- * PRE_TBTT_TIMER: leadtime to tbtt for pretbtt interrupt in units of 1/16 TU
- * GP_TIMER: period of general purpose timer in units of 1/16 TU
- */
-#define INT_TIMER_CFG                  0x1128
-#define INT_TIMER_CFG_PRE_TBTT_TIMER   FIELD32(0x0000ffff)
-#define INT_TIMER_CFG_GP_TIMER         FIELD32(0xffff0000)
-
-/*
- * INT_TIMER_EN: GP-timer and pre-tbtt Int enable
- */
-#define INT_TIMER_EN                   0x112c
-#define INT_TIMER_EN_PRE_TBTT_TIMER    FIELD32(0x00000001)
-#define INT_TIMER_EN_GP_TIMER          FIELD32(0x00000002)
-
-/*
- * CH_IDLE_STA: channel idle time
- */
-#define CH_IDLE_STA                    0x1130
-
-/*
- * CH_BUSY_STA: channel busy time
- */
-#define CH_BUSY_STA                    0x1134
-
-/*
- * MAC_STATUS_CFG:
- * BBP_RF_BUSY: When set to 0, BBP and RF are stable.
- *     if 1 or higher one of the 2 registers is busy.
- */
-#define MAC_STATUS_CFG                 0x1200
-#define MAC_STATUS_CFG_BBP_RF_BUSY     FIELD32(0x00000003)
-
-/*
- * PWR_PIN_CFG:
- */
-#define PWR_PIN_CFG                    0x1204
-
-/*
- * AUTOWAKEUP_CFG: Manual power control / status register
- * TBCN_BEFORE_WAKE: ForceWake has high privilege than PutToSleep when both set
- * AUTOWAKE: 0:sleep, 1:awake
- */
-#define AUTOWAKEUP_CFG                 0x1208
-#define AUTOWAKEUP_CFG_AUTO_LEAD_TIME  FIELD32(0x000000ff)
-#define AUTOWAKEUP_CFG_TBCN_BEFORE_WAKE        FIELD32(0x00007f00)
-#define AUTOWAKEUP_CFG_AUTOWAKE                FIELD32(0x00008000)
-
-/*
- * EDCA_AC0_CFG:
- */
-#define EDCA_AC0_CFG                   0x1300
-#define EDCA_AC0_CFG_TX_OP             FIELD32(0x000000ff)
-#define EDCA_AC0_CFG_AIFSN             FIELD32(0x00000f00)
-#define EDCA_AC0_CFG_CWMIN             FIELD32(0x0000f000)
-#define EDCA_AC0_CFG_CWMAX             FIELD32(0x000f0000)
-
-/*
- * EDCA_AC1_CFG:
- */
-#define EDCA_AC1_CFG                   0x1304
-#define EDCA_AC1_CFG_TX_OP             FIELD32(0x000000ff)
-#define EDCA_AC1_CFG_AIFSN             FIELD32(0x00000f00)
-#define EDCA_AC1_CFG_CWMIN             FIELD32(0x0000f000)
-#define EDCA_AC1_CFG_CWMAX             FIELD32(0x000f0000)
-
-/*
- * EDCA_AC2_CFG:
- */
-#define EDCA_AC2_CFG                   0x1308
-#define EDCA_AC2_CFG_TX_OP             FIELD32(0x000000ff)
-#define EDCA_AC2_CFG_AIFSN             FIELD32(0x00000f00)
-#define EDCA_AC2_CFG_CWMIN             FIELD32(0x0000f000)
-#define EDCA_AC2_CFG_CWMAX             FIELD32(0x000f0000)
-
-/*
- * EDCA_AC3_CFG:
- */
-#define EDCA_AC3_CFG                   0x130c
-#define EDCA_AC3_CFG_TX_OP             FIELD32(0x000000ff)
-#define EDCA_AC3_CFG_AIFSN             FIELD32(0x00000f00)
-#define EDCA_AC3_CFG_CWMIN             FIELD32(0x0000f000)
-#define EDCA_AC3_CFG_CWMAX             FIELD32(0x000f0000)
-
-/*
- * EDCA_TID_AC_MAP:
- */
-#define EDCA_TID_AC_MAP                        0x1310
-
-/*
- * TX_PWR_CFG:
- */
-#define TX_PWR_CFG_RATE0               FIELD32(0x0000000f)
-#define TX_PWR_CFG_RATE1               FIELD32(0x000000f0)
-#define TX_PWR_CFG_RATE2               FIELD32(0x00000f00)
-#define TX_PWR_CFG_RATE3               FIELD32(0x0000f000)
-#define TX_PWR_CFG_RATE4               FIELD32(0x000f0000)
-#define TX_PWR_CFG_RATE5               FIELD32(0x00f00000)
-#define TX_PWR_CFG_RATE6               FIELD32(0x0f000000)
-#define TX_PWR_CFG_RATE7               FIELD32(0xf0000000)
-
-/*
- * TX_PWR_CFG_0:
- */
-#define TX_PWR_CFG_0                   0x1314
-#define TX_PWR_CFG_0_1MBS              FIELD32(0x0000000f)
-#define TX_PWR_CFG_0_2MBS              FIELD32(0x000000f0)
-#define TX_PWR_CFG_0_55MBS             FIELD32(0x00000f00)
-#define TX_PWR_CFG_0_11MBS             FIELD32(0x0000f000)
-#define TX_PWR_CFG_0_6MBS              FIELD32(0x000f0000)
-#define TX_PWR_CFG_0_9MBS              FIELD32(0x00f00000)
-#define TX_PWR_CFG_0_12MBS             FIELD32(0x0f000000)
-#define TX_PWR_CFG_0_18MBS             FIELD32(0xf0000000)
-
-/*
- * TX_PWR_CFG_1:
- */
-#define TX_PWR_CFG_1                   0x1318
-#define TX_PWR_CFG_1_24MBS             FIELD32(0x0000000f)
-#define TX_PWR_CFG_1_36MBS             FIELD32(0x000000f0)
-#define TX_PWR_CFG_1_48MBS             FIELD32(0x00000f00)
-#define TX_PWR_CFG_1_54MBS             FIELD32(0x0000f000)
-#define TX_PWR_CFG_1_MCS0              FIELD32(0x000f0000)
-#define TX_PWR_CFG_1_MCS1              FIELD32(0x00f00000)
-#define TX_PWR_CFG_1_MCS2              FIELD32(0x0f000000)
-#define TX_PWR_CFG_1_MCS3              FIELD32(0xf0000000)
-
-/*
- * TX_PWR_CFG_2:
- */
-#define TX_PWR_CFG_2                   0x131c
-#define TX_PWR_CFG_2_MCS4              FIELD32(0x0000000f)
-#define TX_PWR_CFG_2_MCS5              FIELD32(0x000000f0)
-#define TX_PWR_CFG_2_MCS6              FIELD32(0x00000f00)
-#define TX_PWR_CFG_2_MCS7              FIELD32(0x0000f000)
-#define TX_PWR_CFG_2_MCS8              FIELD32(0x000f0000)
-#define TX_PWR_CFG_2_MCS9              FIELD32(0x00f00000)
-#define TX_PWR_CFG_2_MCS10             FIELD32(0x0f000000)
-#define TX_PWR_CFG_2_MCS11             FIELD32(0xf0000000)
-
-/*
- * TX_PWR_CFG_3:
- */
-#define TX_PWR_CFG_3                   0x1320
-#define TX_PWR_CFG_3_MCS12             FIELD32(0x0000000f)
-#define TX_PWR_CFG_3_MCS13             FIELD32(0x000000f0)
-#define TX_PWR_CFG_3_MCS14             FIELD32(0x00000f00)
-#define TX_PWR_CFG_3_MCS15             FIELD32(0x0000f000)
-#define TX_PWR_CFG_3_UKNOWN1           FIELD32(0x000f0000)
-#define TX_PWR_CFG_3_UKNOWN2           FIELD32(0x00f00000)
-#define TX_PWR_CFG_3_UKNOWN3           FIELD32(0x0f000000)
-#define TX_PWR_CFG_3_UKNOWN4           FIELD32(0xf0000000)
-
-/*
- * TX_PWR_CFG_4:
- */
-#define TX_PWR_CFG_4                   0x1324
-#define TX_PWR_CFG_4_UKNOWN5           FIELD32(0x0000000f)
-#define TX_PWR_CFG_4_UKNOWN6           FIELD32(0x000000f0)
-#define TX_PWR_CFG_4_UKNOWN7           FIELD32(0x00000f00)
-#define TX_PWR_CFG_4_UKNOWN8           FIELD32(0x0000f000)
-
-/*
- * TX_PIN_CFG:
- */
-#define TX_PIN_CFG                     0x1328
-#define TX_PIN_CFG_PA_PE_A0_EN         FIELD32(0x00000001)
-#define TX_PIN_CFG_PA_PE_G0_EN         FIELD32(0x00000002)
-#define TX_PIN_CFG_PA_PE_A1_EN         FIELD32(0x00000004)
-#define TX_PIN_CFG_PA_PE_G1_EN         FIELD32(0x00000008)
-#define TX_PIN_CFG_PA_PE_A0_POL                FIELD32(0x00000010)
-#define TX_PIN_CFG_PA_PE_G0_POL                FIELD32(0x00000020)
-#define TX_PIN_CFG_PA_PE_A1_POL                FIELD32(0x00000040)
-#define TX_PIN_CFG_PA_PE_G1_POL                FIELD32(0x00000080)
-#define TX_PIN_CFG_LNA_PE_A0_EN                FIELD32(0x00000100)
-#define TX_PIN_CFG_LNA_PE_G0_EN                FIELD32(0x00000200)
-#define TX_PIN_CFG_LNA_PE_A1_EN                FIELD32(0x00000400)
-#define TX_PIN_CFG_LNA_PE_G1_EN                FIELD32(0x00000800)
-#define TX_PIN_CFG_LNA_PE_A0_POL       FIELD32(0x00001000)
-#define TX_PIN_CFG_LNA_PE_G0_POL       FIELD32(0x00002000)
-#define TX_PIN_CFG_LNA_PE_A1_POL       FIELD32(0x00004000)
-#define TX_PIN_CFG_LNA_PE_G1_POL       FIELD32(0x00008000)
-#define TX_PIN_CFG_RFTR_EN             FIELD32(0x00010000)
-#define TX_PIN_CFG_RFTR_POL            FIELD32(0x00020000)
-#define TX_PIN_CFG_TRSW_EN             FIELD32(0x00040000)
-#define TX_PIN_CFG_TRSW_POL            FIELD32(0x00080000)
-
-/*
- * TX_BAND_CFG: 0x1 use upper 20MHz, 0x0 use lower 20MHz
- */
-#define TX_BAND_CFG                    0x132c
-#define TX_BAND_CFG_HT40_MINUS         FIELD32(0x00000001)
-#define TX_BAND_CFG_A                  FIELD32(0x00000002)
-#define TX_BAND_CFG_BG                 FIELD32(0x00000004)
-
-/*
- * TX_SW_CFG0:
- */
-#define TX_SW_CFG0                     0x1330
-
-/*
- * TX_SW_CFG1:
- */
-#define TX_SW_CFG1                     0x1334
-
-/*
- * TX_SW_CFG2:
- */
-#define TX_SW_CFG2                     0x1338
-
-/*
- * TXOP_THRES_CFG:
- */
-#define TXOP_THRES_CFG                 0x133c
-
-/*
- * TXOP_CTRL_CFG:
- */
-#define TXOP_CTRL_CFG                  0x1340
-
-/*
- * TX_RTS_CFG:
- * RTS_THRES: unit:byte
- * RTS_FBK_EN: enable rts rate fallback
- */
-#define TX_RTS_CFG                     0x1344
-#define TX_RTS_CFG_AUTO_RTS_RETRY_LIMIT        FIELD32(0x000000ff)
-#define TX_RTS_CFG_RTS_THRES           FIELD32(0x00ffff00)
-#define TX_RTS_CFG_RTS_FBK_EN          FIELD32(0x01000000)
-
-/*
- * TX_TIMEOUT_CFG:
- * MPDU_LIFETIME: expiration time = 2^(9+MPDU LIFE TIME) us
- * RX_ACK_TIMEOUT: unit:slot. Used for TX procedure
- * TX_OP_TIMEOUT: TXOP timeout value for TXOP truncation.
- *                it is recommended that:
- *                (SLOT_TIME) > (TX_OP_TIMEOUT) > (RX_ACK_TIMEOUT)
- */
-#define TX_TIMEOUT_CFG                 0x1348
-#define TX_TIMEOUT_CFG_MPDU_LIFETIME   FIELD32(0x000000f0)
-#define TX_TIMEOUT_CFG_RX_ACK_TIMEOUT  FIELD32(0x0000ff00)
-#define TX_TIMEOUT_CFG_TX_OP_TIMEOUT   FIELD32(0x00ff0000)
-
-/*
- * TX_RTY_CFG:
- * SHORT_RTY_LIMIT: short retry limit
- * LONG_RTY_LIMIT: long retry limit
- * LONG_RTY_THRE: Long retry threshoold
- * NON_AGG_RTY_MODE: Non-Aggregate MPDU retry mode
- *                   0:expired by retry limit, 1: expired by mpdu life timer
- * AGG_RTY_MODE: Aggregate MPDU retry mode
- *               0:expired by retry limit, 1: expired by mpdu life timer
- * TX_AUTO_FB_ENABLE: Tx retry PHY rate auto fallback enable
- */
-#define TX_RTY_CFG                     0x134c
-#define TX_RTY_CFG_SHORT_RTY_LIMIT     FIELD32(0x000000ff)
-#define TX_RTY_CFG_LONG_RTY_LIMIT      FIELD32(0x0000ff00)
-#define TX_RTY_CFG_LONG_RTY_THRE       FIELD32(0x0fff0000)
-#define TX_RTY_CFG_NON_AGG_RTY_MODE    FIELD32(0x10000000)
-#define TX_RTY_CFG_AGG_RTY_MODE                FIELD32(0x20000000)
-#define TX_RTY_CFG_TX_AUTO_FB_ENABLE   FIELD32(0x40000000)
-
-/*
- * TX_LINK_CFG:
- * REMOTE_MFB_LIFETIME: remote MFB life time. unit: 32us
- * MFB_ENABLE: TX apply remote MFB 1:enable
- * REMOTE_UMFS_ENABLE: remote unsolicit  MFB enable
- *                     0: not apply remote remote unsolicit (MFS=7)
- * TX_MRQ_EN: MCS request TX enable
- * TX_RDG_EN: RDG TX enable
- * TX_CF_ACK_EN: Piggyback CF-ACK enable
- * REMOTE_MFB: remote MCS feedback
- * REMOTE_MFS: remote MCS feedback sequence number
- */
-#define TX_LINK_CFG                    0x1350
-#define TX_LINK_CFG_REMOTE_MFB_LIFETIME        FIELD32(0x000000ff)
-#define TX_LINK_CFG_MFB_ENABLE         FIELD32(0x00000100)
-#define TX_LINK_CFG_REMOTE_UMFS_ENABLE FIELD32(0x00000200)
-#define TX_LINK_CFG_TX_MRQ_EN          FIELD32(0x00000400)
-#define TX_LINK_CFG_TX_RDG_EN          FIELD32(0x00000800)
-#define TX_LINK_CFG_TX_CF_ACK_EN       FIELD32(0x00001000)
-#define TX_LINK_CFG_REMOTE_MFB         FIELD32(0x00ff0000)
-#define TX_LINK_CFG_REMOTE_MFS         FIELD32(0xff000000)
-
-/*
- * HT_FBK_CFG0:
- */
-#define HT_FBK_CFG0                    0x1354
-#define HT_FBK_CFG0_HTMCS0FBK          FIELD32(0x0000000f)
-#define HT_FBK_CFG0_HTMCS1FBK          FIELD32(0x000000f0)
-#define HT_FBK_CFG0_HTMCS2FBK          FIELD32(0x00000f00)
-#define HT_FBK_CFG0_HTMCS3FBK          FIELD32(0x0000f000)
-#define HT_FBK_CFG0_HTMCS4FBK          FIELD32(0x000f0000)
-#define HT_FBK_CFG0_HTMCS5FBK          FIELD32(0x00f00000)
-#define HT_FBK_CFG0_HTMCS6FBK          FIELD32(0x0f000000)
-#define HT_FBK_CFG0_HTMCS7FBK          FIELD32(0xf0000000)
-
-/*
- * HT_FBK_CFG1:
- */
-#define HT_FBK_CFG1                    0x1358
-#define HT_FBK_CFG1_HTMCS8FBK          FIELD32(0x0000000f)
-#define HT_FBK_CFG1_HTMCS9FBK          FIELD32(0x000000f0)
-#define HT_FBK_CFG1_HTMCS10FBK         FIELD32(0x00000f00)
-#define HT_FBK_CFG1_HTMCS11FBK         FIELD32(0x0000f000)
-#define HT_FBK_CFG1_HTMCS12FBK         FIELD32(0x000f0000)
-#define HT_FBK_CFG1_HTMCS13FBK         FIELD32(0x00f00000)
-#define HT_FBK_CFG1_HTMCS14FBK         FIELD32(0x0f000000)
-#define HT_FBK_CFG1_HTMCS15FBK         FIELD32(0xf0000000)
-
-/*
- * LG_FBK_CFG0:
- */
-#define LG_FBK_CFG0                    0x135c
-#define LG_FBK_CFG0_OFDMMCS0FBK                FIELD32(0x0000000f)
-#define LG_FBK_CFG0_OFDMMCS1FBK                FIELD32(0x000000f0)
-#define LG_FBK_CFG0_OFDMMCS2FBK                FIELD32(0x00000f00)
-#define LG_FBK_CFG0_OFDMMCS3FBK                FIELD32(0x0000f000)
-#define LG_FBK_CFG0_OFDMMCS4FBK                FIELD32(0x000f0000)
-#define LG_FBK_CFG0_OFDMMCS5FBK                FIELD32(0x00f00000)
-#define LG_FBK_CFG0_OFDMMCS6FBK                FIELD32(0x0f000000)
-#define LG_FBK_CFG0_OFDMMCS7FBK                FIELD32(0xf0000000)
-
-/*
- * LG_FBK_CFG1:
- */
-#define LG_FBK_CFG1                    0x1360
-#define LG_FBK_CFG0_CCKMCS0FBK         FIELD32(0x0000000f)
-#define LG_FBK_CFG0_CCKMCS1FBK         FIELD32(0x000000f0)
-#define LG_FBK_CFG0_CCKMCS2FBK         FIELD32(0x00000f00)
-#define LG_FBK_CFG0_CCKMCS3FBK         FIELD32(0x0000f000)
-
-/*
- * CCK_PROT_CFG: CCK Protection
- * PROTECT_RATE: Protection control frame rate for CCK TX(RTS/CTS/CFEnd)
- * PROTECT_CTRL: Protection control frame type for CCK TX
- *               0:none, 1:RTS/CTS, 2:CTS-to-self
- * PROTECT_NAV: TXOP protection type for CCK TX
- *              0:none, 1:ShortNAVprotect, 2:LongNAVProtect
- * TX_OP_ALLOW_CCK: CCK TXOP allowance, 0:disallow
- * TX_OP_ALLOW_OFDM: CCK TXOP allowance, 0:disallow
- * TX_OP_ALLOW_MM20: CCK TXOP allowance, 0:disallow
- * TX_OP_ALLOW_MM40: CCK TXOP allowance, 0:disallow
- * TX_OP_ALLOW_GF20: CCK TXOP allowance, 0:disallow
- * TX_OP_ALLOW_GF40: CCK TXOP allowance, 0:disallow
- * RTS_TH_EN: RTS threshold enable on CCK TX
- */
-#define CCK_PROT_CFG                   0x1364
-#define CCK_PROT_CFG_PROTECT_RATE      FIELD32(0x0000ffff)
-#define CCK_PROT_CFG_PROTECT_CTRL      FIELD32(0x00030000)
-#define CCK_PROT_CFG_PROTECT_NAV       FIELD32(0x000c0000)
-#define CCK_PROT_CFG_TX_OP_ALLOW_CCK   FIELD32(0x00100000)
-#define CCK_PROT_CFG_TX_OP_ALLOW_OFDM  FIELD32(0x00200000)
-#define CCK_PROT_CFG_TX_OP_ALLOW_MM20  FIELD32(0x00400000)
-#define CCK_PROT_CFG_TX_OP_ALLOW_MM40  FIELD32(0x00800000)
-#define CCK_PROT_CFG_TX_OP_ALLOW_GF20  FIELD32(0x01000000)
-#define CCK_PROT_CFG_TX_OP_ALLOW_GF40  FIELD32(0x02000000)
-#define CCK_PROT_CFG_RTS_TH_EN         FIELD32(0x04000000)
-
-/*
- * OFDM_PROT_CFG: OFDM Protection
- */
-#define OFDM_PROT_CFG                  0x1368
-#define OFDM_PROT_CFG_PROTECT_RATE     FIELD32(0x0000ffff)
-#define OFDM_PROT_CFG_PROTECT_CTRL     FIELD32(0x00030000)
-#define OFDM_PROT_CFG_PROTECT_NAV      FIELD32(0x000c0000)
-#define OFDM_PROT_CFG_TX_OP_ALLOW_CCK  FIELD32(0x00100000)
-#define OFDM_PROT_CFG_TX_OP_ALLOW_OFDM FIELD32(0x00200000)
-#define OFDM_PROT_CFG_TX_OP_ALLOW_MM20 FIELD32(0x00400000)
-#define OFDM_PROT_CFG_TX_OP_ALLOW_MM40 FIELD32(0x00800000)
-#define OFDM_PROT_CFG_TX_OP_ALLOW_GF20 FIELD32(0x01000000)
-#define OFDM_PROT_CFG_TX_OP_ALLOW_GF40 FIELD32(0x02000000)
-#define OFDM_PROT_CFG_RTS_TH_EN                FIELD32(0x04000000)
-
-/*
- * MM20_PROT_CFG: MM20 Protection
- */
-#define MM20_PROT_CFG                  0x136c
-#define MM20_PROT_CFG_PROTECT_RATE     FIELD32(0x0000ffff)
-#define MM20_PROT_CFG_PROTECT_CTRL     FIELD32(0x00030000)
-#define MM20_PROT_CFG_PROTECT_NAV      FIELD32(0x000c0000)
-#define MM20_PROT_CFG_TX_OP_ALLOW_CCK  FIELD32(0x00100000)
-#define MM20_PROT_CFG_TX_OP_ALLOW_OFDM FIELD32(0x00200000)
-#define MM20_PROT_CFG_TX_OP_ALLOW_MM20 FIELD32(0x00400000)
-#define MM20_PROT_CFG_TX_OP_ALLOW_MM40 FIELD32(0x00800000)
-#define MM20_PROT_CFG_TX_OP_ALLOW_GF20 FIELD32(0x01000000)
-#define MM20_PROT_CFG_TX_OP_ALLOW_GF40 FIELD32(0x02000000)
-#define MM20_PROT_CFG_RTS_TH_EN                FIELD32(0x04000000)
-
-/*
- * MM40_PROT_CFG: MM40 Protection
- */
-#define MM40_PROT_CFG                  0x1370
-#define MM40_PROT_CFG_PROTECT_RATE     FIELD32(0x0000ffff)
-#define MM40_PROT_CFG_PROTECT_CTRL     FIELD32(0x00030000)
-#define MM40_PROT_CFG_PROTECT_NAV      FIELD32(0x000c0000)
-#define MM40_PROT_CFG_TX_OP_ALLOW_CCK  FIELD32(0x00100000)
-#define MM40_PROT_CFG_TX_OP_ALLOW_OFDM FIELD32(0x00200000)
-#define MM40_PROT_CFG_TX_OP_ALLOW_MM20 FIELD32(0x00400000)
-#define MM40_PROT_CFG_TX_OP_ALLOW_MM40 FIELD32(0x00800000)
-#define MM40_PROT_CFG_TX_OP_ALLOW_GF20 FIELD32(0x01000000)
-#define MM40_PROT_CFG_TX_OP_ALLOW_GF40 FIELD32(0x02000000)
-#define MM40_PROT_CFG_RTS_TH_EN                FIELD32(0x04000000)
-
-/*
- * GF20_PROT_CFG: GF20 Protection
- */
-#define GF20_PROT_CFG                  0x1374
-#define GF20_PROT_CFG_PROTECT_RATE     FIELD32(0x0000ffff)
-#define GF20_PROT_CFG_PROTECT_CTRL     FIELD32(0x00030000)
-#define GF20_PROT_CFG_PROTECT_NAV      FIELD32(0x000c0000)
-#define GF20_PROT_CFG_TX_OP_ALLOW_CCK  FIELD32(0x00100000)
-#define GF20_PROT_CFG_TX_OP_ALLOW_OFDM FIELD32(0x00200000)
-#define GF20_PROT_CFG_TX_OP_ALLOW_MM20 FIELD32(0x00400000)
-#define GF20_PROT_CFG_TX_OP_ALLOW_MM40 FIELD32(0x00800000)
-#define GF20_PROT_CFG_TX_OP_ALLOW_GF20 FIELD32(0x01000000)
-#define GF20_PROT_CFG_TX_OP_ALLOW_GF40 FIELD32(0x02000000)
-#define GF20_PROT_CFG_RTS_TH_EN                FIELD32(0x04000000)
-
-/*
- * GF40_PROT_CFG: GF40 Protection
- */
-#define GF40_PROT_CFG                  0x1378
-#define GF40_PROT_CFG_PROTECT_RATE     FIELD32(0x0000ffff)
-#define GF40_PROT_CFG_PROTECT_CTRL     FIELD32(0x00030000)
-#define GF40_PROT_CFG_PROTECT_NAV      FIELD32(0x000c0000)
-#define GF40_PROT_CFG_TX_OP_ALLOW_CCK  FIELD32(0x00100000)
-#define GF40_PROT_CFG_TX_OP_ALLOW_OFDM FIELD32(0x00200000)
-#define GF40_PROT_CFG_TX_OP_ALLOW_MM20 FIELD32(0x00400000)
-#define GF40_PROT_CFG_TX_OP_ALLOW_MM40 FIELD32(0x00800000)
-#define GF40_PROT_CFG_TX_OP_ALLOW_GF20 FIELD32(0x01000000)
-#define GF40_PROT_CFG_TX_OP_ALLOW_GF40 FIELD32(0x02000000)
-#define GF40_PROT_CFG_RTS_TH_EN                FIELD32(0x04000000)
-
-/*
- * EXP_CTS_TIME:
- */
-#define EXP_CTS_TIME                   0x137c
-
-/*
- * EXP_ACK_TIME:
- */
-#define EXP_ACK_TIME                   0x1380
-
-/*
- * RX_FILTER_CFG: RX configuration register.
- */
-#define RX_FILTER_CFG                  0x1400
-#define RX_FILTER_CFG_DROP_CRC_ERROR   FIELD32(0x00000001)
-#define RX_FILTER_CFG_DROP_PHY_ERROR   FIELD32(0x00000002)
-#define RX_FILTER_CFG_DROP_NOT_TO_ME   FIELD32(0x00000004)
-#define RX_FILTER_CFG_DROP_NOT_MY_BSSD FIELD32(0x00000008)
-#define RX_FILTER_CFG_DROP_VER_ERROR   FIELD32(0x00000010)
-#define RX_FILTER_CFG_DROP_MULTICAST   FIELD32(0x00000020)
-#define RX_FILTER_CFG_DROP_BROADCAST   FIELD32(0x00000040)
-#define RX_FILTER_CFG_DROP_DUPLICATE   FIELD32(0x00000080)
-#define RX_FILTER_CFG_DROP_CF_END_ACK  FIELD32(0x00000100)
-#define RX_FILTER_CFG_DROP_CF_END      FIELD32(0x00000200)
-#define RX_FILTER_CFG_DROP_ACK         FIELD32(0x00000400)
-#define RX_FILTER_CFG_DROP_CTS         FIELD32(0x00000800)
-#define RX_FILTER_CFG_DROP_RTS         FIELD32(0x00001000)
-#define RX_FILTER_CFG_DROP_PSPOLL      FIELD32(0x00002000)
-#define RX_FILTER_CFG_DROP_BA          FIELD32(0x00004000)
-#define RX_FILTER_CFG_DROP_BAR         FIELD32(0x00008000)
-#define RX_FILTER_CFG_DROP_CNTL                FIELD32(0x00010000)
-
-/*
- * AUTO_RSP_CFG:
- * AUTORESPONDER: 0: disable, 1: enable
- * BAC_ACK_POLICY: 0:long, 1:short preamble
- * CTS_40_MMODE: Response CTS 40MHz duplicate mode
- * CTS_40_MREF: Response CTS 40MHz duplicate mode
- * AR_PREAMBLE: Auto responder preamble 0:long, 1:short preamble
- * DUAL_CTS_EN: Power bit value in control frame
- * ACK_CTS_PSM_BIT:Power bit value in control frame
- */
-#define AUTO_RSP_CFG                   0x1404
-#define AUTO_RSP_CFG_AUTORESPONDER     FIELD32(0x00000001)
-#define AUTO_RSP_CFG_BAC_ACK_POLICY    FIELD32(0x00000002)
-#define AUTO_RSP_CFG_CTS_40_MMODE      FIELD32(0x00000004)
-#define AUTO_RSP_CFG_CTS_40_MREF       FIELD32(0x00000008)
-#define AUTO_RSP_CFG_AR_PREAMBLE       FIELD32(0x00000010)
-#define AUTO_RSP_CFG_DUAL_CTS_EN       FIELD32(0x00000040)
-#define AUTO_RSP_CFG_ACK_CTS_PSM_BIT   FIELD32(0x00000080)
-
-/*
- * LEGACY_BASIC_RATE:
- */
-#define LEGACY_BASIC_RATE              0x1408
-
-/*
- * HT_BASIC_RATE:
- */
-#define HT_BASIC_RATE                  0x140c
-
-/*
- * HT_CTRL_CFG:
- */
-#define HT_CTRL_CFG                    0x1410
-
-/*
- * SIFS_COST_CFG:
- */
-#define SIFS_COST_CFG                  0x1414
-
-/*
- * RX_PARSER_CFG:
- * Set NAV for all received frames
- */
-#define RX_PARSER_CFG                  0x1418
-
-/*
- * TX_SEC_CNT0:
- */
-#define TX_SEC_CNT0                    0x1500
-
-/*
- * RX_SEC_CNT0:
- */
-#define RX_SEC_CNT0                    0x1504
-
-/*
- * CCMP_FC_MUTE:
- */
-#define CCMP_FC_MUTE                   0x1508
-
-/*
- * TXOP_HLDR_ADDR0:
- */
-#define TXOP_HLDR_ADDR0                        0x1600
-
-/*
- * TXOP_HLDR_ADDR1:
- */
-#define TXOP_HLDR_ADDR1                        0x1604
-
-/*
- * TXOP_HLDR_ET:
- */
-#define TXOP_HLDR_ET                   0x1608
-
-/*
- * QOS_CFPOLL_RA_DW0:
- */
-#define QOS_CFPOLL_RA_DW0              0x160c
-
-/*
- * QOS_CFPOLL_RA_DW1:
- */
-#define QOS_CFPOLL_RA_DW1              0x1610
-
-/*
- * QOS_CFPOLL_QC:
- */
-#define QOS_CFPOLL_QC                  0x1614
-
-/*
- * RX_STA_CNT0: RX PLCP error count & RX CRC error count
- */
-#define RX_STA_CNT0                    0x1700
-#define RX_STA_CNT0_CRC_ERR            FIELD32(0x0000ffff)
-#define RX_STA_CNT0_PHY_ERR            FIELD32(0xffff0000)
-
-/*
- * RX_STA_CNT1: RX False CCA count & RX LONG frame count
- */
-#define RX_STA_CNT1                    0x1704
-#define RX_STA_CNT1_FALSE_CCA          FIELD32(0x0000ffff)
-#define RX_STA_CNT1_PLCP_ERR           FIELD32(0xffff0000)
-
-/*
- * RX_STA_CNT2:
- */
-#define RX_STA_CNT2                    0x1708
-#define RX_STA_CNT2_RX_DUPLI_COUNT     FIELD32(0x0000ffff)
-#define RX_STA_CNT2_RX_FIFO_OVERFLOW   FIELD32(0xffff0000)
-
-/*
- * TX_STA_CNT0: TX Beacon count
- */
-#define TX_STA_CNT0                    0x170c
-#define TX_STA_CNT0_TX_FAIL_COUNT      FIELD32(0x0000ffff)
-#define TX_STA_CNT0_TX_BEACON_COUNT    FIELD32(0xffff0000)
-
-/*
- * TX_STA_CNT1: TX tx count
- */
-#define TX_STA_CNT1                    0x1710
-#define TX_STA_CNT1_TX_SUCCESS         FIELD32(0x0000ffff)
-#define TX_STA_CNT1_TX_RETRANSMIT      FIELD32(0xffff0000)
-
-/*
- * TX_STA_CNT2: TX tx count
- */
-#define TX_STA_CNT2                    0x1714
-#define TX_STA_CNT2_TX_ZERO_LEN_COUNT  FIELD32(0x0000ffff)
-#define TX_STA_CNT2_TX_UNDER_FLOW_COUNT        FIELD32(0xffff0000)
-
-/*
- * TX_STA_FIFO: TX Result for specific PID status fifo register
- */
-#define TX_STA_FIFO                    0x1718
-#define TX_STA_FIFO_VALID              FIELD32(0x00000001)
-#define TX_STA_FIFO_PID_TYPE           FIELD32(0x0000001e)
-#define TX_STA_FIFO_TX_SUCCESS         FIELD32(0x00000020)
-#define TX_STA_FIFO_TX_AGGRE           FIELD32(0x00000040)
-#define TX_STA_FIFO_TX_ACK_REQUIRED    FIELD32(0x00000080)
-#define TX_STA_FIFO_WCID               FIELD32(0x0000ff00)
-#define TX_STA_FIFO_SUCCESS_RATE       FIELD32(0xffff0000)
-#define TX_STA_FIFO_MCS                        FIELD32(0x007f0000)
-#define TX_STA_FIFO_PHYMODE            FIELD32(0xc0000000)
-
-/*
- * TX_AGG_CNT: Debug counter
- */
-#define TX_AGG_CNT                     0x171c
-#define TX_AGG_CNT_NON_AGG_TX_COUNT    FIELD32(0x0000ffff)
-#define TX_AGG_CNT_AGG_TX_COUNT                FIELD32(0xffff0000)
-
-/*
- * TX_AGG_CNT0:
- */
-#define TX_AGG_CNT0                    0x1720
-#define TX_AGG_CNT0_AGG_SIZE_1_COUNT   FIELD32(0x0000ffff)
-#define TX_AGG_CNT0_AGG_SIZE_2_COUNT   FIELD32(0xffff0000)
-
-/*
- * TX_AGG_CNT1:
- */
-#define TX_AGG_CNT1                    0x1724
-#define TX_AGG_CNT1_AGG_SIZE_3_COUNT   FIELD32(0x0000ffff)
-#define TX_AGG_CNT1_AGG_SIZE_4_COUNT   FIELD32(0xffff0000)
-
-/*
- * TX_AGG_CNT2:
- */
-#define TX_AGG_CNT2                    0x1728
-#define TX_AGG_CNT2_AGG_SIZE_5_COUNT   FIELD32(0x0000ffff)
-#define TX_AGG_CNT2_AGG_SIZE_6_COUNT   FIELD32(0xffff0000)
-
-/*
- * TX_AGG_CNT3:
- */
-#define TX_AGG_CNT3                    0x172c
-#define TX_AGG_CNT3_AGG_SIZE_7_COUNT   FIELD32(0x0000ffff)
-#define TX_AGG_CNT3_AGG_SIZE_8_COUNT   FIELD32(0xffff0000)
-
-/*
- * TX_AGG_CNT4:
- */
-#define TX_AGG_CNT4                    0x1730
-#define TX_AGG_CNT4_AGG_SIZE_9_COUNT   FIELD32(0x0000ffff)
-#define TX_AGG_CNT4_AGG_SIZE_10_COUNT  FIELD32(0xffff0000)
-
-/*
- * TX_AGG_CNT5:
- */
-#define TX_AGG_CNT5                    0x1734
-#define TX_AGG_CNT5_AGG_SIZE_11_COUNT  FIELD32(0x0000ffff)
-#define TX_AGG_CNT5_AGG_SIZE_12_COUNT  FIELD32(0xffff0000)
-
-/*
- * TX_AGG_CNT6:
- */
-#define TX_AGG_CNT6                    0x1738
-#define TX_AGG_CNT6_AGG_SIZE_13_COUNT  FIELD32(0x0000ffff)
-#define TX_AGG_CNT6_AGG_SIZE_14_COUNT  FIELD32(0xffff0000)
-
-/*
- * TX_AGG_CNT7:
- */
-#define TX_AGG_CNT7                    0x173c
-#define TX_AGG_CNT7_AGG_SIZE_15_COUNT  FIELD32(0x0000ffff)
-#define TX_AGG_CNT7_AGG_SIZE_16_COUNT  FIELD32(0xffff0000)
-
-/*
- * MPDU_DENSITY_CNT:
- * TX_ZERO_DEL: TX zero length delimiter count
- * RX_ZERO_DEL: RX zero length delimiter count
- */
-#define MPDU_DENSITY_CNT               0x1740
-#define MPDU_DENSITY_CNT_TX_ZERO_DEL   FIELD32(0x0000ffff)
-#define MPDU_DENSITY_CNT_RX_ZERO_DEL   FIELD32(0xffff0000)
-
-/*
- * Security key table memory.
- * MAC_WCID_BASE: 8-bytes (use only 6 bytes) * 256 entry
- * PAIRWISE_KEY_TABLE_BASE: 32-byte * 256 entry
- * MAC_IVEIV_TABLE_BASE: 8-byte * 256-entry
- * MAC_WCID_ATTRIBUTE_BASE: 4-byte * 256-entry
- * SHARED_KEY_TABLE_BASE: 32-byte * 16-entry
- * SHARED_KEY_MODE_BASE: 4-byte * 16-entry
- */
-#define MAC_WCID_BASE                  0x1800
-#define PAIRWISE_KEY_TABLE_BASE                0x4000
-#define MAC_IVEIV_TABLE_BASE           0x6000
-#define MAC_WCID_ATTRIBUTE_BASE                0x6800
-#define SHARED_KEY_TABLE_BASE          0x6c00
-#define SHARED_KEY_MODE_BASE           0x7000
-
-#define MAC_WCID_ENTRY(__idx) \
-       ( MAC_WCID_BASE + ((__idx) * sizeof(struct mac_wcid_entry)) )
-#define PAIRWISE_KEY_ENTRY(__idx) \
-       ( PAIRWISE_KEY_TABLE_BASE + ((__idx) * sizeof(struct hw_key_entry)) )
-#define MAC_IVEIV_ENTRY(__idx) \
-       ( MAC_IVEIV_TABLE_BASE + ((__idx) * sizeof(struct mac_iveiv_entry)) )
-#define MAC_WCID_ATTR_ENTRY(__idx) \
-       ( MAC_WCID_ATTRIBUTE_BASE + ((__idx) * sizeof(u32)) )
-#define SHARED_KEY_ENTRY(__idx) \
-       ( SHARED_KEY_TABLE_BASE + ((__idx) * sizeof(struct hw_key_entry)) )
-#define SHARED_KEY_MODE_ENTRY(__idx) \
-       ( SHARED_KEY_MODE_BASE + ((__idx) * sizeof(u32)) )
-
-struct mac_wcid_entry {
-       u8 mac[6];
-       u8 reserved[2];
-} __packed;
-
-struct hw_key_entry {
-       u8 key[16];
-       u8 tx_mic[8];
-       u8 rx_mic[8];
-} __packed;
-
-struct mac_iveiv_entry {
-       u8 iv[8];
-} __packed;
-
-/*
- * MAC_WCID_ATTRIBUTE:
- */
-#define MAC_WCID_ATTRIBUTE_KEYTAB      FIELD32(0x00000001)
-#define MAC_WCID_ATTRIBUTE_CIPHER      FIELD32(0x0000000e)
-#define MAC_WCID_ATTRIBUTE_BSS_IDX     FIELD32(0x00000070)
-#define MAC_WCID_ATTRIBUTE_RX_WIUDF    FIELD32(0x00000380)
-#define MAC_WCID_ATTRIBUTE_CIPHER_EXT  FIELD32(0x00000400)
-#define MAC_WCID_ATTRIBUTE_BSS_IDX_EXT FIELD32(0x00000800)
-#define MAC_WCID_ATTRIBUTE_WAPI_MCBC   FIELD32(0x00008000)
-#define MAC_WCID_ATTRIBUTE_WAPI_KEY_IDX        FIELD32(0xff000000)
-
-/*
- * SHARED_KEY_MODE:
- */
-#define SHARED_KEY_MODE_BSS0_KEY0      FIELD32(0x00000007)
-#define SHARED_KEY_MODE_BSS0_KEY1      FIELD32(0x00000070)
-#define SHARED_KEY_MODE_BSS0_KEY2      FIELD32(0x00000700)
-#define SHARED_KEY_MODE_BSS0_KEY3      FIELD32(0x00007000)
-#define SHARED_KEY_MODE_BSS1_KEY0      FIELD32(0x00070000)
-#define SHARED_KEY_MODE_BSS1_KEY1      FIELD32(0x00700000)
-#define SHARED_KEY_MODE_BSS1_KEY2      FIELD32(0x07000000)
-#define SHARED_KEY_MODE_BSS1_KEY3      FIELD32(0x70000000)
-
-/*
- * HOST-MCU communication
- */
-
-/*
- * H2M_MAILBOX_CSR: Host-to-MCU Mailbox.
- */
-#define H2M_MAILBOX_CSR                        0x7010
-#define H2M_MAILBOX_CSR_ARG0           FIELD32(0x000000ff)
-#define H2M_MAILBOX_CSR_ARG1           FIELD32(0x0000ff00)
-#define H2M_MAILBOX_CSR_CMD_TOKEN      FIELD32(0x00ff0000)
-#define H2M_MAILBOX_CSR_OWNER          FIELD32(0xff000000)
-
-/*
- * H2M_MAILBOX_CID:
- */
-#define H2M_MAILBOX_CID                        0x7014
-#define H2M_MAILBOX_CID_CMD0           FIELD32(0x000000ff)
-#define H2M_MAILBOX_CID_CMD1           FIELD32(0x0000ff00)
-#define H2M_MAILBOX_CID_CMD2           FIELD32(0x00ff0000)
-#define H2M_MAILBOX_CID_CMD3           FIELD32(0xff000000)
-
-/*
- * H2M_MAILBOX_STATUS:
- */
-#define H2M_MAILBOX_STATUS             0x701c
-
-/*
- * H2M_INT_SRC:
- */
-#define H2M_INT_SRC                    0x7024
-
-/*
- * H2M_BBP_AGENT:
- */
-#define H2M_BBP_AGENT                  0x7028
-
-/*
- * MCU_LEDCS: LED control for MCU Mailbox.
- */
-#define MCU_LEDCS_LED_MODE             FIELD8(0x1f)
-#define MCU_LEDCS_POLARITY             FIELD8(0x01)
-
-/*
- * HW_CS_CTS_BASE:
- * Carrier-sense CTS frame base address.
- * It's where mac stores carrier-sense frame for carrier-sense function.
- */
-#define HW_CS_CTS_BASE                 0x7700
-
-/*
- * HW_DFS_CTS_BASE:
- * DFS CTS frame base address. It's where mac stores CTS frame for DFS.
- */
-#define HW_DFS_CTS_BASE                        0x7780
-
-/*
- * TXRX control registers - base address 0x3000
- */
-
-/*
- * TXRX_CSR1:
- * rt2860b  UNKNOWN reg use R/O Reg Addr 0x77d0 first..
- */
-#define TXRX_CSR1                      0x77d0
-
-/*
- * HW_DEBUG_SETTING_BASE:
- * since NULL frame won't be that long (256 byte)
- * We steal 16 tail bytes to save debugging settings
- */
-#define HW_DEBUG_SETTING_BASE          0x77f0
-#define HW_DEBUG_SETTING_BASE2         0x7770
-
-/*
- * HW_BEACON_BASE
- * In order to support maximum 8 MBSS and its maximum length
- * is 512 bytes for each beacon
- * Three section discontinue memory segments will be used.
- * 1. The original region for BCN 0~3
- * 2. Extract memory from FCE table for BCN 4~5
- * 3. Extract memory from Pair-wise key table for BCN 6~7
- *    It occupied those memory of wcid 238~253 for BCN 6
- *    and wcid 222~237 for BCN 7
- *
- * IMPORTANT NOTE: Not sure why legacy driver does this,
- * but HW_BEACON_BASE7 is 0x0200 bytes below HW_BEACON_BASE6.
- */
-#define HW_BEACON_BASE0                        0x7800
-#define HW_BEACON_BASE1                        0x7a00
-#define HW_BEACON_BASE2                        0x7c00
-#define HW_BEACON_BASE3                        0x7e00
-#define HW_BEACON_BASE4                        0x7200
-#define HW_BEACON_BASE5                        0x7400
-#define HW_BEACON_BASE6                        0x5dc0
-#define HW_BEACON_BASE7                        0x5bc0
-
-#define HW_BEACON_OFFSET(__index) \
-       ( ((__index) < 4) ? ( HW_BEACON_BASE0 + (__index * 0x0200) ) : \
-         (((__index) < 6) ? ( HW_BEACON_BASE4 + ((__index - 4) * 0x0200) ) : \
-         (HW_BEACON_BASE6 - ((__index - 6) * 0x0200))) )
-
-/*
- * BBP registers.
- * The wordsize of the BBP is 8 bits.
- */
-
-/*
- * BBP 1: TX Antenna & Power
- * POWER: 0 - normal, 1 - drop tx power by 6dBm, 2 - drop tx power by 12dBm,
- *     3 - increase tx power by 6dBm
- */
-#define BBP1_TX_POWER                  FIELD8(0x07)
-#define BBP1_TX_ANTENNA                        FIELD8(0x18)
-
-/*
- * BBP 3: RX Antenna
- */
-#define BBP3_RX_ANTENNA                        FIELD8(0x18)
-#define BBP3_HT40_MINUS                        FIELD8(0x20)
-
-/*
- * BBP 4: Bandwidth
- */
-#define BBP4_TX_BF                     FIELD8(0x01)
-#define BBP4_BANDWIDTH                 FIELD8(0x18)
-
-/*
- * BBP 138: Unknown
- */
-#define BBP138_RX_ADC1                 FIELD8(0x02)
-#define BBP138_RX_ADC2                 FIELD8(0x04)
-#define BBP138_TX_DAC1                 FIELD8(0x20)
-#define BBP138_TX_DAC2                 FIELD8(0x40)
-
-/*
- * RFCSR registers
- * The wordsize of the RFCSR is 8 bits.
- */
-
-/*
- * RFCSR 1:
- */
-#define RFCSR1_RF_BLOCK_EN             FIELD8(0x01)
-#define RFCSR1_RX0_PD                  FIELD8(0x04)
-#define RFCSR1_TX0_PD                  FIELD8(0x08)
-#define RFCSR1_RX1_PD                  FIELD8(0x10)
-#define RFCSR1_TX1_PD                  FIELD8(0x20)
-
-/*
- * RFCSR 6:
- */
-#define RFCSR6_R1                      FIELD8(0x03)
-#define RFCSR6_R2                      FIELD8(0x40)
-
-/*
- * RFCSR 7:
- */
-#define RFCSR7_RF_TUNING               FIELD8(0x01)
-
-/*
- * RFCSR 12:
- */
-#define RFCSR12_TX_POWER               FIELD8(0x1f)
-
-/*
- * RFCSR 13:
- */
-#define RFCSR13_TX_POWER               FIELD8(0x1f)
-
-/*
- * RFCSR 15:
- */
-#define RFCSR15_TX_LO2_EN              FIELD8(0x08)
-
-/*
- * RFCSR 17:
- */
-#define RFCSR17_TXMIXER_GAIN           FIELD8(0x07)
-#define RFCSR17_TX_LO1_EN              FIELD8(0x08)
-#define RFCSR17_R                      FIELD8(0x20)
-
-/*
- * RFCSR 20:
- */
-#define RFCSR20_RX_LO1_EN              FIELD8(0x08)
-
-/*
- * RFCSR 21:
- */
-#define RFCSR21_RX_LO2_EN              FIELD8(0x08)
-
-/*
- * RFCSR 22:
- */
-#define RFCSR22_BASEBAND_LOOPBACK      FIELD8(0x01)
-
-/*
- * RFCSR 23:
- */
-#define RFCSR23_FREQ_OFFSET            FIELD8(0x7f)
-
-/*
- * RFCSR 27:
- */
-#define RFCSR27_R1                     FIELD8(0x03)
-#define RFCSR27_R2                     FIELD8(0x04)
-#define RFCSR27_R3                     FIELD8(0x30)
-#define RFCSR27_R4                     FIELD8(0x40)
-
-/*
- * RFCSR 30:
- */
-#define RFCSR30_RF_CALIBRATION         FIELD8(0x80)
-
-/*
- * RF registers
- */
-
-/*
- * RF 2
- */
-#define RF2_ANTENNA_RX2                        FIELD32(0x00000040)
-#define RF2_ANTENNA_TX1                        FIELD32(0x00004000)
-#define RF2_ANTENNA_RX1                        FIELD32(0x00020000)
-
-/*
- * RF 3
- */
-#define RF3_TXPOWER_G                  FIELD32(0x00003e00)
-#define RF3_TXPOWER_A_7DBM_BOOST       FIELD32(0x00000200)
-#define RF3_TXPOWER_A                  FIELD32(0x00003c00)
-
-/*
- * RF 4
- */
-#define RF4_TXPOWER_G                  FIELD32(0x000007c0)
-#define RF4_TXPOWER_A_7DBM_BOOST       FIELD32(0x00000040)
-#define RF4_TXPOWER_A                  FIELD32(0x00000780)
-#define RF4_FREQ_OFFSET                        FIELD32(0x001f8000)
-#define RF4_HT40                       FIELD32(0x00200000)
-
-/*
- * EEPROM content.
- * The wordsize of the EEPROM is 16 bits.
- */
-
-/*
- * EEPROM Version
- */
-#define EEPROM_VERSION                 0x0001
-#define EEPROM_VERSION_FAE             FIELD16(0x00ff)
-#define EEPROM_VERSION_VERSION         FIELD16(0xff00)
-
-/*
- * HW MAC address.
- */
-#define EEPROM_MAC_ADDR_0              0x0002
-#define EEPROM_MAC_ADDR_BYTE0          FIELD16(0x00ff)
-#define EEPROM_MAC_ADDR_BYTE1          FIELD16(0xff00)
-#define EEPROM_MAC_ADDR_1              0x0003
-#define EEPROM_MAC_ADDR_BYTE2          FIELD16(0x00ff)
-#define EEPROM_MAC_ADDR_BYTE3          FIELD16(0xff00)
-#define EEPROM_MAC_ADDR_2              0x0004
-#define EEPROM_MAC_ADDR_BYTE4          FIELD16(0x00ff)
-#define EEPROM_MAC_ADDR_BYTE5          FIELD16(0xff00)
-
-/*
- * EEPROM ANTENNA config
- * RXPATH: 1: 1R, 2: 2R, 3: 3R
- * TXPATH: 1: 1T, 2: 2T
- */
-#define        EEPROM_ANTENNA                  0x001a
-#define EEPROM_ANTENNA_RXPATH          FIELD16(0x000f)
-#define EEPROM_ANTENNA_TXPATH          FIELD16(0x00f0)
-#define EEPROM_ANTENNA_RF_TYPE         FIELD16(0x0f00)
-
-/*
- * EEPROM NIC config
- * CARDBUS_ACCEL: 0 - enable, 1 - disable
- */
-#define        EEPROM_NIC                      0x001b
-#define EEPROM_NIC_HW_RADIO            FIELD16(0x0001)
-#define EEPROM_NIC_DYNAMIC_TX_AGC      FIELD16(0x0002)
-#define EEPROM_NIC_EXTERNAL_LNA_BG     FIELD16(0x0004)
-#define EEPROM_NIC_EXTERNAL_LNA_A      FIELD16(0x0008)
-#define EEPROM_NIC_CARDBUS_ACCEL       FIELD16(0x0010)
-#define EEPROM_NIC_BW40M_SB_BG         FIELD16(0x0020)
-#define EEPROM_NIC_BW40M_SB_A          FIELD16(0x0040)
-#define EEPROM_NIC_WPS_PBC             FIELD16(0x0080)
-#define EEPROM_NIC_BW40M_BG            FIELD16(0x0100)
-#define EEPROM_NIC_BW40M_A             FIELD16(0x0200)
-#define EEPROM_NIC_ANT_DIVERSITY       FIELD16(0x0800)
-#define EEPROM_NIC_DAC_TEST            FIELD16(0x8000)
-
-/*
- * EEPROM frequency
- */
-#define        EEPROM_FREQ                     0x001d
-#define EEPROM_FREQ_OFFSET             FIELD16(0x00ff)
-#define EEPROM_FREQ_LED_MODE           FIELD16(0x7f00)
-#define EEPROM_FREQ_LED_POLARITY       FIELD16(0x1000)
-
-/*
- * EEPROM LED
- * POLARITY_RDY_G: Polarity RDY_G setting.
- * POLARITY_RDY_A: Polarity RDY_A setting.
- * POLARITY_ACT: Polarity ACT setting.
- * POLARITY_GPIO_0: Polarity GPIO0 setting.
- * POLARITY_GPIO_1: Polarity GPIO1 setting.
- * POLARITY_GPIO_2: Polarity GPIO2 setting.
- * POLARITY_GPIO_3: Polarity GPIO3 setting.
- * POLARITY_GPIO_4: Polarity GPIO4 setting.
- * LED_MODE: Led mode.
- */
-#define EEPROM_LED1                    0x001e
-#define EEPROM_LED2                    0x001f
-#define EEPROM_LED3                    0x0020
-#define EEPROM_LED_POLARITY_RDY_BG     FIELD16(0x0001)
-#define EEPROM_LED_POLARITY_RDY_A      FIELD16(0x0002)
-#define EEPROM_LED_POLARITY_ACT                FIELD16(0x0004)
-#define EEPROM_LED_POLARITY_GPIO_0     FIELD16(0x0008)
-#define EEPROM_LED_POLARITY_GPIO_1     FIELD16(0x0010)
-#define EEPROM_LED_POLARITY_GPIO_2     FIELD16(0x0020)
-#define EEPROM_LED_POLARITY_GPIO_3     FIELD16(0x0040)
-#define EEPROM_LED_POLARITY_GPIO_4     FIELD16(0x0080)
-#define EEPROM_LED_LED_MODE            FIELD16(0x1f00)
-
-/*
- * EEPROM LNA
- */
-#define EEPROM_LNA                     0x0022
-#define EEPROM_LNA_BG                  FIELD16(0x00ff)
-#define EEPROM_LNA_A0                  FIELD16(0xff00)
-
-/*
- * EEPROM RSSI BG offset
- */
-#define EEPROM_RSSI_BG                 0x0023
-#define EEPROM_RSSI_BG_OFFSET0         FIELD16(0x00ff)
-#define EEPROM_RSSI_BG_OFFSET1         FIELD16(0xff00)
-
-/*
- * EEPROM RSSI BG2 offset
- */
-#define EEPROM_RSSI_BG2                        0x0024
-#define EEPROM_RSSI_BG2_OFFSET2                FIELD16(0x00ff)
-#define EEPROM_RSSI_BG2_LNA_A1         FIELD16(0xff00)
-
-/*
- * EEPROM TXMIXER GAIN BG offset (note overlaps with EEPROM RSSI BG2).
- */
-#define EEPROM_TXMIXER_GAIN_BG         0x0024
-#define EEPROM_TXMIXER_GAIN_BG_VAL     FIELD16(0x0007)
-
-/*
- * EEPROM RSSI A offset
- */
-#define EEPROM_RSSI_A                  0x0025
-#define EEPROM_RSSI_A_OFFSET0          FIELD16(0x00ff)
-#define EEPROM_RSSI_A_OFFSET1          FIELD16(0xff00)
-
-/*
- * EEPROM RSSI A2 offset
- */
-#define EEPROM_RSSI_A2                 0x0026
-#define EEPROM_RSSI_A2_OFFSET2         FIELD16(0x00ff)
-#define EEPROM_RSSI_A2_LNA_A2          FIELD16(0xff00)
-
-/*
- * EEPROM Maximum TX power values
- */
-#define EEPROM_MAX_TX_POWER            0x0027
-#define EEPROM_MAX_TX_POWER_24GHZ      FIELD16(0x00ff)
-#define EEPROM_MAX_TX_POWER_5GHZ       FIELD16(0xff00)
-
-/*
- * EEPROM TXpower delta: 20MHZ AND 40 MHZ use different power.
- *     This is delta in 40MHZ.
- * VALUE: Tx Power dalta value (MAX=4)
- * TYPE: 1: Plus the delta value, 0: minus the delta value
- * TXPOWER: Enable:
- */
-#define EEPROM_TXPOWER_DELTA           0x0028
-#define EEPROM_TXPOWER_DELTA_VALUE     FIELD16(0x003f)
-#define EEPROM_TXPOWER_DELTA_TYPE      FIELD16(0x0040)
-#define EEPROM_TXPOWER_DELTA_TXPOWER   FIELD16(0x0080)
-
-/*
- * EEPROM TXPOWER 802.11BG
- */
-#define        EEPROM_TXPOWER_BG1              0x0029
-#define        EEPROM_TXPOWER_BG2              0x0030
-#define EEPROM_TXPOWER_BG_SIZE         7
-#define EEPROM_TXPOWER_BG_1            FIELD16(0x00ff)
-#define EEPROM_TXPOWER_BG_2            FIELD16(0xff00)
-
-/*
- * EEPROM TXPOWER 802.11A
- */
-#define EEPROM_TXPOWER_A1              0x003c
-#define EEPROM_TXPOWER_A2              0x0053
-#define EEPROM_TXPOWER_A_SIZE          6
-#define EEPROM_TXPOWER_A_1             FIELD16(0x00ff)
-#define EEPROM_TXPOWER_A_2             FIELD16(0xff00)
-
-/*
- * EEPROM TXPOWER by rate: tx power per tx rate for HT20 mode
- */
-#define EEPROM_TXPOWER_BYRATE          0x006f
-#define EEPROM_TXPOWER_BYRATE_SIZE     9
-
-#define EEPROM_TXPOWER_BYRATE_RATE0    FIELD16(0x000f)
-#define EEPROM_TXPOWER_BYRATE_RATE1    FIELD16(0x00f0)
-#define EEPROM_TXPOWER_BYRATE_RATE2    FIELD16(0x0f00)
-#define EEPROM_TXPOWER_BYRATE_RATE3    FIELD16(0xf000)
-
-/*
- * EEPROM BBP.
- */
-#define        EEPROM_BBP_START                0x0078
-#define EEPROM_BBP_SIZE                        16
-#define EEPROM_BBP_VALUE               FIELD16(0x00ff)
-#define EEPROM_BBP_REG_ID              FIELD16(0xff00)
-
-/*
- * MCU mailbox commands.
- */
-#define MCU_SLEEP                      0x30
-#define MCU_WAKEUP                     0x31
-#define MCU_RADIO_OFF                  0x35
-#define MCU_CURRENT                    0x36
-#define MCU_LED                                0x50
-#define MCU_LED_STRENGTH               0x51
-#define MCU_LED_1                      0x52
-#define MCU_LED_2                      0x53
-#define MCU_LED_3                      0x54
-#define MCU_RADAR                      0x60
-#define MCU_BOOT_SIGNAL                        0x72
-#define MCU_BBP_SIGNAL                 0x80
-#define MCU_POWER_SAVE                 0x83
-
-/*
- * MCU mailbox tokens
- */
-#define TOKEN_WAKUP                    3
-
-/*
- * DMA descriptor defines.
- */
-#define TXWI_DESC_SIZE                 ( 4 * sizeof(__le32) )
-#define RXWI_DESC_SIZE                 ( 4 * sizeof(__le32) )
-
-/*
- * TX WI structure
- */
-
-/*
- * Word0
- * FRAG: 1 To inform TKIP engine this is a fragment.
- * MIMO_PS: The remote peer is in dynamic MIMO-PS mode
- * TX_OP: 0:HT TXOP rule , 1:PIFS TX ,2:Backoff, 3:sifs
- * BW: Channel bandwidth 20MHz or 40 MHz
- * STBC: 1: STBC support MCS =0-7, 2,3 : RESERVED
- */
-#define TXWI_W0_FRAG                   FIELD32(0x00000001)
-#define TXWI_W0_MIMO_PS                        FIELD32(0x00000002)
-#define TXWI_W0_CF_ACK                 FIELD32(0x00000004)
-#define TXWI_W0_TS                     FIELD32(0x00000008)
-#define TXWI_W0_AMPDU                  FIELD32(0x00000010)
-#define TXWI_W0_MPDU_DENSITY           FIELD32(0x000000e0)
-#define TXWI_W0_TX_OP                  FIELD32(0x00000300)
-#define TXWI_W0_MCS                    FIELD32(0x007f0000)
-#define TXWI_W0_BW                     FIELD32(0x00800000)
-#define TXWI_W0_SHORT_GI               FIELD32(0x01000000)
-#define TXWI_W0_STBC                   FIELD32(0x06000000)
-#define TXWI_W0_IFS                    FIELD32(0x08000000)
-#define TXWI_W0_PHYMODE                        FIELD32(0xc0000000)
-
-/*
- * Word1
- */
-#define TXWI_W1_ACK                    FIELD32(0x00000001)
-#define TXWI_W1_NSEQ                   FIELD32(0x00000002)
-#define TXWI_W1_BW_WIN_SIZE            FIELD32(0x000000fc)
-#define TXWI_W1_WIRELESS_CLI_ID                FIELD32(0x0000ff00)
-#define TXWI_W1_MPDU_TOTAL_BYTE_COUNT  FIELD32(0x0fff0000)
-#define TXWI_W1_PACKETID               FIELD32(0xf0000000)
-
-/*
- * Word2
- */
-#define TXWI_W2_IV                     FIELD32(0xffffffff)
-
-/*
- * Word3
- */
-#define TXWI_W3_EIV                    FIELD32(0xffffffff)
-
-/*
- * RX WI structure
- */
-
-/*
- * Word0
- */
-#define RXWI_W0_WIRELESS_CLI_ID                FIELD32(0x000000ff)
-#define RXWI_W0_KEY_INDEX              FIELD32(0x00000300)
-#define RXWI_W0_BSSID                  FIELD32(0x00001c00)
-#define RXWI_W0_UDF                    FIELD32(0x0000e000)
-#define RXWI_W0_MPDU_TOTAL_BYTE_COUNT  FIELD32(0x0fff0000)
-#define RXWI_W0_TID                    FIELD32(0xf0000000)
-
-/*
- * Word1
- */
-#define RXWI_W1_FRAG                   FIELD32(0x0000000f)
-#define RXWI_W1_SEQUENCE               FIELD32(0x0000fff0)
-#define RXWI_W1_MCS                    FIELD32(0x007f0000)
-#define RXWI_W1_BW                     FIELD32(0x00800000)
-#define RXWI_W1_SHORT_GI               FIELD32(0x01000000)
-#define RXWI_W1_STBC                   FIELD32(0x06000000)
-#define RXWI_W1_PHYMODE                        FIELD32(0xc0000000)
-
-/*
- * Word2
- */
-#define RXWI_W2_RSSI0                  FIELD32(0x000000ff)
-#define RXWI_W2_RSSI1                  FIELD32(0x0000ff00)
-#define RXWI_W2_RSSI2                  FIELD32(0x00ff0000)
-
-/*
- * Word3
- */
-#define RXWI_W3_SNR0                   FIELD32(0x000000ff)
-#define RXWI_W3_SNR1                   FIELD32(0x0000ff00)
-
-/*
- * Macros for converting txpower from EEPROM to mac80211 value
- * and from mac80211 value to register value.
- */
-#define MIN_G_TXPOWER  0
-#define MIN_A_TXPOWER  -7
-#define MAX_G_TXPOWER  31
-#define MAX_A_TXPOWER  15
-#define DEFAULT_TXPOWER        5
-
-#define TXPOWER_G_FROM_DEV(__txpower) \
-       ((__txpower) > MAX_G_TXPOWER) ? DEFAULT_TXPOWER : (__txpower)
-
-#define TXPOWER_G_TO_DEV(__txpower) \
-       clamp_t(char, __txpower, MIN_G_TXPOWER, MAX_G_TXPOWER)
-
-#define TXPOWER_A_FROM_DEV(__txpower) \
-       ((__txpower) > MAX_A_TXPOWER) ? DEFAULT_TXPOWER : (__txpower)
-
-#define TXPOWER_A_TO_DEV(__txpower) \
-       clamp_t(char, __txpower, MIN_A_TXPOWER, MAX_A_TXPOWER)
-
-#endif /* RT2800_H */
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
deleted file mode 100644 (file)
index 60039d3..0000000
+++ /dev/null
@@ -1,3078 +0,0 @@
-/*
-       Copyright (C) 2010 Ivo van Doorn <IvDoorn@gmail.com>
-       Copyright (C) 2009 Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
-       Copyright (C) 2009 Gertjan van Wingerde <gwingerde@gmail.com>
-
-       Based on the original rt2800pci.c and rt2800usb.c.
-         Copyright (C) 2009 Alban Browaeys <prahal@yahoo.com>
-         Copyright (C) 2009 Felix Fietkau <nbd@openwrt.org>
-         Copyright (C) 2009 Luis Correia <luis.f.correia@gmail.com>
-         Copyright (C) 2009 Mattias Nissler <mattias.nissler@gmx.de>
-         Copyright (C) 2009 Mark Asselstine <asselsm@gmail.com>
-         Copyright (C) 2009 Xose Vazquez Perez <xose.vazquez@gmail.com>
-         <http://rt2x00.serialmonkey.com>
-
-       This program is free software; you can redistribute it and/or modify
-       it under the terms of the GNU General Public License as published by
-       the Free Software Foundation; either version 2 of the License, or
-       (at your option) any later version.
-
-       This program is distributed in the hope that it will be useful,
-       but WITHOUT ANY WARRANTY; without even the implied warranty of
-       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-       GNU General Public License for more details.
-
-       You should have received a copy of the GNU General Public License
-       along with this program; if not, write to the
-       Free Software Foundation, Inc.,
-       59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-/*
-       Module: rt2800lib
-       Abstract: rt2800 generic device routines.
- */
-
-#include <linux/crc-ccitt.h>
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/slab.h>
-
-#include "rt2x00.h"
-#include "rt2800lib.h"
-#include "rt2800.h"
-
-/*
- * Register access.
- * All access to the CSR registers will go through the methods
- * rt2800_register_read and rt2800_register_write.
- * BBP and RF register require indirect register access,
- * and use the CSR registers BBPCSR and RFCSR to achieve this.
- * These indirect registers work with busy bits,
- * and we will try maximal REGISTER_BUSY_COUNT times to access
- * the register while taking a REGISTER_BUSY_DELAY us delay
- * between each attampt. When the busy bit is still set at that time,
- * the access attempt is considered to have failed,
- * and we will print an error.
- * The _lock versions must be used if you already hold the csr_mutex
- */
-#define WAIT_FOR_BBP(__dev, __reg) \
-       rt2800_regbusy_read((__dev), BBP_CSR_CFG, BBP_CSR_CFG_BUSY, (__reg))
-#define WAIT_FOR_RFCSR(__dev, __reg) \
-       rt2800_regbusy_read((__dev), RF_CSR_CFG, RF_CSR_CFG_BUSY, (__reg))
-#define WAIT_FOR_RF(__dev, __reg) \
-       rt2800_regbusy_read((__dev), RF_CSR_CFG0, RF_CSR_CFG0_BUSY, (__reg))
-#define WAIT_FOR_MCU(__dev, __reg) \
-       rt2800_regbusy_read((__dev), H2M_MAILBOX_CSR, \
-                           H2M_MAILBOX_CSR_OWNER, (__reg))
-
-static inline bool rt2800_is_305x_soc(struct rt2x00_dev *rt2x00dev)
-{
-       /* check for rt2872 on SoC */
-       if (!rt2x00_is_soc(rt2x00dev) ||
-           !rt2x00_rt(rt2x00dev, RT2872))
-               return false;
-
-       /* we know for sure that these rf chipsets are used on rt305x boards */
-       if (rt2x00_rf(rt2x00dev, RF3020) ||
-           rt2x00_rf(rt2x00dev, RF3021) ||
-           rt2x00_rf(rt2x00dev, RF3022))
-               return true;
-
-       NOTICE(rt2x00dev, "Unknown RF chipset on rt305x\n");
-       return false;
-}
-
-static void rt2800_bbp_write(struct rt2x00_dev *rt2x00dev,
-                            const unsigned int word, const u8 value)
-{
-       u32 reg;
-
-       mutex_lock(&rt2x00dev->csr_mutex);
-
-       /*
-        * Wait until the BBP becomes available, afterwards we
-        * can safely write the new data into the register.
-        */
-       if (WAIT_FOR_BBP(rt2x00dev, &reg)) {
-               reg = 0;
-               rt2x00_set_field32(&reg, BBP_CSR_CFG_VALUE, value);
-               rt2x00_set_field32(&reg, BBP_CSR_CFG_REGNUM, word);
-               rt2x00_set_field32(&reg, BBP_CSR_CFG_BUSY, 1);
-               rt2x00_set_field32(&reg, BBP_CSR_CFG_READ_CONTROL, 0);
-               rt2x00_set_field32(&reg, BBP_CSR_CFG_BBP_RW_MODE, 1);
-
-               rt2800_register_write_lock(rt2x00dev, BBP_CSR_CFG, reg);
-       }
-
-       mutex_unlock(&rt2x00dev->csr_mutex);
-}
-
-static void rt2800_bbp_read(struct rt2x00_dev *rt2x00dev,
-                           const unsigned int word, u8 *value)
-{
-       u32 reg;
-
-       mutex_lock(&rt2x00dev->csr_mutex);
-
-       /*
-        * Wait until the BBP becomes available, afterwards we
-        * can safely write the read request into the register.
-        * After the data has been written, we wait until hardware
-        * returns the correct value, if at any time the register
-        * doesn't become available in time, reg will be 0xffffffff
-        * which means we return 0xff to the caller.
-        */
-       if (WAIT_FOR_BBP(rt2x00dev, &reg)) {
-               reg = 0;
-               rt2x00_set_field32(&reg, BBP_CSR_CFG_REGNUM, word);
-               rt2x00_set_field32(&reg, BBP_CSR_CFG_BUSY, 1);
-               rt2x00_set_field32(&reg, BBP_CSR_CFG_READ_CONTROL, 1);
-               rt2x00_set_field32(&reg, BBP_CSR_CFG_BBP_RW_MODE, 1);
-
-               rt2800_register_write_lock(rt2x00dev, BBP_CSR_CFG, reg);
-
-               WAIT_FOR_BBP(rt2x00dev, &reg);
-       }
-
-       *value = rt2x00_get_field32(reg, BBP_CSR_CFG_VALUE);
-
-       mutex_unlock(&rt2x00dev->csr_mutex);
-}
-
-static void rt2800_rfcsr_write(struct rt2x00_dev *rt2x00dev,
-                              const unsigned int word, const u8 value)
-{
-       u32 reg;
-
-       mutex_lock(&rt2x00dev->csr_mutex);
-
-       /*
-        * Wait until the RFCSR becomes available, afterwards we
-        * can safely write the new data into the register.
-        */
-       if (WAIT_FOR_RFCSR(rt2x00dev, &reg)) {
-               reg = 0;
-               rt2x00_set_field32(&reg, RF_CSR_CFG_DATA, value);
-               rt2x00_set_field32(&reg, RF_CSR_CFG_REGNUM, word);
-               rt2x00_set_field32(&reg, RF_CSR_CFG_WRITE, 1);
-               rt2x00_set_field32(&reg, RF_CSR_CFG_BUSY, 1);
-
-               rt2800_register_write_lock(rt2x00dev, RF_CSR_CFG, reg);
-       }
-
-       mutex_unlock(&rt2x00dev->csr_mutex);
-}
-
-static void rt2800_rfcsr_read(struct rt2x00_dev *rt2x00dev,
-                             const unsigned int word, u8 *value)
-{
-       u32 reg;
-
-       mutex_lock(&rt2x00dev->csr_mutex);
-
-       /*
-        * Wait until the RFCSR becomes available, afterwards we
-        * can safely write the read request into the register.
-        * After the data has been written, we wait until hardware
-        * returns the correct value, if at any time the register
-        * doesn't become available in time, reg will be 0xffffffff
-        * which means we return 0xff to the caller.
-        */
-       if (WAIT_FOR_RFCSR(rt2x00dev, &reg)) {
-               reg = 0;
-               rt2x00_set_field32(&reg, RF_CSR_CFG_REGNUM, word);
-               rt2x00_set_field32(&reg, RF_CSR_CFG_WRITE, 0);
-               rt2x00_set_field32(&reg, RF_CSR_CFG_BUSY, 1);
-
-               rt2800_register_write_lock(rt2x00dev, RF_CSR_CFG, reg);
-
-               WAIT_FOR_RFCSR(rt2x00dev, &reg);
-       }
-
-       *value = rt2x00_get_field32(reg, RF_CSR_CFG_DATA);
-
-       mutex_unlock(&rt2x00dev->csr_mutex);
-}
-
-static void rt2800_rf_write(struct rt2x00_dev *rt2x00dev,
-                           const unsigned int word, const u32 value)
-{
-       u32 reg;
-
-       mutex_lock(&rt2x00dev->csr_mutex);
-
-       /*
-        * Wait until the RF becomes available, afterwards we
-        * can safely write the new data into the register.
-        */
-       if (WAIT_FOR_RF(rt2x00dev, &reg)) {
-               reg = 0;
-               rt2x00_set_field32(&reg, RF_CSR_CFG0_REG_VALUE_BW, value);
-               rt2x00_set_field32(&reg, RF_CSR_CFG0_STANDBYMODE, 0);
-               rt2x00_set_field32(&reg, RF_CSR_CFG0_SEL, 0);
-               rt2x00_set_field32(&reg, RF_CSR_CFG0_BUSY, 1);
-
-               rt2800_register_write_lock(rt2x00dev, RF_CSR_CFG0, reg);
-               rt2x00_rf_write(rt2x00dev, word, value);
-       }
-
-       mutex_unlock(&rt2x00dev->csr_mutex);
-}
-
-void rt2800_mcu_request(struct rt2x00_dev *rt2x00dev,
-                       const u8 command, const u8 token,
-                       const u8 arg0, const u8 arg1)
-{
-       u32 reg;
-
-       /*
-        * SOC devices don't support MCU requests.
-        */
-       if (rt2x00_is_soc(rt2x00dev))
-               return;
-
-       mutex_lock(&rt2x00dev->csr_mutex);
-
-       /*
-        * Wait until the MCU becomes available, afterwards we
-        * can safely write the new data into the register.
-        */
-       if (WAIT_FOR_MCU(rt2x00dev, &reg)) {
-               rt2x00_set_field32(&reg, H2M_MAILBOX_CSR_OWNER, 1);
-               rt2x00_set_field32(&reg, H2M_MAILBOX_CSR_CMD_TOKEN, token);
-               rt2x00_set_field32(&reg, H2M_MAILBOX_CSR_ARG0, arg0);
-               rt2x00_set_field32(&reg, H2M_MAILBOX_CSR_ARG1, arg1);
-               rt2800_register_write_lock(rt2x00dev, H2M_MAILBOX_CSR, reg);
-
-               reg = 0;
-               rt2x00_set_field32(&reg, HOST_CMD_CSR_HOST_COMMAND, command);
-               rt2800_register_write_lock(rt2x00dev, HOST_CMD_CSR, reg);
-       }
-
-       mutex_unlock(&rt2x00dev->csr_mutex);
-}
-EXPORT_SYMBOL_GPL(rt2800_mcu_request);
-
-int rt2800_wait_wpdma_ready(struct rt2x00_dev *rt2x00dev)
-{
-       unsigned int i;
-       u32 reg;
-
-       for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
-               rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
-               if (!rt2x00_get_field32(reg, WPDMA_GLO_CFG_TX_DMA_BUSY) &&
-                   !rt2x00_get_field32(reg, WPDMA_GLO_CFG_RX_DMA_BUSY))
-                       return 0;
-
-               msleep(1);
-       }
-
-       ERROR(rt2x00dev, "WPDMA TX/RX busy, aborting.\n");
-       return -EACCES;
-}
-EXPORT_SYMBOL_GPL(rt2800_wait_wpdma_ready);
-
-static bool rt2800_check_firmware_crc(const u8 *data, const size_t len)
-{
-       u16 fw_crc;
-       u16 crc;
-
-       /*
-        * The last 2 bytes in the firmware array are the crc checksum itself,
-        * this means that we should never pass those 2 bytes to the crc
-        * algorithm.
-        */
-       fw_crc = (data[len - 2] << 8 | data[len - 1]);
-
-       /*
-        * Use the crc ccitt algorithm.
-        * This will return the same value as the legacy driver which
-        * used bit ordering reversion on the both the firmware bytes
-        * before input input as well as on the final output.
-        * Obviously using crc ccitt directly is much more efficient.
-        */
-       crc = crc_ccitt(~0, data, len - 2);
-
-       /*
-        * There is a small difference between the crc-itu-t + bitrev and
-        * the crc-ccitt crc calculation. In the latter method the 2 bytes
-        * will be swapped, use swab16 to convert the crc to the correct
-        * value.
-        */
-       crc = swab16(crc);
-
-       return fw_crc == crc;
-}
-
-int rt2800_check_firmware(struct rt2x00_dev *rt2x00dev,
-                         const u8 *data, const size_t len)
-{
-       size_t offset = 0;
-       size_t fw_len;
-       bool multiple;
-
-       /*
-        * PCI(e) & SOC devices require firmware with a length
-        * of 8kb. USB devices require firmware files with a length
-        * of 4kb. Certain USB chipsets however require different firmware,
-        * which Ralink only provides attached to the original firmware
-        * file. Thus for USB devices, firmware files have a length
-        * which is a multiple of 4kb.
-        */
-       if (rt2x00_is_usb(rt2x00dev)) {
-               fw_len = 4096;
-               multiple = true;
-       } else {
-               fw_len = 8192;
-               multiple = true;
-       }
-
-       /*
-        * Validate the firmware length
-        */
-       if (len != fw_len && (!multiple || (len % fw_len) != 0))
-               return FW_BAD_LENGTH;
-
-       /*
-        * Check if the chipset requires one of the upper parts
-        * of the firmware.
-        */
-       if (rt2x00_is_usb(rt2x00dev) &&
-           !rt2x00_rt(rt2x00dev, RT2860) &&
-           !rt2x00_rt(rt2x00dev, RT2872) &&
-           !rt2x00_rt(rt2x00dev, RT3070) &&
-           ((len / fw_len) == 1))
-               return FW_BAD_VERSION;
-
-       /*
-        * 8kb firmware files must be checked as if it were
-        * 2 separate firmware files.
-        */
-       while (offset < len) {
-               if (!rt2800_check_firmware_crc(data + offset, fw_len))
-                       return FW_BAD_CRC;
-
-               offset += fw_len;
-       }
-
-       return FW_OK;
-}
-EXPORT_SYMBOL_GPL(rt2800_check_firmware);
-
-int rt2800_load_firmware(struct rt2x00_dev *rt2x00dev,
-                        const u8 *data, const size_t len)
-{
-       unsigned int i;
-       u32 reg;
-
-       /*
-        * Wait for stable hardware.
-        */
-       for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
-               rt2800_register_read(rt2x00dev, MAC_CSR0, &reg);
-               if (reg && reg != ~0)
-                       break;
-               msleep(1);
-       }
-
-       if (i == REGISTER_BUSY_COUNT) {
-               ERROR(rt2x00dev, "Unstable hardware.\n");
-               return -EBUSY;
-       }
-
-       if (rt2x00_is_pci(rt2x00dev))
-               rt2800_register_write(rt2x00dev, PWR_PIN_CFG, 0x00000002);
-
-       /*
-        * Disable DMA, will be reenabled later when enabling
-        * the radio.
-        */
-       rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_DMA_BUSY, 0);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_RX_DMA_BUSY, 0);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 1);
-       rt2800_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
-
-       /*
-        * Write firmware to the device.
-        */
-       rt2800_drv_write_firmware(rt2x00dev, data, len);
-
-       /*
-        * Wait for device to stabilize.
-        */
-       for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
-               rt2800_register_read(rt2x00dev, PBF_SYS_CTRL, &reg);
-               if (rt2x00_get_field32(reg, PBF_SYS_CTRL_READY))
-                       break;
-               msleep(1);
-       }
-
-       if (i == REGISTER_BUSY_COUNT) {
-               ERROR(rt2x00dev, "PBF system register not ready.\n");
-               return -EBUSY;
-       }
-
-       /*
-        * Initialize firmware.
-        */
-       rt2800_register_write(rt2x00dev, H2M_BBP_AGENT, 0);
-       rt2800_register_write(rt2x00dev, H2M_MAILBOX_CSR, 0);
-       msleep(1);
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(rt2800_load_firmware);
-
-void rt2800_write_txwi(__le32 *txwi, struct txentry_desc *txdesc)
-{
-       u32 word;
-
-       /*
-        * Initialize TX Info descriptor
-        */
-       rt2x00_desc_read(txwi, 0, &word);
-       rt2x00_set_field32(&word, TXWI_W0_FRAG,
-                          test_bit(ENTRY_TXD_MORE_FRAG, &txdesc->flags));
-       rt2x00_set_field32(&word, TXWI_W0_MIMO_PS, 0);
-       rt2x00_set_field32(&word, TXWI_W0_CF_ACK, 0);
-       rt2x00_set_field32(&word, TXWI_W0_TS,
-                          test_bit(ENTRY_TXD_REQ_TIMESTAMP, &txdesc->flags));
-       rt2x00_set_field32(&word, TXWI_W0_AMPDU,
-                          test_bit(ENTRY_TXD_HT_AMPDU, &txdesc->flags));
-       rt2x00_set_field32(&word, TXWI_W0_MPDU_DENSITY, txdesc->mpdu_density);
-       rt2x00_set_field32(&word, TXWI_W0_TX_OP, txdesc->txop);
-       rt2x00_set_field32(&word, TXWI_W0_MCS, txdesc->mcs);
-       rt2x00_set_field32(&word, TXWI_W0_BW,
-                          test_bit(ENTRY_TXD_HT_BW_40, &txdesc->flags));
-       rt2x00_set_field32(&word, TXWI_W0_SHORT_GI,
-                          test_bit(ENTRY_TXD_HT_SHORT_GI, &txdesc->flags));
-       rt2x00_set_field32(&word, TXWI_W0_STBC, txdesc->stbc);
-       rt2x00_set_field32(&word, TXWI_W0_PHYMODE, txdesc->rate_mode);
-       rt2x00_desc_write(txwi, 0, word);
-
-       rt2x00_desc_read(txwi, 1, &word);
-       rt2x00_set_field32(&word, TXWI_W1_ACK,
-                          test_bit(ENTRY_TXD_ACK, &txdesc->flags));
-       rt2x00_set_field32(&word, TXWI_W1_NSEQ,
-                          test_bit(ENTRY_TXD_GENERATE_SEQ, &txdesc->flags));
-       rt2x00_set_field32(&word, TXWI_W1_BW_WIN_SIZE, txdesc->ba_size);
-       rt2x00_set_field32(&word, TXWI_W1_WIRELESS_CLI_ID,
-                          test_bit(ENTRY_TXD_ENCRYPT, &txdesc->flags) ?
-                          txdesc->key_idx : 0xff);
-       rt2x00_set_field32(&word, TXWI_W1_MPDU_TOTAL_BYTE_COUNT,
-                          txdesc->length);
-       rt2x00_set_field32(&word, TXWI_W1_PACKETID, txdesc->queue + 1);
-       rt2x00_desc_write(txwi, 1, word);
-
-       /*
-        * Always write 0 to IV/EIV fields, hardware will insert the IV
-        * from the IVEIV register when TXD_W3_WIV is set to 0.
-        * When TXD_W3_WIV is set to 1 it will use the IV data
-        * from the descriptor. The TXWI_W1_WIRELESS_CLI_ID indicates which
-        * crypto entry in the registers should be used to encrypt the frame.
-        */
-       _rt2x00_desc_write(txwi, 2, 0 /* skbdesc->iv[0] */);
-       _rt2x00_desc_write(txwi, 3, 0 /* skbdesc->iv[1] */);
-}
-EXPORT_SYMBOL_GPL(rt2800_write_txwi);
-
-static int rt2800_agc_to_rssi(struct rt2x00_dev *rt2x00dev, int rxwi_w2)
-{
-       int rssi0 = rt2x00_get_field32(rxwi_w2, RXWI_W2_RSSI0);
-       int rssi1 = rt2x00_get_field32(rxwi_w2, RXWI_W2_RSSI1);
-       int rssi2 = rt2x00_get_field32(rxwi_w2, RXWI_W2_RSSI2);
-       u16 eeprom;
-       u8 offset0;
-       u8 offset1;
-       u8 offset2;
-
-       if (rt2x00dev->rx_status.band == IEEE80211_BAND_2GHZ) {
-               rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_BG, &eeprom);
-               offset0 = rt2x00_get_field16(eeprom, EEPROM_RSSI_BG_OFFSET0);
-               offset1 = rt2x00_get_field16(eeprom, EEPROM_RSSI_BG_OFFSET1);
-               rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &eeprom);
-               offset2 = rt2x00_get_field16(eeprom, EEPROM_RSSI_BG2_OFFSET2);
-       } else {
-               rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_A, &eeprom);
-               offset0 = rt2x00_get_field16(eeprom, EEPROM_RSSI_A_OFFSET0);
-               offset1 = rt2x00_get_field16(eeprom, EEPROM_RSSI_A_OFFSET1);
-               rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &eeprom);
-               offset2 = rt2x00_get_field16(eeprom, EEPROM_RSSI_A2_OFFSET2);
-       }
-
-       /*
-        * Convert the value from the descriptor into the RSSI value
-        * If the value in the descriptor is 0, it is considered invalid
-        * and the default (extremely low) rssi value is assumed
-        */
-       rssi0 = (rssi0) ? (-12 - offset0 - rt2x00dev->lna_gain - rssi0) : -128;
-       rssi1 = (rssi1) ? (-12 - offset1 - rt2x00dev->lna_gain - rssi1) : -128;
-       rssi2 = (rssi2) ? (-12 - offset2 - rt2x00dev->lna_gain - rssi2) : -128;
-
-       /*
-        * mac80211 only accepts a single RSSI value. Calculating the
-        * average doesn't deliver a fair answer either since -60:-60 would
-        * be considered equally good as -50:-70 while the second is the one
-        * which gives less energy...
-        */
-       rssi0 = max(rssi0, rssi1);
-       return max(rssi0, rssi2);
-}
-
-void rt2800_process_rxwi(struct queue_entry *entry,
-                        struct rxdone_entry_desc *rxdesc)
-{
-       __le32 *rxwi = (__le32 *) entry->skb->data;
-       u32 word;
-
-       rt2x00_desc_read(rxwi, 0, &word);
-
-       rxdesc->cipher = rt2x00_get_field32(word, RXWI_W0_UDF);
-       rxdesc->size = rt2x00_get_field32(word, RXWI_W0_MPDU_TOTAL_BYTE_COUNT);
-
-       rt2x00_desc_read(rxwi, 1, &word);
-
-       if (rt2x00_get_field32(word, RXWI_W1_SHORT_GI))
-               rxdesc->flags |= RX_FLAG_SHORT_GI;
-
-       if (rt2x00_get_field32(word, RXWI_W1_BW))
-               rxdesc->flags |= RX_FLAG_40MHZ;
-
-       /*
-        * Detect RX rate, always use MCS as signal type.
-        */
-       rxdesc->dev_flags |= RXDONE_SIGNAL_MCS;
-       rxdesc->signal = rt2x00_get_field32(word, RXWI_W1_MCS);
-       rxdesc->rate_mode = rt2x00_get_field32(word, RXWI_W1_PHYMODE);
-
-       /*
-        * Mask of 0x8 bit to remove the short preamble flag.
-        */
-       if (rxdesc->rate_mode == RATE_MODE_CCK)
-               rxdesc->signal &= ~0x8;
-
-       rt2x00_desc_read(rxwi, 2, &word);
-
-       /*
-        * Convert descriptor AGC value to RSSI value.
-        */
-       rxdesc->rssi = rt2800_agc_to_rssi(entry->queue->rt2x00dev, word);
-
-       /*
-        * Remove RXWI descriptor from start of buffer.
-        */
-       skb_pull(entry->skb, RXWI_DESC_SIZE);
-}
-EXPORT_SYMBOL_GPL(rt2800_process_rxwi);
-
-void rt2800_write_beacon(struct queue_entry *entry, struct txentry_desc *txdesc)
-{
-       struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
-       struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb);
-       unsigned int beacon_base;
-       u32 reg;
-
-       /*
-        * Disable beaconing while we are reloading the beacon data,
-        * otherwise we might be sending out invalid data.
-        */
-       rt2800_register_read(rt2x00dev, BCN_TIME_CFG, &reg);
-       rt2x00_set_field32(&reg, BCN_TIME_CFG_BEACON_GEN, 0);
-       rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg);
-
-       /*
-        * Add space for the TXWI in front of the skb.
-        */
-       skb_push(entry->skb, TXWI_DESC_SIZE);
-       memset(entry->skb, 0, TXWI_DESC_SIZE);
-
-       /*
-        * Register descriptor details in skb frame descriptor.
-        */
-       skbdesc->flags |= SKBDESC_DESC_IN_SKB;
-       skbdesc->desc = entry->skb->data;
-       skbdesc->desc_len = TXWI_DESC_SIZE;
-
-       /*
-        * Add the TXWI for the beacon to the skb.
-        */
-       rt2800_write_txwi((__le32 *)entry->skb->data, txdesc);
-
-       /*
-        * Dump beacon to userspace through debugfs.
-        */
-       rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_BEACON, entry->skb);
-
-       /*
-        * Write entire beacon with TXWI to register.
-        */
-       beacon_base = HW_BEACON_OFFSET(entry->entry_idx);
-       rt2800_register_multiwrite(rt2x00dev, beacon_base,
-                                  entry->skb->data, entry->skb->len);
-
-       /*
-        * Enable beaconing again.
-        */
-       rt2x00_set_field32(&reg, BCN_TIME_CFG_TSF_TICKING, 1);
-       rt2x00_set_field32(&reg, BCN_TIME_CFG_TBTT_ENABLE, 1);
-       rt2x00_set_field32(&reg, BCN_TIME_CFG_BEACON_GEN, 1);
-       rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg);
-
-       /*
-        * Clean up beacon skb.
-        */
-       dev_kfree_skb_any(entry->skb);
-       entry->skb = NULL;
-}
-EXPORT_SYMBOL_GPL(rt2800_write_beacon);
-
-static void inline rt2800_clear_beacon(struct rt2x00_dev *rt2x00dev,
-                                      unsigned int beacon_base)
-{
-       int i;
-
-       /*
-        * For the Beacon base registers we only need to clear
-        * the whole TXWI which (when set to 0) will invalidate
-        * the entire beacon.
-        */
-       for (i = 0; i < TXWI_DESC_SIZE; i += sizeof(__le32))
-               rt2800_register_write(rt2x00dev, beacon_base + i, 0);
-}
-
-#ifdef CONFIG_RT2X00_LIB_DEBUGFS
-const struct rt2x00debug rt2800_rt2x00debug = {
-       .owner  = THIS_MODULE,
-       .csr    = {
-               .read           = rt2800_register_read,
-               .write          = rt2800_register_write,
-               .flags          = RT2X00DEBUGFS_OFFSET,
-               .word_base      = CSR_REG_BASE,
-               .word_size      = sizeof(u32),
-               .word_count     = CSR_REG_SIZE / sizeof(u32),
-       },
-       .eeprom = {
-               .read           = rt2x00_eeprom_read,
-               .write          = rt2x00_eeprom_write,
-               .word_base      = EEPROM_BASE,
-               .word_size      = sizeof(u16),
-               .word_count     = EEPROM_SIZE / sizeof(u16),
-       },
-       .bbp    = {
-               .read           = rt2800_bbp_read,
-               .write          = rt2800_bbp_write,
-               .word_base      = BBP_BASE,
-               .word_size      = sizeof(u8),
-               .word_count     = BBP_SIZE / sizeof(u8),
-       },
-       .rf     = {
-               .read           = rt2x00_rf_read,
-               .write          = rt2800_rf_write,
-               .word_base      = RF_BASE,
-               .word_size      = sizeof(u32),
-               .word_count     = RF_SIZE / sizeof(u32),
-       },
-};
-EXPORT_SYMBOL_GPL(rt2800_rt2x00debug);
-#endif /* CONFIG_RT2X00_LIB_DEBUGFS */
-
-int rt2800_rfkill_poll(struct rt2x00_dev *rt2x00dev)
-{
-       u32 reg;
-
-       rt2800_register_read(rt2x00dev, GPIO_CTRL_CFG, &reg);
-       return rt2x00_get_field32(reg, GPIO_CTRL_CFG_BIT2);
-}
-EXPORT_SYMBOL_GPL(rt2800_rfkill_poll);
-
-#ifdef CONFIG_RT2X00_LIB_LEDS
-static void rt2800_brightness_set(struct led_classdev *led_cdev,
-                                 enum led_brightness brightness)
-{
-       struct rt2x00_led *led =
-           container_of(led_cdev, struct rt2x00_led, led_dev);
-       unsigned int enabled = brightness != LED_OFF;
-       unsigned int bg_mode =
-           (enabled && led->rt2x00dev->curr_band == IEEE80211_BAND_2GHZ);
-       unsigned int polarity =
-               rt2x00_get_field16(led->rt2x00dev->led_mcu_reg,
-                                  EEPROM_FREQ_LED_POLARITY);
-       unsigned int ledmode =
-               rt2x00_get_field16(led->rt2x00dev->led_mcu_reg,
-                                  EEPROM_FREQ_LED_MODE);
-
-       if (led->type == LED_TYPE_RADIO) {
-               rt2800_mcu_request(led->rt2x00dev, MCU_LED, 0xff, ledmode,
-                                     enabled ? 0x20 : 0);
-       } else if (led->type == LED_TYPE_ASSOC) {
-               rt2800_mcu_request(led->rt2x00dev, MCU_LED, 0xff, ledmode,
-                                     enabled ? (bg_mode ? 0x60 : 0xa0) : 0x20);
-       } else if (led->type == LED_TYPE_QUALITY) {
-               /*
-                * The brightness is divided into 6 levels (0 - 5),
-                * The specs tell us the following levels:
-                *      0, 1 ,3, 7, 15, 31
-                * to determine the level in a simple way we can simply
-                * work with bitshifting:
-                *      (1 << level) - 1
-                */
-               rt2800_mcu_request(led->rt2x00dev, MCU_LED_STRENGTH, 0xff,
-                                     (1 << brightness / (LED_FULL / 6)) - 1,
-                                     polarity);
-       }
-}
-
-static int rt2800_blink_set(struct led_classdev *led_cdev,
-                           unsigned long *delay_on, unsigned long *delay_off)
-{
-       struct rt2x00_led *led =
-           container_of(led_cdev, struct rt2x00_led, led_dev);
-       u32 reg;
-
-       rt2800_register_read(led->rt2x00dev, LED_CFG, &reg);
-       rt2x00_set_field32(&reg, LED_CFG_ON_PERIOD, *delay_on);
-       rt2x00_set_field32(&reg, LED_CFG_OFF_PERIOD, *delay_off);
-       rt2800_register_write(led->rt2x00dev, LED_CFG, reg);
-
-       return 0;
-}
-
-static void rt2800_init_led(struct rt2x00_dev *rt2x00dev,
-                    struct rt2x00_led *led, enum led_type type)
-{
-       led->rt2x00dev = rt2x00dev;
-       led->type = type;
-       led->led_dev.brightness_set = rt2800_brightness_set;
-       led->led_dev.blink_set = rt2800_blink_set;
-       led->flags = LED_INITIALIZED;
-}
-#endif /* CONFIG_RT2X00_LIB_LEDS */
-
-/*
- * Configuration handlers.
- */
-static void rt2800_config_wcid_attr(struct rt2x00_dev *rt2x00dev,
-                                   struct rt2x00lib_crypto *crypto,
-                                   struct ieee80211_key_conf *key)
-{
-       struct mac_wcid_entry wcid_entry;
-       struct mac_iveiv_entry iveiv_entry;
-       u32 offset;
-       u32 reg;
-
-       offset = MAC_WCID_ATTR_ENTRY(key->hw_key_idx);
-
-       if (crypto->cmd == SET_KEY) {
-               rt2800_register_read(rt2x00dev, offset, &reg);
-               rt2x00_set_field32(&reg, MAC_WCID_ATTRIBUTE_KEYTAB,
-                                  !!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE));
-               /*
-                * Both the cipher as the BSS Idx numbers are split in a main
-                * value of 3 bits, and a extended field for adding one additional
-                * bit to the value.
-                */
-               rt2x00_set_field32(&reg, MAC_WCID_ATTRIBUTE_CIPHER,
-                                  (crypto->cipher & 0x7));
-               rt2x00_set_field32(&reg, MAC_WCID_ATTRIBUTE_CIPHER_EXT,
-                                  (crypto->cipher & 0x8) >> 3);
-               rt2x00_set_field32(&reg, MAC_WCID_ATTRIBUTE_BSS_IDX,
-                                  (crypto->bssidx & 0x7));
-               rt2x00_set_field32(&reg, MAC_WCID_ATTRIBUTE_BSS_IDX_EXT,
-                                  (crypto->bssidx & 0x8) >> 3);
-               rt2x00_set_field32(&reg, MAC_WCID_ATTRIBUTE_RX_WIUDF, crypto->cipher);
-               rt2800_register_write(rt2x00dev, offset, reg);
-       } else {
-               rt2800_register_write(rt2x00dev, offset, 0);
-       }
-
-       offset = MAC_IVEIV_ENTRY(key->hw_key_idx);
-
-       memset(&iveiv_entry, 0, sizeof(iveiv_entry));
-       if ((crypto->cipher == CIPHER_TKIP) ||
-           (crypto->cipher == CIPHER_TKIP_NO_MIC) ||
-           (crypto->cipher == CIPHER_AES))
-               iveiv_entry.iv[3] |= 0x20;
-       iveiv_entry.iv[3] |= key->keyidx << 6;
-       rt2800_register_multiwrite(rt2x00dev, offset,
-                                     &iveiv_entry, sizeof(iveiv_entry));
-
-       offset = MAC_WCID_ENTRY(key->hw_key_idx);
-
-       memset(&wcid_entry, 0, sizeof(wcid_entry));
-       if (crypto->cmd == SET_KEY)
-               memcpy(&wcid_entry, crypto->address, ETH_ALEN);
-       rt2800_register_multiwrite(rt2x00dev, offset,
-                                     &wcid_entry, sizeof(wcid_entry));
-}
-
-int rt2800_config_shared_key(struct rt2x00_dev *rt2x00dev,
-                            struct rt2x00lib_crypto *crypto,
-                            struct ieee80211_key_conf *key)
-{
-       struct hw_key_entry key_entry;
-       struct rt2x00_field32 field;
-       u32 offset;
-       u32 reg;
-
-       if (crypto->cmd == SET_KEY) {
-               key->hw_key_idx = (4 * crypto->bssidx) + key->keyidx;
-
-               memcpy(key_entry.key, crypto->key,
-                      sizeof(key_entry.key));
-               memcpy(key_entry.tx_mic, crypto->tx_mic,
-                      sizeof(key_entry.tx_mic));
-               memcpy(key_entry.rx_mic, crypto->rx_mic,
-                      sizeof(key_entry.rx_mic));
-
-               offset = SHARED_KEY_ENTRY(key->hw_key_idx);
-               rt2800_register_multiwrite(rt2x00dev, offset,
-                                             &key_entry, sizeof(key_entry));
-       }
-
-       /*
-        * The cipher types are stored over multiple registers
-        * starting with SHARED_KEY_MODE_BASE each word will have
-        * 32 bits and contains the cipher types for 2 bssidx each.
-        * Using the correct defines correctly will cause overhead,
-        * so just calculate the correct offset.
-        */
-       field.bit_offset = 4 * (key->hw_key_idx % 8);
-       field.bit_mask = 0x7 << field.bit_offset;
-
-       offset = SHARED_KEY_MODE_ENTRY(key->hw_key_idx / 8);
-
-       rt2800_register_read(rt2x00dev, offset, &reg);
-       rt2x00_set_field32(&reg, field,
-                          (crypto->cmd == SET_KEY) * crypto->cipher);
-       rt2800_register_write(rt2x00dev, offset, reg);
-
-       /*
-        * Update WCID information
-        */
-       rt2800_config_wcid_attr(rt2x00dev, crypto, key);
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(rt2800_config_shared_key);
-
-int rt2800_config_pairwise_key(struct rt2x00_dev *rt2x00dev,
-                              struct rt2x00lib_crypto *crypto,
-                              struct ieee80211_key_conf *key)
-{
-       struct hw_key_entry key_entry;
-       u32 offset;
-
-       if (crypto->cmd == SET_KEY) {
-               /*
-                * 1 pairwise key is possible per AID, this means that the AID
-                * equals our hw_key_idx. Make sure the WCID starts _after_ the
-                * last possible shared key entry.
-                */
-               if (crypto->aid > (256 - 32))
-                       return -ENOSPC;
-
-               key->hw_key_idx = 32 + crypto->aid;
-
-               memcpy(key_entry.key, crypto->key,
-                      sizeof(key_entry.key));
-               memcpy(key_entry.tx_mic, crypto->tx_mic,
-                      sizeof(key_entry.tx_mic));
-               memcpy(key_entry.rx_mic, crypto->rx_mic,
-                      sizeof(key_entry.rx_mic));
-
-               offset = PAIRWISE_KEY_ENTRY(key->hw_key_idx);
-               rt2800_register_multiwrite(rt2x00dev, offset,
-                                             &key_entry, sizeof(key_entry));
-       }
-
-       /*
-        * Update WCID information
-        */
-       rt2800_config_wcid_attr(rt2x00dev, crypto, key);
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(rt2800_config_pairwise_key);
-
-void rt2800_config_filter(struct rt2x00_dev *rt2x00dev,
-                         const unsigned int filter_flags)
-{
-       u32 reg;
-
-       /*
-        * Start configuration steps.
-        * Note that the version error will always be dropped
-        * and broadcast frames will always be accepted since
-        * there is no filter for it at this time.
-        */
-       rt2800_register_read(rt2x00dev, RX_FILTER_CFG, &reg);
-       rt2x00_set_field32(&reg, RX_FILTER_CFG_DROP_CRC_ERROR,
-                          !(filter_flags & FIF_FCSFAIL));
-       rt2x00_set_field32(&reg, RX_FILTER_CFG_DROP_PHY_ERROR,
-                          !(filter_flags & FIF_PLCPFAIL));
-       rt2x00_set_field32(&reg, RX_FILTER_CFG_DROP_NOT_TO_ME,
-                          !(filter_flags & FIF_PROMISC_IN_BSS));
-       rt2x00_set_field32(&reg, RX_FILTER_CFG_DROP_NOT_MY_BSSD, 0);
-       rt2x00_set_field32(&reg, RX_FILTER_CFG_DROP_VER_ERROR, 1);
-       rt2x00_set_field32(&reg, RX_FILTER_CFG_DROP_MULTICAST,
-                          !(filter_flags & FIF_ALLMULTI));
-       rt2x00_set_field32(&reg, RX_FILTER_CFG_DROP_BROADCAST, 0);
-       rt2x00_set_field32(&reg, RX_FILTER_CFG_DROP_DUPLICATE, 1);
-       rt2x00_set_field32(&reg, RX_FILTER_CFG_DROP_CF_END_ACK,
-                          !(filter_flags & FIF_CONTROL));
-       rt2x00_set_field32(&reg, RX_FILTER_CFG_DROP_CF_END,
-                          !(filter_flags & FIF_CONTROL));
-       rt2x00_set_field32(&reg, RX_FILTER_CFG_DROP_ACK,
-                          !(filter_flags & FIF_CONTROL));
-       rt2x00_set_field32(&reg, RX_FILTER_CFG_DROP_CTS,
-                          !(filter_flags & FIF_CONTROL));
-       rt2x00_set_field32(&reg, RX_FILTER_CFG_DROP_RTS,
-                          !(filter_flags & FIF_CONTROL));
-       rt2x00_set_field32(&reg, RX_FILTER_CFG_DROP_PSPOLL,
-                          !(filter_flags & FIF_PSPOLL));
-       rt2x00_set_field32(&reg, RX_FILTER_CFG_DROP_BA, 1);
-       rt2x00_set_field32(&reg, RX_FILTER_CFG_DROP_BAR, 0);
-       rt2x00_set_field32(&reg, RX_FILTER_CFG_DROP_CNTL,
-                          !(filter_flags & FIF_CONTROL));
-       rt2800_register_write(rt2x00dev, RX_FILTER_CFG, reg);
-}
-EXPORT_SYMBOL_GPL(rt2800_config_filter);
-
-void rt2800_config_intf(struct rt2x00_dev *rt2x00dev, struct rt2x00_intf *intf,
-                       struct rt2x00intf_conf *conf, const unsigned int flags)
-{
-       u32 reg;
-
-       if (flags & CONFIG_UPDATE_TYPE) {
-               /*
-                * Clear current synchronisation setup.
-                */
-               rt2800_clear_beacon(rt2x00dev,
-                                   HW_BEACON_OFFSET(intf->beacon->entry_idx));
-               /*
-                * Enable synchronisation.
-                */
-               rt2800_register_read(rt2x00dev, BCN_TIME_CFG, &reg);
-               rt2x00_set_field32(&reg, BCN_TIME_CFG_TSF_TICKING, 1);
-               rt2x00_set_field32(&reg, BCN_TIME_CFG_TSF_SYNC, conf->sync);
-               rt2x00_set_field32(&reg, BCN_TIME_CFG_TBTT_ENABLE,
-                                  (conf->sync == TSF_SYNC_ADHOC ||
-                                   conf->sync == TSF_SYNC_AP_NONE));
-               rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg);
-
-               /*
-                * Enable pre tbtt interrupt for beaconing modes
-                */
-               rt2800_register_read(rt2x00dev, INT_TIMER_EN, &reg);
-               rt2x00_set_field32(&reg, INT_TIMER_EN_PRE_TBTT_TIMER,
-                                  (conf->sync == TSF_SYNC_AP_NONE));
-               rt2800_register_write(rt2x00dev, INT_TIMER_EN, reg);
-
-       }
-
-       if (flags & CONFIG_UPDATE_MAC) {
-               reg = le32_to_cpu(conf->mac[1]);
-               rt2x00_set_field32(&reg, MAC_ADDR_DW1_UNICAST_TO_ME_MASK, 0xff);
-               conf->mac[1] = cpu_to_le32(reg);
-
-               rt2800_register_multiwrite(rt2x00dev, MAC_ADDR_DW0,
-                                             conf->mac, sizeof(conf->mac));
-       }
-
-       if (flags & CONFIG_UPDATE_BSSID) {
-               reg = le32_to_cpu(conf->bssid[1]);
-               rt2x00_set_field32(&reg, MAC_BSSID_DW1_BSS_ID_MASK, 3);
-               rt2x00_set_field32(&reg, MAC_BSSID_DW1_BSS_BCN_NUM, 7);
-               conf->bssid[1] = cpu_to_le32(reg);
-
-               rt2800_register_multiwrite(rt2x00dev, MAC_BSSID_DW0,
-                                             conf->bssid, sizeof(conf->bssid));
-       }
-}
-EXPORT_SYMBOL_GPL(rt2800_config_intf);
-
-void rt2800_config_erp(struct rt2x00_dev *rt2x00dev, struct rt2x00lib_erp *erp)
-{
-       u32 reg;
-
-       rt2800_register_read(rt2x00dev, AUTO_RSP_CFG, &reg);
-       rt2x00_set_field32(&reg, AUTO_RSP_CFG_BAC_ACK_POLICY,
-                          !!erp->short_preamble);
-       rt2x00_set_field32(&reg, AUTO_RSP_CFG_AR_PREAMBLE,
-                          !!erp->short_preamble);
-       rt2800_register_write(rt2x00dev, AUTO_RSP_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, OFDM_PROT_CFG, &reg);
-       rt2x00_set_field32(&reg, OFDM_PROT_CFG_PROTECT_CTRL,
-                          erp->cts_protection ? 2 : 0);
-       rt2800_register_write(rt2x00dev, OFDM_PROT_CFG, reg);
-
-       rt2800_register_write(rt2x00dev, LEGACY_BASIC_RATE,
-                                erp->basic_rates);
-       rt2800_register_write(rt2x00dev, HT_BASIC_RATE, 0x00008003);
-
-       rt2800_register_read(rt2x00dev, BKOFF_SLOT_CFG, &reg);
-       rt2x00_set_field32(&reg, BKOFF_SLOT_CFG_SLOT_TIME, erp->slot_time);
-       rt2800_register_write(rt2x00dev, BKOFF_SLOT_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, XIFS_TIME_CFG, &reg);
-       rt2x00_set_field32(&reg, XIFS_TIME_CFG_EIFS, erp->eifs);
-       rt2800_register_write(rt2x00dev, XIFS_TIME_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, BCN_TIME_CFG, &reg);
-       rt2x00_set_field32(&reg, BCN_TIME_CFG_BEACON_INTERVAL,
-                          erp->beacon_int * 16);
-       rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg);
-}
-EXPORT_SYMBOL_GPL(rt2800_config_erp);
-
-void rt2800_config_ant(struct rt2x00_dev *rt2x00dev, struct antenna_setup *ant)
-{
-       u8 r1;
-       u8 r3;
-
-       rt2800_bbp_read(rt2x00dev, 1, &r1);
-       rt2800_bbp_read(rt2x00dev, 3, &r3);
-
-       /*
-        * Configure the TX antenna.
-        */
-       switch ((int)ant->tx) {
-       case 1:
-               rt2x00_set_field8(&r1, BBP1_TX_ANTENNA, 0);
-               break;
-       case 2:
-               rt2x00_set_field8(&r1, BBP1_TX_ANTENNA, 2);
-               break;
-       case 3:
-               rt2x00_set_field8(&r1, BBP1_TX_ANTENNA, 0);
-               break;
-       }
-
-       /*
-        * Configure the RX antenna.
-        */
-       switch ((int)ant->rx) {
-       case 1:
-               rt2x00_set_field8(&r3, BBP3_RX_ANTENNA, 0);
-               break;
-       case 2:
-               rt2x00_set_field8(&r3, BBP3_RX_ANTENNA, 1);
-               break;
-       case 3:
-               rt2x00_set_field8(&r3, BBP3_RX_ANTENNA, 2);
-               break;
-       }
-
-       rt2800_bbp_write(rt2x00dev, 3, r3);
-       rt2800_bbp_write(rt2x00dev, 1, r1);
-}
-EXPORT_SYMBOL_GPL(rt2800_config_ant);
-
-static void rt2800_config_lna_gain(struct rt2x00_dev *rt2x00dev,
-                                  struct rt2x00lib_conf *libconf)
-{
-       u16 eeprom;
-       short lna_gain;
-
-       if (libconf->rf.channel <= 14) {
-               rt2x00_eeprom_read(rt2x00dev, EEPROM_LNA, &eeprom);
-               lna_gain = rt2x00_get_field16(eeprom, EEPROM_LNA_BG);
-       } else if (libconf->rf.channel <= 64) {
-               rt2x00_eeprom_read(rt2x00dev, EEPROM_LNA, &eeprom);
-               lna_gain = rt2x00_get_field16(eeprom, EEPROM_LNA_A0);
-       } else if (libconf->rf.channel <= 128) {
-               rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &eeprom);
-               lna_gain = rt2x00_get_field16(eeprom, EEPROM_RSSI_BG2_LNA_A1);
-       } else {
-               rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &eeprom);
-               lna_gain = rt2x00_get_field16(eeprom, EEPROM_RSSI_A2_LNA_A2);
-       }
-
-       rt2x00dev->lna_gain = lna_gain;
-}
-
-static void rt2800_config_channel_rf2xxx(struct rt2x00_dev *rt2x00dev,
-                                        struct ieee80211_conf *conf,
-                                        struct rf_channel *rf,
-                                        struct channel_info *info)
-{
-       rt2x00_set_field32(&rf->rf4, RF4_FREQ_OFFSET, rt2x00dev->freq_offset);
-
-       if (rt2x00dev->default_ant.tx == 1)
-               rt2x00_set_field32(&rf->rf2, RF2_ANTENNA_TX1, 1);
-
-       if (rt2x00dev->default_ant.rx == 1) {
-               rt2x00_set_field32(&rf->rf2, RF2_ANTENNA_RX1, 1);
-               rt2x00_set_field32(&rf->rf2, RF2_ANTENNA_RX2, 1);
-       } else if (rt2x00dev->default_ant.rx == 2)
-               rt2x00_set_field32(&rf->rf2, RF2_ANTENNA_RX2, 1);
-
-       if (rf->channel > 14) {
-               /*
-                * When TX power is below 0, we should increase it by 7 to
-                * make it a positive value (Minumum value is -7).
-                * However this means that values between 0 and 7 have
-                * double meaning, and we should set a 7DBm boost flag.
-                */
-               rt2x00_set_field32(&rf->rf3, RF3_TXPOWER_A_7DBM_BOOST,
-                                  (info->default_power1 >= 0));
-
-               if (info->default_power1 < 0)
-                       info->default_power1 += 7;
-
-               rt2x00_set_field32(&rf->rf3, RF3_TXPOWER_A,
-                                  TXPOWER_A_TO_DEV(info->default_power1));
-
-               rt2x00_set_field32(&rf->rf4, RF4_TXPOWER_A_7DBM_BOOST,
-                                  (info->default_power2 >= 0));
-
-               if (info->default_power2 < 0)
-                       info->default_power2 += 7;
-
-               rt2x00_set_field32(&rf->rf4, RF4_TXPOWER_A,
-                                  TXPOWER_A_TO_DEV(info->default_power2));
-       } else {
-               rt2x00_set_field32(&rf->rf3, RF3_TXPOWER_G,
-                                  TXPOWER_G_TO_DEV(info->default_power1));
-               rt2x00_set_field32(&rf->rf4, RF4_TXPOWER_G,
-                                  TXPOWER_G_TO_DEV(info->default_power2));
-       }
-
-       rt2x00_set_field32(&rf->rf4, RF4_HT40, conf_is_ht40(conf));
-
-       rt2800_rf_write(rt2x00dev, 1, rf->rf1);
-       rt2800_rf_write(rt2x00dev, 2, rf->rf2);
-       rt2800_rf_write(rt2x00dev, 3, rf->rf3 & ~0x00000004);
-       rt2800_rf_write(rt2x00dev, 4, rf->rf4);
-
-       udelay(200);
-
-       rt2800_rf_write(rt2x00dev, 1, rf->rf1);
-       rt2800_rf_write(rt2x00dev, 2, rf->rf2);
-       rt2800_rf_write(rt2x00dev, 3, rf->rf3 | 0x00000004);
-       rt2800_rf_write(rt2x00dev, 4, rf->rf4);
-
-       udelay(200);
-
-       rt2800_rf_write(rt2x00dev, 1, rf->rf1);
-       rt2800_rf_write(rt2x00dev, 2, rf->rf2);
-       rt2800_rf_write(rt2x00dev, 3, rf->rf3 & ~0x00000004);
-       rt2800_rf_write(rt2x00dev, 4, rf->rf4);
-}
-
-static void rt2800_config_channel_rf3xxx(struct rt2x00_dev *rt2x00dev,
-                                        struct ieee80211_conf *conf,
-                                        struct rf_channel *rf,
-                                        struct channel_info *info)
-{
-       u8 rfcsr;
-
-       rt2800_rfcsr_write(rt2x00dev, 2, rf->rf1);
-       rt2800_rfcsr_write(rt2x00dev, 3, rf->rf3);
-
-       rt2800_rfcsr_read(rt2x00dev, 6, &rfcsr);
-       rt2x00_set_field8(&rfcsr, RFCSR6_R1, rf->rf2);
-       rt2800_rfcsr_write(rt2x00dev, 6, rfcsr);
-
-       rt2800_rfcsr_read(rt2x00dev, 12, &rfcsr);
-       rt2x00_set_field8(&rfcsr, RFCSR12_TX_POWER, info->default_power1);
-       rt2800_rfcsr_write(rt2x00dev, 12, rfcsr);
-
-       rt2800_rfcsr_read(rt2x00dev, 13, &rfcsr);
-       rt2x00_set_field8(&rfcsr, RFCSR13_TX_POWER, info->default_power2);
-       rt2800_rfcsr_write(rt2x00dev, 13, rfcsr);
-
-       rt2800_rfcsr_read(rt2x00dev, 23, &rfcsr);
-       rt2x00_set_field8(&rfcsr, RFCSR23_FREQ_OFFSET, rt2x00dev->freq_offset);
-       rt2800_rfcsr_write(rt2x00dev, 23, rfcsr);
-
-       rt2800_rfcsr_write(rt2x00dev, 24,
-                             rt2x00dev->calibration[conf_is_ht40(conf)]);
-
-       rt2800_rfcsr_read(rt2x00dev, 7, &rfcsr);
-       rt2x00_set_field8(&rfcsr, RFCSR7_RF_TUNING, 1);
-       rt2800_rfcsr_write(rt2x00dev, 7, rfcsr);
-}
-
-static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
-                                 struct ieee80211_conf *conf,
-                                 struct rf_channel *rf,
-                                 struct channel_info *info)
-{
-       u32 reg;
-       unsigned int tx_pin;
-       u8 bbp;
-
-       if (rt2x00_rf(rt2x00dev, RF2020) ||
-           rt2x00_rf(rt2x00dev, RF3020) ||
-           rt2x00_rf(rt2x00dev, RF3021) ||
-           rt2x00_rf(rt2x00dev, RF3022))
-               rt2800_config_channel_rf3xxx(rt2x00dev, conf, rf, info);
-       else
-               rt2800_config_channel_rf2xxx(rt2x00dev, conf, rf, info);
-
-       /*
-        * Change BBP settings
-        */
-       rt2800_bbp_write(rt2x00dev, 62, 0x37 - rt2x00dev->lna_gain);
-       rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain);
-       rt2800_bbp_write(rt2x00dev, 64, 0x37 - rt2x00dev->lna_gain);
-       rt2800_bbp_write(rt2x00dev, 86, 0);
-
-       if (rf->channel <= 14) {
-               if (test_bit(CONFIG_EXTERNAL_LNA_BG, &rt2x00dev->flags)) {
-                       rt2800_bbp_write(rt2x00dev, 82, 0x62);
-                       rt2800_bbp_write(rt2x00dev, 75, 0x46);
-               } else {
-                       rt2800_bbp_write(rt2x00dev, 82, 0x84);
-                       rt2800_bbp_write(rt2x00dev, 75, 0x50);
-               }
-       } else {
-               rt2800_bbp_write(rt2x00dev, 82, 0xf2);
-
-               if (test_bit(CONFIG_EXTERNAL_LNA_A, &rt2x00dev->flags))
-                       rt2800_bbp_write(rt2x00dev, 75, 0x46);
-               else
-                       rt2800_bbp_write(rt2x00dev, 75, 0x50);
-       }
-
-       rt2800_register_read(rt2x00dev, TX_BAND_CFG, &reg);
-       rt2x00_set_field32(&reg, TX_BAND_CFG_HT40_MINUS, conf_is_ht40_minus(conf));
-       rt2x00_set_field32(&reg, TX_BAND_CFG_A, rf->channel > 14);
-       rt2x00_set_field32(&reg, TX_BAND_CFG_BG, rf->channel <= 14);
-       rt2800_register_write(rt2x00dev, TX_BAND_CFG, reg);
-
-       tx_pin = 0;
-
-       /* Turn on unused PA or LNA when not using 1T or 1R */
-       if (rt2x00dev->default_ant.tx != 1) {
-               rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_A1_EN, 1);
-               rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_G1_EN, 1);
-       }
-
-       /* Turn on unused PA or LNA when not using 1T or 1R */
-       if (rt2x00dev->default_ant.rx != 1) {
-               rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A1_EN, 1);
-               rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G1_EN, 1);
-       }
-
-       rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_A0_EN, 1);
-       rt2x00_set_field32(&tx_pin, TX_PIN_CFG_LNA_PE_G0_EN, 1);
-       rt2x00_set_field32(&tx_pin, TX_PIN_CFG_RFTR_EN, 1);
-       rt2x00_set_field32(&tx_pin, TX_PIN_CFG_TRSW_EN, 1);
-       rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_G0_EN, rf->channel <= 14);
-       rt2x00_set_field32(&tx_pin, TX_PIN_CFG_PA_PE_A0_EN, rf->channel > 14);
-
-       rt2800_register_write(rt2x00dev, TX_PIN_CFG, tx_pin);
-
-       rt2800_bbp_read(rt2x00dev, 4, &bbp);
-       rt2x00_set_field8(&bbp, BBP4_BANDWIDTH, 2 * conf_is_ht40(conf));
-       rt2800_bbp_write(rt2x00dev, 4, bbp);
-
-       rt2800_bbp_read(rt2x00dev, 3, &bbp);
-       rt2x00_set_field8(&bbp, BBP3_HT40_MINUS, conf_is_ht40_minus(conf));
-       rt2800_bbp_write(rt2x00dev, 3, bbp);
-
-       if (rt2x00_rt_rev(rt2x00dev, RT2860, REV_RT2860C)) {
-               if (conf_is_ht40(conf)) {
-                       rt2800_bbp_write(rt2x00dev, 69, 0x1a);
-                       rt2800_bbp_write(rt2x00dev, 70, 0x0a);
-                       rt2800_bbp_write(rt2x00dev, 73, 0x16);
-               } else {
-                       rt2800_bbp_write(rt2x00dev, 69, 0x16);
-                       rt2800_bbp_write(rt2x00dev, 70, 0x08);
-                       rt2800_bbp_write(rt2x00dev, 73, 0x11);
-               }
-       }
-
-       msleep(1);
-}
-
-static void rt2800_config_txpower(struct rt2x00_dev *rt2x00dev,
-                                 const int max_txpower)
-{
-       u8 txpower;
-       u8 max_value = (u8)max_txpower;
-       u16 eeprom;
-       int i;
-       u32 reg;
-       u8 r1;
-       u32 offset;
-
-       /*
-        * set to normal tx power mode: +/- 0dBm
-        */
-       rt2800_bbp_read(rt2x00dev, 1, &r1);
-       rt2x00_set_field8(&r1, BBP1_TX_POWER, 0);
-       rt2800_bbp_write(rt2x00dev, 1, r1);
-
-       /*
-        * The eeprom contains the tx power values for each rate. These
-        * values map to 100% tx power. Each 16bit word contains four tx
-        * power values and the order is the same as used in the TX_PWR_CFG
-        * registers.
-        */
-       offset = TX_PWR_CFG_0;
-
-       for (i = 0; i < EEPROM_TXPOWER_BYRATE_SIZE; i += 2) {
-               /* just to be safe */
-               if (offset > TX_PWR_CFG_4)
-                       break;
-
-               rt2800_register_read(rt2x00dev, offset, &reg);
-
-               /* read the next four txpower values */
-               rt2x00_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + i,
-                                  &eeprom);
-
-               /* TX_PWR_CFG_0: 1MBS, TX_PWR_CFG_1: 24MBS,
-                * TX_PWR_CFG_2: MCS4, TX_PWR_CFG_3: MCS12,
-                * TX_PWR_CFG_4: unknown */
-               txpower = rt2x00_get_field16(eeprom,
-                                            EEPROM_TXPOWER_BYRATE_RATE0);
-               rt2x00_set_field32(&reg, TX_PWR_CFG_RATE0,
-                                  min(txpower, max_value));
-
-               /* TX_PWR_CFG_0: 2MBS, TX_PWR_CFG_1: 36MBS,
-                * TX_PWR_CFG_2: MCS5, TX_PWR_CFG_3: MCS13,
-                * TX_PWR_CFG_4: unknown */
-               txpower = rt2x00_get_field16(eeprom,
-                                            EEPROM_TXPOWER_BYRATE_RATE1);
-               rt2x00_set_field32(&reg, TX_PWR_CFG_RATE1,
-                                  min(txpower, max_value));
-
-               /* TX_PWR_CFG_0: 55MBS, TX_PWR_CFG_1: 48MBS,
-                * TX_PWR_CFG_2: MCS6,  TX_PWR_CFG_3: MCS14,
-                * TX_PWR_CFG_4: unknown */
-               txpower = rt2x00_get_field16(eeprom,
-                                            EEPROM_TXPOWER_BYRATE_RATE2);
-               rt2x00_set_field32(&reg, TX_PWR_CFG_RATE2,
-                                  min(txpower, max_value));
-
-               /* TX_PWR_CFG_0: 11MBS, TX_PWR_CFG_1: 54MBS,
-                * TX_PWR_CFG_2: MCS7,  TX_PWR_CFG_3: MCS15,
-                * TX_PWR_CFG_4: unknown */
-               txpower = rt2x00_get_field16(eeprom,
-                                            EEPROM_TXPOWER_BYRATE_RATE3);
-               rt2x00_set_field32(&reg, TX_PWR_CFG_RATE3,
-                                  min(txpower, max_value));
-
-               /* read the next four txpower values */
-               rt2x00_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + i + 1,
-                                  &eeprom);
-
-               /* TX_PWR_CFG_0: 6MBS, TX_PWR_CFG_1: MCS0,
-                * TX_PWR_CFG_2: MCS8, TX_PWR_CFG_3: unknown,
-                * TX_PWR_CFG_4: unknown */
-               txpower = rt2x00_get_field16(eeprom,
-                                            EEPROM_TXPOWER_BYRATE_RATE0);
-               rt2x00_set_field32(&reg, TX_PWR_CFG_RATE4,
-                                  min(txpower, max_value));
-
-               /* TX_PWR_CFG_0: 9MBS, TX_PWR_CFG_1: MCS1,
-                * TX_PWR_CFG_2: MCS9, TX_PWR_CFG_3: unknown,
-                * TX_PWR_CFG_4: unknown */
-               txpower = rt2x00_get_field16(eeprom,
-                                            EEPROM_TXPOWER_BYRATE_RATE1);
-               rt2x00_set_field32(&reg, TX_PWR_CFG_RATE5,
-                                  min(txpower, max_value));
-
-               /* TX_PWR_CFG_0: 12MBS, TX_PWR_CFG_1: MCS2,
-                * TX_PWR_CFG_2: MCS10, TX_PWR_CFG_3: unknown,
-                * TX_PWR_CFG_4: unknown */
-               txpower = rt2x00_get_field16(eeprom,
-                                            EEPROM_TXPOWER_BYRATE_RATE2);
-               rt2x00_set_field32(&reg, TX_PWR_CFG_RATE6,
-                                  min(txpower, max_value));
-
-               /* TX_PWR_CFG_0: 18MBS, TX_PWR_CFG_1: MCS3,
-                * TX_PWR_CFG_2: MCS11, TX_PWR_CFG_3: unknown,
-                * TX_PWR_CFG_4: unknown */
-               txpower = rt2x00_get_field16(eeprom,
-                                            EEPROM_TXPOWER_BYRATE_RATE3);
-               rt2x00_set_field32(&reg, TX_PWR_CFG_RATE7,
-                                  min(txpower, max_value));
-
-               rt2800_register_write(rt2x00dev, offset, reg);
-
-               /* next TX_PWR_CFG register */
-               offset += 4;
-       }
-}
-
-static void rt2800_config_retry_limit(struct rt2x00_dev *rt2x00dev,
-                                     struct rt2x00lib_conf *libconf)
-{
-       u32 reg;
-
-       rt2800_register_read(rt2x00dev, TX_RTY_CFG, &reg);
-       rt2x00_set_field32(&reg, TX_RTY_CFG_SHORT_RTY_LIMIT,
-                          libconf->conf->short_frame_max_tx_count);
-       rt2x00_set_field32(&reg, TX_RTY_CFG_LONG_RTY_LIMIT,
-                          libconf->conf->long_frame_max_tx_count);
-       rt2800_register_write(rt2x00dev, TX_RTY_CFG, reg);
-}
-
-static void rt2800_config_ps(struct rt2x00_dev *rt2x00dev,
-                            struct rt2x00lib_conf *libconf)
-{
-       enum dev_state state =
-           (libconf->conf->flags & IEEE80211_CONF_PS) ?
-               STATE_SLEEP : STATE_AWAKE;
-       u32 reg;
-
-       if (state == STATE_SLEEP) {
-               rt2800_register_write(rt2x00dev, AUTOWAKEUP_CFG, 0);
-
-               rt2800_register_read(rt2x00dev, AUTOWAKEUP_CFG, &reg);
-               rt2x00_set_field32(&reg, AUTOWAKEUP_CFG_AUTO_LEAD_TIME, 5);
-               rt2x00_set_field32(&reg, AUTOWAKEUP_CFG_TBCN_BEFORE_WAKE,
-                                  libconf->conf->listen_interval - 1);
-               rt2x00_set_field32(&reg, AUTOWAKEUP_CFG_AUTOWAKE, 1);
-               rt2800_register_write(rt2x00dev, AUTOWAKEUP_CFG, reg);
-
-               rt2x00dev->ops->lib->set_device_state(rt2x00dev, state);
-       } else {
-               rt2800_register_read(rt2x00dev, AUTOWAKEUP_CFG, &reg);
-               rt2x00_set_field32(&reg, AUTOWAKEUP_CFG_AUTO_LEAD_TIME, 0);
-               rt2x00_set_field32(&reg, AUTOWAKEUP_CFG_TBCN_BEFORE_WAKE, 0);
-               rt2x00_set_field32(&reg, AUTOWAKEUP_CFG_AUTOWAKE, 0);
-               rt2800_register_write(rt2x00dev, AUTOWAKEUP_CFG, reg);
-
-               rt2x00dev->ops->lib->set_device_state(rt2x00dev, state);
-       }
-}
-
-void rt2800_config(struct rt2x00_dev *rt2x00dev,
-                  struct rt2x00lib_conf *libconf,
-                  const unsigned int flags)
-{
-       /* Always recalculate LNA gain before changing configuration */
-       rt2800_config_lna_gain(rt2x00dev, libconf);
-
-       if (flags & IEEE80211_CONF_CHANGE_CHANNEL)
-               rt2800_config_channel(rt2x00dev, libconf->conf,
-                                     &libconf->rf, &libconf->channel);
-       if (flags & IEEE80211_CONF_CHANGE_POWER)
-               rt2800_config_txpower(rt2x00dev, libconf->conf->power_level);
-       if (flags & IEEE80211_CONF_CHANGE_RETRY_LIMITS)
-               rt2800_config_retry_limit(rt2x00dev, libconf);
-       if (flags & IEEE80211_CONF_CHANGE_PS)
-               rt2800_config_ps(rt2x00dev, libconf);
-}
-EXPORT_SYMBOL_GPL(rt2800_config);
-
-/*
- * Link tuning
- */
-void rt2800_link_stats(struct rt2x00_dev *rt2x00dev, struct link_qual *qual)
-{
-       u32 reg;
-
-       /*
-        * Update FCS error count from register.
-        */
-       rt2800_register_read(rt2x00dev, RX_STA_CNT0, &reg);
-       qual->rx_failed = rt2x00_get_field32(reg, RX_STA_CNT0_CRC_ERR);
-}
-EXPORT_SYMBOL_GPL(rt2800_link_stats);
-
-static u8 rt2800_get_default_vgc(struct rt2x00_dev *rt2x00dev)
-{
-       if (rt2x00dev->curr_band == IEEE80211_BAND_2GHZ) {
-               if (rt2x00_rt(rt2x00dev, RT3070) ||
-                   rt2x00_rt(rt2x00dev, RT3071) ||
-                   rt2x00_rt(rt2x00dev, RT3090) ||
-                   rt2x00_rt(rt2x00dev, RT3390))
-                       return 0x1c + (2 * rt2x00dev->lna_gain);
-               else
-                       return 0x2e + rt2x00dev->lna_gain;
-       }
-
-       if (!test_bit(CONFIG_CHANNEL_HT40, &rt2x00dev->flags))
-               return 0x32 + (rt2x00dev->lna_gain * 5) / 3;
-       else
-               return 0x3a + (rt2x00dev->lna_gain * 5) / 3;
-}
-
-static inline void rt2800_set_vgc(struct rt2x00_dev *rt2x00dev,
-                                 struct link_qual *qual, u8 vgc_level)
-{
-       if (qual->vgc_level != vgc_level) {
-               rt2800_bbp_write(rt2x00dev, 66, vgc_level);
-               qual->vgc_level = vgc_level;
-               qual->vgc_level_reg = vgc_level;
-       }
-}
-
-void rt2800_reset_tuner(struct rt2x00_dev *rt2x00dev, struct link_qual *qual)
-{
-       rt2800_set_vgc(rt2x00dev, qual, rt2800_get_default_vgc(rt2x00dev));
-}
-EXPORT_SYMBOL_GPL(rt2800_reset_tuner);
-
-void rt2800_link_tuner(struct rt2x00_dev *rt2x00dev, struct link_qual *qual,
-                      const u32 count)
-{
-       if (rt2x00_rt_rev(rt2x00dev, RT2860, REV_RT2860C))
-               return;
-
-       /*
-        * When RSSI is better then -80 increase VGC level with 0x10
-        */
-       rt2800_set_vgc(rt2x00dev, qual,
-                      rt2800_get_default_vgc(rt2x00dev) +
-                      ((qual->rssi > -80) * 0x10));
-}
-EXPORT_SYMBOL_GPL(rt2800_link_tuner);
-
-/*
- * Initialization functions.
- */
-int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)
-{
-       u32 reg;
-       u16 eeprom;
-       unsigned int i;
-       int ret;
-
-       rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_DMA_BUSY, 0);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_RX_DMA_BUSY, 0);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 1);
-       rt2800_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
-
-       ret = rt2800_drv_init_registers(rt2x00dev);
-       if (ret)
-               return ret;
-
-       rt2800_register_read(rt2x00dev, BCN_OFFSET0, &reg);
-       rt2x00_set_field32(&reg, BCN_OFFSET0_BCN0, 0xe0); /* 0x3800 */
-       rt2x00_set_field32(&reg, BCN_OFFSET0_BCN1, 0xe8); /* 0x3a00 */
-       rt2x00_set_field32(&reg, BCN_OFFSET0_BCN2, 0xf0); /* 0x3c00 */
-       rt2x00_set_field32(&reg, BCN_OFFSET0_BCN3, 0xf8); /* 0x3e00 */
-       rt2800_register_write(rt2x00dev, BCN_OFFSET0, reg);
-
-       rt2800_register_read(rt2x00dev, BCN_OFFSET1, &reg);
-       rt2x00_set_field32(&reg, BCN_OFFSET1_BCN4, 0xc8); /* 0x3200 */
-       rt2x00_set_field32(&reg, BCN_OFFSET1_BCN5, 0xd0); /* 0x3400 */
-       rt2x00_set_field32(&reg, BCN_OFFSET1_BCN6, 0x77); /* 0x1dc0 */
-       rt2x00_set_field32(&reg, BCN_OFFSET1_BCN7, 0x6f); /* 0x1bc0 */
-       rt2800_register_write(rt2x00dev, BCN_OFFSET1, reg);
-
-       rt2800_register_write(rt2x00dev, LEGACY_BASIC_RATE, 0x0000013f);
-       rt2800_register_write(rt2x00dev, HT_BASIC_RATE, 0x00008003);
-
-       rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, 0x00000000);
-
-       rt2800_register_read(rt2x00dev, BCN_TIME_CFG, &reg);
-       rt2x00_set_field32(&reg, BCN_TIME_CFG_BEACON_INTERVAL, 1600);
-       rt2x00_set_field32(&reg, BCN_TIME_CFG_TSF_TICKING, 0);
-       rt2x00_set_field32(&reg, BCN_TIME_CFG_TSF_SYNC, 0);
-       rt2x00_set_field32(&reg, BCN_TIME_CFG_TBTT_ENABLE, 0);
-       rt2x00_set_field32(&reg, BCN_TIME_CFG_BEACON_GEN, 0);
-       rt2x00_set_field32(&reg, BCN_TIME_CFG_TX_TIME_COMPENSATE, 0);
-       rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg);
-
-       rt2800_config_filter(rt2x00dev, FIF_ALLMULTI);
-
-       rt2800_register_read(rt2x00dev, BKOFF_SLOT_CFG, &reg);
-       rt2x00_set_field32(&reg, BKOFF_SLOT_CFG_SLOT_TIME, 9);
-       rt2x00_set_field32(&reg, BKOFF_SLOT_CFG_CC_DELAY_TIME, 2);
-       rt2800_register_write(rt2x00dev, BKOFF_SLOT_CFG, reg);
-
-       if (rt2x00_rt(rt2x00dev, RT3071) ||
-           rt2x00_rt(rt2x00dev, RT3090) ||
-           rt2x00_rt(rt2x00dev, RT3390)) {
-               rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000400);
-               rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00000000);
-               if (rt2x00_rt_rev_lt(rt2x00dev, RT3071, REV_RT3071E) ||
-                   rt2x00_rt_rev_lt(rt2x00dev, RT3090, REV_RT3090E) ||
-                   rt2x00_rt_rev_lt(rt2x00dev, RT3390, REV_RT3390E)) {
-                       rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC, &eeprom);
-                       if (rt2x00_get_field16(eeprom, EEPROM_NIC_DAC_TEST))
-                               rt2800_register_write(rt2x00dev, TX_SW_CFG2,
-                                                     0x0000002c);
-                       else
-                               rt2800_register_write(rt2x00dev, TX_SW_CFG2,
-                                                     0x0000000f);
-               } else {
-                       rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000);
-               }
-       } else if (rt2x00_rt(rt2x00dev, RT3070)) {
-               rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000400);
-
-               if (rt2x00_rt_rev_lt(rt2x00dev, RT3070, REV_RT3070F)) {
-                       rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00000000);
-                       rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x0000002c);
-               } else {
-                       rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606);
-                       rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000);
-               }
-       } else if (rt2800_is_305x_soc(rt2x00dev)) {
-               rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000400);
-               rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00000000);
-               rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x0000001f);
-       } else {
-               rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000000);
-               rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606);
-       }
-
-       rt2800_register_read(rt2x00dev, TX_LINK_CFG, &reg);
-       rt2x00_set_field32(&reg, TX_LINK_CFG_REMOTE_MFB_LIFETIME, 32);
-       rt2x00_set_field32(&reg, TX_LINK_CFG_MFB_ENABLE, 0);
-       rt2x00_set_field32(&reg, TX_LINK_CFG_REMOTE_UMFS_ENABLE, 0);
-       rt2x00_set_field32(&reg, TX_LINK_CFG_TX_MRQ_EN, 0);
-       rt2x00_set_field32(&reg, TX_LINK_CFG_TX_RDG_EN, 0);
-       rt2x00_set_field32(&reg, TX_LINK_CFG_TX_CF_ACK_EN, 1);
-       rt2x00_set_field32(&reg, TX_LINK_CFG_REMOTE_MFB, 0);
-       rt2x00_set_field32(&reg, TX_LINK_CFG_REMOTE_MFS, 0);
-       rt2800_register_write(rt2x00dev, TX_LINK_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, TX_TIMEOUT_CFG, &reg);
-       rt2x00_set_field32(&reg, TX_TIMEOUT_CFG_MPDU_LIFETIME, 9);
-       rt2x00_set_field32(&reg, TX_TIMEOUT_CFG_RX_ACK_TIMEOUT, 32);
-       rt2x00_set_field32(&reg, TX_TIMEOUT_CFG_TX_OP_TIMEOUT, 10);
-       rt2800_register_write(rt2x00dev, TX_TIMEOUT_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, MAX_LEN_CFG, &reg);
-       rt2x00_set_field32(&reg, MAX_LEN_CFG_MAX_MPDU, AGGREGATION_SIZE);
-       if (rt2x00_rt_rev_gte(rt2x00dev, RT2872, REV_RT2872E) ||
-           rt2x00_rt(rt2x00dev, RT2883) ||
-           rt2x00_rt_rev_lt(rt2x00dev, RT3070, REV_RT3070E))
-               rt2x00_set_field32(&reg, MAX_LEN_CFG_MAX_PSDU, 2);
-       else
-               rt2x00_set_field32(&reg, MAX_LEN_CFG_MAX_PSDU, 1);
-       rt2x00_set_field32(&reg, MAX_LEN_CFG_MIN_PSDU, 0);
-       rt2x00_set_field32(&reg, MAX_LEN_CFG_MIN_MPDU, 0);
-       rt2800_register_write(rt2x00dev, MAX_LEN_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, LED_CFG, &reg);
-       rt2x00_set_field32(&reg, LED_CFG_ON_PERIOD, 70);
-       rt2x00_set_field32(&reg, LED_CFG_OFF_PERIOD, 30);
-       rt2x00_set_field32(&reg, LED_CFG_SLOW_BLINK_PERIOD, 3);
-       rt2x00_set_field32(&reg, LED_CFG_R_LED_MODE, 3);
-       rt2x00_set_field32(&reg, LED_CFG_G_LED_MODE, 3);
-       rt2x00_set_field32(&reg, LED_CFG_Y_LED_MODE, 3);
-       rt2x00_set_field32(&reg, LED_CFG_LED_POLAR, 1);
-       rt2800_register_write(rt2x00dev, LED_CFG, reg);
-
-       rt2800_register_write(rt2x00dev, PBF_MAX_PCNT, 0x1f3fbf9f);
-
-       rt2800_register_read(rt2x00dev, TX_RTY_CFG, &reg);
-       rt2x00_set_field32(&reg, TX_RTY_CFG_SHORT_RTY_LIMIT, 15);
-       rt2x00_set_field32(&reg, TX_RTY_CFG_LONG_RTY_LIMIT, 31);
-       rt2x00_set_field32(&reg, TX_RTY_CFG_LONG_RTY_THRE, 2000);
-       rt2x00_set_field32(&reg, TX_RTY_CFG_NON_AGG_RTY_MODE, 0);
-       rt2x00_set_field32(&reg, TX_RTY_CFG_AGG_RTY_MODE, 0);
-       rt2x00_set_field32(&reg, TX_RTY_CFG_TX_AUTO_FB_ENABLE, 1);
-       rt2800_register_write(rt2x00dev, TX_RTY_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, AUTO_RSP_CFG, &reg);
-       rt2x00_set_field32(&reg, AUTO_RSP_CFG_AUTORESPONDER, 1);
-       rt2x00_set_field32(&reg, AUTO_RSP_CFG_BAC_ACK_POLICY, 1);
-       rt2x00_set_field32(&reg, AUTO_RSP_CFG_CTS_40_MMODE, 0);
-       rt2x00_set_field32(&reg, AUTO_RSP_CFG_CTS_40_MREF, 0);
-       rt2x00_set_field32(&reg, AUTO_RSP_CFG_AR_PREAMBLE, 1);
-       rt2x00_set_field32(&reg, AUTO_RSP_CFG_DUAL_CTS_EN, 0);
-       rt2x00_set_field32(&reg, AUTO_RSP_CFG_ACK_CTS_PSM_BIT, 0);
-       rt2800_register_write(rt2x00dev, AUTO_RSP_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, CCK_PROT_CFG, &reg);
-       rt2x00_set_field32(&reg, CCK_PROT_CFG_PROTECT_RATE, 3);
-       rt2x00_set_field32(&reg, CCK_PROT_CFG_PROTECT_CTRL, 0);
-       rt2x00_set_field32(&reg, CCK_PROT_CFG_PROTECT_NAV, 1);
-       rt2x00_set_field32(&reg, CCK_PROT_CFG_TX_OP_ALLOW_CCK, 1);
-       rt2x00_set_field32(&reg, CCK_PROT_CFG_TX_OP_ALLOW_OFDM, 1);
-       rt2x00_set_field32(&reg, CCK_PROT_CFG_TX_OP_ALLOW_MM20, 1);
-       rt2x00_set_field32(&reg, CCK_PROT_CFG_TX_OP_ALLOW_MM40, 0);
-       rt2x00_set_field32(&reg, CCK_PROT_CFG_TX_OP_ALLOW_GF20, 1);
-       rt2x00_set_field32(&reg, CCK_PROT_CFG_TX_OP_ALLOW_GF40, 0);
-       rt2x00_set_field32(&reg, CCK_PROT_CFG_RTS_TH_EN, 1);
-       rt2800_register_write(rt2x00dev, CCK_PROT_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, OFDM_PROT_CFG, &reg);
-       rt2x00_set_field32(&reg, OFDM_PROT_CFG_PROTECT_RATE, 3);
-       rt2x00_set_field32(&reg, OFDM_PROT_CFG_PROTECT_CTRL, 0);
-       rt2x00_set_field32(&reg, OFDM_PROT_CFG_PROTECT_NAV, 1);
-       rt2x00_set_field32(&reg, OFDM_PROT_CFG_TX_OP_ALLOW_CCK, 1);
-       rt2x00_set_field32(&reg, OFDM_PROT_CFG_TX_OP_ALLOW_OFDM, 1);
-       rt2x00_set_field32(&reg, OFDM_PROT_CFG_TX_OP_ALLOW_MM20, 1);
-       rt2x00_set_field32(&reg, OFDM_PROT_CFG_TX_OP_ALLOW_MM40, 0);
-       rt2x00_set_field32(&reg, OFDM_PROT_CFG_TX_OP_ALLOW_GF20, 1);
-       rt2x00_set_field32(&reg, OFDM_PROT_CFG_TX_OP_ALLOW_GF40, 0);
-       rt2x00_set_field32(&reg, OFDM_PROT_CFG_RTS_TH_EN, 1);
-       rt2800_register_write(rt2x00dev, OFDM_PROT_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, MM20_PROT_CFG, &reg);
-       rt2x00_set_field32(&reg, MM20_PROT_CFG_PROTECT_RATE, 0x4004);
-       rt2x00_set_field32(&reg, MM20_PROT_CFG_PROTECT_CTRL, 0);
-       rt2x00_set_field32(&reg, MM20_PROT_CFG_PROTECT_NAV, 1);
-       rt2x00_set_field32(&reg, MM20_PROT_CFG_TX_OP_ALLOW_CCK, 1);
-       rt2x00_set_field32(&reg, MM20_PROT_CFG_TX_OP_ALLOW_OFDM, 1);
-       rt2x00_set_field32(&reg, MM20_PROT_CFG_TX_OP_ALLOW_MM20, 1);
-       rt2x00_set_field32(&reg, MM20_PROT_CFG_TX_OP_ALLOW_MM40, 0);
-       rt2x00_set_field32(&reg, MM20_PROT_CFG_TX_OP_ALLOW_GF20, 1);
-       rt2x00_set_field32(&reg, MM20_PROT_CFG_TX_OP_ALLOW_GF40, 0);
-       rt2x00_set_field32(&reg, MM20_PROT_CFG_RTS_TH_EN, 0);
-       rt2800_register_write(rt2x00dev, MM20_PROT_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, MM40_PROT_CFG, &reg);
-       rt2x00_set_field32(&reg, MM40_PROT_CFG_PROTECT_RATE, 0x4084);
-       rt2x00_set_field32(&reg, MM40_PROT_CFG_PROTECT_CTRL,
-                          !rt2x00_is_usb(rt2x00dev));
-       rt2x00_set_field32(&reg, MM40_PROT_CFG_PROTECT_NAV, 1);
-       rt2x00_set_field32(&reg, MM40_PROT_CFG_TX_OP_ALLOW_CCK, 1);
-       rt2x00_set_field32(&reg, MM40_PROT_CFG_TX_OP_ALLOW_OFDM, 1);
-       rt2x00_set_field32(&reg, MM40_PROT_CFG_TX_OP_ALLOW_MM20, 1);
-       rt2x00_set_field32(&reg, MM40_PROT_CFG_TX_OP_ALLOW_MM40, 1);
-       rt2x00_set_field32(&reg, MM40_PROT_CFG_TX_OP_ALLOW_GF20, 1);
-       rt2x00_set_field32(&reg, MM40_PROT_CFG_TX_OP_ALLOW_GF40, 1);
-       rt2x00_set_field32(&reg, MM40_PROT_CFG_RTS_TH_EN, 0);
-       rt2800_register_write(rt2x00dev, MM40_PROT_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, GF20_PROT_CFG, &reg);
-       rt2x00_set_field32(&reg, GF20_PROT_CFG_PROTECT_RATE, 0x4004);
-       rt2x00_set_field32(&reg, GF20_PROT_CFG_PROTECT_CTRL, 0);
-       rt2x00_set_field32(&reg, GF20_PROT_CFG_PROTECT_NAV, 1);
-       rt2x00_set_field32(&reg, GF20_PROT_CFG_TX_OP_ALLOW_CCK, 1);
-       rt2x00_set_field32(&reg, GF20_PROT_CFG_TX_OP_ALLOW_OFDM, 1);
-       rt2x00_set_field32(&reg, GF20_PROT_CFG_TX_OP_ALLOW_MM20, 1);
-       rt2x00_set_field32(&reg, GF20_PROT_CFG_TX_OP_ALLOW_MM40, 0);
-       rt2x00_set_field32(&reg, GF20_PROT_CFG_TX_OP_ALLOW_GF20, 1);
-       rt2x00_set_field32(&reg, GF20_PROT_CFG_TX_OP_ALLOW_GF40, 0);
-       rt2x00_set_field32(&reg, GF20_PROT_CFG_RTS_TH_EN, 0);
-       rt2800_register_write(rt2x00dev, GF20_PROT_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, GF40_PROT_CFG, &reg);
-       rt2x00_set_field32(&reg, GF40_PROT_CFG_PROTECT_RATE, 0x4084);
-       rt2x00_set_field32(&reg, GF40_PROT_CFG_PROTECT_CTRL, 0);
-       rt2x00_set_field32(&reg, GF40_PROT_CFG_PROTECT_NAV, 1);
-       rt2x00_set_field32(&reg, GF40_PROT_CFG_TX_OP_ALLOW_CCK, 1);
-       rt2x00_set_field32(&reg, GF40_PROT_CFG_TX_OP_ALLOW_OFDM, 1);
-       rt2x00_set_field32(&reg, GF40_PROT_CFG_TX_OP_ALLOW_MM20, 1);
-       rt2x00_set_field32(&reg, GF40_PROT_CFG_TX_OP_ALLOW_MM40, 1);
-       rt2x00_set_field32(&reg, GF40_PROT_CFG_TX_OP_ALLOW_GF20, 1);
-       rt2x00_set_field32(&reg, GF40_PROT_CFG_TX_OP_ALLOW_GF40, 1);
-       rt2x00_set_field32(&reg, GF40_PROT_CFG_RTS_TH_EN, 0);
-       rt2800_register_write(rt2x00dev, GF40_PROT_CFG, reg);
-
-       if (rt2x00_is_usb(rt2x00dev)) {
-               rt2800_register_write(rt2x00dev, PBF_CFG, 0xf40006);
-
-               rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
-               rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
-               rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_DMA_BUSY, 0);
-               rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0);
-               rt2x00_set_field32(&reg, WPDMA_GLO_CFG_RX_DMA_BUSY, 0);
-               rt2x00_set_field32(&reg, WPDMA_GLO_CFG_WP_DMA_BURST_SIZE, 3);
-               rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 0);
-               rt2x00_set_field32(&reg, WPDMA_GLO_CFG_BIG_ENDIAN, 0);
-               rt2x00_set_field32(&reg, WPDMA_GLO_CFG_RX_HDR_SCATTER, 0);
-               rt2x00_set_field32(&reg, WPDMA_GLO_CFG_HDR_SEG_LEN, 0);
-               rt2800_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
-       }
-
-       rt2800_register_write(rt2x00dev, TXOP_CTRL_CFG, 0x0000583f);
-       rt2800_register_write(rt2x00dev, TXOP_HLDR_ET, 0x00000002);
-
-       rt2800_register_read(rt2x00dev, TX_RTS_CFG, &reg);
-       rt2x00_set_field32(&reg, TX_RTS_CFG_AUTO_RTS_RETRY_LIMIT, 32);
-       rt2x00_set_field32(&reg, TX_RTS_CFG_RTS_THRES,
-                          IEEE80211_MAX_RTS_THRESHOLD);
-       rt2x00_set_field32(&reg, TX_RTS_CFG_RTS_FBK_EN, 0);
-       rt2800_register_write(rt2x00dev, TX_RTS_CFG, reg);
-
-       rt2800_register_write(rt2x00dev, EXP_ACK_TIME, 0x002400ca);
-
-       /*
-        * Usually the CCK SIFS time should be set to 10 and the OFDM SIFS
-        * time should be set to 16. However, the original Ralink driver uses
-        * 16 for both and indeed using a value of 10 for CCK SIFS results in
-        * connection problems with 11g + CTS protection. Hence, use the same
-        * defaults as the Ralink driver: 16 for both, CCK and OFDM SIFS.
-        */
-       rt2800_register_read(rt2x00dev, XIFS_TIME_CFG, &reg);
-       rt2x00_set_field32(&reg, XIFS_TIME_CFG_CCKM_SIFS_TIME, 16);
-       rt2x00_set_field32(&reg, XIFS_TIME_CFG_OFDM_SIFS_TIME, 16);
-       rt2x00_set_field32(&reg, XIFS_TIME_CFG_OFDM_XIFS_TIME, 4);
-       rt2x00_set_field32(&reg, XIFS_TIME_CFG_EIFS, 314);
-       rt2x00_set_field32(&reg, XIFS_TIME_CFG_BB_RXEND_ENABLE, 1);
-       rt2800_register_write(rt2x00dev, XIFS_TIME_CFG, reg);
-
-       rt2800_register_write(rt2x00dev, PWR_PIN_CFG, 0x00000003);
-
-       /*
-        * ASIC will keep garbage value after boot, clear encryption keys.
-        */
-       for (i = 0; i < 4; i++)
-               rt2800_register_write(rt2x00dev,
-                                        SHARED_KEY_MODE_ENTRY(i), 0);
-
-       for (i = 0; i < 256; i++) {
-               u32 wcid[2] = { 0xffffffff, 0x00ffffff };
-               rt2800_register_multiwrite(rt2x00dev, MAC_WCID_ENTRY(i),
-                                             wcid, sizeof(wcid));
-
-               rt2800_register_write(rt2x00dev, MAC_WCID_ATTR_ENTRY(i), 1);
-               rt2800_register_write(rt2x00dev, MAC_IVEIV_ENTRY(i), 0);
-       }
-
-       /*
-        * Clear all beacons
-        */
-       rt2800_clear_beacon(rt2x00dev, HW_BEACON_BASE0);
-       rt2800_clear_beacon(rt2x00dev, HW_BEACON_BASE1);
-       rt2800_clear_beacon(rt2x00dev, HW_BEACON_BASE2);
-       rt2800_clear_beacon(rt2x00dev, HW_BEACON_BASE3);
-       rt2800_clear_beacon(rt2x00dev, HW_BEACON_BASE4);
-       rt2800_clear_beacon(rt2x00dev, HW_BEACON_BASE5);
-       rt2800_clear_beacon(rt2x00dev, HW_BEACON_BASE6);
-       rt2800_clear_beacon(rt2x00dev, HW_BEACON_BASE7);
-
-       if (rt2x00_is_usb(rt2x00dev)) {
-               rt2800_register_read(rt2x00dev, US_CYC_CNT, &reg);
-               rt2x00_set_field32(&reg, US_CYC_CNT_CLOCK_CYCLE, 30);
-               rt2800_register_write(rt2x00dev, US_CYC_CNT, reg);
-       }
-
-       rt2800_register_read(rt2x00dev, HT_FBK_CFG0, &reg);
-       rt2x00_set_field32(&reg, HT_FBK_CFG0_HTMCS0FBK, 0);
-       rt2x00_set_field32(&reg, HT_FBK_CFG0_HTMCS1FBK, 0);
-       rt2x00_set_field32(&reg, HT_FBK_CFG0_HTMCS2FBK, 1);
-       rt2x00_set_field32(&reg, HT_FBK_CFG0_HTMCS3FBK, 2);
-       rt2x00_set_field32(&reg, HT_FBK_CFG0_HTMCS4FBK, 3);
-       rt2x00_set_field32(&reg, HT_FBK_CFG0_HTMCS5FBK, 4);
-       rt2x00_set_field32(&reg, HT_FBK_CFG0_HTMCS6FBK, 5);
-       rt2x00_set_field32(&reg, HT_FBK_CFG0_HTMCS7FBK, 6);
-       rt2800_register_write(rt2x00dev, HT_FBK_CFG0, reg);
-
-       rt2800_register_read(rt2x00dev, HT_FBK_CFG1, &reg);
-       rt2x00_set_field32(&reg, HT_FBK_CFG1_HTMCS8FBK, 8);
-       rt2x00_set_field32(&reg, HT_FBK_CFG1_HTMCS9FBK, 8);
-       rt2x00_set_field32(&reg, HT_FBK_CFG1_HTMCS10FBK, 9);
-       rt2x00_set_field32(&reg, HT_FBK_CFG1_HTMCS11FBK, 10);
-       rt2x00_set_field32(&reg, HT_FBK_CFG1_HTMCS12FBK, 11);
-       rt2x00_set_field32(&reg, HT_FBK_CFG1_HTMCS13FBK, 12);
-       rt2x00_set_field32(&reg, HT_FBK_CFG1_HTMCS14FBK, 13);
-       rt2x00_set_field32(&reg, HT_FBK_CFG1_HTMCS15FBK, 14);
-       rt2800_register_write(rt2x00dev, HT_FBK_CFG1, reg);
-
-       rt2800_register_read(rt2x00dev, LG_FBK_CFG0, &reg);
-       rt2x00_set_field32(&reg, LG_FBK_CFG0_OFDMMCS0FBK, 8);
-       rt2x00_set_field32(&reg, LG_FBK_CFG0_OFDMMCS1FBK, 8);
-       rt2x00_set_field32(&reg, LG_FBK_CFG0_OFDMMCS2FBK, 9);
-       rt2x00_set_field32(&reg, LG_FBK_CFG0_OFDMMCS3FBK, 10);
-       rt2x00_set_field32(&reg, LG_FBK_CFG0_OFDMMCS4FBK, 11);
-       rt2x00_set_field32(&reg, LG_FBK_CFG0_OFDMMCS5FBK, 12);
-       rt2x00_set_field32(&reg, LG_FBK_CFG0_OFDMMCS6FBK, 13);
-       rt2x00_set_field32(&reg, LG_FBK_CFG0_OFDMMCS7FBK, 14);
-       rt2800_register_write(rt2x00dev, LG_FBK_CFG0, reg);
-
-       rt2800_register_read(rt2x00dev, LG_FBK_CFG1, &reg);
-       rt2x00_set_field32(&reg, LG_FBK_CFG0_CCKMCS0FBK, 0);
-       rt2x00_set_field32(&reg, LG_FBK_CFG0_CCKMCS1FBK, 0);
-       rt2x00_set_field32(&reg, LG_FBK_CFG0_CCKMCS2FBK, 1);
-       rt2x00_set_field32(&reg, LG_FBK_CFG0_CCKMCS3FBK, 2);
-       rt2800_register_write(rt2x00dev, LG_FBK_CFG1, reg);
-
-       /*
-        * We must clear the error counters.
-        * These registers are cleared on read,
-        * so we may pass a useless variable to store the value.
-        */
-       rt2800_register_read(rt2x00dev, RX_STA_CNT0, &reg);
-       rt2800_register_read(rt2x00dev, RX_STA_CNT1, &reg);
-       rt2800_register_read(rt2x00dev, RX_STA_CNT2, &reg);
-       rt2800_register_read(rt2x00dev, TX_STA_CNT0, &reg);
-       rt2800_register_read(rt2x00dev, TX_STA_CNT1, &reg);
-       rt2800_register_read(rt2x00dev, TX_STA_CNT2, &reg);
-
-       /*
-        * Setup leadtime for pre tbtt interrupt to 6ms
-        */
-       rt2800_register_read(rt2x00dev, INT_TIMER_CFG, &reg);
-       rt2x00_set_field32(&reg, INT_TIMER_CFG_PRE_TBTT_TIMER, 6 << 4);
-       rt2800_register_write(rt2x00dev, INT_TIMER_CFG, reg);
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(rt2800_init_registers);
-
-static int rt2800_wait_bbp_rf_ready(struct rt2x00_dev *rt2x00dev)
-{
-       unsigned int i;
-       u32 reg;
-
-       for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
-               rt2800_register_read(rt2x00dev, MAC_STATUS_CFG, &reg);
-               if (!rt2x00_get_field32(reg, MAC_STATUS_CFG_BBP_RF_BUSY))
-                       return 0;
-
-               udelay(REGISTER_BUSY_DELAY);
-       }
-
-       ERROR(rt2x00dev, "BBP/RF register access failed, aborting.\n");
-       return -EACCES;
-}
-
-static int rt2800_wait_bbp_ready(struct rt2x00_dev *rt2x00dev)
-{
-       unsigned int i;
-       u8 value;
-
-       /*
-        * BBP was enabled after firmware was loaded,
-        * but we need to reactivate it now.
-        */
-       rt2800_register_write(rt2x00dev, H2M_BBP_AGENT, 0);
-       rt2800_register_write(rt2x00dev, H2M_MAILBOX_CSR, 0);
-       msleep(1);
-
-       for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
-               rt2800_bbp_read(rt2x00dev, 0, &value);
-               if ((value != 0xff) && (value != 0x00))
-                       return 0;
-               udelay(REGISTER_BUSY_DELAY);
-       }
-
-       ERROR(rt2x00dev, "BBP register access failed, aborting.\n");
-       return -EACCES;
-}
-
-int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
-{
-       unsigned int i;
-       u16 eeprom;
-       u8 reg_id;
-       u8 value;
-
-       if (unlikely(rt2800_wait_bbp_rf_ready(rt2x00dev) ||
-                    rt2800_wait_bbp_ready(rt2x00dev)))
-               return -EACCES;
-
-       if (rt2800_is_305x_soc(rt2x00dev))
-               rt2800_bbp_write(rt2x00dev, 31, 0x08);
-
-       rt2800_bbp_write(rt2x00dev, 65, 0x2c);
-       rt2800_bbp_write(rt2x00dev, 66, 0x38);
-
-       if (rt2x00_rt_rev(rt2x00dev, RT2860, REV_RT2860C)) {
-               rt2800_bbp_write(rt2x00dev, 69, 0x16);
-               rt2800_bbp_write(rt2x00dev, 73, 0x12);
-       } else {
-               rt2800_bbp_write(rt2x00dev, 69, 0x12);
-               rt2800_bbp_write(rt2x00dev, 73, 0x10);
-       }
-
-       rt2800_bbp_write(rt2x00dev, 70, 0x0a);
-
-       if (rt2x00_rt(rt2x00dev, RT3070) ||
-           rt2x00_rt(rt2x00dev, RT3071) ||
-           rt2x00_rt(rt2x00dev, RT3090) ||
-           rt2x00_rt(rt2x00dev, RT3390)) {
-               rt2800_bbp_write(rt2x00dev, 79, 0x13);
-               rt2800_bbp_write(rt2x00dev, 80, 0x05);
-               rt2800_bbp_write(rt2x00dev, 81, 0x33);
-       } else if (rt2800_is_305x_soc(rt2x00dev)) {
-               rt2800_bbp_write(rt2x00dev, 78, 0x0e);
-               rt2800_bbp_write(rt2x00dev, 80, 0x08);
-       } else {
-               rt2800_bbp_write(rt2x00dev, 81, 0x37);
-       }
-
-       rt2800_bbp_write(rt2x00dev, 82, 0x62);
-       rt2800_bbp_write(rt2x00dev, 83, 0x6a);
-
-       if (rt2x00_rt_rev(rt2x00dev, RT2860, REV_RT2860D))
-               rt2800_bbp_write(rt2x00dev, 84, 0x19);
-       else
-               rt2800_bbp_write(rt2x00dev, 84, 0x99);
-
-       rt2800_bbp_write(rt2x00dev, 86, 0x00);
-       rt2800_bbp_write(rt2x00dev, 91, 0x04);
-       rt2800_bbp_write(rt2x00dev, 92, 0x00);
-
-       if (rt2x00_rt_rev_gte(rt2x00dev, RT3070, REV_RT3070F) ||
-           rt2x00_rt_rev_gte(rt2x00dev, RT3071, REV_RT3071E) ||
-           rt2x00_rt_rev_gte(rt2x00dev, RT3090, REV_RT3090E) ||
-           rt2x00_rt_rev_gte(rt2x00dev, RT3390, REV_RT3390E) ||
-           rt2800_is_305x_soc(rt2x00dev))
-               rt2800_bbp_write(rt2x00dev, 103, 0xc0);
-       else
-               rt2800_bbp_write(rt2x00dev, 103, 0x00);
-
-       if (rt2800_is_305x_soc(rt2x00dev))
-               rt2800_bbp_write(rt2x00dev, 105, 0x01);
-       else
-               rt2800_bbp_write(rt2x00dev, 105, 0x05);
-       rt2800_bbp_write(rt2x00dev, 106, 0x35);
-
-       if (rt2x00_rt(rt2x00dev, RT3071) ||
-           rt2x00_rt(rt2x00dev, RT3090) ||
-           rt2x00_rt(rt2x00dev, RT3390)) {
-               rt2800_bbp_read(rt2x00dev, 138, &value);
-
-               rt2x00_eeprom_read(rt2x00dev, EEPROM_ANTENNA, &eeprom);
-               if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_TXPATH) == 1)
-                       value |= 0x20;
-               if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RXPATH) == 1)
-                       value &= ~0x02;
-
-               rt2800_bbp_write(rt2x00dev, 138, value);
-       }
-
-
-       for (i = 0; i < EEPROM_BBP_SIZE; i++) {
-               rt2x00_eeprom_read(rt2x00dev, EEPROM_BBP_START + i, &eeprom);
-
-               if (eeprom != 0xffff && eeprom != 0x0000) {
-                       reg_id = rt2x00_get_field16(eeprom, EEPROM_BBP_REG_ID);
-                       value = rt2x00_get_field16(eeprom, EEPROM_BBP_VALUE);
-                       rt2800_bbp_write(rt2x00dev, reg_id, value);
-               }
-       }
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(rt2800_init_bbp);
-
-static u8 rt2800_init_rx_filter(struct rt2x00_dev *rt2x00dev,
-                               bool bw40, u8 rfcsr24, u8 filter_target)
-{
-       unsigned int i;
-       u8 bbp;
-       u8 rfcsr;
-       u8 passband;
-       u8 stopband;
-       u8 overtuned = 0;
-
-       rt2800_rfcsr_write(rt2x00dev, 24, rfcsr24);
-
-       rt2800_bbp_read(rt2x00dev, 4, &bbp);
-       rt2x00_set_field8(&bbp, BBP4_BANDWIDTH, 2 * bw40);
-       rt2800_bbp_write(rt2x00dev, 4, bbp);
-
-       rt2800_rfcsr_read(rt2x00dev, 22, &rfcsr);
-       rt2x00_set_field8(&rfcsr, RFCSR22_BASEBAND_LOOPBACK, 1);
-       rt2800_rfcsr_write(rt2x00dev, 22, rfcsr);
-
-       /*
-        * Set power & frequency of passband test tone
-        */
-       rt2800_bbp_write(rt2x00dev, 24, 0);
-
-       for (i = 0; i < 100; i++) {
-               rt2800_bbp_write(rt2x00dev, 25, 0x90);
-               msleep(1);
-
-               rt2800_bbp_read(rt2x00dev, 55, &passband);
-               if (passband)
-                       break;
-       }
-
-       /*
-        * Set power & frequency of stopband test tone
-        */
-       rt2800_bbp_write(rt2x00dev, 24, 0x06);
-
-       for (i = 0; i < 100; i++) {
-               rt2800_bbp_write(rt2x00dev, 25, 0x90);
-               msleep(1);
-
-               rt2800_bbp_read(rt2x00dev, 55, &stopband);
-
-               if ((passband - stopband) <= filter_target) {
-                       rfcsr24++;
-                       overtuned += ((passband - stopband) == filter_target);
-               } else
-                       break;
-
-               rt2800_rfcsr_write(rt2x00dev, 24, rfcsr24);
-       }
-
-       rfcsr24 -= !!overtuned;
-
-       rt2800_rfcsr_write(rt2x00dev, 24, rfcsr24);
-       return rfcsr24;
-}
-
-int rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev)
-{
-       u8 rfcsr;
-       u8 bbp;
-       u32 reg;
-       u16 eeprom;
-
-       if (!rt2x00_rt(rt2x00dev, RT3070) &&
-           !rt2x00_rt(rt2x00dev, RT3071) &&
-           !rt2x00_rt(rt2x00dev, RT3090) &&
-           !rt2x00_rt(rt2x00dev, RT3390) &&
-           !rt2800_is_305x_soc(rt2x00dev))
-               return 0;
-
-       /*
-        * Init RF calibration.
-        */
-       rt2800_rfcsr_read(rt2x00dev, 30, &rfcsr);
-       rt2x00_set_field8(&rfcsr, RFCSR30_RF_CALIBRATION, 1);
-       rt2800_rfcsr_write(rt2x00dev, 30, rfcsr);
-       msleep(1);
-       rt2x00_set_field8(&rfcsr, RFCSR30_RF_CALIBRATION, 0);
-       rt2800_rfcsr_write(rt2x00dev, 30, rfcsr);
-
-       if (rt2x00_rt(rt2x00dev, RT3070) ||
-           rt2x00_rt(rt2x00dev, RT3071) ||
-           rt2x00_rt(rt2x00dev, RT3090)) {
-               rt2800_rfcsr_write(rt2x00dev, 4, 0x40);
-               rt2800_rfcsr_write(rt2x00dev, 5, 0x03);
-               rt2800_rfcsr_write(rt2x00dev, 6, 0x02);
-               rt2800_rfcsr_write(rt2x00dev, 7, 0x70);
-               rt2800_rfcsr_write(rt2x00dev, 9, 0x0f);
-               rt2800_rfcsr_write(rt2x00dev, 10, 0x41);
-               rt2800_rfcsr_write(rt2x00dev, 11, 0x21);
-               rt2800_rfcsr_write(rt2x00dev, 12, 0x7b);
-               rt2800_rfcsr_write(rt2x00dev, 14, 0x90);
-               rt2800_rfcsr_write(rt2x00dev, 15, 0x58);
-               rt2800_rfcsr_write(rt2x00dev, 16, 0xb3);
-               rt2800_rfcsr_write(rt2x00dev, 17, 0x92);
-               rt2800_rfcsr_write(rt2x00dev, 18, 0x2c);
-               rt2800_rfcsr_write(rt2x00dev, 19, 0x02);
-               rt2800_rfcsr_write(rt2x00dev, 20, 0xba);
-               rt2800_rfcsr_write(rt2x00dev, 21, 0xdb);
-               rt2800_rfcsr_write(rt2x00dev, 24, 0x16);
-               rt2800_rfcsr_write(rt2x00dev, 25, 0x01);
-               rt2800_rfcsr_write(rt2x00dev, 29, 0x1f);
-       } else if (rt2x00_rt(rt2x00dev, RT3390)) {
-               rt2800_rfcsr_write(rt2x00dev, 0, 0xa0);
-               rt2800_rfcsr_write(rt2x00dev, 1, 0xe1);
-               rt2800_rfcsr_write(rt2x00dev, 2, 0xf1);
-               rt2800_rfcsr_write(rt2x00dev, 3, 0x62);
-               rt2800_rfcsr_write(rt2x00dev, 4, 0x40);
-               rt2800_rfcsr_write(rt2x00dev, 5, 0x8b);
-               rt2800_rfcsr_write(rt2x00dev, 6, 0x42);
-               rt2800_rfcsr_write(rt2x00dev, 7, 0x34);
-               rt2800_rfcsr_write(rt2x00dev, 8, 0x00);
-               rt2800_rfcsr_write(rt2x00dev, 9, 0xc0);
-               rt2800_rfcsr_write(rt2x00dev, 10, 0x61);
-               rt2800_rfcsr_write(rt2x00dev, 11, 0x21);
-               rt2800_rfcsr_write(rt2x00dev, 12, 0x3b);
-               rt2800_rfcsr_write(rt2x00dev, 13, 0xe0);
-               rt2800_rfcsr_write(rt2x00dev, 14, 0x90);
-               rt2800_rfcsr_write(rt2x00dev, 15, 0x53);
-               rt2800_rfcsr_write(rt2x00dev, 16, 0xe0);
-               rt2800_rfcsr_write(rt2x00dev, 17, 0x94);
-               rt2800_rfcsr_write(rt2x00dev, 18, 0x5c);
-               rt2800_rfcsr_write(rt2x00dev, 19, 0x4a);
-               rt2800_rfcsr_write(rt2x00dev, 20, 0xb2);
-               rt2800_rfcsr_write(rt2x00dev, 21, 0xf6);
-               rt2800_rfcsr_write(rt2x00dev, 22, 0x00);
-               rt2800_rfcsr_write(rt2x00dev, 23, 0x14);
-               rt2800_rfcsr_write(rt2x00dev, 24, 0x08);
-               rt2800_rfcsr_write(rt2x00dev, 25, 0x3d);
-               rt2800_rfcsr_write(rt2x00dev, 26, 0x85);
-               rt2800_rfcsr_write(rt2x00dev, 27, 0x00);
-               rt2800_rfcsr_write(rt2x00dev, 28, 0x41);
-               rt2800_rfcsr_write(rt2x00dev, 29, 0x8f);
-               rt2800_rfcsr_write(rt2x00dev, 30, 0x20);
-               rt2800_rfcsr_write(rt2x00dev, 31, 0x0f);
-       } else if (rt2800_is_305x_soc(rt2x00dev)) {
-               rt2800_rfcsr_write(rt2x00dev, 0, 0x50);
-               rt2800_rfcsr_write(rt2x00dev, 1, 0x01);
-               rt2800_rfcsr_write(rt2x00dev, 2, 0xf7);
-               rt2800_rfcsr_write(rt2x00dev, 3, 0x75);
-               rt2800_rfcsr_write(rt2x00dev, 4, 0x40);
-               rt2800_rfcsr_write(rt2x00dev, 5, 0x03);
-               rt2800_rfcsr_write(rt2x00dev, 6, 0x02);
-               rt2800_rfcsr_write(rt2x00dev, 7, 0x50);
-               rt2800_rfcsr_write(rt2x00dev, 8, 0x39);
-               rt2800_rfcsr_write(rt2x00dev, 9, 0x0f);
-               rt2800_rfcsr_write(rt2x00dev, 10, 0x60);
-               rt2800_rfcsr_write(rt2x00dev, 11, 0x21);
-               rt2800_rfcsr_write(rt2x00dev, 12, 0x75);
-               rt2800_rfcsr_write(rt2x00dev, 13, 0x75);
-               rt2800_rfcsr_write(rt2x00dev, 14, 0x90);
-               rt2800_rfcsr_write(rt2x00dev, 15, 0x58);
-               rt2800_rfcsr_write(rt2x00dev, 16, 0xb3);
-               rt2800_rfcsr_write(rt2x00dev, 17, 0x92);
-               rt2800_rfcsr_write(rt2x00dev, 18, 0x2c);
-               rt2800_rfcsr_write(rt2x00dev, 19, 0x02);
-               rt2800_rfcsr_write(rt2x00dev, 20, 0xba);
-               rt2800_rfcsr_write(rt2x00dev, 21, 0xdb);
-               rt2800_rfcsr_write(rt2x00dev, 22, 0x00);
-               rt2800_rfcsr_write(rt2x00dev, 23, 0x31);
-               rt2800_rfcsr_write(rt2x00dev, 24, 0x08);
-               rt2800_rfcsr_write(rt2x00dev, 25, 0x01);
-               rt2800_rfcsr_write(rt2x00dev, 26, 0x25);
-               rt2800_rfcsr_write(rt2x00dev, 27, 0x23);
-               rt2800_rfcsr_write(rt2x00dev, 28, 0x13);
-               rt2800_rfcsr_write(rt2x00dev, 29, 0x83);
-               rt2800_rfcsr_write(rt2x00dev, 30, 0x00);
-               rt2800_rfcsr_write(rt2x00dev, 31, 0x00);
-               return 0;
-       }
-
-       if (rt2x00_rt_rev_lt(rt2x00dev, RT3070, REV_RT3070F)) {
-               rt2800_register_read(rt2x00dev, LDO_CFG0, &reg);
-               rt2x00_set_field32(&reg, LDO_CFG0_BGSEL, 1);
-               rt2x00_set_field32(&reg, LDO_CFG0_LDO_CORE_VLEVEL, 3);
-               rt2800_register_write(rt2x00dev, LDO_CFG0, reg);
-       } else if (rt2x00_rt(rt2x00dev, RT3071) ||
-                  rt2x00_rt(rt2x00dev, RT3090)) {
-               rt2800_rfcsr_read(rt2x00dev, 6, &rfcsr);
-               rt2x00_set_field8(&rfcsr, RFCSR6_R2, 1);
-               rt2800_rfcsr_write(rt2x00dev, 6, rfcsr);
-
-               rt2800_rfcsr_write(rt2x00dev, 31, 0x14);
-
-               rt2800_register_read(rt2x00dev, LDO_CFG0, &reg);
-               rt2x00_set_field32(&reg, LDO_CFG0_BGSEL, 1);
-               if (rt2x00_rt_rev_lt(rt2x00dev, RT3071, REV_RT3071E) ||
-                   rt2x00_rt_rev_lt(rt2x00dev, RT3090, REV_RT3090E)) {
-                       rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC, &eeprom);
-                       if (rt2x00_get_field16(eeprom, EEPROM_NIC_DAC_TEST))
-                               rt2x00_set_field32(&reg, LDO_CFG0_LDO_CORE_VLEVEL, 3);
-                       else
-                               rt2x00_set_field32(&reg, LDO_CFG0_LDO_CORE_VLEVEL, 0);
-               }
-               rt2800_register_write(rt2x00dev, LDO_CFG0, reg);
-       } else if (rt2x00_rt(rt2x00dev, RT3390)) {
-               rt2800_register_read(rt2x00dev, GPIO_SWITCH, &reg);
-               rt2x00_set_field32(&reg, GPIO_SWITCH_5, 0);
-               rt2800_register_write(rt2x00dev, GPIO_SWITCH, reg);
-       }
-
-       /*
-        * Set RX Filter calibration for 20MHz and 40MHz
-        */
-       if (rt2x00_rt(rt2x00dev, RT3070)) {
-               rt2x00dev->calibration[0] =
-                       rt2800_init_rx_filter(rt2x00dev, false, 0x07, 0x16);
-               rt2x00dev->calibration[1] =
-                       rt2800_init_rx_filter(rt2x00dev, true, 0x27, 0x19);
-       } else if (rt2x00_rt(rt2x00dev, RT3071) ||
-                  rt2x00_rt(rt2x00dev, RT3090) ||
-                  rt2x00_rt(rt2x00dev, RT3390)) {
-               rt2x00dev->calibration[0] =
-                       rt2800_init_rx_filter(rt2x00dev, false, 0x07, 0x13);
-               rt2x00dev->calibration[1] =
-                       rt2800_init_rx_filter(rt2x00dev, true, 0x27, 0x15);
-       }
-
-       /*
-        * Set back to initial state
-        */
-       rt2800_bbp_write(rt2x00dev, 24, 0);
-
-       rt2800_rfcsr_read(rt2x00dev, 22, &rfcsr);
-       rt2x00_set_field8(&rfcsr, RFCSR22_BASEBAND_LOOPBACK, 0);
-       rt2800_rfcsr_write(rt2x00dev, 22, rfcsr);
-
-       /*
-        * set BBP back to BW20
-        */
-       rt2800_bbp_read(rt2x00dev, 4, &bbp);
-       rt2x00_set_field8(&bbp, BBP4_BANDWIDTH, 0);
-       rt2800_bbp_write(rt2x00dev, 4, bbp);
-
-       if (rt2x00_rt_rev_lt(rt2x00dev, RT3070, REV_RT3070F) ||
-           rt2x00_rt_rev_lt(rt2x00dev, RT3071, REV_RT3071E) ||
-           rt2x00_rt_rev_lt(rt2x00dev, RT3090, REV_RT3090E) ||
-           rt2x00_rt_rev_lt(rt2x00dev, RT3390, REV_RT3390E))
-               rt2800_rfcsr_write(rt2x00dev, 27, 0x03);
-
-       rt2800_register_read(rt2x00dev, OPT_14_CSR, &reg);
-       rt2x00_set_field32(&reg, OPT_14_CSR_BIT0, 1);
-       rt2800_register_write(rt2x00dev, OPT_14_CSR, reg);
-
-       rt2800_rfcsr_read(rt2x00dev, 17, &rfcsr);
-       rt2x00_set_field8(&rfcsr, RFCSR17_TX_LO1_EN, 0);
-       if (rt2x00_rt_rev_lt(rt2x00dev, RT3071, REV_RT3071E) ||
-           rt2x00_rt_rev_lt(rt2x00dev, RT3090, REV_RT3090E) ||
-           rt2x00_rt_rev_lt(rt2x00dev, RT3390, REV_RT3390E)) {
-               if (test_bit(CONFIG_EXTERNAL_LNA_BG, &rt2x00dev->flags))
-                       rt2x00_set_field8(&rfcsr, RFCSR17_R, 1);
-       }
-       rt2x00_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_BG, &eeprom);
-       if (rt2x00_get_field16(eeprom, EEPROM_TXMIXER_GAIN_BG_VAL) >= 1)
-               rt2x00_set_field8(&rfcsr, RFCSR17_TXMIXER_GAIN,
-                                 rt2x00_get_field16(eeprom,
-                                                  EEPROM_TXMIXER_GAIN_BG_VAL));
-       rt2800_rfcsr_write(rt2x00dev, 17, rfcsr);
-
-       if (rt2x00_rt(rt2x00dev, RT3090)) {
-               rt2800_bbp_read(rt2x00dev, 138, &bbp);
-
-               rt2x00_eeprom_read(rt2x00dev, EEPROM_ANTENNA, &eeprom);
-               if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RXPATH) == 1)
-                       rt2x00_set_field8(&bbp, BBP138_RX_ADC1, 0);
-               if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_TXPATH) == 1)
-                       rt2x00_set_field8(&bbp, BBP138_TX_DAC1, 1);
-
-               rt2800_bbp_write(rt2x00dev, 138, bbp);
-       }
-
-       if (rt2x00_rt(rt2x00dev, RT3071) ||
-           rt2x00_rt(rt2x00dev, RT3090) ||
-           rt2x00_rt(rt2x00dev, RT3390)) {
-               rt2800_rfcsr_read(rt2x00dev, 1, &rfcsr);
-               rt2x00_set_field8(&rfcsr, RFCSR1_RF_BLOCK_EN, 1);
-               rt2x00_set_field8(&rfcsr, RFCSR1_RX0_PD, 0);
-               rt2x00_set_field8(&rfcsr, RFCSR1_TX0_PD, 0);
-               rt2x00_set_field8(&rfcsr, RFCSR1_RX1_PD, 1);
-               rt2x00_set_field8(&rfcsr, RFCSR1_TX1_PD, 1);
-               rt2800_rfcsr_write(rt2x00dev, 1, rfcsr);
-
-               rt2800_rfcsr_read(rt2x00dev, 15, &rfcsr);
-               rt2x00_set_field8(&rfcsr, RFCSR15_TX_LO2_EN, 0);
-               rt2800_rfcsr_write(rt2x00dev, 15, rfcsr);
-
-               rt2800_rfcsr_read(rt2x00dev, 20, &rfcsr);
-               rt2x00_set_field8(&rfcsr, RFCSR20_RX_LO1_EN, 0);
-               rt2800_rfcsr_write(rt2x00dev, 20, rfcsr);
-
-               rt2800_rfcsr_read(rt2x00dev, 21, &rfcsr);
-               rt2x00_set_field8(&rfcsr, RFCSR21_RX_LO2_EN, 0);
-               rt2800_rfcsr_write(rt2x00dev, 21, rfcsr);
-       }
-
-       if (rt2x00_rt(rt2x00dev, RT3070) || rt2x00_rt(rt2x00dev, RT3071)) {
-               rt2800_rfcsr_read(rt2x00dev, 27, &rfcsr);
-               if (rt2x00_rt_rev_lt(rt2x00dev, RT3070, REV_RT3070F) ||
-                   rt2x00_rt_rev_lt(rt2x00dev, RT3071, REV_RT3071E))
-                       rt2x00_set_field8(&rfcsr, RFCSR27_R1, 3);
-               else
-                       rt2x00_set_field8(&rfcsr, RFCSR27_R1, 0);
-               rt2x00_set_field8(&rfcsr, RFCSR27_R2, 0);
-               rt2x00_set_field8(&rfcsr, RFCSR27_R3, 0);
-               rt2x00_set_field8(&rfcsr, RFCSR27_R4, 0);
-               rt2800_rfcsr_write(rt2x00dev, 27, rfcsr);
-       }
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(rt2800_init_rfcsr);
-
-int rt2800_efuse_detect(struct rt2x00_dev *rt2x00dev)
-{
-       u32 reg;
-
-       rt2800_register_read(rt2x00dev, EFUSE_CTRL, &reg);
-
-       return rt2x00_get_field32(reg, EFUSE_CTRL_PRESENT);
-}
-EXPORT_SYMBOL_GPL(rt2800_efuse_detect);
-
-static void rt2800_efuse_read(struct rt2x00_dev *rt2x00dev, unsigned int i)
-{
-       u32 reg;
-
-       mutex_lock(&rt2x00dev->csr_mutex);
-
-       rt2800_register_read_lock(rt2x00dev, EFUSE_CTRL, &reg);
-       rt2x00_set_field32(&reg, EFUSE_CTRL_ADDRESS_IN, i);
-       rt2x00_set_field32(&reg, EFUSE_CTRL_MODE, 0);
-       rt2x00_set_field32(&reg, EFUSE_CTRL_KICK, 1);
-       rt2800_register_write_lock(rt2x00dev, EFUSE_CTRL, reg);
-
-       /* Wait until the EEPROM has been loaded */
-       rt2800_regbusy_read(rt2x00dev, EFUSE_CTRL, EFUSE_CTRL_KICK, &reg);
-
-       /* Apparently the data is read from end to start */
-       rt2800_register_read_lock(rt2x00dev, EFUSE_DATA3,
-                                       (u32 *)&rt2x00dev->eeprom[i]);
-       rt2800_register_read_lock(rt2x00dev, EFUSE_DATA2,
-                                       (u32 *)&rt2x00dev->eeprom[i + 2]);
-       rt2800_register_read_lock(rt2x00dev, EFUSE_DATA1,
-                                       (u32 *)&rt2x00dev->eeprom[i + 4]);
-       rt2800_register_read_lock(rt2x00dev, EFUSE_DATA0,
-                                       (u32 *)&rt2x00dev->eeprom[i + 6]);
-
-       mutex_unlock(&rt2x00dev->csr_mutex);
-}
-
-void rt2800_read_eeprom_efuse(struct rt2x00_dev *rt2x00dev)
-{
-       unsigned int i;
-
-       for (i = 0; i < EEPROM_SIZE / sizeof(u16); i += 8)
-               rt2800_efuse_read(rt2x00dev, i);
-}
-EXPORT_SYMBOL_GPL(rt2800_read_eeprom_efuse);
-
-int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
-{
-       u16 word;
-       u8 *mac;
-       u8 default_lna_gain;
-
-       /*
-        * Start validation of the data that has been read.
-        */
-       mac = rt2x00_eeprom_addr(rt2x00dev, EEPROM_MAC_ADDR_0);
-       if (!is_valid_ether_addr(mac)) {
-               random_ether_addr(mac);
-               EEPROM(rt2x00dev, "MAC: %pM\n", mac);
-       }
-
-       rt2x00_eeprom_read(rt2x00dev, EEPROM_ANTENNA, &word);
-       if (word == 0xffff) {
-               rt2x00_set_field16(&word, EEPROM_ANTENNA_RXPATH, 2);
-               rt2x00_set_field16(&word, EEPROM_ANTENNA_TXPATH, 1);
-               rt2x00_set_field16(&word, EEPROM_ANTENNA_RF_TYPE, RF2820);
-               rt2x00_eeprom_write(rt2x00dev, EEPROM_ANTENNA, word);
-               EEPROM(rt2x00dev, "Antenna: 0x%04x\n", word);
-       } else if (rt2x00_rt(rt2x00dev, RT2860) ||
-                  rt2x00_rt(rt2x00dev, RT2872)) {
-               /*
-                * There is a max of 2 RX streams for RT28x0 series
-                */
-               if (rt2x00_get_field16(word, EEPROM_ANTENNA_RXPATH) > 2)
-                       rt2x00_set_field16(&word, EEPROM_ANTENNA_RXPATH, 2);
-               rt2x00_eeprom_write(rt2x00dev, EEPROM_ANTENNA, word);
-       }
-
-       rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC, &word);
-       if (word == 0xffff) {
-               rt2x00_set_field16(&word, EEPROM_NIC_HW_RADIO, 0);
-               rt2x00_set_field16(&word, EEPROM_NIC_DYNAMIC_TX_AGC, 0);
-               rt2x00_set_field16(&word, EEPROM_NIC_EXTERNAL_LNA_BG, 0);
-               rt2x00_set_field16(&word, EEPROM_NIC_EXTERNAL_LNA_A, 0);
-               rt2x00_set_field16(&word, EEPROM_NIC_CARDBUS_ACCEL, 0);
-               rt2x00_set_field16(&word, EEPROM_NIC_BW40M_SB_BG, 0);
-               rt2x00_set_field16(&word, EEPROM_NIC_BW40M_SB_A, 0);
-               rt2x00_set_field16(&word, EEPROM_NIC_WPS_PBC, 0);
-               rt2x00_set_field16(&word, EEPROM_NIC_BW40M_BG, 0);
-               rt2x00_set_field16(&word, EEPROM_NIC_BW40M_A, 0);
-               rt2x00_set_field16(&word, EEPROM_NIC_ANT_DIVERSITY, 0);
-               rt2x00_set_field16(&word, EEPROM_NIC_DAC_TEST, 0);
-               rt2x00_eeprom_write(rt2x00dev, EEPROM_NIC, word);
-               EEPROM(rt2x00dev, "NIC: 0x%04x\n", word);
-       }
-
-       rt2x00_eeprom_read(rt2x00dev, EEPROM_FREQ, &word);
-       if ((word & 0x00ff) == 0x00ff) {
-               rt2x00_set_field16(&word, EEPROM_FREQ_OFFSET, 0);
-               rt2x00_eeprom_write(rt2x00dev, EEPROM_FREQ, word);
-               EEPROM(rt2x00dev, "Freq: 0x%04x\n", word);
-       }
-       if ((word & 0xff00) == 0xff00) {
-               rt2x00_set_field16(&word, EEPROM_FREQ_LED_MODE,
-                                  LED_MODE_TXRX_ACTIVITY);
-               rt2x00_set_field16(&word, EEPROM_FREQ_LED_POLARITY, 0);
-               rt2x00_eeprom_write(rt2x00dev, EEPROM_FREQ, word);
-               rt2x00_eeprom_write(rt2x00dev, EEPROM_LED1, 0x5555);
-               rt2x00_eeprom_write(rt2x00dev, EEPROM_LED2, 0x2221);
-               rt2x00_eeprom_write(rt2x00dev, EEPROM_LED3, 0xa9f8);
-               EEPROM(rt2x00dev, "Led Mode: 0x%04x\n", word);
-       }
-
-       /*
-        * During the LNA validation we are going to use
-        * lna0 as correct value. Note that EEPROM_LNA
-        * is never validated.
-        */
-       rt2x00_eeprom_read(rt2x00dev, EEPROM_LNA, &word);
-       default_lna_gain = rt2x00_get_field16(word, EEPROM_LNA_A0);
-
-       rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_BG, &word);
-       if (abs(rt2x00_get_field16(word, EEPROM_RSSI_BG_OFFSET0)) > 10)
-               rt2x00_set_field16(&word, EEPROM_RSSI_BG_OFFSET0, 0);
-       if (abs(rt2x00_get_field16(word, EEPROM_RSSI_BG_OFFSET1)) > 10)
-               rt2x00_set_field16(&word, EEPROM_RSSI_BG_OFFSET1, 0);
-       rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_BG, word);
-
-       rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &word);
-       if (abs(rt2x00_get_field16(word, EEPROM_RSSI_BG2_OFFSET2)) > 10)
-               rt2x00_set_field16(&word, EEPROM_RSSI_BG2_OFFSET2, 0);
-       if (rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0x00 ||
-           rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0xff)
-               rt2x00_set_field16(&word, EEPROM_RSSI_BG2_LNA_A1,
-                                  default_lna_gain);
-       rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_BG2, word);
-
-       rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_A, &word);
-       if (abs(rt2x00_get_field16(word, EEPROM_RSSI_A_OFFSET0)) > 10)
-               rt2x00_set_field16(&word, EEPROM_RSSI_A_OFFSET0, 0);
-       if (abs(rt2x00_get_field16(word, EEPROM_RSSI_A_OFFSET1)) > 10)
-               rt2x00_set_field16(&word, EEPROM_RSSI_A_OFFSET1, 0);
-       rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_A, word);
-
-       rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &word);
-       if (abs(rt2x00_get_field16(word, EEPROM_RSSI_A2_OFFSET2)) > 10)
-               rt2x00_set_field16(&word, EEPROM_RSSI_A2_OFFSET2, 0);
-       if (rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0x00 ||
-           rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0xff)
-               rt2x00_set_field16(&word, EEPROM_RSSI_A2_LNA_A2,
-                                  default_lna_gain);
-       rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_A2, word);
-
-       rt2x00_eeprom_read(rt2x00dev, EEPROM_MAX_TX_POWER, &word);
-       if (rt2x00_get_field16(word, EEPROM_MAX_TX_POWER_24GHZ) == 0xff)
-               rt2x00_set_field16(&word, EEPROM_MAX_TX_POWER_24GHZ, MAX_G_TXPOWER);
-       if (rt2x00_get_field16(word, EEPROM_MAX_TX_POWER_5GHZ) == 0xff)
-               rt2x00_set_field16(&word, EEPROM_MAX_TX_POWER_5GHZ, MAX_A_TXPOWER);
-       rt2x00_eeprom_write(rt2x00dev, EEPROM_MAX_TX_POWER, word);
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(rt2800_validate_eeprom);
-
-int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
-{
-       u32 reg;
-       u16 value;
-       u16 eeprom;
-
-       /*
-        * Read EEPROM word for configuration.
-        */
-       rt2x00_eeprom_read(rt2x00dev, EEPROM_ANTENNA, &eeprom);
-
-       /*
-        * Identify RF chipset.
-        */
-       value = rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RF_TYPE);
-       rt2800_register_read(rt2x00dev, MAC_CSR0, &reg);
-
-       rt2x00_set_chip(rt2x00dev, rt2x00_get_field32(reg, MAC_CSR0_CHIPSET),
-                       value, rt2x00_get_field32(reg, MAC_CSR0_REVISION));
-
-       if (!rt2x00_rt(rt2x00dev, RT2860) &&
-           !rt2x00_rt(rt2x00dev, RT2872) &&
-           !rt2x00_rt(rt2x00dev, RT2883) &&
-           !rt2x00_rt(rt2x00dev, RT3070) &&
-           !rt2x00_rt(rt2x00dev, RT3071) &&
-           !rt2x00_rt(rt2x00dev, RT3090) &&
-           !rt2x00_rt(rt2x00dev, RT3390) &&
-           !rt2x00_rt(rt2x00dev, RT3572)) {
-               ERROR(rt2x00dev, "Invalid RT chipset detected.\n");
-               return -ENODEV;
-       }
-
-       if (!rt2x00_rf(rt2x00dev, RF2820) &&
-           !rt2x00_rf(rt2x00dev, RF2850) &&
-           !rt2x00_rf(rt2x00dev, RF2720) &&
-           !rt2x00_rf(rt2x00dev, RF2750) &&
-           !rt2x00_rf(rt2x00dev, RF3020) &&
-           !rt2x00_rf(rt2x00dev, RF2020) &&
-           !rt2x00_rf(rt2x00dev, RF3021) &&
-           !rt2x00_rf(rt2x00dev, RF3022) &&
-           !rt2x00_rf(rt2x00dev, RF3052)) {
-               ERROR(rt2x00dev, "Invalid RF chipset detected.\n");
-               return -ENODEV;
-       }
-
-       /*
-        * Identify default antenna configuration.
-        */
-       rt2x00dev->default_ant.tx =
-           rt2x00_get_field16(eeprom, EEPROM_ANTENNA_TXPATH);
-       rt2x00dev->default_ant.rx =
-           rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RXPATH);
-
-       /*
-        * Read frequency offset and RF programming sequence.
-        */
-       rt2x00_eeprom_read(rt2x00dev, EEPROM_FREQ, &eeprom);
-       rt2x00dev->freq_offset = rt2x00_get_field16(eeprom, EEPROM_FREQ_OFFSET);
-
-       /*
-        * Read external LNA informations.
-        */
-       rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC, &eeprom);
-
-       if (rt2x00_get_field16(eeprom, EEPROM_NIC_EXTERNAL_LNA_A))
-               __set_bit(CONFIG_EXTERNAL_LNA_A, &rt2x00dev->flags);
-       if (rt2x00_get_field16(eeprom, EEPROM_NIC_EXTERNAL_LNA_BG))
-               __set_bit(CONFIG_EXTERNAL_LNA_BG, &rt2x00dev->flags);
-
-       /*
-        * Detect if this device has an hardware controlled radio.
-        */
-       if (rt2x00_get_field16(eeprom, EEPROM_NIC_HW_RADIO))
-               __set_bit(CONFIG_SUPPORT_HW_BUTTON, &rt2x00dev->flags);
-
-       /*
-        * Store led settings, for correct led behaviour.
-        */
-#ifdef CONFIG_RT2X00_LIB_LEDS
-       rt2800_init_led(rt2x00dev, &rt2x00dev->led_radio, LED_TYPE_RADIO);
-       rt2800_init_led(rt2x00dev, &rt2x00dev->led_assoc, LED_TYPE_ASSOC);
-       rt2800_init_led(rt2x00dev, &rt2x00dev->led_qual, LED_TYPE_QUALITY);
-
-       rt2x00_eeprom_read(rt2x00dev, EEPROM_FREQ, &rt2x00dev->led_mcu_reg);
-#endif /* CONFIG_RT2X00_LIB_LEDS */
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(rt2800_init_eeprom);
-
-/*
- * RF value list for rt28xx
- * Supports: 2.4 GHz (all) & 5.2 GHz (RF2850 & RF2750)
- */
-static const struct rf_channel rf_vals[] = {
-       { 1,  0x18402ecc, 0x184c0786, 0x1816b455, 0x1800510b },
-       { 2,  0x18402ecc, 0x184c0786, 0x18168a55, 0x1800519f },
-       { 3,  0x18402ecc, 0x184c078a, 0x18168a55, 0x1800518b },
-       { 4,  0x18402ecc, 0x184c078a, 0x18168a55, 0x1800519f },
-       { 5,  0x18402ecc, 0x184c078e, 0x18168a55, 0x1800518b },
-       { 6,  0x18402ecc, 0x184c078e, 0x18168a55, 0x1800519f },
-       { 7,  0x18402ecc, 0x184c0792, 0x18168a55, 0x1800518b },
-       { 8,  0x18402ecc, 0x184c0792, 0x18168a55, 0x1800519f },
-       { 9,  0x18402ecc, 0x184c0796, 0x18168a55, 0x1800518b },
-       { 10, 0x18402ecc, 0x184c0796, 0x18168a55, 0x1800519f },
-       { 11, 0x18402ecc, 0x184c079a, 0x18168a55, 0x1800518b },
-       { 12, 0x18402ecc, 0x184c079a, 0x18168a55, 0x1800519f },
-       { 13, 0x18402ecc, 0x184c079e, 0x18168a55, 0x1800518b },
-       { 14, 0x18402ecc, 0x184c07a2, 0x18168a55, 0x18005193 },
-
-       /* 802.11 UNI / HyperLan 2 */
-       { 36, 0x18402ecc, 0x184c099a, 0x18158a55, 0x180ed1a3 },
-       { 38, 0x18402ecc, 0x184c099e, 0x18158a55, 0x180ed193 },
-       { 40, 0x18402ec8, 0x184c0682, 0x18158a55, 0x180ed183 },
-       { 44, 0x18402ec8, 0x184c0682, 0x18158a55, 0x180ed1a3 },
-       { 46, 0x18402ec8, 0x184c0686, 0x18158a55, 0x180ed18b },
-       { 48, 0x18402ec8, 0x184c0686, 0x18158a55, 0x180ed19b },
-       { 52, 0x18402ec8, 0x184c068a, 0x18158a55, 0x180ed193 },
-       { 54, 0x18402ec8, 0x184c068a, 0x18158a55, 0x180ed1a3 },
-       { 56, 0x18402ec8, 0x184c068e, 0x18158a55, 0x180ed18b },
-       { 60, 0x18402ec8, 0x184c0692, 0x18158a55, 0x180ed183 },
-       { 62, 0x18402ec8, 0x184c0692, 0x18158a55, 0x180ed193 },
-       { 64, 0x18402ec8, 0x184c0692, 0x18158a55, 0x180ed1a3 },
-
-       /* 802.11 HyperLan 2 */
-       { 100, 0x18402ec8, 0x184c06b2, 0x18178a55, 0x180ed783 },
-       { 102, 0x18402ec8, 0x184c06b2, 0x18578a55, 0x180ed793 },
-       { 104, 0x18402ec8, 0x185c06b2, 0x18578a55, 0x180ed1a3 },
-       { 108, 0x18402ecc, 0x185c0a32, 0x18578a55, 0x180ed193 },
-       { 110, 0x18402ecc, 0x184c0a36, 0x18178a55, 0x180ed183 },
-       { 112, 0x18402ecc, 0x184c0a36, 0x18178a55, 0x180ed19b },
-       { 116, 0x18402ecc, 0x184c0a3a, 0x18178a55, 0x180ed1a3 },
-       { 118, 0x18402ecc, 0x184c0a3e, 0x18178a55, 0x180ed193 },
-       { 120, 0x18402ec4, 0x184c0382, 0x18178a55, 0x180ed183 },
-       { 124, 0x18402ec4, 0x184c0382, 0x18178a55, 0x180ed193 },
-       { 126, 0x18402ec4, 0x184c0382, 0x18178a55, 0x180ed15b },
-       { 128, 0x18402ec4, 0x184c0382, 0x18178a55, 0x180ed1a3 },
-       { 132, 0x18402ec4, 0x184c0386, 0x18178a55, 0x180ed18b },
-       { 134, 0x18402ec4, 0x184c0386, 0x18178a55, 0x180ed193 },
-       { 136, 0x18402ec4, 0x184c0386, 0x18178a55, 0x180ed19b },
-       { 140, 0x18402ec4, 0x184c038a, 0x18178a55, 0x180ed183 },
-
-       /* 802.11 UNII */
-       { 149, 0x18402ec4, 0x184c038a, 0x18178a55, 0x180ed1a7 },
-       { 151, 0x18402ec4, 0x184c038e, 0x18178a55, 0x180ed187 },
-       { 153, 0x18402ec4, 0x184c038e, 0x18178a55, 0x180ed18f },
-       { 157, 0x18402ec4, 0x184c038e, 0x18178a55, 0x180ed19f },
-       { 159, 0x18402ec4, 0x184c038e, 0x18178a55, 0x180ed1a7 },
-       { 161, 0x18402ec4, 0x184c0392, 0x18178a55, 0x180ed187 },
-       { 165, 0x18402ec4, 0x184c0392, 0x18178a55, 0x180ed197 },
-       { 167, 0x18402ec4, 0x184c03d2, 0x18179855, 0x1815531f },
-       { 169, 0x18402ec4, 0x184c03d2, 0x18179855, 0x18155327 },
-       { 171, 0x18402ec4, 0x184c03d6, 0x18179855, 0x18155307 },
-       { 173, 0x18402ec4, 0x184c03d6, 0x18179855, 0x1815530f },
-
-       /* 802.11 Japan */
-       { 184, 0x15002ccc, 0x1500491e, 0x1509be55, 0x150c0a0b },
-       { 188, 0x15002ccc, 0x15004922, 0x1509be55, 0x150c0a13 },
-       { 192, 0x15002ccc, 0x15004926, 0x1509be55, 0x150c0a1b },
-       { 196, 0x15002ccc, 0x1500492a, 0x1509be55, 0x150c0a23 },
-       { 208, 0x15002ccc, 0x1500493a, 0x1509be55, 0x150c0a13 },
-       { 212, 0x15002ccc, 0x1500493e, 0x1509be55, 0x150c0a1b },
-       { 216, 0x15002ccc, 0x15004982, 0x1509be55, 0x150c0a23 },
-};
-
-/*
- * RF value list for rt3xxx
- * Supports: 2.4 GHz (all) & 5.2 GHz (RF3052)
- */
-static const struct rf_channel rf_vals_3x[] = {
-       {1,  241, 2, 2 },
-       {2,  241, 2, 7 },
-       {3,  242, 2, 2 },
-       {4,  242, 2, 7 },
-       {5,  243, 2, 2 },
-       {6,  243, 2, 7 },
-       {7,  244, 2, 2 },
-       {8,  244, 2, 7 },
-       {9,  245, 2, 2 },
-       {10, 245, 2, 7 },
-       {11, 246, 2, 2 },
-       {12, 246, 2, 7 },
-       {13, 247, 2, 2 },
-       {14, 248, 2, 4 },
-
-       /* 802.11 UNI / HyperLan 2 */
-       {36, 0x56, 0, 4},
-       {38, 0x56, 0, 6},
-       {40, 0x56, 0, 8},
-       {44, 0x57, 0, 0},
-       {46, 0x57, 0, 2},
-       {48, 0x57, 0, 4},
-       {52, 0x57, 0, 8},
-       {54, 0x57, 0, 10},
-       {56, 0x58, 0, 0},
-       {60, 0x58, 0, 4},
-       {62, 0x58, 0, 6},
-       {64, 0x58, 0, 8},
-
-       /* 802.11 HyperLan 2 */
-       {100, 0x5b, 0, 8},
-       {102, 0x5b, 0, 10},
-       {104, 0x5c, 0, 0},
-       {108, 0x5c, 0, 4},
-       {110, 0x5c, 0, 6},
-       {112, 0x5c, 0, 8},
-       {116, 0x5d, 0, 0},
-       {118, 0x5d, 0, 2},
-       {120, 0x5d, 0, 4},
-       {124, 0x5d, 0, 8},
-       {126, 0x5d, 0, 10},
-       {128, 0x5e, 0, 0},
-       {132, 0x5e, 0, 4},
-       {134, 0x5e, 0, 6},
-       {136, 0x5e, 0, 8},
-       {140, 0x5f, 0, 0},
-
-       /* 802.11 UNII */
-       {149, 0x5f, 0, 9},
-       {151, 0x5f, 0, 11},
-       {153, 0x60, 0, 1},
-       {157, 0x60, 0, 5},
-       {159, 0x60, 0, 7},
-       {161, 0x60, 0, 9},
-       {165, 0x61, 0, 1},
-       {167, 0x61, 0, 3},
-       {169, 0x61, 0, 5},
-       {171, 0x61, 0, 7},
-       {173, 0x61, 0, 9},
-};
-
-int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
-{
-       struct hw_mode_spec *spec = &rt2x00dev->spec;
-       struct channel_info *info;
-       char *default_power1;
-       char *default_power2;
-       unsigned int i;
-       unsigned short max_power;
-       u16 eeprom;
-
-       /*
-        * Disable powersaving as default on PCI devices.
-        */
-       if (rt2x00_is_pci(rt2x00dev) || rt2x00_is_soc(rt2x00dev))
-               rt2x00dev->hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
-
-       /*
-        * Initialize all hw fields.
-        */
-       rt2x00dev->hw->flags =
-           IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING |
-           IEEE80211_HW_SIGNAL_DBM |
-           IEEE80211_HW_SUPPORTS_PS |
-           IEEE80211_HW_PS_NULLFUNC_STACK |
-           IEEE80211_HW_AMPDU_AGGREGATION;
-
-       SET_IEEE80211_DEV(rt2x00dev->hw, rt2x00dev->dev);
-       SET_IEEE80211_PERM_ADDR(rt2x00dev->hw,
-                               rt2x00_eeprom_addr(rt2x00dev,
-                                                  EEPROM_MAC_ADDR_0));
-
-       /*
-        * As rt2800 has a global fallback table we cannot specify
-        * more then one tx rate per frame but since the hw will
-        * try several rates (based on the fallback table) we should
-        * still initialize max_rates to the maximum number of rates
-        * we are going to try. Otherwise mac80211 will truncate our
-        * reported tx rates and the rc algortihm will end up with
-        * incorrect data.
-        */
-       rt2x00dev->hw->max_rates = 7;
-       rt2x00dev->hw->max_rate_tries = 1;
-
-       rt2x00_eeprom_read(rt2x00dev, EEPROM_ANTENNA, &eeprom);
-
-       /*
-        * Initialize hw_mode information.
-        */
-       spec->supported_bands = SUPPORT_BAND_2GHZ;
-       spec->supported_rates = SUPPORT_RATE_CCK | SUPPORT_RATE_OFDM;
-
-       if (rt2x00_rf(rt2x00dev, RF2820) ||
-           rt2x00_rf(rt2x00dev, RF2720)) {
-               spec->num_channels = 14;
-               spec->channels = rf_vals;
-       } else if (rt2x00_rf(rt2x00dev, RF2850) ||
-                  rt2x00_rf(rt2x00dev, RF2750)) {
-               spec->supported_bands |= SUPPORT_BAND_5GHZ;
-               spec->num_channels = ARRAY_SIZE(rf_vals);
-               spec->channels = rf_vals;
-       } else if (rt2x00_rf(rt2x00dev, RF3020) ||
-                  rt2x00_rf(rt2x00dev, RF2020) ||
-                  rt2x00_rf(rt2x00dev, RF3021) ||
-                  rt2x00_rf(rt2x00dev, RF3022)) {
-               spec->num_channels = 14;
-               spec->channels = rf_vals_3x;
-       } else if (rt2x00_rf(rt2x00dev, RF3052)) {
-               spec->supported_bands |= SUPPORT_BAND_5GHZ;
-               spec->num_channels = ARRAY_SIZE(rf_vals_3x);
-               spec->channels = rf_vals_3x;
-       }
-
-       /*
-        * Initialize HT information.
-        */
-       if (!rt2x00_rf(rt2x00dev, RF2020))
-               spec->ht.ht_supported = true;
-       else
-               spec->ht.ht_supported = false;
-
-       spec->ht.cap =
-           IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
-           IEEE80211_HT_CAP_GRN_FLD |
-           IEEE80211_HT_CAP_SGI_20 |
-           IEEE80211_HT_CAP_SGI_40;
-
-       if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_TXPATH) >= 2)
-               spec->ht.cap |= IEEE80211_HT_CAP_TX_STBC;
-
-       spec->ht.cap |=
-           rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RXPATH) <<
-               IEEE80211_HT_CAP_RX_STBC_SHIFT;
-
-       spec->ht.ampdu_factor = 3;
-       spec->ht.ampdu_density = 4;
-       spec->ht.mcs.tx_params =
-           IEEE80211_HT_MCS_TX_DEFINED |
-           IEEE80211_HT_MCS_TX_RX_DIFF |
-           ((rt2x00_get_field16(eeprom, EEPROM_ANTENNA_TXPATH) - 1) <<
-               IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT);
-
-       switch (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RXPATH)) {
-       case 3:
-               spec->ht.mcs.rx_mask[2] = 0xff;
-       case 2:
-               spec->ht.mcs.rx_mask[1] = 0xff;
-       case 1:
-               spec->ht.mcs.rx_mask[0] = 0xff;
-               spec->ht.mcs.rx_mask[4] = 0x1; /* MCS32 */
-               break;
-       }
-
-       /*
-        * Create channel information array
-        */
-       info = kzalloc(spec->num_channels * sizeof(*info), GFP_KERNEL);
-       if (!info)
-               return -ENOMEM;
-
-       spec->channels_info = info;
-
-       rt2x00_eeprom_read(rt2x00dev, EEPROM_MAX_TX_POWER, &eeprom);
-       max_power = rt2x00_get_field16(eeprom, EEPROM_MAX_TX_POWER_24GHZ);
-       default_power1 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG1);
-       default_power2 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG2);
-
-       for (i = 0; i < 14; i++) {
-               info[i].max_power = max_power;
-               info[i].default_power1 = TXPOWER_G_FROM_DEV(default_power1[i]);
-               info[i].default_power2 = TXPOWER_G_FROM_DEV(default_power2[i]);
-       }
-
-       if (spec->num_channels > 14) {
-               max_power = rt2x00_get_field16(eeprom, EEPROM_MAX_TX_POWER_5GHZ);
-               default_power1 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A1);
-               default_power2 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A2);
-
-               for (i = 14; i < spec->num_channels; i++) {
-                       info[i].max_power = max_power;
-                       info[i].default_power1 = TXPOWER_A_FROM_DEV(default_power1[i]);
-                       info[i].default_power2 = TXPOWER_A_FROM_DEV(default_power2[i]);
-               }
-       }
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(rt2800_probe_hw_mode);
-
-/*
- * IEEE80211 stack callback functions.
- */
-void rt2800_get_tkip_seq(struct ieee80211_hw *hw, u8 hw_key_idx, u32 *iv32,
-                        u16 *iv16)
-{
-       struct rt2x00_dev *rt2x00dev = hw->priv;
-       struct mac_iveiv_entry iveiv_entry;
-       u32 offset;
-
-       offset = MAC_IVEIV_ENTRY(hw_key_idx);
-       rt2800_register_multiread(rt2x00dev, offset,
-                                     &iveiv_entry, sizeof(iveiv_entry));
-
-       memcpy(iv16, &iveiv_entry.iv[0], sizeof(*iv16));
-       memcpy(iv32, &iveiv_entry.iv[4], sizeof(*iv32));
-}
-EXPORT_SYMBOL_GPL(rt2800_get_tkip_seq);
-
-int rt2800_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
-{
-       struct rt2x00_dev *rt2x00dev = hw->priv;
-       u32 reg;
-       bool enabled = (value < IEEE80211_MAX_RTS_THRESHOLD);
-
-       rt2800_register_read(rt2x00dev, TX_RTS_CFG, &reg);
-       rt2x00_set_field32(&reg, TX_RTS_CFG_RTS_THRES, value);
-       rt2800_register_write(rt2x00dev, TX_RTS_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, CCK_PROT_CFG, &reg);
-       rt2x00_set_field32(&reg, CCK_PROT_CFG_RTS_TH_EN, enabled);
-       rt2800_register_write(rt2x00dev, CCK_PROT_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, OFDM_PROT_CFG, &reg);
-       rt2x00_set_field32(&reg, OFDM_PROT_CFG_RTS_TH_EN, enabled);
-       rt2800_register_write(rt2x00dev, OFDM_PROT_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, MM20_PROT_CFG, &reg);
-       rt2x00_set_field32(&reg, MM20_PROT_CFG_RTS_TH_EN, enabled);
-       rt2800_register_write(rt2x00dev, MM20_PROT_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, MM40_PROT_CFG, &reg);
-       rt2x00_set_field32(&reg, MM40_PROT_CFG_RTS_TH_EN, enabled);
-       rt2800_register_write(rt2x00dev, MM40_PROT_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, GF20_PROT_CFG, &reg);
-       rt2x00_set_field32(&reg, GF20_PROT_CFG_RTS_TH_EN, enabled);
-       rt2800_register_write(rt2x00dev, GF20_PROT_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, GF40_PROT_CFG, &reg);
-       rt2x00_set_field32(&reg, GF40_PROT_CFG_RTS_TH_EN, enabled);
-       rt2800_register_write(rt2x00dev, GF40_PROT_CFG, reg);
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(rt2800_set_rts_threshold);
-
-int rt2800_conf_tx(struct ieee80211_hw *hw, u16 queue_idx,
-                  const struct ieee80211_tx_queue_params *params)
-{
-       struct rt2x00_dev *rt2x00dev = hw->priv;
-       struct data_queue *queue;
-       struct rt2x00_field32 field;
-       int retval;
-       u32 reg;
-       u32 offset;
-
-       /*
-        * First pass the configuration through rt2x00lib, that will
-        * update the queue settings and validate the input. After that
-        * we are free to update the registers based on the value
-        * in the queue parameter.
-        */
-       retval = rt2x00mac_conf_tx(hw, queue_idx, params);
-       if (retval)
-               return retval;
-
-       /*
-        * We only need to perform additional register initialization
-        * for WMM queues/
-        */
-       if (queue_idx >= 4)
-               return 0;
-
-       queue = rt2x00queue_get_queue(rt2x00dev, queue_idx);
-
-       /* Update WMM TXOP register */
-       offset = WMM_TXOP0_CFG + (sizeof(u32) * (!!(queue_idx & 2)));
-       field.bit_offset = (queue_idx & 1) * 16;
-       field.bit_mask = 0xffff << field.bit_offset;
-
-       rt2800_register_read(rt2x00dev, offset, &reg);
-       rt2x00_set_field32(&reg, field, queue->txop);
-       rt2800_register_write(rt2x00dev, offset, reg);
-
-       /* Update WMM registers */
-       field.bit_offset = queue_idx * 4;
-       field.bit_mask = 0xf << field.bit_offset;
-
-       rt2800_register_read(rt2x00dev, WMM_AIFSN_CFG, &reg);
-       rt2x00_set_field32(&reg, field, queue->aifs);
-       rt2800_register_write(rt2x00dev, WMM_AIFSN_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, WMM_CWMIN_CFG, &reg);
-       rt2x00_set_field32(&reg, field, queue->cw_min);
-       rt2800_register_write(rt2x00dev, WMM_CWMIN_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, WMM_CWMAX_CFG, &reg);
-       rt2x00_set_field32(&reg, field, queue->cw_max);
-       rt2800_register_write(rt2x00dev, WMM_CWMAX_CFG, reg);
-
-       /* Update EDCA registers */
-       offset = EDCA_AC0_CFG + (sizeof(u32) * queue_idx);
-
-       rt2800_register_read(rt2x00dev, offset, &reg);
-       rt2x00_set_field32(&reg, EDCA_AC0_CFG_TX_OP, queue->txop);
-       rt2x00_set_field32(&reg, EDCA_AC0_CFG_AIFSN, queue->aifs);
-       rt2x00_set_field32(&reg, EDCA_AC0_CFG_CWMIN, queue->cw_min);
-       rt2x00_set_field32(&reg, EDCA_AC0_CFG_CWMAX, queue->cw_max);
-       rt2800_register_write(rt2x00dev, offset, reg);
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(rt2800_conf_tx);
-
-u64 rt2800_get_tsf(struct ieee80211_hw *hw)
-{
-       struct rt2x00_dev *rt2x00dev = hw->priv;
-       u64 tsf;
-       u32 reg;
-
-       rt2800_register_read(rt2x00dev, TSF_TIMER_DW1, &reg);
-       tsf = (u64) rt2x00_get_field32(reg, TSF_TIMER_DW1_HIGH_WORD) << 32;
-       rt2800_register_read(rt2x00dev, TSF_TIMER_DW0, &reg);
-       tsf |= rt2x00_get_field32(reg, TSF_TIMER_DW0_LOW_WORD);
-
-       return tsf;
-}
-EXPORT_SYMBOL_GPL(rt2800_get_tsf);
-
-int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-                       enum ieee80211_ampdu_mlme_action action,
-                       struct ieee80211_sta *sta, u16 tid, u16 *ssn)
-{
-       int ret = 0;
-
-       switch (action) {
-       case IEEE80211_AMPDU_RX_START:
-       case IEEE80211_AMPDU_RX_STOP:
-               /* we don't support RX aggregation yet */
-               ret = -ENOTSUPP;
-               break;
-       case IEEE80211_AMPDU_TX_START:
-               ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-               break;
-       case IEEE80211_AMPDU_TX_STOP:
-               ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-               break;
-       case IEEE80211_AMPDU_TX_OPERATIONAL:
-               break;
-       default:
-               WARNING((struct rt2x00_dev *)hw->priv, "Unknown AMPDU action\n");
-       }
-
-       return ret;
-}
-EXPORT_SYMBOL_GPL(rt2800_ampdu_action);
-
-MODULE_AUTHOR(DRV_PROJECT ", Bartlomiej Zolnierkiewicz");
-MODULE_VERSION(DRV_VERSION);
-MODULE_DESCRIPTION("Ralink RT2800 library");
-MODULE_LICENSE("GPL");
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.h b/drivers/net/wireless/rt2x00/rt2800lib.h
deleted file mode 100644 (file)
index 091641e..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
-       Copyright (C) 2009 Bartlomiej Zolnierkiewicz
-
-       This program is free software; you can redistribute it and/or modify
-       it under the terms of the GNU General Public License as published by
-       the Free Software Foundation; either version 2 of the License, or
-       (at your option) any later version.
-
-       This program is distributed in the hope that it will be useful,
-       but WITHOUT ANY WARRANTY; without even the implied warranty of
-       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-       GNU General Public License for more details.
-
-       You should have received a copy of the GNU General Public License
-       along with this program; if not, write to the
-       Free Software Foundation, Inc.,
-       59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef RT2800LIB_H
-#define RT2800LIB_H
-
-struct rt2800_ops {
-       void (*register_read)(struct rt2x00_dev *rt2x00dev,
-                             const unsigned int offset, u32 *value);
-       void (*register_read_lock)(struct rt2x00_dev *rt2x00dev,
-                                  const unsigned int offset, u32 *value);
-       void (*register_write)(struct rt2x00_dev *rt2x00dev,
-                              const unsigned int offset, u32 value);
-       void (*register_write_lock)(struct rt2x00_dev *rt2x00dev,
-                                   const unsigned int offset, u32 value);
-
-       void (*register_multiread)(struct rt2x00_dev *rt2x00dev,
-                                  const unsigned int offset,
-                                  void *value, const u32 length);
-       void (*register_multiwrite)(struct rt2x00_dev *rt2x00dev,
-                                   const unsigned int offset,
-                                   const void *value, const u32 length);
-
-       int (*regbusy_read)(struct rt2x00_dev *rt2x00dev,
-                           const unsigned int offset,
-                           const struct rt2x00_field32 field, u32 *reg);
-
-       int (*drv_write_firmware)(struct rt2x00_dev *rt2x00dev,
-                                 const u8 *data, const size_t len);
-       int (*drv_init_registers)(struct rt2x00_dev *rt2x00dev);
-};
-
-static inline void rt2800_register_read(struct rt2x00_dev *rt2x00dev,
-                                       const unsigned int offset,
-                                       u32 *value)
-{
-       const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
-
-       rt2800ops->register_read(rt2x00dev, offset, value);
-}
-
-static inline void rt2800_register_read_lock(struct rt2x00_dev *rt2x00dev,
-                                            const unsigned int offset,
-                                            u32 *value)
-{
-       const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
-
-       rt2800ops->register_read_lock(rt2x00dev, offset, value);
-}
-
-static inline void rt2800_register_write(struct rt2x00_dev *rt2x00dev,
-                                        const unsigned int offset,
-                                        u32 value)
-{
-       const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
-
-       rt2800ops->register_write(rt2x00dev, offset, value);
-}
-
-static inline void rt2800_register_write_lock(struct rt2x00_dev *rt2x00dev,
-                                             const unsigned int offset,
-                                             u32 value)
-{
-       const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
-
-       rt2800ops->register_write_lock(rt2x00dev, offset, value);
-}
-
-static inline void rt2800_register_multiread(struct rt2x00_dev *rt2x00dev,
-                                            const unsigned int offset,
-                                            void *value, const u32 length)
-{
-       const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
-
-       rt2800ops->register_multiread(rt2x00dev, offset, value, length);
-}
-
-static inline void rt2800_register_multiwrite(struct rt2x00_dev *rt2x00dev,
-                                             const unsigned int offset,
-                                             const void *value,
-                                             const u32 length)
-{
-       const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
-
-       rt2800ops->register_multiwrite(rt2x00dev, offset, value, length);
-}
-
-static inline int rt2800_regbusy_read(struct rt2x00_dev *rt2x00dev,
-                                     const unsigned int offset,
-                                     const struct rt2x00_field32 field,
-                                     u32 *reg)
-{
-       const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
-
-       return rt2800ops->regbusy_read(rt2x00dev, offset, field, reg);
-}
-
-static inline int rt2800_drv_write_firmware(struct rt2x00_dev *rt2x00dev,
-                                           const u8 *data, const size_t len)
-{
-       const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
-
-       return rt2800ops->drv_write_firmware(rt2x00dev, data, len);
-}
-
-static inline int rt2800_drv_init_registers(struct rt2x00_dev *rt2x00dev)
-{
-       const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
-
-       return rt2800ops->drv_init_registers(rt2x00dev);
-}
-
-void rt2800_mcu_request(struct rt2x00_dev *rt2x00dev,
-                       const u8 command, const u8 token,
-                       const u8 arg0, const u8 arg1);
-
-int rt2800_check_firmware(struct rt2x00_dev *rt2x00dev,
-                         const u8 *data, const size_t len);
-int rt2800_load_firmware(struct rt2x00_dev *rt2x00dev,
-                        const u8 *data, const size_t len);
-
-void rt2800_write_txwi(__le32 *txwi, struct txentry_desc *txdesc);
-void rt2800_process_rxwi(struct queue_entry *entry, struct rxdone_entry_desc *txdesc);
-
-void rt2800_write_beacon(struct queue_entry *entry, struct txentry_desc *txdesc);
-
-extern const struct rt2x00debug rt2800_rt2x00debug;
-
-int rt2800_rfkill_poll(struct rt2x00_dev *rt2x00dev);
-int rt2800_config_shared_key(struct rt2x00_dev *rt2x00dev,
-                            struct rt2x00lib_crypto *crypto,
-                            struct ieee80211_key_conf *key);
-int rt2800_config_pairwise_key(struct rt2x00_dev *rt2x00dev,
-                              struct rt2x00lib_crypto *crypto,
-                              struct ieee80211_key_conf *key);
-void rt2800_config_filter(struct rt2x00_dev *rt2x00dev,
-                         const unsigned int filter_flags);
-void rt2800_config_intf(struct rt2x00_dev *rt2x00dev, struct rt2x00_intf *intf,
-                       struct rt2x00intf_conf *conf, const unsigned int flags);
-void rt2800_config_erp(struct rt2x00_dev *rt2x00dev, struct rt2x00lib_erp *erp);
-void rt2800_config_ant(struct rt2x00_dev *rt2x00dev, struct antenna_setup *ant);
-void rt2800_config(struct rt2x00_dev *rt2x00dev,
-                  struct rt2x00lib_conf *libconf,
-                  const unsigned int flags);
-void rt2800_link_stats(struct rt2x00_dev *rt2x00dev, struct link_qual *qual);
-void rt2800_reset_tuner(struct rt2x00_dev *rt2x00dev, struct link_qual *qual);
-void rt2800_link_tuner(struct rt2x00_dev *rt2x00dev, struct link_qual *qual,
-                      const u32 count);
-
-int rt2800_init_registers(struct rt2x00_dev *rt2x00dev);
-int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev);
-int rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev);
-int rt2800_wait_wpdma_ready(struct rt2x00_dev *rt2x00dev);
-
-int rt2800_efuse_detect(struct rt2x00_dev *rt2x00dev);
-void rt2800_read_eeprom_efuse(struct rt2x00_dev *rt2x00dev);
-int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev);
-int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev);
-int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev);
-
-void rt2800_get_tkip_seq(struct ieee80211_hw *hw, u8 hw_key_idx, u32 *iv32,
-                        u16 *iv16);
-int rt2800_set_rts_threshold(struct ieee80211_hw *hw, u32 value);
-int rt2800_conf_tx(struct ieee80211_hw *hw, u16 queue_idx,
-                  const struct ieee80211_tx_queue_params *params);
-u64 rt2800_get_tsf(struct ieee80211_hw *hw);
-int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-                       enum ieee80211_ampdu_mlme_action action,
-                       struct ieee80211_sta *sta, u16 tid, u16 *ssn);
-
-#endif /* RT2800LIB_H */
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
deleted file mode 100644 (file)
index 39b3846..0000000
+++ /dev/null
@@ -1,1194 +0,0 @@
-/*
-       Copyright (C) 2009 Ivo van Doorn <IvDoorn@gmail.com>
-       Copyright (C) 2009 Alban Browaeys <prahal@yahoo.com>
-       Copyright (C) 2009 Felix Fietkau <nbd@openwrt.org>
-       Copyright (C) 2009 Luis Correia <luis.f.correia@gmail.com>
-       Copyright (C) 2009 Mattias Nissler <mattias.nissler@gmx.de>
-       Copyright (C) 2009 Mark Asselstine <asselsm@gmail.com>
-       Copyright (C) 2009 Xose Vazquez Perez <xose.vazquez@gmail.com>
-       Copyright (C) 2009 Bart Zolnierkiewicz <bzolnier@gmail.com>
-       <http://rt2x00.serialmonkey.com>
-
-       This program is free software; you can redistribute it and/or modify
-       it under the terms of the GNU General Public License as published by
-       the Free Software Foundation; either version 2 of the License, or
-       (at your option) any later version.
-
-       This program is distributed in the hope that it will be useful,
-       but WITHOUT ANY WARRANTY; without even the implied warranty of
-       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-       GNU General Public License for more details.
-
-       You should have received a copy of the GNU General Public License
-       along with this program; if not, write to the
-       Free Software Foundation, Inc.,
-       59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-/*
-       Module: rt2800pci
-       Abstract: rt2800pci device specific routines.
-       Supported chipsets: RT2800E & RT2800ED.
- */
-
-#include <linux/delay.h>
-#include <linux/etherdevice.h>
-#include <linux/init.h>
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/pci.h>
-#include <linux/platform_device.h>
-#include <linux/eeprom_93cx6.h>
-
-#include "rt2x00.h"
-#include "rt2x00pci.h"
-#include "rt2x00soc.h"
-#include "rt2800lib.h"
-#include "rt2800.h"
-#include "rt2800pci.h"
-
-/*
- * Allow hardware encryption to be disabled.
- */
-static int modparam_nohwcrypt = 0;
-module_param_named(nohwcrypt, modparam_nohwcrypt, bool, S_IRUGO);
-MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption.");
-
-static void rt2800pci_mcu_status(struct rt2x00_dev *rt2x00dev, const u8 token)
-{
-       unsigned int i;
-       u32 reg;
-
-       /*
-        * SOC devices don't support MCU requests.
-        */
-       if (rt2x00_is_soc(rt2x00dev))
-               return;
-
-       for (i = 0; i < 200; i++) {
-               rt2800_register_read(rt2x00dev, H2M_MAILBOX_CID, &reg);
-
-               if ((rt2x00_get_field32(reg, H2M_MAILBOX_CID_CMD0) == token) ||
-                   (rt2x00_get_field32(reg, H2M_MAILBOX_CID_CMD1) == token) ||
-                   (rt2x00_get_field32(reg, H2M_MAILBOX_CID_CMD2) == token) ||
-                   (rt2x00_get_field32(reg, H2M_MAILBOX_CID_CMD3) == token))
-                       break;
-
-               udelay(REGISTER_BUSY_DELAY);
-       }
-
-       if (i == 200)
-               ERROR(rt2x00dev, "MCU request failed, no response from hardware\n");
-
-       rt2800_register_write(rt2x00dev, H2M_MAILBOX_STATUS, ~0);
-       rt2800_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0);
-}
-
-#ifdef CONFIG_RT2800PCI_SOC
-static void rt2800pci_read_eeprom_soc(struct rt2x00_dev *rt2x00dev)
-{
-       u32 *base_addr = (u32 *) KSEG1ADDR(0x1F040000); /* XXX for RT3052 */
-
-       memcpy_fromio(rt2x00dev->eeprom, base_addr, EEPROM_SIZE);
-}
-#else
-static inline void rt2800pci_read_eeprom_soc(struct rt2x00_dev *rt2x00dev)
-{
-}
-#endif /* CONFIG_RT2800PCI_SOC */
-
-#ifdef CONFIG_RT2800PCI_PCI
-static void rt2800pci_eepromregister_read(struct eeprom_93cx6 *eeprom)
-{
-       struct rt2x00_dev *rt2x00dev = eeprom->data;
-       u32 reg;
-
-       rt2800_register_read(rt2x00dev, E2PROM_CSR, &reg);
-
-       eeprom->reg_data_in = !!rt2x00_get_field32(reg, E2PROM_CSR_DATA_IN);
-       eeprom->reg_data_out = !!rt2x00_get_field32(reg, E2PROM_CSR_DATA_OUT);
-       eeprom->reg_data_clock =
-           !!rt2x00_get_field32(reg, E2PROM_CSR_DATA_CLOCK);
-       eeprom->reg_chip_select =
-           !!rt2x00_get_field32(reg, E2PROM_CSR_CHIP_SELECT);
-}
-
-static void rt2800pci_eepromregister_write(struct eeprom_93cx6 *eeprom)
-{
-       struct rt2x00_dev *rt2x00dev = eeprom->data;
-       u32 reg = 0;
-
-       rt2x00_set_field32(&reg, E2PROM_CSR_DATA_IN, !!eeprom->reg_data_in);
-       rt2x00_set_field32(&reg, E2PROM_CSR_DATA_OUT, !!eeprom->reg_data_out);
-       rt2x00_set_field32(&reg, E2PROM_CSR_DATA_CLOCK,
-                          !!eeprom->reg_data_clock);
-       rt2x00_set_field32(&reg, E2PROM_CSR_CHIP_SELECT,
-                          !!eeprom->reg_chip_select);
-
-       rt2800_register_write(rt2x00dev, E2PROM_CSR, reg);
-}
-
-static void rt2800pci_read_eeprom_pci(struct rt2x00_dev *rt2x00dev)
-{
-       struct eeprom_93cx6 eeprom;
-       u32 reg;
-
-       rt2800_register_read(rt2x00dev, E2PROM_CSR, &reg);
-
-       eeprom.data = rt2x00dev;
-       eeprom.register_read = rt2800pci_eepromregister_read;
-       eeprom.register_write = rt2800pci_eepromregister_write;
-       switch (rt2x00_get_field32(reg, E2PROM_CSR_TYPE))
-       {
-       case 0:
-               eeprom.width = PCI_EEPROM_WIDTH_93C46;
-               break;
-       case 1:
-               eeprom.width = PCI_EEPROM_WIDTH_93C66;
-               break;
-       default:
-               eeprom.width = PCI_EEPROM_WIDTH_93C86;
-               break;
-       }
-       eeprom.reg_data_in = 0;
-       eeprom.reg_data_out = 0;
-       eeprom.reg_data_clock = 0;
-       eeprom.reg_chip_select = 0;
-
-       eeprom_93cx6_multiread(&eeprom, EEPROM_BASE, rt2x00dev->eeprom,
-                              EEPROM_SIZE / sizeof(u16));
-}
-
-static int rt2800pci_efuse_detect(struct rt2x00_dev *rt2x00dev)
-{
-       return rt2800_efuse_detect(rt2x00dev);
-}
-
-static inline void rt2800pci_read_eeprom_efuse(struct rt2x00_dev *rt2x00dev)
-{
-       rt2800_read_eeprom_efuse(rt2x00dev);
-}
-#else
-static inline void rt2800pci_read_eeprom_pci(struct rt2x00_dev *rt2x00dev)
-{
-}
-
-static inline int rt2800pci_efuse_detect(struct rt2x00_dev *rt2x00dev)
-{
-       return 0;
-}
-
-static inline void rt2800pci_read_eeprom_efuse(struct rt2x00_dev *rt2x00dev)
-{
-}
-#endif /* CONFIG_RT2800PCI_PCI */
-
-/*
- * Firmware functions
- */
-static char *rt2800pci_get_firmware_name(struct rt2x00_dev *rt2x00dev)
-{
-       return FIRMWARE_RT2860;
-}
-
-static int rt2800pci_write_firmware(struct rt2x00_dev *rt2x00dev,
-                                   const u8 *data, const size_t len)
-{
-       u32 reg;
-
-       rt2800_register_write(rt2x00dev, AUTOWAKEUP_CFG, 0x00000000);
-
-       /*
-        * enable Host program ram write selection
-        */
-       reg = 0;
-       rt2x00_set_field32(&reg, PBF_SYS_CTRL_HOST_RAM_WRITE, 1);
-       rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, reg);
-
-       /*
-        * Write firmware to device.
-        */
-       rt2800_register_multiwrite(rt2x00dev, FIRMWARE_IMAGE_BASE,
-                                  data, len);
-
-       rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000);
-       rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00001);
-
-       rt2800_register_write(rt2x00dev, H2M_BBP_AGENT, 0);
-       rt2800_register_write(rt2x00dev, H2M_MAILBOX_CSR, 0);
-
-       return 0;
-}
-
-/*
- * Initialization functions.
- */
-static bool rt2800pci_get_entry_state(struct queue_entry *entry)
-{
-       struct queue_entry_priv_pci *entry_priv = entry->priv_data;
-       u32 word;
-
-       if (entry->queue->qid == QID_RX) {
-               rt2x00_desc_read(entry_priv->desc, 1, &word);
-
-               return (!rt2x00_get_field32(word, RXD_W1_DMA_DONE));
-       } else {
-               rt2x00_desc_read(entry_priv->desc, 1, &word);
-
-               return (!rt2x00_get_field32(word, TXD_W1_DMA_DONE));
-       }
-}
-
-static void rt2800pci_clear_entry(struct queue_entry *entry)
-{
-       struct queue_entry_priv_pci *entry_priv = entry->priv_data;
-       struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb);
-       u32 word;
-
-       if (entry->queue->qid == QID_RX) {
-               rt2x00_desc_read(entry_priv->desc, 0, &word);
-               rt2x00_set_field32(&word, RXD_W0_SDP0, skbdesc->skb_dma);
-               rt2x00_desc_write(entry_priv->desc, 0, word);
-
-               rt2x00_desc_read(entry_priv->desc, 1, &word);
-               rt2x00_set_field32(&word, RXD_W1_DMA_DONE, 0);
-               rt2x00_desc_write(entry_priv->desc, 1, word);
-       } else {
-               rt2x00_desc_read(entry_priv->desc, 1, &word);
-               rt2x00_set_field32(&word, TXD_W1_DMA_DONE, 1);
-               rt2x00_desc_write(entry_priv->desc, 1, word);
-       }
-}
-
-static int rt2800pci_init_queues(struct rt2x00_dev *rt2x00dev)
-{
-       struct queue_entry_priv_pci *entry_priv;
-       u32 reg;
-
-       /*
-        * Initialize registers.
-        */
-       entry_priv = rt2x00dev->tx[0].entries[0].priv_data;
-       rt2800_register_write(rt2x00dev, TX_BASE_PTR0, entry_priv->desc_dma);
-       rt2800_register_write(rt2x00dev, TX_MAX_CNT0, rt2x00dev->tx[0].limit);
-       rt2800_register_write(rt2x00dev, TX_CTX_IDX0, 0);
-       rt2800_register_write(rt2x00dev, TX_DTX_IDX0, 0);
-
-       entry_priv = rt2x00dev->tx[1].entries[0].priv_data;
-       rt2800_register_write(rt2x00dev, TX_BASE_PTR1, entry_priv->desc_dma);
-       rt2800_register_write(rt2x00dev, TX_MAX_CNT1, rt2x00dev->tx[1].limit);
-       rt2800_register_write(rt2x00dev, TX_CTX_IDX1, 0);
-       rt2800_register_write(rt2x00dev, TX_DTX_IDX1, 0);
-
-       entry_priv = rt2x00dev->tx[2].entries[0].priv_data;
-       rt2800_register_write(rt2x00dev, TX_BASE_PTR2, entry_priv->desc_dma);
-       rt2800_register_write(rt2x00dev, TX_MAX_CNT2, rt2x00dev->tx[2].limit);
-       rt2800_register_write(rt2x00dev, TX_CTX_IDX2, 0);
-       rt2800_register_write(rt2x00dev, TX_DTX_IDX2, 0);
-
-       entry_priv = rt2x00dev->tx[3].entries[0].priv_data;
-       rt2800_register_write(rt2x00dev, TX_BASE_PTR3, entry_priv->desc_dma);
-       rt2800_register_write(rt2x00dev, TX_MAX_CNT3, rt2x00dev->tx[3].limit);
-       rt2800_register_write(rt2x00dev, TX_CTX_IDX3, 0);
-       rt2800_register_write(rt2x00dev, TX_DTX_IDX3, 0);
-
-       entry_priv = rt2x00dev->rx->entries[0].priv_data;
-       rt2800_register_write(rt2x00dev, RX_BASE_PTR, entry_priv->desc_dma);
-       rt2800_register_write(rt2x00dev, RX_MAX_CNT, rt2x00dev->rx[0].limit);
-       rt2800_register_write(rt2x00dev, RX_CRX_IDX, rt2x00dev->rx[0].limit - 1);
-       rt2800_register_write(rt2x00dev, RX_DRX_IDX, 0);
-
-       /*
-        * Enable global DMA configuration
-        */
-       rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 1);
-       rt2800_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
-
-       rt2800_register_write(rt2x00dev, DELAY_INT_CFG, 0);
-
-       return 0;
-}
-
-/*
- * Device state switch handlers.
- */
-static void rt2800pci_toggle_rx(struct rt2x00_dev *rt2x00dev,
-                               enum dev_state state)
-{
-       u32 reg;
-
-       rt2800_register_read(rt2x00dev, MAC_SYS_CTRL, &reg);
-       rt2x00_set_field32(&reg, MAC_SYS_CTRL_ENABLE_RX,
-                          (state == STATE_RADIO_RX_ON) ||
-                          (state == STATE_RADIO_RX_ON_LINK));
-       rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, reg);
-}
-
-static void rt2800pci_toggle_irq(struct rt2x00_dev *rt2x00dev,
-                                enum dev_state state)
-{
-       int mask = (state == STATE_RADIO_IRQ_ON) ||
-                  (state == STATE_RADIO_IRQ_ON_ISR);
-       u32 reg;
-
-       /*
-        * When interrupts are being enabled, the interrupt registers
-        * should clear the register to assure a clean state.
-        */
-       if (state == STATE_RADIO_IRQ_ON) {
-               rt2800_register_read(rt2x00dev, INT_SOURCE_CSR, &reg);
-               rt2800_register_write(rt2x00dev, INT_SOURCE_CSR, reg);
-       }
-
-       rt2800_register_read(rt2x00dev, INT_MASK_CSR, &reg);
-       rt2x00_set_field32(&reg, INT_MASK_CSR_RXDELAYINT, mask);
-       rt2x00_set_field32(&reg, INT_MASK_CSR_TXDELAYINT, mask);
-       rt2x00_set_field32(&reg, INT_MASK_CSR_RX_DONE, mask);
-       rt2x00_set_field32(&reg, INT_MASK_CSR_AC0_DMA_DONE, mask);
-       rt2x00_set_field32(&reg, INT_MASK_CSR_AC1_DMA_DONE, mask);
-       rt2x00_set_field32(&reg, INT_MASK_CSR_AC2_DMA_DONE, mask);
-       rt2x00_set_field32(&reg, INT_MASK_CSR_AC3_DMA_DONE, mask);
-       rt2x00_set_field32(&reg, INT_MASK_CSR_HCCA_DMA_DONE, mask);
-       rt2x00_set_field32(&reg, INT_MASK_CSR_MGMT_DMA_DONE, mask);
-       rt2x00_set_field32(&reg, INT_MASK_CSR_MCU_COMMAND, mask);
-       rt2x00_set_field32(&reg, INT_MASK_CSR_RXTX_COHERENT, mask);
-       rt2x00_set_field32(&reg, INT_MASK_CSR_TBTT, mask);
-       rt2x00_set_field32(&reg, INT_MASK_CSR_PRE_TBTT, mask);
-       rt2x00_set_field32(&reg, INT_MASK_CSR_TX_FIFO_STATUS, mask);
-       rt2x00_set_field32(&reg, INT_MASK_CSR_AUTO_WAKEUP, mask);
-       rt2x00_set_field32(&reg, INT_MASK_CSR_GPTIMER, mask);
-       rt2x00_set_field32(&reg, INT_MASK_CSR_RX_COHERENT, mask);
-       rt2x00_set_field32(&reg, INT_MASK_CSR_TX_COHERENT, mask);
-       rt2800_register_write(rt2x00dev, INT_MASK_CSR, reg);
-}
-
-static int rt2800pci_init_registers(struct rt2x00_dev *rt2x00dev)
-{
-       u32 reg;
-
-       /*
-        * Reset DMA indexes
-        */
-       rt2800_register_read(rt2x00dev, WPDMA_RST_IDX, &reg);
-       rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX0, 1);
-       rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX1, 1);
-       rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX2, 1);
-       rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX3, 1);
-       rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX4, 1);
-       rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX5, 1);
-       rt2x00_set_field32(&reg, WPDMA_RST_IDX_DRX_IDX0, 1);
-       rt2800_register_write(rt2x00dev, WPDMA_RST_IDX, reg);
-
-       rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e1f);
-       rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e00);
-
-       rt2800_register_write(rt2x00dev, PWR_PIN_CFG, 0x00000003);
-
-       rt2800_register_read(rt2x00dev, MAC_SYS_CTRL, &reg);
-       rt2x00_set_field32(&reg, MAC_SYS_CTRL_RESET_CSR, 1);
-       rt2x00_set_field32(&reg, MAC_SYS_CTRL_RESET_BBP, 1);
-       rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, reg);
-
-       rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, 0x00000000);
-
-       return 0;
-}
-
-static int rt2800pci_enable_radio(struct rt2x00_dev *rt2x00dev)
-{
-       u32 reg;
-       u16 word;
-
-       /*
-        * Initialize all registers.
-        */
-       if (unlikely(rt2800_wait_wpdma_ready(rt2x00dev) ||
-                    rt2800pci_init_queues(rt2x00dev) ||
-                    rt2800_init_registers(rt2x00dev) ||
-                    rt2800_wait_wpdma_ready(rt2x00dev) ||
-                    rt2800_init_bbp(rt2x00dev) ||
-                    rt2800_init_rfcsr(rt2x00dev)))
-               return -EIO;
-
-       /*
-        * Send signal to firmware during boot time.
-        */
-       rt2800_mcu_request(rt2x00dev, MCU_BOOT_SIGNAL, 0, 0, 0);
-
-       /*
-        * Enable RX.
-        */
-       rt2800_register_read(rt2x00dev, MAC_SYS_CTRL, &reg);
-       rt2x00_set_field32(&reg, MAC_SYS_CTRL_ENABLE_TX, 1);
-       rt2x00_set_field32(&reg, MAC_SYS_CTRL_ENABLE_RX, 0);
-       rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, reg);
-
-       rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 1);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 1);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_WP_DMA_BURST_SIZE, 2);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 1);
-       rt2800_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
-
-       rt2800_register_read(rt2x00dev, MAC_SYS_CTRL, &reg);
-       rt2x00_set_field32(&reg, MAC_SYS_CTRL_ENABLE_TX, 1);
-       rt2x00_set_field32(&reg, MAC_SYS_CTRL_ENABLE_RX, 1);
-       rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, reg);
-
-       /*
-        * Initialize LED control
-        */
-       rt2x00_eeprom_read(rt2x00dev, EEPROM_LED1, &word);
-       rt2800_mcu_request(rt2x00dev, MCU_LED_1, 0xff,
-                             word & 0xff, (word >> 8) & 0xff);
-
-       rt2x00_eeprom_read(rt2x00dev, EEPROM_LED2, &word);
-       rt2800_mcu_request(rt2x00dev, MCU_LED_2, 0xff,
-                             word & 0xff, (word >> 8) & 0xff);
-
-       rt2x00_eeprom_read(rt2x00dev, EEPROM_LED3, &word);
-       rt2800_mcu_request(rt2x00dev, MCU_LED_3, 0xff,
-                             word & 0xff, (word >> 8) & 0xff);
-
-       return 0;
-}
-
-static void rt2800pci_disable_radio(struct rt2x00_dev *rt2x00dev)
-{
-       u32 reg;
-
-       rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, &reg);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_DMA_BUSY, 0);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_ENABLE_RX_DMA, 0);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_RX_DMA_BUSY, 0);
-       rt2x00_set_field32(&reg, WPDMA_GLO_CFG_TX_WRITEBACK_DONE, 1);
-       rt2800_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
-
-       rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, 0);
-       rt2800_register_write(rt2x00dev, PWR_PIN_CFG, 0);
-       rt2800_register_write(rt2x00dev, TX_PIN_CFG, 0);
-
-       rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00001280);
-
-       rt2800_register_read(rt2x00dev, WPDMA_RST_IDX, &reg);
-       rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX0, 1);
-       rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX1, 1);
-       rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX2, 1);
-       rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX3, 1);
-       rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX4, 1);
-       rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX5, 1);
-       rt2x00_set_field32(&reg, WPDMA_RST_IDX_DRX_IDX0, 1);
-       rt2800_register_write(rt2x00dev, WPDMA_RST_IDX, reg);
-
-       rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e1f);
-       rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00000e00);
-
-       /* Wait for DMA, ignore error */
-       rt2800_wait_wpdma_ready(rt2x00dev);
-}
-
-static int rt2800pci_set_state(struct rt2x00_dev *rt2x00dev,
-                              enum dev_state state)
-{
-       /*
-        * Always put the device to sleep (even when we intend to wakeup!)
-        * if the device is booting and wasn't asleep it will return
-        * failure when attempting to wakeup.
-        */
-       rt2800_mcu_request(rt2x00dev, MCU_SLEEP, 0xff, 0, 2);
-
-       if (state == STATE_AWAKE) {
-               rt2800_mcu_request(rt2x00dev, MCU_WAKEUP, TOKEN_WAKUP, 0, 0);
-               rt2800pci_mcu_status(rt2x00dev, TOKEN_WAKUP);
-       }
-
-       return 0;
-}
-
-static int rt2800pci_set_device_state(struct rt2x00_dev *rt2x00dev,
-                                     enum dev_state state)
-{
-       int retval = 0;
-
-       switch (state) {
-       case STATE_RADIO_ON:
-               /*
-                * Before the radio can be enabled, the device first has
-                * to be woken up. After that it needs a bit of time
-                * to be fully awake and then the radio can be enabled.
-                */
-               rt2800pci_set_state(rt2x00dev, STATE_AWAKE);
-               msleep(1);
-               retval = rt2800pci_enable_radio(rt2x00dev);
-               break;
-       case STATE_RADIO_OFF:
-               /*
-                * After the radio has been disabled, the device should
-                * be put to sleep for powersaving.
-                */
-               rt2800pci_disable_radio(rt2x00dev);
-               rt2800pci_set_state(rt2x00dev, STATE_SLEEP);
-               break;
-       case STATE_RADIO_RX_ON:
-       case STATE_RADIO_RX_ON_LINK:
-       case STATE_RADIO_RX_OFF:
-       case STATE_RADIO_RX_OFF_LINK:
-               rt2800pci_toggle_rx(rt2x00dev, state);
-               break;
-       case STATE_RADIO_IRQ_ON:
-       case STATE_RADIO_IRQ_ON_ISR:
-       case STATE_RADIO_IRQ_OFF:
-       case STATE_RADIO_IRQ_OFF_ISR:
-               rt2800pci_toggle_irq(rt2x00dev, state);
-               break;
-       case STATE_DEEP_SLEEP:
-       case STATE_SLEEP:
-       case STATE_STANDBY:
-       case STATE_AWAKE:
-               retval = rt2800pci_set_state(rt2x00dev, state);
-               break;
-       default:
-               retval = -ENOTSUPP;
-               break;
-       }
-
-       if (unlikely(retval))
-               ERROR(rt2x00dev, "Device failed to enter state %d (%d).\n",
-                     state, retval);
-
-       return retval;
-}
-
-/*
- * TX descriptor initialization
- */
-static void rt2800pci_write_tx_data(struct queue_entry* entry,
-                                   struct txentry_desc *txdesc)
-{
-       __le32 *txwi = (__le32 *) entry->skb->data;
-
-       rt2800_write_txwi(txwi, txdesc);
-}
-
-
-static void rt2800pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
-                                   struct sk_buff *skb,
-                                   struct txentry_desc *txdesc)
-{
-       struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb);
-       struct queue_entry_priv_pci *entry_priv = skbdesc->entry->priv_data;
-       __le32 *txd = entry_priv->desc;
-       u32 word;
-
-       /*
-        * The buffers pointed by SD_PTR0/SD_LEN0 and SD_PTR1/SD_LEN1
-        * must contains a TXWI structure + 802.11 header + padding + 802.11
-        * data. We choose to have SD_PTR0/SD_LEN0 only contains TXWI and
-        * SD_PTR1/SD_LEN1 contains 802.11 header + padding + 802.11
-        * data. It means that LAST_SEC0 is always 0.
-        */
-
-       /*
-        * Initialize TX descriptor
-        */
-       rt2x00_desc_read(txd, 0, &word);
-       rt2x00_set_field32(&word, TXD_W0_SD_PTR0, skbdesc->skb_dma);
-       rt2x00_desc_write(txd, 0, word);
-
-       rt2x00_desc_read(txd, 1, &word);
-       rt2x00_set_field32(&word, TXD_W1_SD_LEN1, skb->len);
-       rt2x00_set_field32(&word, TXD_W1_LAST_SEC1,
-                          !test_bit(ENTRY_TXD_MORE_FRAG, &txdesc->flags));
-       rt2x00_set_field32(&word, TXD_W1_BURST,
-                          test_bit(ENTRY_TXD_BURST, &txdesc->flags));
-       rt2x00_set_field32(&word, TXD_W1_SD_LEN0, TXWI_DESC_SIZE);
-       rt2x00_set_field32(&word, TXD_W1_LAST_SEC0, 0);
-       rt2x00_set_field32(&word, TXD_W1_DMA_DONE, 0);
-       rt2x00_desc_write(txd, 1, word);
-
-       rt2x00_desc_read(txd, 2, &word);
-       rt2x00_set_field32(&word, TXD_W2_SD_PTR1,
-                          skbdesc->skb_dma + TXWI_DESC_SIZE);
-       rt2x00_desc_write(txd, 2, word);
-
-       rt2x00_desc_read(txd, 3, &word);
-       rt2x00_set_field32(&word, TXD_W3_WIV,
-                          !test_bit(ENTRY_TXD_ENCRYPT_IV, &txdesc->flags));
-       rt2x00_set_field32(&word, TXD_W3_QSEL, 2);
-       rt2x00_desc_write(txd, 3, word);
-
-       /*
-        * Register descriptor details in skb frame descriptor.
-        */
-       skbdesc->desc = txd;
-       skbdesc->desc_len = TXD_DESC_SIZE;
-}
-
-/*
- * TX data initialization
- */
-static void rt2800pci_kick_tx_queue(struct rt2x00_dev *rt2x00dev,
-                                   const enum data_queue_qid queue_idx)
-{
-       struct data_queue *queue;
-       unsigned int idx, qidx = 0;
-
-       if (queue_idx > QID_HCCA && queue_idx != QID_MGMT)
-               return;
-
-       queue = rt2x00queue_get_queue(rt2x00dev, queue_idx);
-       idx = queue->index[Q_INDEX];
-
-       if (queue_idx == QID_MGMT)
-               qidx = 5;
-       else
-               qidx = queue_idx;
-
-       rt2800_register_write(rt2x00dev, TX_CTX_IDX(qidx), idx);
-}
-
-static void rt2800pci_kill_tx_queue(struct rt2x00_dev *rt2x00dev,
-                                   const enum data_queue_qid qid)
-{
-       u32 reg;
-
-       if (qid == QID_BEACON) {
-               rt2800_register_write(rt2x00dev, BCN_TIME_CFG, 0);
-               return;
-       }
-
-       rt2800_register_read(rt2x00dev, WPDMA_RST_IDX, &reg);
-       rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX0, (qid == QID_AC_BE));
-       rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX1, (qid == QID_AC_BK));
-       rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX2, (qid == QID_AC_VI));
-       rt2x00_set_field32(&reg, WPDMA_RST_IDX_DTX_IDX3, (qid == QID_AC_VO));
-       rt2800_register_write(rt2x00dev, WPDMA_RST_IDX, reg);
-}
-
-/*
- * RX control handlers
- */
-static void rt2800pci_fill_rxdone(struct queue_entry *entry,
-                                 struct rxdone_entry_desc *rxdesc)
-{
-       struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
-       struct queue_entry_priv_pci *entry_priv = entry->priv_data;
-       __le32 *rxd = entry_priv->desc;
-       u32 word;
-
-       rt2x00_desc_read(rxd, 3, &word);
-
-       if (rt2x00_get_field32(word, RXD_W3_CRC_ERROR))
-               rxdesc->flags |= RX_FLAG_FAILED_FCS_CRC;
-
-       /*
-        * Unfortunately we don't know the cipher type used during
-        * decryption. This prevents us from correct providing
-        * correct statistics through debugfs.
-        */
-       rxdesc->cipher_status = rt2x00_get_field32(word, RXD_W3_CIPHER_ERROR);
-
-       if (rt2x00_get_field32(word, RXD_W3_DECRYPTED)) {
-               /*
-                * Hardware has stripped IV/EIV data from 802.11 frame during
-                * decryption. Unfortunately the descriptor doesn't contain
-                * any fields with the EIV/IV data either, so they can't
-                * be restored by rt2x00lib.
-                */
-               rxdesc->flags |= RX_FLAG_IV_STRIPPED;
-
-               if (rxdesc->cipher_status == RX_CRYPTO_SUCCESS)
-                       rxdesc->flags |= RX_FLAG_DECRYPTED;
-               else if (rxdesc->cipher_status == RX_CRYPTO_FAIL_MIC)
-                       rxdesc->flags |= RX_FLAG_MMIC_ERROR;
-       }
-
-       if (rt2x00_get_field32(word, RXD_W3_MY_BSS))
-               rxdesc->dev_flags |= RXDONE_MY_BSS;
-
-       if (rt2x00_get_field32(word, RXD_W3_L2PAD))
-               rxdesc->dev_flags |= RXDONE_L2PAD;
-
-       /*
-        * Process the RXWI structure that is at the start of the buffer.
-        */
-       rt2800_process_rxwi(entry, rxdesc);
-
-       /*
-        * Set RX IDX in register to inform hardware that we have handled
-        * this entry and it is available for reuse again.
-        */
-       rt2800_register_write(rt2x00dev, RX_CRX_IDX, entry->entry_idx);
-}
-
-/*
- * Interrupt functions.
- */
-static void rt2800pci_txdone(struct rt2x00_dev *rt2x00dev)
-{
-       struct data_queue *queue;
-       struct queue_entry *entry;
-       __le32 *txwi;
-       struct txdone_entry_desc txdesc;
-       u32 word;
-       u32 reg;
-       int wcid, ack, pid, tx_wcid, tx_ack, tx_pid;
-       u16 mcs, real_mcs;
-       int i;
-
-       /*
-        * TX_STA_FIFO is a stack of X entries, hence read TX_STA_FIFO
-        * at most X times and also stop processing once the TX_STA_FIFO_VALID
-        * flag is not set anymore.
-        *
-        * The legacy drivers use X=TX_RING_SIZE but state in a comment
-        * that the TX_STA_FIFO stack has a size of 16. We stick to our
-        * tx ring size for now.
-        */
-       for (i = 0; i < TX_ENTRIES; i++) {
-               rt2800_register_read(rt2x00dev, TX_STA_FIFO, &reg);
-               if (!rt2x00_get_field32(reg, TX_STA_FIFO_VALID))
-                       break;
-
-               wcid    = rt2x00_get_field32(reg, TX_STA_FIFO_WCID);
-               ack     = rt2x00_get_field32(reg, TX_STA_FIFO_TX_ACK_REQUIRED);
-               pid     = rt2x00_get_field32(reg, TX_STA_FIFO_PID_TYPE);
-
-               /*
-                * Skip this entry when it contains an invalid
-                * queue identication number.
-                */
-               if (pid <= 0 || pid > QID_RX)
-                       continue;
-
-               queue = rt2x00queue_get_queue(rt2x00dev, pid - 1);
-               if (unlikely(!queue))
-                       continue;
-
-               /*
-                * Inside each queue, we process each entry in a chronological
-                * order. We first check that the queue is not empty.
-                */
-               if (rt2x00queue_empty(queue))
-                       continue;
-               entry = rt2x00queue_get_entry(queue, Q_INDEX_DONE);
-
-               /* Check if we got a match by looking at WCID/ACK/PID
-                * fields */
-               txwi = (__le32 *) entry->skb->data;
-
-               rt2x00_desc_read(txwi, 1, &word);
-               tx_wcid = rt2x00_get_field32(word, TXWI_W1_WIRELESS_CLI_ID);
-               tx_ack  = rt2x00_get_field32(word, TXWI_W1_ACK);
-               tx_pid  = rt2x00_get_field32(word, TXWI_W1_PACKETID);
-
-               if ((wcid != tx_wcid) || (ack != tx_ack) || (pid != tx_pid))
-                       WARNING(rt2x00dev, "invalid TX_STA_FIFO content\n");
-
-               /*
-                * Obtain the status about this packet.
-                */
-               txdesc.flags = 0;
-               rt2x00_desc_read(txwi, 0, &word);
-               mcs = rt2x00_get_field32(word, TXWI_W0_MCS);
-               real_mcs = rt2x00_get_field32(reg, TX_STA_FIFO_MCS);
-
-               /*
-                * Ralink has a retry mechanism using a global fallback
-                * table. We setup this fallback table to try the immediate
-                * lower rate for all rates. In the TX_STA_FIFO, the MCS field
-                * always contains the MCS used for the last transmission, be
-                * it successful or not.
-                */
-               if (rt2x00_get_field32(reg, TX_STA_FIFO_TX_SUCCESS)) {
-                       /*
-                        * Transmission succeeded. The number of retries is
-                        * mcs - real_mcs
-                        */
-                       __set_bit(TXDONE_SUCCESS, &txdesc.flags);
-                       txdesc.retry = ((mcs > real_mcs) ? mcs - real_mcs : 0);
-               } else {
-                       /*
-                        * Transmission failed. The number of retries is
-                        * always 7 in this case (for a total number of 8
-                        * frames sent).
-                        */
-                       __set_bit(TXDONE_FAILURE, &txdesc.flags);
-                       txdesc.retry = 7;
-               }
-
-               /*
-                * the frame was retried at least once
-                * -> hw used fallback rates
-                */
-               if (txdesc.retry)
-                       __set_bit(TXDONE_FALLBACK, &txdesc.flags);
-
-               rt2x00lib_txdone(entry, &txdesc);
-       }
-}
-
-static void rt2800pci_wakeup(struct rt2x00_dev *rt2x00dev)
-{
-       struct ieee80211_conf conf = { .flags = 0 };
-       struct rt2x00lib_conf libconf = { .conf = &conf };
-
-       rt2800_config(rt2x00dev, &libconf, IEEE80211_CONF_CHANGE_PS);
-}
-
-static irqreturn_t rt2800pci_interrupt_thread(int irq, void *dev_instance)
-{
-       struct rt2x00_dev *rt2x00dev = dev_instance;
-       u32 reg = rt2x00dev->irqvalue[0];
-
-       /*
-        * 1 - Pre TBTT interrupt.
-        */
-       if (rt2x00_get_field32(reg, INT_SOURCE_CSR_PRE_TBTT))
-               rt2x00lib_pretbtt(rt2x00dev);
-
-       /*
-        * 2 - Beacondone interrupt.
-        */
-       if (rt2x00_get_field32(reg, INT_SOURCE_CSR_TBTT))
-               rt2x00lib_beacondone(rt2x00dev);
-
-       /*
-        * 3 - Rx ring done interrupt.
-        */
-       if (rt2x00_get_field32(reg, INT_SOURCE_CSR_RX_DONE))
-               rt2x00pci_rxdone(rt2x00dev);
-
-       /*
-        * 4 - Tx done interrupt.
-        */
-       if (rt2x00_get_field32(reg, INT_SOURCE_CSR_TX_FIFO_STATUS))
-               rt2800pci_txdone(rt2x00dev);
-
-       /*
-        * 5 - Auto wakeup interrupt.
-        */
-       if (rt2x00_get_field32(reg, INT_SOURCE_CSR_AUTO_WAKEUP))
-               rt2800pci_wakeup(rt2x00dev);
-
-       /* Enable interrupts again. */
-       rt2x00dev->ops->lib->set_device_state(rt2x00dev,
-                                             STATE_RADIO_IRQ_ON_ISR);
-
-       return IRQ_HANDLED;
-}
-
-static irqreturn_t rt2800pci_interrupt(int irq, void *dev_instance)
-{
-       struct rt2x00_dev *rt2x00dev = dev_instance;
-       u32 reg;
-
-       /* Read status and ACK all interrupts */
-       rt2800_register_read(rt2x00dev, INT_SOURCE_CSR, &reg);
-       rt2800_register_write(rt2x00dev, INT_SOURCE_CSR, reg);
-
-       if (!reg)
-               return IRQ_NONE;
-
-       if (!test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
-               return IRQ_HANDLED;
-
-       /* Store irqvalue for use in the interrupt thread. */
-       rt2x00dev->irqvalue[0] = reg;
-
-       /* Disable interrupts, will be enabled again in the interrupt thread. */
-       rt2x00dev->ops->lib->set_device_state(rt2x00dev,
-                                             STATE_RADIO_IRQ_OFF_ISR);
-
-
-       return IRQ_WAKE_THREAD;
-}
-
-/*
- * Device probe functions.
- */
-static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
-{
-       /*
-        * Read EEPROM into buffer
-        */
-       if (rt2x00_is_soc(rt2x00dev))
-               rt2800pci_read_eeprom_soc(rt2x00dev);
-       else if (rt2800pci_efuse_detect(rt2x00dev))
-               rt2800pci_read_eeprom_efuse(rt2x00dev);
-       else
-               rt2800pci_read_eeprom_pci(rt2x00dev);
-
-       return rt2800_validate_eeprom(rt2x00dev);
-}
-
-static int rt2800pci_probe_hw(struct rt2x00_dev *rt2x00dev)
-{
-       int retval;
-
-       /*
-        * Allocate eeprom data.
-        */
-       retval = rt2800pci_validate_eeprom(rt2x00dev);
-       if (retval)
-               return retval;
-
-       retval = rt2800_init_eeprom(rt2x00dev);
-       if (retval)
-               return retval;
-
-       /*
-        * Initialize hw specifications.
-        */
-       retval = rt2800_probe_hw_mode(rt2x00dev);
-       if (retval)
-               return retval;
-
-       /*
-        * This device has multiple filters for control frames
-        * and has a separate filter for PS Poll frames.
-        */
-       __set_bit(DRIVER_SUPPORT_CONTROL_FILTERS, &rt2x00dev->flags);
-       __set_bit(DRIVER_SUPPORT_CONTROL_FILTER_PSPOLL, &rt2x00dev->flags);
-
-       /*
-        * This device has a pre tbtt interrupt and thus fetches
-        * a new beacon directly prior to transmission.
-        */
-       __set_bit(DRIVER_SUPPORT_PRE_TBTT_INTERRUPT, &rt2x00dev->flags);
-
-       /*
-        * This device requires firmware.
-        */
-       if (!rt2x00_is_soc(rt2x00dev))
-               __set_bit(DRIVER_REQUIRE_FIRMWARE, &rt2x00dev->flags);
-       __set_bit(DRIVER_REQUIRE_DMA, &rt2x00dev->flags);
-       __set_bit(DRIVER_REQUIRE_L2PAD, &rt2x00dev->flags);
-       if (!modparam_nohwcrypt)
-               __set_bit(CONFIG_SUPPORT_HW_CRYPTO, &rt2x00dev->flags);
-       __set_bit(DRIVER_SUPPORT_LINK_TUNING, &rt2x00dev->flags);
-
-       /*
-        * Set the rssi offset.
-        */
-       rt2x00dev->rssi_offset = DEFAULT_RSSI_OFFSET;
-
-       return 0;
-}
-
-static const struct ieee80211_ops rt2800pci_mac80211_ops = {
-       .tx                     = rt2x00mac_tx,
-       .start                  = rt2x00mac_start,
-       .stop                   = rt2x00mac_stop,
-       .add_interface          = rt2x00mac_add_interface,
-       .remove_interface       = rt2x00mac_remove_interface,
-       .config                 = rt2x00mac_config,
-       .configure_filter       = rt2x00mac_configure_filter,
-       .set_key                = rt2x00mac_set_key,
-       .sw_scan_start          = rt2x00mac_sw_scan_start,
-       .sw_scan_complete       = rt2x00mac_sw_scan_complete,
-       .get_stats              = rt2x00mac_get_stats,
-       .get_tkip_seq           = rt2800_get_tkip_seq,
-       .set_rts_threshold      = rt2800_set_rts_threshold,
-       .bss_info_changed       = rt2x00mac_bss_info_changed,
-       .conf_tx                = rt2800_conf_tx,
-       .get_tsf                = rt2800_get_tsf,
-       .rfkill_poll            = rt2x00mac_rfkill_poll,
-       .ampdu_action           = rt2800_ampdu_action,
-};
-
-static const struct rt2800_ops rt2800pci_rt2800_ops = {
-       .register_read          = rt2x00pci_register_read,
-       .register_read_lock     = rt2x00pci_register_read, /* same for PCI */
-       .register_write         = rt2x00pci_register_write,
-       .register_write_lock    = rt2x00pci_register_write, /* same for PCI */
-       .register_multiread     = rt2x00pci_register_multiread,
-       .register_multiwrite    = rt2x00pci_register_multiwrite,
-       .regbusy_read           = rt2x00pci_regbusy_read,
-       .drv_write_firmware     = rt2800pci_write_firmware,
-       .drv_init_registers     = rt2800pci_init_registers,
-};
-
-static const struct rt2x00lib_ops rt2800pci_rt2x00_ops = {
-       .irq_handler            = rt2800pci_interrupt,
-       .irq_handler_thread     = rt2800pci_interrupt_thread,
-       .probe_hw               = rt2800pci_probe_hw,
-       .get_firmware_name      = rt2800pci_get_firmware_name,
-       .check_firmware         = rt2800_check_firmware,
-       .load_firmware          = rt2800_load_firmware,
-       .initialize             = rt2x00pci_initialize,
-       .uninitialize           = rt2x00pci_uninitialize,
-       .get_entry_state        = rt2800pci_get_entry_state,
-       .clear_entry            = rt2800pci_clear_entry,
-       .set_device_state       = rt2800pci_set_device_state,
-       .rfkill_poll            = rt2800_rfkill_poll,
-       .link_stats             = rt2800_link_stats,
-       .reset_tuner            = rt2800_reset_tuner,
-       .link_tuner             = rt2800_link_tuner,
-       .write_tx_desc          = rt2800pci_write_tx_desc,
-       .write_tx_data          = rt2800pci_write_tx_data,
-       .write_beacon           = rt2800_write_beacon,
-       .kick_tx_queue          = rt2800pci_kick_tx_queue,
-       .kill_tx_queue          = rt2800pci_kill_tx_queue,
-       .fill_rxdone            = rt2800pci_fill_rxdone,
-       .config_shared_key      = rt2800_config_shared_key,
-       .config_pairwise_key    = rt2800_config_pairwise_key,
-       .config_filter          = rt2800_config_filter,
-       .config_intf            = rt2800_config_intf,
-       .config_erp             = rt2800_config_erp,
-       .config_ant             = rt2800_config_ant,
-       .config                 = rt2800_config,
-};
-
-static const struct data_queue_desc rt2800pci_queue_rx = {
-       .entry_num              = RX_ENTRIES,
-       .data_size              = AGGREGATION_SIZE,
-       .desc_size              = RXD_DESC_SIZE,
-       .priv_size              = sizeof(struct queue_entry_priv_pci),
-};
-
-static const struct data_queue_desc rt2800pci_queue_tx = {
-       .entry_num              = TX_ENTRIES,
-       .data_size              = AGGREGATION_SIZE,
-       .desc_size              = TXD_DESC_SIZE,
-       .priv_size              = sizeof(struct queue_entry_priv_pci),
-};
-
-static const struct data_queue_desc rt2800pci_queue_bcn = {
-       .entry_num              = 8 * BEACON_ENTRIES,
-       .data_size              = 0, /* No DMA required for beacons */
-       .desc_size              = TXWI_DESC_SIZE,
-       .priv_size              = sizeof(struct queue_entry_priv_pci),
-};
-
-static const struct rt2x00_ops rt2800pci_ops = {
-       .name                   = KBUILD_MODNAME,
-       .max_sta_intf           = 1,
-       .max_ap_intf            = 8,
-       .eeprom_size            = EEPROM_SIZE,
-       .rf_size                = RF_SIZE,
-       .tx_queues              = NUM_TX_QUEUES,
-       .extra_tx_headroom      = TXWI_DESC_SIZE,
-       .rx                     = &rt2800pci_queue_rx,
-       .tx                     = &rt2800pci_queue_tx,
-       .bcn                    = &rt2800pci_queue_bcn,
-       .lib                    = &rt2800pci_rt2x00_ops,
-       .drv                    = &rt2800pci_rt2800_ops,
-       .hw                     = &rt2800pci_mac80211_ops,
-#ifdef CONFIG_RT2X00_LIB_DEBUGFS
-       .debugfs                = &rt2800_rt2x00debug,
-#endif /* CONFIG_RT2X00_LIB_DEBUGFS */
-};
-
-/*
- * RT2800pci module information.
- */
-#ifdef CONFIG_RT2800PCI_PCI
-static DEFINE_PCI_DEVICE_TABLE(rt2800pci_device_table) = {
-       { PCI_DEVICE(0x1814, 0x0601), PCI_DEVICE_DATA(&rt2800pci_ops) },
-       { PCI_DEVICE(0x1814, 0x0681), PCI_DEVICE_DATA(&rt2800pci_ops) },
-       { PCI_DEVICE(0x1814, 0x0701), PCI_DEVICE_DATA(&rt2800pci_ops) },
-       { PCI_DEVICE(0x1814, 0x0781), PCI_DEVICE_DATA(&rt2800pci_ops) },
-       { PCI_DEVICE(0x1432, 0x7708), PCI_DEVICE_DATA(&rt2800pci_ops) },
-       { PCI_DEVICE(0x1432, 0x7727), PCI_DEVICE_DATA(&rt2800pci_ops) },
-       { PCI_DEVICE(0x1432, 0x7728), PCI_DEVICE_DATA(&rt2800pci_ops) },
-       { PCI_DEVICE(0x1432, 0x7738), PCI_DEVICE_DATA(&rt2800pci_ops) },
-       { PCI_DEVICE(0x1432, 0x7748), PCI_DEVICE_DATA(&rt2800pci_ops) },
-       { PCI_DEVICE(0x1432, 0x7758), PCI_DEVICE_DATA(&rt2800pci_ops) },
-       { PCI_DEVICE(0x1432, 0x7768), PCI_DEVICE_DATA(&rt2800pci_ops) },
-       { PCI_DEVICE(0x1a3b, 0x1059), PCI_DEVICE_DATA(&rt2800pci_ops) },
-#ifdef CONFIG_RT2800PCI_RT30XX
-       { PCI_DEVICE(0x1814, 0x3090), PCI_DEVICE_DATA(&rt2800pci_ops) },
-       { PCI_DEVICE(0x1814, 0x3091), PCI_DEVICE_DATA(&rt2800pci_ops) },
-       { PCI_DEVICE(0x1814, 0x3092), PCI_DEVICE_DATA(&rt2800pci_ops) },
-       { PCI_DEVICE(0x1462, 0x891a), PCI_DEVICE_DATA(&rt2800pci_ops) },
-#endif
-#ifdef CONFIG_RT2800PCI_RT35XX
-       { PCI_DEVICE(0x1814, 0x3060), PCI_DEVICE_DATA(&rt2800pci_ops) },
-       { PCI_DEVICE(0x1814, 0x3062), PCI_DEVICE_DATA(&rt2800pci_ops) },
-       { PCI_DEVICE(0x1814, 0x3562), PCI_DEVICE_DATA(&rt2800pci_ops) },
-       { PCI_DEVICE(0x1814, 0x3592), PCI_DEVICE_DATA(&rt2800pci_ops) },
-       { PCI_DEVICE(0x1814, 0x3593), PCI_DEVICE_DATA(&rt2800pci_ops) },
-#endif
-       { 0, }
-};
-#endif /* CONFIG_RT2800PCI_PCI */
-
-MODULE_AUTHOR(DRV_PROJECT);
-MODULE_VERSION(DRV_VERSION);
-MODULE_DESCRIPTION("Ralink RT2800 PCI & PCMCIA Wireless LAN driver.");
-MODULE_SUPPORTED_DEVICE("Ralink RT2860 PCI & PCMCIA chipset based cards");
-#ifdef CONFIG_RT2800PCI_PCI
-MODULE_FIRMWARE(FIRMWARE_RT2860);
-MODULE_DEVICE_TABLE(pci, rt2800pci_device_table);
-#endif /* CONFIG_RT2800PCI_PCI */
-MODULE_LICENSE("GPL");
-
-#ifdef CONFIG_RT2800PCI_SOC
-static int rt2800soc_probe(struct platform_device *pdev)
-{
-       return rt2x00soc_probe(pdev, &rt2800pci_ops);
-}
-
-static struct platform_driver rt2800soc_driver = {
-       .driver         = {
-               .name           = "rt2800_wmac",
-               .owner          = THIS_MODULE,
-               .mod_name       = KBUILD_MODNAME,
-       },
-       .probe          = rt2800soc_probe,
-       .remove         = __devexit_p(rt2x00soc_remove),
-       .suspend        = rt2x00soc_suspend,
-       .resume         = rt2x00soc_resume,
-};
-#endif /* CONFIG_RT2800PCI_SOC */
-
-#ifdef CONFIG_RT2800PCI_PCI
-static struct pci_driver rt2800pci_driver = {
-       .name           = KBUILD_MODNAME,
-       .id_table       = rt2800pci_device_table,
-       .probe          = rt2x00pci_probe,
-       .remove         = __devexit_p(rt2x00pci_remove),
-       .suspend        = rt2x00pci_suspend,
-       .resume         = rt2x00pci_resume,
-};
-#endif /* CONFIG_RT2800PCI_PCI */
-
-static int __init rt2800pci_init(void)
-{
-       int ret = 0;
-
-#ifdef CONFIG_RT2800PCI_SOC
-       ret = platform_driver_register(&rt2800soc_driver);
-       if (ret)
-               return ret;
-#endif
-#ifdef CONFIG_RT2800PCI_PCI
-       ret = pci_register_driver(&rt2800pci_driver);
-       if (ret) {
-#ifdef CONFIG_RT2800PCI_SOC
-               platform_driver_unregister(&rt2800soc_driver);
-#endif
-               return ret;
-       }
-#endif
-
-       return ret;
-}
-
-static void __exit rt2800pci_exit(void)
-{
-#ifdef CONFIG_RT2800PCI_PCI
-       pci_unregister_driver(&rt2800pci_driver);
-#endif
-#ifdef CONFIG_RT2800PCI_SOC
-       platform_driver_unregister(&rt2800soc_driver);
-#endif
-}
-
-module_init(rt2800pci_init);
-module_exit(rt2800pci_exit);
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.h b/drivers/net/wireless/rt2x00/rt2800pci.h
deleted file mode 100644 (file)
index 5a8dda9..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
-       Copyright (C) 2009 Ivo van Doorn <IvDoorn@gmail.com>
-       Copyright (C) 2009 Alban Browaeys <prahal@yahoo.com>
-       Copyright (C) 2009 Felix Fietkau <nbd@openwrt.org>
-       Copyright (C) 2009 Luis Correia <luis.f.correia@gmail.com>
-       Copyright (C) 2009 Mattias Nissler <mattias.nissler@gmx.de>
-       Copyright (C) 2009 Mark Asselstine <asselsm@gmail.com>
-       Copyright (C) 2009 Xose Vazquez Perez <xose.vazquez@gmail.com>
-       Copyright (C) 2009 Bart Zolnierkiewicz <bzolnier@gmail.com>
-       <http://rt2x00.serialmonkey.com>
-
-       This program is free software; you can redistribute it and/or modify
-       it under the terms of the GNU General Public License as published by
-       the Free Software Foundation; either version 2 of the License, or
-       (at your option) any later version.
-
-       This program is distributed in the hope that it will be useful,
-       but WITHOUT ANY WARRANTY; without even the implied warranty of
-       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-       GNU General Public License for more details.
-
-       You should have received a copy of the GNU General Public License
-       along with this program; if not, write to the
-       Free Software Foundation, Inc.,
-       59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-/*
-       Module: rt2800pci
-       Abstract: Data structures and registers for the rt2800pci module.
-       Supported chipsets: RT2800E & RT2800ED.
- */
-
-#ifndef RT2800PCI_H
-#define RT2800PCI_H
-
-/*
- * Queue register offset macros
- */
-#define TX_QUEUE_REG_OFFSET            0x10
-#define TX_BASE_PTR(__x)               TX_BASE_PTR0 + ((__x) * TX_QUEUE_REG_OFFSET)
-#define TX_MAX_CNT(__x)                        TX_MAX_CNT0 + ((__x) * TX_QUEUE_REG_OFFSET)
-#define TX_CTX_IDX(__x)                        TX_CTX_IDX0 + ((__x) * TX_QUEUE_REG_OFFSET)
-#define TX_DTX_IDX(__x)                        TX_DTX_IDX0 + ((__x) * TX_QUEUE_REG_OFFSET)
-
-/*
- * 8051 firmware image.
- */
-#define FIRMWARE_RT2860                        "rt2860.bin"
-#define FIRMWARE_IMAGE_BASE            0x2000
-
-/*
- * DMA descriptor defines.
- */
-#define TXD_DESC_SIZE                  ( 4 * sizeof(__le32) )
-#define RXD_DESC_SIZE                  ( 4 * sizeof(__le32) )
-
-/*
- * TX descriptor format for TX, PRIO and Beacon Ring.
- */
-
-/*
- * Word0
- */
-#define TXD_W0_SD_PTR0                 FIELD32(0xffffffff)
-
-/*
- * Word1
- */
-#define TXD_W1_SD_LEN1                 FIELD32(0x00003fff)
-#define TXD_W1_LAST_SEC1               FIELD32(0x00004000)
-#define TXD_W1_BURST                   FIELD32(0x00008000)
-#define TXD_W1_SD_LEN0                 FIELD32(0x3fff0000)
-#define TXD_W1_LAST_SEC0               FIELD32(0x40000000)
-#define TXD_W1_DMA_DONE                        FIELD32(0x80000000)
-
-/*
- * Word2
- */
-#define TXD_W2_SD_PTR1                 FIELD32(0xffffffff)
-
-/*
- * Word3
- * WIV: Wireless Info Valid. 1: Driver filled WI, 0: DMA needs to copy WI
- * QSEL: Select on-chip FIFO ID for 2nd-stage output scheduler.
- *       0:MGMT, 1:HCCA 2:EDCA
- */
-#define TXD_W3_WIV                     FIELD32(0x01000000)
-#define TXD_W3_QSEL                    FIELD32(0x06000000)
-#define TXD_W3_TCO                     FIELD32(0x20000000)
-#define TXD_W3_UCO                     FIELD32(0x40000000)
-#define TXD_W3_ICO                     FIELD32(0x80000000)
-
-/*
- * RX descriptor format for RX Ring.
- */
-
-/*
- * Word0
- */
-#define RXD_W0_SDP0                    FIELD32(0xffffffff)
-
-/*
- * Word1
- */
-#define RXD_W1_SDL1                    FIELD32(0x00003fff)
-#define RXD_W1_SDL0                    FIELD32(0x3fff0000)
-#define RXD_W1_LS0                     FIELD32(0x40000000)
-#define RXD_W1_DMA_DONE                        FIELD32(0x80000000)
-
-/*
- * Word2
- */
-#define RXD_W2_SDP1                    FIELD32(0xffffffff)
-
-/*
- * Word3
- * AMSDU: RX with 802.3 header, not 802.11 header.
- * DECRYPTED: This frame is being decrypted.
- */
-#define RXD_W3_BA                      FIELD32(0x00000001)
-#define RXD_W3_DATA                    FIELD32(0x00000002)
-#define RXD_W3_NULLDATA                        FIELD32(0x00000004)
-#define RXD_W3_FRAG                    FIELD32(0x00000008)
-#define RXD_W3_UNICAST_TO_ME           FIELD32(0x00000010)
-#define RXD_W3_MULTICAST               FIELD32(0x00000020)
-#define RXD_W3_BROADCAST               FIELD32(0x00000040)
-#define RXD_W3_MY_BSS                  FIELD32(0x00000080)
-#define RXD_W3_CRC_ERROR               FIELD32(0x00000100)
-#define RXD_W3_CIPHER_ERROR            FIELD32(0x00000600)
-#define RXD_W3_AMSDU                   FIELD32(0x00000800)
-#define RXD_W3_HTC                     FIELD32(0x00001000)
-#define RXD_W3_RSSI                    FIELD32(0x00002000)
-#define RXD_W3_L2PAD                   FIELD32(0x00004000)
-#define RXD_W3_AMPDU                   FIELD32(0x00008000)
-#define RXD_W3_DECRYPTED               FIELD32(0x00010000)
-#define RXD_W3_PLCP_SIGNAL             FIELD32(0x00020000)
-#define RXD_W3_PLCP_RSSI               FIELD32(0x00040000)
-
-#endif /* RT2800PCI_H */
diff --git a/drivers/net/wireless/rt2x00/rt2x00soc.c b/drivers/net/wireless/rt2x00/rt2x00soc.c
deleted file mode 100644 (file)
index fc98063..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
-       Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com>
-       Copyright (C) 2004 - 2009 Felix Fietkau <nbd@openwrt.org>
-       <http://rt2x00.serialmonkey.com>
-
-       This program is free software; you can redistribute it and/or modify
-       it under the terms of the GNU General Public License as published by
-       the Free Software Foundation; either version 2 of the License, or
-       (at your option) any later version.
-
-       This program is distributed in the hope that it will be useful,
-       but WITHOUT ANY WARRANTY; without even the implied warranty of
-       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-       GNU General Public License for more details.
-
-       You should have received a copy of the GNU General Public License
-       along with this program; if not, write to the
-       Free Software Foundation, Inc.,
-       59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-/*
-       Module: rt2x00soc
-       Abstract: rt2x00 generic soc device routines.
- */
-
-#include <linux/bug.h>
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/platform_device.h>
-#include <linux/slab.h>
-
-#include "rt2x00.h"
-#include "rt2x00soc.h"
-
-static void rt2x00soc_free_reg(struct rt2x00_dev *rt2x00dev)
-{
-       kfree(rt2x00dev->rf);
-       rt2x00dev->rf = NULL;
-
-       kfree(rt2x00dev->eeprom);
-       rt2x00dev->eeprom = NULL;
-}
-
-static int rt2x00soc_alloc_reg(struct rt2x00_dev *rt2x00dev)
-{
-       struct platform_device *pdev = to_platform_device(rt2x00dev->dev);
-       struct resource *res;
-
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       if (!res)
-               return -ENODEV;
-
-       rt2x00dev->csr.base = (void __iomem *)KSEG1ADDR(res->start);
-       if (!rt2x00dev->csr.base)
-               goto exit;
-
-       rt2x00dev->eeprom = kzalloc(rt2x00dev->ops->eeprom_size, GFP_KERNEL);
-       if (!rt2x00dev->eeprom)
-               goto exit;
-
-       rt2x00dev->rf = kzalloc(rt2x00dev->ops->rf_size, GFP_KERNEL);
-       if (!rt2x00dev->rf)
-               goto exit;
-
-       return 0;
-
-exit:
-       ERROR_PROBE("Failed to allocate registers.\n");
-       rt2x00soc_free_reg(rt2x00dev);
-
-       return -ENOMEM;
-}
-
-int rt2x00soc_probe(struct platform_device *pdev, const struct rt2x00_ops *ops)
-{
-       struct ieee80211_hw *hw;
-       struct rt2x00_dev *rt2x00dev;
-       int retval;
-
-       hw = ieee80211_alloc_hw(sizeof(struct rt2x00_dev), ops->hw);
-       if (!hw) {
-               ERROR_PROBE("Failed to allocate hardware.\n");
-               return -ENOMEM;
-       }
-
-       platform_set_drvdata(pdev, hw);
-
-       rt2x00dev = hw->priv;
-       rt2x00dev->dev = &pdev->dev;
-       rt2x00dev->ops = ops;
-       rt2x00dev->hw = hw;
-       rt2x00dev->irq = platform_get_irq(pdev, 0);
-       rt2x00dev->name = pdev->dev.driver->name;
-
-       rt2x00_set_chip_intf(rt2x00dev, RT2X00_CHIP_INTF_SOC);
-
-       retval = rt2x00soc_alloc_reg(rt2x00dev);
-       if (retval)
-               goto exit_free_device;
-
-       retval = rt2x00lib_probe_dev(rt2x00dev);
-       if (retval)
-               goto exit_free_reg;
-
-       return 0;
-
-exit_free_reg:
-       rt2x00soc_free_reg(rt2x00dev);
-
-exit_free_device:
-       ieee80211_free_hw(hw);
-
-       return retval;
-}
-EXPORT_SYMBOL_GPL(rt2x00soc_probe);
-
-int rt2x00soc_remove(struct platform_device *pdev)
-{
-       struct ieee80211_hw *hw = platform_get_drvdata(pdev);
-       struct rt2x00_dev *rt2x00dev = hw->priv;
-
-       /*
-        * Free all allocated data.
-        */
-       rt2x00lib_remove_dev(rt2x00dev);
-       rt2x00soc_free_reg(rt2x00dev);
-       ieee80211_free_hw(hw);
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(rt2x00soc_remove);
-
-#ifdef CONFIG_PM
-int rt2x00soc_suspend(struct platform_device *pdev, pm_message_t state)
-{
-       struct ieee80211_hw *hw = platform_get_drvdata(pdev);
-       struct rt2x00_dev *rt2x00dev = hw->priv;
-
-       return rt2x00lib_suspend(rt2x00dev, state);
-}
-EXPORT_SYMBOL_GPL(rt2x00soc_suspend);
-
-int rt2x00soc_resume(struct platform_device *pdev)
-{
-       struct ieee80211_hw *hw = platform_get_drvdata(pdev);
-       struct rt2x00_dev *rt2x00dev = hw->priv;
-
-       return rt2x00lib_resume(rt2x00dev);
-}
-EXPORT_SYMBOL_GPL(rt2x00soc_resume);
-#endif /* CONFIG_PM */
-
-/*
- * rt2x00soc module information.
- */
-MODULE_AUTHOR(DRV_PROJECT);
-MODULE_VERSION(DRV_VERSION);
-MODULE_DESCRIPTION("rt2x00 soc library");
-MODULE_LICENSE("GPL");
diff --git a/drivers/net/wireless/rt2x00/rt2x00soc.h b/drivers/net/wireless/rt2x00/rt2x00soc.h
deleted file mode 100644 (file)
index 474cbfc..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-       Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com>
-       <http://rt2x00.serialmonkey.com>
-
-       This program is free software; you can redistribute it and/or modify
-       it under the terms of the GNU General Public License as published by
-       the Free Software Foundation; either version 2 of the License, or
-       (at your option) any later version.
-
-       This program is distributed in the hope that it will be useful,
-       but WITHOUT ANY WARRANTY; without even the implied warranty of
-       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-       GNU General Public License for more details.
-
-       You should have received a copy of the GNU General Public License
-       along with this program; if not, write to the
-       Free Software Foundation, Inc.,
-       59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-/*
-       Module: rt2x00soc
-       Abstract: Data structures for the rt2x00soc module.
- */
-
-#ifndef RT2X00SOC_H
-#define RT2X00SOC_H
-
-/*
- * SoC driver handlers.
- */
-int rt2x00soc_probe(struct platform_device *pdev, const struct rt2x00_ops *ops);
-int rt2x00soc_remove(struct platform_device *pdev);
-#ifdef CONFIG_PM
-int rt2x00soc_suspend(struct platform_device *pdev, pm_message_t state);
-int rt2x00soc_resume(struct platform_device *pdev);
-#else
-#define rt2x00soc_suspend      NULL
-#define rt2x00soc_resume       NULL
-#endif /* CONFIG_PM */
-
-#endif /* RT2X00SOC_H */
diff --git a/drivers/net/wireless/rtl818x/Kconfig b/drivers/net/wireless/rtl818x/Kconfig
deleted file mode 100644 (file)
index 17d80fe..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-#
-# RTL818X Wireless LAN device configuration
-#
-config RTL8180
-       tristate "Realtek 8180/8185 PCI support"
-       depends on MAC80211 && PCI && EXPERIMENTAL
-       select EEPROM_93CX6
-       ---help---
-         This is a driver for RTL8180 and RTL8185 based cards.
-         These are PCI based chips found in cards such as:
-
-         (RTL8185 802.11g)
-         A-Link WL54PC
-
-         (RTL8180 802.11b)
-         Belkin F5D6020 v3
-         Belkin F5D6020 v3
-         Dlink DWL-610
-         Dlink DWL-510
-         Netgear MA521
-         Level-One WPC-0101
-         Acer Aspire 1357 LMi
-         VCTnet PC-11B1
-         Ovislink AirLive WL-1120PCM
-         Mentor WL-PCI
-         Linksys WPC11 v4
-         TrendNET TEW-288PI
-         D-Link DWL-520 Rev D
-         Repotec RP-WP7126
-         TP-Link TL-WN250/251
-         Zonet ZEW1000
-         Longshine LCS-8031-R
-         HomeLine HLW-PCC200
-         GigaFast WF721-AEX
-         Planet WL-3553
-         Encore ENLWI-PCI1-NT
-         TrendNET TEW-266PC
-         Gigabyte GN-WLMR101
-         Siemens-fujitsu Amilo D1840W
-         Edimax EW-7126
-         PheeNet WL-11PCIR
-         Tonze PC-2100T
-         Planet WL-8303
-         Dlink DWL-650 v M1
-         Edimax EW-7106
-         Q-Tec 770WC
-         Topcom Skyr@cer 4011b
-         Roper FreeLan 802.11b (edition 2004)
-         Wistron Neweb Corp CB-200B
-         Pentagram HorNET
-         QTec 775WC
-         TwinMOS Booming B Series
-         Micronet SP906BB
-         Sweex LC700010
-         Surecom EP-9428
-         Safecom SWLCR-1100
-
-         Thanks to Realtek for their support!
-
-config RTL8187
-       tristate "Realtek 8187 and 8187B USB support"
-       depends on MAC80211 && USB
-       select EEPROM_93CX6
-       ---help---
-         This is a driver for RTL8187 and RTL8187B based cards.
-         These are USB based chips found in devices such as:
-
-         Netgear WG111v2
-         Level 1 WNC-0301USB
-         Micronet SP907GK V5
-         Encore ENUWI-G2
-         Trendnet TEW-424UB
-         ASUS P5B Deluxe/P5K Premium motherboards
-         Toshiba Satellite Pro series of laptops
-         Asus Wireless Link
-         Linksys WUSB54GC-EU v2
-           (v1 = rt73usb; v3 is rt2070-based,
-            use staging/rt3070 or try rt2800usb)
-
-         Thanks to Realtek for their support!
-
-# If possible, automatically enable LEDs for RTL8187.
-
-config RTL8187_LEDS
-       bool
-       depends on RTL8187 && MAC80211_LEDS && (LEDS_CLASS = y || LEDS_CLASS = RTL8187)
-       default y
-
diff --git a/drivers/net/wireless/wl12xx/wl1271_conf.h b/drivers/net/wireless/wl12xx/wl1271_conf.h
deleted file mode 100644 (file)
index 0435ffd..0000000
+++ /dev/null
@@ -1,1029 +0,0 @@
-/*
- * This file is part of wl1271
- *
- * Copyright (C) 2009 Nokia Corporation
- *
- * Contact: Luciano Coelho <luciano.coelho@nokia.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- *
- */
-
-#ifndef __WL1271_CONF_H__
-#define __WL1271_CONF_H__
-
-enum {
-       CONF_HW_BIT_RATE_1MBPS   = BIT(0),
-       CONF_HW_BIT_RATE_2MBPS   = BIT(1),
-       CONF_HW_BIT_RATE_5_5MBPS = BIT(2),
-       CONF_HW_BIT_RATE_6MBPS   = BIT(3),
-       CONF_HW_BIT_RATE_9MBPS   = BIT(4),
-       CONF_HW_BIT_RATE_11MBPS  = BIT(5),
-       CONF_HW_BIT_RATE_12MBPS  = BIT(6),
-       CONF_HW_BIT_RATE_18MBPS  = BIT(7),
-       CONF_HW_BIT_RATE_22MBPS  = BIT(8),
-       CONF_HW_BIT_RATE_24MBPS  = BIT(9),
-       CONF_HW_BIT_RATE_36MBPS  = BIT(10),
-       CONF_HW_BIT_RATE_48MBPS  = BIT(11),
-       CONF_HW_BIT_RATE_54MBPS  = BIT(12),
-       CONF_HW_BIT_RATE_MCS_0   = BIT(13),
-       CONF_HW_BIT_RATE_MCS_1   = BIT(14),
-       CONF_HW_BIT_RATE_MCS_2   = BIT(15),
-       CONF_HW_BIT_RATE_MCS_3   = BIT(16),
-       CONF_HW_BIT_RATE_MCS_4   = BIT(17),
-       CONF_HW_BIT_RATE_MCS_5   = BIT(18),
-       CONF_HW_BIT_RATE_MCS_6   = BIT(19),
-       CONF_HW_BIT_RATE_MCS_7   = BIT(20)
-};
-
-enum {
-       CONF_HW_RATE_INDEX_1MBPS   = 0,
-       CONF_HW_RATE_INDEX_2MBPS   = 1,
-       CONF_HW_RATE_INDEX_5_5MBPS = 2,
-       CONF_HW_RATE_INDEX_6MBPS   = 3,
-       CONF_HW_RATE_INDEX_9MBPS   = 4,
-       CONF_HW_RATE_INDEX_11MBPS  = 5,
-       CONF_HW_RATE_INDEX_12MBPS  = 6,
-       CONF_HW_RATE_INDEX_18MBPS  = 7,
-       CONF_HW_RATE_INDEX_22MBPS  = 8,
-       CONF_HW_RATE_INDEX_24MBPS  = 9,
-       CONF_HW_RATE_INDEX_36MBPS  = 10,
-       CONF_HW_RATE_INDEX_48MBPS  = 11,
-       CONF_HW_RATE_INDEX_54MBPS  = 12,
-       CONF_HW_RATE_INDEX_MAX     = CONF_HW_RATE_INDEX_54MBPS,
-};
-
-enum {
-       CONF_HW_RXTX_RATE_MCS7 = 0,
-       CONF_HW_RXTX_RATE_MCS6,
-       CONF_HW_RXTX_RATE_MCS5,
-       CONF_HW_RXTX_RATE_MCS4,
-       CONF_HW_RXTX_RATE_MCS3,
-       CONF_HW_RXTX_RATE_MCS2,
-       CONF_HW_RXTX_RATE_MCS1,
-       CONF_HW_RXTX_RATE_MCS0,
-       CONF_HW_RXTX_RATE_54,
-       CONF_HW_RXTX_RATE_48,
-       CONF_HW_RXTX_RATE_36,
-       CONF_HW_RXTX_RATE_24,
-       CONF_HW_RXTX_RATE_22,
-       CONF_HW_RXTX_RATE_18,
-       CONF_HW_RXTX_RATE_12,
-       CONF_HW_RXTX_RATE_11,
-       CONF_HW_RXTX_RATE_9,
-       CONF_HW_RXTX_RATE_6,
-       CONF_HW_RXTX_RATE_5_5,
-       CONF_HW_RXTX_RATE_2,
-       CONF_HW_RXTX_RATE_1,
-       CONF_HW_RXTX_RATE_MAX,
-       CONF_HW_RXTX_RATE_UNSUPPORTED = 0xff
-};
-
-enum {
-       CONF_SG_DISABLE = 0,
-       CONF_SG_PROTECTIVE,
-       CONF_SG_OPPORTUNISTIC
-};
-
-enum {
-       /*
-        * PER threshold in PPM of the BT voice
-        *
-        * Range: 0 - 10000000
-        */
-       CONF_SG_BT_PER_THRESHOLD = 0,
-
-       /*
-        * Number of consequent RX_ACTIVE activities to override BT voice
-        * frames to ensure WLAN connection
-        *
-        * Range: 0 - 100
-        */
-       CONF_SG_HV3_MAX_OVERRIDE,
-
-       /*
-        * Defines the PER threshold of the BT voice
-        *
-        * Range: 0 - 65000
-        */
-       CONF_SG_BT_NFS_SAMPLE_INTERVAL,
-
-       /*
-        * Defines the load ratio of BT
-        *
-        * Range: 0 - 100 (%)
-        */
-       CONF_SG_BT_LOAD_RATIO,
-
-       /*
-        * Defines whether the SG will force WLAN host to enter/exit PSM
-        *
-        * Range: 1 - SG can force, 0 - host handles PSM
-        */
-       CONF_SG_AUTO_PS_MODE,
-
-       /*
-        * Compensation percentage of probe requests when scan initiated
-        * during BT voice/ACL link.
-        *
-        * Range: 0 - 255 (%)
-        */
-       CONF_SG_AUTO_SCAN_PROBE_REQ,
-
-       /*
-        * Compensation percentage of probe requests when active scan initiated
-        * during BT voice
-        *
-        * Range: 0 - 255 (%)
-        */
-       CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3,
-
-       /*
-        * Defines antenna configuration (single/dual antenna)
-        *
-        * Range: 0 - single antenna, 1 - dual antenna
-        */
-       CONF_SG_ANTENNA_CONFIGURATION,
-
-       /*
-        * The threshold (percent) of max consequtive beacon misses before
-        * increasing priority of beacon reception.
-        *
-        * Range: 0 - 100 (%)
-        */
-       CONF_SG_BEACON_MISS_PERCENT,
-
-       /*
-        * The rate threshold below which receiving a data frame from the AP
-        * will increase the priority of the data frame above BT traffic.
-        *
-        * Range: 0,2, 5(=5.5), 6, 9, 11, 12, 18, 24, 36, 48, 54
-        */
-       CONF_SG_RATE_ADAPT_THRESH,
-
-       /*
-        * Not used currently.
-        *
-        * Range: 0
-        */
-       CONF_SG_RATE_ADAPT_SNR,
-
-       /*
-        * Configure the min and max time BT gains the antenna
-        * in WLAN PSM / BT master basic rate
-        *
-        * Range: 0 - 255 (ms)
-        */
-       CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_BR,
-       CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_BR,
-
-       /*
-        * The time after it expires no new WLAN trigger frame is trasmitted
-        * in WLAN PSM / BT master basic rate
-        *
-        * Range: 0 - 255 (ms)
-        */
-       CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_BR,
-
-       /*
-        * Configure the min and max time BT gains the antenna
-        * in WLAN PSM / BT slave basic rate
-        *
-        * Range: 0 - 255 (ms)
-        */
-       CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_BR,
-       CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_BR,
-
-       /*
-        * The time after it expires no new WLAN trigger frame is trasmitted
-        * in WLAN PSM / BT slave basic rate
-        *
-        * Range: 0 - 255 (ms)
-        */
-       CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_BR,
-
-       /*
-        * Configure the min and max time BT gains the antenna
-        * in WLAN PSM / BT master EDR
-        *
-        * Range: 0 - 255 (ms)
-        */
-       CONF_SG_WLAN_PS_BT_ACL_MASTER_MIN_EDR,
-       CONF_SG_WLAN_PS_BT_ACL_MASTER_MAX_EDR,
-
-       /*
-        * The time after it expires no new WLAN trigger frame is trasmitted
-        * in WLAN PSM / BT master EDR
-        *
-        * Range: 0 - 255 (ms)
-        */
-       CONF_SG_WLAN_PS_MAX_BT_ACL_MASTER_EDR,
-
-       /*
-        * Configure the min and max time BT gains the antenna
-        * in WLAN PSM / BT slave EDR
-        *
-        * Range: 0 - 255 (ms)
-        */
-       CONF_SG_WLAN_PS_BT_ACL_SLAVE_MIN_EDR,
-       CONF_SG_WLAN_PS_BT_ACL_SLAVE_MAX_EDR,
-
-       /*
-        * The time after it expires no new WLAN trigger frame is trasmitted
-        * in WLAN PSM / BT slave EDR
-        *
-        * Range: 0 - 255 (ms)
-        */
-       CONF_SG_WLAN_PS_MAX_BT_ACL_SLAVE_EDR,
-
-       /*
-        * RX guard time before the beginning of a new BT voice frame during
-        * which no new WLAN trigger frame is transmitted.
-        *
-        * Range: 0 - 100000 (us)
-        */
-       CONF_SG_RXT,
-
-       /*
-        * TX guard time before the beginning of a new BT voice frame during
-        * which no new WLAN frame is transmitted.
-        *
-        * Range: 0 - 100000 (us)
-        */
-
-       CONF_SG_TXT,
-
-       /*
-        * Enable adaptive RXT/TXT algorithm. If disabled, the host values
-        * will be utilized.
-        *
-        * Range: 0 - disable, 1 - enable
-        */
-       CONF_SG_ADAPTIVE_RXT_TXT,
-
-       /*
-        * The used WLAN legacy service period during active BT ACL link
-        *
-        * Range: 0 - 255 (ms)
-        */
-       CONF_SG_PS_POLL_TIMEOUT,
-
-       /*
-        * The used WLAN UPSD service period during active BT ACL link
-        *
-        * Range: 0 - 255 (ms)
-        */
-       CONF_SG_UPSD_TIMEOUT,
-
-       /*
-        * Configure the min and max time BT gains the antenna
-        * in WLAN Active / BT master EDR
-        *
-        * Range: 0 - 255 (ms)
-        */
-       CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MIN_EDR,
-       CONF_SG_WLAN_ACTIVE_BT_ACL_MASTER_MAX_EDR,
-
-       /*
-        * The maximum time WLAN can gain the antenna for
-        * in WLAN Active / BT master EDR
-        *
-        * Range: 0 - 255 (ms)
-        */
-       CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_MASTER_EDR,
-
-       /*
-        * Configure the min and max time BT gains the antenna
-        * in WLAN Active / BT slave EDR
-        *
-        * Range: 0 - 255 (ms)
-        */
-       CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MIN_EDR,
-       CONF_SG_WLAN_ACTIVE_BT_ACL_SLAVE_MAX_EDR,
-
-       /*
-        * The maximum time WLAN can gain the antenna for
-        * in WLAN Active / BT slave EDR
-        *
-        * Range: 0 - 255 (ms)
-        */
-       CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_SLAVE_EDR,
-
-       /*
-        * Configure the min and max time BT gains the antenna
-        * in WLAN Active / BT basic rate
-        *
-        * Range: 0 - 255 (ms)
-        */
-       CONF_SG_WLAN_ACTIVE_BT_ACL_MIN_BR,
-       CONF_SG_WLAN_ACTIVE_BT_ACL_MAX_BR,
-
-       /*
-        * The maximum time WLAN can gain the antenna for
-        * in WLAN Active / BT basic rate
-        *
-        * Range: 0 - 255 (ms)
-        */
-       CONF_SG_WLAN_ACTIVE_MAX_BT_ACL_BR,
-
-       /*
-        * Compensation percentage of WLAN passive scan window if initiated
-        * during BT voice
-        *
-        * Range: 0 - 1000 (%)
-        */
-       CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_HV3,
-
-       /*
-        * Compensation percentage of WLAN passive scan window if initiated
-        * during BT A2DP
-        *
-        * Range: 0 - 1000 (%)
-        */
-       CONF_SG_PASSIVE_SCAN_DURATION_FACTOR_A2DP,
-
-       /*
-        * Fixed time ensured for BT traffic to gain the antenna during WLAN
-        * passive scan.
-        *
-        * Range: 0 - 1000 ms
-        */
-       CONF_SG_PASSIVE_SCAN_A2DP_BT_TIME,
-
-       /*
-        * Fixed time ensured for WLAN traffic to gain the antenna during WLAN
-        * passive scan.
-        *
-        * Range: 0 - 1000 ms
-        */
-       CONF_SG_PASSIVE_SCAN_A2DP_WLAN_TIME,
-
-       /*
-        * Number of consequent BT voice frames not interrupted by WLAN
-        *
-        * Range: 0 - 100
-        */
-       CONF_SG_HV3_MAX_SERVED,
-
-       /*
-        * Protection time of the DHCP procedure.
-        *
-        * Range: 0 - 100000 (ms)
-        */
-       CONF_SG_DHCP_TIME,
-
-       /*
-        * Compensation percentage of WLAN active scan window if initiated
-        * during BT A2DP
-        *
-        * Range: 0 - 1000 (%)
-        */
-       CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_A2DP,
-       CONF_SG_TEMP_PARAM_1,
-       CONF_SG_TEMP_PARAM_2,
-       CONF_SG_TEMP_PARAM_3,
-       CONF_SG_TEMP_PARAM_4,
-       CONF_SG_TEMP_PARAM_5,
-       CONF_SG_PARAMS_MAX,
-       CONF_SG_PARAMS_ALL = 0xff
-};
-
-struct conf_sg_settings {
-       u32 params[CONF_SG_PARAMS_MAX];
-       u8 state;
-};
-
-enum conf_rx_queue_type {
-       CONF_RX_QUEUE_TYPE_LOW_PRIORITY,  /* All except the high priority */
-       CONF_RX_QUEUE_TYPE_HIGH_PRIORITY, /* Management and voice packets */
-};
-
-struct conf_rx_settings {
-       /*
-        * The maximum amount of time, in TU, before the
-        * firmware discards the MSDU.
-        *
-        * Range: 0 - 0xFFFFFFFF
-        */
-       u32 rx_msdu_life_time;
-
-       /*
-        * Packet detection threshold in the PHY.
-        *
-        * FIXME: details unknown.
-        */
-       u32 packet_detection_threshold;
-
-       /*
-        * The longest time the STA will wait to receive traffic from the AP
-        * after a PS-poll has been transmitted.
-        *
-        * Range: 0 - 200000
-        */
-       u16 ps_poll_timeout;
-       /*
-        * The longest time the STA will wait to receive traffic from the AP
-        * after a frame has been sent from an UPSD enabled queue.
-        *
-        * Range: 0 - 200000
-        */
-       u16 upsd_timeout;
-
-       /*
-        * The number of octets in an MPDU, below which an RTS/CTS
-        * handshake is not performed.
-        *
-        * Range: 0 - 4096
-        */
-       u16 rts_threshold;
-
-       /*
-        * The RX Clear Channel Assessment threshold in the PHY
-        * (the energy threshold).
-        *
-        * Range: ENABLE_ENERGY_D  == 0x140A
-        *        DISABLE_ENERGY_D == 0xFFEF
-        */
-       u16 rx_cca_threshold;
-
-       /*
-        * Occupied Rx mem-blocks number which requires interrupting the host
-        * (0 = no buffering, 0xffff = disabled).
-        *
-        * Range: u16
-        */
-       u16 irq_blk_threshold;
-
-       /*
-        * Rx packets number which requires interrupting the host
-        * (0 = no buffering).
-        *
-        * Range: u16
-        */
-       u16 irq_pkt_threshold;
-
-       /*
-        * Max time in msec the FW may delay RX-Complete interrupt.
-        *
-        * Range: 1 - 100
-        */
-       u16 irq_timeout;
-
-       /*
-        * The RX queue type.
-        *
-        * Range: RX_QUEUE_TYPE_RX_LOW_PRIORITY, RX_QUEUE_TYPE_RX_HIGH_PRIORITY,
-        */
-       u8 queue_type;
-};
-
-#define CONF_TX_MAX_RATE_CLASSES       8
-
-#define CONF_TX_RATE_MASK_UNSPECIFIED  0
-#define CONF_TX_RATE_MASK_BASIC        (CONF_HW_BIT_RATE_1MBPS | \
-                                       CONF_HW_BIT_RATE_2MBPS)
-#define CONF_TX_RATE_RETRY_LIMIT       10
-
-struct conf_tx_rate_class {
-
-       /*
-        * The rates enabled for this rate class.
-        *
-        * Range: CONF_HW_BIT_RATE_* bit mask
-        */
-       u32 enabled_rates;
-
-       /*
-        * The dot11 short retry limit used for TX retries.
-        *
-        * Range: u8
-        */
-       u8 short_retry_limit;
-
-       /*
-        * The dot11 long retry limit used for TX retries.
-        *
-        * Range: u8
-        */
-       u8 long_retry_limit;
-
-       /*
-        * Flags controlling the attributes of TX transmission.
-        *
-        * Range: bit 0: Truncate - when set, FW attempts to send a frame stop
-        *               when the total valid per-rate attempts have
-        *               been exhausted; otherwise transmissions
-        *               will continue at the lowest available rate
-        *               until the appropriate one of the
-        *               short_retry_limit, long_retry_limit,
-        *               dot11_max_transmit_msdu_life_time, or
-        *               max_tx_life_time, is exhausted.
-        *            1: Preamble Override - indicates if the preamble type
-        *               should be used in TX.
-        *            2: Preamble Type - the type of the preamble to be used by
-        *               the policy (0 - long preamble, 1 - short preamble.
-        */
-       u8 aflags;
-};
-
-#define CONF_TX_MAX_AC_COUNT 4
-
-/* Slot number setting to start transmission at PIFS interval */
-#define CONF_TX_AIFS_PIFS 1
-/* Slot number setting to start transmission at DIFS interval normal
- * DCF access */
-#define CONF_TX_AIFS_DIFS 2
-
-
-enum conf_tx_ac {
-       CONF_TX_AC_BE = 0,         /* best effort / legacy */
-       CONF_TX_AC_BK = 1,         /* background */
-       CONF_TX_AC_VI = 2,         /* video */
-       CONF_TX_AC_VO = 3,         /* voice */
-       CONF_TX_AC_CTS2SELF = 4,   /* fictious AC, follows AC_VO */
-       CONF_TX_AC_ANY_TID = 0x1f
-};
-
-struct conf_tx_ac_category {
-       /*
-        * The AC class identifier.
-        *
-        * Range: enum conf_tx_ac
-        */
-       u8 ac;
-
-       /*
-        * The contention window minimum size (in slots) for the access
-        * class.
-        *
-        * Range: u8
-        */
-       u8 cw_min;
-
-       /*
-        * The contention window maximum size (in slots) for the access
-        * class.
-        *
-        * Range: u8
-        */
-       u16 cw_max;
-
-       /*
-        * The AIF value (in slots) for the access class.
-        *
-        * Range: u8
-        */
-       u8 aifsn;
-
-       /*
-        * The TX Op Limit (in microseconds) for the access class.
-        *
-        * Range: u16
-        */
-       u16 tx_op_limit;
-};
-
-#define CONF_TX_MAX_TID_COUNT 7
-
-enum {
-       CONF_CHANNEL_TYPE_DCF = 0,   /* DC/LEGACY*/
-       CONF_CHANNEL_TYPE_EDCF = 1,  /* EDCA*/
-       CONF_CHANNEL_TYPE_HCCA = 2,  /* HCCA*/
-};
-
-enum {
-       CONF_PS_SCHEME_LEGACY = 0,
-       CONF_PS_SCHEME_UPSD_TRIGGER = 1,
-       CONF_PS_SCHEME_LEGACY_PSPOLL = 2,
-       CONF_PS_SCHEME_SAPSD = 3,
-};
-
-enum {
-       CONF_ACK_POLICY_LEGACY = 0,
-       CONF_ACK_POLICY_NO_ACK = 1,
-       CONF_ACK_POLICY_BLOCK = 2,
-};
-
-
-struct conf_tx_tid {
-       u8 queue_id;
-       u8 channel_type;
-       u8 tsid;
-       u8 ps_scheme;
-       u8 ack_policy;
-       u32 apsd_conf[2];
-};
-
-struct conf_tx_settings {
-       /*
-        * The TX ED value for TELEC Enable/Disable.
-        *
-        * Range: 0, 1
-        */
-       u8 tx_energy_detection;
-
-       /*
-        * Configuration for rate classes for TX (currently only one
-        * rate class supported.)
-        */
-       struct conf_tx_rate_class rc_conf;
-
-       /*
-        * Configuration for access categories for TX rate control.
-        */
-       u8 ac_conf_count;
-       struct conf_tx_ac_category ac_conf[CONF_TX_MAX_AC_COUNT];
-
-       /*
-        * Configuration for TID parameters.
-        */
-       u8 tid_conf_count;
-       struct conf_tx_tid tid_conf[CONF_TX_MAX_TID_COUNT];
-
-       /*
-        * The TX fragmentation threshold.
-        *
-        * Range: u16
-        */
-       u16 frag_threshold;
-
-       /*
-        * Max time in msec the FW may delay frame TX-Complete interrupt.
-        *
-        * Range: u16
-        */
-       u16 tx_compl_timeout;
-
-       /*
-        * Completed TX packet count which requires to issue the TX-Complete
-        * interrupt.
-        *
-        * Range: u16
-        */
-       u16 tx_compl_threshold;
-
-       /*
-        * The rate used for control messages and scanning on the 2.4GHz band
-        *
-        * Range: CONF_HW_BIT_RATE_* bit mask
-        */
-       u32 basic_rate;
-
-       /*
-        * The rate used for control messages and scanning on the 5GHz band
-        *
-        * Range: CONF_HW_BIT_RATE_* bit mask
-        */
-       u32 basic_rate_5;
-};
-
-enum {
-       CONF_WAKE_UP_EVENT_BEACON    = 0x01, /* Wake on every Beacon*/
-       CONF_WAKE_UP_EVENT_DTIM      = 0x02, /* Wake on every DTIM*/
-       CONF_WAKE_UP_EVENT_N_DTIM    = 0x04, /* Wake every Nth DTIM */
-       CONF_WAKE_UP_EVENT_N_BEACONS = 0x08, /* Wake every Nth beacon */
-       CONF_WAKE_UP_EVENT_BITS_MASK = 0x0F
-};
-
-#define CONF_MAX_BCN_FILT_IE_COUNT 32
-
-#define CONF_BCN_RULE_PASS_ON_CHANGE         BIT(0)
-#define CONF_BCN_RULE_PASS_ON_APPEARANCE     BIT(1)
-
-#define CONF_BCN_IE_OUI_LEN    3
-#define CONF_BCN_IE_VER_LEN    2
-
-struct conf_bcn_filt_rule {
-       /*
-        * IE number to which to associate a rule.
-        *
-        * Range: u8
-        */
-       u8 ie;
-
-       /*
-        * Rule to associate with the specific ie.
-        *
-        * Range: CONF_BCN_RULE_PASS_ON_*
-        */
-       u8 rule;
-
-       /*
-        * OUI for the vendor specifie IE (221)
-        */
-       u8 oui[CONF_BCN_IE_OUI_LEN];
-
-       /*
-        * Type for the vendor specifie IE (221)
-        */
-       u8 type;
-
-       /*
-        * Version for the vendor specifie IE (221)
-        */
-       u8 version[CONF_BCN_IE_VER_LEN];
-};
-
-#define CONF_MAX_RSSI_SNR_TRIGGERS 8
-
-enum {
-       CONF_TRIG_METRIC_RSSI_BEACON = 0,
-       CONF_TRIG_METRIC_RSSI_DATA,
-       CONF_TRIG_METRIC_SNR_BEACON,
-       CONF_TRIG_METRIC_SNR_DATA
-};
-
-enum {
-       CONF_TRIG_EVENT_TYPE_LEVEL = 0,
-       CONF_TRIG_EVENT_TYPE_EDGE
-};
-
-enum {
-       CONF_TRIG_EVENT_DIR_LOW = 0,
-       CONF_TRIG_EVENT_DIR_HIGH,
-       CONF_TRIG_EVENT_DIR_BIDIR
-};
-
-struct conf_sig_weights {
-
-       /*
-        * RSSI from beacons average weight.
-        *
-        * Range: u8
-        */
-       u8 rssi_bcn_avg_weight;
-
-       /*
-        * RSSI from data average weight.
-        *
-        * Range: u8
-        */
-       u8 rssi_pkt_avg_weight;
-
-       /*
-        * SNR from beacons average weight.
-        *
-        * Range: u8
-        */
-       u8 snr_bcn_avg_weight;
-
-       /*
-        * SNR from data average weight.
-        *
-        * Range: u8
-        */
-       u8 snr_pkt_avg_weight;
-};
-
-enum conf_bcn_filt_mode {
-       CONF_BCN_FILT_MODE_DISABLED = 0,
-       CONF_BCN_FILT_MODE_ENABLED = 1
-};
-
-enum conf_bet_mode {
-       CONF_BET_MODE_DISABLE = 0,
-       CONF_BET_MODE_ENABLE = 1,
-};
-
-struct conf_conn_settings {
-       /*
-        * Firmware wakeup conditions configuration. The host may set only
-        * one bit.
-        *
-        * Range: CONF_WAKE_UP_EVENT_*
-        */
-       u8 wake_up_event;
-
-       /*
-        * Listen interval for beacons or Dtims.
-        *
-        * Range: 0 for beacon and Dtim wakeup
-        *        1-10 for x Dtims
-        *        1-255 for x beacons
-        */
-       u8 listen_interval;
-
-       /*
-        * Enable or disable the beacon filtering.
-        *
-        * Range: CONF_BCN_FILT_MODE_*
-        */
-       enum conf_bcn_filt_mode bcn_filt_mode;
-
-       /*
-        * Configure Beacon filter pass-thru rules.
-        */
-       u8 bcn_filt_ie_count;
-       struct conf_bcn_filt_rule bcn_filt_ie[CONF_MAX_BCN_FILT_IE_COUNT];
-
-       /*
-        * The number of consequtive beacons to lose, before the firmware
-        * becomes out of synch.
-        *
-        * Range: u32
-        */
-       u32 synch_fail_thold;
-
-       /*
-        * After out-of-synch, the number of TU's to wait without a further
-        * received beacon (or probe response) before issuing the BSS_EVENT_LOSE
-        * event.
-        *
-        * Range: u32
-        */
-       u32 bss_lose_timeout;
-
-       /*
-        * Beacon receive timeout.
-        *
-        * Range: u32
-        */
-       u32 beacon_rx_timeout;
-
-       /*
-        * Broadcast receive timeout.
-        *
-        * Range: u32
-        */
-       u32 broadcast_timeout;
-
-       /*
-        * Enable/disable reception of broadcast packets in power save mode
-        *
-        * Range: 1 - enable, 0 - disable
-        */
-       u8 rx_broadcast_in_ps;
-
-       /*
-        * Consequtive PS Poll failures before sending event to driver
-        *
-        * Range: u8
-        */
-       u8 ps_poll_threshold;
-
-       /*
-        * PS Poll failure recovery ACTIVE period length
-        *
-        * Range: u32 (ms)
-        */
-       u32 ps_poll_recovery_period;
-
-       /*
-        * Configuration of signal average weights.
-        */
-       struct conf_sig_weights sig_weights;
-
-       /*
-        * Specifies if beacon early termination procedure is enabled or
-        * disabled.
-        *
-        * Range: CONF_BET_MODE_*
-        */
-       u8 bet_enable;
-
-       /*
-        * Specifies the maximum number of consecutive beacons that may be
-        * early terminated. After this number is reached at least one full
-        * beacon must be correctly received in FW before beacon ET
-        * resumes.
-        *
-        * Range 0 - 255
-        */
-       u8 bet_max_consecutive;
-
-       /*
-        * Specifies the maximum number of times to try PSM entry if it fails
-        * (if sending the appropriate null-func message fails.)
-        *
-        * Range 0 - 255
-        */
-       u8 psm_entry_retries;
-
-       /*
-        *
-        * Specifies the interval of the connection keep-alive null-func
-        * frame in ms.
-        *
-        * Range: 1000 - 3600000
-        */
-       u32 keep_alive_interval;
-
-       /*
-        * Maximum listen interval supported by the driver in units of beacons.
-        *
-        * Range: u16
-        */
-       u8 max_listen_interval;
-};
-
-enum {
-       CONF_REF_CLK_19_2_E,
-       CONF_REF_CLK_26_E,
-       CONF_REF_CLK_38_4_E,
-       CONF_REF_CLK_52_E
-};
-
-enum single_dual_band_enum {
-       CONF_SINGLE_BAND,
-       CONF_DUAL_BAND
-};
-
-#define CONF_RSSI_AND_PROCESS_COMPENSATION_SIZE 15
-#define CONF_NUMBER_OF_SUB_BANDS_5  7
-#define CONF_NUMBER_OF_RATE_GROUPS  6
-#define CONF_NUMBER_OF_CHANNELS_2_4 14
-#define CONF_NUMBER_OF_CHANNELS_5   35
-
-struct conf_radio_parms {
-       /*
-        * FEM parameter set to use
-        *
-        * Range: 0 or 1
-        */
-       u8 fem;
-};
-
-struct conf_itrim_settings {
-       /* enable dco itrim */
-       u8 enable;
-
-       /* moderation timeout in microsecs from the last TX */
-       u32 timeout;
-};
-
-struct conf_pm_config_settings {
-       /*
-        * Host clock settling time
-        *
-        * Range: 0 - 30000 us
-        */
-       u32 host_clk_settling_time;
-
-       /*
-        * Host fast wakeup support
-        *
-        * Range: true, false
-        */
-       bool host_fast_wakeup_support;
-};
-
-struct conf_roam_trigger_settings {
-       /*
-        * The minimum interval between two trigger events.
-        *
-        * Range: 0 - 60000 ms
-        */
-       u16 trigger_pacing;
-
-       /*
-        * The weight for rssi/beacon average calculation
-        *
-        * Range: 0 - 255
-        */
-       u8 avg_weight_rssi_beacon;
-
-       /*
-        * The weight for rssi/data frame average calculation
-        *
-        * Range: 0 - 255
-        */
-       u8 avg_weight_rssi_data;
-
-       /*
-        * The weight for snr/beacon average calculation
-        *
-        * Range: 0 - 255
-        */
-       u8 avg_weight_snr_beacon;
-
-       /*
-        * The weight for snr/data frame average calculation
-        *
-        * Range: 0 - 255
-        */
-       u8 avg_weight_snr_data;
-};
-
-struct conf_drv_settings {
-       struct conf_sg_settings sg;
-       struct conf_rx_settings rx;
-       struct conf_tx_settings tx;
-       struct conf_conn_settings conn;
-       struct conf_itrim_settings itrim;
-       struct conf_pm_config_settings pm_config;
-       struct conf_roam_trigger_settings roam_trigger;
-};
-
-#endif
diff --git a/drivers/net/wireless/wl12xx/wl1271_ini.h b/drivers/net/wireless/wl12xx/wl1271_ini.h
deleted file mode 100644 (file)
index 2313047..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * This file is part of wl1271
- *
- * Copyright (C) 2010 Nokia Corporation
- *
- * Contact: Luciano Coelho <luciano.coelho@nokia.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- *
- */
-
-#ifndef __WL1271_INI_H__
-#define __WL1271_INI_H__
-
-#define WL1271_INI_MAX_SMART_REFLEX_PARAM 16
-
-struct wl1271_ini_general_params {
-       u8 ref_clock;
-       u8 settling_time;
-       u8 clk_valid_on_wakeup;
-       u8 dc2dc_mode;
-       u8 dual_mode_select;
-       u8 tx_bip_fem_auto_detect;
-       u8 tx_bip_fem_manufacturer;
-       u8 general_settings;
-       u8 sr_state;
-       u8 srf1[WL1271_INI_MAX_SMART_REFLEX_PARAM];
-       u8 srf2[WL1271_INI_MAX_SMART_REFLEX_PARAM];
-       u8 srf3[WL1271_INI_MAX_SMART_REFLEX_PARAM];
-} __packed;
-
-#define WL1271_INI_RSSI_PROCESS_COMPENS_SIZE 15
-
-struct wl1271_ini_band_params_2 {
-       u8 rx_trace_insertion_loss;
-       u8 tx_trace_loss;
-       u8 rx_rssi_process_compens[WL1271_INI_RSSI_PROCESS_COMPENS_SIZE];
-} __packed;
-
-#define WL1271_INI_RATE_GROUP_COUNT 6
-#define WL1271_INI_CHANNEL_COUNT_2 14
-
-struct wl1271_ini_fem_params_2 {
-       __le16 tx_bip_ref_pd_voltage;
-       u8 tx_bip_ref_power;
-       u8 tx_bip_ref_offset;
-       u8 tx_per_rate_pwr_limits_normal[WL1271_INI_RATE_GROUP_COUNT];
-       u8 tx_per_rate_pwr_limits_degraded[WL1271_INI_RATE_GROUP_COUNT];
-       u8 tx_per_rate_pwr_limits_extreme[WL1271_INI_RATE_GROUP_COUNT];
-       u8 tx_per_chan_pwr_limits_11b[WL1271_INI_CHANNEL_COUNT_2];
-       u8 tx_per_chan_pwr_limits_ofdm[WL1271_INI_CHANNEL_COUNT_2];
-       u8 tx_pd_vs_rate_offsets[WL1271_INI_RATE_GROUP_COUNT];
-       u8 tx_ibias[WL1271_INI_RATE_GROUP_COUNT];
-       u8 rx_fem_insertion_loss;
-       u8 degraded_low_to_normal_thr;
-       u8 normal_to_degraded_high_thr;
-} __packed;
-
-#define WL1271_INI_CHANNEL_COUNT_5 35
-#define WL1271_INI_SUB_BAND_COUNT_5 7
-
-struct wl1271_ini_band_params_5 {
-       u8 rx_trace_insertion_loss[WL1271_INI_SUB_BAND_COUNT_5];
-       u8 tx_trace_loss[WL1271_INI_SUB_BAND_COUNT_5];
-       u8 rx_rssi_process_compens[WL1271_INI_RSSI_PROCESS_COMPENS_SIZE];
-} __packed;
-
-struct wl1271_ini_fem_params_5 {
-       __le16 tx_bip_ref_pd_voltage[WL1271_INI_SUB_BAND_COUNT_5];
-       u8 tx_bip_ref_power[WL1271_INI_SUB_BAND_COUNT_5];
-       u8 tx_bip_ref_offset[WL1271_INI_SUB_BAND_COUNT_5];
-       u8 tx_per_rate_pwr_limits_normal[WL1271_INI_RATE_GROUP_COUNT];
-       u8 tx_per_rate_pwr_limits_degraded[WL1271_INI_RATE_GROUP_COUNT];
-       u8 tx_per_rate_pwr_limits_extreme[WL1271_INI_RATE_GROUP_COUNT];
-       u8 tx_per_chan_pwr_limits_ofdm[WL1271_INI_CHANNEL_COUNT_5];
-       u8 tx_pd_vs_rate_offsets[WL1271_INI_RATE_GROUP_COUNT];
-       u8 tx_ibias[WL1271_INI_RATE_GROUP_COUNT];
-       u8 rx_fem_insertion_loss[WL1271_INI_SUB_BAND_COUNT_5];
-       u8 degraded_low_to_normal_thr;
-       u8 normal_to_degraded_high_thr;
-} __packed;
-
-
-/* NVS data structure */
-#define WL1271_INI_NVS_SECTION_SIZE                 468
-#define WL1271_INI_FEM_MODULE_COUNT                  2
-
-#define WL1271_INI_LEGACY_NVS_FILE_SIZE              800
-
-struct wl1271_nvs_file {
-       /* NVS section */
-       u8 nvs[WL1271_INI_NVS_SECTION_SIZE];
-
-       /* INI section */
-       struct wl1271_ini_general_params general_params;
-       u8 padding1;
-       struct wl1271_ini_band_params_2 stat_radio_params_2;
-       u8 padding2;
-       struct {
-               struct wl1271_ini_fem_params_2 params;
-               u8 padding;
-       } dyn_radio_params_2[WL1271_INI_FEM_MODULE_COUNT];
-       struct wl1271_ini_band_params_5 stat_radio_params_5;
-       u8 padding3;
-       struct {
-               struct wl1271_ini_fem_params_5 params;
-               u8 padding;
-       } dyn_radio_params_5[WL1271_INI_FEM_MODULE_COUNT];
-} __packed;
-
-#endif
diff --git a/drivers/net/wireless/wl12xx/wl1271_io.c b/drivers/net/wireless/wl12xx/wl1271_io.c
deleted file mode 100644 (file)
index c8759ac..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * This file is part of wl1271
- *
- * Copyright (C) 2008-2010 Nokia Corporation
- *
- * Contact: Luciano Coelho <luciano.coelho@nokia.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- *
- */
-
-#include <linux/module.h>
-#include <linux/platform_device.h>
-#include <linux/crc7.h>
-#include <linux/spi/spi.h>
-
-#include "wl1271.h"
-#include "wl12xx_80211.h"
-#include "wl1271_io.h"
-
-#define OCP_CMD_LOOP  32
-
-#define OCP_CMD_WRITE 0x1
-#define OCP_CMD_READ  0x2
-
-#define OCP_READY_MASK  BIT(18)
-#define OCP_STATUS_MASK (BIT(16) | BIT(17))
-
-#define OCP_STATUS_NO_RESP    0x00000
-#define OCP_STATUS_OK         0x10000
-#define OCP_STATUS_REQ_FAILED 0x20000
-#define OCP_STATUS_RESP_ERROR 0x30000
-
-void wl1271_disable_interrupts(struct wl1271 *wl)
-{
-       wl->if_ops->disable_irq(wl);
-}
-
-void wl1271_enable_interrupts(struct wl1271 *wl)
-{
-       wl->if_ops->enable_irq(wl);
-}
-
-/* Set the SPI partitions to access the chip addresses
- *
- * To simplify driver code, a fixed (virtual) memory map is defined for
- * register and memory addresses. Because in the chipset, in different stages
- * of operation, those addresses will move around, an address translation
- * mechanism is required.
- *
- * There are four partitions (three memory and one register partition),
- * which are mapped to two different areas of the hardware memory.
- *
- *                                Virtual address
- *                                     space
- *
- *                                    |    |
- *                                 ...+----+--> mem.start
- *          Physical address    ...   |    |
- *               space       ...      |    | [PART_0]
- *                        ...         |    |
- *  00000000  <--+----+...         ...+----+--> mem.start + mem.size
- *               |    |         ...   |    |
- *               |MEM |      ...      |    |
- *               |    |   ...         |    |
- *  mem.size  <--+----+...            |    | {unused area)
- *               |    |   ...         |    |
- *               |REG |      ...      |    |
- *  mem.size     |    |         ...   |    |
- *      +     <--+----+...         ...+----+--> reg.start
- *  reg.size     |    |   ...         |    |
- *               |MEM2|      ...      |    | [PART_1]
- *               |    |         ...   |    |
- *                                 ...+----+--> reg.start + reg.size
- *                                    |    |
- *
- */
-int wl1271_set_partition(struct wl1271 *wl,
-                        struct wl1271_partition_set *p)
-{
-       /* copy partition info */
-       memcpy(&wl->part, p, sizeof(*p));
-
-       wl1271_debug(DEBUG_SPI, "mem_start %08X mem_size %08X",
-                    p->mem.start, p->mem.size);
-       wl1271_debug(DEBUG_SPI, "reg_start %08X reg_size %08X",
-                    p->reg.start, p->reg.size);
-       wl1271_debug(DEBUG_SPI, "mem2_start %08X mem2_size %08X",
-                    p->mem2.start, p->mem2.size);
-       wl1271_debug(DEBUG_SPI, "mem3_start %08X mem3_size %08X",
-                    p->mem3.start, p->mem3.size);
-
-       /* write partition info to the chipset */
-       wl1271_raw_write32(wl, HW_PART0_START_ADDR, p->mem.start);
-       wl1271_raw_write32(wl, HW_PART0_SIZE_ADDR, p->mem.size);
-       wl1271_raw_write32(wl, HW_PART1_START_ADDR, p->reg.start);
-       wl1271_raw_write32(wl, HW_PART1_SIZE_ADDR, p->reg.size);
-       wl1271_raw_write32(wl, HW_PART2_START_ADDR, p->mem2.start);
-       wl1271_raw_write32(wl, HW_PART2_SIZE_ADDR, p->mem2.size);
-       wl1271_raw_write32(wl, HW_PART3_START_ADDR, p->mem3.start);
-
-       return 0;
-}
-
-void wl1271_io_reset(struct wl1271 *wl)
-{
-       wl->if_ops->reset(wl);
-}
-
-void wl1271_io_init(struct wl1271 *wl)
-{
-       wl->if_ops->init(wl);
-}
-
-void wl1271_top_reg_write(struct wl1271 *wl, int addr, u16 val)
-{
-       /* write address >> 1 + 0x30000 to OCP_POR_CTR */
-       addr = (addr >> 1) + 0x30000;
-       wl1271_write32(wl, OCP_POR_CTR, addr);
-
-       /* write value to OCP_POR_WDATA */
-       wl1271_write32(wl, OCP_DATA_WRITE, val);
-
-       /* write 1 to OCP_CMD */
-       wl1271_write32(wl, OCP_CMD, OCP_CMD_WRITE);
-}
-
-u16 wl1271_top_reg_read(struct wl1271 *wl, int addr)
-{
-       u32 val;
-       int timeout = OCP_CMD_LOOP;
-
-       /* write address >> 1 + 0x30000 to OCP_POR_CTR */
-       addr = (addr >> 1) + 0x30000;
-       wl1271_write32(wl, OCP_POR_CTR, addr);
-
-       /* write 2 to OCP_CMD */
-       wl1271_write32(wl, OCP_CMD, OCP_CMD_READ);
-
-       /* poll for data ready */
-       do {
-               val = wl1271_read32(wl, OCP_DATA_READ);
-       } while (!(val & OCP_READY_MASK) && --timeout);
-
-       if (!timeout) {
-               wl1271_warning("Top register access timed out.");
-               return 0xffff;
-       }
-
-       /* check data status and return if OK */
-       if ((val & OCP_STATUS_MASK) == OCP_STATUS_OK)
-               return val & 0xffff;
-       else {
-               wl1271_warning("Top register access returned error.");
-               return 0xffff;
-       }
-}
-
diff --git a/drivers/net/wireless/wl12xx/wl1271_io.h b/drivers/net/wireless/wl12xx/wl1271_io.h
deleted file mode 100644 (file)
index bc806c7..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * This file is part of wl1271
- *
- * Copyright (C) 1998-2009 Texas Instruments. All rights reserved.
- * Copyright (C) 2008-2010 Nokia Corporation
- *
- * Contact: Luciano Coelho <luciano.coelho@nokia.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- *
- */
-
-#ifndef __WL1271_IO_H__
-#define __WL1271_IO_H__
-
-#include "wl1271_reg.h"
-
-#define HW_ACCESS_MEMORY_MAX_RANGE     0x1FFC0
-
-#define HW_PARTITION_REGISTERS_ADDR     0x1FFC0
-#define HW_PART0_SIZE_ADDR              (HW_PARTITION_REGISTERS_ADDR)
-#define HW_PART0_START_ADDR             (HW_PARTITION_REGISTERS_ADDR + 4)
-#define HW_PART1_SIZE_ADDR              (HW_PARTITION_REGISTERS_ADDR + 8)
-#define HW_PART1_START_ADDR             (HW_PARTITION_REGISTERS_ADDR + 12)
-#define HW_PART2_SIZE_ADDR              (HW_PARTITION_REGISTERS_ADDR + 16)
-#define HW_PART2_START_ADDR             (HW_PARTITION_REGISTERS_ADDR + 20)
-#define HW_PART3_START_ADDR             (HW_PARTITION_REGISTERS_ADDR + 24)
-
-#define HW_ACCESS_REGISTER_SIZE         4
-
-#define HW_ACCESS_PRAM_MAX_RANGE       0x3c000
-
-struct wl1271;
-
-void wl1271_disable_interrupts(struct wl1271 *wl);
-void wl1271_enable_interrupts(struct wl1271 *wl);
-
-void wl1271_io_reset(struct wl1271 *wl);
-void wl1271_io_init(struct wl1271 *wl);
-
-static inline struct device *wl1271_wl_to_dev(struct wl1271 *wl)
-{
-       return wl->if_ops->dev(wl);
-}
-
-
-/* Raw target IO, address is not translated */
-static inline void wl1271_raw_write(struct wl1271 *wl, int addr, void *buf,
-                                   size_t len, bool fixed)
-{
-       wl->if_ops->write(wl, addr, buf, len, fixed);
-}
-
-static inline void wl1271_raw_read(struct wl1271 *wl, int addr, void *buf,
-                                  size_t len, bool fixed)
-{
-       wl->if_ops->read(wl, addr, buf, len, fixed);
-}
-
-static inline u32 wl1271_raw_read32(struct wl1271 *wl, int addr)
-{
-       wl1271_raw_read(wl, addr, &wl->buffer_32,
-                           sizeof(wl->buffer_32), false);
-
-       return le32_to_cpu(wl->buffer_32);
-}
-
-static inline void wl1271_raw_write32(struct wl1271 *wl, int addr, u32 val)
-{
-       wl->buffer_32 = cpu_to_le32(val);
-       wl1271_raw_write(wl, addr, &wl->buffer_32,
-                            sizeof(wl->buffer_32), false);
-}
-
-/* Translated target IO */
-static inline int wl1271_translate_addr(struct wl1271 *wl, int addr)
-{
-       /*
-        * To translate, first check to which window of addresses the
-        * particular address belongs. Then subtract the starting address
-        * of that window from the address. Then, add offset of the
-        * translated region.
-        *
-        * The translated regions occur next to each other in physical device
-        * memory, so just add the sizes of the preceeding address regions to
-        * get the offset to the new region.
-        *
-        * Currently, only the two first regions are addressed, and the
-        * assumption is that all addresses will fall into either of those
-        * two.
-        */
-       if ((addr >= wl->part.reg.start) &&
-           (addr < wl->part.reg.start + wl->part.reg.size))
-               return addr - wl->part.reg.start + wl->part.mem.size;
-       else
-               return addr - wl->part.mem.start;
-}
-
-static inline void wl1271_read(struct wl1271 *wl, int addr, void *buf,
-                              size_t len, bool fixed)
-{
-       int physical;
-
-       physical = wl1271_translate_addr(wl, addr);
-
-       wl1271_raw_read(wl, physical, buf, len, fixed);
-}
-
-static inline void wl1271_write(struct wl1271 *wl, int addr, void *buf,
-                               size_t len, bool fixed)
-{
-       int physical;
-
-       physical = wl1271_translate_addr(wl, addr);
-
-       wl1271_raw_write(wl, physical, buf, len, fixed);
-}
-
-static inline u32 wl1271_read32(struct wl1271 *wl, int addr)
-{
-       return wl1271_raw_read32(wl, wl1271_translate_addr(wl, addr));
-}
-
-static inline void wl1271_write32(struct wl1271 *wl, int addr, u32 val)
-{
-       wl1271_raw_write32(wl, wl1271_translate_addr(wl, addr), val);
-}
-
-static inline void wl1271_power_off(struct wl1271 *wl)
-{
-       wl->if_ops->power(wl, false);
-       clear_bit(WL1271_FLAG_GPIO_POWER, &wl->flags);
-}
-
-static inline void wl1271_power_on(struct wl1271 *wl)
-{
-       wl->if_ops->power(wl, true);
-       set_bit(WL1271_FLAG_GPIO_POWER, &wl->flags);
-}
-
-
-/* Top Register IO */
-void wl1271_top_reg_write(struct wl1271 *wl, int addr, u16 val);
-u16 wl1271_top_reg_read(struct wl1271 *wl, int addr);
-
-int wl1271_set_partition(struct wl1271 *wl,
-                        struct wl1271_partition_set *p);
-
-/* Functions from wl1271_main.c */
-
-int wl1271_register_hw(struct wl1271 *wl);
-void wl1271_unregister_hw(struct wl1271 *wl);
-int wl1271_init_ieee80211(struct wl1271 *wl);
-struct ieee80211_hw *wl1271_alloc_hw(void);
-int wl1271_free_hw(struct wl1271 *wl);
-
-#endif
diff --git a/drivers/net/wireless/wl12xx/wl1271_scan.c b/drivers/net/wireless/wl12xx/wl1271_scan.c
deleted file mode 100644 (file)
index fec43ee..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * This file is part of wl1271
- *
- * Copyright (C) 2009-2010 Nokia Corporation
- *
- * Contact: Luciano Coelho <luciano.coelho@nokia.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- *
- */
-
-#include <linux/ieee80211.h>
-
-#include "wl1271.h"
-#include "wl1271_cmd.h"
-#include "wl1271_scan.h"
-#include "wl1271_acx.h"
-
-static int wl1271_get_scan_channels(struct wl1271 *wl,
-                                   struct cfg80211_scan_request *req,
-                                   struct basic_scan_channel_params *channels,
-                                   enum ieee80211_band band, bool passive)
-{
-       int i, j;
-       u32 flags;
-
-       for (i = 0, j = 0;
-            i < req->n_channels && j < WL1271_SCAN_MAX_CHANNELS;
-            i++) {
-
-               flags = req->channels[i]->flags;
-
-               if (!wl->scan.scanned_ch[i] &&
-                   !(flags & IEEE80211_CHAN_DISABLED) &&
-                   ((!!(flags & IEEE80211_CHAN_PASSIVE_SCAN)) == passive) &&
-                   (req->channels[i]->band == band)) {
-
-                       wl1271_debug(DEBUG_SCAN, "band %d, center_freq %d ",
-                                    req->channels[i]->band,
-                                    req->channels[i]->center_freq);
-                       wl1271_debug(DEBUG_SCAN, "hw_value %d, flags %X",
-                                    req->channels[i]->hw_value,
-                                    req->channels[i]->flags);
-                       wl1271_debug(DEBUG_SCAN,
-                                    "max_antenna_gain %d, max_power %d",
-                                    req->channels[i]->max_antenna_gain,
-                                    req->channels[i]->max_power);
-                       wl1271_debug(DEBUG_SCAN, "beacon_found %d",
-                                    req->channels[i]->beacon_found);
-
-                       channels[j].min_duration =
-                               cpu_to_le32(WL1271_SCAN_CHAN_MIN_DURATION);
-                       channels[j].max_duration =
-                               cpu_to_le32(WL1271_SCAN_CHAN_MAX_DURATION);
-                       channels[j].early_termination = 0;
-                       channels[j].tx_power_att = req->channels[i]->max_power;
-                       channels[j].channel = req->channels[i]->hw_value;
-
-                       memset(&channels[j].bssid_lsb, 0xff, 4);
-                       memset(&channels[j].bssid_msb, 0xff, 2);
-
-                       /* Mark the channels we already used */
-                       wl->scan.scanned_ch[i] = true;
-
-                       j++;
-               }
-       }
-
-       return j;
-}
-
-#define WL1271_NOTHING_TO_SCAN 1
-
-static int wl1271_scan_send(struct wl1271 *wl, enum ieee80211_band band,
-                            bool passive, u32 basic_rate)
-{
-       struct wl1271_cmd_scan *cmd;
-       struct wl1271_cmd_trigger_scan_to *trigger;
-       int ret;
-       u16 scan_options = 0;
-
-       cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
-       trigger = kzalloc(sizeof(*trigger), GFP_KERNEL);
-       if (!cmd || !trigger) {
-               ret = -ENOMEM;
-               goto out;
-       }
-
-       /* We always use high priority scans */
-       scan_options = WL1271_SCAN_OPT_PRIORITY_HIGH;
-       if(passive)
-               scan_options |= WL1271_SCAN_OPT_PASSIVE;
-       cmd->params.scan_options = cpu_to_le16(scan_options);
-
-       cmd->params.n_ch = wl1271_get_scan_channels(wl, wl->scan.req,
-                                                   cmd->channels,
-                                                   band, passive);
-       if (cmd->params.n_ch == 0) {
-               ret = WL1271_NOTHING_TO_SCAN;
-               goto out;
-       }
-
-       cmd->params.tx_rate = cpu_to_le32(basic_rate);
-       cmd->params.rx_config_options = cpu_to_le32(CFG_RX_ALL_GOOD);
-       cmd->params.rx_filter_options =
-               cpu_to_le32(CFG_RX_PRSP_EN | CFG_RX_MGMT_EN | CFG_RX_BCN_EN);
-
-       cmd->params.n_probe_reqs = WL1271_SCAN_PROBE_REQS;
-       cmd->params.tx_rate = cpu_to_le32(basic_rate);
-       cmd->params.tid_trigger = 0;
-       cmd->params.scan_tag = WL1271_SCAN_DEFAULT_TAG;
-
-       if (band == IEEE80211_BAND_2GHZ)
-               cmd->params.band = WL1271_SCAN_BAND_2_4_GHZ;
-       else
-               cmd->params.band = WL1271_SCAN_BAND_5_GHZ;
-
-       if (wl->scan.ssid_len && wl->scan.ssid) {
-               cmd->params.ssid_len = wl->scan.ssid_len;
-               memcpy(cmd->params.ssid, wl->scan.ssid, wl->scan.ssid_len);
-       }
-
-       ret = wl1271_cmd_build_probe_req(wl, wl->scan.ssid, wl->scan.ssid_len,
-                                        wl->scan.req->ie, wl->scan.req->ie_len,
-                                        band);
-       if (ret < 0) {
-               wl1271_error("PROBE request template failed");
-               goto out;
-       }
-
-       /* disable the timeout */
-       trigger->timeout = 0;
-       ret = wl1271_cmd_send(wl, CMD_TRIGGER_SCAN_TO, trigger,
-                             sizeof(*trigger), 0);
-       if (ret < 0) {
-               wl1271_error("trigger scan to failed for hw scan");
-               goto out;
-       }
-
-       wl1271_dump(DEBUG_SCAN, "SCAN: ", cmd, sizeof(*cmd));
-
-       ret = wl1271_cmd_send(wl, CMD_SCAN, cmd, sizeof(*cmd), 0);
-       if (ret < 0) {
-               wl1271_error("SCAN failed");
-               goto out;
-       }
-
-out:
-       kfree(cmd);
-       kfree(trigger);
-       return ret;
-}
-
-void wl1271_scan_stm(struct wl1271 *wl)
-{
-       int ret;
-
-       switch (wl->scan.state) {
-       case WL1271_SCAN_STATE_IDLE:
-               break;
-
-       case WL1271_SCAN_STATE_2GHZ_ACTIVE:
-               ret = wl1271_scan_send(wl, IEEE80211_BAND_2GHZ, false,
-                                      wl->conf.tx.basic_rate);
-               if (ret == WL1271_NOTHING_TO_SCAN) {
-                       wl->scan.state = WL1271_SCAN_STATE_2GHZ_PASSIVE;
-                       wl1271_scan_stm(wl);
-               }
-
-               break;
-
-       case WL1271_SCAN_STATE_2GHZ_PASSIVE:
-               ret = wl1271_scan_send(wl, IEEE80211_BAND_2GHZ, true,
-                                      wl->conf.tx.basic_rate);
-               if (ret == WL1271_NOTHING_TO_SCAN) {
-                       if (wl1271_11a_enabled())
-                               wl->scan.state = WL1271_SCAN_STATE_5GHZ_ACTIVE;
-                       else
-                               wl->scan.state = WL1271_SCAN_STATE_DONE;
-                       wl1271_scan_stm(wl);
-               }
-
-               break;
-
-       case WL1271_SCAN_STATE_5GHZ_ACTIVE:
-               ret = wl1271_scan_send(wl, IEEE80211_BAND_5GHZ, false,
-                                      wl->conf.tx.basic_rate_5);
-               if (ret == WL1271_NOTHING_TO_SCAN) {
-                       wl->scan.state = WL1271_SCAN_STATE_5GHZ_PASSIVE;
-                       wl1271_scan_stm(wl);
-               }
-
-               break;
-
-       case WL1271_SCAN_STATE_5GHZ_PASSIVE:
-               ret = wl1271_scan_send(wl, IEEE80211_BAND_5GHZ, true,
-                                      wl->conf.tx.basic_rate_5);
-               if (ret == WL1271_NOTHING_TO_SCAN) {
-                       wl->scan.state = WL1271_SCAN_STATE_DONE;
-                       wl1271_scan_stm(wl);
-               }
-
-               break;
-
-       case WL1271_SCAN_STATE_DONE:
-               mutex_unlock(&wl->mutex);
-               ieee80211_scan_completed(wl->hw, false);
-               mutex_lock(&wl->mutex);
-
-               kfree(wl->scan.scanned_ch);
-               wl->scan.scanned_ch = NULL;
-
-               wl->scan.state = WL1271_SCAN_STATE_IDLE;
-               break;
-
-       default:
-               wl1271_error("invalid scan state");
-               break;
-       }
-}
-
-int wl1271_scan(struct wl1271 *wl, const u8 *ssid, size_t ssid_len,
-               struct cfg80211_scan_request *req)
-{
-       if (wl->scan.state != WL1271_SCAN_STATE_IDLE)
-               return -EBUSY;
-
-       wl->scan.state = WL1271_SCAN_STATE_2GHZ_ACTIVE;
-
-       if (ssid_len && ssid) {
-               wl->scan.ssid_len = ssid_len;
-               memcpy(wl->scan.ssid, ssid, ssid_len);
-       } else {
-               wl->scan.ssid_len = 0;
-       }
-
-       wl->scan.req = req;
-
-       wl->scan.scanned_ch = kzalloc(req->n_channels *
-                                     sizeof(*wl->scan.scanned_ch),
-                                     GFP_KERNEL);
-       wl1271_scan_stm(wl);
-
-       return 0;
-}
diff --git a/drivers/net/wireless/wl12xx/wl1271_scan.h b/drivers/net/wireless/wl12xx/wl1271_scan.h
deleted file mode 100644 (file)
index f181570..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * This file is part of wl1271
- *
- * Copyright (C) 2009-2010 Nokia Corporation
- *
- * Contact: Luciano Coelho <luciano.coelho@nokia.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- *
- */
-
-#ifndef __WL1271_SCAN_H__
-#define __WL1271_SCAN_H__
-
-#include "wl1271.h"
-
-int wl1271_scan(struct wl1271 *wl, const u8 *ssid, size_t ssid_len,
-               struct cfg80211_scan_request *req);
-int wl1271_scan_build_probe_req(struct wl1271 *wl,
-                               const u8 *ssid, size_t ssid_len,
-                               const u8 *ie, size_t ie_len, u8 band);
-void wl1271_scan_stm(struct wl1271 *wl);
-
-#define WL1271_SCAN_MAX_CHANNELS       24
-#define WL1271_SCAN_DEFAULT_TAG        1
-#define WL1271_SCAN_CURRENT_TX_PWR     0
-#define WL1271_SCAN_OPT_ACTIVE         0
-#define WL1271_SCAN_OPT_PASSIVE               1
-#define WL1271_SCAN_OPT_PRIORITY_HIGH  4
-#define WL1271_SCAN_CHAN_MIN_DURATION  30000  /* TU */
-#define WL1271_SCAN_CHAN_MAX_DURATION  60000  /* TU */
-#define WL1271_SCAN_BAND_2_4_GHZ 0
-#define WL1271_SCAN_BAND_5_GHZ 1
-#define WL1271_SCAN_PROBE_REQS 3
-
-enum {
-       WL1271_SCAN_STATE_IDLE,
-       WL1271_SCAN_STATE_2GHZ_ACTIVE,
-       WL1271_SCAN_STATE_2GHZ_PASSIVE,
-       WL1271_SCAN_STATE_5GHZ_ACTIVE,
-       WL1271_SCAN_STATE_5GHZ_PASSIVE,
-       WL1271_SCAN_STATE_DONE
-};
-
-struct basic_scan_params {
-       __le32 rx_config_options;
-       __le32 rx_filter_options;
-       /* Scan option flags (WL1271_SCAN_OPT_*) */
-       __le16 scan_options;
-       /* Number of scan channels in the list (maximum 30) */
-       u8 n_ch;
-       /* This field indicates the number of probe requests to send
-          per channel for an active scan */
-       u8 n_probe_reqs;
-       /* Rate bit field for sending the probes */
-       __le32 tx_rate;
-       u8 tid_trigger;
-       u8 ssid_len;
-       /* in order to align */
-       u8 padding1[2];
-       u8 ssid[IW_ESSID_MAX_SIZE];
-       /* Band to scan */
-       u8 band;
-       u8 use_ssid_list;
-       u8 scan_tag;
-       u8 padding2;
-} __packed;
-
-struct basic_scan_channel_params {
-       /* Duration in TU to wait for frames on a channel for active scan */
-       __le32 min_duration;
-       __le32 max_duration;
-       __le32 bssid_lsb;
-       __le16 bssid_msb;
-       u8 early_termination;
-       u8 tx_power_att;
-       u8 channel;
-       /* FW internal use only! */
-       u8 dfs_candidate;
-       u8 activity_detected;
-       u8 pad;
-} __packed;
-
-struct wl1271_cmd_scan {
-       struct wl1271_cmd_header header;
-
-       struct basic_scan_params params;
-       struct basic_scan_channel_params channels[WL1271_SCAN_MAX_CHANNELS];
-} __packed;
-
-struct wl1271_cmd_trigger_scan_to {
-       struct wl1271_cmd_header header;
-
-       __le32 timeout;
-} __packed;
-
-#endif /* __WL1271_SCAN_H__ */
diff --git a/drivers/net/wireless/wl12xx/wl1271_sdio.c b/drivers/net/wireless/wl12xx/wl1271_sdio.c
deleted file mode 100644 (file)
index 7059b5c..0000000
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * This file is part of wl1271
- *
- * Copyright (C) 2009-2010 Nokia Corporation
- *
- * Contact: Luciano Coelho <luciano.coelho@nokia.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- *
- */
-
-#include <linux/irq.h>
-#include <linux/module.h>
-#include <linux/crc7.h>
-#include <linux/vmalloc.h>
-#include <linux/mmc/sdio_func.h>
-#include <linux/mmc/sdio_ids.h>
-#include <linux/mmc/card.h>
-#include <linux/gpio.h>
-
-#include "wl1271.h"
-#include "wl12xx_80211.h"
-#include "wl1271_io.h"
-
-
-#define RX71_WL1271_IRQ_GPIO           42
-
-#ifndef SDIO_VENDOR_ID_TI
-#define SDIO_VENDOR_ID_TI              0x0097
-#endif
-
-#ifndef SDIO_DEVICE_ID_TI_WL1271
-#define SDIO_DEVICE_ID_TI_WL1271       0x4076
-#endif
-
-static const struct sdio_device_id wl1271_devices[] = {
-       { SDIO_DEVICE(SDIO_VENDOR_ID_TI, SDIO_DEVICE_ID_TI_WL1271) },
-       {}
-};
-MODULE_DEVICE_TABLE(sdio, wl1271_devices);
-
-static inline struct sdio_func *wl_to_func(struct wl1271 *wl)
-{
-       return wl->if_priv;
-}
-
-static struct device *wl1271_sdio_wl_to_dev(struct wl1271 *wl)
-{
-       return &(wl_to_func(wl)->dev);
-}
-
-static irqreturn_t wl1271_irq(int irq, void *cookie)
-{
-       struct wl1271 *wl = cookie;
-       unsigned long flags;
-
-       wl1271_debug(DEBUG_IRQ, "IRQ");
-
-       /* complete the ELP completion */
-       spin_lock_irqsave(&wl->wl_lock, flags);
-       if (wl->elp_compl) {
-               complete(wl->elp_compl);
-               wl->elp_compl = NULL;
-       }
-
-       if (!test_and_set_bit(WL1271_FLAG_IRQ_RUNNING, &wl->flags))
-               ieee80211_queue_work(wl->hw, &wl->irq_work);
-       set_bit(WL1271_FLAG_IRQ_PENDING, &wl->flags);
-       spin_unlock_irqrestore(&wl->wl_lock, flags);
-
-       return IRQ_HANDLED;
-}
-
-static void wl1271_sdio_disable_interrupts(struct wl1271 *wl)
-{
-       disable_irq(wl->irq);
-}
-
-static void wl1271_sdio_enable_interrupts(struct wl1271 *wl)
-{
-       enable_irq(wl->irq);
-}
-
-static void wl1271_sdio_reset(struct wl1271 *wl)
-{
-}
-
-static void wl1271_sdio_init(struct wl1271 *wl)
-{
-}
-
-static void wl1271_sdio_raw_read(struct wl1271 *wl, int addr, void *buf,
-                                size_t len, bool fixed)
-{
-       int ret;
-       struct sdio_func *func = wl_to_func(wl);
-
-       if (unlikely(addr == HW_ACCESS_ELP_CTRL_REG_ADDR)) {
-               ((u8 *)buf)[0] = sdio_f0_readb(func, addr, &ret);
-               wl1271_debug(DEBUG_SDIO, "sdio read 52 addr 0x%x, byte 0x%02x",
-                            addr, ((u8 *)buf)[0]);
-       } else {
-               if (fixed)
-                       ret = sdio_readsb(func, buf, addr, len);
-               else
-                       ret = sdio_memcpy_fromio(func, buf, addr, len);
-
-               wl1271_debug(DEBUG_SDIO, "sdio read 53 addr 0x%x, %zu bytes",
-                            addr, len);
-               wl1271_dump_ascii(DEBUG_SDIO, "data: ", buf, len);
-       }
-
-       if (ret)
-               wl1271_error("sdio read failed (%d)", ret);
-
-}
-
-static void wl1271_sdio_raw_write(struct wl1271 *wl, int addr, void *buf,
-                                 size_t len, bool fixed)
-{
-       int ret;
-       struct sdio_func *func = wl_to_func(wl);
-
-       if (unlikely(addr == HW_ACCESS_ELP_CTRL_REG_ADDR)) {
-               sdio_f0_writeb(func, ((u8 *)buf)[0], addr, &ret);
-               wl1271_debug(DEBUG_SDIO, "sdio write 52 addr 0x%x, byte 0x%02x",
-                            addr, ((u8 *)buf)[0]);
-       } else {
-               wl1271_debug(DEBUG_SDIO, "sdio write 53 addr 0x%x, %zu bytes",
-                            addr, len);
-               wl1271_dump_ascii(DEBUG_SDIO, "data: ", buf, len);
-
-               if (fixed)
-                       ret = sdio_writesb(func, addr, buf, len);
-               else
-                       ret = sdio_memcpy_toio(func, addr, buf, len);
-       }
-       if (ret)
-               wl1271_error("sdio write failed (%d)", ret);
-
-}
-
-static void wl1271_sdio_set_power(struct wl1271 *wl, bool enable)
-{
-       struct sdio_func *func = wl_to_func(wl);
-
-       /* Let the SDIO stack handle wlan_enable control, so we
-        * keep host claimed while wlan is in use to keep wl1271
-        * alive.
-        */
-       if (enable) {
-               sdio_claim_host(func);
-               sdio_enable_func(func);
-       } else {
-               sdio_disable_func(func);
-               sdio_release_host(func);
-       }
-}
-
-static struct wl1271_if_operations sdio_ops = {
-       .read           = wl1271_sdio_raw_read,
-       .write          = wl1271_sdio_raw_write,
-       .reset          = wl1271_sdio_reset,
-       .init           = wl1271_sdio_init,
-       .power          = wl1271_sdio_set_power,
-       .dev            = wl1271_sdio_wl_to_dev,
-       .enable_irq     = wl1271_sdio_enable_interrupts,
-       .disable_irq    = wl1271_sdio_disable_interrupts
-};
-
-static int __devinit wl1271_probe(struct sdio_func *func,
-                                 const struct sdio_device_id *id)
-{
-       struct ieee80211_hw *hw;
-       struct wl1271 *wl;
-       int ret;
-
-       /* We are only able to handle the wlan function */
-       if (func->num != 0x02)
-               return -ENODEV;
-
-       hw = wl1271_alloc_hw();
-       if (IS_ERR(hw))
-               return PTR_ERR(hw);
-
-       wl = hw->priv;
-
-       wl->if_priv = func;
-       wl->if_ops = &sdio_ops;
-
-       /* Grab access to FN0 for ELP reg. */
-       func->card->quirks |= MMC_QUIRK_LENIENT_FN0;
-
-       wl->irq = gpio_to_irq(RX71_WL1271_IRQ_GPIO);
-       if (wl->irq < 0) {
-               ret = wl->irq;
-               wl1271_error("could not get irq!");
-               goto out_free;
-       }
-
-       ret = request_irq(wl->irq, wl1271_irq, 0, DRIVER_NAME, wl);
-       if (ret < 0) {
-               wl1271_error("request_irq() failed: %d", ret);
-               goto out_free;
-       }
-
-       set_irq_type(wl->irq, IRQ_TYPE_EDGE_RISING);
-
-       disable_irq(wl->irq);
-
-       ret = wl1271_init_ieee80211(wl);
-       if (ret)
-               goto out_irq;
-
-       ret = wl1271_register_hw(wl);
-       if (ret)
-               goto out_irq;
-
-       sdio_set_drvdata(func, wl);
-
-       wl1271_notice("initialized");
-
-       return 0;
-
- out_irq:
-       free_irq(wl->irq, wl);
-
-
- out_free:
-       wl1271_free_hw(wl);
-
-       return ret;
-}
-
-static void __devexit wl1271_remove(struct sdio_func *func)
-{
-       struct wl1271 *wl = sdio_get_drvdata(func);
-
-       free_irq(wl->irq, wl);
-
-       wl1271_unregister_hw(wl);
-       wl1271_free_hw(wl);
-}
-
-static struct sdio_driver wl1271_sdio_driver = {
-       .name           = "wl1271_sdio",
-       .id_table       = wl1271_devices,
-       .probe          = wl1271_probe,
-       .remove         = __devexit_p(wl1271_remove),
-};
-
-static int __init wl1271_init(void)
-{
-       int ret;
-
-       ret = sdio_register_driver(&wl1271_sdio_driver);
-       if (ret < 0) {
-               wl1271_error("failed to register sdio driver: %d", ret);
-               goto out;
-       }
-
-out:
-       return ret;
-}
-
-static void __exit wl1271_exit(void)
-{
-       sdio_unregister_driver(&wl1271_sdio_driver);
-
-       wl1271_notice("unloaded");
-}
-
-module_init(wl1271_init);
-module_exit(wl1271_exit);
-
-MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Luciano Coelho <luciano.coelho@nokia.com>");
-MODULE_AUTHOR("Juuso Oikarinen <juuso.oikarinen@nokia.com>");
-MODULE_FIRMWARE(WL1271_FW_NAME);
diff --git a/drivers/net/wireless/wl12xx/wl1271_testmode.c b/drivers/net/wireless/wl12xx/wl1271_testmode.c
deleted file mode 100644 (file)
index 6e0952f..0000000
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * This file is part of wl1271
- *
- * Copyright (C) 2010 Nokia Corporation
- *
- * Contact: Luciano Coelho <luciano.coelho@nokia.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- *
- */
-#include "wl1271_testmode.h"
-
-#include <linux/slab.h>
-#include <net/genetlink.h>
-
-#include "wl1271.h"
-#include "wl1271_acx.h"
-
-#define WL1271_TM_MAX_DATA_LENGTH 1024
-
-enum wl1271_tm_commands {
-       WL1271_TM_CMD_UNSPEC,
-       WL1271_TM_CMD_TEST,
-       WL1271_TM_CMD_INTERROGATE,
-       WL1271_TM_CMD_CONFIGURE,
-       WL1271_TM_CMD_NVS_PUSH,
-       WL1271_TM_CMD_SET_PLT_MODE,
-
-       __WL1271_TM_CMD_AFTER_LAST
-};
-#define WL1271_TM_CMD_MAX (__WL1271_TM_CMD_AFTER_LAST - 1)
-
-enum wl1271_tm_attrs {
-       WL1271_TM_ATTR_UNSPEC,
-       WL1271_TM_ATTR_CMD_ID,
-       WL1271_TM_ATTR_ANSWER,
-       WL1271_TM_ATTR_DATA,
-       WL1271_TM_ATTR_IE_ID,
-       WL1271_TM_ATTR_PLT_MODE,
-
-       __WL1271_TM_ATTR_AFTER_LAST
-};
-#define WL1271_TM_ATTR_MAX (__WL1271_TM_ATTR_AFTER_LAST - 1)
-
-static struct nla_policy wl1271_tm_policy[WL1271_TM_ATTR_MAX + 1] = {
-       [WL1271_TM_ATTR_CMD_ID] =       { .type = NLA_U32 },
-       [WL1271_TM_ATTR_ANSWER] =       { .type = NLA_U8 },
-       [WL1271_TM_ATTR_DATA] =         { .type = NLA_BINARY,
-                                         .len = WL1271_TM_MAX_DATA_LENGTH },
-       [WL1271_TM_ATTR_IE_ID] =        { .type = NLA_U32 },
-       [WL1271_TM_ATTR_PLT_MODE] =     { .type = NLA_U32 },
-};
-
-
-static int wl1271_tm_cmd_test(struct wl1271 *wl, struct nlattr *tb[])
-{
-       int buf_len, ret, len;
-       struct sk_buff *skb;
-       void *buf;
-       u8 answer = 0;
-
-       wl1271_debug(DEBUG_TESTMODE, "testmode cmd test");
-
-       if (!tb[WL1271_TM_ATTR_DATA])
-               return -EINVAL;
-
-       buf = nla_data(tb[WL1271_TM_ATTR_DATA]);
-       buf_len = nla_len(tb[WL1271_TM_ATTR_DATA]);
-
-       if (tb[WL1271_TM_ATTR_ANSWER])
-               answer = nla_get_u8(tb[WL1271_TM_ATTR_ANSWER]);
-
-       if (buf_len > sizeof(struct wl1271_command))
-               return -EMSGSIZE;
-
-       mutex_lock(&wl->mutex);
-       ret = wl1271_cmd_test(wl, buf, buf_len, answer);
-       mutex_unlock(&wl->mutex);
-
-       if (ret < 0) {
-               wl1271_warning("testmode cmd test failed: %d", ret);
-               return ret;
-       }
-
-       if (answer) {
-               len = nla_total_size(buf_len);
-               skb = cfg80211_testmode_alloc_reply_skb(wl->hw->wiphy, len);
-               if (!skb)
-                       return -ENOMEM;
-
-               NLA_PUT(skb, WL1271_TM_ATTR_DATA, buf_len, buf);
-               ret = cfg80211_testmode_reply(skb);
-               if (ret < 0)
-                       return ret;
-       }
-
-       return 0;
-
-nla_put_failure:
-       kfree_skb(skb);
-       return -EMSGSIZE;
-}
-
-static int wl1271_tm_cmd_interrogate(struct wl1271 *wl, struct nlattr *tb[])
-{
-       int ret;
-       struct wl1271_command *cmd;
-       struct sk_buff *skb;
-       u8 ie_id;
-
-       wl1271_debug(DEBUG_TESTMODE, "testmode cmd interrogate");
-
-       if (!tb[WL1271_TM_ATTR_IE_ID])
-               return -EINVAL;
-
-       ie_id = nla_get_u8(tb[WL1271_TM_ATTR_IE_ID]);
-
-       cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
-       if (!cmd)
-               return -ENOMEM;
-
-       mutex_lock(&wl->mutex);
-       ret = wl1271_cmd_interrogate(wl, ie_id, cmd, sizeof(*cmd));
-       mutex_unlock(&wl->mutex);
-
-       if (ret < 0) {
-               wl1271_warning("testmode cmd interrogate failed: %d", ret);
-               return ret;
-       }
-
-       skb = cfg80211_testmode_alloc_reply_skb(wl->hw->wiphy, sizeof(*cmd));
-       if (!skb)
-               return -ENOMEM;
-
-       NLA_PUT(skb, WL1271_TM_ATTR_DATA, sizeof(*cmd), cmd);
-
-       return 0;
-
-nla_put_failure:
-       kfree_skb(skb);
-       return -EMSGSIZE;
-}
-
-static int wl1271_tm_cmd_configure(struct wl1271 *wl, struct nlattr *tb[])
-{
-       int buf_len, ret;
-       void *buf;
-       u8 ie_id;
-
-       wl1271_debug(DEBUG_TESTMODE, "testmode cmd configure");
-
-       if (!tb[WL1271_TM_ATTR_DATA])
-               return -EINVAL;
-       if (!tb[WL1271_TM_ATTR_IE_ID])
-               return -EINVAL;
-
-       ie_id = nla_get_u8(tb[WL1271_TM_ATTR_IE_ID]);
-       buf = nla_data(tb[WL1271_TM_ATTR_DATA]);
-       buf_len = nla_len(tb[WL1271_TM_ATTR_DATA]);
-
-       if (buf_len > sizeof(struct wl1271_command))
-               return -EMSGSIZE;
-
-       mutex_lock(&wl->mutex);
-       ret = wl1271_cmd_configure(wl, ie_id, buf, buf_len);
-       mutex_unlock(&wl->mutex);
-
-       if (ret < 0) {
-               wl1271_warning("testmode cmd configure failed: %d", ret);
-               return ret;
-       }
-
-       return 0;
-}
-
-static int wl1271_tm_cmd_nvs_push(struct wl1271 *wl, struct nlattr *tb[])
-{
-       int ret = 0;
-       size_t len;
-       void *buf;
-
-       wl1271_debug(DEBUG_TESTMODE, "testmode cmd nvs push");
-
-       if (!tb[WL1271_TM_ATTR_DATA])
-               return -EINVAL;
-
-       buf = nla_data(tb[WL1271_TM_ATTR_DATA]);
-       len = nla_len(tb[WL1271_TM_ATTR_DATA]);
-
-       /*
-        * FIXME: the LEGACY NVS image support (NVS's missing the 5GHz band
-        * configurations) can be removed when those NVS files stop floating
-        * around.
-        */
-       if (len != sizeof(struct wl1271_nvs_file) &&
-           (len != WL1271_INI_LEGACY_NVS_FILE_SIZE ||
-            wl1271_11a_enabled())) {
-               wl1271_error("nvs size is not as expected: %zu != %zu",
-                            len, sizeof(struct wl1271_nvs_file));
-               return -EMSGSIZE;
-       }
-
-       mutex_lock(&wl->mutex);
-
-       kfree(wl->nvs);
-
-       wl->nvs = kzalloc(sizeof(struct wl1271_nvs_file), GFP_KERNEL);
-       if (!wl->nvs) {
-               wl1271_error("could not allocate memory for the nvs file");
-               ret = -ENOMEM;
-               goto out;
-       }
-
-       memcpy(wl->nvs, buf, len);
-
-       wl1271_debug(DEBUG_TESTMODE, "testmode pushed nvs");
-
-out:
-       mutex_unlock(&wl->mutex);
-
-       return ret;
-}
-
-static int wl1271_tm_cmd_set_plt_mode(struct wl1271 *wl, struct nlattr *tb[])
-{
-       u32 val;
-       int ret;
-
-       wl1271_debug(DEBUG_TESTMODE, "testmode cmd set plt mode");
-
-       if (!tb[WL1271_TM_ATTR_PLT_MODE])
-               return -EINVAL;
-
-       val = nla_get_u32(tb[WL1271_TM_ATTR_PLT_MODE]);
-
-       switch (val) {
-       case 0:
-               ret = wl1271_plt_stop(wl);
-               break;
-       case 1:
-               ret = wl1271_plt_start(wl);
-               break;
-       default:
-               ret = -EINVAL;
-               break;
-       }
-
-       return ret;
-}
-
-int wl1271_tm_cmd(struct ieee80211_hw *hw, void *data, int len)
-{
-       struct wl1271 *wl = hw->priv;
-       struct nlattr *tb[WL1271_TM_ATTR_MAX + 1];
-       int err;
-
-       err = nla_parse(tb, WL1271_TM_ATTR_MAX, data, len, wl1271_tm_policy);
-       if (err)
-               return err;
-
-       if (!tb[WL1271_TM_ATTR_CMD_ID])
-               return -EINVAL;
-
-       switch (nla_get_u32(tb[WL1271_TM_ATTR_CMD_ID])) {
-       case WL1271_TM_CMD_TEST:
-               return wl1271_tm_cmd_test(wl, tb);
-       case WL1271_TM_CMD_INTERROGATE:
-               return wl1271_tm_cmd_interrogate(wl, tb);
-       case WL1271_TM_CMD_CONFIGURE:
-               return wl1271_tm_cmd_configure(wl, tb);
-       case WL1271_TM_CMD_NVS_PUSH:
-               return wl1271_tm_cmd_nvs_push(wl, tb);
-       case WL1271_TM_CMD_SET_PLT_MODE:
-               return wl1271_tm_cmd_set_plt_mode(wl, tb);
-       default:
-               return -EOPNOTSUPP;
-       }
-}
diff --git a/drivers/net/wireless/wl12xx/wl1271_testmode.h b/drivers/net/wireless/wl12xx/wl1271_testmode.h
deleted file mode 100644 (file)
index c196d28..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * This file is part of wl1271
- *
- * Copyright (C) 2010 Nokia Corporation
- *
- * Contact: Luciano Coelho <luciano.coelho@nokia.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- *
- */
-
-#ifndef __WL1271_TESTMODE_H__
-#define __WL1271_TESTMODE_H__
-
-#include <net/mac80211.h>
-
-int wl1271_tm_cmd(struct ieee80211_hw *hw, void *data, int len);
-
-#endif /* __WL1271_TESTMODE_H__ */