.. | .. |
---|
8 | 8 | * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. |
---|
9 | 9 | * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH |
---|
10 | 10 | * Copyright(c) 2015 - 2016 Intel Deutschland GmbH |
---|
11 | | - * Copyright(c) 2018 Intel Corporation |
---|
| 11 | + * Copyright(c) 2018 - 2020 Intel Corporation |
---|
12 | 12 | * |
---|
13 | 13 | * This program is free software; you can redistribute it and/or modify |
---|
14 | 14 | * it under the terms of version 2 of the GNU General Public License as |
---|
.. | .. |
---|
31 | 31 | * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. |
---|
32 | 32 | * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH |
---|
33 | 33 | * Copyright(c) 2015 - 2016 Intel Deutschland GmbH |
---|
34 | | - * Copyright(c) 2018 Intel Corporation |
---|
| 34 | + * Copyright(c) 2018 - 2020 Intel Corporation |
---|
35 | 35 | * All rights reserved. |
---|
36 | 36 | * |
---|
37 | 37 | * Redistribution and use in source and binary forms, with or without |
---|
.. | .. |
---|
70 | 70 | #include <linux/wait.h> |
---|
71 | 71 | |
---|
72 | 72 | #include "iwl-trans.h" /* for IWL_MAX_TID_COUNT */ |
---|
73 | | -#include "fw-api.h" /* IWL_MVM_STATION_COUNT */ |
---|
| 73 | +#include "fw-api.h" /* IWL_MVM_STATION_COUNT_MAX */ |
---|
74 | 74 | #include "rs.h" |
---|
75 | 75 | |
---|
76 | 76 | struct iwl_mvm; |
---|
.. | .. |
---|
297 | 297 | |
---|
298 | 298 | /** |
---|
299 | 299 | * struct iwl_mvm_tid_data - holds the states for each RA / TID |
---|
300 | | - * @deferred_tx_frames: deferred TX frames for this RA/TID |
---|
301 | 300 | * @seq_number: the next WiFi sequence number to use |
---|
302 | 301 | * @next_reclaimed: the WiFi sequence number of the next packet to be acked. |
---|
303 | 302 | * This is basically (last acked packet++). |
---|
.. | .. |
---|
312 | 311 | * Basically when next_reclaimed reaches ssn, we can tell mac80211 that |
---|
313 | 312 | * we are ready to finish the Tx AGG stop / start flow. |
---|
314 | 313 | * @tx_time: medium time consumed by this A-MPDU |
---|
315 | | - * @is_tid_active: has this TID sent traffic in the last |
---|
316 | | - * %IWL_MVM_DQA_QUEUE_TIMEOUT time period. If %txq_id is invalid, this |
---|
317 | | - * field should be ignored. |
---|
318 | 314 | * @tpt_meas_start: time of the throughput measurements start, is reset every HZ |
---|
319 | 315 | * @tx_count_last: number of frames transmitted during the last second |
---|
320 | 316 | * @tx_count: counts the number of frames transmitted since the last reset of |
---|
321 | 317 | * tpt_meas_start |
---|
322 | 318 | */ |
---|
323 | 319 | struct iwl_mvm_tid_data { |
---|
324 | | - struct sk_buff_head deferred_tx_frames; |
---|
325 | 320 | u16 seq_number; |
---|
326 | 321 | u16 next_reclaimed; |
---|
327 | 322 | /* The rest is Tx AGG related */ |
---|
.. | .. |
---|
332 | 327 | u16 txq_id; |
---|
333 | 328 | u16 ssn; |
---|
334 | 329 | u16 tx_time; |
---|
335 | | - bool is_tid_active; |
---|
336 | 330 | unsigned long tpt_meas_start; |
---|
337 | 331 | u32 tx_count_last; |
---|
338 | 332 | u32 tx_count; |
---|
.. | .. |
---|
349 | 343 | u32 baid; |
---|
350 | 344 | } __packed; |
---|
351 | 345 | |
---|
352 | | -struct iwl_mvm_delba_notif { |
---|
| 346 | +struct iwl_mvm_nssn_sync_data { |
---|
| 347 | + u32 baid; |
---|
| 348 | + u32 nssn; |
---|
| 349 | +} __packed; |
---|
| 350 | + |
---|
| 351 | +struct iwl_mvm_rss_sync_notif { |
---|
353 | 352 | struct iwl_mvm_internal_rxq_notif metadata; |
---|
354 | | - struct iwl_mvm_delba_data delba; |
---|
| 353 | + union { |
---|
| 354 | + struct iwl_mvm_delba_data delba; |
---|
| 355 | + struct iwl_mvm_nssn_sync_data nssn_sync; |
---|
| 356 | + }; |
---|
355 | 357 | } __packed; |
---|
356 | 358 | |
---|
357 | 359 | /** |
---|
.. | .. |
---|
392 | 394 | * @amsdu_enabled: bitmap of TX AMSDU allowed TIDs. |
---|
393 | 395 | * In case TLC offload is not active it is either 0xFFFF or 0. |
---|
394 | 396 | * @max_amsdu_len: max AMSDU length |
---|
| 397 | + * @orig_amsdu_len: used to save the original amsdu_len when it is changed via |
---|
| 398 | + * debugfs. If it's set to 0, it means that it is it's not set via |
---|
| 399 | + * debugfs. |
---|
395 | 400 | * @agg_tids: bitmap of tids whose status is operational aggregated (IWL_AGG_ON) |
---|
396 | 401 | * @sleep_tx_count: the number of frames that we told the firmware to let out |
---|
397 | 402 | * even when that station is asleep. This is useful in case the queue |
---|
.. | .. |
---|
401 | 406 | * @ptk_pn: per-queue PTK PN data structures |
---|
402 | 407 | * @dup_data: per queue duplicate packet detection data |
---|
403 | 408 | * @deferred_traffic_tid_map: indication bitmap of deferred traffic per-TID |
---|
| 409 | + * @tx_ant: the index of the antenna to use for data tx to this station. Only |
---|
| 410 | + * used during connection establishment (e.g. for the 4 way handshake |
---|
| 411 | + * exchange). |
---|
404 | 412 | * |
---|
405 | 413 | * When mac80211 creates a station it reserves some space (hw->sta_data_size) |
---|
406 | 414 | * in the structure for use by driver. This structure is placed in that |
---|
.. | .. |
---|
428 | 436 | struct iwl_mvm_key_pn __rcu *ptk_pn[4]; |
---|
429 | 437 | struct iwl_mvm_rxq_dup_data *dup_data; |
---|
430 | 438 | |
---|
431 | | - u16 deferred_traffic_tid_map; |
---|
432 | | - |
---|
433 | 439 | u8 reserved_queue; |
---|
434 | 440 | |
---|
435 | 441 | /* Temporary, until the new TLC will control the Tx protection */ |
---|
.. | .. |
---|
439 | 445 | bool disable_tx; |
---|
440 | 446 | u16 amsdu_enabled; |
---|
441 | 447 | u16 max_amsdu_len; |
---|
| 448 | + u16 orig_amsdu_len; |
---|
442 | 449 | bool sleeping; |
---|
443 | 450 | u8 agg_tids; |
---|
444 | 451 | u8 sleep_tx_count; |
---|
445 | 452 | u8 avg_energy; |
---|
| 453 | + u8 tx_ant; |
---|
446 | 454 | }; |
---|
447 | 455 | |
---|
448 | 456 | u16 iwl_mvm_tid_queued(struct iwl_mvm *mvm, struct iwl_mvm_tid_data *tid_data); |
---|
.. | .. |
---|
532 | 540 | int iwl_mvm_sta_tx_agg(struct iwl_mvm *mvm, struct ieee80211_sta *sta, |
---|
533 | 541 | int tid, u8 queue, bool start); |
---|
534 | 542 | |
---|
535 | | -int iwl_mvm_add_aux_sta(struct iwl_mvm *mvm); |
---|
536 | | -void iwl_mvm_del_aux_sta(struct iwl_mvm *mvm); |
---|
| 543 | +int iwl_mvm_add_aux_sta(struct iwl_mvm *mvm, u32 lmac_id); |
---|
| 544 | +int iwl_mvm_rm_aux_sta(struct iwl_mvm *mvm); |
---|
537 | 545 | |
---|
538 | 546 | int iwl_mvm_alloc_bcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif); |
---|
539 | 547 | int iwl_mvm_send_add_bcast_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif); |
---|
.. | .. |
---|
571 | 579 | bool disable); |
---|
572 | 580 | void iwl_mvm_csa_client_absent(struct iwl_mvm *mvm, struct ieee80211_vif *vif); |
---|
573 | 581 | void iwl_mvm_add_new_dqa_stream_wk(struct work_struct *wk); |
---|
574 | | - |
---|
575 | | -int iwl_mvm_scd_queue_redirect(struct iwl_mvm *mvm, int queue, int tid, |
---|
576 | | - int ac, int ssn, unsigned int wdg_timeout, |
---|
577 | | - bool force); |
---|
578 | | - |
---|
| 582 | +int iwl_mvm_add_pasn_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif, |
---|
| 583 | + struct iwl_mvm_int_sta *sta, u8 *addr, u32 cipher, |
---|
| 584 | + u8 *key, u32 key_len); |
---|
579 | 585 | #endif /* __sta_h__ */ |
---|