Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
rc80211_minstrel_ht.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2010 Felix Fietkau <[email protected]>
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_HT_H
10 #define __RC_MINSTREL_HT_H
11 
12 /*
13  * The number of streams can be changed to 2 to reduce code
14  * size and memory footprint.
15  */
16 #define MINSTREL_MAX_STREAMS 3
17 #define MINSTREL_STREAM_GROUPS 4
18 
19 /* scaled fraction values */
20 #define MINSTREL_SCALE 16
21 #define MINSTREL_FRAC(val, div) (((val) << MINSTREL_SCALE) / div)
22 #define MINSTREL_TRUNC(val) ((val) >> MINSTREL_SCALE)
23 
24 #define MCS_GROUP_RATES 8
25 
26 struct mcs_group {
28  unsigned int streams;
29  unsigned int duration[MCS_GROUP_RATES];
30 };
31 
32 extern const struct mcs_group minstrel_mcs_groups[];
33 
35  /* current / last sampling period attempts/success counters */
36  unsigned int attempts, last_attempts;
37  unsigned int success, last_success;
38 
39  /* total attempts/success counters */
41 
42  /* current throughput */
43  unsigned int cur_tp;
44 
45  /* packet delivery probabilities */
46  unsigned int cur_prob, probability;
47 
48  /* maximum retry counts */
49  unsigned int retry_count;
50  unsigned int retry_count_rtscts;
51 
54 };
55 
59 
60  /* bitfield of supported MCS rates of this group */
62 
63  /* selected primary rates */
64  unsigned int max_tp_rate;
65  unsigned int max_tp_rate2;
66  unsigned int max_prob_rate;
67 
68  /* MCS rate statistics */
70 };
71 
73  /* ampdu length (average, per sampling interval) */
74  unsigned int ampdu_len;
75  unsigned int ampdu_packets;
76 
77  /* ampdu length (EWMA) */
78  unsigned int avg_ampdu_len;
79 
80  /* best throughput rate */
81  unsigned int max_tp_rate;
82 
83  /* second best throughput rate */
84  unsigned int max_tp_rate2;
85 
86  /* best probability rate */
87  unsigned int max_prob_rate;
88 
89  /* time of last status update */
90  unsigned long stats_update;
91 
92  /* overhead time in usec for each frame */
93  unsigned int overhead;
94  unsigned int overhead_rtscts;
95 
96  unsigned int total_packets;
97  unsigned int sample_packets;
98 
99  /* tx flags to add for frames for this sta */
101 
106 
107  /* current MCS group to be sampled */
109 
110  /* MCS rate group info and statistics */
112 };
113 
115  union {
118  };
119 #ifdef CONFIG_MAC80211_DEBUGFS
120  struct dentry *dbg_stats;
121 #endif
122  void *ratelist;
124  bool is_ht;
125 };
126 
127 void minstrel_ht_add_sta_debugfs(void *priv, void *priv_sta, struct dentry *dir);
128 void minstrel_ht_remove_sta_debugfs(void *priv, void *priv_sta);
129 
130 #endif