summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkash Patel <akashp@codeaurora.org>2015-01-16 13:04:41 -0800
committerAkash Patel <akashp@codeaurora.org>2015-01-16 13:06:58 -0800
commitbe5915d67a0aa3a6be4a2bf65b4ce2baba89ad45 (patch)
tree20f13a7756cd512db72e773688b152276441c032
parentc9a6dcdbc9b842337886545e2e2707f01190ab6d (diff)
parentb8c53cc1f5b0bd09ab49a9b17e56940a62bba51c (diff)
Release 4.0.10.15 QCACLD WLAN Driver.
Merge remote-tracking branch 'origin/caf/caf-wlan/master' * origin/caf/caf-wlan/master: Cafstaging Release 4.0.10.15 qcacld: CL 1196233 - update fw common interface files qcacld-2.0: Enable ARP/NS offload support on beaconing interfaces. qcacld: modifications to SETDFSSCANMODE command qcacld: wlan: 3 Port concurrency GO Beacon Interval qca-cld:hdd: Set proper channel type for 11AC mode Change-Id: I789937073a2c0042a2ffcc84abf50c3ae29e1de7
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg80211.h5
-rw-r--r--CORE/HDD/inc/wlan_hdd_main.h2
-rw-r--r--CORE/HDD/inc/wlan_hdd_tgt_cfg.h1
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c137
-rw-r--r--CORE/HDD/src/wlan_hdd_early_suspend.c22
-rwxr-xr-xCORE/HDD/src/wlan_hdd_main.c16
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/SERVICES/COMMON/wmi_services.h5
-rw-r--r--CORE/SERVICES/COMMON/wmi_version.h4
-rw-r--r--CORE/SERVICES/WMA/wma.c8
-rw-r--r--CORE/SERVICES/WMA/wma.h1
-rw-r--r--CORE/SME/src/csr/csrInsideApi.h1
-rw-r--r--CORE/SME/src/csr/csrUtil.c23
13 files changed, 166 insertions, 63 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_cfg80211.h b/CORE/HDD/inc/wlan_hdd_cfg80211.h
index 624db7b348fc..51fb541d274d 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg80211.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg80211.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -1118,4 +1118,7 @@ int wlan_hdd_send_roam_auth_event(hdd_context_t *hdd_ctx_ptr, uint8_t *bssid,
uint8_t *rsp_rsn_ie, uint32_t rsp_rsn_length,
tCsrRoamInfo *roam_info_ptr);
#endif
+int wlan_hdd_disable_dfs_chan_scan(hdd_context_t *pHddCtx,
+ hdd_adapter_t *pAdapter,
+ u32 no_dfs_flag);
#endif
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
index 0f1c1f37e090..1b0e157c1d7c 100644
--- a/CORE/HDD/inc/wlan_hdd_main.h
+++ b/CORE/HDD/inc/wlan_hdd_main.h
@@ -1464,7 +1464,7 @@ struct hdd_context_s
#ifdef WLAN_FEATURE_LPSS
v_U8_t lpss_support;
#endif
-
+ uint8_t ap_arpns_support;
tSirScanType ioctl_scan_mode;
#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
diff --git a/CORE/HDD/inc/wlan_hdd_tgt_cfg.h b/CORE/HDD/inc/wlan_hdd_tgt_cfg.h
index d47a24634f05..a7d626e3abca 100644
--- a/CORE/HDD/inc/wlan_hdd_tgt_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_tgt_cfg.h
@@ -101,6 +101,7 @@ struct hdd_tgt_cfg {
#ifdef WLAN_FEATURE_LPSS
v_U8_t lpss_support;
#endif
+ uint8_t ap_arpns_support;
};
struct hdd_dfs_radar_ind {
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index d32da40f84d0..d04d4b645f58 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -4277,58 +4277,35 @@ wlan_hdd_set_no_dfs_flag_config_policy[QCA_WLAN_VENDOR_ATTR_SET_NO_DFS_FLAG_MAX
[QCA_WLAN_VENDOR_ATTR_SET_NO_DFS_FLAG] = {.type = NLA_U32 },
};
+/**
+ * wlan_hdd_disable_dfs_chan_scan () - disable/enable DFS channels
+ *
+ * @pHddCtx: HDD context within host driver
+ * @pAdapter: Adapter pointer
+ * @no_dfs_flag: If TRUE, DFS channels cannot be used for scanning
+ *
+ * Loops through devices to see who is operating on DFS channels
+ * and then disables/enables DFS channels by calling SME API.
+ * Fails the disable request if any device is active on a DFS channel.
+ *
+ * Return: EOK or other error codes.
+ */
-static int wlan_hdd_cfg80211_disable_dfs_chan_scan(struct wiphy *wiphy,
- struct wireless_dev *wdev,
- const void *data,
- int data_len)
+int wlan_hdd_disable_dfs_chan_scan(hdd_context_t *pHddCtx,
+ hdd_adapter_t *pAdapter,
+ u32 no_dfs_flag)
{
- struct net_device *dev = wdev->netdev;
- hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
tHalHandle hHal = WLAN_HDD_GET_HAL_CTX(pAdapter);
- hdd_context_t *pHddCtx = wiphy_priv(wiphy);
- struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_SET_NO_DFS_FLAG_MAX + 1];
- eHalStatus status;
- int ret_val = -EPERM;
- u32 no_dfs_flag = 0;
hdd_adapter_list_node_t *p_adapter_node = NULL, *p_next = NULL;
hdd_adapter_t *p_adapter;
VOS_STATUS vos_status;
hdd_ap_ctx_t *p_ap_ctx;
hdd_station_ctx_t *p_sta_ctx;
-
- if (wlan_hdd_validate_context(pHddCtx)) {
- hddLog(VOS_TRACE_LEVEL_ERROR,
- FL("HDD context is not valid"));
- return -EINVAL;
- }
-
- if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_SET_NO_DFS_FLAG_MAX,
- data, data_len,
- wlan_hdd_set_no_dfs_flag_config_policy)) {
- hddLog(VOS_TRACE_LEVEL_ERROR, FL("invalid attr"));
- return -EINVAL;
- }
-
- if (!tb[QCA_WLAN_VENDOR_ATTR_SET_NO_DFS_FLAG]) {
- hddLog(VOS_TRACE_LEVEL_ERROR, FL("attr dfs flag failed"));
- return -EINVAL;
- }
-
- no_dfs_flag = nla_get_u32(
- tb[QCA_WLAN_VENDOR_ATTR_SET_NO_DFS_FLAG]);
-
- hddLog(VOS_TRACE_LEVEL_INFO, FL(" DFS flag = %d"),
- no_dfs_flag);
-
- if (no_dfs_flag > 1) {
- hddLog(VOS_TRACE_LEVEL_ERROR, FL("invalid value of dfs flag"));
- return -EINVAL;
- }
+ eHalStatus status;
+ int ret_val = -EPERM;
if (no_dfs_flag == pHddCtx->cfg_ini->enableDFSChnlScan) {
if (no_dfs_flag) {
-
vos_status = hdd_get_front_adapter( pHddCtx, &p_adapter_node);
while ((NULL != p_adapter_node) &&
(VOS_STATUS_SUCCESS == vos_status))
@@ -4345,8 +4322,7 @@ static int wlan_hdd_cfg80211_disable_dfs_chan_scan(struct wiphy *wiphy,
if (NV_CHANNEL_DFS ==
vos_nv_getChannelEnabledState(
p_ap_ctx->operatingChannel)) {
- hddLog(VOS_TRACE_LEVEL_ERROR,
- FL("SAP running on DFS channel"));
+ hddLog(LOGE, FL("SAP running on DFS channel"));
return -EOPNOTSUPP;
}
}
@@ -4360,8 +4336,7 @@ static int wlan_hdd_cfg80211_disable_dfs_chan_scan(struct wiphy *wiphy,
(NV_CHANNEL_DFS ==
vos_nv_getChannelEnabledState(
p_sta_ctx->conn_info.operationChannel))) {
- hddLog(VOS_TRACE_LEVEL_ERROR,
- FL("client connected on DFS channel"));
+ hddLog(LOGE, FL("client connected on DFS channel"));
return -EOPNOTSUPP;
}
}
@@ -4379,7 +4354,7 @@ static int wlan_hdd_cfg80211_disable_dfs_chan_scan(struct wiphy *wiphy,
/* call the SME API to tunnel down the new channel list
to the firmware */
status = sme_handle_dfs_chan_scan(hHal,
- pHddCtx->cfg_ini->enableDFSChnlScan);
+ pHddCtx->cfg_ini->enableDFSChnlScan);
if (eHAL_STATUS_SUCCESS == status) {
ret_val = 0;
@@ -4393,10 +4368,67 @@ static int wlan_hdd_cfg80211_disable_dfs_chan_scan(struct wiphy *wiphy,
ret_val = -EPERM;
}
} else {
- hddLog(VOS_TRACE_LEVEL_INFO, FL(" the DFS flag has not changed"));
+ hddLog(LOG1, FL(" the DFS flag has not changed"));
ret_val = 0;
}
+ return ret_val;
+}
+
+/**
+ * wlan_hdd_cfg80211_disable_dfs_chan_scan () - DFS scan vendor command
+ *
+ * @wiphy: wiphy device pointer
+ * @wdev: wireless device pointer
+ * @data: Vendof command data buffer
+ * @data_len: Buffer length
+ *
+ * Handles QCA_WLAN_VENDOR_ATTR_SET_NO_DFS_FLAG_MAX. Validate it and
+ * call wlan_hdd_disable_dfs_chan_scan to send it to firmware.
+ *
+ * Return: EOK or other error codes.
+ */
+static int wlan_hdd_cfg80211_disable_dfs_chan_scan(struct wiphy *wiphy,
+ struct wireless_dev *wdev,
+ const void *data,
+ int data_len)
+{
+ struct net_device *dev = wdev->netdev;
+ hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
+ hdd_context_t *pHddCtx = wiphy_priv(wiphy);
+ struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_SET_NO_DFS_FLAG_MAX + 1];
+ int ret_val = -EPERM;
+ u32 no_dfs_flag = 0;
+
+ if ((ret_val = wlan_hdd_validate_context(pHddCtx))) {
+ hddLog(LOGE, FL("HDD context is not valid"));
+ return ret_val;
+ }
+
+ if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_SET_NO_DFS_FLAG_MAX,
+ data, data_len,
+ wlan_hdd_set_no_dfs_flag_config_policy)) {
+ hddLog(LOGE, FL("invalid attr"));
+ return -EINVAL;
+ }
+
+ if (!tb[QCA_WLAN_VENDOR_ATTR_SET_NO_DFS_FLAG]) {
+ hddLog(LOGE, FL("attr dfs flag failed"));
+ return -EINVAL;
+ }
+
+ no_dfs_flag = nla_get_u32(
+ tb[QCA_WLAN_VENDOR_ATTR_SET_NO_DFS_FLAG]);
+
+ hddLog(LOG1, FL(" DFS flag = %d"),
+ no_dfs_flag);
+
+ if (no_dfs_flag > 1) {
+ hddLog(LOGE, FL("invalid value of dfs flag"));
+ return -EINVAL;
+ }
+
+ ret_val = wlan_hdd_disable_dfs_chan_scan(pHddCtx, pAdapter, no_dfs_flag);
return ret_val;
}
@@ -7706,6 +7738,7 @@ static int wlan_hdd_cfg80211_start_ap(struct wiphy *wiphy,
)
{
beacon_data_t *old, *new;
+ enum nl80211_channel_type channel_type;
old = pAdapter->sessionCtx.ap.beacon;
@@ -7721,12 +7754,18 @@ static int wlan_hdd_cfg80211_start_ap(struct wiphy *wiphy,
return -EINVAL;
}
pAdapter->sessionCtx.ap.beacon = new;
+
+ if (params->chandef.width < NL80211_CHAN_WIDTH_80)
+ channel_type = cfg80211_get_chandef_type(&(params->chandef));
+ else
+ channel_type = NL80211_CHAN_HT40PLUS;
+
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
wlan_hdd_cfg80211_set_channel(wiphy, dev,
#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
params->channel, params->channel_type);
#else
- params->chandef.chan, cfg80211_get_chandef_type(&(params->chandef)));
+ params->chandef.chan, channel_type);
#endif
#endif
/* set authentication type */
diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c
index d440bdb3bb75..c0702974d3db 100644
--- a/CORE/HDD/src/wlan_hdd_early_suspend.c
+++ b/CORE/HDD/src/wlan_hdd_early_suspend.c
@@ -602,6 +602,17 @@ static void hdd_conf_ns_offload(hdd_adapter_t *pAdapter, int fenable)
pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
+ /* In SAP/P2PGo mode, ARP/NS offload feature capability
+ * is controlled by one bit.
+ */
+
+ if ((WLAN_HDD_SOFTAP == pAdapter->device_mode ||
+ WLAN_HDD_P2P_GO == pAdapter->device_mode) &&
+ !pHddCtx->ap_arpns_support) {
+ hddLog(LOG1, FL("NS Offload is not supported in SAP/P2PGO mode"));
+ return;
+ }
+
if (fenable)
{
in6_dev = __in6_dev_get(pAdapter->dev);
@@ -1029,6 +1040,17 @@ VOS_STATUS hdd_conf_arp_offload(hdd_adapter_t *pAdapter, int fenable)
hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
hddLog(VOS_TRACE_LEVEL_ERROR, FL(" fenable = %d \n"), fenable);
+
+ /* In SAP/P2PGo mode, ARP/NS offload feature capability
+ * is controlled by one bit.
+ */
+ if ((WLAN_HDD_SOFTAP == pAdapter->device_mode ||
+ WLAN_HDD_P2P_GO == pAdapter->device_mode) &&
+ !pHddCtx->ap_arpns_support) {
+ hddLog(LOG1, FL("APR Offload is not supported in SAP/P2PGO mode"));
+ return VOS_STATUS_SUCCESS;
+ }
+
if(fenable)
{
if ((in_dev = __in_dev_get_rtnl(pAdapter->dev)) != NULL)
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 9c0597803efd..8d3b9923f016 100755
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -7122,6 +7122,19 @@ static int hdd_driver_command(hdd_adapter_t *pAdapter,
"%s: Received Command to Set DFS Scan Mode = %d",
__func__, dfsScanMode);
+ /* When DFS scanning is disabled, the DFS channels need to be
+ * removed from the operation of device.
+ */
+ ret = wlan_hdd_disable_dfs_chan_scan(pHddCtx, pAdapter,
+ (dfsScanMode == CFG_ROAMING_DFS_CHANNEL_DISABLED));
+ if (ret < 0) {
+ /* Some conditions prevented it from disabling DFS channels
+ */
+ hddLog(LOGE,
+ FL("disable/enable DFS channel request was denied"));
+ goto exit;
+ }
+
pHddCtx->cfg_ini->allowDFSChannelRoam = dfsScanMode;
sme_UpdateDFSScanMode(pHddCtx->hHal, pAdapter->sessionId,
dfsScanMode);
@@ -7989,6 +8002,7 @@ void hdd_update_tgt_cfg(void *context, void *param)
hdd_ctx->lpss_support = cfg->lpss_support;
#endif
+ hdd_ctx->ap_arpns_support = cfg->ap_arpns_support;
hdd_update_tgt_services(hdd_ctx, &cfg->services);
hdd_update_tgt_ht_cap(hdd_ctx, &cfg->ht_cap);
diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h
index 6dceacdae333..1a49f9c61900 100644
--- a/CORE/MAC/inc/qwlan_version.h
+++ b/CORE/MAC/inc/qwlan_version.h
@@ -42,9 +42,9 @@ BRIEF DESCRIPTION:
#define QWLAN_VERSION_MINOR 0
#define QWLAN_VERSION_PATCH 10
#define QWLAN_VERSION_EXTRA ""
-#define QWLAN_VERSION_BUILD 14
+#define QWLAN_VERSION_BUILD 15
-#define QWLAN_VERSIONSTR "4.0.10.14"
+#define QWLAN_VERSIONSTR "4.0.10.15"
#define AR6320_REV1_VERSION 0x5000000
diff --git a/CORE/SERVICES/COMMON/wmi_services.h b/CORE/SERVICES/COMMON/wmi_services.h
index f2eb51df6aad..bc39cd02552f 100644
--- a/CORE/SERVICES/COMMON/wmi_services.h
+++ b/CORE/SERVICES/COMMON/wmi_services.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2015 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -59,7 +59,7 @@ typedef enum {
WMI_SERVICE_WOW, /* WOW Support */
WMI_SERVICE_RATECTRL_CACHE, /* Rate-control caching */
WMI_SERVICE_IRAM_TIDS, /* TIDs in IRAM */
- WMI_SERVICE_ARPNS_OFFLOAD, /* ARP NS Offload support */
+ WMI_SERVICE_ARPNS_OFFLOAD, /* ARP NS Offload support for STA vdev */
WMI_SERVICE_NLO, /* Network list offload service */
WMI_SERVICE_GTK_OFFLOAD, /* GTK offload */
WMI_SERVICE_SCAN_SCH, /* Scan Scheduler Service */
@@ -117,6 +117,7 @@ typedef enum {
WMI_SERVICE_SAP_AUTH_OFFLOAD, /* softap auth offload */
WMI_SERVICE_DUAL_BAND_SIMULTANEOUS_SUPPORT, /* Dual Band Simultaneous support */
WMI_SERVICE_OCB, /* OCB mode support */
+ WMI_SERVICE_AP_ARPNS_OFFLOAD, /* arp offload support for ap mode vdev */
WMI_MAX_SERVICE=128 /* max service */
} WMI_SERVICE;
diff --git a/CORE/SERVICES/COMMON/wmi_version.h b/CORE/SERVICES/COMMON/wmi_version.h
index 38fc945c5518..a6d5a6d2c2fc 100644
--- a/CORE/SERVICES/COMMON/wmi_version.h
+++ b/CORE/SERVICES/COMMON/wmi_version.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -36,7 +36,7 @@
#define __WMI_VER_MINOR_ 0
/** WMI revision number has to be incremented when there is a
* change that may or may not break compatibility. */
-#define __WMI_REVISION_ 88
+#define __WMI_REVISION_ 89
/** The Version Namespace should not be normally changed. Only
* host and firmware of the same WMI namespace will work
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index e595bb16c3f4..910233f30310 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -25958,6 +25958,7 @@ static void wma_update_hdd_cfg(tp_wma_handle wma_handle)
#ifdef WLAN_FEATURE_LPSS
hdd_tgt_cfg.lpss_support = wma_handle->lpss_support;
#endif
+ hdd_tgt_cfg.ap_arpns_support = wma_handle->ap_arpns_support;
wma_handle->tgt_cfg_update_cb(hdd_ctx, &hdd_tgt_cfg);
}
static wmi_buf_t wma_setup_wmi_init_msg(tp_wma_handle wma_handle,
@@ -26157,6 +26158,13 @@ v_VOID_t wma_rx_service_ready_event(WMA_HANDLE handle, void *cmd_param_info)
WMI_SERVICE_IS_ENABLED(wma_handle->wmi_service_bitmap,
WMI_SERVICE_LPASS);
#endif
+ /*
+ * This Service bit is added to check for ARP/NS offload
+ * support for LL or HL targets
+ */
+ wma_handle->ap_arpns_support =
+ WMI_SERVICE_IS_ENABLED(wma_handle->wmi_service_bitmap,
+ WMI_SERVICE_AP_ARPNS_OFFLOAD);
if (WMI_SERVICE_IS_ENABLED(wma_handle->wmi_service_bitmap,
WMI_SERVICE_CSA_OFFLOAD)) {
diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h
index 3b601c1f34d3..5bc1a0ba0bb6 100644
--- a/CORE/SERVICES/WMA/wma.h
+++ b/CORE/SERVICES/WMA/wma.h
@@ -611,6 +611,7 @@ typedef struct {
#ifdef WLAN_FEATURE_LPSS
v_U8_t lpss_support; /* LPSS feature is supported in target or not */
#endif
+ uint8_t ap_arpns_support;
bool wmi_ready;
u_int32_t wlan_init_status;
adf_os_device_t adf_dev;
diff --git a/CORE/SME/src/csr/csrInsideApi.h b/CORE/SME/src/csr/csrInsideApi.h
index 89100cfbbea9..e1ec5fb1a989 100644
--- a/CORE/SME/src/csr/csrInsideApi.h
+++ b/CORE/SME/src/csr/csrInsideApi.h
@@ -116,6 +116,7 @@
* timeout value */
#define CSR_ACTIVE_LIST_CMD_TIMEOUT_VALUE 1000*30*4 //120s
#define CSR_MAX_BSSID_COUNT ((CSR_ACTIVE_LIST_CMD_TIMEOUT_VALUE/4000) * 3)
+#define CSR_CUSTOM_CONC_GO_BI 100
typedef enum
{
eCsrNextScanNothing,
diff --git a/CORE/SME/src/csr/csrUtil.c b/CORE/SME/src/csr/csrUtil.c
index ca698500ecc2..d58d749576b8 100644
--- a/CORE/SME/src/csr/csrUtil.c
+++ b/CORE/SME/src/csr/csrUtil.c
@@ -2324,8 +2324,15 @@ eHalStatus csrValidateMCCBeaconInterval(tpAniSirGlobal pMac, tANI_U8 channelId,
(pMac->roam.configParam.fAllowMCCGODiffBI == 0x04))
{
//Check to pass the right beacon Interval
- new_beaconInterval = csrCalculateMCCBeaconInterval(pMac, *beaconInterval,
- pMac->roam.roamSession[sessionId].bssParams.beaconInterval);
+ if (pMac->roam.configParam.conc_custom_rule1 ||
+ pMac->roam.configParam.conc_custom_rule2) {
+ new_beaconInterval = CSR_CUSTOM_CONC_GO_BI;
+ } else {
+ new_beaconInterval =
+ csrCalculateMCCBeaconInterval(pMac,
+ *beaconInterval,
+ pMac->roam.roamSession[sessionId].bssParams.beaconInterval);
+ }
smsLog(pMac, LOG1, FL(" Peer AP BI : %d, new Beacon Interval: %d"),*beaconInterval,new_beaconInterval );
//Update the becon Interval
if (new_beaconInterval != pMac->roam.roamSession[sessionId].bssParams.beaconInterval)
@@ -2421,9 +2428,15 @@ eHalStatus csrValidateMCCBeaconInterval(tpAniSirGlobal pMac, tANI_U8 channelId,
*/
/* Calculate beacon Interval for P2P-GO
in-case of MCC */
- new_beaconInterval = csrCalculateMCCBeaconInterval(pMac,
- pMac->roam.roamSession[sessionId].connectedProfile.beaconInterval,
- *beaconInterval );
+ if (pMac->roam.configParam.conc_custom_rule1 ||
+ pMac->roam.configParam.conc_custom_rule2) {
+ new_beaconInterval = CSR_CUSTOM_CONC_GO_BI;
+ } else {
+ new_beaconInterval =
+ csrCalculateMCCBeaconInterval(pMac,
+ pMac->roam.roamSession[sessionId].connectedProfile.beaconInterval,
+ *beaconInterval);
+ }
if(*beaconInterval != new_beaconInterval)
*beaconInterval = new_beaconInterval;
return eHAL_STATUS_SUCCESS;