*     and probe responses.  This value should be set if the driver
  *     wishes to limit the number of csa counters. Default (0) means
  *     infinite.
+ * @max_adj_channel_rssi_comp: max offset of between the channel on which the
+ *     frame was sent and the channel on which the frame was heard for which
+ *     the reported rssi is still valid. If a driver is able to compensate the
+ *     low rssi when a frame is heard on different channel, then it should set
+ *     this variable to the maximal offset for which it can compensate.
+ *     This value should be set in MHz.
  */
 struct wiphy {
        /* assign these fields before you register the wiphy */
        u16 max_ap_assoc_sta;
 
        u8 max_num_csa_counters;
+       u8 max_adj_channel_rssi_comp;
 
        char priv[0] __aligned(NETDEV_ALIGN);
 };
 
        struct cfg80211_bss_ies *ies;
        struct ieee80211_channel *channel;
        struct cfg80211_internal_bss tmp = {}, *res;
+       bool signal_valid;
 
        if (WARN_ON(!wiphy))
                return NULL;
        rcu_assign_pointer(tmp.pub.beacon_ies, ies);
        rcu_assign_pointer(tmp.pub.ies, ies);
 
-       res = cfg80211_bss_update(wiphy_to_rdev(wiphy), &tmp,
-                                 rx_channel == channel);
+       signal_valid = abs(rx_channel->center_freq - channel->center_freq) <=
+               wiphy->max_adj_channel_rssi_comp;
+       res = cfg80211_bss_update(wiphy_to_rdev(wiphy), &tmp, signal_valid);
        if (!res)
                return NULL;
 
        struct cfg80211_internal_bss tmp = {}, *res;
        struct cfg80211_bss_ies *ies;
        struct ieee80211_channel *channel;
+       bool signal_valid;
        size_t ielen = len - offsetof(struct ieee80211_mgmt,
                                      u.probe_resp.variable);
 
        tmp.pub.beacon_interval = le16_to_cpu(mgmt->u.probe_resp.beacon_int);
        tmp.pub.capability = le16_to_cpu(mgmt->u.probe_resp.capab_info);
 
-       res = cfg80211_bss_update(wiphy_to_rdev(wiphy), &tmp,
-                                 rx_channel == channel);
+       signal_valid = abs(rx_channel->center_freq - channel->center_freq) <=
+               wiphy->max_adj_channel_rssi_comp;
+       res = cfg80211_bss_update(wiphy_to_rdev(wiphy), &tmp, signal_valid);
        if (!res)
                return NULL;