mac80211: backport some upstream mwl8k fixes

SVN-Revision: 36134
master
Jonas Gorski 12 years ago
parent 574bab45ac
commit 7e0b5d15c6
  1. 2
      package/mac80211/patches/300-pending_work.patch
  2. 70
      package/mac80211/patches/701-mwl8k-don-t-overwrite-regulatory-settings.patch
  3. 44
      package/mac80211/patches/702-mwl8k-always-apply-configuration-even-when-device-is.patch

@ -300,7 +300,7 @@
static void ieee80211_iface_work(struct work_struct *work)
{
struct ieee80211_sub_if_data *sdata =
@@ -1126,6 +1175,9 @@ static void ieee80211_iface_work(struct
@@ -1126,6 +1175,9 @@ static void ieee80211_iface_work(struct
break;
ieee80211_mesh_rx_queued_mgmt(sdata, skb);
break;

@ -0,0 +1,70 @@
From f340b99171e923eb6b54c1d0c22c15b45df40647 Mon Sep 17 00:00:00 2001
From: Jonas Gorski <jogo@openwrt.org>
Date: Mon, 11 Mar 2013 17:17:28 +0100
Subject: [PATCH] mwl8k: don't overwrite regulatory settings
Currently the caps are parsed on every firmware reload, causing any
channel flags to be cleared.
When there is a firmware to interface mode mismatch, the triggered
firmware reload causes a reset of the regulatory settings, causing all
channels to become available:
root@openrouter:/# iw phy phy0 info
Wiphy phy0
Band 1:
(...)
Frequencies:
* 2412 MHz [1] (0.0 dBm)
* 2417 MHz [2] (0.0 dBm)
* 2422 MHz [3] (0.0 dBm)
* 2427 MHz [4] (0.0 dBm)
* 2432 MHz [5] (0.0 dBm)
* 2437 MHz [6] (0.0 dBm)
* 2442 MHz [7] (0.0 dBm)
* 2447 MHz [8] (0.0 dBm)
* 2452 MHz [9] (0.0 dBm)
* 2457 MHz [10] (0.0 dBm)
* 2462 MHz [11] (0.0 dBm)
* 2467 MHz [12] (0.0 dBm)
* 2472 MHz [13] (0.0 dBm)
* 2484 MHz [14] (0.0 dBm)
(...)
To prevent this, only parse the caps on the first firmware load during
hardware probe, and store them locally to know we have already parsed
them.
Signed-off-by: Jonas Gorski <jogo@openwrt.org>
---
drivers/net/wireless/mwl8k.c | 6 ++++++
1 file changed, 6 insertions(+)
--- a/drivers/net/wireless/mwl8k.c
+++ b/drivers/net/wireless/mwl8k.c
@@ -232,6 +232,7 @@ struct mwl8k_priv {
u16 num_mcaddrs;
u8 hw_rev;
u32 fw_rev;
+ u32 caps;
/*
* Running count of TX packets in flight, to avoid
@@ -2401,6 +2402,9 @@ mwl8k_set_caps(struct ieee80211_hw *hw,
{
struct mwl8k_priv *priv = hw->priv;
+ if (priv->caps)
+ return;
+
if ((caps & MWL8K_CAP_2GHZ4) || !(caps & MWL8K_CAP_BAND_MASK)) {
mwl8k_setup_2ghz_band(hw);
if (caps & MWL8K_CAP_MIMO)
@@ -2412,6 +2416,8 @@ mwl8k_set_caps(struct ieee80211_hw *hw,
if (caps & MWL8K_CAP_MIMO)
mwl8k_set_ht_caps(hw, &priv->band_50, caps);
}
+
+ priv->caps = caps;
}
static int mwl8k_cmd_get_hw_spec_sta(struct ieee80211_hw *hw)

@ -0,0 +1,44 @@
From 5d1ed64614ccb21c26bc0ee321e9c51b6359ceb8 Mon Sep 17 00:00:00 2001
From: Jonas Gorski <jogo@openwrt.org>
Date: Mon, 25 Mar 2013 15:37:42 +0100
Subject: [PATCH] mwl8k: always apply configuration even when device is idle
Fix settings not being applied when the device is idle and the firmware
gets reloaded (because of changing from STA to AP mode). This caused
the device using the wrong channel (and likely band), e.g. a 5 GHz only
card still defaulted to channel 6 in the 2.4 GHz band when left
unconfigured.
This issue was always present, but only made visible with "mwl8k: Do not
call mwl8k_cmd_set_rf_channel unconditionally" (0f4316b9), since before
that the channel was (re-)configured at the next _config call even when
it did not change from the mac80211 perspective.
Signed-off-by: Jonas Gorski <jogo@openwrt.org>
---
drivers/net/wireless/mwl8k.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
--- a/drivers/net/wireless/mwl8k.c
+++ b/drivers/net/wireless/mwl8k.c
@@ -4818,16 +4818,14 @@ static int mwl8k_config(struct ieee80211
struct mwl8k_priv *priv = hw->priv;
int rc;
- if (conf->flags & IEEE80211_CONF_IDLE) {
- mwl8k_cmd_radio_disable(hw);
- return 0;
- }
-
rc = mwl8k_fw_lock(hw);
if (rc)
return rc;
- rc = mwl8k_cmd_radio_enable(hw);
+ if (conf->flags & IEEE80211_CONF_IDLE)
+ rc = mwl8k_cmd_radio_disable(hw);
+ else
+ rc = mwl8k_cmd_radio_enable(hw);
if (rc)
goto out;
Loading…
Cancel
Save