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:

committed by
Madan Koyyalamudi

parent
6c7fcf1d61
commit
d7aada5bea
@@ -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, ¶m);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
|
@@ -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,
|
||||
|
Reference in New Issue
Block a user