Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/net/mac80211/rate.h
15109 views
1
/*
2
* Copyright 2002-2005, Instant802 Networks, Inc.
3
* Copyright 2005, Devicescape Software, Inc.
4
* Copyright (c) 2006 Jiri Benc <[email protected]>
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License version 2 as
8
* published by the Free Software Foundation.
9
*/
10
11
#ifndef IEEE80211_RATE_H
12
#define IEEE80211_RATE_H
13
14
#include <linux/netdevice.h>
15
#include <linux/skbuff.h>
16
#include <linux/types.h>
17
#include <linux/kref.h>
18
#include <net/mac80211.h>
19
#include "ieee80211_i.h"
20
#include "sta_info.h"
21
22
struct rate_control_ref {
23
struct ieee80211_local *local;
24
struct rate_control_ops *ops;
25
void *priv;
26
struct kref kref;
27
};
28
29
void rate_control_get_rate(struct ieee80211_sub_if_data *sdata,
30
struct sta_info *sta,
31
struct ieee80211_tx_rate_control *txrc);
32
struct rate_control_ref *rate_control_get(struct rate_control_ref *ref);
33
void rate_control_put(struct rate_control_ref *ref);
34
35
static inline void rate_control_tx_status(struct ieee80211_local *local,
36
struct ieee80211_supported_band *sband,
37
struct sta_info *sta,
38
struct sk_buff *skb)
39
{
40
struct rate_control_ref *ref = local->rate_ctrl;
41
struct ieee80211_sta *ista = &sta->sta;
42
void *priv_sta = sta->rate_ctrl_priv;
43
44
if (!ref)
45
return;
46
47
ref->ops->tx_status(ref->priv, sband, ista, priv_sta, skb);
48
}
49
50
51
static inline void rate_control_rate_init(struct sta_info *sta)
52
{
53
struct ieee80211_local *local = sta->sdata->local;
54
struct rate_control_ref *ref = sta->rate_ctrl;
55
struct ieee80211_sta *ista = &sta->sta;
56
void *priv_sta = sta->rate_ctrl_priv;
57
struct ieee80211_supported_band *sband;
58
59
if (!ref)
60
return;
61
62
sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
63
64
ref->ops->rate_init(ref->priv, sband, ista, priv_sta);
65
}
66
67
static inline void rate_control_rate_update(struct ieee80211_local *local,
68
struct ieee80211_supported_band *sband,
69
struct sta_info *sta, u32 changed,
70
enum nl80211_channel_type oper_chan_type)
71
{
72
struct rate_control_ref *ref = local->rate_ctrl;
73
struct ieee80211_sta *ista = &sta->sta;
74
void *priv_sta = sta->rate_ctrl_priv;
75
76
if (ref && ref->ops->rate_update)
77
ref->ops->rate_update(ref->priv, sband, ista,
78
priv_sta, changed, oper_chan_type);
79
}
80
81
static inline void *rate_control_alloc_sta(struct rate_control_ref *ref,
82
struct ieee80211_sta *sta,
83
gfp_t gfp)
84
{
85
return ref->ops->alloc_sta(ref->priv, sta, gfp);
86
}
87
88
static inline void rate_control_free_sta(struct sta_info *sta)
89
{
90
struct rate_control_ref *ref = sta->rate_ctrl;
91
struct ieee80211_sta *ista = &sta->sta;
92
void *priv_sta = sta->rate_ctrl_priv;
93
94
ref->ops->free_sta(ref->priv, ista, priv_sta);
95
}
96
97
static inline void rate_control_add_sta_debugfs(struct sta_info *sta)
98
{
99
#ifdef CONFIG_MAC80211_DEBUGFS
100
struct rate_control_ref *ref = sta->rate_ctrl;
101
if (ref && sta->debugfs.dir && ref->ops->add_sta_debugfs)
102
ref->ops->add_sta_debugfs(ref->priv, sta->rate_ctrl_priv,
103
sta->debugfs.dir);
104
#endif
105
}
106
107
static inline void rate_control_remove_sta_debugfs(struct sta_info *sta)
108
{
109
#ifdef CONFIG_MAC80211_DEBUGFS
110
struct rate_control_ref *ref = sta->rate_ctrl;
111
if (ref && ref->ops->remove_sta_debugfs)
112
ref->ops->remove_sta_debugfs(ref->priv, sta->rate_ctrl_priv);
113
#endif
114
}
115
116
/* Get a reference to the rate control algorithm. If `name' is NULL, get the
117
* first available algorithm. */
118
int ieee80211_init_rate_ctrl_alg(struct ieee80211_local *local,
119
const char *name);
120
void rate_control_deinitialize(struct ieee80211_local *local);
121
122
123
/* Rate control algorithms */
124
#ifdef CONFIG_MAC80211_RC_PID
125
extern int rc80211_pid_init(void);
126
extern void rc80211_pid_exit(void);
127
#else
128
static inline int rc80211_pid_init(void)
129
{
130
return 0;
131
}
132
static inline void rc80211_pid_exit(void)
133
{
134
}
135
#endif
136
137
#ifdef CONFIG_MAC80211_RC_MINSTREL
138
extern int rc80211_minstrel_init(void);
139
extern void rc80211_minstrel_exit(void);
140
#else
141
static inline int rc80211_minstrel_init(void)
142
{
143
return 0;
144
}
145
static inline void rc80211_minstrel_exit(void)
146
{
147
}
148
#endif
149
150
#ifdef CONFIG_MAC80211_RC_MINSTREL_HT
151
extern int rc80211_minstrel_ht_init(void);
152
extern void rc80211_minstrel_ht_exit(void);
153
#else
154
static inline int rc80211_minstrel_ht_init(void)
155
{
156
return 0;
157
}
158
static inline void rc80211_minstrel_ht_exit(void)
159
{
160
}
161
#endif
162
163
164
#endif /* IEEE80211_RATE_H */
165
166