xref: /openbmc/linux/drivers/net/wireless/intel/iwlwifi/iwl-modparams.h (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
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