diff options
Diffstat (limited to 'include/linux/ieee80211.h')
-rw-r--r-- | include/linux/ieee80211.h | 71 |
1 files changed, 70 insertions, 1 deletions
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index b1be39c76931..4f4eea8a6288 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/types.h> | 19 | #include <linux/types.h> |
20 | #include <linux/if_ether.h> | 20 | #include <linux/if_ether.h> |
21 | #include <asm/byteorder.h> | 21 | #include <asm/byteorder.h> |
22 | #include <asm/unaligned.h> | ||
22 | 23 | ||
23 | /* | 24 | /* |
24 | * DS bit usage | 25 | * DS bit usage |
@@ -1066,6 +1067,12 @@ struct ieee80211_pspoll { | |||
1066 | 1067 | ||
1067 | /* TDLS */ | 1068 | /* TDLS */ |
1068 | 1069 | ||
1070 | /* Channel switch timing */ | ||
1071 | struct ieee80211_ch_switch_timing { | ||
1072 | __le16 switch_time; | ||
1073 | __le16 switch_timeout; | ||
1074 | } __packed; | ||
1075 | |||
1069 | /* Link-id information element */ | 1076 | /* Link-id information element */ |
1070 | struct ieee80211_tdls_lnkie { | 1077 | struct ieee80211_tdls_lnkie { |
1071 | u8 ie_type; /* Link Identifier IE */ | 1078 | u8 ie_type; /* Link Identifier IE */ |
@@ -1107,6 +1114,15 @@ struct ieee80211_tdls_data { | |||
1107 | u8 dialog_token; | 1114 | u8 dialog_token; |
1108 | u8 variable[0]; | 1115 | u8 variable[0]; |
1109 | } __packed discover_req; | 1116 | } __packed discover_req; |
1117 | struct { | ||
1118 | u8 target_channel; | ||
1119 | u8 oper_class; | ||
1120 | u8 variable[0]; | ||
1121 | } __packed chan_switch_req; | ||
1122 | struct { | ||
1123 | __le16 status_code; | ||
1124 | u8 variable[0]; | ||
1125 | } __packed chan_switch_resp; | ||
1110 | } u; | 1126 | } u; |
1111 | } __packed; | 1127 | } __packed; |
1112 | 1128 | ||
@@ -1274,7 +1290,7 @@ struct ieee80211_ht_cap { | |||
1274 | #define IEEE80211_HT_AMPDU_PARM_DENSITY_SHIFT 2 | 1290 | #define IEEE80211_HT_AMPDU_PARM_DENSITY_SHIFT 2 |
1275 | 1291 | ||
1276 | /* | 1292 | /* |
1277 | * Maximum length of AMPDU that the STA can receive. | 1293 | * Maximum length of AMPDU that the STA can receive in high-throughput (HT). |
1278 | * Length = 2 ^ (13 + max_ampdu_length_exp) - 1 (octets) | 1294 | * Length = 2 ^ (13 + max_ampdu_length_exp) - 1 (octets) |
1279 | */ | 1295 | */ |
1280 | enum ieee80211_max_ampdu_length_exp { | 1296 | enum ieee80211_max_ampdu_length_exp { |
@@ -1284,6 +1300,21 @@ enum ieee80211_max_ampdu_length_exp { | |||
1284 | IEEE80211_HT_MAX_AMPDU_64K = 3 | 1300 | IEEE80211_HT_MAX_AMPDU_64K = 3 |
1285 | }; | 1301 | }; |
1286 | 1302 | ||
1303 | /* | ||
1304 | * Maximum length of AMPDU that the STA can receive in VHT. | ||
1305 | * Length = 2 ^ (13 + max_ampdu_length_exp) - 1 (octets) | ||
1306 | */ | ||
1307 | enum ieee80211_vht_max_ampdu_length_exp { | ||
1308 | IEEE80211_VHT_MAX_AMPDU_8K = 0, | ||
1309 | IEEE80211_VHT_MAX_AMPDU_16K = 1, | ||
1310 | IEEE80211_VHT_MAX_AMPDU_32K = 2, | ||
1311 | IEEE80211_VHT_MAX_AMPDU_64K = 3, | ||
1312 | IEEE80211_VHT_MAX_AMPDU_128K = 4, | ||
1313 | IEEE80211_VHT_MAX_AMPDU_256K = 5, | ||
1314 | IEEE80211_VHT_MAX_AMPDU_512K = 6, | ||
1315 | IEEE80211_VHT_MAX_AMPDU_1024K = 7 | ||
1316 | }; | ||
1317 | |||
1287 | #define IEEE80211_HT_MAX_AMPDU_FACTOR 13 | 1318 | #define IEEE80211_HT_MAX_AMPDU_FACTOR 13 |
1288 | 1319 | ||
1289 | /* Minimum MPDU start spacing */ | 1320 | /* Minimum MPDU start spacing */ |
@@ -1998,6 +2029,16 @@ enum ieee80211_tdls_actioncode { | |||
1998 | WLAN_TDLS_DISCOVERY_REQUEST = 10, | 2029 | WLAN_TDLS_DISCOVERY_REQUEST = 10, |
1999 | }; | 2030 | }; |
2000 | 2031 | ||
2032 | /* Extended Channel Switching capability to be set in the 1st byte of | ||
2033 | * the @WLAN_EID_EXT_CAPABILITY information element | ||
2034 | */ | ||
2035 | #define WLAN_EXT_CAPA1_EXT_CHANNEL_SWITCHING BIT(2) | ||
2036 | |||
2037 | /* TDLS capabilities in the the 4th byte of @WLAN_EID_EXT_CAPABILITY */ | ||
2038 | #define WLAN_EXT_CAPA4_TDLS_BUFFER_STA BIT(4) | ||
2039 | #define WLAN_EXT_CAPA4_TDLS_PEER_PSM BIT(5) | ||
2040 | #define WLAN_EXT_CAPA4_TDLS_CHAN_SWITCH BIT(6) | ||
2041 | |||
2001 | /* Interworking capabilities are set in 7th bit of 4th byte of the | 2042 | /* Interworking capabilities are set in 7th bit of 4th byte of the |
2002 | * @WLAN_EID_EXT_CAPABILITY information element | 2043 | * @WLAN_EID_EXT_CAPABILITY information element |
2003 | */ | 2044 | */ |
@@ -2009,6 +2050,7 @@ enum ieee80211_tdls_actioncode { | |||
2009 | */ | 2050 | */ |
2010 | #define WLAN_EXT_CAPA5_TDLS_ENABLED BIT(5) | 2051 | #define WLAN_EXT_CAPA5_TDLS_ENABLED BIT(5) |
2011 | #define WLAN_EXT_CAPA5_TDLS_PROHIBITED BIT(6) | 2052 | #define WLAN_EXT_CAPA5_TDLS_PROHIBITED BIT(6) |
2053 | #define WLAN_EXT_CAPA5_TDLS_CH_SW_PROHIBITED BIT(7) | ||
2012 | 2054 | ||
2013 | #define WLAN_EXT_CAPA8_OPMODE_NOTIF BIT(6) | 2055 | #define WLAN_EXT_CAPA8_OPMODE_NOTIF BIT(6) |
2014 | #define WLAN_EXT_CAPA8_TDLS_WIDE_BW_ENABLED BIT(7) | 2056 | #define WLAN_EXT_CAPA8_TDLS_WIDE_BW_ENABLED BIT(7) |
@@ -2016,6 +2058,9 @@ enum ieee80211_tdls_actioncode { | |||
2016 | /* TDLS specific payload type in the LLC/SNAP header */ | 2058 | /* TDLS specific payload type in the LLC/SNAP header */ |
2017 | #define WLAN_TDLS_SNAP_RFTYPE 0x2 | 2059 | #define WLAN_TDLS_SNAP_RFTYPE 0x2 |
2018 | 2060 | ||
2061 | /* BSS Coex IE information field bits */ | ||
2062 | #define WLAN_BSS_COEX_INFORMATION_REQUEST BIT(0) | ||
2063 | |||
2019 | /** | 2064 | /** |
2020 | * enum - mesh synchronization method identifier | 2065 | * enum - mesh synchronization method identifier |
2021 | * | 2066 | * |
@@ -2398,6 +2443,30 @@ static inline bool ieee80211_check_tim(const struct ieee80211_tim_ie *tim, | |||
2398 | return !!(tim->virtual_map[index] & mask); | 2443 | return !!(tim->virtual_map[index] & mask); |
2399 | } | 2444 | } |
2400 | 2445 | ||
2446 | /** | ||
2447 | * ieee80211_get_tdls_action - get tdls packet action (or -1, if not tdls packet) | ||
2448 | * @skb: the skb containing the frame, length will not be checked | ||
2449 | * @hdr_size: the size of the ieee80211_hdr that starts at skb->data | ||
2450 | * | ||
2451 | * This function assumes the frame is a data frame, and that the network header | ||
2452 | * is in the correct place. | ||
2453 | */ | ||
2454 | static inline int ieee80211_get_tdls_action(struct sk_buff *skb, u32 hdr_size) | ||
2455 | { | ||
2456 | if (!skb_is_nonlinear(skb) && | ||
2457 | skb->len > (skb_network_offset(skb) + 2)) { | ||
2458 | /* Point to where the indication of TDLS should start */ | ||
2459 | const u8 *tdls_data = skb_network_header(skb) - 2; | ||
2460 | |||
2461 | if (get_unaligned_be16(tdls_data) == ETH_P_TDLS && | ||
2462 | tdls_data[2] == WLAN_TDLS_SNAP_RFTYPE && | ||
2463 | tdls_data[3] == WLAN_CATEGORY_TDLS) | ||
2464 | return tdls_data[4]; | ||
2465 | } | ||
2466 | |||
2467 | return -1; | ||
2468 | } | ||
2469 | |||
2401 | /* convert time units */ | 2470 | /* convert time units */ |
2402 | #define TU_TO_JIFFIES(x) (usecs_to_jiffies((x) * 1024)) | 2471 | #define TU_TO_JIFFIES(x) (usecs_to_jiffies((x) * 1024)) |
2403 | #define TU_TO_EXP_TIME(x) (jiffies + TU_TO_JIFFIES(x)) | 2472 | #define TU_TO_EXP_TIME(x) (jiffies + TU_TO_JIFFIES(x)) |