diff options
author | Wey-Yi Guy <wey-yi.w.guy@intel.com> | 2010-11-23 13:58:54 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-11-24 16:19:37 -0500 |
commit | e366176e5c7f37d2d4cd0708e63b939e3fa3b5c6 (patch) | |
tree | aa4863dc9e96d6590710d03d4a09c6c11d421af2 /drivers/net | |
parent | 97badb0eefc9b6f23f864c5348b695be35f05882 (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.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-core.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-power.c | 17 |
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 | ||
554 | struct iwl_cfg iwl6000g2a_2agn_cfg = { | 555 | struct 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 | */ |
338 | struct iwl_bt_params { | 339 | struct 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 | ||