Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v5.2-rc3 99 lines 2.8 kB view raw
1/* 2 * Copyright 2002-2005, Instant802 Networks, Inc. 3 * Copyright 2005, Devicescape Software, Inc. 4 * Copyright (c) 2006 Jiri Benc <jbenc@suse.cz> 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 <net/mac80211.h> 18#include "ieee80211_i.h" 19#include "sta_info.h" 20#include "driver-ops.h" 21 22struct rate_control_ref { 23 const struct rate_control_ops *ops; 24 void *priv; 25}; 26 27void rate_control_get_rate(struct ieee80211_sub_if_data *sdata, 28 struct sta_info *sta, 29 struct ieee80211_tx_rate_control *txrc); 30 31void rate_control_tx_status(struct ieee80211_local *local, 32 struct ieee80211_supported_band *sband, 33 struct ieee80211_tx_status *st); 34 35void rate_control_rate_init(struct sta_info *sta); 36void rate_control_rate_update(struct ieee80211_local *local, 37 struct ieee80211_supported_band *sband, 38 struct sta_info *sta, u32 changed); 39 40static inline void *rate_control_alloc_sta(struct rate_control_ref *ref, 41 struct sta_info *sta, gfp_t gfp) 42{ 43 spin_lock_init(&sta->rate_ctrl_lock); 44 return ref->ops->alloc_sta(ref->priv, &sta->sta, gfp); 45} 46 47static inline void rate_control_free_sta(struct sta_info *sta) 48{ 49 struct rate_control_ref *ref = sta->rate_ctrl; 50 struct ieee80211_sta *ista = &sta->sta; 51 void *priv_sta = sta->rate_ctrl_priv; 52 53 ref->ops->free_sta(ref->priv, ista, priv_sta); 54} 55 56static inline void rate_control_add_sta_debugfs(struct sta_info *sta) 57{ 58#ifdef CONFIG_MAC80211_DEBUGFS 59 struct rate_control_ref *ref = sta->rate_ctrl; 60 if (ref && sta->debugfs_dir && ref->ops->add_sta_debugfs) 61 ref->ops->add_sta_debugfs(ref->priv, sta->rate_ctrl_priv, 62 sta->debugfs_dir); 63#endif 64} 65 66static inline void rate_control_remove_sta_debugfs(struct sta_info *sta) 67{ 68#ifdef CONFIG_MAC80211_DEBUGFS 69 struct rate_control_ref *ref = sta->rate_ctrl; 70 if (ref && ref->ops->remove_sta_debugfs) 71 ref->ops->remove_sta_debugfs(ref->priv, sta->rate_ctrl_priv); 72#endif 73} 74 75void ieee80211_check_rate_mask(struct ieee80211_sub_if_data *sdata); 76 77/* Get a reference to the rate control algorithm. If `name' is NULL, get the 78 * first available algorithm. */ 79int ieee80211_init_rate_ctrl_alg(struct ieee80211_local *local, 80 const char *name); 81void rate_control_deinitialize(struct ieee80211_local *local); 82 83 84/* Rate control algorithms */ 85#ifdef CONFIG_MAC80211_RC_MINSTREL 86int rc80211_minstrel_init(void); 87void rc80211_minstrel_exit(void); 88#else 89static inline int rc80211_minstrel_init(void) 90{ 91 return 0; 92} 93static inline void rc80211_minstrel_exit(void) 94{ 95} 96#endif 97 98 99#endif /* IEEE80211_RATE_H */