qcacmn: VDEV MLME SM changes
1) Fixes to enable VDEV MLME SM with legacy code 2) Define/Enable PDEV MLME component object. Change-Id: Ieb87e5b7b70d6bb593ba0950297894a81c6a4feb CRs-Fixed: 2384173
这个提交包含在:
@@ -1,19 +1,17 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -184,23 +182,24 @@ struct wlan_objmgr_vdev *wlan_util_get_vdev_by_ifname(
|
||||
*/
|
||||
uint8_t *wlan_util_vdev_get_if_name(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/*
|
||||
/**
|
||||
* wlan_util_is_vdev_active() - Check for vdev active
|
||||
* @pdev: pdev pointer
|
||||
* @dbg_id: debug id for ref counting
|
||||
*
|
||||
* @Return: QDF_STATUS_SUCCESS in case of vdev active
|
||||
* Return: QDF_STATUS_SUCCESS in case of vdev active
|
||||
* QDF_STATUS_E_INVAL, if dev is not active
|
||||
*/
|
||||
QDF_STATUS wlan_util_is_vdev_active(struct wlan_objmgr_pdev *pdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
|
||||
/*
|
||||
/**
|
||||
* wlan_vdev_is_up() - Check for vdev is in UP state
|
||||
* @vdev: vdev pointer
|
||||
*
|
||||
* @Return: true in case of vdev is in UP state
|
||||
* Return: QDF_STATUS_SUCCESS, if vdev is in up, otherwise QDF_STATUS_E_FAILURE
|
||||
*/
|
||||
bool wlan_vdev_is_up(struct wlan_objmgr_vdev *vdev);
|
||||
QDF_STATUS wlan_vdev_is_up(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* wlan_util_pdev_vdevs_deschan_match() - function to check des channel matches
|
||||
@@ -211,7 +210,7 @@ bool wlan_vdev_is_up(struct wlan_objmgr_vdev *vdev);
|
||||
*
|
||||
* This function checks the vdev desired channel with other vdev channels
|
||||
*
|
||||
* Return : SUCCESS, if it matches, otherwise FAILURE
|
||||
* Return: QDF_STATUS_SUCCESS, if it matches, otherwise QDF_STATUS_E_FAILURE
|
||||
*/
|
||||
QDF_STATUS wlan_util_pdev_vdevs_deschan_match(struct wlan_objmgr_pdev *pdev,
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
@@ -225,9 +224,9 @@ QDF_STATUS wlan_util_pdev_vdevs_deschan_match(struct wlan_objmgr_pdev *pdev,
|
||||
*
|
||||
* This function set/reset given index bit
|
||||
*
|
||||
* Return : void
|
||||
* Return: void
|
||||
*/
|
||||
void wlan_util_change_map_index(uint32_t *map, uint8_t id, uint8_t set);
|
||||
void wlan_util_change_map_index(unsigned long *map, uint8_t id, uint8_t set);
|
||||
|
||||
/**
|
||||
* wlan_util_map_index_is_set() - function to check whether given index bit is
|
||||
@@ -237,9 +236,9 @@ void wlan_util_change_map_index(uint32_t *map, uint8_t id, uint8_t set);
|
||||
*
|
||||
* This function checks the given index bit is set
|
||||
*
|
||||
* Return : true, if bit is set, otherwise false
|
||||
* Return: true, if bit is set, otherwise false
|
||||
*/
|
||||
bool wlan_util_map_index_is_set(uint32_t *map, uint8_t id);
|
||||
bool wlan_util_map_index_is_set(unsigned long *map, uint8_t id);
|
||||
|
||||
/**
|
||||
* wlan_pdev_chan_change_pending_vdevs() - function to test/set channel change
|
||||
@@ -250,10 +249,11 @@ bool wlan_util_map_index_is_set(uint32_t *map, uint8_t id);
|
||||
*
|
||||
* This function test/set channel change pending flag
|
||||
*
|
||||
* Return : SUCCESS, if it iterates through all vdevs, otherwise FAILURE
|
||||
* Return: QDF_STATUS_SUCCESS, if it iterates through all vdevs,
|
||||
* otherwise QDF_STATUS_E_FAILURE
|
||||
*/
|
||||
QDF_STATUS wlan_pdev_chan_change_pending_vdevs(struct wlan_objmgr_pdev *pdev,
|
||||
uint32_t *vdev_id_map,
|
||||
unsigned long *vdev_id_map,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
|
||||
/**
|
||||
@@ -263,10 +263,33 @@ QDF_STATUS wlan_pdev_chan_change_pending_vdevs(struct wlan_objmgr_pdev *pdev,
|
||||
*
|
||||
* This function checks the chan1 and chan2 are same
|
||||
*
|
||||
* Return : SUCCESS, if it matches, otherwise FAILURE
|
||||
* Return: QDF_STATUS_SUCCESS, if it matches, otherwise QDF_STATUS_E_FAILURE
|
||||
*/
|
||||
QDF_STATUS wlan_chan_eq(struct wlan_channel *chan1, struct wlan_channel *chan2);
|
||||
|
||||
/**
|
||||
* wlan_chan_copy() - function to copy channel
|
||||
* @tgt: target channel object
|
||||
* @src: src achannel object
|
||||
*
|
||||
* This function copies channel data from src to tgt
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
void wlan_chan_copy(struct wlan_channel *tgt, struct wlan_channel *src);
|
||||
|
||||
/**
|
||||
* wlan_vdev_get_active_channel() - derives the vdev operating channel
|
||||
* @vdev: VDEV object
|
||||
*
|
||||
* This function checks vdev state and return the channel pointer accordingly
|
||||
*
|
||||
* Return: active channel, if vdev chan config is valid
|
||||
* NULL, if VDEV is in INIT or STOP state
|
||||
*/
|
||||
struct wlan_channel *wlan_vdev_get_active_channel
|
||||
(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* wlan_util_stats_get_rssi() - API to get rssi in dbm
|
||||
* @db2dbm_enabled: If db2dbm capability is enabled
|
||||
@@ -285,6 +308,20 @@ void
|
||||
wlan_util_stats_get_rssi(bool db2dbm_enabled, int32_t bcn_snr, int32_t dat_snr,
|
||||
int8_t *rssi);
|
||||
|
||||
/**
|
||||
* wlan_util_is_pdev_restart_progress() - Check if any vdev is in restart state
|
||||
* @pdev: pdev pointer
|
||||
* @dbg_id: module id
|
||||
*
|
||||
* Iterates through all vdevs, checks if any VDEV is in RESTART_PROGRESS
|
||||
* substate
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS,if any vdev is in RESTART_PROGRESS substate
|
||||
* otherwise QDF_STATUS_E_FAILURE
|
||||
*/
|
||||
QDF_STATUS wlan_util_is_pdev_restart_progress(struct wlan_objmgr_pdev *pdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
|
||||
/**
|
||||
* wlan_util_is_pdev_scan_allowed() - Check for vdev is allowed to scan
|
||||
* @pdev: pdev pointer
|
||||
@@ -297,5 +334,4 @@ wlan_util_stats_get_rssi(bool db2dbm_enabled, int32_t bcn_snr, int32_t dat_snr,
|
||||
*/
|
||||
QDF_STATUS wlan_util_is_pdev_scan_allowed(struct wlan_objmgr_pdev *pdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
|
||||
#endif /* _WLAN_UTILITY_H_ */
|
||||
|
@@ -1,19 +1,17 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
* above copyright notice and this permission notice appear in all
|
||||
* copies.
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
||||
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -272,14 +270,9 @@ static void wlan_vdev_active(struct wlan_objmgr_pdev *pdev, void *object,
|
||||
wlan_vdev_obj_unlock(vdev);
|
||||
}
|
||||
|
||||
bool wlan_vdev_is_up(struct wlan_objmgr_vdev *vdev)
|
||||
QDF_STATUS wlan_vdev_is_up(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
bool ret_val = false;
|
||||
|
||||
if (wlan_vdev_allow_connect_n_tx(vdev) == QDF_STATUS_SUCCESS)
|
||||
ret_val = true;
|
||||
|
||||
return ret_val;
|
||||
return wlan_vdev_allow_connect_n_tx(vdev);
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_vdev_is_up);
|
||||
@@ -298,17 +291,17 @@ static void wlan_vdev_active(struct wlan_objmgr_pdev *pdev, void *object,
|
||||
wlan_vdev_obj_unlock(vdev);
|
||||
}
|
||||
|
||||
bool wlan_vdev_is_up(struct wlan_objmgr_vdev *vdev)
|
||||
QDF_STATUS wlan_vdev_is_up(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
bool ret_val = false;
|
||||
QDF_STATUS is_up = QDF_STATUS_E_FAILURE;
|
||||
|
||||
wlan_vdev_obj_lock(vdev);
|
||||
if (wlan_vdev_mlme_get_state(vdev) == WLAN_VDEV_S_RUN)
|
||||
ret_val = true;
|
||||
is_up = QDF_STATUS_SUCCESS;
|
||||
|
||||
wlan_vdev_obj_unlock(vdev);
|
||||
|
||||
return ret_val;
|
||||
return is_up;
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_vdev_is_up);
|
||||
@@ -332,51 +325,24 @@ QDF_STATUS wlan_util_is_vdev_active(struct wlan_objmgr_pdev *pdev,
|
||||
}
|
||||
|
||||
#ifdef CMN_VDEV_MLME_SM_ENABLE
|
||||
void wlan_util_change_map_index(uint32_t *map, uint8_t id, uint8_t set)
|
||||
void wlan_util_change_map_index(unsigned long *map, uint8_t id, uint8_t set)
|
||||
{
|
||||
uint8_t map_index = 0;
|
||||
uint8_t map_entry_size = 32;
|
||||
uint8_t adjust_index = 0;
|
||||
|
||||
/*
|
||||
* Derive map_index and adjust_index to find actual DWORD
|
||||
* the id map is present
|
||||
*/
|
||||
while ((id - adjust_index) >= map_entry_size) {
|
||||
map_index++;
|
||||
adjust_index = map_index * map_entry_size;
|
||||
}
|
||||
if (set)
|
||||
map[map_index] |= (1 << (id - adjust_index));
|
||||
qdf_set_bit(id, map);
|
||||
else
|
||||
map[map_index] &= ~(1 << (id - adjust_index));
|
||||
qdf_clear_bit(id, map);
|
||||
}
|
||||
|
||||
bool wlan_util_map_index_is_set(uint32_t *map, uint8_t id)
|
||||
bool wlan_util_map_index_is_set(unsigned long *map, uint8_t id)
|
||||
{
|
||||
uint8_t map_index = 0;
|
||||
uint8_t map_entry_size = 32;
|
||||
uint8_t adjust_index = 0;
|
||||
|
||||
/*
|
||||
* Derive map_index and adjust_index to find actual DWORD
|
||||
* the id map is present
|
||||
*/
|
||||
while ((id - adjust_index) >= map_entry_size) {
|
||||
map_index++;
|
||||
adjust_index = map_index * map_entry_size;
|
||||
}
|
||||
if (map[map_index] & (1 << (id - adjust_index)))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
return qdf_test_bit(id, map);
|
||||
}
|
||||
|
||||
static void wlan_vdev_chan_change_pending(struct wlan_objmgr_pdev *pdev,
|
||||
void *object, void *arg)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev = (struct wlan_objmgr_vdev *)object;
|
||||
uint32_t *vdev_id_map = (uint32_t *)arg;
|
||||
unsigned long *vdev_id_map = (unsigned long *)arg;
|
||||
uint8_t id = 0;
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
|
||||
@@ -388,8 +354,10 @@ static void wlan_vdev_chan_change_pending(struct wlan_objmgr_pdev *pdev,
|
||||
if (wlan_vdev_chan_config_valid(vdev) == QDF_STATUS_SUCCESS) {
|
||||
id = wlan_vdev_get_id(vdev);
|
||||
/* Invalid vdev id */
|
||||
if (id >= wlan_psoc_get_max_vdev_count(psoc))
|
||||
if (id >= wlan_psoc_get_max_vdev_count(psoc)) {
|
||||
wlan_vdev_obj_unlock(vdev);
|
||||
return;
|
||||
}
|
||||
|
||||
wlan_util_change_map_index(vdev_id_map, id, 1);
|
||||
}
|
||||
@@ -398,7 +366,7 @@ static void wlan_vdev_chan_change_pending(struct wlan_objmgr_pdev *pdev,
|
||||
}
|
||||
|
||||
QDF_STATUS wlan_pdev_chan_change_pending_vdevs(struct wlan_objmgr_pdev *pdev,
|
||||
uint32_t *vdev_id_map,
|
||||
unsigned long *vdev_id_map,
|
||||
wlan_objmgr_ref_dbgid dbg_id)
|
||||
{
|
||||
if (!pdev)
|
||||
@@ -419,23 +387,85 @@ QDF_STATUS wlan_chan_eq(struct wlan_channel *chan1, struct wlan_channel *chan2)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
static void wlan_pdev_chan_match(struct wlan_objmgr_pdev *pdev, void *object,
|
||||
void wlan_chan_copy(struct wlan_channel *tgt, struct wlan_channel *src)
|
||||
{
|
||||
qdf_mem_copy(tgt, src, sizeof(struct wlan_channel));
|
||||
}
|
||||
|
||||
struct wlan_channel *wlan_vdev_get_active_channel(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct wlan_channel *comp_vdev_chan = NULL;
|
||||
|
||||
if (wlan_vdev_chan_config_valid(vdev) == QDF_STATUS_SUCCESS) {
|
||||
/* compare with BSS channel, when vdev is active, since desired
|
||||
* channel gets update, if channel is triggered in another path
|
||||
*/
|
||||
if (wlan_vdev_mlme_is_active(vdev) == QDF_STATUS_SUCCESS)
|
||||
comp_vdev_chan = wlan_vdev_mlme_get_bss_chan(vdev);
|
||||
else
|
||||
comp_vdev_chan = wlan_vdev_mlme_get_des_chan(vdev);
|
||||
}
|
||||
|
||||
return comp_vdev_chan;
|
||||
}
|
||||
|
||||
static void wlan_pdev_chan_match(struct wlan_objmgr_pdev *pdev, void *object,
|
||||
void *arg)
|
||||
{
|
||||
struct wlan_objmgr_vdev *comp_vdev = (struct wlan_objmgr_vdev *)object;
|
||||
struct wlan_vdev_ch_check_filter *ch_filter = arg;
|
||||
struct wlan_channel *vdev_chan;
|
||||
struct wlan_channel *iter_vdev_chan;
|
||||
|
||||
if (ch_filter->flag)
|
||||
return;
|
||||
|
||||
if (comp_vdev == ch_filter->vdev)
|
||||
return;
|
||||
|
||||
wlan_vdev_obj_lock(comp_vdev);
|
||||
wlan_vdev_obj_lock(ch_filter->vdev);
|
||||
|
||||
if (wlan_vdev_chan_config_valid(ch_filter->vdev) == QDF_STATUS_SUCCESS)
|
||||
if (wlan_chan_eq(wlan_vdev_mlme_get_des_chan(comp_vdev),
|
||||
wlan_vdev_mlme_get_des_chan(ch_filter->vdev))
|
||||
!= QDF_STATUS_SUCCESS)
|
||||
ch_filter->flag = 1;
|
||||
vdev_chan = wlan_vdev_get_active_channel(comp_vdev);
|
||||
if (vdev_chan) {
|
||||
iter_vdev_chan = wlan_vdev_mlme_get_des_chan(
|
||||
ch_filter->vdev);
|
||||
if (wlan_chan_eq(vdev_chan, iter_vdev_chan)
|
||||
!= QDF_STATUS_SUCCESS) {
|
||||
if (!((vdev_chan->ch_ieee == iter_vdev_chan->ch_ieee) &&
|
||||
(vdev_chan->ch_freq_seg2 ==
|
||||
iter_vdev_chan->ch_freq_seg2) &&
|
||||
(vdev_chan->ch_phymode ==
|
||||
iter_vdev_chan->ch_phymode)))
|
||||
ch_filter->flag = 1;
|
||||
|
||||
qdf_err("Chan match failed");
|
||||
qdf_err("==> iter vdev id: %d: ieee %d, freq %d",
|
||||
wlan_vdev_get_id(comp_vdev), vdev_chan->ch_ieee,
|
||||
vdev_chan->ch_freq);
|
||||
qdf_err("flags %016llx, flags ext: %08x, max pwr %d",
|
||||
vdev_chan->ch_flags, vdev_chan->ch_flagext,
|
||||
vdev_chan->ch_maxpower);
|
||||
qdf_err(" seg1 %d seg2 %d chwidth %d, ch_phymode %d",
|
||||
vdev_chan->ch_freq_seg1,
|
||||
vdev_chan->ch_freq_seg2,
|
||||
vdev_chan->ch_width, vdev_chan->ch_phymode);
|
||||
|
||||
qdf_err("==> base vdev id: %d: ieee %d, freq %d",
|
||||
wlan_vdev_get_id(ch_filter->vdev),
|
||||
iter_vdev_chan->ch_ieee,
|
||||
iter_vdev_chan->ch_freq);
|
||||
qdf_err("flags %016llx, flags ext: %08x, max pwr %d",
|
||||
iter_vdev_chan->ch_flags,
|
||||
iter_vdev_chan->ch_flagext,
|
||||
iter_vdev_chan->ch_maxpower);
|
||||
qdf_err(" seg1 %d seg2 %d chwidth %d, ch_phymode %d",
|
||||
iter_vdev_chan->ch_freq_seg1,
|
||||
iter_vdev_chan->ch_freq_seg2,
|
||||
iter_vdev_chan->ch_width,
|
||||
iter_vdev_chan->ch_phymode);
|
||||
}
|
||||
}
|
||||
|
||||
wlan_vdev_obj_unlock(ch_filter->vdev);
|
||||
wlan_vdev_obj_unlock(comp_vdev);
|
||||
@@ -450,19 +480,57 @@ QDF_STATUS wlan_util_pdev_vdevs_deschan_match(struct wlan_objmgr_pdev *pdev,
|
||||
if (!pdev)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
ch_filter.flag = 0;
|
||||
ch_filter.vdev = vdev;
|
||||
|
||||
wlan_objmgr_pdev_iterate_obj_list(pdev, WLAN_VDEV_OP,
|
||||
wlan_pdev_chan_match, &ch_filter, 0,
|
||||
dbg_id);
|
||||
|
||||
if (ch_filter.flag == 0)
|
||||
if (wlan_pdev_nif_feat_cap_get(pdev, WLAN_PDEV_F_CHAN_CONCURRENCY))
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
if (wlan_objmgr_vdev_try_get_ref(vdev, dbg_id) == QDF_STATUS_SUCCESS) {
|
||||
ch_filter.flag = 0;
|
||||
ch_filter.vdev = vdev;
|
||||
|
||||
wlan_objmgr_pdev_iterate_obj_list(pdev, WLAN_VDEV_OP,
|
||||
wlan_pdev_chan_match,
|
||||
&ch_filter, 0, dbg_id);
|
||||
|
||||
wlan_objmgr_vdev_release_ref(vdev, dbg_id);
|
||||
|
||||
if (ch_filter.flag == 0)
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
static void wlan_vdev_restart_progress(struct wlan_objmgr_pdev *pdev,
|
||||
void *object, void *arg)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev = (struct wlan_objmgr_vdev *)object;
|
||||
uint8_t *flag = (uint8_t *)arg;
|
||||
|
||||
wlan_vdev_obj_lock(vdev);
|
||||
if (wlan_vdev_is_restart_progress(vdev) == QDF_STATUS_SUCCESS)
|
||||
*flag = 1;
|
||||
|
||||
wlan_vdev_obj_unlock(vdev);
|
||||
}
|
||||
|
||||
QDF_STATUS wlan_util_is_pdev_restart_progress(struct wlan_objmgr_pdev *pdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id)
|
||||
{
|
||||
uint8_t flag = 0;
|
||||
|
||||
if (!pdev)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
wlan_objmgr_pdev_iterate_obj_list(pdev, WLAN_VDEV_OP,
|
||||
wlan_vdev_restart_progress,
|
||||
&flag, 0, dbg_id);
|
||||
|
||||
if (flag == 1)
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
static void wlan_vdev_scan_allowed(struct wlan_objmgr_pdev *pdev, void *object,
|
||||
void *arg)
|
||||
{
|
||||
|
在新工单中引用
屏蔽一个用户