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 _RX_PPDU_NO_ACK_REPORT_H_ 27 #define _RX_PPDU_NO_ACK_REPORT_H_ 28 #if !defined(__ASSEMBLER__) 29 #endif 30 31 #include "no_ack_report.h" 32 #define NUM_OF_DWORDS_RX_PPDU_NO_ACK_REPORT 4 33 34 #define NUM_OF_QWORDS_RX_PPDU_NO_ACK_REPORT 2 35 36 37 struct rx_ppdu_no_ack_report { 38 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN 39 struct no_ack_report no_ack_report_details; 40 #else 41 struct no_ack_report no_ack_report_details; 42 #endif 43 }; 44 45 46 /* Description NO_ACK_REPORT_DETAILS 47 48 Info indicating why frame did not require a response transmission 49 in SIFS time. 50 */ 51 52 53 /* Description NO_ACK_TRANSMIT_REASON 54 55 Field that indicates why the received frame is not needing 56 any transmit response in SIFS time. 57 58 The possible responses are listed in order. 59 60 <enum 0 NO_ACK_FCS_errors > All received frames have 61 FCS errors. 62 <enum 1 Unicast_no_ack_frame_received > All received 63 frames did not require a response. 64 <enum 2 NO_ACK_Broadcast> Broadcast frame received 65 <enum 3 NO_ACK_Multicast> Multicast frame received 66 <enum 4 Not_directed> Frames received are not directed 67 to this device (based on addr1) 68 <enum 5 AST_no_ack> The AST entry indicated that NO 69 ACK shall be send 70 <enum 6 PHY_GID_mismatch> PHY dropped the incoming frame 71 dur to GID mismatch 72 <enum 7 PHY_AID_mismatch> PHY dropped the incoming frame 73 dur to AID mismatch 74 <enum 8 NO_ACK_PHY_error> PHY reported an error during 75 reception. For details, see the 'phy_error...' fields 76 <enum 9 RTS_bw_not_available> The requested BW for the 77 CTS response frame is not available 78 <enum 10 NDPA_Frame> An NDPA frame got received 79 <enum 11 NDP_Frame> An NDP frame got received 80 <enum 12 Trigger_NAV_blocked> a trigger frame was received, 81 but due to NAV setting, no response could be generated 82 <enum 13 Trigger_no_AID> A trigger frame was received, 83 but this device's AID was not in the list 84 <enum 14 NO_ACK_MAC_ABORT_REQ > No ACK is needed as 85 SW asked RXPCU to send a abort_request to the PHYRX 86 <enum 15 no_response_other> placeholder in case non 87 of the above properly cover the reasons 88 89 Also see the field SR_PPDU_during_OBSS. 90 <legal 0-15> 91 */ 92 93 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_NO_ACK_TRANSMIT_REASON_OFFSET 0x0000000000000000 94 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_NO_ACK_TRANSMIT_REASON_LSB 0 95 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_NO_ACK_TRANSMIT_REASON_MSB 3 96 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_NO_ACK_TRANSMIT_REASON_MASK 0x000000000000000f 97 98 99 /* Description MACRX_ABORT_REASON 100 101 Field only valid when No_ack_transmit_reason is set to NO_ACK_MAC_ABORT_REQ 102 103 104 Error field received from MACRX_ABORT_REQUEST.Macrx_abort_reason[2:0] 105 106 <Legal all> 107 */ 108 109 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_MACRX_ABORT_REASON_OFFSET 0x0000000000000000 110 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_MACRX_ABORT_REASON_LSB 4 111 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_MACRX_ABORT_REASON_MSB 7 112 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_MACRX_ABORT_REASON_MASK 0x00000000000000f0 113 114 115 /* Description PHYRX_ABORT_REASON 116 117 Field only valid when No_ack_transmit_reason is set to NO_ACK_PHY_error 118 119 120 Error field received from PHYRX_ABORT_REQUEST.Phyrx_abort_reason 121 122 123 <Legal all> 124 */ 125 126 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_PHYRX_ABORT_REASON_OFFSET 0x0000000000000000 127 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_PHYRX_ABORT_REASON_LSB 8 128 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_PHYRX_ABORT_REASON_MSB 15 129 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_PHYRX_ABORT_REASON_MASK 0x000000000000ff00 130 131 132 /* Description FRAME_CONTROL 133 134 frame control field of the received (first properly received) 135 frame 136 137 <Legal all> 138 */ 139 140 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_FRAME_CONTROL_OFFSET 0x0000000000000000 141 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_FRAME_CONTROL_LSB 16 142 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_FRAME_CONTROL_MSB 31 143 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_FRAME_CONTROL_MASK 0x00000000ffff0000 144 145 146 /* Description RX_PPDU_DURATION 147 148 The length of this PPDU reception in us 149 <Legal all> 150 */ 151 152 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_RX_PPDU_DURATION_OFFSET 0x0000000000000000 153 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_RX_PPDU_DURATION_LSB 32 154 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_RX_PPDU_DURATION_MSB 55 155 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_RX_PPDU_DURATION_MASK 0x00ffffff00000000 156 157 158 /* Description SR_PPDU_DURING_OBSS 159 160 Field only valid with SRP Responder support (not PoR in 161 Moselle/Maple/Spruce) 162 163 Indicates that the received frame was sent using SRP as 164 indicated by the 'SR PPDU' bit in the 'CAS Control' in the 165 'HE A-Control' in one of the MPDUs received, and that the 166 response could not be generated due to OBSS traffic setting 167 the NAV 168 <legal all> 169 */ 170 171 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_SR_PPDU_DURING_OBSS_OFFSET 0x0000000000000000 172 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_SR_PPDU_DURING_OBSS_LSB 56 173 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_SR_PPDU_DURING_OBSS_MSB 56 174 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_SR_PPDU_DURING_OBSS_MASK 0x0100000000000000 175 176 177 /* Description SELFGEN_RESPONSE_REASON_TO_SR_PPDU 178 179 Field only valid with SRP Responder support (not PoR in 180 Moselle/Maple/Spruce) 181 182 This field indicates why the received SR PPDU needs a response 183 in SIFS time. The e-num used is the same as in the field 184 selfgen_response_reason in 'ACK_REPORT' structure although 185 some of these will be unused in case of an SR PPDU. 186 187 <enum 0 CTS_frame> 188 <enum 1 ACK_frame> 189 <enum 2 BA_frame > 190 <enum 3 Qboost_trigger> Qboost trigger received 191 <enum 4 PSPOLL_trigger> PSPOLL trigger received 192 <enum 5 UAPSD_trigger > Unscheduled APSD trigger received 193 194 <enum 6 CBF_frame> the CBF frame needs to be send as 195 a result of NDP or BRPOLL 196 <enum 7 ax_su_trigger> 11ax trigger received for this 197 device 198 <enum 8 ax_wildcard_trigger> 11ax wildcardtrigger has 199 been received 200 <enum 9 ax_unassoc_wildcard_trigger> 11ax wildcard trigger 201 for unassociated STAs has been received 202 <enum 12 eht_su_trigger> EHT R1 trigger received for 203 this device 204 <enum 10 MU_UL_response_to_response> 205 206 <enum 11 Ranging_NDP_LMR_frames> Ranging NDP + LMR need 207 to be sent in response to ranging NDPA + NDP 208 209 <legal 0-12> 210 */ 211 212 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_SELFGEN_RESPONSE_REASON_TO_SR_PPDU_OFFSET 0x0000000000000000 213 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_SELFGEN_RESPONSE_REASON_TO_SR_PPDU_LSB 57 214 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_SELFGEN_RESPONSE_REASON_TO_SR_PPDU_MSB 60 215 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_SELFGEN_RESPONSE_REASON_TO_SR_PPDU_MASK 0x1e00000000000000 216 217 218 /* Description RESERVED_1 219 220 <legal all> 221 */ 222 223 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_RESERVED_1_OFFSET 0x0000000000000000 224 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_RESERVED_1_LSB 61 225 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_RESERVED_1_MSB 63 226 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_RESERVED_1_MASK 0xe000000000000000 227 228 229 /* Description PRE_BT_BROADCAST_STATUS_DETAILS 230 231 Same contents as field "bt_broadcast_status_details" for 232 the first received COEX_STATUS_BROADCAST tlv during this 233 PPDU reception. 234 After power up, this field is all initialized to 0 235 236 Bits: [31:28]: always 0 237 238 239 For detailed info see doc: TBD 240 <legal all> 241 */ 242 243 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_PRE_BT_BROADCAST_STATUS_DETAILS_OFFSET 0x0000000000000008 244 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_PRE_BT_BROADCAST_STATUS_DETAILS_LSB 0 245 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_PRE_BT_BROADCAST_STATUS_DETAILS_MSB 11 246 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_PRE_BT_BROADCAST_STATUS_DETAILS_MASK 0x0000000000000fff 247 248 249 /* Description FIRST_BT_BROADCAST_STATUS_DETAILS 250 251 Same contents as field "bt_broadcast_status_details" for 252 the first received COEX_STATUS_BROADCAST tlv during this 253 PPDU reception. 254 255 If no COEX_STATUS_BROADCAST tlv is received during this 256 PPDU reception, this field will be set to 0 257 <legal all> 258 */ 259 260 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_FIRST_BT_BROADCAST_STATUS_DETAILS_OFFSET 0x0000000000000008 261 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_FIRST_BT_BROADCAST_STATUS_DETAILS_LSB 12 262 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_FIRST_BT_BROADCAST_STATUS_DETAILS_MSB 23 263 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_FIRST_BT_BROADCAST_STATUS_DETAILS_MASK 0x0000000000fff000 264 265 266 /* Description RESERVED_2 267 268 <legal 0> 269 */ 270 271 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_RESERVED_2_OFFSET 0x0000000000000008 272 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_RESERVED_2_LSB 24 273 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_RESERVED_2_MSB 31 274 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_RESERVED_2_MASK 0x00000000ff000000 275 276 277 /* Description SECOND_BT_BROADCAST_STATUS_DETAILS 278 279 Same contents as field "bt_broadcast_status_details" for 280 the second received COEX_STATUS_BROADCAST tlv during this 281 PPDU reception. 282 283 If no second COEX_STATUS_BROADCAST tlv is received during 284 this PPDU reception, this field will be set to 0 285 <legal all> 286 */ 287 288 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_SECOND_BT_BROADCAST_STATUS_DETAILS_OFFSET 0x0000000000000008 289 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_SECOND_BT_BROADCAST_STATUS_DETAILS_LSB 32 290 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_SECOND_BT_BROADCAST_STATUS_DETAILS_MSB 43 291 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_SECOND_BT_BROADCAST_STATUS_DETAILS_MASK 0x00000fff00000000 292 293 294 /* Description RESERVED_3 295 296 <legal 0> 297 */ 298 299 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_RESERVED_3_OFFSET 0x0000000000000008 300 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_RESERVED_3_LSB 44 301 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_RESERVED_3_MSB 63 302 #define RX_PPDU_NO_ACK_REPORT_NO_ACK_REPORT_DETAILS_RESERVED_3_MASK 0xfffff00000000000 303 304 305 306 #endif // RX_PPDU_NO_ACK_REPORT 307