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 struct minstrel_rate { 13 int bitrate; 14 int rix; 15 16 unsigned int perfect_tx_time; 17 unsigned int ack_time; 18 19 int sample_limit; 20 unsigned int retry_count; 21 unsigned int retry_count_cts; 22 unsigned int retry_count_rtscts; 23 unsigned int adjusted_retry_count; 24 25 u32 success; 26 u32 attempts; 27 u32 last_attempts; 28 u32 last_success; 29 30 /* parts per thousand */ 31 u32 cur_prob; 32 u32 probability; 33 34 /* per-rate throughput */ 35 u32 cur_tp; 36 37 u64 succ_hist; 38 u64 att_hist; 39 }; 40 41 struct minstrel_sta_info { 42 unsigned long stats_update; 43 unsigned int sp_ack_dur; 44 unsigned int rate_avg; 45 46 unsigned int lowest_rix; 47 48 unsigned int max_tp_rate; 49 unsigned int max_tp_rate2; 50 unsigned int max_prob_rate; 51 unsigned int packet_count; 52 unsigned int sample_count; 53 int sample_deferred; 54 55 unsigned int sample_idx; 56 unsigned int sample_column; 57 58 int n_rates; 59 struct minstrel_rate *r; 60 bool prev_sample; 61 62 /* sampling table */ 63 u8 *sample_table; 64 65 #ifdef CONFIG_MAC80211_DEBUGFS 66 struct dentry *dbg_stats; 67 #endif 68 }; 69 70 struct minstrel_priv { 71 struct ieee80211_hw *hw; 72 bool has_mrr; 73 unsigned int cw_min; 74 unsigned int cw_max; 75 unsigned int max_retry; 76 unsigned int ewma_level; 77 unsigned int segment_size; 78 unsigned int update_interval; 79 unsigned int lookaround_rate; 80 unsigned int lookaround_rate_mrr; 81 }; 82 83 struct minstrel_debugfs_info { 84 size_t len; 85 char buf[]; 86 }; 87 88 extern struct rate_control_ops mac80211_minstrel; 89 void minstrel_add_sta_debugfs(void *priv, void *priv_sta, struct dentry *dir); 90 void minstrel_remove_sta_debugfs(void *priv, void *priv_sta); 91 92 /* debugfs */ 93 int minstrel_stats_open(struct inode *inode, struct file *file); 94 ssize_t minstrel_stats_read(struct file *file, char __user *buf, size_t len, loff_t *ppos); 95 int minstrel_stats_release(struct inode *inode, struct file *file); 96 97 #endif 98