}
 
        if (changed & BSS_CHANGED_PS) {
-               arvif->ps = vif->bss_conf.ps;
+               arvif->ps = vif->cfg.ps;
 
                ret = ath10k_config_ps(ar);
                if (ret)
 
 
        if (changed & BSS_CHANGED_PS &&
            ar->ab->hw_params.supports_sta_ps) {
-               arvif->ps = vif->bss_conf.ps;
+               arvif->ps = vif->cfg.ps;
 
                ret = ath11k_mac_config_ps(ar);
                if (ret)
 
        list_for_each_entry(tmp, &wcn->vif_list, list) {
                vif = wcn36xx_priv_to_vif(tmp);
                if (enable && !wcn->sw_scan) {
-                       if (vif->bss_conf.ps) /* ps allowed ? */
+                       if (vif->cfg.ps) /* ps allowed ? */
                                wcn36xx_pmc_enter_bmps_state(wcn, vif);
                } else {
                        wcn36xx_pmc_exit_bmps_state(wcn, vif);
 
 
        cmd->flags |= cpu_to_le16(POWER_FLAGS_POWER_SAVE_ENA_MSK);
 
-       if (!vif->bss_conf.ps || !mvmvif->pm_enabled)
+       if (!vif->cfg.ps || !mvmvif->pm_enabled)
                return;
 
        if (iwl_mvm_vif_low_latency(mvmvif) && vif->p2p &&
 
        mvmvif->bf_data.ba_enabled = !(!mvmvif->pm_enabled ||
                                       mvm->ps_disabled ||
-                                      !vif->bss_conf.ps ||
+                                      !vif->cfg.ps ||
                                       iwl_mvm_vif_low_latency(mvmvif));
 
        return _iwl_mvm_enable_beacon_filter(mvm, vif, &cmd, 0);
 
        int index = rate->index;
        bool cam = (iwlmvm_mod_params.power_scheme == IWL_POWER_SCHEME_CAM);
        bool sta_ps_disabled = (vif->type == NL80211_IFTYPE_STATION &&
-                               !vif->bss_conf.ps);
+                               !vif->cfg.ps);
 
        IWL_DEBUG_RATE(mvm, "cam: %d sta_ps_disabled %d\n",
                       cam, sta_ps_disabled);
 
                              */
        } req = {
                .bss_idx = mvif->idx,
-               .ps_state = vif->bss_conf.ps ? 2 : 0,
+               .ps_state = vif->cfg.ps ? 2 : 0,
        };
 
        if (vif->type != NL80211_IFTYPE_STATION)
 
                .ps = {
                        .tag = cpu_to_le16(UNI_BSS_INFO_PS),
                        .len = cpu_to_le16(sizeof(struct ps_tlv)),
-                       .ps_state = vif->bss_conf.ps ? 2 : 0,
+                       .ps_state = vif->cfg.ps ? 2 : 0,
                },
        };
 
 
                        /* It is useless to enable PS if channels are the same. */
                        if (enable_ps)
                                *enable_ps = false;
-                       if (vif->cfg.assoc && vif->bss_conf.ps)
+                       if (vif->cfg.assoc && vif->cfg.ps)
                                dev_info(wvif->wdev->dev, "ignoring requested PS mode");
                        return -1;
                }
                        return 30;
        }
        if (enable_ps)
-               *enable_ps = vif->bss_conf.ps;
-       if (vif->cfg.assoc && vif->bss_conf.ps)
+               *enable_ps = vif->cfg.ps;
+       if (vif->cfg.assoc && vif->cfg.ps)
                return conf->dynamic_ps_timeout;
        else
                return -1;
 
        }
 
        if (changed & BSS_CHANGED_PS) {
-               if ((bss_conf->ps) &&
+               if (vif->cfg.ps &&
                    test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags) &&
                    !test_bit(WLVIF_FLAG_IN_PS, &wlvif->flags)) {
                        int ps_mode;
                        if (ret < 0)
                                wl1271_warning("enter %s ps failed %d",
                                               ps_mode_str, ret);
-               } else if (!bss_conf->ps &&
+               } else if (!vif->cfg.ps &&
                           test_bit(WLVIF_FLAG_IN_PS, &wlvif->flags)) {
                        wl1271_debug(DEBUG_PSM, "auto ps disabled");
 
 
  * @cqm_rssi_high: Connection quality monitor RSSI upper threshold.
  * @cqm_rssi_hyst: Connection quality monitor RSSI hysteresis
  * @qos: This is a QoS-enabled BSS.
- * @ps: power-save mode (STA only). This flag is NOT affected by
- *     offchannel/dynamic_ps operations.
  * @hidden_ssid: The SSID of the current vif is hidden. Only valid in AP-mode.
  * @txpower: TX power in dBm.  INT_MIN means not configured.
  * @txpower_type: TX power adjustment used to control per packet Transmit
        struct cfg80211_chan_def chandef;
        struct ieee80211_mu_group_data mu_group;
        bool qos;
-       bool ps;
        bool hidden_ssid;
        int txpower;
        enum nl80211_tx_power_setting txpower_type;
  * @assoc: association status
  * @ibss_joined: indicates whether this station is part of an IBSS or not
  * @ibss_creator: indicates if a new IBSS network is being created
+ * @ps: power-save mode (STA only). This flag is NOT affected by
+ *     offchannel/dynamic_ps operations.
  * @aid: association ID number, valid only when @assoc is true
  * @arp_addr_list: List of IPv4 addresses for hardware ARP filtering. The
  *     may filter ARP queries targeted for other addresses than listed here.
        /* association related data */
        bool assoc, ibss_joined;
        bool ibss_creator;
+       bool ps;
        u16 aid;
 
        __be32 arp_addr_list[IEEE80211_BSS_ARP_ADDR_LIST_LEN];
 
 
 #define BSS_CHANGED_VIF_CFG_FLAGS (BSS_CHANGED_ASSOC |\
                                   BSS_CHANGED_IDLE |\
+                                  BSS_CHANGED_PS |\
                                   BSS_CHANGED_IBSS |\
                                   BSS_CHANGED_ARP_FILTER |\
                                   BSS_CHANGED_SSID)
 
 {
        bool ps_allowed = ieee80211_powersave_allowed(sdata);
 
-       if (sdata->vif.bss_conf.ps != ps_allowed) {
-               sdata->vif.bss_conf.ps = ps_allowed;
-               ieee80211_link_info_change_notify(sdata, &sdata->deflink,
-                                                 BSS_CHANGED_PS);
+       if (sdata->vif.cfg.ps != ps_allowed) {
+               sdata->vif.cfg.ps = ps_allowed;
+               ieee80211_vif_cfg_change_notify(sdata, BSS_CHANGED_PS);
        }
 }
 
 
                __dynamic_array(u8, ssid, sdata->vif.cfg.ssid_len)
                __field(int, s1g)
                __field(bool, idle)
+               __field(bool, ps)
        ),
 
        TP_fast_assign(
                __entry->assoc = sdata->vif.cfg.assoc;
                __entry->ibss_joined = sdata->vif.cfg.ibss_joined;
                __entry->ibss_creator = sdata->vif.cfg.ibss_creator;
+               __entry->ps = sdata->vif.cfg.ps;
 
                __entry->arp_addr_cnt = sdata->vif.cfg.arp_addr_cnt;
                memcpy(__get_dynamic_array(arp_addr_list),
                __field(u32, channel_cfreq1)
                __field(u32, channel_cfreq1_offset)
                __field(bool, qos)
-               __field(bool, ps)
                __field(bool, hidden_ssid)
                __field(int, txpower)
                __field(u8, p2p_oppps_ctwindow)
                __entry->channel_cfreq1 = link_conf->chandef.center_freq1;
                __entry->channel_cfreq1_offset = link_conf->chandef.freq1_offset;
                __entry->qos = link_conf->qos;
-               __entry->ps = link_conf->ps;
                __entry->hidden_ssid = link_conf->hidden_ssid;
                __entry->txpower = link_conf->txpower;
                __entry->p2p_oppps_ctwindow = link_conf->p2p_noa_attr.oppps_ctwindow;