diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2018-09-14 23:53:05 -0700 |
|---|---|---|
| committer | Linux Build Service Account <lnxbuild@localhost> | 2018-09-14 23:53:05 -0700 |
| commit | dc06aec504d67f6788056459463fd02be4d46736 (patch) | |
| tree | 1c852bff13f0e51eb2f25e732aa81df72a8bb620 | |
| parent | 7bbe1e31f5c18597fe116ecbe5f73c3c6f49fc8c (diff) | |
| parent | 9c6c55b75a75bcc824cd7185f1e34852d3a0712b (diff) | |
Merge 9c6c55b75a75bcc824cd7185f1e34852d3a0712b on remote branch
Change-Id: I4e8a10ddbfcd5a3870c55c65c671dd3c45a1bb83
| -rw-r--r-- | wmi/inc/wmi_unified_api.h | 19 | ||||
| -rw-r--r-- | wmi/inc/wmi_unified_param.h | 36 | ||||
| -rw-r--r-- | wmi/inc/wmi_unified_priv.h | 4 | ||||
| -rw-r--r-- | wmi/src/wmi_unified.c | 8 | ||||
| -rw-r--r-- | wmi/src/wmi_unified_api.c | 11 | ||||
| -rw-r--r-- | wmi/src/wmi_unified_tlv.c | 104 |
6 files changed, 149 insertions, 33 deletions
diff --git a/wmi/inc/wmi_unified_api.h b/wmi/inc/wmi_unified_api.h index 1592ce5876d6..abf82efb19f6 100644 --- a/wmi/inc/wmi_unified_api.h +++ b/wmi/inc/wmi_unified_api.h @@ -1454,6 +1454,16 @@ QDF_STATUS wmi_unified_send_sar_limit_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_get_sar_limit_cmd(void *wmi_hdl); /** + * wmi_unified_send_coex_config_cmd() - send coex config command to firmware + * @wmi_hdl: wmi handle + * @params: coex config params + * + * Return: QDF_STATUS_SUCCESS on success or error code on failure + */ +QDF_STATUS wmi_unified_send_coex_config_cmd(void *wmi_hdl, + struct coex_config_params *params); + +/** * wmi_unified_extract_sar_limit_event() - extract SAR limits from FW event * @wmi_hdl: wmi handle * @evt_buf: event buffer received from firmware @@ -1613,13 +1623,4 @@ QDF_STATUS wmi_unified_offload_11k_cmd(void *wmi_hdl, */ QDF_STATUS wmi_unified_invoke_neighbor_report_cmd(void *wmi_hdl, struct wmi_invoke_neighbor_report_params *params); -/** - * wmi_register_tgt_ready_cb() - Register target ready check callback - * with wmi_handle - * @wmi_handle: wmi handle - * @cb: Callback to check target ready - * - * Return: None - */ -void wmi_register_tgt_ready_cb(wmi_unified_t wmi_handle, bool (*cb)(void)); #endif /* _WMI_UNIFIED_API_H_ */ diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index d050b498ccc9..5f0bc99bd26f 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -1821,6 +1821,8 @@ typedef struct { /* since this is 4 byte aligned, we don't declare it as tlv array */ uint32_t mcsset[WMI_HOST_ROAM_OFFLOAD_NUM_MCS_SET >> 2]; uint32_t ho_delay_for_rx; + uint32_t roam_preauth_retry_count; + uint32_t roam_preauth_no_ack_timeout; } roam_offload_param; #define WMI_FILS_MAX_RRK_LENGTH 64 @@ -7284,6 +7286,40 @@ struct sar_limit_event { }; /** + * enum coex_config_type - For identifying coex config type params + * COEX_CONFIG_TX_POWER: To set wlan total tx power when bt coex + * COEX_CONFIG_HANDOVER_RSSI: To set WLAN RSSI (dBm units) + * COEX_CONFIG_BTC_MODE: To set BTC mode + * COEX_CONFIG_ANTENNA_ISOLATION: To set solation between BT and WLAN antenna + * COEX_CONFIG_BT_LOW_RSSI_THRESHOLD: To set BT low rssi threshold (dbm units) + * COEX_CONFIG_BT_INTERFERENCE_LEVEL: To set BT interference level (dbm units) + */ +enum coex_config_type { + COEX_CONFIG_TX_POWER = 0x01, + COEX_CONFIG_HANDOVER_RSSI = 0x02, + COEX_CONFIG_BTC_MODE = 0x03, + COEX_CONFIG_ANTENNA_ISOLATION = 0x04, + COEX_CONFIG_BT_LOW_RSSI_THRESHOLD = 0x05, + COEX_CONFIG_BT_INTERFERENCE_LEVEL = 0x06 +}; + +#define MAX_COEX_CONFIG_TYPE_ARGS 6 +/** + * struct coex_config_params - COEX config params + * @vdev_id: Virtual device Id + * @config_type: Type of config type from enum coex_config_type + * @config_value: config type values for enum coex_config_type, + * only config type COEX_CONFIG_BT_INTERFERENCE_LEVEL + * will use all arguments remaining will use only + * 0th argument. + */ +struct coex_config_params { + uint32_t vdev_id; + enum coex_config_type config_type; + uint32_t config_value[MAX_COEX_CONFIG_TYPE_ARGS]; +}; + +/** * enum rcpi_measurement_type - for identifying type of rcpi measurement * @RCPI_MEASUREMENT_TYPE_AVG_MGMT: avg rcpi of mgmt frames * @RCPI_MEASUREMENT_TYPE_AVG_DATA: avg rcpi of data frames diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index 8ecd32c83a96..0c5989f7d894 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/wmi/inc/wmi_unified_priv.h @@ -1208,6 +1208,9 @@ QDF_STATUS (*send_sar_limit_cmd)(wmi_unified_t wmi_handle, QDF_STATUS (*get_sar_limit_cmd)(wmi_unified_t wmi_handle); +QDF_STATUS (*send_coex_config_cmd)(wmi_unified_t wmi_handle, + struct coex_config_params *params); + QDF_STATUS (*extract_sar_limit_event)(wmi_unified_t wmi_handle, uint8_t *evt_buf, struct sar_limit_event *event); @@ -1323,7 +1326,6 @@ struct wmi_unified { uint32_t vdev_param[wmi_vdev_param_max]; uint32_t services[wmi_services_max]; #endif - bool (*is_target_ready)(void); }; #ifdef WMI_NON_TLV_SUPPORT /* ONLY_NON_TLV_TARGET:TLV attach dummy function defintion for case when diff --git a/wmi/src/wmi_unified.c b/wmi/src/wmi_unified.c index 4ee9d67da8e5..d9f128dbba10 100644 --- a/wmi/src/wmi_unified.c +++ b/wmi/src/wmi_unified.c @@ -1283,9 +1283,6 @@ QDF_STATUS wmi_unified_cmd_send(wmi_unified_t wmi_handle, wmi_buf_t buf, QDF_STATUS status; uint16_t htc_tag = 0; - if (wmi_handle->is_target_ready && !wmi_handle->is_target_ready()) - return QDF_STATUS_E_FAILURE; - if (wmi_get_runtime_pm_inprogress(wmi_handle)) { htc_tag = (A_UINT16)wmi_handle->ops->wmi_set_htc_tx_tag( @@ -2132,11 +2129,6 @@ wmi_stop(wmi_unified_t wmi_handle) return 0; } -void wmi_register_tgt_ready_cb(wmi_unified_t wmi_handle, bool (*cb)(void)) -{ - wmi_handle->is_target_ready = cb; -} - #ifdef WMI_NON_TLV_SUPPORT /** * API to flush all the previous packets associated with the wmi endpoint diff --git a/wmi/src/wmi_unified_api.c b/wmi/src/wmi_unified_api.c index 77b2cd165645..c2494eaf5365 100644 --- a/wmi/src/wmi_unified_api.c +++ b/wmi/src/wmi_unified_api.c @@ -6406,6 +6406,17 @@ QDF_STATUS wmi_unified_get_sar_limit_cmd(void *wmi_hdl) return QDF_STATUS_E_FAILURE; } +QDF_STATUS wmi_unified_send_coex_config_cmd(void *wmi_hdl, + struct coex_config_params *params) +{ + wmi_unified_t wmi_handle = (wmi_unified_t)wmi_hdl; + + if (wmi_handle->ops->send_coex_config_cmd) + return wmi_handle->ops->send_coex_config_cmd(wmi_handle, + params); + return QDF_STATUS_E_FAILURE; +} + QDF_STATUS wmi_unified_extract_sar_limit_event(void *wmi_hdl, uint8_t *evt_buf, struct sar_limit_event *event) diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 3122ab3ff793..beb295c65cd1 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -3933,6 +3933,77 @@ QDF_STATUS send_setup_install_key_cmd_tlv(wmi_unified_t wmi_handle, } /** + * send_coex_config_cmd_tlv() - send coex config command to firmware + * @wmi_handle: wmi handle + * @params: coex config params + * + * Return: QDF_STATUS_SUCCESS for success or error code + */ +static QDF_STATUS send_coex_config_cmd_tlv(wmi_unified_t wmi_handle, + struct coex_config_params *params) +{ + WMI_COEX_CONFIG_CMD_fixed_param *cmd; + wmi_buf_t buf; + uint32_t len = sizeof(*cmd); + WMI_COEX_CONFIG_TYPE config_type; + QDF_STATUS status; + + buf = wmi_buf_alloc(wmi_handle, len); + if (!buf) { + WMI_LOGE("Failed to allocate buffer to coex config params"); + return QDF_STATUS_E_NOMEM; + } + + cmd = (WMI_COEX_CONFIG_CMD_fixed_param *)wmi_buf_data(buf); + WMITLV_SET_HDR(&cmd->tlv_header, + WMITLV_TAG_STRUC_WMI_COEX_CONFIG_CMD_fixed_param, + WMITLV_GET_STRUCT_TLVLEN( + WMI_COEX_CONFIG_CMD_fixed_param)); + + cmd->vdev_id = params->vdev_id; + cmd->config_arg1 = params->config_value[0]; + + switch (params->config_type) { + case COEX_CONFIG_TX_POWER: + config_type = WMI_COEX_CONFIG_TX_POWER; + break; + case COEX_CONFIG_HANDOVER_RSSI: + config_type = WMI_COEX_CONFIG_HANDOVER_RSSI; + break; + case COEX_CONFIG_BTC_MODE: + config_type = WMI_COEX_CONFIG_BTC_MODE; + break; + case COEX_CONFIG_ANTENNA_ISOLATION: + config_type = WMI_COEX_CONFIG_ANTENNA_ISOLATION; + break; + case COEX_CONFIG_BT_LOW_RSSI_THRESHOLD: + config_type = WMI_COEX_CONFIG_BT_LOW_RSSI_THRESHOLD; + break; + case COEX_CONFIG_BT_INTERFERENCE_LEVEL: + config_type = WMI_COEX_CONFIG_BT_INTERFERENCE_LEVEL; + cmd->config_arg2 = params->config_value[1]; + cmd->config_arg3 = params->config_value[2]; + cmd->config_arg4 = params->config_value[3]; + cmd->config_arg5 = params->config_value[4]; + cmd->config_arg6 = params->config_value[5]; + break; + default: + WMI_LOGE("Unknown coex config type received"); + wmi_buf_free(buf); + return QDF_STATUS_E_FAILURE; + } + cmd->config_type = config_type; + + status = wmi_unified_cmd_send(wmi_handle, buf, len, + WMI_COEX_CONFIG_CMDID); + if (QDF_IS_STATUS_ERROR(status)) { + WMI_LOGE("Failed to send WMI_COEX_CONFIG_CMDID"); + wmi_buf_free(buf); + } + return status; +} + +/** * send_sar_limit_cmd_tlv() - send sar limit cmd to fw * @wmi_handle: wmi handle * @params: sar limit params @@ -4709,6 +4780,8 @@ QDF_STATUS send_roam_scan_offload_mode_cmd_tlv(wmi_unified_t wmi_handle, #ifdef WLAN_FEATURE_ROAM_OFFLOAD int auth_mode = roam_req->auth_mode; + roam_offload_param *req_offload_params = + &roam_req->roam_offload_params; wmi_roam_offload_tlv_param *roam_offload_params; wmi_roam_11i_offload_tlv_param *roam_offload_11i; wmi_roam_11r_offload_tlv_param *roam_offload_11r; @@ -4834,31 +4907,31 @@ QDF_STATUS send_roam_scan_offload_mode_cmd_tlv(wmi_unified_t wmi_handle, roam_offload_params->select_5g_margin = roam_req->select_5ghz_margin; roam_offload_params->handoff_delay_for_rx = - roam_req->roam_offload_params.ho_delay_for_rx; + req_offload_params->ho_delay_for_rx; + roam_offload_params->max_mlme_sw_retries = + req_offload_params->roam_preauth_retry_count; + roam_offload_params->no_ack_timeout = + req_offload_params->roam_preauth_no_ack_timeout; roam_offload_params->reassoc_failure_timeout = roam_req->reassoc_failure_timeout; /* Fill the capabilities */ roam_offload_params->capability = - roam_req->roam_offload_params.capability; + req_offload_params->capability; roam_offload_params->ht_caps_info = - roam_req->roam_offload_params.ht_caps_info; + req_offload_params->ht_caps_info; roam_offload_params->ampdu_param = - roam_req->roam_offload_params.ampdu_param; + req_offload_params->ampdu_param; roam_offload_params->ht_ext_cap = - roam_req->roam_offload_params.ht_ext_cap; - roam_offload_params->ht_txbf = - roam_req->roam_offload_params.ht_txbf; - roam_offload_params->asel_cap = - roam_req->roam_offload_params.asel_cap; - roam_offload_params->qos_caps = - roam_req->roam_offload_params.qos_caps; + req_offload_params->ht_ext_cap; + roam_offload_params->ht_txbf = req_offload_params->ht_txbf; + roam_offload_params->asel_cap = req_offload_params->asel_cap; + roam_offload_params->qos_caps = req_offload_params->qos_caps; roam_offload_params->qos_enabled = - roam_req->roam_offload_params.qos_enabled; - roam_offload_params->wmm_caps = - roam_req->roam_offload_params.wmm_caps; + req_offload_params->qos_enabled; + roam_offload_params->wmm_caps = req_offload_params->wmm_caps; qdf_mem_copy((uint8_t *)roam_offload_params->mcsset, - (uint8_t *)roam_req->roam_offload_params.mcsset, + (uint8_t *)req_offload_params->mcsset, ROAM_OFFLOAD_NUM_MCS_SET); buf_ptr += sizeof(wmi_roam_offload_tlv_param); @@ -15188,6 +15261,7 @@ struct wmi_ops tlv_ops = { send_encrypt_decrypt_send_cmd_tlv, .send_sar_limit_cmd = send_sar_limit_cmd_tlv, .get_sar_limit_cmd = get_sar_limit_cmd_tlv, + .send_coex_config_cmd = send_coex_config_cmd_tlv, .extract_sar_limit_event = extract_sar_limit_event_tlv, .extract_sar2_result_event = extract_sar2_result_event_tlv, .send_per_roam_config_cmd = send_per_roam_config_cmd_tlv, |
