mac80211: backport some upstream mwl8k fixes
SVN-Revision: 36134
This commit is contained in:
parent
574bab45ac
commit
7e0b5d15c6
3 changed files with 115 additions and 1 deletions
|
@ -300,7 +300,7 @@
|
||||||
static void ieee80211_iface_work(struct work_struct *work)
|
static void ieee80211_iface_work(struct work_struct *work)
|
||||||
{
|
{
|
||||||
struct ieee80211_sub_if_data *sdata =
|
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;
|
break;
|
||||||
ieee80211_mesh_rx_queued_mgmt(sdata, skb);
|
ieee80211_mesh_rx_queued_mgmt(sdata, skb);
|
||||||
break;
|
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…
Reference in a new issue