+++ /dev/null
---- a/ath10k-5.15/mac.c
-+++ b/ath10k-5.15/mac.c
-@@ -788,7 +788,7 @@ int ath10k_mac_vif_chan(struct ieee80211
- struct ieee80211_chanctx_conf *conf;
-
- rcu_read_lock();
-- conf = rcu_dereference(vif->chanctx_conf);
-+ conf = rcu_dereference(vif->bss_conf.chanctx_conf);
- if (!conf) {
- rcu_read_unlock();
- return -ENOENT;
-@@ -1764,8 +1764,8 @@ static int ath10k_vdev_start_restart(str
- arg.channel.chan_radar =
- !!(chandef->chan->flags & IEEE80211_CHAN_RADAR);
- } else if (arvif->vdev_type == WMI_VDEV_TYPE_IBSS) {
-- arg.ssid = arvif->vif->bss_conf.ssid;
-- arg.ssid_len = arvif->vif->bss_conf.ssid_len;
-+ arg.ssid = arvif->vif->cfg.ssid;
-+ arg.ssid_len = arvif->vif->cfg.ssid_len;
- }
-
- ath10k_dbg(ar, ATH10K_DBG_MAC,
-@@ -1890,7 +1890,7 @@ static int ath10k_mac_setup_bcn_tmpl(str
- arvif->vdev_type != WMI_VDEV_TYPE_IBSS)
- return 0;
-
-- bcn = ieee80211_beacon_get_template(hw, vif, &offs);
-+ bcn = ieee80211_beacon_get_template(hw, vif, &offs, 0);
- if (!bcn) {
- ath10k_warn(ar, "failed to get beacon template from mac80211\n");
- return -EPERM;
-@@ -2083,8 +2083,7 @@ static void ath10k_control_beaconing(str
- }
-
- static void ath10k_control_ibss(struct ath10k_vif *arvif,
-- struct ieee80211_bss_conf *info,
-- const u8 self_peer[ETH_ALEN])
-+ struct ieee80211_vif *vif)
- {
- struct ath10k *ar = arvif->ar;
- u32 vdev_param;
-@@ -2092,7 +2091,7 @@ static void ath10k_control_ibss(struct a
-
- lockdep_assert_held(&arvif->ar->conf_mutex);
-
-- if (!info->ibss_joined) {
-+ if (!vif->cfg.ibss_joined) {
- if (is_zero_ether_addr(arvif->bssid))
- return;
-
-@@ -2298,7 +2297,7 @@ static void ath10k_mac_vif_ap_csa_count_
- if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
- return;
-
-- if (!vif->csa_active)
-+ if (!vif->bss_conf.csa_active)
- return;
-
- if (!arvif->is_up)
-@@ -2433,7 +2432,7 @@ static void ath10k_peer_assoc_h_basic(st
- lockdep_assert_held(&ar->conf_mutex);
-
- if (vif->type == NL80211_IFTYPE_STATION)
-- aid = vif->bss_conf.aid;
-+ aid = vif->cfg.aid;
- else
- aid = sta->aid;
-
-@@ -2463,7 +2462,8 @@ static void ath10k_peer_assoc_h_crypto(s
- return;
-
- bss = cfg80211_get_bss(ar->hw->wiphy, def.chan, info->bssid,
-- info->ssid_len ? info->ssid : NULL, info->ssid_len,
-+ vif->cfg.ssid_len ? vif->cfg.ssid : NULL,
-+ vif->cfg.ssid_len,
- IEEE80211_BSS_TYPE_ANY, IEEE80211_PRIVACY_ANY);
- if (bss) {
- const struct cfg80211_bss_ies *ies;
-@@ -2521,7 +2521,7 @@ static void ath10k_peer_assoc_h_rates(st
-
- band = def.chan->band;
- sband = ar->hw->wiphy->bands[band];
-- ratemask = sta->supp_rates[band];
-+ ratemask = sta->deflink.supp_rates[band];
- ratemask &= arvif->bitrate_mask.control[band].legacy;
- rates = sband->bitrates;
-
-@@ -2770,7 +2770,7 @@ static void ath10k_peer_assoc_h_ht(struc
- struct ieee80211_sta *sta,
- struct wmi_peer_assoc_complete_arg *arg)
- {
-- const struct ieee80211_sta_ht_cap *ht_cap = &sta->ht_cap;
-+ const struct ieee80211_sta_ht_cap *ht_cap = &sta->deflink.ht_cap;
- struct ath10k_vif *arvif = (void *)vif->drv_priv;
- struct cfg80211_chan_def def;
- enum nl80211_band band;
-@@ -2814,7 +2814,7 @@ static void ath10k_peer_assoc_h_ht(struc
- if (ht_cap->cap & IEEE80211_HT_CAP_LDPC_CODING)
- arg->peer_flags |= ar->wmi.peer_flags->ldbc;
-
-- if (sta->bandwidth >= IEEE80211_STA_RX_BW_40) {
-+ if (sta->deflink.bandwidth >= IEEE80211_STA_RX_BW_40) {
- arg->peer_flags |= ar->wmi.peer_flags->bw40;
- arg->peer_rate_caps |= WMI_RC_CW40_FLAG;
- }
-@@ -2883,7 +2883,7 @@ static void ath10k_peer_assoc_h_ht(struc
- arg->peer_ht_rates.rates[i] = i;
- } else {
- arg->peer_ht_rates.num_rates = n;
-- arg->peer_num_spatial_streams = min(sta->rx_nss, max_nss);
-+ arg->peer_num_spatial_streams = min(sta->deflink.rx_nss, max_nss);
- }
-
- ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ht peer %pM mcs cnt %d nss %d\n",
-@@ -3045,7 +3045,7 @@ static void ath10k_peer_assoc_h_vht(stru
- struct ieee80211_sta *sta,
- struct wmi_peer_assoc_complete_arg *arg)
- {
-- const struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap;
-+ const struct ieee80211_sta_vht_cap *vht_cap = &sta->deflink.vht_cap;
- struct ath10k_vif *arvif = (void *)vif->drv_priv;
- struct ath10k_hw_params *hw = &ar->hw_params;
- struct cfg80211_chan_def def;
-@@ -3087,10 +3087,10 @@ static void ath10k_peer_assoc_h_vht(stru
- (1U << (IEEE80211_HT_MAX_AMPDU_FACTOR +
- ampdu_factor)) - 1);
-
-- if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
-+ if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_80)
- arg->peer_flags |= ar->wmi.peer_flags->bw80;
-
-- if (sta->bandwidth == IEEE80211_STA_RX_BW_160)
-+ if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_160)
- arg->peer_flags |= ar->wmi.peer_flags->bw160;
-
- /* Calculate peer NSS capability from VHT capabilities if STA
-@@ -3104,7 +3104,7 @@ static void ath10k_peer_assoc_h_vht(stru
- vht_mcs_mask[i])
- max_nss = i + 1;
- }
-- arg->peer_num_spatial_streams = min(sta->rx_nss, max_nss);
-+ arg->peer_num_spatial_streams = min(sta->deflink.rx_nss, max_nss);
- arg->peer_vht_rates.rx_max_rate =
- __le16_to_cpu(vht_cap->vht_mcs.rx_highest);
- arg->peer_vht_rates.rx_mcs_set =
-@@ -3266,7 +3266,7 @@ static bool ath10k_mac_sta_has_ofdm_only
- {
- struct ath10k_vif *arvif = (void *)vif->drv_priv;
- u32 msk = arvif->bitrate_mask.control[NL80211_BAND_2GHZ].legacy &
-- sta->supp_rates[NL80211_BAND_2GHZ];
-+ sta->deflink.supp_rates[NL80211_BAND_2GHZ];
- /* We have 12 bits of legacy rates, first 4 are /b (CCK) rates. */
- return (msk & 0xff0) && !(msk & 0xf);
- }
-@@ -3276,7 +3276,7 @@ static bool ath10k_mac_sta_has_ofdm_and_
- {
- struct ath10k_vif *arvif = (void *)vif->drv_priv;
- u32 msk = arvif->bitrate_mask.control[NL80211_BAND_2GHZ].legacy &
-- sta->supp_rates[NL80211_BAND_2GHZ];
-+ sta->deflink.supp_rates[NL80211_BAND_2GHZ];
- /* We have 12 bits of legacy rates, first 4 are /b (CCK) rates. */
- return ((msk & 0xf) && (msk & 0xff0));
- }
-@@ -3284,8 +3284,10 @@ static bool ath10k_mac_sta_has_ofdm_and_
- static enum wmi_phy_mode ath10k_mac_get_phymode_vht(struct ath10k *ar,
- struct ieee80211_sta *sta)
- {
-- if (sta->bandwidth == IEEE80211_STA_RX_BW_160) {
-- switch (sta->vht_cap.cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK) {
-+ struct ieee80211_sta_vht_cap *vht_cap = &sta->deflink.vht_cap;
-+
-+ if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_160) {
-+ switch (vht_cap->cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK) {
- case IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ:
- return MODE_11AC_VHT160;
- case IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ:
-@@ -3296,13 +3298,13 @@ static enum wmi_phy_mode ath10k_mac_get_
- }
- }
-
-- if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
-+ if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_80)
- return MODE_11AC_VHT80;
-
-- if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
-+ if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_40)
- return MODE_11AC_VHT40;
-
-- if (sta->bandwidth == IEEE80211_STA_RX_BW_20)
-+ if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_20)
- return MODE_11AC_VHT20;
-
- return MODE_UNKNOWN;
-@@ -3329,15 +3331,15 @@ static void ath10k_peer_assoc_h_phymode(
-
- switch (band) {
- case NL80211_BAND_2GHZ:
-- if (sta->vht_cap.vht_supported &&
-+ if (sta->deflink.vht_cap.vht_supported &&
- !ath10k_peer_assoc_h_vht_masked(vht_mcs_mask)) {
-- if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
-+ if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_40)
- phymode = MODE_11AC_VHT40;
- else
- phymode = MODE_11AC_VHT20;
-- } else if (sta->ht_cap.ht_supported &&
-+ } else if (sta->deflink.ht_cap.ht_supported &&
- !ath10k_peer_assoc_h_ht_masked(ht_mcs_mask)) {
-- if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
-+ if (sta->deflink.bandwidth == IEEE80211_STA_RX_BW_40)
- phymode = MODE_11NG_HT40;
- else
- phymode = MODE_11NG_HT20;
-@@ -3354,12 +3356,12 @@ static void ath10k_peer_assoc_h_phymode(
- /*
- * Check VHT first.
- */
-- if (sta->vht_cap.vht_supported &&
-+ if (sta->deflink.vht_cap.vht_supported &&
- !ath10k_peer_assoc_h_vht_masked(vht_mcs_mask)) {
- phymode = ath10k_mac_get_phymode_vht(ar, sta);
-- } else if (sta->ht_cap.ht_supported &&
-+ } else if (sta->deflink.ht_cap.ht_supported &&
- !ath10k_peer_assoc_h_ht_masked(ht_mcs_mask)) {
-- if (sta->bandwidth >= IEEE80211_STA_RX_BW_40)
-+ if (sta->deflink.bandwidth >= IEEE80211_STA_RX_BW_40)
- phymode = MODE_11NA_HT40;
- else
- phymode = MODE_11NA_HT20;
-@@ -3373,8 +3375,8 @@ static void ath10k_peer_assoc_h_phymode(
- }
-
- ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM phymode %s legacy-supp-rates: 0x%x arvif-legacy-rates: 0x%x vht-supp: %d\n",
-- sta->addr, ath10k_wmi_phymode_str(phymode), sta->supp_rates[band],
-- arvif->bitrate_mask.control[band].legacy, sta->vht_cap.vht_supported);
-+ sta->addr, ath10k_wmi_phymode_str(phymode), sta->deflink.supp_rates[band],
-+ arvif->bitrate_mask.control[band].legacy, sta->deflink.vht_cap.vht_supported);
-
- arg->peer_phymode = phymode;
- WARN_ON(phymode == MODE_UNKNOWN);
-@@ -3677,8 +3679,8 @@ static void ath10k_bss_assoc(struct ieee
- /* ap_sta must be accessed only within rcu section which must be left
- * before calling ath10k_setup_peer_smps() which might sleep.
- */
-- ht_cap = ap_sta->ht_cap;
-- vht_cap = ap_sta->vht_cap;
-+ ht_cap = ap_sta->deflink.ht_cap;
-+ vht_cap = ap_sta->deflink.vht_cap;
-
- ret = ath10k_peer_assoc_prepare(ar, vif, ap_sta, &peer_arg);
- if (ret) {
-@@ -3713,11 +3715,11 @@ static void ath10k_bss_assoc(struct ieee
-
- ath10k_dbg(ar, ATH10K_DBG_MAC,
- "mac vdev %d up (associated) bssid %pM aid %d bandwidth %d\n",
-- arvif->vdev_id, bss_conf->bssid, bss_conf->aid, ap_sta->bandwidth);
-+ arvif->vdev_id, bss_conf->bssid, vif->cfg.aid, ap_sta->deflink.bandwidth);
-
- WARN_ON(arvif->is_up);
-
-- arvif->aid = bss_conf->aid;
-+ arvif->aid = vif->cfg.aid;
- ether_addr_copy(arvif->bssid, bss_conf->bssid);
-
- ret = ath10k_wmi_pdev_set_param(ar,
-@@ -4022,7 +4024,7 @@ static int ath10k_station_assoc(struct a
- */
- if (!reassoc) {
- ret = ath10k_setup_peer_smps(ar, arvif, sta->addr,
-- &sta->ht_cap);
-+ &sta->deflink.ht_cap);
- if (ret) {
- ath10k_warn(ar, "failed to setup peer SMPS for vdev %d: %d\n",
- arvif->vdev_id, ret);
-@@ -6916,7 +6918,7 @@ static void ath10k_recalculate_mgmt_rate
- static void ath10k_bss_info_changed(struct ieee80211_hw *hw,
- struct ieee80211_vif *vif,
- struct ieee80211_bss_conf *info,
-- u32 changed)
-+ u64 changed)
- {
- struct ath10k *ar = hw->priv;
- struct ath10k_vif *arvif = (void *)vif->drv_priv;
-@@ -6930,7 +6932,7 @@ static void ath10k_bss_info_changed(stru
- mutex_lock(&ar->conf_mutex);
-
- if (changed & BSS_CHANGED_IBSS)
-- ath10k_control_ibss(arvif, info, vif->addr);
-+ ath10k_control_ibss(arvif, vif);
-
- if (changed & BSS_CHANGED_BEACON_INT) {
- arvif->beacon_interval = info->beacon_int;
-@@ -6995,9 +6997,9 @@ static void ath10k_bss_info_changed(stru
-
- if (changed & BSS_CHANGED_SSID &&
- vif->type == NL80211_IFTYPE_AP) {
-- arvif->u.ap.ssid_len = info->ssid_len;
-- if (info->ssid_len)
-- memcpy(arvif->u.ap.ssid, info->ssid, info->ssid_len);
-+ arvif->u.ap.ssid_len = vif->cfg.ssid_len;
-+ if (vif->cfg.ssid_len)
-+ memcpy(arvif->u.ap.ssid, vif->cfg.ssid, vif->cfg.ssid_len);
- arvif->u.ap.hidden_ssid = info->hidden_ssid;
- }
-
-@@ -7074,7 +7076,7 @@ static void ath10k_bss_info_changed(stru
- }
-
- if (changed & BSS_CHANGED_ASSOC) {
-- if (info->assoc) {
-+ if (vif->cfg.assoc) {
- /* Workaround: Make sure monitor vdev is not running
- * when associating to prevent some firmware revisions
- * (e.g. 10.1 and 10.2) from crashing.
-@@ -7099,7 +7101,7 @@ static void ath10k_bss_info_changed(stru
- }
-
- if (changed & BSS_CHANGED_PS) {
-- arvif->ps = vif->bss_conf.ps;
-+ arvif->ps = vif->cfg.ps;
-
- ret = ath10k_config_ps(ar);
- if (ret)
-@@ -7699,7 +7701,7 @@ static void ath10k_sta_rc_update_wk(stru
-
- if (changed & IEEE80211_RC_SUPP_RATES_CHANGED) {
- ath10k_dbg(ar, ATH10K_DBG_STA, "mac update sta %pM supp rates, bandwidth: %d\n",
-- sta->addr, sta->bandwidth);
-+ sta->addr, sta->deflink.bandwidth);
-
- err = ath10k_station_assoc(ar, arvif->vif, sta, true);
- if (err)
-@@ -7751,10 +7753,10 @@ static int ath10k_sta_set_txpwr(struct i
- int ret = 0;
- s16 txpwr;
-
-- if (sta->txpwr.type == NL80211_TX_POWER_AUTOMATIC) {
-+ if (sta->deflink.txpwr.type == NL80211_TX_POWER_AUTOMATIC) {
- txpwr = 0;
- } else {
-- txpwr = sta->txpwr.power;
-+ txpwr = sta->deflink.txpwr.power;
- if (!txpwr)
- return -EINVAL;
- }
-@@ -7874,26 +7876,29 @@ static int ath10k_mac_validate_rate_mask
- struct ieee80211_sta *sta,
- u32 rate_ctrl_flag, u8 nss)
- {
-- if (nss > sta->rx_nss) {
-+ struct ieee80211_sta_ht_cap *ht_cap = &sta->deflink.ht_cap;
-+ struct ieee80211_sta_vht_cap *vht_cap = &sta->deflink.vht_cap;
-+
-+ if (nss > sta->deflink.rx_nss) {
- ath10k_warn(ar, "Invalid nss field, configured %u limit %u\n",
-- nss, sta->rx_nss);
-+ nss, sta->deflink.rx_nss);
- return -EINVAL;
- }
-
- if (ATH10K_HW_PREAMBLE(rate_ctrl_flag) == WMI_RATE_PREAMBLE_VHT) {
-- if (!sta->vht_cap.vht_supported) {
-+ if (!vht_cap->vht_supported) {
- ath10k_warn(ar, "Invalid VHT rate for sta %pM\n",
- sta->addr);
- return -EINVAL;
- }
- } else if (ATH10K_HW_PREAMBLE(rate_ctrl_flag) == WMI_RATE_PREAMBLE_HT) {
-- if (!sta->ht_cap.ht_supported || sta->vht_cap.vht_supported) {
-+ if (!ht_cap->ht_supported || vht_cap->vht_supported) {
- ath10k_warn(ar, "Invalid HT rate for sta %pM\n",
- sta->addr);
- return -EINVAL;
- }
- } else {
-- if (sta->ht_cap.ht_supported || sta->vht_cap.vht_supported)
-+ if (ht_cap->ht_supported || vht_cap->vht_supported)
- return -EINVAL;
- }
-
-@@ -8567,7 +8572,7 @@ static int ath10k_sta_state(struct ieee8
- * New association.
- */
- ath10k_dbg(ar, ATH10K_DBG_STA, "mac sta %pM associated, bandwidth: %d\n",
-- sta->addr, sta->bandwidth);
-+ sta->addr, sta->deflink.bandwidth);
-
- ret = ath10k_station_assoc(ar, vif, sta, false);
- if (ret)
-@@ -8580,7 +8585,7 @@ static int ath10k_sta_state(struct ieee8
- * Tdls station authorized.
- */
- ath10k_dbg(ar, ATH10K_DBG_STA, "mac tdls sta %pM authorized, bandwidth: %d\n",
-- sta->addr, sta->bandwidth);
-+ sta->addr, sta->deflink.bandwidth);
-
- ret = ath10k_station_assoc(ar, vif, sta, false);
- if (ret) {
-@@ -8721,8 +8726,8 @@ exit:
- return ret;
- }
-
--static int ath10k_conf_tx(struct ieee80211_hw *hw,
-- struct ieee80211_vif *vif, u16 ac,
-+static int ath10k_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-+ unsigned int link_id, u16 ac,
- const struct ieee80211_tx_queue_params *params)
- {
- struct ath10k *ar = hw->priv;
-@@ -9308,7 +9313,7 @@ static bool ath10k_mac_set_vht_bitrate_m
- u8 rate = arvif->vht_pfr;
-
- /* skip non vht and multiple rate peers */
-- if (!sta->vht_cap.vht_supported || arvif->vht_num_rates != 1)
-+ if (!sta->deflink.vht_cap.vht_supported || arvif->vht_num_rates != 1)
- return false;
-
- err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
-@@ -9349,7 +9354,7 @@ static void ath10k_mac_clr_bitrate_mask_
- int err;
-
- /* clear vht peers only */
-- if (arsta->arvif != arvif || !sta->vht_cap.vht_supported)
-+ if (arsta->arvif != arvif || !sta->deflink.vht_cap.vht_supported)
- return;
-
- err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
-@@ -9534,13 +9539,13 @@ static void ath10k_sta_rc_update(struct
-
- ath10k_dbg(ar, ATH10K_DBG_STA,
- "mac sta rc update for %pM changed %08x bw %d nss %d smps %d\n",
-- sta->addr, changed, sta->bandwidth, sta->rx_nss,
-- sta->smps_mode);
-+ sta->addr, changed, sta->deflink.bandwidth, sta->deflink.rx_nss,
-+ sta->deflink.smps_mode);
-
- if (changed & IEEE80211_RC_BW_CHANGED) {
- bw = WMI_PEER_CHWIDTH_20MHZ;
-
-- switch (sta->bandwidth) {
-+ switch (sta->deflink.bandwidth) {
- case IEEE80211_STA_RX_BW_20:
- bw = WMI_PEER_CHWIDTH_20MHZ;
- break;
-@@ -9555,7 +9560,7 @@ static void ath10k_sta_rc_update(struct
- break;
- default:
- ath10k_warn(ar, "Invalid bandwidth %d in rc update for %pM\n",
-- sta->bandwidth, sta->addr);
-+ sta->deflink.bandwidth, sta->addr);
- bw = WMI_PEER_CHWIDTH_20MHZ;
- break;
- }
-@@ -9564,12 +9569,12 @@ static void ath10k_sta_rc_update(struct
- }
-
- if (changed & IEEE80211_RC_NSS_CHANGED)
-- arsta->nss = sta->rx_nss;
-+ arsta->nss = sta->deflink.rx_nss;
-
- if (changed & IEEE80211_RC_SMPS_CHANGED) {
- smps = WMI_PEER_SMPS_PS_NONE;
-
-- switch (sta->smps_mode) {
-+ switch (sta->deflink.smps_mode) {
- case IEEE80211_SMPS_AUTOMATIC:
- case IEEE80211_SMPS_OFF:
- smps = WMI_PEER_SMPS_PS_NONE;
-@@ -9582,7 +9587,7 @@ static void ath10k_sta_rc_update(struct
- break;
- case IEEE80211_SMPS_NUM_MODES:
- ath10k_warn(ar, "Invalid smps %d in sta rc update for %pM\n",
-- sta->smps_mode, sta->addr);
-+ sta->deflink.smps_mode, sta->addr);
- smps = WMI_PEER_SMPS_PS_NONE;
- break;
- }
-@@ -9896,7 +9901,7 @@ ath10k_mac_change_chanctx_cnt_iter(void
- {
- struct ath10k_mac_change_chanctx_arg *arg = data;
-
-- if (rcu_access_pointer(vif->chanctx_conf) != arg->ctx)
-+ if (rcu_access_pointer(vif->bss_conf.chanctx_conf) != arg->ctx)
- return;
-
- arg->n_vifs++;
-@@ -9909,7 +9914,7 @@ ath10k_mac_change_chanctx_fill_iter(void
- struct ath10k_mac_change_chanctx_arg *arg = data;
- struct ieee80211_chanctx_conf *ctx;
-
-- ctx = rcu_access_pointer(vif->chanctx_conf);
-+ ctx = rcu_access_pointer(vif->bss_conf.chanctx_conf);
- if (ctx != arg->ctx)
- return;
-
-@@ -9982,6 +9987,7 @@ unlock:
- static int
- ath10k_mac_op_assign_vif_chanctx(struct ieee80211_hw *hw,
- struct ieee80211_vif *vif,
-+ struct ieee80211_bss_conf *link_conf,
- struct ieee80211_chanctx_conf *ctx)
- {
- struct ath10k *ar = hw->priv;
-@@ -10061,6 +10067,7 @@ err:
- static void
- ath10k_mac_op_unassign_vif_chanctx(struct ieee80211_hw *hw,
- struct ieee80211_vif *vif,
-+ struct ieee80211_bss_conf *link_conf,
- struct ieee80211_chanctx_conf *ctx)
- {
- struct ath10k *ar = hw->priv;
---- a/ath10k-5.15/txrx.c
-+++ b/ath10k-5.15/txrx.c
-@@ -260,7 +260,7 @@ int ath10k_txrx_tx_unref(struct ath10k_h
- nf = ar->debug.nf_sum[0];
- #endif
- info->status.ack_signal = nf + tx_done->ack_rssi;
-- info->status.is_valid_ack_signal = true;
-+ info->status.flags |= IEEE80211_TX_STATUS_ACK_SIGNAL_VALID;
- }
-
- if (tx_done->tx_rate_code || tx_done->tx_rate_flags || ar->ok_tx_rate_status) {
---- a/ath10k-5.15/wmi.c
-+++ b/ath10k-5.15/wmi.c
-@@ -2587,7 +2587,7 @@ wmi_process_mgmt_tx_comp(struct ath10k *
- info->flags |= IEEE80211_TX_STAT_ACK;
- info->status.ack_signal = ath10k_get_noisefloor(0, ar) +
- param->ack_rssi;
-- info->status.is_valid_ack_signal = true;
-+ info->status.flags |= IEEE80211_TX_STATUS_ACK_SIGNAL_VALID;
- }
-
- ieee80211_tx_status_irqsafe(ar->hw, msdu);
-@@ -4258,13 +4258,13 @@ void ath10k_wmi_event_host_swba(struct a
- * Once CSA counter is completed stop sending beacons until
- * actual channel switch is done
- */
-- if (arvif->vif->csa_active &&
-+ if (arvif->vif->bss_conf.csa_active &&
- ieee80211_beacon_cntdwn_is_complete(arvif->vif)) {
- ieee80211_csa_finish(arvif->vif);
- continue;
- }
-
-- bcn = ieee80211_beacon_get(ar->hw, arvif->vif);
-+ bcn = ieee80211_beacon_get(ar->hw, arvif->vif, 0);
- if (!bcn) {
- ath10k_warn(ar, "could not get mac80211 beacon, vdev_id: %i addr: %pM\n",
- arvif->vdev_id, arvif->vif->addr);
---- a/ath10k-5.15/htt_rx.c
-+++ b/ath10k-5.15/htt_rx.c
-@@ -4017,7 +4017,7 @@ ath10k_update_per_peer_tx_stats(struct a
- switch (txrate.flags) {
- case WMI_RATE_PREAMBLE_OFDM:
- if (arsta->arvif && arsta->arvif->vif)
-- conf = rcu_dereference(arsta->arvif->vif->chanctx_conf);
-+ conf = rcu_dereference(arsta->arvif->vif->bss_conf.chanctx_conf);
- if (conf && conf->def.chan->band == NL80211_BAND_5GHZ)
- arsta->tx_info.status.rates[0].idx = rate_idx - 4;
- break;
---- a/ath10k-5.15/wmi-tlv.c
-+++ b/ath10k-5.15/wmi-tlv.c
-@@ -205,7 +205,7 @@ static int ath10k_wmi_tlv_event_bcn_tx_s
- }
-
- arvif = ath10k_get_arvif(ar, vdev_id);
-- if (arvif && arvif->is_up && arvif->vif->csa_active)
-+ if (arvif && arvif->is_up && arvif->vif->bss_conf.csa_active)
- ieee80211_queue_work(ar->hw, &arvif->ap_csa_work);
-
- kfree(tb);
---- a/ath10k-5.15/core.c
-+++ b/ath10k-5.15/core.c
-@@ -4081,7 +4081,7 @@ static int ath10k_core_probe_fw(struct a
- ath10k_debug_print_board_info(ar);
- }
-
-- device_get_mac_address(ar->dev, ar->mac_addr, sizeof(ar->mac_addr));
-+ device_get_mac_address(ar->dev, ar->mac_addr);
-
- /* Try to get mac address from device node (from nvmem cell) */
- of_get_mac_address(ar->dev->of_node, ar->mac_addr);
---- a/ath10k-5.15/pci.c
-+++ b/ath10k-5.15/pci.c
-@@ -3547,8 +3547,7 @@ static void ath10k_pci_free_irq(struct a
-
- void ath10k_pci_init_napi(struct ath10k *ar)
- {
-- netif_napi_add(&ar->napi_dev, &ar->napi, ath10k_pci_napi_poll,
-- ATH10K_NAPI_BUDGET);
-+ netif_napi_add(&ar->napi_dev, &ar->napi, ath10k_pci_napi_poll);
- }
-
- static int ath10k_pci_init_irq(struct ath10k *ar)
---- a/ath10k-5.15/sdio.c
-+++ b/ath10k-5.15/sdio.c
-@@ -2531,8 +2531,7 @@ static int ath10k_sdio_probe(struct sdio
- return -ENOMEM;
- }
-
-- netif_napi_add(&ar->napi_dev, &ar->napi, ath10k_sdio_napi_poll,
-- ATH10K_NAPI_BUDGET);
-+ netif_napi_add(&ar->napi_dev, &ar->napi, ath10k_sdio_napi_poll);
-
- ath10k_dbg(ar, ATH10K_DBG_BOOT,
- "sdio new func %d vendor 0x%x device 0x%x block 0x%x/0x%x\n",
---- a/ath10k-5.15/snoc.c
-+++ b/ath10k-5.15/snoc.c
-@@ -1242,8 +1242,7 @@ static int ath10k_snoc_napi_poll(struct
-
- static void ath10k_snoc_init_napi(struct ath10k *ar)
- {
-- netif_napi_add(&ar->napi_dev, &ar->napi, ath10k_snoc_napi_poll,
-- ATH10K_NAPI_BUDGET);
-+ netif_napi_add(&ar->napi_dev, &ar->napi, ath10k_snoc_napi_poll);
- }
-
- static int ath10k_snoc_request_irq(struct ath10k *ar)
+++ /dev/null
-From e2333703373e8b81294da5d1c73c30154f75b082 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Fri, 15 Oct 2021 18:56:33 +0200
-Subject: [PATCH] ath10k: fetch (pre-)calibration data via nvmem subsystem
-
-On most embedded ath10k devices (like range extenders,
-routers, accesspoints, ...) the calibration data is
-stored in a easily accessible MTD partitions named
-"ART", "caldata", "calibration", etc...
-
-Since commit 4b361cfa8624 ("mtd: core: add OTP nvmem provider support"):
-MTD partitions and portions of them can be specified
-as potential nvmem-cells which are accessible through
-the nvmem subsystem.
-
-This feature - together with an nvmem cell definition either
-in the platform data or via device-tree allows drivers to get
-the (pre-)calibration data which is required for initializing
-the WIFI.
-
-Tested with Netgear EX6150v2 (IPQ4018)
-
-Cc: Robert Marko <robimarko@gmail.com>
-Cc: Thibaut Varene <hacks@slashdirt.org>
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
----
---- a/ath10k-5.15/core.c
-+++ b/ath10k-5.15/core.c
-@@ -13,6 +13,7 @@
- #include <linux/dmi.h>
- #include <linux/ctype.h>
- #include <linux/pm_qos.h>
-+#include <linux/nvmem-consumer.h>
- #include <asm/byteorder.h>
- #include <linux/ctype.h>
-
-@@ -1005,7 +1006,8 @@ static int ath10k_core_get_board_id_from
- }
-
- if (ar->cal_mode == ATH10K_PRE_CAL_MODE_DT ||
-- ar->cal_mode == ATH10K_PRE_CAL_MODE_FILE)
-+ ar->cal_mode == ATH10K_PRE_CAL_MODE_FILE ||
-+ ar->cal_mode == ATH10K_PRE_CAL_MODE_NVMEM)
- bmi_board_id_param = BMI_PARAM_GET_FLASH_BOARD_ID;
- else
- bmi_board_id_param = BMI_PARAM_GET_EEPROM_BOARD_ID;
-@@ -2115,7 +2117,8 @@ static int ath10k_download_and_run_otp(s
-
- /* As of now pre-cal is valid for 10_4 variants */
- if (ar->cal_mode == ATH10K_PRE_CAL_MODE_DT ||
-- ar->cal_mode == ATH10K_PRE_CAL_MODE_FILE)
-+ ar->cal_mode == ATH10K_PRE_CAL_MODE_FILE ||
-+ ar->cal_mode == ATH10K_PRE_CAL_MODE_NVMEM)
- bmi_otp_exe_param = BMI_PARAM_FLASH_SECTION_ALL;
-
- ret = ath10k_bmi_execute(ar, address, bmi_otp_exe_param, &result);
-@@ -2249,6 +2252,39 @@ struct ath10k_bss_rom_ie {
- __le32 rom_len;
- } __packed;
-
-+static int ath10k_download_cal_nvmem(struct ath10k *ar, const char *cell_name)
-+{
-+ struct nvmem_cell *cell;
-+ void *buf;
-+ size_t len;
-+ int ret;
-+
-+ cell = devm_nvmem_cell_get(ar->dev, cell_name);
-+ if (IS_ERR(cell)) {
-+ ret = PTR_ERR(cell);
-+ return ret;
-+ }
-+
-+ buf = nvmem_cell_read(cell, &len);
-+ if (IS_ERR(buf))
-+ return PTR_ERR(buf);
-+
-+ if (ar->hw_params.cal_data_len != len) {
-+ kfree(buf);
-+ ath10k_warn(ar, "invalid calibration data length in nvmem-cell '%s': %zu != %u\n",
-+ cell_name, len, ar->hw_params.cal_data_len);
-+ return -EMSGSIZE;
-+ }
-+
-+ ret = ath10k_download_board_data(ar, buf, len);
-+ kfree(buf);
-+ if (ret)
-+ ath10k_warn(ar, "failed to download calibration data from nvmem-cell '%s': %d\n",
-+ cell_name, ret);
-+
-+ return ret;
-+}
-+
- int ath10k_core_fetch_firmware_api_n(struct ath10k *ar, const char *name,
- struct ath10k_fw_file *fw_file)
- {
-@@ -2625,6 +2661,18 @@ static int ath10k_core_pre_cal_download(
- {
- int ret;
-
-+ ret = ath10k_download_cal_nvmem(ar, "pre-calibration");
-+ if (ret == 0) {
-+ ar->cal_mode = ATH10K_PRE_CAL_MODE_NVMEM;
-+ goto success;
-+ } else if (ret == -EPROBE_DEFER) {
-+ return ret;
-+ }
-+
-+ ath10k_dbg(ar, ATH10K_DBG_BOOT,
-+ "boot did not find a pre-calibration nvmem-cell, try file next: %d\n",
-+ ret);
-+
- ret = ath10k_download_cal_file(ar, ar->pre_cal_file);
- if (ret == 0) {
- ar->cal_mode = ATH10K_PRE_CAL_MODE_FILE;
-@@ -2691,6 +2739,18 @@ static int ath10k_download_cal_data(stru
- "pre cal download procedure failed, try cal file: %d\n",
- ret);
-
-+ ret = ath10k_download_cal_nvmem(ar, "calibration");
-+ if (ret == 0) {
-+ ar->cal_mode = ATH10K_CAL_MODE_NVMEM;
-+ goto done;
-+ } else if (ret == -EPROBE_DEFER) {
-+ return ret;
-+ }
-+
-+ ath10k_dbg(ar, ATH10K_DBG_BOOT,
-+ "boot did not find a calibration nvmem-cell, try file next: %d\n",
-+ ret);
-+
- ret = ath10k_download_cal_file(ar, ar->cal_file);
- if (ret == 0) {
- ar->cal_mode = ATH10K_CAL_MODE_FILE;
---- a/ath10k-5.15/core.h
-+++ b/ath10k-5.15/core.h
-@@ -1109,8 +1109,10 @@ enum ath10k_cal_mode {
- ATH10K_CAL_MODE_FILE,
- ATH10K_CAL_MODE_OTP,
- ATH10K_CAL_MODE_DT,
-+ ATH10K_CAL_MODE_NVMEM,
- ATH10K_PRE_CAL_MODE_FILE,
- ATH10K_PRE_CAL_MODE_DT,
-+ ATH10K_PRE_CAL_MODE_NVMEM,
- ATH10K_CAL_MODE_EEPROM,
- };
-
-@@ -1130,10 +1132,14 @@ static inline const char *ath10k_cal_mod
- return "otp";
- case ATH10K_CAL_MODE_DT:
- return "dt";
-+ case ATH10K_CAL_MODE_NVMEM:
-+ return "nvmem";
- case ATH10K_PRE_CAL_MODE_FILE:
- return "pre-cal-file";
- case ATH10K_PRE_CAL_MODE_DT:
- return "pre-cal-dt";
-+ case ATH10K_PRE_CAL_MODE_NVMEM:
-+ return "pre-cal-nvmem";
- case ATH10K_CAL_MODE_EEPROM:
- return "eeprom";
- }
* cleanup includes
- ath10k-5.15/Kconfig | 10 +++
- ath10k-5.15/Makefile | 1 +
- ath10k-5.15/core.c | 22 +++++++
- ath10k-5.15/core.h | 9 ++-
- ath10k-5.15/hw.h | 1 +
- ath10k-5.15/leds.c | 103 ++++++++++++++++++++++++++++++
- ath10k-5.15/leds.h | 45 +++++++++++++
- ath10k-5.15/mac.c | 1 +
- ath10k-5.15/wmi-ops.h | 32 ++++++++++
- ath10k-5.15/wmi-tlv.c | 2 +
- ath10k-5.15/wmi.c | 54 ++++++++++++++++
- ath10k-5.15/wmi.h | 35 ++++++++++
+ ath10k-6.2/Kconfig | 10 +++
+ ath10k-6.2/Makefile | 1 +
+ ath10k-6.2/core.c | 22 +++++++
+ ath10k-6.2/core.h | 9 ++-
+ ath10k-6.2/hw.h | 1 +
+ ath10k-6.2/leds.c | 103 ++++++++++++++++++++++++++++++
+ ath10k-6.2/leds.h | 45 +++++++++++++
+ ath10k-6.2/mac.c | 1 +
+ ath10k-6.2/wmi-ops.h | 32 ++++++++++
+ ath10k-6.2/wmi-tlv.c | 2 +
+ ath10k-6.2/wmi.c | 54 ++++++++++++++++
+ ath10k-6.2/wmi.h | 35 ++++++++++
12 files changed, 314 insertions(+), 1 deletion(-)
- create mode 100644 ath10k-5.15/leds.c
- create mode 100644 ath10k-5.15/leds.h
+ create mode 100644 ath10k-6.2/leds.c
+ create mode 100644 ath10k-6.2/leds.h
---- a/ath10k-5.15/Kconfig
-+++ b/ath10k-5.15/Kconfig
-@@ -66,6 +66,16 @@ config ATH10K_DEBUGFS
+--- a/ath10k-6.2/Kconfig
++++ b/ath10k-6.2/Kconfig
+@@ -67,6 +67,16 @@ config ATH10K_DEBUGFS
If unsure, say Y to make it easier to debug problems.
config ATH10K_SPECTRAL
bool "Atheros ath10k spectral scan support"
depends on ATH10K_DEBUGFS
---- a/ath10k-5.15/Makefile
-+++ b/ath10k-5.15/Makefile
+--- a/ath10k-6.2/Makefile
++++ b/ath10k-6.2/Makefile
@@ -20,6 +20,7 @@ ath10k_core-$(CONFIG_ATH10K_SPECTRAL) +=
ath10k_core-$(CONFIG_NL80211_TESTMODE) += testmode.o
ath10k_core-$(CONFIG_ATH10K_TRACING) += trace.o
ath10k_core-$(CONFIG_MAC80211_DEBUGFS) += debugfs_sta.o
ath10k_core-$(CONFIG_PM) += wow.o
ath10k_core-$(CONFIG_ATH10K_CE) += ce.o
---- a/ath10k-5.15/core.c
-+++ b/ath10k-5.15/core.c
+--- a/ath10k-6.2/core.c
++++ b/ath10k-6.2/core.c
@@ -28,6 +28,7 @@
#include "testmode.h"
#include "wmi-ops.h"
/* Disable ath10k-ct DBGLOG output by default */
unsigned int ath10k_debug_mask = ATH10K_DBG_NO_DBGLOG;
-@@ -70,6 +71,7 @@ static const struct ath10k_hw_params ath
+@@ -78,6 +79,7 @@ static const struct ath10k_hw_params ath
.dev_id = QCA988X_2_0_DEVICE_ID,
.bus = ATH10K_BUS_PCI,
.name = "qca988x hw2.0",
.patch_load_addr = QCA988X_HW_2_0_PATCH_LOAD_ADDR,
.uart_pin = 7,
.cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_ALL,
-@@ -143,6 +145,7 @@ static const struct ath10k_hw_params ath
+@@ -159,6 +161,7 @@ static const struct ath10k_hw_params ath
.dev_id = QCA9887_1_0_DEVICE_ID,
.bus = ATH10K_BUS_PCI,
.name = "qca9887 hw1.0",
.patch_load_addr = QCA9887_HW_1_0_PATCH_LOAD_ADDR,
.uart_pin = 7,
.cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_ALL,
-@@ -360,6 +363,7 @@ static const struct ath10k_hw_params ath
+@@ -400,6 +403,7 @@ static const struct ath10k_hw_params ath
.dev_id = QCA99X0_2_0_DEVICE_ID,
.bus = ATH10K_BUS_PCI,
.name = "qca99x0 hw2.0",
.patch_load_addr = QCA99X0_HW_2_0_PATCH_LOAD_ADDR,
.uart_pin = 7,
.otp_exe_param = 0x00000700,
-@@ -402,6 +406,7 @@ static const struct ath10k_hw_params ath
+@@ -446,6 +450,7 @@ static const struct ath10k_hw_params ath
.dev_id = QCA9984_1_0_DEVICE_ID,
.bus = ATH10K_BUS_PCI,
.name = "qca9984/qca9994 hw1.0",
.patch_load_addr = QCA9984_HW_1_0_PATCH_LOAD_ADDR,
.uart_pin = 7,
.cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH,
-@@ -451,6 +456,7 @@ static const struct ath10k_hw_params ath
+@@ -499,6 +504,7 @@ static const struct ath10k_hw_params ath
.dev_id = QCA9888_2_0_DEVICE_ID,
.bus = ATH10K_BUS_PCI,
.name = "qca9888 hw2.0",
.patch_load_addr = QCA9888_HW_2_0_PATCH_LOAD_ADDR,
.uart_pin = 7,
.cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH,
-@@ -3977,6 +3983,10 @@ int ath10k_core_start(struct ath10k *ar,
+@@ -4080,6 +4086,10 @@ int ath10k_core_start(struct ath10k *ar,
ath10k_wmi_check_apply_board_power_ctl_table(ar);
}
return 0;
err_hif_stop:
-@@ -4238,9 +4248,18 @@ static void ath10k_core_register_work(st
+@@ -4341,9 +4351,18 @@ static void ath10k_core_register_work(st
goto err_spectral_destroy;
}
err_spectral_destroy:
ath10k_spectral_destroy(ar);
err_debug_destroy:
-@@ -4300,6 +4319,8 @@ void ath10k_core_unregister(struct ath10
+@@ -4403,6 +4422,8 @@ void ath10k_core_unregister(struct ath10
if (!test_bit(ATH10K_FLAG_CORE_REGISTERED, &ar->dev_flags))
return;
ath10k_thermal_unregister(ar);
/* Stop spectral before unregistering from mac80211 to remove the
* relayfs debugfs file cleanly. Otherwise the parent debugfs tree
---- a/ath10k-5.15/core.h
-+++ b/ath10k-5.15/core.h
+--- a/ath10k-6.2/core.h
++++ b/ath10k-6.2/core.h
@@ -14,6 +14,7 @@
#include <linux/pci.h>
#include <linux/uuid.h>
#include "htt.h"
#include "htc.h"
-@@ -1577,6 +1578,13 @@ struct ath10k {
+@@ -1586,6 +1587,13 @@ struct ath10k {
} testmode;
struct {
/* protected by data_lock */
u32 rx_crc_err_drop;
u32 fw_crash_counter;
---- a/ath10k-5.15/hw.h
-+++ b/ath10k-5.15/hw.h
-@@ -521,6 +521,7 @@ struct ath10k_hw_params {
+--- a/ath10k-6.2/hw.h
++++ b/ath10k-6.2/hw.h
+@@ -523,6 +523,7 @@ struct ath10k_hw_params {
const char *name;
u32 patch_load_addr;
int uart_pin;
/* Type of hw cycle counter wraparound logic, for more info
--- /dev/null
-+++ b/ath10k-5.15/leds.c
++++ b/ath10k-6.2/leds.c
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2005-2011 Atheros Communications Inc.
+}
+
--- /dev/null
-+++ b/ath10k-5.15/leds.h
++++ b/ath10k-6.2/leds.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2018, The Linux Foundation. All rights reserved.
+
+#endif
+#endif /* _LEDS_H_ */
---- a/ath10k-5.15/mac.c
-+++ b/ath10k-5.15/mac.c
+--- a/ath10k-6.2/mac.c
++++ b/ath10k-6.2/mac.c
@@ -25,6 +25,7 @@
#include "wmi-tlv.h"
#include "wmi-ops.h"
/*********/
/* Rates */
---- a/ath10k-5.15/wmi-ops.h
-+++ b/ath10k-5.15/wmi-ops.h
+--- a/ath10k-6.2/wmi-ops.h
++++ b/ath10k-6.2/wmi-ops.h
@@ -228,7 +228,10 @@ struct wmi_ops {
const struct wmi_bb_timing_cfg_arg *arg);
struct sk_buff *(*gen_per_peer_per_tid_cfg)(struct ath10k *ar,
static inline int
ath10k_wmi_dbglog_cfg(struct ath10k *ar, u64 module_enable, u32 log_level)
{
---- a/ath10k-5.15/wmi-tlv.c
-+++ b/ath10k-5.15/wmi-tlv.c
-@@ -4594,6 +4594,8 @@ static const struct wmi_ops wmi_tlv_ops
+--- a/ath10k-6.2/wmi-tlv.c
++++ b/ath10k-6.2/wmi-tlv.c
+@@ -4601,6 +4601,8 @@ static const struct wmi_ops wmi_tlv_ops
.gen_echo = ath10k_wmi_tlv_op_gen_echo,
.gen_vdev_spectral_conf = ath10k_wmi_tlv_op_gen_vdev_spectral_conf,
.gen_vdev_spectral_enable = ath10k_wmi_tlv_op_gen_vdev_spectral_enable,
};
static const struct wmi_peer_flags_map wmi_tlv_peer_flags_map = {
---- a/ath10k-5.15/wmi.c
-+++ b/ath10k-5.15/wmi.c
-@@ -8413,6 +8413,49 @@ ath10k_wmi_op_gen_peer_set_param(struct
+--- a/ath10k-6.2/wmi.c
++++ b/ath10k-6.2/wmi.c
+@@ -8438,6 +8438,49 @@ ath10k_wmi_op_gen_peer_set_param(struct
return skb;
}
static struct sk_buff *
ath10k_wmi_op_gen_set_psmode(struct ath10k *ar, u32 vdev_id,
enum wmi_sta_ps_mode psmode)
-@@ -10244,6 +10287,9 @@ static const struct wmi_ops wmi_ops = {
+@@ -10269,6 +10312,9 @@ static const struct wmi_ops wmi_ops = {
.fw_stats_fill = ath10k_wmi_main_op_fw_stats_fill,
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
.gen_echo = ath10k_wmi_op_gen_echo,
/* .gen_bcn_tmpl not implemented */
/* .gen_prb_tmpl not implemented */
/* .gen_p2p_go_bcn_ie not implemented */
-@@ -10314,6 +10360,8 @@ static const struct wmi_ops wmi_10_1_ops
+@@ -10339,6 +10385,8 @@ static const struct wmi_ops wmi_10_1_ops
.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill,
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
.gen_echo = ath10k_wmi_op_gen_echo,
/* .gen_bcn_tmpl not implemented */
/* .gen_prb_tmpl not implemented */
/* .gen_p2p_go_bcn_ie not implemented */
-@@ -10393,6 +10441,8 @@ static const struct wmi_ops wmi_10_2_ops
+@@ -10418,6 +10466,8 @@ static const struct wmi_ops wmi_10_2_ops
.gen_delba_send = ath10k_wmi_op_gen_delba_send,
.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill,
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
/* .gen_pdev_enable_adaptive_cca not implemented */
};
-@@ -10464,6 +10514,8 @@ static const struct wmi_ops wmi_10_2_4_o
+@@ -10489,6 +10539,8 @@ static const struct wmi_ops wmi_10_2_4_o
ath10k_wmi_op_gen_pdev_enable_adaptive_cca,
.get_vdev_subtype = ath10k_wmi_10_2_4_op_get_vdev_subtype,
.gen_bb_timing = ath10k_wmi_10_2_4_op_gen_bb_timing,
/* .gen_bcn_tmpl not implemented */
/* .gen_prb_tmpl not implemented */
/* .gen_p2p_go_bcn_ie not implemented */
-@@ -10546,6 +10598,8 @@ static const struct wmi_ops wmi_10_4_ops
+@@ -10571,6 +10623,8 @@ static const struct wmi_ops wmi_10_4_ops
.gen_pdev_bss_chan_info_req = ath10k_wmi_10_2_op_gen_pdev_bss_chan_info,
.gen_echo = ath10k_wmi_op_gen_echo,
.gen_pdev_get_tpc_config = ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config,
};
int ath10k_wmi_attach(struct ath10k *ar)
---- a/ath10k-5.15/wmi.h
-+++ b/ath10k-5.15/wmi.h
+--- a/ath10k-6.2/wmi.h
++++ b/ath10k-6.2/wmi.h
@@ -3133,6 +3133,41 @@ enum wmi_10_4_feature_mask {
};