diff options
| -rw-r--r-- | wmi/inc/wmi_unified_api.h | 10 | ||||
| -rw-r--r-- | wmi/inc/wmi_unified_param.h | 27 | ||||
| -rw-r--r-- | wmi/inc/wmi_unified_priv.h | 3 | ||||
| -rw-r--r-- | wmi/src/wmi_unified_api.c | 19 | ||||
| -rw-r--r-- | wmi/src/wmi_unified_non_tlv.c | 1 | ||||
| -rw-r--r-- | wmi/src/wmi_unified_tlv.c | 46 |
6 files changed, 106 insertions, 0 deletions
diff --git a/wmi/inc/wmi_unified_api.h b/wmi/inc/wmi_unified_api.h index 63f0ae1daa57..32e38f46fc57 100644 --- a/wmi/inc/wmi_unified_api.h +++ b/wmi/inc/wmi_unified_api.h @@ -1322,4 +1322,14 @@ QDF_STATUS wmi_unified_send_adapt_dwelltime_params_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_fw_test_cmd(void *wmi_hdl, struct set_fwtest_params *wmi_fwtest); +/** + * wmi_unified_get_rcpi_cmd() - get rcpi request + * @wmi_hdl: wma handle + * @get_rcpi_param: rcpi params + * + * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +QDF_STATUS wmi_unified_get_rcpi_cmd(void *wmi_hdl, + struct rcpi_req *get_rcpi_param); + #endif /* _WMI_UNIFIED_API_H_ */ diff --git a/wmi/inc/wmi_unified_param.h b/wmi/inc/wmi_unified_param.h index 2c07747563b9..3102fc5687e5 100644 --- a/wmi/inc/wmi_unified_param.h +++ b/wmi/inc/wmi_unified_param.h @@ -4776,6 +4776,7 @@ typedef enum { wmi_soc_hw_mode_transition_event_id, wmi_soc_set_dual_mac_config_resp_event_id, wmi_tx_data_traffic_ctrl_event_id, + wmi_update_rcpi_event_id, wmi_events_max, } wmi_conv_event_id; @@ -6688,6 +6689,32 @@ struct sar_limit_cmd_params { struct sar_limit_cmd_row *sar_limit_row_list; }; +/** + * 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 + * @RCPI_MEASUREMENT_TYPE_LAST_MGMT: rcpi of last mgmt frame + * @RCPI_MEASUREMENT_TYPE_LAST_DATA: rcpi of last data frame + * + */ +enum rcpi_measurement_type { + RCPI_MEASUREMENT_TYPE_AVG_MGMT = 0x1, + RCPI_MEASUREMENT_TYPE_AVG_DATA = 0x2, + RCPI_MEASUREMENT_TYPE_LAST_MGMT = 0x3, + RCPI_MEASUREMENT_TYPE_LAST_DATA = 0x4, +}; + +/** + * struct rcpi_req - rcpi parameter + * @vdev_id: virtual device id + * @measurement_type: type of rcpi from enum wmi_rcpi_measurement_type + * @mac_addr: peer mac addr for which measurement is required + */ +struct rcpi_req { + uint32_t vdev_id; + enum rcpi_measurement_type measurement_type; + uint8_t mac_addr[IEEE80211_ADDR_LEN]; +}; #define WMI_SUPPORTED_ACTION_CATEGORY 256 #define WMI_SUPPORTED_ACTION_CATEGORY_ELE_LIST (WMI_SUPPORTED_ACTION_CATEGORY/32) diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index 9f9fa8092e8e..59a1511f41d8 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/wmi/inc/wmi_unified_priv.h @@ -1147,6 +1147,9 @@ QDF_STATUS (*send_sar_limit_cmd)(wmi_unified_t wmi_handle, struct sar_limit_cmd_params *params); uint16_t (*wmi_set_htc_tx_tag)(wmi_unified_t wmi_handle, wmi_buf_t buf, uint32_t cmd_id); + +QDF_STATUS (*send_get_rcpi_cmd)(wmi_unified_t wmi_handle, + struct rcpi_req *get_rcpi_param); }; struct target_abi_version { diff --git a/wmi/src/wmi_unified_api.c b/wmi/src/wmi_unified_api.c index 8191f6764616..2d8c9767a610 100644 --- a/wmi/src/wmi_unified_api.c +++ b/wmi/src/wmi_unified_api.c @@ -6194,3 +6194,22 @@ QDF_STATUS wmi_unified_encrypt_decrypt_send_cmd(void *wmi_hdl, return QDF_STATUS_E_FAILURE; } + +/** + * wmi_unified_get_rcpi_cmd() - get rcpi request + * @wmi_hdl: wma handle + * @get_rcpi_param: rcpi params + * + * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +QDF_STATUS wmi_unified_get_rcpi_cmd(void *wmi_hdl, + struct rcpi_req *get_rcpi_param) +{ + wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; + + if (wmi_handle->ops->send_get_rcpi_cmd) + return wmi_handle->ops->send_get_rcpi_cmd(wmi_handle, + get_rcpi_param); + + return QDF_STATUS_E_FAILURE; +} diff --git a/wmi/src/wmi_unified_non_tlv.c b/wmi/src/wmi_unified_non_tlv.c index f28f87ce0f0c..9511b7730f0e 100644 --- a/wmi/src/wmi_unified_non_tlv.c +++ b/wmi/src/wmi_unified_non_tlv.c @@ -7666,6 +7666,7 @@ static void populate_non_tlv_events_id(uint32_t *event_ids) event_ids[wmi_tx_data_traffic_ctrl_event_id] = WMI_TX_DATA_TRAFFIC_CTRL_EVENTID; event_ids[wmi_pdev_utf_event_id] = WMI_PDEV_UTF_EVENTID; + event_ids[wmi_update_rcpi_event_id] = WMI_UPDATE_RCPI_EVENTID; } /** diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index af9c027d2c8e..5803901d6b86 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -12426,6 +12426,50 @@ static uint16_t wmi_set_htc_tx_tag_tlv(wmi_unified_t wmi_handle, return htc_tx_tag; } +/** + * send_get_rcpi_cmd_tlv() - get rcpi request + * @wmi_handle: wmi handle + * @get_rcpi_param: rcpi params + * + * Return: CDF status + */ +static QDF_STATUS send_get_rcpi_cmd_tlv(wmi_unified_t wmi_handle, + struct rcpi_req *get_rcpi_param) +{ + wmi_buf_t buf; + wmi_request_rcpi_cmd_fixed_param *cmd; + uint8_t len = sizeof(wmi_request_rcpi_cmd_fixed_param); + + buf = wmi_buf_alloc(wmi_handle, len); + if (!buf) { + WMI_LOGE("%s: Failed to allocate wmi buffer", __func__); + return QDF_STATUS_E_FAILURE; + } + + + cmd = (wmi_request_rcpi_cmd_fixed_param *) wmi_buf_data(buf); + WMITLV_SET_HDR(&cmd->tlv_header, + WMITLV_TAG_STRUC_wmi_request_rcpi_cmd_fixed_param, + WMITLV_GET_STRUCT_TLVLEN + (wmi_request_rcpi_cmd_fixed_param)); + + cmd->vdev_id = get_rcpi_param->vdev_id; + WMI_CHAR_ARRAY_TO_MAC_ADDR(get_rcpi_param->mac_addr, + &cmd->peer_macaddr); + cmd->measurement_type = get_rcpi_param->measurement_type; + WMI_LOGD("RCPI REQ VDEV_ID:%d-->", cmd->vdev_id); + if (wmi_unified_cmd_send(wmi_handle, buf, len, + WMI_REQUEST_RCPI_CMDID)) { + + WMI_LOGE("%s: Failed to send WMI_REQUEST_RCPI_CMDID", + __func__); + wmi_buf_free(buf); + return QDF_STATUS_E_FAILURE; + } + + return QDF_STATUS_SUCCESS; +} + struct wmi_ops tlv_ops = { .send_vdev_create_cmd = send_vdev_create_cmd_tlv, .send_vdev_delete_cmd = send_vdev_delete_cmd_tlv, @@ -12683,6 +12727,7 @@ struct wmi_ops tlv_ops = { .send_sar_limit_cmd = send_sar_limit_cmd_tlv, .send_per_roam_config_cmd = send_per_roam_config_cmd_tlv, .wmi_set_htc_tx_tag = wmi_set_htc_tx_tag_tlv, + .send_get_rcpi_cmd = send_get_rcpi_cmd_tlv, }; #ifdef WMI_TLV_AND_NON_TLV_SUPPORT @@ -13027,6 +13072,7 @@ static void populate_tlv_events_id(uint32_t *event_ids) WMI_SOC_HW_MODE_TRANSITION_EVENTID; event_ids[wmi_soc_set_dual_mac_config_resp_event_id] = WMI_SOC_SET_DUAL_MAC_CONFIG_RESP_EVENTID; + event_ids[wmi_update_rcpi_event_id] = WMI_UPDATE_RCPI_EVENTID; } /** |
