1 /* 2 * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for 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 #ifndef __CDP_TXRX_MOB_DEF_H 21 #define __CDP_TXRX_MOB_DEF_H 22 #include <sir_types.h> 23 #include <htt.h> 24 25 #define TX_WMM_AC_NUM 4 26 #define ENABLE_DP_HIST_STATS 27 #define DP_MEMORY_OPT 28 #ifndef CONFIG_BERYLLIUM 29 #define DP_USE_SINGLE_TCL 30 #endif 31 32 #define DP_RX_DISABLE_NDI_MDNS_FORWARDING 33 34 #define OL_TXQ_PAUSE_REASON_FW (1 << 0) 35 #define OL_TXQ_PAUSE_REASON_PEER_UNAUTHORIZED (1 << 1) 36 #define OL_TXQ_PAUSE_REASON_TX_ABORT (1 << 2) 37 #define OL_TXQ_PAUSE_REASON_VDEV_STOP (1 << 3) 38 #define OL_TXQ_PAUSE_REASON_THERMAL_MITIGATION (1 << 4) 39 40 #define OL_TXRX_INVALID_NUM_PEERS (-1) 41 42 43 /* Maximum number of station supported by data path, including BC. */ 44 #define WLAN_MAX_STA_COUNT (HAL_NUM_STA) 45 46 /* The symbolic station ID return to HDD to specify the packet is bc/mc */ 47 #define WLAN_RX_BCMC_STA_ID (WLAN_MAX_STA_COUNT + 1) 48 49 /* The symbolic station ID return to HDD to specify the packet is 50 to soft-AP itself */ 51 #define WLAN_RX_SAP_SELF_STA_ID (WLAN_MAX_STA_COUNT + 2) 52 53 /* is 802.11 address multicast/broadcast? */ 54 #define IEEE80211_IS_MULTICAST(_a) (*(_a) & 0x01) 55 56 #define MAX_PEERS 32 57 58 /* 59 * Bins used for reporting delay histogram: 60 * bin 0: 0 - 10 ms delay 61 * bin 1: 10 - 20 ms delay 62 * bin 2: 20 - 40 ms delay 63 * bin 3: 40 - 80 ms delay 64 * bin 4: 80 - 160 ms delay 65 * bin 5: > 160 ms delay 66 */ 67 #define QCA_TX_DELAY_HIST_REPORT_BINS 6 68 69 /* BA actions */ 70 #define IEEE80211_ACTION_BA_ADDBA_REQUEST 0 /* ADDBA request */ 71 #define IEEE80211_ACTION_BA_ADDBA_RESPONSE 1 /* ADDBA response */ 72 #define IEEE80211_ACTION_BA_DELBA 2 /* DELBA */ 73 74 #define IEEE80211_BA_POLICY_DELAYED 0 75 #define IEEE80211_BA_POLICY_IMMEDIATE 1 76 #define IEEE80211_BA_AMSDU_SUPPORTED 1 77 78 /** 79 * enum netif_action_type - Type of actions on netif queues 80 * @WLAN_STOP_ALL_NETIF_QUEUE: stop all netif queues 81 * @WLAN_START_ALL_NETIF_QUEUE: start all netif queues 82 * @WLAN_WAKE_ALL_NETIF_QUEUE: wake all netif queues 83 * @WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER: stop all queues and off carrier 84 * @WLAN_START_ALL_NETIF_QUEUE_N_CARRIER: start all queues and on carrier 85 * @WLAN_NETIF_TX_DISABLE: disable tx 86 * @WLAN_NETIF_TX_DISABLE_N_CARRIER: disable tx and off carrier 87 * @WLAN_NETIF_CARRIER_ON: on carrier 88 * @WLAN_NETIF_CARRIER_OFF: off carrier 89 * @WLAN_NETIF_PRIORITY_QUEUE_ON: start priority netif queues 90 * @WLAN_NETIF_PRIORITY_QUEUE_OFF: stop priority netif queues 91 * @WLAN_WAKE_NON_PRIORITY_QUEUE: wake non priority netif queues 92 * @WLAN_STOP_NON_PRIORITY_QUEUE: stop non priority netif queues 93 */ 94 enum netif_action_type { 95 WLAN_NETIF_ACTION_TYPE_NONE = 0, 96 WLAN_STOP_ALL_NETIF_QUEUE = 1, 97 WLAN_START_ALL_NETIF_QUEUE = 2, 98 WLAN_WAKE_ALL_NETIF_QUEUE = 3, 99 WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER = 4, 100 WLAN_START_ALL_NETIF_QUEUE_N_CARRIER = 5, 101 WLAN_NETIF_TX_DISABLE = 6, 102 WLAN_NETIF_TX_DISABLE_N_CARRIER = 7, 103 WLAN_NETIF_CARRIER_ON = 8, 104 WLAN_NETIF_CARRIER_OFF = 9, 105 WLAN_NETIF_PRIORITY_QUEUE_ON = 10, 106 WLAN_NETIF_PRIORITY_QUEUE_OFF = 11, 107 WLAN_NETIF_VO_QUEUE_ON = 12, 108 WLAN_NETIF_VO_QUEUE_OFF = 13, 109 WLAN_NETIF_VI_QUEUE_ON = 14, 110 WLAN_NETIF_VI_QUEUE_OFF = 15, 111 WLAN_NETIF_BE_BK_QUEUE_OFF = 16, 112 WLAN_NETIF_BE_BK_QUEUE_ON = 17, 113 WLAN_WAKE_NON_PRIORITY_QUEUE = 18, 114 WLAN_STOP_NON_PRIORITY_QUEUE = 19, 115 WLAN_NETIF_ACTION_TYPE_MAX, 116 }; 117 118 /** 119 * enum netif_reason_type - reason for netif queue action 120 * @WLAN_CONTROL_PATH: action from control path 121 * @WLAN_DATA_FLOW_CONTROL: because of flow control 122 * @WLAN_FW_PAUSE: because of firmware pause 123 * @WLAN_TX_ABORT: because of tx abort 124 * @WLAN_VDEV_STOP: because of vdev stop 125 * @WLAN_PEER_UNAUTHORISED: because of peer is unauthorised 126 * @WLAN_THERMAL_MITIGATION: because of thermal mitigation 127 */ 128 enum netif_reason_type { 129 WLAN_CONTROL_PATH = 1, 130 WLAN_DATA_FLOW_CONTROL, 131 WLAN_FW_PAUSE, 132 WLAN_TX_ABORT, 133 WLAN_VDEV_STOP, 134 WLAN_PEER_UNAUTHORISED, 135 WLAN_THERMAL_MITIGATION, 136 WLAN_DATA_FLOW_CONTROL_PRIORITY, 137 WLAN_DATA_FLOW_CTRL_BE_BK, 138 WLAN_DATA_FLOW_CTRL_VI, 139 WLAN_DATA_FLOW_CTRL_VO, 140 WLAN_DATA_FLOW_CTRL_PRI, 141 WLAN_REASON_TYPE_MAX, 142 }; 143 144 enum ol_rx_err_type { 145 OL_RX_ERR_DEFRAG_MIC, 146 OL_RX_ERR_PN, 147 OL_RX_ERR_UNKNOWN_PEER, 148 OL_RX_ERR_MALFORMED, 149 OL_RX_ERR_TKIP_MIC, 150 OL_RX_ERR_DECRYPT, 151 OL_RX_ERR_MPDU_LENGTH, 152 OL_RX_ERR_ENCRYPT_REQUIRED, 153 OL_RX_ERR_DUP, 154 OL_RX_ERR_UNKNOWN, 155 OL_RX_ERR_FCS, 156 OL_RX_ERR_PRIVACY, 157 OL_RX_ERR_NONE_FRAG, 158 OL_RX_ERR_NONE = 0xFF 159 }; 160 161 enum throttle_level { 162 THROTTLE_LEVEL_0, 163 THROTTLE_LEVEL_1, 164 THROTTLE_LEVEL_2, 165 THROTTLE_LEVEL_3, 166 /* Invalid */ 167 THROTTLE_LEVEL_MAX, 168 }; 169 170 enum { 171 OL_TX_WMM_AC_BE, 172 OL_TX_WMM_AC_BK, 173 OL_TX_WMM_AC_VI, 174 OL_TX_WMM_AC_VO, 175 OL_TX_NUM_WMM_AC 176 }; 177 178 /** 179 * @enum ol_tx_spec 180 * @brief indicate what non-standard transmission actions to apply 181 * @details 182 * Indicate one or more of the following: 183 * - The tx frame already has a complete 802.11 header. 184 * Thus, skip 802.3/native-WiFi to 802.11 header encapsulation and 185 * A-MSDU aggregation. 186 * - The tx frame should not be aggregated (A-MPDU or A-MSDU) 187 * - The tx frame is already encrypted - don't attempt encryption. 188 * - The tx frame is a segment of a TCP jumbo frame. 189 * - This tx frame should not be unmapped and freed by the txrx layer 190 * after transmission, but instead given to a registered tx completion 191 * callback. 192 * More than one of these specification can apply, though typically 193 * only a single specification is applied to a tx frame. 194 * A compound specification can be created, as a bit-OR of these 195 * specifications. 196 */ 197 enum ol_tx_spec { 198 OL_TX_SPEC_STD = 0x0, /* do regular processing */ 199 OL_TX_SPEC_RAW = 0x1, /* skip encap + A-MSDU aggr */ 200 OL_TX_SPEC_NO_AGGR = 0x2, /* skip encap + all aggr */ 201 OL_TX_SPEC_NO_ENCRYPT = 0x4, /* skip encap + encrypt */ 202 OL_TX_SPEC_TSO = 0x8, /* TCP segmented */ 203 OL_TX_SPEC_NWIFI_NO_ENCRYPT = 0x10, /* skip encrypt for nwifi */ 204 OL_TX_SPEC_NO_FREE = 0x20, /* give to cb rather than free */ 205 }; 206 207 /** 208 * @enum peer_debug_id_type: debug ids to track peer get_ref and release_ref 209 * @brief Unique peer debug IDs to track the callers. Each new usage can add to 210 * this enum list to create a new "PEER_DEBUG_ID_". 211 * @PEER_DEBUG_ID_OL_INTERNAL: debug id for OL internal usage 212 * @PEER_DEBUG_ID_WMA_PKT_DROP: debug id for wma_is_pkt_drop_candidate API 213 * @PEER_DEBUG_ID_WMA_ADDBA_REQ: debug id for ADDBA request 214 * @PEER_DEBUG_ID_WMA_DELBA_REQ: debug id for DELBA request 215 * @PEER_DEBUG_ID_LIM_SEND_ADDBA_RESP: debug id for send ADDBA response 216 * @PEER_DEBUG_ID_OL_RX_THREAD: debug id for rx thread 217 * @PEER_DEBUG_ID_WMA_CCMP_REPLAY_ATTACK: debug id for CCMP replay 218 * @PEER_DEBUG_ID_WMA_DEL_BSS:debug id for remove BSS 219 * @PEER_DEBUG_ID_WMA_VDEV_STOP_RESP:debug id for vdev stop response handler 220 * @PEER_DEBUG_ID_OL_PEER_MAP:debug id for peer map/unmap 221 * @PEER_DEBUG_ID_OL_PEER_ATTACH: debug id for peer attach/detach 222 * @PEER_DEBUG_ID_OL_TXQ_VDEV_FL: debug id for vdev flush 223 * @PEER_DEBUG_ID_OL_HASH_ERS:debug id for peer find hash erase 224 * @PEER_DEBUG_ID_MAX: debug id MAX 225 */ 226 enum peer_debug_id_type { 227 PEER_DEBUG_ID_OL_INTERNAL, 228 PEER_DEBUG_ID_WMA_PKT_DROP, 229 PEER_DEBUG_ID_WMA_ADDBA_REQ, 230 PEER_DEBUG_ID_WMA_DELBA_REQ, 231 PEER_DEBUG_ID_LIM_SEND_ADDBA_RESP, 232 PEER_DEBUG_ID_OL_RX_THREAD, 233 PEER_DEBUG_ID_WMA_CCMP_REPLAY_ATTACK, 234 PEER_DEBUG_ID_WMA_DEL_BSS, 235 PEER_DEBUG_ID_WMA_VDEV_STOP_RESP, 236 PEER_DEBUG_ID_OL_PEER_MAP, 237 PEER_DEBUG_ID_OL_PEER_ATTACH, 238 PEER_DEBUG_ID_OL_TXQ_VDEV_FL, 239 PEER_DEBUG_ID_OL_HASH_ERS, 240 PEER_DEBUG_ID_OL_UNMAP_TIMER_WORK, 241 PEER_DEBUG_ID_MAX 242 }; 243 244 /** 245 * enum cdp_peer_bw - Bandwidth types 246 * @CDP_20_MHZ: 20MHz BW 247 * @CDP_40_MHZ: 40MHz BW 248 * @CDP_80_MHZ: 80MHz BW 249 * @CDP_160_MHZ: 160MHz BW 250 * @CDP_80P80_MHZ: 80+80MHz BW 251 * @CDP_5_MHZ: 5MHz BW 252 * @CDP_10_MHZ: 10MHz BW 253 * @CDP_320_MHZ: 320MHz BW 254 * @CDP_BW_INVALID: Invalid BW 255 * @CDP_BW_MAX: Max BW id 256 */ 257 enum cdp_peer_bw { 258 CDP_20_MHZ, 259 CDP_40_MHZ, 260 CDP_80_MHZ, 261 CDP_160_MHZ, 262 CDP_80P80_MHZ, 263 CDP_5_MHZ, 264 CDP_10_MHZ, 265 CDP_320_MHZ, 266 CDP_BW_INVALID, 267 CDP_BW_MAX 268 }; 269 270 /** 271 * struct ol_txrx_desc_type - txrx descriptor type 272 * @is_qos_enabled: is station qos enabled 273 * @is_wapi_supported: is station wapi supported 274 * @peer_addr: peer mac address 275 * @bw: bandwidth of peer connection 276 */ 277 struct ol_txrx_desc_type { 278 uint8_t is_qos_enabled; 279 uint8_t is_wapi_supported; 280 struct qdf_mac_addr peer_addr; 281 enum cdp_peer_bw bw; 282 }; 283 284 /** 285 * struct ol_tx_sched_wrr_ac_specs_t - the wrr ac specs params structure 286 * @wrr_skip_weight: map to ol_tx_sched_wrr_adv_category_info_t.specs. 287 * wrr_skip_weight 288 * @credit_threshold: map to ol_tx_sched_wrr_adv_category_info_t.specs. 289 * credit_threshold 290 * @send_limit: map to ol_tx_sched_wrr_adv_category_info_t.specs. 291 * send_limit 292 * @credit_reserve: map to ol_tx_sched_wrr_adv_category_info_t.specs. 293 * credit_reserve 294 * @discard_weight: map to ol_tx_sched_wrr_adv_category_info_t.specs. 295 * discard_weight 296 * 297 * This structure is for wrr ac specs params set from user, it will update 298 * its content corresponding to the ol_tx_sched_wrr_adv_category_info_t.specs. 299 */ 300 struct ol_tx_sched_wrr_ac_specs_t { 301 int wrr_skip_weight; 302 uint32_t credit_threshold; 303 uint16_t send_limit; 304 int credit_reserve; 305 int discard_weight; 306 }; 307 308 /** 309 * struct txrx_pdev_cfg_param_t - configuration information 310 * passed to the data path 311 */ 312 struct txrx_pdev_cfg_param_t { 313 uint8_t is_full_reorder_offload; 314 /* IPA Micro controller data path offload enable flag */ 315 uint8_t is_uc_offload_enabled; 316 /* IPA Micro controller data path offload TX buffer count */ 317 uint32_t uc_tx_buffer_count; 318 /* IPA Micro controller data path offload TX buffer size */ 319 uint32_t uc_tx_buffer_size; 320 /* IPA Micro controller data path offload RX indication ring count */ 321 uint32_t uc_rx_indication_ring_count; 322 /* IPA Micro controller data path offload TX partition base */ 323 uint32_t uc_tx_partition_base; 324 /* IP, TCP and UDP checksum offload */ 325 bool ip_tcp_udp_checksum_offload; 326 /* IP, TCP and UDP checksum offload for NAN Mode */ 327 bool nan_ip_tcp_udp_checksum_offload; 328 /* IP, TCP and UDP checksum offload for P2P Mode*/ 329 bool p2p_ip_tcp_udp_checksum_offload; 330 /* Checksum offload override flag for Legcay modes */ 331 bool legacy_mode_csum_disable; 332 /* Rx processing in thread from TXRX */ 333 bool enable_rxthread; 334 /* CE classification enabled through INI */ 335 bool ce_classify_enabled; 336 #if defined(QCA_LL_TX_FLOW_CONTROL_V2) || defined(QCA_LL_PDEV_TX_FLOW_CONTROL) 337 /* Threshold to stop queue in percentage */ 338 uint32_t tx_flow_stop_queue_th; 339 /* Start queue offset in percentage */ 340 uint32_t tx_flow_start_queue_offset; 341 #endif 342 343 #ifdef QCA_SUPPORT_TXRX_DRIVER_TCP_DEL_ACK 344 /* enable the tcp delay ack feature in the driver */ 345 bool del_ack_enable; 346 /* timeout if no more tcp ack frames, unit is ms */ 347 uint16_t del_ack_timer_value; 348 /* the maximum number of replaced tcp ack frames */ 349 uint16_t del_ack_pkt_count; 350 #endif 351 352 struct ol_tx_sched_wrr_ac_specs_t ac_specs[TX_WMM_AC_NUM]; 353 bool gro_enable; 354 bool tso_enable; 355 bool lro_enable; 356 bool sg_enable; 357 uint32_t enable_data_stall_detection; 358 bool enable_flow_steering; 359 bool disable_intra_bss_fwd; 360 361 #ifdef WLAN_SUPPORT_TXRX_HL_BUNDLE 362 uint16_t bundle_timer_value; 363 uint16_t bundle_size; 364 #endif 365 uint8_t pktlog_buffer_size; 366 }; 367 368 #ifdef IPA_OFFLOAD 369 /** 370 * ol_txrx_ipa_resources - Resources needed for IPA 371 */ 372 struct ol_txrx_ipa_resources { 373 qdf_shared_mem_t *ce_sr; 374 uint32_t ce_sr_ring_size; 375 qdf_dma_addr_t ce_reg_paddr; 376 377 qdf_shared_mem_t *tx_comp_ring; 378 uint32_t tx_num_alloc_buffer; 379 380 qdf_shared_mem_t *rx_rdy_ring; 381 qdf_shared_mem_t *rx_proc_done_idx; 382 383 qdf_shared_mem_t *rx2_rdy_ring; 384 qdf_shared_mem_t *rx2_proc_done_idx; 385 386 /* IPA UC doorbell registers paddr */ 387 qdf_dma_addr_t tx_comp_doorbell_dmaaddr; 388 qdf_dma_addr_t rx_ready_doorbell_dmaaddr; 389 390 uint32_t tx_pipe_handle; 391 uint32_t rx_pipe_handle; 392 }; 393 #endif 394 395 struct ol_txrx_ocb_chan_info { 396 uint32_t chan_freq; 397 uint16_t disable_rx_stats_hdr:1; 398 }; 399 400 /** 401 * ol_mic_error_info - carries the information associated with 402 * a MIC error 403 * @vdev_id: virtual device ID 404 * @key_id: Key ID 405 * @pn: packet number 406 * @sa: source address 407 * @da: destination address 408 * @ta: transmitter address 409 */ 410 struct ol_mic_error_info { 411 uint8_t vdev_id; 412 uint32_t key_id; 413 uint64_t pn; 414 uint8_t sa[QDF_MAC_ADDR_SIZE]; 415 uint8_t da[QDF_MAC_ADDR_SIZE]; 416 uint8_t ta[QDF_MAC_ADDR_SIZE]; 417 }; 418 419 /** 420 * ol_error_info - carries the information associated with an 421 * error indicated by the firmware 422 * @mic_err: MIC error information 423 */ 424 struct ol_error_info { 425 union { 426 struct ol_mic_error_info mic_err; 427 } u; 428 }; 429 430 431 /** 432 * struct ol_txrx_ocb_set_chan - txrx OCB channel info 433 * @ocb_channel_count: Channel count 434 * @ocb_channel_info: OCB channel info 435 */ 436 struct ol_txrx_ocb_set_chan { 437 uint32_t ocb_channel_count; 438 struct ol_txrx_ocb_chan_info *ocb_channel_info; 439 }; 440 441 /** 442 * @brief Parameter type to pass WMM setting to ol_txrx_set_wmm_param 443 * @details 444 * The struct is used to specify information to update TX WMM scheduler. 445 */ 446 struct ol_tx_ac_param_t { 447 uint32_t aifs; 448 uint32_t cwmin; 449 uint32_t cwmax; 450 }; 451 452 struct ol_tx_wmm_param_t { 453 struct ol_tx_ac_param_t ac[OL_TX_NUM_WMM_AC]; 454 }; 455 456 struct ieee80211_ba_parameterset { 457 #if _BYTE_ORDER == _BIG_ENDIAN 458 uint16_t buffersize:10, /* B6-15 buffer size */ 459 tid:4, /* B2-5 TID */ 460 bapolicy:1, /* B1 block ack policy */ 461 amsdusupported:1; /* B0 amsdu supported */ 462 #else 463 uint16_t amsdusupported:1, /* B0 amsdu supported */ 464 bapolicy:1, /* B1 block ack policy */ 465 tid:4, /* B2-5 TID */ 466 buffersize:10; /* B6-15 buffer size */ 467 #endif 468 } __packed; 469 470 struct ieee80211_ba_seqctrl { 471 #if _BYTE_ORDER == _BIG_ENDIAN 472 uint16_t startseqnum:12, /* B4-15 starting sequence number */ 473 fragnum:4; /* B0-3 fragment number */ 474 #else 475 uint16_t fragnum:4, /* B0-3 fragment number */ 476 startseqnum:12; /* B4-15 starting sequence number */ 477 #endif 478 } __packed; 479 480 struct ieee80211_delba_parameterset { 481 #if _BYTE_ORDER == _BIG_ENDIAN 482 uint16_t tid:4, /* B12-15 tid */ 483 initiator:1, /* B11 initiator */ 484 reserved0:11; /* B0-10 reserved */ 485 #else 486 uint16_t reserved0:11, /* B0-10 reserved */ 487 initiator:1, /* B11 initiator */ 488 tid:4; /* B12-15 tid */ 489 #endif 490 } __packed; 491 492 /** 493 * ol_txrx_vdev_peer_remove_cb - wma_remove_peer callback 494 */ 495 typedef void (*ol_txrx_vdev_peer_remove_cb)(void *handle, uint8_t *bssid, 496 uint8_t vdev_id, void *peer); 497 498 /** 499 * @typedef tx_pause_callback 500 * @brief OSIF function registered with the data path 501 */ 502 typedef void (*tx_pause_callback)(uint8_t vdev_id, 503 enum netif_action_type action, 504 enum netif_reason_type reason); 505 506 /** 507 * struct ol_rx_inv_peer_params - rx invalid peer data parameters 508 * @vdev_id: Virtual device ID 509 * @ra: RX data receiver MAC address 510 * @ta: RX data transmitter MAC address 511 */ 512 struct ol_rx_inv_peer_params { 513 uint8_t vdev_id; 514 uint8_t ra[QDF_MAC_ADDR_SIZE]; 515 uint8_t ta[QDF_MAC_ADDR_SIZE]; 516 }; 517 518 /** 519 * cdp_txrx_ext_stats: dp extended stats 520 * tx_msdu_enqueue: tx msdu queued to hw 521 * tx_msdu_overflow: tx msdu overflow 522 * rx_mpdu_received: rx mpdu processed by hw 523 * rx_mpdu_delivered: rx mpdu received from hw 524 * rx_mpdu_error: rx mpdu error count 525 * rx_mpdu_missed: rx mpdu missed by hw 526 */ 527 struct cdp_txrx_ext_stats { 528 uint32_t tx_msdu_enqueue; 529 uint32_t tx_msdu_overflow; 530 uint32_t rx_mpdu_received; 531 uint32_t rx_mpdu_delivered; 532 uint32_t rx_mpdu_error; 533 uint32_t rx_mpdu_missed; 534 }; 535 536 #endif /* __CDP_TXRX_MOB_DEF_H */ 537