qcacld-3.0: Use freq for SME roam API

Change below csr/sme APIs and dependent APIs to
use freq as parameter:
csr_create_roam_scan_channel_list,
csr_neighbor_roam_channels_filter_by_current_band,
csr_neighbor_roam_merge_channel_lists,
csr_create_bg_scan_roam_channel_list,
sme_update_roam_scan_channel_list.

Change-Id: Icfc45863d6dacb318558ba75fde111af24256641
CRs-Fixed: 2555688
This commit is contained in:
Liangwei Dong
2019-10-30 12:58:22 +08:00
committed by nshrivas
parent 229e2f055b
commit 075afa7922
7 changed files with 120 additions and 102 deletions

View File

@@ -1808,8 +1808,9 @@ hdd_parse_sendactionframe(struct hdd_adapter *adapter, const char *command,
/** /**
* hdd_parse_channellist() - HDD Parse channel list * hdd_parse_channellist() - HDD Parse channel list
* @hdd_ctx: hdd context
* @command: Pointer to input channel list * @command: Pointer to input channel list
* @channel_list: Pointer to local output array to record * @channel_freq_list: Pointer to local output array to record
* channel list * channel list
* @num_channels: Pointer to number of roam scan channels * @num_channels: Pointer to number of roam scan channels
* *
@@ -1826,7 +1827,9 @@ hdd_parse_sendactionframe(struct hdd_adapter *adapter, const char *command,
* Return: 0 for success non-zero for failure * Return: 0 for success non-zero for failure
*/ */
static int static int
hdd_parse_channellist(const uint8_t *command, uint8_t *channel_list, hdd_parse_channellist(struct hdd_context *hdd_ctx,
const uint8_t *command,
uint32_t *channel_freq_list,
uint8_t *num_channels) uint8_t *num_channels)
{ {
const uint8_t *in_ptr = command; const uint8_t *in_ptr = command;
@@ -1907,10 +1910,11 @@ hdd_parse_channellist(const uint8_t *command, uint8_t *channel_list,
(temp_int > WNI_CFG_CURRENT_CHANNEL_STAMAX)) { (temp_int > WNI_CFG_CURRENT_CHANNEL_STAMAX)) {
return -EINVAL; return -EINVAL;
} }
channel_list[j] = temp_int; channel_freq_list[j] =
wlan_reg_chan_to_freq(hdd_ctx->pdev, temp_int);
hdd_debug("Channel %d added to preferred channel list", hdd_debug("Channel %d added to preferred channel list",
channel_list[j]); channel_freq_list[j]);
} }
return 0; return 0;
@@ -1937,14 +1941,21 @@ static int
hdd_parse_set_roam_scan_channels_v1(struct hdd_adapter *adapter, hdd_parse_set_roam_scan_channels_v1(struct hdd_adapter *adapter,
const char *command) const char *command)
{ {
uint8_t channel_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 }; uint32_t channel_freq_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 };
uint8_t num_chan = 0; uint8_t num_chan = 0;
QDF_STATUS status; QDF_STATUS status;
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter); struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
int ret; int ret;
mac_handle_t mac_handle; mac_handle_t mac_handle;
ret = hdd_parse_channellist(command, channel_list, &num_chan); if (!hdd_ctx) {
hdd_err("invalid hdd ctx");
ret = -EINVAL;
goto exit;
}
ret = hdd_parse_channellist(hdd_ctx, command, channel_freq_list,
&num_chan);
if (ret) { if (ret) {
hdd_err("Failed to parse channel list information"); hdd_err("Failed to parse channel list information");
goto exit; goto exit;
@@ -1962,7 +1973,8 @@ hdd_parse_set_roam_scan_channels_v1(struct hdd_adapter *adapter,
} }
mac_handle = hdd_ctx->mac_handle; mac_handle = hdd_ctx->mac_handle;
if (!sme_validate_channel_list(mac_handle, channel_list, num_chan)) { if (!sme_validate_channel_list(mac_handle,
channel_freq_list, num_chan)) {
hdd_err("List contains invalid channel(s)"); hdd_err("List contains invalid channel(s)");
ret = -EINVAL; ret = -EINVAL;
goto exit; goto exit;
@@ -1970,7 +1982,8 @@ hdd_parse_set_roam_scan_channels_v1(struct hdd_adapter *adapter,
status = sme_change_roam_scan_channel_list(mac_handle, status = sme_change_roam_scan_channel_list(mac_handle,
adapter->vdev_id, adapter->vdev_id,
channel_list, num_chan); channel_freq_list,
num_chan);
if (QDF_STATUS_SUCCESS != status) { if (QDF_STATUS_SUCCESS != status) {
hdd_err("Failed to update channel list information"); hdd_err("Failed to update channel list information");
ret = -EINVAL; ret = -EINVAL;
@@ -2003,7 +2016,7 @@ hdd_parse_set_roam_scan_channels_v2(struct hdd_adapter *adapter,
const char *command) const char *command)
{ {
const uint8_t *value; const uint8_t *value;
uint8_t channel_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 }; uint32_t channel_freq_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 };
uint8_t channel; uint8_t channel;
uint8_t num_chan; uint8_t num_chan;
int i; int i;
@@ -2043,11 +2056,13 @@ hdd_parse_set_roam_scan_channels_v2(struct hdd_adapter *adapter,
ret = -EINVAL; ret = -EINVAL;
goto exit; goto exit;
} }
channel_list[i] = channel; channel_freq_list[i] = wlan_reg_chan_to_freq(hdd_ctx->pdev,
channel);
} }
mac_handle = hdd_ctx->mac_handle; mac_handle = hdd_ctx->mac_handle;
if (!sme_validate_channel_list(mac_handle, channel_list, num_chan)) { if (!sme_validate_channel_list(mac_handle, channel_freq_list,
num_chan)) {
hdd_err("List contains invalid channel(s)"); hdd_err("List contains invalid channel(s)");
ret = -EINVAL; ret = -EINVAL;
goto exit; goto exit;
@@ -2055,7 +2070,7 @@ hdd_parse_set_roam_scan_channels_v2(struct hdd_adapter *adapter,
status = sme_change_roam_scan_channel_list(mac_handle, status = sme_change_roam_scan_channel_list(mac_handle,
adapter->vdev_id, adapter->vdev_id,
channel_list, num_chan); channel_freq_list, num_chan);
if (QDF_STATUS_SUCCESS != status) { if (QDF_STATUS_SUCCESS != status) {
hdd_err("Failed to update channel list information"); hdd_err("Failed to update channel list information");
ret = -EINVAL; ret = -EINVAL;
@@ -5520,12 +5535,19 @@ static int drv_cmd_set_ccx_roam_scan_channels(struct hdd_adapter *adapter,
{ {
int ret = 0; int ret = 0;
uint8_t *value = command; uint8_t *value = command;
uint8_t channel_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 }; uint32_t channel_freq_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 };
uint8_t num_channels = 0; uint8_t num_channels = 0;
QDF_STATUS status; QDF_STATUS status;
mac_handle_t mac_handle; mac_handle_t mac_handle;
ret = hdd_parse_channellist(value, channel_list, &num_channels); if (!hdd_ctx) {
hdd_err("invalid hdd ctx");
ret = -EINVAL;
goto exit;
}
ret = hdd_parse_channellist(hdd_ctx, value, channel_freq_list,
&num_channels);
if (ret) { if (ret) {
hdd_err("Failed to parse channel list information"); hdd_err("Failed to parse channel list information");
goto exit; goto exit;
@@ -5539,7 +5561,7 @@ static int drv_cmd_set_ccx_roam_scan_channels(struct hdd_adapter *adapter,
} }
mac_handle = hdd_ctx->mac_handle; mac_handle = hdd_ctx->mac_handle;
if (!sme_validate_channel_list(mac_handle, channel_list, if (!sme_validate_channel_list(mac_handle, channel_freq_list,
num_channels)) { num_channels)) {
hdd_err("List contains invalid channel(s)"); hdd_err("List contains invalid channel(s)");
ret = -EINVAL; ret = -EINVAL;
@@ -5548,7 +5570,7 @@ static int drv_cmd_set_ccx_roam_scan_channels(struct hdd_adapter *adapter,
status = sme_set_ese_roam_scan_channel_list(mac_handle, status = sme_set_ese_roam_scan_channel_list(mac_handle,
adapter->vdev_id, adapter->vdev_id,
channel_list, channel_freq_list,
num_channels); num_channels);
if (QDF_STATUS_SUCCESS != status) { if (QDF_STATUS_SUCCESS != status) {
hdd_err("Failed to update channel list information"); hdd_err("Failed to update channel list information");

View File

@@ -125,7 +125,7 @@ typedef struct sCsrNeighborRoamControlInfo {
eCsrNeighborRoamState prevNeighborRoamState; eCsrNeighborRoamState prevNeighborRoamState;
tCsrNeighborRoamCfgParams cfgParams; tCsrNeighborRoamCfgParams cfgParams;
struct qdf_mac_addr currAPbssid; /* current assoc AP */ struct qdf_mac_addr currAPbssid; /* current assoc AP */
uint8_t currAPoperationChannel; /* current assoc AP */ uint32_t curr_ap_op_chan_freq; /* current assoc AP */
tCsrNeighborRoamChannelInfo roamChannelInfo; tCsrNeighborRoamChannelInfo roamChannelInfo;
uint8_t currentNeighborLookupThreshold; uint8_t currentNeighborLookupThreshold;
uint8_t currentOpportunisticThresholdDiff; uint8_t currentOpportunisticThresholdDiff;
@@ -198,14 +198,14 @@ QDF_STATUS csr_neighbor_roam_update_fast_roaming_enabled(struct mac_context *mac
uint8_t sessionId, const bool fastRoamEnabled); uint8_t sessionId, const bool fastRoamEnabled);
QDF_STATUS csr_neighbor_roam_channels_filter_by_current_band( QDF_STATUS csr_neighbor_roam_channels_filter_by_current_band(
struct mac_context *mac, uint8_t sessionId, struct mac_context *mac, uint8_t sessionId,
uint8_t *pInputChannelList, uint32_t *input_chan_freq_list,
uint8_t inputNumOfChannels, uint8_t inputNumOfChannels,
uint8_t *pOutputChannelList, uint32_t *out_chan_freq_list,
uint8_t *pMergedOutputNumOfChannels); uint8_t *pMergedOutputNumOfChannels);
QDF_STATUS csr_neighbor_roam_merge_channel_lists(struct mac_context *mac, QDF_STATUS csr_neighbor_roam_merge_channel_lists(struct mac_context *mac,
uint32_t *pinput_chan_freq_list, uint32_t *pinput_chan_freq_list,
uint8_t inputNumOfChannels, uint8_t inputNumOfChannels,
uint8_t *pOutputChannelList, uint32_t *out_chan_freq_list,
uint8_t outputNumOfChannels, uint8_t outputNumOfChannels,
uint8_t *pMergedOutputNumOfChannels); uint8_t *pMergedOutputNumOfChannels);
void csr_roam_reset_roam_params(struct mac_context *mac_ptr); void csr_roam_reset_roam_params(struct mac_context *mac_ptr);

View File

@@ -1038,7 +1038,7 @@ QDF_STATUS sme_get_roam_rssi_diff(mac_handle_t mac_handle, uint8_t vdev_id,
uint8_t *rssi_diff); uint8_t *rssi_diff);
QDF_STATUS sme_change_roam_scan_channel_list(mac_handle_t mac_handle, QDF_STATUS sme_change_roam_scan_channel_list(mac_handle_t mac_handle,
uint8_t sessionId, uint8_t sessionId,
uint8_t *pChannelList, uint32_t *channel_freq_list,
uint8_t numChannels); uint8_t numChannels);
/** /**
@@ -1060,7 +1060,7 @@ sme_update_roam_scan_freq_list(mac_handle_t mac_handle, uint8_t vdev_id,
uint32_t freq_list_type); uint32_t freq_list_type);
QDF_STATUS sme_set_ese_roam_scan_channel_list(mac_handle_t mac_handle, QDF_STATUS sme_set_ese_roam_scan_channel_list(mac_handle_t mac_handle,
uint8_t sessionId, uint8_t sessionId,
uint8_t *pChannelList, uint32_t *chan_freq_list,
uint8_t numChannels); uint8_t numChannels);
QDF_STATUS sme_get_roam_scan_channel_list(mac_handle_t mac_handle, QDF_STATUS sme_get_roam_scan_channel_list(mac_handle_t mac_handle,
uint8_t *pChannelList, uint8_t *pChannelList,
@@ -3355,7 +3355,7 @@ bool sme_is_sta_key_exchange_in_progress(mac_handle_t mac_handle,
/* /*
* sme_validate_channel_list() - Validate the given channel list * sme_validate_channel_list() - Validate the given channel list
* @mac_handle: Opaque handle to the global MAC context * @mac_handle: Opaque handle to the global MAC context
* @chan_list: Pointer to the channel list * @chan_freq_list: Pointer to the channel list
* @num_channels: number of channels present in the chan_list * @num_channels: number of channels present in the chan_list
* *
* Validates the given channel list with base channels in mac context * Validates the given channel list with base channels in mac context
@@ -3363,7 +3363,7 @@ bool sme_is_sta_key_exchange_in_progress(mac_handle_t mac_handle,
* Return: True if all channels in the list are valid, false otherwise * Return: True if all channels in the list are valid, false otherwise
*/ */
bool sme_validate_channel_list(mac_handle_t mac_handle, bool sme_validate_channel_list(mac_handle_t mac_handle,
uint8_t *chan_list, uint32_t *chan_freq_list,
uint8_t num_channels); uint8_t num_channels);
/** /**
* sme_set_amsdu() - set amsdu enable/disable based on user cfg * sme_set_amsdu() - set amsdu enable/disable based on user cfg

View File

@@ -180,20 +180,20 @@ void csr_flush_cfg_bg_scan_roam_channel_list(tCsrChannelInfo *channel_info);
* csr_create_bg_scan_roam_channel_list() - Create roam scan chan list * csr_create_bg_scan_roam_channel_list() - Create roam scan chan list
* @mac: global mac context * @mac: global mac context
* @channel_info: Channel list to be populated for roam scan * @channel_info: Channel list to be populated for roam scan
* @chan_list: Channel list to be populated from * @chan_freq_list: Channel list to be populated from
* @num_chan: Number of channels * @num_chan: Number of channels
* *
* Return: QDF_STATUS_SUCCESS or QDF_STATUS_E_FAILURE * Return: QDF_STATUS_SUCCESS or QDF_STATUS_E_FAILURE
*/ */
QDF_STATUS csr_create_bg_scan_roam_channel_list(struct mac_context *mac, QDF_STATUS csr_create_bg_scan_roam_channel_list(struct mac_context *mac,
tCsrChannelInfo *channel_info, tCsrChannelInfo *channel_info,
const uint8_t *chan_list, const uint32_t *chan_freq_list,
const uint8_t num_chan); const uint8_t num_chan);
#ifdef FEATURE_WLAN_ESE #ifdef FEATURE_WLAN_ESE
QDF_STATUS csr_create_roam_scan_channel_list(struct mac_context *mac, QDF_STATUS csr_create_roam_scan_channel_list(struct mac_context *mac,
uint8_t sessionId, uint8_t sessionId,
uint8_t *pChannelList, uint32_t *chan_freq_list,
uint8_t numChannels, uint8_t numChannels,
const enum band_info band); const enum band_info band);
#endif #endif

View File

@@ -1726,7 +1726,7 @@ QDF_STATUS sme_get_tsm_stats(mac_handle_t mac_handle,
* sme_set_ese_roam_scan_channel_list() - To set ese roam scan channel list * sme_set_ese_roam_scan_channel_list() - To set ese roam scan channel list
* @mac_handle: Opaque handle to the global MAC context * @mac_handle: Opaque handle to the global MAC context
* @sessionId: sme session id * @sessionId: sme session id
* @pChannelList: Output channel list * @chan_freq_list: Output channel list
* @numChannels: Output number of channels * @numChannels: Output number of channels
* *
* This routine is called to set ese roam scan channel list. * This routine is called to set ese roam scan channel list.
@@ -1736,15 +1736,15 @@ QDF_STATUS sme_get_tsm_stats(mac_handle_t mac_handle,
*/ */
QDF_STATUS sme_set_ese_roam_scan_channel_list(mac_handle_t mac_handle, QDF_STATUS sme_set_ese_roam_scan_channel_list(mac_handle_t mac_handle,
uint8_t sessionId, uint8_t sessionId,
uint8_t *pChannelList, uint32_t *chan_freq_list,
uint8_t numChannels) uint8_t numChannels)
{ {
struct mac_context *mac = MAC_CONTEXT(mac_handle); struct mac_context *mac = MAC_CONTEXT(mac_handle);
QDF_STATUS status = QDF_STATUS_SUCCESS; QDF_STATUS status = QDF_STATUS_SUCCESS;
tpCsrNeighborRoamControlInfo pNeighborRoamInfo = NULL; tpCsrNeighborRoamControlInfo pNeighborRoamInfo = NULL;
tpCsrChannelInfo curchnl_list_info = NULL; tpCsrChannelInfo curchnl_list_info = NULL;
uint8_t oldChannelList[CFG_VALID_CHANNEL_LIST_LEN * 2] = { 0 }; uint8_t oldChannelList[CFG_VALID_CHANNEL_LIST_LEN * 5] = { 0 };
uint8_t newChannelList[128] = { 0 }; uint8_t newChannelList[CFG_VALID_CHANNEL_LIST_LEN * 5] = { 0 };
uint8_t i = 0, j = 0; uint8_t i = 0, j = 0;
enum band_info band = -1; enum band_info band = -1;
@@ -1771,7 +1771,7 @@ QDF_STATUS sme_set_ese_roam_scan_channel_list(mac_handle_t mac_handle,
} }
ucfg_reg_get_band(mac->pdev, &band); ucfg_reg_get_band(mac->pdev, &band);
status = csr_create_roam_scan_channel_list(mac, sessionId, status = csr_create_roam_scan_channel_list(mac, sessionId,
pChannelList, numChannels, chan_freq_list, numChannels,
band); band);
if (QDF_IS_STATUS_SUCCESS(status)) { if (QDF_IS_STATUS_SUCCESS(status)) {
if (curchnl_list_info->freq_list) { if (curchnl_list_info->freq_list) {
@@ -7425,19 +7425,13 @@ sme_update_roam_scan_channel_list(mac_handle_t mac_handle, uint8_t vdev_id,
{ {
QDF_STATUS status = QDF_STATUS_SUCCESS; QDF_STATUS status = QDF_STATUS_SUCCESS;
struct mac_context *mac = MAC_CONTEXT(mac_handle); struct mac_context *mac = MAC_CONTEXT(mac_handle);
uint8_t *channel_list;
channel_list = qdf_mem_malloc(SIR_MAX_SUPPORTED_CHANNEL_LIST);
if (!channel_list)
return QDF_STATUS_E_NOMEM;
if (chan_info->numOfChannels) { if (chan_info->numOfChannels) {
sme_debug("Current channels:"); sme_debug("Current channels:");
sme_dump_freq_list(chan_info); sme_dump_freq_list(chan_info);
} }
csr_flush_cfg_bg_scan_roam_channel_list(chan_info); csr_flush_cfg_bg_scan_roam_channel_list(chan_info);
sme_freq_to_chan_list(mac->pdev, channel_list, freq_list, num_chan); csr_create_bg_scan_roam_channel_list(mac, chan_info, freq_list,
csr_create_bg_scan_roam_channel_list(mac, chan_info, channel_list,
num_chan); num_chan);
sme_debug("New channels:"); sme_debug("New channels:");
sme_dump_freq_list(chan_info); sme_dump_freq_list(chan_info);
@@ -7448,8 +7442,6 @@ sme_update_roam_scan_channel_list(mac_handle_t mac_handle, uint8_t vdev_id,
status = csr_roam_update_cfg(mac, vdev_id, status = csr_roam_update_cfg(mac, vdev_id,
REASON_CHANNEL_LIST_CHANGED); REASON_CHANNEL_LIST_CHANGED);
qdf_mem_free(channel_list);
return status; return status;
} }
@@ -7457,7 +7449,7 @@ sme_update_roam_scan_channel_list(mac_handle_t mac_handle, uint8_t vdev_id,
* sme_change_roam_scan_channel_list() - to change scan channel list * sme_change_roam_scan_channel_list() - to change scan channel list
* @mac_handle: Opaque handle to the global MAC context * @mac_handle: Opaque handle to the global MAC context
* @sessionId: sme session id * @sessionId: sme session id
* @channel_list: Output channel list * @channel_freq_list: Output channel list
* @numChannels: Output number of channels * @numChannels: Output number of channels
* *
* This routine is called to Change roam scan channel list. * This routine is called to Change roam scan channel list.
@@ -7467,14 +7459,14 @@ sme_update_roam_scan_channel_list(mac_handle_t mac_handle, uint8_t vdev_id,
*/ */
QDF_STATUS sme_change_roam_scan_channel_list(mac_handle_t mac_handle, QDF_STATUS sme_change_roam_scan_channel_list(mac_handle_t mac_handle,
uint8_t sessionId, uint8_t sessionId,
uint8_t *channel_list, uint32_t *channel_freq_list,
uint8_t numChannels) uint8_t numChannels)
{ {
struct mac_context *mac = MAC_CONTEXT(mac_handle); struct mac_context *mac = MAC_CONTEXT(mac_handle);
QDF_STATUS status = QDF_STATUS_SUCCESS; QDF_STATUS status = QDF_STATUS_SUCCESS;
tpCsrNeighborRoamControlInfo pNeighborRoamInfo = NULL; tpCsrNeighborRoamControlInfo pNeighborRoamInfo = NULL;
uint8_t oldChannelList[CFG_VALID_CHANNEL_LIST_LEN * 2] = { 0 }; uint8_t oldChannelList[CFG_VALID_CHANNEL_LIST_LEN * 5] = { 0 };
uint8_t newChannelList[CFG_VALID_CHANNEL_LIST_LEN * 2] = { 0 }; uint8_t newChannelList[CFG_VALID_CHANNEL_LIST_LEN * 5] = { 0 };
uint8_t i = 0, j = 0; uint8_t i = 0, j = 0;
tCsrChannelInfo *chan_info; tCsrChannelInfo *chan_info;
@@ -7497,14 +7489,14 @@ QDF_STATUS sme_change_roam_scan_channel_list(mac_handle_t mac_handle,
if (j < sizeof(oldChannelList)) if (j < sizeof(oldChannelList))
j += snprintf(oldChannelList + j, j += snprintf(oldChannelList + j,
sizeof(oldChannelList) - sizeof(oldChannelList) -
j, "%d", j, " %d",
chan_info->freq_list[i]); chan_info->freq_list[i]);
else else
break; break;
} }
} }
csr_flush_cfg_bg_scan_roam_channel_list(chan_info); csr_flush_cfg_bg_scan_roam_channel_list(chan_info);
csr_create_bg_scan_roam_channel_list(mac, chan_info, channel_list, csr_create_bg_scan_roam_channel_list(mac, chan_info, channel_freq_list,
numChannels); numChannels);
sme_set_roam_scan_control(mac_handle, sessionId, 1); sme_set_roam_scan_control(mac_handle, sessionId, 1);
if (chan_info->freq_list) { if (chan_info->freq_list) {
@@ -15208,7 +15200,7 @@ bool sme_is_sta_key_exchange_in_progress(mac_handle_t mac_handle,
} }
bool sme_validate_channel_list(mac_handle_t mac_handle, bool sme_validate_channel_list(mac_handle_t mac_handle,
uint8_t *chan_list, uint32_t *chan_freq_list,
uint8_t num_channels) uint8_t num_channels)
{ {
struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle); struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle);
@@ -15217,8 +15209,9 @@ bool sme_validate_channel_list(mac_handle_t mac_handle,
bool found; bool found;
struct csr_channel *ch_lst_info = &mac_ctx->scan.base_channels; struct csr_channel *ch_lst_info = &mac_ctx->scan.base_channels;
if (!chan_list || !num_channels) { if (!chan_freq_list || !num_channels) {
sme_err("Chan list empty %pK or num_channels is 0", chan_list); sme_err("Chan list empty %pK or num_channels is 0",
chan_freq_list);
return false; return false;
} }
@@ -15226,14 +15219,14 @@ bool sme_validate_channel_list(mac_handle_t mac_handle,
found = false; found = false;
for (j = 0; j < ch_lst_info->numChannels; j++) { for (j = 0; j < ch_lst_info->numChannels; j++) {
if (ch_lst_info->channel_freq_list[j] == if (ch_lst_info->channel_freq_list[j] ==
wlan_reg_chan_to_freq(mac_ctx->pdev, chan_list[i])) { chan_freq_list[i]) {
found = true; found = true;
break; break;
} }
} }
if (!found) { if (!found) {
sme_debug("Invalid channel %d", chan_list[i]); sme_debug("Invalid channel %d", chan_freq_list[i]);
return false; return false;
} }

View File

@@ -2063,18 +2063,20 @@ csr_flush_roam_scan_chan_lists(struct mac_context *mac, uint8_t vdev_id)
QDF_STATUS csr_create_bg_scan_roam_channel_list(struct mac_context *mac, QDF_STATUS csr_create_bg_scan_roam_channel_list(struct mac_context *mac,
tCsrChannelInfo *channel_info, tCsrChannelInfo *channel_info,
const uint8_t *chan_list, const uint32_t *chan_freq_list,
const uint8_t num_chan) const uint8_t num_chan)
{ {
QDF_STATUS status = QDF_STATUS_SUCCESS; QDF_STATUS status = QDF_STATUS_SUCCESS;
uint8_t i;
channel_info->freq_list = qdf_mem_malloc(sizeof(uint32_t) * num_chan); channel_info->freq_list = qdf_mem_malloc(sizeof(uint32_t) * num_chan);
if (!channel_info->freq_list) if (!channel_info->freq_list)
return QDF_STATUS_E_NOMEM; return QDF_STATUS_E_NOMEM;
channel_info->numOfChannels = num_chan; channel_info->numOfChannels = num_chan;
sme_chan_to_freq_list(mac->pdev, channel_info->freq_list, for (i = 0; i < num_chan; i++)
chan_list, num_chan); channel_info->freq_list[i] = chan_freq_list[i];
return status; return status;
} }
@@ -2169,7 +2171,7 @@ is_dfs_unsafe_extra_band_chan(struct mac_context *mac_ctx, uint32_t freq,
* csr_create_roam_scan_channel_list() - create roam scan channel list * csr_create_roam_scan_channel_list() - create roam scan channel list
* @mac: Global mac pointer * @mac: Global mac pointer
* @sessionId: session id * @sessionId: session id
* @chan_list: pointer to channel list * @chan_freq_list: pointer to channel list
* @numChannels: number of channels * @numChannels: number of channels
* @band: band enumeration * @band: band enumeration
* *
@@ -2185,7 +2187,7 @@ is_dfs_unsafe_extra_band_chan(struct mac_context *mac_ctx, uint32_t freq,
*/ */
QDF_STATUS csr_create_roam_scan_channel_list(struct mac_context *mac, QDF_STATUS csr_create_roam_scan_channel_list(struct mac_context *mac,
uint8_t sessionId, uint8_t sessionId,
uint8_t *chan_list, uint32_t *chan_freq_list,
uint8_t numChannels, uint8_t numChannels,
const enum band_info band) const enum band_info band)
{ {
@@ -2195,10 +2197,10 @@ QDF_STATUS csr_create_roam_scan_channel_list(struct mac_context *mac,
= &mac->roam.neighborRoamInfo[sessionId]; = &mac->roam.neighborRoamInfo[sessionId];
uint8_t out_num_chan = 0; uint8_t out_num_chan = 0;
uint8_t inNumChannels = numChannels; uint8_t inNumChannels = numChannels;
uint8_t *in_ptr = chan_list; uint32_t *in_ptr = chan_freq_list;
uint8_t i = 0; uint8_t i = 0;
uint8_t ChannelList[CFG_VALID_CHANNEL_LIST_LEN] = { 0 }; uint32_t csr_freq_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 };
uint8_t tmp_chan_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 }; uint32_t tmp_chan_freq_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 };
uint8_t mergedOutputNumOfChannels = 0; uint8_t mergedOutputNumOfChannels = 0;
tpCsrChannelInfo currChannelListInfo tpCsrChannelInfo currChannelListInfo
@@ -2221,25 +2223,25 @@ QDF_STATUS csr_create_roam_scan_channel_list(struct mac_context *mac,
} }
if (BAND_2G == band) { if (BAND_2G == band) {
for (i = 0; i < inNumChannels; i++) { for (i = 0; i < inNumChannels; i++) {
if (WLAN_REG_IS_24GHZ_CH(in_ptr[i]) if (WLAN_REG_IS_24GHZ_CH_FREQ(in_ptr[i]) &&
&& csr_roam_is_channel_valid(mac, in_ptr[i])) { csr_roam_is_chan_freq_valid(mac, in_ptr[i])) {
ChannelList[out_num_chan++] = in_ptr[i]; csr_freq_list[out_num_chan++] = in_ptr[i];
} }
} }
} else if (BAND_5G == band) { } else if (BAND_5G == band) {
for (i = 0; i < inNumChannels; i++) { for (i = 0; i < inNumChannels; i++) {
/* Add 5G Non-DFS channel */ /* Add 5G Non-DFS channel */
if (WLAN_REG_IS_5GHZ_CH(in_ptr[i]) && if (WLAN_REG_IS_5GHZ_CH_FREQ(in_ptr[i]) &&
csr_roam_is_channel_valid(mac, in_ptr[i]) && csr_roam_is_chan_freq_valid(mac, in_ptr[i]) &&
!wlan_reg_is_dfs_ch(mac->pdev, in_ptr[i])) { !wlan_reg_is_dfs_for_freq(mac->pdev, in_ptr[i])) {
ChannelList[out_num_chan++] = in_ptr[i]; csr_freq_list[out_num_chan++] = in_ptr[i];
} }
} }
} else if (BAND_ALL == band) { } else if (BAND_ALL == band) {
for (i = 0; i < inNumChannels; i++) { for (i = 0; i < inNumChannels; i++) {
if (csr_roam_is_channel_valid(mac, in_ptr[i]) && if (csr_roam_is_chan_freq_valid(mac, in_ptr[i]) &&
!wlan_reg_is_dfs_ch(mac->pdev, in_ptr[i])) { !wlan_reg_is_dfs_for_freq(mac->pdev, in_ptr[i])) {
ChannelList[out_num_chan++] = in_ptr[i]; csr_freq_list[out_num_chan++] = in_ptr[i];
} }
} }
} else { } else {
@@ -2256,14 +2258,13 @@ QDF_STATUS csr_create_roam_scan_channel_list(struct mac_context *mac,
* list are already filtered for 2.4G channels, hence ignore this check * list are already filtered for 2.4G channels, hence ignore this check
*/ */
if ((BAND_ALL == band) && CSR_IS_ROAM_INTRA_BAND_ENABLED(mac)) { if ((BAND_ALL == band) && CSR_IS_ROAM_INTRA_BAND_ENABLED(mac)) {
csr_neighbor_roam_channels_filter_by_current_band(mac, csr_neighbor_roam_channels_filter_by_current_band(
sessionId, mac,
ChannelList, sessionId,
out_num_chan, csr_freq_list,
tmp_chan_list, out_num_chan,
&out_num_chan tmp_chan_freq_list,
); &out_num_chan);
qdf_mem_copy(ChannelList, tmp_chan_list, out_num_chan);
} }
/* Prepare final roam scan channel list */ /* Prepare final roam scan channel list */
if (out_num_chan) { if (out_num_chan) {
@@ -2279,9 +2280,10 @@ QDF_STATUS csr_create_roam_scan_channel_list(struct mac_context *mac,
currChannelListInfo->numOfChannels = 0; currChannelListInfo->numOfChannels = 0;
return QDF_STATUS_E_NOMEM; return QDF_STATUS_E_NOMEM;
} }
sme_chan_to_freq_list(mac->pdev, for (i = 0; i < out_num_chan; i++)
currChannelListInfo->freq_list, currChannelListInfo->freq_list[i] =
ChannelList, out_num_chan); tmp_chan_freq_list[i];
currChannelListInfo->numOfChannels = out_num_chan; currChannelListInfo->numOfChannels = out_num_chan;
} }
return status; return status;

View File

@@ -451,9 +451,9 @@ enum band_info csr_get_rf_band(uint8_t channel)
* *
* @mac_ctx: Pointer to Global MAC structure * @mac_ctx: Pointer to Global MAC structure
* @session_id: Session ID * @session_id: Session ID
* @input_ch_list: The input channel list * @input_chan_freq_list: The input channel list
* @input_num_of_ch: The number of channels in input channel list * @input_num_of_ch: The number of channels in input channel list
* @output_ch_list: The output channel list * @out_chan_freq_list: The output channel list
* @output_num_of_ch: The number of channels in output channel list * @output_num_of_ch: The number of channels in output channel list
* @merged_output_num_of_ch: The final number of channels in the * @merged_output_num_of_ch: The final number of channels in the
* output channel list. * output channel list.
@@ -466,22 +466,22 @@ enum band_info csr_get_rf_band(uint8_t channel)
QDF_STATUS csr_neighbor_roam_channels_filter_by_current_band(struct mac_context * QDF_STATUS csr_neighbor_roam_channels_filter_by_current_band(struct mac_context *
mac, mac,
uint8_t sessionId, uint8_t sessionId,
uint8_t *pInputChannelList, uint32_t *input_chan_freq_list,
uint8_t inputNumOfChannels, uint8_t inputNumOfChannels,
uint8_t *pOutputChannelList, uint32_t *out_chan_freq_list,
uint8_t * uint8_t *
pMergedOutputNumOfChannels) pMergedOutputNumOfChannels)
{ {
uint8_t i = 0; uint8_t i = 0;
uint8_t numChannels = 0; uint8_t numChannels = 0;
uint8_t currAPoperationChannel = uint32_t curr_ap_op_chan_freq =
mac->roam.neighborRoamInfo[sessionId].currAPoperationChannel; mac->roam.neighborRoamInfo[sessionId].curr_ap_op_chan_freq;
/* Check for NULL pointer */ /* Check for NULL pointer */
if (!pInputChannelList) if (!input_chan_freq_list)
return QDF_STATUS_E_INVAL; return QDF_STATUS_E_INVAL;
/* Check for NULL pointer */ /* Check for NULL pointer */
if (!pOutputChannelList) if (!out_chan_freq_list)
return QDF_STATUS_E_INVAL; return QDF_STATUS_E_INVAL;
if (inputNumOfChannels > CFG_VALID_CHANNEL_LIST_LEN) { if (inputNumOfChannels > CFG_VALID_CHANNEL_LIST_LEN) {
@@ -491,9 +491,11 @@ QDF_STATUS csr_neighbor_roam_channels_filter_by_current_band(struct mac_context
return QDF_STATUS_E_INVAL; return QDF_STATUS_E_INVAL;
} }
for (i = 0; i < inputNumOfChannels; i++) { for (i = 0; i < inputNumOfChannels; i++) {
if (csr_get_rf_band(currAPoperationChannel) == if (WLAN_REG_IS_SAME_BAND_FREQS(
csr_get_rf_band(pInputChannelList[i])) { curr_ap_op_chan_freq,
pOutputChannelList[numChannels] = pInputChannelList[i]; input_chan_freq_list[i])) {
out_chan_freq_list[numChannels] =
input_chan_freq_list[i];
numChannels++; numChannels++;
} }
} }
@@ -511,7 +513,7 @@ QDF_STATUS csr_neighbor_roam_channels_filter_by_current_band(struct mac_context
* @pinput_chan_freq_list: The additional channels to merge in * @pinput_chan_freq_list: The additional channels to merge in
* to the "merged" channels list. * to the "merged" channels list.
* @input_num_of_ch: The number of additional channels. * @input_num_of_ch: The number of additional channels.
* @output_ch_list: The place to put the "merged" channel list. * @out_chan_freq_list: The place to put the "merged" channel list.
* @output_num_of_ch: The original number of channels in the * @output_num_of_ch: The original number of channels in the
* "merged" channels list. * "merged" channels list.
* @merged_output_num_of_ch: The final number of channels in the * @merged_output_num_of_ch: The final number of channels in the
@@ -527,7 +529,7 @@ QDF_STATUS csr_neighbor_roam_channels_filter_by_current_band(struct mac_context
QDF_STATUS csr_neighbor_roam_merge_channel_lists(struct mac_context *mac, QDF_STATUS csr_neighbor_roam_merge_channel_lists(struct mac_context *mac,
uint32_t *pinput_chan_freq_list, uint32_t *pinput_chan_freq_list,
uint8_t inputNumOfChannels, uint8_t inputNumOfChannels,
uint8_t *pOutputChannelList, uint32_t *out_chan_freq_list,
uint8_t outputNumOfChannels, uint8_t outputNumOfChannels,
uint8_t * uint8_t *
pMergedOutputNumOfChannels) pMergedOutputNumOfChannels)
@@ -541,7 +543,7 @@ QDF_STATUS csr_neighbor_roam_merge_channel_lists(struct mac_context *mac,
return QDF_STATUS_E_INVAL; return QDF_STATUS_E_INVAL;
/* Check for NULL pointer */ /* Check for NULL pointer */
if (!pOutputChannelList) if (!out_chan_freq_list)
return QDF_STATUS_E_INVAL; return QDF_STATUS_E_INVAL;
if (inputNumOfChannels > CFG_VALID_CHANNEL_LIST_LEN) { if (inputNumOfChannels > CFG_VALID_CHANNEL_LIST_LEN) {
@@ -561,8 +563,8 @@ QDF_STATUS csr_neighbor_roam_merge_channel_lists(struct mac_context *mac,
*/ */
for (i = 0; i < inputNumOfChannels; i++) { for (i = 0; i < inputNumOfChannels; i++) {
for (j = 0; j < outputNumOfChannels; j++) { for (j = 0; j < outputNumOfChannels; j++) {
if (wlan_reg_freq_to_chan(mac->pdev, pinput_chan_freq_list[i]) if (pinput_chan_freq_list[i]
== pOutputChannelList[j]) == out_chan_freq_list[j])
break; break;
} }
if (j == outputNumOfChannels) { if (j == outputNumOfChannels) {
@@ -571,8 +573,8 @@ QDF_STATUS csr_neighbor_roam_merge_channel_lists(struct mac_context *mac,
QDF_TRACE_LEVEL_DEBUG, QDF_TRACE_LEVEL_DEBUG,
"%s: [INFOLOG] Adding extra %d to Neighbor channel list", "%s: [INFOLOG] Adding extra %d to Neighbor channel list",
__func__, pinput_chan_freq_list[i]); __func__, pinput_chan_freq_list[i]);
pOutputChannelList[numChannels] = out_chan_freq_list[numChannels] =
wlan_reg_freq_to_chan(mac->pdev, pinput_chan_freq_list[i]); pinput_chan_freq_list[i];
numChannels++; numChannels++;
} }
} }
@@ -911,9 +913,8 @@ static void csr_neighbor_roam_info_ctx_init(struct mac_context *mac,
qdf_copy_macaddr(&ngbr_roam_info->currAPbssid, qdf_copy_macaddr(&ngbr_roam_info->currAPbssid,
&session->connectedProfile.bssid); &session->connectedProfile.bssid);
ngbr_roam_info->currAPoperationChannel = ngbr_roam_info->curr_ap_op_chan_freq =
wlan_reg_freq_to_chan(mac->pdev, session->connectedProfile.op_freq;
session->connectedProfile.op_freq);
ngbr_roam_info->currentNeighborLookupThreshold = ngbr_roam_info->currentNeighborLookupThreshold =
ngbr_roam_info->cfgParams.neighborLookupThreshold; ngbr_roam_info->cfgParams.neighborLookupThreshold;
ngbr_roam_info->currentOpportunisticThresholdDiff = ngbr_roam_info->currentOpportunisticThresholdDiff =