qcacmn: Dynamic Tx VDEV config
This change allow Tx VDEV of MBSS mode to configured dynamically by reset the VDEVs. This change includes FW service bit parsing, checking VDEV state of all VDEVs, sending MBSS information in VDEV start command Change-Id: I46b13629bd1c07be86b408d72c2967642ce8542e CRs-Fixed: 2759229
This commit is contained in:

committed by
snandini

orang tua
376724d4f9
melakukan
bf0f1c90b3
@@ -140,6 +140,8 @@
|
||||
#define WLAN_SOC_NSS_RATIO_TO_HOST_SUPPORT 0x00200000
|
||||
/* EMA AP Support */
|
||||
#define WLAN_SOC_CEXT_EMA_AP 0x00400000
|
||||
/* MBSS PARAM IN START REQ Support */
|
||||
#define WLAN_SOC_CEXT_MBSS_PARAM_IN_START 0x00800000
|
||||
|
||||
/* feature_flags */
|
||||
/* CONF: ATH FF enabled */
|
||||
|
@@ -253,6 +253,23 @@ QDF_STATUS wlan_pdev_chan_change_pending_vdevs_down(
|
||||
unsigned long *vdev_id_map,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
|
||||
/**
|
||||
* wlan_pdev_chan_change_pending_ap_vdevs_down() - function to test/set channel
|
||||
* change pending flag for AP VDEVs
|
||||
* @pdev: pdev object
|
||||
* @vdev_id_map: bitmap to derive channel change AP vdevs
|
||||
* @ref_id: object manager ref id
|
||||
*
|
||||
* This function test/set channel change pending flag for AP vdevs
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS, if it iterates through all vdevs,
|
||||
* otherwise QDF_STATUS_E_FAILURE
|
||||
*/
|
||||
QDF_STATUS wlan_pdev_chan_change_pending_ap_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
|
||||
|
@@ -306,7 +306,35 @@ static void wlan_vdev_down_pending(struct wlan_objmgr_pdev *pdev,
|
||||
wlan_vdev_obj_unlock(vdev);
|
||||
return;
|
||||
}
|
||||
wlan_util_change_map_index(vdev_id_map, id, 1);
|
||||
}
|
||||
|
||||
wlan_vdev_obj_unlock(vdev);
|
||||
}
|
||||
|
||||
static void wlan_vdev_ap_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;
|
||||
|
||||
if (wlan_vdev_mlme_get_opmode(vdev) != QDF_SAP_MODE)
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -328,6 +356,21 @@ QDF_STATUS wlan_pdev_chan_change_pending_vdevs_down(
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS wlan_pdev_chan_change_pending_ap_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_ap_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