mac80211: update to wireless-testing 2011-03-22
SVN-Revision: 26273
This commit is contained in:
parent
85b859a2b6
commit
ee7f3d21f4
23 changed files with 180 additions and 1936 deletions
|
@ -10,10 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk
|
||||||
|
|
||||||
PKG_NAME:=mac80211
|
PKG_NAME:=mac80211
|
||||||
|
|
||||||
PKG_VERSION:=2011-03-11
|
PKG_VERSION:=2011-03-22
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
|
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
|
||||||
PKG_MD5SUM:=123b9220fa2b016979b7b3874f349643
|
PKG_MD5SUM:=3e7ffb9f243053381f2cdfc5af300f8c
|
||||||
|
|
||||||
PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
|
PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
|
||||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)
|
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)
|
||||||
|
|
|
@ -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);
|
|
|
@ -1,3 +1,23 @@
|
||||||
|
--- 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
|
--- a/drivers/net/wireless/ath/ath9k/beacon.c
|
||||||
+++ b/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
|
@@ -57,8 +57,8 @@ int ath_beaconq_config(struct ath_softc
|
||||||
|
@ -53,7 +73,37 @@
|
||||||
|
|
||||||
ath_dbg(common, ATH_DBG_BEACON,
|
ath_dbg(common, ATH_DBG_BEACON,
|
||||||
"stagger beacons, bslot %d intval %u tsfadjust %llu\n",
|
"stagger beacons, bslot %d intval %u tsfadjust %llu\n",
|
||||||
@@ -401,8 +395,9 @@ void ath_beacon_tasklet(unsigned long da
|
@@ -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;
|
intval = cur_conf->beacon_interval ? : ATH_DEFAULT_BINTVAL;
|
||||||
|
|
||||||
tsf = ath9k_hw_gettsf64(ah);
|
tsf = ath9k_hw_gettsf64(ah);
|
||||||
|
@ -65,7 +115,7 @@
|
||||||
/*
|
/*
|
||||||
* Reverse the slot order to get slot 0 on the TBTT offset that does
|
* Reverse the slot order to get slot 0 on the TBTT offset that does
|
||||||
* not require TSF adjustment and other slots adding
|
* not require TSF adjustment and other slots adding
|
||||||
@@ -415,7 +410,7 @@ void ath_beacon_tasklet(unsigned long da
|
@@ -415,7 +404,7 @@ void ath_beacon_tasklet(unsigned long da
|
||||||
|
|
||||||
ath_dbg(common, ATH_DBG_BEACON,
|
ath_dbg(common, ATH_DBG_BEACON,
|
||||||
"slot %d [tsf %llu tsftu %u intval %u] vif %p\n",
|
"slot %d [tsf %llu tsftu %u intval %u] vif %p\n",
|
||||||
|
@ -74,7 +124,21 @@
|
||||||
|
|
||||||
bfaddr = 0;
|
bfaddr = 0;
|
||||||
if (vif) {
|
if (vif) {
|
||||||
@@ -463,13 +458,17 @@ static void ath9k_beacon_init(struct ath
|
@@ -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 next_beacon,
|
||||||
u32 beacon_period)
|
u32 beacon_period)
|
||||||
{
|
{
|
||||||
|
@ -94,7 +158,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -484,18 +483,14 @@ static void ath_beacon_config_ap(struct
|
@@ -484,18 +484,14 @@ static void ath_beacon_config_ap(struct
|
||||||
u32 nexttbtt, intval;
|
u32 nexttbtt, intval;
|
||||||
|
|
||||||
/* NB: the beacon interval is kept internally in TU's */
|
/* NB: the beacon interval is kept internally in TU's */
|
||||||
|
@ -114,7 +178,7 @@
|
||||||
ah->imask |= ATH9K_INT_SWBA;
|
ah->imask |= ATH9K_INT_SWBA;
|
||||||
ath_beaconq_config(sc);
|
ath_beaconq_config(sc);
|
||||||
|
|
||||||
@@ -505,11 +500,6 @@ static void ath_beacon_config_ap(struct
|
@@ -505,11 +501,6 @@ static void ath_beacon_config_ap(struct
|
||||||
ath9k_beacon_init(sc, nexttbtt, intval);
|
ath9k_beacon_init(sc, nexttbtt, intval);
|
||||||
sc->beacon.bmisscnt = 0;
|
sc->beacon.bmisscnt = 0;
|
||||||
ath9k_hw_set_interrupts(ah, ah->imask);
|
ath9k_hw_set_interrupts(ah, ah->imask);
|
||||||
|
@ -126,7 +190,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -643,25 +633,20 @@ static void ath_beacon_config_adhoc(stru
|
@@ -643,25 +634,20 @@ static void ath_beacon_config_adhoc(stru
|
||||||
{
|
{
|
||||||
struct ath_hw *ah = sc->sc_ah;
|
struct ath_hw *ah = sc->sc_ah;
|
||||||
struct ath_common *common = ath9k_hw_common(ah);
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
|
@ -134,13 +198,13 @@
|
||||||
- u32 tsftu, intval, nexttbtt;
|
- u32 tsftu, intval, nexttbtt;
|
||||||
-
|
-
|
||||||
- intval = conf->beacon_interval & ATH9K_BEACON_PERIOD;
|
- intval = conf->beacon_interval & ATH9K_BEACON_PERIOD;
|
||||||
-
|
|
||||||
+ u32 tsf, delta, intval, nexttbtt;
|
+ u32 tsf, delta, intval, nexttbtt;
|
||||||
|
|
||||||
- /* Pull nexttbtt forward to reflect the current TSF */
|
|
||||||
+ tsf = ath9k_hw_gettsf32(ah) + TU_TO_USEC(FUDGE);
|
+ tsf = ath9k_hw_gettsf32(ah) + TU_TO_USEC(FUDGE);
|
||||||
+ intval = TU_TO_USEC(conf->beacon_interval & ATH9K_BEACON_PERIOD);
|
+ 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);
|
- nexttbtt = TSF_TO_TU(sc->beacon.bc_tstamp >> 32, sc->beacon.bc_tstamp);
|
||||||
- if (nexttbtt == 0)
|
- if (nexttbtt == 0)
|
||||||
- nexttbtt = intval;
|
- nexttbtt = intval;
|
||||||
|
@ -164,7 +228,7 @@
|
||||||
|
|
||||||
ath_dbg(common, ATH_DBG_BEACON,
|
ath_dbg(common, ATH_DBG_BEACON,
|
||||||
"IBSS nexttbtt %u intval %u (%u)\n",
|
"IBSS nexttbtt %u intval %u (%u)\n",
|
||||||
@@ -672,7 +657,6 @@ static void ath_beacon_config_adhoc(stru
|
@@ -672,7 +658,6 @@ static void ath_beacon_config_adhoc(stru
|
||||||
* if we need to manually prepare beacon frames. Otherwise we use a
|
* if we need to manually prepare beacon frames. Otherwise we use a
|
||||||
* self-linked tx descriptor and let the hardware deal with things.
|
* self-linked tx descriptor and let the hardware deal with things.
|
||||||
*/
|
*/
|
||||||
|
@ -172,103 +236,6 @@
|
||||||
ah->imask |= ATH9K_INT_SWBA;
|
ah->imask |= ATH9K_INT_SWBA;
|
||||||
|
|
||||||
ath_beaconq_config(sc);
|
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
|
--- a/drivers/net/wireless/ath/ath9k/htc_drv_beacon.c
|
||||||
+++ b/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
|
@@ -155,7 +155,7 @@ static void ath9k_htc_beacon_config_ap(s
|
||||||
|
@ -315,3 +282,89 @@
|
||||||
priv->bmiss_cnt = 0;
|
priv->bmiss_cnt = 0;
|
||||||
htc_imask = cpu_to_be32(imask);
|
htc_imask = cpu_to_be32(imask);
|
||||||
WMI_CMD_BUF(WMI_ENABLE_INTR_CMDID, &htc_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);
|
File diff suppressed because it is too large
Load diff
|
@ -7,6 +7,6 @@
|
||||||
+ if (AR_SREV_9100(sc->sc_ah))
|
+ if (AR_SREV_9100(sc->sc_ah))
|
||||||
+ return;
|
+ return;
|
||||||
+
|
+
|
||||||
if (AR_SREV_9287(sc->sc_ah))
|
if (sc->sc_ah->led_pin < 0) {
|
||||||
sc->sc_ah->led_pin = ATH_LED_PIN_9287;
|
if (AR_SREV_9287(sc->sc_ah))
|
||||||
else if (AR_SREV_9485(sc->sc_ah))
|
sc->sc_ah->led_pin = ATH_LED_PIN_9287;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||||
+++ b/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_param_named(nohwcrypt, ath9k_modparam_nohwcrypt, int, 0444);
|
||||||
MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption");
|
MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption");
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
#include <asm/unaligned.h>
|
#include <asm/unaligned.h>
|
||||||
|
|
||||||
#include "hw.h"
|
#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] = eeval >> 8;
|
||||||
common->macaddr[2 * i + 1] = eeval & 0xff;
|
common->macaddr[2 * i + 1] = eeval & 0xff;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 <linux/slab.h>
|
|
||||||
+#include <linux/ath9k_platform.h>
|
|
||||||
|
|
||||||
#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;
|
|
|
@ -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 */
|
|
|
@ -54,7 +54,7 @@
|
||||||
int ath9k_init_debug(struct ath_hw *ah)
|
int ath9k_init_debug(struct ath_hw *ah)
|
||||||
{
|
{
|
||||||
struct ath_common *common = ath9k_hw_common(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,
|
debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR,
|
||||||
sc->debug.debugfs_phy, &sc->sc_ah->gpio_val);
|
sc->debug.debugfs_phy, &sc->sc_ah->gpio_val);
|
||||||
|
|
||||||
|
@ -63,4 +63,4 @@
|
||||||
+
|
+
|
||||||
sc->debug.regidx = 0;
|
sc->debug.regidx = 0;
|
||||||
return 0;
|
return 0;
|
||||||
err:
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||||
+++ b/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);
|
REG_WRITE(ah, AR_OBS, 8);
|
||||||
|
|
||||||
if (ah->config.rx_intr_mitigation) {
|
if (ah->config.rx_intr_mitigation) {
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
* Call this function for all transmitted frames after they have been
|
* Call this function for all transmitted frames after they have been
|
||||||
--- a/net/mac80211/sta_info.c
|
--- a/net/mac80211/sta_info.c
|
||||||
+++ b/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
|
#endif
|
||||||
dev_kfree_skb(skb);
|
dev_kfree_skb(skb);
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
sta_info_clear_tim_bit(sta);
|
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;
|
struct ieee80211_local *local = sdata->local;
|
||||||
int sent, buffered;
|
int sent, buffered;
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@
|
||||||
if (!(local->hw.flags & IEEE80211_HW_AP_LINK_PS))
|
if (!(local->hw.flags & IEEE80211_HW_AP_LINK_PS))
|
||||||
drv_sta_notify(local, sdata, STA_NOTIFY_AWAKE, &sta->sta);
|
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);
|
ieee80211_queue_work(hw, &sta->drv_unblock_wk);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ieee80211_sta_block_awake);
|
EXPORT_SYMBOL(ieee80211_sta_block_awake);
|
||||||
|
|
|
@ -223,7 +223,7 @@
|
||||||
/* PHY ops */
|
/* PHY ops */
|
||||||
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
||||||
+++ b/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);
|
u32 burstDuration);
|
||||||
void (*set11n_virtualmorefrag)(struct ath_hw *ah, void *ds,
|
void (*set11n_virtualmorefrag)(struct ath_hw *ah, void *ds,
|
||||||
u32 vmf);
|
u32 vmf);
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/net/mac80211/rx.c
|
--- a/net/mac80211/rx.c
|
||||||
+++ b/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
|
static int
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
{
|
{
|
||||||
struct ieee80211_sub_if_data *sdata = rx->sdata;
|
struct ieee80211_sub_if_data *sdata = rx->sdata;
|
||||||
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
|
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;
|
struct ethhdr *ehdr;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
if (ieee80211_has_a4(hdr->frame_control) &&
|
if (ieee80211_has_a4(hdr->frame_control) &&
|
||||||
sdata->vif.type == NL80211_IFTYPE_AP_VLAN && !sdata->u.vlan.sta)
|
sdata->vif.type == NL80211_IFTYPE_AP_VLAN && !sdata->u.vlan.sta)
|
||||||
return -1;
|
return -1;
|
||||||
@@ -1608,11 +1609,14 @@ __ieee80211_data_to_8023(struct ieee8021
|
@@ -1610,11 +1611,14 @@ __ieee80211_data_to_8023(struct ieee8021
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
ret = ieee80211_data_to_8023(rx->skb, sdata->vif.addr, sdata->vif.type);
|
ret = ieee80211_data_to_8023(rx->skb, sdata->vif.addr, sdata->vif.type);
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return 0;
|
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 net_device *dev = sdata->dev;
|
||||||
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
|
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
|
||||||
__le16 fc = hdr->frame_control;
|
__le16 fc = hdr->frame_control;
|
||||||
|
@ -42,7 +42,7 @@
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (unlikely(!ieee80211_is_data(hdr->frame_control)))
|
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)
|
sdata->vif.type == NL80211_IFTYPE_AP)
|
||||||
return RX_DROP_MONITOR;
|
return RX_DROP_MONITOR;
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
|
@ -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);
|
|
|
@ -3,7 +3,7 @@
|
||||||
@@ -369,7 +369,7 @@ struct ath_vif {
|
@@ -369,7 +369,7 @@ struct ath_vif {
|
||||||
* number of beacon intervals, the game's up.
|
* number of beacon intervals, the game's up.
|
||||||
*/
|
*/
|
||||||
#define BSTUCK_THRESH (9 * ATH_BCBUF)
|
#define BSTUCK_THRESH 9
|
||||||
-#define ATH_BCBUF 4
|
-#define ATH_BCBUF 4
|
||||||
+#define ATH_BCBUF 8
|
+#define ATH_BCBUF 8
|
||||||
#define ATH_DEFAULT_BINTVAL 100 /* TU */
|
#define ATH_DEFAULT_BINTVAL 100 /* TU */
|
|
@ -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;
|
|
||||||
}
|
|
|
@ -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");
|
|
|
@ -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);
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/net/wireless/mwl8k.c
|
--- a/drivers/net/wireless/mwl8k.c
|
||||||
+++ b/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));
|
MODULE_FIRMWARE(MWL8K_8366_AP_FW(MWL8K_8366_AP_FW_API));
|
||||||
|
|
||||||
static DEFINE_PCI_DEVICE_TABLE(mwl8k_pci_id_table) = {
|
static DEFINE_PCI_DEVICE_TABLE(mwl8k_pci_id_table) = {
|
||||||
|
|
Loading…
Reference in a new issue