1 /* 2 * Copyright (c) 2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 /** 19 * DOC: contains cp_stats structure definitions 20 */ 21 22 #ifndef _WLAN_CP_STATS_PUBLIC_STRUCTS_H_ 23 #define _WLAN_CP_STATS_PUBLIC_STRUCTS_H_ 24 25 #define CTRL_PATH_STATS_MAX_MAC_ADDR 1 26 #define CTRL_PATH_STATS_MAX_PDEV_ID 1 27 #define CTRL_PATH_STATS_MAX_VDEV_ID 1 28 29 30 #define INFRA_CP_STATS_MAX_REQ_TWT_DIALOG_ID 1 31 32 /* 33 * Maximum of 1 TWT session can be supported per vdev. 34 * This can be extended later to support more sessions. 35 * if there is a request to retrieve stats for all existing 36 * TWT sessions then response path can have multiple session 37 * stats. 38 */ 39 #define INFRA_CP_STATS_MAX_RESP_TWT_DIALOG_ID 1 40 41 #ifdef WLAN_SUPPORT_TWT 42 /** 43 * struct twt_infra_cp_stats_event - TWT statistics event structure 44 * @vdev_id: virtual interface id 45 * @peer_mac_addr: peer mac address corresponding to a TWT session 46 * @dialog_id: Represents dialog_id of the TWT session 47 * @num_sp_cycles: Number of TWT service period elapsed so far 48 * @avg_sp_dur_us: Average of actual wake duration observed so far 49 * @min_sp_dur_us: Minimum value of wake duration observed across 50 * @max_sp_dur_us: Maximum value of wake duration observed 51 * @tx_mpdu_per_sp: Average number of MPDU's transmitted successfully 52 * @rx_mpdu_per_sp: Average number of MPDU's received successfully 53 * @tx_bytes_per_sp: Average number of bytes transmitted successfully 54 * @rx_bytes_per_sp: Average number of bytes received successfully 55 */ 56 struct twt_infra_cp_stats_event { 57 uint8_t vdev_id; 58 struct qdf_mac_addr peer_macaddr; 59 uint32_t dialog_id; 60 uint32_t status; 61 uint32_t num_sp_cycles; 62 uint32_t avg_sp_dur_us; 63 uint32_t min_sp_dur_us; 64 uint32_t max_sp_dur_us; 65 uint32_t tx_mpdu_per_sp; 66 uint32_t rx_mpdu_per_sp; 67 uint32_t tx_bytes_per_sp; 68 uint32_t rx_bytes_per_sp; 69 }; 70 #endif /* WLAN_SUPPORT_TWT */ 71 72 #ifdef CONFIG_WLAN_BMISS 73 /** 74 * struct bmiss_stats_rssi_samples - bmiss rssi samples structure 75 * @rssi: dBm units 76 * @sample_time: timestamp from host/target shared qtimer 77 */ 78 struct bmiss_stats_rssi_samples { 79 int32_t rssi; 80 uint32_t sample_time; 81 }; 82 83 /** 84 * struct consecutive_bmiss_stats - consecutive bmiss sats structure 85 * @num_of_bmiss_sequences:number of consecutive bmiss > 2 86 * @num_bitmask_wraparound:number of times bitmask wrapped around 87 * @num_bcn_hist_lost:number of beacons history we have lost 88 */ 89 struct consecutive_bmiss_stats { 90 uint32_t num_of_bmiss_sequences; 91 uint32_t num_bitmask_wraparound; 92 uint32_t num_bcn_hist_lost; 93 }; 94 95 #define BMISS_STATS_RSSI_SAMPLES_MAX 10 96 /** 97 * struct bmiss_infra_cp_stats_event - bmiss statistics event structure 98 * @vdev_id: virtual interface id 99 * @peer_mac_addr: peer mac address 100 * @num_pre_bmiss: number of pre_bmiss 101 * @rssi_samples: Rssi samples at pre bmiss 102 * @rssi_sample_curr_index: current index of Rssi sampelse at pre bmiss 103 * @num_first_bmiss: number of first bmiss 104 * @num_final_bmiss: number of final bmiss 105 * @num_null_sent_in_first_bmiss: number of null frames sent in first bmiss 106 * @num_null_failed_in_first_bmiss: number of failed null frames in first bmiss 107 * @num_null_sent_in_final_bmiss: number of null frames sent in final bmiss 108 * @num_null_failed_in_final_bmiss: number of failed null frames in final bmiss 109 * @cons_bmiss_stats: consecutive bmiss status 110 */ 111 struct bmiss_infra_cp_stats_event { 112 uint8_t vdev_id; 113 struct qdf_mac_addr peer_macaddr; 114 uint32_t num_pre_bmiss; 115 struct bmiss_stats_rssi_samples rssi_samples[BMISS_STATS_RSSI_SAMPLES_MAX]; 116 uint32_t rssi_sample_curr_index; 117 uint32_t num_first_bmiss; 118 uint32_t num_final_bmiss; 119 uint32_t num_null_sent_in_first_bmiss; 120 uint32_t num_null_failed_in_first_bmiss; 121 uint32_t num_null_sent_in_final_bmiss; 122 uint32_t num_null_failed_in_final_bmiss; 123 struct consecutive_bmiss_stats cons_bmiss_stats; 124 }; 125 #endif /* CONFIG_WLAN_BMISS */ 126 /** 127 * struct infra_cp_stats_event - Event structure to store stats 128 * @action: action for which this response was received 129 * (get/reset/start/stop) 130 * @request_id: request cookie sent to Firmware in the command 131 * @status: status of the infra_cp_stats command processing 132 * @num_twt_infra_cp_stats: number of twt_infra_cp_stats buffers 133 * available 134 * @twt_infra_cp_stats: pointer to TWT session statistics structures 135 * 136 * This structure is used to store the statistics information 137 * extracted from firmware event(wmi_pdev_cp_fwstats_eventid) 138 */ 139 struct infra_cp_stats_event { 140 uint32_t action; 141 uint32_t request_id; 142 uint32_t status; 143 #ifdef WLAN_SUPPORT_TWT 144 uint32_t num_twt_infra_cp_stats; 145 struct twt_infra_cp_stats_event *twt_infra_cp_stats; 146 #endif 147 #ifdef CONFIG_WLAN_BMISS 148 struct bmiss_infra_cp_stats_event *bmiss_infra_cp_stats; 149 #endif 150 /* Extend with other required infra_cp_stats structs */ 151 }; 152 153 enum infra_cp_stats_action { 154 ACTION_REQ_CTRL_PATH_STAT_GET = 0, 155 ACTION_REQ_CTRL_PATH_STAT_RESET, 156 ACTION_REQ_CTRL_PATH_STAT_START, 157 ACTION_REQ_CTRL_PATH_STAT_STOP, 158 }; 159 160 enum infra_cp_stats_id { 161 TYPE_REQ_CTRL_PATH_PDEV_TX_STAT = 0, 162 TYPE_REQ_CTRL_PATH_VDEV_EXTD_STAT, 163 TYPE_REQ_CTRL_PATH_MEM_STAT, 164 TYPE_REQ_CTRL_PATH_TWT_STAT, 165 TYPE_REQ_CTRL_PATH_BMISS_STAT, 166 }; 167 168 /** 169 * struct infra_cp_stats_cmd_info - details of infra cp stats request 170 * @stats_id: ID of the statistics type requested 171 * @action: action to be performed (get/reset/start/stop) 172 * @request_cookie: osif request cookie 173 * @request_id: request id cookie to FW 174 * @num_pdev_ids: number of pdev ids in the request 175 * @pdev_id: array of pdev_ids 176 * @num_vdev_ids: number of vdev ids in the request 177 * @vdev_id: array of vdev_ids 178 * @num_mac_addr_list: number of mac addresses in the request 179 * @peer_mac_addr: array of mac addresses 180 * @dialog_id: This is a TWT specific field. only one dialog_id 181 * can be specified for TWT stats. 0 to 254 are 182 * valid dialog_id's representing a single TWT session. 183 * 255 represents all twt sessions 184 * @infra_cp_stats_resp_cb: callback function to handle the response 185 */ 186 struct infra_cp_stats_cmd_info { 187 enum infra_cp_stats_id stats_id; 188 enum infra_cp_stats_action action; 189 void *request_cookie; 190 uint32_t request_id; 191 uint32_t num_pdev_ids; 192 uint32_t pdev_id[CTRL_PATH_STATS_MAX_PDEV_ID]; 193 uint32_t num_vdev_ids; 194 uint32_t vdev_id[CTRL_PATH_STATS_MAX_VDEV_ID]; 195 uint32_t num_mac_addr_list; 196 uint8_t peer_mac_addr[CTRL_PATH_STATS_MAX_MAC_ADDR][QDF_MAC_ADDR_SIZE]; 197 #ifdef WLAN_SUPPORT_TWT 198 uint32_t dialog_id; 199 #endif 200 void (*infra_cp_stats_resp_cb)(struct infra_cp_stats_event *ev, 201 void *cookie); 202 }; 203 #endif 204