diff options
author | John W. Linville <linville@tuxdriver.com> | 2012-10-19 15:36:53 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-10-19 15:36:53 -0400 |
commit | 3cd17638fdf13d2f7fe76465cf74106e612af5eb (patch) | |
tree | a19bff1c69430750894129c99404130f4fec689d /include | |
parent | bc27d5f14363a1065bf9437a5bca5409492b6c06 (diff) | |
parent | d012a605108a482392be80710ea35f1db27c4aa9 (diff) |
Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/ieee80211.h | 47 | ||||
-rw-r--r-- | include/net/cfg80211.h | 14 | ||||
-rw-r--r-- | include/net/mac80211.h | 101 | ||||
-rw-r--r-- | include/uapi/linux/nl80211.h | 48 |
4 files changed, 193 insertions, 17 deletions
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index 2385119f8bb0..85764a900731 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
@@ -1107,20 +1107,6 @@ struct ieee80211_ht_operation { | |||
1107 | #define WLAN_HT_SMPS_CONTROL_STATIC 1 | 1107 | #define WLAN_HT_SMPS_CONTROL_STATIC 1 |
1108 | #define WLAN_HT_SMPS_CONTROL_DYNAMIC 3 | 1108 | #define WLAN_HT_SMPS_CONTROL_DYNAMIC 3 |
1109 | 1109 | ||
1110 | #define VHT_MCS_SUPPORTED_SET_SIZE 8 | ||
1111 | |||
1112 | struct ieee80211_vht_capabilities { | ||
1113 | __le32 vht_capabilities_info; | ||
1114 | u8 vht_supported_mcs_set[VHT_MCS_SUPPORTED_SET_SIZE]; | ||
1115 | } __packed; | ||
1116 | |||
1117 | struct ieee80211_vht_operation { | ||
1118 | u8 vht_op_info_chwidth; | ||
1119 | u8 vht_op_info_chan_center_freq_seg1_idx; | ||
1120 | u8 vht_op_info_chan_center_freq_seg2_idx; | ||
1121 | __le16 vht_basic_mcs_set; | ||
1122 | } __packed; | ||
1123 | |||
1124 | /** | 1110 | /** |
1125 | * struct ieee80211_vht_mcs_info - VHT MCS information | 1111 | * struct ieee80211_vht_mcs_info - VHT MCS information |
1126 | * @rx_mcs_map: RX MCS map 2 bits for each stream, total 8 streams | 1112 | * @rx_mcs_map: RX MCS map 2 bits for each stream, total 8 streams |
@@ -1141,6 +1127,37 @@ struct ieee80211_vht_mcs_info { | |||
1141 | __le16 tx_highest; | 1127 | __le16 tx_highest; |
1142 | } __packed; | 1128 | } __packed; |
1143 | 1129 | ||
1130 | /** | ||
1131 | * struct ieee80211_vht_cap - VHT capabilities | ||
1132 | * | ||
1133 | * This structure is the "VHT capabilities element" as | ||
1134 | * described in 802.11ac D3.0 8.4.2.160 | ||
1135 | * @vht_cap_info: VHT capability info | ||
1136 | * @supp_mcs: VHT MCS supported rates | ||
1137 | */ | ||
1138 | struct ieee80211_vht_cap { | ||
1139 | __le32 vht_cap_info; | ||
1140 | struct ieee80211_vht_mcs_info supp_mcs; | ||
1141 | } __packed; | ||
1142 | |||
1143 | /** | ||
1144 | * struct ieee80211_vht_operation - VHT operation IE | ||
1145 | * | ||
1146 | * This structure is the "VHT operation element" as | ||
1147 | * described in 802.11ac D3.0 8.4.2.161 | ||
1148 | * @chan_width: Operating channel width | ||
1149 | * @center_freq_seg1_idx: center freq segment 1 index | ||
1150 | * @center_freq_seg2_idx: center freq segment 2 index | ||
1151 | * @basic_mcs_set: VHT Basic MCS rate set | ||
1152 | */ | ||
1153 | struct ieee80211_vht_operation { | ||
1154 | u8 chan_width; | ||
1155 | u8 center_freq_seg1_idx; | ||
1156 | u8 center_freq_seg2_idx; | ||
1157 | __le16 basic_mcs_set; | ||
1158 | } __packed; | ||
1159 | |||
1160 | |||
1144 | #define IEEE80211_VHT_MCS_ZERO_TO_SEVEN_SUPPORT 0 | 1161 | #define IEEE80211_VHT_MCS_ZERO_TO_SEVEN_SUPPORT 0 |
1145 | #define IEEE80211_VHT_MCS_ZERO_TO_EIGHT_SUPPORT 1 | 1162 | #define IEEE80211_VHT_MCS_ZERO_TO_EIGHT_SUPPORT 1 |
1146 | #define IEEE80211_VHT_MCS_ZERO_TO_NINE_SUPPORT 2 | 1163 | #define IEEE80211_VHT_MCS_ZERO_TO_NINE_SUPPORT 2 |
@@ -1440,8 +1457,6 @@ enum ieee80211_eid { | |||
1440 | 1457 | ||
1441 | WLAN_EID_RSN = 48, | 1458 | WLAN_EID_RSN = 48, |
1442 | WLAN_EID_MMIE = 76, | 1459 | WLAN_EID_MMIE = 76, |
1443 | WLAN_EID_WPA = 221, | ||
1444 | WLAN_EID_GENERIC = 221, | ||
1445 | WLAN_EID_VENDOR_SPECIFIC = 221, | 1460 | WLAN_EID_VENDOR_SPECIFIC = 221, |
1446 | WLAN_EID_QOS_PARAMETER = 222, | 1461 | WLAN_EID_QOS_PARAMETER = 222, |
1447 | 1462 | ||
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 1b4989082244..aa0e4a12308c 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
@@ -498,6 +498,7 @@ enum station_parameters_apply_mask { | |||
498 | * @plink_action: plink action to take | 498 | * @plink_action: plink action to take |
499 | * @plink_state: set the peer link state for a station | 499 | * @plink_state: set the peer link state for a station |
500 | * @ht_capa: HT capabilities of station | 500 | * @ht_capa: HT capabilities of station |
501 | * @vht_capa: VHT capabilities of station | ||
501 | * @uapsd_queues: bitmap of queues configured for uapsd. same format | 502 | * @uapsd_queues: bitmap of queues configured for uapsd. same format |
502 | * as the AC bitmap in the QoS info field | 503 | * as the AC bitmap in the QoS info field |
503 | * @max_sp: max Service Period. same format as the MAX_SP in the | 504 | * @max_sp: max Service Period. same format as the MAX_SP in the |
@@ -517,6 +518,7 @@ struct station_parameters { | |||
517 | u8 plink_action; | 518 | u8 plink_action; |
518 | u8 plink_state; | 519 | u8 plink_state; |
519 | struct ieee80211_ht_cap *ht_capa; | 520 | struct ieee80211_ht_cap *ht_capa; |
521 | struct ieee80211_vht_cap *vht_capa; | ||
520 | u8 uapsd_queues; | 522 | u8 uapsd_queues; |
521 | u8 max_sp; | 523 | u8 max_sp; |
522 | }; | 524 | }; |
@@ -1000,8 +1002,10 @@ struct cfg80211_ssid { | |||
1000 | * @n_channels: total number of channels to scan | 1002 | * @n_channels: total number of channels to scan |
1001 | * @ie: optional information element(s) to add into Probe Request or %NULL | 1003 | * @ie: optional information element(s) to add into Probe Request or %NULL |
1002 | * @ie_len: length of ie in octets | 1004 | * @ie_len: length of ie in octets |
1005 | * @flags: bit field of flags controlling operation | ||
1003 | * @rates: bitmap of rates to advertise for each band | 1006 | * @rates: bitmap of rates to advertise for each band |
1004 | * @wiphy: the wiphy this was for | 1007 | * @wiphy: the wiphy this was for |
1008 | * @scan_start: time (in jiffies) when the scan started | ||
1005 | * @wdev: the wireless device to scan for | 1009 | * @wdev: the wireless device to scan for |
1006 | * @aborted: (internal) scan request was notified as aborted | 1010 | * @aborted: (internal) scan request was notified as aborted |
1007 | * @no_cck: used to send probe requests at non CCK rate in 2GHz band | 1011 | * @no_cck: used to send probe requests at non CCK rate in 2GHz band |
@@ -1012,6 +1016,7 @@ struct cfg80211_scan_request { | |||
1012 | u32 n_channels; | 1016 | u32 n_channels; |
1013 | const u8 *ie; | 1017 | const u8 *ie; |
1014 | size_t ie_len; | 1018 | size_t ie_len; |
1019 | u32 flags; | ||
1015 | 1020 | ||
1016 | u32 rates[IEEE80211_NUM_BANDS]; | 1021 | u32 rates[IEEE80211_NUM_BANDS]; |
1017 | 1022 | ||
@@ -1019,6 +1024,7 @@ struct cfg80211_scan_request { | |||
1019 | 1024 | ||
1020 | /* internal */ | 1025 | /* internal */ |
1021 | struct wiphy *wiphy; | 1026 | struct wiphy *wiphy; |
1027 | unsigned long scan_start; | ||
1022 | bool aborted; | 1028 | bool aborted; |
1023 | bool no_cck; | 1029 | bool no_cck; |
1024 | 1030 | ||
@@ -1044,6 +1050,7 @@ struct cfg80211_match_set { | |||
1044 | * @interval: interval between each scheduled scan cycle | 1050 | * @interval: interval between each scheduled scan cycle |
1045 | * @ie: optional information element(s) to add into Probe Request or %NULL | 1051 | * @ie: optional information element(s) to add into Probe Request or %NULL |
1046 | * @ie_len: length of ie in octets | 1052 | * @ie_len: length of ie in octets |
1053 | * @flags: bit field of flags controlling operation | ||
1047 | * @match_sets: sets of parameters to be matched for a scan result | 1054 | * @match_sets: sets of parameters to be matched for a scan result |
1048 | * entry to be considered valid and to be passed to the host | 1055 | * entry to be considered valid and to be passed to the host |
1049 | * (others are filtered out). | 1056 | * (others are filtered out). |
@@ -1061,6 +1068,7 @@ struct cfg80211_sched_scan_request { | |||
1061 | u32 interval; | 1068 | u32 interval; |
1062 | const u8 *ie; | 1069 | const u8 *ie; |
1063 | size_t ie_len; | 1070 | size_t ie_len; |
1071 | u32 flags; | ||
1064 | struct cfg80211_match_set *match_sets; | 1072 | struct cfg80211_match_set *match_sets; |
1065 | int n_match_sets; | 1073 | int n_match_sets; |
1066 | s32 rssi_thold; | 1074 | s32 rssi_thold; |
@@ -1068,6 +1076,7 @@ struct cfg80211_sched_scan_request { | |||
1068 | /* internal */ | 1076 | /* internal */ |
1069 | struct wiphy *wiphy; | 1077 | struct wiphy *wiphy; |
1070 | struct net_device *dev; | 1078 | struct net_device *dev; |
1079 | unsigned long scan_start; | ||
1071 | 1080 | ||
1072 | /* keep last */ | 1081 | /* keep last */ |
1073 | struct ieee80211_channel *channels[0]; | 1082 | struct ieee80211_channel *channels[0]; |
@@ -1152,6 +1161,9 @@ const u8 *ieee80211_bss_get_ie(struct cfg80211_bss *bss, u8 ie); | |||
1152 | * @key_len: length of WEP key for shared key authentication | 1161 | * @key_len: length of WEP key for shared key authentication |
1153 | * @key_idx: index of WEP key for shared key authentication | 1162 | * @key_idx: index of WEP key for shared key authentication |
1154 | * @key: WEP key for shared key authentication | 1163 | * @key: WEP key for shared key authentication |
1164 | * @sae_data: Non-IE data to use with SAE or %NULL. This starts with | ||
1165 | * Authentication transaction sequence number field. | ||
1166 | * @sae_data_len: Length of sae_data buffer in octets | ||
1155 | */ | 1167 | */ |
1156 | struct cfg80211_auth_request { | 1168 | struct cfg80211_auth_request { |
1157 | struct cfg80211_bss *bss; | 1169 | struct cfg80211_bss *bss; |
@@ -1160,6 +1172,8 @@ struct cfg80211_auth_request { | |||
1160 | enum nl80211_auth_type auth_type; | 1172 | enum nl80211_auth_type auth_type; |
1161 | const u8 *key; | 1173 | const u8 *key; |
1162 | u8 key_len, key_idx; | 1174 | u8 key_len, key_idx; |
1175 | const u8 *sae_data; | ||
1176 | size_t sae_data_len; | ||
1163 | }; | 1177 | }; |
1164 | 1178 | ||
1165 | /** | 1179 | /** |
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 82558c8decf8..71c2f9c2f5be 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -144,6 +144,41 @@ struct ieee80211_low_level_stats { | |||
144 | }; | 144 | }; |
145 | 145 | ||
146 | /** | 146 | /** |
147 | * enum ieee80211_chanctx_change - change flag for channel context | ||
148 | * @IEEE80211_CHANCTX_CHANGE_CHANNEL_TYPE: The channel type was changed | ||
149 | * @IEEE80211_CHANCTX_CHANGE_RX_CHAINS: The number of RX chains changed | ||
150 | */ | ||
151 | enum ieee80211_chanctx_change { | ||
152 | IEEE80211_CHANCTX_CHANGE_CHANNEL_TYPE = BIT(0), | ||
153 | IEEE80211_CHANCTX_CHANGE_RX_CHAINS = BIT(1), | ||
154 | }; | ||
155 | |||
156 | /** | ||
157 | * struct ieee80211_chanctx_conf - channel context that vifs may be tuned to | ||
158 | * | ||
159 | * This is the driver-visible part. The ieee80211_chanctx | ||
160 | * that contains it is visible in mac80211 only. | ||
161 | * | ||
162 | * @channel: the channel to tune to | ||
163 | * @channel_type: the channel (HT) type | ||
164 | * @rx_chains_static: The number of RX chains that must always be | ||
165 | * active on the channel to receive MIMO transmissions | ||
166 | * @rx_chains_dynamic: The number of RX chains that must be enabled | ||
167 | * after RTS/CTS handshake to receive SMPS MIMO transmissions; | ||
168 | * this will always be >= @rx_chains_always. | ||
169 | * @drv_priv: data area for driver use, will always be aligned to | ||
170 | * sizeof(void *), size is determined in hw information. | ||
171 | */ | ||
172 | struct ieee80211_chanctx_conf { | ||
173 | struct ieee80211_channel *channel; | ||
174 | enum nl80211_channel_type channel_type; | ||
175 | |||
176 | u8 rx_chains_static, rx_chains_dynamic; | ||
177 | |||
178 | u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *)))); | ||
179 | }; | ||
180 | |||
181 | /** | ||
147 | * enum ieee80211_bss_change - BSS change notification flags | 182 | * enum ieee80211_bss_change - BSS change notification flags |
148 | * | 183 | * |
149 | * These flags are used with the bss_info_changed() callback | 184 | * These flags are used with the bss_info_changed() callback |
@@ -223,6 +258,7 @@ enum ieee80211_rssi_event { | |||
223 | * @assoc: association status | 258 | * @assoc: association status |
224 | * @ibss_joined: indicates whether this station is part of an IBSS | 259 | * @ibss_joined: indicates whether this station is part of an IBSS |
225 | * or not | 260 | * or not |
261 | * @ibss_creator: indicates if a new IBSS network is being created | ||
226 | * @aid: association ID number, valid only when @assoc is true | 262 | * @aid: association ID number, valid only when @assoc is true |
227 | * @use_cts_prot: use CTS protection | 263 | * @use_cts_prot: use CTS protection |
228 | * @use_short_preamble: use 802.11b short preamble; | 264 | * @use_short_preamble: use 802.11b short preamble; |
@@ -278,6 +314,7 @@ struct ieee80211_bss_conf { | |||
278 | const u8 *bssid; | 314 | const u8 *bssid; |
279 | /* association related data */ | 315 | /* association related data */ |
280 | bool assoc, ibss_joined; | 316 | bool assoc, ibss_joined; |
317 | bool ibss_creator; | ||
281 | u16 aid; | 318 | u16 aid; |
282 | /* erp related data */ | 319 | /* erp related data */ |
283 | bool use_cts_prot; | 320 | bool use_cts_prot; |
@@ -794,6 +831,8 @@ enum ieee80211_conf_flags { | |||
794 | * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed | 831 | * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed |
795 | * @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed | 832 | * @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed |
796 | * @IEEE80211_CONF_CHANGE_SMPS: Spatial multiplexing powersave mode changed | 833 | * @IEEE80211_CONF_CHANGE_SMPS: Spatial multiplexing powersave mode changed |
834 | * Note that this is only valid if channel contexts are not used, | ||
835 | * otherwise each channel context has the number of chains listed. | ||
797 | */ | 836 | */ |
798 | enum ieee80211_conf_changed { | 837 | enum ieee80211_conf_changed { |
799 | IEEE80211_CONF_CHANGE_SMPS = BIT(1), | 838 | IEEE80211_CONF_CHANGE_SMPS = BIT(1), |
@@ -859,7 +898,9 @@ enum ieee80211_smps_mode { | |||
859 | * | 898 | * |
860 | * @smps_mode: spatial multiplexing powersave mode; note that | 899 | * @smps_mode: spatial multiplexing powersave mode; note that |
861 | * %IEEE80211_SMPS_STATIC is used when the device is not | 900 | * %IEEE80211_SMPS_STATIC is used when the device is not |
862 | * configured for an HT channel | 901 | * configured for an HT channel. |
902 | * Note that this is only valid if channel contexts are not used, | ||
903 | * otherwise each channel context has the number of chains listed. | ||
863 | */ | 904 | */ |
864 | struct ieee80211_conf { | 905 | struct ieee80211_conf { |
865 | u32 flags; | 906 | u32 flags; |
@@ -931,6 +972,11 @@ enum ieee80211_vif_flags { | |||
931 | * at runtime, mac80211 will never touch this field | 972 | * at runtime, mac80211 will never touch this field |
932 | * @hw_queue: hardware queue for each AC | 973 | * @hw_queue: hardware queue for each AC |
933 | * @cab_queue: content-after-beacon (DTIM beacon really) queue, AP mode only | 974 | * @cab_queue: content-after-beacon (DTIM beacon really) queue, AP mode only |
975 | * @chanctx_conf: The channel context this interface is assigned to, or %NULL | ||
976 | * when it is not assigned. This pointer is RCU-protected due to the TX | ||
977 | * path needing to access it; even though the netdev carrier will always | ||
978 | * be off when it is %NULL there can still be races and packets could be | ||
979 | * processed after it switches back to %NULL. | ||
934 | * @drv_priv: data area for driver use, will always be aligned to | 980 | * @drv_priv: data area for driver use, will always be aligned to |
935 | * sizeof(void *). | 981 | * sizeof(void *). |
936 | */ | 982 | */ |
@@ -943,6 +989,8 @@ struct ieee80211_vif { | |||
943 | u8 cab_queue; | 989 | u8 cab_queue; |
944 | u8 hw_queue[IEEE80211_NUM_ACS]; | 990 | u8 hw_queue[IEEE80211_NUM_ACS]; |
945 | 991 | ||
992 | struct ieee80211_chanctx_conf __rcu *chanctx_conf; | ||
993 | |||
946 | u32 driver_flags; | 994 | u32 driver_flags; |
947 | 995 | ||
948 | /* must be last */ | 996 | /* must be last */ |
@@ -1076,6 +1124,8 @@ enum ieee80211_sta_state { | |||
1076 | * @aid: AID we assigned to the station if we're an AP | 1124 | * @aid: AID we assigned to the station if we're an AP |
1077 | * @supp_rates: Bitmap of supported rates (per band) | 1125 | * @supp_rates: Bitmap of supported rates (per band) |
1078 | * @ht_cap: HT capabilities of this STA; restricted to our own TX capabilities | 1126 | * @ht_cap: HT capabilities of this STA; restricted to our own TX capabilities |
1127 | * @vht_cap: VHT capabilities of this STA; Not restricting any capabilities | ||
1128 | * of remote STA. Taking as is. | ||
1079 | * @wme: indicates whether the STA supports WME. Only valid during AP-mode. | 1129 | * @wme: indicates whether the STA supports WME. Only valid during AP-mode. |
1080 | * @drv_priv: data area for driver use, will always be aligned to | 1130 | * @drv_priv: data area for driver use, will always be aligned to |
1081 | * sizeof(void *), size is determined in hw information. | 1131 | * sizeof(void *), size is determined in hw information. |
@@ -1088,6 +1138,7 @@ struct ieee80211_sta { | |||
1088 | u8 addr[ETH_ALEN]; | 1138 | u8 addr[ETH_ALEN]; |
1089 | u16 aid; | 1139 | u16 aid; |
1090 | struct ieee80211_sta_ht_cap ht_cap; | 1140 | struct ieee80211_sta_ht_cap ht_cap; |
1141 | struct ieee80211_sta_vht_cap vht_cap; | ||
1091 | bool wme; | 1142 | bool wme; |
1092 | u8 uapsd_queues; | 1143 | u8 uapsd_queues; |
1093 | u8 max_sp; | 1144 | u8 max_sp; |
@@ -1325,6 +1376,8 @@ enum ieee80211_hw_flags { | |||
1325 | * within &struct ieee80211_vif. | 1376 | * within &struct ieee80211_vif. |
1326 | * @sta_data_size: size (in bytes) of the drv_priv data area | 1377 | * @sta_data_size: size (in bytes) of the drv_priv data area |
1327 | * within &struct ieee80211_sta. | 1378 | * within &struct ieee80211_sta. |
1379 | * @chanctx_data_size: size (in bytes) of the drv_priv data area | ||
1380 | * within &struct ieee80211_chanctx_conf. | ||
1328 | * | 1381 | * |
1329 | * @max_rates: maximum number of alternate rate retry stages the hw | 1382 | * @max_rates: maximum number of alternate rate retry stages the hw |
1330 | * can handle. | 1383 | * can handle. |
@@ -1369,6 +1422,7 @@ struct ieee80211_hw { | |||
1369 | int channel_change_time; | 1422 | int channel_change_time; |
1370 | int vif_data_size; | 1423 | int vif_data_size; |
1371 | int sta_data_size; | 1424 | int sta_data_size; |
1425 | int chanctx_data_size; | ||
1372 | int napi_weight; | 1426 | int napi_weight; |
1373 | u16 queues; | 1427 | u16 queues; |
1374 | u16 max_listen_interval; | 1428 | u16 max_listen_interval; |
@@ -2317,6 +2371,16 @@ enum ieee80211_rate_control_changed { | |||
2317 | * The callback will be called before each transmission and upon return | 2371 | * The callback will be called before each transmission and upon return |
2318 | * mac80211 will transmit the frame right away. | 2372 | * mac80211 will transmit the frame right away. |
2319 | * The callback is optional and can (should!) sleep. | 2373 | * The callback is optional and can (should!) sleep. |
2374 | * | ||
2375 | * @add_chanctx: Notifies device driver about new channel context creation. | ||
2376 | * @remove_chanctx: Notifies device driver about channel context destruction. | ||
2377 | * @change_chanctx: Notifies device driver about channel context changes that | ||
2378 | * may happen when combining different virtual interfaces on the same | ||
2379 | * channel context with different settings | ||
2380 | * @assign_vif_chanctx: Notifies device driver about channel context being bound | ||
2381 | * to vif. Possible use is for hw queue remapping. | ||
2382 | * @unassign_vif_chanctx: Notifies device driver about channel context being | ||
2383 | * unbound from vif. | ||
2320 | */ | 2384 | */ |
2321 | struct ieee80211_ops { | 2385 | struct ieee80211_ops { |
2322 | void (*tx)(struct ieee80211_hw *hw, | 2386 | void (*tx)(struct ieee80211_hw *hw, |
@@ -2461,6 +2525,20 @@ struct ieee80211_ops { | |||
2461 | 2525 | ||
2462 | void (*mgd_prepare_tx)(struct ieee80211_hw *hw, | 2526 | void (*mgd_prepare_tx)(struct ieee80211_hw *hw, |
2463 | struct ieee80211_vif *vif); | 2527 | struct ieee80211_vif *vif); |
2528 | |||
2529 | int (*add_chanctx)(struct ieee80211_hw *hw, | ||
2530 | struct ieee80211_chanctx_conf *ctx); | ||
2531 | void (*remove_chanctx)(struct ieee80211_hw *hw, | ||
2532 | struct ieee80211_chanctx_conf *ctx); | ||
2533 | void (*change_chanctx)(struct ieee80211_hw *hw, | ||
2534 | struct ieee80211_chanctx_conf *ctx, | ||
2535 | u32 changed); | ||
2536 | int (*assign_vif_chanctx)(struct ieee80211_hw *hw, | ||
2537 | struct ieee80211_vif *vif, | ||
2538 | struct ieee80211_chanctx_conf *ctx); | ||
2539 | void (*unassign_vif_chanctx)(struct ieee80211_hw *hw, | ||
2540 | struct ieee80211_vif *vif, | ||
2541 | struct ieee80211_chanctx_conf *ctx); | ||
2464 | }; | 2542 | }; |
2465 | 2543 | ||
2466 | /** | 2544 | /** |
@@ -3524,6 +3602,27 @@ void ieee80211_iter_keys(struct ieee80211_hw *hw, | |||
3524 | void *iter_data); | 3602 | void *iter_data); |
3525 | 3603 | ||
3526 | /** | 3604 | /** |
3605 | * ieee80211_iter_chan_contexts_atomic - iterate channel contexts | ||
3606 | * @hw: pointre obtained from ieee80211_alloc_hw(). | ||
3607 | * @iter: iterator function | ||
3608 | * @iter_data: data passed to iterator function | ||
3609 | * | ||
3610 | * Iterate all active channel contexts. This function is atomic and | ||
3611 | * doesn't acquire any locks internally that might be held in other | ||
3612 | * places while calling into the driver. | ||
3613 | * | ||
3614 | * The iterator will not find a context that's being added (during | ||
3615 | * the driver callback to add it) but will find it while it's being | ||
3616 | * removed. | ||
3617 | */ | ||
3618 | void ieee80211_iter_chan_contexts_atomic( | ||
3619 | struct ieee80211_hw *hw, | ||
3620 | void (*iter)(struct ieee80211_hw *hw, | ||
3621 | struct ieee80211_chanctx_conf *chanctx_conf, | ||
3622 | void *data), | ||
3623 | void *iter_data); | ||
3624 | |||
3625 | /** | ||
3527 | * ieee80211_ap_probereq_get - retrieve a Probe Request template | 3626 | * ieee80211_ap_probereq_get - retrieve a Probe Request template |
3528 | * @hw: pointer obtained from ieee80211_alloc_hw(). | 3627 | * @hw: pointer obtained from ieee80211_alloc_hw(). |
3529 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. | 3628 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. |
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index 7df9b500c804..617d0fbfc96f 100644 --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h | |||
@@ -1273,6 +1273,14 @@ enum nl80211_commands { | |||
1273 | * the connection request from a station. nl80211_connect_failed_reason | 1273 | * the connection request from a station. nl80211_connect_failed_reason |
1274 | * enum has different reasons of connection failure. | 1274 | * enum has different reasons of connection failure. |
1275 | * | 1275 | * |
1276 | * @NL80211_ATTR_SAE_DATA: SAE elements in Authentication frames. This starts | ||
1277 | * with the Authentication transaction sequence number field. | ||
1278 | * | ||
1279 | * @NL80211_ATTR_VHT_CAPABILITY: VHT Capability information element (from | ||
1280 | * association request when used with NL80211_CMD_NEW_STATION) | ||
1281 | * | ||
1282 | * @NL80211_ATTR_SCAN_FLAGS: scan request control flags (u32) | ||
1283 | * | ||
1276 | * @NL80211_ATTR_MAX: highest attribute number currently defined | 1284 | * @NL80211_ATTR_MAX: highest attribute number currently defined |
1277 | * @__NL80211_ATTR_AFTER_LAST: internal use | 1285 | * @__NL80211_ATTR_AFTER_LAST: internal use |
1278 | */ | 1286 | */ |
@@ -1530,6 +1538,12 @@ enum nl80211_attrs { | |||
1530 | 1538 | ||
1531 | NL80211_ATTR_CONN_FAILED_REASON, | 1539 | NL80211_ATTR_CONN_FAILED_REASON, |
1532 | 1540 | ||
1541 | NL80211_ATTR_SAE_DATA, | ||
1542 | |||
1543 | NL80211_ATTR_VHT_CAPABILITY, | ||
1544 | |||
1545 | NL80211_ATTR_SCAN_FLAGS, | ||
1546 | |||
1533 | /* add attributes here, update the policy in nl80211.c */ | 1547 | /* add attributes here, update the policy in nl80211.c */ |
1534 | 1548 | ||
1535 | __NL80211_ATTR_AFTER_LAST, | 1549 | __NL80211_ATTR_AFTER_LAST, |
@@ -1573,6 +1587,7 @@ enum nl80211_attrs { | |||
1573 | #define NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY 16 | 1587 | #define NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY 16 |
1574 | #define NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY 24 | 1588 | #define NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY 24 |
1575 | #define NL80211_HT_CAPABILITY_LEN 26 | 1589 | #define NL80211_HT_CAPABILITY_LEN 26 |
1590 | #define NL80211_VHT_CAPABILITY_LEN 12 | ||
1576 | 1591 | ||
1577 | #define NL80211_MAX_NR_CIPHER_SUITES 5 | 1592 | #define NL80211_MAX_NR_CIPHER_SUITES 5 |
1578 | #define NL80211_MAX_NR_AKM_SUITES 2 | 1593 | #define NL80211_MAX_NR_AKM_SUITES 2 |
@@ -2489,6 +2504,7 @@ enum nl80211_bss_status { | |||
2489 | * @NL80211_AUTHTYPE_SHARED_KEY: Shared Key authentication (WEP only) | 2504 | * @NL80211_AUTHTYPE_SHARED_KEY: Shared Key authentication (WEP only) |
2490 | * @NL80211_AUTHTYPE_FT: Fast BSS Transition (IEEE 802.11r) | 2505 | * @NL80211_AUTHTYPE_FT: Fast BSS Transition (IEEE 802.11r) |
2491 | * @NL80211_AUTHTYPE_NETWORK_EAP: Network EAP (some Cisco APs and mainly LEAP) | 2506 | * @NL80211_AUTHTYPE_NETWORK_EAP: Network EAP (some Cisco APs and mainly LEAP) |
2507 | * @NL80211_AUTHTYPE_SAE: Simultaneous authentication of equals | ||
2492 | * @__NL80211_AUTHTYPE_NUM: internal | 2508 | * @__NL80211_AUTHTYPE_NUM: internal |
2493 | * @NL80211_AUTHTYPE_MAX: maximum valid auth algorithm | 2509 | * @NL80211_AUTHTYPE_MAX: maximum valid auth algorithm |
2494 | * @NL80211_AUTHTYPE_AUTOMATIC: determine automatically (if necessary by | 2510 | * @NL80211_AUTHTYPE_AUTOMATIC: determine automatically (if necessary by |
@@ -2500,6 +2516,7 @@ enum nl80211_auth_type { | |||
2500 | NL80211_AUTHTYPE_SHARED_KEY, | 2516 | NL80211_AUTHTYPE_SHARED_KEY, |
2501 | NL80211_AUTHTYPE_FT, | 2517 | NL80211_AUTHTYPE_FT, |
2502 | NL80211_AUTHTYPE_NETWORK_EAP, | 2518 | NL80211_AUTHTYPE_NETWORK_EAP, |
2519 | NL80211_AUTHTYPE_SAE, | ||
2503 | 2520 | ||
2504 | /* keep last */ | 2521 | /* keep last */ |
2505 | __NL80211_AUTHTYPE_NUM, | 2522 | __NL80211_AUTHTYPE_NUM, |
@@ -3028,6 +3045,12 @@ enum nl80211_ap_sme_features { | |||
3028 | * in the interface combinations, even when it's only used for scan | 3045 | * in the interface combinations, even when it's only used for scan |
3029 | * and remain-on-channel. This could be due to, for example, the | 3046 | * and remain-on-channel. This could be due to, for example, the |
3030 | * remain-on-channel implementation requiring a channel context. | 3047 | * remain-on-channel implementation requiring a channel context. |
3048 | * @NL80211_FEATURE_SAE: This driver supports simultaneous authentication of | ||
3049 | * equals (SAE) with user space SME (NL80211_CMD_AUTHENTICATE) in station | ||
3050 | * mode | ||
3051 | * @NL80211_FEATURE_LOW_PRIORITY_SCAN: This driver supports low priority scan | ||
3052 | * @NL80211_FEATURE_SCAN_FLUSH: Scan flush is supported | ||
3053 | * @NL80211_FEATURE_AP_SCAN: Support scanning using an AP vif | ||
3031 | */ | 3054 | */ |
3032 | enum nl80211_feature_flags { | 3055 | enum nl80211_feature_flags { |
3033 | NL80211_FEATURE_SK_TX_STATUS = 1 << 0, | 3056 | NL80211_FEATURE_SK_TX_STATUS = 1 << 0, |
@@ -3035,6 +3058,10 @@ enum nl80211_feature_flags { | |||
3035 | NL80211_FEATURE_INACTIVITY_TIMER = 1 << 2, | 3058 | NL80211_FEATURE_INACTIVITY_TIMER = 1 << 2, |
3036 | NL80211_FEATURE_CELL_BASE_REG_HINTS = 1 << 3, | 3059 | NL80211_FEATURE_CELL_BASE_REG_HINTS = 1 << 3, |
3037 | NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL = 1 << 4, | 3060 | NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL = 1 << 4, |
3061 | NL80211_FEATURE_SAE = 1 << 5, | ||
3062 | NL80211_FEATURE_LOW_PRIORITY_SCAN = 1 << 6, | ||
3063 | NL80211_FEATURE_SCAN_FLUSH = 1 << 7, | ||
3064 | NL80211_FEATURE_AP_SCAN = 1 << 8, | ||
3038 | }; | 3065 | }; |
3039 | 3066 | ||
3040 | /** | 3067 | /** |
@@ -3069,4 +3096,25 @@ enum nl80211_connect_failed_reason { | |||
3069 | NL80211_CONN_FAIL_BLOCKED_CLIENT, | 3096 | NL80211_CONN_FAIL_BLOCKED_CLIENT, |
3070 | }; | 3097 | }; |
3071 | 3098 | ||
3099 | /** | ||
3100 | * enum nl80211_scan_flags - scan request control flags | ||
3101 | * | ||
3102 | * Scan request control flags are used to control the handling | ||
3103 | * of NL80211_CMD_TRIGGER_SCAN and NL80211_CMD_START_SCHED_SCAN | ||
3104 | * requests. | ||
3105 | * | ||
3106 | * @NL80211_SCAN_FLAG_LOW_PRIORITY: scan request has low priority | ||
3107 | * @NL80211_SCAN_FLAG_FLUSH: flush cache before scanning | ||
3108 | * @NL80211_SCAN_FLAG_AP: force a scan even if the interface is configured | ||
3109 | * as AP and the beaconing has already been configured. This attribute is | ||
3110 | * dangerous because will destroy stations performance as a lot of frames | ||
3111 | * will be lost while scanning off-channel, therefore it must be used only | ||
3112 | * when really needed | ||
3113 | */ | ||
3114 | enum nl80211_scan_flags { | ||
3115 | NL80211_SCAN_FLAG_LOW_PRIORITY = 1<<0, | ||
3116 | NL80211_SCAN_FLAG_FLUSH = 1<<1, | ||
3117 | NL80211_SCAN_FLAG_AP = 1<<2, | ||
3118 | }; | ||
3119 | |||
3072 | #endif /* __LINUX_NL80211_H */ | 3120 | #endif /* __LINUX_NL80211_H */ |