.. | .. |
---|
5 | 5 | * |
---|
6 | 6 | * GPL LICENSE SUMMARY |
---|
7 | 7 | * |
---|
8 | | - * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. |
---|
| 8 | + * Copyright(c) 2012 - 2014, 2018 - 2020 Intel Corporation. All rights reserved. |
---|
9 | 9 | * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH |
---|
10 | 10 | * Copyright(c) 2015 - 2017 Intel Deutschland GmbH |
---|
11 | | - * Copyright(c) 2018 Intel Corporation |
---|
12 | 11 | * |
---|
13 | 12 | * This program is free software; you can redistribute it and/or modify |
---|
14 | 13 | * it under the terms of version 2 of the GNU General Public License as |
---|
.. | .. |
---|
28 | 27 | * |
---|
29 | 28 | * BSD LICENSE |
---|
30 | 29 | * |
---|
31 | | - * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. |
---|
| 30 | + * Copyright(c) 2012 - 2014, 2018 - 2020 Intel Corporation. All rights reserved. |
---|
32 | 31 | * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH |
---|
33 | 32 | * Copyright(c) 2015 - 2017 Intel Deutschland GmbH |
---|
34 | | - * Copyright(c) 2018 Intel Corporation |
---|
35 | 33 | * All rights reserved. |
---|
36 | 34 | * |
---|
37 | 35 | * Redistribution and use in source and binary forms, with or without |
---|
.. | .. |
---|
209 | 207 | * @RX_MPDU_RES_STATUS_CSUM_OK: checksum found no errors |
---|
210 | 208 | * @RX_MPDU_RES_STATUS_STA_ID_MSK: station ID mask |
---|
211 | 209 | * @RX_MDPU_RES_STATUS_STA_ID_SHIFT: station ID bit shift |
---|
212 | | - * @RX_MPDU_RES_STATUS_FILTERING_MSK: filter status |
---|
213 | | - * @RX_MPDU_RES_STATUS2_FILTERING_MSK: filter status 2 |
---|
214 | 210 | */ |
---|
215 | 211 | enum iwl_mvm_rx_status { |
---|
216 | 212 | RX_MPDU_RES_STATUS_CRC_OK = BIT(0), |
---|
.. | .. |
---|
238 | 234 | RX_MPDU_RES_STATUS_CSUM_OK = BIT(17), |
---|
239 | 235 | RX_MDPU_RES_STATUS_STA_ID_SHIFT = 24, |
---|
240 | 236 | RX_MPDU_RES_STATUS_STA_ID_MSK = 0x1f << RX_MDPU_RES_STATUS_STA_ID_SHIFT, |
---|
241 | | - RX_MPDU_RES_STATUS_FILTERING_MSK = (0xc00000), |
---|
242 | | - RX_MPDU_RES_STATUS2_FILTERING_MSK = (0xc0000000), |
---|
243 | 237 | }; |
---|
244 | 238 | |
---|
245 | 239 | /* 9000 series API */ |
---|
.. | .. |
---|
263 | 257 | IWL_RX_MPDU_AMSDU_SUBFRAME_IDX_MASK = 0x7f, |
---|
264 | 258 | IWL_RX_MPDU_AMSDU_LAST_SUBFRAME = 0x80, |
---|
265 | 259 | }; |
---|
| 260 | + |
---|
| 261 | +#define RX_MPDU_BAND_POS 6 |
---|
| 262 | +#define RX_MPDU_BAND_MASK 0xC0 |
---|
| 263 | +#define BAND_IN_RX_STATUS(_val) \ |
---|
| 264 | + (((_val) & RX_MPDU_BAND_MASK) >> RX_MPDU_BAND_POS) |
---|
266 | 265 | |
---|
267 | 266 | enum iwl_rx_l3_proto_values { |
---|
268 | 267 | IWL_RX_L3_TYPE_NONE, |
---|
.. | .. |
---|
309 | 308 | IWL_RX_MPDU_STATUS_EXT_IV_MATCH = BIT(13), |
---|
310 | 309 | IWL_RX_MPDU_STATUS_KEY_ID_MATCH = BIT(14), |
---|
311 | 310 | IWL_RX_MPDU_STATUS_ROBUST_MNG_FRAME = BIT(15), |
---|
312 | | -}; |
---|
313 | 311 | |
---|
314 | | -enum iwl_rx_mpdu_hash_filter { |
---|
315 | | - IWL_RX_MPDU_HF_A1_HASH_MASK = 0x3f, |
---|
316 | | - IWL_RX_MPDU_HF_FILTER_STATUS_MASK = 0xc0, |
---|
317 | | -}; |
---|
| 312 | + IWL_RX_MPDU_STATUS_KEY = 0x3f0000, |
---|
| 313 | + IWL_RX_MPDU_STATUS_DUPLICATE = BIT(22), |
---|
318 | 314 | |
---|
319 | | -enum iwl_rx_mpdu_sta_id_flags { |
---|
320 | | - IWL_RX_MPDU_SIF_STA_ID_MASK = 0x1f, |
---|
321 | | - IWL_RX_MPDU_SIF_RRF_ABORT = 0x20, |
---|
322 | | - IWL_RX_MPDU_SIF_FILTER_STATUS_MASK = 0xc0, |
---|
| 315 | + IWL_RX_MPDU_STATUS_STA_ID = 0x1f000000, |
---|
323 | 316 | }; |
---|
324 | 317 | |
---|
325 | 318 | #define IWL_RX_REORDER_DATA_INVALID_BAID 0x7f |
---|
.. | .. |
---|
337 | 330 | IWL_RX_MPDU_PHY_AMPDU = BIT(5), |
---|
338 | 331 | IWL_RX_MPDU_PHY_AMPDU_TOGGLE = BIT(6), |
---|
339 | 332 | IWL_RX_MPDU_PHY_SHORT_PREAMBLE = BIT(7), |
---|
| 333 | + /* short preamble is only for CCK, for non-CCK overridden by this */ |
---|
| 334 | + IWL_RX_MPDU_PHY_NCCK_ADDTL_NTFY = BIT(7), |
---|
340 | 335 | IWL_RX_MPDU_PHY_TSF_OVERLOAD = BIT(8), |
---|
341 | 336 | }; |
---|
342 | 337 | |
---|
.. | .. |
---|
345 | 340 | IWL_RX_MPDU_PHY_PHY_INDEX_MASK = 0xf0, |
---|
346 | 341 | }; |
---|
347 | 342 | |
---|
348 | | -/* |
---|
349 | | - * enum iwl_rx_he_phy - HE PHY data |
---|
350 | | - */ |
---|
351 | | -enum iwl_rx_he_phy { |
---|
352 | | - IWL_RX_HE_PHY_BEAM_CHNG = BIT(0), |
---|
353 | | - IWL_RX_HE_PHY_UPLINK = BIT(1), |
---|
354 | | - IWL_RX_HE_PHY_BSS_COLOR_MASK = 0xfc, |
---|
355 | | - IWL_RX_HE_PHY_SPATIAL_REUSE_MASK = 0xf00, |
---|
356 | | - IWL_RX_HE_PHY_SU_EXT_BW10 = BIT(12), |
---|
357 | | - IWL_RX_HE_PHY_TXOP_DUR_MASK = 0xfe000, |
---|
358 | | - IWL_RX_HE_PHY_LDPC_EXT_SYM = BIT(20), |
---|
359 | | - IWL_RX_HE_PHY_PRE_FEC_PAD_MASK = 0x600000, |
---|
360 | | - IWL_RX_HE_PHY_PE_DISAMBIG = BIT(23), |
---|
361 | | - IWL_RX_HE_PHY_DOPPLER = BIT(24), |
---|
362 | | - /* 6 bits reserved */ |
---|
363 | | - IWL_RX_HE_PHY_DELIM_EOF = BIT(31), |
---|
364 | | - |
---|
365 | | - /* second dword - MU data */ |
---|
366 | | - IWL_RX_HE_PHY_SIGB_COMPRESSION = BIT_ULL(32 + 0), |
---|
367 | | - IWL_RX_HE_PHY_SIBG_SYM_OR_USER_NUM_MASK = 0x1e00000000ULL, |
---|
368 | | - IWL_RX_HE_PHY_HE_LTF_NUM_MASK = 0xe000000000ULL, |
---|
369 | | - IWL_RX_HE_PHY_RU_ALLOC_SEC80 = BIT_ULL(32 + 8), |
---|
370 | | - /* trigger encoded */ |
---|
371 | | - IWL_RX_HE_PHY_RU_ALLOC_MASK = 0xfe0000000000ULL, |
---|
372 | | - IWL_RX_HE_PHY_SIGB_MCS_MASK = 0xf000000000000ULL, |
---|
| 343 | +/* TSF overload low dword */ |
---|
| 344 | +enum iwl_rx_phy_data0 { |
---|
| 345 | + /* info type: HE any */ |
---|
| 346 | + IWL_RX_PHY_DATA0_HE_BEAM_CHNG = 0x00000001, |
---|
| 347 | + IWL_RX_PHY_DATA0_HE_UPLINK = 0x00000002, |
---|
| 348 | + IWL_RX_PHY_DATA0_HE_BSS_COLOR_MASK = 0x000000fc, |
---|
| 349 | + IWL_RX_PHY_DATA0_HE_SPATIAL_REUSE_MASK = 0x00000f00, |
---|
373 | 350 | /* 1 bit reserved */ |
---|
374 | | - IWL_RX_HE_PHY_SIGB_DCM = BIT_ULL(32 + 21), |
---|
375 | | - IWL_RX_HE_PHY_PREAMBLE_PUNC_TYPE_MASK = 0xc0000000000000ULL, |
---|
376 | | - /* 8 bits reserved */ |
---|
| 351 | + IWL_RX_PHY_DATA0_HE_TXOP_DUR_MASK = 0x000fe000, |
---|
| 352 | + IWL_RX_PHY_DATA0_HE_LDPC_EXT_SYM = 0x00100000, |
---|
| 353 | + IWL_RX_PHY_DATA0_HE_PRE_FEC_PAD_MASK = 0x00600000, |
---|
| 354 | + IWL_RX_PHY_DATA0_HE_PE_DISAMBIG = 0x00800000, |
---|
| 355 | + IWL_RX_PHY_DATA0_HE_DOPPLER = 0x01000000, |
---|
| 356 | + /* 6 bits reserved */ |
---|
| 357 | + IWL_RX_PHY_DATA0_HE_DELIM_EOF = 0x80000000, |
---|
| 358 | +}; |
---|
| 359 | + |
---|
| 360 | +enum iwl_rx_phy_info_type { |
---|
| 361 | + IWL_RX_PHY_INFO_TYPE_NONE = 0, |
---|
| 362 | + IWL_RX_PHY_INFO_TYPE_CCK = 1, |
---|
| 363 | + IWL_RX_PHY_INFO_TYPE_OFDM_LGCY = 2, |
---|
| 364 | + IWL_RX_PHY_INFO_TYPE_HT = 3, |
---|
| 365 | + IWL_RX_PHY_INFO_TYPE_VHT_SU = 4, |
---|
| 366 | + IWL_RX_PHY_INFO_TYPE_VHT_MU = 5, |
---|
| 367 | + IWL_RX_PHY_INFO_TYPE_HE_SU = 6, |
---|
| 368 | + IWL_RX_PHY_INFO_TYPE_HE_MU = 7, |
---|
| 369 | + IWL_RX_PHY_INFO_TYPE_HE_TB = 8, |
---|
| 370 | + IWL_RX_PHY_INFO_TYPE_HE_MU_EXT = 9, |
---|
| 371 | + IWL_RX_PHY_INFO_TYPE_HE_TB_EXT = 10, |
---|
| 372 | +}; |
---|
| 373 | + |
---|
| 374 | +/* TSF overload high dword */ |
---|
| 375 | +enum iwl_rx_phy_data1 { |
---|
| 376 | + /* |
---|
| 377 | + * check this first - if TSF overload is set, |
---|
| 378 | + * see &enum iwl_rx_phy_info_type |
---|
| 379 | + */ |
---|
| 380 | + IWL_RX_PHY_DATA1_INFO_TYPE_MASK = 0xf0000000, |
---|
| 381 | + |
---|
| 382 | + /* info type: HT/VHT/HE any */ |
---|
| 383 | + IWL_RX_PHY_DATA1_LSIG_LEN_MASK = 0x0fff0000, |
---|
| 384 | + |
---|
| 385 | + /* info type: HE MU/MU-EXT */ |
---|
| 386 | + IWL_RX_PHY_DATA1_HE_MU_SIGB_COMPRESSION = 0x00000001, |
---|
| 387 | + IWL_RX_PHY_DATA1_HE_MU_SIBG_SYM_OR_USER_NUM_MASK = 0x0000001e, |
---|
| 388 | + |
---|
| 389 | + /* info type: HE any */ |
---|
| 390 | + IWL_RX_PHY_DATA1_HE_LTF_NUM_MASK = 0x000000e0, |
---|
| 391 | + IWL_RX_PHY_DATA1_HE_RU_ALLOC_SEC80 = 0x00000100, |
---|
| 392 | + /* trigger encoded */ |
---|
| 393 | + IWL_RX_PHY_DATA1_HE_RU_ALLOC_MASK = 0x0000fe00, |
---|
| 394 | + |
---|
| 395 | + /* info type: HE TB/TX-EXT */ |
---|
| 396 | + IWL_RX_PHY_DATA1_HE_TB_PILOT_TYPE = 0x00000001, |
---|
| 397 | + IWL_RX_PHY_DATA1_HE_TB_LOW_SS_MASK = 0x0000000e, |
---|
| 398 | +}; |
---|
| 399 | + |
---|
| 400 | +/* goes into Metadata DW 7 */ |
---|
| 401 | +enum iwl_rx_phy_data2 { |
---|
| 402 | + /* info type: HE MU-EXT */ |
---|
| 403 | + /* the a1/a2/... is what the PHY/firmware calls the values */ |
---|
| 404 | + IWL_RX_PHY_DATA2_HE_MU_EXT_CH1_RU0 = 0x000000ff, /* a1 */ |
---|
| 405 | + IWL_RX_PHY_DATA2_HE_MU_EXT_CH1_RU2 = 0x0000ff00, /* a2 */ |
---|
| 406 | + IWL_RX_PHY_DATA2_HE_MU_EXT_CH2_RU0 = 0x00ff0000, /* b1 */ |
---|
| 407 | + IWL_RX_PHY_DATA2_HE_MU_EXT_CH2_RU2 = 0xff000000, /* b2 */ |
---|
| 408 | + |
---|
| 409 | + /* info type: HE TB-EXT */ |
---|
| 410 | + IWL_RX_PHY_DATA2_HE_TB_EXT_SPTL_REUSE1 = 0x0000000f, |
---|
| 411 | + IWL_RX_PHY_DATA2_HE_TB_EXT_SPTL_REUSE2 = 0x000000f0, |
---|
| 412 | + IWL_RX_PHY_DATA2_HE_TB_EXT_SPTL_REUSE3 = 0x00000f00, |
---|
| 413 | + IWL_RX_PHY_DATA2_HE_TB_EXT_SPTL_REUSE4 = 0x0000f000, |
---|
| 414 | +}; |
---|
| 415 | + |
---|
| 416 | +/* goes into Metadata DW 8 */ |
---|
| 417 | +enum iwl_rx_phy_data3 { |
---|
| 418 | + /* info type: HE MU-EXT */ |
---|
| 419 | + IWL_RX_PHY_DATA3_HE_MU_EXT_CH1_RU1 = 0x000000ff, /* c1 */ |
---|
| 420 | + IWL_RX_PHY_DATA3_HE_MU_EXT_CH1_RU3 = 0x0000ff00, /* c2 */ |
---|
| 421 | + IWL_RX_PHY_DATA3_HE_MU_EXT_CH2_RU1 = 0x00ff0000, /* d1 */ |
---|
| 422 | + IWL_RX_PHY_DATA3_HE_MU_EXT_CH2_RU3 = 0xff000000, /* d2 */ |
---|
| 423 | +}; |
---|
| 424 | + |
---|
| 425 | +/* goes into Metadata DW 4 high 16 bits */ |
---|
| 426 | +enum iwl_rx_phy_data4 { |
---|
| 427 | + /* info type: HE MU-EXT */ |
---|
| 428 | + IWL_RX_PHY_DATA4_HE_MU_EXT_CH1_CTR_RU = 0x0001, |
---|
| 429 | + IWL_RX_PHY_DATA4_HE_MU_EXT_CH2_CTR_RU = 0x0002, |
---|
| 430 | + IWL_RX_PHY_DATA4_HE_MU_EXT_CH1_CRC_OK = 0x0004, |
---|
| 431 | + IWL_RX_PHY_DATA4_HE_MU_EXT_CH2_CRC_OK = 0x0008, |
---|
| 432 | + IWL_RX_PHY_DATA4_HE_MU_EXT_SIGB_MCS_MASK = 0x00f0, |
---|
| 433 | + IWL_RX_PHY_DATA4_HE_MU_EXT_SIGB_DCM = 0x0100, |
---|
| 434 | + IWL_RX_PHY_DATA4_HE_MU_EXT_PREAMBLE_PUNC_TYPE_MASK = 0x0600, |
---|
377 | 435 | }; |
---|
378 | 436 | |
---|
379 | 437 | /** |
---|
.. | .. |
---|
381 | 439 | */ |
---|
382 | 440 | struct iwl_rx_mpdu_desc_v1 { |
---|
383 | 441 | /* DW7 - carries rss_hash only when rpa_en == 1 */ |
---|
384 | | - /** |
---|
385 | | - * @rss_hash: RSS hash value |
---|
386 | | - */ |
---|
387 | | - __le32 rss_hash; |
---|
| 442 | + union { |
---|
| 443 | + /** |
---|
| 444 | + * @rss_hash: RSS hash value |
---|
| 445 | + */ |
---|
| 446 | + __le32 rss_hash; |
---|
| 447 | + |
---|
| 448 | + /** |
---|
| 449 | + * @phy_data2: depends on info type (see @phy_data1) |
---|
| 450 | + */ |
---|
| 451 | + __le32 phy_data2; |
---|
| 452 | + }; |
---|
| 453 | + |
---|
388 | 454 | /* DW8 - carries filter_match only when rpa_en == 1 */ |
---|
389 | | - /** |
---|
390 | | - * @filter_match: filter match value |
---|
391 | | - */ |
---|
392 | | - __le32 filter_match; |
---|
| 455 | + union { |
---|
| 456 | + /** |
---|
| 457 | + * @filter_match: filter match value |
---|
| 458 | + */ |
---|
| 459 | + __le32 filter_match; |
---|
| 460 | + |
---|
| 461 | + /** |
---|
| 462 | + * @phy_data3: depends on info type (see @phy_data1) |
---|
| 463 | + */ |
---|
| 464 | + __le32 phy_data3; |
---|
| 465 | + }; |
---|
| 466 | + |
---|
393 | 467 | /* DW9 */ |
---|
394 | 468 | /** |
---|
395 | 469 | * @rate_n_flags: RX rate/flags encoding |
---|
.. | .. |
---|
425 | 499 | * %IWL_RX_MPDU_PHY_TSF_OVERLOAD isn't set |
---|
426 | 500 | */ |
---|
427 | 501 | __le64 tsf_on_air_rise; |
---|
428 | | - /** |
---|
429 | | - * @he_phy_data: |
---|
430 | | - * HE PHY data, see &enum iwl_rx_he_phy, valid |
---|
431 | | - * only if %IWL_RX_MPDU_PHY_TSF_OVERLOAD is set |
---|
432 | | - */ |
---|
433 | | - __le64 he_phy_data; |
---|
| 502 | + |
---|
| 503 | + struct { |
---|
| 504 | + /** |
---|
| 505 | + * @phy_data0: depends on info_type, see @phy_data1 |
---|
| 506 | + */ |
---|
| 507 | + __le32 phy_data0; |
---|
| 508 | + /** |
---|
| 509 | + * @phy_data1: valid only if |
---|
| 510 | + * %IWL_RX_MPDU_PHY_TSF_OVERLOAD is set, |
---|
| 511 | + * see &enum iwl_rx_phy_data1. |
---|
| 512 | + */ |
---|
| 513 | + __le32 phy_data1; |
---|
| 514 | + }; |
---|
434 | 515 | }; |
---|
435 | 516 | } __packed; |
---|
436 | 517 | |
---|
.. | .. |
---|
439 | 520 | */ |
---|
440 | 521 | struct iwl_rx_mpdu_desc_v3 { |
---|
441 | 522 | /* DW7 - carries filter_match only when rpa_en == 1 */ |
---|
442 | | - /** |
---|
443 | | - * @filter_match: filter match value |
---|
444 | | - */ |
---|
445 | | - __le32 filter_match; |
---|
| 523 | + union { |
---|
| 524 | + /** |
---|
| 525 | + * @filter_match: filter match value |
---|
| 526 | + */ |
---|
| 527 | + __le32 filter_match; |
---|
| 528 | + |
---|
| 529 | + /** |
---|
| 530 | + * @phy_data3: depends on info type (see @phy_data1) |
---|
| 531 | + */ |
---|
| 532 | + __le32 phy_data3; |
---|
| 533 | + }; |
---|
| 534 | + |
---|
446 | 535 | /* DW8 - carries rss_hash only when rpa_en == 1 */ |
---|
447 | | - /** |
---|
448 | | - * @rss_hash: RSS hash value |
---|
449 | | - */ |
---|
450 | | - __le32 rss_hash; |
---|
| 536 | + union { |
---|
| 537 | + /** |
---|
| 538 | + * @rss_hash: RSS hash value |
---|
| 539 | + */ |
---|
| 540 | + __le32 rss_hash; |
---|
| 541 | + |
---|
| 542 | + /** |
---|
| 543 | + * @phy_data2: depends on info type (see @phy_data1) |
---|
| 544 | + */ |
---|
| 545 | + __le32 phy_data2; |
---|
| 546 | + }; |
---|
451 | 547 | /* DW9 */ |
---|
452 | 548 | /** |
---|
453 | 549 | * @partial_hash: 31:0 ip/tcp header hash |
---|
.. | .. |
---|
458 | 554 | /** |
---|
459 | 555 | * @raw_xsum: raw xsum value |
---|
460 | 556 | */ |
---|
461 | | - __le32 raw_xsum; |
---|
| 557 | + __be16 raw_xsum; |
---|
| 558 | + /** |
---|
| 559 | + * @reserved_xsum: reserved high bits in the raw checksum |
---|
| 560 | + */ |
---|
| 561 | + __le16 reserved_xsum; |
---|
462 | 562 | /* DW11 */ |
---|
463 | 563 | /** |
---|
464 | 564 | * @rate_n_flags: RX rate/flags encoding |
---|
.. | .. |
---|
494 | 594 | * %IWL_RX_MPDU_PHY_TSF_OVERLOAD isn't set |
---|
495 | 595 | */ |
---|
496 | 596 | __le64 tsf_on_air_rise; |
---|
497 | | - /** |
---|
498 | | - * @he_phy_data: |
---|
499 | | - * HE PHY data, see &enum iwl_rx_he_phy, valid |
---|
500 | | - * only if %IWL_RX_MPDU_PHY_TSF_OVERLOAD is set |
---|
501 | | - */ |
---|
502 | | - __le64 he_phy_data; |
---|
| 597 | + |
---|
| 598 | + struct { |
---|
| 599 | + /** |
---|
| 600 | + * @phy_data0: depends on info_type, see @phy_data1 |
---|
| 601 | + */ |
---|
| 602 | + __le32 phy_data0; |
---|
| 603 | + /** |
---|
| 604 | + * @phy_data1: valid only if |
---|
| 605 | + * %IWL_RX_MPDU_PHY_TSF_OVERLOAD is set, |
---|
| 606 | + * see &enum iwl_rx_phy_data1. |
---|
| 607 | + */ |
---|
| 608 | + __le32 phy_data1; |
---|
| 609 | + }; |
---|
503 | 610 | }; |
---|
504 | 611 | /* DW16 & DW17 */ |
---|
505 | 612 | /** |
---|
.. | .. |
---|
543 | 650 | * @raw_csum: raw checksum (alledgedly unreliable) |
---|
544 | 651 | */ |
---|
545 | 652 | __le16 raw_csum; |
---|
546 | | - /** |
---|
547 | | - * @l3l4_flags: &enum iwl_rx_l3l4_flags |
---|
548 | | - */ |
---|
549 | | - __le16 l3l4_flags; |
---|
| 653 | + |
---|
| 654 | + union { |
---|
| 655 | + /** |
---|
| 656 | + * @l3l4_flags: &enum iwl_rx_l3l4_flags |
---|
| 657 | + */ |
---|
| 658 | + __le16 l3l4_flags; |
---|
| 659 | + |
---|
| 660 | + /** |
---|
| 661 | + * @phy_data4: depends on info type, see phy_data1 |
---|
| 662 | + */ |
---|
| 663 | + __le16 phy_data4; |
---|
| 664 | + }; |
---|
550 | 665 | /* DW5 */ |
---|
551 | 666 | /** |
---|
552 | 667 | * @status: &enum iwl_rx_mpdu_status |
---|
553 | 668 | */ |
---|
554 | | - __le16 status; |
---|
555 | | - /** |
---|
556 | | - * @hash_filter: hash filter value |
---|
557 | | - */ |
---|
558 | | - u8 hash_filter; |
---|
559 | | - /** |
---|
560 | | - * @sta_id_flags: &enum iwl_rx_mpdu_sta_id_flags |
---|
561 | | - */ |
---|
562 | | - u8 sta_id_flags; |
---|
| 669 | + __le32 status; |
---|
| 670 | + |
---|
563 | 671 | /* DW6 */ |
---|
564 | 672 | /** |
---|
565 | 673 | * @reorder_data: &enum iwl_rx_mpdu_reorder_data |
---|
.. | .. |
---|
574 | 682 | |
---|
575 | 683 | #define IWL_RX_DESC_SIZE_V1 offsetofend(struct iwl_rx_mpdu_desc, v1) |
---|
576 | 684 | |
---|
577 | | -#define IWL_CD_STTS_OPTIMIZED_POS 0 |
---|
578 | | -#define IWL_CD_STTS_OPTIMIZED_MSK 0x01 |
---|
579 | | -#define IWL_CD_STTS_TRANSFER_STATUS_POS 1 |
---|
580 | | -#define IWL_CD_STTS_TRANSFER_STATUS_MSK 0x0E |
---|
581 | | -#define IWL_CD_STTS_WIFI_STATUS_POS 4 |
---|
582 | | -#define IWL_CD_STTS_WIFI_STATUS_MSK 0xF0 |
---|
| 685 | +#define RX_NO_DATA_CHAIN_A_POS 0 |
---|
| 686 | +#define RX_NO_DATA_CHAIN_A_MSK (0xff << RX_NO_DATA_CHAIN_A_POS) |
---|
| 687 | +#define RX_NO_DATA_CHAIN_B_POS 8 |
---|
| 688 | +#define RX_NO_DATA_CHAIN_B_MSK (0xff << RX_NO_DATA_CHAIN_B_POS) |
---|
| 689 | +#define RX_NO_DATA_CHANNEL_POS 16 |
---|
| 690 | +#define RX_NO_DATA_CHANNEL_MSK (0xff << RX_NO_DATA_CHANNEL_POS) |
---|
| 691 | + |
---|
| 692 | +#define RX_NO_DATA_INFO_TYPE_POS 0 |
---|
| 693 | +#define RX_NO_DATA_INFO_TYPE_MSK (0xff << RX_NO_DATA_INFO_TYPE_POS) |
---|
| 694 | +#define RX_NO_DATA_INFO_TYPE_NONE 0 |
---|
| 695 | +#define RX_NO_DATA_INFO_TYPE_RX_ERR 1 |
---|
| 696 | +#define RX_NO_DATA_INFO_TYPE_NDP 2 |
---|
| 697 | +#define RX_NO_DATA_INFO_TYPE_MU_UNMATCHED 3 |
---|
| 698 | +#define RX_NO_DATA_INFO_TYPE_HE_TB_UNMATCHED 4 |
---|
| 699 | + |
---|
| 700 | +#define RX_NO_DATA_INFO_ERR_POS 8 |
---|
| 701 | +#define RX_NO_DATA_INFO_ERR_MSK (0xff << RX_NO_DATA_INFO_ERR_POS) |
---|
| 702 | +#define RX_NO_DATA_INFO_ERR_NONE 0 |
---|
| 703 | +#define RX_NO_DATA_INFO_ERR_BAD_PLCP 1 |
---|
| 704 | +#define RX_NO_DATA_INFO_ERR_UNSUPPORTED_RATE 2 |
---|
| 705 | +#define RX_NO_DATA_INFO_ERR_NO_DELIM 3 |
---|
| 706 | +#define RX_NO_DATA_INFO_ERR_BAD_MAC_HDR 4 |
---|
| 707 | + |
---|
| 708 | +#define RX_NO_DATA_FRAME_TIME_POS 0 |
---|
| 709 | +#define RX_NO_DATA_FRAME_TIME_MSK (0xfffff << RX_NO_DATA_FRAME_TIME_POS) |
---|
| 710 | + |
---|
| 711 | +#define RX_NO_DATA_RX_VEC0_HE_NSTS_MSK 0x03800000 |
---|
| 712 | +#define RX_NO_DATA_RX_VEC0_VHT_NSTS_MSK 0x38000000 |
---|
583 | 713 | |
---|
584 | 714 | /** |
---|
585 | | - * enum iwl_completion_desc_transfer_status - transfer status (bits 1-3) |
---|
586 | | - * @IWL_CD_STTS_UNUSED: unused |
---|
587 | | - * @IWL_CD_STTS_UNUSED_2: unused |
---|
588 | | - * @IWL_CD_STTS_END_TRANSFER: successful transfer complete. |
---|
589 | | - * In sniffer mode, when split is used, set in last CD completion. (RX) |
---|
590 | | - * @IWL_CD_STTS_OVERFLOW: In sniffer mode, when using split - used for |
---|
591 | | - * all CD completion. (RX) |
---|
592 | | - * @IWL_CD_STTS_ABORTED: CR abort / close flow. (RX) |
---|
593 | | - * @IWL_CD_STTS_ERROR: general error (RX) |
---|
| 715 | + * struct iwl_rx_no_data - RX no data descriptor |
---|
| 716 | + * @info: 7:0 frame type, 15:8 RX error type |
---|
| 717 | + * @rssi: 7:0 energy chain-A, |
---|
| 718 | + * 15:8 chain-B, measured at FINA time (FINA_ENERGY), 16:23 channel |
---|
| 719 | + * @on_air_rise_time: GP2 during on air rise |
---|
| 720 | + * @fr_time: frame time |
---|
| 721 | + * @rate: rate/mcs of frame |
---|
| 722 | + * @phy_info: &enum iwl_rx_phy_data0 and &enum iwl_rx_phy_info_type |
---|
| 723 | + * @rx_vec: DW-12:9 raw RX vectors from DSP according to modulation type. |
---|
| 724 | + * for VHT: OFDM_RX_VECTOR_SIGA1_OUT, OFDM_RX_VECTOR_SIGA2_OUT |
---|
| 725 | + * for HE: OFDM_RX_VECTOR_HE_SIGA1_OUT, OFDM_RX_VECTOR_HE_SIGA2_OUT |
---|
594 | 726 | */ |
---|
595 | | -enum iwl_completion_desc_transfer_status { |
---|
596 | | - IWL_CD_STTS_UNUSED, |
---|
597 | | - IWL_CD_STTS_UNUSED_2, |
---|
598 | | - IWL_CD_STTS_END_TRANSFER, |
---|
599 | | - IWL_CD_STTS_OVERFLOW, |
---|
600 | | - IWL_CD_STTS_ABORTED, |
---|
601 | | - IWL_CD_STTS_ERROR, |
---|
602 | | -}; |
---|
603 | | - |
---|
604 | | -/** |
---|
605 | | - * enum iwl_completion_desc_wifi_status - wifi status (bits 4-7) |
---|
606 | | - * @IWL_CD_STTS_VALID: the packet is valid (RX) |
---|
607 | | - * @IWL_CD_STTS_FCS_ERR: frame check sequence error (RX) |
---|
608 | | - * @IWL_CD_STTS_SEC_KEY_ERR: error handling the security key of rx (RX) |
---|
609 | | - * @IWL_CD_STTS_DECRYPTION_ERR: error decrypting the frame (RX) |
---|
610 | | - * @IWL_CD_STTS_DUP: duplicate packet (RX) |
---|
611 | | - * @IWL_CD_STTS_ICV_MIC_ERR: MIC error (RX) |
---|
612 | | - * @IWL_CD_STTS_INTERNAL_SNAP_ERR: problems removing the snap (RX) |
---|
613 | | - * @IWL_CD_STTS_SEC_PORT_FAIL: security port fail (RX) |
---|
614 | | - * @IWL_CD_STTS_BA_OLD_SN: block ack received old SN (RX) |
---|
615 | | - * @IWL_CD_STTS_QOS_NULL: QoS null packet (RX) |
---|
616 | | - * @IWL_CD_STTS_MAC_HDR_ERR: MAC header conversion error (RX) |
---|
617 | | - * @IWL_CD_STTS_MAX_RETRANS: reached max number of retransmissions (TX) |
---|
618 | | - * @IWL_CD_STTS_EX_LIFETIME: exceeded lifetime (TX) |
---|
619 | | - * @IWL_CD_STTS_NOT_USED: completed but not used (RX) |
---|
620 | | - * @IWL_CD_STTS_REPLAY_ERR: pn check failed, replay error (RX) |
---|
621 | | - */ |
---|
622 | | -enum iwl_completion_desc_wifi_status { |
---|
623 | | - IWL_CD_STTS_VALID, |
---|
624 | | - IWL_CD_STTS_FCS_ERR, |
---|
625 | | - IWL_CD_STTS_SEC_KEY_ERR, |
---|
626 | | - IWL_CD_STTS_DECRYPTION_ERR, |
---|
627 | | - IWL_CD_STTS_DUP, |
---|
628 | | - IWL_CD_STTS_ICV_MIC_ERR, |
---|
629 | | - IWL_CD_STTS_INTERNAL_SNAP_ERR, |
---|
630 | | - IWL_CD_STTS_SEC_PORT_FAIL, |
---|
631 | | - IWL_CD_STTS_BA_OLD_SN, |
---|
632 | | - IWL_CD_STTS_QOS_NULL, |
---|
633 | | - IWL_CD_STTS_MAC_HDR_ERR, |
---|
634 | | - IWL_CD_STTS_MAX_RETRANS, |
---|
635 | | - IWL_CD_STTS_EX_LIFETIME, |
---|
636 | | - IWL_CD_STTS_NOT_USED, |
---|
637 | | - IWL_CD_STTS_REPLAY_ERR, |
---|
638 | | -}; |
---|
| 727 | +struct iwl_rx_no_data { |
---|
| 728 | + __le32 info; |
---|
| 729 | + __le32 rssi; |
---|
| 730 | + __le32 on_air_rise_time; |
---|
| 731 | + __le32 fr_time; |
---|
| 732 | + __le32 rate; |
---|
| 733 | + __le32 phy_info[2]; |
---|
| 734 | + __le32 rx_vec[2]; |
---|
| 735 | +} __packed; /* RX_NO_DATA_NTFY_API_S_VER_1 */ |
---|
639 | 736 | |
---|
640 | 737 | struct iwl_frame_release { |
---|
641 | 738 | u8 baid; |
---|
642 | 739 | u8 reserved; |
---|
643 | 740 | __le16 nssn; |
---|
644 | 741 | }; |
---|
| 742 | + |
---|
| 743 | +/** |
---|
| 744 | + * enum iwl_bar_frame_release_sta_tid - STA/TID information for BAR release |
---|
| 745 | + * @IWL_BAR_FRAME_RELEASE_TID_MASK: TID mask |
---|
| 746 | + * @IWL_BAR_FRAME_RELEASE_STA_MASK: STA mask |
---|
| 747 | + */ |
---|
| 748 | +enum iwl_bar_frame_release_sta_tid { |
---|
| 749 | + IWL_BAR_FRAME_RELEASE_TID_MASK = 0x0000000f, |
---|
| 750 | + IWL_BAR_FRAME_RELEASE_STA_MASK = 0x000001f0, |
---|
| 751 | +}; |
---|
| 752 | + |
---|
| 753 | +/** |
---|
| 754 | + * enum iwl_bar_frame_release_ba_info - BA information for BAR release |
---|
| 755 | + * @IWL_BAR_FRAME_RELEASE_NSSN_MASK: NSSN mask |
---|
| 756 | + * @IWL_BAR_FRAME_RELEASE_SN_MASK: SN mask (ignored by driver) |
---|
| 757 | + * @IWL_BAR_FRAME_RELEASE_BAID_MASK: BAID mask |
---|
| 758 | + */ |
---|
| 759 | +enum iwl_bar_frame_release_ba_info { |
---|
| 760 | + IWL_BAR_FRAME_RELEASE_NSSN_MASK = 0x00000fff, |
---|
| 761 | + IWL_BAR_FRAME_RELEASE_SN_MASK = 0x00fff000, |
---|
| 762 | + IWL_BAR_FRAME_RELEASE_BAID_MASK = 0x3f000000, |
---|
| 763 | +}; |
---|
| 764 | + |
---|
| 765 | +/** |
---|
| 766 | + * struct iwl_bar_frame_release - frame release from BAR info |
---|
| 767 | + * @sta_tid: STA & TID information, see &enum iwl_bar_frame_release_sta_tid. |
---|
| 768 | + * @ba_info: BA information, see &enum iwl_bar_frame_release_ba_info. |
---|
| 769 | + */ |
---|
| 770 | +struct iwl_bar_frame_release { |
---|
| 771 | + __le32 sta_tid; |
---|
| 772 | + __le32 ba_info; |
---|
| 773 | +} __packed; /* RX_BAR_TO_FRAME_RELEASE_API_S_VER_1 */ |
---|
645 | 774 | |
---|
646 | 775 | enum iwl_rss_hash_func_en { |
---|
647 | 776 | IWL_RSS_HASH_TYPE_IPV4_TCP, |
---|
.. | .. |
---|
673 | 802 | u8 indirection_table[IWL_RSS_INDIRECTION_TABLE_SIZE]; |
---|
674 | 803 | } __packed; /* RSS_CONFIG_CMD_API_S_VER_1 */ |
---|
675 | 804 | |
---|
676 | | -#define IWL_MULTI_QUEUE_SYNC_MSG_MAX_SIZE 128 |
---|
677 | 805 | #define IWL_MULTI_QUEUE_SYNC_SENDER_POS 0 |
---|
678 | 806 | #define IWL_MULTI_QUEUE_SYNC_SENDER_MSK 0xf |
---|
679 | 807 | |
---|
.. | .. |
---|
709 | 837 | * |
---|
710 | 838 | * @IWL_MVM_RXQ_EMPTY: empty sync notification |
---|
711 | 839 | * @IWL_MVM_RXQ_NOTIF_DEL_BA: notify RSS queues of delBA |
---|
| 840 | + * @IWL_MVM_RXQ_NSSN_SYNC: notify all the RSS queues with the new NSSN |
---|
712 | 841 | */ |
---|
713 | 842 | enum iwl_mvm_rxq_notif_type { |
---|
714 | 843 | IWL_MVM_RXQ_EMPTY, |
---|
715 | 844 | IWL_MVM_RXQ_NOTIF_DEL_BA, |
---|
| 845 | + IWL_MVM_RXQ_NSSN_SYNC, |
---|
716 | 846 | }; |
---|
717 | 847 | |
---|
718 | 848 | /** |
---|