diff options
author | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2005-12-28 13:22:51 +0000 |
---|---|---|
committer | nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2005-12-28 13:22:51 +0000 |
commit | dc0b369ea1bb98a9835cfac7ff3899797e65227e (patch) | |
tree | 4b93267e8debb39c3d21fb80e42b893732728c90 /openwrt/target/linux/package/ieee80211-dscape/src/rate_control.h | |
parent | 924cb86668a1a92b7d4bf96058ba0efa6c24f932 (diff) |
add devicescape 802.11 stack
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@2791 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'openwrt/target/linux/package/ieee80211-dscape/src/rate_control.h')
-rw-r--r-- | openwrt/target/linux/package/ieee80211-dscape/src/rate_control.h | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/openwrt/target/linux/package/ieee80211-dscape/src/rate_control.h b/openwrt/target/linux/package/ieee80211-dscape/src/rate_control.h new file mode 100644 index 000000000..9ceea7da5 --- /dev/null +++ b/openwrt/target/linux/package/ieee80211-dscape/src/rate_control.h @@ -0,0 +1,128 @@ +/* + * Copyright 2002-2005, Instant802 Networks, Inc. + * Copyright 2005, Devicescape Software, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#ifndef RATE_CONTROL +#define RATE_CONTROL + +#define RATE_CONTROL_NUM_DOWN 20 +#define RATE_CONTROL_NUM_UP 15 + + +struct rate_control_extra { + /* values from rate_control_get_rate() to the caller: */ + struct ieee80211_rate *probe; /* probe with this rate, or NULL for no + * probing */ + int startidx, endidx, rateidx; + struct ieee80211_rate *nonerp; + int nonerp_idx; + + /* parameters from the caller to rate_control_get_rate(): */ + int mgmt_data; /* this is data frame that is used for management + * (e.g., IEEE 802.1X EAPOL) */ + u16 ethertype; +}; + + +struct rate_control_ops { + const char *name; + void (*tx_status)(struct net_device *dev, struct sk_buff *skb, + struct ieee80211_tx_status *status); + struct ieee80211_rate * + (*get_rate)(struct net_device *dev, struct sk_buff *skb, + struct rate_control_extra *extra); + void (*rate_init)(struct ieee80211_local *local, struct sta_info *sta); + void (*clear)(void *priv); + int (*status_sta)(struct ieee80211_local *local, + struct sta_info *sta, char *buf); + int (*status_global)(struct ieee80211_local *local, char *buf); + + void * (*alloc)(struct ieee80211_local *local); + void (*free)(void *priv); + void * (*alloc_sta)(void); + void (*free_sta)(void *priv); +}; + + +int ieee80211_rate_control_register(struct rate_control_ops *ops); +void ieee80211_rate_control_unregister(struct rate_control_ops *ops); + + +static inline void rate_control_tx_status(struct net_device *dev, + struct sk_buff *skb, + struct ieee80211_tx_status *status) +{ + struct ieee80211_local *local = dev->priv; + local->rate_ctrl->tx_status(dev, skb, status); +} + + +static inline struct ieee80211_rate * +rate_control_get_rate(struct net_device *dev, struct sk_buff *skb, + struct rate_control_extra *extra) +{ + struct ieee80211_local *local = dev->priv; + return local->rate_ctrl->get_rate(dev, skb, extra); +} + + +static inline void rate_control_rate_init(struct ieee80211_local *local, + struct sta_info *sta) +{ + local->rate_ctrl->rate_init(local, sta); +} + + +static inline void rate_control_clear(struct ieee80211_local *local) +{ + local->rate_ctrl->clear(local->rate_ctrl_priv); +} + + +static inline int rate_control_status_sta(struct ieee80211_local *local, + struct sta_info *sta, char *buf) +{ + return local->rate_ctrl->status_sta(local, sta, buf); +} + + +static inline int rate_control_status_global(struct ieee80211_local *local, + char *buf) +{ + return local->rate_ctrl->status_global(local, buf); +} + + +static inline void * rate_control_alloc(struct ieee80211_local *local) +{ + return local->rate_ctrl->alloc(local); +} + + +static inline void rate_control_free(struct ieee80211_local *local) +{ + if (local->rate_ctrl == NULL || local->rate_ctrl_priv == NULL) + return; + local->rate_ctrl->free(local->rate_ctrl_priv); + local->rate_ctrl_priv = NULL; +} + + +static inline void * rate_control_alloc_sta(struct ieee80211_local *local) +{ + return local->rate_ctrl->alloc_sta(); +} + + +static inline void rate_control_free_sta(struct ieee80211_local *local, + void *priv) +{ + local->rate_ctrl->free_sta(priv); +} + +#endif /* RATE_CONTROL */ |