2012-11-26 12:17:40

by Saravana

[permalink] [raw]
Subject: [RFC] mac80211: re-organize the rx rate calculation logic

Mac80211: currently the logic to calculate the rx rate is accessible
only in the cfg.c as the rate_idx_to_bitrate() is static function.
The rx rate calculation might be needed by other files(modules) of
mac80211(possibly debugfs). So grouping the rx rate calculation logic to
a separate function which can be accessed from other files. This change
will make the rx rate calculation implementation similar to tx rate.

Signed-off-by: Saravana <[email protected]>
---
The diff file is generated from wireless-testing git tree.
net/mac80211/cfg.c | 21 +++++++++++++--------
net/mac80211/sta_info.h | 2 ++
2 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 6733b374..0999547 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -396,6 +396,18 @@ void sta_set_rate_info_tx(struct sta_info *sta,
rate_idx_to_bitrate(rinfo, sta, rate->idx);
}

+void sta_set_rate_info_rx(struct sta_info *sta, struct rate_info
*rinfo)
+{
+ rinfo->flags = 0;
+ if (sta->last_rx_rate_flag & RX_FLAG_HT)
+ rinfo->flags |= RATE_INFO_FLAGS_MCS;
+ if (sta->last_rx_rate_flag & RX_FLAG_40MHZ)
+ rinfo->flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH;
+ if (sta->last_rx_rate_flag & RX_FLAG_SHORT_GI)
+ rinfo->flags |= RATE_INFO_FLAGS_SHORT_GI;
+ rate_idx_to_bitrate(rinfo, sta, sta->last_rx_rate_idx);
+
+}
static void sta_set_sinfo(struct sta_info *sta, struct station_info
*sinfo)
{
struct ieee80211_sub_if_data *sdata = sta->sdata;
@@ -443,14 +455,7 @@ static void sta_set_sinfo(struct sta_info *sta,
struct station_info *sinfo)

sta_set_rate_info_tx(sta, &sta->last_tx_rate, &sinfo->txrate);

- sinfo->rxrate.flags = 0;
- if (sta->last_rx_rate_flag & RX_FLAG_HT)
- sinfo->rxrate.flags |= RATE_INFO_FLAGS_MCS;
- if (sta->last_rx_rate_flag & RX_FLAG_40MHZ)
- sinfo->rxrate.flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH;
- if (sta->last_rx_rate_flag & RX_FLAG_SHORT_GI)
- sinfo->rxrate.flags |= RATE_INFO_FLAGS_SHORT_GI;
- rate_idx_to_bitrate(&sinfo->rxrate, sta, sta->last_rx_rate_idx);
+ sta_set_rate_info_rx(sta, &sinfo->rxrate);

if (ieee80211_vif_is_mesh(&sdata->vif)) {
#ifdef CONFIG_MAC80211_MESH
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
index 776f3d0..122d853 100644
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -550,6 +550,8 @@ int sta_info_flush(struct ieee80211_local *local,
void sta_set_rate_info_tx(struct sta_info *sta,
const struct ieee80211_tx_rate *rate,
struct rate_info *rinfo);
+void sta_set_rate_info_rx(struct sta_info *sta,
+ struct rate_info *rinfo);
void ieee80211_sta_expire(struct ieee80211_sub_if_data *sdata,
unsigned long exp_time);



2012-11-27 06:20:56

by Saravana

[permalink] [raw]
Subject: Re: [RFC] mac80211: re-organize the rx rate calculation logic

On 11/26/2012 08:38 PM, Johannes Berg wrote:
> Generally, this seems fine. Your patches are line-wrapped though.
>
I reviewed all the patches and unable to find the line-wrapped :(
Could you help me by pointing out which line is exactly getting wrapped?
So that i will figure out where exactly i am missing and will correct
the same.
>> Signed-off-by: Saravana <[email protected]>
>> ---
>> The diff file is generated from wireless-testing git tree.
>
> I just changed this code in mac80211-next and would appreciate if you
> would rebase onto that.
>
I am also facing the same problem in cloning the mac80211-next. once
that is resolved, will use the mac80211-next as base and then send
patches on top of that.
> That blank line is in the wrong spot, it should be after the closing
> bracket :)
>
will add the blank line after the closing bracket.
> johannes
>
>


2012-11-27 07:42:58

by Saravana

[permalink] [raw]
Subject: Re: [RFC] mac80211: re-organize the rx rate calculation logic

On 11/27/2012 11:50 AM, Saravana wrote:

>>> The diff file is generated from wireless-testing git tree.
>>
>> I just changed this code in mac80211-next and would appreciate if you
>> would rebase onto that.
>>
> I am also facing the same problem in cloning the mac80211-next. once
> that is resolved, will use the mac80211-next as base and then send
> patches on top of that.

The cloning problem is solved(from Mahesh reply). Have started cloning.
will re-submit the patch using mac80211-next as base.
> To unsubscribe from this list: send the line "unsubscribe
> linux-wireless" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
>


2012-11-26 15:07:44

by Johannes Berg

[permalink] [raw]
Subject: Re: [RFC] mac80211: re-organize the rx rate calculation logic

On Mon, 2012-11-26 at 04:17 -0800, [email protected] wrote:
> Mac80211: currently the logic to calculate the rx rate is accessible
> only in the cfg.c as the rate_idx_to_bitrate() is static function.
> The rx rate calculation might be needed by other files(modules) of
> mac80211(possibly debugfs). So grouping the rx rate calculation logic to
> a separate function which can be accessed from other files. This change
> will make the rx rate calculation implementation similar to tx rate.

Generally, this seems fine. Your patches are line-wrapped though.

> Signed-off-by: Saravana <[email protected]>
> ---
> The diff file is generated from wireless-testing git tree.

I just changed this code in mac80211-next and would appreciate if you
would rebase onto that.

> +void sta_set_rate_info_rx(struct sta_info *sta, struct rate_info
> *rinfo)
> +{
> + rinfo->flags = 0;
> + if (sta->last_rx_rate_flag & RX_FLAG_HT)
> + rinfo->flags |= RATE_INFO_FLAGS_MCS;
> + if (sta->last_rx_rate_flag & RX_FLAG_40MHZ)
> + rinfo->flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH;
> + if (sta->last_rx_rate_flag & RX_FLAG_SHORT_GI)
> + rinfo->flags |= RATE_INFO_FLAGS_SHORT_GI;
> + rate_idx_to_bitrate(rinfo, sta, sta->last_rx_rate_idx);
> +
> +}
> static void sta_set_sinfo(struct sta_info *sta, struct station_info
> *sinfo)

That blank line is in the wrong spot, it should be after the closing
bracket :)

johannes