diff options
| author | Akash Patel <akashp@codeaurora.org> | 2014-06-28 10:48:16 -0700 |
|---|---|---|
| committer | Akash Patel <akashp@codeaurora.org> | 2014-06-28 10:49:23 -0700 |
| commit | ad7a7aac4fcb0364bf3ba99384357fe69a2fac70 (patch) | |
| tree | ed46c486aff7b674b5157ec61de21c3f73c34a7f | |
| parent | ba6576d0fef0dfcea09bdc54c02c1ab5587b4b33 (diff) | |
| parent | a62a9d2108ddc4705e41a832538ef368f1756513 (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
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 |
