| .. | .. |
|---|
| 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 | /** |
|---|