struct sk_buff *skb);
 void ieee80211_add_aid_request_ie(struct ieee80211_sub_if_data *sdata,
                                  struct sk_buff *skb);
+u8 *ieee80211_ie_build_s1g_cap(u8 *pos, struct ieee80211_sta_s1g_cap *s1g_cap);
 
 /* channel management */
 bool ieee80211_chandef_ht_oper(const struct ieee80211_ht_operation *ht_oper,
 
        rate_flags = ieee80211_chandef_rate_flags(chandef);
        shift = ieee80211_chandef_get_shift(chandef);
 
+       /* For direct scan add S1G IE and consider its override bits */
+       if (band == NL80211_BAND_S1GHZ) {
+               if (end - pos < 2 + sizeof(struct ieee80211_s1g_cap))
+                       goto out_err;
+               pos = ieee80211_ie_build_s1g_cap(pos, &sband->s1g_cap);
+               goto done;
+       }
+
        num_rates = 0;
        for (i = 0; i < sband->n_bitrates; i++) {
                if ((BIT(i) & rate_mask) == 0)
        return pos;
 }
 
+u8 *ieee80211_ie_build_s1g_cap(u8 *pos, struct ieee80211_sta_s1g_cap *s1g_cap)
+{
+       *pos++ = WLAN_EID_S1G_CAPABILITIES;
+       *pos++ = sizeof(struct ieee80211_s1g_cap);
+       memset(pos, 0, sizeof(struct ieee80211_s1g_cap));
+
+       memcpy(pos, &s1g_cap->cap, sizeof(s1g_cap->cap));
+       pos += sizeof(s1g_cap->cap);
+
+       memcpy(pos, &s1g_cap->nss_mcs, sizeof(s1g_cap->nss_mcs));
+       pos += sizeof(s1g_cap->nss_mcs);
+
+       return pos;
+}
+
 u8 *ieee80211_ie_build_ht_cap(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
                              u16 cap)
 {