Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 369601
b: refs/heads/master
c: 0d528d8
h: refs/heads/master
i:
  369599: 960a7df
v: v3
  • Loading branch information
Felix Fietkau authored and Johannes Berg committed Apr 22, 2013
1 parent a2cd9cb commit aaf28ba
Show file tree
Hide file tree
Showing 5 changed files with 370 additions and 168 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 5de17984898c5758fc6ebe08eccea9f4b6548914
refs/heads/master: 0d528d85c519b755b6f4e1bafa3a39984370e1c1
66 changes: 66 additions & 0 deletions trunk/include/net/mac80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -563,6 +563,9 @@ enum mac80211_rate_control_flags {
/* maximum number of rate stages */
#define IEEE80211_TX_MAX_RATES 4

/* maximum number of rate table entries */
#define IEEE80211_TX_RATE_TABLE_SIZE 4

/**
* struct ieee80211_tx_rate - rate selection/status
*
Expand Down Expand Up @@ -659,6 +662,8 @@ struct ieee80211_tx_info {
s8 rts_cts_rate_idx;
u8 use_rts:1;
u8 use_cts_prot:1;
u8 short_preamble:1;
u8 skip_table:1;
/* 2 bytes free */
};
/* only needed before rate control */
Expand All @@ -680,6 +685,8 @@ struct ieee80211_tx_info {
struct {
struct ieee80211_tx_rate driver_rates[
IEEE80211_TX_MAX_RATES];
u8 pad[4];

void *rate_driver_data[
IEEE80211_TX_INFO_RATE_DRIVER_DATA_SIZE / sizeof(void *)];
};
Expand Down Expand Up @@ -1224,6 +1231,24 @@ enum ieee80211_sta_rx_bandwidth {
IEEE80211_STA_RX_BW_160,
};

/**
* struct ieee80211_sta_rates - station rate selection table
*
* @rcu_head: RCU head used for freeing the table on update
* @rates: transmit rates/flags to be used by default.
* Overriding entries per-packet is possible by using cb tx control.
*/
struct ieee80211_sta_rates {
struct rcu_head rcu_head;
struct {
s8 idx;
u8 count;
u8 count_cts;
u8 count_rts;
u16 flags;
} rate[IEEE80211_TX_RATE_TABLE_SIZE];
};

/**
* struct ieee80211_sta - station table entry
*
Expand Down Expand Up @@ -1251,6 +1276,7 @@ enum ieee80211_sta_rx_bandwidth {
* notifications and capabilities. The value is only valid after
* the station moves to associated state.
* @smps_mode: current SMPS mode (off, static or dynamic)
* @tx_rates: rate control selection table
*/
struct ieee80211_sta {
u32 supp_rates[IEEE80211_NUM_BANDS];
Expand All @@ -1264,6 +1290,7 @@ struct ieee80211_sta {
u8 rx_nss;
enum ieee80211_sta_rx_bandwidth bandwidth;
enum ieee80211_smps_mode smps_mode;
struct ieee80211_sta_rates __rcu *rates;

/* must be last */
u8 drv_priv[0] __aligned(sizeof(void *));
Expand Down Expand Up @@ -1419,6 +1446,9 @@ struct ieee80211_tx_control {
* for different virtual interfaces. See the doc section on HW queue
* control for more details.
*
* @IEEE80211_HW_SUPPORTS_RC_TABLE: The driver supports using a rate
* selection table provided by the rate control algorithm.
*
* @IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF: Use the P2P Device address for any
* P2P Interface. This will be honoured even if more than one interface
* is supported.
Expand Down Expand Up @@ -1451,6 +1481,7 @@ enum ieee80211_hw_flags {
IEEE80211_HW_SUPPORTS_PER_STA_GTK = 1<<21,
IEEE80211_HW_AP_LINK_PS = 1<<22,
IEEE80211_HW_TX_AMPDU_SETUP_IN_HW = 1<<23,
IEEE80211_HW_SUPPORTS_RC_TABLE = 1<<24,
IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF = 1<<25,
IEEE80211_HW_TIMING_BEACON_ONLY = 1<<26,
};
Expand Down Expand Up @@ -3136,6 +3167,25 @@ static inline int ieee80211_sta_ps_transition_ni(struct ieee80211_sta *sta,
void ieee80211_sta_set_buffered(struct ieee80211_sta *sta,
u8 tid, bool buffered);

/**
* ieee80211_get_tx_rates - get the selected transmit rates for a packet
*
* Call this function in a driver with per-packet rate selection support
* to combine the rate info in the packet tx info with the most recent
* rate selection table for the station entry.
*
* @vif: &struct ieee80211_vif pointer from the add_interface callback.
* @sta: the receiver station to which this packet is sent.
* @skb: the frame to be transmitted.
* @dest: buffer for extracted rate/retry information
* @max_rates: maximum number of rates to fetch
*/
void ieee80211_get_tx_rates(struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct sk_buff *skb,
struct ieee80211_tx_rate *dest,
int max_rates);

/**
* ieee80211_tx_status - transmit status callback
*
Expand Down Expand Up @@ -4212,6 +4262,22 @@ bool rate_usable_index_exists(struct ieee80211_supported_band *sband,
return false;
}

/**
* rate_control_set_rates - pass the sta rate selection to mac80211/driver
*
* When not doing a rate control probe to test rates, rate control should pass
* its rate selection to mac80211. If the driver supports receiving a station
* rate table, it will use it to ensure that frames are always sent based on
* the most recent rate control module decision.
*
* @hw: pointer as obtained from ieee80211_alloc_hw()
* @pubsta: &struct ieee80211_sta pointer to the target destination.
* @rates: new tx rate set to be used for this station.
*/
int rate_control_set_rates(struct ieee80211_hw *hw,
struct ieee80211_sta *pubsta,
struct ieee80211_sta_rates *rates);

int ieee80211_rate_control_register(struct rate_control_ops *ops);
void ieee80211_rate_control_unregister(struct rate_control_ops *ops);

Expand Down
1 change: 1 addition & 0 deletions trunk/net/mac80211/ieee80211_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ struct ieee80211_tx_data {
struct ieee80211_sub_if_data *sdata;
struct sta_info *sta;
struct ieee80211_key *key;
struct ieee80211_tx_rate rate;

unsigned int flags;
};
Expand Down
Loading

0 comments on commit aaf28ba

Please sign in to comment.