int tx_failed;
 };
 
+DECLARE_EWMA(rssi, 1024, 8)
+
 /*
  * Antenna settings about the currently active link.
  */
         * 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;
 };
 
 /*
        /*
         * Currently active average RSSI value
         */
-       struct ewma avg_rssi;
+       struct ewma_rssi avg_rssi;
 
        /*
         * Work structure for scheduling periodic link tuning.
 
  */
 #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;
 
 
 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)
        /*
         * 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)
         */
        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,