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