summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--wmi/inc/wmi_unified_api.h10
-rw-r--r--wmi/inc/wmi_unified_param.h39
-rw-r--r--wmi/inc/wmi_unified_priv.h3
-rw-r--r--wmi/inc/wmi_unified_tlv.h10
-rw-r--r--wmi/src/wmi_unified_api.c12
-rw-r--r--wmi/src/wmi_unified_tlv.c34
6 files changed, 108 insertions, 0 deletions
diff --git a/wmi/inc/wmi_unified_api.h b/wmi/inc/wmi_unified_api.h
index a49bb990e4b3..ce313caa9c00 100644
--- a/wmi/inc/wmi_unified_api.h
+++ b/wmi/inc/wmi_unified_api.h
@@ -703,6 +703,16 @@ QDF_STATUS wmi_unified_wow_timer_pattern_cmd(void *wmi_hdl, uint8_t vdev_id,
QDF_STATUS wmi_unified_nat_keepalive_en_cmd(void *wmi_hdl, uint8_t vdev_id);
+/**
+ * wmi_unified_set_latency_config_cmd()
+ * @wmi_handle: wmi handle
+ * @param: WLM parameters
+ *
+ * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
+ */
+QDF_STATUS wmi_unified_wlm_latency_level_cmd(void *wmi_hdl,
+ struct wlm_latency_level_param *param);
+
QDF_STATUS wmi_unified_csa_offload_enable(void *wmi_hdl, uint8_t vdev_id);
QDF_STATUS wmi_unified_start_oem_data_cmd(void *wmi_hdl,
diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h
index 1106bd1f01fb..7cb1934e7d3b 100644
--- a/wmi/inc/wmi_unified_param.h
+++ b/wmi/inc/wmi_unified_param.h
@@ -2934,6 +2934,45 @@ struct aggr_add_ts_param {
uint8_t sessionId;
};
+
+/**
+ * struct wlm_latency_level_param - WLM parameters
+ * @wlm_latency_level: wlm latency level to set
+ * 0 - normal, 1 - moderate, 2 - low, 3 - ultralow
+ * @wlm_latency_flags: wlm latency flags to set
+ * |31 12| 11 | 10 |9 8|7 6|5 4|3 2| 1 | 0 |
+ * +------+------+------+------+------+------+------+-----+-----+
+ * | RSVD | SSLP | CSLP | RSVD | Roam | RSVD | DWLT | DFS | SUP |
+ * +------+-------------+-------------+-------------------------+
+ * | WAL | PS | Roam | Scan |
+ *
+ * bit 0: Avoid scan request from HLOS if setting
+ * bit 1: Skip DFS channel SCAN if setting
+ * bit 2-3: Define policy of dwell time/duration for each foreign channel
+ * (b2 b3)
+ * (0 0 ): Default scan dwell time
+ * (0 1 ): Reserve
+ * (1 0 ): Shrink off channel dwell time
+ * (1 1 ): Reserve
+ * bit 4-5: Reserve for scan
+ * bit 6-7: Define roaming policy
+ * (b6 b7)
+ * (0 0 ): Default roaming behavior, allow roaming in all scenarios
+ * (0 1 ): Disallow all roaming
+ * (1 0 ): Allow roaming when final bmissed
+ * (1 1 ): Reserve
+ * bit 8-9: Reserve for roaming
+ * bit 10: Disable css power collapse if setting
+ * bit 11: Disable sys sleep if setting
+ * bit 12-31: Reserve for future useage
+ * @vdev_id: vdev id
+ */
+struct wlm_latency_level_param {
+ uint16_t wlm_latency_level;
+ uint32_t wlm_latency_flags;
+ uint16_t vdev_id;
+};
+
#define WMI_MAX_FILTER_TEST_DATA_LEN 8
#define WMI_MAX_NUM_MULTICAST_ADDRESS 240
#define WMI_MAX_NUM_FILTERS 20
diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h
index fd451ea74b4b..a7babc87e3e4 100644
--- a/wmi/inc/wmi_unified_priv.h
+++ b/wmi/inc/wmi_unified_priv.h
@@ -459,6 +459,9 @@ QDF_STATUS (*send_csa_offload_enable_cmd)(wmi_unified_t wmi_handle,
QDF_STATUS (*send_pno_stop_cmd)(wmi_unified_t wmi_handle, uint8_t vdev_id);
+QDF_STATUS (*send_wlm_latency_level_cmd)(wmi_unified_t wmi_handle,
+ struct wlm_latency_level_param *param);
+
#ifdef FEATURE_WLAN_SCAN_PNO
QDF_STATUS (*send_pno_start_cmd)(wmi_unified_t wmi_handle,
struct pno_scan_req_params *pno,
diff --git a/wmi/inc/wmi_unified_tlv.h b/wmi/inc/wmi_unified_tlv.h
index a079ec2d8766..5ce02c00bf1c 100644
--- a/wmi/inc/wmi_unified_tlv.h
+++ b/wmi/inc/wmi_unified_tlv.h
@@ -400,6 +400,16 @@ QDF_STATUS send_wow_sta_ra_filter_cmd_tlv(wmi_unified_t wmi_handle,
QDF_STATUS send_nat_keepalive_en_cmd_tlv(wmi_unified_t wmi_handle, uint8_t vdev_id);
+/**
+ * send_wlm_latency_level_cmd_tlv() - confige WLM parameters
+ * @wmi_handle: wmi handle
+ * @params: wlm parameters
+ *
+ * Return: QDF_STATUS_SUCCESS for success or error code
+ */
+QDF_STATUS send_wlm_latency_level_cmd_tlv(wmi_unified_t wmi_handle,
+ struct wlm_latency_level_param *param);
+
QDF_STATUS send_csa_offload_enable_cmd_tlv(wmi_unified_t wmi_handle,
uint8_t vdev_id);
diff --git a/wmi/src/wmi_unified_api.c b/wmi/src/wmi_unified_api.c
index dc4c252765ef..fe3174c67f27 100644
--- a/wmi/src/wmi_unified_api.c
+++ b/wmi/src/wmi_unified_api.c
@@ -2363,6 +2363,18 @@ QDF_STATUS wmi_unified_nat_keepalive_en_cmd(void *wmi_hdl, uint8_t vdev_id)
return QDF_STATUS_E_FAILURE;
}
+QDF_STATUS wmi_unified_wlm_latency_level_cmd(void *wmi_hdl,
+ struct wlm_latency_level_param *param)
+{
+ wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
+
+ if (wmi_handle->ops->send_wlm_latency_level_cmd)
+ return wmi_handle->ops->send_wlm_latency_level_cmd(wmi_handle,
+ param);
+
+ return QDF_STATUS_E_FAILURE;
+}
+
/**
* wmi_unified_csa_offload_enable() - send CSA offload enable command
* @wmi_hdl: wmi handle
diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c
index 1d461bea382f..69b29214b436 100644
--- a/wmi/src/wmi_unified_tlv.c
+++ b/wmi/src/wmi_unified_tlv.c
@@ -8060,6 +8060,39 @@ static QDF_STATUS send_wow_timer_pattern_cmd_tlv(wmi_unified_t wmi_handle,
return QDF_STATUS_SUCCESS;
}
+QDF_STATUS send_wlm_latency_level_cmd_tlv(wmi_unified_t wmi_handle,
+ struct wlm_latency_level_param *params)
+{
+ wmi_wlm_config_cmd_fixed_param *cmd;
+ wmi_buf_t buf;
+ uint32_t len = sizeof(*cmd);
+ static uint32_t ll[4] = {100, 60, 40, 20};
+
+ buf = wmi_buf_alloc(wmi_handle, len);
+ if (!buf) {
+ WMI_LOGP("%s: wmi_buf_alloc failed", __func__);
+ return QDF_STATUS_E_NOMEM;
+ }
+ cmd = (wmi_wlm_config_cmd_fixed_param *)wmi_buf_data(buf);
+ WMITLV_SET_HDR(&cmd->tlv_header,
+ WMITLV_TAG_STRUC_wmi_wlm_config_cmd_fixed_param,
+ WMITLV_GET_STRUCT_TLVLEN
+ (wmi_wlm_config_cmd_fixed_param));
+ cmd->vdev_id = params->vdev_id;
+ cmd->latency_level = params->wlm_latency_level;
+ cmd->ul_latency = ll[params->wlm_latency_level];
+ cmd->dl_latency = ll[params->wlm_latency_level];
+ cmd->flags = params->wlm_latency_flags;
+ if (wmi_unified_cmd_send(wmi_handle, buf, len,
+ WMI_WLM_CONFIG_CMDID)) {
+ WMI_LOGE("%s: Failed to send setting latency config command",
+ __func__);
+ wmi_buf_free(buf);
+ return QDF_STATUS_E_FAILURE;
+ }
+
+ return 0;
+}
/**
* send_nat_keepalive_en_cmd_tlv() - enable NAT keepalive filter
* @wmi_handle: wmi handle
@@ -14442,6 +14475,7 @@ struct wmi_ops tlv_ops = {
.send_wow_sta_ra_filter_cmd = send_wow_sta_ra_filter_cmd_tlv,
#endif
.send_nat_keepalive_en_cmd = send_nat_keepalive_en_cmd_tlv,
+ .send_wlm_latency_level_cmd = send_wlm_latency_level_cmd_tlv,
.send_start_oem_data_cmd = send_start_oem_data_cmd_tlv,
.send_dfs_phyerr_filter_offload_en_cmd =
send_dfs_phyerr_filter_offload_en_cmd_tlv,