diff options
author | David S. Miller <davem@davemloft.net> | 2012-04-12 20:12:31 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-04-12 20:12:31 -0400 |
commit | 816a7854d56f19aeba3c83e1ed8c2c0ef275365a (patch) | |
tree | c3b82ad98006fc5fa7b408c142e75a6053195dfa /include | |
parent | 011e3c63251be832d23df9f0697626ab7b354d02 (diff) | |
parent | 7eab0f64a9eba5405222fdef0ede2468bf495efd (diff) |
Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/ieee80211.h | 32 | ||||
-rw-r--r-- | include/linux/nl80211.h | 41 | ||||
-rw-r--r-- | include/net/cfg80211.h | 33 | ||||
-rw-r--r-- | include/net/mac80211.h | 142 |
4 files changed, 199 insertions, 49 deletions
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index 210e2c325534..db84e2f6b289 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 | ||
648 | enum ieee80211_rann_flags { | 648 | enum 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 | */ |
1015 | struct ieee80211_ht_info { | 1015 | struct 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 | */ | ||
1448 | enum { | ||
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 e474f6e780cc..1335084b1c69 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 | */ |
2147 | enum nl80211_meshconf_params { | 2159 | enum 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 | */ |
2210 | enum nl80211_mesh_setup_params { | 2228 | enum 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 | */ |
2237 | enum nl80211_txq_attr { | 2256 | enum 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 | ||
2250 | enum nl80211_txq_q { | 2269 | enum 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 | |||
2257 | enum nl80211_channel_type { | 2284 | enum 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 83d800c31e3c..a587867375b2 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 | */ |
525 | enum station_info_flags { | 526 | enum 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 | */ |
647 | struct station_info { | 650 | struct 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 { | |||
834 | struct mesh_setup { | 841 | struct 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 | */ |
856 | struct ieee80211_txq_params { | 864 | struct 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 { | |||
1507 | struct cfg80211_ops { | 1518 | struct 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 | */ | ||
3365 | void 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 9210bdc7bd8d..32cd5171fa22 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 | */ |
97 | enum ieee80211_max_queues { | 97 | enum 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 | */ |
1178 | enum ieee80211_hw_flags { | 1197 | enum 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 | */ |
1270 | struct ieee80211_hw { | 1292 | struct 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 | */ | ||
1867 | enum 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 | */ | ||
3522 | enum 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 | ||
3707 | void ieee80211_disable_rssi_reports(struct ieee80211_vif *vif); | 3796 | void ieee80211_disable_rssi_reports(struct ieee80211_vif *vif); |
3708 | 3797 | ||
3709 | int ieee80211_add_srates_ie(struct ieee80211_vif *vif, struct sk_buff *skb); | 3798 | int ieee80211_add_srates_ie(struct ieee80211_vif *vif, |
3799 | struct sk_buff *skb, bool need_basic); | ||
3710 | 3800 | ||
3711 | int ieee80211_add_ext_srates_ie(struct ieee80211_vif *vif, | 3801 | int 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 */ |