PKG_NAME:=mac80211
-PKG_VERSION:=2012-06-14
-PKG_RELEASE:=2
+PKG_VERSION:=2012-07-06
+PKG_RELEASE:=1
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
-PKG_MD5SUM:=009fd7aa420693e30df9090cee9ea189
+PKG_MD5SUM:=71e1ba84a7d1c3ab69ee1b68fa9e1269
PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)
--- a/Makefile
+++ b/Makefile
-@@ -44,9 +44,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
+@@ -45,9 +45,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
obj-$(CONFIG_COMPAT_NET_USB_MODULES) += drivers/net/usb/
--- a/config.mk
+++ b/config.mk
-@@ -371,8 +371,8 @@ export CONFIG_B43_BCMA_EXTRA=y
+@@ -376,8 +376,8 @@ export CONFIG_B43_BCMA_EXTRA=y
export CONFIG_P54_PCI=m
ifeq ($(CONFIG_MAC80211),y)
$(error "ERROR: you have MAC80211 compiled into the kernel, CONFIG_MAC80211=y, as such you cannot replace its mac80211 driver. You need this set to CONFIG_MAC80211=m. If you are using Fedora upgrade your kernel as later version should this set as modular. For further information on Fedora see https://bugzilla.redhat.com/show_bug.cgi?id=470143. If you are using your own kernel recompile it and make mac80211 modular")
-@@ -683,10 +683,10 @@ endif #CONFIG_COMPAT_KERNEL_2_6_27
+@@ -688,10 +688,10 @@ endif #CONFIG_COMPAT_KERNEL_2_6_27
# We need the backported rfkill module on kernel < 2.6.31.
# In more recent kernel versions use the in kernel rfkill module.
ifdef CONFIG_COMPAT_KERNEL_2_6_31
--- a/Makefile
+++ b/Makefile
-@@ -44,7 +44,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
+@@ -45,7 +45,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
obj-$(CONFIG_COMPAT_NET_USB_MODULES) += drivers/net/usb/
else
include $(KLIB_BUILD)/.config
endif
-@@ -347,7 +347,8 @@ export CONFIG_IPW2200_QOS=y
+@@ -352,7 +352,8 @@ export CONFIG_IPW2200_QOS=y
# % echo 1 > /sys/bus/pci/drivers/ipw2200/*/rtap_iface
endif #CONFIG_WIRELESS_EXT
# Sonics Silicon Backplane
export CONFIG_SSB_SPROM=y
-@@ -360,7 +361,7 @@ endif #CONFIG_PCMCIA
+@@ -365,7 +366,7 @@ endif #CONFIG_PCMCIA
# export CONFIG_SSB_DEBUG=y
export CONFIG_SSB_DRIVER_PCICORE=y
export CONFIG_B43_SSB=y
export CONFIG_BCMA=m
export CONFIG_BCMA_BLOCKIO=y
-@@ -577,7 +578,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
+@@ -582,7 +583,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
ifdef CONFIG_MMC
--- a/Makefile
+++ b/Makefile
-@@ -44,7 +44,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
+@@ -45,7 +45,6 @@ obj-$(CONFIG_COMPAT_WIRELESS_MODULES) +=
obj-$(CONFIG_COMPAT_NET_USB_MODULES) += drivers/net/usb/
ifeq ($(CONFIG_STAGING_EXCLUDE_BUILD),)
--- a/config.mk
+++ b/config.mk
-@@ -363,12 +363,12 @@ export CONFIG_SSB_DRIVER_PCICORE=y
+@@ -368,12 +368,12 @@ export CONFIG_SSB_DRIVER_PCICORE=y
export CONFIG_B43_SSB=y
endif #__CONFIG_SSB
endif #CONFIG_STAGING
# mac80211 test driver
-@@ -400,15 +400,15 @@ endif #CONFIG_CRC_ITU_T
+@@ -405,15 +405,15 @@ endif #CONFIG_CRC_ITU_T
export CONFIG_MWL8K=m
# Ethernet drivers go here
endif #CONFIG_COMPAT_KERNEL_2_6_28
ifdef CONFIG_WIRELESS_EXT
-@@ -469,21 +469,21 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29
+@@ -474,21 +474,21 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29
# Note: this depends on CONFIG_USB_NET_RNDIS_HOST and CONFIG_USB_NET_CDCETHER
# it also requires new RNDIS_HOST and CDC_ETHER modules which we add
ifdef CONFIG_COMPAT_KERNEL_2_6_29
# export CONFIG_SSB=m
else
include $(KLIB_BUILD)/.config
-@@ -298,7 +298,7 @@ export CONFIG_B43=m
+@@ -303,7 +303,7 @@ export CONFIG_B43=m
export CONFIG_B43_HWRNG=y
export CONFIG_B43_PCI_AUTOSELECT=y
ifdef CONFIG_PCMCIA
--- a/config.mk
+++ b/config.mk
-@@ -579,7 +579,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
+@@ -584,7 +584,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
ifdef CONFIG_MMC
# export CONFIG_SSB_SDIOHOST=y
--- a/config.mk
+++ b/config.mk
-@@ -304,8 +304,8 @@ ifdef CONFIG_MAC80211_LEDS
+@@ -309,8 +309,8 @@ ifdef CONFIG_MAC80211_LEDS
export CONFIG_B43_LEDS=y
endif #CONFIG_MAC80211_LEDS
export CONFIG_B43_PHY_LP=y
--- a/config.mk
+++ b/config.mk
-@@ -379,7 +379,7 @@ export CONFIG_RTL8180=m
+@@ -384,7 +384,7 @@ export CONFIG_RTL8180=m
export CONFIG_ADM8211=m
export CONFIG_RT2400PCI=m
export CONFIG_RT2500PCI=m
ifdef CONFIG_CRC_CCITT
-@@ -525,7 +525,7 @@ export CONFIG_RT2800USB_RT35XX=y
+@@ -530,7 +530,7 @@ export CONFIG_RT2800USB_RT35XX=y
export CONFIG_RT2800USB_RT53XX=y
export CONFIG_RT2800USB_UNKNOWN=y
endif #CONFIG_CRC_CCITT
--- a/config.mk
+++ b/config.mk
-@@ -276,7 +276,7 @@ endif #CONFIG_COMPAT_KERNEL_2_6_27
+@@ -281,7 +281,7 @@ endif #CONFIG_COMPAT_KERNEL_2_6_27
# PCI Drivers
ifdef CONFIG_PCI
--- a/include/linux/compat-3.0.h
+++ b/include/linux/compat-3.0.h
-@@ -7,6 +7,8 @@
+@@ -36,6 +36,8 @@ static inline struct page *shmem_read_ma
+ #endif
- #include <linux/rcupdate.h>
+#include <linux/mod_devicetable.h>
+
-export CONFIG_ATH9K_BTCOEX_SUPPORT=y
+# export CONFIG_ATH9K_BTCOEX_SUPPORT=y
- ifndef CONFIG_COMPAT_KERNEL_2_6_27
- export CONFIG_ATH6KL=m
+ # WIL6210 requires MSI only available >= 2.6.30
+ ifndef CONFIG_COMPAT_KERNEL_2_6_30
--- a/include/linux/compat-3.4.h
+++ b/include/linux/compat-3.4.h
-@@ -77,6 +77,19 @@ static inline void eth_hw_addr_random(st
+@@ -81,6 +81,19 @@ static inline void eth_hw_addr_random(st
module_driver(__pci_driver, pci_register_driver, \
pci_unregister_driver)
/*
* This backports:
*
-@@ -106,6 +108,7 @@ struct vga_switcheroo_client_ops {
+@@ -135,6 +137,7 @@ static inline int compat_vga_switcheroo_
#define SIZE_MAX (~(size_t)0)
#endif
--- a/config.mk
+++ b/config.mk
-@@ -507,7 +507,7 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29
+@@ -512,7 +512,7 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29
# This activates a threading fix for usb urb.
# this is mainline commit: b3e670443b7fb8a2d29831b62b44a039c283e351
# This fix will be included in some stable releases.
--- a/net/mac80211/mesh_pathtbl.c
+++ b/net/mac80211/mesh_pathtbl.c
-@@ -826,7 +826,6 @@ static void table_flush_by_iface(struct
+@@ -817,7 +817,6 @@ static void table_flush_by_iface(struct
struct hlist_node *p;
int i;
---- a/drivers/net/wireless/ath/ath9k/ani.c
-+++ b/drivers/net/wireless/ath/ath9k/ani.c
-@@ -104,11 +104,6 @@ static const struct ani_cck_level_entry
- #define ATH9K_ANI_CCK_DEF_LEVEL \
- 2 /* default level - matches the INI settings */
+--- a/drivers/net/wireless/ath/ath9k/ath9k.h
++++ b/drivers/net/wireless/ath/ath9k/ath9k.h
+@@ -360,7 +360,7 @@ void ath_tx_aggr_sleep(struct ieee80211_
+
+ struct ath_vif {
+ int av_bslot;
+- bool is_bslot_active, primary_sta_vif;
++ bool primary_sta_vif;
+ __le64 tsf_adjust; /* TSF adjustment for staggered beacons */
+ struct ath_buf *av_bcbuf;
+ };
+@@ -386,6 +386,7 @@ struct ath_beacon_config {
+ u16 dtim_period;
+ u16 bmiss_timeout;
+ u8 dtim_count;
++ bool enable_beacon;
+ };
--static bool use_new_ani(struct ath_hw *ah)
--{
-- return AR_SREV_9300_20_OR_LATER(ah) || modparam_force_new_ani;
--}
--
- static void ath9k_hw_update_mibstats(struct ath_hw *ah,
- struct ath9k_mib_stats *stats)
+ struct ath_beacon {
+@@ -397,7 +398,6 @@ struct ath_beacon {
+
+ u32 beaconq;
+ u32 bmisscnt;
+- u32 ast_be_xmit;
+ u32 bc_tstamp;
+ struct ieee80211_vif *bslot[ATH_BCBUF];
+ int slottime;
+@@ -411,12 +411,14 @@ struct ath_beacon {
+ bool tx_last;
+ };
+
+-void ath_beacon_tasklet(unsigned long data);
+-void ath_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif);
+-int ath_beacon_alloc(struct ath_softc *sc, struct ieee80211_vif *vif);
+-void ath_beacon_return(struct ath_softc *sc, struct ath_vif *avp);
+-int ath_beaconq_config(struct ath_softc *sc);
+-void ath_set_beacon(struct ath_softc *sc);
++void ath9k_beacon_tasklet(unsigned long data);
++bool ath9k_allow_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif);
++void ath9k_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif,
++ u32 changed);
++void ath9k_beacon_assign_slot(struct ath_softc *sc, struct ieee80211_vif *vif);
++void ath9k_beacon_remove_slot(struct ath_softc *sc, struct ieee80211_vif *vif);
++void ath9k_set_tsfadjust(struct ath_softc *sc, struct ieee80211_vif *vif);
++void ath9k_set_beacon(struct ath_softc *sc);
+ void ath9k_set_beaconing_status(struct ath_softc *sc, bool status);
+
+ /*******************/
+@@ -442,9 +444,12 @@ void ath_rx_poll(unsigned long data);
+ void ath_start_rx_poll(struct ath_softc *sc, u8 nbeacon);
+ void ath_paprd_calibrate(struct work_struct *work);
+ void ath_ani_calibrate(unsigned long data);
+-void ath_start_ani(struct ath_common *common);
++void ath_start_ani(struct ath_softc *sc);
++void ath_stop_ani(struct ath_softc *sc);
++void ath_check_ani(struct ath_softc *sc);
+ int ath_update_survey_stats(struct ath_softc *sc);
+ void ath_update_survey_nf(struct ath_softc *sc, int channel);
++void ath9k_queue_reset(struct ath_softc *sc, enum ath_reset_type type);
+
+ /**********/
+ /* BTCOEX */
+@@ -613,7 +618,6 @@ enum sc_op_flags {
+ SC_OP_INVALID,
+ SC_OP_BEACONS,
+ SC_OP_RXFLUSH,
+- SC_OP_TSF_RESET,
+ SC_OP_ANI_RUN,
+ SC_OP_PRIM_STA_VIF,
+ SC_OP_HW_RESET,
+--- a/drivers/net/wireless/ath/ath9k/beacon.c
++++ b/drivers/net/wireless/ath/ath9k/beacon.c
+@@ -30,7 +30,7 @@ static void ath9k_reset_beacon_status(st
+ * the operating mode of the station (AP or AdHoc). Parameters are AIFS
+ * settings and channel width min/max
+ */
+-int ath_beaconq_config(struct ath_softc *sc)
++static void ath9k_beaconq_config(struct ath_softc *sc)
{
-@@ -122,8 +117,6 @@ static void ath9k_hw_update_mibstats(str
- static void ath9k_ani_restart(struct ath_hw *ah)
+ struct ath_hw *ah = sc->sc_ah;
+ struct ath_common *common = ath9k_hw_common(ah);
+@@ -38,6 +38,7 @@ int ath_beaconq_config(struct ath_softc
+ struct ath_txq *txq;
+
+ ath9k_hw_get_txq_props(ah, sc->beacon.beaconq, &qi);
++
+ if (sc->sc_ah->opmode == NL80211_IFTYPE_AP) {
+ /* Always burst out beacon and CAB traffic. */
+ qi.tqi_aifs = 1;
+@@ -56,12 +57,9 @@ int ath_beaconq_config(struct ath_softc
+ }
+
+ if (!ath9k_hw_set_txq_props(ah, sc->beacon.beaconq, &qi)) {
+- ath_err(common,
+- "Unable to update h/w beacon queue parameters\n");
+- return 0;
++ ath_err(common, "Unable to update h/w beacon queue parameters\n");
+ } else {
+ ath9k_hw_resettxqueue(ah, sc->beacon.beaconq);
+- return 1;
+ }
+ }
+
+@@ -70,7 +68,7 @@ int ath_beaconq_config(struct ath_softc
+ * up rate codes, and channel flags. Beacons are always sent out at the
+ * lowest rate, and are not retried.
+ */
+-static void ath_beacon_setup(struct ath_softc *sc, struct ieee80211_vif *vif,
++static void ath9k_beacon_setup(struct ath_softc *sc, struct ieee80211_vif *vif,
+ struct ath_buf *bf, int rateidx)
{
- struct ar5416AniState *aniState;
-- struct ath_common *common = ath9k_hw_common(ah);
-- u32 ofdm_base = 0, cck_base = 0;
+ struct sk_buff *skb = bf->bf_mpdu;
+@@ -81,8 +79,6 @@ static void ath_beacon_setup(struct ath_
+ u8 chainmask = ah->txchainmask;
+ u8 rate = 0;
- if (!DO_ANI(ah))
- return;
-@@ -131,18 +124,10 @@ static void ath9k_ani_restart(struct ath
- aniState = &ah->curchan->ani;
- aniState->listenTime = 0;
+- ath9k_reset_beacon_status(sc);
+-
+ sband = &sc->sbands[common->hw->conf.channel->band];
+ rate = sband->bitrates[rateidx].hw_value;
+ if (vif->bss_conf.use_short_preamble)
+@@ -111,7 +107,7 @@ static void ath_beacon_setup(struct ath_
+ ath9k_hw_set_txdesc(ah, bf->bf_desc, &info);
+ }
-- if (!use_new_ani(ah)) {
-- ofdm_base = AR_PHY_COUNTMAX - ah->config.ofdm_trig_high;
-- cck_base = AR_PHY_COUNTMAX - ah->config.cck_trig_high;
-- }
+-static void ath_tx_cabq(struct ieee80211_hw *hw, struct sk_buff *skb)
++static void ath9k_tx_cabq(struct ieee80211_hw *hw, struct sk_buff *skb)
+ {
+ struct ath_softc *sc = hw->priv;
+ struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+@@ -128,28 +124,22 @@ static void ath_tx_cabq(struct ieee80211
+ }
+ }
+
+-static struct ath_buf *ath_beacon_generate(struct ieee80211_hw *hw,
+- struct ieee80211_vif *vif)
++static struct ath_buf *ath9k_beacon_generate(struct ieee80211_hw *hw,
++ struct ieee80211_vif *vif)
+ {
+ struct ath_softc *sc = hw->priv;
+ struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+ struct ath_buf *bf;
+- struct ath_vif *avp;
++ struct ath_vif *avp = (void *)vif->drv_priv;
+ struct sk_buff *skb;
+- struct ath_txq *cabq;
++ struct ath_txq *cabq = sc->beacon.cabq;
+ struct ieee80211_tx_info *info;
++ struct ieee80211_mgmt *mgmt_hdr;
+ int cabq_depth;
+
+- ath9k_reset_beacon_status(sc);
+-
+- avp = (void *)vif->drv_priv;
+- cabq = sc->beacon.cabq;
+-
+- if ((avp->av_bcbuf == NULL) || !avp->is_bslot_active)
++ if (avp->av_bcbuf == NULL)
+ return NULL;
+
+- /* Release the old beacon first */
-
-- ath_dbg(common, ANI, "Writing ofdmbase=%u cckbase=%u\n",
-- ofdm_base, cck_base);
+ bf = avp->av_bcbuf;
+ skb = bf->bf_mpdu;
+ if (skb) {
+@@ -159,14 +149,14 @@ static struct ath_buf *ath_beacon_genera
+ bf->bf_buf_addr = 0;
+ }
+
+- /* Get a new beacon from mac80211 */
-
- ENABLE_REGWRITE_BUFFER(ah);
+ skb = ieee80211_beacon_get(hw, vif);
+- bf->bf_mpdu = skb;
+ if (skb == NULL)
+ return NULL;
+- ((struct ieee80211_mgmt *)skb->data)->u.beacon.timestamp =
+- avp->tsf_adjust;
++
++ bf->bf_mpdu = skb;
++
++ mgmt_hdr = (struct ieee80211_mgmt *)skb->data;
++ mgmt_hdr->u.beacon.timestamp = avp->tsf_adjust;
+
+ info = IEEE80211_SKB_CB(skb);
+ if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) {
+@@ -212,61 +202,52 @@ static struct ath_buf *ath_beacon_genera
+ }
+ }
-- REG_WRITE(ah, AR_PHY_ERR_1, ofdm_base);
-- REG_WRITE(ah, AR_PHY_ERR_2, cck_base);
-+ REG_WRITE(ah, AR_PHY_ERR_1, 0);
-+ REG_WRITE(ah, AR_PHY_ERR_2, 0);
- REG_WRITE(ah, AR_PHY_ERR_MASK_1, AR_PHY_ERR_OFDM_TIMING);
- REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING);
+- ath_beacon_setup(sc, vif, bf, info->control.rates[0].idx);
++ ath9k_beacon_setup(sc, vif, bf, info->control.rates[0].idx);
-@@ -154,110 +139,6 @@ static void ath9k_ani_restart(struct ath
- aniState->cckPhyErrCount = 0;
+ while (skb) {
+- ath_tx_cabq(hw, skb);
++ ath9k_tx_cabq(hw, skb);
+ skb = ieee80211_get_buffered_bc(hw, vif);
+ }
+
+ return bf;
}
--static void ath9k_hw_ani_ofdm_err_trigger_old(struct ath_hw *ah)
--{
-- struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
-- struct ar5416AniState *aniState;
-- int32_t rssi;
--
-- aniState = &ah->curchan->ani;
+-int ath_beacon_alloc(struct ath_softc *sc, struct ieee80211_vif *vif)
++void ath9k_beacon_assign_slot(struct ath_softc *sc, struct ieee80211_vif *vif)
+ {
+ struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+- struct ath_vif *avp;
+- struct ath_buf *bf;
+- struct sk_buff *skb;
+- struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf;
+- __le64 tstamp;
++ struct ath_vif *avp = (void *)vif->drv_priv;
++ int slot;
+
+- avp = (void *)vif->drv_priv;
++ avp->av_bcbuf = list_first_entry(&sc->beacon.bbuf, struct ath_buf, list);
++ list_del(&avp->av_bcbuf->list);
+
+- /* Allocate a beacon descriptor if we haven't done so. */
+- if (!avp->av_bcbuf) {
+- /* Allocate beacon state for hostap/ibss. We know
+- * a buffer is available. */
+- avp->av_bcbuf = list_first_entry(&sc->beacon.bbuf,
+- struct ath_buf, list);
+- list_del(&avp->av_bcbuf->list);
-
-- if (aniState->noiseImmunityLevel < HAL_NOISE_IMMUNE_MAX) {
-- if (ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL,
-- aniState->noiseImmunityLevel + 1)) {
-- return;
-- }
-- }
+- if (ath9k_uses_beacons(vif->type)) {
+- int slot;
+- /*
+- * Assign the vif to a beacon xmit slot. As
+- * above, this cannot fail to find one.
+- */
+- avp->av_bslot = 0;
+- for (slot = 0; slot < ATH_BCBUF; slot++)
+- if (sc->beacon.bslot[slot] == NULL) {
+- avp->av_bslot = slot;
+- avp->is_bslot_active = false;
-
-- if (aniState->spurImmunityLevel < HAL_SPUR_IMMUNE_MAX) {
-- if (ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL,
-- aniState->spurImmunityLevel + 1)) {
-- return;
-- }
-- }
+- /* NB: keep looking for a double slot */
+- if (slot == 0 || !sc->beacon.bslot[slot-1])
+- break;
+- }
+- BUG_ON(sc->beacon.bslot[avp->av_bslot] != NULL);
+- sc->beacon.bslot[avp->av_bslot] = vif;
+- sc->nbcnvifs++;
++ for (slot = 0; slot < ATH_BCBUF; slot++) {
++ if (sc->beacon.bslot[slot] == NULL) {
++ avp->av_bslot = slot;
++ break;
+ }
+ }
+
+- /* release the previous beacon frame, if it already exists. */
+- bf = avp->av_bcbuf;
+- if (bf->bf_mpdu != NULL) {
+- skb = bf->bf_mpdu;
++ sc->beacon.bslot[avp->av_bslot] = vif;
++ sc->nbcnvifs++;
++
++ ath_dbg(common, CONFIG, "Added interface at beacon slot: %d\n",
++ avp->av_bslot);
++}
++
++void ath9k_beacon_remove_slot(struct ath_softc *sc, struct ieee80211_vif *vif)
++{
++ struct ath_common *common = ath9k_hw_common(sc->sc_ah);
++ struct ath_vif *avp = (void *)vif->drv_priv;
++ struct ath_buf *bf = avp->av_bcbuf;
++
++ ath_dbg(common, CONFIG, "Removing interface at beacon slot: %d\n",
++ avp->av_bslot);
++
++ tasklet_disable(&sc->bcon_tasklet);
++
++ if (bf && bf->bf_mpdu) {
++ struct sk_buff *skb = bf->bf_mpdu;
+ dma_unmap_single(sc->dev, bf->bf_buf_addr,
+ skb->len, DMA_TO_DEVICE);
+ dev_kfree_skb_any(skb);
+@@ -274,99 +255,74 @@ int ath_beacon_alloc(struct ath_softc *s
+ bf->bf_buf_addr = 0;
+ }
+
+- /* NB: the beacon data buffer must be 32-bit aligned. */
+- skb = ieee80211_beacon_get(sc->hw, vif);
+- if (skb == NULL)
+- return -ENOMEM;
-
-- if (ah->opmode == NL80211_IFTYPE_AP) {
-- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) {
-- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
-- aniState->firstepLevel + 1);
-- }
-- return;
+- tstamp = ((struct ieee80211_mgmt *)skb->data)->u.beacon.timestamp;
+- sc->beacon.bc_tstamp = (u32) le64_to_cpu(tstamp);
+- /* Calculate a TSF adjustment factor required for staggered beacons. */
+- if (avp->av_bslot > 0) {
+- u64 tsfadjust;
+- int intval;
++ avp->av_bcbuf = NULL;
++ sc->beacon.bslot[avp->av_bslot] = NULL;
++ sc->nbcnvifs--;
++ list_add_tail(&bf->list, &sc->beacon.bbuf);
+
+- intval = cur_conf->beacon_interval ? : ATH_DEFAULT_BINTVAL;
++ tasklet_enable(&sc->bcon_tasklet);
++}
+
+- /*
+- * Calculate the TSF offset for this beacon slot, i.e., the
+- * number of usecs that need to be added to the timestamp field
+- * in Beacon and Probe Response frames. Beacon slot 0 is
+- * processed at the correct offset, so it does not require TSF
+- * adjustment. Other slots are adjusted to get the timestamp
+- * close to the TBTT for the BSS.
+- */
+- tsfadjust = TU_TO_USEC(intval * avp->av_bslot) / ATH_BCBUF;
+- avp->tsf_adjust = cpu_to_le64(tsfadjust);
++static int ath9k_beacon_choose_slot(struct ath_softc *sc)
++{
++ struct ath_common *common = ath9k_hw_common(sc->sc_ah);
++ struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf;
++ u16 intval;
++ u32 tsftu;
++ u64 tsf;
++ int slot;
+
+- ath_dbg(common, BEACON,
+- "stagger beacons, bslot %d intval %u tsfadjust %llu\n",
+- avp->av_bslot, intval, (unsigned long long)tsfadjust);
++ if (sc->sc_ah->opmode != NL80211_IFTYPE_AP) {
++ ath_dbg(common, BEACON, "slot 0, tsf: %llu\n",
++ ath9k_hw_gettsf64(sc->sc_ah));
++ return 0;
++ }
+
+- ((struct ieee80211_mgmt *)skb->data)->u.beacon.timestamp =
+- avp->tsf_adjust;
+- } else
+- avp->tsf_adjust = cpu_to_le64(0);
++ intval = cur_conf->beacon_interval ? : ATH_DEFAULT_BINTVAL;
++ tsf = ath9k_hw_gettsf64(sc->sc_ah);
++ tsf += TU_TO_USEC(sc->sc_ah->config.sw_beacon_response_time);
++ tsftu = TSF_TO_TU((tsf * ATH_BCBUF) >>32, tsf * ATH_BCBUF);
++ slot = (tsftu % (intval * ATH_BCBUF)) / intval;
+
+- bf->bf_mpdu = skb;
+- bf->bf_buf_addr = dma_map_single(sc->dev, skb->data,
+- skb->len, DMA_TO_DEVICE);
+- if (unlikely(dma_mapping_error(sc->dev, bf->bf_buf_addr))) {
+- dev_kfree_skb_any(skb);
+- bf->bf_mpdu = NULL;
+- bf->bf_buf_addr = 0;
+- ath_err(common, "dma_mapping_error on beacon alloc\n");
+- return -ENOMEM;
- }
-- rssi = BEACON_RSSI(ah);
-- if (rssi > aniState->rssiThrHigh) {
-- if (!aniState->ofdmWeakSigDetectOff) {
-- if (ath9k_hw_ani_control(ah,
-- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
-- false)) {
-- ath9k_hw_ani_control(ah,
-- ATH9K_ANI_SPUR_IMMUNITY_LEVEL, 0);
-- return;
-- }
-- }
-- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) {
-- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
-- aniState->firstepLevel + 1);
-- return;
+- avp->is_bslot_active = true;
++ ath_dbg(common, BEACON, "slot: %d tsf: %llu tsftu: %u\n",
++ slot, tsf, tsftu / ATH_BCBUF);
+
+- return 0;
++ return slot;
+ }
+
+-void ath_beacon_return(struct ath_softc *sc, struct ath_vif *avp)
++void ath9k_set_tsfadjust(struct ath_softc *sc, struct ieee80211_vif *vif)
+ {
+- if (avp->av_bcbuf != NULL) {
+- struct ath_buf *bf;
++ struct ath_common *common = ath9k_hw_common(sc->sc_ah);
++ struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf;
++ struct ath_vif *avp = (void *)vif->drv_priv;
++ u64 tsfadjust;
+
+- avp->is_bslot_active = false;
+- if (avp->av_bslot != -1) {
+- sc->beacon.bslot[avp->av_bslot] = NULL;
+- sc->nbcnvifs--;
+- avp->av_bslot = -1;
- }
-- } else if (rssi > aniState->rssiThrLow) {
-- if (aniState->ofdmWeakSigDetectOff)
-- ath9k_hw_ani_control(ah,
-- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
-- true);
-- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX)
-- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
-- aniState->firstepLevel + 1);
-- return;
-- } else {
-- if ((conf->channel->band == IEEE80211_BAND_2GHZ) &&
-- !conf_is_ht(conf)) {
-- if (!aniState->ofdmWeakSigDetectOff)
-- ath9k_hw_ani_control(ah,
-- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
-- false);
-- if (aniState->firstepLevel > 0)
-- ath9k_hw_ani_control(ah,
-- ATH9K_ANI_FIRSTEP_LEVEL, 0);
-- return;
++ if (avp->av_bslot == 0)
++ return;
+
+- bf = avp->av_bcbuf;
+- if (bf->bf_mpdu != NULL) {
+- struct sk_buff *skb = bf->bf_mpdu;
+- dma_unmap_single(sc->dev, bf->bf_buf_addr,
+- skb->len, DMA_TO_DEVICE);
+- dev_kfree_skb_any(skb);
+- bf->bf_mpdu = NULL;
+- bf->bf_buf_addr = 0;
- }
+- list_add_tail(&bf->list, &sc->beacon.bbuf);
++ tsfadjust = cur_conf->beacon_interval * avp->av_bslot / ATH_BCBUF;
++ avp->tsf_adjust = cpu_to_le64(TU_TO_USEC(tsfadjust));
+
+- avp->av_bcbuf = NULL;
- }
--}
++ ath_dbg(common, CONFIG, "tsfadjust is: %llu for bslot: %d\n",
++ (unsigned long long)tsfadjust, avp->av_bslot);
+ }
+
+-void ath_beacon_tasklet(unsigned long data)
++void ath9k_beacon_tasklet(unsigned long data)
+ {
+ struct ath_softc *sc = (struct ath_softc *)data;
+- struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf;
+ struct ath_hw *ah = sc->sc_ah;
+ struct ath_common *common = ath9k_hw_common(ah);
+ struct ath_buf *bf = NULL;
+ struct ieee80211_vif *vif;
+ bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA);
+ int slot;
+- u32 bfaddr, bc = 0;
+
+- if (work_pending(&sc->hw_reset_work)) {
++ if (test_bit(SC_OP_HW_RESET, &sc->sc_flags)) {
+ ath_dbg(common, RESET,
+ "reset work is pending, skip beaconing now\n");
+ return;
+ }
++
+ /*
+ * Check if the previous beacon has gone out. If
+ * not don't try to post another, skip this period
+@@ -390,55 +346,25 @@ void ath_beacon_tasklet(unsigned long da
+ } else if (sc->beacon.bmisscnt >= BSTUCK_THRESH) {
+ ath_dbg(common, BSTUCK, "beacon is officially stuck\n");
+ sc->beacon.bmisscnt = 0;
+- set_bit(SC_OP_TSF_RESET, &sc->sc_flags);
+- ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
++ ath9k_queue_reset(sc, RESET_TYPE_BEACON_STUCK);
+ }
+
+ return;
+ }
+
+- /*
+- * Generate beacon frames. we are sending frames
+- * staggered so calculate the slot for this frame based
+- * on the tsf to safeguard against missing an swba.
+- */
-
--static void ath9k_hw_ani_cck_err_trigger_old(struct ath_hw *ah)
--{
-- struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
-- struct ar5416AniState *aniState;
-- int32_t rssi;
-
-- aniState = &ah->curchan->ani;
-- if (aniState->noiseImmunityLevel < HAL_NOISE_IMMUNE_MAX) {
-- if (ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL,
-- aniState->noiseImmunityLevel + 1)) {
-- return;
-- }
-- }
- if (ah->opmode == NL80211_IFTYPE_AP) {
-- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX) {
-- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
-- aniState->firstepLevel + 1);
-- }
-- return;
-- }
-- rssi = BEACON_RSSI(ah);
-- if (rssi > aniState->rssiThrLow) {
-- if (aniState->firstepLevel < HAL_FIRST_STEP_MAX)
-- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
-- aniState->firstepLevel + 1);
+- u16 intval;
+- u32 tsftu;
+- u64 tsf;
+-
+- intval = cur_conf->beacon_interval ? : ATH_DEFAULT_BINTVAL;
+- tsf = ath9k_hw_gettsf64(ah);
+- tsf += TU_TO_USEC(ah->config.sw_beacon_response_time);
+- tsftu = TSF_TO_TU((tsf * ATH_BCBUF) >>32, tsf * ATH_BCBUF);
+- slot = (tsftu % (intval * ATH_BCBUF)) / intval;
+- vif = sc->beacon.bslot[slot];
+-
+- ath_dbg(common, BEACON,
+- "slot %d [tsf %llu tsftu %u intval %u] vif %p\n",
+- slot, tsf, tsftu / ATH_BCBUF, intval, vif);
- } else {
-- if ((conf->channel->band == IEEE80211_BAND_2GHZ) &&
-- !conf_is_ht(conf)) {
-- if (aniState->firstepLevel > 0)
-- ath9k_hw_ani_control(ah,
-- ATH9K_ANI_FIRSTEP_LEVEL, 0);
+- slot = 0;
+- vif = sc->beacon.bslot[slot];
+- }
++ slot = ath9k_beacon_choose_slot(sc);
++ vif = sc->beacon.bslot[slot];
+
++ if (!vif || !vif->bss_conf.enable_beacon)
++ return;
+
+- bfaddr = 0;
+- if (vif) {
+- bf = ath_beacon_generate(sc->hw, vif);
+- if (bf != NULL) {
+- bfaddr = bf->bf_daddr;
+- bc = 1;
+- }
++ bf = ath9k_beacon_generate(sc->hw, vif);
++ WARN_ON(!bf);
+
+- if (sc->beacon.bmisscnt != 0) {
+- ath_dbg(common, BSTUCK,
+- "resume beacon xmit after %u misses\n",
+- sc->beacon.bmisscnt);
+- sc->beacon.bmisscnt = 0;
- }
++ if (sc->beacon.bmisscnt != 0) {
++ ath_dbg(common, BSTUCK, "resume beacon xmit after %u misses\n",
++ sc->beacon.bmisscnt);
++ sc->beacon.bmisscnt = 0;
+ }
+
+ /*
+@@ -458,39 +384,37 @@ void ath_beacon_tasklet(unsigned long da
+ * set to ATH_BCBUF so this check is a noop.
+ */
+ if (sc->beacon.updateslot == UPDATE) {
+- sc->beacon.updateslot = COMMIT; /* commit next beacon */
++ sc->beacon.updateslot = COMMIT;
+ sc->beacon.slotupdate = slot;
+- } else if (sc->beacon.updateslot == COMMIT && sc->beacon.slotupdate == slot) {
++ } else if (sc->beacon.updateslot == COMMIT &&
++ sc->beacon.slotupdate == slot) {
+ ah->slottime = sc->beacon.slottime;
+ ath9k_hw_init_global_settings(ah);
+ sc->beacon.updateslot = OK;
+ }
+- if (bfaddr != 0) {
++
++ if (bf) {
++ ath9k_reset_beacon_status(sc);
++
+ /* NB: cabq traffic should already be queued and primed */
+- ath9k_hw_puttxbuf(ah, sc->beacon.beaconq, bfaddr);
++ ath9k_hw_puttxbuf(ah, sc->beacon.beaconq, bf->bf_daddr);
+
+ if (!edma)
+ ath9k_hw_txstart(ah, sc->beacon.beaconq);
+-
+- sc->beacon.ast_be_xmit += bc; /* XXX per-vif? */
+ }
+ }
+
+-static void ath9k_beacon_init(struct ath_softc *sc,
+- u32 next_beacon,
+- u32 beacon_period)
++static void ath9k_beacon_init(struct ath_softc *sc, u32 nexttbtt, u32 intval)
+ {
+- if (test_bit(SC_OP_TSF_RESET, &sc->sc_flags)) {
+- ath9k_ps_wakeup(sc);
+- ath9k_hw_reset_tsf(sc->sc_ah);
- }
--}
-
- /* Adjust the OFDM Noise Immunity Level */
- static void ath9k_hw_set_ofdm_nil(struct ath_hw *ah, u8 immunityLevel)
+- ath9k_hw_beaconinit(sc->sc_ah, next_beacon, beacon_period);
++ struct ath_hw *ah = sc->sc_ah;
+
+- if (test_bit(SC_OP_TSF_RESET, &sc->sc_flags)) {
+- ath9k_ps_restore(sc);
+- clear_bit(SC_OP_TSF_RESET, &sc->sc_flags);
+- }
++ ath9k_hw_disable_interrupts(ah);
++ ath9k_hw_reset_tsf(ah);
++ ath9k_beaconq_config(sc);
++ ath9k_hw_beaconinit(ah, nexttbtt, intval);
++ sc->beacon.bmisscnt = 0;
++ ath9k_hw_set_interrupts(ah);
++ ath9k_hw_enable_interrupts(ah);
+ }
+
+ /*
+@@ -498,32 +422,27 @@ static void ath9k_beacon_init(struct ath
+ * burst together. For the former arrange for the SWBA to be delivered for each
+ * slot. Slots that are not occupied will generate nothing.
+ */
+-static void ath_beacon_config_ap(struct ath_softc *sc,
+- struct ath_beacon_config *conf)
++static void ath9k_beacon_config_ap(struct ath_softc *sc,
++ struct ath_beacon_config *conf)
{
-@@ -265,18 +146,15 @@ static void ath9k_hw_set_ofdm_nil(struct
+ struct ath_hw *ah = sc->sc_ah;
++ struct ath_common *common = ath9k_hw_common(ah);
+ u32 nexttbtt, intval;
+
+ /* NB: the beacon interval is kept internally in TU's */
+ intval = TU_TO_USEC(conf->beacon_interval);
+- intval /= ATH_BCBUF; /* for staggered beacons */
++ intval /= ATH_BCBUF;
+ nexttbtt = intval;
+
+- /*
+- * In AP mode we enable the beacon timers and SWBA interrupts to
+- * prepare beacon frames.
+- */
+- ah->imask |= ATH9K_INT_SWBA;
+- ath_beaconq_config(sc);
++ if (conf->enable_beacon)
++ ah->imask |= ATH9K_INT_SWBA;
++ else
++ ah->imask &= ~ATH9K_INT_SWBA;
+
+- /* Set the computed AP beacon timers */
++ ath_dbg(common, BEACON, "AP nexttbtt: %u intval: %u conf_intval: %u\n",
++ nexttbtt, intval, conf->beacon_interval);
+
+- ath9k_hw_disable_interrupts(ah);
+- set_bit(SC_OP_TSF_RESET, &sc->sc_flags);
+ ath9k_beacon_init(sc, nexttbtt, intval);
+- sc->beacon.bmisscnt = 0;
+- ath9k_hw_set_interrupts(ah);
+- ath9k_hw_enable_interrupts(ah);
+ }
+
+ /*
+@@ -534,8 +453,8 @@ static void ath_beacon_config_ap(struct
+ * we'll receive a BMISS interrupt when we stop seeing beacons from the AP
+ * we've associated with.
+ */
+-static void ath_beacon_config_sta(struct ath_softc *sc,
+- struct ath_beacon_config *conf)
++static void ath9k_beacon_config_sta(struct ath_softc *sc,
++ struct ath_beacon_config *conf)
+ {
+ struct ath_hw *ah = sc->sc_ah;
struct ath_common *common = ath9k_hw_common(ah);
- const struct ani_ofdm_level_entry *entry_ofdm;
- const struct ani_cck_level_entry *entry_cck;
+@@ -654,8 +573,8 @@ static void ath_beacon_config_sta(struct
+ ath9k_hw_enable_interrupts(ah);
+ }
+
+-static void ath_beacon_config_adhoc(struct ath_softc *sc,
+- struct ath_beacon_config *conf)
++static void ath9k_beacon_config_adhoc(struct ath_softc *sc,
++ struct ath_beacon_config *conf)
+ {
+ struct ath_hw *ah = sc->sc_ah;
+ struct ath_common *common = ath9k_hw_common(ah);
+@@ -669,82 +588,53 @@ static void ath_beacon_config_adhoc(stru
+ tsf = roundup(ath9k_hw_gettsf32(ah) + TU_TO_USEC(FUDGE), intval);
+ nexttbtt = tsf + intval;
+
+- ath_dbg(common, BEACON, "IBSS nexttbtt %u intval %u (%u)\n",
+- nexttbtt, intval, conf->beacon_interval);
+-
+- /*
+- * In IBSS mode enable the beacon timers but only enable SWBA interrupts
+- * if we need to manually prepare beacon frames. Otherwise we use a
+- * self-linked tx descriptor and let the hardware deal with things.
+- */
+- ah->imask |= ATH9K_INT_SWBA;
-
-- aniState->noiseFloor = BEACON_RSSI(ah);
-+ bool weak_sig;
-
- ath_dbg(common, ANI, "**** ofdmlevel %d=>%d, rssi=%d[lo=%d hi=%d]\n",
- aniState->ofdmNoiseImmunityLevel,
-- immunityLevel, aniState->noiseFloor,
-+ immunityLevel, BEACON_RSSI(ah),
- aniState->rssiThrLow, aniState->rssiThrHigh);
-
- if (aniState->update_ani)
-- aniState->ofdmNoiseImmunityLevel =
-- (immunityLevel > ATH9K_ANI_OFDM_DEF_LEVEL) ?
-- immunityLevel : ATH9K_ANI_OFDM_DEF_LEVEL;
-+ aniState->ofdmNoiseImmunityLevel = immunityLevel;
-
- entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel];
- entry_cck = &cck_level_table[aniState->cckNoiseImmunityLevel];
-@@ -292,12 +170,22 @@ static void ath9k_hw_set_ofdm_nil(struct
- ATH9K_ANI_FIRSTEP_LEVEL,
- entry_ofdm->fir_step_level);
-
-- if ((aniState->noiseFloor >= aniState->rssiThrHigh) &&
-- (!aniState->ofdmWeakSigDetectOff !=
-- entry_ofdm->ofdm_weak_signal_on)) {
-+ weak_sig = entry_ofdm->ofdm_weak_signal_on;
-+ if (ah->opmode == NL80211_IFTYPE_STATION &&
-+ BEACON_RSSI(ah) <= aniState->rssiThrHigh)
-+ weak_sig = true;
+- ath_beaconq_config(sc);
++ if (conf->enable_beacon)
++ ah->imask |= ATH9K_INT_SWBA;
++ else
++ ah->imask &= ~ATH9K_INT_SWBA;
+
+- /* Set the computed ADHOC beacon timers */
++ ath_dbg(common, BEACON, "IBSS nexttbtt: %u intval: %u conf_intval: %u\n",
++ nexttbtt, intval, conf->beacon_interval);
+
+- ath9k_hw_disable_interrupts(ah);
+ ath9k_beacon_init(sc, nexttbtt, intval);
+- sc->beacon.bmisscnt = 0;
+-
+- ath9k_hw_set_interrupts(ah);
+- ath9k_hw_enable_interrupts(ah);
+ }
+
+-static bool ath9k_allow_beacon_config(struct ath_softc *sc,
+- struct ieee80211_vif *vif)
++bool ath9k_allow_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif)
+ {
+- struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf;
+ struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+- struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
+ struct ath_vif *avp = (void *)vif->drv_priv;
+
+- /*
+- * Can not have different beacon interval on multiple
+- * AP interface case
+- */
+- if ((sc->sc_ah->opmode == NL80211_IFTYPE_AP) &&
+- (sc->nbcnvifs > 1) &&
+- (vif->type == NL80211_IFTYPE_AP) &&
+- (cur_conf->beacon_interval != bss_conf->beacon_int)) {
+- ath_dbg(common, CONFIG,
+- "Changing beacon interval of multiple AP interfaces !\n");
+- return false;
+- }
+- /*
+- * Can not configure station vif's beacon config
+- * while on AP opmode
+- */
+- if ((sc->sc_ah->opmode == NL80211_IFTYPE_AP) &&
+- (vif->type != NL80211_IFTYPE_AP)) {
+- ath_dbg(common, CONFIG,
+- "STA vif's beacon not allowed on AP mode\n");
+- return false;
++ if (sc->sc_ah->opmode == NL80211_IFTYPE_AP) {
++ if ((vif->type != NL80211_IFTYPE_AP) ||
++ (sc->nbcnvifs > 1)) {
++ ath_dbg(common, CONFIG,
++ "An AP interface is already present !\n");
++ return false;
++ }
+ }
+- /*
+- * Do not allow beacon config if HW was already configured
+- * with another STA vif
+- */
+- if ((sc->sc_ah->opmode == NL80211_IFTYPE_STATION) &&
+- (vif->type == NL80211_IFTYPE_STATION) &&
+- test_bit(SC_OP_BEACONS, &sc->sc_flags) &&
+- !avp->primary_sta_vif) {
+- ath_dbg(common, CONFIG,
+- "Beacon already configured for a station interface\n");
+- return false;
+
-+ if (aniState->ofdmWeakSigDetect != weak_sig)
- ath9k_hw_ani_control(ah,
- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
- entry_ofdm->ofdm_weak_signal_on);
++ if (sc->sc_ah->opmode == NL80211_IFTYPE_STATION) {
++ if ((vif->type == NL80211_IFTYPE_STATION) &&
++ test_bit(SC_OP_BEACONS, &sc->sc_flags) &&
++ !avp->primary_sta_vif) {
++ ath_dbg(common, CONFIG,
++ "Beacon already configured for a station interface\n");
++ return false;
++ }
+ }
+
-+ if (aniState->ofdmNoiseImmunityLevel >= ATH9K_ANI_OFDM_DEF_LEVEL) {
-+ ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH;
-+ ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI;
+ return true;
+ }
+
+-void ath_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif)
++static void ath9k_cache_beacon_config(struct ath_softc *sc,
++ struct ieee80211_bss_conf *bss_conf)
+ {
++ struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+ struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf;
+- struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
+
+- if (!ath9k_allow_beacon_config(sc, vif))
+- return;
++ ath_dbg(common, BEACON,
++ "Caching beacon data for BSS: %pM\n", bss_conf->bssid);
+
+- /* Setup the beacon configuration parameters */
+ cur_conf->beacon_interval = bss_conf->beacon_int;
+ cur_conf->dtim_period = bss_conf->dtim_period;
+ cur_conf->listen_interval = 1;
+@@ -769,73 +659,59 @@ void ath_beacon_config(struct ath_softc
+ if (cur_conf->dtim_period == 0)
+ cur_conf->dtim_period = 1;
+
+- ath_set_beacon(sc);
+ }
+
+-static bool ath_has_valid_bslot(struct ath_softc *sc)
++void ath9k_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif,
++ u32 changed)
+ {
+- struct ath_vif *avp;
+- int slot;
+- bool found = false;
++ struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
++ struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf;
+
+- for (slot = 0; slot < ATH_BCBUF; slot++) {
+- if (sc->beacon.bslot[slot]) {
+- avp = (void *)sc->beacon.bslot[slot]->drv_priv;
+- if (avp->is_bslot_active) {
+- found = true;
+- break;
+- }
++ ath9k_cache_beacon_config(sc, bss_conf);
++
++ if (sc->sc_ah->opmode == NL80211_IFTYPE_STATION) {
++ ath9k_set_beacon(sc);
++ set_bit(SC_OP_BEACONS, &sc->sc_flags);
+ } else {
-+ ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI;
-+ ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW;
++ /*
++ * Take care of multiple interfaces when
++ * enabling/disabling SWBA.
++ */
++ if (changed & BSS_CHANGED_BEACON_ENABLED) {
++ if (!bss_conf->enable_beacon &&
++ (sc->nbcnvifs <= 1))
++ cur_conf->enable_beacon = false;
++ else if (bss_conf->enable_beacon)
++ cur_conf->enable_beacon = true;
+ }
++
++ ath9k_set_beacon(sc);
++
++ if (cur_conf->enable_beacon)
++ set_bit(SC_OP_BEACONS, &sc->sc_flags);
++ else
++ clear_bit(SC_OP_BEACONS, &sc->sc_flags);
}
+- return found;
}
-@@ -308,11 +196,6 @@ static void ath9k_hw_ani_ofdm_err_trigge
- if (!DO_ANI(ah))
+-
+-void ath_set_beacon(struct ath_softc *sc)
++void ath9k_set_beacon(struct ath_softc *sc)
+ {
+ struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+ struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf;
+
+ switch (sc->sc_ah->opmode) {
+ case NL80211_IFTYPE_AP:
+- if (ath_has_valid_bslot(sc))
+- ath_beacon_config_ap(sc, cur_conf);
++ ath9k_beacon_config_ap(sc, cur_conf);
+ break;
+ case NL80211_IFTYPE_ADHOC:
+ case NL80211_IFTYPE_MESH_POINT:
+- ath_beacon_config_adhoc(sc, cur_conf);
++ ath9k_beacon_config_adhoc(sc, cur_conf);
+ break;
+ case NL80211_IFTYPE_STATION:
+- ath_beacon_config_sta(sc, cur_conf);
++ ath9k_beacon_config_sta(sc, cur_conf);
+ break;
+ default:
+ ath_dbg(common, CONFIG, "Unsupported beaconing mode\n");
return;
-
-- if (!use_new_ani(ah)) {
-- ath9k_hw_ani_ofdm_err_trigger_old(ah);
+ }
+-
+- set_bit(SC_OP_BEACONS, &sc->sc_flags);
+-}
+-
+-void ath9k_set_beaconing_status(struct ath_softc *sc, bool status)
+-{
+- struct ath_hw *ah = sc->sc_ah;
+-
+- if (!ath_has_valid_bslot(sc)) {
+- clear_bit(SC_OP_BEACONS, &sc->sc_flags);
- return;
- }
-
- aniState = &ah->curchan->ani;
-
- if (aniState->ofdmNoiseImmunityLevel < ATH9K_ANI_OFDM_MAX_LEVEL)
-@@ -329,22 +212,18 @@ static void ath9k_hw_set_cck_nil(struct
- const struct ani_ofdm_level_entry *entry_ofdm;
- const struct ani_cck_level_entry *entry_cck;
-
-- aniState->noiseFloor = BEACON_RSSI(ah);
- ath_dbg(common, ANI, "**** ccklevel %d=>%d, rssi=%d[lo=%d hi=%d]\n",
- aniState->cckNoiseImmunityLevel, immunityLevel,
-- aniState->noiseFloor, aniState->rssiThrLow,
-+ BEACON_RSSI(ah), aniState->rssiThrLow,
- aniState->rssiThrHigh);
-
-- if ((ah->opmode == NL80211_IFTYPE_STATION ||
-- ah->opmode == NL80211_IFTYPE_ADHOC) &&
-- aniState->noiseFloor <= aniState->rssiThrLow &&
-+ if (ah->opmode == NL80211_IFTYPE_STATION &&
-+ BEACON_RSSI(ah) <= aniState->rssiThrLow &&
- immunityLevel > ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI)
- immunityLevel = ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI;
-
- if (aniState->update_ani)
-- aniState->cckNoiseImmunityLevel =
-- (immunityLevel > ATH9K_ANI_CCK_DEF_LEVEL) ?
-- immunityLevel : ATH9K_ANI_CCK_DEF_LEVEL;
-+ aniState->cckNoiseImmunityLevel = immunityLevel;
-
- entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel];
- entry_cck = &cck_level_table[aniState->cckNoiseImmunityLevel];
-@@ -372,70 +251,12 @@ static void ath9k_hw_ani_cck_err_trigger
- if (!DO_ANI(ah))
+- ath9k_ps_wakeup(sc);
+- if (status) {
+- /* Re-enable beaconing */
+- ah->imask |= ATH9K_INT_SWBA;
+- ath9k_hw_set_interrupts(ah);
+- } else {
+- /* Disable SWBA interrupt */
+- ah->imask &= ~ATH9K_INT_SWBA;
+- ath9k_hw_set_interrupts(ah);
+- tasklet_kill(&sc->bcon_tasklet);
+- ath9k_hw_stop_dma_queue(ah, sc->beacon.beaconq);
+- }
+- ath9k_ps_restore(sc);
+ }
+--- a/drivers/net/wireless/ath/ath9k/debug.c
++++ b/drivers/net/wireless/ath/ath9k/debug.c
+@@ -206,10 +206,9 @@ static ssize_t write_file_disable_ani(st
+
+ if (disable_ani) {
+ clear_bit(SC_OP_ANI_RUN, &sc->sc_flags);
+- del_timer_sync(&common->ani.timer);
++ ath_stop_ani(sc);
+ } else {
+- set_bit(SC_OP_ANI_RUN, &sc->sc_flags);
+- ath_start_ani(common);
++ ath_check_ani(sc);
+ }
+
+ return count;
+--- a/drivers/net/wireless/ath/ath9k/debug.h
++++ b/drivers/net/wireless/ath/ath9k/debug.h
+@@ -32,6 +32,19 @@ struct ath_buf;
+ #define RESET_STAT_INC(sc, type) do { } while (0)
+ #endif
+
++enum ath_reset_type {
++ RESET_TYPE_BB_HANG,
++ RESET_TYPE_BB_WATCHDOG,
++ RESET_TYPE_FATAL_INT,
++ RESET_TYPE_TX_ERROR,
++ RESET_TYPE_TX_HANG,
++ RESET_TYPE_PLL_HANG,
++ RESET_TYPE_MAC_HANG,
++ RESET_TYPE_BEACON_STUCK,
++ RESET_TYPE_MCI,
++ __RESET_TYPE_MAX
++};
++
+ #ifdef CONFIG_ATH9K_DEBUGFS
+
+ /**
+@@ -209,17 +222,6 @@ struct ath_rx_stats {
+ u32 rx_frags;
+ };
+
+-enum ath_reset_type {
+- RESET_TYPE_BB_HANG,
+- RESET_TYPE_BB_WATCHDOG,
+- RESET_TYPE_FATAL_INT,
+- RESET_TYPE_TX_ERROR,
+- RESET_TYPE_TX_HANG,
+- RESET_TYPE_PLL_HANG,
+- RESET_TYPE_MAC_HANG,
+- __RESET_TYPE_MAX
+-};
+-
+ struct ath_stats {
+ struct ath_interrupt_stats istats;
+ struct ath_tx_stats txstats[ATH9K_NUM_TX_QUEUES];
+--- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c
++++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c
+@@ -1111,7 +1111,7 @@ static int ath9k_htc_add_interface(struc
+
+ if ((priv->ah->opmode == NL80211_IFTYPE_AP) &&
+ !test_bit(OP_ANI_RUNNING, &priv->op_flags)) {
+- ath9k_hw_set_tsfadjust(priv->ah, 1);
++ ath9k_hw_set_tsfadjust(priv->ah, true);
+ ath9k_htc_start_ani(priv);
+ }
+
+--- a/drivers/net/wireless/ath/ath9k/hw.c
++++ b/drivers/net/wireless/ath/ath9k/hw.c
+@@ -2908,9 +2908,9 @@ void ath9k_hw_reset_tsf(struct ath_hw *a
+ }
+ EXPORT_SYMBOL(ath9k_hw_reset_tsf);
+
+-void ath9k_hw_set_tsfadjust(struct ath_hw *ah, u32 setting)
++void ath9k_hw_set_tsfadjust(struct ath_hw *ah, bool set)
+ {
+- if (setting)
++ if (set)
+ ah->misc_mode |= AR_PCU_TX_ADD_TSF;
+ else
+ ah->misc_mode &= ~AR_PCU_TX_ADD_TSF;
+--- a/drivers/net/wireless/ath/ath9k/hw.h
++++ b/drivers/net/wireless/ath/ath9k/hw.h
+@@ -943,7 +943,7 @@ u32 ath9k_hw_gettsf32(struct ath_hw *ah)
+ u64 ath9k_hw_gettsf64(struct ath_hw *ah);
+ void ath9k_hw_settsf64(struct ath_hw *ah, u64 tsf64);
+ void ath9k_hw_reset_tsf(struct ath_hw *ah);
+-void ath9k_hw_set_tsfadjust(struct ath_hw *ah, u32 setting);
++void ath9k_hw_set_tsfadjust(struct ath_hw *ah, bool set);
+ void ath9k_hw_init_global_settings(struct ath_hw *ah);
+ u32 ar9003_get_pll_sqsum_dvc(struct ath_hw *ah);
+ void ath9k_hw_set11nmac2040(struct ath_hw *ah);
+--- a/drivers/net/wireless/ath/ath9k/init.c
++++ b/drivers/net/wireless/ath/ath9k/init.c
+@@ -560,7 +560,7 @@ static int ath9k_init_softc(u16 devid, s
+ spin_lock_init(&sc->debug.samp_lock);
+ #endif
+ tasklet_init(&sc->intr_tq, ath9k_tasklet, (unsigned long)sc);
+- tasklet_init(&sc->bcon_tasklet, ath_beacon_tasklet,
++ tasklet_init(&sc->bcon_tasklet, ath9k_beacon_tasklet,
+ (unsigned long)sc);
+
+ INIT_WORK(&sc->hw_reset_work, ath_reset_work);
+--- a/drivers/net/wireless/ath/ath9k/link.c
++++ b/drivers/net/wireless/ath/ath9k/link.c
+@@ -50,8 +50,7 @@ void ath_tx_complete_poll_work(struct wo
+ if (needreset) {
+ ath_dbg(ath9k_hw_common(sc->sc_ah), RESET,
+ "tx hung, resetting the chip\n");
+- RESET_STAT_INC(sc, RESET_TYPE_TX_HANG);
+- ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
++ ath9k_queue_reset(sc, RESET_TYPE_TX_HANG);
return;
+ }
+
+@@ -69,6 +68,7 @@ void ath_hw_check(struct work_struct *wo
+ unsigned long flags;
+ int busy;
+ u8 is_alive, nbeacon = 1;
++ enum ath_reset_type type;
+
+ ath9k_ps_wakeup(sc);
+ is_alive = ath9k_hw_check_alive(sc->sc_ah);
+@@ -78,7 +78,7 @@ void ath_hw_check(struct work_struct *wo
+ else if (!is_alive && AR_SREV_9300(sc->sc_ah)) {
+ ath_dbg(common, RESET,
+ "DCU stuck is detected. Schedule chip reset\n");
+- RESET_STAT_INC(sc, RESET_TYPE_MAC_HANG);
++ type = RESET_TYPE_MAC_HANG;
+ goto sched_reset;
+ }
-- if (!use_new_ani(ah)) {
-- ath9k_hw_ani_cck_err_trigger_old(ah);
+@@ -90,7 +90,7 @@ void ath_hw_check(struct work_struct *wo
+ busy, sc->hw_busy_count + 1);
+ if (busy >= 99) {
+ if (++sc->hw_busy_count >= 3) {
+- RESET_STAT_INC(sc, RESET_TYPE_BB_HANG);
++ type = RESET_TYPE_BB_HANG;
+ goto sched_reset;
+ }
+ } else if (busy >= 0) {
+@@ -102,7 +102,7 @@ void ath_hw_check(struct work_struct *wo
+ goto out;
+
+ sched_reset:
+- ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
++ ath9k_queue_reset(sc, type);
+ out:
+ ath9k_ps_restore(sc);
+ }
+@@ -119,8 +119,7 @@ static bool ath_hw_pll_rx_hang_check(str
+ count++;
+ if (count == 3) {
+ ath_dbg(common, RESET, "PLL WAR, resetting the chip\n");
+- RESET_STAT_INC(sc, RESET_TYPE_PLL_HANG);
+- ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
++ ath9k_queue_reset(sc, RESET_TYPE_PLL_HANG);
+ count = 0;
+ return true;
+ }
+@@ -432,26 +431,69 @@ set_timer:
+ }
+ }
+
+-void ath_start_ani(struct ath_common *common)
++void ath_start_ani(struct ath_softc *sc)
+ {
+- struct ath_hw *ah = common->ah;
++ struct ath_hw *ah = sc->sc_ah;
++ struct ath_common *common = ath9k_hw_common(ah);
+ unsigned long timestamp = jiffies_to_msecs(jiffies);
+- struct ath_softc *sc = (struct ath_softc *) common->priv;
+
+- if (!test_bit(SC_OP_ANI_RUN, &sc->sc_flags))
- return;
-- }
-
- aniState = &ah->curchan->ani;
+- if (sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)
++ if (common->disable_ani ||
++ !test_bit(SC_OP_ANI_RUN, &sc->sc_flags) ||
++ (sc->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL))
+ return;
+
+ common->ani.longcal_timer = timestamp;
+ common->ani.shortcal_timer = timestamp;
+ common->ani.checkani_timer = timestamp;
- if (aniState->cckNoiseImmunityLevel < ATH9K_ANI_CCK_MAX_LEVEL)
- ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel + 1);
++ ath_dbg(common, ANI, "Starting ANI\n");
+ mod_timer(&common->ani.timer,
+ jiffies + msecs_to_jiffies((u32)ah->config.ani_poll_interval));
}
--static void ath9k_hw_ani_lower_immunity_old(struct ath_hw *ah)
--{
-- struct ar5416AniState *aniState;
-- int32_t rssi;
--
-- aniState = &ah->curchan->ani;
--
-- if (ah->opmode == NL80211_IFTYPE_AP) {
-- if (aniState->firstepLevel > 0) {
-- if (ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
-- aniState->firstepLevel - 1))
-- return;
-- }
-- } else {
-- rssi = BEACON_RSSI(ah);
-- if (rssi > aniState->rssiThrHigh) {
-- /* XXX: Handle me */
-- } else if (rssi > aniState->rssiThrLow) {
-- if (aniState->ofdmWeakSigDetectOff) {
-- if (ath9k_hw_ani_control(ah,
-- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
-- true))
-- return;
-- }
-- if (aniState->firstepLevel > 0) {
-- if (ath9k_hw_ani_control(ah,
-- ATH9K_ANI_FIRSTEP_LEVEL,
-- aniState->firstepLevel - 1))
-- return;
-- }
-- } else {
-- if (aniState->firstepLevel > 0) {
-- if (ath9k_hw_ani_control(ah,
-- ATH9K_ANI_FIRSTEP_LEVEL,
-- aniState->firstepLevel - 1))
-- return;
-- }
-- }
-- }
--
-- if (aniState->spurImmunityLevel > 0) {
-- if (ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL,
-- aniState->spurImmunityLevel - 1))
-- return;
-- }
--
-- if (aniState->noiseImmunityLevel > 0) {
-- ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL,
-- aniState->noiseImmunityLevel - 1);
-- return;
-- }
--}
++void ath_stop_ani(struct ath_softc *sc)
++{
++ struct ath_common *common = ath9k_hw_common(sc->sc_ah);
++
++ ath_dbg(common, ANI, "Stopping ANI\n");
++ del_timer_sync(&common->ani.timer);
++}
++
++void ath_check_ani(struct ath_softc *sc)
++{
++ struct ath_hw *ah = sc->sc_ah;
++ struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf;
++
++ /*
++ * Check for the various conditions in which ANI has to
++ * be stopped.
++ */
++ if (ah->opmode == NL80211_IFTYPE_ADHOC) {
++ if (!cur_conf->enable_beacon)
++ goto stop_ani;
++ } else if (ah->opmode == NL80211_IFTYPE_AP) {
++ if (!cur_conf->enable_beacon) {
++ /*
++ * Disable ANI only when there are no
++ * associated stations.
++ */
++ if (!test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags))
++ goto stop_ani;
++ }
++ } else if (ah->opmode == NL80211_IFTYPE_STATION) {
++ if (!test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags))
++ goto stop_ani;
++ }
++
++ set_bit(SC_OP_ANI_RUN, &sc->sc_flags);
++ ath_start_ani(sc);
++ return;
++
++stop_ani:
++ clear_bit(SC_OP_ANI_RUN, &sc->sc_flags);
++ ath_stop_ani(sc);
++}
++
+ void ath_update_survey_nf(struct ath_softc *sc, int channel)
+ {
+ struct ath_hw *ah = sc->sc_ah;
+--- a/drivers/net/wireless/ath/ath9k/main.c
++++ b/drivers/net/wireless/ath/ath9k/main.c
+@@ -167,8 +167,6 @@ static void ath_cancel_work(struct ath_s
+
+ static void ath_restart_work(struct ath_softc *sc)
+ {
+- struct ath_common *common = ath9k_hw_common(sc->sc_ah);
-
- /*
- * only lower either OFDM or CCK errors per turn
- * we lower the other one next time
-@@ -446,11 +267,6 @@ static void ath9k_hw_ani_lower_immunity(
+ ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, 0);
- aniState = &ah->curchan->ani;
+ if (AR_SREV_9340(sc->sc_ah) || AR_SREV_9485(sc->sc_ah) ||
+@@ -177,21 +175,18 @@ static void ath_restart_work(struct ath_
+ msecs_to_jiffies(ATH_PLL_WORK_INTERVAL));
-- if (!use_new_ani(ah)) {
-- ath9k_hw_ani_lower_immunity_old(ah);
-- return;
-- }
+ ath_start_rx_poll(sc, 3);
-
- /* lower OFDM noise immunity */
- if (aniState->ofdmNoiseImmunityLevel > 0 &&
- (aniState->ofdmsTurn || aniState->cckNoiseImmunityLevel == 0)) {
-@@ -463,72 +279,6 @@ static void ath9k_hw_ani_lower_immunity(
- ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel - 1);
+- if (!common->disable_ani)
+- ath_start_ani(common);
++ ath_start_ani(sc);
}
--static void ath9k_ani_reset_old(struct ath_hw *ah, bool is_scanning)
--{
-- struct ar5416AniState *aniState;
-- struct ath9k_channel *chan = ah->curchan;
+ static bool ath_prepare_reset(struct ath_softc *sc, bool retry_tx, bool flush)
+ {
+ struct ath_hw *ah = sc->sc_ah;
- struct ath_common *common = ath9k_hw_common(ah);
+ bool ret = true;
+
+ ieee80211_stop_queues(sc->hw);
+
+ sc->hw_busy_count = 0;
+- del_timer_sync(&common->ani.timer);
++ ath_stop_ani(sc);
+ del_timer_sync(&sc->rx_poll_timer);
+
+ ath9k_debug_samp_bb_mac(sc);
+@@ -236,7 +231,7 @@ static bool ath_complete_reset(struct at
+ if (!test_bit(SC_OP_BEACONS, &sc->sc_flags))
+ goto work;
+
+- ath_set_beacon(sc);
++ ath9k_set_beacon(sc);
+
+ if (ah->opmode == NL80211_IFTYPE_STATION &&
+ test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) {
+@@ -365,6 +360,7 @@ void ath9k_tasklet(unsigned long data)
+ struct ath_softc *sc = (struct ath_softc *)data;
+ struct ath_hw *ah = sc->sc_ah;
+ struct ath_common *common = ath9k_hw_common(ah);
++ enum ath_reset_type type;
+ unsigned long flags;
+ u32 status = sc->intrstatus;
+ u32 rxmask;
+@@ -374,18 +370,13 @@ void ath9k_tasklet(unsigned long data)
+
+ if ((status & ATH9K_INT_FATAL) ||
+ (status & ATH9K_INT_BB_WATCHDOG)) {
+-#ifdef CONFIG_ATH9K_DEBUGFS
+- enum ath_reset_type type;
+
+ if (status & ATH9K_INT_FATAL)
+ type = RESET_TYPE_FATAL_INT;
+ else
+ type = RESET_TYPE_BB_WATCHDOG;
+
+- RESET_STAT_INC(sc, type);
+-#endif
+- set_bit(SC_OP_HW_RESET, &sc->sc_flags);
+- ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
++ ath9k_queue_reset(sc, type);
+ goto out;
+ }
+
+@@ -575,6 +566,15 @@ static int ath_reset(struct ath_softc *s
+ return r;
+ }
+
++void ath9k_queue_reset(struct ath_softc *sc, enum ath_reset_type type)
++{
++#ifdef CONFIG_ATH9K_DEBUGFS
++ RESET_STAT_INC(sc, type);
++#endif
++ set_bit(SC_OP_HW_RESET, &sc->sc_flags);
++ ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
++}
++
+ void ath_reset_work(struct work_struct *work)
+ {
+ struct ath_softc *sc = container_of(work, struct ath_softc, hw_reset_work);
+@@ -841,16 +841,6 @@ bool ath9k_uses_beacons(int type)
+ }
+ }
+
+-static void ath9k_reclaim_beacon(struct ath_softc *sc,
+- struct ieee80211_vif *vif)
+-{
+- struct ath_vif *avp = (void *)vif->drv_priv;
-
-- if (!DO_ANI(ah))
-- return;
+- ath9k_set_beaconing_status(sc, false);
+- ath_beacon_return(sc, avp);
+- ath9k_set_beaconing_status(sc, true);
+-}
-
-- aniState = &ah->curchan->ani;
+ static void ath9k_vif_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
+ {
+ struct ath9k_vif_iter_data *iter_data = data;
+@@ -918,18 +908,14 @@ static void ath9k_calculate_summary_stat
+
+ ath9k_calculate_iter_data(hw, vif, &iter_data);
+
+- /* Set BSSID mask. */
+ memcpy(common->bssidmask, iter_data.mask, ETH_ALEN);
+ ath_hw_setbssidmask(common);
+
+- /* Set op-mode & TSF */
+ if (iter_data.naps > 0) {
+- ath9k_hw_set_tsfadjust(ah, 1);
+- set_bit(SC_OP_TSF_RESET, &sc->sc_flags);
++ ath9k_hw_set_tsfadjust(ah, true);
+ ah->opmode = NL80211_IFTYPE_AP;
+ } else {
+- ath9k_hw_set_tsfadjust(ah, 0);
+- clear_bit(SC_OP_TSF_RESET, &sc->sc_flags);
++ ath9k_hw_set_tsfadjust(ah, false);
+
+ if (iter_data.nmeshes)
+ ah->opmode = NL80211_IFTYPE_MESH_POINT;
+@@ -941,45 +927,14 @@ static void ath9k_calculate_summary_stat
+ ah->opmode = NL80211_IFTYPE_STATION;
+ }
+
+- /*
+- * Enable MIB interrupts when there are hardware phy counters.
+- */
++ ath9k_hw_setopmode(ah);
++
+ if ((iter_data.nstations + iter_data.nadhocs + iter_data.nmeshes) > 0)
+ ah->imask |= ATH9K_INT_TSFOOR;
+ else
+ ah->imask &= ~ATH9K_INT_TSFOOR;
+
+ ath9k_hw_set_interrupts(ah);
-
-- if (ah->opmode != NL80211_IFTYPE_STATION
-- && ah->opmode != NL80211_IFTYPE_ADHOC) {
-- ath_dbg(common, ANI, "Reset ANI state opmode %u\n", ah->opmode);
-- ah->stats.ast_ani_reset++;
+- /* Set up ANI */
+- if (iter_data.naps > 0) {
+- sc->sc_ah->stats.avgbrssi = ATH_RSSI_DUMMY_MARKER;
-
-- if (ah->opmode == NL80211_IFTYPE_AP) {
-- /*
-- * ath9k_hw_ani_control() will only process items set on
-- * ah->ani_function
-- */
-- if (IS_CHAN_2GHZ(chan))
-- ah->ani_function = (ATH9K_ANI_SPUR_IMMUNITY_LEVEL |
-- ATH9K_ANI_FIRSTEP_LEVEL);
-- else
-- ah->ani_function = 0;
+- if (!common->disable_ani) {
+- set_bit(SC_OP_ANI_RUN, &sc->sc_flags);
+- ath_start_ani(common);
- }
-
-- ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL, 0);
-- ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL, 0);
-- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL, 0);
-- ath9k_hw_ani_control(ah, ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
-- !ATH9K_ANI_USE_OFDM_WEAK_SIG);
-- ath9k_hw_ani_control(ah, ATH9K_ANI_CCK_WEAK_SIGNAL_THR,
-- ATH9K_ANI_CCK_WEAK_SIG_THR);
--
-- ath9k_ani_restart(ah);
-- return;
+- } else {
+- clear_bit(SC_OP_ANI_RUN, &sc->sc_flags);
+- del_timer_sync(&common->ani.timer);
- }
+-}
-
-- if (aniState->noiseImmunityLevel != 0)
-- ath9k_hw_ani_control(ah, ATH9K_ANI_NOISE_IMMUNITY_LEVEL,
-- aniState->noiseImmunityLevel);
-- if (aniState->spurImmunityLevel != 0)
-- ath9k_hw_ani_control(ah, ATH9K_ANI_SPUR_IMMUNITY_LEVEL,
-- aniState->spurImmunityLevel);
-- if (aniState->ofdmWeakSigDetectOff)
-- ath9k_hw_ani_control(ah, ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION,
-- !aniState->ofdmWeakSigDetectOff);
-- if (aniState->cckWeakSigThreshold)
-- ath9k_hw_ani_control(ah, ATH9K_ANI_CCK_WEAK_SIGNAL_THR,
-- aniState->cckWeakSigThreshold);
-- if (aniState->firstepLevel != 0)
-- ath9k_hw_ani_control(ah, ATH9K_ANI_FIRSTEP_LEVEL,
-- aniState->firstepLevel);
--
-- ath9k_ani_restart(ah);
--
-- ENABLE_REGWRITE_BUFFER(ah);
--
-- REG_WRITE(ah, AR_PHY_ERR_MASK_1, AR_PHY_ERR_OFDM_TIMING);
-- REG_WRITE(ah, AR_PHY_ERR_MASK_2, AR_PHY_ERR_CCK_TIMING);
+-/* Called with sc->mutex held, vif counts set up properly. */
+-static void ath9k_do_vif_add_setup(struct ieee80211_hw *hw,
+- struct ieee80211_vif *vif)
+-{
+- struct ath_softc *sc = hw->priv;
-
-- REGWRITE_BUFFER_FLUSH(ah);
--}
+- ath9k_calculate_summary_state(hw, vif);
-
- /*
- * Restore the ANI parameters in the HAL and reset the statistics.
- * This routine should be called for every hardware reset and for
-@@ -539,13 +289,11 @@ void ath9k_ani_reset(struct ath_hw *ah,
- struct ar5416AniState *aniState = &ah->curchan->ani;
- struct ath9k_channel *chan = ah->curchan;
- struct ath_common *common = ath9k_hw_common(ah);
-+ int ofdm_nil, cck_nil;
+- if (ath9k_uses_beacons(vif->type)) {
+- /* Reserve a beacon slot for the vif */
+- ath9k_set_beaconing_status(sc, false);
+- ath_beacon_alloc(sc, vif);
+- ath9k_set_beaconing_status(sc, true);
+- }
+ }
- if (!DO_ANI(ah))
- return;
+ static int ath9k_add_interface(struct ieee80211_hw *hw,
+@@ -1021,7 +976,10 @@ static int ath9k_add_interface(struct ie
-- if (!use_new_ani(ah))
-- return ath9k_ani_reset_old(ah, is_scanning);
--
- BUG_ON(aniState == NULL);
- ah->stats.ast_ani_reset++;
+ sc->nvifs++;
-@@ -563,6 +311,11 @@ void ath9k_ani_reset(struct ath_hw *ah,
- /* always allow mode (on/off) to be controlled */
- ah->ani_function |= ATH9K_ANI_MODE;
+- ath9k_do_vif_add_setup(hw, vif);
++ ath9k_calculate_summary_state(hw, vif);
++ if (ath9k_uses_beacons(vif->type))
++ ath9k_beacon_assign_slot(sc, vif);
++
+ out:
+ mutex_unlock(&sc->mutex);
+ ath9k_ps_restore(sc);
+@@ -1038,6 +996,7 @@ static int ath9k_change_interface(struct
+ int ret = 0;
-+ ofdm_nil = max_t(int, ATH9K_ANI_OFDM_DEF_LEVEL,
-+ aniState->ofdmNoiseImmunityLevel);
-+ cck_nil = max_t(int, ATH9K_ANI_CCK_DEF_LEVEL,
-+ aniState->cckNoiseImmunityLevel);
+ ath_dbg(common, CONFIG, "Change Interface\n");
+
- if (is_scanning ||
- (ah->opmode != NL80211_IFTYPE_STATION &&
- ah->opmode != NL80211_IFTYPE_ADHOC)) {
-@@ -586,8 +339,8 @@ void ath9k_ani_reset(struct ath_hw *ah,
- aniState->cckNoiseImmunityLevel);
-
- aniState->update_ani = false;
-- ath9k_hw_set_ofdm_nil(ah, ATH9K_ANI_OFDM_DEF_LEVEL);
-- ath9k_hw_set_cck_nil(ah, ATH9K_ANI_CCK_DEF_LEVEL);
-+ ofdm_nil = ATH9K_ANI_OFDM_DEF_LEVEL;
-+ cck_nil = ATH9K_ANI_CCK_DEF_LEVEL;
+ mutex_lock(&sc->mutex);
+ ath9k_ps_wakeup(sc);
+
+@@ -1050,15 +1009,16 @@ static int ath9k_change_interface(struct
}
- } else {
- /*
-@@ -603,11 +356,9 @@ void ath9k_ani_reset(struct ath_hw *ah,
- aniState->cckNoiseImmunityLevel);
-
- aniState->update_ani = true;
-- ath9k_hw_set_ofdm_nil(ah,
-- aniState->ofdmNoiseImmunityLevel);
-- ath9k_hw_set_cck_nil(ah,
-- aniState->cckNoiseImmunityLevel);
}
-+ ath9k_hw_set_ofdm_nil(ah, ofdm_nil);
-+ ath9k_hw_set_cck_nil(ah, cck_nil);
- /*
- * enable phy counters if hw supports or if not, enable phy
-@@ -627,9 +378,6 @@ static bool ath9k_hw_ani_read_counters(s
- {
- struct ath_common *common = ath9k_hw_common(ah);
- struct ar5416AniState *aniState = &ah->curchan->ani;
-- u32 ofdm_base = 0;
-- u32 cck_base = 0;
-- u32 ofdmPhyErrCnt, cckPhyErrCnt;
- u32 phyCnt1, phyCnt2;
- int32_t listenTime;
-
-@@ -642,11 +390,6 @@ static bool ath9k_hw_ani_read_counters(s
- return false;
- }
+- /* Clean up old vif stuff */
+ if (ath9k_uses_beacons(vif->type))
+- ath9k_reclaim_beacon(sc, vif);
++ ath9k_beacon_remove_slot(sc, vif);
-- if (!use_new_ani(ah)) {
-- ofdm_base = AR_PHY_COUNTMAX - ah->config.ofdm_trig_high;
-- cck_base = AR_PHY_COUNTMAX - ah->config.cck_trig_high;
-- }
--
- aniState->listenTime += listenTime;
-
- ath9k_hw_update_mibstats(ah, &ah->ah_mibStats);
-@@ -654,35 +397,12 @@ static bool ath9k_hw_ani_read_counters(s
- phyCnt1 = REG_READ(ah, AR_PHY_ERR_1);
- phyCnt2 = REG_READ(ah, AR_PHY_ERR_2);
-
-- if (!use_new_ani(ah) && (phyCnt1 < ofdm_base || phyCnt2 < cck_base)) {
-- if (phyCnt1 < ofdm_base) {
-- ath_dbg(common, ANI,
-- "phyCnt1 0x%x, resetting counter value to 0x%x\n",
-- phyCnt1, ofdm_base);
-- REG_WRITE(ah, AR_PHY_ERR_1, ofdm_base);
-- REG_WRITE(ah, AR_PHY_ERR_MASK_1,
-- AR_PHY_ERR_OFDM_TIMING);
-- }
-- if (phyCnt2 < cck_base) {
-- ath_dbg(common, ANI,
-- "phyCnt2 0x%x, resetting counter value to 0x%x\n",
-- phyCnt2, cck_base);
-- REG_WRITE(ah, AR_PHY_ERR_2, cck_base);
-- REG_WRITE(ah, AR_PHY_ERR_MASK_2,
-- AR_PHY_ERR_CCK_TIMING);
-- }
-- return false;
-- }
-+ ah->stats.ast_ani_ofdmerrs += phyCnt1 - aniState->ofdmPhyErrCount;
-+ aniState->ofdmPhyErrCount = phyCnt1;
+- /* Add new settings */
+ vif->type = new_type;
+ vif->p2p = p2p;
+
+- ath9k_do_vif_add_setup(hw, vif);
++ ath9k_calculate_summary_state(hw, vif);
++ if (ath9k_uses_beacons(vif->type))
++ ath9k_beacon_assign_slot(sc, vif);
+
-+ ah->stats.ast_ani_cckerrs += phyCnt2 - aniState->cckPhyErrCount;
-+ aniState->cckPhyErrCount = phyCnt2;
+ out:
+ ath9k_ps_restore(sc);
+ mutex_unlock(&sc->mutex);
+@@ -1078,9 +1038,8 @@ static void ath9k_remove_interface(struc
+
+ sc->nvifs--;
+
+- /* Reclaim beacon resources */
+ if (ath9k_uses_beacons(vif->type))
+- ath9k_reclaim_beacon(sc, vif);
++ ath9k_beacon_remove_slot(sc, vif);
-- ofdmPhyErrCnt = phyCnt1 - ofdm_base;
-- ah->stats.ast_ani_ofdmerrs +=
-- ofdmPhyErrCnt - aniState->ofdmPhyErrCount;
-- aniState->ofdmPhyErrCount = ofdmPhyErrCnt;
+ ath9k_calculate_summary_state(hw, NULL);
+
+@@ -1388,10 +1347,6 @@ static int ath9k_conf_tx(struct ieee8021
+ if (ret)
+ ath_err(common, "TXQ Update failed\n");
+
+- if (sc->sc_ah->opmode == NL80211_IFTYPE_ADHOC)
+- if (queue == WME_AC_BE && !ret)
+- ath_beaconq_config(sc);
-
-- cckPhyErrCnt = phyCnt2 - cck_base;
-- ah->stats.ast_ani_cckerrs +=
-- cckPhyErrCnt - aniState->cckPhyErrCount;
-- aniState->cckPhyErrCount = cckPhyErrCnt;
- return true;
- }
+ mutex_unlock(&sc->mutex);
+ ath9k_ps_restore(sc);
+
+@@ -1460,85 +1415,36 @@ static int ath9k_set_key(struct ieee8021
-@@ -716,21 +436,10 @@ void ath9k_hw_ani_monitor(struct ath_hw
-
- if (aniState->listenTime > ah->aniperiod) {
- if (cckPhyErrRate < ah->config.cck_trig_low &&
-- ((ofdmPhyErrRate < ah->config.ofdm_trig_low &&
-- aniState->ofdmNoiseImmunityLevel <
-- ATH9K_ANI_OFDM_DEF_LEVEL) ||
-- (ofdmPhyErrRate < ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI &&
-- aniState->ofdmNoiseImmunityLevel >=
-- ATH9K_ANI_OFDM_DEF_LEVEL))) {
-+ ofdmPhyErrRate < ah->config.ofdm_trig_low) {
- ath9k_hw_ani_lower_immunity(ah);
- aniState->ofdmsTurn = !aniState->ofdmsTurn;
-- } else if ((ofdmPhyErrRate > ah->config.ofdm_trig_high &&
-- aniState->ofdmNoiseImmunityLevel >=
-- ATH9K_ANI_OFDM_DEF_LEVEL) ||
-- (ofdmPhyErrRate >
-- ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI &&
-- aniState->ofdmNoiseImmunityLevel <
-- ATH9K_ANI_OFDM_DEF_LEVEL)) {
-+ } else if (ofdmPhyErrRate > ah->config.ofdm_trig_high) {
- ath9k_hw_ani_ofdm_err_trigger(ah);
- aniState->ofdmsTurn = false;
- } else if (cckPhyErrRate > ah->config.cck_trig_high) {
-@@ -778,49 +487,6 @@ void ath9k_hw_disable_mib_counters(struc
+ return ret;
}
- EXPORT_SYMBOL(ath9k_hw_disable_mib_counters);
+-static void ath9k_bss_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
++
++static void ath9k_bss_assoc_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
+ {
+ struct ath_softc *sc = data;
+ struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+- struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
+ struct ath_vif *avp = (void *)vif->drv_priv;
++ struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
+ unsigned long flags;
+- /*
+- * Skip iteration if primary station vif's bss info
+- * was not changed
+- */
++
+ if (test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags))
+ return;
--/*
-- * Process a MIB interrupt. We may potentially be invoked because
-- * any of the MIB counters overflow/trigger so don't assume we're
-- * here because a PHY error counter triggered.
-- */
--void ath9k_hw_proc_mib_event(struct ath_hw *ah)
--{
-- u32 phyCnt1, phyCnt2;
--
-- /* Reset these counters regardless */
-- REG_WRITE(ah, AR_FILT_OFDM, 0);
-- REG_WRITE(ah, AR_FILT_CCK, 0);
-- if (!(REG_READ(ah, AR_SLP_MIB_CTRL) & AR_SLP_MIB_PENDING))
-- REG_WRITE(ah, AR_SLP_MIB_CTRL, AR_SLP_MIB_CLEAR);
--
-- /* Clear the mib counters and save them in the stats */
-- ath9k_hw_update_mibstats(ah, &ah->ah_mibStats);
--
-- if (!DO_ANI(ah)) {
+ if (bss_conf->assoc) {
+ set_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags);
+ avp->primary_sta_vif = true;
++
+ memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
+ common->curaid = bss_conf->aid;
+ ath9k_hw_write_associd(sc->sc_ah);
+- ath_dbg(common, CONFIG, "Bss Info ASSOC %d, bssid: %pM\n",
+- bss_conf->aid, common->curbssid);
+- ath_beacon_config(sc, vif);
- /*
-- * We must always clear the interrupt cause by
-- * resetting the phy error regs.
+- * Request a re-configuration of Beacon related timers
+- * on the receipt of the first Beacon frame (i.e.,
+- * after time sync with the AP).
- */
-- REG_WRITE(ah, AR_PHY_ERR_1, 0);
-- REG_WRITE(ah, AR_PHY_ERR_2, 0);
-- return;
-- }
--
-- /* NB: these are not reset-on-read */
-- phyCnt1 = REG_READ(ah, AR_PHY_ERR_1);
-- phyCnt2 = REG_READ(ah, AR_PHY_ERR_2);
-- if (((phyCnt1 & AR_MIBCNT_INTRMASK) == AR_MIBCNT_INTRMASK) ||
-- ((phyCnt2 & AR_MIBCNT_INTRMASK) == AR_MIBCNT_INTRMASK)) {
+- spin_lock_irqsave(&sc->sc_pm_lock, flags);
+- sc->ps_flags |= PS_BEACON_SYNC | PS_WAIT_FOR_BEACON;
+- spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
+
+- /* Reset rssi stats */
+ sc->last_rssi = ATH_RSSI_DUMMY_MARKER;
+ sc->sc_ah->stats.avgbrssi = ATH_RSSI_DUMMY_MARKER;
+
+- ath_start_rx_poll(sc, 3);
-
-- if (!use_new_ani(ah))
-- ath9k_hw_ani_read_counters(ah);
+- if (!common->disable_ani) {
+- set_bit(SC_OP_ANI_RUN, &sc->sc_flags);
+- ath_start_ani(common);
+- }
-
-- /* NB: always restart to insure the h/w counters are reset */
-- ath9k_ani_restart(ah);
- }
-}
--EXPORT_SYMBOL(ath9k_hw_proc_mib_event);
-
- void ath9k_hw_ani_setup(struct ath_hw *ah)
- {
- int i;
-@@ -845,50 +511,31 @@ void ath9k_hw_ani_init(struct ath_hw *ah
-
- ath_dbg(common, ANI, "Initialize ANI\n");
-
-- if (use_new_ani(ah)) {
-- ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_NEW;
-- ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_NEW;
-+ ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH;
-+ ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW;
-
-- ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH_NEW;
-- ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW_NEW;
-- } else {
-- ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_OLD;
-- ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_OLD;
+-static void ath9k_config_bss(struct ath_softc *sc, struct ieee80211_vif *vif)
+-{
+- struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+- struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
+- struct ath_vif *avp = (void *)vif->drv_priv;
+-
+- if (sc->sc_ah->opmode != NL80211_IFTYPE_STATION)
+- return;
-
-- ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH_OLD;
-- ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW_OLD;
+- /* Reconfigure bss info */
+- if (avp->primary_sta_vif && !bss_conf->assoc) {
+- ath_dbg(common, CONFIG, "Bss Info DISASSOC %d, bssid %pM\n",
+- common->curaid, common->curbssid);
+- clear_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags);
+- clear_bit(SC_OP_BEACONS, &sc->sc_flags);
+- avp->primary_sta_vif = false;
+- memset(common->curbssid, 0, ETH_ALEN);
+- common->curaid = 0;
- }
-+ ah->config.cck_trig_high = ATH9K_ANI_CCK_TRIG_HIGH;
-+ ah->config.cck_trig_low = ATH9K_ANI_CCK_TRIG_LOW;
-
- for (i = 0; i < ARRAY_SIZE(ah->channels); i++) {
- struct ath9k_channel *chan = &ah->channels[i];
- struct ar5416AniState *ani = &chan->ani;
-
-- if (use_new_ani(ah)) {
-- ani->spurImmunityLevel =
-- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW;
-+ ani->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL;
-
-- ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_NEW;
-+ ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL;
-
-- if (AR_SREV_9300_20_OR_LATER(ah))
-- ani->mrcCCKOff =
-- !ATH9K_ANI_ENABLE_MRC_CCK;
-- else
-- ani->mrcCCKOff = true;
-
-- ani->ofdmsTurn = true;
-- } else {
-- ani->spurImmunityLevel =
-- ATH9K_ANI_SPUR_IMMUNE_LVL_OLD;
-- ani->firstepLevel = ATH9K_ANI_FIRSTEP_LVL_OLD;
-+ if (AR_SREV_9300_20_OR_LATER(ah))
-+ ani->mrcCCKOff =
-+ !ATH9K_ANI_ENABLE_MRC_CCK;
-+ else
-+ ani->mrcCCKOff = true;
+- ieee80211_iterate_active_interfaces_atomic(
+- sc->hw, ath9k_bss_iter, sc);
++ spin_lock_irqsave(&sc->sc_pm_lock, flags);
++ sc->ps_flags |= PS_BEACON_SYNC | PS_WAIT_FOR_BEACON;
++ spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
-- ani->cckWeakSigThreshold =
-- ATH9K_ANI_CCK_WEAK_SIG_THR;
-- }
-+ ani->ofdmsTurn = true;
-
- ani->rssiThrHigh = ATH9K_ANI_RSSI_THR_HIGH;
- ani->rssiThrLow = ATH9K_ANI_RSSI_THR_LOW;
-- ani->ofdmWeakSigDetectOff =
-- !ATH9K_ANI_USE_OFDM_WEAK_SIG;
-+ ani->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
- ani->cckNoiseImmunityLevel = ATH9K_ANI_CCK_DEF_LEVEL;
- ani->ofdmNoiseImmunityLevel = ATH9K_ANI_OFDM_DEF_LEVEL;
- ani->update_ani = false;
-@@ -898,13 +545,8 @@ void ath9k_hw_ani_init(struct ath_hw *ah
- * since we expect some ongoing maintenance on the tables, let's sanity
- * check here default level should not modify INI setting.
- */
-- if (use_new_ani(ah)) {
-- ah->aniperiod = ATH9K_ANI_PERIOD_NEW;
-- ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL_NEW;
-- } else {
-- ah->aniperiod = ATH9K_ANI_PERIOD_OLD;
-- ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL_OLD;
-- }
-+ ah->aniperiod = ATH9K_ANI_PERIOD;
-+ ah->config.ani_poll_interval = ATH9K_ANI_POLLINTERVAL;
-
- if (ah->config.enable_ani)
- ah->proc_phyerr |= HAL_PROCESS_ANI;
---- a/drivers/net/wireless/ath/ath9k/ani.h
-+++ b/drivers/net/wireless/ath/ath9k/ani.h
-@@ -24,42 +24,34 @@
- #define BEACON_RSSI(ahp) (ahp->stats.avgbrssi)
-
- /* units are errors per second */
--#define ATH9K_ANI_OFDM_TRIG_HIGH_OLD 500
--#define ATH9K_ANI_OFDM_TRIG_HIGH_NEW 3500
-+#define ATH9K_ANI_OFDM_TRIG_HIGH 3500
- #define ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI 1000
-
- /* units are errors per second */
--#define ATH9K_ANI_OFDM_TRIG_LOW_OLD 200
--#define ATH9K_ANI_OFDM_TRIG_LOW_NEW 400
-+#define ATH9K_ANI_OFDM_TRIG_LOW 400
- #define ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI 900
-
- /* units are errors per second */
--#define ATH9K_ANI_CCK_TRIG_HIGH_OLD 200
--#define ATH9K_ANI_CCK_TRIG_HIGH_NEW 600
-+#define ATH9K_ANI_CCK_TRIG_HIGH 600
-
- /* units are errors per second */
--#define ATH9K_ANI_CCK_TRIG_LOW_OLD 100
--#define ATH9K_ANI_CCK_TRIG_LOW_NEW 300
-+#define ATH9K_ANI_CCK_TRIG_LOW 300
-
- #define ATH9K_ANI_NOISE_IMMUNE_LVL 4
- #define ATH9K_ANI_USE_OFDM_WEAK_SIG true
- #define ATH9K_ANI_CCK_WEAK_SIG_THR false
-
--#define ATH9K_ANI_SPUR_IMMUNE_LVL_OLD 7
--#define ATH9K_ANI_SPUR_IMMUNE_LVL_NEW 3
-+#define ATH9K_ANI_SPUR_IMMUNE_LVL 3
-
--#define ATH9K_ANI_FIRSTEP_LVL_OLD 0
--#define ATH9K_ANI_FIRSTEP_LVL_NEW 2
-+#define ATH9K_ANI_FIRSTEP_LVL 2
-
- #define ATH9K_ANI_RSSI_THR_HIGH 40
- #define ATH9K_ANI_RSSI_THR_LOW 7
-
--#define ATH9K_ANI_PERIOD_OLD 100
--#define ATH9K_ANI_PERIOD_NEW 300
-+#define ATH9K_ANI_PERIOD 300
-
- /* in ms */
--#define ATH9K_ANI_POLLINTERVAL_OLD 100
--#define ATH9K_ANI_POLLINTERVAL_NEW 1000
-+#define ATH9K_ANI_POLLINTERVAL 1000
-
- #define HAL_NOISE_IMMUNE_MAX 4
- #define HAL_SPUR_IMMUNE_MAX 7
-@@ -122,13 +114,12 @@ struct ar5416AniState {
- u8 mrcCCKOff;
- u8 spurImmunityLevel;
- u8 firstepLevel;
-- u8 ofdmWeakSigDetectOff;
-+ u8 ofdmWeakSigDetect;
- u8 cckWeakSigThreshold;
- bool update_ani;
- u32 listenTime;
- int32_t rssiThrLow;
- int32_t rssiThrHigh;
-- u32 noiseFloor;
- u32 ofdmPhyErrCount;
- u32 cckPhyErrCount;
- int16_t pktRssi[2];
---- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
-@@ -995,141 +995,6 @@ static u32 ar5008_hw_compute_pll_control
- return pll;
+- /*
+- * None of station vifs are associated.
+- * Clear bssid & aid
+- */
+- if (!test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) {
+- ath9k_hw_write_associd(sc->sc_ah);
+- clear_bit(SC_OP_ANI_RUN, &sc->sc_flags);
+- del_timer_sync(&common->ani.timer);
+- del_timer_sync(&sc->rx_poll_timer);
+- memset(&sc->caldata, 0, sizeof(sc->caldata));
++ ath_dbg(common, CONFIG,
++ "Primary Station interface: %pM, BSSID: %pM\n",
++ vif->addr, common->curbssid);
+ }
}
--static bool ar5008_hw_ani_control_old(struct ath_hw *ah,
-- enum ath9k_ani_cmd cmd,
-- int param)
--{
-- struct ar5416AniState *aniState = &ah->curchan->ani;
-- 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_dbg(common, ANI, "level out of range (%u > %zu)\n",
-- level, 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:{
-- u32 on = param ? 1 : 0;
--
-- 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:{
-- static const int weakSigThrCck[] = { 8, 6 };
-- u32 high = param ? 1 : 0;
+@@ -1547,6 +1453,11 @@ static void ath9k_bss_info_changed(struc
+ struct ieee80211_bss_conf *bss_conf,
+ u32 changed)
+ {
++#define CHECK_ANI \
++ (BSS_CHANGED_ASSOC | \
++ BSS_CHANGED_IBSS | \
++ BSS_CHANGED_BEACON_ENABLED)
++
+ struct ath_softc *sc = hw->priv;
+ struct ath_hw *ah = sc->sc_ah;
+ struct ath_common *common = ath9k_hw_common(ah);
+@@ -1557,53 +1468,43 @@ static void ath9k_bss_info_changed(struc
+ mutex_lock(&sc->mutex);
+
+ if (changed & BSS_CHANGED_ASSOC) {
+- ath9k_config_bss(sc, vif);
++ ath_dbg(common, CONFIG, "BSSID %pM Changed ASSOC %d\n",
++ bss_conf->bssid, bss_conf->assoc);
+
+- ath_dbg(common, CONFIG, "BSSID: %pM aid: 0x%x\n",
+- common->curbssid, common->curaid);
++ /*
++ * Do not do anything when the opmode is not STATION.
++ */
++ if (ah->opmode == NL80211_IFTYPE_STATION) {
++ if (avp->primary_sta_vif && !bss_conf->assoc) {
++ clear_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags);
++ clear_bit(SC_OP_BEACONS, &sc->sc_flags);
++ avp->primary_sta_vif = false;
++ }
++
++ ieee80211_iterate_active_interfaces_atomic(sc->hw,
++ ath9k_bss_assoc_iter, sc);
++
++ if (!test_bit(SC_OP_PRIM_STA_VIF, &sc->sc_flags)) {
++ memset(common->curbssid, 0, ETH_ALEN);
++ common->curaid = 0;
++ ath9k_hw_write_associd(sc->sc_ah);
++ }
++ }
+ }
+
+ if (changed & BSS_CHANGED_IBSS) {
+- /* There can be only one vif available */
+ memcpy(common->curbssid, bss_conf->bssid, ETH_ALEN);
+ common->curaid = bss_conf->aid;
+ ath9k_hw_write_associd(sc->sc_ah);
-
-- 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:{
-- static const int firstep[] = { 0, 4, 8 };
-- u32 level = param;
+- if (bss_conf->ibss_joined) {
+- sc->sc_ah->stats.avgbrssi = ATH_RSSI_DUMMY_MARKER;
-
-- if (level >= ARRAY_SIZE(firstep)) {
-- ath_dbg(common, ANI, "level out of range (%u > %zu)\n",
-- level, 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:{
-- static const int cycpwrThr1[] = { 2, 4, 6, 8, 10, 12, 14, 16 };
-- u32 level = param;
+- if (!common->disable_ani) {
+- set_bit(SC_OP_ANI_RUN, &sc->sc_flags);
+- ath_start_ani(common);
+- }
-
-- if (level >= ARRAY_SIZE(cycpwrThr1)) {
-- ath_dbg(common, ANI, "level out of range (%u > %zu)\n",
-- level, ARRAY_SIZE(cycpwrThr1));
-- return false;
+- } else {
+- clear_bit(SC_OP_ANI_RUN, &sc->sc_flags);
+- del_timer_sync(&common->ani.timer);
+- del_timer_sync(&sc->rx_poll_timer);
- }
-- 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_dbg(common, ANI, "invalid cmd %u\n", cmd);
-- return false;
-- }
--
-- ath_dbg(common, ANI, "ANI parameters:\n");
-- ath_dbg(common, ANI,
-- "noiseImmunityLevel=%d, spurImmunityLevel=%d, ofdmWeakSigDetectOff=%d\n",
-- aniState->noiseImmunityLevel,
-- aniState->spurImmunityLevel,
-- !aniState->ofdmWeakSigDetectOff);
-- ath_dbg(common, ANI,
-- "cckWeakSigThreshold=%d, firstepLevel=%d, listenTime=%d\n",
-- aniState->cckWeakSigThreshold,
-- aniState->firstepLevel,
-- aniState->listenTime);
-- ath_dbg(common, ANI, "ofdmPhyErrCount=%d, cckPhyErrCount=%d\n\n",
-- aniState->ofdmPhyErrCount,
-- aniState->cckPhyErrCount);
--
-- return true;
--}
+ }
+
+- /*
+- * In case of AP mode, the HW TSF has to be reset
+- * when the beacon interval changes.
+- */
+- if ((changed & BSS_CHANGED_BEACON_INT) &&
+- (vif->type == NL80211_IFTYPE_AP))
+- set_bit(SC_OP_TSF_RESET, &sc->sc_flags);
-
- static bool ar5008_hw_ani_control_new(struct ath_hw *ah,
- enum ath9k_ani_cmd cmd,
- int param)
-@@ -1206,18 +1071,18 @@ static bool ar5008_hw_ani_control_new(st
- REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
- AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
-
-- if (!on != aniState->ofdmWeakSigDetectOff) {
-+ if (on != aniState->ofdmWeakSigDetect) {
- ath_dbg(common, ANI,
- "** ch %d: ofdm weak signal: %s=>%s\n",
- chan->channel,
-- !aniState->ofdmWeakSigDetectOff ?
-+ aniState->ofdmWeakSigDetect ?
- "on" : "off",
- on ? "on" : "off");
- if (on)
- ah->stats.ast_ani_ofdmon++;
- else
- ah->stats.ast_ani_ofdmoff++;
-- aniState->ofdmWeakSigDetectOff = !on;
-+ aniState->ofdmWeakSigDetect = on;
+- /* Configure beaconing (AP, IBSS, MESH) */
+- if (ath9k_uses_beacons(vif->type) &&
+- ((changed & BSS_CHANGED_BEACON) ||
+- (changed & BSS_CHANGED_BEACON_ENABLED) ||
+- (changed & BSS_CHANGED_BEACON_INT))) {
+- ath9k_set_beaconing_status(sc, false);
+- if (bss_conf->enable_beacon)
+- ath_beacon_alloc(sc, vif);
+- else
+- avp->is_bslot_active = false;
+- ath_beacon_config(sc, vif);
+- ath9k_set_beaconing_status(sc, true);
++ if ((changed & BSS_CHANGED_BEACON) ||
++ (changed & BSS_CHANGED_BEACON_ENABLED) ||
++ (changed & BSS_CHANGED_BEACON_INT)) {
++ if (ah->opmode == NL80211_IFTYPE_AP)
++ ath9k_set_tsfadjust(sc, vif);
++ if (ath9k_allow_beacon_config(sc, vif))
++ ath9k_beacon_config(sc, vif, changed);
+ }
+
+ if (changed & BSS_CHANGED_ERP_SLOT) {
+@@ -1625,8 +1526,13 @@ static void ath9k_bss_info_changed(struc
}
- break;
}
-@@ -1236,7 +1101,7 @@ static bool ar5008_hw_ani_control_new(st
- * from INI file & cap value
- */
- value = firstep_table[level] -
-- firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
-+ firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
- aniState->iniDef.firstep;
- if (value < ATH9K_SIG_FIRSTEP_SETTING_MIN)
- value = ATH9K_SIG_FIRSTEP_SETTING_MIN;
-@@ -1251,7 +1116,7 @@ static bool ar5008_hw_ani_control_new(st
- * from INI file & cap value
- */
- value2 = firstep_table[level] -
-- firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
-+ firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
- aniState->iniDef.firstepLow;
- if (value2 < ATH9K_SIG_FIRSTEP_SETTING_MIN)
- value2 = ATH9K_SIG_FIRSTEP_SETTING_MIN;
-@@ -1267,7 +1132,7 @@ static bool ar5008_hw_ani_control_new(st
- chan->channel,
- aniState->firstepLevel,
- level,
-- ATH9K_ANI_FIRSTEP_LVL_NEW,
-+ ATH9K_ANI_FIRSTEP_LVL,
- value,
- aniState->iniDef.firstep);
- ath_dbg(common, ANI,
-@@ -1275,7 +1140,7 @@ static bool ar5008_hw_ani_control_new(st
- chan->channel,
- aniState->firstepLevel,
- level,
-- ATH9K_ANI_FIRSTEP_LVL_NEW,
-+ ATH9K_ANI_FIRSTEP_LVL,
- value2,
- aniState->iniDef.firstepLow);
- if (level > aniState->firstepLevel)
-@@ -1300,7 +1165,7 @@ static bool ar5008_hw_ani_control_new(st
- * from INI file & cap value
- */
- value = cycpwrThr1_table[level] -
-- cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
-+ cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
- aniState->iniDef.cycpwrThr1;
- if (value < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
- value = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
-@@ -1316,7 +1181,7 @@ static bool ar5008_hw_ani_control_new(st
- * from INI file & cap value
- */
- value2 = cycpwrThr1_table[level] -
-- cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
-+ cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
- aniState->iniDef.cycpwrThr1Ext;
- if (value2 < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
- value2 = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
-@@ -1331,7 +1196,7 @@ static bool ar5008_hw_ani_control_new(st
- chan->channel,
- aniState->spurImmunityLevel,
- level,
-- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
-+ ATH9K_ANI_SPUR_IMMUNE_LVL,
- value,
- aniState->iniDef.cycpwrThr1);
- ath_dbg(common, ANI,
-@@ -1339,7 +1204,7 @@ static bool ar5008_hw_ani_control_new(st
- chan->channel,
- aniState->spurImmunityLevel,
- level,
-- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
-+ ATH9K_ANI_SPUR_IMMUNE_LVL,
- value2,
- aniState->iniDef.cycpwrThr1Ext);
- if (level > aniState->spurImmunityLevel)
-@@ -1367,7 +1232,7 @@ static bool ar5008_hw_ani_control_new(st
- ath_dbg(common, ANI,
- "ANI parameters: SI=%d, ofdmWS=%s FS=%d MRCcck=%s listenTime=%d ofdmErrs=%d cckErrs=%d\n",
- aniState->spurImmunityLevel,
-- !aniState->ofdmWeakSigDetectOff ? "on" : "off",
-+ aniState->ofdmWeakSigDetect ? "on" : "off",
- aniState->firstepLevel,
- !aniState->mrcCCKOff ? "on" : "off",
- aniState->listenTime,
-@@ -1454,9 +1319,9 @@ static void ar5008_hw_ani_cache_ini_regs
- 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->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL;
-+ aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL;
-+ aniState->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
- aniState->mrcCCKOff = true; /* not available on pre AR9003 */
+
++ if (changed & CHECK_ANI)
++ ath_check_ani(sc);
++
+ mutex_unlock(&sc->mutex);
+ ath9k_ps_restore(sc);
++
++#undef CHECK_ANI
}
-@@ -1545,11 +1410,8 @@ void ar5008_hw_attach_phy_ops(struct ath
- priv_ops->do_getnf = ar5008_hw_do_getnf;
- priv_ops->set_radar_params = ar5008_hw_set_radar_params;
+ static u64 ath9k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
+@@ -1855,10 +1761,11 @@ static int ath9k_tx_last_beacon(struct i
+ if (!vif)
+ return 0;
-- 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;
-+ priv_ops->ani_control = ar5008_hw_ani_control_new;
-+ priv_ops->ani_cache_ini_regs = ar5008_hw_ani_cache_ini_regs;
-
- if (AR_SREV_9100(ah) || AR_SREV_9160_10_OR_LATER(ah))
- priv_ops->compute_pll_control = ar9160_hw_compute_pll_control;
---- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
-@@ -21,10 +21,6 @@
- #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(force_new_ani, "Force new ANI for AR5008, AR9001, AR9002");
--
- /* General hardware code for the A5008/AR9001/AR9002 hadware families */
-
- static void ar9002_hw_init_mode_regs(struct ath_hw *ah)
---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-@@ -825,18 +825,18 @@ static bool ar9003_hw_ani_control(struct
- REG_CLR_BIT(ah, AR_PHY_SFCORR_LOW,
- AR_PHY_SFCORR_LOW_USE_SELF_CORR_LOW);
-
-- if (!on != aniState->ofdmWeakSigDetectOff) {
-+ if (on != aniState->ofdmWeakSigDetect) {
- ath_dbg(common, ANI,
- "** ch %d: ofdm weak signal: %s=>%s\n",
- chan->channel,
-- !aniState->ofdmWeakSigDetectOff ?
-+ aniState->ofdmWeakSigDetect ?
- "on" : "off",
- on ? "on" : "off");
- if (on)
- ah->stats.ast_ani_ofdmon++;
- else
- ah->stats.ast_ani_ofdmoff++;
-- aniState->ofdmWeakSigDetectOff = !on;
-+ aniState->ofdmWeakSigDetect = on;
+- avp = (void *)vif->drv_priv;
+- if (!avp->is_bslot_active)
++ if (!vif->bss_conf.enable_beacon)
+ return 0;
+
++ avp = (void *)vif->drv_priv;
++
+ if (!sc->beacon.tx_processed && !edma) {
+ tasklet_disable(&sc->bcon_tasklet);
+
+--- a/drivers/net/wireless/ath/ath9k/mci.c
++++ b/drivers/net/wireless/ath/ath9k/mci.c
+@@ -202,7 +202,7 @@ static void ath_mci_cal_msg(struct ath_s
+ case MCI_GPM_BT_CAL_REQ:
+ if (mci_hw->bt_state == MCI_BT_AWAKE) {
+ ar9003_mci_state(ah, MCI_STATE_SET_BT_CAL_START);
+- ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
++ ath9k_queue_reset(sc, RESET_TYPE_MCI);
}
+ ath_dbg(common, MCI, "MCI State : %d\n", mci_hw->bt_state);
break;
+--- a/drivers/net/wireless/ath/ath9k/recv.c
++++ b/drivers/net/wireless/ath/ath9k/recv.c
+@@ -553,7 +553,7 @@ static void ath_rx_ps_beacon(struct ath_
+ sc->ps_flags &= ~PS_BEACON_SYNC;
+ ath_dbg(common, PS,
+ "Reconfigure Beacon timers based on timestamp from the AP\n");
+- ath_set_beacon(sc);
++ ath9k_set_beacon(sc);
}
-@@ -855,7 +855,7 @@ static bool ar9003_hw_ani_control(struct
- * from INI file & cap value
- */
- value = firstep_table[level] -
-- firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
-+ firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
- aniState->iniDef.firstep;
- if (value < ATH9K_SIG_FIRSTEP_SETTING_MIN)
- value = ATH9K_SIG_FIRSTEP_SETTING_MIN;
-@@ -870,7 +870,7 @@ static bool ar9003_hw_ani_control(struct
- * from INI file & cap value
- */
- value2 = firstep_table[level] -
-- firstep_table[ATH9K_ANI_FIRSTEP_LVL_NEW] +
-+ firstep_table[ATH9K_ANI_FIRSTEP_LVL] +
- aniState->iniDef.firstepLow;
- if (value2 < ATH9K_SIG_FIRSTEP_SETTING_MIN)
- value2 = ATH9K_SIG_FIRSTEP_SETTING_MIN;
-@@ -886,7 +886,7 @@ static bool ar9003_hw_ani_control(struct
- chan->channel,
- aniState->firstepLevel,
- level,
-- ATH9K_ANI_FIRSTEP_LVL_NEW,
-+ ATH9K_ANI_FIRSTEP_LVL,
- value,
- aniState->iniDef.firstep);
- ath_dbg(common, ANI,
-@@ -894,7 +894,7 @@ static bool ar9003_hw_ani_control(struct
- chan->channel,
- aniState->firstepLevel,
- level,
-- ATH9K_ANI_FIRSTEP_LVL_NEW,
-+ ATH9K_ANI_FIRSTEP_LVL,
- value2,
- aniState->iniDef.firstepLow);
- if (level > aniState->firstepLevel)
-@@ -919,7 +919,7 @@ static bool ar9003_hw_ani_control(struct
- * from INI file & cap value
- */
- value = cycpwrThr1_table[level] -
-- cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
-+ cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
- aniState->iniDef.cycpwrThr1;
- if (value < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
- value = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
-@@ -935,7 +935,7 @@ static bool ar9003_hw_ani_control(struct
- * from INI file & cap value
- */
- value2 = cycpwrThr1_table[level] -
-- cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL_NEW] +
-+ cycpwrThr1_table[ATH9K_ANI_SPUR_IMMUNE_LVL] +
- aniState->iniDef.cycpwrThr1Ext;
- if (value2 < ATH9K_SIG_SPUR_IMM_SETTING_MIN)
- value2 = ATH9K_SIG_SPUR_IMM_SETTING_MIN;
-@@ -950,7 +950,7 @@ static bool ar9003_hw_ani_control(struct
- chan->channel,
- aniState->spurImmunityLevel,
- level,
-- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
-+ ATH9K_ANI_SPUR_IMMUNE_LVL,
- value,
- aniState->iniDef.cycpwrThr1);
- ath_dbg(common, ANI,
-@@ -958,7 +958,7 @@ static bool ar9003_hw_ani_control(struct
- chan->channel,
- aniState->spurImmunityLevel,
- level,
-- ATH9K_ANI_SPUR_IMMUNE_LVL_NEW,
-+ ATH9K_ANI_SPUR_IMMUNE_LVL,
- value2,
- aniState->iniDef.cycpwrThr1Ext);
- if (level > aniState->spurImmunityLevel)
-@@ -1002,7 +1002,7 @@ static bool ar9003_hw_ani_control(struct
- ath_dbg(common, ANI,
- "ANI parameters: SI=%d, ofdmWS=%s FS=%d MRCcck=%s listenTime=%d ofdmErrs=%d cckErrs=%d\n",
- aniState->spurImmunityLevel,
-- !aniState->ofdmWeakSigDetectOff ? "on" : "off",
-+ aniState->ofdmWeakSigDetect ? "on" : "off",
- aniState->firstepLevel,
- !aniState->mrcCCKOff ? "on" : "off",
- aniState->listenTime,
-@@ -1111,9 +1111,9 @@ static void ar9003_hw_ani_cache_ini_regs
- 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->spurImmunityLevel = ATH9K_ANI_SPUR_IMMUNE_LVL;
-+ aniState->firstepLevel = ATH9K_ANI_FIRSTEP_LVL;
-+ aniState->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
- aniState->mrcCCKOff = !ATH9K_ANI_ENABLE_MRC_CCK;
- }
---- a/drivers/net/wireless/ath/ath9k/debug.c
-+++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -348,8 +348,6 @@ void ath_debug_stat_interrupt(struct ath
- sc->debug.stats.istats.txok++;
- if (status & ATH9K_INT_TXURN)
- sc->debug.stats.istats.txurn++;
-- if (status & ATH9K_INT_MIB)
-- sc->debug.stats.istats.mib++;
- if (status & ATH9K_INT_RXPHY)
- sc->debug.stats.istats.rxphyerr++;
- if (status & ATH9K_INT_RXKCM)
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -1019,16 +1019,8 @@ void ar9002_hw_attach_ops(struct ath_hw
- void ar9003_hw_attach_ops(struct ath_hw *ah);
-
- void ar9002_hw_load_ani_reg(struct ath_hw *ah, struct ath9k_channel *chan);
--/*
-- * ANI work can be shared between all families but a next
-- * generation implementation of ANI will be used only for AR9003 only
-- * for now as the other families still need to be tested with the same
-- * next generation ANI. Feel free to start testing it though for the
-- * older families (AR5008, AR9001, AR9002) by using modparam_force_new_ani.
-- */
--extern int modparam_force_new_ani;
-+
- void ath9k_ani_reset(struct ath_hw *ah, bool is_scanning);
--void ath9k_hw_proc_mib_event(struct ath_hw *ah);
- void ath9k_hw_ani_monitor(struct ath_hw *ah, struct ath9k_channel *chan);
-
- #ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
---- a/drivers/net/wireless/ath/ath9k/main.c
-+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -19,7 +19,7 @@
- #include "ath9k.h"
- #include "btcoex.h"
+ if (ath_beacon_dtim_pending_cab(skb)) {
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -614,10 +614,8 @@ static void ath_tx_complete_aggr(struct
--static u8 parse_mpdudensity(u8 mpdudensity)
-+u8 ath9k_parse_mpdudensity(u8 mpdudensity)
- {
- /*
- * 802.11n D2.0 defined values for "Minimum MPDU Start Spacing":
-@@ -320,6 +320,7 @@ static void ath_node_attach(struct ath_s
- struct ieee80211_vif *vif)
- {
- struct ath_node *an;
-+ u8 density;
- an = (struct ath_node *)sta->drv_priv;
+ rcu_read_unlock();
- #ifdef CONFIG_ATH9K_DEBUGFS
-@@ -334,7 +335,8 @@ static void ath_node_attach(struct ath_s
- ath_tx_node_init(sc, an);
- an->maxampdu = 1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
- sta->ht_cap.ampdu_factor);
-- an->mpdudensity = parse_mpdudensity(sta->ht_cap.ampdu_density);
-+ density = ath9k_parse_mpdudensity(sta->ht_cap.ampdu_density);
-+ an->mpdudensity = density;
- }
+- if (needreset) {
+- RESET_STAT_INC(sc, RESET_TYPE_TX_ERROR);
+- ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
+- }
++ if (needreset)
++ ath9k_queue_reset(sc, RESET_TYPE_TX_ERROR);
}
-@@ -516,24 +518,6 @@ irqreturn_t ath_isr(int irq, void *dev)
- ath9k_hw_set_interrupts(ah);
- }
+ static bool ath_lookup_legacy(struct ath_buf *bf)
+@@ -1586,7 +1584,8 @@ void ath_txq_schedule(struct ath_softc *
+ struct ath_atx_ac *ac, *ac_tmp, *last_ac;
+ struct ath_atx_tid *tid, *last_tid;
-- if (status & ATH9K_INT_MIB) {
-- /*
-- * Disable interrupts until we service the MIB
-- * interrupt; otherwise it will continue to
-- * fire.
-- */
-- ath9k_hw_disable_interrupts(ah);
-- /*
-- * Let the hal handle the event. We assume
-- * it will clear whatever condition caused
-- * the interrupt.
-- */
-- spin_lock(&common->cc_lock);
-- ath9k_hw_proc_mib_event(ah);
-- spin_unlock(&common->cc_lock);
-- ath9k_hw_enable_interrupts(ah);
-- }
--
- if (!(ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP))
- if (status & ATH9K_INT_TIM_TIMER) {
- if (ATH_DBG_WARN_ON_ONCE(sc->ps_idle))
-@@ -959,14 +943,10 @@ static void ath9k_calculate_summary_stat
- /*
- * Enable MIB interrupts when there are hardware phy counters.
- */
-- if ((iter_data.nstations + iter_data.nadhocs + iter_data.nmeshes) > 0) {
-- if (ah->config.enable_ani)
-- ah->imask |= ATH9K_INT_MIB;
-+ if ((iter_data.nstations + iter_data.nadhocs + iter_data.nmeshes) > 0)
- ah->imask |= ATH9K_INT_TSFOOR;
-- } else {
-- ah->imask &= ~ATH9K_INT_MIB;
-+ else
- ah->imask &= ~ATH9K_INT_TSFOOR;
-- }
+- if (work_pending(&sc->hw_reset_work) || list_empty(&txq->axq_acq) ||
++ if (test_bit(SC_OP_HW_RESET, &sc->sc_flags) ||
++ list_empty(&txq->axq_acq) ||
+ txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH)
+ return;
- ath9k_hw_set_interrupts(ah);
+@@ -2191,7 +2190,7 @@ static void ath_tx_processq(struct ath_s
+
+ ath_txq_lock(sc, txq);
+ for (;;) {
+- if (work_pending(&sc->hw_reset_work))
++ if (test_bit(SC_OP_HW_RESET, &sc->sc_flags))
+ break;
+
+ if (list_empty(&txq->axq_q)) {
+@@ -2274,7 +2273,7 @@ void ath_tx_edma_tasklet(struct ath_soft
+ int status;
+ for (;;) {
+- if (work_pending(&sc->hw_reset_work))
++ if (test_bit(SC_OP_HW_RESET, &sc->sc_flags))
+ break;
+
+ status = ath9k_hw_txprocdesc(ah, NULL, (void *)&ts);
+--- a/include/net/mac80211.h
++++ b/include/net/mac80211.h
+@@ -3596,22 +3596,6 @@ void ieee80211_request_smps(struct ieee8
+ enum ieee80211_smps_mode smps_mode);
+
+ /**
+- * ieee80211_key_removed - disable hw acceleration for key
+- * @key_conf: The key hw acceleration should be disabled for
+- *
+- * This allows drivers to indicate that the given key has been
+- * removed from hardware acceleration, due to a new key that
+- * was added. Don't use this if the key can continue to be used
+- * for TX, if the key restriction is on RX only it is permitted
+- * to keep the key for TX only and not call this function.
+- *
+- * Due to locking constraints, it may only be called during
+- * @set_key. This function must be allowed to sleep, and the
+- * key it tries to disable may still be used until it returns.
+- */
+-void ieee80211_key_removed(struct ieee80211_key_conf *key_conf);
+-
+-/**
+ * ieee80211_ready_on_channel - notification of remain-on-channel start
+ * @hw: pointer as obtained from ieee80211_alloc_hw()
+ */
--- a/net/mac80211/agg-rx.c
+++ b/net/mac80211/agg-rx.c
-@@ -201,6 +201,8 @@ static void ieee80211_send_addba_resp(st
+@@ -203,6 +203,8 @@ static void ieee80211_send_addba_resp(st
memcpy(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN);
else if (sdata->vif.type == NL80211_IFTYPE_ADHOC)
memcpy(mgmt->bssid, sdata->u.ibss.bssid, ETH_ALEN);
memcpy(mgmt->bssid, sdata->vif.addr, ETH_ALEN);
else if (sdata->vif.type == NL80211_IFTYPE_STATION)
memcpy(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN);
-@@ -456,6 +457,7 @@ int ieee80211_start_tx_ba_session(struct
+@@ -459,6 +460,7 @@ int ieee80211_start_tx_ba_session(struct
sdata->vif.type != NL80211_IFTYPE_MESH_POINT &&
sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
sdata->vif.type != NL80211_IFTYPE_AP &&
sdata->vif.type != NL80211_IFTYPE_ADHOC)
return -EINVAL;
+--- a/net/mac80211/cfg.c
++++ b/net/mac80211/cfg.c
+@@ -1741,6 +1741,8 @@ static int ieee80211_set_txq_params(stru
+ return -EINVAL;
+ }
+
++ ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_QOS);
++
+ return 0;
+ }
+
--- a/net/mac80211/debugfs_sta.c
+++ b/net/mac80211/debugfs_sta.c
@@ -63,11 +63,11 @@ static ssize_t sta_flags_read(struct fil
TEST(TDLS_PEER_AUTH), TEST(4ADDR_EVENT),
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
-@@ -284,7 +284,6 @@ static int ieee80211_do_open(struct net_
+@@ -400,7 +400,6 @@ static int ieee80211_do_open(struct net_
{
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
struct ieee80211_local *local = sdata->local;
u32 changed = 0;
int res;
u32 hw_reconf_flags = 0;
-@@ -430,28 +429,6 @@ static int ieee80211_do_open(struct net_
+@@ -538,28 +537,6 @@ static int ieee80211_do_open(struct net_
set_bit(SDATA_STATE_RUNNING, &sdata->state);
/*
* set_multicast_list will be invoked by the networking core
* which will check whether any increments here were done in
-@@ -639,6 +616,8 @@ static void ieee80211_do_stop(struct iee
- ieee80211_configure_filter(local);
- break;
- default:
-+ flush_work(&local->hw_roc_start);
-+ flush_work(&local->hw_roc_done);
- flush_work(&sdata->work);
- /*
- * When we get here, the interface is marked down.
-@@ -845,6 +824,72 @@ static void ieee80211_if_setup(struct ne
+@@ -949,6 +926,72 @@ static void ieee80211_if_setup(struct ne
dev->destructor = free_netdev;
}
static void ieee80211_iface_work(struct work_struct *work)
{
struct ieee80211_sub_if_data *sdata =
-@@ -949,6 +994,9 @@ static void ieee80211_iface_work(struct
+@@ -1053,6 +1096,9 @@ static void ieee80211_iface_work(struct
break;
ieee80211_mesh_rx_queued_mgmt(sdata, skb);
break;
default:
WARN(1, "frame for unexpected interface type");
break;
+--- a/net/mac80211/key.c
++++ b/net/mac80211/key.c
+@@ -197,26 +197,6 @@ static void ieee80211_key_disable_hw_acc
+ key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE;
+ }
+
+-void ieee80211_key_removed(struct ieee80211_key_conf *key_conf)
+-{
+- struct ieee80211_key *key;
+-
+- key = container_of(key_conf, struct ieee80211_key, conf);
+-
+- might_sleep();
+- assert_key_lock(key->local);
+-
+- key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE;
+-
+- /*
+- * Flush TX path to avoid attempts to use this key
+- * after this function returns. Until then, drivers
+- * must be prepared to handle the key.
+- */
+- synchronize_rcu();
+-}
+-EXPORT_SYMBOL_GPL(ieee80211_key_removed);
+-
+ static void __ieee80211_set_default_key(struct ieee80211_sub_if_data *sdata,
+ int idx, bool uni, bool multi)
+ {
+--- a/net/mac80211/mlme.c
++++ b/net/mac80211/mlme.c
+@@ -1108,7 +1108,7 @@ void ieee80211_dynamic_ps_timer(unsigned
+ }
+
+ /* MLME */
+-static void ieee80211_sta_wmm_params(struct ieee80211_local *local,
++static bool ieee80211_sta_wmm_params(struct ieee80211_local *local,
+ struct ieee80211_sub_if_data *sdata,
+ u8 *wmm_param, size_t wmm_param_len)
+ {
+@@ -1119,23 +1119,23 @@ static void ieee80211_sta_wmm_params(str
+ u8 *pos, uapsd_queues = 0;
+
+ if (!local->ops->conf_tx)
+- return;
++ return false;
+
+ if (local->hw.queues < IEEE80211_NUM_ACS)
+- return;
++ return false;
+
+ if (!wmm_param)
+- return;
++ return false;
+
+ if (wmm_param_len < 8 || wmm_param[5] /* version */ != 1)
+- return;
++ return false;
+
+ if (ifmgd->flags & IEEE80211_STA_UAPSD_ENABLED)
+ uapsd_queues = ifmgd->uapsd_queues;
+
+ count = wmm_param[6] & 0x0f;
+ if (count == ifmgd->wmm_last_param_set)
+- return;
++ return false;
+ ifmgd->wmm_last_param_set = count;
+
+ pos = wmm_param + 8;
+@@ -1202,6 +1202,7 @@ static void ieee80211_sta_wmm_params(str
+
+ /* enable WMM or activate new settings */
+ sdata->vif.bss_conf.qos = true;
++ return true;
+ }
+
+ static void __ieee80211_stop_poll(struct ieee80211_sub_if_data *sdata)
+@@ -2435,14 +2436,6 @@ static void ieee80211_rx_mgmt_beacon(str
+ directed_tim = ieee80211_check_tim(elems.tim, elems.tim_len,
+ ifmgd->aid);
+
+- if (ncrc != ifmgd->beacon_crc || !ifmgd->beacon_crc_valid) {
+- ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems,
+- true);
+-
+- ieee80211_sta_wmm_params(local, sdata, elems.wmm_param,
+- elems.wmm_param_len);
+- }
+-
+ if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) {
+ if (directed_tim) {
+ if (local->hw.conf.dynamic_ps_timeout > 0) {
+@@ -2473,6 +2466,13 @@ static void ieee80211_rx_mgmt_beacon(str
+ ifmgd->beacon_crc = ncrc;
+ ifmgd->beacon_crc_valid = true;
+
++ ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems,
++ true);
++
++ if (ieee80211_sta_wmm_params(local, sdata, elems.wmm_param,
++ elems.wmm_param_len))
++ changed |= BSS_CHANGED_QOS;
++
+ if (elems.erp_info && elems.erp_info_len >= 1) {
+ erp_valid = true;
+ erp_value = elems.erp_info[0];
+--- a/net/mac80211/rc80211_minstrel_ht.c
++++ b/net/mac80211/rc80211_minstrel_ht.c
+@@ -626,8 +626,12 @@ minstrel_ht_get_rate(void *priv, struct
+
+ #ifdef CONFIG_MAC80211_DEBUGFS
+ /* use fixed index if set */
+- if (mp->fixed_rate_idx != -1)
+- sample_idx = mp->fixed_rate_idx;
++ if (mp->fixed_rate_idx != -1) {
++ mi->max_tp_rate = mp->fixed_rate_idx;
++ mi->max_tp_rate2 = mp->fixed_rate_idx;
++ mi->max_prob_rate = mp->fixed_rate_idx;
++ sample_idx = -1;
++ }
+ #endif
+
+ if (sample_idx >= 0) {
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
-@@ -2281,6 +2281,7 @@ ieee80211_rx_h_action(struct ieee80211_r
+@@ -2262,6 +2262,7 @@ ieee80211_rx_h_action(struct ieee80211_r
sdata->vif.type != NL80211_IFTYPE_MESH_POINT &&
sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
sdata->vif.type != NL80211_IFTYPE_AP &&
sdata->vif.type != NL80211_IFTYPE_ADHOC)
break;
-@@ -2495,14 +2496,15 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_
+@@ -2479,14 +2480,15 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_
if (!ieee80211_vif_is_mesh(&sdata->vif) &&
sdata->vif.type != NL80211_IFTYPE_ADHOC &&
break;
case cpu_to_le16(IEEE80211_STYPE_ASSOC_RESP):
case cpu_to_le16(IEEE80211_STYPE_REASSOC_RESP):
-@@ -2833,10 +2835,16 @@ static int prepare_for_handlers(struct i
+@@ -2817,10 +2819,16 @@ static int prepare_for_handlers(struct i
}
break;
case NL80211_IFTYPE_WDS:
WLAN_STA_CLEAR_PS_FILT,
WLAN_STA_MFP,
WLAN_STA_BLOCK_BA,
---- a/drivers/net/wireless/ath/ath9k/ath9k.h
-+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -214,6 +214,7 @@ struct ath_frame_info {
- enum ath9k_key_type keytype;
- u8 keyix;
- u8 retries;
-+ u8 rtscts_rate;
- };
-
- struct ath_buf_state {
-@@ -721,6 +722,7 @@ extern int ath9k_modparam_nohwcrypt;
- extern int led_blink;
- extern bool is_ath9k_unloaded;
-
-+u8 ath9k_parse_mpdudensity(u8 mpdudensity);
- irqreturn_t ath_isr(int irq, void *dev);
- int ath9k_init_device(u16 devid, struct ath_softc *sc,
- const struct ath_bus_ops *bus_ops);
---- a/drivers/net/wireless/ath/ath9k/xmit.c
-+++ b/drivers/net/wireless/ath/ath9k/xmit.c
-@@ -938,6 +938,7 @@ static void ath_buf_set_rate(struct ath_
- struct ieee80211_tx_rate *rates;
- const struct ieee80211_rate *rate;
- struct ieee80211_hdr *hdr;
-+ struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu);
- int i;
- u8 rix = 0;
-
-@@ -948,18 +949,7 @@ static void ath_buf_set_rate(struct ath_
-
- /* set dur_update_en for l-sig computation except for PS-Poll frames */
- info->dur_update = !ieee80211_is_pspoll(hdr->frame_control);
--
-- /*
-- * We check if Short Preamble is needed for the CTS rate by
-- * checking the BSS's global flag.
-- * But for the rate series, IEEE80211_TX_RC_USE_SHORT_PREAMBLE is used.
-- */
-- rate = ieee80211_get_rts_cts_rate(sc->hw, tx_info);
-- info->rtscts_rate = rate->hw_value;
--
-- if (tx_info->control.vif &&
-- tx_info->control.vif->bss_conf.use_short_preamble)
-- info->rtscts_rate |= rate->hw_value_short;
-+ info->rtscts_rate = fi->rtscts_rate;
-
- for (i = 0; i < 4; i++) {
- bool is_40, is_sgi, is_sp;
-@@ -1001,13 +991,13 @@ static void ath_buf_set_rate(struct ath_
- }
-
- /* legacy rates */
-+ rate = &sc->sbands[tx_info->band].bitrates[rates[i].idx];
- if ((tx_info->band == IEEE80211_BAND_2GHZ) &&
- !(rate->flags & IEEE80211_RATE_ERP_G))
- phy = WLAN_RC_PHY_CCK;
- else
- phy = WLAN_RC_PHY_OFDM;
-
-- rate = &sc->sbands[tx_info->band].bitrates[rates[i].idx];
- info->rates[i].Rate = rate->hw_value;
- if (rate->hw_value_short) {
- if (rates[i].flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE)
-@@ -1175,6 +1165,7 @@ int ath_tx_aggr_start(struct ath_softc *
- {
- struct ath_atx_tid *txtid;
- struct ath_node *an;
-+ u8 density;
-
- an = (struct ath_node *)sta->drv_priv;
- txtid = ATH_AN_2_TID(an, tid);
-@@ -1182,6 +1173,17 @@ int ath_tx_aggr_start(struct ath_softc *
- if (txtid->state & (AGGR_CLEANUP | AGGR_ADDBA_COMPLETE))
- return -EAGAIN;
-
-+ /* update ampdu factor/density, they may have changed. This may happen
-+ * in HT IBSS when a beacon with HT-info is received after the station
-+ * has already been added.
-+ */
-+ if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) {
-+ an->maxampdu = 1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
-+ sta->ht_cap.ampdu_factor);
-+ density = ath9k_parse_mpdudensity(sta->ht_cap.ampdu_density);
-+ an->mpdudensity = density;
-+ }
-+
- txtid->state |= AGGR_ADDBA_PROGRESS;
- txtid->paused = true;
- *ssn = txtid->seq_start = txtid->seq_next;
-@@ -1776,10 +1778,22 @@ static void setup_frame_info(struct ieee
- struct ieee80211_sta *sta = tx_info->control.sta;
- struct ieee80211_key_conf *hw_key = tx_info->control.hw_key;
- struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
-+ const struct ieee80211_rate *rate;
- struct ath_frame_info *fi = get_frame_info(skb);
- struct ath_node *an = NULL;
- enum ath9k_key_type keytype;
-+ bool short_preamble = false;
-+
-+ /*
-+ * We check if Short Preamble is needed for the CTS rate by
-+ * checking the BSS's global flag.
-+ * But for the rate series, IEEE80211_TX_RC_USE_SHORT_PREAMBLE is used.
-+ */
-+ if (tx_info->control.vif &&
-+ tx_info->control.vif->bss_conf.use_short_preamble)
-+ short_preamble = true;
-
-+ rate = ieee80211_get_rts_cts_rate(hw, tx_info);
- keytype = ath9k_cmn_get_hw_crypto_keytype(skb);
-
- if (sta)
-@@ -1794,6 +1808,9 @@ static void setup_frame_info(struct ieee
- fi->keyix = ATH9K_TXKEYIX_INVALID;
- fi->keytype = keytype;
- fi->framelen = framelen;
-+ fi->rtscts_rate = rate->hw_value;
-+ if (short_preamble)
-+ fi->rtscts_rate |= rate->hw_value_short;
- }
-
- u8 ath_txchainmask_reduction(struct ath_softc *sc, u8 chainmask, u32 rate)
---- a/net/wireless/nl80211.c
-+++ b/net/wireless/nl80211.c
-@@ -2246,6 +2246,33 @@ static int nl80211_parse_beacon(struct g
- return 0;
- }
-
-+static bool nl80211_get_ap_channel(struct cfg80211_registered_device *rdev,
-+ struct cfg80211_ap_settings *params)
-+{
-+ struct wireless_dev *wdev;
-+ bool ret = false;
-+
-+ mutex_lock(&rdev->devlist_mtx);
-+
-+ list_for_each_entry(wdev, &rdev->netdev_list, list) {
-+ if (wdev->iftype != NL80211_IFTYPE_AP &&
-+ wdev->iftype != NL80211_IFTYPE_P2P_GO)
-+ continue;
-+
-+ if (!wdev->preset_chan)
-+ continue;
-+
-+ params->channel = wdev->preset_chan;
-+ params->channel_type = wdev->preset_chantype;
-+ ret = true;
-+ break;
-+ }
-+
-+ mutex_unlock(&rdev->devlist_mtx);
-+
-+ return ret;
-+}
-+
- static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
+--- a/net/mac80211/tx.c
++++ b/net/mac80211/tx.c
+@@ -2716,7 +2716,7 @@ EXPORT_SYMBOL(ieee80211_get_buffered_bc)
+ void ieee80211_tx_skb_tid(struct ieee80211_sub_if_data *sdata,
+ struct sk_buff *skb, int tid)
{
- struct cfg80211_registered_device *rdev = info->user_ptr[0];
-@@ -2348,7 +2375,7 @@ static int nl80211_start_ap(struct sk_bu
- } else if (wdev->preset_chan) {
- params.channel = wdev->preset_chan;
- params.channel_type = wdev->preset_chantype;
-- } else
-+ } else if (!nl80211_get_ap_channel(rdev, ¶ms))
- return -EINVAL;
-
- if (!cfg80211_can_beacon_sec_chan(&rdev->wiphy, params.channel,
-@@ -2356,8 +2383,11 @@ static int nl80211_start_ap(struct sk_bu
- return -EINVAL;
-
- err = rdev->ops->start_ap(&rdev->wiphy, dev, ¶ms);
-- if (!err)
-+ if (!err) {
-+ wdev->preset_chan = params.channel;
-+ wdev->preset_chantype = params.channel_type;
- wdev->beacon_interval = params.beacon_interval;
-+ }
- return err;
- }
-
---- a/drivers/net/wireless/ath/ath9k/link.c
-+++ b/drivers/net/wireless/ath/ath9k/link.c
-@@ -407,6 +407,7 @@ void ath_ani_calibrate(unsigned long dat
- longcal ? "long" : "", shortcal ? "short" : "",
- aniflag ? "ani" : "", common->ani.caldone ? "true" : "false");
-
-+ ath9k_debug_samp_bb_mac(sc);
- ath9k_ps_restore(sc);
-
- set_timer:
-@@ -415,7 +416,6 @@ set_timer:
- * The interval must be the shortest necessary to satisfy ANI,
- * short calibration and long calibration.
- */
-- ath9k_debug_samp_bb_mac(sc);
- cal_interval = ATH_LONG_CALINTERVAL;
- if (sc->sc_ah->config.enable_ani)
- cal_interval = min(cal_interval,
---- a/drivers/net/wireless/ath/ath.h
-+++ b/drivers/net/wireless/ath/ath.h
-@@ -143,6 +143,7 @@ struct ath_common {
- u32 keymax;
- DECLARE_BITMAP(keymap, ATH_KEYMAX);
- DECLARE_BITMAP(tkip_keymap, ATH_KEYMAX);
-+ DECLARE_BITMAP(ccmp_keymap, ATH_KEYMAX);
- enum ath_crypt_caps crypt_caps;
-
- unsigned int clockrate;
---- a/drivers/net/wireless/ath/ath9k/recv.c
-+++ b/drivers/net/wireless/ath/ath9k/recv.c
-@@ -785,7 +785,8 @@ static bool ath9k_rx_accept(struct ath_c
- * descriptor does contain a valid key index. This has been observed
- * mostly with CCMP encryption.
- */
-- if (rx_stats->rs_keyix == ATH9K_RXKEYIX_INVALID)
-+ if (rx_stats->rs_keyix == ATH9K_RXKEYIX_INVALID ||
-+ !test_bit(rx_stats->rs_keyix, common->ccmp_keymap))
- rx_stats->rs_status &= ~ATH9K_RXERR_KEYMISS;
-
- if (!rx_stats->rs_datalen) {
---- a/drivers/net/wireless/ath/key.c
-+++ b/drivers/net/wireless/ath/key.c
-@@ -556,6 +556,9 @@ int ath_key_config(struct ath_common *co
- return -EIO;
-
- set_bit(idx, common->keymap);
-+ if (key->cipher == WLAN_CIPHER_SUITE_CCMP)
-+ set_bit(idx, common->ccmp_keymap);
-+
- if (key->cipher == WLAN_CIPHER_SUITE_TKIP) {
- set_bit(idx + 64, common->keymap);
- set_bit(idx, common->tkip_keymap);
-@@ -582,6 +585,7 @@ void ath_key_delete(struct ath_common *c
- return;
-
- clear_bit(key->hw_key_idx, common->keymap);
-+ clear_bit(key->hw_key_idx, common->ccmp_keymap);
- if (key->cipher != WLAN_CIPHER_SUITE_TKIP)
- return;
+- int ac = ieee802_1d_to_ac[tid];
++ int ac = ieee802_1d_to_ac[tid & 7];
+ skb_set_mac_header(skb, 0);
+ skb_set_network_header(skb, 0);
#include <asm/unaligned.h>
#include "hw.h"
-@@ -523,8 +524,16 @@ static int ath9k_hw_init_macaddr(struct
+@@ -526,8 +527,16 @@ static int ath9k_hw_init_macaddr(struct
common->macaddr[2 * i] = eeval >> 8;
common->macaddr[2 * i + 1] = eeval & 0xff;
}
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
-@@ -1699,6 +1699,8 @@ void regulatory_hint_11d(struct wiphy *w
+@@ -1702,6 +1702,8 @@ void regulatory_hint_11d(struct wiphy *w
enum environment_cap env = ENVIRON_ANY;
struct regulatory_request *request;
mutex_lock(®_mutex);
if (unlikely(!last_request))
-@@ -1934,6 +1936,8 @@ static void restore_regulatory_settings(
+@@ -1937,6 +1939,8 @@ static void restore_regulatory_settings(
void regulatory_hint_disconnect(void)
{
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
-@@ -776,17 +776,11 @@ int ieee80211_register_hw(struct ieee802
+@@ -786,17 +786,11 @@ int ieee80211_register_hw(struct ieee802
*/
for (i = 0; i < hw->wiphy->n_iface_combinations; i++) {
const struct ieee80211_iface_combination *c;
drivers/net/wireless/ath/ath5k/debug.c | 86 ++++++++++++++++++++++++++++++++
1 files changed, 86 insertions(+), 0 deletions(-)
-diff --git a/drivers/net/wireless/ath/ath5k/debug.c b/drivers/net/wireless/ath/ath5k/debug.c
-index 8c5ce8b..bb41066 100644
--- a/drivers/net/wireless/ath/ath5k/debug.c
+++ b/drivers/net/wireless/ath/ath5k/debug.c
-@@ -815,6 +815,89 @@ static const struct file_operations fops_ani = {
+@@ -812,6 +812,89 @@ static const struct file_operations fops
.llseek = default_llseek,
};
/* debugfs: queues etc */
-@@ -906,6 +989,9 @@ ath5k_debug_init_device(struct ath5k_hw *ah)
+@@ -903,6 +986,9 @@ ath5k_debug_init_device(struct ath5k_hw
debugfs_create_file("beacon", S_IWUSR | S_IRUSR, phydir, ah,
&fops_beacon);
debugfs_create_file("reset", S_IWUSR, phydir, ah, &fops_reset);
debugfs_create_file("antenna", S_IWUSR | S_IRUSR, phydir, ah,
---
--- a/drivers/net/wireless/ath/ath9k/debug.c
+++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -1533,6 +1533,53 @@ static const struct file_operations fops
+@@ -1532,6 +1532,53 @@ static const struct file_operations fops
#endif
int ath9k_init_debug(struct ath_hw *ah)
{
struct ath_common *common = ath9k_hw_common(ah);
-@@ -1596,5 +1643,8 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1595,5 +1642,8 @@ int ath9k_init_debug(struct ath_hw *ah)
debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR,
sc->debug.debugfs_phy, &sc->sc_ah->gpio_val);
ath_err(common, "Reading Magic # failed\n");
--- a/drivers/net/wireless/ath/ath9k/hw.h
+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -657,6 +657,7 @@ enum ath_cal_list {
+@@ -658,6 +658,7 @@ enum ath_cal_list {
#define AH_USE_EEPROM 0x1
#define AH_UNPLUGGED 0x2 /* The card has been physically removed. */
#define AH_FASTCC 0x4
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1928,8 +1928,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
+@@ -1956,8 +1956,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
REG_WRITE(ah, AR_OBS, 8);
if (ah->config.rx_intr_mitigation) {
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -641,6 +641,7 @@ struct ath_softc {
+@@ -649,6 +649,7 @@ struct ath_softc {
struct ieee80211_hw *hw;
struct device *dev;
struct survey_info *cur_survey;
struct survey_info survey[ATH9K_NUM_CHANNELS];
-@@ -709,6 +710,7 @@ struct ath_softc {
+@@ -717,6 +718,7 @@ struct ath_softc {
struct dfs_pattern_detector *dfs_detector;
};
--- a/drivers/net/wireless/ath/ath9k/debug.c
+++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -1580,6 +1580,50 @@ static const struct file_operations fops
+@@ -1579,6 +1579,50 @@ static const struct file_operations fops
.owner = THIS_MODULE
};
int ath9k_init_debug(struct ath_hw *ah)
{
struct ath_common *common = ath9k_hw_common(ah);
-@@ -1646,5 +1690,8 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1645,5 +1689,8 @@ int ath9k_init_debug(struct ath_hw *ah)
debugfs_create_file("eeprom", S_IRUSR, sc->debug.debugfs_phy, sc,
&fops_eeprom);
}
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1124,7 +1124,7 @@ static void ath9k_disable_ps(struct ath_
+@@ -1084,7 +1084,7 @@ static void ath9k_disable_ps(struct ath_
ath_dbg(common, PS, "PowerSave disabled\n");
}
{
struct ath_softc *sc = hw->priv;
struct ath_hw *ah = sc->sc_ah;
-@@ -1175,9 +1175,11 @@ static int ath9k_config(struct ieee80211
+@@ -1138,9 +1138,11 @@ static int ath9k_config(struct ieee80211
if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) || reset_channel) {
struct ieee80211_channel *curchan = hw->conf.channel;
if (ah->curchan)
old_pos = ah->curchan - &ah->channels[0];
-@@ -1220,7 +1222,23 @@ static int ath9k_config(struct ieee80211
+@@ -1183,7 +1185,23 @@ static int ath9k_config(struct ieee80211
memset(&sc->survey[pos], 0, sizeof(struct survey_info));
}
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
-@@ -814,6 +814,7 @@ static const struct net_device_ops ieee8
+@@ -916,6 +916,7 @@ static const struct net_device_ops ieee8
static void ieee80211_if_setup(struct net_device *dev)
{
ether_setup(dev);
u16 listen_interval;
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
-@@ -1940,7 +1940,7 @@ static int ieee80211_get_tx_power(struct
+@@ -1956,7 +1956,7 @@ static int ieee80211_get_tx_power(struct
{
struct ieee80211_local *local = wiphy_priv(wiphy);
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1245,6 +1245,8 @@ int ath9k_config(struct ieee80211_hw *hw
+@@ -1208,6 +1208,8 @@ int ath9k_config(struct ieee80211_hw *hw
return -EINVAL;
}
/*
* The most recent snapshot of channel->noisefloor for the old
* channel is only available after the hardware reset. Copy it to
-@@ -1259,6 +1261,7 @@ int ath9k_config(struct ieee80211_hw *hw
+@@ -1222,6 +1224,7 @@ int ath9k_config(struct ieee80211_hw *hw
sc->config.txpowlimit = 2 * conf->power_level;
ath9k_cmn_update_txpow(ah, sc->curtxpow,
sc->config.txpowlimit, &sc->curtxpow);
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
-@@ -1263,6 +1263,7 @@ ieee80211_rx_h_sta_process(struct ieee80
+@@ -1254,6 +1254,7 @@ ieee80211_rx_h_sta_process(struct ieee80
struct sk_buff *skb = rx->skb;
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
if (!sta)
return RX_CONTINUE;
-@@ -1307,6 +1308,19 @@ ieee80211_rx_h_sta_process(struct ieee80
+@@ -1298,6 +1299,19 @@ ieee80211_rx_h_sta_process(struct ieee80
ewma_add(&sta->avg_signal, -status->signal);
}
* exchange sequence.
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
-@@ -256,6 +256,8 @@ struct sta_info *sta_info_alloc(struct i
+@@ -254,6 +254,8 @@ struct sta_info *sta_info_alloc(struct i
do_posix_clock_monotonic_gettime(&uptime);
sta->last_connected = uptime.tv_sec;
ewma_init(&sta->avg_signal, 1024, 8);
kfree(sta);
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
-@@ -527,6 +527,8 @@ struct station_parameters {
+@@ -546,6 +546,8 @@ struct station_parameters {
* @STATION_INFO_STA_FLAGS: @sta_flags filled
* @STATION_INFO_BEACON_LOSS_COUNT: @beacon_loss_count filled
* @STATION_INFO_T_OFFSET: @t_offset filled
*/
enum station_info_flags {
STATION_INFO_INACTIVE_TIME = 1<<0,
-@@ -550,6 +552,8 @@ enum station_info_flags {
+@@ -569,6 +571,8 @@ enum station_info_flags {
STATION_INFO_STA_FLAGS = 1<<18,
STATION_INFO_BEACON_LOSS_COUNT = 1<<19,
STATION_INFO_T_OFFSET = 1<<20,
};
/**
-@@ -631,6 +635,9 @@ struct sta_bss_parameters {
- NOTE: For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
- * @signal_avg: avg signal strength, type depends on the wiphy's signal_type
- NOTE: For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
+@@ -652,6 +656,9 @@ struct sta_bss_parameters {
+ * For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
+ * @signal_avg: Average signal strength, type depends on the wiphy's signal_type.
+ * For CFG80211_SIGNAL_TYPE_MBM, value is expressed in _dBm_.
+ * @chains: bitmask for filled values in @chain_signal, @chain_signal_avg
+ * @chain_signal: per-chain signal strength of last received packet in dBm
+ * @chain_signal_avg: per-chain signal strength average in dBm
* @txrate: current unicast bitrate from this station
* @rxrate: current unicast bitrate to this station
* @rx_packets: packets received from this station
-@@ -663,6 +670,11 @@ struct station_info {
+@@ -684,6 +691,11 @@ struct station_info {
u8 plink_state;
s8 signal;
s8 signal_avg;
u8 rs_num_delims;
--- a/drivers/net/wireless/ath/ath9k/recv.c
+++ b/drivers/net/wireless/ath/ath9k/recv.c
-@@ -952,6 +952,7 @@ static int ath9k_rx_skb_preprocess(struc
+@@ -955,6 +955,7 @@ static int ath9k_rx_skb_preprocess(struc
bool *decrypt_error)
{
struct ath_hw *ah = common->ah;
/*
* everything but the rate is checked here, the rate check is done
-@@ -977,6 +978,20 @@ static int ath9k_rx_skb_preprocess(struc
+@@ -980,6 +981,20 @@ static int ath9k_rx_skb_preprocess(struc
if (rx_stats->rs_moreaggr)
rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL;
if (ads.ds_rxstatus8 & AR_RxKeyIdxValid)
--- a/drivers/net/wireless/ath/ath9k/debug.c
+++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -998,12 +998,12 @@ void ath_debug_stat_rx(struct ath_softc
+@@ -997,12 +997,12 @@ void ath_debug_stat_rx(struct ath_softc
#ifdef CONFIG_ATH9K_MAC_DEBUG
spin_lock(&sc->debug.samp_lock);
RX_SAMP_DBG(jiffies) = jiffies;
RX_SAMP_DBG(rate) = rs->rs_rate;
--- a/include/linux/nl80211.h
+++ b/include/linux/nl80211.h
-@@ -1699,6 +1699,8 @@ enum nl80211_sta_bss_param {
+@@ -1729,6 +1729,8 @@ enum nl80211_sta_bss_param {
* @NL80211_STA_INFO_STA_FLAGS: Contains a struct nl80211_sta_flag_update.
* @NL80211_STA_INFO_BEACON_LOSS: count of times beacon loss was detected (u32)
* @NL80211_STA_INFO_T_OFFSET: timing offset with respect to this STA (s64)
* @__NL80211_STA_INFO_AFTER_LAST: internal
* @NL80211_STA_INFO_MAX: highest possible station info attribute
*/
-@@ -1723,6 +1725,8 @@ enum nl80211_sta_info {
+@@ -1753,6 +1755,8 @@ enum nl80211_sta_info {
NL80211_STA_INFO_STA_FLAGS,
NL80211_STA_INFO_BEACON_LOSS,
NL80211_STA_INFO_T_OFFSET,
__NL80211_STA_INFO_AFTER_LAST,
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
-@@ -2553,6 +2553,32 @@ nla_put_failure:
+@@ -2648,6 +2648,32 @@ nla_put_failure:
return false;
}
static int nl80211_send_station(struct sk_buff *msg, u32 pid, u32 seq,
int flags,
struct cfg80211_registered_device *rdev,
-@@ -2614,6 +2640,18 @@ static int nl80211_send_station(struct s
+@@ -2709,6 +2735,18 @@ static int nl80211_send_station(struct s
default:
break;
}
NL80211_STA_INFO_TX_BITRATE))
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
-@@ -354,6 +354,7 @@ static void sta_set_sinfo(struct sta_inf
- {
+@@ -355,6 +355,7 @@ static void sta_set_sinfo(struct sta_inf
struct ieee80211_sub_if_data *sdata = sta->sdata;
+ struct ieee80211_local *local = sdata->local;
struct timespec uptime;
+ int i;
sinfo->generation = sdata->local->sta_generation;
-@@ -391,6 +392,17 @@ static void sta_set_sinfo(struct sta_inf
- sinfo->signal = (s8)sta->last_signal;
+@@ -394,6 +395,17 @@ static void sta_set_sinfo(struct sta_inf
+ sinfo->signal = (s8)sta->last_signal;
sinfo->signal_avg = (s8) -ewma_read(&sta->avg_signal);
}
+ if (sta->chains) {
--- a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
+++ b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
-@@ -533,108 +533,108 @@ static const u32 ar9300_2p2_baseband_cor
+@@ -534,108 +534,108 @@ static const u32 ar9300_2p2_baseband_cor
static const u32 ar9300Modes_high_power_tx_gain_table_2p2[][5] = {
/* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
-@@ -519,6 +519,9 @@ static inline u16 ath9k_btcoex_aggr_limi
+@@ -528,6 +528,9 @@ static inline void ath9k_btcoex_stop_gen
#ifdef CONFIG_MAC80211_LEDS
void ath_init_leds(struct ath_softc *sc);
void ath_deinit_leds(struct ath_softc *sc);
#else
static inline void ath_init_leds(struct ath_softc *sc)
{
-@@ -637,6 +640,13 @@ struct ath9k_vif_iter_data {
+@@ -645,6 +648,13 @@ struct ath9k_vif_iter_data {
int nadhocs; /* number of adhoc vifs */
};
struct ath_softc {
struct ieee80211_hw *hw;
struct device *dev;
-@@ -678,9 +688,8 @@ struct ath_softc {
+@@ -686,9 +696,8 @@ struct ath_softc {
struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
#ifdef CONFIG_MAC80211_LEDS
#endif
--- a/drivers/net/wireless/ath/ath9k/debug.c
+++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -1256,6 +1256,61 @@ static const struct file_operations fops
+@@ -1255,6 +1255,61 @@ static const struct file_operations fops
.llseek = default_llseek,
};
#ifdef CONFIG_ATH9K_MAC_DEBUG
void ath9k_debug_samp_bb_mac(struct ath_softc *sc)
-@@ -1681,6 +1736,11 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1680,6 +1735,11 @@ int ath9k_init_debug(struct ath_hw *ah)
&fops_samps);
#endif
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
-@@ -702,6 +702,8 @@ struct ieee80211_sub_if_data {
+@@ -710,6 +710,8 @@ struct ieee80211_sub_if_data {
/* bitmap of allowed (non-MCS) rate indexes for rate control */
u32 rc_rateidx_mask[IEEE80211_NUM_BANDS];
union {
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
-@@ -2119,9 +2119,20 @@ static int ieee80211_set_bitrate_mask(st
+@@ -2135,9 +2135,20 @@ static int ieee80211_set_bitrate_mask(st
}
for (i = 0; i < IEEE80211_NUM_BANDS; i++) {
return 0;
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
-@@ -3676,7 +3676,7 @@ void ieee80211_send_bar(struct ieee80211
+@@ -3665,7 +3665,7 @@ void ieee80211_send_bar(struct ieee80211
* (deprecated; this will be removed once drivers get updated to use
* rate_idx_mask)
* @rate_idx_mask: user-requested (legacy) rate mask
* @bss: whether this frame is sent out in AP or IBSS mode
*/
struct ieee80211_tx_rate_control {
-@@ -3688,7 +3688,7 @@ struct ieee80211_tx_rate_control {
+@@ -3677,7 +3677,7 @@ struct ieee80211_tx_rate_control {
bool rts, short_preamble;
u8 max_rate_idx;
u32 rate_idx_mask;
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
-@@ -637,9 +637,11 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
+@@ -624,9 +624,11 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
txrc.max_rate_idx = -1;
else
txrc.max_rate_idx = fls(txrc.rate_idx_mask) - 1;
txrc.bss = (tx->sdata->vif.type == NL80211_IFTYPE_AP ||
tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT ||
tx->sdata->vif.type == NL80211_IFTYPE_ADHOC);
-@@ -2475,8 +2477,6 @@ struct sk_buff *ieee80211_beacon_get_tim
+@@ -2454,8 +2456,6 @@ struct sk_buff *ieee80211_beacon_get_tim
txrc.max_rate_idx = -1;
else
txrc.max_rate_idx = fls(txrc.rate_idx_mask) - 1;
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -1929,12 +1929,29 @@ static u32 fill_chainmask(u32 cap, u32 n
+@@ -1840,12 +1840,29 @@ static u32 fill_chainmask(u32 cap, u32 n
return filled;
}
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -676,10 +676,6 @@ static int __ath9k_hw_init(struct ath_hw
+@@ -680,10 +680,6 @@ static int __ath9k_hw_init(struct ath_hw
if (!AR_SREV_9300_20_OR_LATER(ah))
ah->ani_function &= ~ATH9K_ANI_MRC_CCK;
+++ /dev/null
---- a/drivers/net/wireless/ath/ath9k/ani.c
-+++ b/drivers/net/wireless/ath/ath9k/ani.c
-@@ -140,7 +140,8 @@ static void ath9k_ani_restart(struct ath
- }
-
- /* Adjust the OFDM Noise Immunity Level */
--static void ath9k_hw_set_ofdm_nil(struct ath_hw *ah, u8 immunityLevel)
-+static void ath9k_hw_set_ofdm_nil(struct ath_hw *ah, u8 immunityLevel,
-+ bool scan)
- {
- struct ar5416AniState *aniState = &ah->curchan->ani;
- struct ath_common *common = ath9k_hw_common(ah);
-@@ -153,7 +154,7 @@ static void ath9k_hw_set_ofdm_nil(struct
- immunityLevel, BEACON_RSSI(ah),
- aniState->rssiThrLow, aniState->rssiThrHigh);
-
-- if (aniState->update_ani)
-+ if (!scan)
- aniState->ofdmNoiseImmunityLevel = immunityLevel;
-
- entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel];
-@@ -199,13 +200,14 @@ static void ath9k_hw_ani_ofdm_err_trigge
- aniState = &ah->curchan->ani;
-
- if (aniState->ofdmNoiseImmunityLevel < ATH9K_ANI_OFDM_MAX_LEVEL)
-- ath9k_hw_set_ofdm_nil(ah, aniState->ofdmNoiseImmunityLevel + 1);
-+ ath9k_hw_set_ofdm_nil(ah, aniState->ofdmNoiseImmunityLevel + 1, false);
- }
-
- /*
- * Set the ANI settings to match an CCK level.
- */
--static void ath9k_hw_set_cck_nil(struct ath_hw *ah, u_int8_t immunityLevel)
-+static void ath9k_hw_set_cck_nil(struct ath_hw *ah, u_int8_t immunityLevel,
-+ bool scan)
- {
- struct ar5416AniState *aniState = &ah->curchan->ani;
- struct ath_common *common = ath9k_hw_common(ah);
-@@ -222,7 +224,7 @@ static void ath9k_hw_set_cck_nil(struct
- immunityLevel > ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI)
- immunityLevel = ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI;
-
-- if (aniState->update_ani)
-+ if (!scan)
- aniState->cckNoiseImmunityLevel = immunityLevel;
-
- entry_ofdm = &ofdm_level_table[aniState->ofdmNoiseImmunityLevel];
-@@ -254,7 +256,8 @@ static void ath9k_hw_ani_cck_err_trigger
- aniState = &ah->curchan->ani;
-
- if (aniState->cckNoiseImmunityLevel < ATH9K_ANI_CCK_MAX_LEVEL)
-- ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel + 1);
-+ ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel + 1,
-+ false);
- }
-
- /*
-@@ -270,13 +273,15 @@ static void ath9k_hw_ani_lower_immunity(
- /* lower OFDM noise immunity */
- if (aniState->ofdmNoiseImmunityLevel > 0 &&
- (aniState->ofdmsTurn || aniState->cckNoiseImmunityLevel == 0)) {
-- ath9k_hw_set_ofdm_nil(ah, aniState->ofdmNoiseImmunityLevel - 1);
-+ ath9k_hw_set_ofdm_nil(ah, aniState->ofdmNoiseImmunityLevel - 1,
-+ false);
- return;
- }
-
- /* lower CCK noise immunity */
- if (aniState->cckNoiseImmunityLevel > 0)
-- ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel - 1);
-+ ath9k_hw_set_cck_nil(ah, aniState->cckNoiseImmunityLevel - 1,
-+ false);
- }
-
- /*
-@@ -338,7 +343,6 @@ void ath9k_ani_reset(struct ath_hw *ah,
- aniState->ofdmNoiseImmunityLevel,
- aniState->cckNoiseImmunityLevel);
-
-- aniState->update_ani = false;
- ofdm_nil = ATH9K_ANI_OFDM_DEF_LEVEL;
- cck_nil = ATH9K_ANI_CCK_DEF_LEVEL;
- }
-@@ -354,11 +358,9 @@ void ath9k_ani_reset(struct ath_hw *ah,
- is_scanning,
- aniState->ofdmNoiseImmunityLevel,
- aniState->cckNoiseImmunityLevel);
--
-- aniState->update_ani = true;
- }
-- ath9k_hw_set_ofdm_nil(ah, ofdm_nil);
-- ath9k_hw_set_cck_nil(ah, cck_nil);
-+ ath9k_hw_set_ofdm_nil(ah, ofdm_nil, is_scanning);
-+ ath9k_hw_set_cck_nil(ah, cck_nil, is_scanning);
-
- /*
- * enable phy counters if hw supports or if not, enable phy
-@@ -538,7 +540,6 @@ void ath9k_hw_ani_init(struct ath_hw *ah
- ani->ofdmWeakSigDetect = ATH9K_ANI_USE_OFDM_WEAK_SIG;
- ani->cckNoiseImmunityLevel = ATH9K_ANI_CCK_DEF_LEVEL;
- ani->ofdmNoiseImmunityLevel = ATH9K_ANI_OFDM_DEF_LEVEL;
-- ani->update_ani = false;
- }
-
- /*
---- a/drivers/net/wireless/ath/ath9k/ani.h
-+++ b/drivers/net/wireless/ath/ath9k/ani.h
-@@ -116,7 +116,6 @@ struct ar5416AniState {
- u8 firstepLevel;
- u8 ofdmWeakSigDetect;
- u8 cckWeakSigThreshold;
-- bool update_ani;
- u32 listenTime;
- int32_t rssiThrLow;
- int32_t rssiThrHigh;
--- /dev/null
+--- a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
++++ b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
+@@ -778,11 +778,11 @@ static const u32 ar9300Common_rx_gain_ta
+ {0x0000a074, 0x00000000},
+ {0x0000a078, 0x00000000},
+ {0x0000a07c, 0x00000000},
+- {0x0000a080, 0x1a1a1a1a},
+- {0x0000a084, 0x1a1a1a1a},
+- {0x0000a088, 0x1a1a1a1a},
+- {0x0000a08c, 0x1a1a1a1a},
+- {0x0000a090, 0x171a1a1a},
++ {0x0000a080, 0x22222229},
++ {0x0000a084, 0x1d1d1d1d},
++ {0x0000a088, 0x1d1d1d1d},
++ {0x0000a08c, 0x1d1d1d1d},
++ {0x0000a090, 0x171d1d1d},
+ {0x0000a094, 0x11111717},
+ {0x0000a098, 0x00030311},
+ {0x0000a09c, 0x00000000},
--- /dev/null
+--- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c
++++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
+@@ -561,8 +561,8 @@ static void ar9003_tx_gain_table_mode1(s
+ 5);
+ else if (AR_SREV_9340(ah))
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
+- ar9340Modes_lowest_ob_db_tx_gain_table_1p0,
+- ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0),
++ ar9340Modes_high_ob_db_tx_gain_table_1p0,
++ ARRAY_SIZE(ar9340Modes_high_ob_db_tx_gain_table_1p0),
+ 5);
+ else if (AR_SREV_9485_11(ah))
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
+@@ -605,8 +605,8 @@ static void ar9003_tx_gain_table_mode2(s
+ 5);
+ else if (AR_SREV_9340(ah))
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
+- ar9340Modes_lowest_ob_db_tx_gain_table_1p0,
+- ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0),
++ ar9340Modes_low_ob_db_tx_gain_table_1p0,
++ ARRAY_SIZE(ar9340Modes_low_ob_db_tx_gain_table_1p0),
+ 5);
+ else if (AR_SREV_9485_11(ah))
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
+@@ -639,8 +639,8 @@ static void ar9003_tx_gain_table_mode3(s
+ 5);
+ else if (AR_SREV_9340(ah))
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
+- ar9340Modes_lowest_ob_db_tx_gain_table_1p0,
+- ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0),
++ ar9340Modes_high_power_tx_gain_table_1p0,
++ ARRAY_SIZE(ar9340Modes_high_power_tx_gain_table_1p0),
+ 5);
+ else if (AR_SREV_9485_11(ah))
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
+@@ -659,6 +659,20 @@ static void ar9003_tx_gain_table_mode3(s
+ 5);
+ }
+
++static void ar9003_tx_gain_table_mode4(struct ath_hw *ah)
++{
++ if (AR_SREV_9340(ah))
++ INIT_INI_ARRAY(&ah->iniModesTxGain,
++ ar9340Modes_mixed_ob_db_tx_gain_table_1p0,
++ ARRAY_SIZE(ar9340Modes_mixed_ob_db_tx_gain_table_1p0),
++ 5);
++ else if (AR_SREV_9580(ah))
++ INIT_INI_ARRAY(&ah->iniModesTxGain,
++ ar9580_1p0_mixed_ob_db_tx_gain_table,
++ ARRAY_SIZE(ar9580_1p0_mixed_ob_db_tx_gain_table),
++ 5);
++}
++
+ static void ar9003_tx_gain_table_apply(struct ath_hw *ah)
+ {
+ switch (ar9003_hw_get_tx_gain_idx(ah)) {
+@@ -675,6 +689,9 @@ static void ar9003_tx_gain_table_apply(s
+ case 3:
+ ar9003_tx_gain_table_mode3(ah);
+ break;
++ case 4:
++ ar9003_tx_gain_table_mode4(ah);
++ break;
+ }
+ }
+
+++ /dev/null
---- a/drivers/net/wireless/ath/ath9k/ar9340_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9340_initvals.h
-@@ -1,5 +1,6 @@
- /*
-- * Copyright (c) 2011 Atheros Communications Inc.
-+ * Copyright (c) 2010-2011 Atheros Communications Inc.
-+ * Copyright (c) 2011-2012 Qualcomm Atheros 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
-@@ -18,16 +19,16 @@
- #define INITVALS_9340_H
-
- static const u32 ar9340_1p0_radio_postamble[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
- {0x000160ac, 0xa4646800, 0xa4646800, 0xa4646800, 0xa4646800},
-- {0x0001610c, 0x08000000, 0x08000000, 0x00000000, 0x00000000},
-+ {0x0001610c, 0x08000000, 0x00000000, 0x00000000, 0x00000000},
- {0x00016140, 0x10804000, 0x10804000, 0x50804000, 0x50804000},
-- {0x0001650c, 0x08000000, 0x08000000, 0x00000000, 0x00000000},
-+ {0x0001650c, 0x08000000, 0x00000000, 0x00000000, 0x00000000},
- {0x00016540, 0x10804000, 0x10804000, 0x50804000, 0x50804000},
- };
-
- static const u32 ar9340Modes_lowest_ob_db_tx_gain_table_1p0[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
- {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9},
- {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
- {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002},
-@@ -100,20 +101,20 @@ static const u32 ar9340Modes_lowest_ob_d
- };
-
- static const u32 ar9340Modes_fast_clock_1p0[][3] = {
-- /* Addr 5G_HT20 5G_HT40 */
-+ /* 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},
-+ {0x00009e00, 0x0372131c, 0x0372131c},
- {0x0000a230, 0x0000000b, 0x00000016},
- {0x0000a254, 0x00000898, 0x00001130},
- };
-
- static const u32 ar9340_1p0_radio_core[][2] = {
-- /* Addr allmodes */
-+ /* Addr allmodes */
- {0x00016000, 0x36db6db6},
- {0x00016004, 0x6db6db40},
- {0x00016008, 0x73f00000},
-@@ -146,15 +147,13 @@ static const u32 ar9340_1p0_radio_core[]
- {0x00016100, 0x04cb0001},
- {0x00016104, 0xfff80000},
- {0x00016108, 0x00080010},
-- {0x0001610c, 0x00000000},
- {0x00016140, 0x50804008},
- {0x00016144, 0x01884080},
- {0x00016148, 0x000080c0},
- {0x00016280, 0x01000015},
-- {0x00016284, 0x05530000},
-+ {0x00016284, 0x15530000},
- {0x00016288, 0x00318000},
- {0x0001628c, 0x50000000},
-- {0x00016290, 0x4080294f},
- {0x00016380, 0x00000000},
- {0x00016384, 0x00000000},
- {0x00016388, 0x00800700},
-@@ -219,13 +218,14 @@ static const u32 ar9340_1p0_radio_core[]
- };
-
- static const u32 ar9340_1p0_radio_core_40M[][2] = {
-+ /* Addr allmodes */
- {0x0001609c, 0x02566f3a},
- {0x000160ac, 0xa4647c00},
- {0x000160b0, 0x01885f5a},
- };
-
- static const u32 ar9340_1p0_mac_postamble[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
- {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160},
- {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c},
- {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38},
-@@ -237,34 +237,37 @@ static const u32 ar9340_1p0_mac_postambl
- };
-
- static const u32 ar9340_1p0_soc_postamble[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
- {0x00007010, 0x00000023, 0x00000023, 0x00000023, 0x00000023},
- };
-
- static const u32 ar9340_1p0_baseband_postamble[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
- {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8011, 0xd00a8011},
- {0x00009820, 0x206a022e, 0x206a022e, 0x206a022e, 0x206a022e},
- {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, 0x00182020, 0x00182020, 0x00182020, 0x00182020},
-+ {0x00009c00, 0x000000c4, 0x000000c4, 0x000000c4, 0x000000c4},
-+ {0x00009e00, 0x0372111a, 0x0372111a, 0x037216a0, 0x037216a0},
-+ {0x00009e04, 0x001c2020, 0x001c2020, 0x001c2020, 0x001c2020},
- {0x00009e0c, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2},
- {0x00009e10, 0x7ec88d2e, 0x7ec88d2e, 0x7ec88d2e, 0x7ec88d2e},
-- {0x00009e14, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e},
-+ {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, 0x00003fc0, 0x00003fc4, 0x00003fc4, 0x00003fc0},
-+ {0x0000a204, 0x00003ec0, 0x00003ec4, 0x00003ec4, 0x00003ec0},
- {0x0000a208, 0x00000104, 0x00000104, 0x00000004, 0x00000004},
-+ {0x0000a22c, 0x07e26a2f, 0x07e26a2f, 0x01026a2f, 0x01026a2f},
- {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},
-@@ -277,11 +280,11 @@ static const u32 ar9340_1p0_baseband_pos
- {0x0000a288, 0x00000220, 0x00000220, 0x00000110, 0x00000110},
- {0x0000a28c, 0x00011111, 0x00011111, 0x00022222, 0x00022222},
- {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18},
-- {0x0000a2d0, 0x00071981, 0x00071981, 0x00071981, 0x00071982},
-- {0x0000a2d8, 0xf999a83a, 0xf999a83a, 0xf999a83a, 0xf999a83a},
-+ {0x0000a2d0, 0x00041983, 0x00041983, 0x00041982, 0x00041982},
-+ {0x0000a2d8, 0x7999a83a, 0x7999a83a, 0x7999a83a, 0x7999a83a},
- {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
- {0x0000a830, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
-- {0x0000ae04, 0x00180000, 0x00180000, 0x00180000, 0x00180000},
-+ {0x0000ae04, 0x001c0000, 0x001c0000, 0x001c0000, 0x001c0000},
- {0x0000ae18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
- {0x0000ae1c, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c},
- {0x0000ae20, 0x000001b5, 0x000001b5, 0x000001ce, 0x000001ce},
-@@ -289,21 +292,21 @@ static const u32 ar9340_1p0_baseband_pos
- };
-
- static const u32 ar9340_1p0_baseband_core[][2] = {
-- /* Addr allmodes */
-+ /* Addr allmodes */
- {0x00009800, 0xafe68e30},
- {0x00009804, 0xfd14e000},
- {0x00009808, 0x9c0a9f6b},
- {0x0000980c, 0x04900000},
-- {0x00009814, 0xb280c00a},
-+ {0x00009814, 0x3280c00a},
- {0x00009818, 0x00000000},
- {0x0000981c, 0x00020028},
-- {0x00009834, 0x5f3ca3de},
-+ {0x00009834, 0x6400a190},
- {0x00009838, 0x0108ecff},
-- {0x0000983c, 0x14750600},
-+ {0x0000983c, 0x14000600},
- {0x00009880, 0x201fff00},
- {0x00009884, 0x00001042},
- {0x000098a4, 0x00200400},
-- {0x000098b0, 0x52440bbe},
-+ {0x000098b0, 0x32840bbe},
- {0x000098d0, 0x004b6a8e},
- {0x000098d4, 0x00000820},
- {0x000098dc, 0x00000000},
-@@ -329,7 +332,6 @@ static const u32 ar9340_1p0_baseband_cor
- {0x00009e30, 0x06336f77},
- {0x00009e34, 0x6af6532f},
- {0x00009e38, 0x0cc80c00},
-- {0x00009e3c, 0xcf946222},
- {0x00009e40, 0x0d261820},
- {0x00009e4c, 0x00001004},
- {0x00009e50, 0x00ff03f1},
-@@ -342,8 +344,6 @@ static const u32 ar9340_1p0_baseband_cor
- {0x0000a220, 0x00000000},
- {0x0000a224, 0x00000000},
- {0x0000a228, 0x10002310},
-- {0x0000a22c, 0x01036a1e},
-- {0x0000a234, 0x10000fff},
- {0x0000a23c, 0x00000000},
- {0x0000a244, 0x0c000000},
- {0x0000a2a0, 0x00000001},
-@@ -351,10 +351,6 @@ static const u32 ar9340_1p0_baseband_cor
- {0x0000a2c8, 0x00000000},
- {0x0000a2cc, 0x18c43433},
- {0x0000a2d4, 0x00000000},
-- {0x0000a2dc, 0x00000000},
-- {0x0000a2e0, 0x00000000},
-- {0x0000a2e4, 0x00000000},
-- {0x0000a2e8, 0x00000000},
- {0x0000a2ec, 0x00000000},
- {0x0000a2f0, 0x00000000},
- {0x0000a2f4, 0x00000000},
-@@ -385,7 +381,7 @@ static const u32 ar9340_1p0_baseband_cor
- {0x0000a3e8, 0x20202020},
- {0x0000a3ec, 0x20202020},
- {0x0000a3f0, 0x00000000},
-- {0x0000a3f4, 0x00000246},
-+ {0x0000a3f4, 0x00000000},
- {0x0000a3f8, 0x0cdbd380},
- {0x0000a3fc, 0x000f0f01},
- {0x0000a400, 0x8fa91f01},
-@@ -402,33 +398,17 @@ static const u32 ar9340_1p0_baseband_cor
- {0x0000a430, 0x1ce739ce},
- {0x0000a434, 0x00000000},
- {0x0000a438, 0x00001801},
-- {0x0000a43c, 0x00000000},
-+ {0x0000a43c, 0x00100000},
- {0x0000a440, 0x00000000},
- {0x0000a444, 0x00000000},
-- {0x0000a448, 0x04000080},
-+ {0x0000a448, 0x05000080},
- {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},
-+ {0x0000a64c, 0x00003c37},
- {0x0000a670, 0x03020100},
- {0x0000a674, 0x09080504},
- {0x0000a678, 0x0d0c0b0a},
-@@ -451,10 +431,6 @@ static const u32 ar9340_1p0_baseband_cor
- {0x0000a8f4, 0x00000000},
- {0x0000b2d0, 0x00000080},
- {0x0000b2d4, 0x00000000},
-- {0x0000b2dc, 0x00000000},
-- {0x0000b2e0, 0x00000000},
-- {0x0000b2e4, 0x00000000},
-- {0x0000b2e8, 0x00000000},
- {0x0000b2ec, 0x00000000},
- {0x0000b2f0, 0x00000000},
- {0x0000b2f4, 0x00000000},
-@@ -465,80 +441,108 @@ static const u32 ar9340_1p0_baseband_cor
- };
-
- static const u32 ar9340Modes_high_power_tx_gain_table_1p0[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ {0x0000a2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
-+ {0x0000a2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
-+ {0x0000a2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
-+ {0x0000a2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
-+ {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, 0x03aaa352, 0x03aaa352},
-+ {0x0000b2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
-+ {0x0000b2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
-+ {0x0000b2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
- {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},
-+ {0x0000a504, 0x04002222, 0x04002222, 0x02000001, 0x02000001},
-+ {0x0000a508, 0x09002421, 0x09002421, 0x05000003, 0x05000003},
-+ {0x0000a50c, 0x0d002621, 0x0d002621, 0x0a000005, 0x0a000005},
-+ {0x0000a510, 0x13004620, 0x13004620, 0x0e000201, 0x0e000201},
-+ {0x0000a514, 0x19004a20, 0x19004a20, 0x11000203, 0x11000203},
-+ {0x0000a518, 0x1d004e20, 0x1d004e20, 0x14000401, 0x14000401},
-+ {0x0000a51c, 0x21005420, 0x21005420, 0x18000403, 0x18000403},
-+ {0x0000a520, 0x26005e20, 0x26005e20, 0x1b000602, 0x1b000602},
-+ {0x0000a524, 0x2b005e40, 0x2b005e40, 0x1f000802, 0x1f000802},
-+ {0x0000a528, 0x2f005e42, 0x2f005e42, 0x21000620, 0x21000620},
-+ {0x0000a52c, 0x33005e44, 0x33005e44, 0x25000820, 0x25000820},
-+ {0x0000a530, 0x38005e65, 0x38005e65, 0x29000822, 0x29000822},
-+ {0x0000a534, 0x3c005e69, 0x3c005e69, 0x2d000824, 0x2d000824},
-+ {0x0000a538, 0x40005e6b, 0x40005e6b, 0x30000828, 0x30000828},
-+ {0x0000a53c, 0x44005e6d, 0x44005e6d, 0x3400082a, 0x3400082a},
-+ {0x0000a540, 0x49005e72, 0x49005e72, 0x38000849, 0x38000849},
-+ {0x0000a544, 0x4e005eb2, 0x4e005eb2, 0x3b000a2c, 0x3b000a2c},
-+ {0x0000a548, 0x53005f12, 0x53005f12, 0x3e000e2b, 0x3e000e2b},
-+ {0x0000a54c, 0x59025eb5, 0x59025eb5, 0x42000e2d, 0x42000e2d},
-+ {0x0000a550, 0x5e025f12, 0x5e025f12, 0x4500124a, 0x4500124a},
-+ {0x0000a554, 0x61027f12, 0x61027f12, 0x4900124c, 0x4900124c},
-+ {0x0000a558, 0x6702bf12, 0x6702bf12, 0x4c00126c, 0x4c00126c},
-+ {0x0000a55c, 0x6b02bf14, 0x6b02bf14, 0x4f00128c, 0x4f00128c},
-+ {0x0000a560, 0x6f02bf16, 0x6f02bf16, 0x52001290, 0x52001290},
-+ {0x0000a564, 0x6f02bf16, 0x6f02bf16, 0x56001292, 0x56001292},
-+ {0x0000a568, 0x6f02bf16, 0x6f02bf16, 0x56001292, 0x56001292},
-+ {0x0000a56c, 0x6f02bf16, 0x6f02bf16, 0x56001292, 0x56001292},
-+ {0x0000a570, 0x6f02bf16, 0x6f02bf16, 0x56001292, 0x56001292},
-+ {0x0000a574, 0x6f02bf16, 0x6f02bf16, 0x56001292, 0x56001292},
-+ {0x0000a578, 0x6f02bf16, 0x6f02bf16, 0x56001292, 0x56001292},
-+ {0x0000a57c, 0x6f02bf16, 0x6f02bf16, 0x56001292, 0x56001292},
- {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, 0x056db2db, 0x056db2db, 0x056db2db, 0x056db2db},
-+ {0x0000a584, 0x04802222, 0x04802222, 0x02800001, 0x02800001},
-+ {0x0000a588, 0x09802421, 0x09802421, 0x05800003, 0x05800003},
-+ {0x0000a58c, 0x0d802621, 0x0d802621, 0x0a800005, 0x0a800005},
-+ {0x0000a590, 0x13804620, 0x13804620, 0x0e800201, 0x0e800201},
-+ {0x0000a594, 0x19804a20, 0x19804a20, 0x11800203, 0x11800203},
-+ {0x0000a598, 0x1d804e20, 0x1d804e20, 0x14800401, 0x14800401},
-+ {0x0000a59c, 0x21805420, 0x21805420, 0x18800403, 0x18800403},
-+ {0x0000a5a0, 0x26805e20, 0x26805e20, 0x1b800602, 0x1b800602},
-+ {0x0000a5a4, 0x2b805e40, 0x2b805e40, 0x1f800802, 0x1f800802},
-+ {0x0000a5a8, 0x2f805e42, 0x2f805e42, 0x21800620, 0x21800620},
-+ {0x0000a5ac, 0x33805e44, 0x33805e44, 0x25800820, 0x25800820},
-+ {0x0000a5b0, 0x38805e65, 0x38805e65, 0x29800822, 0x29800822},
-+ {0x0000a5b4, 0x3c805e69, 0x3c805e69, 0x2d800824, 0x2d800824},
-+ {0x0000a5b8, 0x40805e6b, 0x40805e6b, 0x30800828, 0x30800828},
-+ {0x0000a5bc, 0x44805e6d, 0x44805e6d, 0x3480082a, 0x3480082a},
-+ {0x0000a5c0, 0x49805e72, 0x49805e72, 0x38800849, 0x38800849},
-+ {0x0000a5c4, 0x4e805eb2, 0x4e805eb2, 0x3b800a2c, 0x3b800a2c},
-+ {0x0000a5c8, 0x53805f12, 0x53805f12, 0x3e800e2b, 0x3e800e2b},
-+ {0x0000a5cc, 0x59825eb2, 0x59825eb2, 0x42800e2d, 0x42800e2d},
-+ {0x0000a5d0, 0x5e825f12, 0x5e825f12, 0x4580124a, 0x4580124a},
-+ {0x0000a5d4, 0x61827f12, 0x61827f12, 0x4980124c, 0x4980124c},
-+ {0x0000a5d8, 0x6782bf12, 0x6782bf12, 0x4c80126c, 0x4c80126c},
-+ {0x0000a5dc, 0x6b82bf14, 0x6b82bf14, 0x4f80128c, 0x4f80128c},
-+ {0x0000a5e0, 0x6f82bf16, 0x6f82bf16, 0x52801290, 0x52801290},
-+ {0x0000a5e4, 0x6f82bf16, 0x6f82bf16, 0x56801292, 0x56801292},
-+ {0x0000a5e8, 0x6f82bf16, 0x6f82bf16, 0x56801292, 0x56801292},
-+ {0x0000a5ec, 0x6f82bf16, 0x6f82bf16, 0x56801292, 0x56801292},
-+ {0x0000a5f0, 0x6f82bf16, 0x6f82bf16, 0x56801292, 0x56801292},
-+ {0x0000a5f4, 0x6f82bf16, 0x6f82bf16, 0x56801292, 0x56801292},
-+ {0x0000a5f8, 0x6f82bf16, 0x6f82bf16, 0x56801292, 0x56801292},
-+ {0x0000a5fc, 0x6f82bf16, 0x6f82bf16, 0x56801292, 0x56801292},
-+ {0x00016044, 0x056db2db, 0x056db2db, 0x022492db, 0x022492db},
- {0x00016048, 0x24925266, 0x24925266, 0x24925266, 0x24925266},
-- {0x00016444, 0x056db2db, 0x056db2db, 0x056db2db, 0x056db2db},
-+ {0x00016444, 0x056db2db, 0x056db2db, 0x022492db, 0x022492db},
- {0x00016448, 0x24925266, 0x24925266, 0x24925266, 0x24925266},
- };
-
- static const u32 ar9340Modes_high_ob_db_tx_gain_table_1p0[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ {0x0000a2dc, 0x01feee00, 0x01feee00, 0x03aaa352, 0x03aaa352},
-+ {0x0000a2e0, 0x0000f000, 0x0000f000, 0x03ccc584, 0x03ccc584},
-+ {0x0000a2e4, 0x01ff0000, 0x01ff0000, 0x03f0f800, 0x03f0f800},
-+ {0x0000a2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
- {0x0000a410, 0x000050d8, 0x000050d8, 0x000050d9, 0x000050d9},
- {0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000},
- {0x0000a504, 0x04002222, 0x04002222, 0x04000002, 0x04000002},
-@@ -559,7 +563,7 @@ static const u32 ar9340Modes_high_ob_db_
- {0x0000a540, 0x49005e72, 0x49005e72, 0x38001660, 0x38001660},
- {0x0000a544, 0x4e005eb2, 0x4e005eb2, 0x3b001861, 0x3b001861},
- {0x0000a548, 0x53005f12, 0x53005f12, 0x3e001a81, 0x3e001a81},
-- {0x0000a54c, 0x59025eb5, 0x59025eb5, 0x42001a83, 0x42001a83},
-+ {0x0000a54c, 0x59025eb2, 0x59025eb2, 0x42001a83, 0x42001a83},
- {0x0000a550, 0x5e025f12, 0x5e025f12, 0x44001c84, 0x44001c84},
- {0x0000a554, 0x61027f12, 0x61027f12, 0x48001ce3, 0x48001ce3},
- {0x0000a558, 0x6702bf12, 0x6702bf12, 0x4c001ce5, 0x4c001ce5},
-@@ -604,13 +608,43 @@ static const u32 ar9340Modes_high_ob_db_
- {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, 0x03aaa352, 0x03aaa352},
-+ {0x0000b2e0, 0x0000f000, 0x0000f000, 0x03ccc584, 0x03ccc584},
-+ {0x0000b2e4, 0x01ff0000, 0x01ff0000, 0x03f0f800, 0x03f0f800},
-+ {0x0000b2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
- {0x00016044, 0x03b6d2e4, 0x03b6d2e4, 0x03b6d2e4, 0x03b6d2e4},
-- {0x00016048, 0x8e481266, 0x8e481266, 0x8e481266, 0x8e481266},
-+ {0x00016048, 0x8e481666, 0x8e481666, 0x8e481266, 0x8e481266},
-+ {0x00016280, 0x01000015, 0x01000015, 0x01001015, 0x01001015},
- {0x00016444, 0x03b6d2e4, 0x03b6d2e4, 0x03b6d2e4, 0x03b6d2e4},
-- {0x00016448, 0x8e481266, 0x8e481266, 0x8e481266, 0x8e481266},
-+ {0x00016448, 0x8e481666, 0x8e481666, 0x8e481266, 0x8e481266},
- };
-+
- static const u32 ar9340Modes_ub124_tx_gain_table_1p0[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8005, 0xd00a8005},
-+ {0x00009820, 0x206a022e, 0x206a022e, 0x206a00ae, 0x206a00ae},
-+ {0x00009830, 0x0000059c, 0x0000059c, 0x0000059c, 0x0000059c},
-+ {0x00009e10, 0x7ec88d2e, 0x7ec88d2e, 0x7ec82d2e, 0x7ec82d2e},
-+ {0x0000a2dc, 0xfef5d402, 0xfef5d402, 0xfdab5b52, 0xfdab5b52},
-+ {0x0000a2e0, 0xfe896600, 0xfe896600, 0xfd339c84, 0xfd339c84},
-+ {0x0000a2e4, 0xff01f800, 0xff01f800, 0xfec3e000, 0xfec3e000},
-+ {0x0000a2e8, 0xfffe0000, 0xfffe0000, 0xfffc0000, 0xfffc0000},
- {0x0000a410, 0x000050d8, 0x000050d8, 0x000050d9, 0x000050d9},
- {0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000},
- {0x0000a504, 0x04002222, 0x04002222, 0x04000002, 0x04000002},
-@@ -676,15 +710,34 @@ static const u32 ar9340Modes_ub124_tx_ga
- {0x0000a5f4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
- {0x0000a5f8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
- {0x0000a5fc, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
-- {0x00016044, 0x036db2db, 0x036db2db, 0x036db2db, 0x036db2db},
-- {0x00016048, 0x69b65266, 0x69b65266, 0x69b65266, 0x69b65266},
-- {0x00016444, 0x036db2db, 0x036db2db, 0x036db2db, 0x036db2db},
-- {0x00016448, 0x69b65266, 0x69b65266, 0x69b65266, 0x69b65266},
-+ {0x00016044, 0x03b6d2e4, 0x03b6d2e4, 0x03b6d2e4, 0x03b6d2e4},
-+ {0x00016048, 0x8e480086, 0x8e480086, 0x8e480086, 0x8e480086},
-+ {0x00016444, 0x03b6d2e4, 0x03b6d2e4, 0x03b6d2e4, 0x03b6d2e4},
-+ {0x00016448, 0x8e480086, 0x8e480086, 0x8e480086, 0x8e480086},
-+ {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, 0xfef5d402, 0xfef5d402, 0xfdab5b52, 0xfdab5b52},
-+ {0x0000b2e0, 0xfe896600, 0xfe896600, 0xfd339c84, 0xfd339c84},
-+ {0x0000b2e4, 0xff01f800, 0xff01f800, 0xfec3e000, 0xfec3e000},
-+ {0x0000b2e8, 0xfffe0000, 0xfffe0000, 0xfffc0000, 0xfffc0000},
- };
-
--
- static const u32 ar9340Common_rx_gain_table_1p0[][2] = {
-- /* Addr allmodes */
-+ /* Addr allmodes */
- {0x0000a000, 0x00010000},
- {0x0000a004, 0x00030002},
- {0x0000a008, 0x00050004},
-@@ -845,14 +898,14 @@ static const u32 ar9340Common_rx_gain_ta
- {0x0000b074, 0x00000000},
- {0x0000b078, 0x00000000},
- {0x0000b07c, 0x00000000},
-- {0x0000b080, 0x32323232},
-- {0x0000b084, 0x2f2f3232},
-- {0x0000b088, 0x23282a2d},
-- {0x0000b08c, 0x1c1e2123},
-- {0x0000b090, 0x14171919},
-- {0x0000b094, 0x0e0e1214},
-- {0x0000b098, 0x03050707},
-- {0x0000b09c, 0x00030303},
-+ {0x0000b080, 0x23232323},
-+ {0x0000b084, 0x21232323},
-+ {0x0000b088, 0x19191c1e},
-+ {0x0000b08c, 0x12141417},
-+ {0x0000b090, 0x07070e0e},
-+ {0x0000b094, 0x03030305},
-+ {0x0000b098, 0x00000003},
-+ {0x0000b09c, 0x00000000},
- {0x0000b0a0, 0x00000000},
- {0x0000b0a4, 0x00000000},
- {0x0000b0a8, 0x00000000},
-@@ -944,7 +997,11 @@ static const u32 ar9340Common_rx_gain_ta
- };
-
- static const u32 ar9340Modes_low_ob_db_tx_gain_table_1p0[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ {0x0000a2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
-+ {0x0000a2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
-+ {0x0000a2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
-+ {0x0000a2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
- {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9},
- {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
- {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002},
-@@ -952,8 +1009,8 @@ static const u32 ar9340Modes_low_ob_db_t
- {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},
-+ {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},
-@@ -965,19 +1022,19 @@ static const u32 ar9340Modes_low_ob_db_t
- {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},
-+ {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},
-@@ -1010,14 +1067,40 @@ static const u32 ar9340Modes_low_ob_db_t
- {0x0000a5f4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
- {0x0000a5f8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec},
- {0x0000a5fc, 0x778a308c, 0x778a308c, 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, 0x03aaa352, 0x03aaa352},
-+ {0x0000b2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
-+ {0x0000b2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
-+ {0x0000b2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
- {0x00016044, 0x056db2db, 0x056db2db, 0x056db2db, 0x056db2db},
-- {0x00016048, 0x24925266, 0x24925266, 0x24925266, 0x24925266},
-+ {0x00016048, 0x24925666, 0x24925666, 0x24925266, 0x24925266},
-+ {0x00016280, 0x01000015, 0x01000015, 0x01001015, 0x01001015},
-+ {0x00016288, 0xf0318000, 0xf0318000, 0xf0318000, 0xf0318000},
- {0x00016444, 0x056db2db, 0x056db2db, 0x056db2db, 0x056db2db},
-- {0x00016448, 0x24925266, 0x24925266, 0x24925266, 0x24925266},
-+ {0x00016448, 0x24925666, 0x24925666, 0x24925266, 0x24925266},
- };
-
- static const u32 ar9340Modes_mixed_ob_db_tx_gain_table_1p0[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ {0x0000a2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
-+ {0x0000a2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
-+ {0x0000a2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
-+ {0x0000a2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
- {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9},
- {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
- {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002},
-@@ -1025,8 +1108,8 @@ static const u32 ar9340Modes_mixed_ob_db
- {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200},
- {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202},
- {0x0000a514, 0x1c000223, 0x1c000223, 0x11000400, 0x11000400},
-- {0x0000a518, 0x21020220, 0x21020220, 0x15000402, 0x15000402},
-- {0x0000a51c, 0x27020223, 0x27020223, 0x19000404, 0x19000404},
-+ {0x0000a518, 0x21002220, 0x21002220, 0x15000402, 0x15000402},
-+ {0x0000a51c, 0x27002223, 0x27002223, 0x19000404, 0x19000404},
- {0x0000a520, 0x2b022220, 0x2b022220, 0x1b000603, 0x1b000603},
- {0x0000a524, 0x2f022222, 0x2f022222, 0x1f000a02, 0x1f000a02},
- {0x0000a528, 0x34022225, 0x34022225, 0x23000a04, 0x23000a04},
-@@ -1038,19 +1121,19 @@ static const u32 ar9340Modes_mixed_ob_db
- {0x0000a540, 0x4e02246c, 0x4e02246c, 0x38001660, 0x38001660},
- {0x0000a544, 0x5302266c, 0x5302266c, 0x3b001861, 0x3b001861},
- {0x0000a548, 0x5702286c, 0x5702286c, 0x3e001a81, 0x3e001a81},
-- {0x0000a54c, 0x5c04286b, 0x5c04286b, 0x42001a83, 0x42001a83},
-- {0x0000a550, 0x61042a6c, 0x61042a6c, 0x44001c84, 0x44001c84},
-- {0x0000a554, 0x66062a6c, 0x66062a6c, 0x48001ce3, 0x48001ce3},
-- {0x0000a558, 0x6b062e6c, 0x6b062e6c, 0x4c001ce5, 0x4c001ce5},
-- {0x0000a55c, 0x7006308c, 0x7006308c, 0x50001ce9, 0x50001ce9},
-- {0x0000a560, 0x730a308a, 0x730a308a, 0x54001ceb, 0x54001ceb},
-- {0x0000a564, 0x770a308c, 0x770a308c, 0x56001eec, 0x56001eec},
-- {0x0000a568, 0x770a308c, 0x770a308c, 0x56001eec, 0x56001eec},
-- {0x0000a56c, 0x770a308c, 0x770a308c, 0x56001eec, 0x56001eec},
-- {0x0000a570, 0x770a308c, 0x770a308c, 0x56001eec, 0x56001eec},
-- {0x0000a574, 0x770a308c, 0x770a308c, 0x56001eec, 0x56001eec},
-- {0x0000a578, 0x770a308c, 0x770a308c, 0x56001eec, 0x56001eec},
-- {0x0000a57c, 0x770a308c, 0x770a308c, 0x56001eec, 0x56001eec},
-+ {0x0000a54c, 0x5c02486b, 0x5c02486b, 0x42001a83, 0x42001a83},
-+ {0x0000a550, 0x61024a6c, 0x61024a6c, 0x44001c84, 0x44001c84},
-+ {0x0000a554, 0x66026a6c, 0x66026a6c, 0x48001ce3, 0x48001ce3},
-+ {0x0000a558, 0x6b026e6c, 0x6b026e6c, 0x4c001ce5, 0x4c001ce5},
-+ {0x0000a55c, 0x7002708c, 0x7002708c, 0x50001ce9, 0x50001ce9},
-+ {0x0000a560, 0x7302b08a, 0x7302b08a, 0x54001ceb, 0x54001ceb},
-+ {0x0000a564, 0x7702b08c, 0x7702b08c, 0x56001eec, 0x56001eec},
-+ {0x0000a568, 0x7702b08c, 0x7702b08c, 0x56001eec, 0x56001eec},
-+ {0x0000a56c, 0x7702b08c, 0x7702b08c, 0x56001eec, 0x56001eec},
-+ {0x0000a570, 0x7702b08c, 0x7702b08c, 0x56001eec, 0x56001eec},
-+ {0x0000a574, 0x7702b08c, 0x7702b08c, 0x56001eec, 0x56001eec},
-+ {0x0000a578, 0x7702b08c, 0x7702b08c, 0x56001eec, 0x56001eec},
-+ {0x0000a57c, 0x7702b08c, 0x7702b08c, 0x56001eec, 0x56001eec},
- {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
- {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002},
- {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004},
-@@ -1083,14 +1166,36 @@ static const u32 ar9340Modes_mixed_ob_db
- {0x0000a5f4, 0x778a308c, 0x778a308c, 0x56801eec, 0x56801eec},
- {0x0000a5f8, 0x778a308c, 0x778a308c, 0x56801eec, 0x56801eec},
- {0x0000a5fc, 0x778a308c, 0x778a308c, 0x56801eec, 0x56801eec},
-+ {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, 0x03aaa352, 0x03aaa352},
-+ {0x0000b2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
-+ {0x0000b2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
-+ {0x0000b2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
- {0x00016044, 0x056db2db, 0x056db2db, 0x03b6d2e4, 0x03b6d2e4},
-- {0x00016048, 0x24927266, 0x24927266, 0x8e483266, 0x8e483266},
-+ {0x00016048, 0x24925666, 0x24925666, 0x8e481266, 0x8e481266},
-+ {0x00016280, 0x01000015, 0x01000015, 0x01001015, 0x01001015},
-+ {0x00016288, 0x30318000, 0x30318000, 0x00318000, 0x00318000},
- {0x00016444, 0x056db2db, 0x056db2db, 0x03b6d2e4, 0x03b6d2e4},
-- {0x00016448, 0x24927266, 0x24927266, 0x8e482266, 0x8e482266},
-+ {0x00016448, 0x24925666, 0x24925666, 0x8e481266, 0x8e481266},
- };
-
- static const u32 ar9340_1p0_mac_core[][2] = {
-- /* Addr allmodes */
-+ /* Addr allmodes */
- {0x00000008, 0x00000000},
- {0x00000030, 0x00020085},
- {0x00000034, 0x00000005},
-@@ -1119,6 +1224,7 @@ static const u32 ar9340_1p0_mac_core[][2
- {0x00008004, 0x00000000},
- {0x00008008, 0x00000000},
- {0x0000800c, 0x00000000},
-+ {0x00008010, 0x00080800},
- {0x00008018, 0x00000000},
- {0x00008020, 0x00000000},
- {0x00008038, 0x00000000},
-@@ -1146,7 +1252,7 @@ static const u32 ar9340_1p0_mac_core[][2
- {0x000080bc, 0x00000000},
- {0x000080c0, 0x2a800000},
- {0x000080c4, 0x06900168},
-- {0x000080c8, 0x13881c20},
-+ {0x000080c8, 0x13881c22},
- {0x000080cc, 0x01f40000},
- {0x000080d0, 0x00252500},
- {0x000080d4, 0x00a00000},
-@@ -1250,11 +1356,11 @@ static const u32 ar9340_1p0_mac_core[][2
- {0x000083c4, 0x00000000},
- {0x000083c8, 0x00000000},
- {0x000083cc, 0x00000200},
-- {0x000083d0, 0x000301ff},
-+ {0x000083d0, 0x000101ff},
- };
-
- static const u32 ar9340Common_wo_xlna_rx_gain_table_1p0[][2] = {
-- /* Addr allmodes */
-+ /* Addr allmodes */
- {0x0000a000, 0x00010000},
- {0x0000a004, 0x00030002},
- {0x0000a008, 0x00050004},
-@@ -1514,12 +1620,11 @@ static const u32 ar9340Common_wo_xlna_rx
- };
-
- static const u32 ar9340_1p0_soc_preamble[][2] = {
-- /* Addr allmodes */
-- {0x000040a4, 0x00a0c1c9},
-+ /* Addr allmodes */
- {0x00007008, 0x00000000},
- {0x00007020, 0x00000000},
- {0x00007034, 0x00000002},
- {0x00007038, 0x000004c2},
- };
-
--#endif
-+#endif /* INITVALS_9340_1P0_H */
+++ /dev/null
---- a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
-@@ -1,5 +1,6 @@
- /*
- * Copyright (c) 2010-2011 Atheros Communications Inc.
-+ * Copyright (c) 2011-2012 Qualcomm Atheros 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
---- a/drivers/net/wireless/ath/ath9k/ar9330_1p1_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9330_1p1_initvals.h
-@@ -337,12 +337,7 @@ static const u32 ar9331_modes_low_ob_db_
- {0x00016284, 0x14d3f000, 0x14d3f000, 0x14d3f000, 0x14d3f000},
- };
-
--static const u32 ar9331_1p1_baseband_core_txfir_coeff_japan_2484[][2] = {
-- /* Addr allmodes */
-- {0x0000a398, 0x00000000},
-- {0x0000a39c, 0x6f7f0301},
-- {0x0000a3a0, 0xca9228ee},
--};
-+#define ar9331_1p1_baseband_core_txfir_coeff_japan_2484 ar9462_2p0_baseband_core_txfir_coeff_japan_2484
-
- static const u32 ar9331_1p1_xtal_25M[][2] = {
- /* Addr allmodes */
-@@ -783,17 +778,7 @@ static const u32 ar9331_modes_high_power
- {0x00016284, 0x14d3f000, 0x14d3f000, 0x14d3f000, 0x14d3f000},
- };
-
--static const u32 ar9331_1p1_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},
--};
-+#define ar9331_1p1_mac_postamble ar9300_2p2_mac_postamble
-
- static const u32 ar9331_1p1_soc_preamble[][2] = {
- /* Addr allmodes */
-@@ -1112,38 +1097,4 @@ static const u32 ar9331_common_tx_gain_o
- {0x00000000},
- };
-
--static const u32 ar9331_1p1_chansel_xtal_25M[] = {
-- 0x0101479e,
-- 0x0101d027,
-- 0x010258af,
-- 0x0102e138,
-- 0x010369c0,
-- 0x0103f249,
-- 0x01047ad1,
-- 0x0105035a,
-- 0x01058be2,
-- 0x0106146b,
-- 0x01069cf3,
-- 0x0107257c,
-- 0x0107ae04,
-- 0x0108f5b2,
--};
--
--static const u32 ar9331_1p1_chansel_xtal_40M[] = {
-- 0x00a0ccbe,
-- 0x00a12213,
-- 0x00a17769,
-- 0x00a1ccbe,
-- 0x00a22213,
-- 0x00a27769,
-- 0x00a2ccbe,
-- 0x00a32213,
-- 0x00a37769,
-- 0x00a3ccbe,
-- 0x00a42213,
-- 0x00a47769,
-- 0x00a4ccbe,
-- 0x00a5998b,
--};
--
- #endif /* INITVALS_9330_1P1_H */
---- a/drivers/net/wireless/ath/ath9k/ar9330_1p2_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9330_1p2_initvals.h
-@@ -1,5 +1,6 @@
- /*
-- * Copyright (c) 2011 Atheros Communications Inc.
-+ * Copyright (c) 2010-2011 Atheros Communications Inc.
-+ * Copyright (c) 2011-2012 Qualcomm Atheros 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
-@@ -17,8 +18,8 @@
- #ifndef INITVALS_9330_1P2_H
- #define INITVALS_9330_1P2_H
-
--static const u32 ar9331_modes_lowest_ob_db_tx_gain_1p2[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+static const u32 ar9331_modes_high_ob_db_tx_gain_1p2[][5] = {
-+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
- {0x0000a410, 0x000050d7, 0x000050d7, 0x000050d7, 0x000050d7},
- {0x0000a500, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
- {0x0000a504, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
-@@ -102,8 +103,14 @@ static const u32 ar9331_modes_lowest_ob_
- {0x0000a63c, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
- };
-
-+#define ar9331_modes_high_power_tx_gain_1p2 ar9331_modes_high_ob_db_tx_gain_1p2
-+
-+#define ar9331_modes_low_ob_db_tx_gain_1p2 ar9331_modes_high_power_tx_gain_1p2
-+
-+#define ar9331_modes_lowest_ob_db_tx_gain_1p2 ar9331_modes_low_ob_db_tx_gain_1p2
-+
- static const u32 ar9331_1p2_baseband_postamble[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
- {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8005, 0xd00a8005},
- {0x00009820, 0x206a002e, 0x206a002e, 0x206a002e, 0x206a002e},
- {0x00009824, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0},
-@@ -147,191 +154,6 @@ static const u32 ar9331_1p2_baseband_pos
- {0x0000ae18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
- };
-
--static const u32 ar9331_modes_high_ob_db_tx_gain_1p2[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-- {0x0000a410, 0x000050d7, 0x000050d7, 0x000050d7, 0x000050d7},
-- {0x0000a500, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
-- {0x0000a504, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
-- {0x0000a508, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
-- {0x0000a50c, 0x11062202, 0x11062202, 0x0d000200, 0x0d000200},
-- {0x0000a510, 0x17022e00, 0x17022e00, 0x11000202, 0x11000202},
-- {0x0000a514, 0x1d000ec2, 0x1d000ec2, 0x15000400, 0x15000400},
-- {0x0000a518, 0x25020ec0, 0x25020ec0, 0x19000402, 0x19000402},
-- {0x0000a51c, 0x2b020ec3, 0x2b020ec3, 0x1d000404, 0x1d000404},
-- {0x0000a520, 0x2f001f04, 0x2f001f04, 0x23000a00, 0x23000a00},
-- {0x0000a524, 0x35001fc4, 0x35001fc4, 0x27000a02, 0x27000a02},
-- {0x0000a528, 0x3c022f04, 0x3c022f04, 0x2b000a04, 0x2b000a04},
-- {0x0000a52c, 0x41023e85, 0x41023e85, 0x3f001620, 0x3f001620},
-- {0x0000a530, 0x48023ec6, 0x48023ec6, 0x41001621, 0x41001621},
-- {0x0000a534, 0x4d023f01, 0x4d023f01, 0x44001640, 0x44001640},
-- {0x0000a538, 0x53023f4b, 0x53023f4b, 0x46001641, 0x46001641},
-- {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x48001642, 0x48001642},
-- {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x4b001644, 0x4b001644},
-- {0x0000a544, 0x6502feca, 0x6502feca, 0x4e001a81, 0x4e001a81},
-- {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x51001a83, 0x51001a83},
-- {0x0000a54c, 0x7203feca, 0x7203feca, 0x54001c84, 0x54001c84},
-- {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x57001ce3, 0x57001ce3},
-- {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x5b001ce5, 0x5b001ce5},
-- {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x5f001ce9, 0x5f001ce9},
-- {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x66001eec, 0x66001eec},
-- {0x0000a560, 0x900fff0b, 0x900fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a564, 0x960fffcb, 0x960fffcb, 0x66001eec, 0x66001eec},
-- {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a580, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
-- {0x0000a584, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
-- {0x0000a588, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
-- {0x0000a58c, 0x11062202, 0x11062202, 0x0b000200, 0x0b000200},
-- {0x0000a590, 0x17022e00, 0x17022e00, 0x0f000202, 0x0f000202},
-- {0x0000a594, 0x1d000ec2, 0x1d000ec2, 0x11000400, 0x11000400},
-- {0x0000a598, 0x25020ec0, 0x25020ec0, 0x15000402, 0x15000402},
-- {0x0000a59c, 0x2b020ec3, 0x2b020ec3, 0x19000404, 0x19000404},
-- {0x0000a5a0, 0x2f001f04, 0x2f001f04, 0x1b000603, 0x1b000603},
-- {0x0000a5a4, 0x35001fc4, 0x35001fc4, 0x1f000a02, 0x1f000a02},
-- {0x0000a5a8, 0x3c022f04, 0x3c022f04, 0x23000a04, 0x23000a04},
-- {0x0000a5ac, 0x41023e85, 0x41023e85, 0x26000a20, 0x26000a20},
-- {0x0000a5b0, 0x48023ec6, 0x48023ec6, 0x2a000e20, 0x2a000e20},
-- {0x0000a5b4, 0x4d023f01, 0x4d023f01, 0x2e000e22, 0x2e000e22},
-- {0x0000a5b8, 0x53023f4b, 0x53023f4b, 0x31000e24, 0x31000e24},
-- {0x0000a5bc, 0x5a027f09, 0x5a027f09, 0x34001640, 0x34001640},
-- {0x0000a5c0, 0x5f027fc9, 0x5f027fc9, 0x38001660, 0x38001660},
-- {0x0000a5c4, 0x6502feca, 0x6502feca, 0x3b001861, 0x3b001861},
-- {0x0000a5c8, 0x6b02ff4a, 0x6b02ff4a, 0x3e001a81, 0x3e001a81},
-- {0x0000a5cc, 0x7203feca, 0x7203feca, 0x42001a83, 0x42001a83},
-- {0x0000a5d0, 0x7703ff0b, 0x7703ff0b, 0x44001c84, 0x44001c84},
-- {0x0000a5d4, 0x7d06ffcb, 0x7d06ffcb, 0x48001ce3, 0x48001ce3},
-- {0x0000a5d8, 0x8407ff0b, 0x8407ff0b, 0x4c001ce5, 0x4c001ce5},
-- {0x0000a5dc, 0x8907ffcb, 0x8907ffcb, 0x50001ce9, 0x50001ce9},
-- {0x0000a5e0, 0x900fff0b, 0x900fff0b, 0x54001ceb, 0x54001ceb},
-- {0x0000a5e4, 0x960fffcb, 0x960fffcb, 0x56001eec, 0x56001eec},
-- {0x0000a5e8, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
-- {0x0000a5ec, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
-- {0x0000a5f0, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
-- {0x0000a5f4, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
-- {0x0000a5f8, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
-- {0x0000a5fc, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
-- {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, 0x02008501, 0x02008501, 0x02008501, 0x02008501},
-- {0x0000a61c, 0x02008802, 0x02008802, 0x02008802, 0x02008802},
-- {0x0000a620, 0x0300c802, 0x0300c802, 0x0300c802, 0x0300c802},
-- {0x0000a624, 0x0300cc03, 0x0300cc03, 0x0300cc03, 0x0300cc03},
-- {0x0000a628, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
-- {0x0000a62c, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
-- {0x0000a630, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
-- {0x0000a634, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
-- {0x0000a638, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
-- {0x0000a63c, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--};
--
--static const u32 ar9331_modes_low_ob_db_tx_gain_1p2[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-- {0x0000a410, 0x000050d7, 0x000050d7, 0x000050d7, 0x000050d7},
-- {0x0000a500, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
-- {0x0000a504, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
-- {0x0000a508, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
-- {0x0000a50c, 0x11062202, 0x11062202, 0x0d000200, 0x0d000200},
-- {0x0000a510, 0x17022e00, 0x17022e00, 0x11000202, 0x11000202},
-- {0x0000a514, 0x1d000ec2, 0x1d000ec2, 0x15000400, 0x15000400},
-- {0x0000a518, 0x25020ec0, 0x25020ec0, 0x19000402, 0x19000402},
-- {0x0000a51c, 0x2b020ec3, 0x2b020ec3, 0x1d000404, 0x1d000404},
-- {0x0000a520, 0x2f001f04, 0x2f001f04, 0x23000a00, 0x23000a00},
-- {0x0000a524, 0x35001fc4, 0x35001fc4, 0x27000a02, 0x27000a02},
-- {0x0000a528, 0x3c022f04, 0x3c022f04, 0x2b000a04, 0x2b000a04},
-- {0x0000a52c, 0x41023e85, 0x41023e85, 0x3f001620, 0x3f001620},
-- {0x0000a530, 0x48023ec6, 0x48023ec6, 0x41001621, 0x41001621},
-- {0x0000a534, 0x4d023f01, 0x4d023f01, 0x44001640, 0x44001640},
-- {0x0000a538, 0x53023f4b, 0x53023f4b, 0x46001641, 0x46001641},
-- {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x48001642, 0x48001642},
-- {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x4b001644, 0x4b001644},
-- {0x0000a544, 0x6502feca, 0x6502feca, 0x4e001a81, 0x4e001a81},
-- {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x51001a83, 0x51001a83},
-- {0x0000a54c, 0x7203feca, 0x7203feca, 0x54001c84, 0x54001c84},
-- {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x57001ce3, 0x57001ce3},
-- {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x5b001ce5, 0x5b001ce5},
-- {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x5f001ce9, 0x5f001ce9},
-- {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x66001eec, 0x66001eec},
-- {0x0000a560, 0x900fff0b, 0x900fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a564, 0x960fffcb, 0x960fffcb, 0x66001eec, 0x66001eec},
-- {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a580, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
-- {0x0000a584, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
-- {0x0000a588, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
-- {0x0000a58c, 0x11062202, 0x11062202, 0x0b000200, 0x0b000200},
-- {0x0000a590, 0x17022e00, 0x17022e00, 0x0f000202, 0x0f000202},
-- {0x0000a594, 0x1d000ec2, 0x1d000ec2, 0x11000400, 0x11000400},
-- {0x0000a598, 0x25020ec0, 0x25020ec0, 0x15000402, 0x15000402},
-- {0x0000a59c, 0x2b020ec3, 0x2b020ec3, 0x19000404, 0x19000404},
-- {0x0000a5a0, 0x2f001f04, 0x2f001f04, 0x1b000603, 0x1b000603},
-- {0x0000a5a4, 0x35001fc4, 0x35001fc4, 0x1f000a02, 0x1f000a02},
-- {0x0000a5a8, 0x3c022f04, 0x3c022f04, 0x23000a04, 0x23000a04},
-- {0x0000a5ac, 0x41023e85, 0x41023e85, 0x26000a20, 0x26000a20},
-- {0x0000a5b0, 0x48023ec6, 0x48023ec6, 0x2a000e20, 0x2a000e20},
-- {0x0000a5b4, 0x4d023f01, 0x4d023f01, 0x2e000e22, 0x2e000e22},
-- {0x0000a5b8, 0x53023f4b, 0x53023f4b, 0x31000e24, 0x31000e24},
-- {0x0000a5bc, 0x5a027f09, 0x5a027f09, 0x34001640, 0x34001640},
-- {0x0000a5c0, 0x5f027fc9, 0x5f027fc9, 0x38001660, 0x38001660},
-- {0x0000a5c4, 0x6502feca, 0x6502feca, 0x3b001861, 0x3b001861},
-- {0x0000a5c8, 0x6b02ff4a, 0x6b02ff4a, 0x3e001a81, 0x3e001a81},
-- {0x0000a5cc, 0x7203feca, 0x7203feca, 0x42001a83, 0x42001a83},
-- {0x0000a5d0, 0x7703ff0b, 0x7703ff0b, 0x44001c84, 0x44001c84},
-- {0x0000a5d4, 0x7d06ffcb, 0x7d06ffcb, 0x48001ce3, 0x48001ce3},
-- {0x0000a5d8, 0x8407ff0b, 0x8407ff0b, 0x4c001ce5, 0x4c001ce5},
-- {0x0000a5dc, 0x8907ffcb, 0x8907ffcb, 0x50001ce9, 0x50001ce9},
-- {0x0000a5e0, 0x900fff0b, 0x900fff0b, 0x54001ceb, 0x54001ceb},
-- {0x0000a5e4, 0x960fffcb, 0x960fffcb, 0x56001eec, 0x56001eec},
-- {0x0000a5e8, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
-- {0x0000a5ec, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
-- {0x0000a5f0, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
-- {0x0000a5f4, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
-- {0x0000a5f8, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
-- {0x0000a5fc, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
-- {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, 0x02008501, 0x02008501, 0x02008501, 0x02008501},
-- {0x0000a61c, 0x02008802, 0x02008802, 0x02008802, 0x02008802},
-- {0x0000a620, 0x0300c802, 0x0300c802, 0x0300c802, 0x0300c802},
-- {0x0000a624, 0x0300cc03, 0x0300cc03, 0x0300cc03, 0x0300cc03},
-- {0x0000a628, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
-- {0x0000a62c, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
-- {0x0000a630, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
-- {0x0000a634, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
-- {0x0000a638, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
-- {0x0000a63c, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--};
--
--static const u32 ar9331_1p2_baseband_core_txfir_coeff_japan_2484[][2] = {
-- /* Addr allmodes */
-- {0x0000a398, 0x00000000},
-- {0x0000a39c, 0x6f7f0301},
-- {0x0000a3a0, 0xca9228ee},
--};
--
--static const u32 ar9331_1p2_xtal_25M[][2] = {
-- /* Addr allmodes */
-- {0x00007038, 0x000002f8},
-- {0x00008244, 0x0010f3d7},
-- {0x0000824c, 0x0001e7ae},
-- {0x0001609c, 0x0f508f29},
--};
--
- static const u32 ar9331_1p2_radio_core[][2] = {
- /* Addr allmodes */
- {0x00016000, 0x36db6db6},
-@@ -397,684 +219,24 @@ static const u32 ar9331_1p2_radio_core[]
- {0x000163d4, 0x00000000},
- };
-
--static const u32 ar9331_1p2_soc_postamble[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-- {0x00007010, 0x00000022, 0x00000022, 0x00000022, 0x00000022},
--};
-+#define ar9331_1p2_baseband_core_txfir_coeff_japan_2484 ar9331_1p1_baseband_core_txfir_coeff_japan_2484
-
--static const u32 ar9331_common_wo_xlna_rx_gain_1p2[][2] = {
-- /* Addr allmodes */
-- {0x0000a000, 0x00060005},
-- {0x0000a004, 0x00810080},
-- {0x0000a008, 0x00830082},
-- {0x0000a00c, 0x00850084},
-- {0x0000a010, 0x01820181},
-- {0x0000a014, 0x01840183},
-- {0x0000a018, 0x01880185},
-- {0x0000a01c, 0x018a0189},
-- {0x0000a020, 0x02850284},
-- {0x0000a024, 0x02890288},
-- {0x0000a028, 0x028b028a},
-- {0x0000a02c, 0x03850384},
-- {0x0000a030, 0x03890388},
-- {0x0000a034, 0x038b038a},
-- {0x0000a038, 0x038d038c},
-- {0x0000a03c, 0x03910390},
-- {0x0000a040, 0x03930392},
-- {0x0000a044, 0x03950394},
-- {0x0000a048, 0x00000396},
-- {0x0000a04c, 0x00000000},
-- {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, 0x28282828},
-- {0x0000a084, 0x28282828},
-- {0x0000a088, 0x28282828},
-- {0x0000a08c, 0x28282828},
-- {0x0000a090, 0x28282828},
-- {0x0000a094, 0x24242428},
-- {0x0000a098, 0x171e1e1e},
-- {0x0000a09c, 0x02020b0b},
-- {0x0000a0a0, 0x02020202},
-- {0x0000a0a4, 0x00000000},
-- {0x0000a0a8, 0x00000000},
-- {0x0000a0ac, 0x00000000},
-- {0x0000a0b0, 0x00000000},
-- {0x0000a0b4, 0x00000000},
-- {0x0000a0b8, 0x00000000},
-- {0x0000a0bc, 0x00000000},
-- {0x0000a0c0, 0x22072208},
-- {0x0000a0c4, 0x22052206},
-- {0x0000a0c8, 0x22032204},
-- {0x0000a0cc, 0x22012202},
-- {0x0000a0d0, 0x221f2200},
-- {0x0000a0d4, 0x221d221e},
-- {0x0000a0d8, 0x33023303},
-- {0x0000a0dc, 0x33003301},
-- {0x0000a0e0, 0x331e331f},
-- {0x0000a0e4, 0x4402331d},
-- {0x0000a0e8, 0x44004401},
-- {0x0000a0ec, 0x441e441f},
-- {0x0000a0f0, 0x55025503},
-- {0x0000a0f4, 0x55005501},
-- {0x0000a0f8, 0x551e551f},
-- {0x0000a0fc, 0x6602551d},
-- {0x0000a100, 0x66006601},
-- {0x0000a104, 0x661e661f},
-- {0x0000a108, 0x7703661d},
-- {0x0000a10c, 0x77017702},
-- {0x0000a110, 0x00007700},
-- {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, 0x111f1100},
-- {0x0000a148, 0x111d111e},
-- {0x0000a14c, 0x111b111c},
-- {0x0000a150, 0x22032204},
-- {0x0000a154, 0x22012202},
-- {0x0000a158, 0x221f2200},
-- {0x0000a15c, 0x221d221e},
-- {0x0000a160, 0x33013302},
-- {0x0000a164, 0x331f3300},
-- {0x0000a168, 0x4402331e},
-- {0x0000a16c, 0x44004401},
-- {0x0000a170, 0x441e441f},
-- {0x0000a174, 0x55015502},
-- {0x0000a178, 0x551f5500},
-- {0x0000a17c, 0x6602551e},
-- {0x0000a180, 0x66006601},
-- {0x0000a184, 0x661e661f},
-- {0x0000a188, 0x7703661d},
-- {0x0000a18c, 0x77017702},
-- {0x0000a190, 0x00007700},
-- {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, 0x00000296},
--};
-+#define ar9331_1p2_xtal_25M ar9331_1p1_xtal_25M
-
--static const u32 ar9331_1p2_baseband_core[][2] = {
-- /* Addr allmodes */
-- {0x00009800, 0xafe68e30},
-- {0x00009804, 0xfd14e000},
-- {0x00009808, 0x9c0a8f6b},
-- {0x0000980c, 0x04800000},
-- {0x00009814, 0x9280c00a},
-- {0x00009818, 0x00000000},
-- {0x0000981c, 0x00020028},
-- {0x00009834, 0x5f3ca3de},
-- {0x00009838, 0x0108ecff},
-- {0x0000983c, 0x14750600},
-- {0x00009880, 0x201fff00},
-- {0x00009884, 0x00001042},
-- {0x000098a4, 0x00200400},
-- {0x000098b0, 0x32840bbe},
-- {0x000098d0, 0x004b6a8e},
-- {0x000098d4, 0x00000820},
-- {0x000098dc, 0x00000000},
-- {0x000098f0, 0x00000000},
-- {0x000098f4, 0x00000000},
-- {0x00009c04, 0x00000000},
-- {0x00009c08, 0x03200000},
-- {0x00009c0c, 0x00000000},
-- {0x00009c10, 0x00000000},
-- {0x00009c14, 0x00046384},
-- {0x00009c18, 0x05b6b440},
-- {0x00009c1c, 0x00b6b440},
-- {0x00009d00, 0xc080a333},
-- {0x00009d04, 0x40206c10},
-- {0x00009d08, 0x009c4060},
-- {0x00009d0c, 0x1883800a},
-- {0x00009d10, 0x01834061},
-- {0x00009d14, 0x00c00400},
-- {0x00009d18, 0x00000000},
-- {0x00009e08, 0x0038233c},
-- {0x00009e24, 0x9927b515},
-- {0x00009e28, 0x12ef0200},
-- {0x00009e30, 0x06336f77},
-- {0x00009e34, 0x6af6532f},
-- {0x00009e38, 0x0cc80c00},
-- {0x00009e40, 0x0d261820},
-- {0x00009e4c, 0x00001004},
-- {0x00009e50, 0x00ff03f1},
-- {0x00009fc0, 0x803e4788},
-- {0x00009fc4, 0x0001efb5},
-- {0x00009fcc, 0x40000014},
-- {0x0000a20c, 0x00000000},
-- {0x0000a220, 0x00000000},
-- {0x0000a224, 0x00000000},
-- {0x0000a228, 0x10002310},
-- {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, 0x00000006},
-- {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, 0x04000000},
-- {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},
--};
-+#define ar9331_1p2_xtal_40M ar9331_1p1_xtal_40M
-
--static const u32 ar9331_modes_high_power_tx_gain_1p2[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-- {0x0000a410, 0x000050d7, 0x000050d7, 0x000050d7, 0x000050d7},
-- {0x0000a500, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
-- {0x0000a504, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
-- {0x0000a508, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
-- {0x0000a50c, 0x11062202, 0x11062202, 0x0d000200, 0x0d000200},
-- {0x0000a510, 0x17022e00, 0x17022e00, 0x11000202, 0x11000202},
-- {0x0000a514, 0x1d000ec2, 0x1d000ec2, 0x15000400, 0x15000400},
-- {0x0000a518, 0x25020ec0, 0x25020ec0, 0x19000402, 0x19000402},
-- {0x0000a51c, 0x2b020ec3, 0x2b020ec3, 0x1d000404, 0x1d000404},
-- {0x0000a520, 0x2f001f04, 0x2f001f04, 0x23000a00, 0x23000a00},
-- {0x0000a524, 0x35001fc4, 0x35001fc4, 0x27000a02, 0x27000a02},
-- {0x0000a528, 0x3c022f04, 0x3c022f04, 0x2b000a04, 0x2b000a04},
-- {0x0000a52c, 0x41023e85, 0x41023e85, 0x3f001620, 0x3f001620},
-- {0x0000a530, 0x48023ec6, 0x48023ec6, 0x41001621, 0x41001621},
-- {0x0000a534, 0x4d023f01, 0x4d023f01, 0x44001640, 0x44001640},
-- {0x0000a538, 0x53023f4b, 0x53023f4b, 0x46001641, 0x46001641},
-- {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x48001642, 0x48001642},
-- {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x4b001644, 0x4b001644},
-- {0x0000a544, 0x6502feca, 0x6502feca, 0x4e001a81, 0x4e001a81},
-- {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x51001a83, 0x51001a83},
-- {0x0000a54c, 0x7203feca, 0x7203feca, 0x54001c84, 0x54001c84},
-- {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x57001ce3, 0x57001ce3},
-- {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x5b001ce5, 0x5b001ce5},
-- {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x5f001ce9, 0x5f001ce9},
-- {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x66001eec, 0x66001eec},
-- {0x0000a560, 0x900fff0b, 0x900fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a564, 0x960fffcb, 0x960fffcb, 0x66001eec, 0x66001eec},
-- {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x66001eec, 0x66001eec},
-- {0x0000a580, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
-- {0x0000a584, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
-- {0x0000a588, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
-- {0x0000a58c, 0x11062202, 0x11062202, 0x0b000200, 0x0b000200},
-- {0x0000a590, 0x17022e00, 0x17022e00, 0x0f000202, 0x0f000202},
-- {0x0000a594, 0x1d000ec2, 0x1d000ec2, 0x11000400, 0x11000400},
-- {0x0000a598, 0x25020ec0, 0x25020ec0, 0x15000402, 0x15000402},
-- {0x0000a59c, 0x2b020ec3, 0x2b020ec3, 0x19000404, 0x19000404},
-- {0x0000a5a0, 0x2f001f04, 0x2f001f04, 0x1b000603, 0x1b000603},
-- {0x0000a5a4, 0x35001fc4, 0x35001fc4, 0x1f000a02, 0x1f000a02},
-- {0x0000a5a8, 0x3c022f04, 0x3c022f04, 0x23000a04, 0x23000a04},
-- {0x0000a5ac, 0x41023e85, 0x41023e85, 0x26000a20, 0x26000a20},
-- {0x0000a5b0, 0x48023ec6, 0x48023ec6, 0x2a000e20, 0x2a000e20},
-- {0x0000a5b4, 0x4d023f01, 0x4d023f01, 0x2e000e22, 0x2e000e22},
-- {0x0000a5b8, 0x53023f4b, 0x53023f4b, 0x31000e24, 0x31000e24},
-- {0x0000a5bc, 0x5a027f09, 0x5a027f09, 0x34001640, 0x34001640},
-- {0x0000a5c0, 0x5f027fc9, 0x5f027fc9, 0x38001660, 0x38001660},
-- {0x0000a5c4, 0x6502feca, 0x6502feca, 0x3b001861, 0x3b001861},
-- {0x0000a5c8, 0x6b02ff4a, 0x6b02ff4a, 0x3e001a81, 0x3e001a81},
-- {0x0000a5cc, 0x7203feca, 0x7203feca, 0x42001a83, 0x42001a83},
-- {0x0000a5d0, 0x7703ff0b, 0x7703ff0b, 0x44001c84, 0x44001c84},
-- {0x0000a5d4, 0x7d06ffcb, 0x7d06ffcb, 0x48001ce3, 0x48001ce3},
-- {0x0000a5d8, 0x8407ff0b, 0x8407ff0b, 0x4c001ce5, 0x4c001ce5},
-- {0x0000a5dc, 0x8907ffcb, 0x8907ffcb, 0x50001ce9, 0x50001ce9},
-- {0x0000a5e0, 0x900fff0b, 0x900fff0b, 0x54001ceb, 0x54001ceb},
-- {0x0000a5e4, 0x960fffcb, 0x960fffcb, 0x56001eec, 0x56001eec},
-- {0x0000a5e8, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
-- {0x0000a5ec, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
-- {0x0000a5f0, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
-- {0x0000a5f4, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
-- {0x0000a5f8, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
-- {0x0000a5fc, 0x9c1fff0b, 0x9c1fff0b, 0x56001eec, 0x56001eec},
-- {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, 0x02008501, 0x02008501, 0x02008501, 0x02008501},
-- {0x0000a61c, 0x02008802, 0x02008802, 0x02008802, 0x02008802},
-- {0x0000a620, 0x0300c802, 0x0300c802, 0x0300c802, 0x0300c802},
-- {0x0000a624, 0x0300cc03, 0x0300cc03, 0x0300cc03, 0x0300cc03},
-- {0x0000a628, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
-- {0x0000a62c, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
-- {0x0000a630, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
-- {0x0000a634, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
-- {0x0000a638, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
-- {0x0000a63c, 0x04011004, 0x04011004, 0x04011004, 0x04011004},
--};
-+#define ar9331_1p2_baseband_core ar9331_1p1_baseband_core
-
--static const u32 ar9331_1p2_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},
--};
-+#define ar9331_1p2_soc_postamble ar9331_1p1_soc_postamble
-
--static const u32 ar9331_1p2_soc_preamble[][2] = {
-- /* Addr allmodes */
-- {0x00007020, 0x00000000},
-- {0x00007034, 0x00000002},
-- {0x00007038, 0x000002f8},
--};
-+#define ar9331_1p2_mac_postamble ar9331_1p1_mac_postamble
-
--static const u32 ar9331_1p2_xtal_40M[][2] = {
-- /* Addr allmodes */
-- {0x00007038, 0x000004c2},
-- {0x00008244, 0x0010f400},
-- {0x0000824c, 0x0001e800},
-- {0x0001609c, 0x0b283f31},
--};
-+#define ar9331_1p2_soc_preamble ar9331_1p1_soc_preamble
-
--static const u32 ar9331_1p2_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},
-- {0x00008248, 0x00000800},
-- {0x00008250, 0x00000000},
-- {0x00008254, 0x00000000},
-- {0x00008258, 0x00000000},
-- {0x0000825c, 0x40000000},
-- {0x00008260, 0x00080922},
-- {0x00008264, 0x9d400010},
-- {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},
--};
-+#define ar9331_1p2_mac_core ar9331_1p1_mac_core
-
--static const u32 ar9331_common_rx_gain_1p2[][2] = {
-- /* Addr allmodes */
-- {0x0000a000, 0x00010000},
-- {0x0000a004, 0x00030002},
-- {0x0000a008, 0x00050004},
-- {0x0000a00c, 0x00810080},
-- {0x0000a010, 0x01800082},
-- {0x0000a014, 0x01820181},
-- {0x0000a018, 0x01840183},
-- {0x0000a01c, 0x01880185},
-- {0x0000a020, 0x018a0189},
-- {0x0000a024, 0x02850284},
-- {0x0000a028, 0x02890288},
-- {0x0000a02c, 0x03850384},
-- {0x0000a030, 0x03890388},
-- {0x0000a034, 0x038b038a},
-- {0x0000a038, 0x038d038c},
-- {0x0000a03c, 0x03910390},
-- {0x0000a040, 0x03930392},
-- {0x0000a044, 0x03950394},
-- {0x0000a048, 0x00000396},
-- {0x0000a04c, 0x00000000},
-- {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, 0x28282828},
-- {0x0000a084, 0x28282828},
-- {0x0000a088, 0x28282828},
-- {0x0000a08c, 0x28282828},
-- {0x0000a090, 0x28282828},
-- {0x0000a094, 0x21212128},
-- {0x0000a098, 0x171c1c1c},
-- {0x0000a09c, 0x02020212},
-- {0x0000a0a0, 0x00000202},
-- {0x0000a0a4, 0x00000000},
-- {0x0000a0a8, 0x00000000},
-- {0x0000a0ac, 0x00000000},
-- {0x0000a0b0, 0x00000000},
-- {0x0000a0b4, 0x00000000},
-- {0x0000a0b8, 0x00000000},
-- {0x0000a0bc, 0x00000000},
-- {0x0000a0c0, 0x001f0000},
-- {0x0000a0c4, 0x111f1100},
-- {0x0000a0c8, 0x111d111e},
-- {0x0000a0cc, 0x111b111c},
-- {0x0000a0d0, 0x22032204},
-- {0x0000a0d4, 0x22012202},
-- {0x0000a0d8, 0x221f2200},
-- {0x0000a0dc, 0x221d221e},
-- {0x0000a0e0, 0x33013302},
-- {0x0000a0e4, 0x331f3300},
-- {0x0000a0e8, 0x4402331e},
-- {0x0000a0ec, 0x44004401},
-- {0x0000a0f0, 0x441e441f},
-- {0x0000a0f4, 0x55015502},
-- {0x0000a0f8, 0x551f5500},
-- {0x0000a0fc, 0x6602551e},
-- {0x0000a100, 0x66006601},
-- {0x0000a104, 0x661e661f},
-- {0x0000a108, 0x7703661d},
-- {0x0000a10c, 0x77017702},
-- {0x0000a110, 0x00007700},
-- {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, 0x111f1100},
-- {0x0000a148, 0x111d111e},
-- {0x0000a14c, 0x111b111c},
-- {0x0000a150, 0x22032204},
-- {0x0000a154, 0x22012202},
-- {0x0000a158, 0x221f2200},
-- {0x0000a15c, 0x221d221e},
-- {0x0000a160, 0x33013302},
-- {0x0000a164, 0x331f3300},
-- {0x0000a168, 0x4402331e},
-- {0x0000a16c, 0x44004401},
-- {0x0000a170, 0x441e441f},
-- {0x0000a174, 0x55015502},
-- {0x0000a178, 0x551f5500},
-- {0x0000a17c, 0x6602551e},
-- {0x0000a180, 0x66006601},
-- {0x0000a184, 0x661e661f},
-- {0x0000a188, 0x7703661d},
-- {0x0000a18c, 0x77017702},
-- {0x0000a190, 0x00007700},
-- {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, 0x00000296},
--};
-+#define ar9331_common_wo_xlna_rx_gain_1p2 ar9331_common_wo_xlna_rx_gain_1p1
-+
-+#define ar9331_common_rx_gain_1p2 ar9485_common_rx_gain_1_1
-
- #endif /* INITVALS_9330_1P2_H */
---- a/drivers/net/wireless/ath/ath9k/ar9340_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9340_initvals.h
-@@ -100,18 +100,7 @@ static const u32 ar9340Modes_lowest_ob_d
- {0x00016448, 0x24925266, 0x24925266, 0x24925266, 0x24925266},
- };
-
--static const u32 ar9340Modes_fast_clock_1p0[][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},
--};
-+#define ar9340Modes_fast_clock_1p0 ar9300Modes_fast_clock_2p2
-
- static const u32 ar9340_1p0_radio_core[][2] = {
- /* Addr allmodes */
-@@ -224,22 +213,9 @@ static const u32 ar9340_1p0_radio_core_4
- {0x000160b0, 0x01885f5a},
- };
-
--static const u32 ar9340_1p0_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},
--};
-+#define ar9340_1p0_mac_postamble ar9300_2p2_mac_postamble
-
--static const u32 ar9340_1p0_soc_postamble[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-- {0x00007010, 0x00000023, 0x00000023, 0x00000023, 0x00000023},
--};
-+#define ar9340_1p0_soc_postamble ar9300_2p2_soc_postamble
-
- static const u32 ar9340_1p0_baseband_postamble[][5] = {
- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-@@ -1359,265 +1335,7 @@ static const u32 ar9340_1p0_mac_core[][2
- {0x000083d0, 0x000101ff},
- };
-
--static const u32 ar9340Common_wo_xlna_rx_gain_table_1p0[][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},
--};
-+#define ar9340Common_wo_xlna_rx_gain_table_1p0 ar9300Common_wo_xlna_rx_gain_table_2p2
-
- static const u32 ar9340_1p0_soc_preamble[][2] = {
- /* Addr allmodes */
---- a/drivers/net/wireless/ath/ath9k/ar9462_2p0_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9462_2p0_initvals.h
-@@ -1,5 +1,6 @@
- /*
-- * Copyright (c) 2010 Atheros Communications Inc.
-+ * Copyright (c) 2010-2011 Atheros Communications Inc.
-+ * Copyright (c) 2011-2012 Qualcomm Atheros 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
-@@ -1007,7 +1008,7 @@ static const u32 ar9462_2p0_radio_core[]
-
- static const u32 ar9462_2p0_soc_preamble[][2] = {
- /* Addr allmodes */
-- {0x000040a4 ,0x00a0c1c9},
-+ {0x000040a4, 0x00a0c1c9},
- {0x00007020, 0x00000000},
- {0x00007034, 0x00000002},
- {0x00007038, 0x000004c2},
---- a/drivers/net/wireless/ath/ath9k/ar9485_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9485_initvals.h
-@@ -1,5 +1,6 @@
- /*
- * Copyright (c) 2010-2011 Atheros Communications Inc.
-+ * Copyright (c) 2011-2012 Qualcomm Atheros 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
-@@ -17,599 +18,151 @@
- #ifndef INITVALS_9485_H
- #define INITVALS_9485_H
-
--static const u32 ar9485_1_1_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, 0x13881c22},
-- {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},
-- {0x000081d4, 0x00000000},
-- {0x000081ec, 0x00000000},
-- {0x000081f0, 0x00000000},
-- {0x000081f4, 0x00000000},
-- {0x000081f8, 0x00000000},
-- {0x000081fc, 0x00000000},
-- {0x00008240, 0x00100000},
-- {0x00008244, 0x0010f400},
-- {0x00008248, 0x00000800},
-- {0x0000824c, 0x0001e800},
-- {0x00008250, 0x00000000},
-- {0x00008254, 0x00000000},
-- {0x00008258, 0x00000000},
-- {0x0000825c, 0x40000000},
-- {0x00008260, 0x00080922},
-- {0x00008264, 0x9ca00010},
-- {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, 0xa248105b},
-- {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 ar9485_1_1_baseband_core[][2] = {
-- /* Addr allmodes */
-- {0x00009800, 0xafe68e30},
-- {0x00009804, 0xfd14e000},
-- {0x00009808, 0x9c0a8f6b},
-- {0x0000980c, 0x04800000},
-- {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, 0x00000000},
-- {0x00009c08, 0x03200000},
-- {0x00009c0c, 0x00000000},
-- {0x00009c10, 0x00000000},
-- {0x00009c14, 0x00046384},
-- {0x00009c18, 0x05b6b440},
-- {0x00009c1c, 0x00b6b440},
-- {0x00009d00, 0xc080a333},
-- {0x00009d04, 0x40206c10},
-- {0x00009d08, 0x009c4060},
-- {0x00009d0c, 0x1883800a},
-- {0x00009d10, 0x01834061},
-- {0x00009d14, 0x00c00400},
-- {0x00009d18, 0x00000000},
-- {0x00009d1c, 0x00000000},
-- {0x00009e08, 0x0038233c},
-- {0x00009e24, 0x9927b515},
-- {0x00009e28, 0x12ef0200},
-- {0x00009e30, 0x06336f77},
-- {0x00009e34, 0x6af6532f},
-- {0x00009e38, 0x0cc80c00},
-- {0x00009e40, 0x0d261820},
-- {0x00009e4c, 0x00001004},
-- {0x00009e50, 0x00ff03f1},
-- {0x00009fc0, 0x80be4788},
-- {0x00009fc4, 0x0001efb5},
-- {0x00009fcc, 0x40000014},
-- {0x0000a20c, 0x00000000},
-- {0x0000a210, 0x00000000},
-- {0x0000a220, 0x00000000},
-- {0x0000a224, 0x00000000},
-- {0x0000a228, 0x10002310},
-- {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, 0x000000ff},
-- {0x0000a3a8, 0x3b3b3b3b},
-- {0x0000a3ac, 0x2f2f2f2f},
-- {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, 0x00000006},
-- {0x0000a3f8, 0x0cdbd380},
-- {0x0000a3fc, 0x000f0f01},
-- {0x0000a400, 0x8fa91f01},
-- {0x0000a404, 0x00000000},
-- {0x0000a408, 0x0e79e5c6},
-- {0x0000a40c, 0x00820820},
-- {0x0000a414, 0x1ce739cf},
-- {0x0000a418, 0x2d0019ce},
-- {0x0000a41c, 0x1ce739ce},
-- {0x0000a420, 0x000001ce},
-- {0x0000a424, 0x1ce739ce},
-- {0x0000a428, 0x000001ce},
-- {0x0000a42c, 0x1ce739ce},
-- {0x0000a430, 0x1ce739ce},
-- {0x0000a434, 0x00000000},
-- {0x0000a438, 0x00001801},
-- {0x0000a43c, 0x00000000},
-- {0x0000a440, 0x00000000},
-- {0x0000a444, 0x00000000},
-- {0x0000a448, 0x04000000},
-- {0x0000a44c, 0x00000001},
-- {0x0000a450, 0x00010000},
-- {0x0000a5c4, 0xbfad9d74},
-- {0x0000a5c8, 0x0048060a},
-- {0x0000a5cc, 0x00000637},
-- {0x0000a760, 0x03020100},
-- {0x0000a764, 0x09080504},
-- {0x0000a768, 0x0d0c0b0a},
-- {0x0000a76c, 0x13121110},
-- {0x0000a770, 0x31301514},
-- {0x0000a774, 0x35343332},
-- {0x0000a778, 0x00000036},
-- {0x0000a780, 0x00000838},
-- {0x0000a7c0, 0x00000000},
-- {0x0000a7c4, 0xfffffffc},
-- {0x0000a7c8, 0x00000000},
-- {0x0000a7cc, 0x00000000},
-- {0x0000a7d0, 0x00000000},
-- {0x0000a7d4, 0x00000004},
-- {0x0000a7dc, 0x00000000},
--};
--
--static const u32 ar9485Common_1_1[][2] = {
-- /* Addr allmodes */
-- {0x00007010, 0x00000022},
-- {0x00007020, 0x00000000},
-- {0x00007034, 0x00000002},
-- {0x00007038, 0x000004c2},
--};
--
--static const u32 ar9485_1_1_baseband_postamble[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-- {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8005, 0xd00a8005},
-- {0x00009820, 0x206a002e, 0x206a002e, 0x206a002e, 0x206a002e},
-- {0x00009824, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0},
-- {0x00009828, 0x06903081, 0x06903081, 0x06903881, 0x06903881},
-- {0x0000982c, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4},
-- {0x00009830, 0x0000059c, 0x0000059c, 0x0000059c, 0x0000059c},
-- {0x00009c00, 0x00000044, 0x00000044, 0x00000044, 0x00000044},
-- {0x00009e00, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0},
-- {0x00009e04, 0x00182020, 0x00182020, 0x00182020, 0x00182020},
-- {0x00009e0c, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2},
-- {0x00009e10, 0x7ec88d2e, 0x7ec88d2e, 0x7ec80d2e, 0x7ec80d2e},
-- {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},
-- {0x00009e3c, 0xcf946220, 0xcf946220, 0xcf946222, 0xcf946222},
-- {0x00009e44, 0x02321e27, 0x02321e27, 0x02282324, 0x02282324},
-- {0x00009e48, 0x5030201a, 0x5030201a, 0x50302010, 0x50302010},
-- {0x00009fc8, 0x0003f000, 0x0003f000, 0x0001a000, 0x0001a000},
-- {0x0000a204, 0x01303fc0, 0x01303fc4, 0x01303fc4, 0x01303fc0},
-- {0x0000a208, 0x00000104, 0x00000104, 0x00000004, 0x00000004},
-- {0x0000a230, 0x0000400a, 0x00004014, 0x00004016, 0x0000400b},
-- {0x0000a234, 0x10000fff, 0x10000fff, 0x10000fff, 0x10000fff},
-- {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, 0x3a021501, 0x3a021501, 0x3a021501, 0x3a021501},
-- {0x0000a264, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e},
-- {0x0000a280, 0x00000007, 0x00000007, 0x0000000b, 0x0000000b},
-- {0x0000a284, 0x00000000, 0x00000000, 0x000002a0, 0x000002a0},
-- {0x0000a288, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000a28c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18},
-- {0x0000a2d0, 0x00071981, 0x00071981, 0x00071982, 0x00071982},
-- {0x0000a2d8, 0xf999a83a, 0xf999a83a, 0xf999a83a, 0xf999a83a},
-- {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000be04, 0x00802020, 0x00802020, 0x00802020, 0x00802020},
-- {0x0000be18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
--};
--
--static const u32 ar9485Modes_high_ob_db_tx_gain_1_1[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-- {0x000098bc, 0x00000002, 0x00000002, 0x00000002, 0x00000002},
-- {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d8, 0x000050d8},
-- {0x0000a458, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000a500, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
-- {0x0000a504, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
-- {0x0000a508, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
-- {0x0000a50c, 0x11062202, 0x11062202, 0x0d000200, 0x0d000200},
-- {0x0000a510, 0x17022e00, 0x17022e00, 0x11000202, 0x11000202},
-- {0x0000a514, 0x1d000ec2, 0x1d000ec2, 0x15000400, 0x15000400},
-- {0x0000a518, 0x25020ec0, 0x25020ec0, 0x19000402, 0x19000402},
-- {0x0000a51c, 0x2b020ec3, 0x2b020ec3, 0x1d000404, 0x1d000404},
-- {0x0000a520, 0x2f001f04, 0x2f001f04, 0x21000603, 0x21000603},
-- {0x0000a524, 0x35001fc4, 0x35001fc4, 0x25000605, 0x25000605},
-- {0x0000a528, 0x3c022f04, 0x3c022f04, 0x2a000a03, 0x2a000a03},
-- {0x0000a52c, 0x41023e85, 0x41023e85, 0x2c000a04, 0x2c000a04},
-- {0x0000a530, 0x48023ec6, 0x48023ec6, 0x34000e20, 0x34000e20},
-- {0x0000a534, 0x4d023f01, 0x4d023f01, 0x35000e21, 0x35000e21},
-- {0x0000a538, 0x53023f4b, 0x53023f4b, 0x43000e62, 0x43000e62},
-- {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x45000e63, 0x45000e63},
-- {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x49000e65, 0x49000e65},
-- {0x0000a544, 0x6502feca, 0x6502feca, 0x4b000e66, 0x4b000e66},
-- {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x4d001645, 0x4d001645},
-- {0x0000a54c, 0x7203feca, 0x7203feca, 0x51001865, 0x51001865},
-- {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x55001a86, 0x55001a86},
-- {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x57001ce9, 0x57001ce9},
-- {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x5a001ceb, 0x5a001ceb},
-- {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a560, 0x900fff0b, 0x900fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a564, 0x960fffcb, 0x960fffcb, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000b500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b504, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b508, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b50c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b510, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b514, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b518, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b51c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b520, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b524, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b528, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b52c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b530, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b534, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b538, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b53c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b540, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b544, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b548, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b54c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b550, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b554, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b558, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b55c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b560, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b564, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b568, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b56c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b570, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b574, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b578, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b57c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x00016044, 0x05d6b2db, 0x05d6b2db, 0x05d6b2db, 0x05d6b2db},
-- {0x00016048, 0x6c924260, 0x6c924260, 0x6c924260, 0x6c924260},
--};
--
--static const u32 ar9485_modes_lowest_ob_db_tx_gain_1_1[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-- {0x000098bc, 0x00000002, 0x00000002, 0x00000002, 0x00000002},
-- {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d8, 0x000050d8},
-- {0x0000a458, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000a500, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
-- {0x0000a504, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
-- {0x0000a508, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
-- {0x0000a50c, 0x11062202, 0x11062202, 0x0d000200, 0x0d000200},
-- {0x0000a510, 0x17022e00, 0x17022e00, 0x11000202, 0x11000202},
-- {0x0000a514, 0x1d000ec2, 0x1d000ec2, 0x15000400, 0x15000400},
-- {0x0000a518, 0x25020ec0, 0x25020ec0, 0x19000402, 0x19000402},
-- {0x0000a51c, 0x2b020ec3, 0x2b020ec3, 0x1d000404, 0x1d000404},
-- {0x0000a520, 0x2f001f04, 0x2f001f04, 0x21000603, 0x21000603},
-- {0x0000a524, 0x35001fc4, 0x35001fc4, 0x25000605, 0x25000605},
-- {0x0000a528, 0x3c022f04, 0x3c022f04, 0x2a000a03, 0x2a000a03},
-- {0x0000a52c, 0x41023e85, 0x41023e85, 0x2c000a04, 0x2c000a04},
-- {0x0000a530, 0x48023ec6, 0x48023ec6, 0x34000e20, 0x34000e20},
-- {0x0000a534, 0x4d023f01, 0x4d023f01, 0x35000e21, 0x35000e21},
-- {0x0000a538, 0x53023f4b, 0x53023f4b, 0x43000e62, 0x43000e62},
-- {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x45000e63, 0x45000e63},
-- {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x49000e65, 0x49000e65},
-- {0x0000a544, 0x6502feca, 0x6502feca, 0x4b000e66, 0x4b000e66},
-- {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x4d001645, 0x4d001645},
-- {0x0000a54c, 0x7203feca, 0x7203feca, 0x51001865, 0x51001865},
-- {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x55001a86, 0x55001a86},
-- {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x57001ce9, 0x57001ce9},
-- {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x5a001ceb, 0x5a001ceb},
-- {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a560, 0x900fff0b, 0x900fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a564, 0x960fffcb, 0x960fffcb, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000b500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b504, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b508, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b50c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b510, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b514, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b518, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b51c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b520, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b524, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b528, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b52c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b530, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b534, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b538, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b53c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b540, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b544, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b548, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b54c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b550, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b554, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b558, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b55c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b560, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b564, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b568, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b56c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b570, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b574, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b578, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b57c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x00016044, 0x05d6b2db, 0x05d6b2db, 0x05d6b2db, 0x05d6b2db},
-- {0x00016048, 0x6c924260, 0x6c924260, 0x6c924260, 0x6c924260},
--};
--
--static const u32 ar9485_1_1_radio_postamble[][2] = {
-- /* Addr allmodes */
-- {0x0001609c, 0x0b283f31},
-- {0x000160ac, 0x24611800},
-- {0x000160b0, 0x03284f3e},
-- {0x0001610c, 0x00170000},
-- {0x00016140, 0x50804008},
--};
--
--static const u32 ar9485_1_1_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},
--};
-+/* AR9485 1.0 */
-
--static const u32 ar9485_1_1_radio_core[][2] = {
-- /* Addr allmodes */
-- {0x00016000, 0x36db6db6},
-- {0x00016004, 0x6db6db40},
-- {0x00016008, 0x73800000},
-- {0x0001600c, 0x00000000},
-- {0x00016040, 0x7f80fff8},
-- {0x0001604c, 0x000f0278},
-- {0x00016050, 0x4db6db8c},
-- {0x00016054, 0x6db60000},
-- {0x00016080, 0x00080000},
-- {0x00016084, 0x0e48048c},
-- {0x00016088, 0x14214514},
-- {0x0001608c, 0x119f081e},
-- {0x00016090, 0x24926490},
-- {0x00016098, 0xd28b3330},
-- {0x000160a0, 0xc2108ffe},
-- {0x000160a4, 0x812fc370},
-- {0x000160a8, 0x423c8000},
-- {0x000160b4, 0x92480040},
-- {0x000160c0, 0x006db6db},
-- {0x000160c4, 0x0186db60},
-- {0x000160c8, 0x6db6db6c},
-- {0x000160cc, 0x6de6fbe0},
-- {0x000160d0, 0xf7dfcf3c},
-- {0x00016100, 0x04cb0001},
-- {0x00016104, 0xfff80015},
-- {0x00016108, 0x00080010},
-- {0x00016144, 0x01884080},
-- {0x00016148, 0x00008040},
-- {0x00016240, 0x08400000},
-- {0x00016244, 0x1bf90f00},
-- {0x00016248, 0x00000000},
-- {0x0001624c, 0x00000000},
-- {0x00016280, 0x01000015},
-- {0x00016284, 0x00d30000},
-- {0x00016288, 0x00318000},
-- {0x0001628c, 0x50000000},
-- {0x00016290, 0x4b96210f},
-- {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},
-- {0x00016c40, 0x13188278},
-- {0x00016c44, 0x12000000},
--};
-+#define ar9485_1_1_mac_postamble ar9300_2p2_mac_postamble
-
--static const u32 ar9485_1_1_pcie_phy_pll_on_clkreq_enable_L1[][2] = {
-- /* Addr allmodes */
-- {0x00018c00, 0x18052e5e},
-+static const u32 ar9485_1_1_pcie_phy_pll_on_clkreq_disable_L1[][2] = {
-+ /* Addr allmodes */
-+ {0x00018c00, 0x18012e5e},
- {0x00018c04, 0x000801d8},
- {0x00018c08, 0x0000080c},
- };
-
-+static const u32 ar9485Common_wo_xlna_rx_gain_1_1[][2] = {
-+ /* Addr allmodes */
-+ {0x0000a000, 0x00060005},
-+ {0x0000a004, 0x00810080},
-+ {0x0000a008, 0x00830082},
-+ {0x0000a00c, 0x00850084},
-+ {0x0000a010, 0x01820181},
-+ {0x0000a014, 0x01840183},
-+ {0x0000a018, 0x01880185},
-+ {0x0000a01c, 0x018a0189},
-+ {0x0000a020, 0x02850284},
-+ {0x0000a024, 0x02890288},
-+ {0x0000a028, 0x028b028a},
-+ {0x0000a02c, 0x03850384},
-+ {0x0000a030, 0x03890388},
-+ {0x0000a034, 0x038b038a},
-+ {0x0000a038, 0x038d038c},
-+ {0x0000a03c, 0x03910390},
-+ {0x0000a040, 0x03930392},
-+ {0x0000a044, 0x03950394},
-+ {0x0000a048, 0x00000396},
-+ {0x0000a04c, 0x00000000},
-+ {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, 0x28282828},
-+ {0x0000a084, 0x28282828},
-+ {0x0000a088, 0x28282828},
-+ {0x0000a08c, 0x28282828},
-+ {0x0000a090, 0x28282828},
-+ {0x0000a094, 0x24242428},
-+ {0x0000a098, 0x171e1e1e},
-+ {0x0000a09c, 0x02020b0b},
-+ {0x0000a0a0, 0x02020202},
-+ {0x0000a0a4, 0x00000000},
-+ {0x0000a0a8, 0x00000000},
-+ {0x0000a0ac, 0x00000000},
-+ {0x0000a0b0, 0x00000000},
-+ {0x0000a0b4, 0x00000000},
-+ {0x0000a0b8, 0x00000000},
-+ {0x0000a0bc, 0x00000000},
-+ {0x0000a0c0, 0x22072208},
-+ {0x0000a0c4, 0x22052206},
-+ {0x0000a0c8, 0x22032204},
-+ {0x0000a0cc, 0x22012202},
-+ {0x0000a0d0, 0x221f2200},
-+ {0x0000a0d4, 0x221d221e},
-+ {0x0000a0d8, 0x33023303},
-+ {0x0000a0dc, 0x33003301},
-+ {0x0000a0e0, 0x331e331f},
-+ {0x0000a0e4, 0x4402331d},
-+ {0x0000a0e8, 0x44004401},
-+ {0x0000a0ec, 0x441e441f},
-+ {0x0000a0f0, 0x55025503},
-+ {0x0000a0f4, 0x55005501},
-+ {0x0000a0f8, 0x551e551f},
-+ {0x0000a0fc, 0x6602551d},
-+ {0x0000a100, 0x66006601},
-+ {0x0000a104, 0x661e661f},
-+ {0x0000a108, 0x7703661d},
-+ {0x0000a10c, 0x77017702},
-+ {0x0000a110, 0x00007700},
-+ {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, 0x111f1100},
-+ {0x0000a148, 0x111d111e},
-+ {0x0000a14c, 0x111b111c},
-+ {0x0000a150, 0x22032204},
-+ {0x0000a154, 0x22012202},
-+ {0x0000a158, 0x221f2200},
-+ {0x0000a15c, 0x221d221e},
-+ {0x0000a160, 0x33013302},
-+ {0x0000a164, 0x331f3300},
-+ {0x0000a168, 0x4402331e},
-+ {0x0000a16c, 0x44004401},
-+ {0x0000a170, 0x441e441f},
-+ {0x0000a174, 0x55015502},
-+ {0x0000a178, 0x551f5500},
-+ {0x0000a17c, 0x6602551e},
-+ {0x0000a180, 0x66006601},
-+ {0x0000a184, 0x661e661f},
-+ {0x0000a188, 0x7703661d},
-+ {0x0000a18c, 0x77017702},
-+ {0x0000a190, 0x00007700},
-+ {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, 0x00000296},
-+};
-+
- static const u32 ar9485Modes_high_power_tx_gain_1_1[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
- {0x000098bc, 0x00000002, 0x00000002, 0x00000002, 0x00000002},
- {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d8, 0x000050d8},
- {0x0000a458, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-@@ -681,8 +234,14 @@ static const u32 ar9485Modes_high_power_
- {0x00016048, 0x6c924260, 0x6c924260, 0x6c924260, 0x6c924260},
- };
-
-+#define ar9485Modes_high_ob_db_tx_gain_1_1 ar9485Modes_high_power_tx_gain_1_1
-+
-+#define ar9485Modes_low_ob_db_tx_gain_1_1 ar9485Modes_high_ob_db_tx_gain_1_1
-+
-+#define ar9485_modes_lowest_ob_db_tx_gain_1_1 ar9485Modes_low_ob_db_tx_gain_1_1
-+
- static const u32 ar9485_1_1[][2] = {
-- /* Addr allmodes */
-+ /* Addr allmodes */
- {0x0000a580, 0x00000000},
- {0x0000a584, 0x00000000},
- {0x0000a588, 0x00000000},
-@@ -701,194 +260,210 @@ static const u32 ar9485_1_1[][2] = {
- {0x0000a5bc, 0x00000000},
- };
-
--static const u32 ar9485_modes_green_ob_db_tx_gain_1_1[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-- {0x000098bc, 0x00000003, 0x00000003, 0x00000003, 0x00000003},
-- {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d8, 0x000050d8},
-- {0x0000a458, 0x80000000, 0x80000000, 0x80000000, 0x80000000},
-- {0x0000a500, 0x00022200, 0x00022200, 0x00000006, 0x00000006},
-- {0x0000a504, 0x05062002, 0x05062002, 0x03000201, 0x03000201},
-- {0x0000a508, 0x0c002e00, 0x0c002e00, 0x06000203, 0x06000203},
-- {0x0000a50c, 0x11062202, 0x11062202, 0x0a000401, 0x0a000401},
-- {0x0000a510, 0x17022e00, 0x17022e00, 0x0e000403, 0x0e000403},
-- {0x0000a514, 0x1d000ec2, 0x1d000ec2, 0x12000405, 0x12000405},
-- {0x0000a518, 0x25020ec0, 0x25020ec0, 0x15000604, 0x15000604},
-- {0x0000a51c, 0x2b020ec3, 0x2b020ec3, 0x18000605, 0x18000605},
-- {0x0000a520, 0x2f001f04, 0x2f001f04, 0x1c000a04, 0x1c000a04},
-- {0x0000a524, 0x35001fc4, 0x35001fc4, 0x21000a06, 0x21000a06},
-- {0x0000a528, 0x3c022f04, 0x3c022f04, 0x29000a24, 0x29000a24},
-- {0x0000a52c, 0x41023e85, 0x41023e85, 0x2f000e21, 0x2f000e21},
-- {0x0000a530, 0x48023ec6, 0x48023ec6, 0x31000e20, 0x31000e20},
-- {0x0000a534, 0x4d023f01, 0x4d023f01, 0x33000e20, 0x33000e20},
-- {0x0000a538, 0x53023f4b, 0x53023f4b, 0x43000e62, 0x43000e62},
-- {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x45000e63, 0x45000e63},
-- {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x49000e65, 0x49000e65},
-- {0x0000a544, 0x6502feca, 0x6502feca, 0x4b000e66, 0x4b000e66},
-- {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x4d001645, 0x4d001645},
-- {0x0000a54c, 0x7203feca, 0x7203feca, 0x51001865, 0x51001865},
-- {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x55001a86, 0x55001a86},
-- {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x57001ce9, 0x57001ce9},
-- {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x5a001ceb, 0x5a001ceb},
-- {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a560, 0x900fff0b, 0x900fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a564, 0x960fffcb, 0x960fffcb, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000b500, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
-- {0x0000b504, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
-- {0x0000b508, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
-- {0x0000b50c, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
-- {0x0000b510, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
-- {0x0000b514, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
-- {0x0000b518, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
-- {0x0000b51c, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
-- {0x0000b520, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
-- {0x0000b524, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
-- {0x0000b528, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a},
-- {0x0000b52c, 0x0000002a, 0x0000002a, 0x0000002a, 0x0000002a},
-- {0x0000b530, 0x0000003a, 0x0000003a, 0x0000003a, 0x0000003a},
-- {0x0000b534, 0x0000004a, 0x0000004a, 0x0000004a, 0x0000004a},
-- {0x0000b538, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
-- {0x0000b53c, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
-- {0x0000b540, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
-- {0x0000b544, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
-- {0x0000b548, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
-- {0x0000b54c, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
-- {0x0000b550, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
-- {0x0000b554, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
-- {0x0000b558, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
-- {0x0000b55c, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
-- {0x0000b560, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
-- {0x0000b564, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
-- {0x0000b568, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
-- {0x0000b56c, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
-- {0x0000b570, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
-- {0x0000b574, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
-- {0x0000b578, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
-- {0x0000b57c, 0x0000005b, 0x0000005b, 0x0000005b, 0x0000005b},
-- {0x00016044, 0x05d6b2db, 0x05d6b2db, 0x05d6b2db, 0x05d6b2db},
-- {0x00016048, 0x6c924260, 0x6c924260, 0x6c924260, 0x6c924260},
--};
--
--static const u32 ar9485_1_1_pcie_phy_clkreq_disable_L1[][2] = {
-- /* Addr allmodes */
-- {0x00018c00, 0x18013e5e},
-- {0x00018c04, 0x000801d8},
-- {0x00018c08, 0x0000080c},
--};
--
--static const u32 ar9485_1_1_soc_preamble[][2] = {
-- /* Addr allmodes */
-- {0x00004014, 0xba280400},
-- {0x00004090, 0x00aa10aa},
-- {0x000040a4, 0x00a0c9c9},
-- {0x00007010, 0x00000022},
-- {0x00007020, 0x00000000},
-- {0x00007034, 0x00000002},
-- {0x00007038, 0x000004c2},
-- {0x00007048, 0x00000002},
--};
--
--static const u32 ar9485_1_1_baseband_core_txfir_coeff_japan_2484[][2] = {
-- /* Addr allmodes */
-- {0x0000a398, 0x00000000},
-- {0x0000a39c, 0x6f7f0301},
-- {0x0000a3a0, 0xca9228ee},
--};
--
--static const u32 ar9485Modes_low_ob_db_tx_gain_1_1[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-- {0x000098bc, 0x00000002, 0x00000002, 0x00000002, 0x00000002},
-- {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d8, 0x000050d8},
-- {0x0000a458, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000a500, 0x00022200, 0x00022200, 0x00000000, 0x00000000},
-- {0x0000a504, 0x05062002, 0x05062002, 0x04000002, 0x04000002},
-- {0x0000a508, 0x0c002e00, 0x0c002e00, 0x08000004, 0x08000004},
-- {0x0000a50c, 0x11062202, 0x11062202, 0x0d000200, 0x0d000200},
-- {0x0000a510, 0x17022e00, 0x17022e00, 0x11000202, 0x11000202},
-- {0x0000a514, 0x1d000ec2, 0x1d000ec2, 0x15000400, 0x15000400},
-- {0x0000a518, 0x25020ec0, 0x25020ec0, 0x19000402, 0x19000402},
-- {0x0000a51c, 0x2b020ec3, 0x2b020ec3, 0x1d000404, 0x1d000404},
-- {0x0000a520, 0x2f001f04, 0x2f001f04, 0x21000603, 0x21000603},
-- {0x0000a524, 0x35001fc4, 0x35001fc4, 0x25000605, 0x25000605},
-- {0x0000a528, 0x3c022f04, 0x3c022f04, 0x2a000a03, 0x2a000a03},
-- {0x0000a52c, 0x41023e85, 0x41023e85, 0x2c000a04, 0x2c000a04},
-- {0x0000a530, 0x48023ec6, 0x48023ec6, 0x34000e20, 0x34000e20},
-- {0x0000a534, 0x4d023f01, 0x4d023f01, 0x35000e21, 0x35000e21},
-- {0x0000a538, 0x53023f4b, 0x53023f4b, 0x43000e62, 0x43000e62},
-- {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x45000e63, 0x45000e63},
-- {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x49000e65, 0x49000e65},
-- {0x0000a544, 0x6502feca, 0x6502feca, 0x4b000e66, 0x4b000e66},
-- {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x4d001645, 0x4d001645},
-- {0x0000a54c, 0x7203feca, 0x7203feca, 0x51001865, 0x51001865},
-- {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x55001a86, 0x55001a86},
-- {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x57001ce9, 0x57001ce9},
-- {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x5a001ceb, 0x5a001ceb},
-- {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a560, 0x900fff0b, 0x900fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a564, 0x960fffcb, 0x960fffcb, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x5e001eeb, 0x5e001eeb},
-- {0x0000b500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b504, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b508, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b50c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b510, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b514, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b518, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b51c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b520, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b524, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b528, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b52c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b530, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b534, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b538, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b53c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b540, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b544, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b548, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b54c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b550, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b554, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b558, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b55c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b560, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b564, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b568, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b56c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b570, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b574, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b578, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x0000b57c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-- {0x00016044, 0x05d6b2db, 0x05d6b2db, 0x05d6b2db, 0x05d6b2db},
-- {0x00016048, 0x6c924260, 0x6c924260, 0x6c924260, 0x6c924260},
--};
--
--static const u32 ar9485_fast_clock_1_1_baseband_postamble[][3] = {
-- /* Addr 5G_HT2 5G_HT40 */
-- {0x00009e00, 0x03721821, 0x03721821},
-- {0x0000a230, 0x0000400b, 0x00004016},
-- {0x0000a254, 0x00000898, 0x00001130},
-+static const u32 ar9485_1_1_radio_core[][2] = {
-+ /* Addr allmodes */
-+ {0x00016000, 0x36db6db6},
-+ {0x00016004, 0x6db6db40},
-+ {0x00016008, 0x73800000},
-+ {0x0001600c, 0x00000000},
-+ {0x00016040, 0x7f80fff8},
-+ {0x0001604c, 0x000f0278},
-+ {0x00016050, 0x4db6db8c},
-+ {0x00016054, 0x6db60000},
-+ {0x00016080, 0x00080000},
-+ {0x00016084, 0x0e48048c},
-+ {0x00016088, 0x14214514},
-+ {0x0001608c, 0x119f081e},
-+ {0x00016090, 0x24926490},
-+ {0x00016098, 0xd28b3330},
-+ {0x000160a0, 0xc2108ffe},
-+ {0x000160a4, 0x812fc370},
-+ {0x000160a8, 0x423c8000},
-+ {0x000160b4, 0x92480040},
-+ {0x000160c0, 0x006db6db},
-+ {0x000160c4, 0x0186db60},
-+ {0x000160c8, 0x6db6db6c},
-+ {0x000160cc, 0x6de6fbe0},
-+ {0x000160d0, 0xf7dfcf3c},
-+ {0x00016100, 0x04cb0001},
-+ {0x00016104, 0xfff80015},
-+ {0x00016108, 0x00080010},
-+ {0x00016144, 0x01884080},
-+ {0x00016148, 0x00008040},
-+ {0x00016240, 0x08400000},
-+ {0x00016244, 0x1bf90f00},
-+ {0x00016248, 0x00000000},
-+ {0x0001624c, 0x00000000},
-+ {0x00016280, 0x01000015},
-+ {0x00016284, 0x00d30000},
-+ {0x00016288, 0x00318000},
-+ {0x0001628c, 0x50000000},
-+ {0x00016290, 0x4b96210f},
-+ {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},
-+ {0x00016c40, 0x13188278},
-+ {0x00016c44, 0x12000000},
- };
-
--static const u32 ar9485_1_1_pcie_phy_pll_on_clkreq_disable_L1[][2] = {
-- /* Addr allmodes */
-- {0x00018c00, 0x18012e5e},
-- {0x00018c04, 0x000801d8},
-- {0x00018c08, 0x0000080c},
-+static const u32 ar9485_1_1_baseband_core[][2] = {
-+ /* Addr allmodes */
-+ {0x00009800, 0xafe68e30},
-+ {0x00009804, 0xfd14e000},
-+ {0x00009808, 0x9c0a8f6b},
-+ {0x0000980c, 0x04800000},
-+ {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, 0x00000000},
-+ {0x00009c08, 0x03200000},
-+ {0x00009c0c, 0x00000000},
-+ {0x00009c10, 0x00000000},
-+ {0x00009c14, 0x00046384},
-+ {0x00009c18, 0x05b6b440},
-+ {0x00009c1c, 0x00b6b440},
-+ {0x00009d00, 0xc080a333},
-+ {0x00009d04, 0x40206c10},
-+ {0x00009d08, 0x009c4060},
-+ {0x00009d0c, 0x1883800a},
-+ {0x00009d10, 0x01834061},
-+ {0x00009d14, 0x00c00400},
-+ {0x00009d18, 0x00000000},
-+ {0x00009d1c, 0x00000000},
-+ {0x00009e08, 0x0038233c},
-+ {0x00009e24, 0x9927b515},
-+ {0x00009e28, 0x12ef0200},
-+ {0x00009e30, 0x06336f77},
-+ {0x00009e34, 0x6af6532f},
-+ {0x00009e38, 0x0cc80c00},
-+ {0x00009e40, 0x0d261820},
-+ {0x00009e4c, 0x00001004},
-+ {0x00009e50, 0x00ff03f1},
-+ {0x00009fc0, 0x80be4788},
-+ {0x00009fc4, 0x0001efb5},
-+ {0x00009fcc, 0x40000014},
-+ {0x0000a20c, 0x00000000},
-+ {0x0000a210, 0x00000000},
-+ {0x0000a220, 0x00000000},
-+ {0x0000a224, 0x00000000},
-+ {0x0000a228, 0x10002310},
-+ {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, 0x000000ff},
-+ {0x0000a3a8, 0x3b3b3b3b},
-+ {0x0000a3ac, 0x2f2f2f2f},
-+ {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, 0x00000006},
-+ {0x0000a3f8, 0x0cdbd380},
-+ {0x0000a3fc, 0x000f0f01},
-+ {0x0000a400, 0x8fa91f01},
-+ {0x0000a404, 0x00000000},
-+ {0x0000a408, 0x0e79e5c6},
-+ {0x0000a40c, 0x00820820},
-+ {0x0000a414, 0x1ce739cf},
-+ {0x0000a418, 0x2d0019ce},
-+ {0x0000a41c, 0x1ce739ce},
-+ {0x0000a420, 0x000001ce},
-+ {0x0000a424, 0x1ce739ce},
-+ {0x0000a428, 0x000001ce},
-+ {0x0000a42c, 0x1ce739ce},
-+ {0x0000a430, 0x1ce739ce},
-+ {0x0000a434, 0x00000000},
-+ {0x0000a438, 0x00001801},
-+ {0x0000a43c, 0x00000000},
-+ {0x0000a440, 0x00000000},
-+ {0x0000a444, 0x00000000},
-+ {0x0000a448, 0x04000000},
-+ {0x0000a44c, 0x00000001},
-+ {0x0000a450, 0x00010000},
-+ {0x0000a5c4, 0xbfad9d74},
-+ {0x0000a5c8, 0x0048060a},
-+ {0x0000a5cc, 0x00000637},
-+ {0x0000a760, 0x03020100},
-+ {0x0000a764, 0x09080504},
-+ {0x0000a768, 0x0d0c0b0a},
-+ {0x0000a76c, 0x13121110},
-+ {0x0000a770, 0x31301514},
-+ {0x0000a774, 0x35343332},
-+ {0x0000a778, 0x00000036},
-+ {0x0000a780, 0x00000838},
-+ {0x0000a7c0, 0x00000000},
-+ {0x0000a7c4, 0xfffffffc},
-+ {0x0000a7c8, 0x00000000},
-+ {0x0000a7cc, 0x00000000},
-+ {0x0000a7d0, 0x00000000},
-+ {0x0000a7d4, 0x00000004},
-+ {0x0000a7dc, 0x00000000},
- };
-
- static const u32 ar9485_common_rx_gain_1_1[][2] = {
-- /* Addr allmodes */
-+ /* Addr allmodes */
- {0x0000a000, 0x00010000},
- {0x0000a004, 0x00030002},
- {0x0000a008, 0x00050004},
-@@ -945,153 +520,14 @@ static const u32 ar9485_common_rx_gain_1
- {0x0000a0d4, 0x22012202},
- {0x0000a0d8, 0x221f2200},
- {0x0000a0dc, 0x221d221e},
-- {0x0000a0e0, 0x33013302},
-- {0x0000a0e4, 0x331f3300},
-- {0x0000a0e8, 0x4402331e},
-- {0x0000a0ec, 0x44004401},
-- {0x0000a0f0, 0x441e441f},
-- {0x0000a0f4, 0x55015502},
-- {0x0000a0f8, 0x551f5500},
-- {0x0000a0fc, 0x6602551e},
-- {0x0000a100, 0x66006601},
-- {0x0000a104, 0x661e661f},
-- {0x0000a108, 0x7703661d},
-- {0x0000a10c, 0x77017702},
-- {0x0000a110, 0x00007700},
-- {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, 0x111f1100},
-- {0x0000a148, 0x111d111e},
-- {0x0000a14c, 0x111b111c},
-- {0x0000a150, 0x22032204},
-- {0x0000a154, 0x22012202},
-- {0x0000a158, 0x221f2200},
-- {0x0000a15c, 0x221d221e},
-- {0x0000a160, 0x33013302},
-- {0x0000a164, 0x331f3300},
-- {0x0000a168, 0x4402331e},
-- {0x0000a16c, 0x44004401},
-- {0x0000a170, 0x441e441f},
-- {0x0000a174, 0x55015502},
-- {0x0000a178, 0x551f5500},
-- {0x0000a17c, 0x6602551e},
-- {0x0000a180, 0x66006601},
-- {0x0000a184, 0x661e661f},
-- {0x0000a188, 0x7703661d},
-- {0x0000a18c, 0x77017702},
-- {0x0000a190, 0x00007700},
-- {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, 0x00000296},
--};
--
--static const u32 ar9485_1_1_pcie_phy_clkreq_enable_L1[][2] = {
-- /* Addr allmodes */
-- {0x00018c00, 0x18053e5e},
-- {0x00018c04, 0x000801d8},
-- {0x00018c08, 0x0000080c},
--};
--
--static const u32 ar9485Common_wo_xlna_rx_gain_1_1[][2] = {
-- /* Addr allmodes */
-- {0x0000a000, 0x00060005},
-- {0x0000a004, 0x00810080},
-- {0x0000a008, 0x00830082},
-- {0x0000a00c, 0x00850084},
-- {0x0000a010, 0x01820181},
-- {0x0000a014, 0x01840183},
-- {0x0000a018, 0x01880185},
-- {0x0000a01c, 0x018a0189},
-- {0x0000a020, 0x02850284},
-- {0x0000a024, 0x02890288},
-- {0x0000a028, 0x028b028a},
-- {0x0000a02c, 0x03850384},
-- {0x0000a030, 0x03890388},
-- {0x0000a034, 0x038b038a},
-- {0x0000a038, 0x038d038c},
-- {0x0000a03c, 0x03910390},
-- {0x0000a040, 0x03930392},
-- {0x0000a044, 0x03950394},
-- {0x0000a048, 0x00000396},
-- {0x0000a04c, 0x00000000},
-- {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, 0x28282828},
-- {0x0000a084, 0x28282828},
-- {0x0000a088, 0x28282828},
-- {0x0000a08c, 0x28282828},
-- {0x0000a090, 0x28282828},
-- {0x0000a094, 0x24242428},
-- {0x0000a098, 0x171e1e1e},
-- {0x0000a09c, 0x02020b0b},
-- {0x0000a0a0, 0x02020202},
-- {0x0000a0a4, 0x00000000},
-- {0x0000a0a8, 0x00000000},
-- {0x0000a0ac, 0x00000000},
-- {0x0000a0b0, 0x00000000},
-- {0x0000a0b4, 0x00000000},
-- {0x0000a0b8, 0x00000000},
-- {0x0000a0bc, 0x00000000},
-- {0x0000a0c0, 0x22072208},
-- {0x0000a0c4, 0x22052206},
-- {0x0000a0c8, 0x22032204},
-- {0x0000a0cc, 0x22012202},
-- {0x0000a0d0, 0x221f2200},
-- {0x0000a0d4, 0x221d221e},
-- {0x0000a0d8, 0x33023303},
-- {0x0000a0dc, 0x33003301},
-- {0x0000a0e0, 0x331e331f},
-- {0x0000a0e4, 0x4402331d},
-- {0x0000a0e8, 0x44004401},
-- {0x0000a0ec, 0x441e441f},
-- {0x0000a0f0, 0x55025503},
-- {0x0000a0f4, 0x55005501},
-- {0x0000a0f8, 0x551e551f},
-- {0x0000a0fc, 0x6602551d},
-+ {0x0000a0e0, 0x33013302},
-+ {0x0000a0e4, 0x331f3300},
-+ {0x0000a0e8, 0x4402331e},
-+ {0x0000a0ec, 0x44004401},
-+ {0x0000a0f0, 0x441e441f},
-+ {0x0000a0f4, 0x55015502},
-+ {0x0000a0f8, 0x551f5500},
-+ {0x0000a0fc, 0x6602551e},
- {0x0000a100, 0x66006601},
- {0x0000a104, 0x661e661f},
- {0x0000a108, 0x7703661d},
-@@ -1158,4 +594,260 @@ static const u32 ar9485Common_wo_xlna_rx
- {0x0000a1fc, 0x00000296},
- };
-
--#endif
-+static const u32 ar9485_1_1_pcie_phy_pll_on_clkreq_enable_L1[][2] = {
-+ /* Addr allmodes */
-+ {0x00018c00, 0x18052e5e},
-+ {0x00018c04, 0x000801d8},
-+ {0x00018c08, 0x0000080c},
-+};
-+
-+static const u32 ar9485_1_1_pcie_phy_clkreq_enable_L1[][2] = {
-+ /* Addr allmodes */
-+ {0x00018c00, 0x18053e5e},
-+ {0x00018c04, 0x000801d8},
-+ {0x00018c08, 0x0000080c},
-+};
-+
-+static const u32 ar9485_1_1_soc_preamble[][2] = {
-+ /* Addr allmodes */
-+ {0x00004014, 0xba280400},
-+ {0x00004090, 0x00aa10aa},
-+ {0x000040a4, 0x00a0c9c9},
-+ {0x00007010, 0x00000022},
-+ {0x00007020, 0x00000000},
-+ {0x00007034, 0x00000002},
-+ {0x00007038, 0x000004c2},
-+ {0x00007048, 0x00000002},
-+};
-+
-+static const u32 ar9485_fast_clock_1_1_baseband_postamble[][3] = {
-+ /* Addr 5G_HT20 5G_HT40 */
-+ {0x00009e00, 0x03721821, 0x03721821},
-+ {0x0000a230, 0x0000400b, 0x00004016},
-+ {0x0000a254, 0x00000898, 0x00001130},
-+};
-+
-+static const u32 ar9485_1_1_baseband_postamble[][5] = {
-+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8005, 0xd00a8005},
-+ {0x00009820, 0x206a002e, 0x206a002e, 0x206a002e, 0x206a002e},
-+ {0x00009824, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0},
-+ {0x00009828, 0x06903081, 0x06903081, 0x06903881, 0x06903881},
-+ {0x0000982c, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4},
-+ {0x00009830, 0x0000059c, 0x0000059c, 0x0000059c, 0x0000059c},
-+ {0x00009c00, 0x00000044, 0x00000044, 0x00000044, 0x00000044},
-+ {0x00009e00, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0},
-+ {0x00009e04, 0x00182020, 0x00182020, 0x00182020, 0x00182020},
-+ {0x00009e0c, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2},
-+ {0x00009e10, 0x7ec88d2e, 0x7ec88d2e, 0x7ec80d2e, 0x7ec80d2e},
-+ {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},
-+ {0x00009e3c, 0xcf946220, 0xcf946220, 0xcf946222, 0xcf946222},
-+ {0x00009e44, 0x02321e27, 0x02321e27, 0x02282324, 0x02282324},
-+ {0x00009e48, 0x5030201a, 0x5030201a, 0x50302010, 0x50302010},
-+ {0x00009fc8, 0x0003f000, 0x0003f000, 0x0001a000, 0x0001a000},
-+ {0x0000a204, 0x01303fc0, 0x01303fc4, 0x01303fc4, 0x01303fc0},
-+ {0x0000a208, 0x00000104, 0x00000104, 0x00000004, 0x00000004},
-+ {0x0000a230, 0x0000400a, 0x00004014, 0x00004016, 0x0000400b},
-+ {0x0000a234, 0x10000fff, 0x10000fff, 0x10000fff, 0x10000fff},
-+ {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, 0x3a021501, 0x3a021501, 0x3a021501, 0x3a021501},
-+ {0x0000a264, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e},
-+ {0x0000a280, 0x00000007, 0x00000007, 0x0000000b, 0x0000000b},
-+ {0x0000a284, 0x00000000, 0x00000000, 0x000002a0, 0x000002a0},
-+ {0x0000a288, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+ {0x0000a28c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+ {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18},
-+ {0x0000a2d0, 0x00071981, 0x00071981, 0x00071982, 0x00071982},
-+ {0x0000a2d8, 0xf999a83a, 0xf999a83a, 0xf999a83a, 0xf999a83a},
-+ {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+ {0x0000be04, 0x00802020, 0x00802020, 0x00802020, 0x00802020},
-+ {0x0000be18, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+};
-+
-+static const u32 ar9485_1_1_pcie_phy_clkreq_disable_L1[][2] = {
-+ /* Addr allmodes */
-+ {0x00018c00, 0x18013e5e},
-+ {0x00018c04, 0x000801d8},
-+ {0x00018c08, 0x0000080c},
-+};
-+
-+static const u32 ar9485_1_1_radio_postamble[][2] = {
-+ /* Addr allmodes */
-+ {0x0001609c, 0x0b283f31},
-+ {0x000160ac, 0x24611800},
-+ {0x000160b0, 0x03284f3e},
-+ {0x0001610c, 0x00170000},
-+ {0x00016140, 0x50804008},
-+};
-+
-+static const u32 ar9485_1_1_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, 0x13881c22},
-+ {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},
-+ {0x000081d4, 0x00000000},
-+ {0x000081ec, 0x00000000},
-+ {0x000081f0, 0x00000000},
-+ {0x000081f4, 0x00000000},
-+ {0x000081f8, 0x00000000},
-+ {0x000081fc, 0x00000000},
-+ {0x00008240, 0x00100000},
-+ {0x00008244, 0x0010f400},
-+ {0x00008248, 0x00000800},
-+ {0x0000824c, 0x0001e800},
-+ {0x00008250, 0x00000000},
-+ {0x00008254, 0x00000000},
-+ {0x00008258, 0x00000000},
-+ {0x0000825c, 0x40000000},
-+ {0x00008260, 0x00080922},
-+ {0x00008264, 0x9ca00010},
-+ {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, 0xa248105b},
-+ {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},
-+};
-+
-+#endif /* INITVALS_9485_H */
---- a/drivers/net/wireless/ath/ath9k/ar9580_1p0_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9580_1p0_initvals.h
-@@ -1,5 +1,6 @@
- /*
-- * Copyright (c) 2010 Atheros Communications Inc.
-+ * Copyright (c) 2010-2011 Atheros Communications Inc.
-+ * Copyright (c) 2011-2012 Qualcomm Atheros 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
-@@ -19,18 +20,7 @@
-
- /* AR9580 1.0 */
-
--static const u32 ar9580_1p0_modes_fast_clock[][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},
--};
-+#define ar9580_1p0_modes_fast_clock ar9300Modes_fast_clock_2p2
-
- static const u32 ar9580_1p0_radio_postamble[][5] = {
- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-@@ -208,17 +198,7 @@ static const u32 ar9580_1p0_baseband_cor
- {0x0000c420, 0x00000000},
- };
-
--static const u32 ar9580_1p0_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},
--};
-+#define ar9580_1p0_mac_postamble ar9300_2p2_mac_postamble
-
- static const u32 ar9580_1p0_low_ob_db_tx_gain_table[][5] = {
- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-@@ -326,111 +306,7 @@ static const u32 ar9580_1p0_low_ob_db_tx
- {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
- };
-
--static const u32 ar9580_1p0_high_power_tx_gain_table[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-- {0x0000a2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
-- {0x0000a2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
-- {0x0000a2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
-- {0x0000a2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
-- {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, 0x03aaa352, 0x03aaa352},
-- {0x0000b2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
-- {0x0000b2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
-- {0x0000b2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
-- {0x0000c2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
-- {0x0000c2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
-- {0x0000c2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
-- {0x0000c2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
-- {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},
--};
-+#define ar9580_1p0_high_power_tx_gain_table ar9580_1p0_low_ob_db_tx_gain_table
-
- static const u32 ar9580_1p0_lowest_ob_db_tx_gain_table[][5] = {
- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-@@ -538,12 +414,7 @@ static const u32 ar9580_1p0_lowest_ob_db
- {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
- };
-
--static const u32 ar9580_1p0_baseband_core_txfir_coeff_japan_2484[][2] = {
-- /* Addr allmodes */
-- {0x0000a398, 0x00000000},
-- {0x0000a39c, 0x6f7f0301},
-- {0x0000a3a0, 0xca9228ee},
--};
-+#define ar9580_1p0_baseband_core_txfir_coeff_japan_2484 ar9462_2p0_baseband_core_txfir_coeff_japan_2484
-
- static const u32 ar9580_1p0_mac_core[][2] = {
- /* Addr allmodes */
-@@ -808,376 +679,11 @@ static const u32 ar9580_1p0_mixed_ob_db_
- {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c},
- };
-
--static const u32 ar9580_1p0_wo_xlna_rx_gain_table[][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},
--};
-+#define ar9580_1p0_wo_xlna_rx_gain_table ar9300Common_wo_xlna_rx_gain_table_2p2
-
--static const u32 ar9580_1p0_soc_postamble[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-- {0x00007010, 0x00000023, 0x00000023, 0x00000023, 0x00000023},
--};
-+#define ar9580_1p0_soc_postamble ar9300_2p2_soc_postamble
-
--static const u32 ar9580_1p0_high_ob_db_tx_gain_table[][5] = {
-- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-- {0x0000a2dc, 0x01feee00, 0x01feee00, 0x03aaa352, 0x03aaa352},
-- {0x0000a2e0, 0x0000f000, 0x0000f000, 0x03ccc584, 0x03ccc584},
-- {0x0000a2e4, 0x01ff0000, 0x01ff0000, 0x03f0f800, 0x03f0f800},
-- {0x0000a2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
-- {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, 0x03aaa352, 0x03aaa352},
-- {0x0000b2e0, 0x0000f000, 0x0000f000, 0x03ccc584, 0x03ccc584},
-- {0x0000b2e4, 0x01ff0000, 0x01ff0000, 0x03f0f800, 0x03f0f800},
-- {0x0000b2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
-- {0x0000c2dc, 0x01feee00, 0x01feee00, 0x03aaa352, 0x03aaa352},
-- {0x0000c2e0, 0x0000f000, 0x0000f000, 0x03ccc584, 0x03ccc584},
-- {0x0000c2e4, 0x01ff0000, 0x01ff0000, 0x03f0f800, 0x03f0f800},
-- {0x0000c2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
-- {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},
--};
-+#define ar9580_1p0_high_ob_db_tx_gain_table ar9300Modes_high_ob_db_tx_gain_table_2p2
-
- static const u32 ar9580_1p0_soc_preamble[][2] = {
- /* Addr allmodes */
-@@ -1189,265 +695,7 @@ static const u32 ar9580_1p0_soc_preamble
- {0x00007048, 0x00000008},
- };
-
--static const u32 ar9580_1p0_rx_gain_table[][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},
--};
-+#define ar9580_1p0_rx_gain_table ar9462_common_rx_gain_table_2p0
-
- static const u32 ar9580_1p0_radio_core[][2] = {
- /* Addr allmodes */
+++ /dev/null
---- a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
-@@ -778,11 +778,11 @@ static const u32 ar9300Common_rx_gain_ta
- {0x0000a074, 0x00000000},
- {0x0000a078, 0x00000000},
- {0x0000a07c, 0x00000000},
-- {0x0000a080, 0x1a1a1a1a},
-- {0x0000a084, 0x1a1a1a1a},
-- {0x0000a088, 0x1a1a1a1a},
-- {0x0000a08c, 0x1a1a1a1a},
-- {0x0000a090, 0x171a1a1a},
-+ {0x0000a080, 0x22222229},
-+ {0x0000a084, 0x1d1d1d1d},
-+ {0x0000a088, 0x1d1d1d1d},
-+ {0x0000a08c, 0x1d1d1d1d},
-+ {0x0000a090, 0x171d1d1d},
- {0x0000a094, 0x11111717},
- {0x0000a098, 0x00030311},
- {0x0000a09c, 0x00000000},
+++ /dev/null
---- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
-@@ -501,7 +501,7 @@ static void ar9003_tx_gain_table_mode1(s
- 5);
- else if (AR_SREV_9340(ah))
- INIT_INI_ARRAY(&ah->iniModesTxGain,
-- ar9340Modes_lowest_ob_db_tx_gain_table_1p0,
-+ ar9340Modes_high_ob_db_tx_gain_table_1p0,
- ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0),
- 5);
- else if (AR_SREV_9485_11(ah))
-@@ -540,7 +540,7 @@ static void ar9003_tx_gain_table_mode2(s
- 5);
- else if (AR_SREV_9340(ah))
- INIT_INI_ARRAY(&ah->iniModesTxGain,
-- ar9340Modes_lowest_ob_db_tx_gain_table_1p0,
-+ ar9340Modes_low_ob_db_tx_gain_table_1p0,
- ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0),
- 5);
- else if (AR_SREV_9485_11(ah))
-@@ -574,7 +574,7 @@ static void ar9003_tx_gain_table_mode3(s
- 5);
- else if (AR_SREV_9340(ah))
- INIT_INI_ARRAY(&ah->iniModesTxGain,
-- ar9340Modes_lowest_ob_db_tx_gain_table_1p0,
-+ ar9340Modes_high_power_tx_gain_table_1p0,
- ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0),
- 5);
- else if (AR_SREV_9485_11(ah))
+++ /dev/null
-From ba1e32844fcd396d90b357d3a620ffc1abcde614 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:10:13 +0200
-Subject: [PATCH 01/20] ath9k: define DEVID for QCA955x
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/hw.h | 1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -48,6 +48,7 @@
- #define AR9300_DEVID_AR9580 0x0033
- #define AR9300_DEVID_AR9462 0x0034
- #define AR9300_DEVID_AR9330 0x0035
-+#define AR9300_DEVID_QCA955X 0x0038
-
- #define AR5416_AR9100_DEVID 0x000b
-
}
--- a/drivers/net/wireless/ath/ath9k/xmit.c
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
-@@ -1988,7 +1988,8 @@ int ath_tx_start(struct ieee80211_hw *hw
+@@ -1987,7 +1987,8 @@ int ath_tx_start(struct ieee80211_hw *hw
ath_txq_lock(sc, txq);
if (txq == sc->tx.txq_map[q] &&
ieee80211_stop_queue(sc->hw, q);
txq->stopped = true;
}
-@@ -2047,7 +2048,8 @@ static void ath_tx_complete(struct ath_s
+@@ -2046,7 +2047,8 @@ static void ath_tx_complete(struct ath_s
if (WARN_ON(--txq->pending_frames < 0))
txq->pending_frames = 0;
}
--- a/drivers/net/wireless/ath/ath9k/debug.c
+++ b/drivers/net/wireless/ath/ath9k/debug.c
-@@ -1702,6 +1702,14 @@ int ath9k_init_debug(struct ath_hw *ah)
+@@ -1701,6 +1701,14 @@ int ath9k_init_debug(struct ath_hw *ah)
&fops_interrupt);
debugfs_create_file("xmit", S_IRUSR, sc->debug.debugfs_phy, sc,
&fops_xmit);
+++ /dev/null
-From b8122a3554e574b154cdf09ae843e6464d8ad1cc Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:10:13 +0200
-Subject: [PATCH 02/20] ath9k: define MAC version for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/reg.h | 4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/reg.h
-+++ b/drivers/net/wireless/ath/ath9k/reg.h
-@@ -798,6 +798,7 @@
- #define AR_SREV_REVISION_9580_10 4 /* AR9580 1.0 */
- #define AR_SREV_VERSION_9462 0x280
- #define AR_SREV_REVISION_9462_20 2
-+#define AR_SREV_VERSION_9550 0x400
-
- #define AR_SREV_5416(_ah) \
- (((_ah)->hw_version.macVersion == AR_SREV_VERSION_5416_PCI) || \
-@@ -905,6 +906,9 @@
- (((_ah)->hw_version.macVersion == AR_SREV_VERSION_9462) && \
- ((_ah)->hw_version.macRev >= AR_SREV_REVISION_9462_20))
-
-+#define AR_SREV_9550(_ah) \
-+ (((_ah)->hw_version.macVersion == AR_SREV_VERSION_9550))
-+
- #define AR_SREV_9580(_ah) \
- (((_ah)->hw_version.macVersion == AR_SREV_VERSION_9580) && \
- ((_ah)->hw_version.macRev >= AR_SREV_REVISION_9580_10))
+++ /dev/null
-From 9bd8677ad5f1814e0f784f92d07ba8bd38c6bc13 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:10:14 +0200
-Subject: [PATCH 03/20] ath9k: set MAC version for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/hw.c | 3 +++
- 1 files changed, 3 insertions(+), 0 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -343,6 +343,9 @@ static void ath9k_hw_read_revisions(stru
- val = REG_READ(ah, AR_SREV);
- ah->hw_version.macRev = MS(val, AR_SREV_REVISION2);
- return;
-+ case AR9300_DEVID_QCA955X:
-+ ah->hw_version.macVersion = AR_SREV_VERSION_9550;
-+ return;
- }
-
- val = REG_READ(ah, AR_SREV) & AR_SREV_ID;
+++ /dev/null
-From 6583f34718e322373130daaca42660c669079384 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:15:59 +0200
-Subject: [PATCH 04/20] ath9k: add platform_device_id for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/ahb.c | 4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/ahb.c
-+++ b/drivers/net/wireless/ath/ath9k/ahb.c
-@@ -35,6 +35,10 @@ static const struct platform_device_id a
- .name = "ar934x_wmac",
- .driver_data = AR9300_DEVID_AR9340,
- },
-+ {
-+ .name = "qca955x_wmac",
-+ .driver_data = AR9300_DEVID_QCA955X,
-+ },
- {},
- };
-
+++ /dev/null
-From 7ea9d187a4334e35d9ed1a3cbeb85d0b1275b24c Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:10:14 +0200
-Subject: [PATCH 05/20] ath9k: add BB name string for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/hw.c | 1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -3135,6 +3135,7 @@ static struct {
- { AR_SREV_VERSION_9340, "9340" },
- { AR_SREV_VERSION_9485, "9485" },
- { AR_SREV_VERSION_9462, "9462" },
-+ { AR_SREV_VERSION_9550, "9550" },
- };
-
- /* For devices with external radios */
+++ /dev/null
-From 68e9cddb98d5a7de130b064ec301e2370679160a Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:10:15 +0200
-Subject: [PATCH 06/20] ath9k: clear pciexpress flag for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/hw.c | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -667,7 +667,7 @@ static int __ath9k_hw_init(struct ath_hw
- }
-
- if (AR_SREV_9271(ah) || AR_SREV_9100(ah) || AR_SREV_9340(ah) ||
-- AR_SREV_9330(ah))
-+ AR_SREV_9330(ah) || AR_SREV_9550(ah))
- ah->is_pciexpress = false;
-
- ah->hw_version.phyRev = REG_READ(ah, AR_PHY_CHIP_ID);
+++ /dev/null
-From 3fa372b3d51c310023a20432ebc8f718c31feff0 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:10:15 +0200
-Subject: [PATCH 07/20] ath9k: enable TX/RX data byte swap for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/hw.c | 3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -1985,7 +1985,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
- REG_WRITE(ah, AR_CFG, AR_CFG_SWTD | AR_CFG_SWRD);
- }
- #ifdef __BIG_ENDIAN
-- else if (AR_SREV_9330(ah) || AR_SREV_9340(ah))
-+ else if (AR_SREV_9330(ah) || AR_SREV_9340(ah) ||
-+ AR_SREV_9550(ah))
- REG_RMW(ah, AR_CFG, AR_CFG_SWRB | AR_CFG_SWTB, 0);
- else
- REG_WRITE(ah, AR_CFG, AR_CFG_SWTD | AR_CFG_SWRD);
+++ /dev/null
-From 33b61be1c9174ed3f779a1d05aee0e4753eb4068 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:10:16 +0200
-Subject: [PATCH 08/20] ath9k: add initvals for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
-Note: Some lines are longer than the 80 character limit,
-and checkpatch.pl complains about those. However I would like
-to keep the existing format because the initval arrays are
-more readable in this form.
-
-Gabor
-
- drivers/net/wireless/ath/ath9k/ar9003_hw.c | 1 +
- .../net/wireless/ath/ath9k/ar955x_1p0_initvals.h | 1284 ++++++++++++++++++++
- 2 files changed, 1285 insertions(+), 0 deletions(-)
- create mode 100644 drivers/net/wireless/ath/ath9k/ar955x_1p0_initvals.h
-
---- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
-@@ -21,6 +21,7 @@
- #include "ar9340_initvals.h"
- #include "ar9330_1p1_initvals.h"
- #include "ar9330_1p2_initvals.h"
-+#include "ar955x_1p0_initvals.h"
- #include "ar9580_1p0_initvals.h"
- #include "ar9462_2p0_initvals.h"
-
---- /dev/null
-+++ b/drivers/net/wireless/ath/ath9k/ar955x_1p0_initvals.h
-@@ -0,0 +1,1284 @@
-+/*
-+ * Copyright (c) 2010-2011 Atheros Communications Inc.
-+ * Copyright (c) 2011-2012 Qualcomm Atheros 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_955X_1P0_H
-+#define INITVALS_955X_1P0_H
-+
-+/* AR955X 1.0 */
-+
-+static const u32 ar955x_1p0_radio_postamble[][5] = {
-+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ {0x00016098, 0xd2dd5554, 0xd2dd5554, 0xd28b3330, 0xd28b3330},
-+ {0x0001609c, 0x0a566f3a, 0x0a566f3a, 0x06345f2a, 0x06345f2a},
-+ {0x000160ac, 0xa4647c00, 0xa4647c00, 0xa4646800, 0xa4646800},
-+ {0x000160b0, 0x01885f52, 0x01885f52, 0x04accf3a, 0x04accf3a},
-+ {0x00016104, 0xb7a00001, 0xb7a00001, 0xb7a00001, 0xb7a00001},
-+ {0x0001610c, 0xc0000000, 0xc0000000, 0xc0000000, 0xc0000000},
-+ {0x00016140, 0x10804008, 0x10804008, 0x10804008, 0x10804008},
-+ {0x00016504, 0xb7a00001, 0xb7a00001, 0xb7a00001, 0xb7a00001},
-+ {0x0001650c, 0xc0000000, 0xc0000000, 0xc0000000, 0xc0000000},
-+ {0x00016540, 0x10804008, 0x10804008, 0x10804008, 0x10804008},
-+ {0x00016904, 0xb7a00001, 0xb7a00001, 0xb7a00001, 0xb7a00001},
-+ {0x0001690c, 0xc0000000, 0xc0000000, 0xc0000000, 0xc0000000},
-+ {0x00016940, 0x10804008, 0x10804008, 0x10804008, 0x10804008},
-+};
-+
-+static const u32 ar955x_1p0_baseband_core_txfir_coeff_japan_2484[][2] = {
-+ /* Addr allmodes */
-+ {0x0000a398, 0x00000000},
-+ {0x0000a39c, 0x6f7f0301},
-+ {0x0000a3a0, 0xca9228ee},
-+};
-+
-+static const u32 ar955x_1p0_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, 0xcfa10820, 0xcfa10820, 0xcfa10822, 0xcfa10822},
-+ {0x00009e44, 0xfe321e27, 0xfe321e27, 0xfe291e27, 0xfe291e27},
-+ {0x00009e48, 0x5030201a, 0x5030201a, 0x50302012, 0x50302012},
-+ {0x00009fc8, 0x0003f000, 0x0003f000, 0x0001a000, 0x0001a000},
-+ {0x0000a204, 0x005c0ec0, 0x005c0ec4, 0x005c0ec4, 0x005c0ec0},
-+ {0x0000a208, 0x00000104, 0x00000104, 0x00000004, 0x00000004},
-+ {0x0000a22c, 0x07e26a2f, 0x07e26a2f, 0x01026a2f, 0x01026a2f},
-+ {0x0000a230, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b},
-+ {0x0000a234, 0x00000fff, 0x10000fff, 0x10000fff, 0x00000fff},
-+ {0x0000a238, 0xffb01018, 0xffb01018, 0xffb01018, 0xffb01018},
-+ {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, 0x00000010, 0x00000010},
-+ {0x0000a288, 0x00000110, 0x00000110, 0x00000110, 0x00000110},
-+ {0x0000a28c, 0x00022222, 0x00022222, 0x00022222, 0x00022222},
-+ {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18},
-+ {0x0000a2cc, 0x18c50033, 0x18c43433, 0x18c41033, 0x18c44c33},
-+ {0x0000a2d0, 0x00041982, 0x00041982, 0x00041982, 0x00041982},
-+ {0x0000a2d8, 0x7999a83b, 0x7999a83b, 0x7999a83b, 0x7999a83b},
-+ {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, 0x00000010, 0x00000010},
-+ {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, 0x00000010, 0x00000010},
-+};
-+
-+static const u32 ar955x_1p0_radio_core[][2] = {
-+ /* Addr allmodes */
-+ {0x00016000, 0x36db6db6},
-+ {0x00016004, 0x6db6db40},
-+ {0x00016008, 0x73f00000},
-+ {0x0001600c, 0x00000000},
-+ {0x00016040, 0x7f80fff8},
-+ {0x0001604c, 0x76d005b5},
-+ {0x00016050, 0x557cf031},
-+ {0x00016054, 0x13449440},
-+ {0x00016058, 0x0c51c92c},
-+ {0x0001605c, 0x3db7fffc},
-+ {0x00016060, 0xfffffffc},
-+ {0x00016064, 0x000f0278},
-+ {0x00016068, 0x6db6db6c},
-+ {0x0001606c, 0x6db60000},
-+ {0x00016080, 0x00080000},
-+ {0x00016084, 0x0e48048c},
-+ {0x00016088, 0x14214514},
-+ {0x0001608c, 0x119f101e},
-+ {0x00016090, 0x24926490},
-+ {0x00016094, 0x00000000},
-+ {0x000160a0, 0x0a108ffe},
-+ {0x000160a4, 0x812fc370},
-+ {0x000160a8, 0x423c8000},
-+ {0x000160b4, 0x92480080},
-+ {0x000160c0, 0x006db6d0},
-+ {0x000160c4, 0x6db6db60},
-+ {0x000160c8, 0x6db6db6c},
-+ {0x000160cc, 0x01e6c000},
-+ {0x00016100, 0x11999601},
-+ {0x00016108, 0x00080010},
-+ {0x00016144, 0x02084080},
-+ {0x00016148, 0x000080c0},
-+ {0x00016280, 0x01800804},
-+ {0x00016284, 0x00038dc5},
-+ {0x00016288, 0x00000000},
-+ {0x0001628c, 0x00000040},
-+ {0x00016380, 0x00000000},
-+ {0x00016384, 0x00000000},
-+ {0x00016388, 0x00400705},
-+ {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, 0x557cf031},
-+ {0x00016454, 0x13449440},
-+ {0x00016458, 0x0c51c92c},
-+ {0x0001645c, 0x3db7fffc},
-+ {0x00016460, 0xfffffffc},
-+ {0x00016464, 0x000f0278},
-+ {0x00016468, 0x6db6db6c},
-+ {0x0001646c, 0x6db60000},
-+ {0x00016500, 0x11999601},
-+ {0x00016508, 0x00080010},
-+ {0x00016544, 0x02084080},
-+ {0x00016548, 0x000080c0},
-+ {0x00016780, 0x00000000},
-+ {0x00016784, 0x00000000},
-+ {0x00016788, 0x00400705},
-+ {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, 0x557cf031},
-+ {0x00016854, 0x13449440},
-+ {0x00016858, 0x0c51c92c},
-+ {0x0001685c, 0x3db7fffc},
-+ {0x00016860, 0xfffffffc},
-+ {0x00016864, 0x000f0278},
-+ {0x00016868, 0x6db6db6c},
-+ {0x0001686c, 0x6db60000},
-+ {0x00016900, 0x11999601},
-+ {0x00016908, 0x00080010},
-+ {0x00016944, 0x02084080},
-+ {0x00016948, 0x000080c0},
-+ {0x00016b80, 0x00000000},
-+ {0x00016b84, 0x00000000},
-+ {0x00016b88, 0x00400705},
-+ {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 ar955x_1p0_modes_xpa_tx_gain_table[][9] = {
-+ /* Addr 5G_HT20_L 5G_HT40_L 5G_HT20_M 5G_HT40_M 5G_HT20_H 5G_HT40_H 2G_HT40 2G_HT20 */
-+ {0x0000a2dc, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xfffd5aaa, 0xfffd5aaa},
-+ {0x0000a2e0, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xfffe9ccc, 0xfffe9ccc},
-+ {0x0000a2e4, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xffffe0f0, 0xffffe0f0},
-+ {0x0000a2e8, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xfffcff00, 0xfffcff00},
-+ {0x0000a410, 0x000050de, 0x000050de, 0x000050de, 0x000050de, 0x000050de, 0x000050de, 0x000050da, 0x000050da},
-+ {0x0000a500, 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000000, 0x00000000},
-+ {0x0000a504, 0x04000005, 0x04000005, 0x04000005, 0x04000005, 0x04000005, 0x04000005, 0x04000002, 0x04000002},
-+ {0x0000a508, 0x08000009, 0x08000009, 0x08000009, 0x08000009, 0x08000009, 0x08000009, 0x08000004, 0x08000004},
-+ {0x0000a50c, 0x0c00000b, 0x0c00000b, 0x0c00000b, 0x0c00000b, 0x0c00000b, 0x0c00000b, 0x0c000006, 0x0c000006},
-+ {0x0000a510, 0x1000000d, 0x1000000d, 0x1000000d, 0x1000000d, 0x1000000d, 0x1000000d, 0x0f00000a, 0x0f00000a},
-+ {0x0000a514, 0x14000011, 0x14000011, 0x14000011, 0x14000011, 0x14000011, 0x14000011, 0x1300000c, 0x1300000c},
-+ {0x0000a518, 0x19004008, 0x19004008, 0x19004008, 0x19004008, 0x18004008, 0x18004008, 0x1700000e, 0x1700000e},
-+ {0x0000a51c, 0x1d00400a, 0x1d00400a, 0x1d00400a, 0x1d00400a, 0x1c00400a, 0x1c00400a, 0x1b000064, 0x1b000064},
-+ {0x0000a520, 0x230020a2, 0x230020a2, 0x210020a2, 0x210020a2, 0x200020a2, 0x200020a2, 0x1f000242, 0x1f000242},
-+ {0x0000a524, 0x2500006e, 0x2500006e, 0x2500006e, 0x2500006e, 0x2400006e, 0x2400006e, 0x23000229, 0x23000229},
-+ {0x0000a528, 0x29022221, 0x29022221, 0x28022221, 0x28022221, 0x27022221, 0x27022221, 0x270002a2, 0x270002a2},
-+ {0x0000a52c, 0x2d00062a, 0x2d00062a, 0x2c00062a, 0x2c00062a, 0x2a00062a, 0x2a00062a, 0x2c001203, 0x2c001203},
-+ {0x0000a530, 0x340220a5, 0x340220a5, 0x320220a5, 0x320220a5, 0x2f0220a5, 0x2f0220a5, 0x30001803, 0x30001803},
-+ {0x0000a534, 0x380022c5, 0x380022c5, 0x350022c5, 0x350022c5, 0x320022c5, 0x320022c5, 0x33000881, 0x33000881},
-+ {0x0000a538, 0x3b002486, 0x3b002486, 0x39002486, 0x39002486, 0x36002486, 0x36002486, 0x38001809, 0x38001809},
-+ {0x0000a53c, 0x3f00248a, 0x3f00248a, 0x3d00248a, 0x3d00248a, 0x3a00248a, 0x3a00248a, 0x3a000814, 0x3a000814},
-+ {0x0000a540, 0x4202242c, 0x4202242c, 0x4102242c, 0x4102242c, 0x3f02242c, 0x3f02242c, 0x3f001a0c, 0x3f001a0c},
-+ {0x0000a544, 0x490044c6, 0x490044c6, 0x460044c6, 0x460044c6, 0x420044c6, 0x420044c6, 0x43001a0e, 0x43001a0e},
-+ {0x0000a548, 0x4d024485, 0x4d024485, 0x4a024485, 0x4a024485, 0x46024485, 0x46024485, 0x46001812, 0x46001812},
-+ {0x0000a54c, 0x51044483, 0x51044483, 0x4e044483, 0x4e044483, 0x4a044483, 0x4a044483, 0x49001884, 0x49001884},
-+ {0x0000a550, 0x5404a40c, 0x5404a40c, 0x5204a40c, 0x5204a40c, 0x4d04a40c, 0x4d04a40c, 0x4d001e84, 0x4d001e84},
-+ {0x0000a554, 0x57024632, 0x57024632, 0x55024632, 0x55024632, 0x52024632, 0x52024632, 0x50001e69, 0x50001e69},
-+ {0x0000a558, 0x5c00a634, 0x5c00a634, 0x5900a634, 0x5900a634, 0x5600a634, 0x5600a634, 0x550006f4, 0x550006f4},
-+ {0x0000a55c, 0x5f026832, 0x5f026832, 0x5d026832, 0x5d026832, 0x5a026832, 0x5a026832, 0x59000ad3, 0x59000ad3},
-+ {0x0000a560, 0x6602b012, 0x6602b012, 0x6202b012, 0x6202b012, 0x5d02b012, 0x5d02b012, 0x5e000ad5, 0x5e000ad5},
-+ {0x0000a564, 0x6e02d0e1, 0x6e02d0e1, 0x6802d0e1, 0x6802d0e1, 0x6002d0e1, 0x6002d0e1, 0x61001ced, 0x61001ced},
-+ {0x0000a568, 0x7202b4c4, 0x7202b4c4, 0x6c02b4c4, 0x6c02b4c4, 0x6502b4c4, 0x6502b4c4, 0x660018d4, 0x660018d4},
-+ {0x0000a56c, 0x75007894, 0x75007894, 0x70007894, 0x70007894, 0x6b007894, 0x6b007894, 0x660018d4, 0x660018d4},
-+ {0x0000a570, 0x7b025c74, 0x7b025c74, 0x75025c74, 0x75025c74, 0x70025c74, 0x70025c74, 0x660018d4, 0x660018d4},
-+ {0x0000a574, 0x8300bcb5, 0x8300bcb5, 0x7a00bcb5, 0x7a00bcb5, 0x7600bcb5, 0x7600bcb5, 0x660018d4, 0x660018d4},
-+ {0x0000a578, 0x8a04dc74, 0x8a04dc74, 0x7f04dc74, 0x7f04dc74, 0x7c04dc74, 0x7c04dc74, 0x660018d4, 0x660018d4},
-+ {0x0000a57c, 0x8a04dc74, 0x8a04dc74, 0x7f04dc74, 0x7f04dc74, 0x7c04dc74, 0x7c04dc74, 0x660018d4, 0x660018d4},
-+ {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+ {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+ {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+ {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03804000, 0x03804000},
-+ {0x0000a610, 0x04c08c01, 0x04c08c01, 0x04808b01, 0x04808b01, 0x04808a01, 0x04808a01, 0x0300ca02, 0x0300ca02},
-+ {0x0000a614, 0x00c0c303, 0x00c0c303, 0x00c0c303, 0x00c0c303, 0x00c0c303, 0x00c0c303, 0x00000e04, 0x00000e04},
-+ {0x0000a618, 0x04010c01, 0x04010c01, 0x03c10b01, 0x03c10b01, 0x03810a01, 0x03810a01, 0x03014000, 0x03014000},
-+ {0x0000a61c, 0x03814e05, 0x03814e05, 0x03414d05, 0x03414d05, 0x03414d05, 0x03414d05, 0x00000000, 0x00000000},
-+ {0x0000a620, 0x04010303, 0x04010303, 0x03c10303, 0x03c10303, 0x03810303, 0x03810303, 0x00000000, 0x00000000},
-+ {0x0000a624, 0x03814e05, 0x03814e05, 0x03414d05, 0x03414d05, 0x03414d05, 0x03414d05, 0x03014000, 0x03014000},
-+ {0x0000a628, 0x00c0c000, 0x00c0c000, 0x00c0c000, 0x00c0c000, 0x00c0c000, 0x00c0c000, 0x03804c05, 0x03804c05},
-+ {0x0000a62c, 0x00c0c303, 0x00c0c303, 0x00c0c303, 0x00c0c303, 0x00c0c303, 0x00c0c303, 0x0701de06, 0x0701de06},
-+ {0x0000a630, 0x03418000, 0x03418000, 0x03018000, 0x03018000, 0x02c18000, 0x02c18000, 0x07819c07, 0x07819c07},
-+ {0x0000a634, 0x03815004, 0x03815004, 0x03414f04, 0x03414f04, 0x03414e04, 0x03414e04, 0x0701dc07, 0x0701dc07},
-+ {0x0000a638, 0x03005302, 0x03005302, 0x02c05202, 0x02c05202, 0x02805202, 0x02805202, 0x0701dc07, 0x0701dc07},
-+ {0x0000a63c, 0x04c09302, 0x04c09302, 0x04809202, 0x04809202, 0x04809202, 0x04809202, 0x0701dc07, 0x0701dc07},
-+ {0x0000b2dc, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xfffd5aaa, 0xfffd5aaa},
-+ {0x0000b2e0, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xfffe9ccc, 0xfffe9ccc},
-+ {0x0000b2e4, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xffffe0f0, 0xffffe0f0},
-+ {0x0000b2e8, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xfffcff00, 0xfffcff00},
-+ {0x0000c2dc, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xffffaaaa, 0xfffd5aaa, 0xfffd5aaa},
-+ {0x0000c2e0, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xffffcccc, 0xfffe9ccc, 0xfffe9ccc},
-+ {0x0000c2e4, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xfffff0f0, 0xffffe0f0, 0xffffe0f0},
-+ {0x0000c2e8, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xffffff00, 0xfffcff00, 0xfffcff00},
-+ {0x00016044, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x010002d4, 0x010002d4},
-+ {0x00016048, 0x62482401, 0x62482401, 0x62482401, 0x62482401, 0x62482401, 0x62482401, 0x66482401, 0x66482401},
-+ {0x00016280, 0x01801e84, 0x01801e84, 0x01801e84, 0x01801e84, 0x01801e84, 0x01801e84, 0x01808e84, 0x01808e84},
-+ {0x00016444, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x010002d4, 0x010002d4},
-+ {0x00016448, 0x62482401, 0x62482401, 0x62482401, 0x62482401, 0x62482401, 0x62482401, 0x66482401, 0x66482401},
-+ {0x00016844, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x010002d4, 0x010002d4},
-+ {0x00016848, 0x62482401, 0x62482401, 0x62482401, 0x62482401, 0x62482401, 0x62482401, 0x66482401, 0x66482401},
-+};
-+
-+static const u32 ar955x_1p0_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, 0x13881c22},
-+ {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},
-+ {0x00008140, 0x000000fe},
-+ {0x00008144, 0xffffffff},
-+ {0x00008168, 0x00000000},
-+ {0x0000816c, 0x00000000},
-+ {0x000081c0, 0x00000000},
-+ {0x000081c4, 0x33332210},
-+ {0x000081ec, 0x00000000},
-+ {0x000081f0, 0x00000000},
-+ {0x000081f4, 0x00000000},
-+ {0x000081f8, 0x00000000},
-+ {0x000081fc, 0x00000000},
-+ {0x00008240, 0x00100000},
-+ {0x00008244, 0x0010f400},
-+ {0x00008248, 0x00000800},
-+ {0x0000824c, 0x0001e800},
-+ {0x00008250, 0x00000000},
-+ {0x00008254, 0x00000000},
-+ {0x00008258, 0x00000000},
-+ {0x0000825c, 0x40000000},
-+ {0x00008260, 0x00080922},
-+ {0x00008264, 0x9d400010},
-+ {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, 0x00001d40},
-+ {0x00008314, 0x00000000},
-+ {0x0000831c, 0x0000010d},
-+ {0x00008328, 0x00000000},
-+ {0x0000832c, 0x0000001f},
-+ {0x00008330, 0x00000302},
-+ {0x00008334, 0x00000700},
-+ {0x00008338, 0xffff0000},
-+ {0x0000833c, 0x02400000},
-+ {0x00008340, 0x000107ff},
-+ {0x00008344, 0xaa48107b},
-+ {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, 0x8c7901ff},
-+};
-+
-+static const u32 ar955x_1p0_common_rx_gain_table[][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, 0x23232323},
-+ {0x0000b084, 0x21232323},
-+ {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 ar955x_1p0_baseband_core[][2] = {
-+ /* Addr allmodes */
-+ {0x00009800, 0xafe68e30},
-+ {0x00009804, 0xfd14e000},
-+ {0x00009808, 0x9c0a9f6b},
-+ {0x0000980c, 0x04900000},
-+ {0x00009814, 0x0280c00a},
-+ {0x00009818, 0x00000000},
-+ {0x0000981c, 0x00020028},
-+ {0x00009834, 0x6400a190},
-+ {0x00009838, 0x0108ecff},
-+ {0x0000983c, 0x14000600},
-+ {0x00009880, 0x201fff00},
-+ {0x00009884, 0x00001042},
-+ {0x000098a4, 0x00200400},
-+ {0x000098b0, 0x32840bbe},
-+ {0x000098bc, 0x00000002},
-+ {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},
-+ {0x00009fc0, 0x813e4788},
-+ {0x00009fc4, 0x0001efb5},
-+ {0x00009fcc, 0x40000014},
-+ {0x00009fd0, 0x01193b93},
-+ {0x0000a20c, 0x00000000},
-+ {0x0000a220, 0x00000000},
-+ {0x0000a224, 0x00000000},
-+ {0x0000a228, 0x10002310},
-+ {0x0000a23c, 0x00000000},
-+ {0x0000a244, 0x0c000000},
-+ {0x0000a248, 0x00000140},
-+ {0x0000a2a0, 0x00000007},
-+ {0x0000a2c0, 0x00000007},
-+ {0x0000a2c8, 0x00000000},
-+ {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, 0x1f020503},
-+ {0x0000a39c, 0x29180c03},
-+ {0x0000a3a0, 0x9a8b6844},
-+ {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, 0x00000000},
-+ {0x0000a3f8, 0x0c9bd380},
-+ {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},
-+ {0x0000a444, 0x00000000},
-+ {0x0000a448, 0x05000080},
-+ {0x0000a44c, 0x00000001},
-+ {0x0000a450, 0x00010000},
-+ {0x0000a458, 0x00000000},
-+ {0x0000a644, 0x3fad9d74},
-+ {0x0000a648, 0x0048060a},
-+ {0x0000a64c, 0x00003c37},
-+ {0x0000a670, 0x03020100},
-+ {0x0000a674, 0x09080504},
-+ {0x0000a678, 0x0d0c0b0a},
-+ {0x0000a67c, 0x13121110},
-+ {0x0000a680, 0x31301514},
-+ {0x0000a684, 0x35343332},
-+ {0x0000a688, 0x00000036},
-+ {0x0000a690, 0x00000838},
-+ {0x0000a7cc, 0x00000000},
-+ {0x0000a7d0, 0x00000000},
-+ {0x0000a7d4, 0x00000004},
-+ {0x0000a7dc, 0x00000000},
-+ {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 ar955x_1p0_common_wo_xlna_rx_gain_table[][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 ar955x_1p0_soc_preamble[][2] = {
-+ /* Addr allmodes */
-+ {0x00007000, 0x00000000},
-+ {0x00007004, 0x00000000},
-+ {0x00007008, 0x00000000},
-+ {0x0000700c, 0x00000000},
-+ {0x0000701c, 0x00000000},
-+ {0x00007020, 0x00000000},
-+ {0x00007024, 0x00000000},
-+ {0x00007028, 0x00000000},
-+ {0x0000702c, 0x00000000},
-+ {0x00007030, 0x00000000},
-+ {0x00007034, 0x00000002},
-+ {0x00007038, 0x000004c2},
-+ {0x00007048, 0x00000000},
-+};
-+
-+static const u32 ar955x_1p0_common_wo_xlna_rx_gain_bounds[][5] = {
-+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ {0x00009e44, 0xfe321e27, 0xfe321e27, 0xfe291e27, 0xfe291e27},
-+ {0x00009e48, 0x5030201a, 0x5030201a, 0x50302012, 0x50302012},
-+};
-+
-+static const u32 ar955x_1p0_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 ar955x_1p0_common_rx_gain_bounds[][5] = {
-+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ {0x00009e44, 0xfe321e27, 0xfe321e27, 0xfe291e27, 0xfe291e27},
-+ {0x00009e48, 0x5030201a, 0x5030201a, 0x50302018, 0x50302018},
-+};
-+
-+static const u32 ar955x_1p0_modes_no_xpa_tx_gain_table[][9] = {
-+ /* Addr 5G_HT20_L 5G_HT40_L 5G_HT20_M 5G_HT40_M 5G_HT20_H 5G_HT40_H 2G_HT40 2G_HT20 */
-+ {0x0000a2dc, 0x01feee00, 0x01feee00, 0x01feee00, 0x01feee00, 0x01feee00, 0x01feee00, 0xfffe5aaa, 0xfffe5aaa},
-+ {0x0000a2e0, 0x0000f000, 0x0000f000, 0x0000f000, 0x0000f000, 0x0000f000, 0x0000f000, 0xfffe9ccc, 0xfffe9ccc},
-+ {0x0000a2e4, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0xffffe0f0, 0xffffe0f0},
-+ {0x0000a2e8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffef00, 0xffffef00},
-+ {0x0000a410, 0x000050d8, 0x000050d8, 0x000050d8, 0x000050d8, 0x000050d8, 0x000050d8, 0x000050d7, 0x000050d7},
-+ {0x0000a500, 0x00002220, 0x00002220, 0x00002220, 0x00002220, 0x00002220, 0x00002220, 0x00000000, 0x00000000},
-+ {0x0000a504, 0x04002222, 0x04002222, 0x04002222, 0x04002222, 0x04002222, 0x04002222, 0x04000002, 0x04000002},
-+ {0x0000a508, 0x09002421, 0x09002421, 0x09002421, 0x09002421, 0x09002421, 0x09002421, 0x08000004, 0x08000004},
-+ {0x0000a50c, 0x0d002621, 0x0d002621, 0x0d002621, 0x0d002621, 0x0d002621, 0x0d002621, 0x0b000006, 0x0b000006},
-+ {0x0000a510, 0x13004620, 0x13004620, 0x13004620, 0x13004620, 0x13004620, 0x13004620, 0x0f00000a, 0x0f00000a},
-+ {0x0000a514, 0x19004a20, 0x19004a20, 0x19004a20, 0x19004a20, 0x19004a20, 0x19004a20, 0x1300000c, 0x1300000c},
-+ {0x0000a518, 0x1d004e20, 0x1d004e20, 0x1d004e20, 0x1d004e20, 0x1d004e20, 0x1d004e20, 0x1700000e, 0x1700000e},
-+ {0x0000a51c, 0x21005420, 0x21005420, 0x21005420, 0x21005420, 0x21005420, 0x21005420, 0x1b000012, 0x1b000012},
-+ {0x0000a520, 0x26005e20, 0x26005e20, 0x26005e20, 0x26005e20, 0x26005e20, 0x26005e20, 0x1f00004a, 0x1f00004a},
-+ {0x0000a524, 0x2b005e40, 0x2b005e40, 0x2b005e40, 0x2b005e40, 0x2b005e40, 0x2b005e40, 0x23000244, 0x23000244},
-+ {0x0000a528, 0x2f005e42, 0x2f005e42, 0x2f005e42, 0x2f005e42, 0x2f005e42, 0x2f005e42, 0x2700022b, 0x2700022b},
-+ {0x0000a52c, 0x33005e44, 0x33005e44, 0x33005e44, 0x33005e44, 0x33005e44, 0x33005e44, 0x2b000625, 0x2b000625},
-+ {0x0000a530, 0x38005e65, 0x38005e65, 0x38005e65, 0x38005e65, 0x38005e65, 0x38005e65, 0x2f001006, 0x2f001006},
-+ {0x0000a534, 0x3c005e69, 0x3c005e69, 0x3c005e69, 0x3c005e69, 0x3c005e69, 0x3c005e69, 0x330008a0, 0x330008a0},
-+ {0x0000a538, 0x40005e6b, 0x40005e6b, 0x40005e6b, 0x40005e6b, 0x40005e6b, 0x40005e6b, 0x37000a2a, 0x37000a2a},
-+ {0x0000a53c, 0x44005e6d, 0x44005e6d, 0x44005e6d, 0x44005e6d, 0x44005e6d, 0x44005e6d, 0x3b001c23, 0x3b001c23},
-+ {0x0000a540, 0x49005e72, 0x49005e72, 0x49005e72, 0x49005e72, 0x49005e72, 0x49005e72, 0x3f0014a0, 0x3f0014a0},
-+ {0x0000a544, 0x4e005eb2, 0x4e005eb2, 0x4e005eb2, 0x4e005eb2, 0x4e005eb2, 0x4e005eb2, 0x43001882, 0x43001882},
-+ {0x0000a548, 0x53005f12, 0x53005f12, 0x53005f12, 0x53005f12, 0x53005f12, 0x53005f12, 0x47001ca2, 0x47001ca2},
-+ {0x0000a54c, 0x59025eb2, 0x59025eb2, 0x59025eb2, 0x59025eb2, 0x59025eb2, 0x59025eb2, 0x4b001ec3, 0x4b001ec3},
-+ {0x0000a550, 0x5e025f12, 0x5e025f12, 0x5e025f12, 0x5e025f12, 0x5e025f12, 0x5e025f12, 0x4f00148c, 0x4f00148c},
-+ {0x0000a554, 0x61027f12, 0x61027f12, 0x61027f12, 0x61027f12, 0x61027f12, 0x61027f12, 0x53001c6e, 0x53001c6e},
-+ {0x0000a558, 0x6702bf12, 0x6702bf12, 0x6702bf12, 0x6702bf12, 0x6702bf12, 0x6702bf12, 0x57001c92, 0x57001c92},
-+ {0x0000a55c, 0x6b02bf14, 0x6b02bf14, 0x6b02bf14, 0x6b02bf14, 0x6b02bf14, 0x6b02bf14, 0x5c001af6, 0x5c001af6},
-+ {0x0000a560, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x5c001af6, 0x5c001af6},
-+ {0x0000a564, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x5c001af6, 0x5c001af6},
-+ {0x0000a568, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x5c001af6, 0x5c001af6},
-+ {0x0000a56c, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x5c001af6, 0x5c001af6},
-+ {0x0000a570, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x5c001af6, 0x5c001af6},
-+ {0x0000a574, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x5c001af6, 0x5c001af6},
-+ {0x0000a578, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x5c001af6, 0x5c001af6},
-+ {0x0000a57c, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x6f02bf16, 0x5c001af6, 0x5c001af6},
-+ {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+ {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+ {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+ {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
-+ {0x0000a610, 0x00804000, 0x00804000, 0x00804000, 0x00804000, 0x00804000, 0x00804000, 0x04005001, 0x04005001},
-+ {0x0000a614, 0x00804201, 0x00804201, 0x00804201, 0x00804201, 0x00804201, 0x00804201, 0x03808e02, 0x03808e02},
-+ {0x0000a618, 0x0280c802, 0x0280c802, 0x0280c802, 0x0280c802, 0x0280c802, 0x0280c802, 0x0300c000, 0x0300c000},
-+ {0x0000a61c, 0x0280ca03, 0x0280ca03, 0x0280ca03, 0x0280ca03, 0x0280ca03, 0x0280ca03, 0x03808e02, 0x03808e02},
-+ {0x0000a620, 0x04c15104, 0x04c15104, 0x04c15104, 0x04c15104, 0x04c15104, 0x04c15104, 0x03410c03, 0x03410c03},
-+ {0x0000a624, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04014c03, 0x04014c03},
-+ {0x0000a628, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x05818d04, 0x05818d04},
-+ {0x0000a62c, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x0801cd04, 0x0801cd04},
-+ {0x0000a630, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x0801e007, 0x0801e007},
-+ {0x0000a634, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x0801e007, 0x0801e007},
-+ {0x0000a638, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x0801e007, 0x0801e007},
-+ {0x0000a63c, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x04c15305, 0x0801e007, 0x0801e007},
-+ {0x0000b2dc, 0x01feee00, 0x01feee00, 0x01feee00, 0x01feee00, 0x01feee00, 0x01feee00, 0xfffe5aaa, 0xfffe5aaa},
-+ {0x0000b2e0, 0x0000f000, 0x0000f000, 0x0000f000, 0x0000f000, 0x0000f000, 0x0000f000, 0xfffe9ccc, 0xfffe9ccc},
-+ {0x0000b2e4, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0xffffe0f0, 0xffffe0f0},
-+ {0x0000b2e8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffef00, 0xffffef00},
-+ {0x0000c2dc, 0x01feee00, 0x01feee00, 0x01feee00, 0x01feee00, 0x01feee00, 0x01feee00, 0xfffe5aaa, 0xfffe5aaa},
-+ {0x0000c2e0, 0x0000f000, 0x0000f000, 0x0000f000, 0x0000f000, 0x0000f000, 0x0000f000, 0xfffe9ccc, 0xfffe9ccc},
-+ {0x0000c2e4, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0x01ff0000, 0xffffe0f0, 0xffffe0f0},
-+ {0x0000c2e8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffef00, 0xffffef00},
-+ {0x00016044, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x054922d4, 0x054922d4},
-+ {0x00016048, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401},
-+ {0x00016444, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x054922d4, 0x054922d4},
-+ {0x00016448, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401},
-+ {0x00016844, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x056db2d4, 0x054922d4, 0x054922d4},
-+ {0x00016848, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401, 0x66482401},
-+};
-+
-+static const u32 ar955x_1p0_soc_postamble[][5] = {
-+ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
-+ {0x00007010, 0x00000023, 0x00000023, 0x00000023, 0x00000023},
-+};
-+
-+static const u32 ar955x_1p0_modes_fast_clock[][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},
-+};
-+
-+#endif /* INITVALS_955X_1P0_H */
+++ /dev/null
-From 2b4e3da2e595e1c76f65f7da752ec1f037446bd2 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:10:16 +0200
-Subject: [PATCH 09/20] ath9k: add mode register initialization code for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/ar9003_hw.c | 86 ++++++++++++++++++++++++++-
- drivers/net/wireless/ath/ath9k/ar9003_phy.c | 61 +++++++++++++++++++-
- drivers/net/wireless/ath/ath9k/hw.h | 1 +
- 3 files changed, 145 insertions(+), 3 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
-@@ -328,7 +328,61 @@ static void ar9003_hw_init_mode_regs(str
-
- INIT_INI_ARRAY(&ah->ini_japan2484, AR9462_BBC_TXIFR_COEFFJ,
- ARRAY_SIZE(AR9462_BBC_TXIFR_COEFFJ), 2);
-+ } else if (AR_SREV_9550(ah)) {
-+ /* mac */
-+ INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
-+ INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
-+ ar955x_1p0_mac_core,
-+ ARRAY_SIZE(ar955x_1p0_mac_core), 2);
-+ INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
-+ ar955x_1p0_mac_postamble,
-+ ARRAY_SIZE(ar955x_1p0_mac_postamble), 5);
-+
-+ /* bb */
-+ INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0);
-+ INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
-+ ar955x_1p0_baseband_core,
-+ ARRAY_SIZE(ar955x_1p0_baseband_core), 2);
-+ INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
-+ ar955x_1p0_baseband_postamble,
-+ ARRAY_SIZE(ar955x_1p0_baseband_postamble), 5);
-+
-+ /* radio */
-+ INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0);
-+ INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
-+ ar955x_1p0_radio_core,
-+ ARRAY_SIZE(ar955x_1p0_radio_core), 2);
-+ INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST],
-+ ar955x_1p0_radio_postamble,
-+ ARRAY_SIZE(ar955x_1p0_radio_postamble), 5);
-+
-+ /* soc */
-+ INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
-+ ar955x_1p0_soc_preamble,
-+ ARRAY_SIZE(ar955x_1p0_soc_preamble), 2);
-+ INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0);
-+ INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
-+ ar955x_1p0_soc_postamble,
-+ ARRAY_SIZE(ar955x_1p0_soc_postamble), 5);
-
-+ /* rx/tx gain */
-+ INIT_INI_ARRAY(&ah->iniModesRxGain,
-+ ar955x_1p0_common_wo_xlna_rx_gain_table,
-+ ARRAY_SIZE(ar955x_1p0_common_wo_xlna_rx_gain_table),
-+ 2);
-+ INIT_INI_ARRAY(&ah->ini_modes_rx_gain_bounds,
-+ ar955x_1p0_common_wo_xlna_rx_gain_bounds,
-+ ARRAY_SIZE(ar955x_1p0_common_wo_xlna_rx_gain_bounds),
-+ 5);
-+ INIT_INI_ARRAY(&ah->iniModesTxGain,
-+ ar955x_1p0_modes_xpa_tx_gain_table,
-+ ARRAY_SIZE(ar955x_1p0_modes_xpa_tx_gain_table),
-+ 9);
-+
-+ /* Fast clock modal settings */
-+ INIT_INI_ARRAY(&ah->iniModesFastClock,
-+ ar955x_1p0_modes_fast_clock,
-+ ARRAY_SIZE(ar955x_1p0_modes_fast_clock), 3);
- } else if (AR_SREV_9580(ah)) {
- /* mac */
- INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
-@@ -471,6 +525,11 @@ static void ar9003_tx_gain_table_mode0(s
- ar9485_modes_lowest_ob_db_tx_gain_1_1,
- ARRAY_SIZE(ar9485_modes_lowest_ob_db_tx_gain_1_1),
- 5);
-+ else if (AR_SREV_9550(ah))
-+ INIT_INI_ARRAY(&ah->iniModesTxGain,
-+ ar955x_1p0_modes_xpa_tx_gain_table,
-+ ARRAY_SIZE(ar955x_1p0_modes_xpa_tx_gain_table),
-+ 9);
- else if (AR_SREV_9580(ah))
- INIT_INI_ARRAY(&ah->iniModesTxGain,
- ar9580_1p0_lowest_ob_db_tx_gain_table,
-@@ -515,6 +574,11 @@ static void ar9003_tx_gain_table_mode1(s
- ar9580_1p0_high_ob_db_tx_gain_table,
- ARRAY_SIZE(ar9580_1p0_high_ob_db_tx_gain_table),
- 5);
-+ else if (AR_SREV_9550(ah))
-+ INIT_INI_ARRAY(&ah->iniModesTxGain,
-+ ar955x_1p0_modes_no_xpa_tx_gain_table,
-+ ARRAY_SIZE(ar955x_1p0_modes_no_xpa_tx_gain_table),
-+ 9);
- else if (AR_SREV_9462_20(ah))
- INIT_INI_ARRAY(&ah->iniModesTxGain,
- ar9462_modes_high_ob_db_tx_gain_table_2p0,
-@@ -636,7 +700,16 @@ static void ar9003_rx_gain_table_mode0(s
- ar9485Common_wo_xlna_rx_gain_1_1,
- ARRAY_SIZE(ar9485Common_wo_xlna_rx_gain_1_1),
- 2);
-- else if (AR_SREV_9580(ah))
-+ else if (AR_SREV_9550(ah)) {
-+ INIT_INI_ARRAY(&ah->iniModesRxGain,
-+ ar955x_1p0_common_rx_gain_table,
-+ ARRAY_SIZE(ar955x_1p0_common_rx_gain_table),
-+ 2);
-+ INIT_INI_ARRAY(&ah->ini_modes_rx_gain_bounds,
-+ ar955x_1p0_common_rx_gain_bounds,
-+ ARRAY_SIZE(ar955x_1p0_common_rx_gain_bounds),
-+ 5);
-+ } else if (AR_SREV_9580(ah))
- INIT_INI_ARRAY(&ah->iniModesRxGain,
- ar9580_1p0_rx_gain_table,
- ARRAY_SIZE(ar9580_1p0_rx_gain_table),
-@@ -680,7 +753,16 @@ static void ar9003_rx_gain_table_mode1(s
- ar9462_common_wo_xlna_rx_gain_table_2p0,
- ARRAY_SIZE(ar9462_common_wo_xlna_rx_gain_table_2p0),
- 2);
-- else if (AR_SREV_9580(ah))
-+ else if (AR_SREV_9550(ah)) {
-+ INIT_INI_ARRAY(&ah->iniModesRxGain,
-+ ar955x_1p0_common_wo_xlna_rx_gain_table,
-+ ARRAY_SIZE(ar955x_1p0_common_wo_xlna_rx_gain_table),
-+ 2);
-+ INIT_INI_ARRAY(&ah->ini_modes_rx_gain_bounds,
-+ ar955x_1p0_common_wo_xlna_rx_gain_bounds,
-+ ARRAY_SIZE(ar955x_1p0_common_wo_xlna_rx_gain_bounds),
-+ 5);
-+ } else if (AR_SREV_9580(ah))
- INIT_INI_ARRAY(&ah->iniModesRxGain,
- ar9580_1p0_wo_xlna_rx_gain_table,
- ARRAY_SIZE(ar9580_1p0_wo_xlna_rx_gain_table),
---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-@@ -620,6 +620,50 @@ static void ar9003_hw_prog_ini(struct at
- }
- }
-
-+static int ar9550_hw_get_modes_txgain_index(struct ath_hw *ah,
-+ struct ath9k_channel *chan)
-+{
-+ int ret;
-+
-+ switch (chan->chanmode) {
-+ case CHANNEL_A:
-+ case CHANNEL_A_HT20:
-+ if (chan->channel <= 5350)
-+ ret = 1;
-+ else if ((chan->channel > 5350) && (chan->channel <= 5600))
-+ ret = 3;
-+ else
-+ ret = 5;
-+ break;
-+
-+ case CHANNEL_A_HT40PLUS:
-+ case CHANNEL_A_HT40MINUS:
-+ if (chan->channel <= 5350)
-+ ret = 2;
-+ else if ((chan->channel > 5350) && (chan->channel <= 5600))
-+ ret = 4;
-+ else
-+ ret = 6;
-+ break;
-+
-+ case CHANNEL_G:
-+ case CHANNEL_G_HT20:
-+ case CHANNEL_B:
-+ ret = 8;
-+ break;
-+
-+ case CHANNEL_G_HT40PLUS:
-+ case CHANNEL_G_HT40MINUS:
-+ ret = 7;
-+ break;
-+
-+ default:
-+ ret = -EINVAL;
-+ }
-+
-+ return ret;
-+}
-+
- static int ar9003_hw_process_ini(struct ath_hw *ah,
- struct ath9k_channel *chan)
- {
-@@ -661,7 +705,22 @@ static int ar9003_hw_process_ini(struct
- }
-
- REG_WRITE_ARRAY(&ah->iniModesRxGain, 1, regWrites);
-- REG_WRITE_ARRAY(&ah->iniModesTxGain, modesIndex, regWrites);
-+ if (AR_SREV_9550(ah))
-+ REG_WRITE_ARRAY(&ah->ini_modes_rx_gain_bounds, modesIndex,
-+ regWrites);
-+
-+ if (AR_SREV_9550(ah)) {
-+ int modes_txgain_index;
-+
-+ modes_txgain_index = ar9550_hw_get_modes_txgain_index(ah, chan);
-+ if (modes_txgain_index < 0)
-+ return -EINVAL;
-+
-+ REG_WRITE_ARRAY(&ah->iniModesTxGain, modes_txgain_index,
-+ regWrites);
-+ } else {
-+ REG_WRITE_ARRAY(&ah->iniModesTxGain, modesIndex, regWrites);
-+ }
-
- /*
- * For 5GHz channels requiring Fast Clock, apply
---- a/drivers/net/wireless/ath/ath9k/hw.h
-+++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -820,6 +820,7 @@ struct ath_hw {
- struct ar5416IniArray iniModesFastClock;
- struct ar5416IniArray iniAdditional;
- struct ar5416IniArray iniModesRxGain;
-+ struct ar5416IniArray ini_modes_rx_gain_bounds;
- struct ar5416IniArray iniModesTxGain;
- struct ar5416IniArray iniCckfirNormal;
- struct ar5416IniArray iniCckfirJapan2484;
+++ /dev/null
-From 987807e9e1a0ec0767635d0bd63003766fb527ad Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:16:06 +0200
-Subject: [PATCH 10/20] ath9k: read spur frequency information from eeprom for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/ar9003_phy.c | 6 ++++--
- 1 files changed, 4 insertions(+), 2 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-@@ -180,7 +180,8 @@ static void ar9003_hw_spur_mitigate_mrc_
- * is out-of-band and can be ignored.
- */
-
-- if (AR_SREV_9485(ah) || AR_SREV_9340(ah) || AR_SREV_9330(ah)) {
-+ if (AR_SREV_9485(ah) || AR_SREV_9340(ah) || AR_SREV_9330(ah) ||
-+ AR_SREV_9550(ah)) {
- spur_fbin_ptr = ar9003_get_spur_chan_ptr(ah,
- IS_CHAN_2GHZ(chan));
- if (spur_fbin_ptr[0] == 0) /* No spur */
-@@ -207,7 +208,8 @@ static void ar9003_hw_spur_mitigate_mrc_
- if (AR_SREV_9462(ah) && (i == 0 || i == 3))
- continue;
- negative = 0;
-- if (AR_SREV_9485(ah) || AR_SREV_9340(ah) || AR_SREV_9330(ah))
-+ if (AR_SREV_9485(ah) || AR_SREV_9340(ah) || AR_SREV_9330(ah) ||
-+ AR_SREV_9550(ah))
- cur_bb_spur = ath9k_hw_fbin2freq(spur_fbin_ptr[i],
- IS_CHAN_2GHZ(chan));
- else
+++ /dev/null
-From a317eaa189d885e53400dc86c131390be17fd760 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:15:58 +0200
-Subject: [PATCH 11/20] ath9k: fix XPABIASLEVEL settings for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 2 +-
- drivers/net/wireless/ath/ath9k/ar9003_phy.h | 4 ++--
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
-@@ -3519,7 +3519,7 @@ static void ar9003_hw_xpa_bias_level_app
-
- if (AR_SREV_9485(ah) || AR_SREV_9330(ah) || AR_SREV_9340(ah))
- REG_RMW_FIELD(ah, AR_CH0_TOP2, AR_CH0_TOP2_XPABIASLVL, bias);
-- else if (AR_SREV_9462(ah))
-+ else if (AR_SREV_9462(ah) || AR_SREV_9550(ah))
- REG_RMW_FIELD(ah, AR_CH0_TOP, AR_CH0_TOP_XPABIASLVL, bias);
- else {
- REG_RMW_FIELD(ah, AR_CH0_TOP, AR_CH0_TOP_XPABIASLVL, bias);
---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
-@@ -636,8 +636,8 @@
-
- #define AR_CH0_TOP (AR_SREV_9300(ah) ? 0x16288 : \
- ((AR_SREV_9462(ah) ? 0x1628c : 0x16280)))
--#define AR_CH0_TOP_XPABIASLVL (0x300)
--#define AR_CH0_TOP_XPABIASLVL_S (8)
-+#define AR_CH0_TOP_XPABIASLVL (AR_SREV_9550(ah) ? 0x3c0 : 0x300)
-+#define AR_CH0_TOP_XPABIASLVL_S (AR_SREV_9550(ah) ? 6 : 8)
-
- #define AR_CH0_THERM (AR_SREV_9300(ah) ? 0x16290 : \
- ((AR_SREV_9485(ah) ? 0x1628c : 0x16294)))
+++ /dev/null
-From 48032d5c88c936fc84a2d676474c5fe714d8ef94 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:15:58 +0200
-Subject: [PATCH 12/20] ath9k: fix antenna control configuration for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 3 +++
- drivers/net/wireless/ath/ath9k/ar9003_phy.h | 2 ++
- 2 files changed, 5 insertions(+), 0 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
-@@ -3601,6 +3601,9 @@ static void ar9003_hw_ant_ctrl_apply(str
- if (AR_SREV_9462(ah)) {
- REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM,
- AR_SWITCH_TABLE_COM_AR9462_ALL, value);
-+ } else if (AR_SREV_9550(ah)) {
-+ REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM,
-+ AR_SWITCH_TABLE_COM_AR9550_ALL, value);
- } else
- REG_RMW_FIELD(ah, AR_PHY_SWITCH_COM,
- AR_SWITCH_TABLE_COM_ALL, value);
---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.h
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
-@@ -650,6 +650,8 @@
- #define AR_SWITCH_TABLE_COM_ALL_S (0)
- #define AR_SWITCH_TABLE_COM_AR9462_ALL (0xffffff)
- #define AR_SWITCH_TABLE_COM_AR9462_ALL_S (0)
-+#define AR_SWITCH_TABLE_COM_AR9550_ALL (0xffffff)
-+#define AR_SWITCH_TABLE_COM_AR9550_ALL_S (0)
- #define AR_SWITCH_TABLE_COM_SPDT (0x00f00000)
- #define AR_SWITCH_TABLE_COM_SPDT_ALL (0x0000fff0)
- #define AR_SWITCH_TABLE_COM_SPDT_ALL_S (4)
+++ /dev/null
-From 76ea066dcf42308aec8d20ef75170c1ecae82e60 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:15:58 +0200
-Subject: [PATCH 13/20] ath9k: fix PAPRD settings for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/ar9003_paprd.c | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/ar9003_paprd.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_paprd.c
-@@ -211,7 +211,7 @@ static int ar9003_paprd_setup_single_tab
- 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);
-- if (AR_SREV_9485(ah) || AR_SREV_9462(ah))
-+ if (AR_SREV_9485(ah) || AR_SREV_9462(ah) || AR_SREV_9550(ah))
- REG_RMW_FIELD(ah, AR_PHY_PAPRD_TRAINER_CNTL3,
- AR_PHY_PAPRD_TRAINER_CNTL3_CF_PAPRD_QUICK_DROP,
- -3);
+++ /dev/null
-From 5e08c36e3ef57712fee83248d0db3d2837e13f5f Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:15:58 +0200
-Subject: [PATCH 14/20] ath9k: fix RF channel frequency configuration for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/ar9003_phy.c | 5 +++--
- 1 files changed, 3 insertions(+), 2 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
-@@ -99,7 +99,7 @@ static int ar9003_hw_set_channel(struct
- channelSel = (freq * 4) / 120;
- chan_frac = (((freq * 4) % 120) * 0x20000) / 120;
- channelSel = (channelSel << 17) | chan_frac;
-- } else if (AR_SREV_9340(ah)) {
-+ } else if (AR_SREV_9340(ah) || AR_SREV_9550(ah)) {
- if (ah->is_clk_25mhz) {
- u32 chan_frac;
-
-@@ -113,7 +113,8 @@ static int ar9003_hw_set_channel(struct
- /* Set to 2G mode */
- bMode = 1;
- } else {
-- if (AR_SREV_9340(ah) && ah->is_clk_25mhz) {
-+ if ((AR_SREV_9340(ah) || AR_SREV_9550(ah)) &&
-+ ah->is_clk_25mhz) {
- u32 chan_frac;
-
- channelSel = (freq * 2) / 75;
+++ /dev/null
-From 70a436c98a8479f15fe6ba7f894f88eede238dfa Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:15:58 +0200
-Subject: [PATCH 15/20] ath9k: disable SYNC_HOST1_FATAL interrupts for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/hw.c | 2 +-
- drivers/net/wireless/ath/ath9k/mac.c | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -939,7 +939,7 @@ static void ath9k_hw_init_interrupt_mask
- AR_IMR_RXORN |
- AR_IMR_BCNMISC;
-
-- if (AR_SREV_9340(ah))
-+ if (AR_SREV_9340(ah) || AR_SREV_9550(ah))
- sync_default &= ~AR_INTR_SYNC_HOST1_FATAL;
-
- if (AR_SREV_9300_20_OR_LATER(ah)) {
---- a/drivers/net/wireless/ath/ath9k/mac.c
-+++ b/drivers/net/wireless/ath/ath9k/mac.c
-@@ -810,7 +810,7 @@ void ath9k_hw_enable_interrupts(struct a
- return;
- }
-
-- if (AR_SREV_9340(ah))
-+ if (AR_SREV_9340(ah) || AR_SREV_9550(ah))
- sync_default &= ~AR_INTR_SYNC_HOST1_FATAL;
-
- async_mask = AR_INTR_MAC_IRQ;
+++ /dev/null
-From 9c598271929ea9a54f57e82af15260dc4afea590 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:15:58 +0200
-Subject: [PATCH 16/20] ath9k: skip internal regulator configuration for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
-+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
-@@ -3970,7 +3970,7 @@ static void ath9k_hw_ar9300_set_board_va
- ar9003_hw_drive_strength_apply(ah);
- ar9003_hw_atten_apply(ah, chan);
- ar9003_hw_quick_drop_apply(ah, chan->channel);
-- if (!AR_SREV_9330(ah) && !AR_SREV_9340(ah))
-+ if (!AR_SREV_9330(ah) && !AR_SREV_9340(ah) && !AR_SREV_9550(ah))
- ar9003_hw_internal_regulator_apply(ah);
- if (AR_SREV_9485(ah) || AR_SREV_9330(ah) || AR_SREV_9340(ah))
- ar9003_hw_apply_tuning_caps(ah);
+++ /dev/null
-From d211df2956ae9d696bb0cab985426e0d236544b8 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:16:00 +0200
-Subject: [PATCH 17/20] ath9k: fix PLL initialization for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/hw.c | 27 +++++++++++++++++++--------
- 1 files changed, 19 insertions(+), 8 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -861,7 +861,7 @@ static void ath9k_hw_init_pll(struct ath
- /* program BB PLL phase_shift */
- REG_RMW_FIELD(ah, AR_CH0_BB_DPLL3,
- AR_CH0_BB_DPLL3_PHASE_SHIFT, 0x1);
-- } else if (AR_SREV_9340(ah)) {
-+ } else if (AR_SREV_9340(ah) || AR_SREV_9550(ah)) {
- u32 regval, pll2_divint, pll2_divfrac, refdiv;
-
- REG_WRITE(ah, AR_RTC_PLL_CONTROL, 0x1142c);
-@@ -875,9 +875,15 @@ static void ath9k_hw_init_pll(struct ath
- pll2_divfrac = 0x1eb85;
- refdiv = 3;
- } else {
-- pll2_divint = 88;
-- pll2_divfrac = 0;
-- refdiv = 5;
-+ if (AR_SREV_9340(ah)) {
-+ pll2_divint = 88;
-+ pll2_divfrac = 0;
-+ refdiv = 5;
-+ } else {
-+ pll2_divint = 0x11;
-+ pll2_divfrac = 0x26666;
-+ refdiv = 1;
-+ }
- }
-
- regval = REG_READ(ah, AR_PHY_PLL_MODE);
-@@ -890,8 +896,12 @@ static void ath9k_hw_init_pll(struct ath
- udelay(100);
-
- regval = REG_READ(ah, AR_PHY_PLL_MODE);
-- regval = (regval & 0x80071fff) | (0x1 << 30) | (0x1 << 13) |
-- (0x4 << 26) | (0x18 << 19);
-+ if (AR_SREV_9340(ah))
-+ regval = (regval & 0x80071fff) | (0x1 << 30) |
-+ (0x1 << 13) | (0x4 << 26) | (0x18 << 19);
-+ else
-+ regval = (regval & 0x80071fff) | (0x3 << 30) |
-+ (0x1 << 13) | (0x4 << 26) | (0x60 << 19);
- REG_WRITE(ah, AR_PHY_PLL_MODE, regval);
- REG_WRITE(ah, AR_PHY_PLL_MODE,
- REG_READ(ah, AR_PHY_PLL_MODE) & 0xfffeffff);
-@@ -902,7 +912,8 @@ static void ath9k_hw_init_pll(struct ath
-
- REG_WRITE(ah, AR_RTC_PLL_CONTROL, pll);
-
-- if (AR_SREV_9485(ah) || AR_SREV_9340(ah) || AR_SREV_9330(ah))
-+ if (AR_SREV_9485(ah) || AR_SREV_9340(ah) || AR_SREV_9330(ah) ||
-+ AR_SREV_9550(ah))
- udelay(1000);
-
- /* Switch the core clock for ar9271 to 117Mhz */
-@@ -915,7 +926,7 @@ static void ath9k_hw_init_pll(struct ath
-
- REG_WRITE(ah, AR_RTC_SLEEP_CLK, AR_RTC_FORCE_DERIVED_CLK);
-
-- if (AR_SREV_9340(ah)) {
-+ if (AR_SREV_9340(ah) || AR_SREV_9550(ah)) {
- if (ah->is_clk_25mhz) {
- REG_WRITE(ah, AR_RTC_DERIVED_CLK, 0x17c << 1);
- REG_WRITE(ah, AR_SLP32_MODE, 0x0010f3d7);
+++ /dev/null
-From 29fe3ae617d86bf1b39d15e43cee29b723118648 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:15:59 +0200
-Subject: [PATCH 18/20] ath9k: enable PLL workaround for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/main.c | 3 ++-
- 1 files changed, 2 insertions(+), 1 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/main.c
-+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -167,7 +167,8 @@ static void ath_restart_work(struct ath_
-
- ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, 0);
-
-- if (AR_SREV_9485(sc->sc_ah) || AR_SREV_9340(sc->sc_ah))
-+ if (AR_SREV_9340(sc->sc_ah) || AR_SREV_9485(sc->sc_ah) ||
-+ AR_SREV_9550(sc->sc_ah))
- ieee80211_queue_delayed_work(sc->hw, &sc->hw_pll_work,
- msecs_to_jiffies(ATH_PLL_WORK_INTERVAL));
-
+++ /dev/null
-From f8e7d8fcb297db362c9288ef5f1cd778e7ddd1a9 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:15:59 +0200
-Subject: [PATCH 19/20] ath9k: set 4ADDRESS bit in RX filter for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/mac.h | 1 +
- drivers/net/wireless/ath/ath9k/recv.c | 3 +++
- 2 files changed, 4 insertions(+), 0 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/mac.h
-+++ b/drivers/net/wireless/ath/ath9k/mac.h
-@@ -642,6 +642,7 @@ enum ath9k_rx_filter {
- ATH9K_RX_FILTER_PHYRADAR = 0x00002000,
- ATH9K_RX_FILTER_MCAST_BCAST_ALL = 0x00008000,
- ATH9K_RX_FILTER_CONTROL_WRAPPER = 0x00080000,
-+ ATH9K_RX_FILTER_4ADDRESS = 0x00100000,
- };
-
- #define ATH9K_RATESERIES_RTS_CTS 0x0001
---- a/drivers/net/wireless/ath/ath9k/recv.c
-+++ b/drivers/net/wireless/ath/ath9k/recv.c
-@@ -430,6 +430,9 @@ u32 ath_calcrxfilter(struct ath_softc *s
- rfilt |= ATH9K_RX_FILTER_MCAST_BCAST_ALL;
- }
-
-+ if (AR_SREV_9550(sc->sc_ah))
-+ rfilt |= ATH9K_RX_FILTER_4ADDRESS;
-+
- return rfilt;
-
- }
+++ /dev/null
-From 23693513280521914ceb6d92c1bd7613e7b19c58 Mon Sep 17 00:00:00 2001
-From: Gabor Juhos <juhosg@openwrt.org>
-Date: Mon, 2 Jul 2012 17:16:00 +0200
-Subject: [PATCH 20/20] ath9k: enable support for AR9550
-
-Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
-Acked-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com>
----
- drivers/net/wireless/ath/ath9k/hw.c | 2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/hw.c
-+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -658,6 +658,7 @@ static int __ath9k_hw_init(struct ath_hw
- case AR_SREV_VERSION_9485:
- case AR_SREV_VERSION_9340:
- case AR_SREV_VERSION_9462:
-+ case AR_SREV_VERSION_9550:
- break;
- default:
- ath_err(common,
-@@ -735,6 +736,7 @@ int ath9k_hw_init(struct ath_hw *ah)
- case AR9300_DEVID_AR9485_PCIE:
- case AR9300_DEVID_AR9330:
- case AR9300_DEVID_AR9340:
-+ case AR9300_DEVID_QCA955X:
- case AR9300_DEVID_AR9580:
- case AR9300_DEVID_AR9462:
- break;
/*
* PCI driver handlers.
*/
-@@ -383,6 +384,7 @@ int rt2x00pci_resume(struct pci_dev *pci
+@@ -392,6 +393,7 @@ int rt2x00pci_resume(struct pci_dev *pci
}
EXPORT_SYMBOL_GPL(rt2x00pci_resume);
#endif /* CONFIG_PM */
--- a/drivers/net/wireless/rt2x00/rt2x00pci.c
+++ b/drivers/net/wireless/rt2x00/rt2x00pci.c
-@@ -272,8 +272,10 @@ int rt2x00pci_probe(struct pci_dev *pci_
+@@ -273,8 +273,10 @@ int rt2x00pci_probe(struct pci_dev *pci_
pci_set_master(pci_dev);
+}
--- a/drivers/net/wireless/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/rt2x00/rt2x00.h
-@@ -559,6 +559,7 @@ struct rt2x00lib_ops {
+@@ -560,6 +560,7 @@ struct rt2x00lib_ops {
const u8 *data, const size_t len);
int (*load_firmware) (struct rt2x00_dev *rt2x00dev,
const u8 *data, const size_t len);
/*
* Device initialization/deinitialization handlers.
-@@ -720,6 +721,7 @@ enum rt2x00_capability_flags {
+@@ -721,6 +722,7 @@ enum rt2x00_capability_flags {
REQUIRE_SW_SEQNO,
REQUIRE_HT_TX_DESC,
REQUIRE_PS_AUTOWAKE,
/*
* Capabilities
-@@ -975,6 +977,11 @@ struct rt2x00_dev {
+@@ -976,6 +978,11 @@ struct rt2x00_dev {
const struct firmware *fw;
/*
select RT2X00_LIB_CRYPTO
select CRC_CCITT
select EEPROM_93CX6
-@@ -204,6 +205,9 @@ config RT2X00_LIB_FIRMWARE
+@@ -212,6 +213,9 @@ config RT2X00_LIB_FIRMWARE
config RT2X00_LIB_CRYPTO
boolean
#ifdef CONFIG_PCI
static void rt2800pci_eepromregister_read(struct eeprom_93cx6 *eeprom)
-@@ -311,6 +301,20 @@ static int rt2800pci_write_firmware(stru
+@@ -317,6 +307,20 @@ static int rt2800pci_write_firmware(stru
}
/*
* Initialization functions.
*/
static bool rt2800pci_get_entry_state(struct queue_entry *entry)
-@@ -1082,6 +1086,7 @@ static const struct rt2x00lib_ops rt2800
+@@ -1159,6 +1163,7 @@ static const struct rt2x00lib_ops rt2800
.get_firmware_name = rt2800pci_get_firmware_name,
.check_firmware = rt2800_check_firmware,
.load_firmware = rt2800_load_firmware,
--- a/config.mk
+++ b/config.mk
-@@ -619,6 +619,7 @@ export CONFIG_RT2X00=y
+@@ -624,6 +624,7 @@ export CONFIG_RT2X00=y
export CONFIG_RT2X00_LIB=m
export CONFIG_RT2800_LIB=m
export CONFIG_RT2X00_LIB_FIRMWARE=y
{
memcpy(rt2x00dev->eeprom, rt2x00dev->eeprom_file->data, EEPROM_SIZE);
}
-@@ -968,8 +968,9 @@ static int rt2800pci_validate_eeprom(str
+@@ -974,8 +974,9 @@ static int rt2800pci_validate_eeprom(str
/*
* Read EEPROM into buffer
*/
+ struct rt2x00_platform_data *pdata;
struct rt2x00_dev *rt2x00dev;
int retval;
-
-@@ -299,6 +300,12 @@ int rt2x00pci_probe(struct pci_dev *pci_
+ u16 chip;
+@@ -300,6 +301,12 @@ int rt2x00pci_probe(struct pci_dev *pci_
rt2x00dev->irq = pci_dev->irq;
rt2x00dev->name = pci_name(pci_dev);
num_rates += 4;
--- a/drivers/net/wireless/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/rt2x00/rt2x00.h
-@@ -424,6 +424,7 @@ struct hw_mode_spec {
+@@ -425,6 +425,7 @@ struct hw_mode_spec {
unsigned int supported_bands;
#define SUPPORT_BAND_2GHZ 0x00000001
#define SUPPORT_BAND_5GHZ 0x00000002
{
--- a/drivers/net/wireless/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/rt2x00/rt2x00.h
-@@ -1279,6 +1279,7 @@ static inline void rt2x00debug_dump_fram
+@@ -1280,6 +1280,7 @@ static inline void rt2x00debug_dump_fram
*/
u32 rt2x00lib_get_bssidx(struct rt2x00_dev *rt2x00dev,
struct ieee80211_vif *vif);
--- a/drivers/net/wireless/mwl8k.c
+++ b/drivers/net/wireless/mwl8k.c
-@@ -5296,6 +5296,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw")
+@@ -5297,6 +5297,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw")
MODULE_FIRMWARE(MWL8K_8366_AP_FW(MWL8K_8366_AP_FW_API));
static DEFINE_PCI_DEVICE_TABLE(mwl8k_pci_id_table) = {
dev->phy.writes_counter = 0;
--- a/drivers/net/wireless/b43/phy_n.c
+++ b/drivers/net/wireless/b43/phy_n.c
-@@ -4837,14 +4837,14 @@ static inline void check_phyreg(struct b
+@@ -4838,14 +4838,14 @@ static inline void check_phyreg(struct b
static u16 b43_nphy_op_read(struct b43_wldev *dev, u16 reg)
{
check_phyreg(dev, reg);
b43_write16(dev, B43_MMIO_PHY_DATA, value);
}
-@@ -4852,7 +4852,7 @@ static void b43_nphy_op_maskset(struct b
+@@ -4853,7 +4853,7 @@ static void b43_nphy_op_maskset(struct b
u16 set)
{
check_phyreg(dev, reg);
b43_maskset16(dev, B43_MMIO_PHY_DATA, mask, set);
}
-@@ -4863,7 +4863,7 @@ static u16 b43_nphy_op_radio_read(struct
+@@ -4864,7 +4864,7 @@ static u16 b43_nphy_op_radio_read(struct
/* N-PHY needs 0x100 for read access */
reg |= 0x100;
return b43_read16(dev, B43_MMIO_RADIO_DATA_LOW);
}
-@@ -4872,7 +4872,7 @@ static void b43_nphy_op_radio_write(stru
+@@ -4873,7 +4873,7 @@ static void b43_nphy_op_radio_write(stru
/* Register 1 is a 32-bit register. */
B43_WARN_ON(reg == 1);
--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
-@@ -4233,9 +4233,8 @@ static void brcms_c_radio_timer(void *ar
+@@ -4220,9 +4220,8 @@ static void brcms_c_radio_timer(void *ar
}
/* common low-level watchdog code */
struct brcms_hardware *wlc_hw = wlc->hw;
BCMMSG(wlc->wiphy, "wl%d\n", wlc_hw->unit);
-@@ -4256,10 +4255,8 @@ static void brcms_b_watchdog(void *arg)
+@@ -4243,10 +4242,8 @@ static void brcms_b_watchdog(void *arg)
}
/* common watchdog code */
BCMMSG(wlc->wiphy, "wl%d\n", wlc->pub->unit);
if (!wlc->pub->up)
-@@ -4299,7 +4296,9 @@ static void brcms_c_watchdog(void *arg)
+@@ -4286,7 +4283,9 @@ static void brcms_c_watchdog(void *arg)
static void brcms_c_watchdog_by_timer(void *arg)
{
--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
-@@ -1943,7 +1943,8 @@ static bool brcms_b_radio_read_hwdisable
+@@ -1944,7 +1944,8 @@ static bool brcms_b_radio_read_hwdisable
* accesses phyreg throughput mac. This can be skipped since
* only mac reg is accessed below
*/
/*
* TODO: test suspend/resume
-@@ -2024,7 +2025,8 @@ void brcms_b_corereset(struct brcms_hard
+@@ -2025,7 +2026,8 @@ void brcms_b_corereset(struct brcms_hard
* phyreg throughput mac, AND phy_reset is skipped at early stage when
* band->pi is invalid. need to enable PHY CLK
*/
--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
-@@ -270,7 +270,7 @@ struct brcms_c_bit_desc {
+@@ -271,7 +271,7 @@ struct brcms_c_bit_desc {
*/
/* Starting corerev for the fifo size table */
struct d11init {
__le16 addr;
-@@ -334,6 +334,26 @@ const u8 wlc_prio2prec_map[] = {
+@@ -335,6 +335,26 @@ const u8 wlc_prio2prec_map[] = {
};
static const u16 xmtfifo_sz[][NFIFO] = {
/* corerev 20: 5120, 49152, 49152, 5376, 4352, 1280 */
{20, 192, 192, 21, 17, 5},
/* corerev 21: 2304, 14848, 5632, 3584, 3584, 1280 */
-@@ -344,6 +364,18 @@ static const u16 xmtfifo_sz[][NFIFO] = {
+@@ -345,6 +365,18 @@ static const u16 xmtfifo_sz[][NFIFO] = {
{20, 192, 192, 21, 17, 5},
/* corerev 24: 2304, 14848, 5632, 3584, 3584, 1280 */
{9, 58, 22, 14, 14, 5},
};
#ifdef DEBUG
-@@ -4611,8 +4643,15 @@ static int brcms_b_attach(struct brcms_c
+@@ -4598,8 +4630,15 @@ static int brcms_b_attach(struct brcms_c
wlc_hw->machwcap_backup = wlc_hw->machwcap;
/* init tx fifo size */
BCMA_CORETABLE_END
--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
-@@ -751,7 +751,7 @@ static void brcms_c_ucode_bsinit(struct
+@@ -752,7 +752,7 @@ static void brcms_c_ucode_bsinit(struct
brcms_c_write_mhf(wlc_hw, wlc_hw->band->mhfs);
/* do band-specific ucode IHR, SHM, and SCR inits */
if (BRCMS_ISNPHY(wlc_hw->band))
brcms_c_write_inits(wlc_hw, ucode->d11n0bsinitvals16);
else
-@@ -2276,7 +2276,7 @@ static void brcms_ucode_download(struct
+@@ -2277,7 +2277,7 @@ static void brcms_ucode_download(struct
if (wlc_hw->ucode_loaded)
return;
if (BRCMS_ISNPHY(wlc_hw->band)) {
brcms_ucode_write(wlc_hw, ucode->bcm43xx_16_mimo,
ucode->bcm43xx_16_mimosz);
-@@ -3252,7 +3252,7 @@ static void brcms_b_coreinit(struct brcm
+@@ -3239,7 +3239,7 @@ static void brcms_b_coreinit(struct brcm
sflags = bcma_aread32(core, BCMA_IOST);
--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
-@@ -4166,6 +4166,7 @@ void brcms_c_wme_setparams(struct brcms_
+@@ -4153,6 +4153,7 @@ void brcms_c_wme_setparams(struct brcms_
M_EDCF_QINFO +
wme_ac2fifo[aci] * M_EDCF_QLEN + i,
*shm_entry++);
}
if (suspend) {
-@@ -4570,7 +4571,8 @@ static int brcms_b_attach(struct brcms_c
+@@ -4557,7 +4558,8 @@ static int brcms_b_attach(struct brcms_c
/* check device id(srom, nvram etc.) to set bands */
if (wlc_hw->deviceid == BCM43224_D11N_ID ||
/* Dualband boards */
wlc_hw->_nbands = 2;
else
-@@ -5831,7 +5833,7 @@ bool brcms_c_chipmatch(u16 vendor, u16 d
+@@ -5816,7 +5818,7 @@ bool brcms_c_chipmatch(u16 vendor, u16 d
return false;
}
MODULE_DEVICE_TABLE(bcma, brcms_coreid_table);
--- a/drivers/net/wireless/brcm80211/brcmsmac/main.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c
-@@ -751,7 +751,7 @@ static void brcms_c_ucode_bsinit(struct
+@@ -752,7 +752,7 @@ static void brcms_c_ucode_bsinit(struct
brcms_c_write_mhf(wlc_hw, wlc_hw->band->mhfs);
/* do band-specific ucode IHR, SHM, and SCR inits */
if (BRCMS_ISNPHY(wlc_hw->band))
brcms_c_write_inits(wlc_hw, ucode->d11n0bsinitvals16);
else
-@@ -2276,7 +2276,7 @@ static void brcms_ucode_download(struct
+@@ -2277,7 +2277,7 @@ static void brcms_ucode_download(struct
if (wlc_hw->ucode_loaded)
return;
if (BRCMS_ISNPHY(wlc_hw->band)) {
brcms_ucode_write(wlc_hw, ucode->bcm43xx_16_mimo,
ucode->bcm43xx_16_mimosz);
-@@ -3252,7 +3252,7 @@ static void brcms_b_coreinit(struct brcm
+@@ -3239,7 +3239,7 @@ static void brcms_b_coreinit(struct brcm
sflags = bcma_aread32(core, BCMA_IOST);