qcacmn: Add API to check vdev INIT state
Add API to check if vdev is in INIT state. Also add api to iterate vdev list and test/set flag if vdev is in init state Change-Id: Idfc4268fd166a583de45a0f166ff5d0ac8ec660e CRs-Fixed: 2755257
This commit is contained in:
@@ -236,6 +236,23 @@ QDF_STATUS wlan_pdev_chan_change_pending_vdevs(struct wlan_objmgr_pdev *pdev,
|
||||
unsigned long *vdev_id_map,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
|
||||
/**
|
||||
* wlan_pdev_chan_change_pending_vdevs_down() - function to test/set down
|
||||
* change pending flag
|
||||
* @pdev: pdev object
|
||||
* @vdev_id_map: bitmap to derive channel change vdevs
|
||||
* @ref_id: object manager ref id
|
||||
*
|
||||
* This function test/set channel change pending flag
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS, if it iterates through all vdevs,
|
||||
* otherwise QDF_STATUS_E_FAILURE
|
||||
*/
|
||||
QDF_STATUS wlan_pdev_chan_change_pending_vdevs_down(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
unsigned long *vdev_id_map,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
|
||||
/**
|
||||
* wlan_chan_eq() - function to check whether both channels are same
|
||||
* @chan1: channel1 object
|
||||
|
@@ -286,6 +286,48 @@ QDF_STATUS wlan_pdev_chan_change_pending_vdevs(struct wlan_objmgr_pdev *pdev,
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static void wlan_vdev_down_pending(struct wlan_objmgr_pdev *pdev,
|
||||
void *object, void *arg)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev = (struct wlan_objmgr_vdev *)object;
|
||||
unsigned long *vdev_id_map = (unsigned long *)arg;
|
||||
uint8_t id = 0;
|
||||
struct wlan_objmgr_psoc *psoc;
|
||||
|
||||
psoc = wlan_pdev_get_psoc(pdev);
|
||||
if (!psoc)
|
||||
return;
|
||||
|
||||
wlan_vdev_obj_lock(vdev);
|
||||
if (wlan_vdev_mlme_is_init_state(vdev) != QDF_STATUS_SUCCESS) {
|
||||
id = wlan_vdev_get_id(vdev);
|
||||
/* Invalid vdev id */
|
||||
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);
|
||||
}
|
||||
|
||||
wlan_vdev_obj_unlock(vdev);
|
||||
}
|
||||
|
||||
QDF_STATUS wlan_pdev_chan_change_pending_vdevs_down(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
unsigned long *vdev_id_map,
|
||||
wlan_objmgr_ref_dbgid dbg_id)
|
||||
{
|
||||
if (!pdev)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
wlan_objmgr_pdev_iterate_obj_list(pdev, WLAN_VDEV_OP,
|
||||
wlan_vdev_down_pending,
|
||||
vdev_id_map, 0, dbg_id);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS wlan_chan_eq(struct wlan_channel *chan1, struct wlan_channel *chan2)
|
||||
{
|
||||
if ((chan1->ch_ieee == chan2->ch_ieee) &&
|
||||
|
Reference in New Issue
Block a user