diff options
Diffstat (limited to 'include/net/mac80211.h')
-rw-r--r-- | include/net/mac80211.h | 149 |
1 files changed, 131 insertions, 18 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 45d7d44d7cbe..5be900d19660 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -144,6 +144,8 @@ struct ieee80211_low_level_stats { | |||
144 | * new beacon (beaconing modes) | 144 | * new beacon (beaconing modes) |
145 | * @BSS_CHANGED_BEACON_ENABLED: Beaconing should be | 145 | * @BSS_CHANGED_BEACON_ENABLED: Beaconing should be |
146 | * enabled/disabled (beaconing modes) | 146 | * enabled/disabled (beaconing modes) |
147 | * @BSS_CHANGED_CQM: Connection quality monitor config changed | ||
148 | * @BSS_CHANGED_IBSS: IBSS join status changed | ||
147 | */ | 149 | */ |
148 | enum ieee80211_bss_change { | 150 | enum ieee80211_bss_change { |
149 | BSS_CHANGED_ASSOC = 1<<0, | 151 | BSS_CHANGED_ASSOC = 1<<0, |
@@ -156,6 +158,10 @@ enum ieee80211_bss_change { | |||
156 | BSS_CHANGED_BSSID = 1<<7, | 158 | BSS_CHANGED_BSSID = 1<<7, |
157 | BSS_CHANGED_BEACON = 1<<8, | 159 | BSS_CHANGED_BEACON = 1<<8, |
158 | BSS_CHANGED_BEACON_ENABLED = 1<<9, | 160 | BSS_CHANGED_BEACON_ENABLED = 1<<9, |
161 | BSS_CHANGED_CQM = 1<<10, | ||
162 | BSS_CHANGED_IBSS = 1<<11, | ||
163 | |||
164 | /* when adding here, make sure to change ieee80211_reconfig */ | ||
159 | }; | 165 | }; |
160 | 166 | ||
161 | /** | 167 | /** |
@@ -165,6 +171,8 @@ enum ieee80211_bss_change { | |||
165 | * to that BSS) that can change during the lifetime of the BSS. | 171 | * to that BSS) that can change during the lifetime of the BSS. |
166 | * | 172 | * |
167 | * @assoc: association status | 173 | * @assoc: association status |
174 | * @ibss_joined: indicates whether this station is part of an IBSS | ||
175 | * or not | ||
168 | * @aid: association ID number, valid only when @assoc is true | 176 | * @aid: association ID number, valid only when @assoc is true |
169 | * @use_cts_prot: use CTS protection | 177 | * @use_cts_prot: use CTS protection |
170 | * @use_short_preamble: use 802.11b short preamble; | 178 | * @use_short_preamble: use 802.11b short preamble; |
@@ -183,13 +191,19 @@ enum ieee80211_bss_change { | |||
183 | * the current band. | 191 | * the current band. |
184 | * @bssid: The BSSID for this BSS | 192 | * @bssid: The BSSID for this BSS |
185 | * @enable_beacon: whether beaconing should be enabled or not | 193 | * @enable_beacon: whether beaconing should be enabled or not |
194 | * @channel_type: Channel type for this BSS -- the hardware might be | ||
195 | * configured for HT40+ while this BSS only uses no-HT, for | ||
196 | * example. | ||
186 | * @ht_operation_mode: HT operation mode (like in &struct ieee80211_ht_info). | 197 | * @ht_operation_mode: HT operation mode (like in &struct ieee80211_ht_info). |
187 | * This field is only valid when the channel type is one of the HT types. | 198 | * This field is only valid when the channel type is one of the HT types. |
199 | * @cqm_rssi_thold: Connection quality monitor RSSI threshold, a zero value | ||
200 | * implies disabled | ||
201 | * @cqm_rssi_hyst: Connection quality monitor RSSI hysteresis | ||
188 | */ | 202 | */ |
189 | struct ieee80211_bss_conf { | 203 | struct ieee80211_bss_conf { |
190 | const u8 *bssid; | 204 | const u8 *bssid; |
191 | /* association related data */ | 205 | /* association related data */ |
192 | bool assoc; | 206 | bool assoc, ibss_joined; |
193 | u16 aid; | 207 | u16 aid; |
194 | /* erp related data */ | 208 | /* erp related data */ |
195 | bool use_cts_prot; | 209 | bool use_cts_prot; |
@@ -202,6 +216,9 @@ struct ieee80211_bss_conf { | |||
202 | u64 timestamp; | 216 | u64 timestamp; |
203 | u32 basic_rates; | 217 | u32 basic_rates; |
204 | u16 ht_operation_mode; | 218 | u16 ht_operation_mode; |
219 | s32 cqm_rssi_thold; | ||
220 | u32 cqm_rssi_hyst; | ||
221 | enum nl80211_channel_type channel_type; | ||
205 | }; | 222 | }; |
206 | 223 | ||
207 | /** | 224 | /** |
@@ -267,6 +284,9 @@ struct ieee80211_bss_conf { | |||
267 | * @IEEE80211_TX_INTFL_NL80211_FRAME_TX: Frame was requested through nl80211 | 284 | * @IEEE80211_TX_INTFL_NL80211_FRAME_TX: Frame was requested through nl80211 |
268 | * MLME command (internal to mac80211 to figure out whether to send TX | 285 | * MLME command (internal to mac80211 to figure out whether to send TX |
269 | * status to user space) | 286 | * status to user space) |
287 | * @IEEE80211_TX_CTL_LDPC: tells the driver to use LDPC for this frame | ||
288 | * @IEEE80211_TX_CTL_STBC: Enables Space-Time Block Coding (STBC) for this | ||
289 | * frame and selects the maximum number of streams that it can use. | ||
270 | */ | 290 | */ |
271 | enum mac80211_tx_control_flags { | 291 | enum mac80211_tx_control_flags { |
272 | IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0), | 292 | IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0), |
@@ -290,6 +310,9 @@ enum mac80211_tx_control_flags { | |||
290 | IEEE80211_TX_INTFL_RETRANSMISSION = BIT(19), | 310 | IEEE80211_TX_INTFL_RETRANSMISSION = BIT(19), |
291 | IEEE80211_TX_INTFL_HAS_RADIOTAP = BIT(20), | 311 | IEEE80211_TX_INTFL_HAS_RADIOTAP = BIT(20), |
292 | IEEE80211_TX_INTFL_NL80211_FRAME_TX = BIT(21), | 312 | IEEE80211_TX_INTFL_NL80211_FRAME_TX = BIT(21), |
313 | IEEE80211_TX_CTL_LDPC = BIT(22), | ||
314 | IEEE80211_TX_CTL_STBC = BIT(23) | BIT(24), | ||
315 | #define IEEE80211_TX_CTL_STBC_SHIFT 23 | ||
293 | }; | 316 | }; |
294 | 317 | ||
295 | /** | 318 | /** |
@@ -388,11 +411,11 @@ struct ieee80211_tx_rate { | |||
388 | * @status: union for status data | 411 | * @status: union for status data |
389 | * @driver_data: array of driver_data pointers | 412 | * @driver_data: array of driver_data pointers |
390 | * @ampdu_ack_len: number of acked aggregated frames. | 413 | * @ampdu_ack_len: number of acked aggregated frames. |
391 | * relevant only if IEEE80211_TX_STATUS_AMPDU was set. | 414 | * relevant only if IEEE80211_TX_STAT_AMPDU was set. |
392 | * @ampdu_ack_map: block ack bit map for the aggregation. | 415 | * @ampdu_ack_map: block ack bit map for the aggregation. |
393 | * relevant only if IEEE80211_TX_STATUS_AMPDU was set. | 416 | * relevant only if IEEE80211_TX_STAT_AMPDU was set. |
394 | * @ampdu_len: number of aggregated frames. | 417 | * @ampdu_len: number of aggregated frames. |
395 | * relevant only if IEEE80211_TX_STATUS_AMPDU was set. | 418 | * relevant only if IEEE80211_TX_STAT_AMPDU was set. |
396 | * @ack_signal: signal strength of the ACK frame | 419 | * @ack_signal: signal strength of the ACK frame |
397 | */ | 420 | */ |
398 | struct ieee80211_tx_info { | 421 | struct ieee80211_tx_info { |
@@ -543,7 +566,6 @@ enum mac80211_rx_flags { | |||
543 | * @signal: signal strength when receiving this frame, either in dBm, in dB or | 566 | * @signal: signal strength when receiving this frame, either in dBm, in dB or |
544 | * unspecified depending on the hardware capabilities flags | 567 | * unspecified depending on the hardware capabilities flags |
545 | * @IEEE80211_HW_SIGNAL_* | 568 | * @IEEE80211_HW_SIGNAL_* |
546 | * @noise: noise when receiving this frame, in dBm. | ||
547 | * @antenna: antenna used | 569 | * @antenna: antenna used |
548 | * @rate_idx: index of data rate into band's supported rates or MCS index if | 570 | * @rate_idx: index of data rate into band's supported rates or MCS index if |
549 | * HT rates are use (RX_FLAG_HT) | 571 | * HT rates are use (RX_FLAG_HT) |
@@ -554,7 +576,6 @@ struct ieee80211_rx_status { | |||
554 | enum ieee80211_band band; | 576 | enum ieee80211_band band; |
555 | int freq; | 577 | int freq; |
556 | int signal; | 578 | int signal; |
557 | int noise; | ||
558 | int antenna; | 579 | int antenna; |
559 | int rate_idx; | 580 | int rate_idx; |
560 | int flag; | 581 | int flag; |
@@ -580,11 +601,15 @@ struct ieee80211_rx_status { | |||
580 | * may turn the device off as much as possible. Typically, this flag will | 601 | * may turn the device off as much as possible. Typically, this flag will |
581 | * be set when an interface is set UP but not associated or scanning, but | 602 | * be set when an interface is set UP but not associated or scanning, but |
582 | * it can also be unset in that case when monitor interfaces are active. | 603 | * 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 | ||
605 | * Multimedia). On some drivers (iwlwifi is one of know) we have | ||
606 | * to enable/disable QoS explicitly. | ||
583 | */ | 607 | */ |
584 | enum ieee80211_conf_flags { | 608 | enum ieee80211_conf_flags { |
585 | IEEE80211_CONF_MONITOR = (1<<0), | 609 | IEEE80211_CONF_MONITOR = (1<<0), |
586 | IEEE80211_CONF_PS = (1<<1), | 610 | IEEE80211_CONF_PS = (1<<1), |
587 | IEEE80211_CONF_IDLE = (1<<2), | 611 | IEEE80211_CONF_IDLE = (1<<2), |
612 | IEEE80211_CONF_QOS = (1<<3), | ||
588 | }; | 613 | }; |
589 | 614 | ||
590 | 615 | ||
@@ -599,6 +624,7 @@ enum ieee80211_conf_flags { | |||
599 | * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed | 624 | * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed |
600 | * @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed | 625 | * @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed |
601 | * @IEEE80211_CONF_CHANGE_SMPS: Spatial multiplexing powersave mode changed | 626 | * @IEEE80211_CONF_CHANGE_SMPS: Spatial multiplexing powersave mode changed |
627 | * @IEEE80211_CONF_CHANGE_QOS: Quality of service was enabled or disabled | ||
602 | */ | 628 | */ |
603 | enum ieee80211_conf_changed { | 629 | enum ieee80211_conf_changed { |
604 | IEEE80211_CONF_CHANGE_SMPS = BIT(1), | 630 | IEEE80211_CONF_CHANGE_SMPS = BIT(1), |
@@ -609,6 +635,7 @@ enum ieee80211_conf_changed { | |||
609 | IEEE80211_CONF_CHANGE_CHANNEL = BIT(6), | 635 | IEEE80211_CONF_CHANGE_CHANNEL = BIT(6), |
610 | IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7), | 636 | IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7), |
611 | IEEE80211_CONF_CHANGE_IDLE = BIT(8), | 637 | IEEE80211_CONF_CHANGE_IDLE = BIT(8), |
638 | IEEE80211_CONF_CHANGE_QOS = BIT(9), | ||
612 | }; | 639 | }; |
613 | 640 | ||
614 | /** | 641 | /** |
@@ -649,6 +676,9 @@ enum ieee80211_smps_mode { | |||
649 | * @dynamic_ps_timeout: The dynamic powersave timeout (in ms), see the | 676 | * @dynamic_ps_timeout: The dynamic powersave timeout (in ms), see the |
650 | * powersave documentation below. This variable is valid only when | 677 | * powersave documentation below. This variable is valid only when |
651 | * the CONF_PS flag is set. | 678 | * 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. | ||
652 | * | 682 | * |
653 | * @power_level: requested transmit power (in dBm) | 683 | * @power_level: requested transmit power (in dBm) |
654 | * | 684 | * |
@@ -668,7 +698,7 @@ enum ieee80211_smps_mode { | |||
668 | */ | 698 | */ |
669 | struct ieee80211_conf { | 699 | struct ieee80211_conf { |
670 | u32 flags; | 700 | u32 flags; |
671 | int power_level, dynamic_ps_timeout; | 701 | int power_level, dynamic_ps_timeout, dynamic_ps_forced_timeout; |
672 | int max_sleep_period; | 702 | int max_sleep_period; |
673 | 703 | ||
674 | u16 listen_interval; | 704 | u16 listen_interval; |
@@ -682,6 +712,28 @@ struct ieee80211_conf { | |||
682 | }; | 712 | }; |
683 | 713 | ||
684 | /** | 714 | /** |
715 | * struct ieee80211_channel_switch - holds the channel switch data | ||
716 | * | ||
717 | * The information provided in this structure is required for channel switch | ||
718 | * operation. | ||
719 | * | ||
720 | * @timestamp: value in microseconds of the 64-bit Time Synchronization | ||
721 | * Function (TSF) timer when the frame containing the channel switch | ||
722 | * announcement was received. This is simply the rx.mactime parameter | ||
723 | * the driver passed into mac80211. | ||
724 | * @block_tx: Indicates whether transmission must be blocked before the | ||
725 | * scheduled channel switch, as indicated by the AP. | ||
726 | * @channel: the new channel to switch to | ||
727 | * @count: the number of TBTT's until the channel switch event | ||
728 | */ | ||
729 | struct ieee80211_channel_switch { | ||
730 | u64 timestamp; | ||
731 | bool block_tx; | ||
732 | struct ieee80211_channel *channel; | ||
733 | u8 count; | ||
734 | }; | ||
735 | |||
736 | /** | ||
685 | * struct ieee80211_vif - per-interface data | 737 | * struct ieee80211_vif - per-interface data |
686 | * | 738 | * |
687 | * Data in this structure is continually present for driver | 739 | * Data in this structure is continually present for driver |
@@ -779,6 +831,7 @@ struct ieee80211_key_conf { | |||
779 | u8 iv_len; | 831 | u8 iv_len; |
780 | u8 hw_key_idx; | 832 | u8 hw_key_idx; |
781 | u8 flags; | 833 | u8 flags; |
834 | u8 *ap_addr; | ||
782 | s8 keyidx; | 835 | s8 keyidx; |
783 | u8 keylen; | 836 | u8 keylen; |
784 | u8 key[0]; | 837 | u8 key[0]; |
@@ -907,10 +960,6 @@ enum ieee80211_tkip_key_type { | |||
907 | * one milliwatt. This is the preferred method since it is standardized | 960 | * one milliwatt. This is the preferred method since it is standardized |
908 | * between different devices. @max_signal does not need to be set. | 961 | * between different devices. @max_signal does not need to be set. |
909 | * | 962 | * |
910 | * @IEEE80211_HW_NOISE_DBM: | ||
911 | * Hardware can provide noise (radio interference) values in units dBm, | ||
912 | * decibel difference from one milliwatt. | ||
913 | * | ||
914 | * @IEEE80211_HW_SPECTRUM_MGMT: | 963 | * @IEEE80211_HW_SPECTRUM_MGMT: |
915 | * Hardware supports spectrum management defined in 802.11h | 964 | * Hardware supports spectrum management defined in 802.11h |
916 | * Measurement, Channel Switch, Quieting, TPC | 965 | * Measurement, Channel Switch, Quieting, TPC |
@@ -954,6 +1003,17 @@ enum ieee80211_tkip_key_type { | |||
954 | * Hardware can provide ack status reports of Tx frames to | 1003 | * Hardware can provide ack status reports of Tx frames to |
955 | * the stack. | 1004 | * the stack. |
956 | * | 1005 | * |
1006 | * @IEEE80211_HW_CONNECTION_MONITOR: | ||
1007 | * The hardware performs its own connection monitoring, including | ||
1008 | * periodic keep-alives to the AP and probing the AP on beacon loss. | ||
1009 | * When this flag is set, signaling beacon-loss will cause an immediate | ||
1010 | * change to disassociated state. | ||
1011 | * | ||
1012 | * @IEEE80211_HW_SUPPORTS_CQM_RSSI: | ||
1013 | * Hardware can do connection quality monitoring - i.e. it can monitor | ||
1014 | * connection quality related parameters, such as the RSSI level and | ||
1015 | * provide notifications if configured trigger levels are reached. | ||
1016 | * | ||
957 | */ | 1017 | */ |
958 | enum ieee80211_hw_flags { | 1018 | enum ieee80211_hw_flags { |
959 | IEEE80211_HW_HAS_RATE_CONTROL = 1<<0, | 1019 | IEEE80211_HW_HAS_RATE_CONTROL = 1<<0, |
@@ -963,7 +1023,7 @@ enum ieee80211_hw_flags { | |||
963 | IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE = 1<<4, | 1023 | IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE = 1<<4, |
964 | IEEE80211_HW_SIGNAL_UNSPEC = 1<<5, | 1024 | IEEE80211_HW_SIGNAL_UNSPEC = 1<<5, |
965 | IEEE80211_HW_SIGNAL_DBM = 1<<6, | 1025 | IEEE80211_HW_SIGNAL_DBM = 1<<6, |
966 | IEEE80211_HW_NOISE_DBM = 1<<7, | 1026 | /* use this hole */ |
967 | IEEE80211_HW_SPECTRUM_MGMT = 1<<8, | 1027 | IEEE80211_HW_SPECTRUM_MGMT = 1<<8, |
968 | IEEE80211_HW_AMPDU_AGGREGATION = 1<<9, | 1028 | IEEE80211_HW_AMPDU_AGGREGATION = 1<<9, |
969 | IEEE80211_HW_SUPPORTS_PS = 1<<10, | 1029 | IEEE80211_HW_SUPPORTS_PS = 1<<10, |
@@ -975,6 +1035,8 @@ enum ieee80211_hw_flags { | |||
975 | IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS = 1<<16, | 1035 | IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS = 1<<16, |
976 | IEEE80211_HW_SUPPORTS_UAPSD = 1<<17, | 1036 | IEEE80211_HW_SUPPORTS_UAPSD = 1<<17, |
977 | IEEE80211_HW_REPORTS_TX_ACK_STATUS = 1<<18, | 1037 | IEEE80211_HW_REPORTS_TX_ACK_STATUS = 1<<18, |
1038 | IEEE80211_HW_CONNECTION_MONITOR = 1<<19, | ||
1039 | IEEE80211_HW_SUPPORTS_CQM_RSSI = 1<<20, | ||
978 | }; | 1040 | }; |
979 | 1041 | ||
980 | /** | 1042 | /** |
@@ -1591,6 +1653,11 @@ enum ieee80211_ampdu_mlme_action { | |||
1591 | * @flush: Flush all pending frames from the hardware queue, making sure | 1653 | * @flush: Flush all pending frames from the hardware queue, making sure |
1592 | * that the hardware queues are empty. If the parameter @drop is set | 1654 | * that the hardware queues are empty. If the parameter @drop is set |
1593 | * to %true, pending frames may be dropped. The callback can sleep. | 1655 | * to %true, pending frames may be dropped. The callback can sleep. |
1656 | * | ||
1657 | * @channel_switch: Drivers that need (or want) to offload the channel | ||
1658 | * switch operation for CSAs received from the AP may implement this | ||
1659 | * callback. They must then call ieee80211_chswitch_done() to indicate | ||
1660 | * completion of the channel switch. | ||
1594 | */ | 1661 | */ |
1595 | struct ieee80211_ops { | 1662 | struct ieee80211_ops { |
1596 | int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); | 1663 | int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); |
@@ -1606,7 +1673,7 @@ struct ieee80211_ops { | |||
1606 | struct ieee80211_bss_conf *info, | 1673 | struct ieee80211_bss_conf *info, |
1607 | u32 changed); | 1674 | u32 changed); |
1608 | u64 (*prepare_multicast)(struct ieee80211_hw *hw, | 1675 | u64 (*prepare_multicast)(struct ieee80211_hw *hw, |
1609 | int mc_count, struct dev_addr_list *mc_list); | 1676 | struct netdev_hw_addr_list *mc_list); |
1610 | void (*configure_filter)(struct ieee80211_hw *hw, | 1677 | void (*configure_filter)(struct ieee80211_hw *hw, |
1611 | unsigned int changed_flags, | 1678 | unsigned int changed_flags, |
1612 | unsigned int *total_flags, | 1679 | unsigned int *total_flags, |
@@ -1621,7 +1688,7 @@ struct ieee80211_ops { | |||
1621 | struct ieee80211_key_conf *conf, | 1688 | struct ieee80211_key_conf *conf, |
1622 | struct ieee80211_sta *sta, | 1689 | struct ieee80211_sta *sta, |
1623 | u32 iv32, u16 *phase1key); | 1690 | u32 iv32, u16 *phase1key); |
1624 | int (*hw_scan)(struct ieee80211_hw *hw, | 1691 | int (*hw_scan)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, |
1625 | struct cfg80211_scan_request *req); | 1692 | struct cfg80211_scan_request *req); |
1626 | void (*sw_scan_start)(struct ieee80211_hw *hw); | 1693 | void (*sw_scan_start)(struct ieee80211_hw *hw); |
1627 | void (*sw_scan_complete)(struct ieee80211_hw *hw); | 1694 | void (*sw_scan_complete)(struct ieee80211_hw *hw); |
@@ -1646,13 +1713,16 @@ struct ieee80211_ops { | |||
1646 | struct ieee80211_vif *vif, | 1713 | struct ieee80211_vif *vif, |
1647 | enum ieee80211_ampdu_mlme_action action, | 1714 | enum ieee80211_ampdu_mlme_action action, |
1648 | struct ieee80211_sta *sta, u16 tid, u16 *ssn); | 1715 | struct ieee80211_sta *sta, u16 tid, u16 *ssn); |
1649 | 1716 | int (*get_survey)(struct ieee80211_hw *hw, int idx, | |
1717 | struct survey_info *survey); | ||
1650 | void (*rfkill_poll)(struct ieee80211_hw *hw); | 1718 | void (*rfkill_poll)(struct ieee80211_hw *hw); |
1651 | void (*set_coverage_class)(struct ieee80211_hw *hw, u8 coverage_class); | 1719 | void (*set_coverage_class)(struct ieee80211_hw *hw, u8 coverage_class); |
1652 | #ifdef CONFIG_NL80211_TESTMODE | 1720 | #ifdef CONFIG_NL80211_TESTMODE |
1653 | int (*testmode_cmd)(struct ieee80211_hw *hw, void *data, int len); | 1721 | int (*testmode_cmd)(struct ieee80211_hw *hw, void *data, int len); |
1654 | #endif | 1722 | #endif |
1655 | void (*flush)(struct ieee80211_hw *hw, bool drop); | 1723 | void (*flush)(struct ieee80211_hw *hw, bool drop); |
1724 | void (*channel_switch)(struct ieee80211_hw *hw, | ||
1725 | struct ieee80211_channel_switch *ch_switch); | ||
1656 | }; | 1726 | }; |
1657 | 1727 | ||
1658 | /** | 1728 | /** |
@@ -1802,7 +1872,10 @@ void ieee80211_restart_hw(struct ieee80211_hw *hw); | |||
1802 | * ieee80211_rx - receive frame | 1872 | * ieee80211_rx - receive frame |
1803 | * | 1873 | * |
1804 | * Use this function to hand received frames to mac80211. The receive | 1874 | * Use this function to hand received frames to mac80211. The receive |
1805 | * buffer in @skb must start with an IEEE 802.11 header. | 1875 | * buffer in @skb must start with an IEEE 802.11 header. In case of a |
1876 | * paged @skb is used, the driver is recommended to put the ieee80211 | ||
1877 | * header of the frame on the linear part of the @skb to avoid memory | ||
1878 | * allocation and/or memcpy by the stack. | ||
1806 | * | 1879 | * |
1807 | * This function may not be called in IRQ context. Calls to this function | 1880 | * This function may not be called in IRQ context. Calls to this function |
1808 | * for a single hardware must be synchronized against each other. Calls to | 1881 | * for a single hardware must be synchronized against each other. Calls to |
@@ -2364,12 +2437,52 @@ void ieee80211_sta_block_awake(struct ieee80211_hw *hw, | |||
2364 | * | 2437 | * |
2365 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. | 2438 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. |
2366 | * | 2439 | * |
2367 | * When beacon filtering is enabled with IEEE80211_HW_BEACON_FILTERING and | 2440 | * When beacon filtering is enabled with %IEEE80211_HW_BEACON_FILTERING and |
2368 | * IEEE80211_CONF_PS is set, the driver needs to inform whenever the | 2441 | * %IEEE80211_CONF_PS is set, the driver needs to inform whenever the |
2369 | * hardware is not receiving beacons with this function. | 2442 | * hardware is not receiving beacons with this function. |
2370 | */ | 2443 | */ |
2371 | void ieee80211_beacon_loss(struct ieee80211_vif *vif); | 2444 | void ieee80211_beacon_loss(struct ieee80211_vif *vif); |
2372 | 2445 | ||
2446 | /** | ||
2447 | * ieee80211_connection_loss - inform hardware has lost connection to the AP | ||
2448 | * | ||
2449 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. | ||
2450 | * | ||
2451 | * When beacon filtering is enabled with %IEEE80211_HW_BEACON_FILTERING, and | ||
2452 | * %IEEE80211_CONF_PS and %IEEE80211_HW_CONNECTION_MONITOR are set, the driver | ||
2453 | * needs to inform if the connection to the AP has been lost. | ||
2454 | * | ||
2455 | * This function will cause immediate change to disassociated state, | ||
2456 | * without connection recovery attempts. | ||
2457 | */ | ||
2458 | void ieee80211_connection_loss(struct ieee80211_vif *vif); | ||
2459 | |||
2460 | /** | ||
2461 | * ieee80211_cqm_rssi_notify - inform a configured connection quality monitoring | ||
2462 | * rssi threshold triggered | ||
2463 | * | ||
2464 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. | ||
2465 | * @rssi_event: the RSSI trigger event type | ||
2466 | * @gfp: context flags | ||
2467 | * | ||
2468 | * When the %IEEE80211_HW_SUPPORTS_CQM_RSSI is set, and a connection quality | ||
2469 | * monitoring is configured with an rssi threshold, the driver will inform | ||
2470 | * whenever the rssi level reaches the threshold. | ||
2471 | */ | ||
2472 | void ieee80211_cqm_rssi_notify(struct ieee80211_vif *vif, | ||
2473 | enum nl80211_cqm_rssi_threshold_event rssi_event, | ||
2474 | gfp_t gfp); | ||
2475 | |||
2476 | /** | ||
2477 | * ieee80211_chswitch_done - Complete channel switch process | ||
2478 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. | ||
2479 | * @success: make the channel switch successful or not | ||
2480 | * | ||
2481 | * Complete the channel switch post-process: set the new operational channel | ||
2482 | * and wake up the suspended queues. | ||
2483 | */ | ||
2484 | void ieee80211_chswitch_done(struct ieee80211_vif *vif, bool success); | ||
2485 | |||
2373 | /* Rate control API */ | 2486 | /* Rate control API */ |
2374 | 2487 | ||
2375 | /** | 2488 | /** |