diff --git a/drivers/net/wireless/bcmdhd/dhd_linux.c b/drivers/net/wireless/bcmdhd/dhd_linux.c index a731a535cac1f1b96c3724bdc69a552e30157da4..dcc8704f3f6b362b6111b12a141cb330cd13184f 100644 --- a/drivers/net/wireless/bcmdhd/dhd_linux.c +++ b/drivers/net/wireless/bcmdhd/dhd_linux.c @@ -152,6 +152,7 @@ extern bool ap_fw_loaded; /* enable HOSTIP cache update from the host side when an eth0:N is up */ #define AOE_IP_ALIAS_SUPPORT 1 +#define RSSI_ADJUST_THRESHOLD -50 /* rssi threshold to be adjust */ #ifdef BCM_FD_AGGR #include <bcm_rpc.h> @@ -3624,6 +3625,7 @@ dhd_ioctl_entry(struct net_device *net, struct ifreq *ifr, int cmd) int ret; void *local_buf = NULL; u16 buflen = 0; + scb_val_t *scb_val = NULL; DHD_OS_WAKE_LOCK(&dhd->pub); DHD_PERIM_LOCK(&dhd->pub); @@ -3752,6 +3754,18 @@ dhd_ioctl_entry(struct net_device *net, struct ifreq *ifr, int cmd) if (!bcmerror && buflen && local_buf && ioc.buf) { DHD_PERIM_UNLOCK(&dhd->pub); + if(WLC_GET_RSSI == ioc.cmd) + { + scb_val = (scb_val_t *)local_buf; + if (scb_val->val <= RSSI_ADJUST_THRESHOLD) + { + scb_val->val += 4; /* rssi adjust: below -50dbm adjust 4dbm */ + } + else + { + scb_val->val += 2; /* rssi adjust: above -50dbm adjust 2dbm */ + } + } if (copy_to_user(ioc.buf, local_buf, buflen)) bcmerror = -EFAULT; DHD_PERIM_LOCK(&dhd->pub);