qcacmn: Convey vdev_stats_id to FW in wmi_vdev_create_cmd

In BE architecture, HW provides basic vdev stats support for upto
48 vdevs. For each vdev, there is vdev_stats_id which represents the
id of this vdev on HW. This vdev_stats_id is assigned by host and
is conveyed to FW at the time of vdev creation in wmi_vdev_create_cmd.
FW uses this vdev_stats_id to fetch the stats from HW.

Add logic to convey vdev_stats_id to FW at the time of vdev create.

Change-Id: I91782c73a7f3f94175a0c28ab4adda2d894856db
CRs-Fixed: 3069992
This commit is contained in:
Harsh Kumar Bijlani
2021-11-03 00:23:49 +05:30
committed by Madan Koyyalamudi
parent 6c7fcf1d61
commit d7aada5bea
4 changed files with 90 additions and 1 deletions

View File

@@ -35,6 +35,78 @@
#include <wlan_dfs_utils_api.h>
#include <wlan_vdev_mgr_ucfg_api.h>
#include <qdf_module.h>
#include <cdp_txrx_ctrl.h>
#ifdef QCA_VDEV_STATS_HW_OFFLOAD_SUPPORT
/**
* vdev_mgr_alloc_vdev_stats_id() - Allocate vdev stats id for vdev
* @vdev - pointer to vdev
* @param - pointer to vdev create params
*
* Return: none
*/
static void vdev_mgr_alloc_vdev_stats_id(struct wlan_objmgr_vdev *vdev,
struct vdev_create_params *param)
{
struct wlan_objmgr_psoc *psoc;
uint8_t vdev_stats_id = CDP_INVALID_VDEV_STATS_ID;
if ((param->type == WLAN_VDEV_MLME_TYPE_MONITOR) ||
(param->subtype == WLAN_VDEV_MLME_SUBTYPE_SMART_MONITOR) ||
(param->special_vdev_mode)) {
param->vdev_stats_id = CDP_INVALID_VDEV_STATS_ID;
return;
}
psoc = wlan_vdev_get_psoc(vdev);
if (!psoc || !wlan_psoc_get_dp_handle(psoc)) {
mlme_err("PSOC or PSOC DP Handle is NULL");
param->vdev_stats_id = CDP_INVALID_VDEV_STATS_ID;
return;
}
/* Get vdev_stats_id from dp_soc via cdp call */
cdp_vdev_alloc_vdev_stats_id(wlan_psoc_get_dp_handle(psoc),
&vdev_stats_id);
param->vdev_stats_id = vdev_stats_id;
}
/**
* vdev_mgr_reset_vdev_stats_id() -Reset vdev stats id
* @vdev - pointer to vdev
* @vdev_stats_id - Value of vdev_stats_id
*
* Return: none
*/
static void vdev_mgr_reset_vdev_stats_id(struct wlan_objmgr_vdev *vdev,
uint8_t vdev_stats_id)
{
struct wlan_objmgr_psoc *psoc;
if (vdev_stats_id == CDP_INVALID_VDEV_STATS_ID)
return;
psoc = wlan_vdev_get_psoc(vdev);
if (!psoc || !wlan_psoc_get_dp_handle(psoc)) {
mlme_err("PSOC or PSOC DP Handle is NULL");
return;
}
cdp_vdev_reset_vdev_stats_id(wlan_psoc_get_dp_handle(psoc),
vdev_stats_id);
}
#else
static void vdev_mgr_alloc_vdev_stats_id(struct wlan_objmgr_vdev *vdev,
struct vdev_create_params *param)
{
/* Assign Invalid vdev_stats_id */
param->vdev_stats_id = CDP_INVALID_VDEV_STATS_ID;
}
static void vdev_mgr_reset_vdev_stats_id(struct wlan_objmgr_vdev *vdev,
uint8_t vdev_stats_id)
{}
#endif /* QCA_VDEV_STATS_HW_OFFLOAD_SUPPORT */
static QDF_STATUS vdev_mgr_create_param_update(
struct vdev_mlme_obj *mlme_obj,
@@ -66,6 +138,10 @@ static QDF_STATUS vdev_mgr_create_param_update(
param->mbssid_flags = mbss->mbssid_flags;
param->vdevid_trans = mbss->vdevid_trans;
param->special_vdev_mode = mlme_obj->mgmt.generic.special_vdev_mode;
vdev_mgr_alloc_vdev_stats_id(vdev, param);
param->vdev_stats_id_valid =
((param->vdev_stats_id != CDP_INVALID_VDEV_STATS_ID) ? true : false);
#ifdef WLAN_FEATURE_11BE_MLO
WLAN_ADDR_COPY(param->mlo_mac, wlan_vdev_mlme_get_mldaddr(vdev));
#endif
@@ -90,7 +166,11 @@ QDF_STATUS vdev_mgr_create_send(struct vdev_mlme_obj *mlme_obj)
}
status = tgt_vdev_mgr_create_send(mlme_obj, &param);
if (QDF_IS_STATUS_ERROR(status)) {
/* Reset the vdev_stats_id */
vdev_mgr_reset_vdev_stats_id(mlme_obj->vdev,
param.vdev_stats_id);
}
return status;
}

View File

@@ -614,6 +614,8 @@ struct vdev_set_params {
/**
* struct vdev_create_params - vdev create cmd parameter
* @vdev_id: interface id
* @vdev_stats_id_valid: flag to indicate valid stats id
* @vdev_stats_id: stats_id for stats collection
* @type: interface type
* @subtype: interface subtype
* @nss_2g: NSS for 2G
@@ -625,6 +627,8 @@ struct vdev_set_params {
*/
struct vdev_create_params {
uint8_t vdev_id;
bool vdev_stats_id_valid;
uint8_t vdev_stats_id;
uint32_t type;
uint32_t subtype;
uint8_t nss_2g;

View File

@@ -103,6 +103,7 @@ QDF_STATUS tgt_vdev_mgr_create_send(
vdev_info.vdev_mac_addr = wlan_vdev_mlme_get_macaddr(vdev);
vdev_info.vdev_id = vdev_id;
vdev_info.vdev_stats_id = param->vdev_stats_id;
vdev_info.op_mode = wlan_util_vdev_get_cdp_txrx_opmode(vdev);
vdev_info.subtype = wlan_util_vdev_get_cdp_txrx_subtype(vdev);
wlan_vdev_mgr_fill_mlo_params(&vdev_info, param);

View File

@@ -814,6 +814,10 @@ static QDF_STATUS send_vdev_create_cmd_tlv(wmi_unified_t wmi_handle,
cmd->flags |= (param->special_vdev_mode ? VDEV_FLAGS_SCAN_MODE_VAP : 0);
cmd->vdevid_trans = param->vdevid_trans;
cmd->num_cfg_txrx_streams = num_bands;
#ifdef QCA_VDEV_STATS_HW_OFFLOAD_SUPPORT
cmd->vdev_stats_id_valid = param->vdev_stats_id_valid;
cmd->vdev_stats_id = param->vdev_stats_id;
#endif
copy_vdev_create_pdev_id(wmi_handle, cmd, param);
WMI_CHAR_ARRAY_TO_MAC_ADDR(macaddr, &cmd->vdev_macaddr);
wmi_debug("ID = %d[pdev:%d] VAP Addr = "QDF_MAC_ADDR_FMT,