18e99ea8dSJohannes Berg /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
28e99ea8dSJohannes Berg /*
3b49c2b25SAyala Barazani * Copyright (C) 2005-2014, 2018-2022 Intel Corporation
48e99ea8dSJohannes Berg */
5e705c121SKalle Valo #ifndef __iwl_modparams_h__
6e705c121SKalle Valo #define __iwl_modparams_h__
7e705c121SKalle Valo
8e705c121SKalle Valo #include <linux/types.h>
9e705c121SKalle Valo #include <linux/spinlock.h>
10e705c121SKalle Valo #include <linux/gfp.h>
11e705c121SKalle Valo
12e705c121SKalle Valo extern struct iwl_mod_params iwlwifi_mod_params;
13e705c121SKalle Valo
14e705c121SKalle Valo enum iwl_power_level {
15e705c121SKalle Valo IWL_POWER_INDEX_1,
16e705c121SKalle Valo IWL_POWER_INDEX_2,
17e705c121SKalle Valo IWL_POWER_INDEX_3,
18e705c121SKalle Valo IWL_POWER_INDEX_4,
19e705c121SKalle Valo IWL_POWER_INDEX_5,
20e705c121SKalle Valo IWL_POWER_NUM
21e705c121SKalle Valo };
22e705c121SKalle Valo
23e705c121SKalle Valo enum iwl_disable_11n {
24e705c121SKalle Valo IWL_DISABLE_HT_ALL = BIT(0),
25e705c121SKalle Valo IWL_DISABLE_HT_TXAGG = BIT(1),
26e705c121SKalle Valo IWL_DISABLE_HT_RXAGG = BIT(2),
27e705c121SKalle Valo IWL_ENABLE_HT_TXAGG = BIT(3),
28e705c121SKalle Valo };
29e705c121SKalle Valo
306c4fbcbcSEmmanuel Grumbach enum iwl_amsdu_size {
314bdd4dfeSEmmanuel Grumbach IWL_AMSDU_DEF = 0,
324bdd4dfeSEmmanuel Grumbach IWL_AMSDU_4K = 1,
334bdd4dfeSEmmanuel Grumbach IWL_AMSDU_8K = 2,
344bdd4dfeSEmmanuel Grumbach IWL_AMSDU_12K = 3,
351a4968d1SGolan Ben Ami /* Add 2K at the end to avoid breaking current API */
361a4968d1SGolan Ben Ami IWL_AMSDU_2K = 4,
376c4fbcbcSEmmanuel Grumbach };
386c4fbcbcSEmmanuel Grumbach
3911dee0b4SEmmanuel Grumbach enum iwl_uapsd_disable {
4011dee0b4SEmmanuel Grumbach IWL_DISABLE_UAPSD_BSS = BIT(0),
4111dee0b4SEmmanuel Grumbach IWL_DISABLE_UAPSD_P2P_CLIENT = BIT(1),
4211dee0b4SEmmanuel Grumbach };
4311dee0b4SEmmanuel Grumbach
44e705c121SKalle Valo /**
45e705c121SKalle Valo * struct iwl_mod_params
46e705c121SKalle Valo *
47e705c121SKalle Valo * Holds the module parameters
48e705c121SKalle Valo *
493b37f4c9SJohannes Berg * @swcrypto: using hardware encryption, default = 0
50e705c121SKalle Valo * @disable_11n: disable 11n capabilities, default = 0,
51e705c121SKalle Valo * use IWL_[DIS,EN]ABLE_HT_* constants
524bdd4dfeSEmmanuel Grumbach * @amsdu_size: See &enum iwl_amsdu_size.
533b37f4c9SJohannes Berg * @fw_restart: restart firmware, default = 1
54e705c121SKalle Valo * @bt_coex_active: enable bt coex, default = true
55e705c121SKalle Valo * @led_mode: system default, default = 0
56e705c121SKalle Valo * @power_save: enable power save, default = false
57e705c121SKalle Valo * @power_level: power level, default = 1
58e705c121SKalle Valo * @debug_level: levels are IWL_DL_*
59d1cae0fdSRodrigo Freire * @nvm_file: specifies a external NVM file
6069d22e73SJohannes Berg * @uapsd_disable: disable U-APSD, see &enum iwl_uapsd_disable, default =
6111dee0b4SEmmanuel Grumbach * IWL_DISABLE_UAPSD_BSS | IWL_DISABLE_UAPSD_P2P_CLIENT
620d0985adSAndrei Otcheretianski * @disable_11ac: disable VHT capabilities, default = false.
6349564a80SLuca Coelho * @remove_when_gone: remove an inaccessible device from the PCIe bus.
64f14cda6fSSara Sharon * @enable_ini: enable new FW debug infratructure (INI TLVs)
65*26d7cc0aSIlan Peer * @disable_11be: disable EHT capabilities, default = false.
66e705c121SKalle Valo */
67e705c121SKalle Valo struct iwl_mod_params {
683b37f4c9SJohannes Berg int swcrypto;
69e705c121SKalle Valo unsigned int disable_11n;
706c4fbcbcSEmmanuel Grumbach int amsdu_size;
713b37f4c9SJohannes Berg bool fw_restart;
72e705c121SKalle Valo bool bt_coex_active;
73e705c121SKalle Valo int led_mode;
74e705c121SKalle Valo bool power_save;
75e705c121SKalle Valo int power_level;
76e705c121SKalle Valo #ifdef CONFIG_IWLWIFI_DEBUG
77e705c121SKalle Valo u32 debug_level;
78e705c121SKalle Valo #endif
79e705c121SKalle Valo char *nvm_file;
8011dee0b4SEmmanuel Grumbach u32 uapsd_disable;
810d0985adSAndrei Otcheretianski bool disable_11ac;
82230ba6c5SLuca Coelho /**
83230ba6c5SLuca Coelho * @disable_11ax: disable HE capabilities, default = false
84230ba6c5SLuca Coelho */
85230ba6c5SLuca Coelho bool disable_11ax;
8649564a80SLuca Coelho bool remove_when_gone;
87b49c2b25SAyala Barazani u32 enable_ini;
88b49c2b25SAyala Barazani bool disable_11be;
89e705c121SKalle Valo };
90e705c121SKalle Valo
iwl_enable_rx_ampdu(void)91e78da25eSJohannes Berg static inline bool iwl_enable_rx_ampdu(void)
92e78da25eSJohannes Berg {
93e78da25eSJohannes Berg if (iwlwifi_mod_params.disable_11n & IWL_DISABLE_HT_RXAGG)
94e78da25eSJohannes Berg return false;
95e78da25eSJohannes Berg return true;
96e78da25eSJohannes Berg }
97e78da25eSJohannes Berg
iwl_enable_tx_ampdu(void)98e78da25eSJohannes Berg static inline bool iwl_enable_tx_ampdu(void)
99e78da25eSJohannes Berg {
100e78da25eSJohannes Berg if (iwlwifi_mod_params.disable_11n & IWL_DISABLE_HT_TXAGG)
101e78da25eSJohannes Berg return false;
102e78da25eSJohannes Berg if (iwlwifi_mod_params.disable_11n & IWL_ENABLE_HT_TXAGG)
103e78da25eSJohannes Berg return true;
104e78da25eSJohannes Berg
105e78da25eSJohannes Berg /* enabled by default */
106e78da25eSJohannes Berg return true;
107e78da25eSJohannes Berg }
108e78da25eSJohannes Berg
109e705c121SKalle Valo #endif /* #__iwl_modparams_h__ */
110