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:
@@ -1808,8 +1808,9 @@ hdd_parse_sendactionframe(struct hdd_adapter *adapter, const char *command,
|
||||
|
||||
/**
|
||||
* hdd_parse_channellist() - HDD Parse channel list
|
||||
* @hdd_ctx: hdd context
|
||||
* @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
|
||||
* @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
|
||||
*/
|
||||
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)
|
||||
{
|
||||
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)) {
|
||||
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",
|
||||
channel_list[j]);
|
||||
channel_freq_list[j]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -1937,14 +1941,21 @@ static int
|
||||
hdd_parse_set_roam_scan_channels_v1(struct hdd_adapter *adapter,
|
||||
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;
|
||||
QDF_STATUS status;
|
||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||
int ret;
|
||||
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) {
|
||||
hdd_err("Failed to parse channel list information");
|
||||
goto exit;
|
||||
@@ -1962,7 +1973,8 @@ hdd_parse_set_roam_scan_channels_v1(struct hdd_adapter *adapter,
|
||||
}
|
||||
|
||||
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)");
|
||||
ret = -EINVAL;
|
||||
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,
|
||||
adapter->vdev_id,
|
||||
channel_list, num_chan);
|
||||
channel_freq_list,
|
||||
num_chan);
|
||||
if (QDF_STATUS_SUCCESS != status) {
|
||||
hdd_err("Failed to update channel list information");
|
||||
ret = -EINVAL;
|
||||
@@ -2003,7 +2016,7 @@ hdd_parse_set_roam_scan_channels_v2(struct hdd_adapter *adapter,
|
||||
const char *command)
|
||||
{
|
||||
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 num_chan;
|
||||
int i;
|
||||
@@ -2043,11 +2056,13 @@ hdd_parse_set_roam_scan_channels_v2(struct hdd_adapter *adapter,
|
||||
ret = -EINVAL;
|
||||
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;
|
||||
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)");
|
||||
ret = -EINVAL;
|
||||
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,
|
||||
adapter->vdev_id,
|
||||
channel_list, num_chan);
|
||||
channel_freq_list, num_chan);
|
||||
if (QDF_STATUS_SUCCESS != status) {
|
||||
hdd_err("Failed to update channel list information");
|
||||
ret = -EINVAL;
|
||||
@@ -5520,12 +5535,19 @@ static int drv_cmd_set_ccx_roam_scan_channels(struct hdd_adapter *adapter,
|
||||
{
|
||||
int ret = 0;
|
||||
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;
|
||||
QDF_STATUS status;
|
||||
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) {
|
||||
hdd_err("Failed to parse channel list information");
|
||||
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;
|
||||
if (!sme_validate_channel_list(mac_handle, channel_list,
|
||||
if (!sme_validate_channel_list(mac_handle, channel_freq_list,
|
||||
num_channels)) {
|
||||
hdd_err("List contains invalid channel(s)");
|
||||
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,
|
||||
adapter->vdev_id,
|
||||
channel_list,
|
||||
channel_freq_list,
|
||||
num_channels);
|
||||
if (QDF_STATUS_SUCCESS != status) {
|
||||
hdd_err("Failed to update channel list information");
|
||||
|
@@ -125,7 +125,7 @@ typedef struct sCsrNeighborRoamControlInfo {
|
||||
eCsrNeighborRoamState prevNeighborRoamState;
|
||||
tCsrNeighborRoamCfgParams cfgParams;
|
||||
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;
|
||||
uint8_t currentNeighborLookupThreshold;
|
||||
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);
|
||||
QDF_STATUS csr_neighbor_roam_channels_filter_by_current_band(
|
||||
struct mac_context *mac, uint8_t sessionId,
|
||||
uint8_t *pInputChannelList,
|
||||
uint32_t *input_chan_freq_list,
|
||||
uint8_t inputNumOfChannels,
|
||||
uint8_t *pOutputChannelList,
|
||||
uint32_t *out_chan_freq_list,
|
||||
uint8_t *pMergedOutputNumOfChannels);
|
||||
QDF_STATUS csr_neighbor_roam_merge_channel_lists(struct mac_context *mac,
|
||||
uint32_t *pinput_chan_freq_list,
|
||||
uint8_t inputNumOfChannels,
|
||||
uint8_t *pOutputChannelList,
|
||||
uint32_t *out_chan_freq_list,
|
||||
uint8_t outputNumOfChannels,
|
||||
uint8_t *pMergedOutputNumOfChannels);
|
||||
void csr_roam_reset_roam_params(struct mac_context *mac_ptr);
|
||||
|
@@ -1038,7 +1038,7 @@ QDF_STATUS sme_get_roam_rssi_diff(mac_handle_t mac_handle, uint8_t vdev_id,
|
||||
uint8_t *rssi_diff);
|
||||
QDF_STATUS sme_change_roam_scan_channel_list(mac_handle_t mac_handle,
|
||||
uint8_t sessionId,
|
||||
uint8_t *pChannelList,
|
||||
uint32_t *channel_freq_list,
|
||||
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);
|
||||
QDF_STATUS sme_set_ese_roam_scan_channel_list(mac_handle_t mac_handle,
|
||||
uint8_t sessionId,
|
||||
uint8_t *pChannelList,
|
||||
uint32_t *chan_freq_list,
|
||||
uint8_t numChannels);
|
||||
QDF_STATUS sme_get_roam_scan_channel_list(mac_handle_t mac_handle,
|
||||
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
|
||||
* @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
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
bool sme_validate_channel_list(mac_handle_t mac_handle,
|
||||
uint8_t *chan_list,
|
||||
uint32_t *chan_freq_list,
|
||||
uint8_t num_channels);
|
||||
/**
|
||||
* sme_set_amsdu() - set amsdu enable/disable based on user cfg
|
||||
|
@@ -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
|
||||
* @mac: global mac context
|
||||
* @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
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS or QDF_STATUS_E_FAILURE
|
||||
*/
|
||||
QDF_STATUS csr_create_bg_scan_roam_channel_list(struct mac_context *mac,
|
||||
tCsrChannelInfo *channel_info,
|
||||
const uint8_t *chan_list,
|
||||
const uint32_t *chan_freq_list,
|
||||
const uint8_t num_chan);
|
||||
|
||||
#ifdef FEATURE_WLAN_ESE
|
||||
QDF_STATUS csr_create_roam_scan_channel_list(struct mac_context *mac,
|
||||
uint8_t sessionId,
|
||||
uint8_t *pChannelList,
|
||||
uint32_t *chan_freq_list,
|
||||
uint8_t numChannels,
|
||||
const enum band_info band);
|
||||
#endif
|
||||
|
@@ -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
|
||||
* @mac_handle: Opaque handle to the global MAC context
|
||||
* @sessionId: sme session id
|
||||
* @pChannelList: Output channel list
|
||||
* @chan_freq_list: Output channel list
|
||||
* @numChannels: Output number of channels
|
||||
*
|
||||
* 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,
|
||||
uint8_t sessionId,
|
||||
uint8_t *pChannelList,
|
||||
uint32_t *chan_freq_list,
|
||||
uint8_t numChannels)
|
||||
{
|
||||
struct mac_context *mac = MAC_CONTEXT(mac_handle);
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
tpCsrNeighborRoamControlInfo pNeighborRoamInfo = NULL;
|
||||
tpCsrChannelInfo curchnl_list_info = NULL;
|
||||
uint8_t oldChannelList[CFG_VALID_CHANNEL_LIST_LEN * 2] = { 0 };
|
||||
uint8_t newChannelList[128] = { 0 };
|
||||
uint8_t oldChannelList[CFG_VALID_CHANNEL_LIST_LEN * 5] = { 0 };
|
||||
uint8_t newChannelList[CFG_VALID_CHANNEL_LIST_LEN * 5] = { 0 };
|
||||
uint8_t i = 0, j = 0;
|
||||
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);
|
||||
status = csr_create_roam_scan_channel_list(mac, sessionId,
|
||||
pChannelList, numChannels,
|
||||
chan_freq_list, numChannels,
|
||||
band);
|
||||
if (QDF_IS_STATUS_SUCCESS(status)) {
|
||||
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;
|
||||
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) {
|
||||
sme_debug("Current channels:");
|
||||
sme_dump_freq_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, channel_list,
|
||||
csr_create_bg_scan_roam_channel_list(mac, chan_info, freq_list,
|
||||
num_chan);
|
||||
sme_debug("New channels:");
|
||||
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,
|
||||
REASON_CHANNEL_LIST_CHANGED);
|
||||
|
||||
qdf_mem_free(channel_list);
|
||||
|
||||
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
|
||||
* @mac_handle: Opaque handle to the global MAC context
|
||||
* @sessionId: sme session id
|
||||
* @channel_list: Output channel list
|
||||
* @channel_freq_list: Output channel list
|
||||
* @numChannels: Output number of channels
|
||||
*
|
||||
* 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,
|
||||
uint8_t sessionId,
|
||||
uint8_t *channel_list,
|
||||
uint32_t *channel_freq_list,
|
||||
uint8_t numChannels)
|
||||
{
|
||||
struct mac_context *mac = MAC_CONTEXT(mac_handle);
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
tpCsrNeighborRoamControlInfo pNeighborRoamInfo = NULL;
|
||||
uint8_t oldChannelList[CFG_VALID_CHANNEL_LIST_LEN * 2] = { 0 };
|
||||
uint8_t newChannelList[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 * 5] = { 0 };
|
||||
uint8_t i = 0, j = 0;
|
||||
tCsrChannelInfo *chan_info;
|
||||
|
||||
@@ -7497,14 +7489,14 @@ QDF_STATUS sme_change_roam_scan_channel_list(mac_handle_t mac_handle,
|
||||
if (j < sizeof(oldChannelList))
|
||||
j += snprintf(oldChannelList + j,
|
||||
sizeof(oldChannelList) -
|
||||
j, "%d",
|
||||
j, " %d",
|
||||
chan_info->freq_list[i]);
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
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);
|
||||
sme_set_roam_scan_control(mac_handle, sessionId, 1);
|
||||
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,
|
||||
uint8_t *chan_list,
|
||||
uint32_t *chan_freq_list,
|
||||
uint8_t num_channels)
|
||||
{
|
||||
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;
|
||||
struct csr_channel *ch_lst_info = &mac_ctx->scan.base_channels;
|
||||
|
||||
if (!chan_list || !num_channels) {
|
||||
sme_err("Chan list empty %pK or num_channels is 0", chan_list);
|
||||
if (!chan_freq_list || !num_channels) {
|
||||
sme_err("Chan list empty %pK or num_channels is 0",
|
||||
chan_freq_list);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -15226,14 +15219,14 @@ bool sme_validate_channel_list(mac_handle_t mac_handle,
|
||||
found = false;
|
||||
for (j = 0; j < ch_lst_info->numChannels; 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;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
sme_debug("Invalid channel %d", chan_list[i]);
|
||||
sme_debug("Invalid channel %d", chan_freq_list[i]);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@@ -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,
|
||||
tCsrChannelInfo *channel_info,
|
||||
const uint8_t *chan_list,
|
||||
const uint32_t *chan_freq_list,
|
||||
const uint8_t num_chan)
|
||||
{
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
uint8_t i;
|
||||
|
||||
channel_info->freq_list = qdf_mem_malloc(sizeof(uint32_t) * num_chan);
|
||||
if (!channel_info->freq_list)
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
|
||||
channel_info->numOfChannels = num_chan;
|
||||
sme_chan_to_freq_list(mac->pdev, channel_info->freq_list,
|
||||
chan_list, num_chan);
|
||||
for (i = 0; i < num_chan; i++)
|
||||
channel_info->freq_list[i] = chan_freq_list[i];
|
||||
|
||||
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
|
||||
* @mac: Global mac pointer
|
||||
* @sessionId: session id
|
||||
* @chan_list: pointer to channel list
|
||||
* @chan_freq_list: pointer to channel list
|
||||
* @numChannels: number of channels
|
||||
* @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,
|
||||
uint8_t sessionId,
|
||||
uint8_t *chan_list,
|
||||
uint32_t *chan_freq_list,
|
||||
uint8_t numChannels,
|
||||
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];
|
||||
uint8_t out_num_chan = 0;
|
||||
uint8_t inNumChannels = numChannels;
|
||||
uint8_t *in_ptr = chan_list;
|
||||
uint32_t *in_ptr = chan_freq_list;
|
||||
uint8_t i = 0;
|
||||
uint8_t ChannelList[CFG_VALID_CHANNEL_LIST_LEN] = { 0 };
|
||||
uint8_t tmp_chan_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 };
|
||||
uint32_t csr_freq_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 };
|
||||
uint32_t tmp_chan_freq_list[CFG_VALID_CHANNEL_LIST_LEN] = { 0 };
|
||||
uint8_t mergedOutputNumOfChannels = 0;
|
||||
|
||||
tpCsrChannelInfo currChannelListInfo
|
||||
@@ -2221,25 +2223,25 @@ QDF_STATUS csr_create_roam_scan_channel_list(struct mac_context *mac,
|
||||
}
|
||||
if (BAND_2G == band) {
|
||||
for (i = 0; i < inNumChannels; i++) {
|
||||
if (WLAN_REG_IS_24GHZ_CH(in_ptr[i])
|
||||
&& csr_roam_is_channel_valid(mac, in_ptr[i])) {
|
||||
ChannelList[out_num_chan++] = in_ptr[i];
|
||||
if (WLAN_REG_IS_24GHZ_CH_FREQ(in_ptr[i]) &&
|
||||
csr_roam_is_chan_freq_valid(mac, in_ptr[i])) {
|
||||
csr_freq_list[out_num_chan++] = in_ptr[i];
|
||||
}
|
||||
}
|
||||
} else if (BAND_5G == band) {
|
||||
for (i = 0; i < inNumChannels; i++) {
|
||||
/* Add 5G Non-DFS channel */
|
||||
if (WLAN_REG_IS_5GHZ_CH(in_ptr[i]) &&
|
||||
csr_roam_is_channel_valid(mac, in_ptr[i]) &&
|
||||
!wlan_reg_is_dfs_ch(mac->pdev, in_ptr[i])) {
|
||||
ChannelList[out_num_chan++] = in_ptr[i];
|
||||
if (WLAN_REG_IS_5GHZ_CH_FREQ(in_ptr[i]) &&
|
||||
csr_roam_is_chan_freq_valid(mac, in_ptr[i]) &&
|
||||
!wlan_reg_is_dfs_for_freq(mac->pdev, in_ptr[i])) {
|
||||
csr_freq_list[out_num_chan++] = in_ptr[i];
|
||||
}
|
||||
}
|
||||
} else if (BAND_ALL == band) {
|
||||
for (i = 0; i < inNumChannels; i++) {
|
||||
if (csr_roam_is_channel_valid(mac, in_ptr[i]) &&
|
||||
!wlan_reg_is_dfs_ch(mac->pdev, in_ptr[i])) {
|
||||
ChannelList[out_num_chan++] = in_ptr[i];
|
||||
if (csr_roam_is_chan_freq_valid(mac, in_ptr[i]) &&
|
||||
!wlan_reg_is_dfs_for_freq(mac->pdev, in_ptr[i])) {
|
||||
csr_freq_list[out_num_chan++] = in_ptr[i];
|
||||
}
|
||||
}
|
||||
} 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
|
||||
*/
|
||||
if ((BAND_ALL == band) && CSR_IS_ROAM_INTRA_BAND_ENABLED(mac)) {
|
||||
csr_neighbor_roam_channels_filter_by_current_band(mac,
|
||||
sessionId,
|
||||
ChannelList,
|
||||
out_num_chan,
|
||||
tmp_chan_list,
|
||||
&out_num_chan
|
||||
);
|
||||
qdf_mem_copy(ChannelList, tmp_chan_list, out_num_chan);
|
||||
csr_neighbor_roam_channels_filter_by_current_band(
|
||||
mac,
|
||||
sessionId,
|
||||
csr_freq_list,
|
||||
out_num_chan,
|
||||
tmp_chan_freq_list,
|
||||
&out_num_chan);
|
||||
}
|
||||
/* Prepare final roam scan channel list */
|
||||
if (out_num_chan) {
|
||||
@@ -2279,9 +2280,10 @@ QDF_STATUS csr_create_roam_scan_channel_list(struct mac_context *mac,
|
||||
currChannelListInfo->numOfChannels = 0;
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
sme_chan_to_freq_list(mac->pdev,
|
||||
currChannelListInfo->freq_list,
|
||||
ChannelList, out_num_chan);
|
||||
for (i = 0; i < out_num_chan; i++)
|
||||
currChannelListInfo->freq_list[i] =
|
||||
tmp_chan_freq_list[i];
|
||||
|
||||
currChannelListInfo->numOfChannels = out_num_chan;
|
||||
}
|
||||
return status;
|
||||
|
@@ -451,9 +451,9 @@ enum band_info csr_get_rf_band(uint8_t channel)
|
||||
*
|
||||
* @mac_ctx: Pointer to Global MAC structure
|
||||
* @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
|
||||
* @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
|
||||
* @merged_output_num_of_ch: The final number of channels in the
|
||||
* 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 *
|
||||
mac,
|
||||
uint8_t sessionId,
|
||||
uint8_t *pInputChannelList,
|
||||
uint32_t *input_chan_freq_list,
|
||||
uint8_t inputNumOfChannels,
|
||||
uint8_t *pOutputChannelList,
|
||||
uint32_t *out_chan_freq_list,
|
||||
uint8_t *
|
||||
pMergedOutputNumOfChannels)
|
||||
{
|
||||
uint8_t i = 0;
|
||||
uint8_t numChannels = 0;
|
||||
uint8_t currAPoperationChannel =
|
||||
mac->roam.neighborRoamInfo[sessionId].currAPoperationChannel;
|
||||
uint32_t curr_ap_op_chan_freq =
|
||||
mac->roam.neighborRoamInfo[sessionId].curr_ap_op_chan_freq;
|
||||
/* Check for NULL pointer */
|
||||
if (!pInputChannelList)
|
||||
if (!input_chan_freq_list)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
/* Check for NULL pointer */
|
||||
if (!pOutputChannelList)
|
||||
if (!out_chan_freq_list)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
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;
|
||||
}
|
||||
for (i = 0; i < inputNumOfChannels; i++) {
|
||||
if (csr_get_rf_band(currAPoperationChannel) ==
|
||||
csr_get_rf_band(pInputChannelList[i])) {
|
||||
pOutputChannelList[numChannels] = pInputChannelList[i];
|
||||
if (WLAN_REG_IS_SAME_BAND_FREQS(
|
||||
curr_ap_op_chan_freq,
|
||||
input_chan_freq_list[i])) {
|
||||
out_chan_freq_list[numChannels] =
|
||||
input_chan_freq_list[i];
|
||||
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
|
||||
* to the "merged" channels list.
|
||||
* @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
|
||||
* "merged" channels list.
|
||||
* @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,
|
||||
uint32_t *pinput_chan_freq_list,
|
||||
uint8_t inputNumOfChannels,
|
||||
uint8_t *pOutputChannelList,
|
||||
uint32_t *out_chan_freq_list,
|
||||
uint8_t outputNumOfChannels,
|
||||
uint8_t *
|
||||
pMergedOutputNumOfChannels)
|
||||
@@ -541,7 +543,7 @@ QDF_STATUS csr_neighbor_roam_merge_channel_lists(struct mac_context *mac,
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
/* Check for NULL pointer */
|
||||
if (!pOutputChannelList)
|
||||
if (!out_chan_freq_list)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
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 (j = 0; j < outputNumOfChannels; j++) {
|
||||
if (wlan_reg_freq_to_chan(mac->pdev, pinput_chan_freq_list[i])
|
||||
== pOutputChannelList[j])
|
||||
if (pinput_chan_freq_list[i]
|
||||
== out_chan_freq_list[j])
|
||||
break;
|
||||
}
|
||||
if (j == outputNumOfChannels) {
|
||||
@@ -571,8 +573,8 @@ QDF_STATUS csr_neighbor_roam_merge_channel_lists(struct mac_context *mac,
|
||||
QDF_TRACE_LEVEL_DEBUG,
|
||||
"%s: [INFOLOG] Adding extra %d to Neighbor channel list",
|
||||
__func__, pinput_chan_freq_list[i]);
|
||||
pOutputChannelList[numChannels] =
|
||||
wlan_reg_freq_to_chan(mac->pdev, pinput_chan_freq_list[i]);
|
||||
out_chan_freq_list[numChannels] =
|
||||
pinput_chan_freq_list[i];
|
||||
numChannels++;
|
||||
}
|
||||
}
|
||||
@@ -911,9 +913,8 @@ static void csr_neighbor_roam_info_ctx_init(struct mac_context *mac,
|
||||
|
||||
qdf_copy_macaddr(&ngbr_roam_info->currAPbssid,
|
||||
&session->connectedProfile.bssid);
|
||||
ngbr_roam_info->currAPoperationChannel =
|
||||
wlan_reg_freq_to_chan(mac->pdev,
|
||||
session->connectedProfile.op_freq);
|
||||
ngbr_roam_info->curr_ap_op_chan_freq =
|
||||
session->connectedProfile.op_freq;
|
||||
ngbr_roam_info->currentNeighborLookupThreshold =
|
||||
ngbr_roam_info->cfgParams.neighborLookupThreshold;
|
||||
ngbr_roam_info->currentOpportunisticThresholdDiff =
|
||||
|
Reference in New Issue
Block a user