aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorWey-Yi Guy <wey-yi.w.guy@intel.com>2010-11-23 13:58:54 -0500
committerJohn W. Linville <linville@tuxdriver.com>2010-11-24 16:19:37 -0500
commite366176e5c7f37d2d4cd0708e63b939e3fa3b5c6 (patch)
treeaa4863dc9e96d6590710d03d4a09c6c11d421af2 /drivers/net
parent97badb0eefc9b6f23f864c5348b695be35f05882 (diff)
iwlwifi: consider BT for power management
Check the BT PSPoll flag when fill PM command to uCode Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-6000.c1
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-lib.c4
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-core.h2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-power.c17
4 files changed, 24 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c
index 0cc66fdc7a0d..f650282a3ad3 100644
--- a/drivers/net/wireless/iwlwifi/iwl-6000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-6000.c
@@ -549,6 +549,7 @@ static struct iwl_bt_params iwl6000_bt_params = {
549 .agg_time_limit = BT_AGG_THRESHOLD_DEF, 549 .agg_time_limit = BT_AGG_THRESHOLD_DEF,
550 .bt_init_traffic_load = IWL_BT_COEX_TRAFFIC_LOAD_NONE, 550 .bt_init_traffic_load = IWL_BT_COEX_TRAFFIC_LOAD_NONE,
551 .bt_prio_boost = IWLAGN_BT_PRIO_BOOST_DEFAULT, 551 .bt_prio_boost = IWLAGN_BT_PRIO_BOOST_DEFAULT,
552 .bt_sco_disable = true,
552}; 553};
553 554
554struct iwl_cfg iwl6000g2a_2agn_cfg = { 555struct iwl_cfg iwl6000g2a_2agn_cfg = {
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
index c4491f7641fe..f8fe5f44e19f 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
@@ -1829,6 +1829,10 @@ void iwlagn_send_advance_bt_config(struct iwl_priv *priv)
1829 } else { 1829 } else {
1830 bt_cmd.flags = IWLAGN_BT_FLAG_COEX_MODE_3W << 1830 bt_cmd.flags = IWLAGN_BT_FLAG_COEX_MODE_3W <<
1831 IWLAGN_BT_FLAG_COEX_MODE_SHIFT; 1831 IWLAGN_BT_FLAG_COEX_MODE_SHIFT;
1832 if (priv->cfg->bt_params &&
1833 priv->cfg->bt_params->bt_sco_disable)
1834 bt_cmd.flags |= IWLAGN_BT_FLAG_SYNC_2_BT_DISABLE;
1835
1832 if (priv->bt_ch_announce) 1836 if (priv->bt_ch_announce)
1833 bt_cmd.flags |= IWLAGN_BT_FLAG_CHANNEL_INHIBITION; 1837 bt_cmd.flags |= IWLAGN_BT_FLAG_CHANNEL_INHIBITION;
1834 IWL_DEBUG_INFO(priv, "BT coex flag: 0X%x\n", bt_cmd.flags); 1838 IWL_DEBUG_INFO(priv, "BT coex flag: 0X%x\n", bt_cmd.flags);
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h
index 9035cd82d85b..3f7bd4012c29 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.h
+++ b/drivers/net/wireless/iwlwifi/iwl-core.h
@@ -334,6 +334,7 @@ struct iwl_base_params {
334 * @agg_time_limit: maximum number of uSec in aggregation 334 * @agg_time_limit: maximum number of uSec in aggregation
335 * @ampdu_factor: Maximum A-MPDU length factor 335 * @ampdu_factor: Maximum A-MPDU length factor
336 * @ampdu_density: Minimum A-MPDU spacing 336 * @ampdu_density: Minimum A-MPDU spacing
337 * @bt_sco_disable: uCode should not response to BT in SCO/ESCO mode
337*/ 338*/
338struct iwl_bt_params { 339struct iwl_bt_params {
339 bool advanced_bt_coexist; 340 bool advanced_bt_coexist;
@@ -343,6 +344,7 @@ struct iwl_bt_params {
343 u16 agg_time_limit; 344 u16 agg_time_limit;
344 u8 ampdu_factor; 345 u8 ampdu_factor;
345 u8 ampdu_density; 346 u8 ampdu_density;
347 bool bt_sco_disable;
346}; 348};
347/* 349/*
348 * @use_rts_for_aggregation: use rts/cts protection for HT traffic 350 * @use_rts_for_aggregation: use rts/cts protection for HT traffic
diff --git a/drivers/net/wireless/iwlwifi/iwl-power.c b/drivers/net/wireless/iwlwifi/iwl-power.c
index b7abd86676fd..306c852b1578 100644
--- a/drivers/net/wireless/iwlwifi/iwl-power.c
+++ b/drivers/net/wireless/iwlwifi/iwl-power.c
@@ -163,6 +163,15 @@ static void iwl_static_sleep_cmd(struct iwl_priv *priv,
163 else 163 else
164 cmd->flags &= ~IWL_POWER_SLEEP_OVER_DTIM_MSK; 164 cmd->flags &= ~IWL_POWER_SLEEP_OVER_DTIM_MSK;
165 165
166 if (priv->cfg->bt_params &&
167 priv->cfg->bt_params->advanced_bt_coexist) {
168 if (!priv->cfg->bt_params->bt_sco_disable)
169 cmd->flags |= IWL_POWER_BT_SCO_ENA;
170 else
171 cmd->flags &= ~IWL_POWER_BT_SCO_ENA;
172 }
173
174
166 slp_itrvl = le32_to_cpu(cmd->sleep_interval[IWL_POWER_VEC_SIZE - 1]); 175 slp_itrvl = le32_to_cpu(cmd->sleep_interval[IWL_POWER_VEC_SIZE - 1]);
167 if (slp_itrvl > IWL_CONN_MAX_LISTEN_INTERVAL) 176 if (slp_itrvl > IWL_CONN_MAX_LISTEN_INTERVAL)
168 cmd->sleep_interval[IWL_POWER_VEC_SIZE - 1] = 177 cmd->sleep_interval[IWL_POWER_VEC_SIZE - 1] =
@@ -236,6 +245,14 @@ static void iwl_power_fill_sleep_cmd(struct iwl_priv *priv,
236 if (priv->power_data.pci_pm) 245 if (priv->power_data.pci_pm)
237 cmd->flags |= IWL_POWER_PCI_PM_MSK; 246 cmd->flags |= IWL_POWER_PCI_PM_MSK;
238 247
248 if (priv->cfg->bt_params &&
249 priv->cfg->bt_params->advanced_bt_coexist) {
250 if (!priv->cfg->bt_params->bt_sco_disable)
251 cmd->flags |= IWL_POWER_BT_SCO_ENA;
252 else
253 cmd->flags &= ~IWL_POWER_BT_SCO_ENA;
254 }
255
239 cmd->rx_data_timeout = cpu_to_le32(1000 * dynps_ms); 256 cmd->rx_data_timeout = cpu_to_le32(1000 * dynps_ms);
240 cmd->tx_data_timeout = cpu_to_le32(1000 * dynps_ms); 257 cmd->tx_data_timeout = cpu_to_le32(1000 * dynps_ms);
241 258