diff options
Diffstat (limited to 'net/mac80211/ieee80211_rate.h')
| -rw-r--r-- | net/mac80211/ieee80211_rate.h | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/net/mac80211/ieee80211_rate.h b/net/mac80211/ieee80211_rate.h index 73f19e8aa51c..5f9a2ca49a57 100644 --- a/net/mac80211/ieee80211_rate.h +++ b/net/mac80211/ieee80211_rate.h | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include "ieee80211_i.h" | 18 | #include "ieee80211_i.h" |
| 19 | #include "sta_info.h" | 19 | #include "sta_info.h" |
| 20 | 20 | ||
| 21 | /* TODO: kdoc */ | ||
| 21 | struct rate_selection { | 22 | struct rate_selection { |
| 22 | /* Selected transmission rate */ | 23 | /* Selected transmission rate */ |
| 23 | struct ieee80211_rate *rate; | 24 | struct ieee80211_rate *rate; |
| @@ -34,7 +35,8 @@ struct rate_control_ops { | |||
| 34 | struct sk_buff *skb, | 35 | struct sk_buff *skb, |
| 35 | struct ieee80211_tx_status *status); | 36 | struct ieee80211_tx_status *status); |
| 36 | void (*get_rate)(void *priv, struct net_device *dev, | 37 | void (*get_rate)(void *priv, struct net_device *dev, |
| 37 | struct ieee80211_hw_mode *mode, struct sk_buff *skb, | 38 | struct ieee80211_supported_band *band, |
| 39 | struct sk_buff *skb, | ||
| 38 | struct rate_selection *sel); | 40 | struct rate_selection *sel); |
| 39 | void (*rate_init)(void *priv, void *priv_sta, | 41 | void (*rate_init)(void *priv, void *priv_sta, |
| 40 | struct ieee80211_local *local, struct sta_info *sta); | 42 | struct ieee80211_local *local, struct sta_info *sta); |
| @@ -66,7 +68,8 @@ void ieee80211_rate_control_unregister(struct rate_control_ops *ops); | |||
| 66 | struct rate_control_ref *rate_control_alloc(const char *name, | 68 | struct rate_control_ref *rate_control_alloc(const char *name, |
| 67 | struct ieee80211_local *local); | 69 | struct ieee80211_local *local); |
| 68 | void rate_control_get_rate(struct net_device *dev, | 70 | void rate_control_get_rate(struct net_device *dev, |
| 69 | struct ieee80211_hw_mode *mode, struct sk_buff *skb, | 71 | struct ieee80211_supported_band *sband, |
| 72 | struct sk_buff *skb, | ||
| 70 | struct rate_selection *sel); | 73 | struct rate_selection *sel); |
| 71 | struct rate_control_ref *rate_control_get(struct rate_control_ref *ref); | 74 | struct rate_control_ref *rate_control_get(struct rate_control_ref *ref); |
| 72 | void rate_control_put(struct rate_control_ref *ref); | 75 | void rate_control_put(struct rate_control_ref *ref); |
| @@ -127,23 +130,23 @@ static inline void rate_control_remove_sta_debugfs(struct sta_info *sta) | |||
| 127 | #endif | 130 | #endif |
| 128 | } | 131 | } |
| 129 | 132 | ||
| 130 | static inline int | 133 | static inline int rate_supported(struct sta_info *sta, |
| 131 | rate_supported(struct sta_info *sta, struct ieee80211_hw_mode *mode, int index) | 134 | enum ieee80211_band band, |
| 135 | int index) | ||
| 132 | { | 136 | { |
| 133 | return (sta == NULL || sta->supp_rates & BIT(index)) && | 137 | return (sta == NULL || sta->supp_rates[band] & BIT(index)); |
| 134 | (mode->rates[index].flags & IEEE80211_RATE_SUPPORTED); | ||
| 135 | } | 138 | } |
| 136 | 139 | ||
| 137 | static inline int | 140 | static inline int |
| 138 | rate_lowest_index(struct ieee80211_local *local, struct ieee80211_hw_mode *mode, | 141 | rate_lowest_index(struct ieee80211_local *local, |
| 142 | struct ieee80211_supported_band *sband, | ||
| 139 | struct sta_info *sta) | 143 | struct sta_info *sta) |
| 140 | { | 144 | { |
| 141 | int i; | 145 | int i; |
| 142 | 146 | ||
| 143 | for (i = 0; i < mode->num_rates; i++) { | 147 | for (i = 0; i < sband->n_bitrates; i++) |
| 144 | if (rate_supported(sta, mode, i)) | 148 | if (rate_supported(sta, sband->band, i)) |
| 145 | return i; | 149 | return i; |
| 146 | } | ||
| 147 | 150 | ||
| 148 | /* warn when we cannot find a rate. */ | 151 | /* warn when we cannot find a rate. */ |
| 149 | WARN_ON(1); | 152 | WARN_ON(1); |
| @@ -152,10 +155,11 @@ rate_lowest_index(struct ieee80211_local *local, struct ieee80211_hw_mode *mode, | |||
| 152 | } | 155 | } |
| 153 | 156 | ||
| 154 | static inline struct ieee80211_rate * | 157 | static inline struct ieee80211_rate * |
| 155 | rate_lowest(struct ieee80211_local *local, struct ieee80211_hw_mode *mode, | 158 | rate_lowest(struct ieee80211_local *local, |
| 159 | struct ieee80211_supported_band *sband, | ||
| 156 | struct sta_info *sta) | 160 | struct sta_info *sta) |
| 157 | { | 161 | { |
| 158 | return &mode->rates[rate_lowest_index(local, mode, sta)]; | 162 | return &sband->bitrates[rate_lowest_index(local, sband, sta)]; |
| 159 | } | 163 | } |
| 160 | 164 | ||
| 161 | 165 | ||
