summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--wmi/inc/wmi_unified_api.h10
-rw-r--r--wmi/inc/wmi_unified_param.h27
-rw-r--r--wmi/inc/wmi_unified_priv.h3
-rw-r--r--wmi/src/wmi_unified_api.c19
-rw-r--r--wmi/src/wmi_unified_non_tlv.c1
-rw-r--r--wmi/src/wmi_unified_tlv.c46
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;
}
/**