Browse Source

qcacld-3.0: Use request manager framework for set antenna mode event

We are transitioning the usage of set antenna mode event
to request manager framework.

Change-Id: I4df39c9b71ccd5680f85d1662bec06bc90f70977
CRs-Fixed: 2274929
Dundi Raviteja 6 years ago
parent
commit
6bb9e328aa

+ 2 - 1
core/hdd/inc/wlan_hdd_main.h

@@ -2490,7 +2490,8 @@ wlan_hdd_check_custom_con_channel_rules(struct hdd_adapter *sta_adapter,
 void wlan_hdd_stop_sap(struct hdd_adapter *ap_adapter);
 void wlan_hdd_start_sap(struct hdd_adapter *ap_adapter, bool reinit);
 
-void wlan_hdd_soc_set_antenna_mode_cb(enum set_antenna_mode_status status);
+void wlan_hdd_soc_set_antenna_mode_cb(enum set_antenna_mode_status status,
+				      void *context);
 
 #ifdef QCA_CONFIG_SMP
 int wlan_hdd_get_cpu(void);

+ 21 - 12
core/hdd/src/wlan_hdd_ioctl.c

@@ -6534,6 +6534,11 @@ int hdd_set_antenna_mode(struct hdd_adapter *adapter,
 	struct sir_antenna_mode_param params;
 	QDF_STATUS status;
 	int ret = 0;
+	struct osif_request *request = NULL;
+	static const struct osif_request_params request_params = {
+		.priv_size = 0,
+		.timeout_ms = WLAN_WAIT_TIME_ANTENNA_MODE_REQ,
+	};
 
 	if (hdd_ctx->current_antenna_mode == mode) {
 		hdd_err("System already in the requested mode");
@@ -6576,36 +6581,40 @@ int hdd_set_antenna_mode(struct hdd_adapter *adapter,
 			goto exit;
 	}
 
-	params.set_antenna_mode_resp =
-	    (void *)wlan_hdd_soc_set_antenna_mode_cb;
+	request = osif_request_alloc(&request_params);
+	if (!request) {
+		hdd_err("Request Allocation Failure");
+		ret = -ENOMEM;
+		goto exit;
+	}
+
+	params.set_antenna_mode_ctx = osif_request_cookie(request);
+	params.set_antenna_mode_resp = (void *)wlan_hdd_soc_set_antenna_mode_cb;
 	hdd_debug("Set antenna mode rx chains: %d tx chains: %d",
 		 params.num_rx_chains,
 		 params.num_tx_chains);
 
-
-	INIT_COMPLETION(hdd_ctx->set_antenna_mode_cmpl);
 	status = sme_soc_set_antenna_mode(hdd_ctx->mac_handle, &params);
 	if (QDF_IS_STATUS_ERROR(status)) {
 		hdd_err("set antenna mode failed status : %d", status);
 		ret = -EFAULT;
-		goto exit;
+		goto request_put;
 	}
 
-	ret = wait_for_completion_timeout(
-		&hdd_ctx->set_antenna_mode_cmpl,
-		msecs_to_jiffies(WLAN_WAIT_TIME_ANTENNA_MODE_REQ));
-	if (!ret) {
+	ret = osif_request_wait_for_response(request);
+	if (ret) {
 		hdd_err("send set antenna mode timed out");
-		ret = -EFAULT;
-		goto exit;
+		goto request_put;
 	}
 
 	status = hdd_update_smps_antenna_mode(hdd_ctx, mode);
 	if (QDF_STATUS_SUCCESS != status) {
 		ret = -EFAULT;
-		goto exit;
+		goto request_put;
 	}
 	ret = 0;
+request_put:
+	osif_request_put(request);
 exit:
 	hdd_debug("Set antenna status: %d current mode: %d",
 		 ret, hdd_ctx->current_antenna_mode);

+ 10 - 8
core/hdd/src/wlan_hdd_main.c

@@ -8797,8 +8797,6 @@ static int hdd_context_init(struct hdd_context *hdd_ctx)
 
 	qdf_list_create(&hdd_ctx->hdd_adapters, MAX_NUMBER_OF_ADAPTERS);
 
-	init_completion(&hdd_ctx->set_antenna_mode_cmpl);
-
 	ret = hdd_scan_context_init(hdd_ctx);
 	if (ret)
 		goto list_destroy;
@@ -12040,24 +12038,28 @@ end:
  * wlan_hdd_soc_set_antenna_mode_cb() - Callback for set dual
  * mac scan config
  * @status: Status of set antenna mode
+ * @context: callback context
  *
  * Callback on setting the dual mac configuration
  *
  * Return: None
  */
-void wlan_hdd_soc_set_antenna_mode_cb(
-	enum set_antenna_mode_status status)
+void wlan_hdd_soc_set_antenna_mode_cb(enum set_antenna_mode_status status,
+				      void *context)
 {
-	struct hdd_context *hdd_ctx;
+	struct osif_request *request = NULL;
 
 	hdd_debug("Status: %d", status);
 
-	hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
-	if (0 != wlan_hdd_validate_context(hdd_ctx))
+	request = osif_request_get(context);
+	if (!request) {
+		hdd_err("obselete request");
 		return;
+	}
 
 	/* Signal the completion of set dual mac config */
-	complete(&hdd_ctx->set_antenna_mode_cmpl);
+	osif_request_complete(request);
+	osif_request_put(request);
 }
 
 /**

+ 3 - 2
core/mac/inc/sir_api.h

@@ -444,13 +444,14 @@ struct sir_set_dual_mac_cfg {
  * struct sir_antenna_mode_param - antenna mode param
  * @num_tx_chains: Number of TX chains
  * @num_rx_chains: Number of RX chains
- * @reason: Reason for setting antenna mode
  * @set_antenna_mode_resp: callback to set antenna mode command
+ * @set_antenna_mode_ctx: callback context to set antenna mode command
  */
 struct sir_antenna_mode_param {
 	uint32_t num_tx_chains;
 	uint32_t num_rx_chains;
 	void *set_antenna_mode_resp;
+	void *set_antenna_mode_ctx;
 };
 
 /**
@@ -5564,7 +5565,7 @@ typedef void (*hw_mode_transition_cb)(uint32_t old_hw_mode_index,
 		uint32_t new_hw_mode_index,
 		uint32_t num_vdev_mac_entries,
 		struct policy_mgr_vdev_mac_map *vdev_mac_map);
-typedef void (*antenna_mode_cb)(uint32_t status);
+typedef void (*antenna_mode_cb)(uint32_t status, void *context);
 
 /**
  * struct sir_nss_update_request

+ 4 - 3
core/sme/src/common/sme_api.c

@@ -1896,6 +1896,7 @@ static QDF_STATUS sme_process_antenna_mode_resp(tpAniSirGlobal mac,
 	tListElem *entry;
 	tSmeCmd *command;
 	bool found;
+	void *context = NULL;
 	antenna_mode_cb callback;
 	struct sir_antenna_mode_resp *param;
 
@@ -1923,13 +1924,13 @@ static QDF_STATUS sme_process_antenna_mode_resp(tpAniSirGlobal mac,
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	callback =
-		command->u.set_antenna_mode_cmd.set_antenna_mode_resp;
+	context = command->u.set_antenna_mode_cmd.set_antenna_mode_ctx;
+	callback = command->u.set_antenna_mode_cmd.set_antenna_mode_resp;
 	if (callback) {
 		if (!param)
 			sme_err("Set antenna mode call back is NULL");
 		else
-			callback(param->status);
+			callback(param->status, context);
 	} else {
 		sme_err("Callback does not exist");
 	}