mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 16:16:15 -04:00
qcacld-3.0: Always append preferred roam scan channels
For ADDROAMSCANCHANNELS command, always append user given channels into the existing preferred channels list in driver. If the preferred channel list exceeds SIR_ROAM_MAX_CHANNELS i.e. 80 then overwrite oldest entries with new channels. Change-Id: Ifa12b1e4d75dd927bdbceea9a076ed1bcbd91f4f CRs-Fixed: 2618318
This commit is contained in:
parent
e45298865b
commit
293c2d3bf6
1 changed files with 58 additions and 10 deletions
|
|
@ -7322,6 +7322,27 @@ static bool sme_validate_freq_list(mac_handle_t mac_handle,
|
|||
return true;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
csr_append_pref_chan_list(tCsrChannelInfo *chan_info, uint32_t *freq_list,
|
||||
uint8_t num_chan)
|
||||
{
|
||||
uint8_t i = 0, j = 0;
|
||||
|
||||
for (i = 0; i < chan_info->numOfChannels; i++) {
|
||||
for (j = 0; j < num_chan; j++)
|
||||
if (chan_info->freq_list[i] == freq_list[j])
|
||||
break;
|
||||
|
||||
if (j < num_chan)
|
||||
continue;
|
||||
if (num_chan == SIR_ROAM_MAX_CHANNELS)
|
||||
break;
|
||||
freq_list[num_chan++] = chan_info->freq_list[i];
|
||||
}
|
||||
|
||||
return num_chan;
|
||||
}
|
||||
|
||||
/**
|
||||
* sme_update_roam_scan_channel_list() - to update scan channel list
|
||||
* @mac_handle: Opaque handle to the global MAC context
|
||||
|
|
@ -7342,11 +7363,17 @@ 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);
|
||||
uint16_t pref_chan_cnt = 0;
|
||||
|
||||
if (chan_info->numOfChannels) {
|
||||
sme_debug("Current channels:");
|
||||
sme_dump_freq_list(chan_info);
|
||||
}
|
||||
|
||||
pref_chan_cnt = csr_append_pref_chan_list(chan_info, freq_list,
|
||||
num_chan);
|
||||
num_chan = pref_chan_cnt;
|
||||
|
||||
csr_flush_cfg_bg_scan_roam_channel_list(chan_info);
|
||||
csr_create_bg_scan_roam_channel_list(mac, chan_info, freq_list,
|
||||
num_chan);
|
||||
|
|
@ -7504,11 +7531,13 @@ QDF_STATUS sme_get_roam_scan_channel_list(mac_handle_t mac_handle,
|
|||
uint32_t *freq_list, uint8_t *pNumChannels,
|
||||
uint8_t sessionId)
|
||||
{
|
||||
int i = 0;
|
||||
int i = 0, chan_cnt = 0;
|
||||
struct mac_context *mac = MAC_CONTEXT(mac_handle);
|
||||
tpCsrNeighborRoamControlInfo pNeighborRoamInfo = NULL;
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
tCsrChannelInfo *chan_info;
|
||||
struct csr_channel *occupied_ch_lst =
|
||||
&mac->scan.occupiedChannels[sessionId];
|
||||
|
||||
if (sessionId >= WLAN_MAX_VDEVS) {
|
||||
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
|
||||
|
|
@ -7522,22 +7551,41 @@ QDF_STATUS sme_get_roam_scan_channel_list(mac_handle_t mac_handle,
|
|||
return status;
|
||||
|
||||
chan_info = &pNeighborRoamInfo->cfgParams.specific_chan_info;
|
||||
if (!chan_info->numOfChannels) {
|
||||
if (chan_info->numOfChannels) {
|
||||
*pNumChannels = chan_info->numOfChannels;
|
||||
for (i = 0; i < (*pNumChannels) &&
|
||||
i < WNI_CFG_VALID_CHANNEL_LIST_LEN; i++)
|
||||
freq_list[i] = chan_info->freq_list[i];
|
||||
|
||||
*pNumChannels = i;
|
||||
} else {
|
||||
chan_info = &pNeighborRoamInfo->cfgParams.pref_chan_info;
|
||||
if (!chan_info->numOfChannels) {
|
||||
*pNumChannels = chan_info->numOfChannels;
|
||||
if (chan_info->numOfChannels) {
|
||||
for (chan_cnt = 0; chan_cnt < (*pNumChannels) &&
|
||||
chan_cnt < WNI_CFG_VALID_CHANNEL_LIST_LEN;
|
||||
chan_cnt++)
|
||||
freq_list[chan_cnt] =
|
||||
chan_info->freq_list[chan_cnt];
|
||||
}
|
||||
|
||||
if (occupied_ch_lst->numChannels) {
|
||||
for (i = 0; i < occupied_ch_lst->numChannels &&
|
||||
chan_cnt < WNI_CFG_VALID_CHANNEL_LIST_LEN; i++)
|
||||
freq_list[chan_cnt++] =
|
||||
occupied_ch_lst->channel_freq_list[i];
|
||||
}
|
||||
|
||||
*pNumChannels = chan_cnt;
|
||||
if (!(chan_info->numOfChannels ||
|
||||
occupied_ch_lst->numChannels)) {
|
||||
sme_err("Roam Scan channel list is NOT yet initialized");
|
||||
*pNumChannels = 0;
|
||||
sme_release_global_lock(&mac->sme);
|
||||
return status;
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
}
|
||||
}
|
||||
|
||||
*pNumChannels = chan_info->numOfChannels;
|
||||
for (i = 0; i < (*pNumChannels); i++)
|
||||
freq_list[i] = chan_info->freq_list[i];
|
||||
freq_list[i] = '\0';
|
||||
sme_release_global_lock(&mac->sme);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue