mwlwifi: update to version 10.4.10-20231120
[openwrt/staging/hauke.git] / package / kernel / mwlwifi / patches / 005-mac80211_update.patch
index d0dacabd8afdae0779b9926f446594325ec552c9..92a8f2f70fd9c1d38ae028d74b65bfcaa3c3c648 100644 (file)
@@ -1,6 +1,6 @@
 --- a/core.c
 +++ b/core.c
-@@ -692,7 +692,7 @@ static void mwl_chnl_switch_event(struct
+@@ -718,7 +718,7 @@ static void mwl_chnl_switch_event(struct
                vif = container_of((void *)mwl_vif, struct ieee80211_vif,
                                   drv_priv);
  
@@ -11,7 +11,7 @@
        spin_unlock_bh(&priv->vif_lock);
 --- a/debugfs.c
 +++ b/debugfs.c
-@@ -462,9 +462,9 @@ static ssize_t mwl_debugfs_vif_read(stru
+@@ -498,9 +498,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");
@@ -24,7 +24,7 @@
                        len += scnprintf(p + len, size - len,
                                         "ssid: %s\n", ssid);
                        len += scnprintf(p + len, size - len,
-@@ -486,8 +486,8 @@ static ssize_t mwl_debugfs_vif_read(stru
+@@ -522,8 +522,8 @@ static ssize_t mwl_debugfs_vif_read(stru
                                         "type: unknown\n");
                        break;
                }
                        len += scnprintf(p + len, size - len,
                                         "channel: %d: width: %d\n",
                                         chan_def->chan->hw_value,
-@@ -573,28 +573,28 @@ static ssize_t mwl_debugfs_sta_read(stru
-                                        "amsdu cap: 0x%02x\n",
-                                        sta_info->amsdu_ctrl.cap);
-               }
--              if (sta->ht_cap.ht_supported) {
-+              if (sta->deflink.ht_cap.ht_supported) {
-                       len += scnprintf(p + len, size - len,
-                                        "ht_cap: 0x%04x, ampdu: %02x, %02x\n",
--                                       sta->ht_cap.cap,
--                                       sta->ht_cap.ampdu_factor,
--                                       sta->ht_cap.ampdu_density);
-+                                       sta->deflink.ht_cap.cap,
-+                                       sta->deflink.ht_cap.ampdu_factor,
-+                                       sta->deflink.ht_cap.ampdu_density);
-                       len += scnprintf(p + len, size - len,
-                                        "rx_mask: 0x%02x, %02x, %02x, %02x\n",
--                                       sta->ht_cap.mcs.rx_mask[0],
--                                       sta->ht_cap.mcs.rx_mask[1],
--                                       sta->ht_cap.mcs.rx_mask[2],
--                                       sta->ht_cap.mcs.rx_mask[3]);
-+                                       sta->deflink.ht_cap.mcs.rx_mask[0],
-+                                       sta->deflink.ht_cap.mcs.rx_mask[1],
-+                                       sta->deflink.ht_cap.mcs.rx_mask[2],
-+                                       sta->deflink.ht_cap.mcs.rx_mask[3]);
-               }
--              if (sta->vht_cap.vht_supported) {
-+              if (sta->deflink.vht_cap.vht_supported) {
-                       len += scnprintf(p + len, size - len,
-                                        "vht_cap: 0x%08x, mcs: %02x, %02x\n",
--                                       sta->vht_cap.cap,
--                                       sta->vht_cap.vht_mcs.rx_mcs_map,
--                                       sta->vht_cap.vht_mcs.tx_mcs_map);
-+                                       sta->deflink.vht_cap.cap,
-+                                       sta->deflink.vht_cap.vht_mcs.rx_mcs_map,
-+                                       sta->deflink.vht_cap.vht_mcs.tx_mcs_map);
-               }
-               len += scnprintf(p + len, size - len, "rx_bw: %d, rx_nss: %d\n",
--                               sta->bandwidth, sta->rx_nss);
-+                               sta->deflink.bandwidth, sta->deflink.rx_nss);
-               len += scnprintf(p + len, size - len,
-                                "tdls: %d, tdls_init: %d\n",
-                                sta->tdls, sta->tdls_initiator);
+@@ -596,18 +596,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 ,
+-                      sta->ht_cap.ht_supported ? sta->ht_cap.cap : 0,
+-                      sta->ht_cap.ht_supported ? sta->ht_cap.ampdu_factor : 0,
+-                      sta->ht_cap.ht_supported ? sta->ht_cap.ampdu_density : 0,
+-                      sta->ht_cap.ht_supported ? sta->ht_cap.mcs.rx_mask[0] : 0,
+-                      sta->ht_cap.ht_supported ? sta->ht_cap.mcs.rx_mask[1] : 0,
+-                      sta->ht_cap.ht_supported ? sta->ht_cap.mcs.rx_mask[2] : 0,
+-                      sta->ht_cap.ht_supported ? sta->ht_cap.mcs.rx_mask[3] : 0,
+-                      sta->vht_cap.vht_supported ? sta->vht_cap.cap : 0,
+-                      sta->vht_cap.vht_supported ? sta->vht_cap.vht_mcs.rx_mcs_map : 0,
+-                      sta->vht_cap.vht_supported ? sta->vht_cap.vht_mcs.tx_mcs_map : 0,
+-                      sta->bandwidth,
+-                      sta->rx_nss,
++                      sta->deflink.ht_cap.ht_supported ? sta->deflink.ht_cap.cap : 0,
++                      sta->deflink.ht_cap.ht_supported ? sta->deflink.ht_cap.ampdu_factor : 0,
++                      sta->deflink.ht_cap.ht_supported ? sta->deflink.ht_cap.ampdu_density : 0,
++                      sta->deflink.ht_cap.ht_supported ? sta->deflink.ht_cap.mcs.rx_mask[0] : 0,
++                      sta->deflink.ht_cap.ht_supported ? sta->deflink.ht_cap.mcs.rx_mask[1] : 0,
++                      sta->deflink.ht_cap.ht_supported ? sta->deflink.ht_cap.mcs.rx_mask[2] : 0,
++                      sta->deflink.ht_cap.ht_supported ? sta->deflink.ht_cap.mcs.rx_mask[3] : 0,
++                      sta->deflink.vht_cap.vht_supported ? sta->deflink.vht_cap.cap : 0,
++                      sta->deflink.vht_cap.vht_supported ? sta->deflink.vht_cap.vht_mcs.rx_mcs_map : 0,
++                      sta->deflink.vht_cap.vht_supported ? sta->deflink.vht_cap.vht_mcs.tx_mcs_map : 0,
++                      sta->deflink.bandwidth,
++                      sta->deflink.rx_nss,
+                       sta->tdls,
+                       sta->tdls_initiator,
+                       sta->wme,
 --- a/hif/fwcmd.c
 +++ b/hif/fwcmd.c
-@@ -634,8 +634,9 @@ einval:
+@@ -633,11 +633,15 @@ einval:
+ }
  
  static int mwl_fwcmd_set_ap_beacon(struct mwl_priv *priv,
-                                  struct mwl_vif *mwl_vif,
+-                                 struct mwl_vif *mwl_vif,
 -                                 struct ieee80211_bss_conf *bss_conf)
 +                                 struct ieee80211_vif *vif)
  {
-+      struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
        struct hostcmd_cmd_ap_beacon *pcmd;
        struct ds_params *phy_ds_param_set;
++      struct mwl_vif *mwl_vif;
++      struct ieee80211_bss_conf *bss_conf;
++
++      mwl_vif = mwl_dev_get_vif(vif);
++      bss_conf = &vif->bss_conf;
  
-@@ -664,7 +665,7 @@ static int mwl_fwcmd_set_ap_beacon(struc
+       /* wmm structure of start command is defined less one byte,
+        * due to following field country is not used, add byte one
+@@ -664,7 +668,7 @@ static int mwl_fwcmd_set_ap_beacon(struc
        pcmd->cmd_hdr.macid = mwl_vif->macid;
  
        ether_addr_copy(pcmd->start_cmd.sta_mac_addr, mwl_vif->bssid);
        if (priv->chip_type == MWL8997)
                ether_addr_copy(pcmd->start_cmd.bssid, mwl_vif->bssid);
        pcmd->start_cmd.bss_type = 1;
-@@ -2085,7 +2086,7 @@ int mwl_fwcmd_set_beacon(struct ieee8021
+@@ -2090,7 +2094,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;
  
 -      if (mwl_fwcmd_set_ap_beacon(priv, mwl_vif, &vif->bss_conf))
-+      if (mwl_fwcmd_set_ap_beacon(priv, mwl_vif, vif))
++      if (mwl_fwcmd_set_ap_beacon(priv, vif))
                goto err;
  
        if (b_inf->cap_info & WLAN_CAPABILITY_SPECTRUM_MGMT)
-@@ -2147,38 +2148,38 @@ int mwl_fwcmd_set_new_stn_add(struct iee
+@@ -2152,38 +2156,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;
-@@ -2234,38 +2235,38 @@ int mwl_fwcmd_set_new_stn_add_sc4(struct
+@@ -2239,38 +2243,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;
-@@ -2782,9 +2783,9 @@ int mwl_fwcmd_create_ba(struct ieee80211
+@@ -2787,9 +2791,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;
-@@ -2794,9 +2795,9 @@ int mwl_fwcmd_create_ba(struct ieee80211
+@@ -2799,9 +2803,9 @@ int mwl_fwcmd_create_ba(struct ieee80211
                pcmd->ba_info.create_params.current_seq = cpu_to_le16(0);
        }
        if (priv->chip_type == MWL8964 &&
                        IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK) >>
                        IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT);
        }
+--- a/hif/pcie/8864/tx.c
++++ b/hif/pcie/8864/tx.c
+@@ -743,7 +743,7 @@ void pcie_8864_tx_xmit(struct ieee80211_
+       index = SYSADPT_TX_WMM_QUEUES - index - 1;
+       txpriority = index;
+-      if (sta && sta->ht_cap.ht_supported &&
++      if (sta && sta->deflink.ht_cap.ht_supported &&
+         !(xmitcontrol & EAGLE_TXD_XMITCTRL_USE_MC_RATE) &&
+           ieee80211_is_data_qos(wh->frame_control)) {
+               tid = qos & 0xf;
+--- a/hif/pcie/8964/tx_ndp.c
++++ b/hif/pcie/8964/tx_ndp.c
+@@ -607,7 +607,7 @@ void pcie_tx_xmit_ndp(struct ieee80211_h
+               pcie_tx_encapsulate_frame(priv, skb, k_conf);
+       } else {
+               tid = qos & 0x7;
+-              if (sta && sta->ht_cap.ht_supported && !eapol_frame &&
++              if (sta && sta->deflink.ht_cap.ht_supported && !eapol_frame &&
+                   qos != 0xFFFF) {
+                       pcie_tx_count_packet(sta, tid);
+                       spin_lock_bh(&priv->stream_lock);
+--- a/hif/pcie/8997/tx.c
++++ b/hif/pcie/8997/tx.c
+@@ -81,7 +81,7 @@ static int pcie_txbd_ring_create(struct
+       wiphy_info(priv->hw->wiphy,
+                  "TX ring: - base: %p, pbase: 0x%x, len: %d\n",
+                  pcie_priv->txbd_ring_vbase,
+-                 pcie_priv->txbd_ring_pbase,
++                 (u32)pcie_priv->txbd_ring_pbase,
+                  pcie_priv->txbd_ring_size);
+       for (num = 0; num < PCIE_MAX_TXRX_BD; num++) {
+@@ -694,7 +694,7 @@ void pcie_8997_tx_xmit(struct ieee80211_
+       index = SYSADPT_TX_WMM_QUEUES - index - 1;
+       txpriority = index;
+-      if (sta && sta->ht_cap.ht_supported &&
++      if (sta && sta->deflink.ht_cap.ht_supported &&
+         !(xmitcontrol & EAGLE_TXD_XMITCTRL_USE_MC_RATE) &&
+           ieee80211_is_data_qos(wh->frame_control)) {
+               tid = qos & 0xf;
 --- a/mac80211.c
 +++ b/mac80211.c
-@@ -371,15 +371,15 @@ static void mwl_mac80211_bss_info_change
+@@ -368,15 +368,15 @@ static void mwl_mac80211_bss_info_change
                }
        }
  
  {
        struct mwl_priv *priv = hw->priv;
        struct mwl_vif *mwl_vif;
-@@ -429,8 +429,8 @@ static void mwl_mac80211_bss_info_change
+@@ -426,8 +426,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);
-@@ -444,7 +444,7 @@ static void mwl_mac80211_bss_info_change
+@@ -441,7 +441,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);
-@@ -461,7 +461,7 @@ static void mwl_mac80211_bss_info_change
+@@ -458,7 +458,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,
 +      if (sta->deflink.ht_cap.ht_supported) {
                sta_info->is_ampdu_allowed = true;
                sta_info->is_amsdu_allowed = false;
--              if (sta->ht_cap.cap & IEEE80211_HT_CAP_MAX_AMSDU)
-+              if (sta->deflink.ht_cap.cap & IEEE80211_HT_CAP_MAX_AMSDU)
+-              if (sta->ht_cap.cap & IEEE80211_HT_CAP_MAX_AMSDU) {
++              if (sta->deflink.ht_cap.cap & IEEE80211_HT_CAP_MAX_AMSDU) {
                        sta_info->amsdu_ctrl.cap = MWL_AMSDU_SIZE_8K;
-               else
-                       sta_info->amsdu_ctrl.cap = MWL_AMSDU_SIZE_4K;
-@@ -668,7 +668,7 @@ static int mwl_mac80211_sta_remove(struc
+                       sta_info->amsdu_ctrl.amsdu_allow_size = SYSADPT_AMSDU_8K_MAX_SIZE;
+               }
+@@ -670,7 +670,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;
-@@ -768,6 +768,7 @@ static int mwl_mac80211_ampdu_action(str
-                       spin_lock_bh(&priv->stream_lock);
-                       break;
-               }
-+              break;
-       case IEEE80211_AMPDU_RX_STOP:
-               if (priv->chip_type == MWL8964) {
-                       struct mwl_ampdu_stream tmp;
-@@ -930,4 +931,5 @@ const struct ieee80211_ops mwl_mac80211_
+@@ -934,4 +934,5 @@ 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,
  
        switch (format) {
        case TX_RATE_FORMAT_LEGACY:
---- a/hif/pcie/tx.c
-+++ b/hif/pcie/tx.c
-@@ -157,7 +157,7 @@ static int pcie_txbd_ring_create(struct
-       wiphy_info(priv->hw->wiphy,
-                  "TX ring: - base: %p, pbase: 0x%x, len: %d\n",
-                  pcie_priv->txbd_ring_vbase,
--                 pcie_priv->txbd_ring_pbase,
-+                 (u32)pcie_priv->txbd_ring_pbase,
-                  pcie_priv->txbd_ring_size);
-       for (num = 0; num < PCIE_MAX_TXRX_BD; num++) {
-@@ -1153,7 +1153,7 @@ void pcie_tx_xmit(struct ieee80211_hw *h
-       index = SYSADPT_TX_WMM_QUEUES - index - 1;
-       txpriority = index;
--      if (sta && sta->ht_cap.ht_supported && !eapol_frame &&
-+      if (sta && sta->deflink.ht_cap.ht_supported && !eapol_frame &&
-           ieee80211_is_data_qos(wh->frame_control)) {
-               tid = qos & 0xf;
-               pcie_tx_count_packet(sta, tid);
---- a/hif/pcie/tx_ndp.c
-+++ b/hif/pcie/tx_ndp.c
-@@ -602,7 +602,7 @@ void pcie_tx_xmit_ndp(struct ieee80211_h
-               pcie_tx_encapsulate_frame(priv, skb, k_conf, NULL);
-       } else {
-               tid = qos & 0x7;
--              if (sta && sta->ht_cap.ht_supported && !eapol_frame &&
-+              if (sta && sta->deflink.ht_cap.ht_supported && !eapol_frame &&
-                   qos != 0xFFFF) {
-                       pcie_tx_count_packet(sta, tid);
-                       spin_lock_bh(&priv->stream_lock);