mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2025-04-21 12:27:27 +03:00
mac80211: update to wireless-testing 2010-10-15, add a few ath9k fixes and performance enhancements
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@23470 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
145
package/mac80211/patches/553-ath9k_no_node_rssi.patch
Normal file
145
package/mac80211/patches/553-ath9k_no_node_rssi.patch
Normal file
@@ -0,0 +1,145 @@
|
||||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
@@ -271,7 +271,6 @@ struct ath_node {
|
||||
struct ath_atx_ac ac[WME_NUM_AC];
|
||||
u16 maxampdu;
|
||||
u8 mpdudensity;
|
||||
- int last_rssi;
|
||||
};
|
||||
|
||||
#define AGGR_CLEANUP BIT(1)
|
||||
@@ -666,6 +665,7 @@ struct ath_wiphy {
|
||||
bool idle;
|
||||
int chan_idx;
|
||||
int chan_is_ht;
|
||||
+ int last_rssi;
|
||||
};
|
||||
|
||||
void ath9k_tasklet(unsigned long data);
|
||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||
@@ -553,7 +553,6 @@ static void ath_node_attach(struct ath_s
|
||||
an->maxampdu = 1 << (IEEE80211_HT_MAX_AMPDU_FACTOR +
|
||||
sta->ht_cap.ampdu_factor);
|
||||
an->mpdudensity = parse_mpdudensity(sta->ht_cap.ampdu_density);
|
||||
- an->last_rssi = ATH_RSSI_DUMMY_MARKER;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -822,9 +821,11 @@ static u32 ath_get_extchanmode(struct at
|
||||
}
|
||||
|
||||
static void ath9k_bss_assoc_info(struct ath_softc *sc,
|
||||
+ struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_bss_conf *bss_conf)
|
||||
{
|
||||
+ struct ath_wiphy *aphy = hw->priv;
|
||||
struct ath_hw *ah = sc->sc_ah;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
|
||||
@@ -848,6 +849,7 @@ static void ath9k_bss_assoc_info(struct
|
||||
ath_beacon_config(sc, vif);
|
||||
|
||||
/* Reset rssi stats */
|
||||
+ aphy->last_rssi = ATH_RSSI_DUMMY_MARKER;
|
||||
sc->sc_ah->stats.avgbrssi = ATH_RSSI_DUMMY_MARKER;
|
||||
|
||||
sc->sc_flags |= SC_OP_ANI_RUN;
|
||||
@@ -1969,7 +1971,7 @@ static void ath9k_bss_info_changed(struc
|
||||
if (changed & BSS_CHANGED_ASSOC) {
|
||||
ath_print(common, ATH_DBG_CONFIG, "BSS Changed ASSOC %d\n",
|
||||
bss_conf->assoc);
|
||||
- ath9k_bss_assoc_info(sc, vif, bss_conf);
|
||||
+ ath9k_bss_assoc_info(sc, hw, vif, bss_conf);
|
||||
}
|
||||
|
||||
mutex_unlock(&sc->mutex);
|
||||
--- a/drivers/net/wireless/ath/ath9k/recv.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/recv.c
|
||||
@@ -960,36 +960,23 @@ static void ath9k_process_rssi(struct at
|
||||
struct ieee80211_hdr *hdr,
|
||||
struct ath_rx_status *rx_stats)
|
||||
{
|
||||
+ struct ath_wiphy *aphy = hw->priv;
|
||||
struct ath_hw *ah = common->ah;
|
||||
- struct ieee80211_sta *sta;
|
||||
- struct ath_node *an;
|
||||
- int last_rssi = ATH_RSSI_DUMMY_MARKER;
|
||||
+ int last_rssi;
|
||||
__le16 fc;
|
||||
|
||||
- fc = hdr->frame_control;
|
||||
+ if (ah->opmode != NL80211_IFTYPE_STATION)
|
||||
+ return;
|
||||
|
||||
- rcu_read_lock();
|
||||
- /*
|
||||
- * XXX: use ieee80211_find_sta! This requires quite a bit of work
|
||||
- * under the current ath9k virtual wiphy implementation as we have
|
||||
- * no way of tying a vif to wiphy. Typically vifs are attached to
|
||||
- * at least one sdata of a wiphy on mac80211 but with ath9k virtual
|
||||
- * wiphy you'd have to iterate over every wiphy and each sdata.
|
||||
- */
|
||||
- if (is_multicast_ether_addr(hdr->addr1))
|
||||
- sta = ieee80211_find_sta_by_ifaddr(hw, hdr->addr2, NULL);
|
||||
- else
|
||||
- sta = ieee80211_find_sta_by_ifaddr(hw, hdr->addr2, hdr->addr1);
|
||||
+ fc = hdr->frame_control;
|
||||
+ if (!ieee80211_is_beacon(fc) ||
|
||||
+ compare_ether_addr(hdr->addr3, common->curbssid))
|
||||
+ return;
|
||||
|
||||
- if (sta) {
|
||||
- an = (struct ath_node *) sta->drv_priv;
|
||||
- if (rx_stats->rs_rssi != ATH9K_RSSI_BAD &&
|
||||
- !rx_stats->rs_moreaggr)
|
||||
- ATH_RSSI_LPF(an->last_rssi, rx_stats->rs_rssi);
|
||||
- last_rssi = an->last_rssi;
|
||||
- }
|
||||
- rcu_read_unlock();
|
||||
+ if (rx_stats->rs_rssi != ATH9K_RSSI_BAD && !rx_stats->rs_moreaggr)
|
||||
+ ATH_RSSI_LPF(aphy->last_rssi, rx_stats->rs_rssi);
|
||||
|
||||
+ last_rssi = aphy->last_rssi;
|
||||
if (likely(last_rssi != ATH_RSSI_DUMMY_MARKER))
|
||||
rx_stats->rs_rssi = ATH_EP_RND(last_rssi,
|
||||
ATH_RSSI_EP_MULTIPLIER);
|
||||
@@ -997,8 +984,7 @@ static void ath9k_process_rssi(struct at
|
||||
rx_stats->rs_rssi = 0;
|
||||
|
||||
/* Update Beacon RSSI, this is used by ANI. */
|
||||
- if (ieee80211_is_beacon(fc))
|
||||
- ah->stats.avgbrssi = rx_stats->rs_rssi;
|
||||
+ ah->stats.avgbrssi = rx_stats->rs_rssi;
|
||||
}
|
||||
|
||||
/*
|
||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -729,6 +729,7 @@ int ath9k_init_device(u16 devid, struct
|
||||
const struct ath_bus_ops *bus_ops)
|
||||
{
|
||||
struct ieee80211_hw *hw = sc->hw;
|
||||
+ struct ath_wiphy *aphy = hw->priv;
|
||||
struct ath_common *common;
|
||||
struct ath_hw *ah;
|
||||
int error = 0;
|
||||
@@ -781,6 +782,7 @@ int ath9k_init_device(u16 devid, struct
|
||||
INIT_WORK(&sc->chan_work, ath9k_wiphy_chan_work);
|
||||
INIT_DELAYED_WORK(&sc->wiphy_work, ath9k_wiphy_work);
|
||||
sc->wiphy_scheduler_int = msecs_to_jiffies(500);
|
||||
+ aphy->last_rssi = ATH_RSSI_DUMMY_MARKER;
|
||||
|
||||
ath_init_leds(sc);
|
||||
ath_start_rfkill_poll(sc);
|
||||
--- a/drivers/net/wireless/ath/ath9k/virtual.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/virtual.c
|
||||
@@ -107,6 +107,7 @@ int ath9k_wiphy_add(struct ath_softc *sc
|
||||
aphy->sc = sc;
|
||||
aphy->hw = hw;
|
||||
sc->sec_wiphy[i] = aphy;
|
||||
+ aphy->last_rssi = ATH_RSSI_DUMMY_MARKER;
|
||||
spin_unlock_bh(&sc->wiphy_lock);
|
||||
|
||||
memcpy(addr, common->macaddr, ETH_ALEN);
|
||||
Reference in New Issue
Block a user