mac80211: update to wireless-testing 2010-01-19
SVN-Revision: 25053
This commit is contained in:
parent
a98c957eb5
commit
4ee2365159
16 changed files with 16 additions and 247 deletions
|
@ -10,10 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk
|
|||
|
||||
PKG_NAME:=mac80211
|
||||
|
||||
PKG_VERSION:=2011-01-05
|
||||
PKG_VERSION:=2011-01-19
|
||||
PKG_RELEASE:=1
|
||||
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
|
||||
PKG_MD5SUM:=2b87fdd08d95fa5def39f56f49c4906d
|
||||
PKG_MD5SUM:=74a76771c142de86e548565cc6888f3f
|
||||
|
||||
PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
|
||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
err:
|
||||
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
||||
@@ -791,6 +791,8 @@ struct ath_hw {
|
||||
@@ -794,6 +794,8 @@ struct ath_hw {
|
||||
int initPDADC;
|
||||
int PDADCdelta;
|
||||
u8 led_pin;
|
||||
|
@ -26,7 +26,7 @@
|
|||
struct ar5416IniArray iniCommon;
|
||||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -1171,6 +1171,20 @@ static bool ath9k_hw_channel_change(stru
|
||||
@@ -1172,6 +1172,20 @@ static bool ath9k_hw_channel_change(stru
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -47,7 +47,7 @@
|
|||
bool ath9k_hw_check_alive(struct ath_hw *ah)
|
||||
{
|
||||
int count = 50;
|
||||
@@ -1459,6 +1473,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
||||
@@ -1460,6 +1474,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
||||
if (AR_SREV_9300_20_OR_LATER(ah))
|
||||
ar9003_hw_bb_watchdog_config(ah);
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
common->ops = &ath9k_common_ops;
|
||||
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
||||
@@ -790,7 +790,7 @@ struct ath_hw {
|
||||
@@ -793,7 +793,7 @@ struct ath_hw {
|
||||
u32 originalGain[22];
|
||||
int initPDADC;
|
||||
int PDADCdelta;
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
#include "ath5k.h"
|
||||
#include "reg.h"
|
||||
@@ -1726,7 +1728,7 @@ ath5k_eeprom_read_spur_chans(struct ath5
|
||||
@@ -1722,7 +1724,7 @@ ath5k_eeprom_read_spur_chans(struct ath5
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -18,10 +18,10 @@
|
|||
*/
|
||||
int ath5k_eeprom_read_mac(struct ath5k_hw *ah, u8 *mac)
|
||||
{
|
||||
@@ -1734,6 +1736,16 @@ int ath5k_eeprom_read_mac(struct ath5k_h
|
||||
@@ -1730,6 +1732,16 @@ int ath5k_eeprom_read_mac(struct ath5k_h
|
||||
u32 total, offset;
|
||||
u16 data;
|
||||
int octet, ret;
|
||||
int octet;
|
||||
+ struct ath5k_platform_data *pdata = NULL;
|
||||
+
|
||||
+ if (ah->ah_sc->pdev)
|
||||
|
@ -33,8 +33,8 @@
|
|||
+ return 0;
|
||||
+ }
|
||||
|
||||
ret = ath5k_hw_nvram_read(ah, 0x20, &data);
|
||||
if (ret)
|
||||
AR5K_EEPROM_READ(0x20, data);
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath5k/pci.c
|
||||
+++ b/drivers/net/wireless/ath/ath5k/pci.c
|
||||
@@ -17,6 +17,7 @@
|
||||
|
@ -45,7 +45,7 @@
|
|||
#include "../ath.h"
|
||||
#include "ath5k.h"
|
||||
#include "debug.h"
|
||||
@@ -73,6 +74,19 @@ bool ath5k_pci_eeprom_read(struct ath_co
|
||||
@@ -74,6 +75,19 @@ ath5k_pci_eeprom_read(struct ath_common
|
||||
{
|
||||
struct ath5k_hw *ah = (struct ath5k_hw *) common->ah;
|
||||
u32 status, timeout;
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
|
||||
/* Antenna diversity/combining */
|
||||
#define ATH_ANT_RX_CURRENT_SHIFT 4
|
||||
@@ -611,15 +605,11 @@ struct ath_softc {
|
||||
@@ -625,15 +619,11 @@ struct ath_softc {
|
||||
struct ath_beacon beacon;
|
||||
struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
|
||||
|
||||
|
@ -253,7 +253,7 @@
|
|||
/* Rfkill */
|
||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||
@@ -1270,9 +1270,6 @@ static void ath9k_stop(struct ieee80211_
|
||||
@@ -1281,9 +1281,6 @@ static void ath9k_stop(struct ieee80211_
|
||||
|
||||
aphy->state = ATH_WIPHY_INACTIVE;
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -1425,8 +1425,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
||||
@@ -1426,8 +1426,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
||||
REG_WRITE(ah, AR_OBS, 8);
|
||||
|
||||
if (ah->config.rx_intr_mitigation) {
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
@@ -169,7 +169,7 @@ static void ath_tx_flush_tid(struct ath_
|
||||
ath_tx_update_baw(sc, tid, fi->seqno);
|
||||
ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0, 0);
|
||||
} else {
|
||||
- ath_tx_send_normal(sc, txq, tid, &bf_head);
|
||||
+ ath_tx_send_normal(sc, txq, NULL, &bf_head);
|
||||
}
|
||||
spin_lock_bh(&txq->axq_lock);
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
@@ -856,7 +856,7 @@ int ath_tx_aggr_start(struct ath_softc *
|
||||
|
||||
txtid->state |= AGGR_ADDBA_PROGRESS;
|
||||
txtid->paused = true;
|
||||
- *ssn = txtid->seq_start;
|
||||
+ *ssn = txtid->seq_start = txtid->seq_next;
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
@@ -858,6 +858,9 @@ int ath_tx_aggr_start(struct ath_softc *
|
||||
txtid->paused = true;
|
||||
*ssn = txtid->seq_start = txtid->seq_next;
|
||||
|
||||
+ memset(txtid->tx_buf, 0, sizeof(txtid->tx_buf));
|
||||
+ txtid->baw_head = txtid->baw_tail = 0;
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
|
||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||
@@ -251,6 +251,9 @@ int ath_set_channel(struct ath_softc *sc
|
||||
if (!ath_stoprecv(sc))
|
||||
stopped = false;
|
||||
|
||||
+ if (!ath9k_hw_check_alive(ah))
|
||||
+ stopped = false;
|
||||
+
|
||||
/* XXX: do not flush receive queue here. We don't want
|
||||
* to flush data frames already in queue because of
|
||||
* changing channel. */
|
||||
@@ -602,7 +605,15 @@ void ath9k_tasklet(unsigned long data)
|
||||
|
||||
spin_lock(&sc->sc_pcu_lock);
|
||||
|
||||
- if (!ath9k_hw_check_alive(ah))
|
||||
+ /*
|
||||
+ * Only run the baseband hang check if beacons stop working in AP or
|
||||
+ * IBSS mode, because it has a high false positive rate. For station
|
||||
+ * mode it should not be necessary, since the upper layers will detect
|
||||
+ * this through a beacon miss automatically and the following channel
|
||||
+ * change will trigger a hardware reset anyway
|
||||
+ */
|
||||
+ if (ath9k_hw_numtxpending(ah, sc->beacon.beaconq) != 0 &&
|
||||
+ !ath9k_hw_check_alive(ah))
|
||||
ieee80211_queue_work(sc->hw, &sc->hw_check_work);
|
||||
|
||||
if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
|
|
@ -1,56 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
|
||||
@@ -615,7 +615,7 @@ int ath9k_hw_process_rxdesc_edma(struct
|
||||
*/
|
||||
if (rxsp->status11 & AR_CRCErr)
|
||||
rxs->rs_status |= ATH9K_RXERR_CRC;
|
||||
- if (rxsp->status11 & AR_PHYErr) {
|
||||
+ else if (rxsp->status11 & AR_PHYErr) {
|
||||
phyerr = MS(rxsp->status11, AR_PHYErrCode);
|
||||
/*
|
||||
* If we reach a point here where AR_PostDelimCRCErr is
|
||||
@@ -638,11 +638,11 @@ int ath9k_hw_process_rxdesc_edma(struct
|
||||
rxs->rs_phyerr = phyerr;
|
||||
}
|
||||
|
||||
- }
|
||||
- if (rxsp->status11 & AR_DecryptCRCErr)
|
||||
+ } else if (rxsp->status11 & AR_DecryptCRCErr)
|
||||
rxs->rs_status |= ATH9K_RXERR_DECRYPT;
|
||||
- if (rxsp->status11 & AR_MichaelErr)
|
||||
+ else if (rxsp->status11 & AR_MichaelErr)
|
||||
rxs->rs_status |= ATH9K_RXERR_MIC;
|
||||
+
|
||||
if (rxsp->status11 & AR_KeyMiss)
|
||||
rxs->rs_status |= ATH9K_RXERR_DECRYPT;
|
||||
}
|
||||
--- a/drivers/net/wireless/ath/ath9k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/mac.c
|
||||
@@ -690,17 +690,23 @@ int ath9k_hw_rxprocdesc(struct ath_hw *a
|
||||
rs->rs_flags |= ATH9K_RX_DECRYPT_BUSY;
|
||||
|
||||
if ((ads.ds_rxstatus8 & AR_RxFrameOK) == 0) {
|
||||
+ /*
|
||||
+ * Treat these errors as mutually exclusive to avoid spurious
|
||||
+ * extra error reports from the hardware. If a CRC error is
|
||||
+ * reported, then decryption and MIC errors are irrelevant,
|
||||
+ * the frame is going to be dropped either way
|
||||
+ */
|
||||
if (ads.ds_rxstatus8 & AR_CRCErr)
|
||||
rs->rs_status |= ATH9K_RXERR_CRC;
|
||||
- if (ads.ds_rxstatus8 & AR_PHYErr) {
|
||||
+ else if (ads.ds_rxstatus8 & AR_PHYErr) {
|
||||
rs->rs_status |= ATH9K_RXERR_PHY;
|
||||
phyerr = MS(ads.ds_rxstatus8, AR_PHYErrCode);
|
||||
rs->rs_phyerr = phyerr;
|
||||
- }
|
||||
- if (ads.ds_rxstatus8 & AR_DecryptCRCErr)
|
||||
+ } else if (ads.ds_rxstatus8 & AR_DecryptCRCErr)
|
||||
rs->rs_status |= ATH9K_RXERR_DECRYPT;
|
||||
- if (ads.ds_rxstatus8 & AR_MichaelErr)
|
||||
+ else if (ads.ds_rxstatus8 & AR_MichaelErr)
|
||||
rs->rs_status |= ATH9K_RXERR_MIC;
|
||||
+
|
||||
if (ads.ds_rxstatus8 & AR_KeyMiss)
|
||||
rs->rs_status |= ATH9K_RXERR_DECRYPT;
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
@@ -1224,12 +1224,14 @@ void ath_tx_cleanupq(struct ath_softc *s
|
||||
void ath_txq_schedule(struct ath_softc *sc, struct ath_txq *txq)
|
||||
{
|
||||
struct ath_atx_ac *ac;
|
||||
- struct ath_atx_tid *tid;
|
||||
+ struct ath_atx_tid *tid, *last;
|
||||
|
||||
- if (list_empty(&txq->axq_acq))
|
||||
+ if (list_empty(&txq->axq_acq) ||
|
||||
+ txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH)
|
||||
return;
|
||||
|
||||
ac = list_first_entry(&txq->axq_acq, struct ath_atx_ac, list);
|
||||
+ last = list_entry(ac->tid_q.prev, struct ath_atx_tid, list);
|
||||
list_del(&ac->list);
|
||||
ac->sched = false;
|
||||
|
||||
@@ -1253,7 +1255,8 @@ void ath_txq_schedule(struct ath_softc *
|
||||
if (!list_empty(&tid->buf_q))
|
||||
ath_tx_queue_tid(txq, tid);
|
||||
|
||||
- break;
|
||||
+ if (tid == last || txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH)
|
||||
+ break;
|
||||
} while (!list_empty(&ac->tid_q));
|
||||
|
||||
if (!list_empty(&ac->tid_q)) {
|
|
@ -1,11 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
@@ -429,7 +429,7 @@ static void ath_tx_complete_aggr(struct
|
||||
|
||||
ath_tx_count_frames(sc, bf, ts, txok, &nframes, &nbad);
|
||||
while (bf) {
|
||||
- txfail = txpending = 0;
|
||||
+ txfail = txpending = sendbar = 0;
|
||||
bf_next = bf->bf_next;
|
||||
|
||||
skb = bf->bf_mpdu;
|
|
@ -1,42 +0,0 @@
|
|||
--- a/net/mac80211/rx.c
|
||||
+++ b/net/mac80211/rx.c
|
||||
@@ -1556,17 +1556,36 @@ __ieee80211_data_to_8023(struct ieee8021
|
||||
{
|
||||
struct ieee80211_sub_if_data *sdata = rx->sdata;
|
||||
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
|
||||
+ bool check_port_control = false;
|
||||
+ struct ethhdr *ehdr;
|
||||
+ int ret;
|
||||
|
||||
if (ieee80211_has_a4(hdr->frame_control) &&
|
||||
sdata->vif.type == NL80211_IFTYPE_AP_VLAN && !sdata->u.vlan.sta)
|
||||
return -1;
|
||||
|
||||
+ if (sdata->vif.type == NL80211_IFTYPE_STATION &&
|
||||
+ !!sdata->u.mgd.use_4addr != !!ieee80211_has_a4(hdr->frame_control)) {
|
||||
+
|
||||
+ if (!sdata->u.mgd.use_4addr)
|
||||
+ return -1;
|
||||
+ else
|
||||
+ check_port_control = true;
|
||||
+ }
|
||||
+
|
||||
if (is_multicast_ether_addr(hdr->addr1) &&
|
||||
- ((sdata->vif.type == NL80211_IFTYPE_AP_VLAN && sdata->u.vlan.sta) ||
|
||||
- (sdata->vif.type == NL80211_IFTYPE_STATION && sdata->u.mgd.use_4addr)))
|
||||
+ sdata->vif.type == NL80211_IFTYPE_AP_VLAN && sdata->u.vlan.sta)
|
||||
+ return -1;
|
||||
+
|
||||
+ ret = ieee80211_data_to_8023(rx->skb, sdata->vif.addr, sdata->vif.type);
|
||||
+ if (ret < 0 || !check_port_control)
|
||||
+ return ret;
|
||||
+
|
||||
+ ehdr = (struct ethhdr *) rx->skb->data;
|
||||
+ if (ehdr->h_proto != rx->sdata->control_port_protocol)
|
||||
return -1;
|
||||
|
||||
- return ieee80211_data_to_8023(rx->skb, sdata->vif.addr, sdata->vif.type);
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
/*
|
|
@ -1,29 +0,0 @@
|
|||
From 27ed5ec6924c17b76d65b697a162bafee7bd8e4e Mon Sep 17 00:00:00 2001
|
||||
From: Helmut Schaa <helmut.schaa@googlemail.com>
|
||||
Date: Mon, 21 Jun 2010 10:03:05 +0200
|
||||
Subject: [PATCH] rt2x00: fix rt2800pci hang on ifdown
|
||||
|
||||
rt2800pci hangs the system on rt305x SoC devices on ifdown. Work around
|
||||
this issue by disabling TX DMA prior to resetting the TX queue indices.
|
||||
|
||||
This patch is not suitable for upstream inclusion but is just meant as
|
||||
a workaround until a proper solution is implemented.
|
||||
|
||||
Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
|
||||
---
|
||||
drivers/net/wireless/rt2x00/rt2800pci.c | 4 ++++
|
||||
1 files changed, 4 insertions(+), 0 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
|
||||
@@ -481,6 +481,10 @@ static void rt2800pci_disable_radio(stru
|
||||
|
||||
rt2800_register_write(rt2x00dev, PBF_SYS_CTRL, 0x00001280);
|
||||
|
||||
+ rt2800_register_read(rt2x00dev, WPDMA_GLO_CFG, ®);
|
||||
+ rt2x00_set_field32(®, WPDMA_GLO_CFG_ENABLE_TX_DMA, 0);
|
||||
+ rt2800_register_write(rt2x00dev, WPDMA_GLO_CFG, reg);
|
||||
+
|
||||
rt2800_register_read(rt2x00dev, WPDMA_RST_IDX, ®);
|
||||
rt2x00_set_field32(®, WPDMA_RST_IDX_DTX_IDX0, 1);
|
||||
rt2x00_set_field32(®, WPDMA_RST_IDX_DTX_IDX1, 1);
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/mwl8k.c
|
||||
+++ b/drivers/net/wireless/mwl8k.c
|
||||
@@ -4056,6 +4056,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw")
|
||||
@@ -4482,6 +4482,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) = {
|
||||
|
|
Loading…
Reference in a new issue