diff options
Diffstat (limited to 'drivers/net/wireless/bcmdhd/wl_cfg80211.c')
-rw-r--r-- | drivers/net/wireless/bcmdhd/wl_cfg80211.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/drivers/net/wireless/bcmdhd/wl_cfg80211.c b/drivers/net/wireless/bcmdhd/wl_cfg80211.c index d33821da82d6..4a3c1229be4a 100644 --- a/drivers/net/wireless/bcmdhd/wl_cfg80211.c +++ b/drivers/net/wireless/bcmdhd/wl_cfg80211.c @@ -188,9 +188,6 @@ static const struct ieee80211_regdomain brcm_regdom = { #define WL_AKM_SUITE_MFP_PSK 0x000FAC06 #endif /* MFP */ -#ifndef RSSI_OFFSET -#define RSSI_OFFSET 0 -#endif /* * cfg80211_ops api/callback list */ @@ -482,6 +479,18 @@ wl_sdo_proto_t wl_sdo_protos [] = { }; #endif +#ifdef RSSI_OFFSET +static s32 wl_rssi_offset(s32 rssi) +{ + rssi += RSSI_OFFSET; + if (rssi > 0) + rssi = 0; + return rssi; +} +#else +#define wl_rssi_offset(x) x +#endif + #define CHECK_SYS_UP(wlpriv) \ do { \ struct net_device *ndev = wl_to_prmry_ndev(wlpriv); \ @@ -3635,7 +3644,7 @@ wl_cfg80211_get_station(struct wiphy *wiphy, struct net_device *dev, WL_ERR(("Could not get rssi (%d)\n", err)); goto get_station_err; } - rssi = dtoh32(scb_val.val) + RSSI_OFFSET; + rssi = wl_rssi_offset(dtoh32(scb_val.val)); sinfo->filled |= STATION_INFO_SIGNAL; sinfo->signal = rssi; WL_DBG(("RSSI %d dBm\n", rssi)); @@ -6341,7 +6350,7 @@ static s32 wl_inform_single_bss(struct wl_priv *wl, struct wl_bss_info *bi, u8 i kfree(notif_bss_info); return -EINVAL; } - notif_bss_info->rssi = dtoh16(bi->RSSI) + RSSI_OFFSET; + notif_bss_info->rssi = wl_rssi_offset(dtoh16(bi->RSSI)); memcpy(mgmt->bssid, &bi->BSSID, ETHER_ADDR_LEN); mgmt_type = wl->active_scan ? IEEE80211_STYPE_PROBE_RESP : IEEE80211_STYPE_BEACON; @@ -9968,7 +9977,7 @@ wl_notify_device_discovery(struct wl_priv *wl, struct net_device *ndev, channel = bi->ctl_ch ? bi->ctl_ch : CHSPEC_CHANNEL(wl_chspec_driver_to_host(bi->chanspec)); info.freq = wl_cfg80211_channel_to_freq(channel); - info.rssi = dtoh16(bi->RSSI) + RSSI_OFFSET; + info.rssi = wl_rssi_offset(dtoh16(bi->RSSI)); memcpy(info.bssid, &bi->BSSID, ETH_ALEN); info.ie_len = buflen; |