1 2 /* Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17 18 19 20 21 22 23 24 25 26 #ifndef _MON_DESTINATION_RING_WITH_DROP_H_ 27 #define _MON_DESTINATION_RING_WITH_DROP_H_ 28 #if !defined(__ASSEMBLER__) 29 #endif 30 31 #define NUM_OF_DWORDS_MON_DESTINATION_RING_WITH_DROP 4 32 33 34 struct mon_destination_ring_with_drop { 35 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN 36 uint32_t ppdu_drop_cnt : 10, // [9:0] 37 mpdu_drop_cnt : 10, // [19:10] 38 tlv_drop_cnt : 10, // [29:20] 39 end_of_ppdu_seen : 1, // [30:30] 40 reserved_0a : 1; // [31:31] 41 uint32_t reserved_1a : 32; // [31:0] 42 uint32_t ppdu_id : 32; // [31:0] 43 uint32_t reserved_3a : 18, // [17:0] 44 initiator : 1, // [18:18] 45 empty_descriptor : 1, // [19:19] 46 ring_id : 8, // [27:20] 47 looping_count : 4; // [31:28] 48 #else 49 uint32_t reserved_0a : 1, // [31:31] 50 end_of_ppdu_seen : 1, // [30:30] 51 tlv_drop_cnt : 10, // [29:20] 52 mpdu_drop_cnt : 10, // [19:10] 53 ppdu_drop_cnt : 10; // [9:0] 54 uint32_t reserved_1a : 32; // [31:0] 55 uint32_t ppdu_id : 32; // [31:0] 56 uint32_t looping_count : 4, // [31:28] 57 ring_id : 8, // [27:20] 58 empty_descriptor : 1, // [19:19] 59 initiator : 1, // [18:18] 60 reserved_3a : 18; // [17:0] 61 #endif 62 }; 63 64 65 /* Description PPDU_DROP_CNT 66 67 The number of PPDUs dropped due to the back-pressure 68 69 Set to 1023 if >1023 PPDUs got dropped 70 <legal all> 71 */ 72 73 #define MON_DESTINATION_RING_WITH_DROP_PPDU_DROP_CNT_OFFSET 0x00000000 74 #define MON_DESTINATION_RING_WITH_DROP_PPDU_DROP_CNT_LSB 0 75 #define MON_DESTINATION_RING_WITH_DROP_PPDU_DROP_CNT_MSB 9 76 #define MON_DESTINATION_RING_WITH_DROP_PPDU_DROP_CNT_MASK 0x000003ff 77 78 79 /* Description MPDU_DROP_CNT 80 81 The number of MPDUs dropped within the first PPDU due to 82 the back-pressure 83 84 Set to 1023 if >1023 MPDUs got dropped 85 <legal all> 86 */ 87 88 #define MON_DESTINATION_RING_WITH_DROP_MPDU_DROP_CNT_OFFSET 0x00000000 89 #define MON_DESTINATION_RING_WITH_DROP_MPDU_DROP_CNT_LSB 10 90 #define MON_DESTINATION_RING_WITH_DROP_MPDU_DROP_CNT_MSB 19 91 #define MON_DESTINATION_RING_WITH_DROP_MPDU_DROP_CNT_MASK 0x000ffc00 92 93 94 /* Description TLV_DROP_CNT 95 96 The number of PPDU-level (global or per-user) TLVs dropped 97 within the first PPDU due to the back-pressure 98 */ 99 100 #define MON_DESTINATION_RING_WITH_DROP_TLV_DROP_CNT_OFFSET 0x00000000 101 #define MON_DESTINATION_RING_WITH_DROP_TLV_DROP_CNT_LSB 20 102 #define MON_DESTINATION_RING_WITH_DROP_TLV_DROP_CNT_MSB 29 103 #define MON_DESTINATION_RING_WITH_DROP_TLV_DROP_CNT_MASK 0x3ff00000 104 105 106 /* Description END_OF_PPDU_SEEN 107 108 Field valid only if mpdu_drop_cnt > 0 or tlv_drop_cnt > 109 0 110 111 Set by TXMON if 'TX_FES_STATUS_END' is received for a partially 112 dropped PPDU when Initiator = 1. 113 Set by TXMON if 'RESPONSE_END_STATUS' is received for a 114 partially dropped PPDU when Initiator = 0. 115 Set by RXMON if 'RX_PPDU_END_STATUS_DONE' is received for 116 a partially dropped PPDU. 117 */ 118 119 #define MON_DESTINATION_RING_WITH_DROP_END_OF_PPDU_SEEN_OFFSET 0x00000000 120 #define MON_DESTINATION_RING_WITH_DROP_END_OF_PPDU_SEEN_LSB 30 121 #define MON_DESTINATION_RING_WITH_DROP_END_OF_PPDU_SEEN_MSB 30 122 #define MON_DESTINATION_RING_WITH_DROP_END_OF_PPDU_SEEN_MASK 0x40000000 123 124 125 /* Description RESERVED_0A 126 127 <legal 0> 128 */ 129 130 #define MON_DESTINATION_RING_WITH_DROP_RESERVED_0A_OFFSET 0x00000000 131 #define MON_DESTINATION_RING_WITH_DROP_RESERVED_0A_LSB 31 132 #define MON_DESTINATION_RING_WITH_DROP_RESERVED_0A_MSB 31 133 #define MON_DESTINATION_RING_WITH_DROP_RESERVED_0A_MASK 0x80000000 134 135 136 /* Description RESERVED_1A 137 138 <legal 0> 139 */ 140 141 #define MON_DESTINATION_RING_WITH_DROP_RESERVED_1A_OFFSET 0x00000004 142 #define MON_DESTINATION_RING_WITH_DROP_RESERVED_1A_LSB 0 143 #define MON_DESTINATION_RING_WITH_DROP_RESERVED_1A_MSB 31 144 #define MON_DESTINATION_RING_WITH_DROP_RESERVED_1A_MASK 0xffffffff 145 146 147 /* Description PPDU_ID 148 149 The ID of the last PPDU which saw the back-pressure on AXI 150 151 152 TXMON fills this with the schedule_id from 'TX_FES_SETUP' 153 when Initiator = 1. 154 TXMON fills this with the Phy_ppdu_id from 'RX_RESPONSE_REQUIRED_INFO' 155 when Initiator = 0. 156 RXMON fills this with the Phy_ppdu_id from 'RX_PPDU_START.' 157 158 <legal all> 159 */ 160 161 #define MON_DESTINATION_RING_WITH_DROP_PPDU_ID_OFFSET 0x00000008 162 #define MON_DESTINATION_RING_WITH_DROP_PPDU_ID_LSB 0 163 #define MON_DESTINATION_RING_WITH_DROP_PPDU_ID_MSB 31 164 #define MON_DESTINATION_RING_WITH_DROP_PPDU_ID_MASK 0xffffffff 165 166 167 /* Description RESERVED_3A 168 169 <legal 0> 170 */ 171 172 #define MON_DESTINATION_RING_WITH_DROP_RESERVED_3A_OFFSET 0x0000000c 173 #define MON_DESTINATION_RING_WITH_DROP_RESERVED_3A_LSB 0 174 #define MON_DESTINATION_RING_WITH_DROP_RESERVED_3A_MSB 17 175 #define MON_DESTINATION_RING_WITH_DROP_RESERVED_3A_MASK 0x0003ffff 176 177 178 /* Description INITIATOR 179 180 1: This descriptor belongs to a TX FES (TXOP initiator) 181 0: This descriptor belongs to a response TX (TXOP responder) 182 183 <legal all> 184 */ 185 186 #define MON_DESTINATION_RING_WITH_DROP_INITIATOR_OFFSET 0x0000000c 187 #define MON_DESTINATION_RING_WITH_DROP_INITIATOR_LSB 18 188 #define MON_DESTINATION_RING_WITH_DROP_INITIATOR_MSB 18 189 #define MON_DESTINATION_RING_WITH_DROP_INITIATOR_MASK 0x00040000 190 191 192 /* Description EMPTY_DESCRIPTOR 193 194 0: This descriptor is written on a flush or the end of a 195 PPDU or the end of status buffer (see 'MON_DESTINATION_RING' 196 structure) 197 1: This descriptor is written to indicate drop information 198 199 <legal 1> 200 */ 201 202 #define MON_DESTINATION_RING_WITH_DROP_EMPTY_DESCRIPTOR_OFFSET 0x0000000c 203 #define MON_DESTINATION_RING_WITH_DROP_EMPTY_DESCRIPTOR_LSB 19 204 #define MON_DESTINATION_RING_WITH_DROP_EMPTY_DESCRIPTOR_MSB 19 205 #define MON_DESTINATION_RING_WITH_DROP_EMPTY_DESCRIPTOR_MASK 0x00080000 206 207 208 /* Description RING_ID 209 210 Consumer: SW/REO/DEBUG 211 Producer: SRNG (of TXMON/RXMON) 212 213 For debugging. 214 This field is filled in by the SRNG module. 215 It help to identify the ring that is being looked 216 <legal 0> 217 */ 218 219 #define MON_DESTINATION_RING_WITH_DROP_RING_ID_OFFSET 0x0000000c 220 #define MON_DESTINATION_RING_WITH_DROP_RING_ID_LSB 20 221 #define MON_DESTINATION_RING_WITH_DROP_RING_ID_MSB 27 222 #define MON_DESTINATION_RING_WITH_DROP_RING_ID_MASK 0x0ff00000 223 224 225 /* Description LOOPING_COUNT 226 227 Consumer: SW/DEBUG 228 Producer: SRNG (of TXMON/RXMON) 229 230 For debugging. 231 This field is filled in by the SRNG module. 232 233 A count value that indicates the number of times the producer 234 of entries into this Ring has looped around the ring. 235 At initialization time, this value is set to 0. On the first 236 loop, this value is set to 1. After the max value is reached 237 allowed by the number of bits for this field, the count 238 value continues with 0 again. 239 240 In case SW is the consumer of the ring entries, it can use 241 this field to figure out up to where the producer of entries 242 has created new entries. This eliminates the need to check 243 where the "head pointer' of the ring is located once the 244 SW starts processing an interrupt indicating that new entries 245 have been put into this ring... 246 247 Also note that SW if it wants only needs to look at the 248 LSB bit of this count value. 249 <legal all> 250 */ 251 252 #define MON_DESTINATION_RING_WITH_DROP_LOOPING_COUNT_OFFSET 0x0000000c 253 #define MON_DESTINATION_RING_WITH_DROP_LOOPING_COUNT_LSB 28 254 #define MON_DESTINATION_RING_WITH_DROP_LOOPING_COUNT_MSB 31 255 #define MON_DESTINATION_RING_WITH_DROP_LOOPING_COUNT_MASK 0xf0000000 256 257 258 259 #endif // MON_DESTINATION_RING_WITH_DROP 260