Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9ad14721 authored by Srikanth Marepalli's avatar Srikanth Marepalli Committed by Madan Koyyalamudi
Browse files

qcacld-3.0: Vendor command changes to enable the roam events stats

Add new vendor command to enable the roam events stats from the
driver/FW in both resume and suspend mode.
New roam param is introduced to indicate the FW to enable/disable
the roam stats using the new roam set command.

Change-Id: I6d04f0946e6735613a4cf3d4361bf31052314fa0
CRs-Fixed: 3036518
parent cf5baf10
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1606,6 +1606,7 @@ static void mlme_init_roam_offload_cfg(struct wlan_objmgr_psoc *psoc,
	lfr->idle_roam_band = cfg_get(psoc, CFG_LFR_IDLE_ROAM_BAND);
	lfr->sta_roam_disable = cfg_get(psoc, CFG_STA_DISABLE_ROAM);
	mlme_init_sae_single_pmk_cfg(psoc, lfr);
	qdf_mem_zero(&lfr->roam_rt_stats, sizeof(lfr->roam_rt_stats));
}

#else
+2 −0
Original line number Diff line number Diff line
@@ -1586,6 +1586,7 @@ struct fw_scan_channels {
 * @mawc_roam_enabled:              Enable/Disable MAWC during roaming
 * @enable_fast_roam_in_concurrency:Enable LFR roaming on STA during concurrency
 * @vendor_btm_param:               Vendor WTC roam trigger parameters
 * @roam_rt_stats:                  Roam event stats vendor command parameters
 * @lfr3_roaming_offload:           Enable/disable roam offload feature
 * @lfr3_dual_sta_roaming_enabled:  Enable/Disable dual sta roaming offload
 * feature
@@ -1704,6 +1705,7 @@ struct wlan_mlme_lfr_cfg {
	bool enable_fast_roam_in_concurrency;
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
	struct wlan_cm_roam_vendor_btm_params vendor_btm_param;
	struct wlan_cm_roam_rt_stats roam_rt_stats;
	bool lfr3_roaming_offload;
	bool lfr3_dual_sta_roaming_enabled;
	bool enable_self_bss_roam;
+75 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#include "wlan_mlme_api.h"
#include "wlan_crypto_global_api.h"
#include "wlan_mlme_main.h"
#include "wlan_cm_roam_api.h"

static struct wmi_unified
*target_if_cm_roam_get_wmi_handle_from_vdev(struct wlan_objmgr_vdev *vdev)
@@ -74,15 +75,78 @@ target_if_cm_roam_send_vdev_set_pcl_cmd(struct wlan_objmgr_vdev *vdev,
	return wmi_unified_vdev_set_pcl_cmd(wmi_handle, &params);
}

/**
 * target_if_roam_set_param() - set roam params in fw
 * @wmi_handle: wmi handle
 * @vdev_id: vdev id
 * @param_id: parameter id
 * @param_value: parameter value
 *
 * Return: QDF_STATUS_SUCCESS for success or error code
 */
static QDF_STATUS
target_if_roam_set_param(wmi_unified_t wmi_handle, uint8_t vdev_id,
			 uint32_t param_id, uint32_t param_value)
{
	struct vdev_set_params roam_param = {0};

	roam_param.vdev_id = vdev_id;
	roam_param.param_id = param_id;
	roam_param.param_value = param_value;

	return wmi_unified_roam_set_param_send(wmi_handle, &roam_param);
}

/**
 * target_if_cm_roam_rt_stats_config() - Send enable/disable roam event stats
 * commands to wmi
 * @vdev: vdev object
 * @vdev_id: vdev id
 * @rstats_config: roam event stats config parameters
 *
 * Return: QDF_STATUS
 */
static QDF_STATUS
target_if_cm_roam_rt_stats_config(struct wlan_objmgr_vdev *vdev,
				  uint8_t vdev_id, uint8_t rstats_config)
{
	QDF_STATUS status = QDF_STATUS_E_FAILURE;
	wmi_unified_t wmi_handle;

	wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev);
	if (!wmi_handle)
		return status;

	status = target_if_roam_set_param(
				wmi_handle,
				vdev_id,
				WMI_ROAM_PARAM_ROAM_EVENTS_CONFIG,
				rstats_config);

	if (QDF_IS_STATUS_ERROR(status))
		target_if_err("Failed to set "
			      "WMI_ROAM_PARAM_ROAM_EVENTS_CONFIG");

	return status;
}

static void
target_if_cm_roam_register_lfr3_ops(struct wlan_cm_roam_tx_ops *tx_ops)
{
	tx_ops->send_vdev_set_pcl_cmd = target_if_cm_roam_send_vdev_set_pcl_cmd;
	tx_ops->send_roam_rt_stats_config = target_if_cm_roam_rt_stats_config;
}
#else
static inline void
target_if_cm_roam_register_lfr3_ops(struct wlan_cm_roam_tx_ops *tx_ops)
{}

static QDF_STATUS
target_if_cm_roam_rt_stats_config(struct wlan_objmgr_vdev *vdev,
				  uint8_t vdev_id, uint8_t rstats_config)
{
	return QDF_STATUS_E_NOSUPPORT;
}
#endif

/**
@@ -842,6 +906,7 @@ target_if_cm_roam_send_start(struct wlan_objmgr_vdev *vdev,
	QDF_STATUS status = QDF_STATUS_SUCCESS;
	wmi_unified_t wmi_handle;
	struct wlan_objmgr_psoc *psoc;
	uint8_t vdev_id;
	bool bss_load_enabled;

	wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev);
@@ -962,6 +1027,11 @@ target_if_cm_roam_send_start(struct wlan_objmgr_vdev *vdev,

	target_if_cm_roam_idle_params(wmi_handle, ROAM_SCAN_OFFLOAD_START,
				      &req->idle_params);

	vdev_id = wlan_vdev_get_id(vdev);
	if (req->wlan_roam_rt_stats_config)
		target_if_cm_roam_rt_stats_config(vdev, vdev_id,
						  req->wlan_roam_rt_stats_config);
	/* add other wmi commands */
end:
	return status;
@@ -1179,6 +1249,11 @@ target_if_cm_roam_send_update_config(struct wlan_objmgr_vdev *vdev,
				wmi_handle, ROAM_SCAN_OFFLOAD_UPDATE_CFG,
				&req->idle_params);
		target_if_cm_roam_triggers(vdev, &req->roam_triggers);

		if (req->wlan_roam_rt_stats_config)
			target_if_cm_roam_rt_stats_config(
						vdev, vdev_id,
						req->wlan_roam_rt_stats_config);
	}
end:
	return status;
+39 −0
Original line number Diff line number Diff line
@@ -237,6 +237,39 @@ cm_roam_idle_params(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
	wlan_mlme_get_idle_roam_min_rssi(psoc, &params->conn_ap_min_rssi);
	wlan_mlme_get_idle_roam_band(psoc, &params->band);
}

/**
 * cm_roam_send_rt_stats_config() - set roam stats parameters
 * @psoc: psoc pointer
 * @vdev_id: vdev id
 * @param_value: roam stats param value
 *
 * This function is used to set roam event stats parameters
 *
 * Return: QDF_STATUS
 */
QDF_STATUS
cm_roam_send_rt_stats_config(struct wlan_objmgr_psoc *psoc,
			     uint8_t vdev_id, uint8_t param_value)
{
	struct roam_disable_cfg *req;
	QDF_STATUS status;

	req = qdf_mem_malloc(sizeof(*req));
	if (!req)
		return QDF_STATUS_E_NOMEM;

	req->vdev_id = vdev_id;
	req->cfg = param_value;

	status = wlan_cm_tgt_send_roam_rt_stats_config(psoc, req);
	if (QDF_IS_STATUS_ERROR(status))
		mlme_debug("fail to send roam rt stats config");

	qdf_mem_free(req);

	return status;
}
#else
static inline void
cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
@@ -488,6 +521,9 @@ cm_roam_start_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
	/* fill from legacy through this API */
	wlan_cm_roam_fill_start_req(psoc, vdev_id, start_req, reason);

	start_req->wlan_roam_rt_stats_config =
			wlan_cm_get_roam_rt_stats(psoc, ROAM_RT_STATS_ENABLE);

	status = wlan_cm_tgt_send_roam_start_req(psoc, vdev_id, start_req);
	if (QDF_IS_STATUS_ERROR(status))
		mlme_debug("fail to send roam start");
@@ -534,6 +570,9 @@ cm_roam_update_config_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
	/* fill from legacy through this API */
	wlan_cm_roam_fill_update_config_req(psoc, vdev_id, update_req, reason);

	update_req->wlan_roam_rt_stats_config =
			wlan_cm_get_roam_rt_stats(psoc, ROAM_RT_STATS_ENABLE);

	status = wlan_cm_tgt_send_roam_update_req(psoc, vdev_id, update_req);
	if (QDF_IS_STATUS_ERROR(status))
		mlme_debug("fail to send update config");
+21 −0
Original line number Diff line number Diff line
@@ -102,6 +102,27 @@ cm_roam_fill_rssi_change_params(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
				struct wlan_roam_rssi_change_params *params);
#endif

#ifdef WLAN_FEATURE_ROAM_OFFLOAD
/**
 * cm_roam_send_rt_stats_config() - Send roam event stats cfg value to FW
 * @psoc: PSOC pointer
 * @vdev_id: vdev id
 * @param_value: roam stats enable/disable cfg
 *
 * Return: QDF_STATUS
 */
QDF_STATUS
cm_roam_send_rt_stats_config(struct wlan_objmgr_psoc *psoc,
			     uint8_t vdev_id, uint8_t param_value);
#else
static inline QDF_STATUS
cm_roam_send_rt_stats_config(struct wlan_objmgr_psoc *psoc,
			     uint8_t vdev_id, uint8_t param_value)
{
	return QDF_STATUS_E_NOSUPPORT;
}
#endif

/**
 * cm_roam_send_disable_config() - Send roam module enable/disable cfg to fw
 * @psoc: PSOC pointer
Loading