Răsfoiți Sursa

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 7 ani în urmă
părinte
comite
ae7494872c
1 a modificat fișierele cu 20 adăugiri și 0 ștergeri
  1. 20 0
      core/wma/src/wma_dev_if.c

+ 20 - 0
core/wma/src/wma_dev_if.c

@@ -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,