* [PATCH 0/6] update for 3.5: iwlwifi 2012-05-03
@ 2012-05-03 21:22 Wey-Yi Guy
2012-05-03 21:22 ` [PATCH 1/6] iwlwifi: include rssi as part of decision making for reduce txpower Wey-Yi Guy
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Wey-Yi Guy @ 2012-05-03 21:22 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Wey-Yi Guy
We fix a index mistake in the power module parameter. We also fix an
aggregation bug reported by Daniel Chyan from community. And we add
documentation to explain the bluetooth reduce tx power feature
Amit Beka (1):
iwlwifi: fix power index handling
Emmanuel Grumbach (2):
iwlwifi: don't flood logs when HT debug flag is set
iwlwifi: don't disable AGG queues that are not enabled
Wey-Yi Guy (3):
iwlwifi: include rssi as part of decision making for reduce txpower
iwlwifi: add documentation for bt reduced tx power
iwlwifi: make sure reduced tx power bit is valid
these patches are also available from wireless-next branch on
git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi.git
drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 37 ++++++++++++++++++++++++--
drivers/net/wireless/iwlwifi/iwl-agn-tx.c | 19 ++++++++-----
drivers/net/wireless/iwlwifi/iwl-commands.h | 6 ++++
drivers/net/wireless/iwlwifi/iwl-power.c | 8 ++++-
4 files changed, 58 insertions(+), 12 deletions(-)
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/6] iwlwifi: include rssi as part of decision making for reduce txpower
2012-05-03 21:22 [PATCH 0/6] update for 3.5: iwlwifi 2012-05-03 Wey-Yi Guy
@ 2012-05-03 21:22 ` Wey-Yi Guy
2012-05-03 21:22 ` [PATCH 2/6] iwlwifi: add documentation for bt reduced tx power Wey-Yi Guy
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Wey-Yi Guy @ 2012-05-03 21:22 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Wey-Yi Guy
In bt coex, consider the average rssi as part of decision making process
Change-Id: I8d11d7f177a6875e2a9d08f7539d42253226fd7a
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Reviewed-on: http://git-mwg.jer.intel.com/gerrit/1945
Tested-by: Jenkins
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 13 ++++++++++++-
1 files changed, 12 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
index 01dc442..9d88565 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
@@ -31,6 +31,7 @@
#include <linux/module.h>
#include <linux/init.h>
#include <linux/sched.h>
+#include <net/mac80211.h>
#include "iwl-dev.h"
#include "iwl-io.h"
@@ -593,9 +594,18 @@ static bool iwlagn_fill_txpower_mode(struct iwl_priv *priv,
struct iwl_bt_uart_msg *uart_msg)
{
bool need_update = false;
+ struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS];
+ int ave_rssi;
+ ave_rssi = ieee80211_ave_rssi(ctx->vif);
+ if (!ave_rssi) {
+ /* no rssi data, no changes to reduce tx power */
+ IWL_DEBUG_COEX(priv, "no rssi data available\n");
+ return need_update;
+ }
if (!priv->reduced_txpower &&
!iwl_is_associated(priv, IWL_RXON_CTX_PAN) &&
+ (ave_rssi > BT_ENABLE_REDUCED_TXPOWER_THRESHOLD) &&
(uart_msg->frame3 & (BT_UART_MSG_FRAME3ACL_MSK |
BT_UART_MSG_FRAME3OBEX_MSK)) &&
!(uart_msg->frame3 & (BT_UART_MSG_FRAME3SCOESCO_MSK |
@@ -606,6 +616,7 @@ static bool iwlagn_fill_txpower_mode(struct iwl_priv *priv,
need_update = true;
} else if (priv->reduced_txpower &&
(iwl_is_associated(priv, IWL_RXON_CTX_PAN) ||
+ (ave_rssi < BT_DISABLE_REDUCED_TXPOWER_THRESHOLD) ||
(uart_msg->frame3 & (BT_UART_MSG_FRAME3SCOESCO_MSK |
BT_UART_MSG_FRAME3SNIFF_MSK | BT_UART_MSG_FRAME3A2DP_MSK)) ||
!(uart_msg->frame3 & (BT_UART_MSG_FRAME3ACL_MSK |
--
1.7.0.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/6] iwlwifi: add documentation for bt reduced tx power
2012-05-03 21:22 [PATCH 0/6] update for 3.5: iwlwifi 2012-05-03 Wey-Yi Guy
2012-05-03 21:22 ` [PATCH 1/6] iwlwifi: include rssi as part of decision making for reduce txpower Wey-Yi Guy
@ 2012-05-03 21:22 ` Wey-Yi Guy
2012-05-03 21:22 ` [PATCH 3/6] iwlwifi: make sure reduced tx power bit is valid Wey-Yi Guy
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Wey-Yi Guy @ 2012-05-03 21:22 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Wey-Yi Guy
Change-Id: Ia6294d651dcffdcaf8b62e67bcef52bd8c158dea
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Reviewed-on: http://git-mwg.jer.intel.com/gerrit/1947
Tested-by: Jenkins
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 22 +++++++++++++++++++++-
drivers/net/wireless/iwlwifi/iwl-commands.h | 6 ++++++
2 files changed, 27 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
index 9d88565..cb4b31f 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
@@ -274,9 +274,20 @@ void iwlagn_send_advance_bt_config(struct iwl_priv *priv)
return;
}
+ /*
+ * Possible situations when BT needs to take over for receive,
+ * at the same time where STA needs to response to AP's frame(s),
+ * reduce the tx power of the required response frames, by that,
+ * allow the concurrent BT receive & WiFi transmit
+ * (BT - ANT A, WiFi -ANT B), without interference to one another
+ *
+ * Reduced tx power apply to control frames only (ACK/Back/CTS)
+ * when indicated by the BT config command
+ */
basic.kill_ack_mask = priv->kill_ack_mask;
basic.kill_cts_mask = priv->kill_cts_mask;
- basic.reduce_txpower = priv->reduced_txpower;
+ if (priv->reduced_txpower)
+ basic.reduce_txpower = IWLAGN_BT_REDUCED_TX_PWR;
basic.valid = priv->bt_valid;
/*
@@ -590,6 +601,15 @@ static bool iwlagn_set_kill_msk(struct iwl_priv *priv,
return need_update;
}
+/*
+ * Upon RSSI changes, sends a bt config command with following changes
+ * 1. enable/disable "reduced control frames tx power
+ * 2. update the "kill)ack_mask" and "kill_cts_mask"
+ *
+ * If "reduced tx power" is enabled, uCode shall
+ * 1. ACK/Back/CTS rate shall reduced to 6Mbps
+ * 2. not use duplciate 20/40MHz mode
+ */
static bool iwlagn_fill_txpower_mode(struct iwl_priv *priv,
struct iwl_bt_uart_msg *uart_msg)
{
diff --git a/drivers/net/wireless/iwlwifi/iwl-commands.h b/drivers/net/wireless/iwlwifi/iwl-commands.h
index 83a6930..2813a0a 100644
--- a/drivers/net/wireless/iwlwifi/iwl-commands.h
+++ b/drivers/net/wireless/iwlwifi/iwl-commands.h
@@ -1910,6 +1910,8 @@ enum iwl_bt_kill_idx {
IWLAGN_BT_VALID_REDUCED_TX_PWR | \
IWLAGN_BT_VALID_3W_LUT)
+#define IWLAGN_BT_REDUCED_TX_PWR BIT(0)
+
#define IWLAGN_BT_DECISION_LUT_SIZE 12
struct iwl_basic_bt_cmd {
@@ -1923,6 +1925,10 @@ struct iwl_basic_bt_cmd {
u8 bt3_timer_t2_value;
__le16 bt4_reaction_time; /* unused */
__le32 bt3_lookup_table[IWLAGN_BT_DECISION_LUT_SIZE];
+ /*
+ * bit 0: use reduced tx power for control frame
+ * bit 1 - 7: reserved
+ */
u8 reduce_txpower;
u8 reserved;
__le16 valid;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/6] iwlwifi: make sure reduced tx power bit is valid
2012-05-03 21:22 [PATCH 0/6] update for 3.5: iwlwifi 2012-05-03 Wey-Yi Guy
2012-05-03 21:22 ` [PATCH 1/6] iwlwifi: include rssi as part of decision making for reduce txpower Wey-Yi Guy
2012-05-03 21:22 ` [PATCH 2/6] iwlwifi: add documentation for bt reduced tx power Wey-Yi Guy
@ 2012-05-03 21:22 ` Wey-Yi Guy
2012-05-03 21:22 ` [PATCH 4/6] iwlwifi: fix power index handling Wey-Yi Guy
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Wey-Yi Guy @ 2012-05-03 21:22 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Wey-Yi Guy
Once driver decide to change reduced tx power behavior,
make sure the reduce tx power valid bit is set
Change-Id: I3afae96319292d8cb347a812a948085c5db7ad91
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Reviewed-on: http://git-mwg.jer.intel.com/gerrit/1948
Tested-by: Jenkins
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
index cb4b31f..e55ec6c 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
@@ -643,7 +643,7 @@ static bool iwlagn_fill_txpower_mode(struct iwl_priv *priv,
BT_UART_MSG_FRAME3OBEX_MSK)))) {
/* disable reduced tx power */
priv->reduced_txpower = false;
- priv->bt_valid &= ~IWLAGN_BT_VALID_REDUCED_TX_PWR;
+ priv->bt_valid |= IWLAGN_BT_VALID_REDUCED_TX_PWR;
need_update = true;
}
--
1.7.0.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 4/6] iwlwifi: fix power index handling
2012-05-03 21:22 [PATCH 0/6] update for 3.5: iwlwifi 2012-05-03 Wey-Yi Guy
` (2 preceding siblings ...)
2012-05-03 21:22 ` [PATCH 3/6] iwlwifi: make sure reduced tx power bit is valid Wey-Yi Guy
@ 2012-05-03 21:22 ` Wey-Yi Guy
2012-05-03 21:22 ` [PATCH 5/6] iwlwifi: don't flood logs when HT debug flag is set Wey-Yi Guy
2012-05-03 21:22 ` [PATCH 6/6] iwlwifi: don't disable AGG queues that are not enabled Wey-Yi Guy
5 siblings, 0 replies; 7+ messages in thread
From: Wey-Yi Guy @ 2012-05-03 21:22 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Amit Beka, Wey-Yi Guy
From: Amit Beka <amit.beka@intel.com>
The power index that the user gives as module parameter
in in range 1-5, but we need to decrease it in order
to create an array index out of it (0-4) for the power
table command.
Signed-off-by: Amit Beka <amit.beka@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
---
drivers/net/wireless/iwlwifi/iwl-power.c | 8 ++++++--
1 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/iwlwifi/iwl-power.c b/drivers/net/wireless/iwlwifi/iwl-power.c
index 8352265..544ddf1 100644
--- a/drivers/net/wireless/iwlwifi/iwl-power.c
+++ b/drivers/net/wireless/iwlwifi/iwl-power.c
@@ -253,6 +253,8 @@ static void iwl_static_sleep_cmd(struct iwl_priv *priv,
IWL_DEBUG_POWER(priv, "numSkipDtim = %u, dtimPeriod = %d\n",
skip, period);
+ /* The power level here is 0-4 (used as array index), but user expects
+ to see 1-5 (according to spec). */
IWL_DEBUG_POWER(priv, "Sleep command for index %d\n", lvl + 1);
}
@@ -308,10 +310,12 @@ static void iwl_power_build_cmd(struct iwl_priv *priv,
priv->power_data.debug_sleep_level_override,
dtimper);
else {
+ /* Note that the user parameter is 1-5 (according to spec),
+ but we pass 0-4 because it acts as an array index. */
if (iwlwifi_mod_params.power_level > IWL_POWER_INDEX_1 &&
- iwlwifi_mod_params.power_level <= IWL_POWER_INDEX_5)
+ iwlwifi_mod_params.power_level <= IWL_POWER_NUM)
iwl_static_sleep_cmd(priv, cmd,
- iwlwifi_mod_params.power_level, dtimper);
+ iwlwifi_mod_params.power_level - 1, dtimper);
else
iwl_static_sleep_cmd(priv, cmd,
IWL_POWER_INDEX_1, dtimper);
--
1.7.0.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 5/6] iwlwifi: don't flood logs when HT debug flag is set
2012-05-03 21:22 [PATCH 0/6] update for 3.5: iwlwifi 2012-05-03 Wey-Yi Guy
` (3 preceding siblings ...)
2012-05-03 21:22 ` [PATCH 4/6] iwlwifi: fix power index handling Wey-Yi Guy
@ 2012-05-03 21:22 ` Wey-Yi Guy
2012-05-03 21:22 ` [PATCH 6/6] iwlwifi: don't disable AGG queues that are not enabled Wey-Yi Guy
5 siblings, 0 replies; 7+ messages in thread
From: Wey-Yi Guy @ 2012-05-03 21:22 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Emmanuel Grumbach, Wey-Yi Guy
From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
We have TX_REPLY for that.
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
---
drivers/net/wireless/iwlwifi/iwl-agn-tx.c | 7 +++----
1 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
index f2e9f29..d8b6fa2 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
@@ -1300,10 +1300,11 @@ int iwlagn_rx_reply_compressed_ba(struct iwl_priv *priv,
(u8 *) &ba_resp->sta_addr_lo32,
ba_resp->sta_id);
IWL_DEBUG_TX_REPLY(priv, "TID = %d, SeqCtl = %d, bitmap = 0x%llx, "
- "scd_flow = %d, scd_ssn = %d\n",
+ "scd_flow = %d, scd_ssn = %d sent:%d, acked:%d\n",
ba_resp->tid, le16_to_cpu(ba_resp->seq_ctl),
(unsigned long long)le64_to_cpu(ba_resp->bitmap),
- scd_flow, ba_resp_scd_ssn);
+ scd_flow, ba_resp_scd_ssn, ba_resp->txed,
+ ba_resp->txed_2_done);
/* Mark that the expected block-ack response arrived */
agg->wait_for_ba = false;
@@ -1319,8 +1320,6 @@ int iwlagn_rx_reply_compressed_ba(struct iwl_priv *priv,
*/
ba_resp->txed = ba_resp->txed_2_done;
}
- IWL_DEBUG_HT(priv, "agg frames sent:%d, acked:%d\n",
- ba_resp->txed, ba_resp->txed_2_done);
priv->tid_data[sta_id][tid].next_reclaimed = ba_resp_scd_ssn;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 6/6] iwlwifi: don't disable AGG queues that are not enabled
2012-05-03 21:22 [PATCH 0/6] update for 3.5: iwlwifi 2012-05-03 Wey-Yi Guy
` (4 preceding siblings ...)
2012-05-03 21:22 ` [PATCH 5/6] iwlwifi: don't flood logs when HT debug flag is set Wey-Yi Guy
@ 2012-05-03 21:22 ` Wey-Yi Guy
5 siblings, 0 replies; 7+ messages in thread
From: Wey-Yi Guy @ 2012-05-03 21:22 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, Emmanuel Grumbach, Wey-Yi Guy
From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
If the BA session is torn down before we had a chance to start it
we shouldn't disable the AGG tx queues that weren't enabled.
This can happen in two cases:
1) We get a delBA before we drained our Tx queues in agg start flow
2) We didn't get the (successfull) addBA response on time
Reported-by: Daniel Chyan <dchyan@princeton.edu>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
---
drivers/net/wireless/iwlwifi/iwl-agn-tx.c | 12 +++++++++---
1 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
index d8b6fa2..3366e2e 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
@@ -590,11 +590,17 @@ turn_off:
spin_unlock_bh(&priv->sta_lock);
if (test_bit(txq_id, priv->agg_q_alloc)) {
- /* If the transport didn't know that we wanted to start
- * agreggation, don't tell it that we want to stop them
+ /*
+ * If the transport didn't know that we wanted to start
+ * agreggation, don't tell it that we want to stop them.
+ * This can happen when we don't get the addBA response on
+ * time, or we hadn't time to drain the AC queues.
*/
- if (agg_state != IWL_AGG_STARTING)
+ if (agg_state == IWL_AGG_ON)
iwl_trans_tx_agg_disable(priv->trans, txq_id);
+ else
+ IWL_DEBUG_TX_QUEUES(priv, "Don't disable tx agg: %d\n",
+ agg_state);
iwlagn_dealloc_agg_txq(priv, txq_id);
}
--
1.7.0.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2012-05-03 21:28 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-03 21:22 [PATCH 0/6] update for 3.5: iwlwifi 2012-05-03 Wey-Yi Guy
2012-05-03 21:22 ` [PATCH 1/6] iwlwifi: include rssi as part of decision making for reduce txpower Wey-Yi Guy
2012-05-03 21:22 ` [PATCH 2/6] iwlwifi: add documentation for bt reduced tx power Wey-Yi Guy
2012-05-03 21:22 ` [PATCH 3/6] iwlwifi: make sure reduced tx power bit is valid Wey-Yi Guy
2012-05-03 21:22 ` [PATCH 4/6] iwlwifi: fix power index handling Wey-Yi Guy
2012-05-03 21:22 ` [PATCH 5/6] iwlwifi: don't flood logs when HT debug flag is set Wey-Yi Guy
2012-05-03 21:22 ` [PATCH 6/6] iwlwifi: don't disable AGG queues that are not enabled Wey-Yi Guy
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).