diff --git a/umac/cp_stats/dispatcher/inc/wlan_cp_stats_ic_defs.h b/umac/cp_stats/dispatcher/inc/wlan_cp_stats_ic_defs.h index 0335588e0d..b9742ab1c6 100644 --- a/umac/cp_stats/dispatcher/inc/wlan_cp_stats_ic_defs.h +++ b/umac/cp_stats/dispatcher/inc/wlan_cp_stats_ic_defs.h @@ -184,12 +184,80 @@ struct pdev_80211_stats { struct pdev_hw_stats hw_stats; }; +/** + * struct lmac_pdev_80211_stats - control plane stats at pdev + * + * the same statistics were earlier maintained with a reference to + * ath_stats structure, now the same structure will be + * used as interface structure with user space application + * + * @cs_ast_reset_on_error: resets on error + * @cs_ast_hardware: fatal hardware error interrupts + * @cs_ast_halresets: HAL resets + * @cs_ast_bmiss: beacon miss interrupts + * @cs_ast_brssi: beacon rssi threshold interrupts + * @cs_ast_tx_fifoerr: management frames transmitted + * @cs_ast_tx_filtered: tx failed 'cuz xmit filtered + * @cs_ast_tx_noack: tx frames with no ack marked + * @cs_ast_tx_shortpre: tx frames with short preamble + * @cs_ast_tx_altrate: tx frames with alternate rate + * @cs_ast_tx_protect: tx frames with protection + * @cs_ast_rx_nobuf: rx setup failed 'cuz no skbuff + * @cs_ast_rx_hal_in_progress: rx hal in progress + * @cs_ast_rx_num_unknown: rx num unknown + * @cs_ast_per_cal: periodic calibration calls + * @cs_ast_per_calfai: periodic calibration failed + * @cs_ast_per_rfgain: periodic calibration rfgain reset + * @cs_ast_ant_defswitch: rx/default antenna switches + * @cs_ast_bb_hang: BB hang detected + * @cs_ast_mac_hang: MAC hang detected + * @cs_ast_wow_wakeups: count of hibernate and standby wakeups + * @cs_ast_wow_wakeupsok: count of wakeups thru WoW + * @cs_ast_cfend_sched: count of CF-END frames scheduled + * @cs_ast_cfend_sent: count of CF-END frames sent + * @cs_ast_noise_floor: noise floor + */ + +struct lmac_pdev_80211_stats { + uint32_t cs_ast_reset_on_error; + uint32_t cs_ast_hardware; + uint32_t cs_ast_halresets; + uint32_t cs_ast_bmiss; + uint32_t cs_ast_brssi; + uint32_t cs_ast_tx_fifoerr; + uint32_t cs_ast_tx_filtered; + uint32_t cs_ast_tx_noack; + uint32_t cs_ast_tx_shortpre; + uint32_t cs_ast_tx_altrate; + uint32_t cs_ast_tx_protect; + uint32_t cs_ast_rx_nobuf; + uint32_t cs_ast_rx_hal_in_progress; + uint32_t cs_ast_rx_num_unknown; + uint32_t cs_ast_per_cal; + uint32_t cs_ast_per_calfail; + uint32_t cs_ast_per_rfgain; + uint32_t cs_ast_ant_defswitch; + uint32_t cs_ast_bb_hang; + uint32_t cs_ast_mac_hang; +#ifdef ATH_WOW + uint32_t cs_ast_wow_wakeups; + uint32_t cs_ast_wow_wakeupsok; +#endif +#ifdef ATH_SUPPORT_CFEND + uint32_t cs_ast_cfend_sched; + uint32_t cs_ast_cfend_sent; +#endif + int16_t cs_ast_noise_floor; +}; + /** * struct pdev_ic_cp_stats - control plane stats specific to WIN at pdev * @stats: 80211 stats + * @lmac_stats: lmac 80211 stats */ struct pdev_ic_cp_stats { struct pdev_80211_stats stats; + struct lmac_pdev_80211_stats lmac_stats; }; /** diff --git a/umac/cp_stats/dispatcher/inc/wlan_cp_stats_ic_ucfg_api.h b/umac/cp_stats/dispatcher/inc/wlan_cp_stats_ic_ucfg_api.h index 9ae156a81e..186f25e7a4 100644 --- a/umac/cp_stats/dispatcher/inc/wlan_cp_stats_ic_ucfg_api.h +++ b/umac/cp_stats/dispatcher/inc/wlan_cp_stats_ic_ucfg_api.h @@ -148,6 +148,8 @@ UCFG_PDEV_CP_STATS_SET_FUNCS(obss_util); return 0; \ } +UCFG_PDEV_CP_STATS_GET_FUNCS(tx_mgmt); +UCFG_PDEV_CP_STATS_GET_FUNCS(rx_num_mgmt); UCFG_PDEV_CP_STATS_GET_FUNCS(ap_stats_tx_cal_enable); UCFG_PDEV_CP_STATS_GET_FUNCS(wmi_tx_mgmt); UCFG_PDEV_CP_STATS_GET_FUNCS(wmi_tx_mgmt_completions); @@ -165,6 +167,104 @@ static inline void ucfg_pdev_cp_stats_reset(struct wlan_objmgr_pdev *_pdev) qdf_mem_zero(pdev_cps->pdev_stats, sizeof(struct pdev_ic_cp_stats)); } +#define UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(field) \ + static inline void \ + ucfg_pdev_lmac_cp_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_ics = \ + _pdev_cs->pdev_stats; \ + if (_pdev_ics) { \ + _pdev_ics->lmac_stats.cs_##field += _val;\ + } \ + } \ + } \ + static inline void \ + ucfg_pdev_lmac_cp_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_ics = \ + _pdev_cs->pdev_stats; \ + if (_pdev_ics) { \ + _pdev_ics->lmac_stats.cs_##field -= _val;\ + } \ + } \ + } \ + static inline void \ + ucfg_pdev_lmac_cp_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_ics = \ + _pdev_cs->pdev_stats; \ + if (_pdev_ics) { \ + _pdev_ics->lmac_stats.cs_##field = _val;\ + } \ + } \ + } +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_reset_on_error); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_hardware); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_halresets); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_bmiss); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_brssi); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_tx_fifoerr); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_tx_filtered); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_tx_noack); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_tx_shortpre); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_tx_altrate); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_tx_protect); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_rx_nobuf); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_rx_hal_in_progress); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_rx_num_unknown); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_per_cal); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_per_calfail); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_per_rfgain); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_ant_defswitch); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_bb_hang); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_mac_hang); +#ifdef ATH_WOW +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_wow_wakeups); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_wow_wakeupsok); +#endif +#ifdef ATH_SUPPORT_CFEND +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_cfend_sched); +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_cfend_sent); +#endif +UCFG_PDEV_LMAC_CP_STATS_SET_FUNCS(ast_noise_floor); + +#define UCFG_PDEV_LMAC_CP_STATS_GET_FUNCS(field) \ + static inline uint64_t \ + ucfg_pdev_lmac_cp_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_ics; \ + uint64_t stat = 0; \ + if (_pdev_cs) { \ + wlan_cp_stats_pdev_obj_lock(_pdev_cs); \ + _pdev_ics = _pdev_cs->pdev_stats; \ + if (_pdev_ics) { \ + stat = _pdev_ics->lmac_stats.cs_##field; \ + } \ + wlan_cp_stats_pdev_obj_unlock(_pdev_cs); \ + return stat; \ + } \ + else \ + return 0; \ + } + +UCFG_PDEV_LMAC_CP_STATS_GET_FUNCS(ast_tx_fifoerr); +UCFG_PDEV_LMAC_CP_STATS_GET_FUNCS(ast_tx_filtered); +UCFG_PDEV_LMAC_CP_STATS_GET_FUNCS(ast_noise_floor); + #define UCFG_VDEV_CP_STATS_SET_FUNCS(field) \ static inline void \ ucfg_vdev_cp_stats_##field##_inc(struct wlan_objmgr_vdev *_vdev, \ diff --git a/umac/cp_stats/dispatcher/inc/wlan_cp_stats_ic_utils_api.h b/umac/cp_stats/dispatcher/inc/wlan_cp_stats_ic_utils_api.h index 8c737fab59..dfcb3f456d 100644 --- a/umac/cp_stats/dispatcher/inc/wlan_cp_stats_ic_utils_api.h +++ b/umac/cp_stats/dispatcher/inc/wlan_cp_stats_ic_utils_api.h @@ -362,6 +362,8 @@ PDEV_CP_STATS_SET_FUNCS(obss_util); return ucfg_pdev_cp_stats_##field##_get(_pdev); \ } +PDEV_CP_STATS_GET_FUNCS(tx_mgmt); +PDEV_CP_STATS_GET_FUNCS(rx_num_mgmt); PDEV_CP_STATS_GET_FUNCS(ap_stats_tx_cal_enable); PDEV_CP_STATS_GET_FUNCS(wmi_tx_mgmt); PDEV_CP_STATS_GET_FUNCS(wmi_tx_mgmt_completions); @@ -373,6 +375,60 @@ static inline void pdev_cp_stats_reset(struct wlan_objmgr_pdev *pdev) ucfg_pdev_cp_stats_reset(pdev); } +#define PDEV_LMAC_CP_STATS_SET_FUNCS(field) \ + static inline void \ + pdev_lmac_cp_stats_##field##_inc(struct wlan_objmgr_pdev *_pdev, \ + uint64_t _val) \ + { \ + ucfg_pdev_lmac_cp_stats_##field##_inc(_pdev, _val); \ + } \ + static inline void \ + pdev_lmac_cp_stats_##field##_update(struct wlan_objmgr_pdev *_pdev, \ + uint64_t _val) \ + { \ + ucfg_pdev_lmac_cp_stats_##field##_update(_pdev, _val); \ + } + +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_reset_on_error); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_hardware); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_halresets); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_bmiss); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_brssi); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_tx_fifoerr); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_tx_filtered); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_tx_noack); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_tx_shortpre); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_tx_altrate); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_tx_protect); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_rx_nobuf); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_rx_hal_in_progress); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_rx_num_unknown); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_per_cal); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_per_calfail); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_per_rfgain); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_ant_defswitch); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_bb_hang); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_mac_hang); +#ifdef ATH_WOW +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_wow_wakeups); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_wow_wakeupsok); +#endif +#ifdef ATH_SUPPORT_CFEND +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_cfend_sched); +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_cfend_sent); +#endif +PDEV_LMAC_CP_STATS_SET_FUNCS(ast_noise_floor); + +#define PDEV_LMAC_CP_STATS_GET_FUNCS(field) \ + static inline uint64_t \ + pdev_lmac_cp_stats_##field##_get(struct wlan_objmgr_pdev *_pdev) \ + { \ + return ucfg_pdev_lmac_cp_stats_##field##_get(_pdev); \ + } +PDEV_LMAC_CP_STATS_GET_FUNCS(ast_tx_fifoerr); +PDEV_LMAC_CP_STATS_GET_FUNCS(ast_tx_filtered); +PDEV_LMAC_CP_STATS_GET_FUNCS(ast_noise_floor); + /** * wlan_get_pdev_cp_stats_ref() - API to reference to pdev cp stats object * @pdev: pointer to pdev object