1 /* 2 * Copyright (c) 2013-2019, 2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2021 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 * DOC: Roaming debug log operations declarations 21 */ 22 #ifndef _WLAN_ROAM_DEBUG_H_ 23 #define _WLAN_ROAM_DEBUG_H_ 24 25 #define roam_debug(args ...) \ 26 QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_ROAM_DEBUG, ## args) 27 #define roam_info(args ...) \ 28 QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_ROAM_DEBUG, ## args) 29 30 #define wlan_rec_conn_info(vdev_id, op, mac_addr, arg1, arg2) \ 31 wlan_rec_debug_log(REC_CONN, vdev_id, op, 0, mac_addr, 0, arg1,\ 32 arg2) 33 34 #ifndef WLAN_ROAM_DEBUG_MAX_REC 35 #define WLAN_ROAM_DEBUG_MAX_REC 128 36 #endif 37 38 typedef enum { 39 REC_ROAM, 40 REC_CONN, 41 REC_MAX, 42 } wlan_rec_type; 43 44 /** 45 * @DEBUG_PEER_CREATE_SEND: sent peer_create command to firmware 46 * @DEBUG_PEER_CREATE_RESP: received peer create response 47 * @DEBUG_PEER_DELETE_SEND: sent peer delete command to firmware 48 * @DEBUG_PEER_DELETE_RESP: received peer delete response 49 * @DEBUG_PEER_MAP_EVENT: received peer map event 50 * @DEBUG_PEER_UNMAP_EVENT: received peer unmap event 51 * @DEBUG_PEER_UNREF_DELETE: peer reference is decremented 52 * @DEBUG_DELETING_PEER_OBJ: peer object is deleted 53 * @DEBUG_ROAM_SYNCH_IND: received roam offload sync indication 54 * @DEBUG_ROAM_SYNCH_CNF: sent roam offload sync confirmation 55 * @DEBUG_ROAM_SYNCH_FAIL: received roam sync failure indication 56 * @DEBUG_ROAM_EVENT: received roam event 57 * @DEBUG_BUS_SUSPEND: host going into suspend mode 58 * @DEBUG_BUS_RESUME: host operation resumed 59 * @DEBUG_CONN_CONNECTING: trace connecting to bssid 60 * @DEBUG_CONN_ASSOCIATION: trace association completion 61 * @DEBUG_CONN_CONNECT_RESULT: trace connect result to os 62 * @DEBUG_CONN_ROAMING: trace station roaming propagtion 63 * @DEBUG_CONN_ROAMED: trace roamed to bssid 64 * @DEBUG_CONN_ROAMED_IND: trace roam indication 65 * @DEBUG_CONN_DISCONNECT: trace station disconnect 66 * @DEBUG_CONN_DISCONNECT_HANDLER: trace disconnect handler 67 * @DEBUG_CONN_DISCONNECT_IND: trace disconnect indication 68 * @DEBUG_CONN_RSO: trace RSO state changing 69 */ 70 enum peer_debug_op { 71 DEBUG_PEER_CREATE_SEND = 0, 72 DEBUG_PEER_CREATE_RESP, 73 DEBUG_PEER_DELETE_SEND, 74 DEBUG_PEER_DELETE_RESP, 75 DEBUG_PEER_MAP_EVENT, 76 DEBUG_PEER_UNMAP_EVENT, 77 DEBUG_PEER_UNREF_DELETE, 78 DEBUG_DELETING_PEER_OBJ, 79 DEBUG_ROAM_SYNCH_IND, 80 DEBUG_ROAM_SYNCH_CNF, 81 DEBUG_ROAM_SYNCH_FAIL, 82 DEBUG_ROAM_EVENT, 83 DEBUG_WOW_ROAM_EVENT, 84 DEBUG_BUS_SUSPEND, 85 DEBUG_BUS_RESUME, 86 DEBUG_WOW_REASON, 87 DEBUG_CONN_CONNECTING, 88 DEBUG_CONN_ASSOCIATION, 89 DEBUG_CONN_CONNECT_RESULT, 90 DEBUG_CONN_ROAMING, 91 DEBUG_CONN_ROAMED, 92 DEBUG_CONN_ROAMED_IND, 93 DEBUG_CONN_DISCONNECT, 94 DEBUG_CONN_DISCONNECT_HANDLER, 95 DEBUG_CONN_DISCONNECT_IND, 96 DEBUG_CONN_RSO, 97 }; 98 99 /** 100 * struct wlan_roam_debug_rec - roam debug information record definition 101 * @time: timestamp when record was added 102 * @operation: identifier for operation, command, event, etc. 103 * @vdev_id: vdev identifier 104 * @peer_id: peer_id. Range 0 - 255, 0xffff is invalid peer_id. 105 * @mac_addr: mac address of peer 106 * @peer_obj: pointer to peer object 107 * @arg1: Optional argument #1 108 * @arg2: Opttional argument #2 109 */ 110 struct wlan_roam_debug_rec { 111 uint64_t time; 112 enum peer_debug_op operation; 113 uint8_t vdev_id; 114 uint16_t peer_id; 115 struct qdf_mac_addr mac_addr; 116 void *peer_obj; 117 uint32_t arg1; 118 uint32_t arg2; 119 }; 120 121 /** 122 * struct wlan_roam_debug_info - Buffer to store the wma debug records 123 * @index: index of the most recent entry in the circular buffer 124 * @num_max_rec: maximum records stored in the records array 125 * @rec: array to store wma debug records, used in circular fashion 126 */ 127 struct wlan_roam_debug_info { 128 qdf_atomic_t index; 129 uint32_t num_max_rec; 130 void (*rec_print)(struct wlan_roam_debug_rec *dbg_rec, 131 uint32_t idx, uint32_t delta, 132 bool to_kernel); 133 struct wlan_roam_debug_rec rec[WLAN_ROAM_DEBUG_MAX_REC]; 134 }; 135 136 #define DEBUG_INVALID_PEER_ID 0xffff 137 #define DEBUG_INVALID_VDEV_ID 0xff 138 139 #ifdef FEATURE_ROAM_DEBUG 140 /** 141 * wlan_roam_debug_log() - Add a debug log entry to wlan roam debug records 142 * @vdev_id: vdev identifier 143 * @op: operation identifier 144 * @peer_id: peer id 145 * @mac_addr: mac address of peer, can be NULL 146 * @peer_obj: peer object address, can be NULL 147 * @arg1: extra argument #1 148 * @arg2: extra argument #2 149 * 150 * Return: none 151 */ 152 void wlan_roam_debug_log(uint8_t vdev_id, uint8_t op, 153 uint16_t peer_id, void *mac_addr, 154 void *peer_obj, uint32_t arg1, uint32_t arg2); 155 /** 156 * wlan_rec_debug_log() - Add a debug log entry to wlan debug records 157 * @rec_type: record type 158 * @vdev_id: vdev identifier 159 * @op: operation identifier 160 * @peer_id: peer id 161 * @mac_addr: mac address of peer, can be NULL 162 * @peer_obj: peer object address, can be NULL 163 * @arg1: extra argument #1 164 * @arg2: extra argument #2 165 * 166 * Return: none 167 */ 168 void wlan_rec_debug_log(wlan_rec_type rec_type, uint8_t vdev_id, uint8_t op, 169 uint16_t peer_id, const void *mac_addr, 170 void *peer_obj, uint32_t arg1, uint32_t arg2); 171 172 /** 173 * wlan_roam_debug_dump_table() - Print the roam debug log records 174 * print all the valid debug records in the order of timestamp 175 * 176 * Return: none 177 */ 178 void wlan_roam_debug_dump_table(void); 179 180 /** 181 * wlan_rec_debug_dump_table() - Print the wlan roam debug log records 182 * @rec_type: recorad type 183 * @count: count of records to print 184 * @to_kernel: print to kernel or not 185 * 186 * print all the valid debug records in the order of timestamp 187 * 188 * Return: none 189 */ 190 void wlan_rec_debug_dump_table(wlan_rec_type rec_type, uint32_t count, 191 bool to_kernel); 192 193 #ifdef WLAN_LOGGING_BUFFERS_DYNAMICALLY 194 /** 195 * wlan_roam_debug_init() - Allocate log buffer dynamically 196 * 197 * Return: none 198 */ 199 void wlan_roam_debug_init(void); 200 /** 201 * wlan_roam_debug_deinit() - Free log buffer allocated dynamically 202 * 203 * Return: none 204 */ 205 void wlan_roam_debug_deinit(void); 206 #else /* WLAN_LOGGING_BUFFERS_DYNAMICALLY */ 207 static inline void wlan_roam_debug_init(void) 208 { 209 } 210 211 static inline void wlan_roam_debug_deinit(void) 212 { 213 } 214 #endif /* WLAN_LOGGING_BUFFERS_DYNAMICALLY */ 215 216 #else /* FEATURE_ROAM_DEBUG */ 217 static inline void 218 wlan_roam_debug_log(uint8_t vdev_id, uint8_t op, 219 uint16_t peer_id, void *mac_addr, 220 void *peer_obj, uint32_t arg1, uint32_t arg2) 221 { 222 } 223 224 static inline void wlan_rec_debug_log( 225 wlan_rec_type rec_type, uint8_t vdev_id, uint8_t op, 226 uint16_t peer_id, const void *mac_addr, 227 void *peer_obj, uint32_t arg1, uint32_t arg2) 228 { 229 } 230 231 static inline void wlan_roam_debug_dump_table(void) 232 { 233 } 234 235 static inline void wlan_rec_debug_dump_table(wlan_rec_type rec_type, 236 uint32_t count, 237 bool to_kernel) 238 { 239 } 240 241 static inline void wlan_roam_debug_init(void) 242 { 243 } 244 245 static inline void wlan_roam_debug_deinit(void) 246 { 247 } 248 #endif /* FEATURE_ROAM_DEBUG */ 249 250 #endif /* _WLAN_ROAM_DEBUG_H_ */ 251