aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/linux/ieee80211.h32
-rw-r--r--include/linux/nl80211.h41
-rw-r--r--include/net/cfg80211.h33
-rw-r--r--include/net/mac80211.h142
4 files changed, 199 insertions, 49 deletions
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
index 210e2c32553..db84e2f6b28 100644
--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
@@ -640,9 +640,9 @@ struct ieee80211_rann_ie {
640 u8 rann_hopcount; 640 u8 rann_hopcount;
641 u8 rann_ttl; 641 u8 rann_ttl;
642 u8 rann_addr[6]; 642 u8 rann_addr[6];
643 u32 rann_seq; 643 __le32 rann_seq;
644 u32 rann_interval; 644 __le32 rann_interval;
645 u32 rann_metric; 645 __le32 rann_metric;
646} __attribute__ ((packed)); 646} __attribute__ ((packed));
647 647
648enum ieee80211_rann_flags { 648enum ieee80211_rann_flags {
@@ -1007,13 +1007,13 @@ enum ieee80211_min_mpdu_spacing {
1007}; 1007};
1008 1008
1009/** 1009/**
1010 * struct ieee80211_ht_info - HT information 1010 * struct ieee80211_ht_operation - HT operation IE
1011 * 1011 *
1012 * This structure is the "HT information element" as 1012 * This structure is the "HT operation element" as
1013 * described in 802.11n D5.0 7.3.2.58 1013 * described in 802.11n-2009 7.3.2.57
1014 */ 1014 */
1015struct ieee80211_ht_info { 1015struct ieee80211_ht_operation {
1016 u8 control_chan; 1016 u8 primary_chan;
1017 u8 ht_param; 1017 u8 ht_param;
1018 __le16 operation_mode; 1018 __le16 operation_mode;
1019 __le16 stbc_param; 1019 __le16 stbc_param;
@@ -1027,8 +1027,6 @@ struct ieee80211_ht_info {
1027#define IEEE80211_HT_PARAM_CHA_SEC_BELOW 0x03 1027#define IEEE80211_HT_PARAM_CHA_SEC_BELOW 0x03
1028#define IEEE80211_HT_PARAM_CHAN_WIDTH_ANY 0x04 1028#define IEEE80211_HT_PARAM_CHAN_WIDTH_ANY 0x04
1029#define IEEE80211_HT_PARAM_RIFS_MODE 0x08 1029#define IEEE80211_HT_PARAM_RIFS_MODE 0x08
1030#define IEEE80211_HT_PARAM_SPSMP_SUPPORT 0x10
1031#define IEEE80211_HT_PARAM_SERV_INTERVAL_GRAN 0xE0
1032 1030
1033/* for operation_mode */ 1031/* for operation_mode */
1034#define IEEE80211_HT_OP_MODE_PROTECTION 0x0003 1032#define IEEE80211_HT_OP_MODE_PROTECTION 0x0003
@@ -1301,7 +1299,7 @@ enum ieee80211_eid {
1301 WLAN_EID_EXT_SUPP_RATES = 50, 1299 WLAN_EID_EXT_SUPP_RATES = 50,
1302 1300
1303 WLAN_EID_HT_CAPABILITY = 45, 1301 WLAN_EID_HT_CAPABILITY = 45,
1304 WLAN_EID_HT_INFORMATION = 61, 1302 WLAN_EID_HT_OPERATION = 61,
1305 1303
1306 WLAN_EID_RSN = 48, 1304 WLAN_EID_RSN = 48,
1307 WLAN_EID_MMIE = 76, 1305 WLAN_EID_MMIE = 76,
@@ -1441,6 +1439,18 @@ enum ieee80211_tdls_actioncode {
1441#define WLAN_TDLS_SNAP_RFTYPE 0x2 1439#define WLAN_TDLS_SNAP_RFTYPE 0x2
1442 1440
1443/** 1441/**
1442 * enum - mesh synchronization method identifier
1443 *
1444 * @IEEE80211_SYNC_METHOD_NEIGHBOR_OFFSET: the default synchronization method
1445 * @IEEE80211_SYNC_METHOD_VENDOR: a vendor specific synchronization method
1446 * that will be specified in a vendor specific information element
1447 */
1448enum {
1449 IEEE80211_SYNC_METHOD_NEIGHBOR_OFFSET = 1,
1450 IEEE80211_SYNC_METHOD_VENDOR = 255,
1451};
1452
1453/**
1444 * enum - mesh path selection protocol identifier 1454 * enum - mesh path selection protocol identifier
1445 * 1455 *
1446 * @IEEE80211_PATH_PROTOCOL_HWMP: the default path selection protocol 1456 * @IEEE80211_PATH_PROTOCOL_HWMP: the default path selection protocol
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h
index e474f6e780c..1335084b1c6 100644
--- a/include/linux/nl80211.h
+++ b/include/linux/nl80211.h
@@ -548,6 +548,11 @@
548 * @NL80211_CMD_SET_NOACK_MAP: sets a bitmap for the individual TIDs whether 548 * @NL80211_CMD_SET_NOACK_MAP: sets a bitmap for the individual TIDs whether
549 * No Acknowledgement Policy should be applied. 549 * No Acknowledgement Policy should be applied.
550 * 550 *
551 * @NL80211_CMD_CH_SWITCH_NOTIFY: An AP or GO may decide to switch channels
552 * independently of the userspace SME, send this event indicating
553 * %NL80211_ATTR_IFINDEX is now on %NL80211_ATTR_WIPHY_FREQ with
554 * %NL80211_ATTR_WIPHY_CHANNEL_TYPE.
555 *
551 * @NL80211_CMD_MAX: highest used command number 556 * @NL80211_CMD_MAX: highest used command number
552 * @__NL80211_CMD_AFTER_LAST: internal use 557 * @__NL80211_CMD_AFTER_LAST: internal use
553 */ 558 */
@@ -689,6 +694,8 @@ enum nl80211_commands {
689 694
690 NL80211_CMD_SET_NOACK_MAP, 695 NL80211_CMD_SET_NOACK_MAP,
691 696
697 NL80211_CMD_CH_SWITCH_NOTIFY,
698
692 /* add new commands above here */ 699 /* add new commands above here */
693 700
694 /* used to define NL80211_CMD_MAX below */ 701 /* used to define NL80211_CMD_MAX below */
@@ -1685,6 +1692,7 @@ enum nl80211_sta_bss_param {
1685 * @NL80211_STA_INFO_CONNECTED_TIME: time since the station is last connected 1692 * @NL80211_STA_INFO_CONNECTED_TIME: time since the station is last connected
1686 * @NL80211_STA_INFO_STA_FLAGS: Contains a struct nl80211_sta_flag_update. 1693 * @NL80211_STA_INFO_STA_FLAGS: Contains a struct nl80211_sta_flag_update.
1687 * @NL80211_STA_INFO_BEACON_LOSS: count of times beacon loss was detected (u32) 1694 * @NL80211_STA_INFO_BEACON_LOSS: count of times beacon loss was detected (u32)
1695 * @NL80211_STA_INFO_T_OFFSET: timing offset with respect to this STA (s64)
1688 * @__NL80211_STA_INFO_AFTER_LAST: internal 1696 * @__NL80211_STA_INFO_AFTER_LAST: internal
1689 * @NL80211_STA_INFO_MAX: highest possible station info attribute 1697 * @NL80211_STA_INFO_MAX: highest possible station info attribute
1690 */ 1698 */
@@ -1708,6 +1716,7 @@ enum nl80211_sta_info {
1708 NL80211_STA_INFO_CONNECTED_TIME, 1716 NL80211_STA_INFO_CONNECTED_TIME,
1709 NL80211_STA_INFO_STA_FLAGS, 1717 NL80211_STA_INFO_STA_FLAGS,
1710 NL80211_STA_INFO_BEACON_LOSS, 1718 NL80211_STA_INFO_BEACON_LOSS,
1719 NL80211_STA_INFO_T_OFFSET,
1711 1720
1712 /* keep last */ 1721 /* keep last */
1713 __NL80211_STA_INFO_AFTER_LAST, 1722 __NL80211_STA_INFO_AFTER_LAST,
@@ -2142,6 +2151,9 @@ enum nl80211_mntr_flags {
2142 * 2151 *
2143 * @NL80211_MESHCONF_ATTR_MAX: highest possible mesh configuration attribute 2152 * @NL80211_MESHCONF_ATTR_MAX: highest possible mesh configuration attribute
2144 * 2153 *
2154 * @NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR: maximum number of neighbors
2155 * to synchronize to for 11s default synchronization method (see 11C.12.2.2)
2156 *
2145 * @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use 2157 * @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use
2146 */ 2158 */
2147enum nl80211_meshconf_params { 2159enum nl80211_meshconf_params {
@@ -2166,6 +2178,7 @@ enum nl80211_meshconf_params {
2166 NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL, 2178 NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL,
2167 NL80211_MESHCONF_FORWARDING, 2179 NL80211_MESHCONF_FORWARDING,
2168 NL80211_MESHCONF_RSSI_THRESHOLD, 2180 NL80211_MESHCONF_RSSI_THRESHOLD,
2181 NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR,
2169 2182
2170 /* keep last */ 2183 /* keep last */
2171 __NL80211_MESHCONF_ATTR_AFTER_LAST, 2184 __NL80211_MESHCONF_ATTR_AFTER_LAST,
@@ -2205,6 +2218,11 @@ enum nl80211_meshconf_params {
2205 * complete (unsecured) mesh peering without the need of a userspace daemon. 2218 * complete (unsecured) mesh peering without the need of a userspace daemon.
2206 * 2219 *
2207 * @NL80211_MESH_SETUP_ATTR_MAX: highest possible mesh setup attribute number 2220 * @NL80211_MESH_SETUP_ATTR_MAX: highest possible mesh setup attribute number
2221 *
2222 * @NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC: Enable this option to use a
2223 * vendor specific synchronization method or disable it to use the default
2224 * neighbor offset synchronization
2225 *
2208 * @__NL80211_MESH_SETUP_ATTR_AFTER_LAST: Internal use 2226 * @__NL80211_MESH_SETUP_ATTR_AFTER_LAST: Internal use
2209 */ 2227 */
2210enum nl80211_mesh_setup_params { 2228enum nl80211_mesh_setup_params {
@@ -2214,6 +2232,7 @@ enum nl80211_mesh_setup_params {
2214 NL80211_MESH_SETUP_IE, 2232 NL80211_MESH_SETUP_IE,
2215 NL80211_MESH_SETUP_USERSPACE_AUTH, 2233 NL80211_MESH_SETUP_USERSPACE_AUTH,
2216 NL80211_MESH_SETUP_USERSPACE_AMPE, 2234 NL80211_MESH_SETUP_USERSPACE_AMPE,
2235 NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC,
2217 2236
2218 /* keep last */ 2237 /* keep last */
2219 __NL80211_MESH_SETUP_ATTR_AFTER_LAST, 2238 __NL80211_MESH_SETUP_ATTR_AFTER_LAST,
@@ -2223,7 +2242,7 @@ enum nl80211_mesh_setup_params {
2223/** 2242/**
2224 * enum nl80211_txq_attr - TX queue parameter attributes 2243 * enum nl80211_txq_attr - TX queue parameter attributes
2225 * @__NL80211_TXQ_ATTR_INVALID: Attribute number 0 is reserved 2244 * @__NL80211_TXQ_ATTR_INVALID: Attribute number 0 is reserved
2226 * @NL80211_TXQ_ATTR_QUEUE: TX queue identifier (NL80211_TXQ_Q_*) 2245 * @NL80211_TXQ_ATTR_AC: AC identifier (NL80211_AC_*)
2227 * @NL80211_TXQ_ATTR_TXOP: Maximum burst time in units of 32 usecs, 0 meaning 2246 * @NL80211_TXQ_ATTR_TXOP: Maximum burst time in units of 32 usecs, 0 meaning
2228 * disabled 2247 * disabled
2229 * @NL80211_TXQ_ATTR_CWMIN: Minimum contention window [a value of the form 2248 * @NL80211_TXQ_ATTR_CWMIN: Minimum contention window [a value of the form
@@ -2236,7 +2255,7 @@ enum nl80211_mesh_setup_params {
2236 */ 2255 */
2237enum nl80211_txq_attr { 2256enum nl80211_txq_attr {
2238 __NL80211_TXQ_ATTR_INVALID, 2257 __NL80211_TXQ_ATTR_INVALID,
2239 NL80211_TXQ_ATTR_QUEUE, 2258 NL80211_TXQ_ATTR_AC,
2240 NL80211_TXQ_ATTR_TXOP, 2259 NL80211_TXQ_ATTR_TXOP,
2241 NL80211_TXQ_ATTR_CWMIN, 2260 NL80211_TXQ_ATTR_CWMIN,
2242 NL80211_TXQ_ATTR_CWMAX, 2261 NL80211_TXQ_ATTR_CWMAX,
@@ -2247,13 +2266,21 @@ enum nl80211_txq_attr {
2247 NL80211_TXQ_ATTR_MAX = __NL80211_TXQ_ATTR_AFTER_LAST - 1 2266 NL80211_TXQ_ATTR_MAX = __NL80211_TXQ_ATTR_AFTER_LAST - 1
2248}; 2267};
2249 2268
2250enum nl80211_txq_q { 2269enum nl80211_ac {
2251 NL80211_TXQ_Q_VO, 2270 NL80211_AC_VO,
2252 NL80211_TXQ_Q_VI, 2271 NL80211_AC_VI,
2253 NL80211_TXQ_Q_BE, 2272 NL80211_AC_BE,
2254 NL80211_TXQ_Q_BK 2273 NL80211_AC_BK,
2274 NL80211_NUM_ACS
2255}; 2275};
2256 2276
2277/* backward compat */
2278#define NL80211_TXQ_ATTR_QUEUE NL80211_TXQ_ATTR_AC
2279#define NL80211_TXQ_Q_VO NL80211_AC_VO
2280#define NL80211_TXQ_Q_VI NL80211_AC_VI
2281#define NL80211_TXQ_Q_BE NL80211_AC_BE
2282#define NL80211_TXQ_Q_BK NL80211_AC_BK
2283
2257enum nl80211_channel_type { 2284enum nl80211_channel_type {
2258 NL80211_CHAN_NO_HT, 2285 NL80211_CHAN_NO_HT,
2259 NL80211_CHAN_HT20, 2286 NL80211_CHAN_HT20,
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 83d800c31e3..a587867375b 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -521,6 +521,7 @@ struct station_parameters {
521 * @STATION_INFO_ASSOC_REQ_IES: @assoc_req_ies filled 521 * @STATION_INFO_ASSOC_REQ_IES: @assoc_req_ies filled
522 * @STATION_INFO_STA_FLAGS: @sta_flags filled 522 * @STATION_INFO_STA_FLAGS: @sta_flags filled
523 * @STATION_INFO_BEACON_LOSS_COUNT: @beacon_loss_count filled 523 * @STATION_INFO_BEACON_LOSS_COUNT: @beacon_loss_count filled
524 * @STATION_INFO_T_OFFSET: @t_offset filled
524 */ 525 */
525enum station_info_flags { 526enum station_info_flags {
526 STATION_INFO_INACTIVE_TIME = 1<<0, 527 STATION_INFO_INACTIVE_TIME = 1<<0,
@@ -542,7 +543,8 @@ enum station_info_flags {
542 STATION_INFO_CONNECTED_TIME = 1<<16, 543 STATION_INFO_CONNECTED_TIME = 1<<16,
543 STATION_INFO_ASSOC_REQ_IES = 1<<17, 544 STATION_INFO_ASSOC_REQ_IES = 1<<17,
544 STATION_INFO_STA_FLAGS = 1<<18, 545 STATION_INFO_STA_FLAGS = 1<<18,
545 STATION_INFO_BEACON_LOSS_COUNT = 1<<19 546 STATION_INFO_BEACON_LOSS_COUNT = 1<<19,
547 STATION_INFO_T_OFFSET = 1<<20,
546}; 548};
547 549
548/** 550/**
@@ -643,6 +645,7 @@ struct sta_bss_parameters {
643 * @assoc_req_ies_len: Length of assoc_req_ies buffer in octets. 645 * @assoc_req_ies_len: Length of assoc_req_ies buffer in octets.
644 * @sta_flags: station flags mask & values 646 * @sta_flags: station flags mask & values
645 * @beacon_loss_count: Number of times beacon loss event has triggered. 647 * @beacon_loss_count: Number of times beacon loss event has triggered.
648 * @t_offset: Time offset of the station relative to this host.
646 */ 649 */
647struct station_info { 650struct station_info {
648 u32 filled; 651 u32 filled;
@@ -671,6 +674,7 @@ struct station_info {
671 size_t assoc_req_ies_len; 674 size_t assoc_req_ies_len;
672 675
673 u32 beacon_loss_count; 676 u32 beacon_loss_count;
677 s64 t_offset;
674 678
675 /* 679 /*
676 * Note: Add a new enum station_info_flags value for each new field and 680 * Note: Add a new enum station_info_flags value for each new field and
@@ -798,6 +802,8 @@ struct mesh_config {
798 /* ttl used in path selection information elements */ 802 /* ttl used in path selection information elements */
799 u8 element_ttl; 803 u8 element_ttl;
800 bool auto_open_plinks; 804 bool auto_open_plinks;
805 /* neighbor offset synchronization */
806 u32 dot11MeshNbrOffsetMaxNeighbor;
801 /* HWMP parameters */ 807 /* HWMP parameters */
802 u8 dot11MeshHWMPmaxPREQretries; 808 u8 dot11MeshHWMPmaxPREQretries;
803 u32 path_refresh_time; 809 u32 path_refresh_time;
@@ -821,6 +827,7 @@ struct mesh_config {
821 * struct mesh_setup - 802.11s mesh setup configuration 827 * struct mesh_setup - 802.11s mesh setup configuration
822 * @mesh_id: the mesh ID 828 * @mesh_id: the mesh ID
823 * @mesh_id_len: length of the mesh ID, at least 1 and at most 32 bytes 829 * @mesh_id_len: length of the mesh ID, at least 1 and at most 32 bytes
830 * @sync_method: which synchronization method to use
824 * @path_sel_proto: which path selection protocol to use 831 * @path_sel_proto: which path selection protocol to use
825 * @path_metric: which metric to use 832 * @path_metric: which metric to use
826 * @ie: vendor information elements (optional) 833 * @ie: vendor information elements (optional)
@@ -834,8 +841,9 @@ struct mesh_config {
834struct mesh_setup { 841struct mesh_setup {
835 const u8 *mesh_id; 842 const u8 *mesh_id;
836 u8 mesh_id_len; 843 u8 mesh_id_len;
837 u8 path_sel_proto; 844 u8 sync_method;
838 u8 path_metric; 845 u8 path_sel_proto;
846 u8 path_metric;
839 const u8 *ie; 847 const u8 *ie;
840 u8 ie_len; 848 u8 ie_len;
841 bool is_authenticated; 849 bool is_authenticated;
@@ -845,7 +853,7 @@ struct mesh_setup {
845 853
846/** 854/**
847 * struct ieee80211_txq_params - TX queue parameters 855 * struct ieee80211_txq_params - TX queue parameters
848 * @queue: TX queue identifier (NL80211_TXQ_Q_*) 856 * @ac: AC identifier
849 * @txop: Maximum burst time in units of 32 usecs, 0 meaning disabled 857 * @txop: Maximum burst time in units of 32 usecs, 0 meaning disabled
850 * @cwmin: Minimum contention window [a value of the form 2^n-1 in the range 858 * @cwmin: Minimum contention window [a value of the form 2^n-1 in the range
851 * 1..32767] 859 * 1..32767]
@@ -854,7 +862,7 @@ struct mesh_setup {
854 * @aifs: Arbitration interframe space [0..255] 862 * @aifs: Arbitration interframe space [0..255]
855 */ 863 */
856struct ieee80211_txq_params { 864struct ieee80211_txq_params {
857 enum nl80211_txq_q queue; 865 enum nl80211_ac ac;
858 u16 txop; 866 u16 txop;
859 u16 cwmin; 867 u16 cwmin;
860 u16 cwmax; 868 u16 cwmax;
@@ -1336,6 +1344,9 @@ struct cfg80211_gtk_rekey_data {
1336 * be %NULL or contain the enabled Wake-on-Wireless triggers that are 1344 * be %NULL or contain the enabled Wake-on-Wireless triggers that are
1337 * configured for the device. 1345 * configured for the device.
1338 * @resume: wiphy device needs to be resumed 1346 * @resume: wiphy device needs to be resumed
1347 * @set_wakeup: Called when WoWLAN is enabled/disabled, use this callback
1348 * to call device_set_wakeup_enable() to enable/disable wakeup from
1349 * the device.
1339 * 1350 *
1340 * @add_virtual_intf: create a new virtual interface with the given name, 1351 * @add_virtual_intf: create a new virtual interface with the given name,
1341 * must set the struct wireless_dev's iftype. Beware: You must create 1352 * must set the struct wireless_dev's iftype. Beware: You must create
@@ -1507,6 +1518,7 @@ struct cfg80211_gtk_rekey_data {
1507struct cfg80211_ops { 1518struct cfg80211_ops {
1508 int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow); 1519 int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow);
1509 int (*resume)(struct wiphy *wiphy); 1520 int (*resume)(struct wiphy *wiphy);
1521 void (*set_wakeup)(struct wiphy *wiphy, bool enabled);
1510 1522
1511 struct net_device * (*add_virtual_intf)(struct wiphy *wiphy, 1523 struct net_device * (*add_virtual_intf)(struct wiphy *wiphy,
1512 char *name, 1524 char *name,
@@ -3343,6 +3355,17 @@ int cfg80211_can_beacon_sec_chan(struct wiphy *wiphy,
3343 enum nl80211_channel_type channel_type); 3355 enum nl80211_channel_type channel_type);
3344 3356
3345/* 3357/*
3358 * cfg80211_ch_switch_notify - update wdev channel and notify userspace
3359 * @dev: the device which switched channels
3360 * @freq: new channel frequency (in MHz)
3361 * @type: channel type
3362 *
3363 * Acquires wdev_lock, so must only be called from sleepable driver context!
3364 */
3365void cfg80211_ch_switch_notify(struct net_device *dev, int freq,
3366 enum nl80211_channel_type type);
3367
3368/*
3346 * cfg80211_calculate_bitrate - calculate actual bitrate (in 100Kbps units) 3369 * cfg80211_calculate_bitrate - calculate actual bitrate (in 100Kbps units)
3347 * @rate: given rate_info to calculate bitrate from 3370 * @rate: given rate_info to calculate bitrate from
3348 * 3371 *
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 9210bdc7bd8..32cd5171fa2 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -95,9 +95,11 @@ struct device;
95 * @IEEE80211_MAX_QUEUES: Maximum number of regular device queues. 95 * @IEEE80211_MAX_QUEUES: Maximum number of regular device queues.
96 */ 96 */
97enum ieee80211_max_queues { 97enum ieee80211_max_queues {
98 IEEE80211_MAX_QUEUES = 4, 98 IEEE80211_MAX_QUEUES = 16,
99}; 99};
100 100
101#define IEEE80211_INVAL_HW_QUEUE 0xff
102
101/** 103/**
102 * enum ieee80211_ac_numbers - AC numbers as used in mac80211 104 * enum ieee80211_ac_numbers - AC numbers as used in mac80211
103 * @IEEE80211_AC_VO: voice 105 * @IEEE80211_AC_VO: voice
@@ -244,7 +246,7 @@ enum ieee80211_rssi_event {
244 * @channel_type: Channel type for this BSS -- the hardware might be 246 * @channel_type: Channel type for this BSS -- the hardware might be
245 * configured for HT40+ while this BSS only uses no-HT, for 247 * configured for HT40+ while this BSS only uses no-HT, for
246 * example. 248 * example.
247 * @ht_operation_mode: HT operation mode (like in &struct ieee80211_ht_info). 249 * @ht_operation_mode: HT operation mode like in &struct ieee80211_ht_operation.
248 * This field is only valid when the channel type is one of the HT types. 250 * This field is only valid when the channel type is one of the HT types.
249 * @cqm_rssi_thold: Connection quality monitor RSSI threshold, a zero value 251 * @cqm_rssi_thold: Connection quality monitor RSSI threshold, a zero value
250 * implies disabled 252 * implies disabled
@@ -522,7 +524,7 @@ struct ieee80211_tx_rate {
522 * 524 *
523 * @flags: transmit info flags, defined above 525 * @flags: transmit info flags, defined above
524 * @band: the band to transmit on (use for checking for races) 526 * @band: the band to transmit on (use for checking for races)
525 * @antenna_sel_tx: antenna to use, 0 for automatic diversity 527 * @hw_queue: HW queue to put the frame on, skb_get_queue_mapping() gives the AC
526 * @ack_frame_id: internal frame ID for TX status, used internally 528 * @ack_frame_id: internal frame ID for TX status, used internally
527 * @control: union for control data 529 * @control: union for control data
528 * @status: union for status data 530 * @status: union for status data
@@ -538,7 +540,7 @@ struct ieee80211_tx_info {
538 u32 flags; 540 u32 flags;
539 u8 band; 541 u8 band;
540 542
541 u8 antenna_sel_tx; 543 u8 hw_queue;
542 544
543 u16 ack_frame_id; 545 u16 ack_frame_id;
544 546
@@ -564,7 +566,8 @@ struct ieee80211_tx_info {
564 u8 ampdu_ack_len; 566 u8 ampdu_ack_len;
565 int ack_signal; 567 int ack_signal;
566 u8 ampdu_len; 568 u8 ampdu_len;
567 /* 15 bytes free */ 569 u8 antenna;
570 /* 14 bytes free */
568 } status; 571 } status;
569 struct { 572 struct {
570 struct ieee80211_tx_rate driver_rates[ 573 struct ieee80211_tx_rate driver_rates[
@@ -888,6 +891,8 @@ enum ieee80211_vif_flags {
888 * these need to be set (or cleared) when the interface is added 891 * these need to be set (or cleared) when the interface is added
889 * or, if supported by the driver, the interface type is changed 892 * or, if supported by the driver, the interface type is changed
890 * at runtime, mac80211 will never touch this field 893 * at runtime, mac80211 will never touch this field
894 * @hw_queue: hardware queue for each AC
895 * @cab_queue: content-after-beacon (DTIM beacon really) queue, AP mode only
891 * @drv_priv: data area for driver use, will always be aligned to 896 * @drv_priv: data area for driver use, will always be aligned to
892 * sizeof(void *). 897 * sizeof(void *).
893 */ 898 */
@@ -896,7 +901,12 @@ struct ieee80211_vif {
896 struct ieee80211_bss_conf bss_conf; 901 struct ieee80211_bss_conf bss_conf;
897 u8 addr[ETH_ALEN]; 902 u8 addr[ETH_ALEN];
898 bool p2p; 903 bool p2p;
904
905 u8 cab_queue;
906 u8 hw_queue[IEEE80211_NUM_ACS];
907
899 u32 driver_flags; 908 u32 driver_flags;
909
900 /* must be last */ 910 /* must be last */
901 u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *)))); 911 u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *))));
902}; 912};
@@ -1174,6 +1184,15 @@ enum sta_notify_cmd {
1174 * @IEEE80211_HW_SCAN_WHILE_IDLE: The device can do hw scan while 1184 * @IEEE80211_HW_SCAN_WHILE_IDLE: The device can do hw scan while
1175 * being idle (i.e. mac80211 doesn't have to go idle-off during the 1185 * being idle (i.e. mac80211 doesn't have to go idle-off during the
1176 * the scan). 1186 * the scan).
1187 *
1188 * @IEEE80211_HW_WANT_MONITOR_VIF: The driver would like to be informed of
1189 * a virtual monitor interface when monitor interfaces are the only
1190 * active interfaces.
1191 *
1192 * @IEEE80211_HW_QUEUE_CONTROL: The driver wants to control per-interface
1193 * queue mapping in order to use different queues (not just one per AC)
1194 * for different virtual interfaces. See the doc section on HW queue
1195 * control for more details.
1177 */ 1196 */
1178enum ieee80211_hw_flags { 1197enum ieee80211_hw_flags {
1179 IEEE80211_HW_HAS_RATE_CONTROL = 1<<0, 1198 IEEE80211_HW_HAS_RATE_CONTROL = 1<<0,
@@ -1190,13 +1209,13 @@ enum ieee80211_hw_flags {
1190 IEEE80211_HW_PS_NULLFUNC_STACK = 1<<11, 1209 IEEE80211_HW_PS_NULLFUNC_STACK = 1<<11,
1191 IEEE80211_HW_SUPPORTS_DYNAMIC_PS = 1<<12, 1210 IEEE80211_HW_SUPPORTS_DYNAMIC_PS = 1<<12,
1192 IEEE80211_HW_MFP_CAPABLE = 1<<13, 1211 IEEE80211_HW_MFP_CAPABLE = 1<<13,
1193 /* reuse bit 14 */ 1212 IEEE80211_HW_WANT_MONITOR_VIF = 1<<14,
1194 IEEE80211_HW_SUPPORTS_STATIC_SMPS = 1<<15, 1213 IEEE80211_HW_SUPPORTS_STATIC_SMPS = 1<<15,
1195 IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS = 1<<16, 1214 IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS = 1<<16,
1196 IEEE80211_HW_SUPPORTS_UAPSD = 1<<17, 1215 IEEE80211_HW_SUPPORTS_UAPSD = 1<<17,
1197 IEEE80211_HW_REPORTS_TX_ACK_STATUS = 1<<18, 1216 IEEE80211_HW_REPORTS_TX_ACK_STATUS = 1<<18,
1198 IEEE80211_HW_CONNECTION_MONITOR = 1<<19, 1217 IEEE80211_HW_CONNECTION_MONITOR = 1<<19,
1199 /* reuse bit 20 */ 1218 IEEE80211_HW_QUEUE_CONTROL = 1<<20,
1200 IEEE80211_HW_SUPPORTS_PER_STA_GTK = 1<<21, 1219 IEEE80211_HW_SUPPORTS_PER_STA_GTK = 1<<21,
1201 IEEE80211_HW_AP_LINK_PS = 1<<22, 1220 IEEE80211_HW_AP_LINK_PS = 1<<22,
1202 IEEE80211_HW_TX_AMPDU_SETUP_IN_HW = 1<<23, 1221 IEEE80211_HW_TX_AMPDU_SETUP_IN_HW = 1<<23,
@@ -1266,6 +1285,9 @@ enum ieee80211_hw_flags {
1266 * @max_tx_aggregation_subframes: maximum number of subframes in an 1285 * @max_tx_aggregation_subframes: maximum number of subframes in an
1267 * aggregate an HT driver will transmit, used by the peer as a 1286 * aggregate an HT driver will transmit, used by the peer as a
1268 * hint to size its reorder buffer. 1287 * hint to size its reorder buffer.
1288 *
1289 * @offchannel_tx_hw_queue: HW queue ID to use for offchannel TX
1290 * (if %IEEE80211_HW_QUEUE_CONTROL is set)
1269 */ 1291 */
1270struct ieee80211_hw { 1292struct ieee80211_hw {
1271 struct ieee80211_conf conf; 1293 struct ieee80211_conf conf;
@@ -1286,6 +1308,7 @@ struct ieee80211_hw {
1286 u8 max_rate_tries; 1308 u8 max_rate_tries;
1287 u8 max_rx_aggregation_subframes; 1309 u8 max_rx_aggregation_subframes;
1288 u8 max_tx_aggregation_subframes; 1310 u8 max_tx_aggregation_subframes;
1311 u8 offchannel_tx_hw_queue;
1289}; 1312};
1290 1313
1291/** 1314/**
@@ -1694,6 +1717,61 @@ void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb);
1694 */ 1717 */
1695 1718
1696/** 1719/**
1720 * DOC: HW queue control
1721 *
1722 * Before HW queue control was introduced, mac80211 only had a single static
1723 * assignment of per-interface AC software queues to hardware queues. This
1724 * was problematic for a few reasons:
1725 * 1) off-channel transmissions might get stuck behind other frames
1726 * 2) multiple virtual interfaces couldn't be handled correctly
1727 * 3) after-DTIM frames could get stuck behind other frames
1728 *
1729 * To solve this, hardware typically uses multiple different queues for all
1730 * the different usages, and this needs to be propagated into mac80211 so it
1731 * won't have the same problem with the software queues.
1732 *
1733 * Therefore, mac80211 now offers the %IEEE80211_HW_QUEUE_CONTROL capability
1734 * flag that tells it that the driver implements its own queue control. To do
1735 * so, the driver will set up the various queues in each &struct ieee80211_vif
1736 * and the offchannel queue in &struct ieee80211_hw. In response, mac80211 will
1737 * use those queue IDs in the hw_queue field of &struct ieee80211_tx_info and
1738 * if necessary will queue the frame on the right software queue that mirrors
1739 * the hardware queue.
1740 * Additionally, the driver has to then use these HW queue IDs for the queue
1741 * management functions (ieee80211_stop_queue() et al.)
1742 *
1743 * The driver is free to set up the queue mappings as needed, multiple virtual
1744 * interfaces may map to the same hardware queues if needed. The setup has to
1745 * happen during add_interface or change_interface callbacks. For example, a
1746 * driver supporting station+station and station+AP modes might decide to have
1747 * 10 hardware queues to handle different scenarios:
1748 *
1749 * 4 AC HW queues for 1st vif: 0, 1, 2, 3
1750 * 4 AC HW queues for 2nd vif: 4, 5, 6, 7
1751 * after-DTIM queue for AP: 8
1752 * off-channel queue: 9
1753 *
1754 * It would then set up the hardware like this:
1755 * hw.offchannel_tx_hw_queue = 9
1756 *
1757 * and the first virtual interface that is added as follows:
1758 * vif.hw_queue[IEEE80211_AC_VO] = 0
1759 * vif.hw_queue[IEEE80211_AC_VI] = 1
1760 * vif.hw_queue[IEEE80211_AC_BE] = 2
1761 * vif.hw_queue[IEEE80211_AC_BK] = 3
1762 * vif.cab_queue = 8 // if AP mode, otherwise %IEEE80211_INVAL_HW_QUEUE
1763 * and the second virtual interface with 4-7.
1764 *
1765 * If queue 6 gets full, for example, mac80211 would only stop the second
1766 * virtual interface's BE queue since virtual interface queues are per AC.
1767 *
1768 * Note that the vif.cab_queue value should be set to %IEEE80211_INVAL_HW_QUEUE
1769 * whenever the queue is not used (i.e. the interface is not in AP mode) if the
1770 * queue could potentially be shared since mac80211 will look at cab_queue when
1771 * a queue is stopped/woken even if the interface is not in AP mode.
1772 */
1773
1774/**
1697 * enum ieee80211_filter_flags - hardware filter flags 1775 * enum ieee80211_filter_flags - hardware filter flags
1698 * 1776 *
1699 * These flags determine what the filter in hardware should be 1777 * These flags determine what the filter in hardware should be
@@ -1780,6 +1858,18 @@ enum ieee80211_frame_release_type {
1780}; 1858};
1781 1859
1782/** 1860/**
1861 * enum ieee80211_rate_control_changed - flags to indicate what changed
1862 *
1863 * @IEEE80211_RC_BW_CHANGED: The bandwidth that can be used to transmit
1864 * to this station changed.
1865 * @IEEE80211_RC_SMPS_CHANGED: The SMPS state of the station changed.
1866 */
1867enum ieee80211_rate_control_changed {
1868 IEEE80211_RC_BW_CHANGED = BIT(0),
1869 IEEE80211_RC_SMPS_CHANGED = BIT(1),
1870};
1871
1872/**
1783 * struct ieee80211_ops - callbacks from mac80211 to the driver 1873 * struct ieee80211_ops - callbacks from mac80211 to the driver
1784 * 1874 *
1785 * This structure contains various callbacks that the driver may 1875 * This structure contains various callbacks that the driver may
@@ -1980,6 +2070,14 @@ enum ieee80211_frame_release_type {
1980 * up the list of states. 2070 * up the list of states.
1981 * The callback can sleep. 2071 * The callback can sleep.
1982 * 2072 *
2073 * @sta_rc_update: Notifies the driver of changes to the bitrates that can be
2074 * used to transmit to the station. The changes are advertised with bits
2075 * from &enum ieee80211_rate_control_changed and the values are reflected
2076 * in the station data. This callback should only be used when the driver
2077 * uses hardware rate control (%IEEE80211_HW_HAS_RATE_CONTROL) since
2078 * otherwise the rate control algorithm is notified directly.
2079 * Must be atomic.
2080 *
1983 * @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max), 2081 * @conf_tx: Configure TX queue parameters (EDCF (aifs, cw_min, cw_max),
1984 * bursting) for a hardware TX queue. 2082 * bursting) for a hardware TX queue.
1985 * Returns a negative error code on failure. 2083 * Returns a negative error code on failure.
@@ -2135,6 +2233,7 @@ struct ieee80211_ops {
2135#ifdef CONFIG_PM 2233#ifdef CONFIG_PM
2136 int (*suspend)(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan); 2234 int (*suspend)(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan);
2137 int (*resume)(struct ieee80211_hw *hw); 2235 int (*resume)(struct ieee80211_hw *hw);
2236 void (*set_wakeup)(struct ieee80211_hw *hw, bool enabled);
2138#endif 2237#endif
2139 int (*add_interface)(struct ieee80211_hw *hw, 2238 int (*add_interface)(struct ieee80211_hw *hw,
2140 struct ieee80211_vif *vif); 2239 struct ieee80211_vif *vif);
@@ -2196,8 +2295,12 @@ struct ieee80211_ops {
2196 struct ieee80211_sta *sta, 2295 struct ieee80211_sta *sta,
2197 enum ieee80211_sta_state old_state, 2296 enum ieee80211_sta_state old_state,
2198 enum ieee80211_sta_state new_state); 2297 enum ieee80211_sta_state new_state);
2298 void (*sta_rc_update)(struct ieee80211_hw *hw,
2299 struct ieee80211_vif *vif,
2300 struct ieee80211_sta *sta,
2301 u32 changed);
2199 int (*conf_tx)(struct ieee80211_hw *hw, 2302 int (*conf_tx)(struct ieee80211_hw *hw,
2200 struct ieee80211_vif *vif, u16 queue, 2303 struct ieee80211_vif *vif, u16 ac,
2201 const struct ieee80211_tx_queue_params *params); 2304 const struct ieee80211_tx_queue_params *params);
2202 u64 (*get_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif); 2305 u64 (*get_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
2203 void (*set_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 2306 void (*set_tsf)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
@@ -3512,19 +3615,6 @@ void ieee80211_send_bar(struct ieee80211_vif *vif, u8 *ra, u16 tid, u16 ssn);
3512/* Rate control API */ 3615/* Rate control API */
3513 3616
3514/** 3617/**
3515 * enum rate_control_changed - flags to indicate which parameter changed
3516 *
3517 * @IEEE80211_RC_HT_CHANGED: The HT parameters of the operating channel have
3518 * changed, rate control algorithm can update its internal state if needed.
3519 * @IEEE80211_RC_SMPS_CHANGED: The SMPS state of the station changed, the rate
3520 * control algorithm needs to adjust accordingly.
3521 */
3522enum rate_control_changed {
3523 IEEE80211_RC_HT_CHANGED = BIT(0),
3524 IEEE80211_RC_SMPS_CHANGED = BIT(1),
3525};
3526
3527/**
3528 * struct ieee80211_tx_rate_control - rate control information for/from RC algo 3618 * struct ieee80211_tx_rate_control - rate control information for/from RC algo
3529 * 3619 *
3530 * @hw: The hardware the algorithm is invoked for. 3620 * @hw: The hardware the algorithm is invoked for.
@@ -3569,9 +3659,8 @@ struct rate_control_ops {
3569 void (*rate_init)(void *priv, struct ieee80211_supported_band *sband, 3659 void (*rate_init)(void *priv, struct ieee80211_supported_band *sband,
3570 struct ieee80211_sta *sta, void *priv_sta); 3660 struct ieee80211_sta *sta, void *priv_sta);
3571 void (*rate_update)(void *priv, struct ieee80211_supported_band *sband, 3661 void (*rate_update)(void *priv, struct ieee80211_supported_band *sband,
3572 struct ieee80211_sta *sta, 3662 struct ieee80211_sta *sta, void *priv_sta,
3573 void *priv_sta, u32 changed, 3663 u32 changed);
3574 enum nl80211_channel_type oper_chan_type);
3575 void (*free_sta)(void *priv, struct ieee80211_sta *sta, 3664 void (*free_sta)(void *priv, struct ieee80211_sta *sta,
3576 void *priv_sta); 3665 void *priv_sta);
3577 3666
@@ -3706,8 +3795,9 @@ void ieee80211_enable_rssi_reports(struct ieee80211_vif *vif,
3706 3795
3707void ieee80211_disable_rssi_reports(struct ieee80211_vif *vif); 3796void ieee80211_disable_rssi_reports(struct ieee80211_vif *vif);
3708 3797
3709int ieee80211_add_srates_ie(struct ieee80211_vif *vif, struct sk_buff *skb); 3798int ieee80211_add_srates_ie(struct ieee80211_vif *vif,
3799 struct sk_buff *skb, bool need_basic);
3710 3800
3711int ieee80211_add_ext_srates_ie(struct ieee80211_vif *vif, 3801int ieee80211_add_ext_srates_ie(struct ieee80211_vif *vif,
3712 struct sk_buff *skb); 3802 struct sk_buff *skb, bool need_basic);
3713#endif /* MAC80211_H */ 3803#endif /* MAC80211_H */