2013-04-15 06:33:12

by Vivekananda Holla

[permalink] [raw]
Subject: [Patch] mac80211: add rts-cts for dynamic SMPS stations

Checking whether dynamic SMPS is enabled at the receiver station for
which packet is intended to be transmitted. Enable RTS
protection for multi-stream rates for such packets.

Signed-off-by: Vivekananda Holla <[email protected]>
---
net/mac80211/tx.c | 20 +++++++++++++++++++-
1 files changed, 19 insertions(+), 1 deletions(-)

diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index aad0bf5..38c2ec6 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -621,6 +621,7 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx)
int i;
u32 len;
bool inval = false, rts = false, short_preamble = false;
+ bool dyn_smps = false;
struct ieee80211_tx_rate_control txrc;
bool assoc = false;

@@ -738,6 +739,13 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx)
info->control.rts_cts_rate_idx = baserate;
}

+ /* check if dynamic SMPS is on at receiving station */
+ if (tx->sta) {
+ if (tx->sta->sta.smps_mode == WLAN_HT_CAP_SM_PS_DYNAMIC) {
+ dyn_smps = true;
+ }
+ }
+
for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) {
/*
* make sure there's no valid rate following
@@ -766,7 +774,17 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx)
if (rts)
info->control.rates[i].flags |=
IEEE80211_TX_RC_USE_RTS_CTS;
-
+ /*
+ * set up RTS protection for multi-stream rates if dynamic
+ * SMPS is enabled for the receiving station
+ */
+ if (dyn_smps) {
+ if ((info->control.rates[i].idx > 7) &&
+ (info->control.rates[i].idx != 32))
+ info->control.rates[i].flags |=
+ IEEE80211_TX_RC_USE_RTS_CTS;
+ }
+
/* RC is busted */
if (WARN_ON_ONCE(info->control.rates[i].idx >=
sband->n_bitrates)) {


2013-04-15 09:24:19

by Johannes Berg

[permalink] [raw]
Subject: Re: [Patch] mac80211: add rts-cts for dynamic SMPS stations

Vivek,

Please work with some of your colleagues at posedge to submit a proper
patch. This is formatted completely wrongly in many ways.

> + if (dyn_smps) {
> + if ((info->control.rates[i].idx > 7) &&
> + (info->control.rates[i].idx != 32))

This is also completely wrong. (hint, there are non-HT bitrates still)

johannes


2013-04-15 10:43:39

by Vivekananda Holla

[permalink] [raw]
Subject: Re: [Patch] mac80211: add rts-cts for dynamic SMPS stations

Hi Johannes,

I ran checkpatch.pl script and found some trailing white spaces in the patch which i have now
corrected.

Also,i had initially placed my code in minstrel_ht_get_rate but saw that the minstrel code is being
changed.
hence, moved the code in to ieee80211_tx_h_rate_ctrl function.

there is a check in this function

if (info->control.rates[i].flags & IEEE80211_TX_RC_MCS) {
WARN_ON(info->control.rates[i].idx > 76);
continue;
}

I feel it would be okay to move the code for dyn_smps within this loop as
this would solve the check for MCS rates.

however i am not sure whether all ht rates flag settings need to be handled within minstrel_ht?

if (info->control.rates[i].flags & IEEE80211_TX_RC_MCS) {
WARN_ON(info->control.rates[i].idx > 76);

+ if (dyn_smps) {
+ if ((info->control.rates[i].idx > 7) &&
+ (info->control.rates[i].idx != 32))
+ info->control.rates[i].flags |=
+ IEEE80211_TX_RC_USE_RTS_CTS;


continue;
}

awaiting your inputs

thanks and regards
Vivek

On 04/15/2013 02:54 PM, Johannes Berg wrote:
> Vivek,
>
> Please work with some of your colleagues at posedge to submit a proper
> patch. This is formatted completely wrongly in many ways.
>
>> + if (dyn_smps) {
>> + if ((info->control.rates[i].idx > 7) &&
>> + (info->control.rates[i].idx != 32))
> This is also completely wrong. (hint, there are non-HT bitrates still)
>
> johannes
>