From fa0b77c293642a6ac1559668fcb0b48b0b7d7925 Mon Sep 17 00:00:00 2001 From: bibhayr Date: Wed, 15 May 2013 12:17:19 +0530 Subject: 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 Reviewed-on: http://git-master/r/#change,228838 (cherry picked from commit 6147573414026a4ff978885f38e4842de55fb4fe) Reviewed-on: http://git-master/r/230104 Reviewed-by: Narayan Reddy Tested-by: Narayan Reddy Reviewed-by: Rakesh Kumar Reviewed-by: Bharat Nihalani --- drivers/net/wireless/bcmdhd/Makefile | 2 ++ drivers/net/wireless/bcmdhd/include/epivers.h | 6 ++--- drivers/net/wireless/bcmdhd/wl_cfg80211.c | 21 +++++++++++++----- drivers/net/wireless/bcmdhd/wl_cfgp2p.c | 7 +++--- drivers/net/wireless/bcmdhd/wldev_common.c | 32 +++++++++++++++++++++++++++ 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; } -- cgit v1.2.3