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