diff options
author | John W. Linville <linville@tuxdriver.com> | 2013-04-22 14:58:14 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-04-22 14:58:14 -0400 |
commit | 6475cb05ee17870c7c8d44146dbe09044e6db33d (patch) | |
tree | 68fc82e4b9c4c4a1b261869add66bef3ee054926 /include/net | |
parent | e563589f7187699b0217854467d857f53b29cc50 (diff) | |
parent | 1eb32179f0593051e7536378a879f5bdd108416a (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.h | 34 | ||||
-rw-r--r-- | include/net/mac80211.h | 90 |
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 | */ |
2006 | struct cfg80211_ops { | 2012 | struct 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, | |||
4024 | void cfg80211_ch_switch_notify(struct net_device *dev, | 4036 | void 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 | */ | ||
4047 | bool 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 | */ | ||
4161 | void 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 | */ |
133 | struct ieee80211_tx_queue_params { | 134 | struct 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 | ||
608 | static inline u8 | 613 | static inline u8 |
@@ -614,7 +619,7 @@ ieee80211_rate_get_vht_mcs(const struct ieee80211_tx_rate *rate) | |||
614 | static inline u8 | 619 | static inline u8 |
615 | ieee80211_rate_get_vht_nss(const struct ieee80211_tx_rate *rate) | 620 | ieee80211_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 | */ |
1023 | struct ieee80211_channel_switch { | 1034 | struct 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 | */ | ||
1241 | struct 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 | */ |
1251 | struct ieee80211_sta { | 1281 | struct 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 | */ | ||
3183 | void 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 | */ |
4113 | struct ieee80211_tx_rate_control { | 4167 | struct 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 | */ | ||
4277 | int rate_control_set_rates(struct ieee80211_hw *hw, | ||
4278 | struct ieee80211_sta *pubsta, | ||
4279 | struct ieee80211_sta_rates *rates); | ||
4280 | |||
4211 | int ieee80211_rate_control_register(struct rate_control_ops *ops); | 4281 | int ieee80211_rate_control_register(struct rate_control_ops *ops); |
4212 | void ieee80211_rate_control_unregister(struct rate_control_ops *ops); | 4282 | void ieee80211_rate_control_unregister(struct rate_control_ops *ops); |
4213 | 4283 | ||