aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/mac80211.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net/mac80211.h')
-rw-r--r--include/net/mac80211.h145
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 */
150enum ieee80211_bss_change { 153enum 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 */
203struct ieee80211_bss_conf { 227struct 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 */
608enum ieee80211_conf_flags { 633enum 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 */
629enum ieee80211_conf_changed { 653enum 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 */
699struct ieee80211_conf { 719struct 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 */
892enum sta_notify_cmd { 908enum 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 */
1018enum ieee80211_hw_flags { 1036enum 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,
2307int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid); 2334int 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 */
2318void 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 */
2330void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra, 2346void 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 */
2345int ieee80211_stop_tx_ba_session(struct ieee80211_sta *sta, u16 tid, 2360int 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 */
2357void 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 */
2369void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra, 2372void 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);
2460void ieee80211_connection_loss(struct ieee80211_vif *vif); 2463void 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 */
2481void 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 */
2493void 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 *