summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbibhayr <bibhayr@nvidia.com>2013-05-15 12:17:19 +0530
committerRiham Haidar <rhaidar@nvidia.com>2013-05-21 14:38:06 -0700
commitfa0b77c293642a6ac1559668fcb0b48b0b7d7925 (patch)
tree9556deeb7807fd0f47f0eaace39e7eef817f49fa
parent430b2d32b849977f268528ee58ee6b9f917cf449 (diff)
net: wireless: bcmdhd: new driver version 1.28.28.2
- Fixed Miracast discovery issue after P2P disconnection. - Fixed P2P action frame issue when multiple P2P IEs are in the probe response. - BW allocation for VSDB - Support offset for RSSI report Bug 1282745 Change-Id: Ie55a05c51e95941e09e5c582c4936909f490575e Signed-off-by: bibhayr <bibhayr@nvidia.com> Reviewed-on: http://git-master/r/#change,228838 (cherry picked from commit 6147573414026a4ff978885f38e4842de55fb4fe) Reviewed-on: http://git-master/r/230104 Reviewed-by: Narayan Reddy <narayanr@nvidia.com> Tested-by: Narayan Reddy <narayanr@nvidia.com> Reviewed-by: Rakesh Kumar <krakesh@nvidia.com> Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
-rw-r--r--drivers/net/wireless/bcmdhd/Makefile2
-rw-r--r--drivers/net/wireless/bcmdhd/include/epivers.h6
-rw-r--r--drivers/net/wireless/bcmdhd/wl_cfg80211.c21
-rw-r--r--drivers/net/wireless/bcmdhd/wl_cfgp2p.c7
-rw-r--r--drivers/net/wireless/bcmdhd/wldev_common.c32
5 files changed, 56 insertions, 12 deletions
diff --git a/drivers/net/wireless/bcmdhd/Makefile b/drivers/net/wireless/bcmdhd/Makefile
index 351bed2ab49d..7361e03b16f8 100644
--- a/drivers/net/wireless/bcmdhd/Makefile
+++ b/drivers/net/wireless/bcmdhd/Makefile
@@ -38,7 +38,9 @@ DHDCFLAGS += -DCUSTOM_ROAM_DELTA_SETTING=15
DHDCFLAGS += -DCUSTOM_KEEP_ALIVE_SETTING=28000
#DHDCFLAGS += -DCUSTOM_PNO_EVENT_LOCK_xTIME=7
DHDCFLAGS += -DQUEUE_BW
+#DHDCFLAGS += -DVSDB_BW_ALLOCATE_ENABLE
DHDCFLAGS += -DP2P_DISCOVERY_WAR
+#DHDCFLAGS += -DRSSI_OFFSET=5
#endif
ifeq ($(CONFIG_BCMDHD_HW_OOB),y)
diff --git a/drivers/net/wireless/bcmdhd/include/epivers.h b/drivers/net/wireless/bcmdhd/include/epivers.h
index 296a3cc8093b..e1bf260e34e8 100644
--- a/drivers/net/wireless/bcmdhd/include/epivers.h
+++ b/drivers/net/wireless/bcmdhd/include/epivers.h
@@ -32,17 +32,17 @@
#define EPI_RC_NUMBER 28
-#define EPI_INCREMENTAL_NUMBER 1
+#define EPI_INCREMENTAL_NUMBER 2
#define EPI_BUILD_NUMBER 1
-#define EPI_VERSION 1, 28, 28, 1
+#define EPI_VERSION 1, 28, 28, 2
#define EPI_VERSION_NUM 0x011c1c01
#define EPI_VERSION_DEV 1.28.28
/* Driver Version String, ASCII, 32 chars max */
-#define EPI_VERSION_STR "1.28.28.1 (r388498)"
+#define EPI_VERSION_STR "1.28.28.2 (r388498)"
#endif /* _epivers_h_ */
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;
diff --git a/drivers/net/wireless/bcmdhd/wl_cfgp2p.c b/drivers/net/wireless/bcmdhd/wl_cfgp2p.c
index a668ebc71dc3..2023ede36109 100644
--- a/drivers/net/wireless/bcmdhd/wl_cfgp2p.c
+++ b/drivers/net/wireless/bcmdhd/wl_cfgp2p.c
@@ -2210,7 +2210,6 @@ wl_cfgp2p_find_attrib_in_all_p2p_Ies(u8 *parse, u32 len, u32 attrib)
u8 *
wl_cfgp2p_retreive_p2p_dev_addr(wl_bss_info_t *bi, u32 bi_length)
{
- wifi_p2p_ie_t * p2p_ie = NULL;
u8 *capability = NULL;
bool p2p_go = 0;
u8 *ptr = NULL;
@@ -2228,11 +2227,13 @@ wl_cfgp2p_retreive_p2p_dev_addr(wl_bss_info_t *bi, u32 bi_length)
}
/* In probe responses, DEVICE INFO attribute will be present */
- if (!(ptr = wl_cfgp2p_retreive_p2pattrib(p2p_ie, P2P_SEID_DEV_INFO))) {
+ if (!(ptr = wl_cfgp2p_find_attrib_in_all_p2p_Ies(((u8 *) bi) + bi->ie_offset,
+ bi->ie_length, P2P_SEID_DEV_INFO))) {
/* If DEVICE_INFO is not found, this might be a beacon frame.
* check for DEVICE_ID in the beacon frame.
*/
- ptr = wl_cfgp2p_retreive_p2pattrib(p2p_ie, P2P_SEID_DEV_ID);
+ ptr = wl_cfgp2p_find_attrib_in_all_p2p_Ies(((u8 *) bi) + bi->ie_offset,
+ bi->ie_length, P2P_SEID_DEV_ID);
}
if (!ptr)
diff --git a/drivers/net/wireless/bcmdhd/wldev_common.c b/drivers/net/wireless/bcmdhd/wldev_common.c
index 2ae0007b48f3..92be39632d3d 100644
--- a/drivers/net/wireless/bcmdhd/wldev_common.c
+++ b/drivers/net/wireless/bcmdhd/wldev_common.c
@@ -342,6 +342,10 @@ int wldev_miracast_tuning(
int mode = 0;
int ampdu_mpdu;
int roam_off;
+#ifdef VSDB_BW_ALLOCATE_ENABLE
+ int mchan_algo;
+ int mchan_bw;
+#endif /* VSDB_BW_ALLOCATE_ENABLE */
if (sscanf(command, "%*s %d", &mode) != 1) {
WLDEV_ERROR(("Failed to get mode\n"));
@@ -358,6 +362,10 @@ int wldev_miracast_tuning(
#elif defined(DISABLE_BUILTIN_ROAM)
roam_off = 1; /* roam disable */
#endif
+#ifdef VSDB_BW_ALLOCATE_ENABLE
+ mchan_algo = 0; /* Default */
+ mchan_bw = 50; /* 50:50 */
+#endif /* VSDB_BW_ALLOCATE_ENABLE */
}
else if (mode == 1) {
/* Miracast source mode */
@@ -365,6 +373,10 @@ int wldev_miracast_tuning(
#if defined(ROAM_ENABLE) || defined(DISABLE_BUILTIN_ROAM)
roam_off = 1; /* roam disable */
#endif
+#ifdef VSDB_BW_ALLOCATE_ENABLE
+ mchan_algo = 1; /* BW based */
+ mchan_bw = 25; /* 25:75 */
+#endif /* VSDB_BW_ALLOCATE_ENABLE */
}
else if (mode == 2) {
/* Miracast sink/PC Gaming mode */
@@ -372,6 +384,10 @@ int wldev_miracast_tuning(
#if defined(ROAM_ENABLE) || defined(DISABLE_BUILTIN_ROAM)
roam_off = 1; /* roam disable */
#endif
+#ifdef VSDB_BW_ALLOCATE_ENABLE
+ mchan_algo = 0; /* Default */
+ mchan_bw = 50; /* 50:50 */
+#endif /* VSDB_BW_ALLOCATE_ENABLE */
}
else {
WLDEV_ERROR(("Unknown mode: %d\n", mode));
@@ -395,6 +411,22 @@ int wldev_miracast_tuning(
}
#endif /* ROAM_ENABLE || DISABLE_BUILTIN_ROAM */
+#ifdef VSDB_BW_ALLOCATE_ENABLE
+ error = wldev_iovar_setint(dev, "mchan_algo", mchan_algo);
+ if (error) {
+ WLDEV_ERROR(("Failed to set mchan_algo: mode:%d, error:%d\n",
+ mode, error));
+ return -1;
+ }
+
+ error = wldev_iovar_setint(dev, "mchan_bw", mchan_bw);
+ if (error) {
+ WLDEV_ERROR(("Failed to set mchan_bw: mode:%d, error:%d\n",
+ mode, error));
+ return -1;
+ }
+#endif /* VSDB_BW_ALLOCATE_ENABLE */
+
return error;
}