rc80211_minstrel.h revision c8ca8c2f933a516b5f4586d7dc6055b72107f246
1/* 2 * Copyright (C) 2008 Felix Fietkau <nbd@openwrt.org> 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License version 2 as 6 * published by the Free Software Foundation. 7 */ 8 9#ifndef __RC_MINSTREL_H 10#define __RC_MINSTREL_H 11 12#define EWMA_LEVEL 75 /* ewma weighting factor [%] */ 13 14/* scaled fraction values */ 15#define MINSTREL_SCALE 16 16#define MINSTREL_FRAC(val, div) (((val) << MINSTREL_SCALE) / div) 17#define MINSTREL_TRUNC(val) ((val) >> MINSTREL_SCALE) 18 19/* 20 * Perform EWMA (Exponentially Weighted Moving Average) calculation 21 */ 22static inline int 23minstrel_ewma(int old, int new, int weight) 24{ 25 return (new * (100 - weight) + old * weight) / 100; 26} 27 28 29struct minstrel_rate { 30 int bitrate; 31 int rix; 32 33 unsigned int perfect_tx_time; 34 unsigned int ack_time; 35 36 int sample_limit; 37 unsigned int retry_count; 38 unsigned int retry_count_cts; 39 unsigned int retry_count_rtscts; 40 unsigned int adjusted_retry_count; 41 42 u32 success; 43 u32 attempts; 44 u32 last_attempts; 45 u32 last_success; 46 47 /* parts per thousand */ 48 u32 cur_prob; 49 u32 probability; 50 51 /* per-rate throughput */ 52 u32 cur_tp; 53 54 u64 succ_hist; 55 u64 att_hist; 56}; 57 58struct minstrel_sta_info { 59 unsigned long stats_update; 60 unsigned int sp_ack_dur; 61 unsigned int rate_avg; 62 63 unsigned int lowest_rix; 64 65 unsigned int max_tp_rate; 66 unsigned int max_tp_rate2; 67 unsigned int max_prob_rate; 68 unsigned int packet_count; 69 unsigned int sample_count; 70 int sample_deferred; 71 72 unsigned int sample_idx; 73 unsigned int sample_column; 74 75 int n_rates; 76 struct minstrel_rate *r; 77 bool prev_sample; 78 79 /* sampling table */ 80 u8 *sample_table; 81 82#ifdef CONFIG_MAC80211_DEBUGFS 83 struct dentry *dbg_stats; 84#endif 85}; 86 87struct minstrel_priv { 88 struct ieee80211_hw *hw; 89 bool has_mrr; 90 unsigned int cw_min; 91 unsigned int cw_max; 92 unsigned int max_retry; 93 unsigned int segment_size; 94 unsigned int update_interval; 95 unsigned int lookaround_rate; 96 unsigned int lookaround_rate_mrr; 97 98 u8 cck_rates[4]; 99 100#ifdef CONFIG_MAC80211_DEBUGFS 101 /* 102 * enable fixed rate processing per RC 103 * - write static index to debugfs:ieee80211/phyX/rc/fixed_rate_idx 104 * - write -1 to enable RC processing again 105 * - setting will be applied on next update 106 */ 107 u32 fixed_rate_idx; 108 struct dentry *dbg_fixed_rate; 109#endif 110 111}; 112 113struct minstrel_debugfs_info { 114 size_t len; 115 char buf[]; 116}; 117 118extern struct rate_control_ops mac80211_minstrel; 119void minstrel_add_sta_debugfs(void *priv, void *priv_sta, struct dentry *dir); 120void minstrel_remove_sta_debugfs(void *priv, void *priv_sta); 121 122/* debugfs */ 123int minstrel_stats_open(struct inode *inode, struct file *file); 124ssize_t minstrel_stats_read(struct file *file, char __user *buf, size_t len, loff_t *ppos); 125int minstrel_stats_release(struct inode *inode, struct file *file); 126 127#endif 128