From 19b980c5251191414534a3e027ab78aabde848e3 Mon Sep 17 00:00:00 2001 From: Jonas Gorski Date: Wed, 27 Mar 2013 12:39:52 +0000 Subject: [PATCH] mac80211: backport some upstream mwl8k fixes SVN-Revision: 36134 --- .../mac80211/patches/300-pending_work.patch | 2 +- ...-don-t-overwrite-regulatory-settings.patch | 70 +++++++++++++++++++ ...ly-configuration-even-when-device-is.patch | 44 ++++++++++++ 3 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 package/mac80211/patches/701-mwl8k-don-t-overwrite-regulatory-settings.patch create mode 100644 package/mac80211/patches/702-mwl8k-always-apply-configuration-even-when-device-is.patch diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch index cf51aae5cc..3a09420321 100644 --- a/package/mac80211/patches/300-pending_work.patch +++ b/package/mac80211/patches/300-pending_work.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; diff --git a/package/mac80211/patches/701-mwl8k-don-t-overwrite-regulatory-settings.patch b/package/mac80211/patches/701-mwl8k-don-t-overwrite-regulatory-settings.patch new file mode 100644 index 0000000000..dd6348f702 --- /dev/null +++ b/package/mac80211/patches/701-mwl8k-don-t-overwrite-regulatory-settings.patch @@ -0,0 +1,70 @@ +From f340b99171e923eb6b54c1d0c22c15b45df40647 Mon Sep 17 00:00:00 2001 +From: Jonas Gorski +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 +--- + 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) diff --git a/package/mac80211/patches/702-mwl8k-always-apply-configuration-even-when-device-is.patch b/package/mac80211/patches/702-mwl8k-always-apply-configuration-even-when-device-is.patch new file mode 100644 index 0000000000..ff254790d7 --- /dev/null +++ b/package/mac80211/patches/702-mwl8k-always-apply-configuration-even-when-device-is.patch @@ -0,0 +1,44 @@ +From 5d1ed64614ccb21c26bc0ee321e9c51b6359ceb8 Mon Sep 17 00:00:00 2001 +From: Jonas Gorski +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 +--- + 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; + -- 2.30.2