diff options
| author | Dundi Raviteja <dundi@codeaurora.org> | 2018-05-16 17:04:41 +0530 |
|---|---|---|
| committer | nshrivas <nshrivas@codeaurora.org> | 2018-07-11 19:52:28 -0700 |
| commit | 4bbbebcc0bf471307a7f9e140903c71be6d708ed (patch) | |
| tree | d1b6db79f0b7383004beabd073dbe8247b96a581 | |
| parent | cf0d6ce33a54dcbcf2b26878b1b620e049f7eed5 (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.h | 4 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_ioctl.c | 62 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_main.c | 26 | ||||
| -rw-r--r-- | core/mac/inc/sir_api.h | 39 | ||||
| -rw-r--r-- | core/sme/src/common/sme_api.c | 7 |
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, ¶ms); 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"); |
