1 /* 2 * Copyright (c) 2011-2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2021-2024 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: cdp_txrx_cmn_struct.h 22 * Define the host data path converged API functions 23 * called by the host control SW and the OS interface module 24 */ 25 #ifndef _CDP_TXRX_CMN_STRUCT_H_ 26 #define _CDP_TXRX_CMN_STRUCT_H_ 27 28 /* 29 * For WIN legacy header compilation 30 * Temporary add dummy definitions 31 * should be removed properly WIN legacy code handle 32 */ 33 34 #include "htc_api.h" 35 #include "qdf_types.h" 36 #include "qdf_nbuf.h" 37 #include "qdf_atomic.h" 38 #ifdef DP_MOB_DEFS 39 #include <cdp_txrx_mob_def.h> 40 #endif 41 #include <cdp_txrx_handle.h> 42 #include <cdp_txrx_stats_struct.h> 43 #ifdef WLAN_RX_PKT_CAPTURE_ENH 44 #include "cdp_txrx_extd_struct.h" 45 #endif 46 #ifdef WLAN_FEATURE_TX_LATENCY_STATS 47 #include "qdf_list.h" 48 #endif 49 50 #ifdef WLAN_MAX_CLIENTS_ALLOWED 51 #define OL_TXRX_NUM_LOCAL_PEER_IDS (WLAN_MAX_CLIENTS_ALLOWED + 1 + 1 + 1) 52 #endif 53 54 #ifndef OL_TXRX_NUM_LOCAL_PEER_IDS 55 /* 56 * Each AP will occupy one ID, so it will occupy two IDs for AP-AP mode. 57 * Clients will be assigned max 32 IDs. 58 * STA(associated)/P2P DEV(self-PEER) will get one ID. 59 */ 60 #define OL_TXRX_NUM_LOCAL_PEER_IDS (32 + 1 + 1 + 1) 61 #endif 62 63 #define CDP_BA_256_BIT_MAP_SIZE_DWORDS 8 64 #define CDP_BA_64_BIT_MAP_SIZE_DWORDS 2 65 66 #define OL_TXRX_INVALID_PDEV_ID 0xff 67 #define OL_TXRX_INVALID_LOCAL_PEER_ID 0xffff 68 #define CDP_INVALID_VDEV_ID 0xff 69 70 /* Max vdev_stats_id(48) is as per the max vdevs supported by HW */ 71 #define CDP_MAX_VDEV_STATS_ID 0x30 72 /* Invalid vdev_stats_id */ 73 #define CDP_INVALID_VDEV_STATS_ID 0xFF 74 75 /* METADATA used for wakeup triggers, specifically for Standby modes */ 76 #define CDP_STANDBY_METADATA 5588 77 78 /* Options for Dump Statistics */ 79 #define CDP_HDD_STATS 0 80 #define CDP_TXRX_PATH_STATS 1 81 #define CDP_TXRX_HIST_STATS 2 82 #define CDP_TXRX_TSO_STATS 3 83 #define CDP_HDD_NETIF_OPER_HISTORY 4 84 #define CDP_DUMP_TX_FLOW_POOL_INFO 5 85 #define CDP_TXRX_DESC_STATS 6 86 #define CDP_HIF_STATS 7 87 #define CDP_LRO_STATS 8 88 #define CDP_NAPI_STATS 9 89 #define CDP_WLAN_RX_BUF_DEBUG_STATS 10 90 #define CDP_RX_RING_STATS 11 91 #define CDP_DP_NAPI_STATS 12 92 #define CDP_DP_RX_THREAD_STATS 13 93 #define CDP_SCHEDULER_STATS 21 94 #define CDP_TX_QUEUE_STATS 22 95 #define CDP_BUNDLE_STATS 23 96 #define CDP_CREDIT_STATS 24 97 #define CDP_DISCONNECT_STATS 25 98 #define CDP_DP_RX_FISA_STATS 26 99 #define CDP_DP_SWLM_STATS 27 100 #define CDP_DP_TX_HW_LATENCY_STATS 28 101 102 #define WME_AC_TO_TID(_ac) ( \ 103 ((_ac) == WME_AC_VO) ? 6 : \ 104 ((_ac) == WME_AC_VI) ? 5 : \ 105 ((_ac) == WME_AC_BK) ? 1 : \ 106 0) 107 108 #define TID_TO_WME_AC(_tid) ( \ 109 (((_tid) == 0) || ((_tid) == 3)) ? WME_AC_BE : \ 110 (((_tid) == 1) || ((_tid) == 2)) ? WME_AC_BK : \ 111 (((_tid) == 4) || ((_tid) == 5)) ? WME_AC_VI : \ 112 WME_AC_VO) 113 114 #define CDP_MU_MAX_USERS 37 115 #define CDP_MU_MAX_USER_INDEX (CDP_MU_MAX_USERS - 1) 116 #define CDP_INVALID_PEER 0xffff 117 #define CDP_INVALID_TID 31 118 #define CDP_INVALID_TX_ENCAP_TYPE 6 119 #define CDP_INVALID_SEC_TYPE 12 120 121 #define CDP_DATA_TID_MAX 8 122 #define CDP_DATA_NON_QOS_TID 16 123 124 #define CDP_NUM_SA_BW 4 125 /* Smart Antenna 320MHz BW Phy MAX Rate Code Index */ 126 #define CDP_SA_BW320_INX 4 127 #define CDP_PERCENT_MACRO 100 128 #define CDP_NUM_KB_IN_MB 1000 129 /* 130 * advance rx monitor filter 131 */ 132 #define MON_FILTER_PASS 0x0001 133 #define MON_FILTER_OTHER 0x0002 134 #define MON_FILTER_ALL 0x0003 135 136 #define FILTER_MGMT_ALL 0xFFFF 137 #define FILTER_MGMT_ASSOC_REQ 0x0001 138 #define FILTER_MGMT_ASSOC_RES 0x0002 139 #define FILTER_MGMT_REASSOC_REQ 0x0004 140 #define FILTER_MGMT_REASSOC_RES 0x0008 141 #define FILTER_MGMT_PROBE_REQ 0x0010 142 #define FILTER_MGMT_PROBE_RES 0x0020 143 #define FILTER_MGMT_TIM_ADVT 0x0040 144 #define FILTER_MGMT_RESERVED_7 0x0080 145 #define FILTER_MGMT_BEACON 0x0100 146 #define FILTER_MGMT_ATIM 0x0200 147 #define FILTER_MGMT_DISASSOC 0x0400 148 #define FILTER_MGMT_AUTH 0x0800 149 #define FILTER_MGMT_DEAUTH 0x1000 150 #define FILTER_MGMT_ACTION 0x2000 151 #define FILTER_MGMT_ACT_NO_ACK 0x4000 152 #define FILTER_MGMT_RESERVED_15 0x8000 153 154 #define FILTER_CTRL_ALL 0xFFFF 155 #define FILTER_CTRL_RESERVED_1 0x0001 156 #define FILTER_CTRL_RESERVED_2 0x0002 157 #define FILTER_CTRL_TRIGGER 0x0004 158 #define FILTER_CTRL_RESERVED_4 0x0008 159 #define FILTER_CTRL_BF_REP_POLL 0x0010 160 #define FILTER_CTRL_VHT_NDP 0x0020 161 #define FILTER_CTRL_FRAME_EXT 0x0040 162 #define FILTER_CTRL_CTRLWRAP 0x0080 163 #define FILTER_CTRL_BA_REQ 0x0100 164 #define FILTER_CTRL_BA 0x0200 165 #define FILTER_CTRL_PSPOLL 0x0400 166 #define FILTER_CTRL_RTS 0x0800 167 #define FILTER_CTRL_CTS 0x1000 168 #define FILTER_CTRL_ACK 0x2000 169 #define FILTER_CTRL_CFEND 0x4000 170 #define FILTER_CTRL_CFEND_CFACK 0x8000 171 172 #define FILTER_DATA_ALL 0xFFFF 173 #define FILTER_DATA_MCAST 0x4000 174 #define FILTER_DATA_UCAST 0x8000 175 #define FILTER_DATA_DATA 0x0001 176 #define FILTER_DATA_NULL 0x0008 177 178 /* 179 * Multiply rate by 2 to avoid float point 180 * and get rate in units of 500kbps 181 */ 182 #define CDP_11B_RATE_0MCS (11 * 2) 183 #define CDP_11B_RATE_1MCS (5.5 * 2) 184 #define CDP_11B_RATE_2MCS (2 * 2) 185 #define CDP_11B_RATE_3MCS (1 * 2) 186 #define CDP_11B_RATE_4MCS (11 * 2) 187 #define CDP_11B_RATE_5MCS (5.5 * 2) 188 #define CDP_11B_RATE_6MCS (2 * 2) 189 190 #define CDP_11A_RATE_0MCS (48 * 2) 191 #define CDP_11A_RATE_1MCS (24 * 2) 192 #define CDP_11A_RATE_2MCS (12 * 2) 193 #define CDP_11A_RATE_3MCS (6 * 2) 194 #define CDP_11A_RATE_4MCS (54 * 2) 195 #define CDP_11A_RATE_5MCS (36 * 2) 196 #define CDP_11A_RATE_6MCS (18 * 2) 197 #define CDP_11A_RATE_7MCS (9 * 2) 198 199 #define CDP_LEGACY_MCS0 0 200 #define CDP_LEGACY_MCS1 1 201 #define CDP_LEGACY_MCS2 2 202 #define CDP_LEGACY_MCS3 3 203 #define CDP_LEGACY_MCS4 4 204 #define CDP_LEGACY_MCS5 5 205 #define CDP_LEGACY_MCS6 6 206 #define CDP_LEGACY_MCS7 7 207 208 QDF_DECLARE_EWMA(tx_lag, 1024, 8) 209 struct cdp_stats_cookie; 210 211 /** 212 * enum cdp_cfg_param_type - DP configuration parameters 213 * @CDP_CFG_MAX_PEER_ID: Maximum peer id 214 * @CDP_CFG_CCE_DISABLE: CCE disable 215 * @CDP_CFG_MLD_NETDEV_MODE_AP: Ap's mld netdev model 216 * @CDP_CFG_NUM_PARAMS: Total number of params 217 */ 218 enum cdp_cfg_param_type { 219 CDP_CFG_MAX_PEER_ID, 220 CDP_CFG_CCE_DISABLE, 221 CDP_CFG_MLD_NETDEV_MODE_AP, 222 CDP_CFG_NUM_PARAMS 223 }; 224 225 /** 226 * enum CDP_PPDU_STATS_PPDU_TYPE - PPDU TYPE from FW 227 * @CDP_PPDU_STATS_PPDU_TYPE_SU: single user type 228 * @CDP_PPDU_STATS_PPDU_TYPE_MU_MIMO: multi user mu-mimo 229 * @CDP_PPDU_STATS_PPDU_TYPE_MU_OFDMA: multi user ofdma 230 * @CDP_PPDU_STATS_PPDU_TYPE_MU_MIMO_OFDMA: multi user mu-mimo ofdma 231 * @CDP_PPDU_STATS_PPDU_TYPE_UL_TRIG: ul trigger ppdu 232 * @CDP_PPDU_STATS_PPDU_TYPE_BURST_BCN: burst beacon 233 * @CDP_PPDU_STATS_PPDU_TYPE_UL_BSR_RESP: bsr respond 234 * @CDP_PPDU_STATS_PPDU_TYPE_UL_BSR_TRIG: bsr trigger 235 * @CDP_PPDU_STATS_PPDU_TYPE_UL_RESP: ul response 236 * @CDP_PPDU_STATS_PPDU_TYPE_UNKNOWN: unknown 237 */ 238 enum CDP_PPDU_STATS_PPDU_TYPE { 239 CDP_PPDU_STATS_PPDU_TYPE_SU = 0, 240 CDP_PPDU_STATS_PPDU_TYPE_MU_MIMO = 1, 241 CDP_PPDU_STATS_PPDU_TYPE_MU_OFDMA = 2, 242 CDP_PPDU_STATS_PPDU_TYPE_MU_MIMO_OFDMA = 4, 243 CDP_PPDU_STATS_PPDU_TYPE_UL_TRIG = 5, 244 CDP_PPDU_STATS_PPDU_TYPE_BURST_BCN = 6, 245 CDP_PPDU_STATS_PPDU_TYPE_UL_BSR_RESP = 7, 246 CDP_PPDU_STATS_PPDU_TYPE_UL_BSR_TRIG = 8, 247 CDP_PPDU_STATS_PPDU_TYPE_UL_RESP = 9, 248 CDP_PPDU_STATS_PPDU_TYPE_UNKNOWN = 0x1F, 249 }; 250 251 /** 252 * enum htt_cmn_dbg_stats_type - 253 * bit positions for each stats type within a stats type bitmask 254 * The bitmask contains 24 bits. 255 * @HTT_DBG_CMN_STATS_WAL_PDEV_TXRX: 256 * @HTT_DBG_CMN_STATS_RX_REORDER: 257 * @HTT_DBG_CMN_STATS_RX_RATE_INFO: 258 * @HTT_DBG_CMN_STATS_TX_PPDU_LOG: 259 * @HTT_DBG_CMN_STATS_TX_RATE_INFO: 260 * @HTT_DBG_CMN_STATS_TIDQ: 261 * @HTT_DBG_CMN_STATS_TXBF_INFO: 262 * @HTT_DBG_CMN_STATS_SND_INFO: 263 * @HTT_DBG_CMN_STATS_ERROR_INFO: 264 * @HTT_DBG_CMN_STATS_TX_SELFGEN_INFO: 265 * @HTT_DBG_CMN_STATS_TX_MU_INFO: 266 * @HTT_DBG_CMN_STATS_SIFS_RESP_INFO: 267 * @HTT_DBG_CMN_STATS_RESET_INFO: 268 * @HTT_DBG_CMN_STATS_MAC_WDOG_INFO: 269 * @HTT_DBG_CMN_STATS_TX_DESC_INFO: 270 * @HTT_DBG_CMN_STATS_TX_FETCH_MGR_INFO: 271 * @HTT_DBG_CMN_STATS_TX_PFSCHED_INFO: 272 * @HTT_DBG_CMN_STATS_TX_PATH_STATS_INFO: 273 * @HTT_DBG_CMN_NUM_STATS: 274 * @HTT_DBG_CMN_NUM_STATS_INVALID: 275 */ 276 enum htt_cmn_dbg_stats_type { 277 HTT_DBG_CMN_STATS_WAL_PDEV_TXRX = 0, /* bit 0 -> 0x1 */ 278 HTT_DBG_CMN_STATS_RX_REORDER = 1, /* bit 1 -> 0x2 */ 279 HTT_DBG_CMN_STATS_RX_RATE_INFO = 2, /* bit 2 -> 0x4 */ 280 HTT_DBG_CMN_STATS_TX_PPDU_LOG = 3, /* bit 3 -> 0x8 */ 281 HTT_DBG_CMN_STATS_TX_RATE_INFO = 4, /* bit 4 -> 0x10 */ 282 HTT_DBG_CMN_STATS_TIDQ = 5, /* bit 5 -> 0x20 */ 283 HTT_DBG_CMN_STATS_TXBF_INFO = 6, /* bit 6 -> 0x40 */ 284 HTT_DBG_CMN_STATS_SND_INFO = 7, /* bit 7 -> 0x80 */ 285 HTT_DBG_CMN_STATS_ERROR_INFO = 8, /* bit 8 -> 0x100 */ 286 HTT_DBG_CMN_STATS_TX_SELFGEN_INFO = 9, /* bit 9 -> 0x200 */ 287 HTT_DBG_CMN_STATS_TX_MU_INFO = 10, /* bit 10 -> 0x400 */ 288 HTT_DBG_CMN_STATS_SIFS_RESP_INFO = 11, /* bit 11 -> 0x800 */ 289 HTT_DBG_CMN_STATS_RESET_INFO = 12, /* bit 12 -> 0x1000 */ 290 HTT_DBG_CMN_STATS_MAC_WDOG_INFO = 13, /* bit 13 -> 0x2000 */ 291 HTT_DBG_CMN_STATS_TX_DESC_INFO = 14, /* bit 14 -> 0x4000 */ 292 HTT_DBG_CMN_STATS_TX_FETCH_MGR_INFO = 15, /* bit 15 -> 0x8000 */ 293 HTT_DBG_CMN_STATS_TX_PFSCHED_INFO = 16, /* bit 16 -> 0x10000 */ 294 HTT_DBG_CMN_STATS_TX_PATH_STATS_INFO = 17, /* bit 17 -> 0x20000 */ 295 /* bits 18-23 currently reserved */ 296 297 /* keep this last */ 298 HTT_DBG_CMN_NUM_STATS, 299 HTT_DBG_CMN_NUM_STATS_INVALID = 31, /* bit 31 -> 0x80000000 */ 300 }; 301 302 /** 303 * enum cdp_host_txrx_stats - Different types of host stats 304 * @TXRX_HOST_STATS_INVALID: Invalid option 305 * @TXRX_CLEAR_STATS: clear all host stats 306 * @TXRX_RX_RATE_STATS: Rx rate info 307 * @TXRX_TX_RATE_STATS: Tx rate info 308 * @TXRX_TX_HOST_STATS: Print Tx stats 309 * @TXRX_RX_HOST_STATS: Print host Rx stats 310 * @TXRX_AST_STATS: 311 * @TXRX_SRNG_PTR_STATS: Print SRNG pointer stats 312 * @TXRX_RX_MON_STATS: Print monitor mode stats 313 * @TXRX_REO_QUEUE_STATS: Print Per peer REO Queue Stats 314 * @TXRX_SOC_CFG_PARAMS: Print soc cfg params info 315 * @TXRX_PDEV_CFG_PARAMS: Print pdev cfg params info 316 * @TXRX_NAPI_STATS: Print NAPI scheduling statistics 317 * @TXRX_SOC_INTERRUPT_STATS: Print soc interrupt stats 318 * @TXRX_SOC_FSE_STATS: 319 * @TXRX_HAL_REG_WRITE_STATS: Hal Reg Write stats 320 * @TXRX_SOC_REO_HW_DESC_DUMP: HW REO queue desc dump 321 * @TXRX_SOC_WBM_IDLE_HPTP_DUMP: WBM idle link desc SRNG HP/TP dump 322 * @TXRX_SRNG_USAGE_WM_STATS: SRNG usage watermark stats 323 * @TXRX_PEER_STATS: Per link peer stats 324 * @TXRX_HOST_STATS_MAX: 325 */ 326 enum cdp_host_txrx_stats { 327 TXRX_HOST_STATS_INVALID = -1, 328 TXRX_CLEAR_STATS = 0, 329 TXRX_RX_RATE_STATS = 1, 330 TXRX_TX_RATE_STATS = 2, 331 TXRX_TX_HOST_STATS = 3, 332 TXRX_RX_HOST_STATS = 4, 333 TXRX_AST_STATS = 5, 334 TXRX_SRNG_PTR_STATS = 6, 335 TXRX_RX_MON_STATS = 7, 336 TXRX_REO_QUEUE_STATS = 8, 337 TXRX_SOC_CFG_PARAMS = 9, 338 TXRX_PDEV_CFG_PARAMS = 10, 339 TXRX_NAPI_STATS = 11, 340 TXRX_SOC_INTERRUPT_STATS = 12, 341 TXRX_SOC_FSE_STATS = 13, 342 TXRX_HAL_REG_WRITE_STATS = 14, 343 TXRX_SOC_REO_HW_DESC_DUMP = 15, 344 TXRX_SOC_WBM_IDLE_HPTP_DUMP = 16, 345 TXRX_SRNG_USAGE_WM_STATS = 17, 346 TXRX_PEER_STATS = 18, 347 TXRX_HOST_STATS_MAX, 348 }; 349 350 /** 351 * enum cdp_ppdu_ftype - PPDU Frame Type 352 * @CDP_PPDU_FTYPE_DATA: SU or MU Data Frame 353 * @CDP_PPDU_FTYPE_CTRL: Control/Management Frames 354 * @CDP_PPDU_FTYPE_BAR: SU or MU BAR frames 355 * @CDP_PPDU_FTYPE_MAX: Max value 356 */ 357 enum cdp_ppdu_ftype { 358 CDP_PPDU_FTYPE_CTRL, 359 CDP_PPDU_FTYPE_DATA, 360 CDP_PPDU_FTYPE_BAR, 361 CDP_PPDU_FTYPE_MAX 362 }; 363 364 365 /** 366 * enum htt_cmn_pkt_type - General specification of the tx frame contents 367 * @htt_cmn_pkt_type_raw: raw 368 * @htt_cmn_pkt_type_native_wifi: native wifi 369 * @htt_cmn_pkt_type_ethernet: ethernet 370 * @htt_cmn_pkt_type_mgmt: management 371 * @htt_cmn_pkt_type_eth2: ethernet2 372 * @htt_cmn_pkt_num_types: number of packet types 373 * 374 * for efficiency, the HTT packet type values correspond 375 * to the bit positions of the WAL packet type values, so the 376 * translation is a simple shift operation. 377 */ 378 enum htt_cmn_pkt_type { 379 htt_cmn_pkt_type_raw = 0, 380 htt_cmn_pkt_type_native_wifi = 1, 381 htt_cmn_pkt_type_ethernet = 2, 382 htt_cmn_pkt_type_mgmt = 3, 383 htt_cmn_pkt_type_eth2 = 4, 384 385 /* keep this last */ 386 htt_cmn_pkt_num_types 387 }; 388 389 /** 390 * enum htt_cmn_rx_status - description of HTT received packets status 391 * @htt_cmn_rx_status_unknown: 392 * @htt_cmn_rx_status_ok: 393 * @htt_cmn_rx_status_err_fcs: 394 * @htt_cmn_rx_status_err_dup: 395 * @htt_cmn_rx_status_err_replay: 396 * @htt_cmn_rx_status_inv_peer: 397 * @htt_cmn_rx_status_ctrl_mgmt_null: 398 * @htt_cmn_rx_status_tkip_mic_err: 399 * @htt_cmn_rx_status_decrypt_err: 400 * @htt_cmn_rx_status_mpdu_length_err: 401 * @htt_cmn_rx_status_err_misc: 402 * 403 * It is similar to htt_rx_status enum 404 * but is added as a cdp enum can be freely used in OL_IF layer 405 */ 406 enum htt_cmn_rx_status { 407 htt_cmn_rx_status_unknown = 0x0, 408 htt_cmn_rx_status_ok, 409 htt_cmn_rx_status_err_fcs, 410 htt_cmn_rx_status_err_dup, 411 htt_cmn_rx_status_err_replay, 412 htt_cmn_rx_status_inv_peer, 413 htt_cmn_rx_status_ctrl_mgmt_null = 0x08, 414 htt_cmn_rx_status_tkip_mic_err = 0x09, 415 htt_cmn_rx_status_decrypt_err = 0x0A, 416 htt_cmn_rx_status_mpdu_length_err = 0x0B, 417 htt_cmn_rx_status_err_misc = 0xFF 418 }; 419 420 421 enum cdp_host_reo_dest_ring { 422 cdp_host_reo_dest_ring_unknown = 0, 423 cdp_host_reo_dest_ring_1 = 1, 424 cdp_host_reo_dest_ring_2 = 2, 425 cdp_host_reo_dest_ring_3 = 3, 426 cdp_host_reo_dest_ring_4 = 4, 427 }; 428 429 enum htt_cmn_t2h_en_stats_type { 430 /* keep this always first */ 431 HTT_CMN_T2H_EN_STATS_TYPE_START = 0, 432 433 /** ppdu_common_stats is the payload */ 434 HTT_CMN_T2H_EN_STATS_TYPE_COMMON = 1, 435 /** ppdu_sant_stats is the payload */ 436 HTT_CMN_T2H_EN_STATS_TYPE_SANT = 2, 437 /** ppdu_common_stats_v2 is the payload */ 438 HTT_CMN_T2H_EN_STATS_TYPE_COMMON_V2 = 3, 439 440 /* Keep this last */ 441 HTT_CMN_T2H_EN_STATS_TYPE_END = 0x1f, 442 }; 443 444 enum htt_cmn_t2h_en_stats_status { 445 /* Keep this first always */ 446 HTT_CMN_T2H_EN_STATS_STATUS_PARTIAL = 0, 447 HTT_CMN_T2H_EN_STATS_STATUS_PRESENT = 1, 448 HTT_CMN_T2H_EN_STATS_STATUS_ERROR = 2, 449 HTT_CMN_T2H_EN_STATS_STATUS_INVALID = 3, 450 451 452 /* keep this always last */ 453 HTT_CMN_T2H_EN_STATS_STATUS_SERIES_DONE = 7, 454 }; 455 456 /** 457 * enum cdp_peer_type - Peer type 458 * @CDP_INVALID_PEER_TYPE: invalid peer type 459 * @CDP_LINK_PEER_TYPE: legacy peer or link peer for MLO connection 460 * @CDP_MLD_PEER_TYPE: MLD peer for MLO connection 461 * @CDP_WILD_PEER_TYPE: used to set peer type for same mld/link mac addr 462 */ 463 enum cdp_peer_type { 464 CDP_INVALID_PEER_TYPE, 465 CDP_LINK_PEER_TYPE, 466 CDP_MLD_PEER_TYPE, 467 CDP_WILD_PEER_TYPE, 468 }; 469 470 /** 471 * struct cdp_peer_setup_info - MLO connection info for cdp_peer_setup() 472 * @mld_peer_mac: mld peer mac address pointer 473 * @is_first_link: set true for first MLO link peer 474 * @is_primary_link: set true for MLO primary link peer 475 * @primary_umac_id: primary umac_id 476 * @num_links: number of links in MLO 477 * @is_bridge_peer: flag to indicate if peer is bridge peer or not 478 */ 479 struct cdp_peer_setup_info { 480 uint8_t *mld_peer_mac; 481 uint8_t is_first_link:1, 482 is_primary_link:1; 483 uint8_t primary_umac_id; 484 uint8_t num_links; 485 uint8_t is_bridge_peer; 486 }; 487 488 /** 489 * struct cdp_peer_info - peer info for dp hash find 490 * @vdev_id: Vdev ID 491 * @mac_addr: peer mac address to search 492 * @mac_addr_is_aligned: true only if mac_addr type is 493 * "union dp_align_mac_addr", otherwise set false always. 494 * @peer_type: link or MLD peer type 495 */ 496 struct cdp_peer_info { 497 uint8_t vdev_id; 498 uint8_t *mac_addr; 499 bool mac_addr_is_aligned; 500 enum cdp_peer_type peer_type; 501 }; 502 503 /** 504 * enum ol_txrx_peer_state - Peer state information 505 * @OL_TXRX_PEER_STATE_INVALID: Invalid 506 * @OL_TXRX_PEER_STATE_DISC: disconnected (initial state) 507 * @OL_TXRX_PEER_STATE_CONN: authentication in progress 508 * @OL_TXRX_PEER_STATE_AUTH: authentication successful 509 */ 510 enum ol_txrx_peer_state { 511 OL_TXRX_PEER_STATE_INVALID, 512 OL_TXRX_PEER_STATE_DISC, 513 OL_TXRX_PEER_STATE_CONN, 514 OL_TXRX_PEER_STATE_AUTH, 515 }; 516 517 /** 518 * enum cdp_txrx_ast_entry_type - AST entry type information 519 * @CDP_TXRX_AST_TYPE_NONE: static ast entry for connected peer 520 * @CDP_TXRX_AST_TYPE_STATIC: static ast entry for connected peer 521 * @CDP_TXRX_AST_TYPE_SELF: static ast entry for self peer (STA mode) 522 * @CDP_TXRX_AST_TYPE_WDS: WDS peer ast entry type 523 * @CDP_TXRX_AST_TYPE_WDS_HM: HM WDS entry 524 * @CDP_TXRX_AST_TYPE_STA_BSS: BSS entry(STA mode) 525 * @CDP_TXRX_AST_TYPE_DA: AST entry based on Destination address 526 * @CDP_TXRX_AST_TYPE_WDS_HM_SEC: HM WDS entry for secondary radio 527 * @CDP_TXRX_AST_TYPE_MLD: AST entry type for MLD peer 528 * @CDP_TXRX_AST_TYPE_MAX: 529 */ 530 enum cdp_txrx_ast_entry_type { 531 CDP_TXRX_AST_TYPE_NONE, 532 CDP_TXRX_AST_TYPE_STATIC, 533 CDP_TXRX_AST_TYPE_SELF, 534 CDP_TXRX_AST_TYPE_WDS, 535 CDP_TXRX_AST_TYPE_WDS_HM, 536 CDP_TXRX_AST_TYPE_STA_BSS, 537 CDP_TXRX_AST_TYPE_DA, 538 CDP_TXRX_AST_TYPE_WDS_HM_SEC, 539 CDP_TXRX_AST_TYPE_MLD, 540 CDP_TXRX_AST_TYPE_MAX 541 }; 542 543 /** 544 * enum cdp_ast_free_status - status passed to callback function before 545 * freeing ast 546 * @CDP_TXRX_AST_DELETED: AST is deleted from FW and delete response received 547 * @CDP_TXRX_AST_DELETE_IN_PROGRESS: AST delete command sent to FW and host 548 * is waiting for FW response 549 */ 550 enum cdp_ast_free_status { 551 CDP_TXRX_AST_DELETED, 552 CDP_TXRX_AST_DELETE_IN_PROGRESS, 553 }; 554 555 /** 556 * typedef txrx_ast_free_cb() - callback registered for ast free 557 * @ctrl_soc: control path soc context 558 * @cdp_soc: DP soc context 559 * @cookie: cookie 560 * @cdp_ast_free_status: ast free status 561 */ 562 typedef void (*txrx_ast_free_cb)(struct cdp_ctrl_objmgr_psoc *ctrl_soc, 563 struct cdp_soc *cdp_soc, 564 void *cookie, 565 enum cdp_ast_free_status); 566 567 /** 568 * struct cdp_ast_entry_info - AST entry information 569 * @peer_mac_addr: mac address of peer on which AST entry is added 570 * @type: ast entry type 571 * @vdev_id: vdev_id 572 * @pdev_id: pdev_id 573 * @peer_id: peer_id 574 * 575 * This structure holds the ast entry information 576 * 577 */ 578 struct cdp_ast_entry_info { 579 uint8_t peer_mac_addr[QDF_MAC_ADDR_SIZE]; 580 enum cdp_txrx_ast_entry_type type; 581 uint8_t vdev_id; 582 uint8_t pdev_id; 583 uint16_t peer_id; 584 }; 585 586 #define MIC_SEQ_CTR_SIZE 6 587 588 enum cdp_rx_frame_type { 589 cdp_rx_frame_type_802_11, 590 cdp_rx_frame_type_802_3, 591 }; 592 593 /** 594 * struct cdp_rx_mic_err_info - rx mic error information 595 * @frame_type: frame type - 0 - 802.11 frame 596 * - 1 - 802.3 frame 597 * @data: 802.11 frame 598 * @ta_mac_addr: transmitter mac address 599 * @da_mac_addr: destination mac address 600 * @tsc: sequence number 601 * @key_id: Key ID 602 * @multicast: flag for multicast 603 * @vdev_id: vdev ID 604 * 605 * This structure holds rx mic error information 606 * 607 */ 608 struct cdp_rx_mic_err_info { 609 uint8_t frame_type; 610 uint8_t *data; 611 struct qdf_mac_addr ta_mac_addr; 612 struct qdf_mac_addr da_mac_addr; 613 uint8_t tsc[MIC_SEQ_CTR_SIZE]; 614 uint8_t key_id; 615 bool multicast; 616 uint16_t vdev_id; 617 }; 618 619 #ifdef WLAN_SUPPORT_MSCS 620 /** 621 * struct cdp_mscs_params - MSCS parameters obtained 622 * from handshake 623 * @user_pri_bitmap: User priority bitmap 624 * @user_pri_limit: User priority limit 625 * @classifier_type: TCLAS Classifier type 626 * @classifier_mask: TCLAS Classifier mask 627 */ 628 struct cdp_mscs_params { 629 uint8_t user_pri_bitmap; 630 uint8_t user_pri_limit; 631 uint8_t classifier_type; 632 uint8_t classifier_mask; 633 }; 634 #endif 635 636 /** 637 * struct cdp_ds_vp_params - Direct Switch related params 638 * @dev: Net device 639 * @peer_id: peer id 640 * @ppe_vp_profile_idx: VP profile index in be soc 641 * @wds_ext_mode: flag to indicate wds ext. 642 * @ppe_vp_type: VP type flag. 643 */ 644 struct cdp_ds_vp_params { 645 struct net_device *dev; 646 uint32_t peer_id; 647 int8_t ppe_vp_profile_idx; 648 bool wds_ext_mode; 649 unsigned long ppe_vp_type; 650 }; 651 652 /** 653 * enum cdp_sec_type - security type information 654 * @cdp_sec_type_none: 655 * @cdp_sec_type_wep128: 656 * @cdp_sec_type_wep104: 657 * @cdp_sec_type_wep40: 658 * @cdp_sec_type_tkip: 659 * @cdp_sec_type_tkip_nomic: 660 * @cdp_sec_type_aes_ccmp: 661 * @cdp_sec_type_wapi: 662 * @cdp_sec_type_aes_ccmp_256: 663 * @cdp_sec_type_aes_gcmp: 664 * @cdp_sec_type_aes_gcmp_256: 665 * @cdp_num_sec_types: 666 */ 667 enum cdp_sec_type { 668 cdp_sec_type_none, 669 cdp_sec_type_wep128, 670 cdp_sec_type_wep104, 671 cdp_sec_type_wep40, 672 cdp_sec_type_tkip, 673 cdp_sec_type_tkip_nomic, 674 cdp_sec_type_aes_ccmp, 675 cdp_sec_type_wapi, 676 cdp_sec_type_aes_ccmp_256, 677 cdp_sec_type_aes_gcmp, 678 cdp_sec_type_aes_gcmp_256, 679 680 /* keep this last! */ 681 cdp_num_sec_types 682 }; 683 684 /** 685 * struct cdp_tx_exception_metadata - Exception path parameters 686 * @peer_id: Peer id of the peer 687 * @tid: Transmit Identifier 688 * @tx_encap_type: Transmit encap type (i.e. Raw, Native Wi-Fi, Ethernet) 689 * @sec_type: sec_type to be passed to HAL 690 * @is_tx_sniffer: Indicates if the packet has to be sniffed 691 * @is_intrabss_fwd: 692 * @ppdu_cookie: 16-bit ppdu cookie that has to be replayed back in completions 693 * @is_wds_extended: 694 * @is_mlo_mcast: Indicates if mlo_mcast enable or not 695 * 696 * This structure holds the parameters needed in the exception path of tx 697 * 698 */ 699 struct cdp_tx_exception_metadata { 700 uint16_t peer_id; 701 uint8_t tid; 702 uint16_t tx_encap_type; 703 enum cdp_sec_type sec_type; 704 uint8_t is_tx_sniffer :1, 705 is_intrabss_fwd :1; 706 uint16_t ppdu_cookie; 707 #ifdef QCA_SUPPORT_WDS_EXTENDED 708 uint8_t is_wds_extended; 709 #endif 710 #ifdef WLAN_MCAST_MLO 711 uint8_t is_mlo_mcast; 712 #endif 713 }; 714 715 /** 716 * enum wlan_op_mode - Virtual device operation mode 717 * @wlan_op_mode_unknown: Unknown mode 718 * @wlan_op_mode_ap: AP mode 719 * @wlan_op_mode_ibss: IBSS mode 720 * @wlan_op_mode_sta: STA (client) mode 721 * @wlan_op_mode_monitor: Monitor mode 722 * @wlan_op_mode_ocb: OCB mode 723 * @wlan_op_mode_ndi: NDI mode 724 */ 725 enum wlan_op_mode { 726 wlan_op_mode_unknown, 727 wlan_op_mode_ap, 728 wlan_op_mode_ibss, 729 wlan_op_mode_sta, 730 wlan_op_mode_monitor, 731 wlan_op_mode_ocb, 732 wlan_op_mode_ndi, 733 }; 734 735 /** 736 * enum wlan_op_subtype - Virtual device subtype 737 * @wlan_op_subtype_none: Subtype not applicable 738 * @wlan_op_subtype_p2p_device: P2P device 739 * @wlan_op_subtype_p2p_cli: P2P Client 740 * @wlan_op_subtype_p2p_go: P2P GO 741 * 742 * This enum lists the subtypes of a particular virtual 743 * device. 744 */ 745 enum wlan_op_subtype { 746 wlan_op_subtype_none, 747 wlan_op_subtype_p2p_device, 748 wlan_op_subtype_p2p_cli, 749 wlan_op_subtype_p2p_go, 750 }; 751 752 /** 753 * struct cdp_vdev_info - Vdev information 754 * @vdev_mac_addr: mac address of the vdev 755 * @vdev_id: ID of the vdev 756 * @vdev_stats_id: Stats ID of the vdev 757 * @op_mode: Operation mode of the vdev 758 * @subtype: subtype of the vdev 759 * @qdf_opmode: Operation mode of the vdev 760 * @mld_mac_addr: MLD mac addr of the current vdev. 761 * @is_bridge_vap: current vdev is bridge vap or not. 762 */ 763 struct cdp_vdev_info { 764 uint8_t *vdev_mac_addr; 765 uint8_t vdev_id; 766 uint8_t vdev_stats_id; 767 enum wlan_op_mode op_mode; 768 enum wlan_op_subtype subtype; 769 enum QDF_OPMODE qdf_opmode; 770 #ifdef WLAN_FEATURE_11BE_MLO 771 uint8_t *mld_mac_addr; 772 #ifdef WLAN_MLO_MULTI_CHIP 773 bool is_bridge_vap; 774 #endif 775 #endif 776 }; 777 778 typedef struct cdp_soc_t *ol_txrx_soc_handle; 779 780 /** 781 * typedef ol_txrx_vdev_delete_cb ()- callback registered during vdev detach 782 * @context: 783 */ 784 typedef void (*ol_txrx_vdev_delete_cb)(void *context); 785 786 /** 787 * typedef ol_txrx_peer_unmap_sync_cb() - callback registered during peer 788 * detach sync 789 * @vdev_id: 790 * @peer_id_cnt: 791 * @peer_id_list: 792 */ 793 typedef QDF_STATUS(*ol_txrx_peer_unmap_sync_cb)(uint8_t vdev_id, 794 uint32_t peer_id_cnt, 795 uint16_t *peer_id_list); 796 797 /** 798 * enum txrx_direction - Packet Direction 799 * @rx_direction: rx path packet 800 * @tx_direction: tx path packet 801 */ 802 enum txrx_direction { 803 rx_direction = 1, 804 tx_direction = 0, 805 }; 806 807 /** 808 * enum cdp_capabilities- DP capabilities 809 * @CDP_CFG_DP_TSO: TSO capability 810 * @CDP_CFG_DP_LRO: LRO capability 811 * @CDP_CFG_DP_SG: Scatter Gather capability 812 * @CDP_CFG_DP_GRO: GRO capability 813 * @CDP_CFG_DP_OL_TX_CSUM: Hardware based TX checksum capability 814 * @CDP_CFG_DP_OL_RX_CSUM: Hardware based RX checksum capability 815 * @CDP_CFG_DP_RAWMODE: RAW mode capability 816 * @CDP_CFG_DP_PEER_FLOW_CTRL: Peer flow-control capability 817 * @CDP_CFG_DP_MARK_NOTIFY_FRAME_SUPPORT: mark notify frames capability 818 */ 819 enum cdp_capabilities { 820 CDP_CFG_DP_TSO, 821 CDP_CFG_DP_LRO, 822 CDP_CFG_DP_SG, 823 CDP_CFG_DP_GRO, 824 CDP_CFG_DP_OL_TX_CSUM, 825 CDP_CFG_DP_OL_RX_CSUM, 826 CDP_CFG_DP_RAWMODE, 827 CDP_CFG_DP_PEER_FLOW_CTRL, 828 CDP_CFG_DP_MARK_NOTIFY_FRAME_SUPPORT, 829 }; 830 831 /** 832 * struct ol_txrx_nbuf_classify - Packet classification object 833 * @peer_id: unique peer identifier from fw 834 * @tid: traffic identifier(could be overridden) 835 * @pkt_tid: traffic identifier(cannot be overridden) 836 * @pkt_tos: ip header tos value 837 * @pkt_dscp: ip header dscp value 838 * @tos: index value in map 839 * @dscp: DSCP_TID map index 840 * @is_mcast: multicast pkt check 841 * @is_eap: eapol pkt check 842 * @is_arp: arp pkt check 843 * @is_tcp: tcp pkt check 844 * @is_dhcp: dhcp pkt check 845 * @is_igmp: igmp pkt check 846 * @is_ipv4: ip version 4 pkt check 847 * @is_ipv6: ip version 6 pkt check 848 */ 849 struct ol_txrx_nbuf_classify { 850 uint16_t peer_id; 851 uint8_t tid; 852 uint8_t pkt_tid; 853 uint8_t pkt_tos; 854 uint8_t pkt_dscp; 855 uint8_t tos; 856 uint8_t dscp; 857 uint8_t is_mcast; 858 uint8_t is_eap; 859 uint8_t is_arp; 860 uint8_t is_tcp; 861 uint8_t is_dhcp; 862 uint8_t is_igmp; 863 uint8_t is_ipv4; 864 uint8_t is_ipv6; 865 }; 866 867 /* 868 * typedef ol_osif_vdev_handle - opaque handle for OS shim virtual 869 * device object 870 */ 871 struct ol_osif_vdev_t; 872 typedef struct ol_osif_vdev_t *ol_osif_vdev_handle; 873 874 #ifdef QCA_SUPPORT_WDS_EXTENDED 875 struct ol_osif_peer_t; 876 typedef struct ol_osif_peer_t *ol_osif_peer_handle; 877 #endif 878 879 /** 880 * enum connectivity_stats_pkt_status - data pkt type 881 * @PKT_TYPE_REQ: Request packet 882 * @PKT_TYPE_RSP: Response packet 883 * @PKT_TYPE_TX_DROPPED: TX packet dropped 884 * @PKT_TYPE_RX_DROPPED: RX packet dropped 885 * @PKT_TYPE_RX_DELIVERED: RX packet delivered 886 * @PKT_TYPE_RX_REFUSED: RX packet refused 887 * @PKT_TYPE_TX_HOST_FW_SENT: TX packet FW sent 888 * @PKT_TYPE_TX_ACK_CNT:TC packet acked 889 * @PKT_TYPE_NONE: Invalid packet 890 */ 891 enum connectivity_stats_pkt_status { 892 PKT_TYPE_REQ, 893 PKT_TYPE_RSP, 894 PKT_TYPE_TX_DROPPED, 895 PKT_TYPE_RX_DROPPED, 896 PKT_TYPE_RX_DELIVERED, 897 PKT_TYPE_RX_REFUSED, 898 PKT_TYPE_TX_HOST_FW_SENT, 899 PKT_TYPE_TX_ACK_CNT, 900 PKT_TYPE_NONE, 901 }; 902 903 /** 904 * typedef ol_txrx_mgmt_tx_cb() - tx management delivery notification 905 * callback function 906 * @ctxt: 907 * @tx_mgmt_frm: 908 * @had_error: 909 */ 910 typedef void 911 (*ol_txrx_mgmt_tx_cb)(void *ctxt, qdf_nbuf_t tx_mgmt_frm, int had_error); 912 913 /** 914 * typedef ol_txrx_data_tx_cb() - Function registered with the data path 915 * that is called when tx frames marked as "no free" are 916 * done being transmitted 917 * @ctxt: 918 * @tx_frm: 919 * @had_error: 920 */ 921 typedef void 922 (*ol_txrx_data_tx_cb)(void *ctxt, qdf_nbuf_t tx_frm, int had_error); 923 924 /** 925 * typedef ol_txrx_tx_fp() - top-level transmit function 926 * @soc: dp soc handle 927 * @vdev_id: handle to the virtual device object 928 * @msdu_list: list of network buffers 929 */ 930 typedef qdf_nbuf_t (*ol_txrx_tx_fp)(struct cdp_soc_t *soc, uint8_t vdev_id, 931 qdf_nbuf_t msdu_list); 932 933 /** 934 * typedef ol_txrx_tx_fast_fp() - top-level fast transmit function 935 * @soc: dp soc handle 936 * @vdev_id: handle to the virtual device object 937 * @msdu_list: list of network buffers 938 */ 939 typedef qdf_nbuf_t (*ol_txrx_tx_fast_fp)(struct cdp_soc_t *soc, uint8_t vdev_id, 940 qdf_nbuf_t msdu_list); 941 942 /** 943 * typedef ol_txrx_tx_exc_fp() - top-level transmit function on exception path 944 * @soc: dp soc handle 945 * @vdev_id: handle to the virtual device object 946 * @msdu_list: list of network buffers 947 * @tx_exc_metadata: structure that holds parameters to exception path 948 */ 949 typedef qdf_nbuf_t (*ol_txrx_tx_exc_fp)(struct cdp_soc_t *soc, uint8_t vdev_id, 950 qdf_nbuf_t msdu_list, 951 struct cdp_tx_exception_metadata 952 *tx_exc_metadata); 953 954 /** 955 * typedef ol_txrx_completion_fp() - top-level transmit function 956 * for tx completion 957 * @skb: skb data 958 * @osif_dev: the virtual device's OS shim object 959 * @flag: flag 960 */ 961 typedef void (*ol_txrx_completion_fp)(qdf_nbuf_t skb, 962 void *osif_dev, uint16_t flag); 963 964 /** 965 * typedef ol_txrx_classify_critical_pkt_fp() - classification cb for critical 966 * frames 967 * @osif_dev: the virtual device's OS shim object 968 * @skb: skb data 969 */ 970 typedef void (*ol_txrx_classify_critical_pkt_fp)(void *osif_dev, 971 qdf_nbuf_t skb); 972 /** 973 * typedef ol_txrx_tx_flow_control_fp() - tx flow control notification 974 * function from txrx to OS shim 975 * @osif_dev: the virtual device's OS shim object 976 * @tx_resume: tx os q should be resumed or not 977 */ 978 typedef void (*ol_txrx_tx_flow_control_fp)(void *osif_dev, 979 bool tx_resume); 980 981 /** 982 * typedef ol_txrx_tx_flow_control_is_pause_fp() - is tx paused by flow control 983 * function from txrx to OS shim 984 * @osif_dev: the virtual device's OS shim object 985 * 986 * Return: true if tx is paused by flow control 987 */ 988 typedef bool (*ol_txrx_tx_flow_control_is_pause_fp)(void *osif_dev); 989 990 /** 991 * typedef ol_txrx_rx_fp() - receive function to hand batches of data 992 * frames from txrx to OS shim 993 * @osif_dev: handle to the OSIF virtual device object 994 * @msdu_list: list of network buffers 995 */ 996 typedef QDF_STATUS(*ol_txrx_rx_fp)(void *osif_dev, qdf_nbuf_t msdu_list); 997 998 typedef QDF_STATUS(*ol_txrx_fisa_rx_fp)(void *soc, 999 void *dp_vdev, 1000 qdf_nbuf_t msdu_list); 1001 1002 typedef QDF_STATUS(*ol_txrx_fisa_flush_fp)(void *soc, int ring_num); 1003 1004 /** 1005 * typedef ol_txrx_rx_flush_fp() - receive function to hand batches of 1006 * data frames from txrx to OS shim 1007 * @osif_dev: handle to the OSIF virtual device object 1008 * @vdev_id: vdev_if of the packets to be flushed 1009 */ 1010 typedef QDF_STATUS(*ol_txrx_rx_flush_fp)(void *osif_dev, uint8_t vdev_id); 1011 1012 /** 1013 * typedef ol_txrx_rx_gro_flush_ind_fp() - function to send GRO flush 1014 * indication to stack for a given 1015 * RX Context Id. 1016 * @osif_dev: handle to the OSIF virtual device object 1017 * @rx_ctx_id: Rx context Id for which gro flush should happen 1018 */ 1019 typedef QDF_STATUS(*ol_txrx_rx_gro_flush_ind_fp)(void *osif_dev, 1020 int rx_ctx_id); 1021 1022 /** 1023 * typedef ol_txrx_stats_rx_fp() - receive function to hand batches of 1024 * data frames from txrx to OS shim 1025 * @skb: skb data 1026 * @osif_dev: the virtual device's OS shim object 1027 * @action: data packet type 1028 * @pkt_type: packet data type 1029 */ 1030 typedef void (*ol_txrx_stats_rx_fp)(struct sk_buff *skb, 1031 void *osif_dev, enum connectivity_stats_pkt_status action, 1032 uint8_t *pkt_type); 1033 1034 /** 1035 * typedef ol_txrx_get_key_fp() - function to gey key based on keyix 1036 * and peer mac address 1037 * @osif_dev: the virtual device's OS shim object 1038 * @key_buf: pointer to store key 1039 * @mac_addr: pointer to mac address 1040 * @keyix: key id 1041 */ 1042 typedef QDF_STATUS(*ol_txrx_get_key_fp)(void *osif_dev, uint8_t *key_buf, 1043 uint8_t *mac_addr, uint8_t keyix); 1044 1045 /** 1046 * typedef ol_txrx_rsim_rx_decap_fp() - raw mode simulation function 1047 * to decap the packets in 1048 * receive path. 1049 * @osif_dev: the virtual device's OS shim object 1050 * @list_head: pointer to head of receive packet queue to decap 1051 * @list_tail: pointer to tail of receive packet queue to decap 1052 * @peer_mac: mac address of peer handler 1053 */ 1054 typedef QDF_STATUS(*ol_txrx_rsim_rx_decap_fp)(void *osif_dev, 1055 qdf_nbuf_t *list_head, 1056 qdf_nbuf_t *list_tail); 1057 1058 /** 1059 * typedef ol_txrx_tx_free_ext_fp() - external tx free function to 1060 * read per packet stats and free 1061 * tx buffer externally 1062 * @netbuf: tx network buffer 1063 */ 1064 typedef void (*ol_txrx_tx_free_ext_fp)(qdf_nbuf_t netbuf); 1065 1066 /** 1067 * typedef ol_txrx_rx_check_wai_fp() - OSIF WAPI receive function 1068 * @vdev: 1069 * @mpdu_head: 1070 * @mpdu_tail: 1071 */ 1072 typedef bool (*ol_txrx_rx_check_wai_fp)(ol_osif_vdev_handle vdev, 1073 qdf_nbuf_t mpdu_head, 1074 qdf_nbuf_t mpdu_tail); 1075 /** 1076 * typedef ol_txrx_rx_mon_fp() - OSIF monitor mode receive function for single 1077 * MPDU (802.11 format) 1078 * @vdev: 1079 * @mpdu: 1080 * @rx_status: 1081 */ 1082 typedef void (*ol_txrx_rx_mon_fp)(ol_osif_vdev_handle vdev, 1083 qdf_nbuf_t mpdu, 1084 void *rx_status); 1085 1086 /** 1087 * typedef ol_txrx_proxy_arp_fp() - proxy arp function pointer 1088 * @vdev: 1089 * @netbuf: 1090 */ 1091 typedef int (*ol_txrx_proxy_arp_fp)(ol_osif_vdev_handle vdev, 1092 qdf_nbuf_t netbuf); 1093 1094 /** 1095 * typedef ol_txrx_mcast_me_fp() - function pointer for multicast enhancement 1096 * @vdev: 1097 * @netbuf: 1098 */ 1099 typedef int (*ol_txrx_mcast_me_fp)(ol_osif_vdev_handle vdev, 1100 qdf_nbuf_t netbuf); 1101 1102 /** 1103 * typedef ol_txrx_stats_callback() - statistics notify callback 1104 * @ctxt: 1105 * @type: 1106 * @buf: 1107 * @bytes: 1108 */ 1109 typedef void (*ol_txrx_stats_callback)(void *ctxt, 1110 enum htt_cmn_dbg_stats_type type, 1111 uint8_t *buf, int bytes); 1112 1113 /** 1114 * typedef ol_txrx_pktdump_cb() - callback for packet dump feature 1115 * @soc: 1116 * @pdev_id: 1117 * @vdev_id: 1118 * @netbuf: 1119 * @status: 1120 * @type: 1121 */ 1122 typedef void (*ol_txrx_pktdump_cb)(ol_txrx_soc_handle soc, 1123 uint8_t pdev_id, 1124 uint8_t vdev_id, 1125 qdf_nbuf_t netbuf, 1126 enum qdf_dp_tx_rx_status status, 1127 enum qdf_pkt_type type); 1128 1129 /** 1130 * typedef ol_txrx_get_tsf_time() - callback to get tsf time 1131 * @osif_dev: 1132 * @input_time: 1133 * @tsf_time: 1134 */ 1135 typedef QDF_STATUS(*ol_txrx_get_tsf_time)(void *osif_dev, uint64_t input_time, 1136 uint64_t *tsf_time); 1137 1138 /** 1139 * struct ol_txrx_ops - (pointers to) the functions used for tx and rx 1140 * data xfer 1141 * 1142 * There are two portions of these txrx operations. 1143 * The rx portion is filled in by OSIF SW before calling 1144 * ol_txrx_osif_vdev_register; inside the ol_txrx_osif_vdev_register 1145 * the txrx SW stores a copy of these rx function pointers, to use 1146 * as it delivers rx data frames to the OSIF SW. 1147 * The tx portion is filled in by the txrx SW inside 1148 * ol_txrx_osif_vdev_register; when the function call returns, 1149 * the OSIF SW stores a copy of these tx functions to use as it 1150 * delivers tx data frames to the txrx SW. 1151 * 1152 * @tx: tx function pointers - specified by txrx, stored by OS shim 1153 * @tx.std: the tx function pointer for standard data 1154 * frames This function pointer is set by the txrx SW 1155 * perform host-side transmit operations based on 1156 * whether a HL or LL host/target interface is in use. 1157 * @tx.flow_control_cb: the transmit flow control 1158 * function that is registered by the 1159 * OSIF which is called from txrx to 1160 * indicate whether the transmit OS 1161 * queues should be paused/resumed 1162 * @rx: rx function pointers - specified by OS shim, stored by txrx 1163 * @rx.rx: the OS shim rx function to deliver rx data 1164 * frames to. This can have different values for 1165 * different virtual devices, e.g. so one virtual 1166 * device's OS shim directly hands rx frames to the OS, 1167 * but another virtual device's OS shim filters out P2P 1168 * messages before sending the rx frames to the OS. The 1169 * netbufs delivered to the osif_rx function are in the 1170 * format specified by the OS to use for tx and rx 1171 * frames (either 802.3 or native WiFi). In case RX Threads are enabled, pkts 1172 * are given to the thread, instead of the stack via this pointer. 1173 * @rx.rx_eapol: This rx function pointer used to receive only eapol frames 1174 * @rx.stack: function to give packets to the stack. Differs from @rx.rx. 1175 * In case RX Threads are enabled, this pointer holds the callback to give 1176 * packets to the stack. 1177 * @rx.rx_gro_flush: GRO flush indication to stack for a given RX CTX ID 1178 * @rx.wai_check: the tx function pointer for WAPI frames 1179 * @rx.mon: the OS shim rx monitor function to deliver 1180 * monitor data to Though in practice, it is probable 1181 * that the same function will be used for delivering 1182 * rx monitor data for all virtual devices, in theory 1183 * each different virtual device can have a different 1184 * OS shim function for accepting rx monitor data. The 1185 * netbufs delivered to the osif_rx_mon function are in 1186 * 802.11 format. Each netbuf holds a 802.11 MPDU, not 1187 * an 802.11 MSDU. Depending on compile-time 1188 * configuration, each netbuf may also have a 1189 * monitor-mode encapsulation header such as a radiotap 1190 * header added before the MPDU contents. 1191 * @rx.std: the OS shim rx function to deliver rx data 1192 * @proxy_arp: proxy arp function pointer - specified by 1193 * OS shim, stored by txrx 1194 * @me_convert: 1195 * @get_key: function pointer to get key of the peer with 1196 * specific key index 1197 * @get_tsf_time: function pointer to get TSF 1198 * @vdev_del_notify: vdev delete notifier 1199 */ 1200 struct ol_txrx_ops { 1201 struct { 1202 ol_txrx_tx_fp tx; 1203 ol_txrx_tx_fast_fp tx_fast; 1204 ol_txrx_tx_exc_fp tx_exception; 1205 ol_txrx_tx_free_ext_fp tx_free_ext; 1206 ol_txrx_completion_fp tx_comp; 1207 ol_txrx_classify_critical_pkt_fp tx_classify_critical_pkt_cb; 1208 } tx; 1209 1210 struct { 1211 ol_txrx_rx_fp rx; 1212 #ifdef QCA_SUPPORT_EAPOL_OVER_CONTROL_PORT 1213 ol_txrx_rx_fp rx_eapol; 1214 #endif 1215 ol_txrx_rx_fp rx_stack; 1216 ol_txrx_rx_flush_fp rx_flush; 1217 ol_txrx_rx_gro_flush_ind_fp rx_gro_flush; 1218 ol_txrx_rx_check_wai_fp wai_check; 1219 ol_txrx_rx_mon_fp mon; 1220 ol_txrx_stats_rx_fp stats_rx; 1221 ol_txrx_rsim_rx_decap_fp rsim_rx_decap; 1222 ol_txrx_fisa_rx_fp osif_fisa_rx; 1223 ol_txrx_fisa_flush_fp osif_fisa_flush; 1224 } rx; 1225 /* proxy arp function pointer - specified by OS shim, stored by txrx */ 1226 ol_txrx_proxy_arp_fp proxy_arp; 1227 ol_txrx_mcast_me_fp me_convert; 1228 1229 ol_txrx_get_key_fp get_key; 1230 ol_txrx_get_tsf_time get_tsf_time; 1231 ol_txrx_vdev_delete_cb vdev_del_notify; 1232 }; 1233 1234 /** 1235 * struct ol_txrx_hardtart_ctxt - handlers for dp tx path 1236 * @tx: normal tx function 1237 * @tx_fast: fast tx function 1238 * @tx_exception: exception tx function 1239 */ 1240 struct ol_txrx_hardtart_ctxt { 1241 ol_txrx_tx_fp tx; 1242 ol_txrx_tx_fast_fp tx_fast; 1243 ol_txrx_tx_exc_fp tx_exception; 1244 }; 1245 1246 /** 1247 * struct ol_txrx_stats_req - specifications of the requested 1248 * statistics 1249 * @stats_type_upload_mask: which stats to upload 1250 * @stats_type_reset_mask: which stats to reset 1251 * @print: control to print uploaded stats. stats will be printed if 1252 * either print element is set 1253 * @print.verbose: verbose stats printout 1254 * @print.concise: concise stats printout (takes precedence) 1255 * @callback: callback context 1256 * @callback.fp: function pointer to call. stats notify callback will 1257 * be invoked if fp is non-NULL 1258 * @callback.ctxt: opaque context to pass to callback function 1259 * @copy: copy context 1260 * @copy.buf: stats will be copied into the specified buffer if buf is 1261 * non-NULL 1262 * @byte_limit: don't copy more than this 1263 * @wait: wait context 1264 * @wait.blocking: If true, the caller will take the specified 1265 * semaphore to wait for the stats to be uploaded, and 1266 * the driver will release the semaphore when the 1267 * stats are done being uploaded. 1268 * @wait.sem_ptr: Semaphore to use for blocking 1269 */ 1270 struct ol_txrx_stats_req { 1271 uint32_t stats_type_upload_mask; 1272 uint32_t stats_type_reset_mask; 1273 1274 struct { 1275 int verbose; 1276 int concise; 1277 } print; 1278 1279 struct { 1280 ol_txrx_stats_callback fp; 1281 void *ctxt; 1282 } callback; 1283 1284 struct { 1285 uint8_t *buf; 1286 int byte_limit; 1287 } copy; 1288 1289 struct { 1290 int blocking; 1291 qdf_semaphore_t *sem_ptr; 1292 } wait; 1293 }; 1294 1295 1296 /* DP soc struct definition */ 1297 struct cdp_soc_t { 1298 struct cdp_ops *ops; 1299 struct ol_if_ops *ol_ops; 1300 }; 1301 1302 /** 1303 * enum cdp_peer_param_type - different types of parameters 1304 * to set values in peer 1305 * @CDP_CONFIG_NAWDS: Enable nawds mode 1306 * @CDP_CONFIG_NAC: Enable nac 1307 * @CDP_CONFIG_ISOLATION: Enable isolation 1308 * @CDP_CONFIG_IN_TWT: In TWT session or not 1309 * @CDP_CONFIG_MLD_PEER_VDEV: Change MLD peer's vdev 1310 * @CDP_CONFIG_PEER_FREQ: Set peer frequency 1311 */ 1312 enum cdp_peer_param_type { 1313 CDP_CONFIG_NAWDS, 1314 CDP_CONFIG_NAC, 1315 CDP_CONFIG_ISOLATION, 1316 CDP_CONFIG_IN_TWT, 1317 CDP_CONFIG_MLD_PEER_VDEV, 1318 CDP_CONFIG_PEER_FREQ, 1319 }; 1320 1321 /** 1322 * enum cdp_pdev_param_type - different types of parameters 1323 * to set values in pdev 1324 * @CDP_CONFIG_DEBUG_SNIFFER: Enable debug sniffer feature 1325 * @CDP_CONFIG_BPR_ENABLE: Enable bcast probe feature 1326 * @CDP_CONFIG_PRIMARY_RADIO: Configure radio as primary 1327 * @CDP_CONFIG_ENABLE_PERPKT_TXSTATS: Enable per packet statistics 1328 * @CDP_CONFIG_IGMPMLD_OVERRIDE: Override IGMP/MLD 1329 * @CDP_CONFIG_IGMPMLD_TID: Configurable TID value when igmmld_override is set 1330 * @CDP_CONFIG_ARP_DBG_CONF: Enable ARP debug 1331 * @CDP_CONFIG_CAPTURE_LATENCY: Capture time latency 1332 * @CDP_INGRESS_STATS: Accumulate ingress statistics 1333 * @CDP_OSIF_DROP: Accumulate drops in OSIF layer 1334 * @CDP_CONFIG_ENH_RX_CAPTURE: Enable enhanced RX capture 1335 * @CDP_CONFIG_ENH_TX_CAPTURE: Enable enhanced TX capture 1336 * @CDP_CONFIG_HMMC_TID_OVERRIDE: Enable hmmc tid override 1337 * @CDP_CONFIG_HMMC_TID_VALUE: set hmmc tid value 1338 * @CDP_CONFIG_TX_CAPTURE: set tx capture 1339 * @CDP_CHAN_NOISE_FLOOR: set channel noise floor 1340 * @CDP_CONFIG_VOW: set/get vow config 1341 * @CDP_TIDQ_OVERRIDE: set/get tid queue override 1342 * @CDP_TIDMAP_PRTY: set/get tid map prty 1343 * @CDP_TX_PENDING: get tx pending 1344 * @CDP_FILTER_NEIGH_PEERS: filter neighbour peers 1345 * @CDP_FILTER_UCAST_DATA: filter unicast data 1346 * @CDP_FILTER_MCAST_DATA: filter multicast data 1347 * @CDP_FILTER_NO_DATA: filter no data 1348 * @CDP_MONITOR_CHANNEL: monitor channel 1349 * @CDP_MONITOR_FREQUENCY: monitor frequency 1350 * @CDP_CONFIG_BSS_COLOR: configure bss color 1351 * @CDP_SET_ATF_STATS_ENABLE: set ATF stats flag 1352 * @CDP_CONFIG_SPECIAL_VAP: Configure Special vap 1353 * @CDP_RESET_SCAN_SPCL_VAP_STATS_ENABLE: Enable scan spcl vap stats reset 1354 * @CDP_CONFIG_ENHANCED_STATS_ENABLE: 1355 * @CDP_ISOLATION: set isolation flag 1356 * @CDP_CONFIG_UNDECODED_METADATA_CAPTURE_ENABLE: Undecoded metadata capture 1357 * @CDP_CONFIG_RXDMA_BUF_RING_SIZE: RXDMA buffer ring size configure 1358 * @CDP_CONFIG_DELAY_STATS: set/get delay stats 1359 */ 1360 enum cdp_pdev_param_type { 1361 CDP_CONFIG_DEBUG_SNIFFER, 1362 CDP_CONFIG_BPR_ENABLE, 1363 CDP_CONFIG_PRIMARY_RADIO, 1364 CDP_CONFIG_ENABLE_PERPKT_TXSTATS, 1365 CDP_CONFIG_IGMPMLD_OVERRIDE, 1366 CDP_CONFIG_IGMPMLD_TID, 1367 CDP_CONFIG_ARP_DBG_CONF, 1368 CDP_CONFIG_CAPTURE_LATENCY, 1369 CDP_INGRESS_STATS, 1370 CDP_OSIF_DROP, 1371 CDP_CONFIG_ENH_RX_CAPTURE, 1372 CDP_CONFIG_ENH_TX_CAPTURE, 1373 CDP_CONFIG_HMMC_TID_OVERRIDE, 1374 CDP_CONFIG_HMMC_TID_VALUE, 1375 CDP_CONFIG_TX_CAPTURE, 1376 CDP_CHAN_NOISE_FLOOR, 1377 CDP_CONFIG_VOW, 1378 CDP_TIDQ_OVERRIDE, 1379 CDP_TIDMAP_PRTY, 1380 CDP_TX_PENDING, 1381 CDP_FILTER_NEIGH_PEERS, 1382 CDP_FILTER_UCAST_DATA, 1383 CDP_FILTER_MCAST_DATA, 1384 CDP_FILTER_NO_DATA, 1385 CDP_MONITOR_CHANNEL, 1386 CDP_MONITOR_FREQUENCY, 1387 CDP_CONFIG_BSS_COLOR, 1388 CDP_SET_ATF_STATS_ENABLE, 1389 CDP_CONFIG_SPECIAL_VAP, 1390 CDP_RESET_SCAN_SPCL_VAP_STATS_ENABLE, 1391 CDP_CONFIG_ENHANCED_STATS_ENABLE, 1392 CDP_ISOLATION, 1393 CDP_CONFIG_UNDECODED_METADATA_CAPTURE_ENABLE, 1394 CDP_CONFIG_RXDMA_BUF_RING_SIZE, 1395 CDP_CONFIG_DELAY_STATS, 1396 }; 1397 1398 /** 1399 * typedef cdp_config_param_type - union of different types of parameters 1400 * to set values into dp handles. 1401 * 1402 * @cdp_peer_param_nawds: Enable nawds mode 1403 * @cdp_peer_param_isolation: Enable isolation 1404 * @cdp_peer_param_in_twt: in TWT session or not 1405 * @cdp_peer_param_nac: Enable nac 1406 * @cdp_peer_param_freq: Peer frequency 1407 * 1408 * @cdp_vdev_param_nawds: set nawds enable/disable 1409 * @cdp_vdev_param_mcast_en: enable/disable multicast enhancement 1410 * @cdp_vdev_param_wds: wds sta 1411 * @cdp_vdev_param_mec: MEC enable flags 1412 * @cdp_vdev_param_proxysta: proxy sta 1413 * @cdp_vdev_param_tdls_flags: tdls link flags 1414 * @cdp_vdev_param_ap_brdg_en: set ap_bridging enable/disable 1415 * @cdp_vdev_param_cipher_en: set cipher type based on security 1416 * @cdp_vdev_param_qwrap_isolation: qwrap isolation mode 1417 * @cdp_vdev_param_tx_encap: tx encap type 1418 * @cdp_vdev_param_rx_decap: rx decap type 1419 * @cdp_vdev_param_mesh_rx_filter: set mesh rx filter 1420 * @cdp_vdev_param_tidmap_prty: set tid vdev prty 1421 * @cdp_vdev_param_tidmap_tbl_id: set tidmap table id 1422 * @cdp_vdev_param_mesh_mode: set mesh mode 1423 * @cdp_vdev_param_safe_mode: set safe mode 1424 * @cdp_vdev_param_drop_unenc: set drop unencrypted flag 1425 * @cdp_vdev_param_hlos_tid_override: set hlos tid override 1426 * @cdp_vdev_param_peer_authorize: set peer authorize 1427 * @cdp_vdev_param_peer_tid_latency_enable: set peer tid latency enable flag 1428 * @cdp_vdev_param_mesh_tid: config tatency tid on vdev 1429 * @cdp_vdev_param_dscp_tid_map_id: set dscp to tid map id 1430 * @cdp_vdev_param_mcast_vdev: set mcast vdev params 1431 * @cdp_vdev_param_wrap: qwrap ap vap 1432 * 1433 * @cdp_pdev_param_dbg_snf: Enable debug sniffer feature 1434 * @cdp_pdev_param_bpr_enable: Enable bcast probe feature 1435 * @cdp_pdev_param_primary_radio: Configure radio as primary 1436 * @cdp_pdev_param_en_perpkt_txstats: Enable per packet statistics 1437 * @cdp_pdev_param_igmpmld_override: Override IGMP/MLD 1438 * @cdp_pdev_param_igmpmld_tid: TID value when igmmld_override is set 1439 * @cdp_pdev_param_arp_dbg_conf: Enable ARP debug 1440 * @cdp_pdev_param_cptr_latcy: Capture time latency 1441 * @cdp_pdev_param_ingrs_stats: Accumulate ingress statistics 1442 * @cdp_pdev_param_osif_drop: Accumulate drops in OSIF layer 1443 * @cdp_pdev_param_en_rx_cap: Enable enhanced RX capture 1444 * @cdp_pdev_param_en_tx_cap: Enable enhanced TX capture 1445 * @cdp_pdev_param_hmmc_tid_ovrd: Enable hmmc tid override 1446 * @cdp_pdev_param_hmmc_tid: set hmmc tid value 1447 * @cdp_pdev_param_tx_capture: set tx capture 1448 * @cdp_pdev_param_chn_noise_flr: set channel noise floor 1449 * @cdp_pdev_param_cfg_vow: set/get vow config 1450 * @cdp_pdev_param_cfg_delay_stats: set/get delayed stats 1451 * @cdp_pdev_param_tidq_override: set/get tid queue override 1452 * @cdp_pdev_param_mon_freq: set monitor frequency 1453 * @cdp_pdev_param_bss_color: configure bss color 1454 * @cdp_pdev_param_tidmap_prty: set/get tid map prty 1455 * @cdp_pdev_param_tx_pending: get tx pending 1456 * @cdp_pdev_param_fltr_neigh_peers: filter neighbour peers 1457 * @cdp_pdev_param_fltr_ucast: filter unicast data 1458 * @cdp_pdev_param_fltr_mcast: filter multicast data 1459 * @cdp_pdev_param_fltr_none: filter no data 1460 * @cdp_pdev_param_monitor_chan: monitor channel 1461 * @cdp_pdev_param_atf_stats_enable: ATF stats enable 1462 * @cdp_pdev_param_config_special_vap: Configure Special vap 1463 * @cdp_pdev_param_isolation : set isolation mode 1464 * 1465 * @cdp_psoc_param_en_rate_stats: set rate stats enable/disable 1466 * @cdp_psoc_param_en_nss_cfg: set nss cfg 1467 * @cdp_ipa_enabled : set ipa mode 1468 * @cdp_psoc_param_vdev_stats_hw_offload: Configure HW vdev stats offload 1469 * @cdp_pdev_param_undecoded_metadata_enable: Undecoded metadata capture enable 1470 * @cdp_sawf_enabled: SAWF enable/disable 1471 * @cdp_sawf_stats: SAWF stats config 1472 * @cdp_vdev_param_traffic_end_ind: Traffic end indication enable/disable 1473 * @cdp_skel_enable : Enable/Disable skeleton code for Umac reset debug 1474 * @cdp_drop_tx_mcast: Enable/Disable tx mcast drop 1475 * @cdp_vdev_tx_to_fw: Set to_fw bit for all tx packets for the vdev 1476 * @cdp_peer_metadata_ver: DP rx peer metadata version configuration 1477 * @hal_soc_hdl: DP HAL soc handle 1478 * @cdp_tx_desc_num: DP TX desc number config 1479 * @cdp_tx_ext_desc_num: number of TX EXT desc config 1480 * @cdp_tx_ring_size: TX ring size config 1481 * @cdp_tx_comp_ring_size: TX completion ring size config 1482 * @cdp_rx_sw_desc_num: RX SW descriptor number config 1483 * @cdp_reo_dst_ring_size: REO destination ring size config 1484 * @cdp_rxdma_refill_ring_size: RXDMA refill ring size config 1485 * @cdp_rx_refill_buf_pool_size: RX refill ring size config 1486 * @cdp_rxdma_buf_ring_size: RXDMA buf ring size config 1487 * @mac_addr: vdev mac address 1488 * @new_vdev_id: New vdev id to which MLD peer is to be moved 1489 * @fisa_params.fisa_fst_size: FISA table size 1490 * @fisa_params.rx_flow_max_search: max FST entries 1491 * @fisa_params.rx_toeplitz_hash_key: RX hash key 1492 * @rx_pkt_tlv_size: RX packet TLV size 1493 * @cdp_ast_indication_disable: AST indication disable 1494 * @cdp_psoc_param_mlo_oper_mode: mlo operation mode 1495 * @cdp_monitor_flag: monitor interface flags 1496 */ 1497 typedef union cdp_config_param_t { 1498 /* peer params */ 1499 bool cdp_peer_param_nawds; 1500 bool cdp_peer_param_isolation; 1501 uint8_t cdp_peer_param_nac; 1502 bool cdp_peer_param_in_twt; 1503 uint32_t cdp_peer_param_freq; 1504 1505 /* vdev params */ 1506 bool cdp_vdev_param_wds; 1507 bool cdp_vdev_param_mec; 1508 bool cdp_vdev_param_nawds; 1509 bool cdp_vdev_param_proxysta; 1510 bool cdp_vdev_param_tdls_flags; 1511 bool cdp_vdev_param_ap_brdg_en; 1512 bool cdp_vdev_param_qwrap_isolation; 1513 bool cdp_vdev_param_update_multipass; 1514 uint8_t cdp_vdev_param_da_war; 1515 uint8_t cdp_vdev_param_mcast_en; 1516 uint8_t cdp_vdev_param_igmp_mcast_en; 1517 uint8_t cdp_vdev_param_tidmap_prty; 1518 uint8_t cdp_vdev_param_tidmap_tbl_id; 1519 uint32_t cdp_vdev_param_aging_tmr; 1520 uint32_t cdp_vdev_param_cipher_en; 1521 uint32_t cdp_vdev_param_tx_encap; 1522 uint32_t cdp_vdev_param_rx_decap; 1523 uint32_t cdp_vdev_param_mesh_rx_filter; 1524 uint32_t cdp_vdev_param_mesh_mode; 1525 uint32_t cdp_vdev_param_safe_mode; 1526 uint32_t cdp_vdev_param_drop_unenc; 1527 uint8_t cdp_vdev_param_hlos_tid_override; 1528 bool cdp_vdev_param_wds_ext; 1529 uint8_t cdp_vdev_param_peer_authorize; 1530 uint8_t cdp_vdev_param_peer_tid_latency_enable; 1531 uint8_t cdp_vdev_param_mesh_tid; 1532 uint8_t cdp_vdev_param_dscp_tid_map_id; 1533 bool cdp_vdev_param_mcast_vdev; 1534 bool cdp_vdev_param_wrap; 1535 1536 /* pdev params */ 1537 bool cdp_pdev_param_cptr_latcy; 1538 bool cdp_pdev_param_hmmc_tid_ovrd; 1539 bool cdp_pdev_param_fltr_neigh_peers; 1540 bool cdp_pdev_param_cfg_vow; 1541 bool cdp_pdev_param_cfg_delay_stats; 1542 bool cdp_pdev_param_fltr_mcast; 1543 bool cdp_pdev_param_fltr_none; 1544 bool cdp_pdev_param_fltr_ucast; 1545 uint8_t cdp_pdev_param_primary_radio; 1546 uint8_t cdp_pdev_param_en_rx_cap; 1547 uint8_t cdp_pdev_param_en_tx_cap; 1548 uint8_t cdp_pdev_param_tx_capture; 1549 uint8_t cdp_pdev_param_hmmc_tid; 1550 uint8_t cdp_pdev_param_tidmap_prty; 1551 uint8_t cdp_pdev_param_igmpmld_override; 1552 uint8_t cdp_pdev_param_igmpmld_tid; 1553 uint8_t cdp_pdev_param_arp_dbg_conf; 1554 uint8_t cdp_pdev_param_tidq_override; 1555 uint8_t cdp_pdev_param_bss_color; 1556 uint16_t cdp_pdev_param_chn_noise_flr; 1557 qdf_freq_t cdp_pdev_param_mon_freq; 1558 int cdp_pdev_param_dbg_snf; 1559 int cdp_pdev_param_bpr_enable; 1560 int cdp_pdev_param_monitor_chan; 1561 uint32_t cdp_pdev_param_ingrs_stats; 1562 uint32_t cdp_pdev_param_osif_drop; 1563 uint32_t cdp_pdev_param_en_perpkt_txstats; 1564 uint32_t cdp_pdev_param_tx_pending; 1565 bool cdp_pdev_param_atf_stats_enable; 1566 bool cdp_pdev_param_config_special_vap; 1567 bool cdp_pdev_param_reset_scan_spcl_vap_stats_enable; 1568 bool cdp_pdev_param_enhanced_stats_enable; 1569 bool cdp_pdev_param_isolation; 1570 1571 /* psoc params */ 1572 bool cdp_psoc_param_en_rate_stats; 1573 int cdp_psoc_param_en_nss_cfg; 1574 int cdp_psoc_param_preferred_hw_mode; 1575 bool cdp_psoc_param_pext_stats; 1576 bool cdp_psoc_param_jitter_stats; 1577 bool cdp_psoc_param_dp_debug_log; 1578 1579 bool cdp_skip_bar_update; 1580 bool cdp_ipa_enabled; 1581 bool cdp_psoc_param_vdev_stats_hw_offload; 1582 bool cdp_pdev_param_undecoded_metadata_enable; 1583 bool cdp_sawf_enabled; 1584 uint8_t cdp_sawf_stats; 1585 bool cdp_drop_3addr_mcast; 1586 bool cdp_vdev_param_traffic_end_ind; 1587 bool cdp_umac_rst_skel; 1588 bool cdp_drop_tx_mcast; 1589 bool cdp_vdev_tx_to_fw; 1590 uint8_t cdp_peer_metadata_ver; 1591 void *hal_soc_hdl; 1592 1593 int cdp_tx_desc_num; 1594 int cdp_tx_ext_desc_num; 1595 int cdp_tx_ring_size; 1596 int cdp_tx_comp_ring_size; 1597 int cdp_rx_sw_desc_num; 1598 int cdp_reo_dst_ring_size; 1599 int cdp_rxdma_refill_ring_size; 1600 int cdp_rx_refill_buf_pool_size; 1601 int cdp_rxdma_buf_ring_size; 1602 1603 uint8_t mac_addr[QDF_MAC_ADDR_SIZE]; 1604 uint8_t new_vdev_id; 1605 struct { 1606 uint32_t fisa_fst_size; 1607 uint16_t rx_flow_max_search; 1608 uint8_t *rx_toeplitz_hash_key; 1609 } fisa_params; 1610 uint16_t rx_pkt_tlv_size; 1611 bool cdp_ast_indication_disable; 1612 uint8_t cdp_psoc_param_mlo_oper_mode; 1613 uint8_t cdp_monitor_flag; 1614 } cdp_config_param_type; 1615 1616 /** 1617 * enum cdp_rx_enh_capture_mode - Rx enhanced capture modes 1618 * @CDP_RX_ENH_CAPTURE_DISABLED: Disable Rx enhance capture 1619 * @CDP_RX_ENH_CAPTURE_MPDU: Enable capture of 128 bytes of each MPDU 1620 * @CDP_RX_ENH_CAPTURE_MPDU_MSDU: Enable capture of 128 bytes of each MSDU 1621 */ 1622 enum cdp_rx_enh_capture_mode { 1623 CDP_RX_ENH_CAPTURE_DISABLED = 0, 1624 CDP_RX_ENH_CAPTURE_MPDU, 1625 CDP_RX_ENH_CAPTURE_MPDU_MSDU, 1626 }; 1627 1628 /** 1629 * enum cdp_rx_enh_capture_peer - Rx enhanced capture peer filtering 1630 * @CDP_RX_ENH_CAPTURE_PEER_DISABLED: Disable Rx ENH capture peer filtering 1631 * @CDP_RX_ENH_CAPTURE_PEER_ENABLED: Enable Rx ENH capture peer filtering 1632 */ 1633 enum cdp_rx_enh_capture_peer { 1634 CDP_RX_ENH_CAPTURE_PEER_DISABLED = 0, 1635 CDP_RX_ENH_CAPTURE_PEER_ENABLED, 1636 }; 1637 1638 /** 1639 * enum cdp_tx_enh_capture_mode - Tx enhanced capture modes 1640 * @CDP_TX_ENH_CAPTURE_DISABLED: Disable Tx enhance capture for all peers 1641 * @CDP_TX_ENH_CAPTURE_ENABLE_ALL_PEERS: Enable tx capture for all peers 1642 * @CDP_TX_ENH_CAPTURE_ENDIS_PER_PEER: Enable/disable per peer as necessary 1643 * @CDP_TX_ENH_CAPTURE_MAX: Max value 1644 */ 1645 enum cdp_tx_enh_capture_mode { 1646 CDP_TX_ENH_CAPTURE_DISABLED = 0, 1647 CDP_TX_ENH_CAPTURE_ENABLE_ALL_PEERS, 1648 CDP_TX_ENH_CAPTURE_ENDIS_PER_PEER, 1649 CDP_TX_ENH_CAPTURE_MAX, 1650 }; 1651 1652 /** 1653 * enum cdp_pdev_bpr_param - different types of parameters 1654 * to set value in pdev 1655 * @CDP_BPR_DISABLE: Set bpr to disable state 1656 * @CDP_BPR_ENABLE: set bpr to enable state 1657 * 1658 * Enum indicating bpr state to enable/disable. 1659 */ 1660 enum cdp_pdev_bpr_param { 1661 CDP_BPR_DISABLE, 1662 CDP_BPR_ENABLE, 1663 }; 1664 1665 /** 1666 * enum cdp_vdev_param_type - different types of parameters 1667 * to set values in vdev 1668 * @CDP_ENABLE_NAWDS: set nawds enable/disable 1669 * @CDP_ENABLE_MCAST_EN: enable/disable multicast enhancement 1670 * @CDP_ENABLE_WDS: wds sta 1671 * @CDP_ENABLE_MEC: MEC enable flags 1672 * @CDP_ENABLE_DA_WAR: 1673 * @CDP_ENABLE_PROXYSTA: proxy sta 1674 * @CDP_UPDATE_TDLS_FLAGS: tdls link flags 1675 * @CDP_CFG_WDS_AGING_TIMER: modify/stop wds aging timer 1676 * @CDP_ENABLE_AP_BRIDGE: set ap_bridging enable/disable 1677 * @CDP_ENABLE_CIPHER: set cipher type based on security 1678 * @CDP_ENABLE_QWRAP_ISOLATION: qwrap isolation mode 1679 * @CDP_UPDATE_MULTIPASS: enable/disable multipass 1680 * @CDP_TX_ENCAP_TYPE: tx encap type 1681 * @CDP_RX_DECAP_TYPE: rx decap type 1682 * @CDP_MESH_RX_FILTER: set mesh rx filter 1683 * @CDP_TID_VDEV_PRTY: set tid vdev prty 1684 * @CDP_TIDMAP_TBL_ID: set tidmap table id 1685 * @CDP_MESH_MODE: set mesh mode 1686 * @CDP_SAFEMODE: set safe mode 1687 * @CDP_DROP_UNENC: set drop unencrypted flag 1688 * @CDP_ENABLE_IGMP_MCAST_EN: enable/disable igmp multicast enhancement 1689 * @CDP_ENABLE_HLOS_TID_OVERRIDE: set hlos tid override flag 1690 * @CDP_CFG_WDS_EXT: enable/disable wds ext feature 1691 * @CDP_DROP_TX_MCAST: enable/disable tx mcast drop 1692 * @CDP_ENABLE_PEER_AUTHORIZE: enable peer authorize flag 1693 * @CDP_ENABLE_PEER_TID_LATENCY: set peer tid latency enable flag 1694 * @CDP_SET_VAP_MESH_TID: Set latency tid in vap 1695 * @CDP_SKIP_BAR_UPDATE_AP: enable/disable bar 1696 * @CDP_UPDATE_DSCP_TO_TID_MAP: Set DSCP to TID map id 1697 * @CDP_SET_MCAST_VDEV: Set primary mcast vdev 1698 * @CDP_RESET_MLO_MCAST_VDEV: Reset mlo mcast vdev settings 1699 * @CDP_SET_MCAST_VDEV_HW_UPDATE: Not in use 1700 * @CDP_DROP_3ADDR_MCAST: enable/disable drop 3addr multicast flag 1701 * @CDP_ENABLE_WRAP: qwrap ap 1702 * @CDP_ENABLE_TRAFFIC_END_INDICATION: enable/disable traffic end indication 1703 * @CDP_VDEV_TX_TO_FW: Set to_fw bit for tx packets for the vdev 1704 * @CDP_VDEV_SET_MAC_ADDR: Set mac address for vdev 1705 */ 1706 enum cdp_vdev_param_type { 1707 CDP_ENABLE_NAWDS, 1708 CDP_ENABLE_MCAST_EN, 1709 CDP_ENABLE_WDS, 1710 CDP_ENABLE_MEC, 1711 CDP_ENABLE_DA_WAR, 1712 CDP_ENABLE_PROXYSTA, 1713 CDP_UPDATE_TDLS_FLAGS, 1714 CDP_CFG_WDS_AGING_TIMER, 1715 CDP_ENABLE_AP_BRIDGE, 1716 CDP_ENABLE_CIPHER, 1717 CDP_ENABLE_QWRAP_ISOLATION, 1718 CDP_UPDATE_MULTIPASS, 1719 CDP_TX_ENCAP_TYPE, 1720 CDP_RX_DECAP_TYPE, 1721 CDP_MESH_RX_FILTER, 1722 CDP_TID_VDEV_PRTY, 1723 CDP_TIDMAP_TBL_ID, 1724 #ifdef MESH_MODE_SUPPORT 1725 CDP_MESH_MODE, 1726 #endif 1727 CDP_SAFEMODE, 1728 CDP_DROP_UNENC, 1729 CDP_ENABLE_IGMP_MCAST_EN, 1730 CDP_ENABLE_HLOS_TID_OVERRIDE, 1731 #ifdef QCA_SUPPORT_WDS_EXTENDED 1732 CDP_CFG_WDS_EXT, 1733 CDP_DROP_TX_MCAST, 1734 #endif /* QCA_SUPPORT_WDS_EXTENDED */ 1735 CDP_ENABLE_PEER_AUTHORIZE, 1736 #ifdef WLAN_SUPPORT_MESH_LATENCY 1737 CDP_ENABLE_PEER_TID_LATENCY, 1738 CDP_SET_VAP_MESH_TID, 1739 #endif 1740 #ifdef WLAN_VENDOR_SPECIFIC_BAR_UPDATE 1741 CDP_SKIP_BAR_UPDATE_AP, 1742 #endif 1743 CDP_UPDATE_DSCP_TO_TID_MAP, 1744 CDP_SET_MCAST_VDEV, 1745 CDP_RESET_MLO_MCAST_VDEV, 1746 CDP_SET_MCAST_VDEV_HW_UPDATE, 1747 CDP_DROP_3ADDR_MCAST, 1748 CDP_ENABLE_WRAP, 1749 #ifdef DP_TRAFFIC_END_INDICATION 1750 CDP_ENABLE_TRAFFIC_END_INDICATION, 1751 #endif 1752 #ifdef FEATURE_DIRECT_LINK 1753 CDP_VDEV_TX_TO_FW, 1754 #endif 1755 CDP_VDEV_SET_MAC_ADDR, 1756 }; 1757 1758 /** 1759 * enum cdp_psoc_param_type - different types of parameters 1760 * to set values in psoc 1761 * @CDP_ENABLE_RATE_STATS: set rate stats enable/disable 1762 * @CDP_SET_NSS_CFG: set nss cfg 1763 * @CDP_SET_PREFERRED_HW_MODE: set preferred hw mode 1764 * @CDP_CFG_PEER_EXT_STATS: Peer extended stats mode. 1765 * @CDP_IPA_ENABLE : set IPA enable mode. 1766 * @CDP_CFG_VDEV_STATS_HW_OFFLOAD: HW Vdev stats config 1767 * @CDP_SAWF_ENABLE: 1768 * @CDP_UMAC_RST_SKEL_ENABLE: Enable Umac reset skeleton code for debug 1769 * @CDP_SAWF_STATS: set SAWF stats config 1770 * @CDP_UMAC_RESET_STATS: UMAC reset stats 1771 * @CDP_CFG_RX_PEER_METADATA_VER: RX peer metadata configuration 1772 * @CDP_TXRX_HAL_SOC_HDL: HAL soc handle 1773 * @CDP_CFG_TX_DESC_NUM: number of TX descriptors config 1774 * @CDP_CFG_TX_EXT_DESC_NUM: number of TX EXT descriptors config 1775 * @CDP_CFG_TX_RING_SIZE: TX ring size config param 1776 * @CDP_CFG_TX_COMPL_RING_SIZE: TX completion ring size param 1777 * @CDP_CFG_RX_SW_DESC_NUM: RX SW descriptor number 1778 * @CDP_CFG_REO_DST_RING_SIZE: REO destination ring size config 1779 * @CDP_CFG_RXDMA_REFILL_RING_SIZE: RXDMA refill ring size config 1780 * @CDP_CFG_RX_REFILL_POOL_NUM: RX refill pool size config param 1781 * @CDP_CFG_FISA_PARAMS: FISA params 1782 * @CDP_RX_PKT_TLV_SIZE: RX pkt tlv size 1783 * @CDP_CFG_AST_INDICATION_DISABLE: AST indication disable 1784 * @CDP_CFG_GET_MLO_OPER_MODE: Get MLO operation mode 1785 * @CDP_CFG_PEER_JITTER_STATS: Peer Jitter Stats 1786 * @CDP_CONFIG_DP_DEBUG_LOG: set/get dp debug logging 1787 * @CDP_MONITOR_FLAG: Monitor interface configuration 1788 */ 1789 enum cdp_psoc_param_type { 1790 CDP_ENABLE_RATE_STATS, 1791 CDP_SET_NSS_CFG, 1792 CDP_SET_PREFERRED_HW_MODE, 1793 CDP_CFG_PEER_EXT_STATS, 1794 CDP_IPA_ENABLE, 1795 CDP_CFG_VDEV_STATS_HW_OFFLOAD, 1796 CDP_SAWF_ENABLE, 1797 CDP_UMAC_RST_SKEL_ENABLE, 1798 CDP_SAWF_STATS, 1799 CDP_UMAC_RESET_STATS, 1800 CDP_CFG_RX_PEER_METADATA_VER, 1801 CDP_TXRX_HAL_SOC_HDL, 1802 CDP_CFG_TX_DESC_NUM, 1803 CDP_CFG_TX_EXT_DESC_NUM, 1804 CDP_CFG_TX_RING_SIZE, 1805 CDP_CFG_TX_COMPL_RING_SIZE, 1806 CDP_CFG_RX_SW_DESC_NUM, 1807 CDP_CFG_REO_DST_RING_SIZE, 1808 CDP_CFG_RXDMA_REFILL_RING_SIZE, 1809 #ifdef WLAN_FEATURE_RX_PREALLOC_BUFFER_POOL 1810 CDP_CFG_RX_REFILL_POOL_NUM, 1811 #endif 1812 CDP_CFG_FISA_PARAMS, 1813 CDP_RX_PKT_TLV_SIZE, 1814 CDP_CFG_AST_INDICATION_DISABLE, 1815 CDP_CFG_GET_MLO_OPER_MODE, 1816 CDP_CFG_PEER_JITTER_STATS, 1817 CDP_CONFIG_DP_DEBUG_LOG, 1818 CDP_MONITOR_FLAG, 1819 }; 1820 1821 #ifdef CONFIG_AP_PLATFORM 1822 /* RX peer metadata version if v1a_v1b is supported */ 1823 #define CDP_RX_PEER_METADATA_V1_A_B 3 1824 #else 1825 #define CDP_RX_PEER_METADATA_V1_A_B 2 1826 #endif 1827 1828 #define TXRX_FW_STATS_TXSTATS 1 1829 #define TXRX_FW_STATS_RXSTATS 2 1830 #define TXRX_FW_STATS_RX_RATE_INFO 3 1831 #define TXRX_FW_STATS_PHYSTATS 4 1832 #define TXRX_FW_STATS_PHYSTATS_CONCISE 5 1833 #define TXRX_FW_STATS_TX_RATE_INFO 6 1834 #define TXRX_FW_STATS_TID_STATE 7 1835 #define TXRX_FW_STATS_HOST_STATS 8 1836 #define TXRX_FW_STATS_CLEAR_HOST_STATS 9 1837 #define TXRX_FW_STATS_CE_STATS 10 1838 #define TXRX_FW_STATS_VOW_UMAC_COUNTER 11 1839 #define TXRX_FW_STATS_ME_STATS 12 1840 #define TXRX_FW_STATS_TXBF_INFO 13 1841 #define TXRX_FW_STATS_SND_INFO 14 1842 #define TXRX_FW_STATS_ERROR_INFO 15 1843 #define TXRX_FW_STATS_TX_SELFGEN_INFO 16 1844 #define TXRX_FW_STATS_TX_MU_INFO 17 1845 #define TXRX_FW_SIFS_RESP_INFO 18 1846 #define TXRX_FW_RESET_STATS 19 1847 #define TXRX_FW_MAC_WDOG_STATS 20 1848 #define TXRX_FW_MAC_DESC_STATS 21 1849 #define TXRX_FW_MAC_FETCH_MGR_STATS 22 1850 #define TXRX_FW_MAC_PREFETCH_MGR_STATS 23 1851 #define TXRX_FW_STATS_DURATION_INFO 24 1852 #define TXRX_FW_STATS_DURATION_INFO_RESET 25 1853 #define TXRX_FW_HALPHY_STATS 26 1854 #define TXRX_FW_COEX_STATS 27 1855 1856 #define PER_RADIO_FW_STATS_REQUEST 0 1857 #define PER_VDEV_FW_STATS_REQUEST 1 1858 /** 1859 * enum data_stall_log_event_indicator - Module triggering data stall 1860 * @DATA_STALL_LOG_INDICATOR_UNUSED: Unused 1861 * @DATA_STALL_LOG_INDICATOR_HOST_DRIVER: Host driver indicates data stall 1862 * @DATA_STALL_LOG_INDICATOR_FIRMWARE: FW indicates data stall 1863 * @DATA_STALL_LOG_INDICATOR_FRAMEWORK: Framework indicates data stall 1864 * 1865 * Enum indicating the module that indicates data stall event 1866 */ 1867 enum data_stall_log_event_indicator { 1868 DATA_STALL_LOG_INDICATOR_UNUSED, 1869 DATA_STALL_LOG_INDICATOR_HOST_DRIVER, 1870 DATA_STALL_LOG_INDICATOR_FIRMWARE, 1871 DATA_STALL_LOG_INDICATOR_FRAMEWORK, 1872 }; 1873 1874 /** 1875 * enum data_stall_log_event_type - data stall event type 1876 * @DATA_STALL_LOG_NONE: 1877 * @DATA_STALL_LOG_FW_VDEV_PAUSE: 1878 * @DATA_STALL_LOG_HWSCHED_CMD_FILTER: 1879 * @DATA_STALL_LOG_HWSCHED_CMD_FLUSH: 1880 * @DATA_STALL_LOG_FW_RX_REFILL_FAILED: 1881 * @DATA_STALL_LOG_FW_RX_FCS_LEN_ERROR: 1882 * @DATA_STALL_LOG_FW_WDOG_ERRORS: 1883 * @DATA_STALL_LOG_BB_WDOG_ERROR: 1884 * @DATA_STALL_LOG_POST_TIM_NO_TXRX_ERROR: 1885 * @DATA_STALL_LOG_HOST_STA_TX_TIMEOUT: 1886 * @DATA_STALL_LOG_HOST_SOFTAP_TX_TIMEOUT: 1887 * @DATA_STALL_LOG_NUD_FAILURE: 1888 * 1889 * Enum indicating data stall event type 1890 */ 1891 enum data_stall_log_event_type { 1892 DATA_STALL_LOG_NONE, 1893 DATA_STALL_LOG_FW_VDEV_PAUSE, 1894 DATA_STALL_LOG_HWSCHED_CMD_FILTER, 1895 DATA_STALL_LOG_HWSCHED_CMD_FLUSH, 1896 DATA_STALL_LOG_FW_RX_REFILL_FAILED, 1897 DATA_STALL_LOG_FW_RX_FCS_LEN_ERROR, 1898 DATA_STALL_LOG_FW_WDOG_ERRORS, 1899 DATA_STALL_LOG_BB_WDOG_ERROR, 1900 DATA_STALL_LOG_POST_TIM_NO_TXRX_ERROR, 1901 /* Stall events triggered by host/framework start from 0x100 onwards. */ 1902 DATA_STALL_LOG_HOST_STA_TX_TIMEOUT = 0x100, 1903 DATA_STALL_LOG_HOST_SOFTAP_TX_TIMEOUT, 1904 DATA_STALL_LOG_NUD_FAILURE, 1905 }; 1906 1907 /** 1908 * enum data_stall_log_recovery_type - data stall recovery type 1909 * @DATA_STALL_LOG_RECOVERY_NONE: 1910 * @DATA_STALL_LOG_RECOVERY_CONNECT_DISCONNECT: 1911 * @DATA_STALL_LOG_RECOVERY_TRIGGER_PDR: 1912 * 1913 * Enum indicating data stall recovery type 1914 */ 1915 enum data_stall_log_recovery_type { 1916 DATA_STALL_LOG_RECOVERY_NONE = 0, 1917 DATA_STALL_LOG_RECOVERY_CONNECT_DISCONNECT, 1918 DATA_STALL_LOG_RECOVERY_TRIGGER_PDR, 1919 }; 1920 1921 /** 1922 * struct data_stall_event_info - data stall info 1923 * @indicator: Module triggering data stall 1924 * @data_stall_type: data stall event type 1925 * @vdev_id_bitmap: vdev_id_bitmap 1926 * @pdev_id: pdev id 1927 * @recovery_type: data stall recovery type 1928 */ 1929 struct data_stall_event_info { 1930 uint32_t indicator; 1931 uint32_t data_stall_type; 1932 uint32_t vdev_id_bitmap; 1933 uint32_t pdev_id; 1934 uint32_t recovery_type; 1935 }; 1936 1937 typedef void (*data_stall_detect_cb)(struct data_stall_event_info *); 1938 1939 /** 1940 * enum cdp_stats - options for host and firmware statistics 1941 * @CDP_TXRX_STATS_0: 1942 * @CDP_TXRX_STATS_1: HTT Pdev tx stats 1943 * @CDP_TXRX_STATS_2: HTT Pdev rx stats 1944 * @CDP_TXRX_STATS_3: HTT Pdev Tx HW Queue stats 1945 * @CDP_TXRX_STATS_4: HTT Pdev Tx HW Sched stats 1946 * @CDP_TXRX_STATS_5: HTT Pdev error stats 1947 * @CDP_TXRX_STATS_6: HTT TQM stats 1948 * @CDP_TXRX_STATS_7: HTT TQM CMDQ stats 1949 * @CDP_TXRX_STATS_8: HTT Tx_de_cmn thread stats 1950 * @CDP_TXRX_STATS_9: HTT Pdev Tx rate stats 1951 * @CDP_TXRX_STATS_10: HTT Pdev Rx rate stats 1952 * @CDP_TXRX_STATS_11: HTT Peer stats 1953 * @CDP_TXRX_STATS_12: HTT Tx Self Gen Info 1954 * @CDP_TXRX_STATS_13: HTT Tx MU HWQ stats 1955 * @CDP_TXRX_STATS_14: HTT Ring interface info stats 1956 * @CDP_TXRX_STATS_15: HTT SRNG info stats 1957 * @CDP_TXRX_STATS_16: HTT SFM info stats 1958 * @CDP_TXRX_STATS_17: HTT Pdev tx mu mimo sched info 1959 * @CDP_TXRX_STATS_18: HTT Peer list details 1960 * @CDP_TXRX_STATS_19: Reserved 1961 * @CDP_TXRX_STATS_20: Reset Host stats 1962 * @CDP_TXRX_STATS_21: Host Rx rate stats 1963 * @CDP_TXRX_STATS_22: Host Tx rate stats 1964 * @CDP_TXRX_STATS_23: Host Tx stats 1965 * @CDP_TXRX_STATS_24: Host Rx stats 1966 * @CDP_TXRX_STATS_25: Host Ast stats 1967 * @CDP_TXRX_STATS_26: Host Head/Tail Pointer stats 1968 * @CDP_TXRX_STATS_27: Host Monitor mode stats 1969 * @CDP_TXRX_STATS_28: Host Peer entry stats 1970 * @CDP_TXRX_STATS_29: Host Soc config params info 1971 * @CDP_TXRX_STATS_30: Host Pdev config params info 1972 * @CDP_TXRX_STATS_31: Host DP Interrupt Stats 1973 * @CDP_TXRX_STATS_HTT_MAX: 1974 * @CDP_TXRX_MAX_STATS: 1975 */ 1976 enum cdp_stats { 1977 CDP_TXRX_STATS_0 = 0, 1978 CDP_TXRX_STATS_1, 1979 CDP_TXRX_STATS_2, 1980 CDP_TXRX_STATS_3, 1981 CDP_TXRX_STATS_4, 1982 CDP_TXRX_STATS_5, 1983 CDP_TXRX_STATS_6, 1984 CDP_TXRX_STATS_7, 1985 CDP_TXRX_STATS_8, 1986 CDP_TXRX_STATS_9, 1987 CDP_TXRX_STATS_10, 1988 CDP_TXRX_STATS_11, 1989 CDP_TXRX_STATS_12, 1990 CDP_TXRX_STATS_13, 1991 CDP_TXRX_STATS_14, 1992 CDP_TXRX_STATS_15, 1993 CDP_TXRX_STATS_16, 1994 CDP_TXRX_STATS_17, 1995 CDP_TXRX_STATS_18, 1996 CDP_TXRX_STATS_19, 1997 CDP_TXRX_STATS_20, 1998 CDP_TXRX_STATS_21, 1999 CDP_TXRX_STATS_22, 2000 CDP_TXRX_STATS_23, 2001 CDP_TXRX_STATS_24, 2002 CDP_TXRX_STATS_25, 2003 CDP_TXRX_STATS_26, 2004 CDP_TXRX_STATS_27, 2005 CDP_TXRX_STATS_28, 2006 CDP_TXRX_STATS_29, 2007 CDP_TXRX_STATS_30, 2008 CDP_TXRX_STATS_31, 2009 CDP_TXRX_STATS_HTT_MAX = 256, 2010 CDP_TXRX_MAX_STATS = 265, 2011 }; 2012 2013 /** 2014 * enum cdp_stat_update_type - Different Stat update types sent to 2015 * OL_IF 2016 * @UPDATE_PEER_STATS: update peer stats 2017 * @UPDATE_VDEV_STATS: update vdev stats 2018 * @UPDATE_PDEV_STATS: Update pdev stats 2019 * @UPDATE_VDEV_STATS_MLD: Update mld vdev stats 2020 */ 2021 enum cdp_stat_update_type { 2022 UPDATE_PEER_STATS = 0, 2023 UPDATE_VDEV_STATS = 1, 2024 UPDATE_PDEV_STATS = 2, 2025 UPDATE_VDEV_STATS_MLD = 3, 2026 }; 2027 2028 /** 2029 * struct cdp_tx_sojourn_stats - Tx sojourn stats 2030 * @ppdu_seq_id: ppdu_seq_id from tx completion 2031 * @avg_sojourn_msdu: average sojourn msdu time 2032 * @sum_sojourn_msdu: sum sojourn msdu time 2033 * @num_msdus: number of msdus per ppdu 2034 * @cookie: cookie to be used by upper layer 2035 */ 2036 struct cdp_tx_sojourn_stats { 2037 uint32_t ppdu_seq_id; 2038 qdf_ewma_tx_lag avg_sojourn_msdu[CDP_DATA_TID_MAX]; 2039 uint32_t sum_sojourn_msdu[CDP_DATA_TID_MAX]; 2040 uint32_t num_msdus[CDP_DATA_TID_MAX]; 2041 struct cdp_stats_cookie *cookie; 2042 }; 2043 2044 /** 2045 * struct cdp_delayed_tx_completion_ppdu_user - Delayed Tx PPDU completion 2046 * per-user information 2047 * @frame_ctrl: frame control field in 802.11 header 2048 * @qos_ctrl: QoS control field in 802.11 header 2049 * @mpdu_tried_ucast: number of unicast mpdus tried 2050 * @mpdu_tried_mcast: number of multicastmpdus tried 2051 * @ltf_size: ltf_size 2052 * @stbc: stbc 2053 * @he_re: he_re (range extension) 2054 * @txbf: txbf 2055 * @bw: Transmission bandwidth 2056 * <enum 2 transmit_bw_20_MHz> 2057 * <enum 3 transmit_bw_40_MHz> 2058 * <enum 4 transmit_bw_80_MHz> 2059 * <enum 5 transmit_bw_160_MHz> 2060 * @nss: NSS 1,2, ...8 2061 * @mcs: MCS index 2062 * @preamble: preamble 2063 * @gi: guard interval 800/400/1600/3200 ns 2064 * @dcm: dcm 2065 * @ldpc: ldpc 2066 * @delayed_ba: 2067 * @ru_start: RU start index 2068 * @ru_tones: RU tones length 2069 * @is_mcast: MCAST or UCAST 2070 * @user_pos: user position 2071 * @mu_group_id: mu group id 2072 * @ppdu_start_timestamp: 64 bits ppdu start timestamp 2073 * @ppdu_end_timestamp: 64 bits ppdu end timestamp 2074 */ 2075 struct cdp_delayed_tx_completion_ppdu_user { 2076 uint32_t frame_ctrl:16, 2077 qos_ctrl:16; 2078 uint32_t mpdu_tried_ucast:16, 2079 mpdu_tried_mcast:16; 2080 uint32_t ltf_size:2, 2081 stbc:1, 2082 he_re:1, 2083 txbf:4, 2084 bw:4, 2085 nss:4, 2086 mcs:4, 2087 preamble:4, 2088 gi:4, 2089 dcm:1, 2090 ldpc:1, 2091 delayed_ba:1; 2092 uint16_t ru_start; 2093 uint16_t ru_tones; 2094 bool is_mcast; 2095 uint32_t user_pos; 2096 uint32_t mu_group_id; 2097 uint64_t ppdu_start_timestamp; 2098 uint64_t ppdu_end_timestamp; 2099 }; 2100 2101 /** 2102 * struct cdp_tx_completion_ppdu_user - Tx PPDU completion per-user information 2103 * @completion_status: completion status - OK/Filter/Abort/Timeout 2104 * @tid: TID number 2105 * @peer_id: Peer ID 2106 * @mac_addr: 2107 * @ba_size: Block-Ack size 2108 * @frame_ctrl: frame control field in 802.11 header 2109 * @qos_ctrl: QoS control field in 802.11 header 2110 * @mpdu_tried_ucast: number of unicast mpdus tried 2111 * @mpdu_tried_mcast: number of multicast mpdus tried 2112 * @mpdu_success: number of mpdus successfully transmitted 2113 * @mpdu_failed: 2114 * @long_retries: long retries 2115 * @short_retries: short retries 2116 * @tx_ratecode: 2117 * @is_ampdu: mpdu aggregate or non-aggregate? 2118 * @ppdu_type: 2119 * @pream_punct: 2120 * @is_seq_num_valid: 2121 * @success_bytes: bytes successfully transmitted 2122 * @retry_bytes: bytes retried 2123 * @failed_bytes: 2124 * @success_msdus: MSDUs successfully transmitted 2125 * @retry_msdus: MSDUs retried 2126 * @retry_mpdus: MPDUs retried 2127 * @failed_msdus: MSDUs failed transmission 2128 * @duration: user duration in ppdu 2129 * @ltf_size: ltf_size 2130 * @stbc: stbc 2131 * @he_re: he_re (range extension) 2132 * @txbf: txbf 2133 * @bw: Transmission bandwidth 2134 * <enum 2 transmit_bw_20_MHz> 2135 * <enum 3 transmit_bw_40_MHz> 2136 * <enum 4 transmit_bw_80_MHz> 2137 * <enum 5 transmit_bw_160_MHz> 2138 * @nss: NSS 1,2, ...8 2139 * @mcs: MCS index 2140 * @preamble: preamble 2141 * @gi: guard interval 800/400/1600/3200 ns 2142 * @dcm: dcm 2143 * @ldpc: ldpc 2144 * @delayed_ba: delayed ba bit 2145 * @ack_ba_tlv: ack ba recv tlv bit 2146 * @ba_seq_no: Block Ack sequence number 2147 * @ba_bitmap: Block Ack bitmap 2148 * @start_seq: Sequence number of first MPDU 2149 * @enq_bitmap: Enqueue MPDU bitmap 2150 * @failed_bitmap: 2151 * @num_mpdu: 2152 * @num_msdu: 2153 * @tx_duration: 2154 * @ru_start: RU start index 2155 * @ru_tones: RU tones length 2156 * @is_mcast: MCAST or UCAST 2157 * @tx_rate: Transmission Rate 2158 * @tx_ratekbps: 2159 * @ack_rssi: ack rssi for separate chains 2160 * @ack_rssi_valid: 2161 * @usr_ack_rssi: 2162 * @user_pos: user position 2163 * @mu_group_id: mu group id 2164 * @rix: rate index 2165 * @is_ppdu_cookie_valid : Indicates that ppdu_cookie is valid 2166 * @ppdu_cookie: 16-bit ppdu_cookie 2167 * @sa_is_training: smart antenna training packets indication 2168 * @rssi_chain: rssi chain per bandwidth 2169 * @sa_tx_antenna: antenna in which packet is transmitted 2170 * @sa_max_rates: smart antenna tx feedback info max rates 2171 * @sa_goodput: smart antenna tx feedback info goodput 2172 * @current_rate_per: Moving average per 2173 * @last_enq_seq: last equeue sequence number 2174 * @is_bss_peer: is bss peer check 2175 * @mpdu_q: queue of mpdu in a ppdu 2176 * @mpdus: MPDU list based on enqueue sequence bitmap 2177 * @pending_retries: pending MPDUs (retries) 2178 * @tlv_bitmap: per user tlv bitmap 2179 * @skip: tx capture skip flag 2180 * @mon_procd: to indicate user processed in ppdu of the sched cmd 2181 * @debug_copied: flag to indicate bar frame copied 2182 * @peer_last_delayed_ba: flag to indicate peer last delayed ba 2183 * @phy_tx_time_us: Phy TX duration for the User 2184 * @mpdu_bytes: accumulated bytes per mpdu for mem limit feature 2185 * @punc_mode: puncutured mode to indicate punctured bw 2186 * @punc_pattern_bitmap: bitmap indicating punctured pattern 2187 * @fixed_rate_used: flag to indicate fixed rate TX 2188 * @mprot_type: medium protection type 2189 * @msduq_bitmap: msduq bitmap 2190 * @rts_success: rts success 2191 * @rts_failure: rts failure 2192 */ 2193 struct cdp_tx_completion_ppdu_user { 2194 uint32_t completion_status:8, 2195 tid:8, 2196 peer_id:16; 2197 uint8_t mac_addr[6]; 2198 uint16_t ba_size; 2199 uint32_t frame_ctrl:16, 2200 qos_ctrl:16; 2201 uint32_t mpdu_tried_ucast:16, 2202 mpdu_tried_mcast:16; 2203 uint16_t mpdu_success:16; 2204 uint16_t mpdu_failed:16; 2205 uint32_t long_retries:4, 2206 short_retries:4, 2207 tx_ratecode:16, 2208 is_ampdu:1, 2209 ppdu_type:5, 2210 pream_punct:1, 2211 is_seq_num_valid:1; 2212 uint32_t success_bytes; 2213 uint32_t retry_bytes; 2214 uint32_t failed_bytes; 2215 uint32_t success_msdus:16, 2216 retry_msdus:16; 2217 uint32_t retry_mpdus; 2218 uint32_t failed_msdus:16, 2219 duration:16; 2220 uint32_t ltf_size:2, 2221 stbc:1, 2222 he_re:1, 2223 txbf:4, 2224 bw:4, 2225 nss:4, 2226 mcs:4, 2227 preamble:4, 2228 gi:4, 2229 dcm:1, 2230 ldpc:1, 2231 delayed_ba:1, 2232 ack_ba_tlv:1; 2233 uint32_t ba_seq_no; 2234 uint32_t ba_bitmap[CDP_BA_256_BIT_MAP_SIZE_DWORDS]; 2235 uint32_t start_seq; 2236 uint32_t enq_bitmap[CDP_BA_256_BIT_MAP_SIZE_DWORDS]; 2237 uint32_t failed_bitmap[CDP_BA_256_BIT_MAP_SIZE_DWORDS]; 2238 uint32_t num_mpdu:9, 2239 num_msdu:16; 2240 uint32_t tx_duration; 2241 uint16_t ru_start; 2242 uint16_t ru_tones; 2243 bool is_mcast; 2244 uint32_t tx_rate; 2245 uint32_t tx_ratekbps; 2246 uint32_t ack_rssi[CDP_RSSI_CHAIN_LEN]; 2247 bool ack_rssi_valid; 2248 uint32_t usr_ack_rssi; 2249 uint32_t user_pos; 2250 uint32_t mu_group_id; 2251 uint32_t rix; 2252 uint8_t is_ppdu_cookie_valid; 2253 uint16_t ppdu_cookie; 2254 uint8_t sa_is_training; 2255 int32_t rssi_chain[CDP_RSSI_CHAIN_LEN]; 2256 uint32_t sa_tx_antenna; 2257 /*Max rates for BW: 20MHZ, 40MHZ and 80MHZ and 160MHZ and 320MHZ 2258 * |-------------------------------------------------| 2259 * | 16 bits | 16 bits | 16 bits | 16 bits | 16 bits | 2260 * | BW-1 | BW-2 | BW-3 | BW-4 | BW-5 | 2261 * | /\ \ | 2262 * | / \ \ | 2263 * | / \ \ | 2264 * | / \ \ | 2265 * | / \ \ | 2266 * | / \ \ | 2267 * |/ \ \ | 2268 * |[11|8] [5|8] \ | 2269 * | BW1 PADDED \ | 2270 * |-------------------------------------------------| 2271 */ 2272 uint16_t sa_max_rates[CDP_NUM_SA_BW + 1]; 2273 uint32_t sa_goodput; 2274 /* below field is used to calculate goodput in non-training period 2275 * Note: As host is exposing goodput and hence current_rate_per is 2276 * of no use. It is just for Host computation. 2277 */ 2278 uint32_t current_rate_per; 2279 uint32_t last_enq_seq; 2280 2281 uint8_t is_bss_peer; 2282 2283 qdf_nbuf_queue_t mpdu_q; 2284 qdf_nbuf_t *mpdus; 2285 uint32_t pending_retries; 2286 uint32_t tlv_bitmap; 2287 bool skip; 2288 bool mon_procd; 2289 bool debug_copied; 2290 bool peer_last_delayed_ba; 2291 2292 uint16_t phy_tx_time_us; 2293 uint32_t mpdu_bytes; 2294 uint8_t punc_mode; 2295 uint32_t punc_pattern_bitmap:16, 2296 fixed_rate_used:1; 2297 uint32_t msduq_bitmap; 2298 uint8_t mprot_type:3, 2299 rts_success:1, 2300 rts_failure:1; 2301 }; 2302 2303 /** 2304 * struct cdp_tx_indication_mpdu_info - Tx MPDU completion information 2305 * @ppdu_id: PPDU id 2306 * @tx_duration: user duration in ppdu 2307 * @frame_type: frame type MGMT/CTRL/DATA/BAR 2308 * @frame_ctrl: frame control field in 802.11 header 2309 * @qos_ctrl: QoS control field in 802.11 header 2310 * @tid: TID number 2311 * @num_msdu: number of msdu in MPDU 2312 * @seq_no: Sequence number of first MPDU 2313 * @ltf_size: ltf_size 2314 * @he_re: he_re (range extension) 2315 * @txbf: txbf 2316 * @bw: Transmission bandwidth 2317 * <enum 2 transmit_bw_20_MHz> 2318 * <enum 3 transmit_bw_40_MHz> 2319 * <enum 4 transmit_bw_80_MHz> 2320 * <enum 5 transmit_bw_160_MHz> 2321 * @nss: NSS 1,2, ...8 2322 * @mcs: MCS index 2323 * @preamble: preamble 2324 * @gi: guard interval 800/400/1600/3200 ns 2325 * @channel: frequency 2326 * @channel_num: channel number 2327 * @ack_rssi: ack rssi 2328 * @ldpc: ldpc 2329 * @tx_rate: Transmission Rate 2330 * @mac_address: peer mac address 2331 * @bss_mac_address: bss mac address 2332 * @ppdu_start_timestamp: TSF at PPDU start 2333 * @ppdu_end_timestamp: TSF at PPDU end 2334 * @ba_start_seq: Block Ack sequence number 2335 * @ba_bitmap: Block Ack bitmap 2336 * @ppdu_cookie: 16-bit ppdu_cookie 2337 * @long_retries: long retries 2338 * @short_retries: short retries 2339 * @completion_status: completion status - OK/Filter/Abort/Timeout 2340 * @resp_type: response type 2341 * @mprot_type: medium protection type 2342 * @rts_success: rts success 2343 * @rts_failure: rts failure 2344 * @usr_idx: user index 2345 */ 2346 struct cdp_tx_indication_mpdu_info { 2347 uint32_t ppdu_id; 2348 uint32_t tx_duration; 2349 uint16_t frame_type; 2350 uint16_t frame_ctrl; 2351 uint16_t qos_ctrl; 2352 uint8_t tid; 2353 uint32_t num_msdu; 2354 uint32_t seq_no; 2355 uint32_t ltf_size:2, 2356 he_re:1, 2357 txbf:4, 2358 bw:4, 2359 nss:4, 2360 mcs:4, 2361 preamble:4, 2362 gi:4; 2363 uint32_t channel; 2364 uint8_t channel_num; 2365 uint32_t ack_rssi; 2366 uint32_t ldpc; 2367 uint32_t tx_rate; 2368 uint8_t mac_address[QDF_MAC_ADDR_SIZE]; 2369 uint8_t bss_mac_address[QDF_MAC_ADDR_SIZE]; 2370 uint64_t ppdu_start_timestamp; 2371 uint64_t ppdu_end_timestamp; 2372 uint32_t ba_start_seq; 2373 uint32_t ba_bitmap[CDP_BA_256_BIT_MAP_SIZE_DWORDS]; 2374 uint16_t ppdu_cookie; 2375 uint16_t long_retries:4, 2376 short_retries:4, 2377 completion_status:8; 2378 uint16_t resp_type:4, 2379 mprot_type:3, 2380 rts_success:1, 2381 rts_failure:1; 2382 uint8_t usr_idx; 2383 }; 2384 2385 /** 2386 * struct cdp_tx_indication_info - Tx capture information 2387 * @radiotap_done: Flag to say radiotap already done or not 2388 * 0 - radiotap not updated 2389 * 1 - radiotap header updated 2390 * @mpdu_info: Tx MPDU completion information 2391 * @mpdu_nbuf: reconstructed mpdu packet 2392 * @ppdu_desc: tx completion ppdu 2393 * @osif_vdev: OS IF vdev handle 2394 */ 2395 struct cdp_tx_indication_info { 2396 bool radiotap_done; 2397 struct cdp_tx_indication_mpdu_info mpdu_info; 2398 qdf_nbuf_t mpdu_nbuf; 2399 struct cdp_tx_completion_ppdu *ppdu_desc; 2400 #ifdef QCA_SUPPORT_LITE_MONITOR 2401 ol_osif_vdev_handle osif_vdev; 2402 #endif 2403 }; 2404 2405 /** 2406 * struct cdp_tx_mgmt_comp_info - Tx mgmt comp info 2407 * @ppdu_id: ppdu_id 2408 * @is_sgen_pkt: payload received from wmi or htt path 2409 * @retries_count: retries count 2410 * @tx_tsf: 64 bit timestamp 2411 */ 2412 struct cdp_tx_mgmt_comp_info { 2413 uint32_t ppdu_id; 2414 bool is_sgen_pkt; 2415 uint16_t retries_count; 2416 uint64_t tx_tsf; 2417 }; 2418 2419 /** 2420 * struct cdp_tx_completion_ppdu - Tx PPDU completion information 2421 * @completion_status: completion status - OK/Filter/Abort/Timeout 2422 * @ppdu_id: PPDU Id 2423 * @ppdu_seq_id: ppdu sequence id for sojourn stats 2424 * @vdev_id: VAP Id 2425 * @bar_num_users: BA response user count, based on completion common TLV 2426 * @num_users: Number of users 2427 * @max_users: Number of users from USR_INFO TLV 2428 * @last_usr_index: 2429 * @drop_reason: drop reason from flush status 2430 * @is_flush: is_flush is set based on flush tlv 2431 * @flow_type: tx flow type from flush status 2432 * @queue_type: queue type from flush status 2433 * @num_mpdu: Number of MPDUs in PPDU 2434 * @num_msdu: Number of MSDUs in PPDU 2435 * @frame_type: frame SU or MU 2436 * @htt_frame_type: frame type from htt 2437 * @frame_ctrl: frame control of 80211 header 2438 * @channel: Channel informartion 2439 * @resp_type: response type 2440 * @mprot_type: medium protection type 2441 * @rts_success: rts success 2442 * @rts_failure: rts failure 2443 * @phy_mode: phy mode 2444 * @ack_rssi: RSSI value of last ack packet (units=dB above noise floor) 2445 * @tx_duration: PPDU airtime 2446 * @ppdu_start_timestamp: TSF at PPDU start 2447 * @ppdu_end_timestamp: TSF at PPDU end 2448 * @ack_timestamp: TSF at the reception of ACK 2449 * @delayed_ba: Delayed ba flag 2450 * @beam_change: beam change bit in ppdu for he-information 2451 * @bss_color: 6 bit value for full bss color 2452 * @doppler: value for doppler (will be 0 most of the times) 2453 * @spatial_reuse: value for spatial reuse used in radiotap HE header 2454 * @usr_nss_sum: Sum of user nss 2455 * @usr_ru_tones_sum: Sum of user ru_tones 2456 * @bar_ppdu_id: BAR ppdu_id 2457 * @bar_tx_duration: BAR tx duration 2458 * @bar_ppdu_start_timestamp: BAR start timestamp 2459 * @bar_ppdu_end_timestamp: BAR end timestamp 2460 * @tlv_bitmap: tlv_bitmap for the PPDU 2461 * @sched_cmdid: schedule command id 2462 * @phy_ppdu_tx_time_us: Phy per PPDU TX duration 2463 * @ppdu_bytes: accumulated bytes per ppdu for mem limit feature 2464 * @htt_seq_type: Seq type 2465 * @txmode_type: tx mode type UL/DL 2466 * @txmode: tx mode 2467 * @num_ul_users: Number of UL expected users 2468 * @ch_access_delay: Channel access delay 2469 * @backoff_ac_valid: Backoff AC valid 2470 * @backoff_ac: Backoff AC 2471 * @num_ul_user_resp_valid: Number of UL users response valid 2472 * @num_ul_user_resp: Number of UL users response 2473 * @user: per-User stats (array of per-user structures) 2474 */ 2475 struct cdp_tx_completion_ppdu { 2476 uint32_t ppdu_id; 2477 uint32_t ppdu_seq_id; 2478 uint16_t vdev_id; 2479 uint16_t bar_num_users; 2480 uint32_t num_users; 2481 uint8_t max_users; 2482 uint8_t last_usr_index; 2483 uint32_t drop_reason; 2484 uint32_t is_flush:1, 2485 flow_type:8, 2486 queue_type:8; 2487 uint32_t num_mpdu:9, 2488 num_msdu:16; 2489 uint16_t frame_type; 2490 uint16_t htt_frame_type; 2491 uint16_t frame_ctrl; 2492 uint16_t channel; 2493 uint16_t resp_type:4, 2494 mprot_type:3, 2495 rts_success:1, 2496 rts_failure:1; 2497 uint16_t phy_mode; 2498 uint32_t ack_rssi; 2499 uint32_t tx_duration; 2500 uint64_t ppdu_start_timestamp; 2501 uint64_t ppdu_end_timestamp; 2502 uint64_t ack_timestamp; 2503 bool delayed_ba; 2504 uint8_t beam_change; 2505 uint8_t bss_color; 2506 uint8_t doppler; 2507 uint8_t spatial_reuse; 2508 uint8_t usr_nss_sum; 2509 uint32_t usr_ru_tones_sum; 2510 uint32_t bar_ppdu_id; 2511 uint32_t bar_tx_duration; 2512 uint64_t bar_ppdu_start_timestamp; 2513 uint64_t bar_ppdu_end_timestamp; 2514 uint32_t tlv_bitmap; 2515 uint16_t sched_cmdid; 2516 uint16_t phy_ppdu_tx_time_us; 2517 uint32_t ppdu_bytes; 2518 uint8_t htt_seq_type; 2519 uint8_t txmode_type; 2520 uint8_t txmode; 2521 uint32_t num_ul_users; 2522 uint32_t ch_access_delay; 2523 uint32_t backoff_ac_valid; 2524 uint32_t backoff_ac; 2525 uint32_t num_ul_user_resp_valid; 2526 uint32_t num_ul_user_resp; 2527 struct cdp_tx_completion_ppdu_user user[]; 2528 }; 2529 2530 /** 2531 * struct cdp_dev_stats - Network device stats structure 2532 * @tx_packets: Tx total packets transmitted 2533 * @tx_errors : Tx error due to FW tx failure, Ring failure DMA etc 2534 * @tx_dropped: Tx dropped is same as tx errors as above 2535 * @rx_packets: Rx total packets transmitted 2536 * @rx_errors : Rx errors 2537 * @rx_dropped: Rx dropped stats 2538 * @tx_bytes : Tx total bytes transmitted 2539 * @rx_bytes : Rx total bytes transmitted 2540 */ 2541 struct cdp_dev_stats { 2542 uint32_t tx_packets; 2543 uint32_t tx_errors; 2544 uint32_t tx_dropped; 2545 uint32_t rx_packets; 2546 uint32_t rx_errors; 2547 uint32_t rx_dropped; 2548 uint64_t tx_bytes; 2549 uint64_t rx_bytes; 2550 }; 2551 2552 /** 2553 * struct cdp_rate_stats - Tx/Rx Rate statistics 2554 * @rate_stats_info_valid: set if the stats are valid 2555 * @bw: Indicates the BW of the upcoming transmission - 2556 * <enum 2 transmit_bw_20_MHz> 2557 * <enum 3 transmit_bw_40_MHz> 2558 * <enum 4 transmit_bw_80_MHz> 2559 * <enum 5 transmit_bw_160_MHz> 2560 * @pkt_type: Transmit Packet Type 2561 * @stbc: When set, STBC transmission rate was used 2562 * @ldpc: When set, use LDPC transmission rates 2563 * @sgi: <enum 0 0_8_us_sgi > Legacy normal GI 2564 * <enum 1 0_4_us_sgi > Legacy short GI 2565 * <enum 2 1_6_us_sgi > HE related GI 2566 * <enum 3 3_2_us_sgi > HE 2567 * @mcs: Transmit MCS Rate 2568 * @ofdma: Set when the transmission was an OFDMA transmission 2569 * @tones_in_ru: The number of tones in the RU used. 2570 * @resvd0: reserved bits 2571 * @tsf: Lower 32 bits of the TSF (timestamp when ppdu transmission finished) 2572 * @peer_id: Peer ID of the flow or MPDU queue 2573 * @tid: TID of the flow or MPDU queue 2574 */ 2575 struct cdp_rate_stats { 2576 uint32_t rate_stats_info_valid:1, 2577 bw:2, 2578 pkt_type:4, 2579 stbc:1, 2580 ldpc:1, 2581 sgi:2, 2582 mcs:4, 2583 ofdma:1, 2584 tones_in_ru:12, 2585 resvd0:4; 2586 uint32_t tsf; 2587 uint16_t peer_id; 2588 uint8_t tid; 2589 }; 2590 2591 /** 2592 * struct cdp_tx_completion_msdu - Tx MSDU completion descriptor 2593 * @ppdu_id: PPDU to which this MSDU belongs 2594 * @transmit_cnt: Number of times this frame has been transmitted 2595 * @ack_frame_rssi: RSSI of the received ACK or BA frame 2596 * @resvd0: reserved bit 2597 * @first_msdu: Indicates this MSDU is the first MSDU in AMSDU 2598 * @last_msdu: Indicates this MSDU is the last MSDU in AMSDU 2599 * @msdu_part_of_amsdu : Indicates this MSDU was part of an A-MSDU in MPDU 2600 * @extd: Extended structure containing rate statistics 2601 * @resvd1: reserved bits 2602 */ 2603 struct cdp_tx_completion_msdu { 2604 uint32_t ppdu_id; 2605 uint8_t transmit_cnt; 2606 uint32_t ack_frame_rssi:8, 2607 resvd0:1, 2608 first_msdu:1, 2609 last_msdu:1, 2610 msdu_part_of_amsdu:1, 2611 resvd1:20; 2612 struct cdp_rate_stats extd; 2613 }; 2614 2615 /** 2616 * struct cdp_rx_stats_ppdu_user -- per user RX stats 2617 * @peer_id: Peer ID 2618 * @vdev_id: VAP ID 2619 * @is_ampdu: mpdu aggregate or non-aggregate? 2620 * @mu_ul_info_valid: MU UL info valid 2621 * @ofdma_ru_start_index: RU index number(0-73) 2622 * @ofdma_ru_width: size of RU in units of 1(26tone)RU 2623 * @nss: NSS 1,2, ...8 2624 * @mcs: MCS index 2625 * @user_index: user ID in multi-user case 2626 * @is_bss_peer: is bss peer check 2627 * @ast_index: ast index in multi-user case 2628 * @tid: TID number 2629 * @num_msdu: Number of MSDUs in PPDU 2630 * @tcp_msdu_count: Number of TCP MSDUs in PPDU 2631 * @udp_msdu_count: Number of UDP MSDUs in PPDU 2632 * @other_msdu_count: Number of MSDUs other than UDP and TCP MSDUs in PPDU 2633 * @frame_control: frame control field 2634 * @frame_control_info_valid: frame_control valid 2635 * @qos_control: qos control field 2636 * @qos_control_info_valid: qos_control valid 2637 * @data_sequence_control_info_valid: data_sequence_control_info valid 2638 * @first_data_seq_ctrl: Sequence control field of first data frame 2639 * @preamble_type: preamble 2640 * @ht_flags: HT flags 2641 * @vht_flags: VHT flags 2642 * @he_flags: HE flags 2643 * @mac_addr: Peer MAC Address 2644 * @mpdu_cnt_fcs_ok: Number of MPDUs in PPDU with fcs ok 2645 * @mpdu_cnt_fcs_err: Number of MPDUs in PPDU with fcs err 2646 * @mpdu_fcs_ok_bitmap: MPDU with fcs ok bitmap 2647 * @mpdu_ok_byte_count: 2648 * @mpdu_err_byte_count: 2649 * @retries: number of retries 2650 * @rx_ratekbps: rx rate in kbps 2651 * @rix: rate index 2652 * @mpdu_retries: retries of mpdu in rx 2653 * @rx_time_us: Rx duration 2654 */ 2655 struct cdp_rx_stats_ppdu_user { 2656 uint16_t peer_id; 2657 uint8_t vdev_id; 2658 bool is_ampdu; 2659 uint32_t mu_ul_info_valid:1, 2660 ofdma_ru_start_index:7, 2661 ofdma_ru_width:7, 2662 nss:4, 2663 mcs:4; 2664 /* user id */ 2665 uint8_t user_index; 2666 uint8_t is_bss_peer; 2667 uint32_t ast_index; 2668 uint32_t tid; 2669 uint32_t num_msdu; 2670 uint16_t tcp_msdu_count; 2671 uint16_t udp_msdu_count; 2672 uint16_t other_msdu_count; 2673 uint16_t frame_control; 2674 uint8_t frame_control_info_valid; 2675 uint16_t qos_control; 2676 uint8_t qos_control_info_valid; 2677 uint8_t data_sequence_control_info_valid; 2678 uint16_t first_data_seq_ctrl; 2679 uint32_t preamble_type; 2680 uint16_t ht_flags; 2681 uint16_t vht_flags; 2682 uint16_t he_flags; 2683 uint8_t mac_addr[QDF_MAC_ADDR_SIZE]; 2684 uint32_t mpdu_cnt_fcs_ok; 2685 uint32_t mpdu_cnt_fcs_err; 2686 uint32_t mpdu_fcs_ok_bitmap[QDF_MON_STATUS_MPDU_FCS_BMAP_NWORDS]; 2687 uint32_t mpdu_ok_byte_count; 2688 uint32_t mpdu_err_byte_count; 2689 uint32_t retries; 2690 uint32_t rx_ratekbps; 2691 uint32_t rix; 2692 uint32_t mpdu_retries; 2693 uint16_t rx_time_us; 2694 }; 2695 2696 /** 2697 * struct cdp_rx_indication_ppdu - Rx PPDU indication structure 2698 * @ppdu_id: PPDU Id 2699 * @is_ampdu: mpdu aggregate or non-aggregate? 2700 * @num_mpdu: Number of MPDUs in PPDU 2701 * @reserved: Reserved bits for future use 2702 * @num_msdu: Number of MSDUs in PPDU 2703 * @num_bytes: Number of bytes 2704 * @udp_msdu_count: Number of UDP MSDUs in PPDU 2705 * @tcp_msdu_count: Number of TCP MSDUs in PPDU 2706 * @other_msdu_count: Number of MSDUs other than UDP and TCP MSDUs in PPDU 2707 * @duration: PPDU duration 2708 * @tid: TID number 2709 * @peer_id: Peer ID 2710 * @vdev_id: VAP ID 2711 * @mac_addr: Peer MAC Address 2712 * @first_data_seq_ctrl: Sequence control field of first data frame 2713 * @u: union of rate information representations 2714 * @rate_info: consolidated rate fields 2715 * @ltf_size: ltf_size 2716 * @stbc: When set, STBC rate was used 2717 * @he_re: he_re (range extension) 2718 * @bw: Bandwidth 2719 * <enum 0 bw_20_MHz> 2720 * <enum 1 bw_40_MHz> 2721 * <enum 2 bw_80_MHz> 2722 * <enum 3 bw_160_MHz> 2723 * @nss: NSS 1,2, ...8 2724 * @mcs: MCS index 2725 * @preamble: preamble 2726 * @gi: <enum 0 0_8_us_sgi > Legacy normal GI 2727 * <enum 1 0_4_us_sgi > Legacy short GI 2728 * <enum 2 1_6_us_sgi > HE related GI 2729 * <enum 3 3_2_us_sgi > HE 2730 * @dcm: dcm 2731 * @ldpc: ldpc 2732 * @ppdu_type: SU/MU_MIMO/MU_OFDMA/MU_MIMO_OFDMA/UL_TRIG/BURST_BCN/UL_BSR_RESP/ 2733 * UL_BSR_TRIG/UNKNOWN 2734 * @rix: rate index 2735 * @lsig_a: L-SIG in 802.11 PHY header 2736 * @rssi: RSSI value (units = dB above noise floor) 2737 * @timestamp: TSF at the reception of PPDU 2738 * @length: PPDU length 2739 * @channel: Channel information 2740 * @beamformed: 2741 * @rx_ratekbps: 2742 * @ppdu_rx_rate: 2743 * @retries: 2744 * @rx_byte_count: 2745 * @rx_ratecode: 2746 * @fcs_error_mpdus: 2747 * @frame_ctrl: frame control field 2748 * @rssi_chain: rssi chain per nss per bw 2749 * @evm_info: 2750 * @rx_antenna: 2751 * @num_users: 2752 * @nf: noise floor 2753 * @per_chain_rssi: rssi per antenna 2754 * @is_mcast_bcast: 2755 * @cfr_info: 2756 * @punc_bw: punctured bw 2757 * @phyrx_abort: rx aborted undecoded frame indication 2758 * @phyrx_abort_reason: abort reason defined in phyrx_abort_request_info 2759 * @l_sig_length: L SIG A length 2760 * @l_sig_a_parity: L SIG A parity 2761 * @l_sig_a_pkt_type: L SIG A info pkt type 2762 * @l_sig_a_implicit_sounding: L SIG A info captured implicit sounding 2763 * @vht_crc: Indicate vht crc 2764 * @group_id: 2765 * @ht_length: num of bytes in PSDU 2766 * @ht_smoothing: Indicate ht_smoothing 2767 * @ht_not_sounding: Indicate ht not sounding 2768 * @ht_aggregation: Indicate ht aggregation 2769 * @ht_stbc: Indicate ht stbc 2770 * @ht_crc: Indicate ht crc 2771 * @vht_no_txop_ps: Indicate TXOP power save mode 2772 * @bss_color_id: Indicate BSS color ID 2773 * @beam_change: Indicates whether spatial mapping is changed 2774 * @dl_ul_flag: Differentiates between DL and UL transmission 2775 * @transmit_mcs: Indicates the data MCS 2776 * @ldpc_extra_sym: LDPC extra symbol 2777 * @special_reuse: Spatial reuse 2778 * @ltf_sym: Indictaes HE NSTS 2779 * @txbf: Indicates whether beamforming is applied 2780 * @pe_disambiguity: packet extension disambiguity 2781 * @pre_fec_pad: packet extension a factor 2782 * @dopplar: Doppler support 2783 * @txop_duration: Indicates the remaining time in the current TXOP 2784 * @sig_b_mcs: MCS of HE-SIG-B 2785 * @sig_b_dcm: DCM of HE-SIG-B 2786 * @sig_b_sym: Number of symbols of HE-SIG-B 2787 * @sig_b_comp: Compression mode of HE-SIG-B 2788 * @he_crc: CRC for HE-SIG contents 2789 * @usr_nss_sum: Sum of user nss 2790 * @usr_ru_tones_sum: Sum of user ru_tones 2791 * @user: per user stats in MU-user case 2792 */ 2793 struct cdp_rx_indication_ppdu { 2794 uint32_t ppdu_id; 2795 uint16_t is_ampdu:1, 2796 num_mpdu:9, 2797 reserved:6; 2798 uint32_t num_msdu; 2799 uint32_t num_bytes; 2800 uint16_t udp_msdu_count; 2801 uint16_t tcp_msdu_count; 2802 uint16_t other_msdu_count; 2803 uint16_t duration; 2804 uint32_t tid:8, 2805 peer_id:16; 2806 uint8_t vdev_id; 2807 uint8_t mac_addr[6]; 2808 uint16_t first_data_seq_ctrl; 2809 union { 2810 uint32_t rate_info; 2811 struct { 2812 uint32_t ltf_size:2, 2813 stbc:1, 2814 he_re:1, 2815 bw:4, 2816 nss:4, 2817 mcs:4, 2818 preamble:4, 2819 gi:4, 2820 dcm:1, 2821 ldpc:1, 2822 ppdu_type:5; 2823 }; 2824 } u; 2825 uint32_t rix; 2826 uint32_t lsig_a; 2827 uint32_t rssi; 2828 uint64_t timestamp; 2829 uint32_t length; 2830 uint8_t channel; 2831 uint8_t beamformed; 2832 2833 uint32_t rx_ratekbps; 2834 uint32_t ppdu_rx_rate; 2835 2836 uint32_t retries; 2837 uint32_t rx_byte_count; 2838 uint16_t rx_ratecode; 2839 uint8_t fcs_error_mpdus; 2840 uint16_t frame_ctrl; 2841 int8_t rssi_chain[SS_COUNT][MAX_BW]; 2842 struct cdp_rx_su_evm_info evm_info; 2843 uint32_t rx_antenna; 2844 uint8_t num_users; 2845 uint32_t nf; 2846 uint8_t per_chain_rssi[MAX_CHAIN]; 2847 uint8_t is_mcast_bcast; 2848 #if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE) 2849 struct cdp_rx_ppdu_cfr_info cfr_info; 2850 #endif 2851 uint8_t punc_bw; 2852 #ifdef QCA_UNDECODED_METADATA_SUPPORT 2853 bool phyrx_abort; 2854 uint8_t phyrx_abort_reason; 2855 uint32_t l_sig_length:12, 2856 l_sig_a_parity:1, 2857 l_sig_a_pkt_type:4, 2858 l_sig_a_implicit_sounding:1, 2859 vht_crc:8, 2860 group_id:6; 2861 uint32_t ht_length:16, 2862 ht_smoothing:1, 2863 ht_not_sounding:1, 2864 ht_aggregation:1, 2865 ht_stbc:2, 2866 ht_crc:8, 2867 vht_no_txop_ps:1; 2868 uint32_t bss_color_id:6, 2869 beam_change:1, 2870 dl_ul_flag:1, 2871 transmit_mcs:4, 2872 ldpc_extra_sym:1, 2873 special_reuse:4, 2874 ltf_sym:3, 2875 txbf:1, 2876 pe_disambiguity:1, 2877 pre_fec_pad:4, 2878 dopplar:1; 2879 uint32_t txop_duration:7, 2880 sig_b_mcs:3, 2881 sig_b_dcm:1, 2882 sig_b_sym:4, 2883 sig_b_comp:1, 2884 he_crc:4; 2885 #endif 2886 uint8_t usr_nss_sum; 2887 uint32_t usr_ru_tones_sum; 2888 struct cdp_rx_stats_ppdu_user user[]; 2889 }; 2890 2891 /** 2892 * struct cdp_rx_indication_msdu - Rx MSDU info 2893 * @ppdu_id: PPDU to which the MSDU belongs 2894 * @msdu_len: Length of MSDU in bytes 2895 * @ack_frame_rssi: RSSI of the received ACK or BA frame 2896 * @resvd0: reserved bit 2897 * @first_msdu: Indicates this MSDU is the first MSDU in AMSDU 2898 * @last_msdu: Indicates this MSDU is the last MSDU in AMSDU 2899 * @msdu_part_of_amsdu: Indicates this MSDU was part of an A-MSDU in MPDU 2900 * @msdu_part_of_ampdu: 2901 * @resvd1: reserved bit 2902 * @extd: Extended structure containing rate statistics 2903 */ 2904 struct cdp_rx_indication_msdu { 2905 uint32_t ppdu_id; 2906 uint16_t msdu_len; 2907 uint32_t ack_frame_rssi:8, 2908 resvd0:1, 2909 first_msdu:1, 2910 last_msdu:1, 2911 msdu_part_of_amsdu:1, 2912 msdu_part_of_ampdu:1, 2913 resvd1:19; 2914 struct cdp_rate_stats extd; 2915 }; 2916 2917 /** 2918 * struct cdp_config_params - Propagate configuration parameters to datapath 2919 * @tso_enable: Enable/Disable TSO 2920 * @lro_enable: Enable/Disable LRO 2921 * @gro_enable: Enable/Disable GRO 2922 * @flow_steering_enable: Enable/Disable Rx Hash based flow steering 2923 * @p2p_tcp_udp_checksumoffload: Enable/Disable TCP/UDP Checksum Offload for P2P 2924 * @nan_tcp_udp_checksumoffload: Enable/Disable TCP/UDP Checksum Offload for NAN 2925 * @tcp_udp_checksumoffload: Enable/Disable TCP/UDP Checksum Offload 2926 * @legacy_mode_checksumoffload_disable: Disable TCP/UDP Checksum Offload for 2927 * legacy modes. 2928 * @napi_enable: Enable/Disable Napi 2929 * @ipa_enable: Flag indicating if IPA is enabled or not 2930 * @tx_flow_stop_queue_threshold: Value to Pause tx queues 2931 * @tx_flow_start_queue_offset: Available Tx descriptors to unpause 2932 * tx queue 2933 * @tx_comp_loop_pkt_limit: Max # of packets to be processed in 1 tx comp loop 2934 * @rx_reap_loop_pkt_limit: Max # of packets to be processed in 1 rx reap loop 2935 * @rx_hp_oos_update_limit: Max # of HP OOS (out of sync) updates 2936 */ 2937 struct cdp_config_params { 2938 unsigned int tso_enable:1; 2939 unsigned int lro_enable:1; 2940 unsigned int gro_enable:1; 2941 unsigned int flow_steering_enable:1; 2942 unsigned int p2p_tcp_udp_checksumoffload:1; 2943 unsigned int nan_tcp_udp_checksumoffload:1; 2944 unsigned int tcp_udp_checksumoffload:1; 2945 unsigned int legacy_mode_checksumoffload_disable:1; 2946 unsigned int napi_enable:1; 2947 unsigned int ipa_enable:1; 2948 /* Set when QCA_LL_TX_FLOW_CONTROL_V2 is enabled */ 2949 uint8_t tx_flow_stop_queue_threshold; 2950 uint8_t tx_flow_start_queue_offset; 2951 uint32_t tx_comp_loop_pkt_limit; 2952 uint32_t rx_reap_loop_pkt_limit; 2953 uint32_t rx_hp_oos_update_limit; 2954 2955 }; 2956 2957 /** 2958 * struct cdp_txrx_stats_req - stats request wrapper 2959 * used to pass request information to cdp layer 2960 * @stats: type of stats requested 2961 * @param0: opaque argument 0 to be passed to htt 2962 * @param1: opaque argument 1 to be passed to htt 2963 * @param2: opaque argument 2 to be passed to htt 2964 * @param3: opaque argument 3 to be passed to htt 2965 * @cookie_val: cookie 2966 * @mac_id: mac id 2967 * @peer_addr: peer address 2968 */ 2969 struct cdp_txrx_stats_req { 2970 enum cdp_stats stats; 2971 uint32_t param0; 2972 uint32_t param1; 2973 uint32_t param2; 2974 uint32_t param3; 2975 uint32_t cookie_val; 2976 uint8_t mac_id; 2977 char *peer_addr; 2978 }; 2979 2980 /** 2981 * struct cdp_monitor_filter - monitor filter info 2982 * @mode: set filter mode 2983 * @fp_mgmt: set Filter Pass MGMT Configuration 2984 * @fp_ctrl: set Filter Pass CTRL Configuration 2985 * @fp_data: set Filter Pass DATA Configuration 2986 * @mo_mgmt: set Monitor Other MGMT Configuration 2987 * @mo_ctrl: set Monitor Other CTRL Configuration 2988 * @mo_data: set Monitor other DATA Configuration 2989 * 2990 */ 2991 struct cdp_monitor_filter { 2992 uint16_t mode; 2993 uint16_t fp_mgmt; 2994 uint16_t fp_ctrl; 2995 uint16_t fp_data; 2996 uint16_t mo_mgmt; 2997 uint16_t mo_ctrl; 2998 uint16_t mo_data; 2999 }; 3000 3001 /** 3002 * enum cdp_dp_cfg - CDP ENUMs to get to DP configation 3003 * @cfg_dp_enable_data_stall: context passed to be used by consumer 3004 * @cfg_dp_enable_p2p_ip_tcp_udp_checksum_offload: get P2P checksum config 3005 * @cfg_dp_enable_nan_ip_tcp_udp_checksum_offload: get NAN TX checksum config 3006 * @cfg_dp_enable_ip_tcp_udp_checksum_offload: get TX checksum config for others 3007 * @cfg_dp_disable_legacy_mode_csum_offload: Disable checksum offload for 3008 * legacy modes 3009 * @cfg_dp_tso_enable: get TSO enable config 3010 * @cfg_dp_lro_enable: get LRO enable config 3011 * @cfg_dp_gro_enable: get GRO enable config 3012 * @cfg_dp_tc_based_dyn_gro_enable: get TC based dynamic gro enable config 3013 * @cfg_dp_tc_ingress_prio: priority value to be checked for tc filters 3014 * @cfg_dp_sg_enable: 3015 * @cfg_dp_tx_flow_start_queue_offset: get DP TX flow start queue offset 3016 * @cfg_dp_tx_flow_stop_queue_threshold: get DP TX flow stop queue threshold 3017 * @cfg_dp_ipa_uc_tx_buf_size: get IPA TX buf size config 3018 * @cfg_dp_ipa_uc_tx_partition_base: get IPA UC TX partition base config 3019 * @cfg_dp_ipa_uc_rx_ind_ring_count: get IPA rx indication ring count config 3020 * @cfg_dp_enable_flow_steering: get flow steerint enable config 3021 * @cfg_dp_reorder_offload_supported: get reorder offload support config 3022 * @cfg_dp_ce_classify_enable: get CE classify enable config 3023 * @cfg_dp_disable_intra_bss_fwd: get intra bss fwd config 3024 * @cfg_dp_pktlog_buffer_size: get packet log buffer size config 3025 * @cfg_dp_wow_check_rx_pending: get wow rx pending frame check config 3026 * @cfg_dp_local_pkt_capture: get local packet capture config 3027 */ 3028 enum cdp_dp_cfg { 3029 cfg_dp_enable_data_stall, 3030 cfg_dp_enable_p2p_ip_tcp_udp_checksum_offload, 3031 cfg_dp_enable_nan_ip_tcp_udp_checksum_offload, 3032 cfg_dp_enable_ip_tcp_udp_checksum_offload, 3033 cfg_dp_disable_legacy_mode_csum_offload, 3034 cfg_dp_tso_enable, 3035 cfg_dp_lro_enable, 3036 cfg_dp_gro_enable, 3037 cfg_dp_tc_based_dyn_gro_enable, 3038 cfg_dp_tc_ingress_prio, 3039 cfg_dp_sg_enable, 3040 cfg_dp_tx_flow_start_queue_offset, 3041 cfg_dp_tx_flow_stop_queue_threshold, 3042 cfg_dp_ipa_uc_tx_buf_size, 3043 cfg_dp_ipa_uc_tx_partition_base, 3044 cfg_dp_ipa_uc_rx_ind_ring_count, 3045 cfg_dp_enable_flow_steering, 3046 cfg_dp_reorder_offload_supported, 3047 cfg_dp_ce_classify_enable, 3048 cfg_dp_disable_intra_bss_fwd, 3049 cfg_dp_pktlog_buffer_size, 3050 cfg_dp_wow_check_rx_pending, 3051 cfg_dp_local_pkt_capture, 3052 }; 3053 3054 /** 3055 * struct cdp_peer_cookie - cookie used when creating peer 3056 * @ctx: context passed to be used by consumer 3057 * @mac_addr: MAC address of peer 3058 * @peer_id: peer id 3059 * @pdev_id: pdev_id 3060 * @cookie: cookie to be used by consumer 3061 */ 3062 struct cdp_peer_cookie { 3063 struct cdp_stats_cookie *ctx; 3064 uint8_t mac_addr[QDF_MAC_ADDR_SIZE]; 3065 uint8_t peer_id; 3066 uint8_t pdev_id; 3067 uint8_t cookie; 3068 }; 3069 3070 /** 3071 * enum cdp_fisa_stats_id - ID to query FISA stats 3072 * @CDP_FISA_STATS_ID_ERR_STATS: FISA error stats 3073 * @CDP_FISA_STATS_ID_DUMP_HW_FST: HW FST dump 3074 * @CDP_FISA_STATS_ID_DUMP_SW_FST: SW FST dump 3075 */ 3076 enum cdp_fisa_stats_id { 3077 CDP_FISA_STATS_ID_ERR_STATS, 3078 CDP_FISA_STATS_ID_DUMP_HW_FST, 3079 CDP_FISA_STATS_ID_DUMP_SW_FST, 3080 }; 3081 3082 #ifdef WLAN_SUPPORT_RX_FISA 3083 /** 3084 * enum cdp_fisa_config_id - FISA config ID 3085 * @CDP_FISA_HTT_RX_FISA_CFG: FISA config HTT message 3086 * @CDP_FISA_HTT_RX_FSE_OP_CFG: FSE operation HTT message 3087 * @CDP_FISA_HTT_RX_FSE_SETUP_CFG: FSE setup HTT message 3088 */ 3089 enum cdp_fisa_config_id { 3090 CDP_FISA_HTT_RX_FISA_CFG, 3091 CDP_FISA_HTT_RX_FSE_OP_CFG, 3092 CDP_FISA_HTT_RX_FSE_SETUP_CFG, 3093 }; 3094 3095 /** 3096 * union cdp_fisa_config - FISA HTT message data 3097 * @fisa_config: FISA config HTT msg data 3098 * @fse_op_cmd: FSE operation HTT msg data 3099 * @fse_setup_info: FSE setup HTT msg data 3100 */ 3101 union cdp_fisa_config { 3102 struct dp_htt_rx_fisa_cfg *fisa_config; 3103 struct dp_htt_rx_flow_fst_operation *fse_op_cmd; 3104 struct dp_htt_rx_flow_fst_setup *fse_setup_info; 3105 }; 3106 3107 struct cdp_flow_stats { 3108 uint32_t aggr_count; 3109 uint32_t curr_aggr_count; 3110 uint32_t flush_count; 3111 uint32_t bytes_aggregated; 3112 }; 3113 #else 3114 /** 3115 * struct cdp_flow_stats - Per-Flow (5-tuple) statistics 3116 * @msdu_count: number of rx msdus matching this flow 3117 * @mon_msdu_count: number of msdus matching this flow in mon path 3118 * 3119 * HW also includes msdu_byte_count and timestamp, which 3120 * are not currently tracked in SW. 3121 */ 3122 struct cdp_flow_stats { 3123 uint32_t msdu_count; 3124 uint32_t mon_msdu_count; 3125 }; 3126 #endif 3127 3128 /** 3129 * enum cdp_flow_fst_operation - RX FST operations allowed 3130 * @CDP_FLOW_FST_ENTRY_ADD: Add entry 3131 * @CDP_FLOW_FST_ENTRY_DEL: Delete entry 3132 * @CDP_FLOW_FST_RX_BYPASS_ENABLE: RX bypass enable 3133 * @CDP_FLOW_FST_RX_BYPASS_DISABLE: RX bypass disable 3134 */ 3135 enum cdp_flow_fst_operation { 3136 CDP_FLOW_FST_ENTRY_ADD, 3137 CDP_FLOW_FST_ENTRY_DEL, 3138 CDP_FLOW_FST_RX_BYPASS_ENABLE, 3139 CDP_FLOW_FST_RX_BYPASS_DISABLE 3140 }; 3141 3142 /** 3143 * enum cdp_flow_protocol_type - RX FST supported protocol types, 3144 * mapped to HW spec 3145 * @CDP_FLOW_PROTOCOL_TYPE_TCP: TCP 3146 * @CDP_FLOW_PROTOCOL_TYPE_UDP: UDP 3147 */ 3148 enum cdp_flow_protocol_type { 3149 CDP_FLOW_PROTOCOL_TYPE_TCP = 6, 3150 CDP_FLOW_PROTOCOL_TYPE_UDP = 17, 3151 }; 3152 3153 /** 3154 * struct cdp_rx_flow_tuple_info - RX flow tuple info used for addition/deletion 3155 * @tuple_populated: 3156 * @is_exception: Flows which are added to flow table but not aggregated. 3157 * @bypass_fisa: Flow which are not added to flow table. 3158 * @dest_ip_127_96: destination IP address bit fields 96-127 3159 * @dest_ip_95_64: destination IP address bit fields 64-95 3160 * @dest_ip_63_32: destination IP address bit fields 32-63 3161 * @dest_ip_31_0: destination IP address bit fields 0-31 3162 * @src_ip_127_96: source IP address bit fields 96-127 3163 * @src_ip_95_64: source IP address bit fields 64-95 3164 * @src_ip_63_32: source IP address bit fields 32-63 3165 * @src_ip_31_0: source IP address bit fields 0-31 3166 * @dest_port: destination port of flow 3167 * @src_port: source port of flow 3168 * @l4_protocol: protocol type in flow (TCP/UDP) 3169 */ 3170 struct cdp_rx_flow_tuple_info { 3171 #ifdef WLAN_SUPPORT_RX_FISA 3172 uint8_t tuple_populated; 3173 uint8_t is_exception; 3174 bool bypass_fisa; 3175 #endif 3176 uint32_t dest_ip_127_96; 3177 uint32_t dest_ip_95_64; 3178 uint32_t dest_ip_63_32; 3179 uint32_t dest_ip_31_0; 3180 uint32_t src_ip_127_96; 3181 uint32_t src_ip_95_64; 3182 uint32_t src_ip_63_32; 3183 uint32_t src_ip_31_0; 3184 uint16_t dest_port; 3185 uint16_t src_port; 3186 uint16_t l4_protocol; 3187 }; 3188 3189 /** 3190 * struct cdp_rx_flow_info - RX flow info used for addition/deletion 3191 * @is_addr_ipv4: indicates whether given IP address is IPv4/IPv6 3192 * @op_code: add/delete/enable/disable operation requested 3193 * @flow_tuple_info: structure containing tuple info 3194 * @fse_metadata: metadata to be set in RX flow 3195 * @use_ppe_ds: use DS mode 3196 * @priority_vld: is priority valid 3197 * @service_code: service code for DS 3198 */ 3199 struct cdp_rx_flow_info { 3200 bool is_addr_ipv4; 3201 enum cdp_flow_fst_operation op_code; 3202 struct cdp_rx_flow_tuple_info flow_tuple_info; 3203 uint16_t fse_metadata; 3204 uint8_t use_ppe_ds; 3205 uint8_t priority_vld; 3206 uint16_t service_code; 3207 }; 3208 3209 #ifdef QCA_SUPPORT_SCAN_SPCL_VAP_STATS 3210 /** 3211 * struct cdp_scan_spcl_vap_stats - Special vap statistics info 3212 * @rx_ok_pkts: rx fcs ok pkts count 3213 * @rx_ok_bytes: rx fcs ok bytes count 3214 * @rx_err_pkts: rx fcs err pkts count 3215 * @rx_err_bytes: rx fcs err bytes count 3216 * @rx_mgmt_pkts: rx mgmt pkts count 3217 * @rx_ctrl_pkts: rx ctrl pkts count 3218 * @rx_data_pkts: rx data pkts count 3219 */ 3220 struct cdp_scan_spcl_vap_stats { 3221 uint64_t rx_ok_pkts; 3222 uint64_t rx_ok_bytes; 3223 uint64_t rx_err_pkts; 3224 uint64_t rx_err_bytes; 3225 uint64_t rx_mgmt_pkts; 3226 uint64_t rx_ctrl_pkts; 3227 uint64_t rx_data_pkts; 3228 }; 3229 #endif 3230 3231 /** 3232 * struct cdp_soc_attach_params 3233 * 3234 * @hif_handle: Opaque HIF handle 3235 * @htc_handle: Opaque HTC handle 3236 * @qdf_osdev: QDF device 3237 * @ol_ops: Offload Operations 3238 * @device_id: Device ID 3239 * @ml_context: DP ML object context 3240 * @mlo_chip_id: MLO chip id, for legacy SOCs chip_id need to 0 3241 * @mlo_enabled: MLO enable bit 3242 */ 3243 struct cdp_soc_attach_params { 3244 struct hif_opaque_softc *hif_handle; 3245 HTC_HANDLE htc_handle; 3246 qdf_device_t qdf_osdev; 3247 struct ol_if_ops *ol_ops; 3248 uint16_t device_id; 3249 struct cdp_mlo_ctxt *ml_context; 3250 uint8_t mlo_chip_id; 3251 uint8_t mlo_enabled; 3252 }; 3253 3254 /** 3255 * struct cdp_pdev_attach_params - params for pdev attach 3256 * 3257 * @htc_handle: HTC handle for host-target interface 3258 * @qdf_osdev: QDF OS device 3259 * @pdev_id: PDEV ID 3260 * @mlo_link_id: ML link id 3261 */ 3262 struct cdp_pdev_attach_params { 3263 HTC_HANDLE htc_handle; 3264 qdf_device_t qdf_osdev; 3265 uint8_t pdev_id; 3266 uint32_t mlo_link_id; 3267 }; 3268 3269 /* 3270 * cdp_txrx_peer_params_update 3271 * 3272 * @vdev_id: VDEV ID 3273 * @peer_mac: Peer mac address 3274 * @chip_id: CHIP ID 3275 * @pdev_id: PDEV ID 3276 */ 3277 struct cdp_txrx_peer_params_update { 3278 uint8_t vdev_id; 3279 uint8_t *peer_mac; 3280 uint8_t chip_id; 3281 uint8_t pdev_id; 3282 }; 3283 3284 /** 3285 * enum cdp_umac_reset_state - umac reset in progress state 3286 * @CDP_UMAC_RESET_NOT_IN_PROGRESS: Umac reset is not in progress 3287 * @CDP_UMAC_RESET_IN_PROGRESS: Umac reset is in progress 3288 * @CDP_UMAC_RESET_IN_PROGRESS_DURING_BUFFER_WINDOW: Umac reset was in progress 3289 * during this buffer window. 3290 * @CDP_UMAC_RESET_INVALID_STATE: Umac reset invalid state 3291 */ 3292 enum cdp_umac_reset_state { 3293 CDP_UMAC_RESET_NOT_IN_PROGRESS, 3294 CDP_UMAC_RESET_IN_PROGRESS, 3295 CDP_UMAC_RESET_IN_PROGRESS_DURING_BUFFER_WINDOW, 3296 CDP_UMAC_RESET_INVALID_STATE 3297 }; 3298 3299 #ifdef WLAN_FEATURE_TX_LATENCY_STATS 3300 /* the maximum distribution level of tx latency stats */ 3301 #define CDP_TX_LATENCY_DISTR_LV_MAX 4 3302 3303 /** 3304 * enum cdp_tx_latency_type - transmit latency types 3305 * @CDP_TX_LATENCY_TYPE_DRIVER: Per MSDU latency 3306 * from: A MSDU is presented to the driver 3307 * to: the MSDU is queued into TCL SRNG 3308 * @CDP_TX_LATENCY_TYPE_RING_BUF: Per MSDU latency 3309 * from: the MSDU is queued into TCL SRNG 3310 * to: the MSDU is released by the driver 3311 * @CDP_TX_LATENCY_TYPE_HW: Per MSDU latency 3312 * from: the MSDU is presented to the hardware 3313 * to: the MSDU is released by the hardware 3314 * @CDP_TX_LATENCY_TYPE_CCA: Per PPDU latency 3315 * The time spent on Clear Channel Assessment, the maximum value is 50000(us) 3316 * from: A PPDU is presented to the hardware LMAC 3317 * to: over-the-air transmission is started for the PPDU 3318 * @CDP_TX_LATENCY_TYPE_MAX: maximum number of types 3319 */ 3320 enum cdp_tx_latency_type { 3321 CDP_TX_LATENCY_TYPE_DRIVER, 3322 CDP_TX_LATENCY_TYPE_RING_BUF, 3323 CDP_TX_LATENCY_TYPE_HW, 3324 CDP_TX_LATENCY_TYPE_CCA, 3325 3326 /* keep last */ 3327 CDP_TX_LATENCY_TYPE_MAX, 3328 }; 3329 3330 /** 3331 * struct cdp_tx_latency_config - configuration for per-link transmit latency 3332 * statistics 3333 * @enable: enable/disable the feature 3334 * @report: enable/disable async report 3335 * @period: statistical period(in ms) 3336 * @granularity: granularity(in microseconds) of the distribution for the types 3337 */ 3338 struct cdp_tx_latency_config { 3339 bool enable; 3340 bool report; 3341 uint32_t period; 3342 uint32_t granularity[CDP_TX_LATENCY_TYPE_MAX]; 3343 }; 3344 3345 /** 3346 * struct cdp_tx_latency_stats - per-type transmit latency statistics 3347 * @average: average of the latency(in us) for the type within a cycle 3348 * @granularity: granularity(in us) of the distribution for the type 3349 * @distribution: latency distribution for the type 3350 */ 3351 struct cdp_tx_latency_stats { 3352 uint32_t average; 3353 uint32_t granularity; 3354 uint32_t distribution[CDP_TX_LATENCY_DISTR_LV_MAX]; 3355 }; 3356 3357 /** 3358 * struct cdp_tx_latency - per-link transmit latency statistics 3359 * @node: list node for membership in the stats list 3360 * @mac_remote: link mac address of remote peer 3361 * @stats: transmit latency statistics for types 3362 */ 3363 struct cdp_tx_latency { 3364 qdf_list_node_t node; 3365 struct qdf_mac_addr mac_remote; 3366 struct cdp_tx_latency_stats stats[CDP_TX_LATENCY_TYPE_MAX]; 3367 }; 3368 3369 /** 3370 * typedef cdp_tx_latency_cb() - callback for transmit latency 3371 * @vdev_id: vdev id 3372 * @stats_list: list of per-link transmit latency statistics 3373 */ 3374 typedef QDF_STATUS(*cdp_tx_latency_cb)(uint8_t vdev_id, 3375 qdf_list_t *stats_list); 3376 #endif 3377 #endif 3378