diff options
| -rw-r--r-- | wmi/inc/wmi_unified_api.h | 10 | ||||
| -rw-r--r-- | wmi/inc/wmi_unified_param.h | 39 | ||||
| -rw-r--r-- | wmi/inc/wmi_unified_priv.h | 3 | ||||
| -rw-r--r-- | wmi/inc/wmi_unified_tlv.h | 10 | ||||
| -rw-r--r-- | wmi/src/wmi_unified_api.c | 12 | ||||
| -rw-r--r-- | wmi/src/wmi_unified_tlv.c | 34 |
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, |
