root/net/mac80211/rc80211_minstrel.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. minstrel_ewma

   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * Copyright (C) 2008 Felix Fietkau <nbd@openwrt.org>
   4  */
   5 
   6 #ifndef __RC_MINSTREL_H
   7 #define __RC_MINSTREL_H
   8 
   9 #define EWMA_LEVEL      96      /* ewma weighting factor [/EWMA_DIV] */
  10 #define EWMA_DIV        128
  11 #define SAMPLE_COLUMNS  10      /* number of columns in sample table */
  12 
  13 /* scaled fraction values */
  14 #define MINSTREL_SCALE  12
  15 #define MINSTREL_FRAC(val, div) (((val) << MINSTREL_SCALE) / div)
  16 #define MINSTREL_TRUNC(val) ((val) >> MINSTREL_SCALE)
  17 
  18 /* number of highest throughput rates to consider*/
  19 #define MAX_THR_RATES 4
  20 
  21 /*
  22  * Perform EWMA (Exponentially Weighted Moving Average) calculation
  23  */
  24 static inline int
  25 minstrel_ewma(int old, int new, int weight)
  26 {
  27         int diff, incr;
  28 
  29         diff = new - old;
  30         incr = (EWMA_DIV - weight) * diff / EWMA_DIV;
  31 
  32         return old + incr;
  33 }
  34 
  35 struct minstrel_rate_stats {
  36         /* current / last sampling period attempts/success counters */
  37         u16 attempts, last_attempts;
  38         u16 success, last_success;
  39 
  40         /* total attempts/success counters */
  41         u32 att_hist, succ_hist;
  42 
  43         /* prob_ewma - exponential weighted moving average of prob */
  44         u16 prob_ewma;
  45 
  46         /* maximum retry counts */
  47         u8 retry_count;
  48         u8 retry_count_rtscts;
  49 
  50         u8 sample_skipped;
  51         bool retry_updated;
  52 };
  53 
  54 struct minstrel_rate {
  55         int bitrate;
  56 
  57         s8 rix;
  58         u8 retry_count_cts;
  59         u8 adjusted_retry_count;
  60 
  61         unsigned int perfect_tx_time;
  62         unsigned int ack_time;
  63 
  64         int sample_limit;
  65 
  66         struct minstrel_rate_stats stats;
  67 };
  68 
  69 struct minstrel_sta_info {
  70         struct ieee80211_sta *sta;
  71 
  72         unsigned long last_stats_update;
  73         unsigned int sp_ack_dur;
  74         unsigned int rate_avg;
  75 
  76         unsigned int lowest_rix;
  77 
  78         u8 max_tp_rate[MAX_THR_RATES];
  79         u8 max_prob_rate;
  80         unsigned int total_packets;
  81         unsigned int sample_packets;
  82         int sample_deferred;
  83 
  84         unsigned int sample_row;
  85         unsigned int sample_column;
  86 
  87         int n_rates;
  88         struct minstrel_rate *r;
  89         bool prev_sample;
  90 
  91         /* sampling table */
  92         u8 *sample_table;
  93 };
  94 
  95 struct minstrel_priv {
  96         struct ieee80211_hw *hw;
  97         bool has_mrr;
  98         u32 sample_switch;
  99         unsigned int cw_min;
 100         unsigned int cw_max;
 101         unsigned int max_retry;
 102         unsigned int segment_size;
 103         unsigned int update_interval;
 104         unsigned int lookaround_rate;
 105         unsigned int lookaround_rate_mrr;
 106 
 107         u8 cck_rates[4];
 108 
 109 #ifdef CONFIG_MAC80211_DEBUGFS
 110         /*
 111          * enable fixed rate processing per RC
 112          *   - write static index to debugfs:ieee80211/phyX/rc/fixed_rate_idx
 113          *   - write -1 to enable RC processing again
 114          *   - setting will be applied on next update
 115          */
 116         u32 fixed_rate_idx;
 117 #endif
 118 };
 119 
 120 struct minstrel_debugfs_info {
 121         size_t len;
 122         char buf[];
 123 };
 124 
 125 extern const struct rate_control_ops mac80211_minstrel;
 126 void minstrel_add_sta_debugfs(void *priv, void *priv_sta, struct dentry *dir);
 127 
 128 /* Recalculate success probabilities and counters for a given rate using EWMA */
 129 void minstrel_calc_rate_stats(struct minstrel_rate_stats *mrs);
 130 int minstrel_get_tp_avg(struct minstrel_rate *mr, int prob_ewma);
 131 
 132 /* debugfs */
 133 int minstrel_stats_open(struct inode *inode, struct file *file);
 134 int minstrel_stats_csv_open(struct inode *inode, struct file *file);
 135 
 136 #endif

/* [<][>][^][v][top][bottom][index][help] */