qcacmn: Add implementation for atf peer cp stats

Add change to provide API to get ATF peer
cp stats structure from within cp stats component

Change-Id: I8465bd04e915419abb8de2d35d039ab812727ab1
CRs-Fixed: 2236328
This commit is contained in:
Naga
2018-05-03 21:15:07 +05:30
committed by nshrivas
parent 5ce6fc8d9a
commit a488d16e81
3 changed files with 123 additions and 51 deletions

View File

@@ -26,15 +26,13 @@
#define __WLAN_CP_STATS_ATF_DEFS_H__
#ifdef QCA_SUPPORT_CP_STATS
#include <qdf_status.h>
#include <wlan_objmgr_cmn.h>
#include <wlan_atf_utils_defs.h>
/**
* struct atf_cp_stats - ATF statistics
* struct atf_peer_cp_stats - ATF statistics
* @vdev_id: vdev object identifier
* @tokens: tokens distributed by strictq/fairq
* @act_tokens: tokens available, after adjustemnt of
* excess consumed in prev cycle
* @act_tokens: tokens available, after adjustemnt of excess
* consumed in prev cycle
* @total: total tokens distributed by strictq/fairq
* @contribution: tokens contributed by this node
* @tot_contribution: tokens contributed by all nodes
@@ -50,15 +48,14 @@
* @tokens_common: tokens distributed by strictq/fairq
* (for non-atf nodes)
* @act_tokens_common: tokens available, after adjustemnt of
* excess consumed in prev cycle
* (for non-atf nodes)
* excess consumed in prev cycle (for non-atf nodes)
* @timestamp: time when stats are updated
* @weighted_unusedtokens_percent: weighted unused tokens percent
* @raw_tx_tokens: raw tokens
* @throughput: attainable throughput assuming 100% airtime
* @total_used_tokens: total of used tokens
*/
struct atf_cp_stats {
struct atf_peer_cp_stats {
uint8_t vdev_id;
uint32_t tokens;
uint32_t act_tokens;
@@ -82,45 +79,5 @@ struct atf_cp_stats {
uint64_t total_used_tokens;
};
/**
* struct atfcntbl - Structure for ATF config table element
* @ssid: SSID
* @sta_mac: STA MAC address
* @value: value to configure
* @info_mark: 1 -- STA, 0 -- VDEV
* @assoc_status: 1 -- Yes, 0 -- No
* @all_tokens_used: 1 -- Yes, 0 -- No
* @cfg_value: Config value
* @grpname: Group name
*/
struct atfcntbl_cs {
uint8_t ssid[SSID_MAX_LEN + 1];
uint8_t sta_mac[MAC_ADDR_SIZE];
uint32_t value;
uint8_t info_mark;
uint8_t assoc_status;
uint8_t all_tokens_used;
uint32_t cfg_value;
uint8_t grpname[SSID_MAX_LEN + 1];
};
/**
* struct atftable - ATF table
* @id_type: Sub command
* @atf_info: Array of atfcntbl
* @info_cnt: Count of info entry
* @busy: Busy state flag
* @atf_group: Group ID
* @show_per_peer_table: Flag to show per peer table
*/
struct atftable_cs {
uint16_t id_type;
struct atfcntbl atf_info[ATF_ACTIVED_MAX_CLIENTS + ATF_CFG_NUM_VDEV];
uint16_t info_cnt;
uint8_t atf_status;
uint32_t busy;
uint32_t atf_group;
};
#endif /* QCA_SUPPORT_CP_STATS */
#endif /* __WLAN_CP_STATS_ATF_DEFS_H__ */

View File

@@ -28,6 +28,9 @@
#include <wlan_objmgr_cmn.h>
#include <wlan_cp_stats_ic_defs.h>
#include "../../core/src/wlan_cp_stats_defs.h"
#ifdef WLAN_ATF_ENABLE
#include <wlan_cp_stats_ic_atf_defs.h>
#endif
#define UCFG_PDEV_CP_STATS_SET_FUNCS(field) \
static inline void \
@@ -630,5 +633,32 @@ QDF_STATUS wlan_ucfg_get_pdev_hw_cp_stats(struct wlan_objmgr_pdev *pdev,
QDF_STATUS wlan_ucfg_set_pdev_hw_cp_stats(struct wlan_objmgr_pdev *pdev,
struct pdev_hw_stats *hw_stats);
#ifdef WLAN_ATF_ENABLE
/**
* wlan_ucfg_get_atf_peer_cp_stats() - ucfg API to get ATF peer cp stats
* @peer_obj: pointer to peer object
* @atf_cps: pointer to atf peer cp stats object to populate
*
* Return: QDF_STATUS - Success or Failure
*/
QDF_STATUS wlan_ucfg_get_atf_peer_cp_stats(struct wlan_objmgr_peer *peer,
struct atf_peer_cp_stats *atf_cps);
/**
* wlan_ucfg_get_atf_peer_cp_stats_from_mac() - ucfg API to get ATF
* peer cp stats from peer mac address
* @vdev_obj: pointer to vdev object
* @mac: pointer to peer mac address
* @atf_cps: pointer to atf peer cp stats object to populate
*
* Return: QDF_STATUS - Success or Failure
*/
QDF_STATUS
wlan_ucfg_get_atf_peer_cp_stats_from_mac(struct wlan_objmgr_vdev *vdev,
uint8_t *mac,
struct atf_peer_cp_stats *astats);
#endif
#endif /* QCA_SUPPORT_CP_STATS */
#endif /* __WLAN_CP_STATS_IC_UCFG_API_H__ */

View File

@@ -24,7 +24,9 @@
*/
#include <wlan_cp_stats_ic_ucfg_api.h>
#include <wlan_cfg80211_ic_cp_stats.h>
#ifdef WLAN_ATF_ENABLE
#include <wlan_cp_stats_ic_atf_defs.h>
#endif
#include <wlan_cp_stats_ic_defs.h>
#include "../../core/src/wlan_cp_stats_cmn_api_i.h"
#include <qdf_module.h>
@@ -253,3 +255,86 @@ struct pdev_ic_cp_stats
}
qdf_export_symbol(wlan_get_pdev_cp_stats_ref);
#ifdef WLAN_ATF_ENABLE
QDF_STATUS
wlan_ucfg_get_atf_peer_cp_stats(struct wlan_objmgr_peer *peer,
struct atf_peer_cp_stats *atf_cps)
{
struct peer_cp_stats *peer_cs;
if (!peer) {
cp_stats_err("Invalid input, peer obj is null");
return QDF_STATUS_E_INVAL;
}
if (!atf_cps) {
cp_stats_err("Invalid input, ATF cp stats obj is null");
return QDF_STATUS_E_INVAL;
}
peer_cs = wlan_cp_stats_get_peer_stats_obj(peer);
if (peer_cs) {
if (peer_cs->peer_comp_priv_obj[WLAN_CP_STATS_ATF]) {
wlan_cp_stats_peer_obj_lock(peer_cs);
qdf_mem_copy(atf_cps,
peer_cs->peer_comp_priv_obj[WLAN_CP_STATS_ATF],
sizeof(*atf_cps));
wlan_cp_stats_peer_obj_unlock(peer_cs);
return QDF_STATUS_SUCCESS;
}
}
return QDF_STATUS_E_FAILURE;
}
QDF_STATUS
wlan_ucfg_get_atf_peer_cp_stats_from_mac(struct wlan_objmgr_vdev *vdev,
uint8_t *mac,
struct atf_peer_cp_stats *astats)
{
struct wlan_objmgr_peer *peer;
struct wlan_objmgr_psoc *psoc;
struct wlan_objmgr_pdev *pdev;
QDF_STATUS status;
if (!vdev) {
cp_stats_err("vdev object is NULL");
return QDF_STATUS_E_INVAL;
}
if (!mac) {
cp_stats_err("peer mac address is NULL");
return QDF_STATUS_E_INVAL;
}
if (!astats) {
cp_stats_err("atf peer stats obj is NULL");
return QDF_STATUS_E_INVAL;
}
psoc = wlan_vdev_get_psoc(vdev);
if (!psoc) {
cp_stats_err("psoc is NULL");
return QDF_STATUS_E_INVAL;
}
pdev = wlan_vdev_get_pdev(vdev);
if (!pdev) {
cp_stats_err("pdev is NULL");
return QDF_STATUS_E_INVAL;
}
peer = wlan_objmgr_get_peer(psoc, wlan_objmgr_pdev_get_pdev_id(pdev),
mac, WLAN_CP_STATS_ID);
if (!peer) {
cp_stats_err("peer is NULL");
return QDF_STATUS_E_INVAL;
}
status = wlan_ucfg_get_atf_peer_cp_stats(peer, astats);
wlan_objmgr_peer_release_ref(peer, WLAN_CP_STATS_ID);
return status;
}
#endif