JohnnySL wrote:@bmork:
1. what type of clients do you have? (and what type of wifi chipsets)
2. is your build for V1 or V2? (and if it's V2, could i have copy )
This is my home network, so you have the usual household clients: 3 Android phones, 3 Linux laptops, a HP printer and a Nintendo 3DS. The laptops all have Intel wireless cards. 2 x AC7260 and 1 x 6300, I believe.
My build is for V1. But adding the new driver to trunk isn't too difficult if you want to build it yourself. You just have to fixup the 100-api_update.patch in addition to the usual commit id and version updates in package/kernel/mwlwifi/Makefile
The problem is that the upstream version tests for an API change using the kernel version, which doesn't detect the backported code used by OpenWRT. This isn't nice, but works:
diff --git a/package/kernel/mwlwifi/patches/100-api_update.patch b/package/kernel/mwlwifi/patches/100-api_update.patch
index 09d65d2df3aa..25a8b2fcc53a 100644
--- a/package/kernel/mwlwifi/patches/100-api_update.patch
+++ b/package/kernel/mwlwifi/patches/100-api_update.patch
@@ -1,27 +1,31 @@
+diff --git a/main.c b/main.c
+index 4b075c172ffa..f9fbd889d4e2 100644
--- a/main.c
+++ b/main.c
-@@ -476,7 +476,7 @@ static void mwl_set_ht_caps(struct mwl_p
+@@ -398,7 +398,7 @@ static void mwl_set_ht_caps(struct mwl_priv *priv,
band->ht_cap.cap |= IEEE80211_HT_CAP_SGI_20;
band->ht_cap.cap |= IEEE80211_HT_CAP_SGI_40;
-- hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
-+ ieee80211_hw_set(hw, AMPDU_AGGREGATION);
- band->ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
- band->ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_4;
-
-@@ -578,12 +578,13 @@ static int mwl_wl_init(struct mwl_priv *
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 0)
++#ifndef ieee80211_hw_set
+ hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION;
+ #else
+ ieee80211_hw_set(hw, AMPDU_AGGREGATION);
+@@ -504,7 +504,7 @@ static int mwl_wl_init(struct mwl_priv *priv)
hw->queues = SYSADPT_TX_WMM_QUEUES;
/* Set rssi values to dBm */
-- hw->flags |= IEEE80211_HW_SIGNAL_DBM | IEEE80211_HW_HAS_RATE_CONTROL;
-+ ieee80211_hw_set(hw, SIGNAL_DBM);
-+ ieee80211_hw_set(hw, HAS_RATE_CONTROL);
-
- /* Ask mac80211 to not to trigger PS mode
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 0)
++#ifndef ieee80211_hw_set
+ hw->flags |= IEEE80211_HW_SIGNAL_DBM | IEEE80211_HW_HAS_RATE_CONTROL;
+ #else
+ ieee80211_hw_set(hw, SIGNAL_DBM);
+@@ -514,7 +514,7 @@ static int mwl_wl_init(struct mwl_priv *priv)
+ /* Ask mac80211 not to trigger PS mode
* based on PM bit of incoming frames.
*/
-- hw->flags |= IEEE80211_HW_AP_LINK_PS;
-+ ieee80211_hw_set(hw, AP_LINK_PS);
-
- hw->vif_data_size = sizeof(struct mwl_vif);
- hw->sta_data_size = sizeof(struct mwl_sta);
+-#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 0)
++#ifndef ieee80211_hw_set
+ hw->flags |= IEEE80211_HW_AP_LINK_PS;
+ #else
+ ieee80211_hw_set(hw, AP_LINK_PS);
--
2.1.4