* @BSS_CHANGED_FTM_RESPONDER: fime timing reasurement request responder
  *     functionality changed for this BSS (AP mode).
  * @BSS_CHANGED_TWT: TWT status changed
+ * @BSS_CHANGED_HE_OBSS_PD: OBSS Packet Detection status changed.
  *
  */
 enum ieee80211_bss_change {
        BSS_CHANGED_MCAST_RATE          = 1<<25,
        BSS_CHANGED_FTM_RESPONDER       = 1<<26,
        BSS_CHANGED_TWT                 = 1<<27,
+       BSS_CHANGED_HE_OBSS_PD          = 1<<28,
 
        /* when adding here, make sure to change ieee80211_reconfig */
 };
  * @profile_periodicity: the least number of beacon frames need to be received
  *     in order to discover all the nontransmitted BSSIDs in the set.
  * @he_operation: HE operation information of the AP we are connected to
+ * @he_obss_pd: OBSS Packet Detection parameters.
  */
 struct ieee80211_bss_conf {
        const u8 *bssid;
        bool ema_ap;
        u8 profile_periodicity;
        struct ieee80211_he_operation he_operation;
+       struct ieee80211_he_obss_pd he_obss_pd;
 };
 
 /**
 
                      BSS_CHANGED_SSID |
                      BSS_CHANGED_P2P_PS |
                      BSS_CHANGED_TXPOWER |
-                     BSS_CHANGED_TWT;
+                     BSS_CHANGED_TWT |
+                     BSS_CHANGED_HE_OBSS_PD;
        int err;
        int prev_beacon_int;
 
        sdata->vif.bss_conf.enable_beacon = true;
        sdata->vif.bss_conf.allow_p2p_go_ps = sdata->vif.p2p;
        sdata->vif.bss_conf.twt_responder = params->twt_responder;
+       memcpy(&sdata->vif.bss_conf.he_obss_pd, ¶ms->he_obss_pd,
+              sizeof(struct ieee80211_he_obss_pd));
 
        sdata->vif.bss_conf.ssid_len = params->ssid_len;
        if (params->ssid_len)
 
 
        vif->bss_conf.he_operation = *he_op_ie_elem;
 }
+
+void
+ieee80211_he_spr_ie_to_bss_conf(struct ieee80211_vif *vif,
+                               const struct ieee80211_he_spr *he_spr_ie_elem)
+{
+       struct ieee80211_he_obss_pd *he_obss_pd =
+                                       &vif->bss_conf.he_obss_pd;
+       const u8 *data = he_spr_ie_elem->optional;
+
+       memset(he_obss_pd, 0, sizeof(*he_obss_pd));
+
+       if (!he_spr_ie_elem)
+               return;
+
+       if (he_spr_ie_elem->he_sr_control &
+           IEEE80211_HE_SPR_NON_SRG_OFFSET_PRESENT)
+               data++;
+       if (he_spr_ie_elem->he_sr_control &
+           IEEE80211_HE_SPR_SRG_INFORMATION_PRESENT) {
+               he_obss_pd->max_offset = *data++;
+               he_obss_pd->min_offset = *data++;
+               he_obss_pd->enable = true;
+       }
+}
 
                                  struct ieee80211_supported_band *sband,
                                  const u8 *he_cap_ie, u8 he_cap_len,
                                  struct sta_info *sta);
+void
+ieee80211_he_spr_ie_to_bss_conf(struct ieee80211_vif *vif,
+                               const struct ieee80211_he_spr *he_spr_ie_elem);
 
 void
 ieee80211_he_op_ie_to_bss_conf(struct ieee80211_vif *vif,
 
                        bss_conf->uora_ocw_range = elems.uora_element[0];
 
                ieee80211_he_op_ie_to_bss_conf(&sdata->vif, elems.he_operation);
+               ieee80211_he_spr_ie_to_bss_conf(&sdata->vif, elems.he_spr);
                /* TODO: OPEN: what happens if BSS color disable is set? */
        }