aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2016-03-15 05:04:29 -0400
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2016-03-30 09:21:23 -0400
commit11dee0b4946bc8b0b4adc804f2110361fed81f08 (patch)
tree35602c229a3920c000a8b8603eda97116b195e98
parenta2a57a3548b94222e36a01db893b8f4788501150 (diff)
iwlwifi: make uapsd_disable module param a bitmap
This allows to disable uapsd for BSS only, or P2P client separately. Remove the now unneeded IWL_MVM_P2P_UAPSD_STANDALONE constant. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
-rw-r--r--drivers/net/wireless/intel/iwlwifi/iwl-drv.c10
-rw-r--r--drivers/net/wireless/intel/iwlwifi/iwl-modparams.h10
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/constants.h1
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c3
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/mvm.h3
5 files changed, 18 insertions, 9 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-drv.c b/drivers/net/wireless/intel/iwlwifi/iwl-drv.c
index f899666acb41..2cd9c3139a1c 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-drv.c
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-drv.c
@@ -1561,7 +1561,7 @@ struct iwl_mod_params iwlwifi_mod_params = {
1561 .d0i3_disable = true, 1561 .d0i3_disable = true,
1562 .d0i3_entry_delay = 1000, 1562 .d0i3_entry_delay = 1000,
1563#ifndef CONFIG_IWLWIFI_UAPSD 1563#ifndef CONFIG_IWLWIFI_UAPSD
1564 .uapsd_disable = true, 1564 .uapsd_disable = IWL_DISABLE_UAPSD_BSS | IWL_DISABLE_UAPSD_P2P_CLIENT,
1565#endif /* CONFIG_IWLWIFI_UAPSD */ 1565#endif /* CONFIG_IWLWIFI_UAPSD */
1566 /* the rest are 0 by default */ 1566 /* the rest are 0 by default */
1567}; 1567};
@@ -1681,11 +1681,13 @@ module_param_named(lar_disable, iwlwifi_mod_params.lar_disable,
1681MODULE_PARM_DESC(lar_disable, "disable LAR functionality (default: N)"); 1681MODULE_PARM_DESC(lar_disable, "disable LAR functionality (default: N)");
1682 1682
1683module_param_named(uapsd_disable, iwlwifi_mod_params.uapsd_disable, 1683module_param_named(uapsd_disable, iwlwifi_mod_params.uapsd_disable,
1684 bool, S_IRUGO | S_IWUSR); 1684 uint, S_IRUGO | S_IWUSR);
1685#ifdef CONFIG_IWLWIFI_UAPSD 1685#ifdef CONFIG_IWLWIFI_UAPSD
1686MODULE_PARM_DESC(uapsd_disable, "disable U-APSD functionality (default: N)"); 1686MODULE_PARM_DESC(uapsd_disable,
1687 "disable U-APSD functionality bitmap 1: BSS 2: P2P Client (default: 0)");
1687#else 1688#else
1688MODULE_PARM_DESC(uapsd_disable, "disable U-APSD functionality (default: Y)"); 1689MODULE_PARM_DESC(uapsd_disable,
1690 "disable U-APSD functionality bitmap 1: BSS 2: P2P Client (default: 3)");
1689#endif 1691#endif
1690 1692
1691/* 1693/*
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-modparams.h b/drivers/net/wireless/intel/iwlwifi/iwl-modparams.h
index d1a5dd1602f5..6c5c2f9f73a2 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-modparams.h
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-modparams.h
@@ -92,6 +92,11 @@ enum iwl_amsdu_size {
92 IWL_AMSDU_12K = 2, 92 IWL_AMSDU_12K = 2,
93}; 93};
94 94
95enum iwl_uapsd_disable {
96 IWL_DISABLE_UAPSD_BSS = BIT(0),
97 IWL_DISABLE_UAPSD_P2P_CLIENT = BIT(1),
98};
99
95/** 100/**
96 * struct iwl_mod_params 101 * struct iwl_mod_params
97 * 102 *
@@ -109,7 +114,8 @@ enum iwl_amsdu_size {
109 * @debug_level: levels are IWL_DL_* 114 * @debug_level: levels are IWL_DL_*
110 * @ant_coupling: antenna coupling in dB, default = 0 115 * @ant_coupling: antenna coupling in dB, default = 0
111 * @nvm_file: specifies a external NVM file 116 * @nvm_file: specifies a external NVM file
112 * @uapsd_disable: disable U-APSD, default = 1 117 * @uapsd_disable: disable U-APSD, see %enum iwl_uapsd_disable, default =
118 * IWL_DISABLE_UAPSD_BSS | IWL_DISABLE_UAPSD_P2P_CLIENT
113 * @d0i3_disable: disable d0i3, default = 1, 119 * @d0i3_disable: disable d0i3, default = 1,
114 * @d0i3_entry_delay: time to wait after no refs are taken before 120 * @d0i3_entry_delay: time to wait after no refs are taken before
115 * entering D0i3 (in msecs) 121 * entering D0i3 (in msecs)
@@ -131,7 +137,7 @@ struct iwl_mod_params {
131#endif 137#endif
132 int ant_coupling; 138 int ant_coupling;
133 char *nvm_file; 139 char *nvm_file;
134 bool uapsd_disable; 140 u32 uapsd_disable;
135 bool d0i3_disable; 141 bool d0i3_disable;
136 unsigned int d0i3_entry_delay; 142 unsigned int d0i3_entry_delay;
137 bool lar_disable; 143 bool lar_disable;
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/constants.h b/drivers/net/wireless/intel/iwlwifi/mvm/constants.h
index 4b560e4417ee..b96b1c6a97fa 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/constants.h
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/constants.h
@@ -75,7 +75,6 @@
75#define IWL_MVM_WOWLAN_PS_RX_DATA_TIMEOUT (10 * USEC_PER_MSEC) 75#define IWL_MVM_WOWLAN_PS_RX_DATA_TIMEOUT (10 * USEC_PER_MSEC)
76#define IWL_MVM_SHORT_PS_TX_DATA_TIMEOUT (2 * 1024) /* defined in TU */ 76#define IWL_MVM_SHORT_PS_TX_DATA_TIMEOUT (2 * 1024) /* defined in TU */
77#define IWL_MVM_SHORT_PS_RX_DATA_TIMEOUT (40 * 1024) /* defined in TU */ 77#define IWL_MVM_SHORT_PS_RX_DATA_TIMEOUT (40 * 1024) /* defined in TU */
78#define IWL_MVM_P2P_UAPSD_STANDALONE 0
79#define IWL_MVM_P2P_LOWLATENCY_PS_ENABLE 0 78#define IWL_MVM_P2P_LOWLATENCY_PS_ENABLE 0
80#define IWL_MVM_UAPSD_RX_DATA_TIMEOUT (50 * USEC_PER_MSEC) 79#define IWL_MVM_UAPSD_RX_DATA_TIMEOUT (50 * USEC_PER_MSEC)
81#define IWL_MVM_UAPSD_TX_DATA_TIMEOUT (50 * USEC_PER_MSEC) 80#define IWL_MVM_UAPSD_TX_DATA_TIMEOUT (50 * USEC_PER_MSEC)
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
index cff9c16e4920..1a3481ba1446 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
@@ -2345,7 +2345,8 @@ static void iwl_mvm_check_uapsd(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
2345 return; 2345 return;
2346 } 2346 }
2347 2347
2348 if (iwlwifi_mod_params.uapsd_disable) { 2348 if (!vif->p2p &&
2349 (iwlwifi_mod_params.uapsd_disable & IWL_DISABLE_UAPSD_BSS)) {
2349 vif->driver_flags &= ~IEEE80211_VIF_SUPPORTS_UAPSD; 2350 vif->driver_flags &= ~IEEE80211_VIF_SUPPORTS_UAPSD;
2350 return; 2351 return;
2351 } 2352 }
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
index 2e0a8824aaba..02ef1d91478c 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
@@ -1072,7 +1072,8 @@ bool iwl_mvm_is_p2p_standalone_uapsd_supported(struct iwl_mvm *mvm)
1072{ 1072{
1073 return fw_has_capa(&mvm->fw->ucode_capa, 1073 return fw_has_capa(&mvm->fw->ucode_capa,
1074 IWL_UCODE_TLV_CAPA_P2P_STANDALONE_UAPSD) && 1074 IWL_UCODE_TLV_CAPA_P2P_STANDALONE_UAPSD) &&
1075 IWL_MVM_P2P_UAPSD_STANDALONE; 1075 !(iwlwifi_mod_params.uapsd_disable &
1076 IWL_DISABLE_UAPSD_P2P_CLIENT);
1076} 1077}
1077 1078
1078static inline bool iwl_mvm_has_new_rx_api(struct iwl_mvm *mvm) 1079static inline bool iwl_mvm_has_new_rx_api(struct iwl_mvm *mvm)