From 365d1cb2dce62fe0b5c55b2cbbac8037aa689589 Mon Sep 17 00:00:00 2001 From: Naveen Rawat Date: Fri, 5 Feb 2016 12:10:43 -0800 Subject: [PATCH] qcacld-3.0: Re-indent function sap_select_channel Fix indentation for function sap_select_channel Change-Id: I079648a7f553689b14b7bf940fc835aa60e944b7 CRs-Fixed: 972906 --- core/sap/src/sap_ch_select.c | 430 ++++++++++++++++------------------- 1 file changed, 201 insertions(+), 229 deletions(-) diff --git a/core/sap/src/sap_ch_select.c b/core/sap/src/sap_ch_select.c index 9e0b14385d23..4eeea7c3bce4 100644 --- a/core/sap/src/sap_ch_select.c +++ b/core/sap/src/sap_ch_select.c @@ -1890,299 +1890,271 @@ bool sap_filter_over_lap_ch(ptSapContext pSapCtx, uint16_t chNum) return eSAP_FALSE; } -/*========================================================================== - FUNCTION sap_select_channel +/** + * sap_select_channel_no_scan_result() - select SAP channel when no scan results + * are available. + * @sap_ctx: Sap context + * + * Returns: channel number if success, 0 otherwise + */ +static uint8_t sap_select_channel_no_scan_result(ptSapContext sap_ctx) +{ + enum channel_state ch_type; + uint32_t start_ch_num, end_ch_num; +#ifdef FEATURE_WLAN_CH_AVOID + uint8_t i, first_safe_ch_in_range = SAP_CHANNEL_NOT_SELECTED; +#endif + start_ch_num = sap_ctx->acs_cfg->start_ch; + end_ch_num = sap_ctx->acs_cfg->end_ch; - DESCRIPTION - Runs a algorithm to select the best channel to operate in based on BSS - rssi and bss count on each channel + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, + FL("start - end: %d - %d"), start_ch_num, end_ch_num); - DEPENDENCIES - NA. +#ifndef FEATURE_WLAN_CH_AVOID + sap_ctx->acs_cfg->pri_ch = start_ch_num; + sap_ctx->acs_cfg->ht_sec_ch = 0; + /* pick the first channel in configured range */ + return start_ch_num; +#else - PARAMETERS + /* get a channel in PCL and within the range */ + for (i = 0; i < sap_ctx->acs_cfg->pcl_ch_count; i++) { + if ((sap_ctx->acs_cfg->pcl_channels[i] < start_ch_num) || + (sap_ctx->acs_cfg->pcl_channels[i] > end_ch_num)) + continue; - IN - halHandle : Pointer to HAL handle - pResult : Pointer to tScanResultHandle + first_safe_ch_in_range = sap_ctx->acs_cfg->pcl_channels[i]; + break; + } - RETURN VALUE - uint8_t : Success - channel number, Fail - zero + if (SAP_CHANNEL_NOT_SELECTED != first_safe_ch_in_range) + return first_safe_ch_in_range; - SIDE EFFECTS - ============================================================================*/ -uint8_t sap_select_channel(tHalHandle halHandle, ptSapContext pSapCtx, - tScanResultHandle pScanResult) + for (i = 0; i < NUM_CHANNELS; i++) { + if ((safe_channels[i].channelNumber < start_ch_num) || + (safe_channels[i].channelNumber > end_ch_num)) + continue; + + ch_type = cds_get_channel_state(safe_channels[i].channelNumber); + + if ((ch_type == CHANNEL_STATE_DISABLE) || + (ch_type == CHANNEL_STATE_INVALID)) + continue; + + if (safe_channels[i].isSafe == true) { + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, + FL("channel %d in the configuration is safe"), + safe_channels[i].channelNumber); + first_safe_ch_in_range = safe_channels[i].channelNumber; + break; + } + + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, + FL("channel %d in the configuration is unsafe"), + safe_channels[i].channelNumber); + } + + /* if no channel selected return SAP_CHANNEL_NOT_SELECTED */ + return first_safe_ch_in_range; +#endif /* !FEATURE_WLAN_CH_AVOID */ +} + +/** + * sap_select_channel() - select SAP channel + * @hal: Pointer to HAL handle + * @sap_ctx: Sap context + * @scan_result: Pointer to tScanResultHandle + * + * Runs a algorithm to select the best channel to operate in based on BSS + * rssi and bss count on each channel + * + * Returns: channel number if success, 0 otherwise + */ +uint8_t sap_select_channel(tHalHandle hal, ptSapContext sap_ctx, + tScanResultHandle scan_result) { /* DFS param object holding all the data req by the algo */ - tSapChSelSpectInfo oSpectInfoParams = { NULL, 0 }; - tSapChSelSpectInfo *pSpectInfoParams = &oSpectInfoParams; /* Memory? NB */ - uint8_t bestChNum = SAP_CHANNEL_NOT_SELECTED; -#ifdef FEATURE_WLAN_CH_AVOID - uint8_t i; - uint8_t firstSafeChannelInRange = SAP_CHANNEL_NOT_SELECTED; -#endif + tSapChSelSpectInfo spect_info_obj = { NULL, 0 }; + tSapChSelSpectInfo *spect_info = &spect_info_obj; + uint8_t best_ch_num = SAP_CHANNEL_NOT_SELECTED; #ifdef SOFTAP_CHANNEL_RANGE - uint32_t startChannelNum; - uint32_t endChannelNum; - uint32_t operatingBand = 0; - uint32_t tmpChNum; uint8_t count; + uint32_t start_ch_num, end_ch_num, tmp_ch_num, operating_band = 0; #endif QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, "In %s, Running SAP Ch Select", __func__); #ifdef FEATURE_WLAN_CH_AVOID - sap_update_unsafe_channel_list(pSapCtx); + sap_update_unsafe_channel_list(sap_ctx); #endif - if (NULL == pScanResult) { + if (NULL == scan_result) { QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, - "%s: No external AP present\n", __func__); + FL("No external AP present")); #ifndef SOFTAP_CHANNEL_RANGE - return bestChNum; + return SAP_CHANNEL_NOT_SELECTED; #else - startChannelNum = pSapCtx->acs_cfg->start_ch; - endChannelNum = pSapCtx->acs_cfg->end_ch; - - - QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, - "%s: start - end: %d - %d\n", __func__, - startChannelNum, endChannelNum); - -#ifndef FEATURE_WLAN_CH_AVOID /* FEATURE_WLAN_CH_AVOID NOT defined case */ - pSapCtx->acs_cfg->pri_ch = startChannelNum; - pSapCtx->acs_cfg->ht_sec_ch = 0; - /* pick the first channel in configured range */ - return startChannelNum; -#else /* FEATURE_WLAN_CH_AVOID defined */ - - /* get a channel in PCL and within the range */ - for (i = 0; i < pSapCtx->acs_cfg->pcl_ch_count; i++) { - if ((pSapCtx->acs_cfg->pcl_channels[i] >= - startChannelNum) - && (pSapCtx->acs_cfg->pcl_channels[i] <= - endChannelNum)) { - firstSafeChannelInRange = - pSapCtx->acs_cfg->pcl_channels[i]; - break; - } - } - if (SAP_CHANNEL_NOT_SELECTED != firstSafeChannelInRange) - return firstSafeChannelInRange; - - for (i = 0; i < NUM_CHANNELS; i++) { - if ((safe_channels[i].channelNumber >= startChannelNum) - && (safe_channels[i].channelNumber <= - endChannelNum)) { - enum channel_state channel_type = - cds_get_channel_state(safe_channels[i]. - channelNumber); - - if ((channel_type == CHANNEL_STATE_DISABLE) || - (channel_type == CHANNEL_STATE_INVALID)) - continue; - - if (safe_channels[i].isSafe == true) { - QDF_TRACE(QDF_MODULE_ID_SAP, - QDF_TRACE_LEVEL_INFO_HIGH, - "%s: channel %d in the configuration is safe\n", - __func__, - safe_channels[i]. - channelNumber); - firstSafeChannelInRange = - safe_channels[i].channelNumber; - break; - } - - QDF_TRACE(QDF_MODULE_ID_SAP, - QDF_TRACE_LEVEL_INFO_HIGH, - "%s: channel %d in the configuration is unsafe\n", - __func__, - safe_channels[i].channelNumber); - } - } - - /* if no channel selected return SAP_CHANNEL_NOT_SELECTED */ - return firstSafeChannelInRange; -#endif /* !FEATURE_WLAN_CH_AVOID */ -#endif /* SOFTAP_CHANNEL_RANGE */ + return sap_select_channel_no_scan_result(sap_ctx); +#endif } - /* Initialize the structure pointed by pSpectInfoParams */ - if (sap_chan_sel_init(halHandle, pSpectInfoParams, pSapCtx) != eSAP_TRUE) { + /* Initialize the structure pointed by spect_info */ + if (sap_chan_sel_init(hal, spect_info, sap_ctx) != eSAP_TRUE) { QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_ERROR, - "In %s, Ch Select initialization failed", __func__); + FL("Ch Select initialization failed")); return SAP_CHANNEL_NOT_SELECTED; } /* Compute the weight of the entire spectrum in the operating band */ - sap_compute_spect_weight(pSpectInfoParams, halHandle, pScanResult, - pSapCtx); + sap_compute_spect_weight(spect_info, hal, scan_result, sap_ctx); #ifdef FEATURE_AP_MCC_CH_AVOIDANCE /* process avoid channel IE to collect all channels to avoid */ - sap_process_avoid_ie(halHandle, pSapCtx, pScanResult, pSpectInfoParams); + sap_process_avoid_ie(hal, sap_ctx, scan_result, spect_info); #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ #ifdef SOFTAP_CHANNEL_RANGE - startChannelNum = pSapCtx->acs_cfg->start_ch; - endChannelNum = pSapCtx->acs_cfg->end_ch; - SET_ACS_BAND(operatingBand, pSapCtx); + start_ch_num = sap_ctx->acs_cfg->start_ch; + end_ch_num = sap_ctx->acs_cfg->end_ch; + SET_ACS_BAND(operating_band, sap_ctx); - pSapCtx->acsBestChannelInfo.channelNum = 0; - pSapCtx->acsBestChannelInfo.weight = SAP_ACS_WEIGHT_MAX; + sap_ctx->acsBestChannelInfo.channelNum = 0; + sap_ctx->acsBestChannelInfo.weight = SAP_ACS_WEIGHT_MAX; - /* Sort the channel list as per the computed weights, lesser weight first. */ - sap_sort_chl_weight_all(pSapCtx, pSpectInfoParams, operatingBand); + /* Sort the ch lst as per the computed weights, lesser weight first. */ + sap_sort_chl_weight_all(sap_ctx, spect_info, operating_band); /*Loop till get the best channel in the given range */ - for (count = 0; count < pSpectInfoParams->numSpectChans; count++) { - if ((startChannelNum <= pSpectInfoParams->pSpectCh[count].chNum) - && (endChannelNum >= - pSpectInfoParams->pSpectCh[count].chNum)) { - if (bestChNum == SAP_CHANNEL_NOT_SELECTED) { - bestChNum = - pSpectInfoParams->pSpectCh[count].chNum; - /* check if bestChNum is in preferred channel list */ - bestChNum = - sap_select_preferred_channel_from_channel_list - (bestChNum, pSapCtx, pSpectInfoParams); - if (bestChNum == SAP_CHANNEL_NOT_SELECTED) { - /* not in preferred channel list, go to next best channel */ - continue; - } + for (count = 0; count < spect_info->numSpectChans; count++) { + if ((start_ch_num > spect_info->pSpectCh[count].chNum) || + (end_ch_num < spect_info->pSpectCh[count].chNum)) + continue; + + if (best_ch_num == SAP_CHANNEL_NOT_SELECTED) { + best_ch_num = spect_info->pSpectCh[count].chNum; + /* check if best_ch_num is in preferred channel list */ + best_ch_num = + sap_select_preferred_channel_from_channel_list( + best_ch_num, sap_ctx, spect_info); + /* if not in preferred ch lst, go to nxt best ch */ + if (best_ch_num == SAP_CHANNEL_NOT_SELECTED) + continue; #ifdef FEATURE_AP_MCC_CH_AVOIDANCE - /* Weight of the channels(device's AP is - * operating) increased to MAX+1 so that they - * will be choosen only when there is no other - * best channel to choose - */ - if (sap_check_in_avoid_ch_list(pSapCtx, - bestChNum)) { - bestChNum = SAP_CHANNEL_NOT_SELECTED; - continue; - } + /* + * Weight of the channels(device's AP is operating) + * increased to MAX+1 so that they will be choosen only + * when there is no other best channel to choose + */ + if (sap_check_in_avoid_ch_list(sap_ctx, best_ch_num)) { + best_ch_num = SAP_CHANNEL_NOT_SELECTED; + continue; + } #endif - pSapCtx->acsBestChannelInfo.channelNum = - bestChNum; - pSapCtx->acsBestChannelInfo.weight = - pSpectInfoParams-> - pSpectCh[count]. - weight_copy; - } - - if (bestChNum != SAP_CHANNEL_NOT_SELECTED) { - if (operatingBand == eCSR_DOT11_MODE_11g) { - /* Give preference to Non-overlap channels */ - if (sap_filter_over_lap_ch(pSapCtx, - pSpectInfoParams-> - pSpectCh[count]. - chNum)) { - tmpChNum = - pSpectInfoParams-> - pSpectCh[count].chNum; - tmpChNum = - sap_select_preferred_channel_from_channel_list - (tmpChNum, pSapCtx, - pSpectInfoParams); - if (tmpChNum != - SAP_CHANNEL_NOT_SELECTED) { - bestChNum = tmpChNum; - break; - } - } - } - } + sap_ctx->acsBestChannelInfo.channelNum = best_ch_num; + sap_ctx->acsBestChannelInfo.weight = + spect_info->pSpectCh[count].weight_copy; } + + if (best_ch_num == SAP_CHANNEL_NOT_SELECTED) + continue; + + if (operating_band != eCSR_DOT11_MODE_11g) + continue; + + /* Give preference to Non-overlap channels */ + if (false == sap_filter_over_lap_ch(sap_ctx, + spect_info->pSpectCh[count].chNum)) + continue; + + tmp_ch_num = spect_info->pSpectCh[count].chNum; + tmp_ch_num = sap_select_preferred_channel_from_channel_list( + tmp_ch_num, sap_ctx, spect_info); + if (tmp_ch_num == SAP_CHANNEL_NOT_SELECTED) + continue; + + best_ch_num = tmp_ch_num; + break; } #else - /* Sort the channel list as per the computed weights, lesser weight first. */ - sap_sort_chl_weight_all(pSapCtx, halHandle, pSpectInfoParams); + /* Sort the ch lst as per the computed weights, lesser weight first. */ + sap_sort_chl_weight_all(sap_ctx, hal, spect_info); /* Get the first channel in sorted array as best 20M Channel */ - bestChNum = (uint8_t) pSpectInfoParams->pSpectCh[0].chNum; + best_ch_num = (uint8_t) spect_info->pSpectCh[0].chNum; /* Select Best Channel from Channel List if Configured */ - bestChNum = sap_select_preferred_channel_from_channel_list(bestChNum, - pSapCtx, - pSpectInfoParams); + best_ch_num = sap_select_preferred_channel_from_channel_list( + best_ch_num, sap_ctx, spect_info); #endif - /** in case the best channel seleted is not in PCL and there is another + /* + * in case the best channel seleted is not in PCL and there is another * channel which has same weightage and is in PCL, choose the one in * PCL */ - for (count = 0; count < pSpectInfoParams->numSpectChans; count++) { - /** check if a pcl channel has the same weightage - * as the best channel - */ - if (ch_in_pcl(pSapCtx, pSpectInfoParams->pSpectCh[count].chNum) - && (pSpectInfoParams->pSpectCh[count].weight == - pSapCtx->acsBestChannelInfo.weight)) { - if (sap_select_preferred_channel_from_channel_list( - pSpectInfoParams->pSpectCh[count].chNum, - pSapCtx, pSpectInfoParams) == - SAP_CHANNEL_NOT_SELECTED) - continue; + for (count = 0; count < spect_info->numSpectChans; count++) { + if (!ch_in_pcl(sap_ctx, spect_info->pSpectCh[count].chNum) || + (spect_info->pSpectCh[count].weight != + sap_ctx->acsBestChannelInfo.weight)) + continue; + + if (sap_select_preferred_channel_from_channel_list( + spect_info->pSpectCh[count].chNum, sap_ctx, spect_info) + == SAP_CHANNEL_NOT_SELECTED) + continue; #ifdef FEATURE_AP_MCC_CH_AVOIDANCE - if (sap_check_in_avoid_ch_list(pSapCtx, bestChNum)) - continue; + if (sap_check_in_avoid_ch_list(sap_ctx, best_ch_num)) + continue; #endif - bestChNum = pSpectInfoParams->pSpectCh[count].chNum; - QDF_TRACE(QDF_MODULE_ID_SAP, - QDF_TRACE_LEVEL_INFO_HIGH, - "change best channel to %d in PCL", - bestChNum); - break; - } + best_ch_num = spect_info->pSpectCh[count].chNum; + QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, + FL("change best channel to %d in PCL"), best_ch_num); + break; } - pSapCtx->acs_cfg->pri_ch = bestChNum; + sap_ctx->acs_cfg->pri_ch = best_ch_num; /* determine secondary channel for 2.4G channel 5, 6, 7 in HT40 */ - if ((operatingBand == eCSR_DOT11_MODE_11g) && - (pSapCtx->acs_cfg->ch_width == CH_WIDTH_40MHZ)) { - if ((bestChNum >= 5) && (bestChNum <= 7)) { - int weight_below, weight_above, i; - tSapSpectChInfo *pspect_info; + if ((operating_band != eCSR_DOT11_MODE_11g) || + (sap_ctx->acs_cfg->ch_width != CH_WIDTH_40MHZ)) + goto sap_ch_sel_end; - weight_below = weight_above = SAP_ACS_WEIGHT_MAX; - pspect_info = pSpectInfoParams->pSpectCh; - for (i = 0; i < pSpectInfoParams->numSpectChans; - i++) { - if (pspect_info[i].chNum == (bestChNum - 4)) - weight_below = pspect_info[i].weight; + if ((best_ch_num >= 5) && (best_ch_num <= 7)) { + int weight_below, weight_above, i; + tSapSpectChInfo *pspect_info; - if (pspect_info[i].chNum == (bestChNum + 4)) - weight_above = pspect_info[i].weight; - } - - if (weight_below < weight_above) - pSapCtx->acs_cfg->ht_sec_ch = - pSapCtx->acs_cfg->pri_ch - 4; - else - pSapCtx->acs_cfg->ht_sec_ch = - pSapCtx->acs_cfg->pri_ch + 4; - } else if (bestChNum >= 1 && bestChNum <= 4) { - pSapCtx->acs_cfg->ht_sec_ch = - pSapCtx->acs_cfg->pri_ch + 4; - } else if (bestChNum >= 8 && bestChNum <= 13) { - pSapCtx->acs_cfg->ht_sec_ch = - pSapCtx->acs_cfg->pri_ch - 4; - } else if (bestChNum == 14) { - pSapCtx->acs_cfg->ht_sec_ch = 0; + weight_below = weight_above = SAP_ACS_WEIGHT_MAX; + pspect_info = spect_info->pSpectCh; + for (i = 0; i < spect_info->numSpectChans; i++) { + if (pspect_info[i].chNum == (best_ch_num - 4)) + weight_below = pspect_info[i].weight; + if (pspect_info[i].chNum == (best_ch_num + 4)) + weight_above = pspect_info[i].weight; } - pSapCtx->secondary_ch = pSapCtx->acs_cfg->ht_sec_ch; + + if (weight_below < weight_above) + sap_ctx->acs_cfg->ht_sec_ch = + sap_ctx->acs_cfg->pri_ch - 4; + else + sap_ctx->acs_cfg->ht_sec_ch = + sap_ctx->acs_cfg->pri_ch + 4; + } else if (best_ch_num >= 1 && best_ch_num <= 4) { + sap_ctx->acs_cfg->ht_sec_ch = sap_ctx->acs_cfg->pri_ch + 4; + } else if (best_ch_num >= 8 && best_ch_num <= 13) { + sap_ctx->acs_cfg->ht_sec_ch = sap_ctx->acs_cfg->pri_ch - 4; + } else if (best_ch_num == 14) { + sap_ctx->acs_cfg->ht_sec_ch = 0; } + sap_ctx->secondary_ch = sap_ctx->acs_cfg->ht_sec_ch; + +sap_ch_sel_end: /* Free all the allocated memory */ - sap_chan_sel_exit(pSpectInfoParams); + sap_chan_sel_exit(spect_info); QDF_TRACE(QDF_MODULE_ID_SAP, QDF_TRACE_LEVEL_INFO_HIGH, - "In %s, Running SAP Ch select Completed, Ch=%d", __func__, - bestChNum); - if (bestChNum > 0 && bestChNum <= 252) - return bestChNum; + FL("Running SAP Ch select Completed, Ch=%d"), best_ch_num); + if (best_ch_num > 0 && best_ch_num <= 252) + return best_ch_num; else return SAP_CHANNEL_NOT_SELECTED; }