summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2018-09-14 23:53:05 -0700
committerLinux Build Service Account <lnxbuild@localhost>2018-09-14 23:53:05 -0700
commitdc06aec504d67f6788056459463fd02be4d46736 (patch)
tree1c852bff13f0e51eb2f25e732aa81df72a8bb620
parent7bbe1e31f5c18597fe116ecbe5f73c3c6f49fc8c (diff)
parent9c6c55b75a75bcc824cd7185f1e34852d3a0712b (diff)
Merge 9c6c55b75a75bcc824cd7185f1e34852d3a0712b on remote branch
Change-Id: I4e8a10ddbfcd5a3870c55c65c671dd3c45a1bb83
-rw-r--r--wmi/inc/wmi_unified_api.h19
-rw-r--r--wmi/inc/wmi_unified_param.h36
-rw-r--r--wmi/inc/wmi_unified_priv.h4
-rw-r--r--wmi/src/wmi_unified.c8
-rw-r--r--wmi/src/wmi_unified_api.c11
-rw-r--r--wmi/src/wmi_unified_tlv.c104
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,