qcacmn: Support channel utilization stats
Provide support for following channel utilization stats: self_bss_util,obss_util,ap_rx_util,free_medium, ap_tx_util,obss_rx_util,non_wifi_util Change-Id: Ib1358988ae0b5794e70ba4348a78646e9d2a6cba CRs-Fixed: 2298865
This commit is contained in:
@@ -1086,6 +1086,11 @@ struct ol_ath_radiostats {
|
|||||||
uint8_t ap_stats_tx_cal_enable;
|
uint8_t ap_stats_tx_cal_enable;
|
||||||
uint8_t self_bss_util;
|
uint8_t self_bss_util;
|
||||||
uint8_t obss_util;
|
uint8_t obss_util;
|
||||||
|
uint8_t ap_rx_util;
|
||||||
|
uint8_t free_medium;
|
||||||
|
uint8_t ap_tx_util;
|
||||||
|
uint8_t obss_rx_util;
|
||||||
|
uint8_t non_wifi_util;
|
||||||
uint32_t tgt_asserts;
|
uint32_t tgt_asserts;
|
||||||
int16_t chan_nf;
|
int16_t chan_nf;
|
||||||
int16_t chan_nf_sec80;
|
int16_t chan_nf_sec80;
|
||||||
@@ -1419,6 +1424,11 @@ enum _ol_ath_param_t {
|
|||||||
OL_ATH_PARAM_CBS_CSA = 386,
|
OL_ATH_PARAM_CBS_CSA = 386,
|
||||||
OL_ATH_PARAM_TWICE_ANTENNA_GAIN = 387,
|
OL_ATH_PARAM_TWICE_ANTENNA_GAIN = 387,
|
||||||
OL_ATH_PARAM_ACTIVITY_FACTOR = 388,
|
OL_ATH_PARAM_ACTIVITY_FACTOR = 388,
|
||||||
|
OL_ATH_PARAM_CHAN_AP_RX_UTIL = 389,
|
||||||
|
OL_ATH_PARAM_CHAN_FREE = 390,
|
||||||
|
OL_ATH_PARAM_CHAN_AP_TX_UTIL = 391,
|
||||||
|
OL_ATH_PARAM_CHAN_OBSS_RX_UTIL = 392,
|
||||||
|
OL_ATH_PARAM_CHAN_NON_WIFI = 393,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Enumeration of PDEV Configuration parameter */
|
/* Enumeration of PDEV Configuration parameter */
|
||||||
|
@@ -29,36 +29,32 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* struct pdev_dcs_chan_stats - DCS statistics
|
* struct pdev_dcs_chan_stats - DCS statistics
|
||||||
* @dcs_cck_phyerr: channel noise floor
|
* @dcs_total_util: total channel utilization percentage
|
||||||
* @dcs_total_chan_util: total channel utilization
|
* @dcs_ap_tx_util: tx channel utilization percentage
|
||||||
* @dcs_tx_chan_util: tx channel utilization
|
* @dcs_ap_rx_util: rx channel utilization percentage
|
||||||
* @dcs_rx_chan_util: rx channel utilization
|
* @dcs_self_bss_util: self BSS utilization percentage
|
||||||
* @dcs_self_bss_util: self BSS util
|
* @dcs_obss_util: other BSS utilization percentage
|
||||||
* @dcs_other_bss_util: other BSS util
|
* @dcs_obss_rx_util: total Rx channel utilization percentage
|
||||||
* @dcs_wasted_chan_util: wasted chan util
|
* @dcs_free_medium: free medium percentage
|
||||||
* @dcs_unused_chan_util: unused chan util
|
* @dcs_non_wifi_util: non wifi utilization percentage
|
||||||
* @dcs_ss_under_util: spatial stream under util
|
* @dcs_ss_under_util: spatial stream under util
|
||||||
* @dcs_sec_20_util: secondary 20MHz util
|
* @dcs_sec_20_util: secondary 20MHz util
|
||||||
* @dcs_sec_40_util: secondary 40Mhz util
|
* @dcs_sec_40_util: secondary 40Mhz util
|
||||||
* @dcs_sec_80_util: secondary 80MHz util
|
* @dcs_sec_80_util: secondary 80MHz util
|
||||||
* @dcs_ofdm_phyerr: tx ofdm errors
|
|
||||||
* @dcs_cck_phyerr: tx cck errors
|
|
||||||
*/
|
*/
|
||||||
struct pdev_dcs_chan_stats {
|
struct pdev_dcs_chan_stats {
|
||||||
uint32_t dcs_chan_nf;
|
uint32_t dcs_total_util;
|
||||||
uint32_t dcs_total_chan_util;
|
uint32_t dcs_ap_tx_util;
|
||||||
uint32_t dcs_tx_chan_util;
|
uint32_t dcs_ap_rx_util;
|
||||||
uint32_t dcs_rx_chan_util;
|
|
||||||
uint32_t dcs_self_bss_util;
|
uint32_t dcs_self_bss_util;
|
||||||
uint32_t dcs_other_bss_util;
|
uint32_t dcs_obss_util;
|
||||||
uint32_t dcs_wasted_chan_util;
|
uint32_t dcs_obss_rx_util;
|
||||||
uint32_t dcs_unused_chan_util;
|
uint32_t dcs_free_medium;
|
||||||
|
uint32_t dcs_non_wifi_util;
|
||||||
uint32_t dcs_ss_under_util;
|
uint32_t dcs_ss_under_util;
|
||||||
uint32_t dcs_sec_20_util;
|
uint32_t dcs_sec_20_util;
|
||||||
uint32_t dcs_sec_40_util;
|
uint32_t dcs_sec_40_util;
|
||||||
uint32_t dcs_sec_80_util;
|
uint32_t dcs_sec_80_util;
|
||||||
uint32_t dcs_ofdm_phyerr;
|
|
||||||
uint32_t dcs_cck_phyerr;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* QCA_SUPPORT_CP_STATS */
|
#endif /* QCA_SUPPORT_CP_STATS */
|
||||||
|
@@ -27,6 +27,7 @@
|
|||||||
|
|
||||||
#ifdef QCA_SUPPORT_CP_STATS
|
#ifdef QCA_SUPPORT_CP_STATS
|
||||||
|
|
||||||
|
#include <wlan_cp_stats_ic_dcs_defs.h>
|
||||||
/**
|
/**
|
||||||
* struct pdev_rx_rssi - rx rssi information
|
* struct pdev_rx_rssi - rx rssi information
|
||||||
*
|
*
|
||||||
@@ -121,8 +122,6 @@ struct pdev_80211_stats {
|
|||||||
uint32_t cs_rx_looplimit_start;
|
uint32_t cs_rx_looplimit_start;
|
||||||
uint32_t cs_rx_looplimit_end;
|
uint32_t cs_rx_looplimit_end;
|
||||||
uint8_t cs_ap_stats_tx_cal_enable;
|
uint8_t cs_ap_stats_tx_cal_enable;
|
||||||
uint8_t cs_self_bss_util;
|
|
||||||
uint8_t cs_obss_util;
|
|
||||||
uint32_t cs_tgt_asserts;
|
uint32_t cs_tgt_asserts;
|
||||||
int16_t cs_chan_nf;
|
int16_t cs_chan_nf;
|
||||||
int16_t cs_chan_nf_sec80;
|
int16_t cs_chan_nf_sec80;
|
||||||
@@ -142,6 +141,7 @@ struct pdev_80211_stats {
|
|||||||
|
|
||||||
/* at places of copying required for scn-stats, copy till here only */
|
/* at places of copying required for scn-stats, copy till here only */
|
||||||
struct pdev_hw_stats hw_stats;
|
struct pdev_hw_stats hw_stats;
|
||||||
|
struct pdev_dcs_chan_stats chan_stats;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -112,8 +112,6 @@ UCFG_PDEV_CP_STATS_SET_FUNCS(rx_clear_count);
|
|||||||
UCFG_PDEV_CP_STATS_SET_FUNCS(cycle_count);
|
UCFG_PDEV_CP_STATS_SET_FUNCS(cycle_count);
|
||||||
UCFG_PDEV_CP_STATS_SET_FUNCS(phy_err_count);
|
UCFG_PDEV_CP_STATS_SET_FUNCS(phy_err_count);
|
||||||
UCFG_PDEV_CP_STATS_SET_FUNCS(chan_tx_pwr);
|
UCFG_PDEV_CP_STATS_SET_FUNCS(chan_tx_pwr);
|
||||||
UCFG_PDEV_CP_STATS_SET_FUNCS(self_bss_util);
|
|
||||||
UCFG_PDEV_CP_STATS_SET_FUNCS(obss_util);
|
|
||||||
|
|
||||||
#define UCFG_PDEV_CP_STATS_GET_FUNCS(field) \
|
#define UCFG_PDEV_CP_STATS_GET_FUNCS(field) \
|
||||||
static inline uint64_t \
|
static inline uint64_t \
|
||||||
@@ -139,6 +137,80 @@ UCFG_PDEV_CP_STATS_GET_FUNCS(wmi_tx_mgmt_completion_err);
|
|||||||
UCFG_PDEV_CP_STATS_GET_FUNCS(tgt_asserts);
|
UCFG_PDEV_CP_STATS_GET_FUNCS(tgt_asserts);
|
||||||
UCFG_PDEV_CP_STATS_GET_FUNCS(rx_phy_err);
|
UCFG_PDEV_CP_STATS_GET_FUNCS(rx_phy_err);
|
||||||
|
|
||||||
|
#define UCFG_PDEV_CHAN_STATS_SET_FUNCS(field) \
|
||||||
|
static inline void \
|
||||||
|
ucfg_pdev_chan_stats_##field##_inc(struct wlan_objmgr_pdev *_pdev, \
|
||||||
|
uint64_t _val) \
|
||||||
|
{ \
|
||||||
|
struct pdev_cp_stats *_pdev_cs = \
|
||||||
|
wlan_cp_stats_get_pdev_stats_obj(_pdev); \
|
||||||
|
if (_pdev_cs) { \
|
||||||
|
struct pdev_ic_cp_stats *_pdev_ic = \
|
||||||
|
_pdev_cs->pdev_stats; \
|
||||||
|
if (_pdev_ic) { \
|
||||||
|
_pdev_ic->stats.chan_stats.dcs_##field += _val;\
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
static inline void \
|
||||||
|
ucfg_pdev_chan_stats_##field##_dec(struct wlan_objmgr_pdev *_pdev, \
|
||||||
|
uint64_t _val) \
|
||||||
|
{ \
|
||||||
|
struct pdev_cp_stats *_pdev_cs = \
|
||||||
|
wlan_cp_stats_get_pdev_stats_obj(_pdev); \
|
||||||
|
if (_pdev_cs) { \
|
||||||
|
struct pdev_ic_cp_stats *_pdev_ic = \
|
||||||
|
_pdev_cs->pdev_stats; \
|
||||||
|
if (_pdev_ic) { \
|
||||||
|
_pdev_ic->stats.chan_stats.dcs_##field -= _val;\
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
static inline void \
|
||||||
|
ucfg_pdev_chan_stats_##field##_update(struct wlan_objmgr_pdev *_pdev, \
|
||||||
|
uint64_t _val) \
|
||||||
|
{ \
|
||||||
|
struct pdev_cp_stats *_pdev_cs = \
|
||||||
|
wlan_cp_stats_get_pdev_stats_obj(_pdev); \
|
||||||
|
if (_pdev_cs) { \
|
||||||
|
struct pdev_ic_cp_stats *_pdev_ic = \
|
||||||
|
_pdev_cs->pdev_stats; \
|
||||||
|
if (_pdev_ic) { \
|
||||||
|
_pdev_ic->stats.chan_stats.dcs_##field = _val;\
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
UCFG_PDEV_CHAN_STATS_SET_FUNCS(self_bss_util);
|
||||||
|
UCFG_PDEV_CHAN_STATS_SET_FUNCS(obss_util);
|
||||||
|
UCFG_PDEV_CHAN_STATS_SET_FUNCS(obss_rx_util);
|
||||||
|
UCFG_PDEV_CHAN_STATS_SET_FUNCS(ap_rx_util);
|
||||||
|
UCFG_PDEV_CHAN_STATS_SET_FUNCS(ap_tx_util);
|
||||||
|
UCFG_PDEV_CHAN_STATS_SET_FUNCS(free_medium);
|
||||||
|
UCFG_PDEV_CHAN_STATS_SET_FUNCS(non_wifi_util);
|
||||||
|
|
||||||
|
#define UCFG_PDEV_CHAN_STATS_GET_FUNCS(field) \
|
||||||
|
static inline uint8_t \
|
||||||
|
ucfg_pdev_chan_stats_##field##_get(struct wlan_objmgr_pdev *_pdev) \
|
||||||
|
{ \
|
||||||
|
struct pdev_cp_stats *_pdev_cs = \
|
||||||
|
wlan_cp_stats_get_pdev_stats_obj(_pdev); \
|
||||||
|
struct pdev_ic_cp_stats *_pdev_ic; \
|
||||||
|
if (_pdev_cs) { \
|
||||||
|
_pdev_ic = _pdev_cs->pdev_stats; \
|
||||||
|
if (_pdev_ic) \
|
||||||
|
return _pdev_ic->stats.chan_stats.dcs_##field; \
|
||||||
|
} \
|
||||||
|
return 0; \
|
||||||
|
}
|
||||||
|
UCFG_PDEV_CHAN_STATS_GET_FUNCS(self_bss_util);
|
||||||
|
UCFG_PDEV_CHAN_STATS_GET_FUNCS(obss_util);
|
||||||
|
UCFG_PDEV_CHAN_STATS_GET_FUNCS(obss_rx_util);
|
||||||
|
UCFG_PDEV_CHAN_STATS_GET_FUNCS(ap_rx_util);
|
||||||
|
UCFG_PDEV_CHAN_STATS_GET_FUNCS(ap_tx_util);
|
||||||
|
UCFG_PDEV_CHAN_STATS_GET_FUNCS(free_medium);
|
||||||
|
UCFG_PDEV_CHAN_STATS_GET_FUNCS(non_wifi_util);
|
||||||
|
|
||||||
static inline void ucfg_pdev_cp_stats_reset(struct wlan_objmgr_pdev *_pdev)
|
static inline void ucfg_pdev_cp_stats_reset(struct wlan_objmgr_pdev *_pdev)
|
||||||
{
|
{
|
||||||
struct pdev_cp_stats *pdev_cps = NULL;
|
struct pdev_cp_stats *pdev_cps = NULL;
|
||||||
|
@@ -325,8 +325,49 @@ PDEV_CP_STATS_SET_FUNCS(rx_clear_count);
|
|||||||
PDEV_CP_STATS_SET_FUNCS(cycle_count);
|
PDEV_CP_STATS_SET_FUNCS(cycle_count);
|
||||||
PDEV_CP_STATS_SET_FUNCS(phy_err_count);
|
PDEV_CP_STATS_SET_FUNCS(phy_err_count);
|
||||||
PDEV_CP_STATS_SET_FUNCS(chan_tx_pwr);
|
PDEV_CP_STATS_SET_FUNCS(chan_tx_pwr);
|
||||||
PDEV_CP_STATS_SET_FUNCS(self_bss_util);
|
|
||||||
PDEV_CP_STATS_SET_FUNCS(obss_util);
|
#define PDEV_CHAN_STATS_SET_FUNCS(field) \
|
||||||
|
static inline void \
|
||||||
|
pdev_chan_stats_##field##_inc(struct wlan_objmgr_pdev *_pdev, \
|
||||||
|
uint8_t _val) \
|
||||||
|
{ \
|
||||||
|
ucfg_pdev_chan_stats_##field##_inc(_pdev, _val); \
|
||||||
|
} \
|
||||||
|
static inline void \
|
||||||
|
pdev_chan_stats_##field##_dec(struct wlan_objmgr_pdev *_pdev, \
|
||||||
|
uint8_t _val) \
|
||||||
|
{ \
|
||||||
|
ucfg_pdev_chan_stats_##field##_dec(_pdev, _val); \
|
||||||
|
} \
|
||||||
|
static inline void \
|
||||||
|
pdev_chan_stats_##field##_update(struct wlan_objmgr_pdev *_pdev, \
|
||||||
|
uint8_t _val) \
|
||||||
|
{ \
|
||||||
|
ucfg_pdev_chan_stats_##field##_update(_pdev, _val); \
|
||||||
|
}
|
||||||
|
|
||||||
|
PDEV_CHAN_STATS_SET_FUNCS(self_bss_util);
|
||||||
|
PDEV_CHAN_STATS_SET_FUNCS(obss_util);
|
||||||
|
PDEV_CHAN_STATS_SET_FUNCS(obss_rx_util);
|
||||||
|
PDEV_CHAN_STATS_SET_FUNCS(ap_rx_util);
|
||||||
|
PDEV_CHAN_STATS_SET_FUNCS(ap_tx_util);
|
||||||
|
PDEV_CHAN_STATS_SET_FUNCS(free_medium);
|
||||||
|
PDEV_CHAN_STATS_SET_FUNCS(non_wifi_util);
|
||||||
|
|
||||||
|
#define PDEV_CHAN_STATS_GET_FUNCS(field) \
|
||||||
|
static inline uint8_t \
|
||||||
|
pdev_chan_stats_##field##_get(struct wlan_objmgr_pdev *_pdev) \
|
||||||
|
{ \
|
||||||
|
return ucfg_pdev_chan_stats_##field##_get(_pdev); \
|
||||||
|
}
|
||||||
|
|
||||||
|
PDEV_CHAN_STATS_GET_FUNCS(self_bss_util);
|
||||||
|
PDEV_CHAN_STATS_GET_FUNCS(obss_util);
|
||||||
|
PDEV_CHAN_STATS_GET_FUNCS(obss_rx_util);
|
||||||
|
PDEV_CHAN_STATS_GET_FUNCS(ap_rx_util);
|
||||||
|
PDEV_CHAN_STATS_GET_FUNCS(ap_tx_util);
|
||||||
|
PDEV_CHAN_STATS_GET_FUNCS(free_medium);
|
||||||
|
PDEV_CHAN_STATS_GET_FUNCS(non_wifi_util);
|
||||||
|
|
||||||
#define PDEV_CP_STATS_GET_FUNCS(field) \
|
#define PDEV_CP_STATS_GET_FUNCS(field) \
|
||||||
static inline uint64_t \
|
static inline uint64_t \
|
||||||
|
Reference in New Issue
Block a user