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