1 /* 2 * Copyright (c) 2018 The Linux Foundation. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for 5 * any purpose with or without fee is hereby granted, provided that the 6 * above copyright notice and this permission notice appear in all 7 * copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16 * PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 #ifndef _RX_MPDU_DESC_INFO_H_ 20 #define _RX_MPDU_DESC_INFO_H_ 21 #if !defined(__ASSEMBLER__) 22 #endif 23 24 25 // ################ START SUMMARY ################# 26 // 27 // Dword Fields 28 // 0 msdu_count[7:0], mpdu_sequence_number[19:8], fragment_flag[20], mpdu_retry_bit[21], ampdu_flag[22], bar_frame[23], pn_fields_contain_valid_info[24], sa_is_valid[25], sa_idx_timeout[26], da_is_valid[27], da_is_mcbc[28], da_idx_timeout[29], raw_mpdu[30], more_fragment_flag[31] 29 // 1 peer_meta_data[31:0] 30 // 31 // ################ END SUMMARY ################# 32 33 #define NUM_OF_DWORDS_RX_MPDU_DESC_INFO 2 34 35 struct rx_mpdu_desc_info { 36 uint32_t msdu_count : 8, //[7:0] 37 mpdu_sequence_number : 12, //[19:8] 38 fragment_flag : 1, //[20] 39 mpdu_retry_bit : 1, //[21] 40 ampdu_flag : 1, //[22] 41 bar_frame : 1, //[23] 42 pn_fields_contain_valid_info : 1, //[24] 43 sa_is_valid : 1, //[25] 44 sa_idx_timeout : 1, //[26] 45 da_is_valid : 1, //[27] 46 da_is_mcbc : 1, //[28] 47 da_idx_timeout : 1, //[29] 48 raw_mpdu : 1, //[30] 49 more_fragment_flag : 1; //[31] 50 uint32_t peer_meta_data : 32; //[31:0] 51 }; 52 53 /* 54 55 msdu_count 56 57 Consumer: REO/SW/FW 58 59 Producer: RXDMA 60 61 62 63 The number of MSDUs within the MPDU 64 65 <legal all> 66 67 mpdu_sequence_number 68 69 Consumer: REO/SW/FW 70 71 Producer: RXDMA 72 73 74 75 The field can have two different meanings based on the 76 setting of field 'BAR_frame': 77 78 79 80 'BAR_frame' is NOT set: 81 82 The MPDU sequence number of the received frame. 83 84 85 86 'BAR_frame' is set. 87 88 The MPDU Start sequence number from the BAR frame 89 90 <legal all> 91 92 fragment_flag 93 94 Consumer: REO/SW/FW 95 96 Producer: RXDMA 97 98 99 100 When set, this MPDU is a fragment and REO should forward 101 this fragment MPDU to the REO destination ring without any 102 reorder checks, pn checks or bitmap update. This implies 103 that REO is forwarding the pointer to the MSDU link 104 descriptor. The destination ring is coming from a 105 programmable register setting in REO 106 107 108 109 <legal all> 110 111 mpdu_retry_bit 112 113 Consumer: REO/SW/FW 114 115 Producer: RXDMA 116 117 118 119 The retry bit setting from the MPDU header of the 120 received frame 121 122 <legal all> 123 124 ampdu_flag 125 126 Consumer: REO/SW/FW 127 128 Producer: RXDMA 129 130 131 132 When set, the MPDU was received as part of an A-MPDU. 133 134 <legal all> 135 136 bar_frame 137 138 Consumer: REO/SW/FW 139 140 Producer: RXDMA 141 142 143 144 When set, the received frame is a BAR frame. After 145 processing, this frame shall be pushed to SW or deleted. 146 147 <legal all> 148 149 pn_fields_contain_valid_info 150 151 Consumer: REO/SW/FW 152 153 Producer: RXDMA 154 155 156 157 Copied here by RXDMA from RX_MPDU_END 158 159 When not set, REO will Not perform a PN sequence number 160 check 161 162 sa_is_valid 163 164 When set, OLE found a valid SA entry for all MSDUs in 165 this MPDU 166 167 <legal all> 168 169 sa_idx_timeout 170 171 When set, at least 1 MSDU within the MPDU has an 172 unsuccessful MAC source address search due to the expiration 173 of the search timer. 174 175 <legal all> 176 177 da_is_valid 178 179 When set, OLE found a valid DA entry for all MSDUs in 180 this MPDU 181 182 <legal all> 183 184 da_is_mcbc 185 186 Field Only valid if da_is_valid is set 187 188 189 190 When set, at least one of the DA addresses is a 191 Multicast or Broadcast address. 192 193 <legal all> 194 195 da_idx_timeout 196 197 When set, at least 1 MSDU within the MPDU has an 198 unsuccessful MAC destination address search due to the 199 expiration of the search timer. 200 201 <legal all> 202 203 raw_mpdu 204 205 Field only valid when first_msdu_in_mpdu_flag is set. 206 207 208 209 When set, the contents in the MSDU buffer contains a 210 'RAW' MPDU. This 'RAW' MPDU might be spread out over 211 multiple MSDU buffers. 212 213 <legal all> 214 215 more_fragment_flag 216 217 The More Fragment bit setting from the MPDU header of 218 the received frame 219 220 221 222 <legal all> 223 224 peer_meta_data 225 226 Meta data that SW has programmed in the Peer table entry 227 of the transmitting STA. 228 229 <legal all> 230 */ 231 232 233 /* Description RX_MPDU_DESC_INFO_0_MSDU_COUNT 234 235 Consumer: REO/SW/FW 236 237 Producer: RXDMA 238 239 240 241 The number of MSDUs within the MPDU 242 243 <legal all> 244 */ 245 #define RX_MPDU_DESC_INFO_0_MSDU_COUNT_OFFSET 0x00000000 246 #define RX_MPDU_DESC_INFO_0_MSDU_COUNT_LSB 0 247 #define RX_MPDU_DESC_INFO_0_MSDU_COUNT_MASK 0x000000ff 248 249 /* Description RX_MPDU_DESC_INFO_0_MPDU_SEQUENCE_NUMBER 250 251 Consumer: REO/SW/FW 252 253 Producer: RXDMA 254 255 256 257 The field can have two different meanings based on the 258 setting of field 'BAR_frame': 259 260 261 262 'BAR_frame' is NOT set: 263 264 The MPDU sequence number of the received frame. 265 266 267 268 'BAR_frame' is set. 269 270 The MPDU Start sequence number from the BAR frame 271 272 <legal all> 273 */ 274 #define RX_MPDU_DESC_INFO_0_MPDU_SEQUENCE_NUMBER_OFFSET 0x00000000 275 #define RX_MPDU_DESC_INFO_0_MPDU_SEQUENCE_NUMBER_LSB 8 276 #define RX_MPDU_DESC_INFO_0_MPDU_SEQUENCE_NUMBER_MASK 0x000fff00 277 278 /* Description RX_MPDU_DESC_INFO_0_FRAGMENT_FLAG 279 280 Consumer: REO/SW/FW 281 282 Producer: RXDMA 283 284 285 286 When set, this MPDU is a fragment and REO should forward 287 this fragment MPDU to the REO destination ring without any 288 reorder checks, pn checks or bitmap update. This implies 289 that REO is forwarding the pointer to the MSDU link 290 descriptor. The destination ring is coming from a 291 programmable register setting in REO 292 293 294 295 <legal all> 296 */ 297 #define RX_MPDU_DESC_INFO_0_FRAGMENT_FLAG_OFFSET 0x00000000 298 #define RX_MPDU_DESC_INFO_0_FRAGMENT_FLAG_LSB 20 299 #define RX_MPDU_DESC_INFO_0_FRAGMENT_FLAG_MASK 0x00100000 300 301 /* Description RX_MPDU_DESC_INFO_0_MPDU_RETRY_BIT 302 303 Consumer: REO/SW/FW 304 305 Producer: RXDMA 306 307 308 309 The retry bit setting from the MPDU header of the 310 received frame 311 312 <legal all> 313 */ 314 #define RX_MPDU_DESC_INFO_0_MPDU_RETRY_BIT_OFFSET 0x00000000 315 #define RX_MPDU_DESC_INFO_0_MPDU_RETRY_BIT_LSB 21 316 #define RX_MPDU_DESC_INFO_0_MPDU_RETRY_BIT_MASK 0x00200000 317 318 /* Description RX_MPDU_DESC_INFO_0_AMPDU_FLAG 319 320 Consumer: REO/SW/FW 321 322 Producer: RXDMA 323 324 325 326 When set, the MPDU was received as part of an A-MPDU. 327 328 <legal all> 329 */ 330 #define RX_MPDU_DESC_INFO_0_AMPDU_FLAG_OFFSET 0x00000000 331 #define RX_MPDU_DESC_INFO_0_AMPDU_FLAG_LSB 22 332 #define RX_MPDU_DESC_INFO_0_AMPDU_FLAG_MASK 0x00400000 333 334 /* Description RX_MPDU_DESC_INFO_0_BAR_FRAME 335 336 Consumer: REO/SW/FW 337 338 Producer: RXDMA 339 340 341 342 When set, the received frame is a BAR frame. After 343 processing, this frame shall be pushed to SW or deleted. 344 345 <legal all> 346 */ 347 #define RX_MPDU_DESC_INFO_0_BAR_FRAME_OFFSET 0x00000000 348 #define RX_MPDU_DESC_INFO_0_BAR_FRAME_LSB 23 349 #define RX_MPDU_DESC_INFO_0_BAR_FRAME_MASK 0x00800000 350 351 /* Description RX_MPDU_DESC_INFO_0_PN_FIELDS_CONTAIN_VALID_INFO 352 353 Consumer: REO/SW/FW 354 355 Producer: RXDMA 356 357 358 359 Copied here by RXDMA from RX_MPDU_END 360 361 When not set, REO will Not perform a PN sequence number 362 check 363 */ 364 #define RX_MPDU_DESC_INFO_0_PN_FIELDS_CONTAIN_VALID_INFO_OFFSET 0x00000000 365 #define RX_MPDU_DESC_INFO_0_PN_FIELDS_CONTAIN_VALID_INFO_LSB 24 366 #define RX_MPDU_DESC_INFO_0_PN_FIELDS_CONTAIN_VALID_INFO_MASK 0x01000000 367 368 /* Description RX_MPDU_DESC_INFO_0_SA_IS_VALID 369 370 When set, OLE found a valid SA entry for all MSDUs in 371 this MPDU 372 373 <legal all> 374 */ 375 #define RX_MPDU_DESC_INFO_0_SA_IS_VALID_OFFSET 0x00000000 376 #define RX_MPDU_DESC_INFO_0_SA_IS_VALID_LSB 25 377 #define RX_MPDU_DESC_INFO_0_SA_IS_VALID_MASK 0x02000000 378 379 /* Description RX_MPDU_DESC_INFO_0_SA_IDX_TIMEOUT 380 381 When set, at least 1 MSDU within the MPDU has an 382 unsuccessful MAC source address search due to the expiration 383 of the search timer. 384 385 <legal all> 386 */ 387 #define RX_MPDU_DESC_INFO_0_SA_IDX_TIMEOUT_OFFSET 0x00000000 388 #define RX_MPDU_DESC_INFO_0_SA_IDX_TIMEOUT_LSB 26 389 #define RX_MPDU_DESC_INFO_0_SA_IDX_TIMEOUT_MASK 0x04000000 390 391 /* Description RX_MPDU_DESC_INFO_0_DA_IS_VALID 392 393 When set, OLE found a valid DA entry for all MSDUs in 394 this MPDU 395 396 <legal all> 397 */ 398 #define RX_MPDU_DESC_INFO_0_DA_IS_VALID_OFFSET 0x00000000 399 #define RX_MPDU_DESC_INFO_0_DA_IS_VALID_LSB 27 400 #define RX_MPDU_DESC_INFO_0_DA_IS_VALID_MASK 0x08000000 401 402 /* Description RX_MPDU_DESC_INFO_0_DA_IS_MCBC 403 404 Field Only valid if da_is_valid is set 405 406 407 408 When set, at least one of the DA addresses is a 409 Multicast or Broadcast address. 410 411 <legal all> 412 */ 413 #define RX_MPDU_DESC_INFO_0_DA_IS_MCBC_OFFSET 0x00000000 414 #define RX_MPDU_DESC_INFO_0_DA_IS_MCBC_LSB 28 415 #define RX_MPDU_DESC_INFO_0_DA_IS_MCBC_MASK 0x10000000 416 417 /* Description RX_MPDU_DESC_INFO_0_DA_IDX_TIMEOUT 418 419 When set, at least 1 MSDU within the MPDU has an 420 unsuccessful MAC destination address search due to the 421 expiration of the search timer. 422 423 <legal all> 424 */ 425 #define RX_MPDU_DESC_INFO_0_DA_IDX_TIMEOUT_OFFSET 0x00000000 426 #define RX_MPDU_DESC_INFO_0_DA_IDX_TIMEOUT_LSB 29 427 #define RX_MPDU_DESC_INFO_0_DA_IDX_TIMEOUT_MASK 0x20000000 428 429 /* Description RX_MPDU_DESC_INFO_0_RAW_MPDU 430 431 Field only valid when first_msdu_in_mpdu_flag is set. 432 433 434 435 When set, the contents in the MSDU buffer contains a 436 'RAW' MPDU. This 'RAW' MPDU might be spread out over 437 multiple MSDU buffers. 438 439 <legal all> 440 */ 441 #define RX_MPDU_DESC_INFO_0_RAW_MPDU_OFFSET 0x00000000 442 #define RX_MPDU_DESC_INFO_0_RAW_MPDU_LSB 30 443 #define RX_MPDU_DESC_INFO_0_RAW_MPDU_MASK 0x40000000 444 445 /* Description RX_MPDU_DESC_INFO_0_MORE_FRAGMENT_FLAG 446 447 The More Fragment bit setting from the MPDU header of 448 the received frame 449 450 451 452 <legal all> 453 */ 454 #define RX_MPDU_DESC_INFO_0_MORE_FRAGMENT_FLAG_OFFSET 0x00000000 455 #define RX_MPDU_DESC_INFO_0_MORE_FRAGMENT_FLAG_LSB 31 456 #define RX_MPDU_DESC_INFO_0_MORE_FRAGMENT_FLAG_MASK 0x80000000 457 458 /* Description RX_MPDU_DESC_INFO_1_PEER_META_DATA 459 460 Meta data that SW has programmed in the Peer table entry 461 of the transmitting STA. 462 463 <legal all> 464 */ 465 #define RX_MPDU_DESC_INFO_1_PEER_META_DATA_OFFSET 0x00000004 466 #define RX_MPDU_DESC_INFO_1_PEER_META_DATA_LSB 0 467 #define RX_MPDU_DESC_INFO_1_PEER_META_DATA_MASK 0xffffffff 468 469 470 #endif // _RX_MPDU_DESC_INFO_H_ 471