summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkash Patel <akashp@codeaurora.org>2014-06-28 10:48:16 -0700
committerAkash Patel <akashp@codeaurora.org>2014-06-28 10:49:23 -0700
commitad7a7aac4fcb0364bf3ba99384357fe69a2fac70 (patch)
treeed46c486aff7b674b5157ec61de21c3f73c34a7f
parentba6576d0fef0dfcea09bdc54c02c1ab5587b4b33 (diff)
parenta62a9d2108ddc4705e41a832538ef368f1756513 (diff)
Release 1.0.0.135 QCACLD WLAN Driver
Merge remote-tracking branch 'origin/caf/caf-wlan/master' * origin/caf/caf-wlan/master: Cafstaging Release 1.0.0.135 Wlan:HS20:Fix for OSEN connection issue on QCACLD driver qca_cld: Fix a bug when using pci_free_consistent() to free DMA memory qcacld_new: Do not attempt TDLS connection in case of concurrency add polling command for LTE coex channel avoidance CLD: Fix MCC to SCC switch for subset interference qcacld: sap: add iwpriv command to send fake radar signal event qcacld-new: Dynamically change parameters of WMM scheduler per AP setting. wlan: Add "compat" support for setPktFilter ioctl handler wlan: Featurise "enableAMP" and "disableAMP" ioctls qcacld: Fix null pointer deference in wma_delete_all_ap_remote_peers Change-Id: I614b0acbf7bf949e70f868fab0948d72443cfe99
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_tx_sched.c78
-rw-r--r--CORE/HDD/inc/qc_sap_ioctl.h1
-rw-r--r--CORE/HDD/inc/wlan_hdd_tdls.h2
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c12
-rw-r--r--CORE/HDD/src/wlan_hdd_early_suspend.c1
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c36
-rwxr-xr-xCORE/HDD/src/wlan_hdd_main.c3
-rw-r--r--CORE/HDD/src/wlan_hdd_tdls.c56
-rw-r--r--CORE/HDD/src/wlan_hdd_wext.c28
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/MAC/inc/sirApi.h8
-rw-r--r--CORE/MAC/src/include/sirParams.h4
-rw-r--r--CORE/MAC/src/pe/include/limSession.h1
-rw-r--r--CORE/MAC/src/pe/lim/limAssocUtils.c7
-rw-r--r--CORE/MAC/src/pe/lim/limFT.c8
-rw-r--r--CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c3
-rw-r--r--CORE/MAC/src/pe/lim/limSerDesUtils.c5
-rw-r--r--CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h41
-rw-r--r--CORE/SERVICES/COMMON/wdi_in.h1
-rw-r--r--CORE/SERVICES/HIF/PCIe/copy_engine.c6
-rw-r--r--CORE/SERVICES/WMA/wma.c124
-rw-r--r--CORE/SERVICES/WMA/wma.h3
-rw-r--r--CORE/SME/inc/sme_Api.h12
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c14
-rw-r--r--CORE/SME/src/csr/csrUtil.c8
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c53
-rw-r--r--CORE/SYS/legacy/src/utils/src/macTrace.c3
-rw-r--r--CORE/WDA/inc/wlan_qct_wda.h4
28 files changed, 478 insertions, 48 deletions
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_sched.c b/CORE/CLD_TXRX/TXRX/ol_tx_sched.c
index 647e5158c2b7..b764573bd475 100644
--- a/CORE/CLD_TXRX/TXRX/ol_tx_sched.c
+++ b/CORE/CLD_TXRX/TXRX/ol_tx_sched.c
@@ -417,6 +417,13 @@ ol_tx_sched_init_rr(
return scheduler;
}
+
+void
+ol_txrx_set_wmm_param(ol_txrx_pdev_handle data_pdev, struct ol_tx_wmm_param_t wmm_param)
+{
+ adf_os_print("Dummy function when OL_TX_SCHED_RR is enabled\n");
+}
+
#endif /* OL_TX_SCHED == OL_TX_SCHED_RR */
/*--- advanced scheduler ----------------------------------------------------*/
@@ -640,6 +647,15 @@ struct ol_tx_sched_wrr_adv_t {
categories[OL_TX_SCHED_WRR_ADV_NUM_CATEGORIES];
};
+#define OL_TX_AIFS_DEFAULT_VO 2
+#define OL_TX_AIFS_DEFAULT_VI 2
+#define OL_TX_AIFS_DEFAULT_BE 3
+#define OL_TX_AIFS_DEFAULT_BK 7
+#define OL_TX_CW_MIN_DEFAULT_VO 3
+#define OL_TX_CW_MIN_DEFAULT_VI 7
+#define OL_TX_CW_MIN_DEFAULT_BE 15
+#define OL_TX_CW_MIN_DEFAULT_BK 15
+
/*--- functions ---*/
#if DEBUG_SCHED_STAT
@@ -1005,6 +1021,68 @@ ol_tx_sched_init_wrr_adv(
return scheduler;
}
+
+
+/* WMM parameters are suppposed to be passed when associate with AP.
+ * According to AIFS+CWMin, the function maps each queue to one of four default
+ * settings of the scheduler, ie. VO, VI, BE, or BK.
+ */
+void
+ol_txrx_set_wmm_param(ol_txrx_pdev_handle data_pdev, struct ol_tx_wmm_param_t wmm_param)
+{
+ struct ol_tx_sched_wrr_adv_t def_cfg;
+ struct ol_tx_sched_wrr_adv_t *scheduler = data_pdev->tx_sched.scheduler;
+ u_int32_t i, ac_selected, weight[OL_TX_NUM_WMM_AC], default_edca[OL_TX_NUM_WMM_AC];
+
+ OL_TX_SCHED_WRR_ADV_CAT_CFG_STORE(VO, (&def_cfg));
+ OL_TX_SCHED_WRR_ADV_CAT_CFG_STORE(VI, (&def_cfg));
+ OL_TX_SCHED_WRR_ADV_CAT_CFG_STORE(BE, (&def_cfg));
+ OL_TX_SCHED_WRR_ADV_CAT_CFG_STORE(BK, (&def_cfg));
+
+ // default_eca = AIFS + CWMin
+ default_edca[OL_TX_SCHED_WRR_ADV_CAT_VO] =
+ OL_TX_AIFS_DEFAULT_VO + OL_TX_CW_MIN_DEFAULT_VO;
+ default_edca[OL_TX_SCHED_WRR_ADV_CAT_VI] =
+ OL_TX_AIFS_DEFAULT_VI + OL_TX_CW_MIN_DEFAULT_VI;
+ default_edca[OL_TX_SCHED_WRR_ADV_CAT_BE] =
+ OL_TX_AIFS_DEFAULT_BE + OL_TX_CW_MIN_DEFAULT_BE;
+ default_edca[OL_TX_SCHED_WRR_ADV_CAT_BK] =
+ OL_TX_AIFS_DEFAULT_BK + OL_TX_CW_MIN_DEFAULT_BK;
+
+ weight[OL_TX_SCHED_WRR_ADV_CAT_VO] =
+ wmm_param.ac[OL_TX_WMM_AC_VO].aifs + wmm_param.ac[OL_TX_WMM_AC_VO].cwmin;
+ weight[OL_TX_SCHED_WRR_ADV_CAT_VI] =
+ wmm_param.ac[OL_TX_WMM_AC_VI].aifs + wmm_param.ac[OL_TX_WMM_AC_VI].cwmin;
+ weight[OL_TX_SCHED_WRR_ADV_CAT_BK] =
+ wmm_param.ac[OL_TX_WMM_AC_BK].aifs + wmm_param.ac[OL_TX_WMM_AC_BK].cwmin;
+ weight[OL_TX_SCHED_WRR_ADV_CAT_BE] =
+ wmm_param.ac[OL_TX_WMM_AC_BE].aifs + wmm_param.ac[OL_TX_WMM_AC_BE].cwmin;
+
+ for (i = 0; i < OL_TX_NUM_WMM_AC; i++) {
+
+ if (default_edca[OL_TX_SCHED_WRR_ADV_CAT_VO] >= weight[i]) {
+ ac_selected = OL_TX_SCHED_WRR_ADV_CAT_VO;
+ } else if (default_edca[OL_TX_SCHED_WRR_ADV_CAT_VI] >= weight[i]) {
+ ac_selected = OL_TX_SCHED_WRR_ADV_CAT_VI;
+ } else if (default_edca[OL_TX_SCHED_WRR_ADV_CAT_BE] >= weight[i]) {
+ ac_selected = OL_TX_SCHED_WRR_ADV_CAT_BE;
+ } else {
+ ac_selected = OL_TX_SCHED_WRR_ADV_CAT_BK;
+ }
+
+ scheduler->categories[i].specs.wrr_skip_weight =
+ def_cfg.categories[ac_selected].specs.wrr_skip_weight;
+ scheduler->categories[i].specs.credit_threshold =
+ def_cfg.categories[ac_selected].specs.credit_threshold;
+ scheduler->categories[i].specs.send_limit =
+ def_cfg.categories[ac_selected].specs.send_limit;
+ scheduler->categories[i].specs.credit_reserve =
+ def_cfg.categories[ac_selected].specs.credit_reserve;
+ scheduler->categories[i].specs.discard_weight =
+ def_cfg.categories[ac_selected].specs.discard_weight;
+ }
+}
+
#endif /* OL_TX_SCHED == OL_TX_SCHED_WRR_ADV */
/*--- congestion control discard --------------------------------------------*/
diff --git a/CORE/HDD/inc/qc_sap_ioctl.h b/CORE/HDD/inc/qc_sap_ioctl.h
index 867ebe716265..f7f53b70999e 100644
--- a/CORE/HDD/inc/qc_sap_ioctl.h
+++ b/CORE/HDD/inc/qc_sap_ioctl.h
@@ -253,6 +253,7 @@ enum {
QCASAP_SET_DFS_NOL,
QCSAP_PARAM_SET_CHANNEL_CHANGE,
QCASAP_SET_DFS_TARGET_CHNL,
+ QCASAP_SET_RADAR_CMD
};
int iw_softap_get_channel_list(struct net_device *dev,
diff --git a/CORE/HDD/inc/wlan_hdd_tdls.h b/CORE/HDD/inc/wlan_hdd_tdls.h
index 47243a217d31..c443ea0d55a1 100644
--- a/CORE/HDD/inc/wlan_hdd_tdls.h
+++ b/CORE/HDD/inc/wlan_hdd_tdls.h
@@ -219,6 +219,8 @@ typedef struct {
int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter);
+void wlan_hdd_global_tdls_init(hdd_context_t * pHddCtx);
+
void wlan_hdd_tdls_exit(hdd_adapter_t *pAdapter);
void wlan_hdd_tdls_extract_da(struct sk_buff *skb, u8 *mac);
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index f7ef86f0acc3..bbebf157e0b4 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -10738,6 +10738,18 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d
}
}
+ if (hdd_isConnectionInProgress(pHddCtx)) {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("Connection is in progress"
+ " TDLS connection is not allowed"));
+ return -EBUSY;
+ }
+
+ if (vos_max_concurrent_connections_reached()) {
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("Reached max concurrent connections"));
+ return -EINVAL;
+ }
+
if (WLAN_IS_TDLS_SETUP_ACTION(action_code))
{
if (NULL != wlan_hdd_tdls_is_progress(pHddCtx, peer, TRUE))
diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c
index dcdb1908b025..813a1f366161 100644
--- a/CORE/HDD/src/wlan_hdd_early_suspend.c
+++ b/CORE/HDD/src/wlan_hdd_early_suspend.c
@@ -2251,6 +2251,7 @@ VOS_STATUS hdd_wlan_re_init(void *hif_sc)
vos_set_logp_in_progress(VOS_MODULE_ID_VOSS, FALSE);
pHddCtx->hdd_mcastbcast_filter_set = FALSE;
hdd_register_mcast_bcast_filter(pHddCtx);
+ wlan_hdd_global_tdls_init(pHddCtx);
hdd_ssr_timer_del();
#ifdef QCA_WIFI_ISOC
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index b3b5d8c52275..c09ff9f38ff7 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -701,6 +701,10 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
}
else
{
+#ifdef FEATURE_WLAN_CH_AVOID
+ sme_ChAvoidUpdateReq(pHddCtx->hHal);
+#endif /* FEATURE_WLAN_CH_AVOID */
+
pHddApCtx->uBCStaId = pSapEvent->sapevt.sapStartBssCompleteEvent.staId;
#ifdef QCA_LL_TX_FLOW_CT
@@ -2378,6 +2382,33 @@ static iw_softap_setparam(struct net_device *dev,
);
break;
+ case QCASAP_SET_RADAR_CMD:
+ {
+ hdd_context_t *pHddCtx =
+ WLAN_HDD_GET_CTX(pHostapdAdapter);
+ v_U8_t ch =
+ (WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter))->operatingChannel;
+ v_BOOL_t isDfsch;
+
+ isDfsch = (NV_CHANNEL_DFS ==
+ vos_nv_getChannelEnabledState(ch));
+
+ hddLog(VOS_TRACE_LEVEL_INFO,
+ FL("Set QCASAP_SET_RADAR_CMD val %d"), set_value);
+
+ if (!pHddCtx->dfs_radar_found && isDfsch) {
+ ret = process_wma_set_command(
+ (int)pHostapdAdapter->sessionId,
+ (int)WMA_VDEV_DFS_CONTROL_CMDID,
+ set_value, VDEV_CMD);
+ } else {
+ hddLog(VOS_TRACE_LEVEL_ERROR,
+ FL("Ignore command due to "
+ "dfs_radar_found: %d, is_dfs_channel: %d"),
+ pHddCtx->dfs_radar_found, isDfsch);
+ }
+ break;
+ }
default:
hddLog(LOGE, FL("Invalid setparam command %d value %d"),
sub_cmd, set_value);
@@ -4529,6 +4560,11 @@ static const struct iw_priv_args hostapd_private_args[] = {
0,
"setNextChnl" },
+ { QCASAP_SET_RADAR_CMD,
+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
+ 0,
+ "setRadar" },
+
#endif /* QCA_WIFI_2_0 */
{ QCSAP_IOCTL_GETPARAM, 0,
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 182ff9edd264..960dc2af1ae4 100755
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -11788,6 +11788,9 @@ int hdd_wlan_startup(struct device *dev, v_VOID_t *hif_sc)
/*SME must send channel update configuration to RIVA*/
sme_UpdateChannelConfig(pHddCtx->hHal);
#endif
+
+ wlan_hdd_global_tdls_init(pHddCtx);
+
sme_Register11dScanDoneCallback(pHddCtx->hHal, hdd_11d_scan_done);
/* Register with platform driver as client for Suspend/Resume */
diff --git a/CORE/HDD/src/wlan_hdd_tdls.c b/CORE/HDD/src/wlan_hdd_tdls.c
index a9f5c687650f..f24d6e13b4a6 100644
--- a/CORE/HDD/src/wlan_hdd_tdls.c
+++ b/CORE/HDD/src/wlan_hdd_tdls.c
@@ -647,13 +647,39 @@ static void wlan_hdd_tdls_schedule_scan(struct work_struct *work)
scan_ctx->scan_request);
}
-
+/* initialize TDLS global context */
+void wlan_hdd_global_tdls_init(hdd_context_t *pHddCtx )
+{
+ v_U8_t staIdx;
+
+ pHddCtx->connected_peer_count = 0;
+ pHddCtx->tdls_scan_ctxt.magic = 0;
+ pHddCtx->tdls_scan_ctxt.attempt = 0;
+ pHddCtx->tdls_scan_ctxt.reject = 0;
+ pHddCtx->tdls_scan_ctxt.scan_request = NULL;
+
+ for (staIdx = 0; staIdx < HDD_MAX_NUM_TDLS_STA; staIdx++) {
+ pHddCtx->tdlsConnInfo[staIdx].staId = 0;
+ pHddCtx->tdlsConnInfo[staIdx].sessionId = 255;
+ vos_mem_zero(&pHddCtx->tdlsConnInfo[staIdx].peerMac,
+ sizeof(v_MACADDR_t)) ;
+ }
+
+ if (VOS_FALSE == pHddCtx->cfg_ini->fEnableTDLSImplicitTrigger) {
+ pHddCtx->tdls_mode = eTDLS_SUPPORT_EXPLICIT_TRIGGER_ONLY;
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_DEBUG,
+ FL("TDLS Implicit trigger not enabled!"));
+ } else {
+ pHddCtx->tdls_mode = eTDLS_SUPPORT_ENABLED;
+ }
+}
+
+/* Initialize TDLS */
int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter)
{
hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX( pAdapter );
tdlsCtx_t *pHddTdlsCtx;
int i;
- v_U8_t staIdx;
#ifdef QCA_WIFI_2_0
tdlsInfo_t *tInfo;
eHalStatus halStatus = eHAL_STATUS_FAILURE;
@@ -744,26 +770,9 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter)
pHddTdlsCtx = pAdapter->sessionCtx.station.pHddTdlsCtx;
- /* initialize TDLS global context */
- pHddCtx->connected_peer_count = 0;
sme_SetTdlsPowerSaveProhibited(WLAN_HDD_GET_HAL_CTX(pAdapter),
pAdapter->sessionId, 0);
- pHddCtx->tdls_scan_ctxt.magic = 0;
- pHddCtx->tdls_scan_ctxt.attempt = 0;
- pHddCtx->tdls_scan_ctxt.reject = 0;
- pHddCtx->tdls_scan_ctxt.scan_request = NULL;
-
- pHddCtx->max_num_tdls_sta = HDD_MAX_NUM_TDLS_STA;
-
- for (staIdx = 0; staIdx < HDD_MAX_NUM_TDLS_STA; staIdx++)
- {
- pHddCtx->tdlsConnInfo[staIdx].staId = 0;
- pHddCtx->tdlsConnInfo[staIdx].sessionId = 255;
- vos_mem_zero(&pHddCtx->tdlsConnInfo[staIdx].peerMac,
- sizeof(v_MACADDR_t)) ;
- }
-
pHddTdlsCtx->pAdapter = pAdapter;
for (i = 0; i < 256; i++)
@@ -788,15 +797,6 @@ int wlan_hdd_tdls_init(hdd_adapter_t *pAdapter)
pHddTdlsCtx->threshold_config.rssi_delta = pHddCtx->cfg_ini->fTDLSRSSIDelta;
#endif
- if (FALSE == pHddCtx->cfg_ini->fEnableTDLSImplicitTrigger)
- {
- pHddCtx->tdls_mode = eTDLS_SUPPORT_EXPLICIT_TRIGGER_ONLY;
- hddLog(VOS_TRACE_LEVEL_ERROR, "%s TDLS Implicit trigger not enabled!", __func__);
- }
- else
- {
- pHddCtx->tdls_mode = eTDLS_SUPPORT_ENABLED;
- }
#ifdef CONFIG_TDLS_IMPLICIT
INIT_WORK(&pHddTdlsCtx->implicit_setup, wlan_hdd_tdls_pre_setup);
#endif
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index 7a04a0e1b404..621f32749d99 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -355,8 +355,10 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2},
#define WE_CLEAR_STATS 1
#define WE_INIT_AP 2
#define WE_STOP_AP 3
+#ifdef WLAN_BTAMP_FEATURE
#define WE_ENABLE_AMP 4
#define WE_DISABLE_AMP 5
+#endif /* WLAN_BTAMP_FEATURE */
#define WE_ENABLE_DXE_STALL_DETECT 6
#define WE_DISPLAY_DXE_SNAP_SHOT 7
#define WE_SET_REASSOC_TRIGGER 8
@@ -8962,24 +8964,34 @@ void wlan_hdd_set_mc_addr_list(hdd_adapter_t *pAdapter, v_U8_t set)
return;
}
-static int iw_set_packet_filter_params(struct net_device *dev, struct iw_request_info *info,
- union iwreq_data *wrqu, char *extra)
+static int iw_set_packet_filter_params(struct net_device *dev,
+ struct iw_request_info *info,
+ union iwreq_data *wrqu, char *extra)
{
hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
tpPacketFilterCfg pRequest = NULL;
int ret;
+ struct iw_point s_priv_data;
+
+ if (hdd_priv_get_data(&s_priv_data, wrqu)) {
+ return -EINVAL;
+ }
+
+ if ((NULL == s_priv_data.pointer) || (0 == s_priv_data.length)) {
+ return -EINVAL;
+ }
/* ODD number is used for set, copy data using copy_from_user */
- pRequest = mem_alloc_copy_from_user_helper(wrqu->data.pointer,
- wrqu->data.length);
- if (NULL == pRequest)
- {
+ pRequest = mem_alloc_copy_from_user_helper(s_priv_data.pointer,
+ s_priv_data.length);
+ if (NULL == pRequest) {
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"mem_alloc_copy_from_user_helper fail");
return -ENOMEM;
}
- ret = wlan_hdd_set_filter(WLAN_HDD_GET_CTX(pAdapter), pRequest, pAdapter->sessionId);
+ ret = wlan_hdd_set_filter(WLAN_HDD_GET_CTX(pAdapter), pRequest,
+ pAdapter->sessionId);
kfree(pRequest);
return ret;
@@ -10879,6 +10891,7 @@ static const struct iw_priv_args we_private_args[] = {
0,
0,
"exitAP" },
+#ifdef WLAN_BTAMP_FEATURE
{ WE_ENABLE_AMP,
0,
0,
@@ -10887,6 +10900,7 @@ static const struct iw_priv_args we_private_args[] = {
0,
0,
"disableAMP" },
+#endif /* WLAN_BTAMP_FEATURE */
{ WE_ENABLE_DXE_STALL_DETECT,
0,
0,
diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h
index 53c6f38c3ee9..1a6f801531e5 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 0
#define QWLAN_VERSION_EXTRA ""
-#define QWLAN_VERSION_BUILD 134
+#define QWLAN_VERSION_BUILD 135
-#define QWLAN_VERSIONSTR "1.0.0.134"
+#define QWLAN_VERSIONSTR "1.0.0.135"
#ifdef QCA_WIFI_2_0
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 35e44230876b..b67303051461 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -1170,6 +1170,7 @@ typedef struct sSirSmeJoinReq
tANI_U8 isAmsduSupportInAMPDU;
tAniBool isWMEenabled;
tAniBool isQosEnabled;
+ tAniBool isOSENConnection;
tAniTitanCBNeighborInfo cbNeighbors;
tAniBool spectrumMgtIndicator;
tSirMacPowerCapInfo powerCap;
@@ -4745,6 +4746,13 @@ typedef struct sSirLPHBInd
} tSirLPHBInd;
#endif /* FEATURE_WLAN_LPHB */
+#ifdef FEATURE_WLAN_CH_AVOID
+typedef struct sSirChAvoidUpdateReq
+{
+ tANI_U32 reserved_param;
+} tSirChAvoidUpdateReq;
+#endif /* FEATURE_WLAN_CH_AVOID */
+
typedef struct sSirLinkSpeedInfo
{
/* MAC Address for the peer */
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h
index 9bf86e8481ff..8b8493a2fef8 100644
--- a/CORE/MAC/src/include/sirParams.h
+++ b/CORE/MAC/src/include/sirParams.h
@@ -696,6 +696,10 @@ typedef struct sSirMbMsgP2p
#define SIR_HAL_EXTSCAN_GET_CACHED_RESULTS_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 273)
#endif /* FEATURE_WLAN_EXTSCAN */
+#ifdef FEATURE_WLAN_CH_AVOID
+#define SIR_HAL_CH_AVOID_UPDATE_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 274)
+#endif
+
#define SIR_HAL_MSG_TYPES_END (SIR_HAL_MSG_TYPES_BEGIN + 0x1FF)
// CFG message types
diff --git a/CORE/MAC/src/pe/include/limSession.h b/CORE/MAC/src/pe/include/limSession.h
index 15146b1a0a22..b280436590a9 100644
--- a/CORE/MAC/src/pe/include/limSession.h
+++ b/CORE/MAC/src/pe/include/limSession.h
@@ -443,6 +443,7 @@ typedef struct sPESession // Added to Support BT-AMP
tANI_U16 schBeaconOffsetBegin;
// Size of the trailing portion
tANI_U16 schBeaconOffsetEnd;
+ tANI_BOOLEAN isOSENConnection;
}tPESession, *tpPESession;
diff --git a/CORE/MAC/src/pe/lim/limAssocUtils.c b/CORE/MAC/src/pe/lim/limAssocUtils.c
index 86cc55e71371..8d8b86412ce3 100644
--- a/CORE/MAC/src/pe/lim/limAssocUtils.c
+++ b/CORE/MAC/src/pe/lim/limAssocUtils.c
@@ -4083,6 +4083,13 @@ tSirRetStatus limStaSendAddBss( tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp,
pAddBssParams->staContext.smesessionId = psessionEntry->smeSessionId;
pAddBssParams->staContext.wpa_rsn = pBeaconStruct->rsnPresent;
pAddBssParams->staContext.wpa_rsn |= (pBeaconStruct->wpaPresent << 1);
+ /* For OSEN Connection AP does not advertise RSN or WPA IE
+ * so from the IEs we get from supplicant we get this info
+ * so for FW to transmit EAPOL message 4 we shall set
+ * wpa_rsn
+ */
+ if ((!pAddBssParams->staContext.wpa_rsn) && (psessionEntry->isOSENConnection))
+ pAddBssParams->staContext.wpa_rsn = 1;
vos_mem_copy(&pAddBssParams->staContext.capab_info,
&pAssocRsp->capabilityInfo,
sizeof(pAddBssParams->staContext.capab_info));
diff --git a/CORE/MAC/src/pe/lim/limFT.c b/CORE/MAC/src/pe/lim/limFT.c
index 4bb7c48e9a4e..9f4a06f3beac 100644
--- a/CORE/MAC/src/pe/lim/limFT.c
+++ b/CORE/MAC/src/pe/lim/limFT.c
@@ -674,7 +674,14 @@ tSirRetStatus limFTPrepareAddBssReq( tpAniSirGlobal pMac,
pAddBssParams->staContext.wmmEnabled = 0;
pAddBssParams->staContext.wpa_rsn = pBeaconStruct->rsnPresent;
+ /* For OSEN Connection AP does not advertise RSN or WPA IE
+ * so from the IEs we get from supplicant we get this info
+ * so for FW to transmit EAPOL message 4 we shall set
+ * wpa_rsn
+ */
pAddBssParams->staContext.wpa_rsn |= (pBeaconStruct->wpaPresent << 1);
+ if ((!pAddBssParams->staContext.wpa_rsn) && (pftSessionEntry->isOSENConnection))
+ pAddBssParams->staContext.wpa_rsn = 1;
//Update the rates
#ifdef WLAN_FEATURE_11AC
limPopulatePeerRateSet(pMac, &pAddBssParams->staContext.supportedRates,
@@ -779,6 +786,7 @@ tpPESession limFillFTSession(tpAniSirGlobal pMac,
pftSessionEntry->limQosEnabled = psessionEntry->limQosEnabled;
pftSessionEntry->limWsmEnabled = psessionEntry->limWsmEnabled;
pftSessionEntry->lim11hEnable = psessionEntry->lim11hEnable;
+ pftSessionEntry->isOSENConnection = psessionEntry->isOSENConnection;
// Fields to be filled later
pftSessionEntry->pLimJoinReq = NULL;
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
index 90da03da4f59..0f73851097ba 100644
--- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
@@ -2120,6 +2120,9 @@ __limProcessSmeJoinReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf)
/* Indicate whether spectrum management is enabled*/
psessionEntry->spectrumMgtEnabled =
pSmeJoinReq->spectrumMgtIndicator;
+ psessionEntry->isOSENConnection =
+ pSmeJoinReq->isOSENConnection;
+
PELOG1(limLog(pMac,LOG1,FL("SessionId:%d MLM_JOIN_REQ is posted to MLM SM"),
pMlmJoinReq->sessionId));
/* Issue LIM_MLM_JOIN_REQ to MLM */
diff --git a/CORE/MAC/src/pe/lim/limSerDesUtils.c b/CORE/MAC/src/pe/lim/limSerDesUtils.c
index 40d2b83b0eb7..957c5e1f7a49 100644
--- a/CORE/MAC/src/pe/lim/limSerDesUtils.c
+++ b/CORE/MAC/src/pe/lim/limSerDesUtils.c
@@ -1343,6 +1343,11 @@ limJoinReqSerDes(tpAniSirGlobal pMac, tpSirSmeJoinReq pJoinReq, tANI_U8 *pBuf)
if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE)
return eSIR_FAILURE;
+ pJoinReq->isOSENConnection = (tAniBool)limGetU32(pBuf);
+ pBuf += sizeof(tAniBool);
+ len -= sizeof(tAniBool);
+ if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE)
+ return eSIR_FAILURE;
// Extract Titan CB Neighbor BSS info
pJoinReq->cbNeighbors.cbBssFoundPri = *pBuf;
pBuf++;
diff --git a/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h b/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h
index 998e6ae1aa6c..8a6292e0cadc 100644
--- a/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h
+++ b/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h
@@ -188,6 +188,45 @@ ol_txrx_peer_update(ol_txrx_vdev_handle data_vdev, u_int8_t *peer_mac,
ol_txrx_peer_update_param_t *param,
ol_txrx_peer_update_select_t select);
+enum {
+ OL_TX_WMM_AC_BE,
+ OL_TX_WMM_AC_BK,
+ OL_TX_WMM_AC_VI,
+ OL_TX_WMM_AC_VO,
+
+ OL_TX_NUM_WMM_AC
+};
+
+/**
+ * @brief Parameter type to pass WMM setting to wdi_in_set_wmm_param
+ * @details
+ * The struct is used to specify informaiton to update TX WMM scheduler.
+ */
+struct ol_tx_ac_param_t {
+ u_int32_t aifs;
+ u_int32_t cwmin;
+ u_int32_t cwmax;
+};
+
+struct ol_tx_wmm_param_t {
+ struct ol_tx_ac_param_t ac[OL_TX_NUM_WMM_AC];
+};
+
+/**
+ * @brief Set paramters of WMM scheduler per AC settings. .
+ * @details
+ * This function applies only to HL systems.
+ *
+ * @param data_pdev - the physical device being paused
+ * @param wmm_param - the wmm parameters
+ */
+#if defined(CONFIG_HL_SUPPORT)
+void
+ol_txrx_set_wmm_param(ol_txrx_pdev_handle data_pdev, struct ol_tx_wmm_param_t wmm_param);
+#else
+#define ol_txrx_set_wmm_param(data_pdev, wmm_param) /* no-op */
+#endif /* CONFIG_HL_SUPPORT */
+
/**
* @brief Notify tx data SW that a peer's transmissions are suspended.
* @details
@@ -1078,4 +1117,6 @@ ol_txrx_ll_set_tx_pause_q_depth(
);
#endif /* QCA_LL_TX_FLOW_CT */
+
+
#endif /* _OL_TXRX_CTRL_API__H_ */
diff --git a/CORE/SERVICES/COMMON/wdi_in.h b/CORE/SERVICES/COMMON/wdi_in.h
index 683f6569188f..5983f3b00dee 100644
--- a/CORE/SERVICES/COMMON/wdi_in.h
+++ b/CORE/SERVICES/COMMON/wdi_in.h
@@ -1228,6 +1228,7 @@ ol_tx_queue_log_display(ol_txrx_pdev_handle pdev);
#define wdi_in_get_tx_resource ol_txrx_get_tx_resource
#define wdi_in_ll_set_tx_pause_q_depth ol_txrx_ll_set_tx_pause_q_depth
#endif /* QCA_LL_TX_FLOW_CT */
+#define wdi_in_set_wmm_param ol_txrx_set_wmm_param
#include <ol_txrx_dbg.h>
diff --git a/CORE/SERVICES/HIF/PCIe/copy_engine.c b/CORE/SERVICES/HIF/PCIe/copy_engine.c
index c1291b905dbb..106541a4766e 100644
--- a/CORE/SERVICES/HIF/PCIe/copy_engine.c
+++ b/CORE/SERVICES/HIF/PCIe/copy_engine.c
@@ -1537,14 +1537,14 @@ CE_fini(struct CE_handle *copyeng)
if (CE_state->src_ring) {
A_FREE(CE_state->src_ring->shadow_base_unaligned);
pci_free_consistent(scn->sc_osdev->bdev,
- (CE_state->src_ring->nentries * sizeof(struct CE_dest_desc) + CE_DESC_RING_ALIGN),
- CE_state->src_ring->base_addr_owner_space, CE_state->src_ring->base_addr_CE_space);
+ (CE_state->src_ring->nentries * sizeof(struct CE_src_desc) + CE_DESC_RING_ALIGN),
+ CE_state->src_ring->base_addr_owner_space_unaligned, CE_state->src_ring->base_addr_CE_space);
A_FREE(CE_state->src_ring);
}
if (CE_state->dest_ring) {
pci_free_consistent(scn->sc_osdev->bdev,
(CE_state->dest_ring->nentries * sizeof(struct CE_dest_desc) + CE_DESC_RING_ALIGN),
- CE_state->dest_ring->base_addr_owner_space, CE_state->dest_ring->base_addr_CE_space);
+ CE_state->dest_ring->base_addr_owner_space_unaligned, CE_state->dest_ring->base_addr_CE_space);
A_FREE(CE_state->dest_ring);
}
A_FREE(CE_state);
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index f93f60da0271..4446787557e3 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -240,7 +240,12 @@ wmi_unified_vdev_up_send(wmi_unified_t wmi,
void wma_set_dfs_regdomain(tp_wma_handle wma);
static VOS_STATUS wma_set_thermal_mgmt(tp_wma_handle wma_handle,
- t_thermal_cmd_params thermal_info);
+ t_thermal_cmd_params thermal_info);
+
+#ifdef FEATURE_WLAN_CH_AVOID
+VOS_STATUS wma_process_ch_avoid_update_req(tp_wma_handle wma_handle,
+ tSirChAvoidUpdateReq *ch_avoid_update_req);
+#endif /* FEATURE_WLAN_CH_AVOID */
static void wma_set_stakey(tp_wma_handle wma_handle, tpSetStaKeyParams key_info);
@@ -1134,7 +1139,7 @@ static void wma_delete_all_ap_remote_peers(tp_wma_handle wma, A_UINT32 vdev_id)
adf_os_atomic_init(&temp->ref_cnt);
adf_os_atomic_inc(&temp->ref_cnt);
wma_remove_peer(wma, temp->mac_addr.raw,
- vdev_id, peer);
+ vdev_id, temp);
}
adf_os_spin_lock_bh(&vdev->pdev->peer_ref_mutex);
}
@@ -8386,6 +8391,44 @@ static int32_t wma_set_priv_cfg(tp_wma_handle wma_handle,
wma_handle->wma_ibss_power_save_params.txSPEndInactivityTime);
}
break;
+ case WMA_VDEV_DFS_CONTROL_CMDID:
+ {
+ struct ieee80211com *dfs_ic = wma_handle->dfs_ic;
+
+ if (!dfs_ic) {
+ ret = -ENOENT;
+ } else {
+ if (dfs_ic->ic_curchan) {
+ WMA_LOGD("%s: Debug cmd: %s received on ch: %d",
+ __func__,
+ "WMA_VDEV_DFS_CONTROL_CMDID",
+ dfs_ic->ic_curchan->ic_ieee);
+
+ if (dfs_ic->ic_curchan->ic_flagext &
+ IEEE80211_CHAN_DFS) {
+ ret = wma_dfs_indicate_radar(dfs_ic,
+ dfs_ic->ic_curchan);
+ } else {
+ ret = -ENOENT;
+ }
+ } else {
+ ret = -ENOENT;
+ }
+ }
+
+ if ( ret == -ENOENT) {
+ WMA_LOGE("%s: Operating channel is not DFS capable, "
+ "ignoring %s",
+ __func__,
+ "WMA_VDEV_DFS_CONTROL_CMDID");
+ } else if (ret) {
+ WMA_LOGE("%s: Sending command %s failed with %d\n",
+ __func__,
+ "WMA_VDEV_DFS_CONTROL_CMDID",
+ ret);
+ }
+ }
+ break;
default:
WMA_LOGE("Invalid wma config command id:%d",
privcmd->param_id);
@@ -11852,6 +11895,8 @@ static VOS_STATUS wma_process_update_edca_param_req(WMA_HANDLE handle,
tSirMacEdcaParamRecord *edca_record;
int ac;
int len = sizeof(*cmd);
+ ol_txrx_pdev_handle pdev;
+ struct ol_tx_wmm_param_t ol_tx_wmm_param;
buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
@@ -11891,12 +11936,19 @@ static VOS_STATUS wma_process_update_edca_param_req(WMA_HANDLE handle,
}
wma_update_edca_params_for_ac(edca_record, wmm_param, ac);
+
+ ol_tx_wmm_param.ac[ac].aifs = wmm_param->aifs;
+ ol_tx_wmm_param.ac[ac].cwmin = wmm_param->cwmin;
+ ol_tx_wmm_param.ac[ac].cwmax = wmm_param->cwmax;
}
if (wmi_unified_cmd_send(wma_handle->wmi_handle, buf, len,
WMI_VDEV_SET_WMM_PARAMS_CMDID))
goto fail;
+ pdev = vos_get_context(VOS_MODULE_ID_TXRX, wma_handle->vos_context);
+ wdi_in_set_wmm_param(pdev, ol_tx_wmm_param);
+
return VOS_STATUS_SUCCESS;
fail:
@@ -17801,6 +17853,14 @@ VOS_STATUS wma_mc_process_msg(v_VOID_t *vos_context, vos_msg_t *msg)
break;
#endif
+#ifdef FEATURE_WLAN_CH_AVOID
+ case WDA_CH_AVOID_UPDATE_REQ:
+ wma_process_ch_avoid_update_req(wma_handle,
+ (tSirChAvoidUpdateReq *)msg->bodyptr);
+ vos_mem_free(msg->bodyptr);
+ break;
+#endif
+
case WDA_DHCP_START_IND:
case WDA_DHCP_STOP_IND:
wma_process_dhcp_ind(wma_handle,
@@ -18924,6 +18984,58 @@ static int wma_channel_avoid_evt_handler(void *handle, u_int8_t *event,
return 0;
}
+
+/* function : wma_process_ch_avoid_update_req
+ * Descriptin : handles channel avoid update request
+ * Args :
+ * Returns :
+ */
+VOS_STATUS wma_process_ch_avoid_update_req(tp_wma_handle wma_handle,
+ tSirChAvoidUpdateReq *ch_avoid_update_req)
+{
+ int status = 0;
+ wmi_buf_t buf = NULL;
+ u_int8_t *buf_ptr;
+ wmi_chan_avoid_update_cmd_param *ch_avoid_update_fp;
+ int len = sizeof(wmi_chan_avoid_update_cmd_param);
+
+ if (ch_avoid_update_req == NULL)
+ {
+ WMA_LOGE("%s : ch_avoid_update_req is NULL", __func__);
+ return VOS_STATUS_E_FAILURE;
+ }
+
+ WMA_LOGI("%s: WMA --> WMI_CHAN_AVOID_UPDATE",
+ __func__);
+
+ buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
+ if (!buf) {
+ WMA_LOGE("%s : wmi_buf_alloc failed", __func__);
+ return VOS_STATUS_E_NOMEM;
+ }
+
+ buf_ptr = (u_int8_t *) wmi_buf_data(buf);
+ ch_avoid_update_fp = (wmi_chan_avoid_update_cmd_param *) buf_ptr;
+ WMITLV_SET_HDR(&ch_avoid_update_fp->tlv_header,
+ WMITLV_TAG_STRUC_wmi_chan_avoid_update_cmd_param,
+ WMITLV_GET_STRUCT_TLVLEN(
+ wmi_chan_avoid_update_cmd_param));
+
+ status = wmi_unified_cmd_send(wma_handle->wmi_handle, buf,
+ len, WMI_CHAN_AVOID_UPDATE_CMDID);
+ if (status != EOK) {
+ WMA_LOGE("wmi_unified_cmd_send"
+ " WMITLV_TABLE_WMI_CHAN_AVOID_UPDATE"
+ " returned Error %d",
+ status);
+ wmi_buf_free(buf);
+ return VOS_STATUS_E_FAILURE;
+ }
+
+ WMA_LOGI("%s: WMA --> WMI_CHAN_AVOID_UPDATE sent through WMI",
+ __func__);
+ return VOS_STATUS_SUCCESS;
+}
#endif /* FEATURE_WLAN_CH_AVOID */
/* function : wma_scan_completion_timeout
@@ -21977,21 +22089,21 @@ int wma_dfs_indicate_radar(struct ieee80211com *ic,
if (wma == NULL)
{
WMA_LOGE("%s: DFS- Invalid wma", __func__);
- return (0);
+ return -ENOENT;
}
hdd_ctx = vos_get_context(VOS_MODULE_ID_HDD,wma->vos_context);
if (wma->dfs_ic != ic)
{
WMA_LOGE("%s:DFS- Invalid WMA handle",__func__);
- return (0);
+ return -ENOENT;
}
radar_event = (struct wma_dfs_radar_indication *)
vos_mem_malloc(sizeof(struct wma_dfs_radar_indication));
if (radar_event == NULL)
{
WMA_LOGE("%s:DFS- Invalid radar_event",__func__);
- return (0);
+ return -ENOENT;
}
/*
@@ -22019,7 +22131,7 @@ int wma_dfs_indicate_radar(struct ieee80211com *ic,
WMA_LOGE("%s:DFS- WDA_DFS_RADAR_IND Message Posted",__func__);
}
- return 1;
+ return 0;
}
static eHalStatus wma_set_smps_params(tp_wma_handle wma, tANI_U8 vdev_id, int value)
diff --git a/CORE/SERVICES/WMA/wma.h b/CORE/SERVICES/WMA/wma.h
index 9d34c2f637ff..f6b71968a3fc 100644
--- a/CORE/SERVICES/WMA/wma.h
+++ b/CORE/SERVICES/WMA/wma.h
@@ -1312,6 +1312,9 @@ enum wma_cfg_cmd_id {
WMA_VDEV_IBSS_SET_INACTIVITY_TIME,
WMA_VDEV_IBSS_SET_TXSP_END_INACTIVITY_TIME,
+ /* dfs control interface */
+ WMA_VDEV_DFS_CONTROL_CMDID,
+
/* Add any new command before this */
WMA_CMD_ID_MAX
};
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index 95a50df27ece..49ebc2885799 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -3529,6 +3529,18 @@ eHalStatus sme_AddChAvoidCallback
tHalHandle hHal,
void (*pCallbackfn)(void *hdd_context, void *indi_param)
);
+
+/* ---------------------------------------------------------------------------
+ \fn sme_ChAvoidUpdateReq
+ \API to request channel avoidance update from FW.
+ \param hHal - The handle returned by macOpen
+ \param update_type - The udpate_type parameter of this request call
+ \- return Configuration message posting status, SUCCESS or Fail
+ -------------------------------------------------------------------------*/
+eHalStatus sme_ChAvoidUpdateReq
+(
+ tHalHandle hHal
+);
#endif /* FEATURE_WLAN_CH_AVOID */
eHalStatus sme_RoamChannelChangeReq( tHalHandle hHal, tCsrBssid bssid,
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index f3f5a28c448d..45e2570a6dd7 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -13420,6 +13420,20 @@ eHalStatus csrSendJoinReqMsg( tpAniSirGlobal pMac, tANI_U32 sessionId, tSirBssDe
vos_mem_copy(pBuf, &dwTmp, sizeof(tAniBool));
pBuf += sizeof(tAniBool);
}
+ // OSEN
+ if(pProfile->bOSENAssociation)
+ {
+ //OSEN connection
+ dwTmp = pal_cpu_to_be32(TRUE);
+ vos_mem_copy(pBuf, &dwTmp, sizeof(tAniBool));
+ pBuf += sizeof(tAniBool);
+ }
+ else
+ {
+ dwTmp = pal_cpu_to_be32(FALSE);
+ vos_mem_copy(pBuf, &dwTmp, sizeof(tAniBool));
+ pBuf += sizeof(tAniBool);
+ }
//BssDesc
csrPrepareJoinReassocReqBuffer( pMac, pBssDescription, pBuf,
(tANI_U8)pProfile->uapsd_mask);
diff --git a/CORE/SME/src/csr/csrUtil.c b/CORE/SME/src/csr/csrUtil.c
index 467ada62325c..873e1f8f8ef7 100644
--- a/CORE/SME/src/csr/csrUtil.c
+++ b/CORE/SME/src/csr/csrUtil.c
@@ -1680,8 +1680,12 @@ v_U16_t csrCheckConcurrentChannelOverlap(tpAniSirGlobal pMac, v_U16_t sap_ch,
vos_freq_to_chan(intf_cfreq),
intf_cfreq, intf_hbw*2, intf_lfreq, intf_hfreq);
- if ( !((sap_lfreq >= intf_lfreq && sap_lfreq <= intf_hfreq)
- || (sap_hfreq >= intf_lfreq && sap_hfreq <= intf_hfreq)) ) {
+ if (!(
+ ((sap_lfreq > intf_lfreq && sap_lfreq < intf_hfreq) ||
+ (sap_hfreq > intf_lfreq && sap_hfreq < intf_hfreq))
+ || ((intf_lfreq > sap_lfreq && intf_lfreq < sap_hfreq) ||
+ (intf_hfreq > sap_lfreq && intf_hfreq < sap_hfreq))
+ )) {
intf_ch = 0;
}
}
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index ffc5637eb2e1..0e5661c526a6 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -12071,6 +12071,59 @@ eHalStatus sme_AddChAvoidCallback
return(status);
}
+
+/* ---------------------------------------------------------------------------
+ \fn sme_ChAvoidUpdateReq
+ \API to request channel avoidance update from FW.
+ \param hHal - The handle returned by macOpen
+ \param update_type - The udpate_type parameter of this request call
+ \- return Configuration message posting status, SUCCESS or Fail
+ -------------------------------------------------------------------------*/
+eHalStatus sme_ChAvoidUpdateReq
+(
+ tHalHandle hHal
+)
+{
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+ tSirChAvoidUpdateReq *cauReq;
+ vos_msg_t vosMessage;
+
+ status = sme_AcquireGlobalLock(&pMac->sme);
+ if (eHAL_STATUS_SUCCESS == status)
+ {
+ cauReq = (tSirChAvoidUpdateReq *)
+ vos_mem_malloc(sizeof(tSirChAvoidUpdateReq));
+ if (NULL == cauReq)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ "%s Request Buffer Alloc Fail", __func__);
+ sme_ReleaseGlobalLock(&pMac->sme);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ cauReq->reserved_param = 0;
+
+ /* serialize the req through MC thread */
+ vosMessage.bodyptr = cauReq;
+ vosMessage.type = WDA_CH_AVOID_UPDATE_REQ;
+ vosStatus = vos_mq_post_message(VOS_MQ_ID_WDA, &vosMessage);
+ if (!VOS_IS_STATUS_SUCCESS(vosStatus))
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "%s: Post Ch Avoid Update MSG fail", __func__);
+ vos_mem_free(cauReq);
+ sme_ReleaseGlobalLock(&pMac->sme);
+ return eHAL_STATUS_FAILURE;
+ }
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ "%s: Posted Ch Avoid Update MSG", __func__);
+ sme_ReleaseGlobalLock(&pMac->sme);
+ }
+
+ return(status);
+}
#endif /* FEATURE_WLAN_CH_AVOID */
/* -------------------------------------------------------------------------
diff --git a/CORE/SYS/legacy/src/utils/src/macTrace.c b/CORE/SYS/legacy/src/utils/src/macTrace.c
index eda102e28536..109011fca60b 100644
--- a/CORE/SYS/legacy/src/utils/src/macTrace.c
+++ b/CORE/SYS/legacy/src/utils/src/macTrace.c
@@ -801,6 +801,9 @@ tANI_U8* macTraceGetWdaMsgString( tANI_U16 wdaMsg )
#endif
CASE_RETURN_STRING(WDA_DHCP_START_IND);
CASE_RETURN_STRING(WDA_DHCP_STOP_IND);
+#ifdef FEATURE_WLAN_CH_AVOID
+ CASE_RETURN_STRING(WDA_CH_AVOID_UPDATE_REQ);
+#endif
CASE_RETURN_STRING(WDA_INIT_THERMAL_INFO_CMD);
CASE_RETURN_STRING(WDA_SET_THERMAL_LEVEL);
CASE_RETURN_STRING(WDA_SET_SAP_INTRABSS_DIS);
diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index f084a773e95a..def5063d9646 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -1301,6 +1301,10 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb);
#define WDA_LPHB_WAIT_EXPIRE_IND SIR_HAL_LPHB_WAIT_EXPIRE_IND
#endif /* FEATURE_WLAN_LPHB */
+#ifdef FEATURE_WLAN_CH_AVOID
+#define WDA_CH_AVOID_UPDATE_REQ SIR_HAL_CH_AVOID_UPDATE_REQ
+#endif /* FEATURE_WLAN_CH_AVOID */
+
#define WDA_ADD_PERIODIC_TX_PTRN_IND SIR_HAL_ADD_PERIODIC_TX_PTRN_IND
#define WDA_DEL_PERIODIC_TX_PTRN_IND SIR_HAL_DEL_PERIODIC_TX_PTRN_IND