aboutsummaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2013-04-22 14:58:14 -0400
committerJohn W. Linville <linville@tuxdriver.com>2013-04-22 14:58:14 -0400
commit6475cb05ee17870c7c8d44146dbe09044e6db33d (patch)
tree68fc82e4b9c4c4a1b261869add66bef3ee054926 /include/net
parente563589f7187699b0217854467d857f53b29cc50 (diff)
parent1eb32179f0593051e7536378a879f5bdd108416a (diff)
Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
Diffstat (limited to 'include/net')
-rw-r--r--include/net/cfg80211.h34
-rw-r--r--include/net/mac80211.h90
2 files changed, 114 insertions, 10 deletions
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 57870b646974..26b5b692c22b 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -2002,6 +2002,12 @@ struct cfg80211_update_ft_ies_params {
2002 * @update_ft_ies: Provide updated Fast BSS Transition information to the 2002 * @update_ft_ies: Provide updated Fast BSS Transition information to the
2003 * driver. If the SME is in the driver/firmware, this information can be 2003 * driver. If the SME is in the driver/firmware, this information can be
2004 * used in building Authentication and Reassociation Request frames. 2004 * used in building Authentication and Reassociation Request frames.
2005 *
2006 * @crit_proto_start: Indicates a critical protocol needs more link reliability
2007 * for a given duration (milliseconds). The protocol is provided so the
2008 * driver can take the most appropriate actions.
2009 * @crit_proto_stop: Indicates critical protocol no longer needs increased link
2010 * reliability. This operation can not fail.
2005 */ 2011 */
2006struct cfg80211_ops { 2012struct cfg80211_ops {
2007 int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow); 2013 int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow);
@@ -2231,6 +2237,12 @@ struct cfg80211_ops {
2231 struct cfg80211_chan_def *chandef); 2237 struct cfg80211_chan_def *chandef);
2232 int (*update_ft_ies)(struct wiphy *wiphy, struct net_device *dev, 2238 int (*update_ft_ies)(struct wiphy *wiphy, struct net_device *dev,
2233 struct cfg80211_update_ft_ies_params *ftie); 2239 struct cfg80211_update_ft_ies_params *ftie);
2240 int (*crit_proto_start)(struct wiphy *wiphy,
2241 struct wireless_dev *wdev,
2242 enum nl80211_crit_proto_id protocol,
2243 u16 duration);
2244 void (*crit_proto_stop)(struct wiphy *wiphy,
2245 struct wireless_dev *wdev);
2234}; 2246};
2235 2247
2236/* 2248/*
@@ -4024,6 +4036,17 @@ bool cfg80211_reg_can_beacon(struct wiphy *wiphy,
4024void cfg80211_ch_switch_notify(struct net_device *dev, 4036void cfg80211_ch_switch_notify(struct net_device *dev,
4025 struct cfg80211_chan_def *chandef); 4037 struct cfg80211_chan_def *chandef);
4026 4038
4039/**
4040 * ieee80211_operating_class_to_band - convert operating class to band
4041 *
4042 * @operating_class: the operating class to convert
4043 * @band: band pointer to fill
4044 *
4045 * Returns %true if the conversion was successful, %false otherwise.
4046 */
4047bool ieee80211_operating_class_to_band(u8 operating_class,
4048 enum ieee80211_band *band);
4049
4027/* 4050/*
4028 * cfg80211_tdls_oper_request - request userspace to perform TDLS operation 4051 * cfg80211_tdls_oper_request - request userspace to perform TDLS operation
4029 * @dev: the device on which the operation is requested 4052 * @dev: the device on which the operation is requested
@@ -4126,6 +4149,17 @@ void cfg80211_report_wowlan_wakeup(struct wireless_dev *wdev,
4126 struct cfg80211_wowlan_wakeup *wakeup, 4149 struct cfg80211_wowlan_wakeup *wakeup,
4127 gfp_t gfp); 4150 gfp_t gfp);
4128 4151
4152/**
4153 * cfg80211_crit_proto_stopped() - indicate critical protocol stopped by driver.
4154 *
4155 * @wdev: the wireless device for which critical protocol is stopped.
4156 *
4157 * This function can be called by the driver to indicate it has reverted
4158 * operation back to normal. One reason could be that the duration given
4159 * by .crit_proto_start() has expired.
4160 */
4161void cfg80211_crit_proto_stopped(struct wireless_dev *wdev, gfp_t gfp);
4162
4129/* Logging, debugging and troubleshooting/diagnostic helpers. */ 4163/* Logging, debugging and troubleshooting/diagnostic helpers. */
4130 4164
4131/* wiphy_printk helpers, similar to dev_printk */ 4165/* wiphy_printk helpers, similar to dev_printk */
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 64faf015dd1e..04c2d4670dc6 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -128,6 +128,7 @@ enum ieee80211_ac_numbers {
128 * 2^n-1 in the range 1..32767] 128 * 2^n-1 in the range 1..32767]
129 * @cw_max: maximum contention window [like @cw_min] 129 * @cw_max: maximum contention window [like @cw_min]
130 * @txop: maximum burst time in units of 32 usecs, 0 meaning disabled 130 * @txop: maximum burst time in units of 32 usecs, 0 meaning disabled
131 * @acm: is mandatory admission control required for the access category
131 * @uapsd: is U-APSD mode enabled for the queue 132 * @uapsd: is U-APSD mode enabled for the queue
132 */ 133 */
133struct ieee80211_tx_queue_params { 134struct ieee80211_tx_queue_params {
@@ -135,6 +136,7 @@ struct ieee80211_tx_queue_params {
135 u16 cw_min; 136 u16 cw_min;
136 u16 cw_max; 137 u16 cw_max;
137 u8 aifs; 138 u8 aifs;
139 bool acm;
138 bool uapsd; 140 bool uapsd;
139}; 141};
140 142
@@ -209,7 +211,7 @@ struct ieee80211_chanctx_conf {
209 * @BSS_CHANGED_QOS: QoS for this association was enabled/disabled. Note 211 * @BSS_CHANGED_QOS: QoS for this association was enabled/disabled. Note
210 * that it is only ever disabled for station mode. 212 * that it is only ever disabled for station mode.
211 * @BSS_CHANGED_IDLE: Idle changed for this BSS/interface. 213 * @BSS_CHANGED_IDLE: Idle changed for this BSS/interface.
212 * @BSS_CHANGED_SSID: SSID changed for this BSS (AP mode) 214 * @BSS_CHANGED_SSID: SSID changed for this BSS (AP and IBSS mode)
213 * @BSS_CHANGED_AP_PROBE_RESP: Probe Response changed for this BSS (AP mode) 215 * @BSS_CHANGED_AP_PROBE_RESP: Probe Response changed for this BSS (AP mode)
214 * @BSS_CHANGED_PS: PS changed for this BSS (STA mode) 216 * @BSS_CHANGED_PS: PS changed for this BSS (STA mode)
215 * @BSS_CHANGED_TXPOWER: TX power setting changed for this interface 217 * @BSS_CHANGED_TXPOWER: TX power setting changed for this interface
@@ -326,7 +328,7 @@ enum ieee80211_rssi_event {
326 * your driver/device needs to do. 328 * your driver/device needs to do.
327 * @ps: power-save mode (STA only). This flag is NOT affected by 329 * @ps: power-save mode (STA only). This flag is NOT affected by
328 * offchannel/dynamic_ps operations. 330 * offchannel/dynamic_ps operations.
329 * @ssid: The SSID of the current vif. Only valid in AP-mode. 331 * @ssid: The SSID of the current vif. Valid in AP and IBSS mode.
330 * @ssid_len: Length of SSID given in @ssid. 332 * @ssid_len: Length of SSID given in @ssid.
331 * @hidden_ssid: The SSID of the current vif is hidden. Only valid in AP-mode. 333 * @hidden_ssid: The SSID of the current vif is hidden. Only valid in AP-mode.
332 * @txpower: TX power in dBm 334 * @txpower: TX power in dBm
@@ -561,6 +563,9 @@ enum mac80211_rate_control_flags {
561/* maximum number of rate stages */ 563/* maximum number of rate stages */
562#define IEEE80211_TX_MAX_RATES 4 564#define IEEE80211_TX_MAX_RATES 4
563 565
566/* maximum number of rate table entries */
567#define IEEE80211_TX_RATE_TABLE_SIZE 4
568
564/** 569/**
565 * struct ieee80211_tx_rate - rate selection/status 570 * struct ieee80211_tx_rate - rate selection/status
566 * 571 *
@@ -601,8 +606,8 @@ static inline void ieee80211_rate_set_vht(struct ieee80211_tx_rate *rate,
601 u8 mcs, u8 nss) 606 u8 mcs, u8 nss)
602{ 607{
603 WARN_ON(mcs & ~0xF); 608 WARN_ON(mcs & ~0xF);
604 WARN_ON(nss & ~0x7); 609 WARN_ON((nss - 1) & ~0x7);
605 rate->idx = (nss << 4) | mcs; 610 rate->idx = ((nss - 1) << 4) | mcs;
606} 611}
607 612
608static inline u8 613static inline u8
@@ -614,7 +619,7 @@ ieee80211_rate_get_vht_mcs(const struct ieee80211_tx_rate *rate)
614static inline u8 619static inline u8
615ieee80211_rate_get_vht_nss(const struct ieee80211_tx_rate *rate) 620ieee80211_rate_get_vht_nss(const struct ieee80211_tx_rate *rate)
616{ 621{
617 return rate->idx >> 4; 622 return (rate->idx >> 4) + 1;
618} 623}
619 624
620/** 625/**
@@ -655,7 +660,11 @@ struct ieee80211_tx_info {
655 struct ieee80211_tx_rate rates[ 660 struct ieee80211_tx_rate rates[
656 IEEE80211_TX_MAX_RATES]; 661 IEEE80211_TX_MAX_RATES];
657 s8 rts_cts_rate_idx; 662 s8 rts_cts_rate_idx;
658 /* 3 bytes free */ 663 u8 use_rts:1;
664 u8 use_cts_prot:1;
665 u8 short_preamble:1;
666 u8 skip_table:1;
667 /* 2 bytes free */
659 }; 668 };
660 /* only needed before rate control */ 669 /* only needed before rate control */
661 unsigned long jiffies; 670 unsigned long jiffies;
@@ -676,6 +685,8 @@ struct ieee80211_tx_info {
676 struct { 685 struct {
677 struct ieee80211_tx_rate driver_rates[ 686 struct ieee80211_tx_rate driver_rates[
678 IEEE80211_TX_MAX_RATES]; 687 IEEE80211_TX_MAX_RATES];
688 u8 pad[4];
689
679 void *rate_driver_data[ 690 void *rate_driver_data[
680 IEEE80211_TX_INFO_RATE_DRIVER_DATA_SIZE / sizeof(void *)]; 691 IEEE80211_TX_INFO_RATE_DRIVER_DATA_SIZE / sizeof(void *)];
681 }; 692 };
@@ -1017,13 +1028,13 @@ struct ieee80211_conf {
1017 * the driver passed into mac80211. 1028 * the driver passed into mac80211.
1018 * @block_tx: Indicates whether transmission must be blocked before the 1029 * @block_tx: Indicates whether transmission must be blocked before the
1019 * scheduled channel switch, as indicated by the AP. 1030 * scheduled channel switch, as indicated by the AP.
1020 * @channel: the new channel to switch to 1031 * @chandef: the new channel to switch to
1021 * @count: the number of TBTT's until the channel switch event 1032 * @count: the number of TBTT's until the channel switch event
1022 */ 1033 */
1023struct ieee80211_channel_switch { 1034struct ieee80211_channel_switch {
1024 u64 timestamp; 1035 u64 timestamp;
1025 bool block_tx; 1036 bool block_tx;
1026 struct ieee80211_channel *channel; 1037 struct cfg80211_chan_def chandef;
1027 u8 count; 1038 u8 count;
1028}; 1039};
1029 1040
@@ -1221,6 +1232,24 @@ enum ieee80211_sta_rx_bandwidth {
1221}; 1232};
1222 1233
1223/** 1234/**
1235 * struct ieee80211_sta_rates - station rate selection table
1236 *
1237 * @rcu_head: RCU head used for freeing the table on update
1238 * @rates: transmit rates/flags to be used by default.
1239 * Overriding entries per-packet is possible by using cb tx control.
1240 */
1241struct ieee80211_sta_rates {
1242 struct rcu_head rcu_head;
1243 struct {
1244 s8 idx;
1245 u8 count;
1246 u8 count_cts;
1247 u8 count_rts;
1248 u16 flags;
1249 } rate[IEEE80211_TX_RATE_TABLE_SIZE];
1250};
1251
1252/**
1224 * struct ieee80211_sta - station table entry 1253 * struct ieee80211_sta - station table entry
1225 * 1254 *
1226 * A station table entry represents a station we are possibly 1255 * A station table entry represents a station we are possibly
@@ -1247,6 +1276,7 @@ enum ieee80211_sta_rx_bandwidth {
1247 * notifications and capabilities. The value is only valid after 1276 * notifications and capabilities. The value is only valid after
1248 * the station moves to associated state. 1277 * the station moves to associated state.
1249 * @smps_mode: current SMPS mode (off, static or dynamic) 1278 * @smps_mode: current SMPS mode (off, static or dynamic)
1279 * @tx_rates: rate control selection table
1250 */ 1280 */
1251struct ieee80211_sta { 1281struct ieee80211_sta {
1252 u32 supp_rates[IEEE80211_NUM_BANDS]; 1282 u32 supp_rates[IEEE80211_NUM_BANDS];
@@ -1260,6 +1290,7 @@ struct ieee80211_sta {
1260 u8 rx_nss; 1290 u8 rx_nss;
1261 enum ieee80211_sta_rx_bandwidth bandwidth; 1291 enum ieee80211_sta_rx_bandwidth bandwidth;
1262 enum ieee80211_smps_mode smps_mode; 1292 enum ieee80211_smps_mode smps_mode;
1293 struct ieee80211_sta_rates __rcu *rates;
1263 1294
1264 /* must be last */ 1295 /* must be last */
1265 u8 drv_priv[0] __aligned(sizeof(void *)); 1296 u8 drv_priv[0] __aligned(sizeof(void *));
@@ -1415,6 +1446,9 @@ struct ieee80211_tx_control {
1415 * for different virtual interfaces. See the doc section on HW queue 1446 * for different virtual interfaces. See the doc section on HW queue
1416 * control for more details. 1447 * control for more details.
1417 * 1448 *
1449 * @IEEE80211_HW_SUPPORTS_RC_TABLE: The driver supports using a rate
1450 * selection table provided by the rate control algorithm.
1451 *
1418 * @IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF: Use the P2P Device address for any 1452 * @IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF: Use the P2P Device address for any
1419 * P2P Interface. This will be honoured even if more than one interface 1453 * P2P Interface. This will be honoured even if more than one interface
1420 * is supported. 1454 * is supported.
@@ -1447,6 +1481,7 @@ enum ieee80211_hw_flags {
1447 IEEE80211_HW_SUPPORTS_PER_STA_GTK = 1<<21, 1481 IEEE80211_HW_SUPPORTS_PER_STA_GTK = 1<<21,
1448 IEEE80211_HW_AP_LINK_PS = 1<<22, 1482 IEEE80211_HW_AP_LINK_PS = 1<<22,
1449 IEEE80211_HW_TX_AMPDU_SETUP_IN_HW = 1<<23, 1483 IEEE80211_HW_TX_AMPDU_SETUP_IN_HW = 1<<23,
1484 IEEE80211_HW_SUPPORTS_RC_TABLE = 1<<24,
1450 IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF = 1<<25, 1485 IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF = 1<<25,
1451 IEEE80211_HW_TIMING_BEACON_ONLY = 1<<26, 1486 IEEE80211_HW_TIMING_BEACON_ONLY = 1<<26,
1452}; 1487};
@@ -3133,6 +3168,25 @@ void ieee80211_sta_set_buffered(struct ieee80211_sta *sta,
3133 u8 tid, bool buffered); 3168 u8 tid, bool buffered);
3134 3169
3135/** 3170/**
3171 * ieee80211_get_tx_rates - get the selected transmit rates for a packet
3172 *
3173 * Call this function in a driver with per-packet rate selection support
3174 * to combine the rate info in the packet tx info with the most recent
3175 * rate selection table for the station entry.
3176 *
3177 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
3178 * @sta: the receiver station to which this packet is sent.
3179 * @skb: the frame to be transmitted.
3180 * @dest: buffer for extracted rate/retry information
3181 * @max_rates: maximum number of rates to fetch
3182 */
3183void ieee80211_get_tx_rates(struct ieee80211_vif *vif,
3184 struct ieee80211_sta *sta,
3185 struct sk_buff *skb,
3186 struct ieee80211_tx_rate *dest,
3187 int max_rates);
3188
3189/**
3136 * ieee80211_tx_status - transmit status callback 3190 * ieee80211_tx_status - transmit status callback
3137 * 3191 *
3138 * Call this function for all transmitted frames after they have been 3192 * Call this function for all transmitted frames after they have been
@@ -4107,7 +4161,7 @@ void ieee80211_send_bar(struct ieee80211_vif *vif, u8 *ra, u16 tid, u16 ssn);
4107 * (deprecated; this will be removed once drivers get updated to use 4161 * (deprecated; this will be removed once drivers get updated to use
4108 * rate_idx_mask) 4162 * rate_idx_mask)
4109 * @rate_idx_mask: user-requested (legacy) rate mask 4163 * @rate_idx_mask: user-requested (legacy) rate mask
4110 * @rate_idx_mcs_mask: user-requested MCS rate mask 4164 * @rate_idx_mcs_mask: user-requested MCS rate mask (NULL if not in use)
4111 * @bss: whether this frame is sent out in AP or IBSS mode 4165 * @bss: whether this frame is sent out in AP or IBSS mode
4112 */ 4166 */
4113struct ieee80211_tx_rate_control { 4167struct ieee80211_tx_rate_control {
@@ -4119,7 +4173,7 @@ struct ieee80211_tx_rate_control {
4119 bool rts, short_preamble; 4173 bool rts, short_preamble;
4120 u8 max_rate_idx; 4174 u8 max_rate_idx;
4121 u32 rate_idx_mask; 4175 u32 rate_idx_mask;
4122 u8 rate_idx_mcs_mask[IEEE80211_HT_MCS_MASK_LEN]; 4176 u8 *rate_idx_mcs_mask;
4123 bool bss; 4177 bool bss;
4124}; 4178};
4125 4179
@@ -4208,6 +4262,22 @@ bool rate_usable_index_exists(struct ieee80211_supported_band *sband,
4208 return false; 4262 return false;
4209} 4263}
4210 4264
4265/**
4266 * rate_control_set_rates - pass the sta rate selection to mac80211/driver
4267 *
4268 * When not doing a rate control probe to test rates, rate control should pass
4269 * its rate selection to mac80211. If the driver supports receiving a station
4270 * rate table, it will use it to ensure that frames are always sent based on
4271 * the most recent rate control module decision.
4272 *
4273 * @hw: pointer as obtained from ieee80211_alloc_hw()
4274 * @pubsta: &struct ieee80211_sta pointer to the target destination.
4275 * @rates: new tx rate set to be used for this station.
4276 */
4277int rate_control_set_rates(struct ieee80211_hw *hw,
4278 struct ieee80211_sta *pubsta,
4279 struct ieee80211_sta_rates *rates);
4280
4211int ieee80211_rate_control_register(struct rate_control_ops *ops); 4281int ieee80211_rate_control_register(struct rate_control_ops *ops);
4212void ieee80211_rate_control_unregister(struct rate_control_ops *ops); 4282void ieee80211_rate_control_unregister(struct rate_control_ops *ops);
4213 4283