From 671a190aa974ff39bbca9904c947adca6708f4cd Mon Sep 17 00:00:00 2001 From: Arif Hussain Date: Fri, 17 Mar 2017 09:08:32 -0700 Subject: [PATCH] qcacld-3.0: Add cac duration and dfs region in vdev start Add support to fill cac duration and dfs region in vdev start command, these values are used in firmware on phyerror processing and cac timer offload cases. Change-Id: I8bfbd4a3f59002f92ee2e5e321c15da849fce9ec CRs-Fixed: 2021357 --- core/mac/inc/sir_api.h | 4 + .../src/pe/lim/lim_process_mlm_host_roam.c | 2 +- .../src/pe/lim/lim_process_mlm_req_messages.c | 12 +- .../src/pe/lim/lim_process_sme_req_messages.c | 9 +- core/mac/src/pe/lim/lim_reassoc_utils.c | 3 +- core/mac/src/pe/lim/lim_send_messages.c | 6 +- core/mac/src/pe/lim/lim_send_messages.h | 6 +- core/mac/src/pe/lim/lim_types.h | 5 +- core/mac/src/pe/lim/lim_utils.c | 6 +- core/sap/src/sap_fsm.c | 157 +++++++++++------- core/sme/inc/csr_api.h | 2 + core/sme/inc/csr_internal.h | 2 + core/sme/src/csr/csr_api_roam.c | 8 + core/wma/inc/wma.h | 4 + core/wma/inc/wma_if.h | 8 + core/wma/src/wma_dev_if.c | 4 + core/wma/src/wma_scan_roam.c | 2 + 17 files changed, 168 insertions(+), 72 deletions(-) diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 81cd1a36ec42..6d92c0d78bb2 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -693,6 +693,8 @@ typedef struct sSirSmeStartBssReq { uint8_t sap_dot11mc; uint8_t beacon_tx_rate; bool vendor_vht_sap; + uint32_t cac_duration_ms; + uint32_t dfs_regdomain; } tSirSmeStartBssReq, *tpSirSmeStartBssReq; @@ -3952,6 +3954,8 @@ typedef struct sSirChanChangeRequest { uint32_t dot11mode; tSirMacRateSet operational_rateset; tSirMacRateSet extended_rateset; + uint32_t cac_duration_ms; + uint32_t dfs_regdomain; } tSirChanChangeRequest, *tpSirChanChangeRequest; typedef struct sSirChanChangeResponse { diff --git a/core/mac/src/pe/lim/lim_process_mlm_host_roam.c b/core/mac/src/pe/lim/lim_process_mlm_host_roam.c index e556873473dc..0857c8ad471e 100644 --- a/core/mac/src/pe/lim/lim_process_mlm_host_roam.c +++ b/core/mac/src/pe/lim/lim_process_mlm_host_roam.c @@ -157,7 +157,7 @@ void lim_process_mlm_reassoc_req(tpAniSirGlobal mac_ctx, uint32_t *msg) session->ch_center_freq_seg1, session->ch_width, session->maxTxPower, - session->peSessionId); + session->peSessionId, 0, 0); return; end: diff --git a/core/mac/src/pe/lim/lim_process_mlm_req_messages.c b/core/mac/src/pe/lim/lim_process_mlm_req_messages.c index 04c936ec07ec..b414f1e69ef8 100644 --- a/core/mac/src/pe/lim/lim_process_mlm_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_mlm_req_messages.c @@ -201,7 +201,7 @@ lim_change_channel_with_callback(tpAniSirGlobal mac_ctx, uint8_t new_chan, lim_send_switch_chnl_params(mac_ctx, new_chan, 0, 0, CH_WIDTH_20MHZ, session_entry->maxTxPower, - session_entry->peSessionId, false); + session_entry->peSessionId, false, 0, 0); return; } @@ -603,6 +603,8 @@ lim_mlm_add_bss(tpAniSirGlobal mac_ctx, addbss_param->dot11_mode = session->dot11mode; addbss_param->nss = session->nss; + addbss_param->cac_duration_ms = mlm_start_req->cac_duration_ms; + addbss_param->dfs_regdomain = mlm_start_req->dfs_regdomain; if (QDF_IBSS_MODE == addbss_param->halPersona) { addbss_param->nss_2g = mac_ctx->vdev_type_nss_2g.ibss; addbss_param->nss_5g = mac_ctx->vdev_type_nss_5g.ibss; @@ -764,7 +766,7 @@ static void lim_post_join_set_link_state_callback(tpAniSirGlobal mac, session_entry->ch_center_freq_seg1, session_entry->ch_width, session_entry->maxTxPower, - session_entry->peSessionId); + session_entry->peSessionId, 0, 0); return; failure: @@ -2698,7 +2700,8 @@ void lim_complete_mlm_scan(tpAniSirGlobal mac_ctx, tSirResultCodes ret_code) void lim_set_channel(tpAniSirGlobal mac_ctx, uint8_t channel, uint8_t ch_center_freq_seg0, uint8_t ch_center_freq_seg1, enum phy_ch_width ch_width, int8_t max_tx_power, - uint8_t pe_session_id) + uint8_t pe_session_id, uint32_t cac_duration_ms, + uint32_t dfs_regdomain) { tpPESession pe_session; pe_session = pe_find_session_by_session_id(mac_ctx, pe_session_id); @@ -2710,5 +2713,6 @@ void lim_set_channel(tpAniSirGlobal mac_ctx, uint8_t channel, } lim_send_switch_chnl_params(mac_ctx, channel, ch_center_freq_seg0, ch_center_freq_seg1, ch_width, - max_tx_power, pe_session_id, false); + max_tx_power, pe_session_id, false, + cac_duration_ms, dfs_regdomain); } diff --git a/core/mac/src/pe/lim/lim_process_sme_req_messages.c b/core/mac/src/pe/lim/lim_process_sme_req_messages.c index a171c55d2a77..10a1e76f74f7 100644 --- a/core/mac/src/pe/lim/lim_process_sme_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_sme_req_messages.c @@ -1047,7 +1047,10 @@ __lim_handle_sme_start_bss_request(tpAniSirGlobal mac_ctx, uint32_t *msg_buf) mlm_start_req->cbMode = sme_start_bss_req->cbMode; mlm_start_req->beaconPeriod = session->beaconParams.beaconInterval; - + mlm_start_req->cac_duration_ms = + sme_start_bss_req->cac_duration_ms; + mlm_start_req->dfs_regdomain = + sme_start_bss_req->dfs_regdomain; if (LIM_IS_AP_ROLE(session)) { mlm_start_req->dtimPeriod = session->dtimPeriod; mlm_start_req->wps_state = session->wps_state; @@ -5574,7 +5577,9 @@ static void lim_process_sme_channel_change_request(tpAniSirGlobal mac_ctx, session_entry->ch_center_freq_seg0, session_entry->ch_center_freq_seg1, session_entry->ch_width, - max_tx_pwr, session_entry->peSessionId); + max_tx_pwr, session_entry->peSessionId, + ch_change_req->cac_duration_ms, + ch_change_req->dfs_regdomain); } /****************************************************************************** diff --git a/core/mac/src/pe/lim/lim_reassoc_utils.c b/core/mac/src/pe/lim/lim_reassoc_utils.c index 65bc73395c22..a8aa0c8c9087 100644 --- a/core/mac/src/pe/lim/lim_reassoc_utils.c +++ b/core/mac/src/pe/lim/lim_reassoc_utils.c @@ -517,7 +517,8 @@ lim_restore_pre_reassoc_state(tpAniSirGlobal pMac, psessionEntry->ch_center_freq_seg1, psessionEntry->ch_width, psessionEntry->maxTxPower, - psessionEntry->peSessionId); + psessionEntry->peSessionId, + 0, 0); /* @ToDo:Need to Integrate the STOP the Dataxfer to AP from 11H code */ diff --git a/core/mac/src/pe/lim/lim_send_messages.c b/core/mac/src/pe/lim/lim_send_messages.c index d926bd18bb6d..ca7e5bb9762d 100644 --- a/core/mac/src/pe/lim/lim_send_messages.c +++ b/core/mac/src/pe/lim/lim_send_messages.c @@ -209,7 +209,9 @@ tSirRetStatus lim_send_switch_chnl_params(tpAniSirGlobal pMac, enum phy_ch_width ch_width, int8_t maxTxPower, uint8_t peSessionId, - uint8_t is_restart) + uint8_t is_restart, + uint32_t cac_duration_ms, + uint32_t dfs_regdomain) { tpSwitchChannelParams pChnlParams = NULL; struct scheduler_msg msgQ; @@ -264,6 +266,8 @@ tSirRetStatus lim_send_switch_chnl_params(tpAniSirGlobal pMac, } pChnlParams->restart_on_chan_switch = is_restart; + pChnlParams->cac_duration_ms = cac_duration_ms; + pChnlParams->dfs_regdomain = dfs_regdomain; if (cds_is_5_mhz_enabled()) pChnlParams->ch_width = CH_WIDTH_5MHZ; diff --git a/core/mac/src/pe/lim/lim_send_messages.h b/core/mac/src/pe/lim/lim_send_messages.h index c5c00d0e642f..0173f7217f68 100644 --- a/core/mac/src/pe/lim/lim_send_messages.h +++ b/core/mac/src/pe/lim/lim_send_messages.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2016 The Linux Foundation. All rights reserved. + * Copyright (c) 2011-2017 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -70,7 +70,9 @@ tSirRetStatus lim_send_switch_chnl_params(tpAniSirGlobal pMac, enum phy_ch_width ch_width, int8_t maxTxPower, uint8_t peSessionId, - uint8_t is_restart); + uint8_t is_restart, + uint32_t cac_duration_ms, + uint32_t dfs_regdomain); tSirRetStatus lim_send_edca_params(tpAniSirGlobal pMac, tSirMacEdcaParamRecord *pUpdatedEdcaParams, diff --git a/core/mac/src/pe/lim/lim_types.h b/core/mac/src/pe/lim/lim_types.h index df6e7423853b..d7b46af575a2 100644 --- a/core/mac/src/pe/lim/lim_types.h +++ b/core/mac/src/pe/lim/lim_types.h @@ -199,6 +199,8 @@ typedef struct sLimMlmStartReq { uint8_t wps_state; uint8_t obssProtEnabled; uint8_t beacon_tx_rate; + uint32_t cac_duration_ms; + uint32_t dfs_regdomain; } tLimMlmStartReq, *tpLimMlmStartReq; typedef struct sLimMlmStartCnf { @@ -586,7 +588,8 @@ uint32_t lim_defer_msg(tpAniSirGlobal, struct scheduler_msg *); void lim_set_channel(tpAniSirGlobal pMac, uint8_t channel, uint8_t ch_center_freq_seg0, uint8_t ch_center_freq_seg1, enum phy_ch_width ch_width, int8_t maxTxPower, - uint8_t peSessionId); + uint8_t peSessionId, uint32_t cac_duration_ms, + uint32_t dfs_regdomain); /* / Function that completes channel scan */ diff --git a/core/mac/src/pe/lim/lim_utils.c b/core/mac/src/pe/lim/lim_utils.c index 24a6ef23ddd9..13ebe78a5b31 100644 --- a/core/mac/src/pe/lim/lim_utils.c +++ b/core/mac/src/pe/lim/lim_utils.c @@ -2714,7 +2714,7 @@ void lim_switch_primary_channel(tpAniSirGlobal pMac, uint8_t newChannel, lim_send_switch_chnl_params(pMac, newChannel, 0, 0, CH_WIDTH_20MHZ, psessionEntry->maxTxPower, - psessionEntry->peSessionId, false); + psessionEntry->peSessionId, false, 0, 0); return; } @@ -2757,7 +2757,7 @@ void lim_switch_primary_secondary_channel(tpAniSirGlobal pMac, ch_center_freq_seg1, ch_width, psessionEntry->maxTxPower, psessionEntry->peSessionId, - false); + false, 0, 0); /* Store the new primary and secondary channel in session entries if different */ if (psessionEntry->currentOperChannel != newChannel) { @@ -4559,7 +4559,7 @@ void lim_update_sta_run_time_ht_switch_chnl_params(tpAniSirGlobal pMac, psessionEntry->htRecommendedTxWidthSet, psessionEntry->maxTxPower, psessionEntry->peSessionId, - true); + true, 0, 0); /* In case of IBSS, if STA should update HT Info IE in its beacons. */ if (LIM_IS_IBSS_ROLE(psessionEntry)) { diff --git a/core/sap/src/sap_fsm.c b/core/sap/src/sap_fsm.c index 1868656538ed..5f77e64f0a00 100644 --- a/core/sap/src/sap_fsm.c +++ b/core/sap/src/sap_fsm.c @@ -1088,6 +1088,71 @@ sap_mark_leaking_ch(ptSapContext sap_ctx, } #endif /* end of WLAN_ENABLE_CHNL_MATRIX_RESTRICTION */ +/** + * sap_is_channel_bonding_etsi_weather_channel() - check weather chan bonding. + * @sap_ctx: sap context + * + * Check if the current SAP operating channel is bonded to weather radar + * channel in ETSI domain. + * + * Return: True if bonded to weather channel in ETSI + */ +static bool sap_is_channel_bonding_etsi_weather_channel(ptSapContext sap_ctx) +{ + if (IS_CH_BONDING_WITH_WEATHER_CH(sap_ctx->channel) && + (sap_ctx->ch_params.ch_width != CH_WIDTH_20MHZ)) + return true; + + return false; +} + +/** + * sap_get_cac_dur_dfs_region() - get cac duration and dfs region. + * @sap_ctxt: sap context + * @cac_duration_ms: pointer to cac duration + * @dfs_region: pointer to dfs region + * + * Get cac duration and dfs region. + * + * Return: None + */ +static void sap_get_cac_dur_dfs_region(ptSapContext sap_ctx, + uint32_t *cac_duration_ms, + uint32_t *dfs_region) +{ + tHalHandle hal = NULL; + tpAniSirGlobal mac = NULL; + + cds_get_dfs_region(dfs_region); + if (!sap_ctx) { + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, + "%s: null sap_ctx", __func__); + return; + } + + hal = CDS_GET_HAL_CB(sap_ctx->p_cds_gctx); + if (!hal) { + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, + "%s: null hal", __func__); + return; + } + + mac = PMAC_STRUCT(hal); + if (mac->sap.SapDfsInfo.ignore_cac) { + *cac_duration_ms = 0; + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_DEBUG, + "%s: ignore_cac is set", __func__); + return; + } + + if ((*dfs_region == DFS_ETSI_REGION) && + ((IS_ETSI_WEATHER_CH(sap_ctx->channel)) || + (sap_is_channel_bonding_etsi_weather_channel(sap_ctx)))) + *cac_duration_ms = ETSI_WEATHER_CH_CAC_TIMEOUT; + else + *cac_duration_ms = DEFAULT_CAC_TIMEOUT; +} + /* * This function adds availabe channel to bitmap * @@ -3796,6 +3861,9 @@ static QDF_STATUS sap_fsm_state_ch_select(ptSapContext sap_ctx, sap_ctx->ch_params.center_freq_seg1; sap_ctx->csr_roamProfile.ch_params.sec_ch_offset = sap_ctx->ch_params.sec_ch_offset; + sap_get_cac_dur_dfs_region(sap_ctx, + &sap_ctx->csr_roamProfile.cac_duration_ms, + &sap_ctx->csr_roamProfile.dfs_regdomain); QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, FL("notify hostapd about channel selection: %d"), sap_ctx->channel); @@ -4175,6 +4243,10 @@ static QDF_STATUS sap_fsm_state_disconnecting(ptSapContext sap_ctx, QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_MED, FL("sapdfs: Send channel change request on sapctx[%p]"), sap_ctx); + + sap_get_cac_dur_dfs_region(sap_ctx, + &sap_ctx->csr_roamProfile.cac_duration_ms, + &sap_ctx->csr_roamProfile.dfs_regdomain); /* * Most likely, radar has been detected and SAP wants to * change the channel @@ -5095,87 +5167,58 @@ static int sap_stop_dfs_cac_timer(ptSapContext sapContext) } -/** - * sap_is_channel_bonding_etsi_weather_channel() - check weather chan bonding. - * @sap_context: SAP context - * - * Check if the current SAP operating channel is bonded to weather radar - * channel in ETSI domain. - * - * Return: True if bonded to weather channel in ETSI - */ -static bool -sap_is_channel_bonding_etsi_weather_channel(ptSapContext sap_context) -{ - if (IS_CH_BONDING_WITH_WEATHER_CH(sap_context->channel) && - (sap_context->ch_params.ch_width != CH_WIDTH_20MHZ)) - return true; - - return false; -} - /* * Function to start the DFS CAC Timer * when SAP is started on a DFS channel */ -int sap_start_dfs_cac_timer(ptSapContext sapContext) +int sap_start_dfs_cac_timer(ptSapContext sap_ctx) { QDF_STATUS status; - uint32_t cacTimeOut; - tHalHandle hHal = NULL; - tpAniSirGlobal pMac = NULL; + uint32_t cac_dur; + tHalHandle hal = NULL; + tpAniSirGlobal mac = NULL; enum dfs_region dfs_region; - if (sapContext == NULL) { - return 0; - } - hHal = CDS_GET_HAL_CB(sapContext->p_cds_gctx); - - if (NULL == hHal) { + if (!sap_ctx) { QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, - "In %s invalid hHal", __func__); + "%s: null sap_ctx", __func__); return 0; } - pMac = PMAC_STRUCT(hHal); - if (pMac->sap.SapDfsInfo.ignore_cac) { - /* - * If User has set to ignore the CAC - * so, continue without CAC Timer. - */ - return 2; + hal = CDS_GET_HAL_CB(sap_ctx->p_cds_gctx); + if (!hal) { + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, + "%s: null hal", __func__); + return 0; } - cacTimeOut = DEFAULT_CAC_TIMEOUT; - cds_get_dfs_region(&dfs_region); - - if ((dfs_region == DFS_ETSI_REGION) - && ((IS_ETSI_WEATHER_CH(sapContext->channel)) || - (sap_is_channel_bonding_etsi_weather_channel(sapContext)))) { - cacTimeOut = ETSI_WEATHER_CH_CAC_TIMEOUT; - } + mac = PMAC_STRUCT(hal); + sap_get_cac_dur_dfs_region(sap_ctx, &cac_dur, &dfs_region); + if (0 == cac_dur) + return 0; #ifdef QCA_WIFI_NAPIER_EMULATION - cacTimeOut = cacTimeOut / 100; + cac_dur = cac_dur / 100; #endif QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_MED, - "sapdfs: SAP_DFS_CHANNEL_CAC_START on CH - %d, CAC TIMEOUT - %d sec", - sapContext->channel, cacTimeOut / 1000); + "sapdfs: SAP_DFS_CHANNEL_CAC_START on CH-%d, CAC_DUR-%d sec", + sap_ctx->channel, cac_dur / 1000); - qdf_mc_timer_init(&pMac->sap.SapDfsInfo.sap_dfs_cac_timer, + qdf_mc_timer_init(&mac->sap.SapDfsInfo.sap_dfs_cac_timer, QDF_TIMER_TYPE_SW, - sap_dfs_cac_timer_callback, (void *) hHal); + sap_dfs_cac_timer_callback, (void *)hal); - /*Start the CAC timer */ - status = - qdf_mc_timer_start(&pMac->sap.SapDfsInfo.sap_dfs_cac_timer, - cacTimeOut); + /* Start the CAC timer */ + status = qdf_mc_timer_start(&mac->sap.SapDfsInfo.sap_dfs_cac_timer, + cac_dur); if (status == QDF_STATUS_SUCCESS) { - pMac->sap.SapDfsInfo.is_dfs_cac_timer_running = true; + mac->sap.SapDfsInfo.is_dfs_cac_timer_running = true; return 1; } else { - pMac->sap.SapDfsInfo.is_dfs_cac_timer_running = false; - qdf_mc_timer_destroy(&pMac->sap.SapDfsInfo.sap_dfs_cac_timer); + mac->sap.SapDfsInfo.is_dfs_cac_timer_running = false; + qdf_mc_timer_destroy(&mac->sap.SapDfsInfo.sap_dfs_cac_timer); + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, + "%s: failed to start cac timer", __func__); return 0; } } diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index 3b42f35f86ec..6588080ea48b 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -974,6 +974,8 @@ typedef struct tagCsrRoamProfile { tSirMacRateSet extended_rates; struct qdf_mac_addr bssid_hint; bool do_not_roam; + uint32_t cac_duration_ms; + uint32_t dfs_regdomain; } tCsrRoamProfile; diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h index cad903cc1442..a33172222872 100644 --- a/core/sme/inc/csr_internal.h +++ b/core/sme/inc/csr_internal.h @@ -348,6 +348,8 @@ typedef struct tagCsrRoamStartBssParams { tSirAddIeParams addIeParams; uint8_t sap_dot11mc; uint8_t beacon_tx_rate; + uint32_t cac_duration_ms; + uint32_t dfs_regdomain; } tCsrRoamStartBssParams; typedef struct tagScanCmd { diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 8d4506ea7c85..707f9b575490 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -7657,6 +7657,8 @@ QDF_STATUS csr_roam_copy_profile(tpAniSirGlobal pMac, pDstProfile->extended_rates.numRates = pSrcProfile->extended_rates.numRates; } + pDstProfile->cac_duration_ms = pSrcProfile->cac_duration_ms; + pDstProfile->dfs_regdomain = pSrcProfile->dfs_regdomain; end: if (!QDF_IS_STATUS_SUCCESS(status)) { csr_release_profile(pMac, pDstProfile); @@ -13343,6 +13345,8 @@ QDF_STATUS csr_roam_issue_start_bss(tpAniSirGlobal pMac, uint32_t sessionId, pProfile->addIeParams.probeRespBCNData_buff; } pParam->sap_dot11mc = pProfile->sap_dot11mc; + pParam->cac_duration_ms = pProfile->cac_duration_ms; + pParam->dfs_regdomain = pProfile->dfs_regdomain; /* When starting an IBSS, start on the channel from the Profile. */ status = @@ -15503,6 +15507,8 @@ QDF_STATUS csr_send_mb_start_bss_req_msg(tpAniSirGlobal pMac, uint32_t sessionId pMsg->sap_dot11mc = pParam->sap_dot11mc; pMsg->vendor_vht_sap = pMac->roam.configParam.vendor_vht_sap; + pMsg->cac_duration_ms = pParam->cac_duration_ms; + pMsg->dfs_regdomain = pParam->dfs_regdomain; return umac_send_mb_message_to_mac(pMsg); } @@ -19231,6 +19237,8 @@ QDF_STATUS csr_roam_channel_change_req(tpAniSirGlobal pMac, pMsg->center_freq_seg_0 = ch_params->center_freq_seg0; pMsg->center_freq_seg_1 = ch_params->center_freq_seg1; + pMsg->cac_duration_ms = profile->cac_duration_ms; + pMsg->dfs_regdomain = profile->dfs_regdomain; qdf_mem_copy(pMsg->bssid, bssid.bytes, QDF_MAC_ADDR_SIZE); qdf_mem_copy(&pMsg->operational_rateset, ¶m.operationalRateSet, sizeof(pMsg->operational_rateset)); diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index 163553efac13..d0171aa5c4ca 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -1667,6 +1667,8 @@ struct wma_target_req { * number of receive streams * @he_capable: HE capability * @he_ops: HE operation + * @cac_duration_ms: cac duration in milliseconds + * @dfs_regdomain: dfs region */ struct wma_vdev_start_req { uint32_t beacon_intval; @@ -1695,6 +1697,8 @@ struct wma_vdev_start_req { bool he_capable; uint32_t he_ops; #endif + uint32_t cac_duration_ms; + uint32_t dfs_regdomain; }; /** diff --git a/core/wma/inc/wma_if.h b/core/wma/inc/wma_if.h index b7e24368dc76..ef120fe0c590 100644 --- a/core/wma/inc/wma_if.h +++ b/core/wma/inc/wma_if.h @@ -456,6 +456,8 @@ typedef struct sLimMlmSetKeysReq { * @smpsMode: SMPS mode * @dot11_mode: 802.11 mode * @he_capable: HE Capability + * @cac_duration_ms: cac duration in milliseconds + * @dfs_regdomain: dfs region */ typedef struct { tSirMacAddr bssId; @@ -527,6 +529,8 @@ typedef struct { tDot11fIEvendor_he_cap he_config; tDot11fIEvendor_he_op he_op; #endif + uint32_t cac_duration_ms; + uint32_t dfs_regdomain; } tAddBssParams, *tpAddBssParams; /** @@ -891,6 +895,8 @@ typedef struct { * @isDfsChannel: is DFS channel * @vhtCapable: VHT capable * @dot11_mode: 802.11 mode + * @cac_duration_ms: cac duration in milliseconds + * @dfs_regdomain: dfs region */ typedef struct { uint8_t channelNumber; @@ -924,6 +930,8 @@ typedef struct { #ifdef WLAN_FEATURE_11AX bool he_capable; #endif + uint32_t cac_duration_ms; + uint32_t dfs_regdomain; } tSwitchChannelParams, *tpSwitchChannelParams; typedef void (*tpSetLinkStateCallback)(tpAniSirGlobal pMac, void *msgParam, diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index c4b3678631ba..cb35b4877c8d 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -1984,6 +1984,8 @@ QDF_STATUS wma_vdev_start(tp_wma_handle wma, */ params.is_dfs = req->is_dfs; params.is_restart = isRestart; + params.cac_duration_ms = req->cac_duration_ms; + params.regdomain = req->dfs_regdomain; if ((QDF_GLOBAL_MONITOR_MODE != cds_get_conparam()) && req->is_dfs) { params.flag_dfs = WMI_CHAN_FLAG_DFS; temp_chan_info |= (1 << WMI_CHAN_FLAG_DFS); @@ -2966,6 +2968,8 @@ static void wma_add_bss_ap_mode(tp_wma_handle wma, tpAddBssParams add_bss) req.is_dfs = add_bss->bSpectrumMgtEnabled; req.oper_mode = BSS_OPERATIONAL_MODE_AP; req.ssid.length = add_bss->ssId.length; + req.cac_duration_ms = add_bss->cac_duration_ms; + req.dfs_regdomain = add_bss->dfs_regdomain; if (req.ssid.length > 0) qdf_mem_copy(req.ssid.ssId, add_bss->ssId.ssId, add_bss->ssId.length); diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index 524cd7eb53bd..ceea2a0291ef 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -2955,6 +2955,8 @@ void wma_set_channel(tp_wma_handle wma, tpSwitchChannelParams params) req.beacon_intval = 100; req.dtim_period = 1; req.is_dfs = params->isDfsChannel; + req.cac_duration_ms = params->cac_duration_ms; + req.dfs_regdomain = params->dfs_regdomain; /* In case of AP mode, once radar is detected, we need to * issuse VDEV RESTART, so we making is_channel_switch as