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