summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDundi Raviteja <dundi@codeaurora.org>2018-05-16 17:04:41 +0530
committernshrivas <nshrivas@codeaurora.org>2018-07-11 19:52:28 -0700
commit4bbbebcc0bf471307a7f9e140903c71be6d708ed (patch)
treed1b6db79f0b7383004beabd073dbe8247b96a581
parentcf0d6ce33a54dcbcf2b26878b1b620e049f7eed5 (diff)
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
-rw-r--r--core/hdd/inc/wlan_hdd_main.h4
-rw-r--r--core/hdd/src/wlan_hdd_ioctl.c62
-rw-r--r--core/hdd/src/wlan_hdd_main.c26
-rw-r--r--core/mac/inc/sir_api.h39
-rw-r--r--core/sme/src/common/sme_api.c7
5 files changed, 75 insertions, 63 deletions
diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h
index ab9d1eb16630..4e493858e3d3 100644
--- a/core/hdd/inc/wlan_hdd_main.h
+++ b/core/hdd/inc/wlan_hdd_main.h
@@ -2153,8 +2153,6 @@ struct hdd_context_s {
*/
uint32_t fine_time_meas_cap_target;
uint32_t rx_high_ind_cnt;
- /* completion variable to indicate set antenna mode complete*/
- struct completion set_antenna_mode_cmpl;
/* Current number of TX X RX chains being used */
enum antenna_mode current_antenna_mode;
bool apf_supported;
@@ -2597,8 +2595,6 @@ QDF_STATUS wlan_hdd_check_custom_con_channel_rules(hdd_adapter_t *sta_adapter,
void wlan_hdd_stop_sap(hdd_adapter_t *ap_adapter);
void wlan_hdd_start_sap(hdd_adapter_t *ap_adapter, bool reinit);
-void wlan_hdd_soc_set_antenna_mode_cb(enum set_antenna_mode_status status);
-
#ifdef QCA_CONFIG_SMP
int wlan_hdd_get_cpu(void);
#else
diff --git a/core/hdd/src/wlan_hdd_ioctl.c b/core/hdd/src/wlan_hdd_ioctl.c
index 851e40bc2d76..359a167e4b98 100644
--- a/core/hdd/src/wlan_hdd_ioctl.c
+++ b/core/hdd/src/wlan_hdd_ioctl.c
@@ -6655,6 +6655,35 @@ QDF_STATUS hdd_update_smps_antenna_mode(hdd_context_t *hdd_ctx, int mode)
return QDF_STATUS_SUCCESS;
}
+/**
+ * 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
+ */
+static void
+wlan_hdd_soc_set_antenna_mode_cb(enum set_antenna_mode_status status,
+ void *context)
+{
+ struct hdd_request *request = NULL;
+
+ hdd_debug("Status: %d", status);
+
+ request = hdd_request_get(context);
+ if (!request) {
+ hdd_err("obsolete request");
+ return;
+ }
+
+ /* Signal the completion of set dual mac config */
+ hdd_request_complete(request);
+ hdd_request_put(request);
+}
+
int hdd_set_antenna_mode(hdd_adapter_t *adapter,
hdd_context_t *hdd_ctx, int mode)
{
@@ -6662,6 +6691,11 @@ int hdd_set_antenna_mode(hdd_adapter_t *adapter,
struct sir_antenna_mode_param params;
QDF_STATUS status;
int ret = 0;
+ struct hdd_request *request = NULL;
+ static const struct hdd_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");
@@ -6705,36 +6739,40 @@ int hdd_set_antenna_mode(hdd_adapter_t *adapter,
goto exit;
}
- params.set_antenna_mode_resp =
- (void *)wlan_hdd_soc_set_antenna_mode_cb;
+ request = hdd_request_alloc(&request_params);
+ if (!request) {
+ hdd_err("Request Allocation Failure");
+ ret = -ENOMEM;
+ goto exit;
+ }
+
+ params.set_antenna_mode_ctx = hdd_request_cookie(request);
+ params.set_antenna_mode_resp = 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->hHal, &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 = hdd_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:
+ hdd_request_put(request);
exit:
#ifdef FEATURE_WLAN_TDLS
/* Reset tdls NSS flags */
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c
index 353252c5efc9..c8d8473dfec8 100644
--- a/core/hdd/src/wlan_hdd_main.c
+++ b/core/hdd/src/wlan_hdd_main.c
@@ -8679,8 +8679,6 @@ static int hdd_context_init(hdd_context_t *hdd_ctx)
qdf_list_create(&hdd_ctx->hddAdapters, MAX_NUMBER_OF_ADAPTERS);
- init_completion(&hdd_ctx->set_antenna_mode_cmpl);
-
ret = hdd_scan_context_init(hdd_ctx);
if (ret)
goto list_destroy;
@@ -12103,30 +12101,6 @@ end:
}
/**
- * wlan_hdd_soc_set_antenna_mode_cb() - Callback for set dual
- * mac scan config
- * @status: Status of set antenna mode
- *
- * Callback on setting the dual mac configuration
- *
- * Return: None
- */
-void wlan_hdd_soc_set_antenna_mode_cb(
- enum set_antenna_mode_status status)
-{
- hdd_context_t *hdd_ctx;
-
- hdd_debug("Status: %d", status);
-
- hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
- if (0 != wlan_hdd_validate_context(hdd_ctx))
- return;
-
- /* Signal the completion of set dual mac config */
- complete(&hdd_ctx->set_antenna_mode_cmpl);
-}
-
-/**
* hdd_get_fw_version() - Get FW version
* @hdd_ctx: pointer to HDD context.
* @major_spid: FW version - major spid.
diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h
index a25235311cc5..61c78474ce8c 100644
--- a/core/mac/inc/sir_api.h
+++ b/core/mac/inc/sir_api.h
@@ -573,16 +573,35 @@ struct sir_set_dual_mac_cfg {
};
/**
+ * enum set_antenna_mode_status - Status of set antenna mode
+ * command
+ * @SET_ANTENNA_MODE_STATUS_OK: command successful
+ * @SET_ANTENNA_MODE_STATUS_EINVAL: invalid antenna mode
+ * @SET_ANTENNA_MODE_STATUS_ECANCELED: mode change cancelled
+ * @SET_ANTENNA_MODE_STATUS_ENOTSUP: mode not supported
+ */
+enum set_antenna_mode_status {
+ SET_ANTENNA_MODE_STATUS_OK,
+ SET_ANTENNA_MODE_STATUS_EINVAL,
+ SET_ANTENNA_MODE_STATUS_ECANCELED,
+ SET_ANTENNA_MODE_STATUS_ENOTSUP,
+};
+
+typedef void (*antenna_mode_cb)(enum set_antenna_mode_status status,
+ void *context);
+
+/**
* 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;
+ antenna_mode_cb set_antenna_mode_resp;
+ void *set_antenna_mode_ctx;
};
/**
@@ -4011,21 +4030,6 @@ struct sir_dual_mac_config_resp {
};
/**
- * enum set_antenna_mode_status - Status of set antenna mode
- * command
- * @SET_ANTENNA_MODE_STATUS_OK: command successful
- * @SET_ANTENNA_MODE_STATUS_EINVAL: invalid antenna mode
- * @SET_ANTENNA_MODE_STATUS_ECANCELED: mode change cancelled
- * @SET_ANTENNA_MODE_STATUS_ENOTSUP: mode not supported
- */
-enum set_antenna_mode_status {
- SET_ANTENNA_MODE_STATUS_OK,
- SET_ANTENNA_MODE_STATUS_EINVAL,
- SET_ANTENNA_MODE_STATUS_ECANCELED,
- SET_ANTENNA_MODE_STATUS_ENOTSUP,
-};
-
-/**
* struct sir_antenna_mode_resp - set antenna mode response
* @status: Status of setting the antenna mode
*/
@@ -6785,7 +6789,6 @@ 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 sir_vdev_mac_map *vdev_mac_map);
-typedef void (*antenna_mode_cb)(uint32_t status);
/**
* struct sir_nss_update_request
diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c
index a3425bee18ee..de2ce2b77751 100644
--- a/core/sme/src/common/sme_api.c
+++ b/core/sme/src/common/sme_api.c
@@ -2411,6 +2411,7 @@ static QDF_STATUS sme_process_antenna_mode_resp(tpAniSirGlobal mac,
tListElem *entry;
tSmeCmd *command;
bool found;
+ void *context;
antenna_mode_cb callback;
struct sir_antenna_mode_resp *param;
@@ -2439,13 +2440,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");