Skip to content

Commit

Permalink
rt2x00: use DECLARE_EWMA
Browse files Browse the repository at this point in the history
Instead of using the out-of-line EWMA calculation, use DECLARE_EWMA()
to create static inlines. On x86/64 this results in code that's one
byte larger (for me), but reduces struct link_ant and struct link
size by the two unsigned long values that store the parameters each.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Johannes Berg authored and David S. Miller committed Aug 20, 2015
1 parent 46f26dd commit 11ab35e
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 15 deletions.
1 change: 0 additions & 1 deletion drivers/net/wireless/rt2x00/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,6 @@ config RT2X00_LIB_USB

config RT2X00_LIB
tristate
select AVERAGE

config RT2X00_LIB_FIRMWARE
bool
Expand Down
6 changes: 4 additions & 2 deletions drivers/net/wireless/rt2x00/rt2x00.h
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,8 @@ struct link_qual {
int tx_failed;
};

DECLARE_EWMA(rssi, 1024, 8)

/*
* Antenna settings about the currently active link.
*/
Expand Down Expand Up @@ -285,7 +287,7 @@ struct link_ant {
* Similar to the avg_rssi in the link_qual structure
* this value is updated by using the walking average.
*/
struct ewma rssi_ant;
struct ewma_rssi rssi_ant;
};

/*
Expand Down Expand Up @@ -314,7 +316,7 @@ struct link {
/*
* Currently active average RSSI value
*/
struct ewma avg_rssi;
struct ewma_rssi avg_rssi;

/*
* Work structure for scheduling periodic link tuning.
Expand Down
18 changes: 6 additions & 12 deletions drivers/net/wireless/rt2x00/rt2x00link.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,11 @@
*/
#define DEFAULT_RSSI -128

/* Constants for EWMA calculations. */
#define RT2X00_EWMA_FACTOR 1024
#define RT2X00_EWMA_WEIGHT 8

static inline int rt2x00link_get_avg_rssi(struct ewma *ewma)
static inline int rt2x00link_get_avg_rssi(struct ewma_rssi *ewma)
{
unsigned long avg;

avg = ewma_read(ewma);
avg = ewma_rssi_read(ewma);
if (avg)
return -avg;

Expand Down Expand Up @@ -76,8 +72,7 @@ static void rt2x00link_antenna_update_rssi_history(struct rt2x00_dev *rt2x00dev,

static void rt2x00link_antenna_reset(struct rt2x00_dev *rt2x00dev)
{
ewma_init(&rt2x00dev->link.ant.rssi_ant, RT2X00_EWMA_FACTOR,
RT2X00_EWMA_WEIGHT);
ewma_rssi_init(&rt2x00dev->link.ant.rssi_ant);
}

static void rt2x00lib_antenna_diversity_sample(struct rt2x00_dev *rt2x00dev)
Expand Down Expand Up @@ -225,12 +220,12 @@ void rt2x00link_update_stats(struct rt2x00_dev *rt2x00dev,
/*
* Update global RSSI
*/
ewma_add(&link->avg_rssi, -rxdesc->rssi);
ewma_rssi_add(&link->avg_rssi, -rxdesc->rssi);

/*
* Update antenna RSSI
*/
ewma_add(&ant->rssi_ant, -rxdesc->rssi);
ewma_rssi_add(&ant->rssi_ant, -rxdesc->rssi);
}

void rt2x00link_start_tuner(struct rt2x00_dev *rt2x00dev)
Expand Down Expand Up @@ -285,8 +280,7 @@ void rt2x00link_reset_tuner(struct rt2x00_dev *rt2x00dev, bool antenna)
*/
rt2x00dev->link.count = 0;
memset(qual, 0, sizeof(*qual));
ewma_init(&rt2x00dev->link.avg_rssi, RT2X00_EWMA_FACTOR,
RT2X00_EWMA_WEIGHT);
ewma_rssi_init(&rt2x00dev->link.avg_rssi);

/*
* Restore the VGC level as stored in the registers,
Expand Down

0 comments on commit 11ab35e

Please sign in to comment.