1bfcc09ddSBjoern A. Zeeb /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2bfcc09ddSBjoern A. Zeeb /*
3fac1f593SBjoern A. Zeeb  * Copyright (C) 2005-2014, 2018-2022 Intel Corporation
4bfcc09ddSBjoern A. Zeeb  */
5bfcc09ddSBjoern A. Zeeb #ifndef __iwl_modparams_h__
6bfcc09ddSBjoern A. Zeeb #define __iwl_modparams_h__
7bfcc09ddSBjoern A. Zeeb 
8bfcc09ddSBjoern A. Zeeb #include <linux/types.h>
9bfcc09ddSBjoern A. Zeeb #include <linux/spinlock.h>
10bfcc09ddSBjoern A. Zeeb #include <linux/gfp.h>
11bfcc09ddSBjoern A. Zeeb #ifdef CONFIG_IWLWIFI_DEBUG
12bfcc09ddSBjoern A. Zeeb #include "iwl-debug.h"
13bfcc09ddSBjoern A. Zeeb #endif
14bfcc09ddSBjoern A. Zeeb 
15bfcc09ddSBjoern A. Zeeb extern struct iwl_mod_params iwlwifi_mod_params;
16bfcc09ddSBjoern A. Zeeb 
17bfcc09ddSBjoern A. Zeeb enum iwl_power_level {
18bfcc09ddSBjoern A. Zeeb 	IWL_POWER_INDEX_1,
19bfcc09ddSBjoern A. Zeeb 	IWL_POWER_INDEX_2,
20bfcc09ddSBjoern A. Zeeb 	IWL_POWER_INDEX_3,
21bfcc09ddSBjoern A. Zeeb 	IWL_POWER_INDEX_4,
22bfcc09ddSBjoern A. Zeeb 	IWL_POWER_INDEX_5,
23bfcc09ddSBjoern A. Zeeb 	IWL_POWER_NUM
24bfcc09ddSBjoern A. Zeeb };
25bfcc09ddSBjoern A. Zeeb 
26bfcc09ddSBjoern A. Zeeb enum iwl_disable_11n {
27bfcc09ddSBjoern A. Zeeb 	IWL_DISABLE_HT_ALL	 = BIT(0),
28bfcc09ddSBjoern A. Zeeb 	IWL_DISABLE_HT_TXAGG	 = BIT(1),
29bfcc09ddSBjoern A. Zeeb 	IWL_DISABLE_HT_RXAGG	 = BIT(2),
30bfcc09ddSBjoern A. Zeeb 	IWL_ENABLE_HT_TXAGG	 = BIT(3),
31bfcc09ddSBjoern A. Zeeb };
32bfcc09ddSBjoern A. Zeeb 
33bfcc09ddSBjoern A. Zeeb enum iwl_amsdu_size {
34bfcc09ddSBjoern A. Zeeb 	IWL_AMSDU_DEF = 0,
35bfcc09ddSBjoern A. Zeeb 	IWL_AMSDU_4K = 1,
36bfcc09ddSBjoern A. Zeeb 	IWL_AMSDU_8K = 2,
37bfcc09ddSBjoern A. Zeeb 	IWL_AMSDU_12K = 3,
38bfcc09ddSBjoern A. Zeeb 	/* Add 2K at the end to avoid breaking current API */
39bfcc09ddSBjoern A. Zeeb 	IWL_AMSDU_2K = 4,
40bfcc09ddSBjoern A. Zeeb };
41bfcc09ddSBjoern A. Zeeb 
42bfcc09ddSBjoern A. Zeeb enum iwl_uapsd_disable {
43bfcc09ddSBjoern A. Zeeb 	IWL_DISABLE_UAPSD_BSS		= BIT(0),
44bfcc09ddSBjoern A. Zeeb 	IWL_DISABLE_UAPSD_P2P_CLIENT	= BIT(1),
45bfcc09ddSBjoern A. Zeeb };
46bfcc09ddSBjoern A. Zeeb 
47bfcc09ddSBjoern A. Zeeb /**
48bfcc09ddSBjoern A. Zeeb  * struct iwl_mod_params
49bfcc09ddSBjoern A. Zeeb  *
50bfcc09ddSBjoern A. Zeeb  * Holds the module parameters
51bfcc09ddSBjoern A. Zeeb  *
52bfcc09ddSBjoern A. Zeeb  * @swcrypto: using hardware encryption, default = 0
53bfcc09ddSBjoern A. Zeeb  * @disable_11n: disable 11n capabilities, default = 0,
54bfcc09ddSBjoern A. Zeeb  *	use IWL_[DIS,EN]ABLE_HT_* constants
55bfcc09ddSBjoern A. Zeeb  * @amsdu_size: See &enum iwl_amsdu_size.
56bfcc09ddSBjoern A. Zeeb  * @fw_restart: restart firmware, default = 1
57bfcc09ddSBjoern A. Zeeb  * @bt_coex_active: enable bt coex, default = true
58bfcc09ddSBjoern A. Zeeb  * @led_mode: system default, default = 0
59bfcc09ddSBjoern A. Zeeb  * @power_save: enable power save, default = false
60bfcc09ddSBjoern A. Zeeb  * @power_level: power level, default = 1
61bfcc09ddSBjoern A. Zeeb  * @debug_level: levels are IWL_DL_*
62bfcc09ddSBjoern A. Zeeb  * @nvm_file: specifies a external NVM file
63bfcc09ddSBjoern A. Zeeb  * @uapsd_disable: disable U-APSD, see &enum iwl_uapsd_disable, default =
64bfcc09ddSBjoern A. Zeeb  *	IWL_DISABLE_UAPSD_BSS | IWL_DISABLE_UAPSD_P2P_CLIENT
65bfcc09ddSBjoern A. Zeeb  * @disable_11ac: disable VHT capabilities, default = false.
66bfcc09ddSBjoern A. Zeeb  * @remove_when_gone: remove an inaccessible device from the PCIe bus.
67bfcc09ddSBjoern A. Zeeb  * @enable_ini: enable new FW debug infratructure (INI TLVs)
689af1bba4SBjoern A. Zeeb  * @disable_11be: disable EHT capabilities, default = false.
69bfcc09ddSBjoern A. Zeeb  */
70bfcc09ddSBjoern A. Zeeb struct iwl_mod_params {
71bfcc09ddSBjoern A. Zeeb 	int swcrypto;
72bfcc09ddSBjoern A. Zeeb 	unsigned int disable_11n;
73bfcc09ddSBjoern A. Zeeb 	int amsdu_size;
74bfcc09ddSBjoern A. Zeeb 	bool fw_restart;
75bfcc09ddSBjoern A. Zeeb 	bool bt_coex_active;
76bfcc09ddSBjoern A. Zeeb 	int led_mode;
77bfcc09ddSBjoern A. Zeeb 	bool power_save;
78bfcc09ddSBjoern A. Zeeb 	int power_level;
79bfcc09ddSBjoern A. Zeeb #ifdef CONFIG_IWLWIFI_DEBUG
80d9836fb4SBjoern A. Zeeb #if defined(__linux__)
81d9836fb4SBjoern A. Zeeb 	u32 debug_level;
82d9836fb4SBjoern A. Zeeb #elif defined(__FreeBSD__)
83bfcc09ddSBjoern A. Zeeb 	enum iwl_dl debug_level;
84bfcc09ddSBjoern A. Zeeb #endif
85d9836fb4SBjoern A. Zeeb #endif
86bfcc09ddSBjoern A. Zeeb 	char *nvm_file;
87bfcc09ddSBjoern A. Zeeb 	u32 uapsd_disable;
88bfcc09ddSBjoern A. Zeeb 	bool disable_11ac;
89bfcc09ddSBjoern A. Zeeb 	/**
90bfcc09ddSBjoern A. Zeeb 	 * @disable_11ax: disable HE capabilities, default = false
91bfcc09ddSBjoern A. Zeeb 	 */
92bfcc09ddSBjoern A. Zeeb 	bool disable_11ax;
93bfcc09ddSBjoern A. Zeeb 	bool remove_when_gone;
94fac1f593SBjoern A. Zeeb 	u32 enable_ini;
95fac1f593SBjoern A. Zeeb 	bool disable_11be;
96bfcc09ddSBjoern A. Zeeb };
97bfcc09ddSBjoern A. Zeeb 
iwl_enable_rx_ampdu(void)98bfcc09ddSBjoern A. Zeeb static inline bool iwl_enable_rx_ampdu(void)
99bfcc09ddSBjoern A. Zeeb {
100bfcc09ddSBjoern A. Zeeb 	if (iwlwifi_mod_params.disable_11n & IWL_DISABLE_HT_RXAGG)
101bfcc09ddSBjoern A. Zeeb 		return false;
102bfcc09ddSBjoern A. Zeeb 	return true;
103bfcc09ddSBjoern A. Zeeb }
104bfcc09ddSBjoern A. Zeeb 
iwl_enable_tx_ampdu(void)105bfcc09ddSBjoern A. Zeeb static inline bool iwl_enable_tx_ampdu(void)
106bfcc09ddSBjoern A. Zeeb {
107bfcc09ddSBjoern A. Zeeb 	if (iwlwifi_mod_params.disable_11n & IWL_DISABLE_HT_TXAGG)
108bfcc09ddSBjoern A. Zeeb 		return false;
109bfcc09ddSBjoern A. Zeeb 	if (iwlwifi_mod_params.disable_11n & IWL_ENABLE_HT_TXAGG)
110bfcc09ddSBjoern A. Zeeb 		return true;
111bfcc09ddSBjoern A. Zeeb 
112bfcc09ddSBjoern A. Zeeb 	/* enabled by default */
113bfcc09ddSBjoern A. Zeeb 	return true;
114bfcc09ddSBjoern A. Zeeb }
115bfcc09ddSBjoern A. Zeeb 
116bfcc09ddSBjoern A. Zeeb #endif /* #__iwl_modparams_h__ */
117