qcacld-3.0: Create flow control pools on vdev start
As many as 5 vdevs can be created, which is defined by MAX_SME_SESSIONS. But flow control pools are only valid for active TxRx capable vdevs. Which is 3 active vdev starts. So attach flow pool creation to vdev_start instead of vdev_attach. Change-Id: I137676ba618aa3a6684c7d17ef7d9263c4df6efe CRs-Fixed: 2179220
This commit is contained in:

committed by
nshrivas

parent
490facc39a
commit
ae7494872c
@@ -2567,6 +2567,7 @@ QDF_STATUS wma_vdev_start(tp_wma_handle wma,
|
|||||||
struct wma_target_req *req_msg;
|
struct wma_target_req *req_msg;
|
||||||
uint32_t chan_mode;
|
uint32_t chan_mode;
|
||||||
enum phy_ch_width ch_width;
|
enum phy_ch_width ch_width;
|
||||||
|
QDF_STATUS status;
|
||||||
|
|
||||||
mac_ctx = cds_get_context(QDF_MODULE_ID_PE);
|
mac_ctx = cds_get_context(QDF_MODULE_ID_PE);
|
||||||
if (mac_ctx == NULL) {
|
if (mac_ctx == NULL) {
|
||||||
@@ -2816,6 +2817,20 @@ QDF_STATUS wma_vdev_start(tp_wma_handle wma,
|
|||||||
cdp_fc_vdev_unpause(cds_get_context(QDF_MODULE_ID_SOC),
|
cdp_fc_vdev_unpause(cds_get_context(QDF_MODULE_ID_SOC),
|
||||||
wma->interfaces[params.vdev_id].handle,
|
wma->interfaces[params.vdev_id].handle,
|
||||||
0xffffffff);
|
0xffffffff);
|
||||||
|
status = cdp_flow_pool_map(cds_get_context(QDF_MODULE_ID_SOC),
|
||||||
|
cds_get_context(QDF_MODULE_ID_TXRX),
|
||||||
|
params.vdev_id);
|
||||||
|
/*
|
||||||
|
* For Adrastea flow control v2 is based on FW MAP events,
|
||||||
|
* so this above callback is not implemented.
|
||||||
|
* Hence this is not actual failure. Dont return failure
|
||||||
|
*/
|
||||||
|
if ((status != QDF_STATUS_SUCCESS) &&
|
||||||
|
(status != QDF_STATUS_E_INVAL)) {
|
||||||
|
WMA_LOGE("%s: vdev_id: %d, failed to create flow pool status %d",
|
||||||
|
__func__, params.vdev_id, status);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
wma_vdev_update_pause_bitmap(params.vdev_id, 0);
|
wma_vdev_update_pause_bitmap(params.vdev_id, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5610,6 +5625,11 @@ void wma_delete_bss(tp_wma_handle wma, tpDeleteBssParams params)
|
|||||||
wma->interfaces[params->smesessionId].handle,
|
wma->interfaces[params->smesessionId].handle,
|
||||||
OL_TXQ_PAUSE_REASON_VDEV_STOP);
|
OL_TXQ_PAUSE_REASON_VDEV_STOP);
|
||||||
|
|
||||||
|
/* smesessionId is not equal to vdev_id with which pool is created */
|
||||||
|
cdp_flow_pool_unmap(cds_get_context(QDF_MODULE_ID_SOC),
|
||||||
|
cds_get_context(QDF_MODULE_ID_TXRX),
|
||||||
|
params->smesessionId);
|
||||||
|
|
||||||
if (wma_send_vdev_stop_to_fw(wma, params->smesessionId)) {
|
if (wma_send_vdev_stop_to_fw(wma, params->smesessionId)) {
|
||||||
WMA_LOGE("%s: %d Failed to send vdev stop", __func__, __LINE__);
|
WMA_LOGE("%s: %d Failed to send vdev stop", __func__, __LINE__);
|
||||||
wma_remove_vdev_req(wma, params->smesessionId,
|
wma_remove_vdev_req(wma, params->smesessionId,
|
||||||
|
Reference in New Issue
Block a user