diff options
Diffstat (limited to 'include/net/mac80211.h')
-rw-r--r-- | include/net/mac80211.h | 145 |
1 files changed, 89 insertions, 56 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index de22cbfef23..b0787a1dea9 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -146,6 +146,9 @@ struct ieee80211_low_level_stats { | |||
146 | * enabled/disabled (beaconing modes) | 146 | * enabled/disabled (beaconing modes) |
147 | * @BSS_CHANGED_CQM: Connection quality monitor config changed | 147 | * @BSS_CHANGED_CQM: Connection quality monitor config changed |
148 | * @BSS_CHANGED_IBSS: IBSS join status changed | 148 | * @BSS_CHANGED_IBSS: IBSS join status changed |
149 | * @BSS_CHANGED_ARP_FILTER: Hardware ARP filter address list or state changed. | ||
150 | * @BSS_CHANGED_QOS: QoS for this association was enabled/disabled. Note | ||
151 | * that it is only ever disabled for station mode. | ||
149 | */ | 152 | */ |
150 | enum ieee80211_bss_change { | 153 | enum ieee80211_bss_change { |
151 | BSS_CHANGED_ASSOC = 1<<0, | 154 | BSS_CHANGED_ASSOC = 1<<0, |
@@ -160,10 +163,19 @@ enum ieee80211_bss_change { | |||
160 | BSS_CHANGED_BEACON_ENABLED = 1<<9, | 163 | BSS_CHANGED_BEACON_ENABLED = 1<<9, |
161 | BSS_CHANGED_CQM = 1<<10, | 164 | BSS_CHANGED_CQM = 1<<10, |
162 | BSS_CHANGED_IBSS = 1<<11, | 165 | BSS_CHANGED_IBSS = 1<<11, |
166 | BSS_CHANGED_ARP_FILTER = 1<<12, | ||
167 | BSS_CHANGED_QOS = 1<<13, | ||
163 | 168 | ||
164 | /* when adding here, make sure to change ieee80211_reconfig */ | 169 | /* when adding here, make sure to change ieee80211_reconfig */ |
165 | }; | 170 | }; |
166 | 171 | ||
172 | /* | ||
173 | * The maximum number of IPv4 addresses listed for ARP filtering. If the number | ||
174 | * of addresses for an interface increase beyond this value, hardware ARP | ||
175 | * filtering will be disabled. | ||
176 | */ | ||
177 | #define IEEE80211_BSS_ARP_ADDR_LIST_LEN 4 | ||
178 | |||
167 | /** | 179 | /** |
168 | * struct ieee80211_bss_conf - holds the BSS's changing parameters | 180 | * struct ieee80211_bss_conf - holds the BSS's changing parameters |
169 | * | 181 | * |
@@ -182,7 +194,9 @@ enum ieee80211_bss_change { | |||
182 | * if the hardware cannot handle this it must set the | 194 | * if the hardware cannot handle this it must set the |
183 | * IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE hardware flag | 195 | * IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE hardware flag |
184 | * @dtim_period: num of beacons before the next DTIM, for beaconing, | 196 | * @dtim_period: num of beacons before the next DTIM, for beaconing, |
185 | * not valid in station mode (cf. hw conf ps_dtim_period) | 197 | * valid in station mode only while @assoc is true and if also |
198 | * requested by %IEEE80211_HW_NEED_DTIM_PERIOD (cf. also hw conf | ||
199 | * @ps_dtim_period) | ||
186 | * @timestamp: beacon timestamp | 200 | * @timestamp: beacon timestamp |
187 | * @beacon_int: beacon interval | 201 | * @beacon_int: beacon interval |
188 | * @assoc_capability: capabilities taken from assoc resp | 202 | * @assoc_capability: capabilities taken from assoc resp |
@@ -199,6 +213,16 @@ enum ieee80211_bss_change { | |||
199 | * @cqm_rssi_thold: Connection quality monitor RSSI threshold, a zero value | 213 | * @cqm_rssi_thold: Connection quality monitor RSSI threshold, a zero value |
200 | * implies disabled | 214 | * implies disabled |
201 | * @cqm_rssi_hyst: Connection quality monitor RSSI hysteresis | 215 | * @cqm_rssi_hyst: Connection quality monitor RSSI hysteresis |
216 | * @arp_addr_list: List of IPv4 addresses for hardware ARP filtering. The | ||
217 | * may filter ARP queries targeted for other addresses than listed here. | ||
218 | * The driver must allow ARP queries targeted for all address listed here | ||
219 | * to pass through. An empty list implies no ARP queries need to pass. | ||
220 | * @arp_addr_cnt: Number of addresses currently on the list. | ||
221 | * @arp_filter_enabled: Enable ARP filtering - if enabled, the hardware may | ||
222 | * filter ARP queries based on the @arp_addr_list, if disabled, the | ||
223 | * hardware must not perform any ARP filtering. Note, that the filter will | ||
224 | * be enabled also in promiscuous mode. | ||
225 | * @qos: This is a QoS-enabled BSS. | ||
202 | */ | 226 | */ |
203 | struct ieee80211_bss_conf { | 227 | struct ieee80211_bss_conf { |
204 | const u8 *bssid; | 228 | const u8 *bssid; |
@@ -219,6 +243,10 @@ struct ieee80211_bss_conf { | |||
219 | s32 cqm_rssi_thold; | 243 | s32 cqm_rssi_thold; |
220 | u32 cqm_rssi_hyst; | 244 | u32 cqm_rssi_hyst; |
221 | enum nl80211_channel_type channel_type; | 245 | enum nl80211_channel_type channel_type; |
246 | __be32 arp_addr_list[IEEE80211_BSS_ARP_ADDR_LIST_LEN]; | ||
247 | u8 arp_addr_cnt; | ||
248 | bool arp_filter_enabled; | ||
249 | bool qos; | ||
222 | }; | 250 | }; |
223 | 251 | ||
224 | /** | 252 | /** |
@@ -312,9 +340,10 @@ enum mac80211_tx_control_flags { | |||
312 | IEEE80211_TX_INTFL_NL80211_FRAME_TX = BIT(21), | 340 | IEEE80211_TX_INTFL_NL80211_FRAME_TX = BIT(21), |
313 | IEEE80211_TX_CTL_LDPC = BIT(22), | 341 | IEEE80211_TX_CTL_LDPC = BIT(22), |
314 | IEEE80211_TX_CTL_STBC = BIT(23) | BIT(24), | 342 | IEEE80211_TX_CTL_STBC = BIT(23) | BIT(24), |
315 | #define IEEE80211_TX_CTL_STBC_SHIFT 23 | ||
316 | }; | 343 | }; |
317 | 344 | ||
345 | #define IEEE80211_TX_CTL_STBC_SHIFT 23 | ||
346 | |||
318 | /** | 347 | /** |
319 | * enum mac80211_rate_control_flags - per-rate flags set by the | 348 | * enum mac80211_rate_control_flags - per-rate flags set by the |
320 | * Rate Control algorithm. | 349 | * Rate Control algorithm. |
@@ -390,7 +419,7 @@ struct ieee80211_tx_rate { | |||
390 | s8 idx; | 419 | s8 idx; |
391 | u8 count; | 420 | u8 count; |
392 | u8 flags; | 421 | u8 flags; |
393 | } __attribute__((packed)); | 422 | } __packed; |
394 | 423 | ||
395 | /** | 424 | /** |
396 | * struct ieee80211_tx_info - skb transmit information | 425 | * struct ieee80211_tx_info - skb transmit information |
@@ -412,8 +441,6 @@ struct ieee80211_tx_rate { | |||
412 | * @driver_data: array of driver_data pointers | 441 | * @driver_data: array of driver_data pointers |
413 | * @ampdu_ack_len: number of acked aggregated frames. | 442 | * @ampdu_ack_len: number of acked aggregated frames. |
414 | * relevant only if IEEE80211_TX_STAT_AMPDU was set. | 443 | * relevant only if IEEE80211_TX_STAT_AMPDU was set. |
415 | * @ampdu_ack_map: block ack bit map for the aggregation. | ||
416 | * relevant only if IEEE80211_TX_STAT_AMPDU was set. | ||
417 | * @ampdu_len: number of aggregated frames. | 444 | * @ampdu_len: number of aggregated frames. |
418 | * relevant only if IEEE80211_TX_STAT_AMPDU was set. | 445 | * relevant only if IEEE80211_TX_STAT_AMPDU was set. |
419 | * @ack_signal: signal strength of the ACK frame | 446 | * @ack_signal: signal strength of the ACK frame |
@@ -448,10 +475,9 @@ struct ieee80211_tx_info { | |||
448 | struct { | 475 | struct { |
449 | struct ieee80211_tx_rate rates[IEEE80211_TX_MAX_RATES]; | 476 | struct ieee80211_tx_rate rates[IEEE80211_TX_MAX_RATES]; |
450 | u8 ampdu_ack_len; | 477 | u8 ampdu_ack_len; |
451 | u64 ampdu_ack_map; | ||
452 | int ack_signal; | 478 | int ack_signal; |
453 | u8 ampdu_len; | 479 | u8 ampdu_len; |
454 | /* 7 bytes free */ | 480 | /* 15 bytes free */ |
455 | } status; | 481 | } status; |
456 | struct { | 482 | struct { |
457 | struct ieee80211_tx_rate driver_rates[ | 483 | struct ieee80211_tx_rate driver_rates[ |
@@ -601,15 +627,14 @@ struct ieee80211_rx_status { | |||
601 | * may turn the device off as much as possible. Typically, this flag will | 627 | * may turn the device off as much as possible. Typically, this flag will |
602 | * be set when an interface is set UP but not associated or scanning, but | 628 | * be set when an interface is set UP but not associated or scanning, but |
603 | * it can also be unset in that case when monitor interfaces are active. | 629 | * it can also be unset in that case when monitor interfaces are active. |
604 | * @IEEE80211_CONF_QOS: Enable 802.11e QoS also know as WMM (Wireless | 630 | * @IEEE80211_CONF_OFFCHANNEL: The device is currently not on its main |
605 | * Multimedia). On some drivers (iwlwifi is one of know) we have | 631 | * operating channel. |
606 | * to enable/disable QoS explicitly. | ||
607 | */ | 632 | */ |
608 | enum ieee80211_conf_flags { | 633 | enum ieee80211_conf_flags { |
609 | IEEE80211_CONF_MONITOR = (1<<0), | 634 | IEEE80211_CONF_MONITOR = (1<<0), |
610 | IEEE80211_CONF_PS = (1<<1), | 635 | IEEE80211_CONF_PS = (1<<1), |
611 | IEEE80211_CONF_IDLE = (1<<2), | 636 | IEEE80211_CONF_IDLE = (1<<2), |
612 | IEEE80211_CONF_QOS = (1<<3), | 637 | IEEE80211_CONF_OFFCHANNEL = (1<<3), |
613 | }; | 638 | }; |
614 | 639 | ||
615 | 640 | ||
@@ -624,7 +649,6 @@ enum ieee80211_conf_flags { | |||
624 | * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed | 649 | * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed |
625 | * @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed | 650 | * @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed |
626 | * @IEEE80211_CONF_CHANGE_SMPS: Spatial multiplexing powersave mode changed | 651 | * @IEEE80211_CONF_CHANGE_SMPS: Spatial multiplexing powersave mode changed |
627 | * @IEEE80211_CONF_CHANGE_QOS: Quality of service was enabled or disabled | ||
628 | */ | 652 | */ |
629 | enum ieee80211_conf_changed { | 653 | enum ieee80211_conf_changed { |
630 | IEEE80211_CONF_CHANGE_SMPS = BIT(1), | 654 | IEEE80211_CONF_CHANGE_SMPS = BIT(1), |
@@ -635,7 +659,6 @@ enum ieee80211_conf_changed { | |||
635 | IEEE80211_CONF_CHANGE_CHANNEL = BIT(6), | 659 | IEEE80211_CONF_CHANGE_CHANNEL = BIT(6), |
636 | IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7), | 660 | IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7), |
637 | IEEE80211_CONF_CHANGE_IDLE = BIT(8), | 661 | IEEE80211_CONF_CHANGE_IDLE = BIT(8), |
638 | IEEE80211_CONF_CHANGE_QOS = BIT(9), | ||
639 | }; | 662 | }; |
640 | 663 | ||
641 | /** | 664 | /** |
@@ -676,9 +699,6 @@ enum ieee80211_smps_mode { | |||
676 | * @dynamic_ps_timeout: The dynamic powersave timeout (in ms), see the | 699 | * @dynamic_ps_timeout: The dynamic powersave timeout (in ms), see the |
677 | * powersave documentation below. This variable is valid only when | 700 | * powersave documentation below. This variable is valid only when |
678 | * the CONF_PS flag is set. | 701 | * the CONF_PS flag is set. |
679 | * @dynamic_ps_forced_timeout: The dynamic powersave timeout (in ms) configured | ||
680 | * by cfg80211 (essentially, wext) If set, this value overrules the value | ||
681 | * chosen by mac80211 based on ps qos network latency. | ||
682 | * | 702 | * |
683 | * @power_level: requested transmit power (in dBm) | 703 | * @power_level: requested transmit power (in dBm) |
684 | * | 704 | * |
@@ -698,7 +718,7 @@ enum ieee80211_smps_mode { | |||
698 | */ | 718 | */ |
699 | struct ieee80211_conf { | 719 | struct ieee80211_conf { |
700 | u32 flags; | 720 | u32 flags; |
701 | int power_level, dynamic_ps_timeout, dynamic_ps_forced_timeout; | 721 | int power_level, dynamic_ps_timeout; |
702 | int max_sleep_period; | 722 | int max_sleep_period; |
703 | 723 | ||
704 | u16 listen_interval; | 724 | u16 listen_interval; |
@@ -815,7 +835,6 @@ enum ieee80211_key_flags { | |||
815 | * encrypted in hardware. | 835 | * encrypted in hardware. |
816 | * @alg: The key algorithm. | 836 | * @alg: The key algorithm. |
817 | * @flags: key flags, see &enum ieee80211_key_flags. | 837 | * @flags: key flags, see &enum ieee80211_key_flags. |
818 | * @ap_addr: AP's MAC address | ||
819 | * @keyidx: the key index (0-3) | 838 | * @keyidx: the key index (0-3) |
820 | * @keylen: key material length | 839 | * @keylen: key material length |
821 | * @key: key material. For ALG_TKIP the key is encoded as a 256-bit (32 byte) | 840 | * @key: key material. For ALG_TKIP the key is encoded as a 256-bit (32 byte) |
@@ -881,16 +900,12 @@ struct ieee80211_sta { | |||
881 | * enum sta_notify_cmd - sta notify command | 900 | * enum sta_notify_cmd - sta notify command |
882 | * | 901 | * |
883 | * Used with the sta_notify() callback in &struct ieee80211_ops, this | 902 | * Used with the sta_notify() callback in &struct ieee80211_ops, this |
884 | * indicates addition and removal of a station to station table, | 903 | * indicates if an associated station made a power state transition. |
885 | * or if a associated station made a power state transition. | ||
886 | * | 904 | * |
887 | * @STA_NOTIFY_ADD: (DEPRECATED) a station was added to the station table | ||
888 | * @STA_NOTIFY_REMOVE: (DEPRECATED) a station being removed from the station table | ||
889 | * @STA_NOTIFY_SLEEP: a station is now sleeping | 905 | * @STA_NOTIFY_SLEEP: a station is now sleeping |
890 | * @STA_NOTIFY_AWAKE: a sleeping station woke up | 906 | * @STA_NOTIFY_AWAKE: a sleeping station woke up |
891 | */ | 907 | */ |
892 | enum sta_notify_cmd { | 908 | enum sta_notify_cmd { |
893 | STA_NOTIFY_ADD, STA_NOTIFY_REMOVE, | ||
894 | STA_NOTIFY_SLEEP, STA_NOTIFY_AWAKE, | 909 | STA_NOTIFY_SLEEP, STA_NOTIFY_AWAKE, |
895 | }; | 910 | }; |
896 | 911 | ||
@@ -1014,6 +1029,9 @@ enum ieee80211_tkip_key_type { | |||
1014 | * connection quality related parameters, such as the RSSI level and | 1029 | * connection quality related parameters, such as the RSSI level and |
1015 | * provide notifications if configured trigger levels are reached. | 1030 | * provide notifications if configured trigger levels are reached. |
1016 | * | 1031 | * |
1032 | * @IEEE80211_HW_NEED_DTIM_PERIOD: | ||
1033 | * This device needs to know the DTIM period for the BSS before | ||
1034 | * associating. | ||
1017 | */ | 1035 | */ |
1018 | enum ieee80211_hw_flags { | 1036 | enum ieee80211_hw_flags { |
1019 | IEEE80211_HW_HAS_RATE_CONTROL = 1<<0, | 1037 | IEEE80211_HW_HAS_RATE_CONTROL = 1<<0, |
@@ -1023,7 +1041,7 @@ enum ieee80211_hw_flags { | |||
1023 | IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE = 1<<4, | 1041 | IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE = 1<<4, |
1024 | IEEE80211_HW_SIGNAL_UNSPEC = 1<<5, | 1042 | IEEE80211_HW_SIGNAL_UNSPEC = 1<<5, |
1025 | IEEE80211_HW_SIGNAL_DBM = 1<<6, | 1043 | IEEE80211_HW_SIGNAL_DBM = 1<<6, |
1026 | /* use this hole */ | 1044 | IEEE80211_HW_NEED_DTIM_PERIOD = 1<<7, |
1027 | IEEE80211_HW_SPECTRUM_MGMT = 1<<8, | 1045 | IEEE80211_HW_SPECTRUM_MGMT = 1<<8, |
1028 | IEEE80211_HW_AMPDU_AGGREGATION = 1<<9, | 1046 | IEEE80211_HW_AMPDU_AGGREGATION = 1<<9, |
1029 | IEEE80211_HW_SUPPORTS_PS = 1<<10, | 1047 | IEEE80211_HW_SUPPORTS_PS = 1<<10, |
@@ -1260,6 +1278,15 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw, | |||
1260 | * dynamic PS feature in stack and will just keep %IEEE80211_CONF_PS | 1278 | * dynamic PS feature in stack and will just keep %IEEE80211_CONF_PS |
1261 | * enabled whenever user has enabled powersave. | 1279 | * enabled whenever user has enabled powersave. |
1262 | * | 1280 | * |
1281 | * Some hardware need to toggle a single shared antenna between WLAN and | ||
1282 | * Bluetooth to facilitate co-existence. These types of hardware set | ||
1283 | * limitations on the use of host controlled dynamic powersave whenever there | ||
1284 | * is simultaneous WLAN and Bluetooth traffic. For these types of hardware, the | ||
1285 | * driver may request temporarily going into full power save, in order to | ||
1286 | * enable toggling the antenna between BT and WLAN. If the driver requests | ||
1287 | * disabling dynamic powersave, the @dynamic_ps_timeout value will be | ||
1288 | * temporarily set to zero until the driver re-enables dynamic powersave. | ||
1289 | * | ||
1263 | * Driver informs U-APSD client support by enabling | 1290 | * Driver informs U-APSD client support by enabling |
1264 | * %IEEE80211_HW_SUPPORTS_UAPSD flag. The mode is configured through the | 1291 | * %IEEE80211_HW_SUPPORTS_UAPSD flag. The mode is configured through the |
1265 | * uapsd paramater in conf_tx() operation. Hardware needs to send the QoS | 1292 | * uapsd paramater in conf_tx() operation. Hardware needs to send the QoS |
@@ -1451,7 +1478,7 @@ enum ieee80211_filter_flags { | |||
1451 | * | 1478 | * |
1452 | * Note that drivers MUST be able to deal with a TX aggregation | 1479 | * Note that drivers MUST be able to deal with a TX aggregation |
1453 | * session being stopped even before they OK'ed starting it by | 1480 | * session being stopped even before they OK'ed starting it by |
1454 | * calling ieee80211_start_tx_ba_cb(_irqsafe), because the peer | 1481 | * calling ieee80211_start_tx_ba_cb_irqsafe, because the peer |
1455 | * might receive the addBA frame and send a delBA right away! | 1482 | * might receive the addBA frame and send a delBA right away! |
1456 | * | 1483 | * |
1457 | * @IEEE80211_AMPDU_RX_START: start Rx aggregation | 1484 | * @IEEE80211_AMPDU_RX_START: start Rx aggregation |
@@ -1636,7 +1663,7 @@ enum ieee80211_ampdu_mlme_action { | |||
1636 | * is the first frame we expect to perform the action on. Notice | 1663 | * is the first frame we expect to perform the action on. Notice |
1637 | * that TX/RX_STOP can pass NULL for this parameter. | 1664 | * that TX/RX_STOP can pass NULL for this parameter. |
1638 | * Returns a negative error code on failure. | 1665 | * Returns a negative error code on failure. |
1639 | * The callback must be atomic. | 1666 | * The callback can sleep. |
1640 | * | 1667 | * |
1641 | * @get_survey: Return per-channel survey information | 1668 | * @get_survey: Return per-channel survey information |
1642 | * | 1669 | * |
@@ -2307,25 +2334,14 @@ void ieee80211_queue_delayed_work(struct ieee80211_hw *hw, | |||
2307 | int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid); | 2334 | int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid); |
2308 | 2335 | ||
2309 | /** | 2336 | /** |
2310 | * ieee80211_start_tx_ba_cb - low level driver ready to aggregate. | ||
2311 | * @vif: &struct ieee80211_vif pointer from the add_interface callback | ||
2312 | * @ra: receiver address of the BA session recipient. | ||
2313 | * @tid: the TID to BA on. | ||
2314 | * | ||
2315 | * This function must be called by low level driver once it has | ||
2316 | * finished with preparations for the BA session. | ||
2317 | */ | ||
2318 | void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid); | ||
2319 | |||
2320 | /** | ||
2321 | * ieee80211_start_tx_ba_cb_irqsafe - low level driver ready to aggregate. | 2337 | * ieee80211_start_tx_ba_cb_irqsafe - low level driver ready to aggregate. |
2322 | * @vif: &struct ieee80211_vif pointer from the add_interface callback | 2338 | * @vif: &struct ieee80211_vif pointer from the add_interface callback |
2323 | * @ra: receiver address of the BA session recipient. | 2339 | * @ra: receiver address of the BA session recipient. |
2324 | * @tid: the TID to BA on. | 2340 | * @tid: the TID to BA on. |
2325 | * | 2341 | * |
2326 | * This function must be called by low level driver once it has | 2342 | * This function must be called by low level driver once it has |
2327 | * finished with preparations for the BA session. | 2343 | * finished with preparations for the BA session. It can be called |
2328 | * This version of the function is IRQ-safe. | 2344 | * from any context. |
2329 | */ | 2345 | */ |
2330 | void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra, | 2346 | void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra, |
2331 | u16 tid); | 2347 | u16 tid); |
@@ -2334,27 +2350,14 @@ void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra, | |||
2334 | * ieee80211_stop_tx_ba_session - Stop a Block Ack session. | 2350 | * ieee80211_stop_tx_ba_session - Stop a Block Ack session. |
2335 | * @sta: the station whose BA session to stop | 2351 | * @sta: the station whose BA session to stop |
2336 | * @tid: the TID to stop BA. | 2352 | * @tid: the TID to stop BA. |
2337 | * @initiator: if indicates initiator DELBA frame will be sent. | ||
2338 | * | 2353 | * |
2339 | * Return: error if no sta with matching da found, success otherwise | 2354 | * Return: negative error if the TID is invalid, or no aggregation active |
2340 | * | 2355 | * |
2341 | * Although mac80211/low level driver/user space application can estimate | 2356 | * Although mac80211/low level driver/user space application can estimate |
2342 | * the need to stop aggregation on a certain RA/TID, the session level | 2357 | * the need to stop aggregation on a certain RA/TID, the session level |
2343 | * will be managed by the mac80211. | 2358 | * will be managed by the mac80211. |
2344 | */ | 2359 | */ |
2345 | int ieee80211_stop_tx_ba_session(struct ieee80211_sta *sta, u16 tid, | 2360 | int ieee80211_stop_tx_ba_session(struct ieee80211_sta *sta, u16 tid); |
2346 | enum ieee80211_back_parties initiator); | ||
2347 | |||
2348 | /** | ||
2349 | * ieee80211_stop_tx_ba_cb - low level driver ready to stop aggregate. | ||
2350 | * @vif: &struct ieee80211_vif pointer from the add_interface callback | ||
2351 | * @ra: receiver address of the BA session recipient. | ||
2352 | * @tid: the desired TID to BA on. | ||
2353 | * | ||
2354 | * This function must be called by low level driver once it has | ||
2355 | * finished with preparations for the BA session tear down. | ||
2356 | */ | ||
2357 | void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid); | ||
2358 | 2361 | ||
2359 | /** | 2362 | /** |
2360 | * ieee80211_stop_tx_ba_cb_irqsafe - low level driver ready to stop aggregate. | 2363 | * ieee80211_stop_tx_ba_cb_irqsafe - low level driver ready to stop aggregate. |
@@ -2363,8 +2366,8 @@ void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid); | |||
2363 | * @tid: the desired TID to BA on. | 2366 | * @tid: the desired TID to BA on. |
2364 | * | 2367 | * |
2365 | * This function must be called by low level driver once it has | 2368 | * This function must be called by low level driver once it has |
2366 | * finished with preparations for the BA session tear down. | 2369 | * finished with preparations for the BA session tear down. It |
2367 | * This version of the function is IRQ-safe. | 2370 | * can be called from any context. |
2368 | */ | 2371 | */ |
2369 | void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra, | 2372 | void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra, |
2370 | u16 tid); | 2373 | u16 tid); |
@@ -2460,6 +2463,36 @@ void ieee80211_beacon_loss(struct ieee80211_vif *vif); | |||
2460 | void ieee80211_connection_loss(struct ieee80211_vif *vif); | 2463 | void ieee80211_connection_loss(struct ieee80211_vif *vif); |
2461 | 2464 | ||
2462 | /** | 2465 | /** |
2466 | * ieee80211_disable_dyn_ps - force mac80211 to temporarily disable dynamic psm | ||
2467 | * | ||
2468 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. | ||
2469 | * | ||
2470 | * Some hardware require full power save to manage simultaneous BT traffic | ||
2471 | * on the WLAN frequency. Full PSM is required periodically, whenever there are | ||
2472 | * burst of BT traffic. The hardware gets information of BT traffic via | ||
2473 | * hardware co-existence lines, and consequentially requests mac80211 to | ||
2474 | * (temporarily) enter full psm. | ||
2475 | * This function will only temporarily disable dynamic PS, not enable PSM if | ||
2476 | * it was not already enabled. | ||
2477 | * The driver must make sure to re-enable dynamic PS using | ||
2478 | * ieee80211_enable_dyn_ps() if the driver has disabled it. | ||
2479 | * | ||
2480 | */ | ||
2481 | void ieee80211_disable_dyn_ps(struct ieee80211_vif *vif); | ||
2482 | |||
2483 | /** | ||
2484 | * ieee80211_enable_dyn_ps - restore dynamic psm after being disabled | ||
2485 | * | ||
2486 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. | ||
2487 | * | ||
2488 | * This function restores dynamic PS after being temporarily disabled via | ||
2489 | * ieee80211_disable_dyn_ps(). Each ieee80211_disable_dyn_ps() call must | ||
2490 | * be coupled with an eventual call to this function. | ||
2491 | * | ||
2492 | */ | ||
2493 | void ieee80211_enable_dyn_ps(struct ieee80211_vif *vif); | ||
2494 | |||
2495 | /** | ||
2463 | * ieee80211_cqm_rssi_notify - inform a configured connection quality monitoring | 2496 | * ieee80211_cqm_rssi_notify - inform a configured connection quality monitoring |
2464 | * rssi threshold triggered | 2497 | * rssi threshold triggered |
2465 | * | 2498 | * |