1 /* 2 * Copyright (c) 2012, 2014-2017, 2019 The Linux Foundation. All rights reserved. 3 * Copyright (c) 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 /** 21 * @file ol_txrx_status.h 22 * @brief Functions provided for visibility and debugging. 23 * NOTE: This file is used by both kernel driver SW and userspace SW. 24 * Thus, do not reference use any kernel header files or defs in this file! 25 */ 26 #ifndef _OL_TXRX_STATS__H_ 27 #define _OL_TXRX_STATS__H_ 28 29 #include <athdefs.h> /* uint64_t */ 30 31 32 33 struct ol_txrx_stats_elem { 34 uint64_t pkts; 35 uint64_t bytes; 36 }; 37 38 #define NUM_MAX_TSO_SEGS 4 39 #define NUM_MAX_TSO_SEGS_MASK (NUM_MAX_TSO_SEGS - 1) 40 41 #define NUM_MAX_TSO_MSDUS 32 42 #define NUM_MAX_TSO_MSDUS_MASK (NUM_MAX_TSO_MSDUS - 1) 43 44 struct ol_txrx_stats_tso_msdu { 45 struct qdf_tso_seg_t tso_segs[NUM_MAX_TSO_SEGS]; 46 uint8_t num_seg; 47 uint8_t tso_seg_idx; 48 uint32_t total_len; 49 uint32_t gso_size; 50 uint8_t nr_frags; 51 }; 52 53 struct ol_txrx_stats_tso_info { 54 struct ol_txrx_stats_tso_msdu tso_msdu_info[NUM_MAX_TSO_MSDUS]; 55 uint32_t tso_msdu_idx; 56 }; 57 58 /** 59 * @brief data stats published by the host txrx layer 60 * 61 * ------------------------- 62 * 63 * TX 64 * 65 */ 66 struct ol_txrx_stats_tx_dropped { 67 /* MSDUs that the host did not accept */ 68 struct ol_txrx_stats_elem host_reject; 69 /* MSDUs which could not be downloaded to the target */ 70 struct ol_txrx_stats_elem download_fail; 71 /* 72 * MSDUs which the target discarded 73 * (lack of memory or old age) 74 */ 75 struct ol_txrx_stats_elem target_discard; 76 /* 77 * MSDUs which the target sent but 78 * couldn't get an ack for 79 */ 80 struct ol_txrx_stats_elem no_ack; 81 82 /* 83 * MSDUs which the target drop 84 * (lack of tx descriptor) 85 */ 86 struct ol_txrx_stats_elem target_drop; 87 88 /* MSDU which were dropped for other reasons */ 89 struct ol_txrx_stats_elem others; 90 }; 91 92 struct ol_txrx_tso_histogram { 93 uint32_t pkts_1; 94 uint32_t pkts_2_5; 95 uint32_t pkts_6_10; 96 uint32_t pkts_11_15; 97 uint32_t pkts_16_20; 98 uint32_t pkts_20_plus; 99 }; 100 101 struct ol_txrx_stats_tx_histogram { 102 uint32_t pkts_1; 103 uint32_t pkts_2_10; 104 uint32_t pkts_11_20; 105 uint32_t pkts_21_30; 106 uint32_t pkts_31_40; 107 uint32_t pkts_41_50; 108 uint32_t pkts_51_60; 109 uint32_t pkts_61_plus; 110 }; 111 struct ol_txrx_stats_tx_tso { 112 struct ol_txrx_stats_elem tso_pkts; 113 #if defined(FEATURE_TSO) 114 struct ol_txrx_stats_tso_info tso_info; 115 struct ol_txrx_tso_histogram tso_hist; 116 qdf_spinlock_t tso_stats_lock; 117 #endif 118 }; 119 120 struct ol_txrx_stats_tx { 121 /* MSDUs given to the txrx layer by the management stack */ 122 struct ol_txrx_stats_elem mgmt; 123 /* MSDUs received from the stack */ 124 struct ol_txrx_stats_elem from_stack; 125 /* MSDUs successfully sent across the WLAN */ 126 struct ol_txrx_stats_elem delivered; 127 struct ol_txrx_stats_tx_dropped dropped; 128 /* contains information of packets received per tx completion*/ 129 struct ol_txrx_stats_tx_histogram comp_histogram; 130 /* TSO (TCP segmentation offload) information */ 131 struct ol_txrx_stats_tx_tso tso; 132 }; 133 134 /* 135 * RX 136 */ 137 struct ol_txrx_stats_rx_histogram { 138 uint32_t pkts_1; 139 uint32_t pkts_2_10; 140 uint32_t pkts_11_20; 141 uint32_t pkts_21_30; 142 uint32_t pkts_31_40; 143 uint32_t pkts_41_50; 144 uint32_t pkts_51_60; 145 uint32_t pkts_61_plus; 146 }; 147 struct ol_txrx_stats_rx_ibss_fwd { 148 /* MSDUs forwarded to network stack */ 149 u_int32_t packets_stack; 150 /* MSDUs forwarded from the rx path to the tx path */ 151 u_int32_t packets_fwd; 152 /* MSDUs forwarded to stack and tx path */ 153 u_int32_t packets_stack_n_fwd; 154 }; 155 struct ol_txrx_stats_rx { 156 /* MSDUs given to the OS shim */ 157 struct ol_txrx_stats_elem delivered; 158 struct ol_txrx_stats_elem dropped_err; 159 struct ol_txrx_stats_elem dropped_mic_err; 160 struct ol_txrx_stats_elem dropped_peer_invalid; 161 struct ol_txrx_stats_rx_ibss_fwd intra_bss_fwd; 162 struct ol_txrx_stats_rx_histogram rx_ind_histogram; 163 uint32_t msdus_with_frag_ind; 164 uint32_t msdus_with_offload_ind; 165 }; 166 struct ol_txrx_stats { 167 struct ol_txrx_stats_tx tx; 168 struct ol_txrx_stats_rx rx; 169 }; 170 171 /* 172 * Structure to consolidate host stats 173 */ 174 struct ieee80211req_ol_ath_host_stats { 175 struct ol_txrx_stats txrx_stats; 176 struct { 177 int pkt_q_fail_count; 178 int pkt_q_empty_count; 179 int send_q_empty_count; 180 } htc; 181 struct { 182 int pipe_no_resrc_count; 183 int ce_ring_delta_fail_count; 184 } hif; 185 }; 186 187 #endif /* _OL_TXRX_STATS__H_ */ 188