From: Felix Fietkau Date: Tue, 22 Mar 2011 21:00:58 +0000 (+0000) Subject: mac80211: update to wireless-testing 2011-03-22 X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=ee7f3d21f416c540b8b8b271b7174efaf6c4f658;p=openwrt%2Fstaging%2Fblocktrron.git mac80211: update to wireless-testing 2011-03-22 SVN-Revision: 26273 --- diff --git a/package/mac80211/Makefile b/package/mac80211/Makefile index eaea213961..18522bf4d2 100644 --- a/package/mac80211/Makefile +++ b/package/mac80211/Makefile @@ -10,10 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=mac80211 -PKG_VERSION:=2011-03-11 +PKG_VERSION:=2011-03-22 PKG_RELEASE:=1 PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources -PKG_MD5SUM:=123b9220fa2b016979b7b3874f349643 +PKG_MD5SUM:=3e7ffb9f243053381f2cdfc5af300f8c PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2 PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION) diff --git a/package/mac80211/patches/300-ath9k_gpio_settings.patch b/package/mac80211/patches/300-ath9k_gpio_settings.patch deleted file mode 100644 index af2057759e..0000000000 --- a/package/mac80211/patches/300-ath9k_gpio_settings.patch +++ /dev/null @@ -1,58 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/debug.c -+++ b/drivers/net/wireless/ath/ath9k/debug.c -@@ -1145,6 +1145,12 @@ int ath9k_init_debug(struct ath_hw *ah) - sc, &fops_regdump)) - goto err; - -+ debugfs_create_u32("gpio_mask", S_IRUSR | S_IWUSR, -+ sc->debug.debugfs_phy, &sc->sc_ah->gpio_mask); -+ -+ debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR, -+ sc->debug.debugfs_phy, &sc->sc_ah->gpio_val); -+ - sc->debug.regidx = 0; - return 0; - err: ---- a/drivers/net/wireless/ath/ath9k/hw.h -+++ b/drivers/net/wireless/ath/ath9k/hw.h -@@ -795,6 +795,8 @@ struct ath_hw { - int initPDADC; - int PDADCdelta; - u8 led_pin; -+ u32 gpio_mask; -+ u32 gpio_val; - - struct ar5416IniArray iniModes; - struct ar5416IniArray iniCommon; ---- a/drivers/net/wireless/ath/ath9k/hw.c -+++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -1212,6 +1212,20 @@ static bool ath9k_hw_channel_change(stru - return true; - } - -+static void ath9k_hw_apply_gpio_override(struct ath_hw *ah) -+{ -+ u32 gpio_mask = ah->gpio_mask; -+ int i; -+ -+ for (i = 0; gpio_mask; i++, gpio_mask >>= 1) { -+ if (!(gpio_mask & 1)) -+ continue; -+ -+ ath9k_hw_cfg_output(ah, i, AR_GPIO_OUTPUT_MUX_AS_OUTPUT); -+ ath9k_hw_set_gpio(ah, i, !!(ah->gpio_val & BIT(i))); -+ } -+} -+ - bool ath9k_hw_check_alive(struct ath_hw *ah) - { - int count = 50; -@@ -1500,6 +1514,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st - if (AR_SREV_9300_20_OR_LATER(ah)) - ar9003_hw_bb_watchdog_config(ah); - -+ ath9k_hw_apply_gpio_override(ah); -+ - return 0; - } - EXPORT_SYMBOL(ath9k_hw_reset); diff --git a/package/mac80211/patches/300-ath9k_pending_work.patch b/package/mac80211/patches/300-ath9k_pending_work.patch new file mode 100644 index 0000000000..7d4301db96 --- /dev/null +++ b/package/mac80211/patches/300-ath9k_pending_work.patch @@ -0,0 +1,370 @@ +--- a/drivers/net/wireless/ath/ath9k/ath9k.h ++++ b/drivers/net/wireless/ath/ath9k/ath9k.h +@@ -362,7 +362,7 @@ struct ath_vif { + * number of BSSIDs) if a given beacon does not go out even after waiting this + * number of beacon intervals, the game's up. + */ +-#define BSTUCK_THRESH (9 * ATH_BCBUF) ++#define BSTUCK_THRESH 9 + #define ATH_BCBUF 4 + #define ATH_DEFAULT_BINTVAL 100 /* TU */ + #define ATH_DEFAULT_BMISS_LIMIT 10 +@@ -386,7 +386,7 @@ struct ath_beacon { + u32 beaconq; + u32 bmisscnt; + u32 ast_be_xmit; +- u64 bc_tstamp; ++ u32 bc_tstamp; + struct ieee80211_vif *bslot[ATH_BCBUF]; + int slottime; + int slotupdate; +--- a/drivers/net/wireless/ath/ath9k/beacon.c ++++ b/drivers/net/wireless/ath/ath9k/beacon.c +@@ -57,8 +57,8 @@ int ath_beaconq_config(struct ath_softc + + /* + * Associates the beacon frame buffer with a transmit descriptor. Will set +- * up all required antenna switch parameters, rate codes, and channel flags. +- * Beacons are always sent out at the lowest rate, and are not retried. ++ * 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 ath_vif *avp, + struct ath_buf *bf, int rateidx) +@@ -68,7 +68,7 @@ static void ath_beacon_setup(struct ath_ + struct ath_common *common = ath9k_hw_common(ah); + struct ath_desc *ds; + struct ath9k_11n_rate_series series[4]; +- int flags, antenna, ctsrate = 0, ctsduration = 0; ++ int flags, ctsrate = 0, ctsduration = 0; + struct ieee80211_supported_band *sband; + u8 rate = 0; + +@@ -76,12 +76,6 @@ static void ath_beacon_setup(struct ath_ + flags = ATH9K_TXDESC_NOACK; + + ds->ds_link = 0; +- /* +- * Switch antenna every beacon. +- * Should only switch every beacon period, not for every SWBA +- * XXX assumes two antennae +- */ +- antenna = ((sc->beacon.ast_be_xmit / sc->nbcnvifs) & 1 ? 2 : 1); + + sband = &sc->sbands[common->hw->conf.channel->band]; + rate = sband->bitrates[rateidx].hw_value; +@@ -278,7 +272,7 @@ int ath_beacon_alloc(struct ath_softc *s + return -ENOMEM; + + tstamp = ((struct ieee80211_mgmt *)skb->data)->u.beacon.timestamp; +- sc->beacon.bc_tstamp = le64_to_cpu(tstamp); ++ 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; +@@ -294,8 +288,8 @@ int ath_beacon_alloc(struct ath_softc *s + * adjustment. Other slots are adjusted to get the timestamp + * close to the TBTT for the BSS. + */ +- tsfadjust = intval * avp->av_bslot / ATH_BCBUF; +- avp->tsf_adjust = cpu_to_le64(TU_TO_USEC(tsfadjust)); ++ tsfadjust = TU_TO_USEC(intval * avp->av_bslot) / ATH_BCBUF; ++ avp->tsf_adjust = cpu_to_le64(tsfadjust); + + ath_dbg(common, ATH_DBG_BEACON, + "stagger beacons, bslot %d intval %u tsfadjust %llu\n", +@@ -369,12 +363,13 @@ void ath_beacon_tasklet(unsigned long da + if (ath9k_hw_numtxpending(ah, sc->beacon.beaconq) != 0) { + sc->beacon.bmisscnt++; + +- if (sc->beacon.bmisscnt < BSTUCK_THRESH) { ++ if (sc->beacon.bmisscnt < BSTUCK_THRESH * sc->nbcnvifs) { + ath_dbg(common, ATH_DBG_BSTUCK, + "missed %u consecutive beacons\n", + sc->beacon.bmisscnt); + ath9k_hw_stop_dma_queue(ah, sc->beacon.beaconq); +- ath9k_hw_bstuck_nfcal(ah); ++ if (sc->beacon.bmisscnt > 4) ++ ath9k_hw_bstuck_nfcal(ah); + } else if (sc->beacon.bmisscnt >= BSTUCK_THRESH) { + ath_dbg(common, ATH_DBG_BSTUCK, + "beacon is officially stuck\n"); +@@ -385,13 +380,6 @@ void ath_beacon_tasklet(unsigned long da + return; + } + +- if (sc->beacon.bmisscnt != 0) { +- ath_dbg(common, ATH_DBG_BSTUCK, +- "resume beacon xmit after %u misses\n", +- sc->beacon.bmisscnt); +- sc->beacon.bmisscnt = 0; +- } +- + /* + * Generate beacon frames. we are sending frames + * staggered so calculate the slot for this frame based +@@ -401,8 +389,9 @@ void ath_beacon_tasklet(unsigned long da + intval = cur_conf->beacon_interval ? : ATH_DEFAULT_BINTVAL; + + tsf = ath9k_hw_gettsf64(ah); +- tsftu = TSF_TO_TU(tsf>>32, tsf); +- slot = ((tsftu % intval) * ATH_BCBUF) / intval; ++ 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; + /* + * Reverse the slot order to get slot 0 on the TBTT offset that does + * not require TSF adjustment and other slots adding +@@ -415,7 +404,7 @@ void ath_beacon_tasklet(unsigned long da + + ath_dbg(common, ATH_DBG_BEACON, + "slot %d [tsf %llu tsftu %u intval %u] vif %p\n", +- slot, tsf, tsftu, intval, vif); ++ slot, tsf, tsftu / ATH_BCBUF, intval, vif); + + bfaddr = 0; + if (vif) { +@@ -424,6 +413,13 @@ void ath_beacon_tasklet(unsigned long da + bfaddr = bf->bf_daddr; + bc = 1; + } ++ ++ if (sc->beacon.bmisscnt != 0) { ++ ath_dbg(common, ATH_DBG_BSTUCK, ++ "resume beacon xmit after %u misses\n", ++ sc->beacon.bmisscnt); ++ sc->beacon.bmisscnt = 0; ++ } + } + + /* +@@ -463,13 +459,17 @@ static void ath9k_beacon_init(struct ath + u32 next_beacon, + u32 beacon_period) + { +- if (beacon_period & ATH9K_BEACON_RESET_TSF) ++ if (sc->sc_flags & SC_OP_TSF_RESET) { + ath9k_ps_wakeup(sc); ++ ath9k_hw_reset_tsf(sc->sc_ah); ++ } + + ath9k_hw_beaconinit(sc->sc_ah, next_beacon, beacon_period); + +- if (beacon_period & ATH9K_BEACON_RESET_TSF) ++ if (sc->sc_flags & SC_OP_TSF_RESET) { + ath9k_ps_restore(sc); ++ sc->sc_flags &= ~SC_OP_TSF_RESET; ++ } + } + + /* +@@ -484,18 +484,14 @@ static void ath_beacon_config_ap(struct + u32 nexttbtt, intval; + + /* NB: the beacon interval is kept internally in TU's */ +- intval = conf->beacon_interval & ATH9K_BEACON_PERIOD; ++ intval = TU_TO_USEC(conf->beacon_interval & ATH9K_BEACON_PERIOD); + intval /= ATH_BCBUF; /* for staggered beacons */ + nexttbtt = intval; + +- if (sc->sc_flags & SC_OP_TSF_RESET) +- intval |= ATH9K_BEACON_RESET_TSF; +- + /* + * In AP mode we enable the beacon timers and SWBA interrupts to + * prepare beacon frames. + */ +- intval |= ATH9K_BEACON_ENA; + ah->imask |= ATH9K_INT_SWBA; + ath_beaconq_config(sc); + +@@ -505,11 +501,6 @@ static void ath_beacon_config_ap(struct + ath9k_beacon_init(sc, nexttbtt, intval); + sc->beacon.bmisscnt = 0; + ath9k_hw_set_interrupts(ah, ah->imask); +- +- /* Clear the reset TSF flag, so that subsequent beacon updation +- will not reset the HW TSF. */ +- +- sc->sc_flags &= ~SC_OP_TSF_RESET; + } + + /* +@@ -643,25 +634,20 @@ static void ath_beacon_config_adhoc(stru + { + struct ath_hw *ah = sc->sc_ah; + struct ath_common *common = ath9k_hw_common(ah); +- u64 tsf; +- u32 tsftu, intval, nexttbtt; +- +- intval = conf->beacon_interval & ATH9K_BEACON_PERIOD; ++ u32 tsf, delta, intval, nexttbtt; + ++ tsf = ath9k_hw_gettsf32(ah) + TU_TO_USEC(FUDGE); ++ intval = TU_TO_USEC(conf->beacon_interval & ATH9K_BEACON_PERIOD); + +- /* Pull nexttbtt forward to reflect the current TSF */ +- +- nexttbtt = TSF_TO_TU(sc->beacon.bc_tstamp >> 32, sc->beacon.bc_tstamp); +- if (nexttbtt == 0) +- nexttbtt = intval; +- else if (intval) +- nexttbtt = roundup(nexttbtt, intval); +- +- tsf = ath9k_hw_gettsf64(ah); +- tsftu = TSF_TO_TU((u32)(tsf>>32), (u32)tsf) + FUDGE; +- do { +- nexttbtt += intval; +- } while (nexttbtt < tsftu); ++ if (!sc->beacon.bc_tstamp) ++ nexttbtt = tsf + intval; ++ else { ++ if (tsf > sc->beacon.bc_tstamp) ++ delta = (tsf - sc->beacon.bc_tstamp); ++ else ++ delta = (tsf + 1 + (~0U - sc->beacon.bc_tstamp)); ++ nexttbtt = tsf + roundup(delta, intval); ++ } + + ath_dbg(common, ATH_DBG_BEACON, + "IBSS nexttbtt %u intval %u (%u)\n", +@@ -672,7 +658,6 @@ static void ath_beacon_config_adhoc(stru + * if we need to manually prepare beacon frames. Otherwise we use a + * self-linked tx descriptor and let the hardware deal with things. + */ +- intval |= ATH9K_BEACON_ENA; + ah->imask |= ATH9K_INT_SWBA; + + ath_beaconq_config(sc); +--- a/drivers/net/wireless/ath/ath9k/htc_drv_beacon.c ++++ b/drivers/net/wireless/ath/ath9k/htc_drv_beacon.c +@@ -155,7 +155,7 @@ static void ath9k_htc_beacon_config_ap(s + nexttbtt = intval; + + if (priv->op_flags & OP_TSF_RESET) { +- intval |= ATH9K_BEACON_RESET_TSF; ++ ath9k_hw_reset_tsf(priv->ah); + priv->op_flags &= ~OP_TSF_RESET; + } else { + /* +@@ -168,8 +168,6 @@ static void ath9k_htc_beacon_config_ap(s + } while (nexttbtt < tsftu); + } + +- intval |= ATH9K_BEACON_ENA; +- + if (priv->op_flags & OP_ENABLE_BEACON) + imask |= ATH9K_INT_SWBA; + +@@ -178,7 +176,7 @@ static void ath9k_htc_beacon_config_ap(s + bss_conf->beacon_interval, nexttbtt, imask); + + WMI_CMD(WMI_DISABLE_INTR_CMDID); +- ath9k_hw_beaconinit(priv->ah, nexttbtt, intval); ++ ath9k_hw_beaconinit(priv->ah, TU_TO_USEC(nexttbtt), TU_TO_USEC(intval)); + priv->bmiss_cnt = 0; + htc_imask = cpu_to_be32(imask); + WMI_CMD_BUF(WMI_ENABLE_INTR_CMDID, &htc_imask); +@@ -207,7 +205,6 @@ static void ath9k_htc_beacon_config_adho + nexttbtt += intval; + } while (nexttbtt < tsftu); + +- intval |= ATH9K_BEACON_ENA; + if (priv->op_flags & OP_ENABLE_BEACON) + imask |= ATH9K_INT_SWBA; + +@@ -216,7 +213,7 @@ static void ath9k_htc_beacon_config_adho + bss_conf->beacon_interval, nexttbtt, imask); + + WMI_CMD(WMI_DISABLE_INTR_CMDID); +- ath9k_hw_beaconinit(priv->ah, nexttbtt, intval); ++ ath9k_hw_beaconinit(priv->ah, TU_TO_USEC(nexttbtt), TU_TO_USEC(intval)); + priv->bmiss_cnt = 0; + htc_imask = cpu_to_be32(imask); + WMI_CMD_BUF(WMI_ENABLE_INTR_CMDID, &htc_imask); +--- a/drivers/net/wireless/ath/ath9k/hw.c ++++ b/drivers/net/wireless/ath/ath9k/hw.c +@@ -1697,21 +1697,15 @@ void ath9k_hw_beaconinit(struct ath_hw * + case NL80211_IFTYPE_MESH_POINT: + REG_SET_BIT(ah, AR_TXCFG, + AR_TXCFG_ADHOC_BEACON_ATIM_TX_POLICY); +- REG_WRITE(ah, AR_NEXT_NDP_TIMER, +- TU_TO_USEC(next_beacon + +- (ah->atim_window ? ah-> +- atim_window : 1))); ++ REG_WRITE(ah, AR_NEXT_NDP_TIMER, next_beacon + ++ TU_TO_USEC(ah->atim_window ? ah->atim_window : 1)); + flags |= AR_NDP_TIMER_EN; + case NL80211_IFTYPE_AP: +- REG_WRITE(ah, AR_NEXT_TBTT_TIMER, TU_TO_USEC(next_beacon)); +- REG_WRITE(ah, AR_NEXT_DMA_BEACON_ALERT, +- TU_TO_USEC(next_beacon - +- ah->config. +- dma_beacon_response_time)); +- REG_WRITE(ah, AR_NEXT_SWBA, +- TU_TO_USEC(next_beacon - +- ah->config. +- sw_beacon_response_time)); ++ REG_WRITE(ah, AR_NEXT_TBTT_TIMER, next_beacon); ++ REG_WRITE(ah, AR_NEXT_DMA_BEACON_ALERT, next_beacon - ++ TU_TO_USEC(ah->config.dma_beacon_response_time)); ++ REG_WRITE(ah, AR_NEXT_SWBA, next_beacon - ++ TU_TO_USEC(ah->config.sw_beacon_response_time)); + flags |= + AR_TBTT_TIMER_EN | AR_DBA_TIMER_EN | AR_SWBA_TIMER_EN; + break; +@@ -1723,18 +1717,13 @@ void ath9k_hw_beaconinit(struct ath_hw * + break; + } + +- REG_WRITE(ah, AR_BEACON_PERIOD, TU_TO_USEC(beacon_period)); +- REG_WRITE(ah, AR_DMA_BEACON_PERIOD, TU_TO_USEC(beacon_period)); +- REG_WRITE(ah, AR_SWBA_PERIOD, TU_TO_USEC(beacon_period)); +- REG_WRITE(ah, AR_NDP_PERIOD, TU_TO_USEC(beacon_period)); ++ REG_WRITE(ah, AR_BEACON_PERIOD, beacon_period); ++ REG_WRITE(ah, AR_DMA_BEACON_PERIOD, beacon_period); ++ REG_WRITE(ah, AR_SWBA_PERIOD, beacon_period); ++ REG_WRITE(ah, AR_NDP_PERIOD, beacon_period); + + REGWRITE_BUFFER_FLUSH(ah); + +- beacon_period &= ~ATH9K_BEACON_ENA; +- if (beacon_period & ATH9K_BEACON_RESET_TSF) { +- ath9k_hw_reset_tsf(ah); +- } +- + REG_SET_BIT(ah, AR_TIMER_MODE, flags); + } + EXPORT_SYMBOL(ath9k_hw_beaconinit); +@@ -2395,10 +2384,11 @@ static u32 rightmost_index(struct ath_ge + return timer_table->gen_timer_index[b]; + } + +-static u32 ath9k_hw_gettsf32(struct ath_hw *ah) ++u32 ath9k_hw_gettsf32(struct ath_hw *ah) + { + return REG_READ(ah, AR_TSF_L32); + } ++EXPORT_SYMBOL(ath9k_hw_gettsf32); + + struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah, + void (*trigger)(void *), +--- a/drivers/net/wireless/ath/ath9k/hw.h ++++ b/drivers/net/wireless/ath/ath9k/hw.h +@@ -416,8 +416,6 @@ struct ath9k_beacon_state { + u32 bs_nextdtim; + u32 bs_intval; + #define ATH9K_BEACON_PERIOD 0x0000ffff +-#define ATH9K_BEACON_ENA 0x00800000 +-#define ATH9K_BEACON_RESET_TSF 0x01000000 + #define ATH9K_TSFOOR_THRESHOLD 0x00004240 /* 16k us */ + u32 bs_dtimperiod; + u16 bs_cfpperiod; +@@ -930,6 +928,7 @@ void ath9k_hw_setopmode(struct ath_hw *a + void ath9k_hw_setmcastfilter(struct ath_hw *ah, u32 filter0, u32 filter1); + void ath9k_hw_setbssidmask(struct ath_hw *ah); + void ath9k_hw_write_associd(struct ath_hw *ah); ++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); diff --git a/package/mac80211/patches/310-pending_work.patch b/package/mac80211/patches/310-pending_work.patch deleted file mode 100644 index 0c07a8de44..0000000000 --- a/package/mac80211/patches/310-pending_work.patch +++ /dev/null @@ -1,1441 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/ath9k.h -+++ b/drivers/net/wireless/ath/ath9k/ath9k.h -@@ -189,7 +189,6 @@ struct ath_txq { - u32 axq_ampdu_depth; - bool stopped; - bool axq_tx_inprogress; -- bool txq_flush_inprogress; - struct list_head axq_acq; - struct list_head txq_fifo[ATH_TXFIFO_DEPTH]; - struct list_head txq_fifo_pending; ---- a/drivers/net/wireless/ath/ath9k/beacon.c -+++ b/drivers/net/wireless/ath/ath9k/beacon.c -@@ -373,6 +373,7 @@ void ath_beacon_tasklet(unsigned long da - ath_dbg(common, ATH_DBG_BSTUCK, - "missed %u consecutive beacons\n", - sc->beacon.bmisscnt); -+ ath9k_hw_stop_dma_queue(ah, sc->beacon.beaconq); - ath9k_hw_bstuck_nfcal(ah); - } else if (sc->beacon.bmisscnt >= BSTUCK_THRESH) { - ath_dbg(common, ATH_DBG_BSTUCK, -@@ -450,16 +451,6 @@ void ath_beacon_tasklet(unsigned long da - sc->beacon.updateslot = OK; - } - if (bfaddr != 0) { -- /* -- * Stop any current dma and put the new frame(s) on the queue. -- * This should never fail since we check above that no frames -- * are still pending on the queue. -- */ -- if (!ath9k_hw_stoptxdma(ah, sc->beacon.beaconq)) { -- ath_err(common, "beacon queue %u did not stop?\n", -- sc->beacon.beaconq); -- } -- - /* NB: cabq traffic should already be queued and primed */ - ath9k_hw_puttxbuf(ah, sc->beacon.beaconq, bfaddr); - ath9k_hw_txstart(ah, sc->beacon.beaconq); -@@ -780,7 +771,7 @@ void ath9k_set_beaconing_status(struct a - ah->imask &= ~ATH9K_INT_SWBA; - ath9k_hw_set_interrupts(ah, ah->imask); - tasklet_kill(&sc->bcon_tasklet); -- ath9k_hw_stoptxdma(ah, sc->beacon.beaconq); -+ ath9k_hw_stop_dma_queue(ah, sc->beacon.beaconq); - } - ath9k_ps_restore(sc); - } ---- a/drivers/net/wireless/ath/ath9k/hw.h -+++ b/drivers/net/wireless/ath/ath9k/hw.h -@@ -95,9 +95,9 @@ - #define REG_READ_FIELD(_a, _r, _f) \ - (((REG_READ(_a, _r) & _f) >> _f##_S)) - #define REG_SET_BIT(_a, _r, _f) \ -- REG_WRITE(_a, _r, REG_READ(_a, _r) | _f) -+ REG_WRITE(_a, _r, REG_READ(_a, _r) | (_f)) - #define REG_CLR_BIT(_a, _r, _f) \ -- REG_WRITE(_a, _r, REG_READ(_a, _r) & ~_f) -+ REG_WRITE(_a, _r, REG_READ(_a, _r) & ~(_f)) - - #define DO_DELAY(x) do { \ - if ((++(x) % 64) == 0) \ ---- a/drivers/net/wireless/ath/ath9k/mac.c -+++ b/drivers/net/wireless/ath/ath9k/mac.c -@@ -143,84 +143,59 @@ bool ath9k_hw_updatetxtriglevel(struct a - } - EXPORT_SYMBOL(ath9k_hw_updatetxtriglevel); - --bool ath9k_hw_stoptxdma(struct ath_hw *ah, u32 q) -+void ath9k_hw_abort_tx_dma(struct ath_hw *ah) - { --#define ATH9K_TX_STOP_DMA_TIMEOUT 4000 /* usec */ --#define ATH9K_TIME_QUANTUM 100 /* usec */ -- struct ath_common *common = ath9k_hw_common(ah); -- struct ath9k_hw_capabilities *pCap = &ah->caps; -- struct ath9k_tx_queue_info *qi; -- u32 tsfLow, j, wait; -- u32 wait_time = ATH9K_TX_STOP_DMA_TIMEOUT / ATH9K_TIME_QUANTUM; -+ int i, q; - -- if (q >= pCap->total_queues) { -- ath_dbg(common, ATH_DBG_QUEUE, -- "Stopping TX DMA, invalid queue: %u\n", q); -- return false; -- } -+ REG_WRITE(ah, AR_Q_TXD, AR_Q_TXD_M); - -- qi = &ah->txq[q]; -- if (qi->tqi_type == ATH9K_TX_QUEUE_INACTIVE) { -- ath_dbg(common, ATH_DBG_QUEUE, -- "Stopping TX DMA, inactive queue: %u\n", q); -- return false; -- } -+ REG_SET_BIT(ah, AR_PCU_MISC, AR_PCU_FORCE_QUIET_COLL | AR_PCU_CLEAR_VMF); -+ REG_SET_BIT(ah, AR_DIAG_SW, AR_DIAG_FORCE_CH_IDLE_HIGH); -+ REG_SET_BIT(ah, AR_D_GBL_IFS_MISC, AR_D_GBL_IFS_MISC_IGNORE_BACKOFF); - -- REG_WRITE(ah, AR_Q_TXD, 1 << q); -+ for (q = 0; q < AR_NUM_QCU; q++) { -+ for (i = 0; i < 1000; i++) { -+ if (i) -+ udelay(5); - -- for (wait = wait_time; wait != 0; wait--) { -- if (ath9k_hw_numtxpending(ah, q) == 0) -- break; -- udelay(ATH9K_TIME_QUANTUM); -+ if (!ath9k_hw_numtxpending(ah, q)) -+ break; -+ } - } - -- if (ath9k_hw_numtxpending(ah, q)) { -- ath_dbg(common, ATH_DBG_QUEUE, -- "%s: Num of pending TX Frames %d on Q %d\n", -- __func__, ath9k_hw_numtxpending(ah, q), q); -- -- for (j = 0; j < 2; j++) { -- tsfLow = REG_READ(ah, AR_TSF_L32); -- REG_WRITE(ah, AR_QUIET2, -- SM(10, AR_QUIET2_QUIET_DUR)); -- REG_WRITE(ah, AR_QUIET_PERIOD, 100); -- REG_WRITE(ah, AR_NEXT_QUIET_TIMER, tsfLow >> 10); -- REG_SET_BIT(ah, AR_TIMER_MODE, -- AR_QUIET_TIMER_EN); -- -- if ((REG_READ(ah, AR_TSF_L32) >> 10) == (tsfLow >> 10)) -- break; -+ REG_CLR_BIT(ah, AR_PCU_MISC, AR_PCU_FORCE_QUIET_COLL | AR_PCU_CLEAR_VMF); -+ REG_CLR_BIT(ah, AR_DIAG_SW, AR_DIAG_FORCE_CH_IDLE_HIGH); -+ REG_CLR_BIT(ah, AR_D_GBL_IFS_MISC, AR_D_GBL_IFS_MISC_IGNORE_BACKOFF); - -- ath_dbg(common, ATH_DBG_QUEUE, -- "TSF has moved while trying to set quiet time TSF: 0x%08x\n", -- tsfLow); -- } -+ REG_WRITE(ah, AR_Q_TXD, 0); -+} -+EXPORT_SYMBOL(ath9k_hw_abort_tx_dma); - -- REG_SET_BIT(ah, AR_DIAG_SW, AR_DIAG_FORCE_CH_IDLE_HIGH); -+bool ath9k_hw_stop_dma_queue(struct ath_hw *ah, u32 q) -+{ -+#define ATH9K_TX_STOP_DMA_TIMEOUT 1000 /* usec */ -+#define ATH9K_TIME_QUANTUM 100 /* usec */ -+ int wait_time = ATH9K_TX_STOP_DMA_TIMEOUT / ATH9K_TIME_QUANTUM; -+ int wait; - -- udelay(200); -- REG_CLR_BIT(ah, AR_TIMER_MODE, AR_QUIET_TIMER_EN); -+ REG_WRITE(ah, AR_Q_TXD, 1 << q); - -- wait = wait_time; -- while (ath9k_hw_numtxpending(ah, q)) { -- if ((--wait) == 0) { -- ath_err(common, -- "Failed to stop TX DMA in 100 msec after killing last frame\n"); -- break; -- } -+ for (wait = wait_time; wait != 0; wait--) { -+ if (wait != wait_time) - udelay(ATH9K_TIME_QUANTUM); -- } - -- REG_CLR_BIT(ah, AR_DIAG_SW, AR_DIAG_FORCE_CH_IDLE_HIGH); -+ if (ath9k_hw_numtxpending(ah, q) == 0) -+ break; - } - - REG_WRITE(ah, AR_Q_TXD, 0); -+ - return wait != 0; - - #undef ATH9K_TX_STOP_DMA_TIMEOUT - #undef ATH9K_TIME_QUANTUM - } --EXPORT_SYMBOL(ath9k_hw_stoptxdma); -+EXPORT_SYMBOL(ath9k_hw_stop_dma_queue); - - void ath9k_hw_gettxintrtxqs(struct ath_hw *ah, u32 *txqs) - { ---- a/drivers/net/wireless/ath/ath9k/mac.h -+++ b/drivers/net/wireless/ath/ath9k/mac.h -@@ -676,7 +676,8 @@ void ath9k_hw_txstart(struct ath_hw *ah, - void ath9k_hw_cleartxdesc(struct ath_hw *ah, void *ds); - u32 ath9k_hw_numtxpending(struct ath_hw *ah, u32 q); - bool ath9k_hw_updatetxtriglevel(struct ath_hw *ah, bool bIncTrigLevel); --bool ath9k_hw_stoptxdma(struct ath_hw *ah, u32 q); -+bool ath9k_hw_stop_dma_queue(struct ath_hw *ah, u32 q); -+void ath9k_hw_abort_tx_dma(struct ath_hw *ah); - void ath9k_hw_gettxintrtxqs(struct ath_hw *ah, u32 *txqs); - bool ath9k_hw_set_txq_props(struct ath_hw *ah, int q, - const struct ath9k_tx_queue_info *qinfo); ---- a/drivers/net/wireless/ath/ath9k/main.c -+++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -2128,56 +2128,42 @@ static void ath9k_set_coverage_class(str - - static void ath9k_flush(struct ieee80211_hw *hw, bool drop) - { --#define ATH_FLUSH_TIMEOUT 60 /* ms */ - struct ath_softc *sc = hw->priv; -- struct ath_txq *txq = NULL; -- struct ath_hw *ah = sc->sc_ah; -- struct ath_common *common = ath9k_hw_common(ah); -- int i, j, npend = 0; -+ int timeout = 200; /* ms */ -+ int i, j; - -+ ath9k_ps_wakeup(sc); - mutex_lock(&sc->mutex); - - cancel_delayed_work_sync(&sc->tx_complete_work); - -- for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) { -- if (!ATH_TXQ_SETUP(sc, i)) -- continue; -- txq = &sc->tx.txq[i]; -- -- if (!drop) { -- for (j = 0; j < ATH_FLUSH_TIMEOUT; j++) { -- if (!ath9k_has_pending_frames(sc, txq)) -- break; -- usleep_range(1000, 2000); -- } -- } -+ if (drop) -+ timeout = 1; -+ -+ for (j = 0; j < timeout; j++) { -+ int npend = 0; -+ -+ if (j) -+ usleep_range(1000, 2000); - -- if (drop || ath9k_has_pending_frames(sc, txq)) { -- ath_dbg(common, ATH_DBG_QUEUE, "Drop frames from hw queue:%d\n", -- txq->axq_qnum); -- spin_lock_bh(&txq->axq_lock); -- txq->txq_flush_inprogress = true; -- spin_unlock_bh(&txq->axq_lock); -- -- ath9k_ps_wakeup(sc); -- ath9k_hw_stoptxdma(ah, txq->axq_qnum); -- npend = ath9k_hw_numtxpending(ah, txq->axq_qnum); -- ath9k_ps_restore(sc); -- if (npend) -- break; -+ for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) { -+ if (!ATH_TXQ_SETUP(sc, i)) -+ continue; - -- ath_draintxq(sc, txq, false); -- txq->txq_flush_inprogress = false; -+ npend += ath9k_has_pending_frames(sc, &sc->tx.txq[i]); - } -+ -+ if (!npend) -+ goto out; - } - -- if (npend) { -+ if (!ath_drain_all_txq(sc, false)) - ath_reset(sc, false); -- txq->txq_flush_inprogress = false; -- } - -+out: - ieee80211_queue_delayed_work(hw, &sc->tx_complete_work, 0); - mutex_unlock(&sc->mutex); -+ ath9k_ps_restore(sc); - } - - struct ieee80211_ops ath9k_ops = { ---- a/drivers/net/wireless/ath/ath9k/xmit.c -+++ b/drivers/net/wireless/ath/ath9k/xmit.c -@@ -166,7 +166,7 @@ static void ath_tx_flush_tid(struct ath_ - fi = get_frame_info(bf->bf_mpdu); - if (fi->retries) { - ath_tx_update_baw(sc, tid, fi->seqno); -- ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0, 0); -+ ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0, 1); - } else { - ath_tx_send_normal(sc, txq, NULL, &bf_head); - } -@@ -1194,16 +1194,14 @@ bool ath_drain_all_txq(struct ath_softc - if (sc->sc_flags & SC_OP_INVALID) - return true; - -- /* Stop beacon queue */ -- ath9k_hw_stoptxdma(sc->sc_ah, sc->beacon.beaconq); -+ ath9k_hw_abort_tx_dma(ah); - -- /* Stop data queues */ -+ /* Check if any queue remains active */ - for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) { -- if (ATH_TXQ_SETUP(sc, i)) { -- txq = &sc->tx.txq[i]; -- ath9k_hw_stoptxdma(ah, txq->axq_qnum); -- npend += ath9k_hw_numtxpending(ah, txq->axq_qnum); -- } -+ if (!ATH_TXQ_SETUP(sc, i)) -+ continue; -+ -+ npend += ath9k_hw_numtxpending(ah, sc->tx.txq[i].axq_qnum); - } - - if (npend) -@@ -2014,8 +2012,7 @@ static void ath_tx_processq(struct ath_s - spin_lock_bh(&txq->axq_lock); - if (list_empty(&txq->axq_q)) { - txq->axq_link = NULL; -- if (sc->sc_flags & SC_OP_TXAGGR && -- !txq->txq_flush_inprogress) -+ if (sc->sc_flags & SC_OP_TXAGGR) - ath_txq_schedule(sc, txq); - spin_unlock_bh(&txq->axq_lock); - break; -@@ -2096,7 +2093,7 @@ static void ath_tx_processq(struct ath_s - - spin_lock_bh(&txq->axq_lock); - -- if (sc->sc_flags & SC_OP_TXAGGR && !txq->txq_flush_inprogress) -+ if (sc->sc_flags & SC_OP_TXAGGR) - ath_txq_schedule(sc, txq); - spin_unlock_bh(&txq->axq_lock); - } -@@ -2267,18 +2264,17 @@ void ath_tx_edma_tasklet(struct ath_soft - - spin_lock_bh(&txq->axq_lock); - -- if (!txq->txq_flush_inprogress) { -- if (!list_empty(&txq->txq_fifo_pending)) { -- INIT_LIST_HEAD(&bf_head); -- bf = list_first_entry(&txq->txq_fifo_pending, -- struct ath_buf, list); -- list_cut_position(&bf_head, -- &txq->txq_fifo_pending, -- &bf->bf_lastbf->list); -- ath_tx_txqaddbuf(sc, txq, &bf_head); -- } else if (sc->sc_flags & SC_OP_TXAGGR) -- ath_txq_schedule(sc, txq); -- } -+ if (!list_empty(&txq->txq_fifo_pending)) { -+ INIT_LIST_HEAD(&bf_head); -+ bf = list_first_entry(&txq->txq_fifo_pending, -+ struct ath_buf, list); -+ list_cut_position(&bf_head, -+ &txq->txq_fifo_pending, -+ &bf->bf_lastbf->list); -+ ath_tx_txqaddbuf(sc, txq, &bf_head); -+ } else if (sc->sc_flags & SC_OP_TXAGGR) -+ ath_txq_schedule(sc, txq); -+ - spin_unlock_bh(&txq->axq_lock); - } - } ---- a/net/mac80211/chan.c -+++ b/net/mac80211/chan.c -@@ -77,6 +77,9 @@ bool ieee80211_set_channel_type(struct i - switch (tmp->vif.bss_conf.channel_type) { - case NL80211_CHAN_NO_HT: - case NL80211_CHAN_HT20: -+ if (superchan > tmp->vif.bss_conf.channel_type) -+ break; -+ - superchan = tmp->vif.bss_conf.channel_type; - break; - case NL80211_CHAN_HT40PLUS: ---- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c -+++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c -@@ -88,66 +88,6 @@ static void ar9003_hw_init_mode_regs(str - ar9485_1_1_pcie_phy_clkreq_disable_L1, - ARRAY_SIZE(ar9485_1_1_pcie_phy_clkreq_disable_L1), - 2); -- } else if (AR_SREV_9485(ah)) { -- /* mac */ -- INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0); -- INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE], -- ar9485_1_0_mac_core, -- ARRAY_SIZE(ar9485_1_0_mac_core), 2); -- INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST], -- ar9485_1_0_mac_postamble, -- ARRAY_SIZE(ar9485_1_0_mac_postamble), 5); -- -- /* bb */ -- INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], ar9485_1_0, -- ARRAY_SIZE(ar9485_1_0), 2); -- INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE], -- ar9485_1_0_baseband_core, -- ARRAY_SIZE(ar9485_1_0_baseband_core), 2); -- INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST], -- ar9485_1_0_baseband_postamble, -- ARRAY_SIZE(ar9485_1_0_baseband_postamble), 5); -- -- /* radio */ -- INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0); -- INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE], -- ar9485_1_0_radio_core, -- ARRAY_SIZE(ar9485_1_0_radio_core), 2); -- INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST], -- ar9485_1_0_radio_postamble, -- ARRAY_SIZE(ar9485_1_0_radio_postamble), 2); -- -- /* soc */ -- INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE], -- ar9485_1_0_soc_preamble, -- ARRAY_SIZE(ar9485_1_0_soc_preamble), 2); -- INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0); -- INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST], NULL, 0, 0); -- -- /* rx/tx gain */ -- INIT_INI_ARRAY(&ah->iniModesRxGain, -- ar9485Common_rx_gain_1_0, -- ARRAY_SIZE(ar9485Common_rx_gain_1_0), 2); -- INIT_INI_ARRAY(&ah->iniModesTxGain, -- ar9485Modes_lowest_ob_db_tx_gain_1_0, -- ARRAY_SIZE(ar9485Modes_lowest_ob_db_tx_gain_1_0), -- 5); -- -- /* Load PCIE SERDES settings from INI */ -- -- /* Awake Setting */ -- -- INIT_INI_ARRAY(&ah->iniPcieSerdes, -- ar9485_1_0_pcie_phy_pll_on_clkreq_disable_L1, -- ARRAY_SIZE(ar9485_1_0_pcie_phy_pll_on_clkreq_disable_L1), -- 2); -- -- /* Sleep Setting */ -- -- INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower, -- ar9485_1_0_pcie_phy_pll_on_clkreq_disable_L1, -- ARRAY_SIZE(ar9485_1_0_pcie_phy_pll_on_clkreq_disable_L1), -- 2); - } else { - /* mac */ - INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0); -@@ -228,11 +168,6 @@ static void ar9003_tx_gain_table_apply(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_9485(ah)) -- INIT_INI_ARRAY(&ah->iniModesTxGain, -- ar9485Modes_lowest_ob_db_tx_gain_1_0, -- ARRAY_SIZE(ar9485Modes_lowest_ob_db_tx_gain_1_0), -- 5); - else - INIT_INI_ARRAY(&ah->iniModesTxGain, - ar9300Modes_lowest_ob_db_tx_gain_table_2p2, -@@ -245,11 +180,6 @@ static void ar9003_tx_gain_table_apply(s - ar9485Modes_high_ob_db_tx_gain_1_1, - ARRAY_SIZE(ar9485Modes_high_ob_db_tx_gain_1_1), - 5); -- else if (AR_SREV_9485(ah)) -- INIT_INI_ARRAY(&ah->iniModesTxGain, -- ar9485Modes_high_ob_db_tx_gain_1_0, -- ARRAY_SIZE(ar9485Modes_high_ob_db_tx_gain_1_0), -- 5); - else - INIT_INI_ARRAY(&ah->iniModesTxGain, - ar9300Modes_high_ob_db_tx_gain_table_2p2, -@@ -262,11 +192,6 @@ static void ar9003_tx_gain_table_apply(s - ar9485Modes_low_ob_db_tx_gain_1_1, - ARRAY_SIZE(ar9485Modes_low_ob_db_tx_gain_1_1), - 5); -- else if (AR_SREV_9485(ah)) -- INIT_INI_ARRAY(&ah->iniModesTxGain, -- ar9485Modes_low_ob_db_tx_gain_1_0, -- ARRAY_SIZE(ar9485Modes_low_ob_db_tx_gain_1_0), -- 5); - else - INIT_INI_ARRAY(&ah->iniModesTxGain, - ar9300Modes_low_ob_db_tx_gain_table_2p2, -@@ -279,11 +204,6 @@ static void ar9003_tx_gain_table_apply(s - ar9485Modes_high_power_tx_gain_1_1, - ARRAY_SIZE(ar9485Modes_high_power_tx_gain_1_1), - 5); -- else if (AR_SREV_9485(ah)) -- INIT_INI_ARRAY(&ah->iniModesTxGain, -- ar9485Modes_high_power_tx_gain_1_0, -- ARRAY_SIZE(ar9485Modes_high_power_tx_gain_1_0), -- 5); - else - INIT_INI_ARRAY(&ah->iniModesTxGain, - ar9300Modes_high_power_tx_gain_table_2p2, -@@ -303,11 +223,6 @@ static void ar9003_rx_gain_table_apply(s - ar9485_common_rx_gain_1_1, - ARRAY_SIZE(ar9485_common_rx_gain_1_1), - 2); -- else if (AR_SREV_9485(ah)) -- INIT_INI_ARRAY(&ah->iniModesRxGain, -- ar9485Common_rx_gain_1_0, -- ARRAY_SIZE(ar9485Common_rx_gain_1_0), -- 2); - else - INIT_INI_ARRAY(&ah->iniModesRxGain, - ar9300Common_rx_gain_table_2p2, -@@ -320,11 +235,6 @@ static void ar9003_rx_gain_table_apply(s - ar9485Common_wo_xlna_rx_gain_1_1, - ARRAY_SIZE(ar9485Common_wo_xlna_rx_gain_1_1), - 2); -- else if (AR_SREV_9485(ah)) -- INIT_INI_ARRAY(&ah->iniModesRxGain, -- ar9485Common_wo_xlna_rx_gain_1_0, -- ARRAY_SIZE(ar9485Common_wo_xlna_rx_gain_1_0), -- 2); - else - INIT_INI_ARRAY(&ah->iniModesRxGain, - ar9300Common_wo_xlna_rx_gain_table_2p2, ---- a/drivers/net/wireless/ath/ath9k/ar9485_initvals.h -+++ b/drivers/net/wireless/ath/ath9k/ar9485_initvals.h -@@ -17,931 +17,6 @@ - #ifndef INITVALS_9485_H - #define INITVALS_9485_H - --static const u32 ar9485Common_1_0[][2] = { -- /* Addr allmodes */ -- {0x00007010, 0x00000022}, -- {0x00007020, 0x00000000}, -- {0x00007034, 0x00000002}, -- {0x00007038, 0x000004c2}, --}; -- --static const u32 ar9485_1_0_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 ar9485_1_0_pcie_phy_pll_on_clkreq_disable_L1[][2] = { -- /* Addr allmodes */ -- {0x00018c00, 0x10212e5e}, -- {0x00018c04, 0x000801d8}, -- {0x00018c08, 0x0000580c}, --}; -- --static const u32 ar9485Common_wo_xlna_rx_gain_1_0[][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}, --}; -- --static const u32 ar9485Modes_high_power_tx_gain_1_0[][5] = { -- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ -- {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d8, 0x000050d8}, -- {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, 0x2e000a20, 0x2e000a20}, -- {0x0000a534, 0x4d023f01, 0x4d023f01, 0x34000e20, 0x34000e20}, -- {0x0000a538, 0x53023f4b, 0x53023f4b, 0x38000e22, 0x38000e22}, -- {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x3c000e24, 0x3c000e24}, -- {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x40000e26, 0x40000e26}, -- {0x0000a544, 0x6502feca, 0x6502feca, 0x43001640, 0x43001640}, -- {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x46001660, 0x46001660}, -- {0x0000a54c, 0x7203feca, 0x7203feca, 0x49001861, 0x49001861}, -- {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x4c001a81, 0x4c001a81}, -- {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x4f001a83, 0x4f001a83}, -- {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x54001c85, 0x54001c85}, -- {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x58001ce5, 0x58001ce5}, -- {0x0000a560, 0x900fff0b, 0x900fff0b, 0x5b001ce9, 0x5b001ce9}, -- {0x0000a564, 0x960fffcb, 0x960fffcb, 0x60001eeb, 0x60001eeb}, -- {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x00016044, 0x05b6b2db, 0x05b6b2db, 0x05b6b2db, 0x05b6b2db}, --}; -- --static const u32 ar9485_1_0[][2] = { -- /* Addr allmodes */ -- {0x0000a580, 0x00000000}, -- {0x0000a584, 0x00000000}, -- {0x0000a588, 0x00000000}, -- {0x0000a58c, 0x00000000}, -- {0x0000a590, 0x00000000}, -- {0x0000a594, 0x00000000}, -- {0x0000a598, 0x00000000}, -- {0x0000a59c, 0x00000000}, -- {0x0000a5a0, 0x00000000}, -- {0x0000a5a4, 0x00000000}, -- {0x0000a5a8, 0x00000000}, -- {0x0000a5ac, 0x00000000}, -- {0x0000a5b0, 0x00000000}, -- {0x0000a5b4, 0x00000000}, -- {0x0000a5b8, 0x00000000}, -- {0x0000a5bc, 0x00000000}, --}; -- --static const u32 ar9485_1_0_radio_core[][2] = { -- /* Addr allmodes */ -- {0x00016000, 0x36db6db6}, -- {0x00016004, 0x6db6db40}, -- {0x00016008, 0x73800000}, -- {0x0001600c, 0x00000000}, -- {0x00016040, 0x7f80fff8}, -- {0x00016048, 0x6c92426e}, -- {0x0001604c, 0x000f0278}, -- {0x00016050, 0x6db6db6c}, -- {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}, -- {0x00016180, 0x08453333}, -- {0x00016184, 0x18e82f01}, -- {0x00016188, 0x00000000}, -- {0x0001618c, 0x00000000}, -- {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, 0x1319c178}, -- {0x00016c44, 0x10000000}, --}; -- --static const u32 ar9485Modes_lowest_ob_db_tx_gain_1_0[][5] = { -- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ -- {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d8, 0x000050d8}, -- {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, 0x2e000a20, 0x2e000a20}, -- {0x0000a534, 0x4d023f01, 0x4d023f01, 0x34000e20, 0x34000e20}, -- {0x0000a538, 0x53023f4b, 0x53023f4b, 0x38000e22, 0x38000e22}, -- {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x3c000e24, 0x3c000e24}, -- {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x40000e26, 0x40000e26}, -- {0x0000a544, 0x6502feca, 0x6502feca, 0x43001640, 0x43001640}, -- {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x46001660, 0x46001660}, -- {0x0000a54c, 0x7203feca, 0x7203feca, 0x49001861, 0x49001861}, -- {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x4c001a81, 0x4c001a81}, -- {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x4f001a83, 0x4f001a83}, -- {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x54001c85, 0x54001c85}, -- {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x58001ce5, 0x58001ce5}, -- {0x0000a560, 0x900fff0b, 0x900fff0b, 0x5b001ce9, 0x5b001ce9}, -- {0x0000a564, 0x960fffcb, 0x960fffcb, 0x60001eeb, 0x60001eeb}, -- {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x00016044, 0x05b6b2db, 0x05b6b2db, 0x05b6b2db, 0x05b6b2db}, --}; -- --static const u32 ar9485_1_0_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}, -- {0x000098bc, 0x00000002}, -- {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, 0x990bb515}, -- {0x00009e28, 0x0a6f0000}, -- {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, 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, 0x2d0011ce}, -- {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}, -- {0x0000a5c4, 0x3fad9d74}, -- {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, 0x00000001}, --}; -- --static const u32 ar9485Modes_high_ob_db_tx_gain_1_0[][5] = { -- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ -- {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d8, 0x000050d8}, -- {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, 0x2e000a20, 0x2e000a20}, -- {0x0000a534, 0x4d023f01, 0x4d023f01, 0x34000e20, 0x34000e20}, -- {0x0000a538, 0x53023f4b, 0x53023f4b, 0x38000e22, 0x38000e22}, -- {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x3c000e24, 0x3c000e24}, -- {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x40000e26, 0x40000e26}, -- {0x0000a544, 0x6502feca, 0x6502feca, 0x43001640, 0x43001640}, -- {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x46001660, 0x46001660}, -- {0x0000a54c, 0x7203feca, 0x7203feca, 0x49001861, 0x49001861}, -- {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x4c001a81, 0x4c001a81}, -- {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x4f001a83, 0x4f001a83}, -- {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x54001c85, 0x54001c85}, -- {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x58001ce5, 0x58001ce5}, -- {0x0000a560, 0x900fff0b, 0x900fff0b, 0x5b001ce9, 0x5b001ce9}, -- {0x0000a564, 0x960fffcb, 0x960fffcb, 0x60001eeb, 0x60001eeb}, -- {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x00016044, 0x05b6b2db, 0x05b6b2db, 0x05b6b2db, 0x05b6b2db}, --}; -- --static const u32 ar9485Common_rx_gain_1_0[][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}, --}; -- --static const u32 ar9485_1_0_pcie_phy_pll_on_clkreq_enable_L1[][2] = { -- /* Addr allmodes */ -- {0x00018c00, 0x10252e5e}, -- {0x00018c04, 0x000801d8}, -- {0x00018c08, 0x0000580c}, --}; -- --static const u32 ar9485_1_0_pcie_phy_clkreq_enable_L1[][2] = { -- /* Addr allmodes */ -- {0x00018c00, 0x10253e5e}, -- {0x00018c04, 0x000801d8}, -- {0x00018c08, 0x0000580c}, --}; -- --static const u32 ar9485_1_0_soc_preamble[][2] = { -- /* Addr allmodes */ -- {0x00004090, 0x00aa10aa}, -- {0x000040a4, 0x00a0c9c9}, -- {0x00007048, 0x00000004}, --}; -- --static const u32 ar9485_fast_clock_1_0_baseband_postamble[][3] = { -- /* Addr 5G_HT20 5G_HT40 */ -- {0x00009e00, 0x03721821, 0x03721821}, -- {0x0000a230, 0x0000400b, 0x00004016}, -- {0x0000a254, 0x00000898, 0x00001130}, --}; -- --static const u32 ar9485_1_0_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, 0x00071981, 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_low_ob_db_tx_gain_1_0[][5] = { -- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ -- {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d8, 0x000050d8}, -- {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, 0x2e000a20, 0x2e000a20}, -- {0x0000a534, 0x4d023f01, 0x4d023f01, 0x34000e20, 0x34000e20}, -- {0x0000a538, 0x53023f4b, 0x53023f4b, 0x38000e22, 0x38000e22}, -- {0x0000a53c, 0x5a027f09, 0x5a027f09, 0x3c000e24, 0x3c000e24}, -- {0x0000a540, 0x5f027fc9, 0x5f027fc9, 0x40000e26, 0x40000e26}, -- {0x0000a544, 0x6502feca, 0x6502feca, 0x43001640, 0x43001640}, -- {0x0000a548, 0x6b02ff4a, 0x6b02ff4a, 0x46001660, 0x46001660}, -- {0x0000a54c, 0x7203feca, 0x7203feca, 0x49001861, 0x49001861}, -- {0x0000a550, 0x7703ff0b, 0x7703ff0b, 0x4c001a81, 0x4c001a81}, -- {0x0000a554, 0x7d06ffcb, 0x7d06ffcb, 0x4f001a83, 0x4f001a83}, -- {0x0000a558, 0x8407ff0b, 0x8407ff0b, 0x54001c85, 0x54001c85}, -- {0x0000a55c, 0x8907ffcb, 0x8907ffcb, 0x58001ce5, 0x58001ce5}, -- {0x0000a560, 0x900fff0b, 0x900fff0b, 0x5b001ce9, 0x5b001ce9}, -- {0x0000a564, 0x960fffcb, 0x960fffcb, 0x60001eeb, 0x60001eeb}, -- {0x0000a568, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a56c, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a570, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a574, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a578, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x0000a57c, 0x9c1fff0b, 0x9c1fff0b, 0x60001eeb, 0x60001eeb}, -- {0x00016044, 0x05b6b2db, 0x05b6b2db, 0x05b6b2db, 0x05b6b2db}, --}; -- --static const u32 ar9485_1_0_pcie_phy_clkreq_disable_L1[][2] = { -- /* Addr allmodes */ -- {0x00018c00, 0x10213e5e}, -- {0x00018c04, 0x000801d8}, -- {0x00018c08, 0x0000580c}, --}; -- --static const u32 ar9485_1_0_radio_postamble[][2] = { -- /* Addr allmodes */ -- {0x0001609c, 0x0b283f31}, -- {0x000160ac, 0x24611800}, -- {0x000160b0, 0x03284f3e}, -- {0x0001610c, 0x00170000}, -- {0x00016140, 0x10804008}, --}; -- --static const u32 ar9485_1_0_mac_core[][2] = { -- /* Addr allmodes */ -- {0x00000008, 0x00000000}, -- {0x00000030, 0x00020085}, -- {0x00000034, 0x00000005}, -- {0x00000040, 0x00000000}, -- {0x00000044, 0x00000000}, -- {0x00000048, 0x00000008}, -- {0x0000004c, 0x00000010}, -- {0x00000050, 0x00000000}, -- {0x00001040, 0x002ffc0f}, -- {0x00001044, 0x002ffc0f}, -- {0x00001048, 0x002ffc0f}, -- {0x0000104c, 0x002ffc0f}, -- {0x00001050, 0x002ffc0f}, -- {0x00001054, 0x002ffc0f}, -- {0x00001058, 0x002ffc0f}, -- {0x0000105c, 0x002ffc0f}, -- {0x00001060, 0x002ffc0f}, -- {0x00001064, 0x002ffc0f}, -- {0x000010f0, 0x00000100}, -- {0x00001270, 0x00000000}, -- {0x000012b0, 0x00000000}, -- {0x000012f0, 0x00000000}, -- {0x0000143c, 0x00000000}, -- {0x0000147c, 0x00000000}, -- {0x00008000, 0x00000000}, -- {0x00008004, 0x00000000}, -- {0x00008008, 0x00000000}, -- {0x0000800c, 0x00000000}, -- {0x00008018, 0x00000000}, -- {0x00008020, 0x00000000}, -- {0x00008038, 0x00000000}, -- {0x0000803c, 0x00000000}, -- {0x00008040, 0x00000000}, -- {0x00008044, 0x00000000}, -- {0x00008048, 0x00000000}, -- {0x0000804c, 0xffffffff}, -- {0x00008054, 0x00000000}, -- {0x00008058, 0x00000000}, -- {0x0000805c, 0x000fc78f}, -- {0x00008060, 0x0000000f}, -- {0x00008064, 0x00000000}, -- {0x00008070, 0x00000310}, -- {0x00008074, 0x00000020}, -- {0x00008078, 0x00000000}, -- {0x0000809c, 0x0000000f}, -- {0x000080a0, 0x00000000}, -- {0x000080a4, 0x02ff0000}, -- {0x000080a8, 0x0e070605}, -- {0x000080ac, 0x0000000d}, -- {0x000080b0, 0x00000000}, -- {0x000080b4, 0x00000000}, -- {0x000080b8, 0x00000000}, -- {0x000080bc, 0x00000000}, -- {0x000080c0, 0x2a800000}, -- {0x000080c4, 0x06900168}, -- {0x000080c8, 0x13881c20}, -- {0x000080cc, 0x01f40000}, -- {0x000080d0, 0x00252500}, -- {0x000080d4, 0x00a00000}, -- {0x000080d8, 0x00400000}, -- {0x000080dc, 0x00000000}, -- {0x000080e0, 0xffffffff}, -- {0x000080e4, 0x0000ffff}, -- {0x000080e8, 0x3f3f3f3f}, -- {0x000080ec, 0x00000000}, -- {0x000080f0, 0x00000000}, -- {0x000080f4, 0x00000000}, -- {0x000080fc, 0x00020000}, -- {0x00008100, 0x00000000}, -- {0x00008108, 0x00000052}, -- {0x0000810c, 0x00000000}, -- {0x00008110, 0x00000000}, -- {0x00008114, 0x000007ff}, -- {0x00008118, 0x000000aa}, -- {0x0000811c, 0x00003210}, -- {0x00008124, 0x00000000}, -- {0x00008128, 0x00000000}, -- {0x0000812c, 0x00000000}, -- {0x00008130, 0x00000000}, -- {0x00008134, 0x00000000}, -- {0x00008138, 0x00000000}, -- {0x0000813c, 0x0000ffff}, -- {0x00008144, 0xffffffff}, -- {0x00008168, 0x00000000}, -- {0x0000816c, 0x00000000}, -- {0x00008170, 0x18486200}, -- {0x00008174, 0x33332210}, -- {0x00008178, 0x00000000}, -- {0x0000817c, 0x00020000}, -- {0x000081c0, 0x00000000}, -- {0x000081c4, 0x33332210}, -- {0x000081c8, 0x00000000}, -- {0x000081cc, 0x00000000}, -- {0x000081d4, 0x00000000}, -- {0x000081ec, 0x00000000}, -- {0x000081f0, 0x00000000}, -- {0x000081f4, 0x00000000}, -- {0x000081f8, 0x00000000}, -- {0x000081fc, 0x00000000}, -- {0x00008240, 0x00100000}, -- {0x00008244, 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_mac_core[][2] = { - /* Addr allmodes */ - {0x00000008, 0x00000000}, diff --git a/package/mac80211/patches/401-ath9k-dont-register-leds-on-ar9100.patch b/package/mac80211/patches/401-ath9k-dont-register-leds-on-ar9100.patch index 22299020a0..d60be760d6 100644 --- a/package/mac80211/patches/401-ath9k-dont-register-leds-on-ar9100.patch +++ b/package/mac80211/patches/401-ath9k-dont-register-leds-on-ar9100.patch @@ -7,6 +7,6 @@ + if (AR_SREV_9100(sc->sc_ah)) + return; + - if (AR_SREV_9287(sc->sc_ah)) - sc->sc_ah->led_pin = ATH_LED_PIN_9287; - else if (AR_SREV_9485(sc->sc_ah)) + if (sc->sc_ah->led_pin < 0) { + if (AR_SREV_9287(sc->sc_ah)) + sc->sc_ah->led_pin = ATH_LED_PIN_9287; diff --git a/package/mac80211/patches/402-ath9k_blink_default.patch b/package/mac80211/patches/402-ath9k_blink_default.patch index 5f07a6da9a..75e6454cc5 100644 --- a/package/mac80211/patches/402-ath9k_blink_default.patch +++ b/package/mac80211/patches/402-ath9k_blink_default.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/ath/ath9k/init.c +++ b/drivers/net/wireless/ath/ath9k/init.c -@@ -33,7 +33,7 @@ int ath9k_modparam_nohwcrypt; +@@ -34,7 +34,7 @@ int ath9k_modparam_nohwcrypt; module_param_named(nohwcrypt, ath9k_modparam_nohwcrypt, int, 0444); MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption"); diff --git a/package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch b/package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch index cf3f96bb17..e65d463194 100644 --- a/package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch +++ b/package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch @@ -8,7 +8,7 @@ #include #include "hw.h" -@@ -431,8 +432,16 @@ static int ath9k_hw_init_macaddr(struct +@@ -433,8 +434,16 @@ static int ath9k_hw_init_macaddr(struct common->macaddr[2 * i] = eeval >> 8; common->macaddr[2 * i + 1] = eeval & 0xff; } diff --git a/package/mac80211/patches/407-ath9k-override-mac-address-from-platform-data.patch b/package/mac80211/patches/407-ath9k-override-mac-address-from-platform-data.patch deleted file mode 100644 index 6326649fc2..0000000000 --- a/package/mac80211/patches/407-ath9k-override-mac-address-from-platform-data.patch +++ /dev/null @@ -1,47 +0,0 @@ ---- a/include/linux/ath9k_platform.h -+++ b/include/linux/ath9k_platform.h -@@ -23,6 +23,7 @@ - - struct ath9k_platform_data { - u16 eeprom_data[ATH9K_PLAT_EEP_MAX_WORDS]; -+ u8 *macaddr; - }; - - #endif /* _LINUX_ATH9K_PLATFORM_H */ ---- a/drivers/net/wireless/ath/ath9k/init.c -+++ b/drivers/net/wireless/ath/ath9k/init.c -@@ -15,6 +15,7 @@ - */ - - #include -+#include - - #include "ath9k.h" - -@@ -537,6 +538,7 @@ static void ath9k_init_misc(struct ath_s - static int ath9k_init_softc(u16 devid, struct ath_softc *sc, u16 subsysid, - const struct ath_bus_ops *bus_ops) - { -+ struct ath9k_platform_data *pdata = sc->dev->platform_data; - struct ath_hw *ah = NULL; - struct ath_common *common; - int ret = 0, i; -@@ -551,7 +553,7 @@ static int ath9k_init_softc(u16 devid, s - ah->hw_version.subsysid = subsysid; - sc->sc_ah = ah; - -- if (!sc->dev->platform_data) -+ if (!pdata) - ah->ah_flags |= AH_USE_EEPROM; - - common = ath9k_hw_common(ah); -@@ -587,6 +589,9 @@ static int ath9k_init_softc(u16 devid, s - if (ret) - goto err_hw; - -+ if (pdata && pdata->macaddr) -+ memcpy(common->macaddr, pdata->macaddr, ETH_ALEN); -+ - ret = ath9k_init_queues(sc); - if (ret) - goto err_queues; diff --git a/package/mac80211/patches/409-ath9k_platform_settings.patch b/package/mac80211/patches/409-ath9k_platform_settings.patch deleted file mode 100644 index 6ce43b6005..0000000000 --- a/package/mac80211/patches/409-ath9k_platform_settings.patch +++ /dev/null @@ -1,65 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/init.c -+++ b/drivers/net/wireless/ath/ath9k/init.c -@@ -553,8 +553,14 @@ static int ath9k_init_softc(u16 devid, s - ah->hw_version.subsysid = subsysid; - sc->sc_ah = ah; - -- if (!pdata) -+ if (!pdata) { - ah->ah_flags |= AH_USE_EEPROM; -+ sc->sc_ah->led_pin = -1; -+ } else { -+ sc->sc_ah->gpio_mask = pdata->gpio_mask; -+ sc->sc_ah->gpio_val = pdata->gpio_val; -+ sc->sc_ah->led_pin = pdata->led_pin; -+ } - - common = ath9k_hw_common(ah); - common->ops = &ath9k_common_ops; ---- a/drivers/net/wireless/ath/ath9k/hw.h -+++ b/drivers/net/wireless/ath/ath9k/hw.h -@@ -794,7 +794,7 @@ struct ath_hw { - u32 originalGain[22]; - int initPDADC; - int PDADCdelta; -- u8 led_pin; -+ int led_pin; - u32 gpio_mask; - u32 gpio_val; - ---- a/drivers/net/wireless/ath/ath9k/gpio.c -+++ b/drivers/net/wireless/ath/ath9k/gpio.c -@@ -44,12 +44,14 @@ void ath_init_leds(struct ath_softc *sc) - if (AR_SREV_9100(sc->sc_ah)) - return; - -- if (AR_SREV_9287(sc->sc_ah)) -- sc->sc_ah->led_pin = ATH_LED_PIN_9287; -- else if (AR_SREV_9485(sc->sc_ah)) -- sc->sc_ah->led_pin = ATH_LED_PIN_9485; -- else -- sc->sc_ah->led_pin = ATH_LED_PIN_DEF; -+ if (sc->sc_ah->led_pin < 0) { -+ if (AR_SREV_9287(sc->sc_ah)) -+ sc->sc_ah->led_pin = ATH_LED_PIN_9287; -+ else if (AR_SREV_9485(sc->sc_ah)) -+ sc->sc_ah->led_pin = ATH_LED_PIN_9485; -+ else -+ sc->sc_ah->led_pin = ATH_LED_PIN_DEF; -+ } - - /* Configure gpio 1 for output */ - ath9k_hw_cfg_output(sc->sc_ah, sc->sc_ah->led_pin, ---- a/include/linux/ath9k_platform.h -+++ b/include/linux/ath9k_platform.h -@@ -24,6 +24,10 @@ - struct ath9k_platform_data { - u16 eeprom_data[ATH9K_PLAT_EEP_MAX_WORDS]; - u8 *macaddr; -+ -+ int led_pin; -+ u32 gpio_mask; -+ u32 gpio_val; - }; - - #endif /* _LINUX_ATH9K_PLATFORM_H */ diff --git a/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch b/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch index 632ae96a64..9b75fb5df9 100644 --- a/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch +++ b/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch @@ -54,7 +54,7 @@ int ath9k_init_debug(struct ath_hw *ah) { struct ath_common *common = ath9k_hw_common(ah); -@@ -1151,6 +1198,9 @@ int ath9k_init_debug(struct ath_hw *ah) +@@ -1125,6 +1172,9 @@ 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); @@ -63,4 +63,4 @@ + sc->debug.regidx = 0; return 0; - err: + } diff --git a/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch b/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch index 301af3c22b..322a381874 100644 --- a/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch +++ b/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -1466,8 +1466,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st +@@ -1468,8 +1468,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st REG_WRITE(ah, AR_OBS, 8); if (ah->config.rx_intr_mitigation) { diff --git a/package/mac80211/patches/520-mac80211_drv_tim_override.patch b/package/mac80211/patches/520-mac80211_drv_tim_override.patch index 535e35927e..f2ec46aa6a 100644 --- a/package/mac80211/patches/520-mac80211_drv_tim_override.patch +++ b/package/mac80211/patches/520-mac80211_drv_tim_override.patch @@ -21,7 +21,7 @@ * Call this function for all transmitted frames after they have been --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c -@@ -608,7 +608,8 @@ static bool sta_info_cleanup_expire_buff +@@ -609,7 +609,8 @@ static bool sta_info_cleanup_expire_buff #endif dev_kfree_skb(skb); @@ -31,7 +31,7 @@ sta_info_clear_tim_bit(sta); } -@@ -899,6 +900,7 @@ void ieee80211_sta_ps_deliver_wakeup(str +@@ -900,6 +901,7 @@ void ieee80211_sta_ps_deliver_wakeup(str struct ieee80211_local *local = sdata->local; int sent, buffered; @@ -39,7 +39,7 @@ if (!(local->hw.flags & IEEE80211_HW_AP_LINK_PS)) drv_sta_notify(local, sdata, STA_NOTIFY_AWAKE, &sta->sta); -@@ -991,3 +993,12 @@ void ieee80211_sta_block_awake(struct ie +@@ -992,3 +994,12 @@ void ieee80211_sta_block_awake(struct ie ieee80211_queue_work(hw, &sta->drv_unblock_wk); } EXPORT_SYMBOL(ieee80211_sta_block_awake); diff --git a/package/mac80211/patches/521-ath9k_fix_ap_ps_buffering.patch b/package/mac80211/patches/521-ath9k_fix_ap_ps_buffering.patch index 87cc2654b5..4799d5f910 100644 --- a/package/mac80211/patches/521-ath9k_fix_ap_ps_buffering.patch +++ b/package/mac80211/patches/521-ath9k_fix_ap_ps_buffering.patch @@ -223,7 +223,7 @@ /* PHY ops */ --- a/drivers/net/wireless/ath/ath9k/hw.h +++ b/drivers/net/wireless/ath/ath9k/hw.h -@@ -642,6 +642,7 @@ struct ath_hw_ops { +@@ -646,6 +646,7 @@ struct ath_hw_ops { u32 burstDuration); void (*set11n_virtualmorefrag)(struct ath_hw *ah, void *ds, u32 vmf); diff --git a/package/mac80211/patches/522-ath9k_remove_pending_frames_workaround.patch b/package/mac80211/patches/522-ath9k_remove_pending_frames_workaround.patch deleted file mode 100644 index e368bce64b..0000000000 --- a/package/mac80211/patches/522-ath9k_remove_pending_frames_workaround.patch +++ /dev/null @@ -1,36 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/xmit.c -+++ b/drivers/net/wireless/ath/ath9k/xmit.c -@@ -2223,33 +2223,6 @@ static void ath_tx_complete_poll_work(st - } else { - txq->axq_tx_inprogress = true; - } -- } else { -- /* If the queue has pending buffers, then it -- * should be doing tx work (and have axq_depth). -- * Shouldn't get to this state I think..but -- * we do. -- */ -- if (!(sc->sc_flags & (SC_OP_OFFCHANNEL)) && -- (txq->pending_frames > 0 || -- !list_empty(&txq->axq_acq) || -- txq->stopped)) { -- ath_err(ath9k_hw_common(sc->sc_ah), -- "txq: %p axq_qnum: %u," -- " mac80211_qnum: %i" -- " axq_link: %p" -- " pending frames: %i" -- " axq_acq empty: %i" -- " stopped: %i" -- " axq_depth: 0 Attempting to" -- " restart tx logic.\n", -- txq, txq->axq_qnum, -- txq->mac80211_qnum, -- txq->axq_link, -- txq->pending_frames, -- list_empty(&txq->axq_acq), -- txq->stopped); -- ath_txq_schedule(sc, txq); -- } - } - spin_unlock_bh(&txq->axq_lock); - } diff --git a/package/mac80211/patches/530-mac80211_redirect_vlan_eap_frames.patch b/package/mac80211/patches/530-mac80211_redirect_vlan_eap_frames.patch index 03a4fe5d37..c956a20580 100644 --- a/package/mac80211/patches/530-mac80211_redirect_vlan_eap_frames.patch +++ b/package/mac80211/patches/530-mac80211_redirect_vlan_eap_frames.patch @@ -1,6 +1,6 @@ --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c -@@ -1582,7 +1582,7 @@ ieee80211_drop_unencrypted_mgmt(struct i +@@ -1584,7 +1584,7 @@ ieee80211_drop_unencrypted_mgmt(struct i } static int @@ -9,7 +9,7 @@ { struct ieee80211_sub_if_data *sdata = rx->sdata; struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; -@@ -1590,6 +1590,7 @@ __ieee80211_data_to_8023(struct ieee8021 +@@ -1592,6 +1592,7 @@ __ieee80211_data_to_8023(struct ieee8021 struct ethhdr *ehdr; int ret; @@ -17,7 +17,7 @@ if (ieee80211_has_a4(hdr->frame_control) && sdata->vif.type == NL80211_IFTYPE_AP_VLAN && !sdata->u.vlan.sta) return -1; -@@ -1608,11 +1609,14 @@ __ieee80211_data_to_8023(struct ieee8021 +@@ -1610,11 +1611,14 @@ __ieee80211_data_to_8023(struct ieee8021 return -1; ret = ieee80211_data_to_8023(rx->skb, sdata->vif.addr, sdata->vif.type); @@ -34,7 +34,7 @@ return -1; return 0; -@@ -1913,6 +1917,7 @@ ieee80211_rx_h_data(struct ieee80211_rx_ +@@ -1915,6 +1919,7 @@ ieee80211_rx_h_data(struct ieee80211_rx_ struct net_device *dev = sdata->dev; struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; __le16 fc = hdr->frame_control; @@ -42,7 +42,7 @@ int err; if (unlikely(!ieee80211_is_data(hdr->frame_control))) -@@ -1929,13 +1934,21 @@ ieee80211_rx_h_data(struct ieee80211_rx_ +@@ -1931,13 +1936,21 @@ ieee80211_rx_h_data(struct ieee80211_rx_ sdata->vif.type == NL80211_IFTYPE_AP) return RX_DROP_MONITOR; diff --git a/package/mac80211/patches/540-ath9k_ar9100_blockack_fix.patch b/package/mac80211/patches/540-ath9k_ar9100_blockack_fix.patch deleted file mode 100644 index 2a09f7fc38..0000000000 --- a/package/mac80211/patches/540-ath9k_ar9100_blockack_fix.patch +++ /dev/null @@ -1,21 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/hw.c -+++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -411,6 +411,8 @@ static void ath9k_hw_init_defaults(struc - ah->sta_id1_defaults = - AR_STA_ID1_CRPT_MIC_ENABLE | - AR_STA_ID1_MCAST_KSRCH; -+ if (AR_SREV_9100(ah)) -+ ah->sta_id1_defaults |= AR_STA_ID1_AR9100_BA_FIX; - ah->enable_32kHz_clock = DONT_USE_32KHZ; - ah->slottime = 20; - ah->globaltxtimeout = (u32) -1; ---- a/drivers/net/wireless/ath/ath9k/reg.h -+++ b/drivers/net/wireless/ath/ath9k/reg.h -@@ -1396,6 +1396,7 @@ enum { - #define AR_STA_ID1_PCF 0x00100000 - #define AR_STA_ID1_USE_DEFANT 0x00200000 - #define AR_STA_ID1_DEFANT_UPDATE 0x00400000 -+#define AR_STA_ID1_AR9100_BA_FIX 0x00400000 - #define AR_STA_ID1_RTS_USE_DEF 0x00800000 - #define AR_STA_ID1_ACKCTS_6MB 0x01000000 - #define AR_STA_ID1_BASE_RATE_11B 0x02000000 diff --git a/package/mac80211/patches/540-mac80211_fix_rx_reorder_timeout.patch b/package/mac80211/patches/540-mac80211_fix_rx_reorder_timeout.patch new file mode 100644 index 0000000000..c3532b4a36 --- /dev/null +++ b/package/mac80211/patches/540-mac80211_fix_rx_reorder_timeout.patch @@ -0,0 +1,11 @@ +--- a/net/mac80211/rx.c ++++ b/net/mac80211/rx.c +@@ -613,7 +613,7 @@ static void ieee80211_sta_reorder_releas + continue; + } + if (!time_after(jiffies, tid_agg_rx->reorder_time[j] + +- HT_RX_REORDER_BUF_TIMEOUT)) ++ HT_RX_REORDER_BUF_TIMEOUT) && skipped) + goto set_release_timer; + + #ifdef CONFIG_MAC80211_HT_DEBUG diff --git a/package/mac80211/patches/541-ath9k_ar9100_rx_chainmask_fix.patch b/package/mac80211/patches/541-ath9k_ar9100_rx_chainmask_fix.patch deleted file mode 100644 index fb06f01ec4..0000000000 --- a/package/mac80211/patches/541-ath9k_ar9100_rx_chainmask_fix.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/hw.c -+++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -1878,6 +1878,8 @@ int ath9k_hw_fill_cap_info(struct ath_hw - !(AR_SREV_9271(ah))) - /* CB71: GPIO 0 is pulled down to indicate 3 rx chains */ - pCap->rx_chainmask = ath9k_hw_gpio_get(ah, 0) ? 0x5 : 0x7; -+ else if (AR_SREV_9100(ah)) -+ pCap->rx_chainmask = 0x7; - else - /* Use rx_chainmask from EEPROM. */ - pCap->rx_chainmask = ah->eep_ops->get_eeprom(ah, EEP_RX_MASK); diff --git a/package/mac80211/patches/550-ath9k_increase_bcbuf.patch b/package/mac80211/patches/550-ath9k_increase_bcbuf.patch new file mode 100644 index 0000000000..91ec1dc6df --- /dev/null +++ b/package/mac80211/patches/550-ath9k_increase_bcbuf.patch @@ -0,0 +1,24 @@ +--- a/drivers/net/wireless/ath/ath9k/ath9k.h ++++ b/drivers/net/wireless/ath/ath9k/ath9k.h +@@ -369,7 +369,7 @@ struct ath_vif { + * number of beacon intervals, the game's up. + */ + #define BSTUCK_THRESH 9 +-#define ATH_BCBUF 4 ++#define ATH_BCBUF 8 + #define ATH_DEFAULT_BINTVAL 100 /* TU */ + #define ATH_DEFAULT_BMISS_LIMIT 10 + #define IEEE80211_MS_TO_TU(x) (((x) * 1000) / 1024) +--- a/drivers/net/wireless/ath/ath9k/hw.c ++++ b/drivers/net/wireless/ath/ath9k/hw.c +@@ -349,8 +349,8 @@ static void ath9k_hw_init_config(struct + { + int i; + +- ah->config.dma_beacon_response_time = 2; +- ah->config.sw_beacon_response_time = 10; ++ ah->config.dma_beacon_response_time = 1; ++ ah->config.sw_beacon_response_time = 6; + ah->config.additional_swba_backoff = 0; + ah->config.ack_6mb = 0x0; + ah->config.cwm_ignore_extcca = 0; diff --git a/package/mac80211/patches/550-mac80211_fix_rx_reorder_timeout.patch b/package/mac80211/patches/550-mac80211_fix_rx_reorder_timeout.patch deleted file mode 100644 index c3532b4a36..0000000000 --- a/package/mac80211/patches/550-mac80211_fix_rx_reorder_timeout.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/mac80211/rx.c -+++ b/net/mac80211/rx.c -@@ -613,7 +613,7 @@ static void ieee80211_sta_reorder_releas - continue; - } - if (!time_after(jiffies, tid_agg_rx->reorder_time[j] + -- HT_RX_REORDER_BUF_TIMEOUT)) -+ HT_RX_REORDER_BUF_TIMEOUT) && skipped) - goto set_release_timer; - - #ifdef CONFIG_MAC80211_HT_DEBUG diff --git a/package/mac80211/patches/560-ath9k_debugfs_cleanup.patch b/package/mac80211/patches/560-ath9k_debugfs_cleanup.patch deleted file mode 100644 index 70e7ac536e..0000000000 --- a/package/mac80211/patches/560-ath9k_debugfs_cleanup.patch +++ /dev/null @@ -1,108 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/debug.c -+++ b/drivers/net/wireless/ath/ath9k/debug.c -@@ -1135,76 +1135,43 @@ int ath9k_init_debug(struct ath_hw *ah) - return -ENOMEM; - - #ifdef CONFIG_ATH_DEBUG -- if (!debugfs_create_file("debug", S_IRUSR | S_IWUSR, -- sc->debug.debugfs_phy, sc, &fops_debug)) -- goto err; -+ debugfs_create_file("debug", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, -+ sc, &fops_debug); - #endif -- -- if (!debugfs_create_file("dma", S_IRUSR, sc->debug.debugfs_phy, -- sc, &fops_dma)) -- goto err; -- -- if (!debugfs_create_file("interrupt", S_IRUSR, sc->debug.debugfs_phy, -- sc, &fops_interrupt)) -- goto err; -- -- if (!debugfs_create_file("wiphy", S_IRUSR | S_IWUSR, -- sc->debug.debugfs_phy, sc, &fops_wiphy)) -- goto err; -- -- if (!debugfs_create_file("xmit", S_IRUSR, sc->debug.debugfs_phy, -- sc, &fops_xmit)) -- goto err; -- -- if (!debugfs_create_file("stations", S_IRUSR, sc->debug.debugfs_phy, -- sc, &fops_stations)) -- goto err; -- -- if (!debugfs_create_file("misc", S_IRUSR, sc->debug.debugfs_phy, -- sc, &fops_misc)) -- goto err; -- -- if (!debugfs_create_file("recv", S_IRUSR, sc->debug.debugfs_phy, -- sc, &fops_recv)) -- goto err; -- -- if (!debugfs_create_file("rx_chainmask", S_IRUSR | S_IWUSR, -- sc->debug.debugfs_phy, sc, &fops_rx_chainmask)) -- goto err; -- -- if (!debugfs_create_file("tx_chainmask", S_IRUSR | S_IWUSR, -- sc->debug.debugfs_phy, sc, &fops_tx_chainmask)) -- goto err; -- -- if (!debugfs_create_file("regidx", S_IRUSR | S_IWUSR, -- sc->debug.debugfs_phy, sc, &fops_regidx)) -- goto err; -- -- if (!debugfs_create_file("regval", S_IRUSR | S_IWUSR, -- sc->debug.debugfs_phy, sc, &fops_regval)) -- goto err; -- -- if (!debugfs_create_bool("ignore_extcca", S_IRUSR | S_IWUSR, -- sc->debug.debugfs_phy, &ah->config.cwm_ignore_extcca)) -- goto err; -- -- if (!debugfs_create_file("regdump", S_IRUSR, sc->debug.debugfs_phy, -- sc, &fops_regdump)) -- goto err; -- -+ debugfs_create_file("dma", S_IRUSR, sc->debug.debugfs_phy, sc, -+ &fops_dma); -+ debugfs_create_file("interrupt", S_IRUSR, sc->debug.debugfs_phy, sc, -+ &fops_interrupt); -+ debugfs_create_file("wiphy", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, -+ sc, &fops_wiphy); -+ debugfs_create_file("xmit", S_IRUSR, sc->debug.debugfs_phy, sc, -+ &fops_xmit); -+ debugfs_create_file("stations", S_IRUSR, sc->debug.debugfs_phy, sc, -+ &fops_stations); -+ debugfs_create_file("misc", S_IRUSR, sc->debug.debugfs_phy, sc, -+ &fops_misc); -+ debugfs_create_file("recv", S_IRUSR, sc->debug.debugfs_phy, sc, -+ &fops_recv); -+ debugfs_create_file("rx_chainmask", S_IRUSR | S_IWUSR, -+ sc->debug.debugfs_phy, sc, &fops_rx_chainmask); -+ debugfs_create_file("tx_chainmask", S_IRUSR | S_IWUSR, -+ sc->debug.debugfs_phy, sc, &fops_tx_chainmask); -+ debugfs_create_file("regidx", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, -+ sc, &fops_regidx); -+ debugfs_create_file("regval", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, -+ sc, &fops_regval); -+ debugfs_create_bool("ignore_extcca", S_IRUSR | S_IWUSR, -+ sc->debug.debugfs_phy, -+ &ah->config.cwm_ignore_extcca); -+ debugfs_create_file("regdump", S_IRUSR, sc->debug.debugfs_phy, sc, -+ &fops_regdump); - debugfs_create_u32("gpio_mask", S_IRUSR | S_IWUSR, - sc->debug.debugfs_phy, &sc->sc_ah->gpio_mask); -- - debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR, - sc->debug.debugfs_phy, &sc->sc_ah->gpio_val); -- - debugfs_create_file("eeprom", S_IRUSR, sc->debug.debugfs_phy, sc, - &fops_eeprom); - - sc->debug.regidx = 0; - return 0; --err: -- debugfs_remove_recursive(sc->debug.debugfs_phy); -- sc->debug.debugfs_phy = NULL; -- return -ENOMEM; - } diff --git a/package/mac80211/patches/561-ath9k_fix_staggered_beacons.patch b/package/mac80211/patches/561-ath9k_fix_staggered_beacons.patch deleted file mode 100644 index 08f91258f7..0000000000 --- a/package/mac80211/patches/561-ath9k_fix_staggered_beacons.patch +++ /dev/null @@ -1,317 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/beacon.c -+++ b/drivers/net/wireless/ath/ath9k/beacon.c -@@ -57,8 +57,8 @@ int ath_beaconq_config(struct ath_softc - - /* - * Associates the beacon frame buffer with a transmit descriptor. Will set -- * up all required antenna switch parameters, rate codes, and channel flags. -- * Beacons are always sent out at the lowest rate, and are not retried. -+ * 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 ath_vif *avp, - struct ath_buf *bf, int rateidx) -@@ -68,7 +68,7 @@ static void ath_beacon_setup(struct ath_ - struct ath_common *common = ath9k_hw_common(ah); - struct ath_desc *ds; - struct ath9k_11n_rate_series series[4]; -- int flags, antenna, ctsrate = 0, ctsduration = 0; -+ int flags, ctsrate = 0, ctsduration = 0; - struct ieee80211_supported_band *sband; - u8 rate = 0; - -@@ -76,12 +76,6 @@ static void ath_beacon_setup(struct ath_ - flags = ATH9K_TXDESC_NOACK; - - ds->ds_link = 0; -- /* -- * Switch antenna every beacon. -- * Should only switch every beacon period, not for every SWBA -- * XXX assumes two antennae -- */ -- antenna = ((sc->beacon.ast_be_xmit / sc->nbcnvifs) & 1 ? 2 : 1); - - sband = &sc->sbands[common->hw->conf.channel->band]; - rate = sband->bitrates[rateidx].hw_value; -@@ -278,7 +272,7 @@ int ath_beacon_alloc(struct ath_softc *s - return -ENOMEM; - - tstamp = ((struct ieee80211_mgmt *)skb->data)->u.beacon.timestamp; -- sc->beacon.bc_tstamp = le64_to_cpu(tstamp); -+ 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; -@@ -294,8 +288,8 @@ int ath_beacon_alloc(struct ath_softc *s - * adjustment. Other slots are adjusted to get the timestamp - * close to the TBTT for the BSS. - */ -- tsfadjust = intval * avp->av_bslot / ATH_BCBUF; -- avp->tsf_adjust = cpu_to_le64(TU_TO_USEC(tsfadjust)); -+ tsfadjust = TU_TO_USEC(intval * avp->av_bslot) / ATH_BCBUF; -+ avp->tsf_adjust = cpu_to_le64(tsfadjust); - - ath_dbg(common, ATH_DBG_BEACON, - "stagger beacons, bslot %d intval %u tsfadjust %llu\n", -@@ -401,8 +395,9 @@ void ath_beacon_tasklet(unsigned long da - intval = cur_conf->beacon_interval ? : ATH_DEFAULT_BINTVAL; - - tsf = ath9k_hw_gettsf64(ah); -- tsftu = TSF_TO_TU(tsf>>32, tsf); -- slot = ((tsftu % intval) * ATH_BCBUF) / intval; -+ 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; - /* - * Reverse the slot order to get slot 0 on the TBTT offset that does - * not require TSF adjustment and other slots adding -@@ -415,7 +410,7 @@ void ath_beacon_tasklet(unsigned long da - - ath_dbg(common, ATH_DBG_BEACON, - "slot %d [tsf %llu tsftu %u intval %u] vif %p\n", -- slot, tsf, tsftu, intval, vif); -+ slot, tsf, tsftu / ATH_BCBUF, intval, vif); - - bfaddr = 0; - if (vif) { -@@ -463,13 +458,17 @@ static void ath9k_beacon_init(struct ath - u32 next_beacon, - u32 beacon_period) - { -- if (beacon_period & ATH9K_BEACON_RESET_TSF) -+ if (sc->sc_flags & SC_OP_TSF_RESET) { - ath9k_ps_wakeup(sc); -+ ath9k_hw_reset_tsf(sc->sc_ah); -+ } - - ath9k_hw_beaconinit(sc->sc_ah, next_beacon, beacon_period); - -- if (beacon_period & ATH9K_BEACON_RESET_TSF) -+ if (sc->sc_flags & SC_OP_TSF_RESET) { - ath9k_ps_restore(sc); -+ sc->sc_flags &= ~SC_OP_TSF_RESET; -+ } - } - - /* -@@ -484,18 +483,14 @@ static void ath_beacon_config_ap(struct - u32 nexttbtt, intval; - - /* NB: the beacon interval is kept internally in TU's */ -- intval = conf->beacon_interval & ATH9K_BEACON_PERIOD; -+ intval = TU_TO_USEC(conf->beacon_interval & ATH9K_BEACON_PERIOD); - intval /= ATH_BCBUF; /* for staggered beacons */ - nexttbtt = intval; - -- if (sc->sc_flags & SC_OP_TSF_RESET) -- intval |= ATH9K_BEACON_RESET_TSF; -- - /* - * In AP mode we enable the beacon timers and SWBA interrupts to - * prepare beacon frames. - */ -- intval |= ATH9K_BEACON_ENA; - ah->imask |= ATH9K_INT_SWBA; - ath_beaconq_config(sc); - -@@ -505,11 +500,6 @@ static void ath_beacon_config_ap(struct - ath9k_beacon_init(sc, nexttbtt, intval); - sc->beacon.bmisscnt = 0; - ath9k_hw_set_interrupts(ah, ah->imask); -- -- /* Clear the reset TSF flag, so that subsequent beacon updation -- will not reset the HW TSF. */ -- -- sc->sc_flags &= ~SC_OP_TSF_RESET; - } - - /* -@@ -643,25 +633,20 @@ static void ath_beacon_config_adhoc(stru - { - struct ath_hw *ah = sc->sc_ah; - struct ath_common *common = ath9k_hw_common(ah); -- u64 tsf; -- u32 tsftu, intval, nexttbtt; -- -- intval = conf->beacon_interval & ATH9K_BEACON_PERIOD; -- -+ u32 tsf, delta, intval, nexttbtt; - -- /* Pull nexttbtt forward to reflect the current TSF */ -+ tsf = ath9k_hw_gettsf32(ah) + TU_TO_USEC(FUDGE); -+ intval = TU_TO_USEC(conf->beacon_interval & ATH9K_BEACON_PERIOD); - -- nexttbtt = TSF_TO_TU(sc->beacon.bc_tstamp >> 32, sc->beacon.bc_tstamp); -- if (nexttbtt == 0) -- nexttbtt = intval; -- else if (intval) -- nexttbtt = roundup(nexttbtt, intval); -- -- tsf = ath9k_hw_gettsf64(ah); -- tsftu = TSF_TO_TU((u32)(tsf>>32), (u32)tsf) + FUDGE; -- do { -- nexttbtt += intval; -- } while (nexttbtt < tsftu); -+ if (!sc->beacon.bc_tstamp) -+ nexttbtt = tsf + intval; -+ else { -+ if (tsf > sc->beacon.bc_tstamp) -+ delta = (tsf - sc->beacon.bc_tstamp); -+ else -+ delta = (tsf + 1 + (~0U - sc->beacon.bc_tstamp)); -+ nexttbtt = tsf + roundup(delta, intval); -+ } - - ath_dbg(common, ATH_DBG_BEACON, - "IBSS nexttbtt %u intval %u (%u)\n", -@@ -672,7 +657,6 @@ static void ath_beacon_config_adhoc(stru - * if we need to manually prepare beacon frames. Otherwise we use a - * self-linked tx descriptor and let the hardware deal with things. - */ -- intval |= ATH9K_BEACON_ENA; - ah->imask |= ATH9K_INT_SWBA; - - ath_beaconq_config(sc); ---- a/drivers/net/wireless/ath/ath9k/hw.c -+++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -1706,21 +1706,15 @@ void ath9k_hw_beaconinit(struct ath_hw * - case NL80211_IFTYPE_MESH_POINT: - REG_SET_BIT(ah, AR_TXCFG, - AR_TXCFG_ADHOC_BEACON_ATIM_TX_POLICY); -- REG_WRITE(ah, AR_NEXT_NDP_TIMER, -- TU_TO_USEC(next_beacon + -- (ah->atim_window ? ah-> -- atim_window : 1))); -+ REG_WRITE(ah, AR_NEXT_NDP_TIMER, next_beacon + -+ TU_TO_USEC(ah->atim_window ? ah->atim_window : 1)); - flags |= AR_NDP_TIMER_EN; - case NL80211_IFTYPE_AP: -- REG_WRITE(ah, AR_NEXT_TBTT_TIMER, TU_TO_USEC(next_beacon)); -- REG_WRITE(ah, AR_NEXT_DMA_BEACON_ALERT, -- TU_TO_USEC(next_beacon - -- ah->config. -- dma_beacon_response_time)); -- REG_WRITE(ah, AR_NEXT_SWBA, -- TU_TO_USEC(next_beacon - -- ah->config. -- sw_beacon_response_time)); -+ REG_WRITE(ah, AR_NEXT_TBTT_TIMER, next_beacon); -+ REG_WRITE(ah, AR_NEXT_DMA_BEACON_ALERT, next_beacon - -+ TU_TO_USEC(ah->config.dma_beacon_response_time)); -+ REG_WRITE(ah, AR_NEXT_SWBA, next_beacon - -+ TU_TO_USEC(ah->config.sw_beacon_response_time)); - flags |= - AR_TBTT_TIMER_EN | AR_DBA_TIMER_EN | AR_SWBA_TIMER_EN; - break; -@@ -1732,18 +1726,13 @@ void ath9k_hw_beaconinit(struct ath_hw * - break; - } - -- REG_WRITE(ah, AR_BEACON_PERIOD, TU_TO_USEC(beacon_period)); -- REG_WRITE(ah, AR_DMA_BEACON_PERIOD, TU_TO_USEC(beacon_period)); -- REG_WRITE(ah, AR_SWBA_PERIOD, TU_TO_USEC(beacon_period)); -- REG_WRITE(ah, AR_NDP_PERIOD, TU_TO_USEC(beacon_period)); -+ REG_WRITE(ah, AR_BEACON_PERIOD, beacon_period); -+ REG_WRITE(ah, AR_DMA_BEACON_PERIOD, beacon_period); -+ REG_WRITE(ah, AR_SWBA_PERIOD, beacon_period); -+ REG_WRITE(ah, AR_NDP_PERIOD, beacon_period); - - REGWRITE_BUFFER_FLUSH(ah); - -- beacon_period &= ~ATH9K_BEACON_ENA; -- if (beacon_period & ATH9K_BEACON_RESET_TSF) { -- ath9k_hw_reset_tsf(ah); -- } -- - REG_SET_BIT(ah, AR_TIMER_MODE, flags); - } - EXPORT_SYMBOL(ath9k_hw_beaconinit); -@@ -2404,10 +2393,11 @@ static u32 rightmost_index(struct ath_ge - return timer_table->gen_timer_index[b]; - } - --static u32 ath9k_hw_gettsf32(struct ath_hw *ah) -+u32 ath9k_hw_gettsf32(struct ath_hw *ah) - { - return REG_READ(ah, AR_TSF_L32); - } -+EXPORT_SYMBOL(ath9k_hw_gettsf32); - - struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah, - void (*trigger)(void *), ---- a/drivers/net/wireless/ath/ath9k/ath9k.h -+++ b/drivers/net/wireless/ath/ath9k/ath9k.h -@@ -392,7 +392,7 @@ struct ath_beacon { - u32 beaconq; - u32 bmisscnt; - u32 ast_be_xmit; -- u64 bc_tstamp; -+ u32 bc_tstamp; - struct ieee80211_vif *bslot[ATH_BCBUF]; - int slottime; - int slotupdate; ---- a/drivers/net/wireless/ath/ath9k/hw.h -+++ b/drivers/net/wireless/ath/ath9k/hw.h -@@ -412,8 +412,6 @@ struct ath9k_beacon_state { - u32 bs_nextdtim; - u32 bs_intval; - #define ATH9K_BEACON_PERIOD 0x0000ffff --#define ATH9K_BEACON_ENA 0x00800000 --#define ATH9K_BEACON_RESET_TSF 0x01000000 - #define ATH9K_TSFOOR_THRESHOLD 0x00004240 /* 16k us */ - u32 bs_dtimperiod; - u16 bs_cfpperiod; -@@ -927,6 +925,7 @@ void ath9k_hw_setopmode(struct ath_hw *a - void ath9k_hw_setmcastfilter(struct ath_hw *ah, u32 filter0, u32 filter1); - void ath9k_hw_setbssidmask(struct ath_hw *ah); - void ath9k_hw_write_associd(struct ath_hw *ah); -+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); ---- a/drivers/net/wireless/ath/ath9k/htc_drv_beacon.c -+++ b/drivers/net/wireless/ath/ath9k/htc_drv_beacon.c -@@ -155,7 +155,7 @@ static void ath9k_htc_beacon_config_ap(s - nexttbtt = intval; - - if (priv->op_flags & OP_TSF_RESET) { -- intval |= ATH9K_BEACON_RESET_TSF; -+ ath9k_hw_reset_tsf(priv->ah); - priv->op_flags &= ~OP_TSF_RESET; - } else { - /* -@@ -168,8 +168,6 @@ static void ath9k_htc_beacon_config_ap(s - } while (nexttbtt < tsftu); - } - -- intval |= ATH9K_BEACON_ENA; -- - if (priv->op_flags & OP_ENABLE_BEACON) - imask |= ATH9K_INT_SWBA; - -@@ -178,7 +176,7 @@ static void ath9k_htc_beacon_config_ap(s - bss_conf->beacon_interval, nexttbtt, imask); - - WMI_CMD(WMI_DISABLE_INTR_CMDID); -- ath9k_hw_beaconinit(priv->ah, nexttbtt, intval); -+ ath9k_hw_beaconinit(priv->ah, TU_TO_USEC(nexttbtt), TU_TO_USEC(intval)); - priv->bmiss_cnt = 0; - htc_imask = cpu_to_be32(imask); - WMI_CMD_BUF(WMI_ENABLE_INTR_CMDID, &htc_imask); -@@ -207,7 +205,6 @@ static void ath9k_htc_beacon_config_adho - nexttbtt += intval; - } while (nexttbtt < tsftu); - -- intval |= ATH9K_BEACON_ENA; - if (priv->op_flags & OP_ENABLE_BEACON) - imask |= ATH9K_INT_SWBA; - -@@ -216,7 +213,7 @@ static void ath9k_htc_beacon_config_adho - bss_conf->beacon_interval, nexttbtt, imask); - - WMI_CMD(WMI_DISABLE_INTR_CMDID); -- ath9k_hw_beaconinit(priv->ah, nexttbtt, intval); -+ ath9k_hw_beaconinit(priv->ah, TU_TO_USEC(nexttbtt), TU_TO_USEC(intval)); - priv->bmiss_cnt = 0; - htc_imask = cpu_to_be32(imask); - WMI_CMD_BUF(WMI_ENABLE_INTR_CMDID, &htc_imask); diff --git a/package/mac80211/patches/562-ath9k_increase_bcbuf.patch b/package/mac80211/patches/562-ath9k_increase_bcbuf.patch deleted file mode 100644 index d9c6d717d0..0000000000 --- a/package/mac80211/patches/562-ath9k_increase_bcbuf.patch +++ /dev/null @@ -1,24 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/ath9k.h -+++ b/drivers/net/wireless/ath/ath9k/ath9k.h -@@ -369,7 +369,7 @@ struct ath_vif { - * number of beacon intervals, the game's up. - */ - #define BSTUCK_THRESH (9 * ATH_BCBUF) --#define ATH_BCBUF 4 -+#define ATH_BCBUF 8 - #define ATH_DEFAULT_BINTVAL 100 /* TU */ - #define ATH_DEFAULT_BMISS_LIMIT 10 - #define IEEE80211_MS_TO_TU(x) (((x) * 1000) / 1024) ---- a/drivers/net/wireless/ath/ath9k/hw.c -+++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -349,8 +349,8 @@ static void ath9k_hw_init_config(struct - { - int i; - -- ah->config.dma_beacon_response_time = 2; -- ah->config.sw_beacon_response_time = 10; -+ ah->config.dma_beacon_response_time = 1; -+ ah->config.sw_beacon_response_time = 6; - ah->config.additional_swba_backoff = 0; - ah->config.ack_6mb = 0x0; - ah->config.cwm_ignore_extcca = 0; diff --git a/package/mac80211/patches/563-ath9k_reduce_bstuck_nfcal.patch b/package/mac80211/patches/563-ath9k_reduce_bstuck_nfcal.patch deleted file mode 100644 index b744c4cec8..0000000000 --- a/package/mac80211/patches/563-ath9k_reduce_bstuck_nfcal.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/beacon.c -+++ b/drivers/net/wireless/ath/ath9k/beacon.c -@@ -368,7 +368,8 @@ void ath_beacon_tasklet(unsigned long da - "missed %u consecutive beacons\n", - sc->beacon.bmisscnt); - ath9k_hw_stop_dma_queue(ah, sc->beacon.beaconq); -- ath9k_hw_bstuck_nfcal(ah); -+ if (sc->beacon.bmisscnt > 4) -+ ath9k_hw_bstuck_nfcal(ah); - } else if (sc->beacon.bmisscnt >= BSTUCK_THRESH) { - ath_dbg(common, ATH_DBG_BSTUCK, - "beacon is officially stuck\n"); diff --git a/package/mac80211/patches/570-mac80211_initialize_last_rx.patch b/package/mac80211/patches/570-mac80211_initialize_last_rx.patch deleted file mode 100644 index edcc227e9b..0000000000 --- a/package/mac80211/patches/570-mac80211_initialize_last_rx.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/net/mac80211/sta_info.c -+++ b/net/mac80211/sta_info.c -@@ -243,6 +243,7 @@ struct sta_info *sta_info_alloc(struct i - memcpy(sta->sta.addr, addr, ETH_ALEN); - sta->local = local; - sta->sdata = sdata; -+ sta->last_rx = jiffies; - - ewma_init(&sta->avg_signal, 1024, 8); - diff --git a/package/mac80211/patches/700-mwl8k-missing-pci-id-for-WNR854T.patch b/package/mac80211/patches/700-mwl8k-missing-pci-id-for-WNR854T.patch index ebc7c6bee9..b19755a45c 100644 --- a/package/mac80211/patches/700-mwl8k-missing-pci-id-for-WNR854T.patch +++ b/package/mac80211/patches/700-mwl8k-missing-pci-id-for-WNR854T.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/mwl8k.c +++ b/drivers/net/wireless/mwl8k.c -@@ -4500,6 +4500,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw") +@@ -5111,6 +5111,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) = {