1 /* 2 * Copyright (c) 2016-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], reserved[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 reserved : 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 reserved 216 217 <legal 0> 218 219 peer_meta_data 220 221 Meta data that SW has programmed in the Peer table entry 222 of the transmitting STA. 223 224 <legal all> 225 */ 226 227 228 /* Description RX_MPDU_DESC_INFO_0_MSDU_COUNT 229 230 Consumer: REO/SW/FW 231 232 Producer: RXDMA 233 234 235 236 The number of MSDUs within the MPDU 237 238 <legal all> 239 */ 240 #define RX_MPDU_DESC_INFO_0_MSDU_COUNT_OFFSET 0x00000000 241 #define RX_MPDU_DESC_INFO_0_MSDU_COUNT_LSB 0 242 #define RX_MPDU_DESC_INFO_0_MSDU_COUNT_MASK 0x000000ff 243 244 /* Description RX_MPDU_DESC_INFO_0_MPDU_SEQUENCE_NUMBER 245 246 Consumer: REO/SW/FW 247 248 Producer: RXDMA 249 250 251 252 The field can have two different meanings based on the 253 setting of field 'BAR_frame': 254 255 256 257 'BAR_frame' is NOT set: 258 259 The MPDU sequence number of the received frame. 260 261 262 263 'BAR_frame' is set. 264 265 The MPDU Start sequence number from the BAR frame 266 267 <legal all> 268 */ 269 #define RX_MPDU_DESC_INFO_0_MPDU_SEQUENCE_NUMBER_OFFSET 0x00000000 270 #define RX_MPDU_DESC_INFO_0_MPDU_SEQUENCE_NUMBER_LSB 8 271 #define RX_MPDU_DESC_INFO_0_MPDU_SEQUENCE_NUMBER_MASK 0x000fff00 272 273 /* Description RX_MPDU_DESC_INFO_0_FRAGMENT_FLAG 274 275 Consumer: REO/SW/FW 276 277 Producer: RXDMA 278 279 280 281 When set, this MPDU is a fragment and REO should forward 282 this fragment MPDU to the REO destination ring without any 283 reorder checks, pn checks or bitmap update. This implies 284 that REO is forwarding the pointer to the MSDU link 285 descriptor. The destination ring is coming from a 286 programmable register setting in REO 287 288 289 290 <legal all> 291 */ 292 #define RX_MPDU_DESC_INFO_0_FRAGMENT_FLAG_OFFSET 0x00000000 293 #define RX_MPDU_DESC_INFO_0_FRAGMENT_FLAG_LSB 20 294 #define RX_MPDU_DESC_INFO_0_FRAGMENT_FLAG_MASK 0x00100000 295 296 /* Description RX_MPDU_DESC_INFO_0_MPDU_RETRY_BIT 297 298 Consumer: REO/SW/FW 299 300 Producer: RXDMA 301 302 303 304 The retry bit setting from the MPDU header of the 305 received frame 306 307 <legal all> 308 */ 309 #define RX_MPDU_DESC_INFO_0_MPDU_RETRY_BIT_OFFSET 0x00000000 310 #define RX_MPDU_DESC_INFO_0_MPDU_RETRY_BIT_LSB 21 311 #define RX_MPDU_DESC_INFO_0_MPDU_RETRY_BIT_MASK 0x00200000 312 313 /* Description RX_MPDU_DESC_INFO_0_AMPDU_FLAG 314 315 Consumer: REO/SW/FW 316 317 Producer: RXDMA 318 319 320 321 When set, the MPDU was received as part of an A-MPDU. 322 323 <legal all> 324 */ 325 #define RX_MPDU_DESC_INFO_0_AMPDU_FLAG_OFFSET 0x00000000 326 #define RX_MPDU_DESC_INFO_0_AMPDU_FLAG_LSB 22 327 #define RX_MPDU_DESC_INFO_0_AMPDU_FLAG_MASK 0x00400000 328 329 /* Description RX_MPDU_DESC_INFO_0_BAR_FRAME 330 331 Consumer: REO/SW/FW 332 333 Producer: RXDMA 334 335 336 337 When set, the received frame is a BAR frame. After 338 processing, this frame shall be pushed to SW or deleted. 339 340 <legal all> 341 */ 342 #define RX_MPDU_DESC_INFO_0_BAR_FRAME_OFFSET 0x00000000 343 #define RX_MPDU_DESC_INFO_0_BAR_FRAME_LSB 23 344 #define RX_MPDU_DESC_INFO_0_BAR_FRAME_MASK 0x00800000 345 346 /* Description RX_MPDU_DESC_INFO_0_PN_FIELDS_CONTAIN_VALID_INFO 347 348 Consumer: REO/SW/FW 349 350 Producer: RXDMA 351 352 353 354 Copied here by RXDMA from RX_MPDU_END 355 356 When not set, REO will Not perform a PN sequence number 357 check 358 */ 359 #define RX_MPDU_DESC_INFO_0_PN_FIELDS_CONTAIN_VALID_INFO_OFFSET 0x00000000 360 #define RX_MPDU_DESC_INFO_0_PN_FIELDS_CONTAIN_VALID_INFO_LSB 24 361 #define RX_MPDU_DESC_INFO_0_PN_FIELDS_CONTAIN_VALID_INFO_MASK 0x01000000 362 363 /* Description RX_MPDU_DESC_INFO_0_SA_IS_VALID 364 365 When set, OLE found a valid SA entry for all MSDUs in 366 this MPDU 367 368 <legal all> 369 */ 370 #define RX_MPDU_DESC_INFO_0_SA_IS_VALID_OFFSET 0x00000000 371 #define RX_MPDU_DESC_INFO_0_SA_IS_VALID_LSB 25 372 #define RX_MPDU_DESC_INFO_0_SA_IS_VALID_MASK 0x02000000 373 374 /* Description RX_MPDU_DESC_INFO_0_SA_IDX_TIMEOUT 375 376 When set, at least 1 MSDU within the MPDU has an 377 unsuccessful MAC source address search due to the expiration 378 of the search timer. 379 380 <legal all> 381 */ 382 #define RX_MPDU_DESC_INFO_0_SA_IDX_TIMEOUT_OFFSET 0x00000000 383 #define RX_MPDU_DESC_INFO_0_SA_IDX_TIMEOUT_LSB 26 384 #define RX_MPDU_DESC_INFO_0_SA_IDX_TIMEOUT_MASK 0x04000000 385 386 /* Description RX_MPDU_DESC_INFO_0_DA_IS_VALID 387 388 When set, OLE found a valid DA entry for all MSDUs in 389 this MPDU 390 391 <legal all> 392 */ 393 #define RX_MPDU_DESC_INFO_0_DA_IS_VALID_OFFSET 0x00000000 394 #define RX_MPDU_DESC_INFO_0_DA_IS_VALID_LSB 27 395 #define RX_MPDU_DESC_INFO_0_DA_IS_VALID_MASK 0x08000000 396 397 /* Description RX_MPDU_DESC_INFO_0_DA_IS_MCBC 398 399 Field Only valid if da_is_valid is set 400 401 402 403 When set, at least one of the DA addresses is a 404 Multicast or Broadcast address. 405 406 <legal all> 407 */ 408 #define RX_MPDU_DESC_INFO_0_DA_IS_MCBC_OFFSET 0x00000000 409 #define RX_MPDU_DESC_INFO_0_DA_IS_MCBC_LSB 28 410 #define RX_MPDU_DESC_INFO_0_DA_IS_MCBC_MASK 0x10000000 411 412 /* Description RX_MPDU_DESC_INFO_0_DA_IDX_TIMEOUT 413 414 When set, at least 1 MSDU within the MPDU has an 415 unsuccessful MAC destination address search due to the 416 expiration of the search timer. 417 418 <legal all> 419 */ 420 #define RX_MPDU_DESC_INFO_0_DA_IDX_TIMEOUT_OFFSET 0x00000000 421 #define RX_MPDU_DESC_INFO_0_DA_IDX_TIMEOUT_LSB 29 422 #define RX_MPDU_DESC_INFO_0_DA_IDX_TIMEOUT_MASK 0x20000000 423 424 /* Description RX_MPDU_DESC_INFO_0_RAW_MPDU 425 426 Field only valid when first_msdu_in_mpdu_flag is set. 427 428 429 430 When set, the contents in the MSDU buffer contains a 431 'RAW' MPDU. This 'RAW' MPDU might be spread out over 432 multiple MSDU buffers. 433 434 <legal all> 435 */ 436 #define RX_MPDU_DESC_INFO_0_RAW_MPDU_OFFSET 0x00000000 437 #define RX_MPDU_DESC_INFO_0_RAW_MPDU_LSB 30 438 #define RX_MPDU_DESC_INFO_0_RAW_MPDU_MASK 0x40000000 439 440 /* Description RX_MPDU_DESC_INFO_0_RESERVED 441 442 <legal 0> 443 */ 444 #define RX_MPDU_DESC_INFO_0_RESERVED_OFFSET 0x00000000 445 #define RX_MPDU_DESC_INFO_0_RESERVED_LSB 31 446 #define RX_MPDU_DESC_INFO_0_RESERVED_MASK 0x80000000 447 448 /* Description RX_MPDU_DESC_INFO_1_PEER_META_DATA 449 450 Meta data that SW has programmed in the Peer table entry 451 of the transmitting STA. 452 453 <legal all> 454 */ 455 #define RX_MPDU_DESC_INFO_1_PEER_META_DATA_OFFSET 0x00000004 456 #define RX_MPDU_DESC_INFO_1_PEER_META_DATA_LSB 0 457 #define RX_MPDU_DESC_INFO_1_PEER_META_DATA_MASK 0xffffffff 458 459 460 #endif // _RX_MPDU_DESC_INFO_H_ 461