mwlwifi: update to version 10.4.11-20250206
authorMichael Trinidad <trinidude4@hotmail.com>
Sun, 16 Feb 2025 23:44:03 +0000 (18:44 -0500)
committerChristian Marangi <ansuelsmth@gmail.com>
Wed, 19 Feb 2025 08:55:25 +0000 (09:55 +0100)
The fixes are only for the WRT1900X and WRT1200AC.

It contains:

Deletes the driver's ability to modify the debit table.
Remove skb_get(done_skb) in txdone
Reworking ISR
clean code
Napi replaces tasklet
Add rx_decrypt feature

Signed-off-by: Michael Trinidad <trinidude4@hotmail.com>
Link: https://github.com/openwrt/openwrt/pull/17997
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
package/kernel/mwlwifi/Makefile
package/kernel/mwlwifi/patches/001-Simplify-coredump-memcpy-in-mwl_fwcmd_get_fw_core_dump.patch
package/kernel/mwlwifi/patches/002-Correctly-use-PTR_ERR-in-pcie_bf_mimo_ctrl_decode.patch
package/kernel/mwlwifi/patches/003-Use-zu-and-zd-for-ssize_t-and-size_t.patch
package/kernel/mwlwifi/patches/010-mwlwifi-fix-PCIe-DT-node-null-pointer-dereference.patch [deleted file]
package/kernel/mwlwifi/patches/020-mac80211_update.patch

index 3f2d5e0949377d8d4f4ed981ff73049b2a3acced..07c3acc5f909c9a9c5aa6cc13c5eba0ca1e73da6 100644 (file)
@@ -8,16 +8,16 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mwlwifi
-PKG_RELEASE=2
+PKG_RELEASE=1
 
 PKG_LICENSE:=ISC
 PKG_LICENSE_FILES:=
 
 PKG_SOURCE_URL:=https://github.com/kaloz/mwlwifi
 PKG_SOURCE_PROTO:=git
-PKG_SOURCE_DATE:=2024-04-19
-PKG_SOURCE_VERSION:=a737d348ef4fe00434b2bc44b2b6a68ea833d95b
-PKG_MIRROR_HASH:=d55f69c2fa48d02ba535b72b108fc77f5f13a52b29130a631489a053f1670d2c
+PKG_SOURCE_DATE:=2025-02-06
+PKG_SOURCE_VERSION:=db97edf20fadea2617805006f5230665fadc6a8c
+PKG_MIRROR_HASH:=b5464cf6d57d87f6ce5f13bd2320c7e7e671a3152a74f4ef004382f898b89ecf
 
 PKG_MAINTAINER:=Imre Kaloz <kaloz@openwrt.org>
 PKG_BUILD_PARALLEL:=1
index 4b0feeb17e625785b41c87b9153525a16b60c7e8..20e1cce382c254355c6741df56a61c105c7e20e1 100644 (file)
@@ -20,7 +20,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
 
 --- a/hif/fwcmd.c
 +++ b/hif/fwcmd.c
-@@ -3622,11 +3622,7 @@ int mwl_fwcmd_get_fw_core_dump(struct ie
+@@ -3624,11 +3624,7 @@ int mwl_fwcmd_get_fw_core_dump(struct ie
        core_dump->context = pcmd->cmd_data.coredump.context;
        core_dump->size_kb = pcmd->cmd_data.coredump.size_kb;
        core_dump->flags = pcmd->cmd_data.coredump.flags;
index f204e9fe73d29f4525e6d2b73ffcd2bbe062b71d..f6c398cf661b169d080a32f312efe754e2c75e09 100644 (file)
@@ -19,7 +19,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
 
 --- a/hif/pcie/pcie.c
 +++ b/hif/pcie/pcie.c
-@@ -1466,8 +1466,8 @@ static void pcie_bf_mimo_ctrl_decode(str
+@@ -1449,8 +1449,8 @@ static void pcie_bf_mimo_ctrl_decode(str
                               &fp_data->f_pos);
                filp_close(fp_data, current->files);
        } else {
index d615e1338001f79f4cc0ec8d3369eac0d69d7a78..816fb222c05f5f81641df32204a9768e52d34b1d 100644 (file)
@@ -14,7 +14,7 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
 
 --- a/debugfs.c
 +++ b/debugfs.c
-@@ -1342,7 +1342,7 @@ done:
+@@ -1394,7 +1394,7 @@ done:
                                 priv->reg_value);
        else
                len += scnprintf(p + len, size - len,
diff --git a/package/kernel/mwlwifi/patches/010-mwlwifi-fix-PCIe-DT-node-null-pointer-dereference.patch b/package/kernel/mwlwifi/patches/010-mwlwifi-fix-PCIe-DT-node-null-pointer-dereference.patch
deleted file mode 100644 (file)
index f37d2f8..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-From 8e809b241695252e397bf0d7fc5f36e115c38831 Mon Sep 17 00:00:00 2001
-From: Robert Marko <robert.marko@sartura.hr>
-Date: Fri, 5 Mar 2021 11:47:59 +0100
-Subject: [PATCH] mwlwifi: fix PCIe DT node null pointer dereference
-
-pci_bus_to_OF_node() used to get the PCI bus DT node
-returns node if found or NULL if none is found.
-
-Since the return of pci_bus_to_OF_node() is not checked in
-the DT node name print it will cause a null pointer
-dereference and crash the kernel.
-
-So first check whether the node is not NULL and then print.
-
-Signed-off-by: Robert Marko <robert.marko@sartura.hr>
----
- hif/pcie/pcie.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
---- a/hif/pcie/pcie.c
-+++ b/hif/pcie/pcie.c
-@@ -685,7 +685,8 @@ static struct device_node *pcie_get_devi
-       struct device_node *dev_node;
-       dev_node = pci_bus_to_OF_node(pcie_priv->pdev->bus);
--      wiphy_info(priv->hw->wiphy, "device node: %s\n", dev_node->full_name);
-+      if (dev_node)
-+              wiphy_info(priv->hw->wiphy, "device node: %s\n", dev_node->full_name);
-       return dev_node;
- }
index 1c5d5819392118f51ec4dc540eb671dcab3eb998..1d4afabb51db3fc116a044759de375afb1767b3b 100644 (file)
@@ -13,7 +13,7 @@
  
 --- a/debugfs.c
 +++ b/debugfs.c
-@@ -498,9 +498,9 @@ static ssize_t mwl_debugfs_vif_read(stru
+@@ -550,9 +550,9 @@ static ssize_t mwl_debugfs_vif_read(stru
                switch (vif->type) {
                case NL80211_IFTYPE_AP:
                        len += scnprintf(p + len, size - len, "type: ap\n");
@@ -26,7 +26,7 @@
                        len += scnprintf(p + len, size - len,
                                         "ssid: %s\n", ssid);
                        len += scnprintf(p + len, size - len,
-@@ -522,8 +522,8 @@ static ssize_t mwl_debugfs_vif_read(stru
+@@ -574,8 +574,8 @@ static ssize_t mwl_debugfs_vif_read(stru
                                         "type: unknown\n");
                        break;
                }
@@ -37,7 +37,7 @@
                        len += scnprintf(p + len, size - len,
                                         "channel: %d: width: %d\n",
                                         chan_def->chan->hw_value,
-@@ -596,18 +596,18 @@ static ssize_t mwl_debugfs_sta_read(stru
+@@ -648,18 +648,18 @@ static ssize_t mwl_debugfs_sta_read(stru
                        sta_info->wds ? "true" : "false",
                        sta_info->ba_hist.enable ? "enable" : "disable",
                        sta_info->is_amsdu_allowed ? sta_info->amsdu_ctrl.cap : 0 ,
@@ -68,7 +68,7 @@
                        sta->tdls,
                        sta->tdls_initiator,
                        sta->wme,
-@@ -1158,7 +1158,7 @@ static ssize_t mwl_debugfs_dfs_radar_wri
+@@ -1210,7 +1210,7 @@ static ssize_t mwl_debugfs_dfs_radar_wri
        struct mwl_priv *priv = (struct mwl_priv *)file->private_data;
  
        wiphy_info(priv->hw->wiphy, "simulate radar detected\n");
                        a_band = true;
                else
                        return -EINVAL;
-@@ -2090,7 +2094,7 @@ int mwl_fwcmd_set_beacon(struct ieee8021
+@@ -2092,7 +2096,7 @@ int mwl_fwcmd_set_beacon(struct ieee8021
        if (mwl_fwcmd_set_wsc_ie(hw, b_inf->ie_wsc_len, b_inf->ie_wsc_ptr))
                goto err;
  
                goto err;
  
        if (b_inf->cap_info & WLAN_CAPABILITY_SPECTRUM_MGMT)
-@@ -2152,38 +2156,38 @@ int mwl_fwcmd_set_new_stn_add(struct iee
+@@ -2154,38 +2158,38 @@ int mwl_fwcmd_set_new_stn_add(struct iee
        ether_addr_copy(pcmd->mac_addr, sta->addr);
  
        if (hw->conf.chandef.chan->band == NL80211_BAND_2GHZ)
        }
  
        pcmd->is_qos_sta = sta->wme;
-@@ -2239,38 +2243,38 @@ int mwl_fwcmd_set_new_stn_add_sc4(struct
+@@ -2241,38 +2245,38 @@ int mwl_fwcmd_set_new_stn_add_sc4(struct
        ether_addr_copy(pcmd->mac_addr, sta->addr);
  
        if (hw->conf.chandef.chan->band == NL80211_BAND_2GHZ)
        }
  
        pcmd->is_qos_sta = sta->wme;
-@@ -2787,9 +2791,9 @@ int mwl_fwcmd_create_ba(struct ieee80211
+@@ -2789,9 +2793,9 @@ int mwl_fwcmd_create_ba(struct ieee80211
        pcmd->ba_info.create_params.flags = cpu_to_le32(ba_flags);
        pcmd->ba_info.create_params.queue_id = stream->idx;
        pcmd->ba_info.create_params.param_info =
                 IEEE80211_HT_AMPDU_PARM_DENSITY);
        if (direction == BA_FLAG_DIRECTION_UP) {
                pcmd->ba_info.create_params.reset_seq_no = 0;
-@@ -2799,9 +2803,9 @@ int mwl_fwcmd_create_ba(struct ieee80211
+@@ -2801,9 +2805,9 @@ int mwl_fwcmd_create_ba(struct ieee80211
                pcmd->ba_info.create_params.current_seq = cpu_to_le16(0);
        }
        if (priv->chip_type == MWL8964 &&
        }
 --- a/hif/pcie/8864/tx.c
 +++ b/hif/pcie/8864/tx.c
-@@ -490,7 +490,7 @@ static void pcie_non_pfu_tx_done(struct
-                               } else
-                                       memmove(dma_data->data - hdrlen, &dma_data->wh, hdrlen);
-                               skb_pull(done_skb, sizeof(*dma_data) - hdrlen);
--                              ieee80211_tx_status(priv->hw, done_skb);
-+                              ieee80211_tx_status_skb(priv->hw, done_skb);
-                               dev_kfree_skb_any(done_skb);
-                               done_skb = NULL;
-                       }
-@@ -743,7 +743,7 @@ void pcie_8864_tx_xmit(struct ieee80211_
+@@ -478,7 +478,7 @@ static void pcie_non_pfu_tx_done(struct
+                       } else
+                               memmove(dma_data->data - hdrlen, &dma_data->wh, hdrlen);
+                       skb_pull(done_skb, sizeof(*dma_data) - hdrlen);
+-                      ieee80211_tx_status(priv->hw, done_skb);
++                      ieee80211_tx_status_skb(priv->hw, done_skb);
+ next:
+                       tx_hndl = tx_hndl->pnext;
+                       tx_desc = tx_hndl->pdesc;
+@@ -730,7 +730,7 @@ void pcie_8864_tx_xmit(struct ieee80211_
        index = SYSADPT_TX_WMM_QUEUES - index - 1;
        txpriority = index;
  
          !(xmitcontrol & EAGLE_TXD_XMITCTRL_USE_MC_RATE) &&
            ieee80211_is_data_qos(wh->frame_control)) {
                tid = qos & 0xf;
-@@ -925,4 +925,4 @@ void pcie_8864_tx_del_sta_amsdu_pkts(str
+@@ -912,4 +912,4 @@ void pcie_8864_tx_del_sta_amsdu_pkts(str
                }
        }
        spin_unlock_bh(&sta_info->amsdu_lock);
  
  bypass_ack:
                if (++tx_done_tail >= MAX_TX_RING_DONE_SIZE)
-@@ -596,13 +596,13 @@ void pcie_tx_xmit_ndp(struct ieee80211_h
+@@ -593,13 +593,13 @@ void pcie_tx_xmit_ndp(struct ieee80211_h
                        ack_skb = skb_copy(skb, GFP_ATOMIC);
                        ack_info = IEEE80211_SKB_CB(ack_skb);
                        pcie_tx_prepare_info(priv, 0, ack_info);
                   pcie_priv->txbd_ring_size);
  
        for (num = 0; num < PCIE_MAX_TXRX_BD; num++) {
-@@ -444,7 +444,7 @@ static void pcie_pfu_tx_done(struct mwl_
-                               } else
-                                       memmove(dma_data->data - hdrlen, &dma_data->wh, hdrlen);
-                               skb_pull(done_skb, sizeof(*pfu_dma) - hdrlen);
--                              ieee80211_tx_status(priv->hw, done_skb);
-+                              ieee80211_tx_status_skb(priv->hw, done_skb);
-                       }
+@@ -431,7 +431,7 @@ static void pcie_pfu_tx_done(struct mwl_
+                       } else
+                               memmove(dma_data->data - hdrlen, &dma_data->wh, hdrlen);
+                       skb_pull(done_skb, sizeof(*pfu_dma) - hdrlen);
+-                      ieee80211_tx_status(priv->hw, done_skb);
++                      ieee80211_tx_status_skb(priv->hw, done_skb);
                }
  next:
-@@ -694,7 +694,7 @@ void pcie_8997_tx_xmit(struct ieee80211_
+               memset(data_buf, 0, sizeof(*data_buf));
+@@ -682,7 +682,7 @@ void pcie_8997_tx_xmit(struct ieee80211_
        index = SYSADPT_TX_WMM_QUEUES - index - 1;
        txpriority = index;
  
          !(xmitcontrol & EAGLE_TXD_XMITCTRL_USE_MC_RATE) &&
            ieee80211_is_data_qos(wh->frame_control)) {
                tid = qos & 0xf;
-@@ -875,4 +875,4 @@ void pcie_8997_tx_del_sta_amsdu_pkts(str
+@@ -863,4 +863,4 @@ void pcie_8997_tx_del_sta_amsdu_pkts(str
                }
        }
        spin_unlock_bh(&sta_info->amsdu_lock);
  {
        mwl_fwcmd_radio_disable(hw);
  
-@@ -368,15 +368,15 @@ static void mwl_mac80211_bss_info_change
+@@ -390,15 +390,15 @@ static void mwl_mac80211_bss_info_change
                }
        }
  
  {
        struct mwl_priv *priv = hw->priv;
        struct mwl_vif *mwl_vif;
-@@ -426,8 +426,8 @@ static void mwl_mac80211_bss_info_change
+@@ -448,8 +448,8 @@ static void mwl_mac80211_bss_info_change
        if (changed & (BSS_CHANGED_BEACON_INT | BSS_CHANGED_BEACON)) {
                struct sk_buff *skb;
  
                    (!info->hidden_ssid)) {
                        if (mwl_vif->broadcast_ssid != true) {
                                mwl_fwcmd_broadcast_ssid_enable(hw, vif, true);
-@@ -441,7 +441,7 @@ static void mwl_mac80211_bss_info_change
+@@ -463,7 +463,7 @@ static void mwl_mac80211_bss_info_change
                }
  
                if (!mwl_vif->set_beacon) {
  
                        if (skb) {
                                mwl_fwcmd_set_beacon(hw, vif, skb->data, skb->len);
-@@ -458,7 +458,7 @@ static void mwl_mac80211_bss_info_change
+@@ -480,7 +480,7 @@ static void mwl_mac80211_bss_info_change
  static void mwl_mac80211_bss_info_changed(struct ieee80211_hw *hw,
                                          struct ieee80211_vif *vif,
                                          struct ieee80211_bss_conf *info,
  {
        switch (vif->type) {
        case NL80211_IFTYPE_AP:
-@@ -583,10 +583,10 @@ static int mwl_mac80211_sta_add(struct i
+@@ -605,10 +605,10 @@ static int mwl_mac80211_sta_add(struct i
        if (vif->type == NL80211_IFTYPE_MESH_POINT)
                sta_info->is_mesh_node = true;
  
                        sta_info->amsdu_ctrl.cap = MWL_AMSDU_SIZE_8K;
                        sta_info->amsdu_ctrl.amsdu_allow_size = SYSADPT_AMSDU_8K_MAX_SIZE;
                }
-@@ -670,7 +670,7 @@ static int mwl_mac80211_sta_remove(struc
+@@ -692,7 +692,7 @@ static int mwl_mac80211_sta_remove(struc
  
  static int mwl_mac80211_conf_tx(struct ieee80211_hw *hw,
                                struct ieee80211_vif *vif,
                                const struct ieee80211_tx_queue_params *params)
  {
        struct mwl_priv *priv = hw->priv;
-@@ -934,4 +934,9 @@ const struct ieee80211_ops mwl_mac80211_
+@@ -956,4 +956,9 @@ const struct ieee80211_ops mwl_mac80211_
        .pre_channel_switch = mwl_mac80211_chnl_switch,
        .sw_scan_start      = mwl_mac80211_sw_scan_start,
        .sw_scan_complete   = mwl_mac80211_sw_scan_complete,
        case TX_RATE_FORMAT_LEGACY:
 --- a/hif/pcie/pcie.c
 +++ b/hif/pcie/pcie.c
-@@ -546,7 +546,7 @@ static irqreturn_t pcie_isr_8864(struct
+@@ -533,7 +533,7 @@ static irqreturn_t pcie_isr_8864(struct
  
                if (int_status & MACREG_A2HRIC_BIT_RADAR_DETECT) {
                        wiphy_info(hw->wiphy, "radar detected by firmware\n");
 +                      ieee80211_radar_detected(hw, NULL);
                }
  
-               if (int_status & MACREG_A2HRIC_BIT_CHAN_SWITCH) ieee80211_queue_work(hw, &priv->chnl_switch_handle);
-@@ -593,7 +593,7 @@ static irqreturn_t pcie_isr_8997(struct
+               if (int_status & MACREG_A2HRIC_BIT_CHAN_SWITCH)
+@@ -575,7 +575,7 @@ static irqreturn_t pcie_isr_8997(struct
  
                if (int_status & MACREG_A2HRIC_BIT_RADAR_DETECT) {
                        wiphy_info(hw->wiphy, "radar detected by firmware\n");
                }
  
                if (int_status & MACREG_A2HRIC_BIT_CHAN_SWITCH)
-@@ -1071,7 +1071,7 @@ static irqreturn_t pcie_isr_ndp(struct i
+@@ -1053,7 +1053,7 @@ static irqreturn_t pcie_isr_ndp(struct i
  
                if (int_status & MACREG_A2HRIC_NEWDP_DFS) {
                        wiphy_info(hw->wiphy, "radar detected by firmware\n");