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
Цей коміт міститься в:
Manjunathappa Prakash
2018-03-06 14:23:03 -08:00
зафіксовано nshrivas
джерело 490facc39a
коміт ae7494872c

Переглянути файл

@@ -2567,6 +2567,7 @@ QDF_STATUS wma_vdev_start(tp_wma_handle wma,
struct wma_target_req *req_msg;
uint32_t chan_mode;
enum phy_ch_width ch_width;
QDF_STATUS status;
mac_ctx = cds_get_context(QDF_MODULE_ID_PE);
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),
wma->interfaces[params.vdev_id].handle,
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);
}
@@ -5610,6 +5625,11 @@ void wma_delete_bss(tp_wma_handle wma, tpDeleteBssParams params)
wma->interfaces[params->smesessionId].handle,
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)) {
WMA_LOGE("%s: %d Failed to send vdev stop", __func__, __LINE__);
wma_remove_vdev_req(wma, params->smesessionId,