summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/bcmdhd/wl_cfg80211.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/bcmdhd/wl_cfg80211.c')
-rw-r--r--drivers/net/wireless/bcmdhd/wl_cfg80211.c21
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;