aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvo van Doorn <ivdoorn@gmail.com>2007-07-27 09:43:23 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:47:38 -0400
commitd5d08def9216c445339c5a24a2cdc9cc2c8c13f7 (patch)
tree323fa9482da42ae8ce28c2030cf12bafd44e3eba
parent8a69aa93d54cb56017159b08512c80ede2263060 (diff)
[MAC80211]: Add LONG_RETRY flag to ieee80211_tx_control
mac80211 informs the driver what the short and long retry values are through set_retry_limit(), but when packets are being transmitted it did not inform the driver which of the 2 retry limits should actually be used. Instead it sends the actual value, but for drivers that can only set the retry limit and the register and in the descriptor need to indicate which of the limits should be used this is not really useful. This patch will add a IEEE80211_TXCTL_LONG_RETRY_LIMIT flag to the ieee80211_tx_control structure. By default the short retry limit should be used but if the flag is set the long retry should be used. This does not prevent the driver to ignore the request for "no retry" packets, but at least those will be send out with the short retry limit. But there is no perfect cure for this problem.. :( Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: Jiri Benc <jbenc@suse.cz> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--include/net/mac80211.h8
-rw-r--r--net/mac80211/tx.c1
2 files changed, 8 insertions, 1 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 8a086a8ac270..91cee0f0aa71 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -192,9 +192,15 @@ struct ieee80211_tx_control {
192#define IEEE80211_TXCTL_FIRST_FRAGMENT (1<<8) /* this is a first fragment of 192#define IEEE80211_TXCTL_FIRST_FRAGMENT (1<<8) /* this is a first fragment of
193 * the frame */ 193 * the frame */
194#define IEEE80211_TXCTL_TKIP_NEW_PHASE1_KEY (1<<9) 194#define IEEE80211_TXCTL_TKIP_NEW_PHASE1_KEY (1<<9)
195#define IEEE80211_TXCTL_LONG_RETRY_LIMIT (1<<10) /* this frame should be send
196 * using the through
197 * set_retry_limit configured
198 * long retry value */
195 u32 flags; /* tx control flags defined 199 u32 flags; /* tx control flags defined
196 * above */ 200 * above */
197 u8 retry_limit; /* 1 = only first attempt, 2 = one retry, .. */ 201 u8 retry_limit; /* 1 = only first attempt, 2 = one retry, ..
202 * This could be used when set_retry_limit
203 * is not implemented by the driver */
198 u8 power_level; /* per-packet transmit power level, in dBm */ 204 u8 power_level; /* per-packet transmit power level, in dBm */
199 u8 antenna_sel_tx; /* 0 = default/diversity, 1 = Ant0, 2 = Ant1 */ 205 u8 antenna_sel_tx; /* 0 = default/diversity, 1 = Ant0, 2 = Ant1 */
200 s8 key_idx; /* -1 = do not encrypt, >= 0 keyidx from 206 s8 key_idx; /* -1 = do not encrypt, >= 0 keyidx from
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 2a1a7d457136..532cf5127b70 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -649,6 +649,7 @@ ieee80211_tx_h_misc(struct ieee80211_txrx_data *tx)
649 if (tx->skb->len + FCS_LEN > tx->local->rts_threshold && 649 if (tx->skb->len + FCS_LEN > tx->local->rts_threshold &&
650 tx->local->rts_threshold < IEEE80211_MAX_RTS_THRESHOLD) { 650 tx->local->rts_threshold < IEEE80211_MAX_RTS_THRESHOLD) {
651 control->flags |= IEEE80211_TXCTL_USE_RTS_CTS; 651 control->flags |= IEEE80211_TXCTL_USE_RTS_CTS;
652 control->flags |= IEEE80211_TXCTL_LONG_RETRY_LIMIT;
652 control->retry_limit = 653 control->retry_limit =
653 tx->local->long_retry_limit; 654 tx->local->long_retry_limit;
654 } else { 655 } else {