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 _TX_FES_STATUS_ACK_OR_BA_H_ 18 #define _TX_FES_STATUS_ACK_OR_BA_H_ 19 #if !defined(__ASSEMBLER__) 20 #endif 21 22 #define NUM_OF_DWORDS_TX_FES_STATUS_ACK_OR_BA 10 23 24 #define NUM_OF_QWORDS_TX_FES_STATUS_ACK_OR_BA 5 25 26 27 struct tx_fes_status_ack_or_ba { 28 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN 29 uint32_t ack_ba_status_type : 1, // [0:0] 30 ba_type : 1, // [1:1] 31 ba_tid : 4, // [5:2] 32 unexpected_ack_or_ba : 1, // [6:6] 33 response_timeout : 1, // [7:7] 34 ack_frame_rssi : 8, // [15:8] 35 ssn : 12, // [27:16] 36 reserved_0b : 4; // [31:28] 37 uint32_t sw_peer_id : 16, // [15:0] 38 reserved_1a : 16; // [31:16] 39 uint32_t ba_bitmap_31_0 : 32; // [31:0] 40 uint32_t ba_bitmap_63_32 : 32; // [31:0] 41 uint32_t ba_bitmap_95_64 : 32; // [31:0] 42 uint32_t ba_bitmap_127_96 : 32; // [31:0] 43 uint32_t ba_bitmap_159_128 : 32; // [31:0] 44 uint32_t ba_bitmap_191_160 : 32; // [31:0] 45 uint32_t ba_bitmap_223_192 : 32; // [31:0] 46 uint32_t ba_bitmap_255_224 : 32; // [31:0] 47 #else 48 uint32_t reserved_0b : 4, // [31:28] 49 ssn : 12, // [27:16] 50 ack_frame_rssi : 8, // [15:8] 51 response_timeout : 1, // [7:7] 52 unexpected_ack_or_ba : 1, // [6:6] 53 ba_tid : 4, // [5:2] 54 ba_type : 1, // [1:1] 55 ack_ba_status_type : 1; // [0:0] 56 uint32_t reserved_1a : 16, // [31:16] 57 sw_peer_id : 16; // [15:0] 58 uint32_t ba_bitmap_31_0 : 32; // [31:0] 59 uint32_t ba_bitmap_63_32 : 32; // [31:0] 60 uint32_t ba_bitmap_95_64 : 32; // [31:0] 61 uint32_t ba_bitmap_127_96 : 32; // [31:0] 62 uint32_t ba_bitmap_159_128 : 32; // [31:0] 63 uint32_t ba_bitmap_191_160 : 32; // [31:0] 64 uint32_t ba_bitmap_223_192 : 32; // [31:0] 65 uint32_t ba_bitmap_255_224 : 32; // [31:0] 66 #endif 67 }; 68 69 70 /* Description ACK_BA_STATUS_TYPE 71 72 Consumer: SW 73 Producer: RXPCU 74 75 <enum 0 Ack_type> This TLV represents an ACK reception. 76 77 <enum 1 BA_type> This TLV represents an BA reception. 78 <legal 0-1> 79 */ 80 81 #define TX_FES_STATUS_ACK_OR_BA_ACK_BA_STATUS_TYPE_OFFSET 0x0000000000000000 82 #define TX_FES_STATUS_ACK_OR_BA_ACK_BA_STATUS_TYPE_LSB 0 83 #define TX_FES_STATUS_ACK_OR_BA_ACK_BA_STATUS_TYPE_MSB 0 84 #define TX_FES_STATUS_ACK_OR_BA_ACK_BA_STATUS_TYPE_MASK 0x0000000000000001 85 86 87 /* Description BA_TYPE 88 89 Field only valid when Ack_ba_status_type == BA_type 90 91 <enum 0 BA_TYPE_ACK> 92 <enum 1 BA_TYPE_bitmap> 93 <legal all> 94 */ 95 96 #define TX_FES_STATUS_ACK_OR_BA_BA_TYPE_OFFSET 0x0000000000000000 97 #define TX_FES_STATUS_ACK_OR_BA_BA_TYPE_LSB 1 98 #define TX_FES_STATUS_ACK_OR_BA_BA_TYPE_MSB 1 99 #define TX_FES_STATUS_ACK_OR_BA_BA_TYPE_MASK 0x0000000000000002 100 101 102 /* Description BA_TID 103 104 Field only valid when Ack_ba_status_type == BA_type 105 106 The TID field copied from the BA frame 107 <legal all> 108 */ 109 110 #define TX_FES_STATUS_ACK_OR_BA_BA_TID_OFFSET 0x0000000000000000 111 #define TX_FES_STATUS_ACK_OR_BA_BA_TID_LSB 2 112 #define TX_FES_STATUS_ACK_OR_BA_BA_TID_MSB 5 113 #define TX_FES_STATUS_ACK_OR_BA_BA_TID_MASK 0x000000000000003c 114 115 116 /* Description UNEXPECTED_ACK_OR_BA 117 118 Set when RXPCU received a BA for which there was no " RXPCU_USER_SETUP_EXT 119 TLV' received. 120 This can happen when a BA for unexpected TID is received. 121 122 123 This message enables SW to still pass this BA information 124 on to the right TQM queue. 125 <legal all> 126 */ 127 128 #define TX_FES_STATUS_ACK_OR_BA_UNEXPECTED_ACK_OR_BA_OFFSET 0x0000000000000000 129 #define TX_FES_STATUS_ACK_OR_BA_UNEXPECTED_ACK_OR_BA_LSB 6 130 #define TX_FES_STATUS_ACK_OR_BA_UNEXPECTED_ACK_OR_BA_MSB 6 131 #define TX_FES_STATUS_ACK_OR_BA_UNEXPECTED_ACK_OR_BA_MASK 0x0000000000000040 132 133 134 /* Description RESPONSE_TIMEOUT 135 136 When set, there was delay in RXPCU (likely due to AST fetch 137 delay) that resulted in TXPCU not being able to send the 138 RX_RESPONSE_REQUIRED_INFO TLV within a certain timeout 139 from the falling edge of the frame. This status TLV is still 140 generated but RXPCU will NOT have generated the RX_RESPONSE_REQUIRED 141 TLV. 142 <legal all> 143 */ 144 145 #define TX_FES_STATUS_ACK_OR_BA_RESPONSE_TIMEOUT_OFFSET 0x0000000000000000 146 #define TX_FES_STATUS_ACK_OR_BA_RESPONSE_TIMEOUT_LSB 7 147 #define TX_FES_STATUS_ACK_OR_BA_RESPONSE_TIMEOUT_MSB 7 148 #define TX_FES_STATUS_ACK_OR_BA_RESPONSE_TIMEOUT_MASK 0x0000000000000080 149 150 151 /* Description ACK_FRAME_RSSI 152 153 RSSI of the received ACK, BA or M-BA frame. 154 155 <legal all> 156 */ 157 158 #define TX_FES_STATUS_ACK_OR_BA_ACK_FRAME_RSSI_OFFSET 0x0000000000000000 159 #define TX_FES_STATUS_ACK_OR_BA_ACK_FRAME_RSSI_LSB 8 160 #define TX_FES_STATUS_ACK_OR_BA_ACK_FRAME_RSSI_MSB 15 161 #define TX_FES_STATUS_ACK_OR_BA_ACK_FRAME_RSSI_MASK 0x000000000000ff00 162 163 164 /* Description SSN 165 166 Consumer: TQM/FW 167 Producer: SW/RXPCU 168 169 Field only valid in case of the Ack_ba_status_type indicating: 170 BA_type 171 172 The starting Sequence number of the (B)ACK bitmap <legal 173 all> 174 */ 175 176 #define TX_FES_STATUS_ACK_OR_BA_SSN_OFFSET 0x0000000000000000 177 #define TX_FES_STATUS_ACK_OR_BA_SSN_LSB 16 178 #define TX_FES_STATUS_ACK_OR_BA_SSN_MSB 27 179 #define TX_FES_STATUS_ACK_OR_BA_SSN_MASK 0x000000000fff0000 180 181 182 /* Description RESERVED_0B 183 184 <legal 0> 185 */ 186 187 #define TX_FES_STATUS_ACK_OR_BA_RESERVED_0B_OFFSET 0x0000000000000000 188 #define TX_FES_STATUS_ACK_OR_BA_RESERVED_0B_LSB 28 189 #define TX_FES_STATUS_ACK_OR_BA_RESERVED_0B_MSB 31 190 #define TX_FES_STATUS_ACK_OR_BA_RESERVED_0B_MASK 0x00000000f0000000 191 192 193 /* Description SW_PEER_ID 194 195 The sw_peer_id for which the bitmap is requested. 196 197 SW could use this info to link this TLV back to the right 198 TQM queue (if needed) 199 <legal all> 200 */ 201 202 #define TX_FES_STATUS_ACK_OR_BA_SW_PEER_ID_OFFSET 0x0000000000000000 203 #define TX_FES_STATUS_ACK_OR_BA_SW_PEER_ID_LSB 32 204 #define TX_FES_STATUS_ACK_OR_BA_SW_PEER_ID_MSB 47 205 #define TX_FES_STATUS_ACK_OR_BA_SW_PEER_ID_MASK 0x0000ffff00000000 206 207 208 /* Description RESERVED_1A 209 210 <legal 0> 211 */ 212 213 #define TX_FES_STATUS_ACK_OR_BA_RESERVED_1A_OFFSET 0x0000000000000000 214 #define TX_FES_STATUS_ACK_OR_BA_RESERVED_1A_LSB 48 215 #define TX_FES_STATUS_ACK_OR_BA_RESERVED_1A_MSB 63 216 #define TX_FES_STATUS_ACK_OR_BA_RESERVED_1A_MASK 0xffff000000000000 217 218 219 /* Description BA_BITMAP_31_0 220 221 Consumer: TQM/FW 222 Producer: SW/RXPCU 223 224 Field only valid in case of the Ack_ba_status_type indicating: 225 BA_type 226 227 Ba_bitmap_31_0 228 <legal all> 229 */ 230 231 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_31_0_OFFSET 0x0000000000000008 232 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_31_0_LSB 0 233 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_31_0_MSB 31 234 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_31_0_MASK 0x00000000ffffffff 235 236 237 /* Description BA_BITMAP_63_32 238 239 Consumer: TQM/FW 240 Producer: SW/RXPCU 241 242 Field only valid in case of the Ack_ba_status_type indicating: 243 BA_type 244 245 Ba_bitmap_63_32 246 <legal all> 247 */ 248 249 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_63_32_OFFSET 0x0000000000000008 250 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_63_32_LSB 32 251 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_63_32_MSB 63 252 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_63_32_MASK 0xffffffff00000000 253 254 255 /* Description BA_BITMAP_95_64 256 257 Consumer: TQM/FW 258 Producer: SW/RXPCU 259 260 Field only valid in case of the Remove_acked_cmd_type 261 indicating: 262 remove_Block_Acked_mpdus 263 264 Ba_bitmap_95_64 265 <legal all> 266 */ 267 268 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_95_64_OFFSET 0x0000000000000010 269 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_95_64_LSB 0 270 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_95_64_MSB 31 271 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_95_64_MASK 0x00000000ffffffff 272 273 274 /* Description BA_BITMAP_127_96 275 276 Consumer: TQM/FW 277 Producer: SW/RXPCU 278 279 Field only valid in case of the Remove_acked_cmd_type 280 indicating: 281 remove_Block_Acked_mpdus 282 283 Ba_bitmap_127_96 284 <legal all> 285 */ 286 287 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_127_96_OFFSET 0x0000000000000010 288 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_127_96_LSB 32 289 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_127_96_MSB 63 290 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_127_96_MASK 0xffffffff00000000 291 292 293 /* Description BA_BITMAP_159_128 294 295 Consumer: TQM/FW 296 Producer: SW/RXPCU 297 298 Field only valid in case of the Remove_acked_cmd_type 299 indicating: 300 remove_Block_Acked_mpdus 301 302 Ba_bitmap_159_128 303 <legal all> 304 */ 305 306 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_159_128_OFFSET 0x0000000000000018 307 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_159_128_LSB 0 308 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_159_128_MSB 31 309 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_159_128_MASK 0x00000000ffffffff 310 311 312 /* Description BA_BITMAP_191_160 313 314 Consumer: TQM/FW 315 Producer: SW/RXPCU 316 317 Field only valid in case of the Remove_acked_cmd_type 318 indicating: 319 remove_Block_Acked_mpdus 320 321 Ba_bitmap_191_160 322 <legal all> 323 */ 324 325 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_191_160_OFFSET 0x0000000000000018 326 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_191_160_LSB 32 327 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_191_160_MSB 63 328 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_191_160_MASK 0xffffffff00000000 329 330 331 /* Description BA_BITMAP_223_192 332 333 Consumer: TQM/FW 334 Producer: SW/RXPCU 335 336 Field only valid in case of the Remove_acked_cmd_type 337 indicating: 338 remove_Block_Acked_mpdus 339 340 Ba_bitmap_223_192 341 <legal all> 342 */ 343 344 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_223_192_OFFSET 0x0000000000000020 345 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_223_192_LSB 0 346 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_223_192_MSB 31 347 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_223_192_MASK 0x00000000ffffffff 348 349 350 /* Description BA_BITMAP_255_224 351 352 Consumer: TQM/FW 353 Producer: SW/RXPCU 354 355 Field only valid in case of the Remove_acked_cmd_type 356 indicating: 357 remove_Block_Acked_mpdus 358 359 Ba_bitmap_255_224 360 <legal all> 361 */ 362 363 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_255_224_OFFSET 0x0000000000000020 364 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_255_224_LSB 32 365 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_255_224_MSB 63 366 #define TX_FES_STATUS_ACK_OR_BA_BA_BITMAP_255_224_MASK 0xffffffff00000000 367 368 369 370 #endif // TX_FES_STATUS_ACK_OR_BA 371