1 /* 2 * Copyright (c) 2018,2020 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for 6 * any purpose with or without fee is hereby granted, provided that the 7 * above copyright notice and this permission notice appear in all 8 * copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17 * PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 /** 21 * DOC: wlan_cp_stats_utils_api.h 22 * 23 * This header file provide declaration to public APIs exposed for other UMAC 24 * components to init/deinit, (de)register to required WMI events on 25 * soc enable/disable 26 */ 27 28 #ifndef __WLAN_CP_STATS_UTILS_API_H__ 29 #define __WLAN_CP_STATS_UTILS_API_H__ 30 31 #ifdef QCA_SUPPORT_CP_STATS 32 #include <wlan_objmgr_cmn.h> 33 #include <wlan_twt_public_structs.h> 34 35 #define cp_stats_debug(args ...) \ 36 QDF_TRACE_DEBUG(QDF_MODULE_ID_CP_STATS, ## args) 37 #define cp_stats_err(args ...) \ 38 QDF_TRACE_ERROR(QDF_MODULE_ID_CP_STATS, ## args) 39 #define cp_stats_rl_err(args ...) \ 40 QDF_TRACE_ERROR_RL(QDF_MODULE_ID_CP_STATS, ## args) 41 #define cp_stats_nofl_debug(args ...) \ 42 QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_CP_STATS, ## args) 43 /** 44 * enum wlan_cp_stats_cfg_state - State of Object configuration to 45 * indicate whether object has to be attached/detached in cp stats 46 * @WLAN_CP_STATS_OBJ_DETACH: Object has to be detached 47 * @WLAN_CP_STATS_OBJ_ATTACH: Object has to be attached 48 * @WLAN_CP_STATS_OBJ_INVALID: Object is invalid 49 */ 50 enum wlan_cp_stats_cfg_state { 51 WLAN_CP_STATS_OBJ_DETACH = 0, 52 WLAN_CP_STATS_OBJ_ATTACH = 1, 53 WLAN_CP_STATS_OBJ_INVALID 54 }; 55 56 /** 57 * enum wlan_cp_stats_comp_id - component id for other umac components 58 * @WLAN_CP_STATS_ATF: ATF component specific id 59 * @WLAN_CP_STATS_MAX_COMPONENTS : Max id of cp stats components 60 */ 61 enum wlan_cp_stats_comp_id { 62 WLAN_CP_STATS_ATF = 0, 63 WLAN_CP_STATS_MAX_COMPONENTS, 64 }; 65 66 /** 67 * wlan_cp_stats_init(): API to init stats component 68 * 69 * This API is invoked from dispatcher init during all component init. 70 * This API will register all required handlers for psoc, pdev,vdev 71 * and peer object create/delete notification. 72 * 73 * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error 74 */ 75 QDF_STATUS wlan_cp_stats_init(void); 76 77 /** 78 * wlan_cp_stats_deinit(): API to deinit stats component 79 * 80 * This API is invoked from dispatcher deinit during all component deinit. 81 * This API will unregister all required handlers for psoc, pdev,vdev 82 * and peer object create/delete notification. 83 * 84 * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error 85 */ 86 QDF_STATUS wlan_cp_stats_deinit(void); 87 88 /** 89 * wlan_cp_stats_open(): API to open cp stats component 90 * @psoc: pointer to psoc 91 * 92 * This API is invoked from dispatcher psoc open. 93 * This API will initialize psoc level cp stats object. 94 * 95 * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error 96 */ 97 QDF_STATUS wlan_cp_stats_open(struct wlan_objmgr_psoc *psoc); 98 99 /** 100 * wlan_cp_stats_close(): API to close cp stats component 101 * @psoc: pointer to psoc 102 * 103 * This API is invoked from dispatcher psoc close. 104 * This API will de-initialize psoc level cp stats object. 105 * 106 * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error 107 */ 108 QDF_STATUS wlan_cp_stats_close(struct wlan_objmgr_psoc *psoc); 109 110 /** 111 * wlan_cp_stats_enable(): API to enable cp stats component 112 * @psoc: pointer to psoc 113 * 114 * This API is invoked from dispatcher psoc enable. 115 * This API will register cp_stats WMI event handlers. 116 * 117 * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error 118 */ 119 QDF_STATUS wlan_cp_stats_enable(struct wlan_objmgr_psoc *psoc); 120 121 /** 122 * wlan_cp_stats_disable(): API to disable cp stats component 123 * @psoc: pointer to psoc 124 * 125 * This API is invoked from dispatcher psoc disable. 126 * This API will unregister cp_stats WMI event handlers. 127 * 128 * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error 129 */ 130 QDF_STATUS wlan_cp_stats_disable(struct wlan_objmgr_psoc *psoc); 131 132 /** 133 * wlan_cp_stats_comp_obj_cfg() - public API to umac for attach/detach 134 * component specific stat obj to cp stats obj 135 * @obj_type: common object type 136 * @cfg_state: config state either to attach of detach 137 * @comp_id: umac component id 138 * @cmn_obj: pointer to common object 139 * @data: pointer to component specific cp stats object 140 * 141 * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error 142 */ 143 QDF_STATUS wlan_cp_stats_comp_obj_cfg( 144 enum wlan_objmgr_obj_type obj_type, 145 enum wlan_cp_stats_cfg_state cfg_state, 146 enum wlan_umac_comp_id comp_id, 147 void *cmn_obj, 148 void *data); 149 150 /** 151 * wlan_cp_stats_vdev_mcast_rx_pnerr() - public API to umac for updating 152 * vdev rx_pnerr stats 153 * @vdev: pointer to vdev 154 * 155 * Return: None 156 */ 157 void wlan_cp_stats_vdev_mcast_rx_pnerr(struct wlan_objmgr_vdev *vdev); 158 159 /** 160 * wlan_cp_stats_peer_rx_pnerr() - public API to umac for updating 161 * peer rx_pnerr stats 162 * @peer: pointer to peer 163 * 164 * Return: None 165 */ 166 void wlan_cp_stats_peer_rx_pnerr(struct wlan_objmgr_peer *peer); 167 168 #if defined(WLAN_SUPPORT_TWT) && defined(WLAN_TWT_CONV_SUPPORTED) 169 /** 170 * tgt_cp_stats_twt_get_session_evt_handler() - twt get sessions evt handler 171 * @psoc: pointer to psoc object 172 * @twt_params: twt params 173 * 174 * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error 175 */ 176 QDF_STATUS 177 tgt_cp_stats_twt_get_session_evt_handler( 178 struct wlan_objmgr_psoc *psoc, 179 struct twt_session_stats_info *twt_params); 180 #else 181 static inline QDF_STATUS 182 tgt_cp_stats_twt_get_session_evt_handler( 183 struct wlan_objmgr_psoc *psoc, 184 struct twt_session_stats_info *twt_params) 185 { 186 return QDF_STATUS_E_NOSUPPORT; 187 } 188 #endif 189 190 #else /* QCA_SUPPORT_CP_STATS */ 191 static inline 192 void wlan_cp_stats_vdev_mcast_rx_pnerr(struct wlan_objmgr_vdev *vdev) 193 {} 194 195 static inline 196 void wlan_cp_stats_peer_rx_pnerr(struct wlan_objmgr_peer *peer) 197 {} 198 199 #endif /* QCA_SUPPORT_CP_STATS */ 200 #endif /* __WLAN_CP_STATS_UTILS_API_H__ */ 201