wireless: remove obsolete chan no/center freq conversion functions
[carl9170fw.git] / include / linux / ieee80211.h
index c4f43c3377aa9f36b2a1f2eaaf828680991ce583..213467ba72ffbbcb879ff3f1a48a23079eed864f 100644 (file)
@@ -44,6 +44,7 @@
 #define IEEE80211_FCTL_MOREDATA                0x2000
 #define IEEE80211_FCTL_PROTECTED       0x4000
 #define IEEE80211_FCTL_ORDER           0x8000
+#define IEEE80211_FCTL_CTL_EXT         0x0f00
 
 #define IEEE80211_SCTL_FRAG            0x000F
 #define IEEE80211_SCTL_SEQ             0xFFF0
@@ -51,6 +52,7 @@
 #define IEEE80211_FTYPE_MGMT           0x0000
 #define IEEE80211_FTYPE_CTL            0x0004
 #define IEEE80211_FTYPE_DATA           0x0008
+#define IEEE80211_FTYPE_EXT            0x000c
 
 /* management */
 #define IEEE80211_STYPE_ASSOC_REQ      0x0000
@@ -67,6 +69,7 @@
 #define IEEE80211_STYPE_ACTION         0x00D0
 
 /* control */
+#define IEEE80211_STYPE_CTL_EXT                0x0060
 #define IEEE80211_STYPE_BACK_REQ       0x0080
 #define IEEE80211_STYPE_BACK           0x0090
 #define IEEE80211_STYPE_PSPOLL         0x00A0
 #define IEEE80211_STYPE_QOS_CFPOLL             0x00E0
 #define IEEE80211_STYPE_QOS_CFACKPOLL          0x00F0
 
+/* extension, added by 802.11ad */
+#define IEEE80211_STYPE_DMG_BEACON             0x0000
+
+/* control extension - for IEEE80211_FTYPE_CTL | IEEE80211_STYPE_CTL_EXT */
+#define IEEE80211_CTL_EXT_POLL         0x2000
+#define IEEE80211_CTL_EXT_SPR          0x3000
+#define IEEE80211_CTL_EXT_GRANT        0x4000
+#define IEEE80211_CTL_EXT_DMG_CTS      0x5000
+#define IEEE80211_CTL_EXT_DMG_DTS      0x6000
+#define IEEE80211_CTL_EXT_SSW          0x8000
+#define IEEE80211_CTL_EXT_SSW_FBACK    0x9000
+#define IEEE80211_CTL_EXT_SSW_ACK      0xa000
 
 /* miscellaneous IEEE 802.11 constants */
 #define IEEE80211_MAX_FRAG_THRESHOLD   2352
 #define IEEE80211_MAX_MESH_ID_LEN      32
 
 #define IEEE80211_QOS_CTL_LEN          2
-#define IEEE80211_QOS_CTL_TID_MASK     0x000F
-#define IEEE80211_QOS_CTL_TAG1D_MASK   0x0007
+/* 1d tag mask */
+#define IEEE80211_QOS_CTL_TAG1D_MASK           0x0007
+/* TID mask */
+#define IEEE80211_QOS_CTL_TID_MASK             0x000f
+/* EOSP */
+#define IEEE80211_QOS_CTL_EOSP                 0x0010
+/* ACK policy */
+#define IEEE80211_QOS_CTL_ACK_POLICY_NORMAL    0x0000
+#define IEEE80211_QOS_CTL_ACK_POLICY_NOACK     0x0020
+#define IEEE80211_QOS_CTL_ACK_POLICY_NO_EXPL   0x0040
+#define IEEE80211_QOS_CTL_ACK_POLICY_BLOCKACK  0x0060
+#define IEEE80211_QOS_CTL_ACK_POLICY_MASK      0x0060
+/* A-MSDU 802.11n */
+#define IEEE80211_QOS_CTL_A_MSDU_PRESENT       0x0080
+/* Mesh Control 802.11s */
+#define IEEE80211_QOS_CTL_MESH_CONTROL_PRESENT  0x0100
 
 /* U-APSD queue for WMM IEs sent by AP */
 #define IEEE80211_WMM_IE_AP_QOSINFO_UAPSD      (1<<7)
@@ -543,6 +572,15 @@ static inline unsigned int ieee80211_hdrlen(__le16 fc)
         return hdrlen;
 }
 
+/**
+ * ieee80211_is_first_frag - check if IEEE80211_SCTL_FRAG is not set
+ * @seq_ctrl: frame sequence control bytes in little-endian byteorder
+ */
+static inline int ieee80211_is_first_frag(__le16 seq_ctrl)
+{
+       return (seq_ctrl & cpu_to_le16(IEEE80211_SCTL_FRAG)) == 0;
+}
+
 struct ieee80211s_hdr {
        u8 flags;
        u8 ttl;
@@ -557,6 +595,26 @@ struct ieee80211s_hdr {
 #define MESH_FLAGS_AE          0x3
 #define MESH_FLAGS_PS_DEEP     0x4
 
+/**
+ * enum ieee80211_preq_flags - mesh PREQ element flags
+ *
+ * @IEEE80211_PREQ_PROACTIVE_PREP_FLAG: proactive PREP subfield
+ */
+enum ieee80211_preq_flags {
+       IEEE80211_PREQ_PROACTIVE_PREP_FLAG      = 1<<2,
+};
+
+/**
+ * enum ieee80211_preq_target_flags - mesh PREQ element per target flags
+ *
+ * @IEEE80211_PREQ_TO_FLAG: target only subfield
+ * @IEEE80211_PREQ_USN_FLAG: unknown target HWMP sequence number subfield
+ */
+enum ieee80211_preq_target_flags {
+       IEEE80211_PREQ_TO_FLAG  = 1<<0,
+       IEEE80211_PREQ_USN_FLAG = 1<<2,
+};
+
 /**
  * struct ieee80211_quiet_ie
  *
@@ -630,10 +688,15 @@ struct ieee80211_rann_ie {
        u8 rann_hopcount;
        u8 rann_ttl;
        u8 rann_addr[6];
-       u32 rann_seq;
-       u32 rann_metric;
+       __le32 rann_seq;
+       __le32 rann_interval;
+       __le32 rann_metric;
 } __attribute__ ((packed));
 
+enum ieee80211_rann_flags {
+       RANN_FLAG_IS_GATE = 1 << 0,
+};
+
 #define WLAN_SA_QUERY_TR_ID_LEN 2
 
 struct ieee80211_mgmt {
@@ -738,19 +801,10 @@ struct ieee80211_mgmt {
                                        __le16 params;
                                        __le16 reason_code;
                                } __attribute__((packed)) delba;
-                               struct{
+                               struct {
                                        u8 action_code;
-                                       /* capab_info for open and confirm,
-                                        * reason for close
-                                        */
-                                       __le16 aux;
-                                       /* Followed in plink_confirm by status
-                                        * code, AID and supported rates,
-                                        * and directly by supported rates in
-                                        * plink_open and plink_close
-                                        */
                                        u8 variable[0];
-                               } __attribute__((packed)) plink_action;
+                               } __attribute__((packed)) self_prot;
                                struct{
                                        u8 action_code;
                                        u8 variable[0];
@@ -763,11 +817,20 @@ struct ieee80211_mgmt {
                                        u8 action;
                                        u8 smps_control;
                                } __attribute__ ((packed)) ht_smps;
+                               struct {
+                                       u8 action_code;
+                                       u8 dialog_token;
+                                       __le16 capability;
+                                       u8 variable[0];
+                               } __packed tdls_discover_resp;
                        } u;
                } __attribute__ ((packed)) action;
        } u;
 } __attribute__ ((packed));
 
+/* Supported Rates value encodings in 802.11n-2009 7.3.2.2 */
+#define BSS_MEMBERSHIP_SELECTOR_HT_PHY 127
+
 /* mgmt header + 1 byte category code */
 #define IEEE80211_MIN_ACTION_SIZE offsetof(struct ieee80211_mgmt, u.action.u)
 
@@ -781,6 +844,13 @@ struct ieee80211_mmie {
        u8 mic[8];
 } __attribute__ ((packed));
 
+struct ieee80211_vendor_ie {
+       u8 element_id;
+       u8 len;
+       u8 oui[3];
+       u8 oui_type;
+} __packed;
+
 /* Control frames */
 struct ieee80211_rts {
        __le16 frame_control;
@@ -802,6 +872,52 @@ struct ieee80211_pspoll {
        u8 ta[6];
 } __attribute__ ((packed));
 
+/* TDLS */
+
+/* Link-id information element */
+struct ieee80211_tdls_lnkie {
+       u8 ie_type; /* Link Identifier IE */
+       u8 ie_len;
+       u8 bssid[6];
+       u8 init_sta[6];
+       u8 resp_sta[6];
+} __packed;
+
+struct ieee80211_tdls_data {
+       u8 da[6];
+       u8 sa[6];
+       __be16 ether_type;
+       u8 payload_type;
+       u8 category;
+       u8 action_code;
+       union {
+               struct {
+                       u8 dialog_token;
+                       __le16 capability;
+                       u8 variable[0];
+               } __packed setup_req;
+               struct {
+                       __le16 status_code;
+                       u8 dialog_token;
+                       __le16 capability;
+                       u8 variable[0];
+               } __packed setup_resp;
+               struct {
+                       __le16 status_code;
+                       u8 dialog_token;
+                       u8 variable[0];
+               } __packed setup_cfm;
+               struct {
+                       __le16 reason_code;
+                       u8 variable[0];
+               } __packed teardown;
+               struct {
+                       u8 dialog_token;
+                       u8 variable[0];
+               } __packed discover_req;
+       } u;
+} __packed;
+
 /**
  * struct ieee80211_bar - HT Block Ack Request
  *
@@ -818,9 +934,11 @@ struct ieee80211_bar {
 } __attribute__((packed)) __aligned(4);
 
 /* 802.11 BA(R) control masks */
-#define IEEE80211_BAR_CTRL_ACK_POLICY_NORMAL     0x0000
-#define IEEE80211_BAR_CTRL_MULTI_TID            0x0002
-#define IEEE80211_BAR_CTRL_CBMTID_COMPRESSED_BA  0x0004
+#define IEEE80211_BAR_CTRL_ACK_POLICY_NORMAL   0x0000
+#define IEEE80211_BAR_CTRL_MULTI_TID           0x0002
+#define IEEE80211_BAR_CTRL_CBMTID_COMPRESSED_BA        0x0004
+#define IEEE80211_BAR_CTRL_TID_INFO_MASK       0xf000
+#define IEEE80211_BAR_CTRL_TID_INFO_SHIFT      12
 
 /**
  * struct ieee80211_ba - HT Block Ack
@@ -954,13 +1072,13 @@ enum ieee80211_min_mpdu_spacing {
 };
 
 /**
- * struct ieee80211_ht_info - HT information
+ * struct ieee80211_ht_operation - HT operation IE
  *
- * This structure is the "HT information element" as
- * described in 802.11n D5.0 7.3.2.58
+ * This structure is the "HT operation element" as
+ * described in 802.11n-2009 7.3.2.57
  */
-struct ieee80211_ht_info {
-       u8 control_chan;
+struct ieee80211_ht_operation {
+       u8 primary_chan;
        u8 ht_param;
        __le16 operation_mode;
        __le16 stbc_param;
@@ -974,8 +1092,6 @@ struct ieee80211_ht_info {
 #define                IEEE80211_HT_PARAM_CHA_SEC_BELOW        0x03
 #define IEEE80211_HT_PARAM_CHAN_WIDTH_ANY              0x04
 #define IEEE80211_HT_PARAM_RIFS_MODE                   0x08
-#define IEEE80211_HT_PARAM_SPSMP_SUPPORT               0x10
-#define IEEE80211_HT_PARAM_SERV_INTERVAL_GRAN          0xE0
 
 /* for operation_mode */
 #define IEEE80211_HT_OP_MODE_PROTECTION                        0x0003
@@ -1021,6 +1137,73 @@ struct ieee80211_ht_info {
 #define WLAN_HT_SMPS_CONTROL_STATIC    1
 #define WLAN_HT_SMPS_CONTROL_DYNAMIC   3
 
+#define VHT_MCS_SUPPORTED_SET_SIZE      8
+
+struct ieee80211_vht_capabilities {
+       __le32 vht_capabilities_info;
+       u8 vht_supported_mcs_set[VHT_MCS_SUPPORTED_SET_SIZE];
+} __packed;
+
+struct ieee80211_vht_operation {
+       u8 vht_op_info_chwidth;
+       u8 vht_op_info_chan_center_freq_seg1_idx;
+       u8 vht_op_info_chan_center_freq_seg2_idx;
+       __le16 vht_basic_mcs_set;
+} __packed;
+
+/**
+ * struct ieee80211_vht_mcs_info - VHT MCS information
+ * @rx_mcs_map: RX MCS map 2 bits for each stream, total 8 streams
+ * @rx_highest: Indicates highest long GI VHT PPDU data rate
+ *     STA can receive. Rate expressed in units of 1 Mbps.
+ *     If this field is 0 this value should not be used to
+ *     consider the highest RX data rate supported.
+ * @tx_mcs_map: TX MCS map 2 bits for each stream, total 8 streams
+ * @tx_highest: Indicates highest long GI VHT PPDU data rate
+ *     STA can transmit. Rate expressed in units of 1 Mbps.
+ *     If this field is 0 this value should not be used to
+ *     consider the highest TX data rate supported.
+ */
+struct ieee80211_vht_mcs_info {
+       __le16 rx_mcs_map;
+       __le16 rx_highest;
+       __le16 tx_mcs_map;
+       __le16 tx_highest;
+} __packed;
+
+#define IEEE80211_VHT_MCS_ZERO_TO_SEVEN_SUPPORT 0
+#define IEEE80211_VHT_MCS_ZERO_TO_EIGHT_SUPPORT 1
+#define IEEE80211_VHT_MCS_ZERO_TO_NINE_SUPPORT  2
+#define IEEE80211_VHT_MCS_NOT_SUPPORTED 3
+
+/* 802.11ac VHT Capabilities */
+#define IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_3895                0x00000000
+#define IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_7991                0x00000001
+#define IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454               0x00000002
+#define IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ              0x00000004
+#define IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ     0x00000008
+#define IEEE80211_VHT_CAP_RXLDPC                              0x00000010
+#define IEEE80211_VHT_CAP_SHORT_GI_80                         0x00000020
+#define IEEE80211_VHT_CAP_SHORT_GI_160                        0x00000040
+#define IEEE80211_VHT_CAP_TXSTBC                              0x00000080
+#define IEEE80211_VHT_CAP_RXSTBC_1                            0x00000100
+#define IEEE80211_VHT_CAP_RXSTBC_2                            0x00000200
+#define IEEE80211_VHT_CAP_RXSTBC_3                            0x00000300
+#define IEEE80211_VHT_CAP_RXSTBC_4                            0x00000400
+#define IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE               0x00000800
+#define IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE               0x00001000
+#define IEEE80211_VHT_CAP_BEAMFORMER_ANTENNAS_MAX             0x00006000
+#define IEEE80211_VHT_CAP_SOUNDING_DIMENTION_MAX              0x00030000
+#define IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE               0x00080000
+#define IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE               0x00100000
+#define IEEE80211_VHT_CAP_VHT_TXOP_PS                         0x00200000
+#define IEEE80211_VHT_CAP_HTC_VHT                             0x00400000
+#define IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT          0x00800000
+#define IEEE80211_VHT_CAP_VHT_LINK_ADAPTATION_VHT_UNSOL_MFB   0x08000000
+#define IEEE80211_VHT_CAP_VHT_LINK_ADAPTATION_VHT_MRQ_MFB     0x0c000000
+#define IEEE80211_VHT_CAP_RX_ANTENNA_PATTERN                  0x10000000
+#define IEEE80211_VHT_CAP_TX_ANTENNA_PATTERN                  0x20000000
+
 /* Authentication algorithms */
 #define WLAN_AUTH_OPEN 0
 #define WLAN_AUTH_SHARED_KEY 1
@@ -1053,6 +1236,21 @@ struct ieee80211_ht_info {
 #define WLAN_CAPABILITY_QOS            (1<<9)
 #define WLAN_CAPABILITY_SHORT_SLOT_TIME        (1<<10)
 #define WLAN_CAPABILITY_DSSS_OFDM      (1<<13)
+
+/* DMG (60gHz) 802.11ad */
+/* type - bits 0..1 */
+#define WLAN_CAPABILITY_DMG_TYPE_IBSS          (1<<0) /* Tx by: STA */
+#define WLAN_CAPABILITY_DMG_TYPE_PBSS          (2<<0) /* Tx by: PCP */
+#define WLAN_CAPABILITY_DMG_TYPE_AP            (3<<0) /* Tx by: AP */
+
+#define WLAN_CAPABILITY_DMG_CBAP_ONLY          (1<<2)
+#define WLAN_CAPABILITY_DMG_CBAP_SOURCE        (1<<3)
+#define WLAN_CAPABILITY_DMG_PRIVACY            (1<<4)
+#define WLAN_CAPABILITY_DMG_ECPAC              (1<<5)
+
+#define WLAN_CAPABILITY_DMG_SPECTRUM_MGMT      (1<<8)
+#define WLAN_CAPABILITY_DMG_RADIO_MEASURE      (1<<12)
+
 /* measurement */
 #define IEEE80211_SPCT_MSR_RPRT_MODE_LATE      (1<<0)
 #define IEEE80211_SPCT_MSR_RPRT_MODE_INCAPABLE (1<<1)
@@ -1062,7 +1260,6 @@ struct ieee80211_ht_info {
 #define IEEE80211_SPCT_MSR_RPRT_TYPE_CCA       1
 #define IEEE80211_SPCT_MSR_RPRT_TYPE_RPI       2
 
-
 /* 802.11g ERP information element */
 #define WLAN_ERP_NON_ERP_PRESENT (1<<0)
 #define WLAN_ERP_USE_PROTECTION (1<<1)
@@ -1074,6 +1271,16 @@ enum {
        WLAN_ERP_PREAMBLE_LONG = 1,
 };
 
+/* Band ID, 802.11ad #8.4.1.45 */
+enum {
+       IEEE80211_BANDID_TV_WS = 0, /* TV white spaces */
+       IEEE80211_BANDID_SUB1  = 1, /* Sub-1 GHz (excluding TV white spaces) */
+       IEEE80211_BANDID_2G    = 2, /* 2.4 GHz */
+       IEEE80211_BANDID_3G    = 3, /* 3.6 GHz */
+       IEEE80211_BANDID_5G    = 4, /* 4.9 and 5 GHz */
+       IEEE80211_BANDID_60G   = 5, /* 60 GHz */
+};
+
 /* Status codes */
 enum ieee80211_statuscode {
        WLAN_STATUS_SUCCESS = 0,
@@ -1125,6 +1332,17 @@ enum ieee80211_statuscode {
        WLAN_STATUS_ANTI_CLOG_REQUIRED = 76,
        WLAN_STATUS_FCG_NOT_SUPP = 78,
        WLAN_STATUS_STA_NO_TBTT = 78,
+       /* 802.11ad */
+       WLAN_STATUS_REJECTED_WITH_SUGGESTED_CHANGES = 39,
+       WLAN_STATUS_REJECTED_FOR_DELAY_PERIOD = 47,
+       WLAN_STATUS_REJECT_WITH_SCHEDULE = 83,
+       WLAN_STATUS_PENDING_ADMITTING_FST_SESSION = 86,
+       WLAN_STATUS_PERFORMING_FST_NOW = 87,
+       WLAN_STATUS_PENDING_GAP_IN_BA_WINDOW = 88,
+       WLAN_STATUS_REJECT_U_PID_SETTING = 89,
+       WLAN_STATUS_REJECT_DSE_BAND = 96,
+       WLAN_STATUS_DENIED_WITH_SUGGESTED_BAND_AND_CHANNEL = 99,
+       WLAN_STATUS_DENIED_DUE_TO_SPECTRUM_MANAGEMENT = 103,
 };
 
 
@@ -1208,16 +1426,13 @@ enum ieee80211_eid {
        WLAN_EID_TS_DELAY = 43,
        WLAN_EID_TCLAS_PROCESSING = 44,
        WLAN_EID_QOS_CAPA = 46,
+       /* 802.11z */
+       WLAN_EID_LINK_ID = 101,
        /* 802.11s */
        WLAN_EID_MESH_CONFIG = 113,
        WLAN_EID_MESH_ID = 114,
        WLAN_EID_LINK_METRIC_REPORT = 115,
        WLAN_EID_CONGESTION_NOTIFICATION = 116,
-       /* Note that the Peer Link IE has been replaced with the similar
-        * Peer Management IE.  We will keep the former definition until mesh
-        * code is changed to comply with latest 802.11s drafts.
-        */
-       WLAN_EID_PEER_LINK = 55,  /* no longer in 802.11s drafts */
        WLAN_EID_PEER_MGMT = 117,
        WLAN_EID_CHAN_SWITCH_PARAM = 118,
        WLAN_EID_MESH_AWAKE_WINDOW = 119,
@@ -1251,7 +1466,7 @@ enum ieee80211_eid {
        WLAN_EID_EXT_SUPP_RATES = 50,
 
        WLAN_EID_HT_CAPABILITY = 45,
-       WLAN_EID_HT_INFORMATION = 61,
+       WLAN_EID_HT_OPERATION = 61,
 
        WLAN_EID_RSN = 48,
        WLAN_EID_MMIE = 76,
@@ -1284,6 +1499,43 @@ enum ieee80211_eid {
        WLAN_EID_DSE_REGISTERED_LOCATION = 58,
        WLAN_EID_SUPPORTED_REGULATORY_CLASSES = 59,
        WLAN_EID_EXT_CHANSWITCH_ANN = 60,
+
+       WLAN_EID_VHT_CAPABILITY = 191,
+       WLAN_EID_VHT_OPERATION = 192,
+
+       /* 802.11ad */
+       WLAN_EID_NON_TX_BSSID_CAP =  83,
+       WLAN_EID_WAKEUP_SCHEDULE = 143,
+       WLAN_EID_EXT_SCHEDULE = 144,
+       WLAN_EID_STA_AVAILABILITY = 145,
+       WLAN_EID_DMG_TSPEC = 146,
+       WLAN_EID_DMG_AT = 147,
+       WLAN_EID_DMG_CAP = 148,
+       WLAN_EID_DMG_OPERATION = 151,
+       WLAN_EID_DMG_BSS_PARAM_CHANGE = 152,
+       WLAN_EID_DMG_BEAM_REFINEMENT = 153,
+       WLAN_EID_CHANNEL_MEASURE_FEEDBACK = 154,
+       WLAN_EID_AWAKE_WINDOW = 157,
+       WLAN_EID_MULTI_BAND = 158,
+       WLAN_EID_ADDBA_EXT = 159,
+       WLAN_EID_NEXT_PCP_LIST = 160,
+       WLAN_EID_PCP_HANDOVER = 161,
+       WLAN_EID_DMG_LINK_MARGIN = 162,
+       WLAN_EID_SWITCHING_STREAM = 163,
+       WLAN_EID_SESSION_TRANSITION = 164,
+       WLAN_EID_DYN_TONE_PAIRING_REPORT = 165,
+       WLAN_EID_CLUSTER_REPORT = 166,
+       WLAN_EID_RELAY_CAP = 167,
+       WLAN_EID_RELAY_XFER_PARAM_SET = 168,
+       WLAN_EID_BEAM_LINK_MAINT = 169,
+       WLAN_EID_MULTIPLE_MAC_ADDR = 170,
+       WLAN_EID_U_PID = 171,
+       WLAN_EID_DMG_LINK_ADAPT_ACK = 172,
+       WLAN_EID_QUIET_PERIOD_REQ = 175,
+       WLAN_EID_QUIET_PERIOD_RESP = 177,
+       WLAN_EID_EPAC_POLICY = 182,
+       WLAN_EID_CLISTER_TIME_OFF = 183,
+       WLAN_EID_ANTENNA_SECTOR_ID_PATTERN = 190,
 };
 
 /* Action category code */
@@ -1296,13 +1548,14 @@ enum ieee80211_category {
        WLAN_CATEGORY_HT = 7,
        WLAN_CATEGORY_SA_QUERY = 8,
        WLAN_CATEGORY_PROTECTED_DUAL_OF_ACTION = 9,
+       WLAN_CATEGORY_TDLS = 12,
        WLAN_CATEGORY_MESH_ACTION = 13,
        WLAN_CATEGORY_MULTIHOP_ACTION = 14,
        WLAN_CATEGORY_SELF_PROTECTED = 15,
+       WLAN_CATEGORY_DMG = 16,
        WLAN_CATEGORY_WMM = 17,
-       /* TODO: remove MESH_PATH_SEL after mesh is updated
-        * to current 802.11s draft  */
-       WLAN_CATEGORY_MESH_PATH_SEL = 32,
+       WLAN_CATEGORY_FST = 18,
+       WLAN_CATEGORY_UNPROT_DMG = 20,
        WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126,
        WLAN_CATEGORY_VENDOR_SPECIFIC = 127,
 };
@@ -1328,6 +1581,31 @@ enum ieee80211_ht_actioncode {
        WLAN_HT_ACTION_ASEL_IDX_FEEDBACK = 7,
 };
 
+/* Self Protected Action codes */
+enum ieee80211_self_protected_actioncode {
+       WLAN_SP_RESERVED = 0,
+       WLAN_SP_MESH_PEERING_OPEN = 1,
+       WLAN_SP_MESH_PEERING_CONFIRM = 2,
+       WLAN_SP_MESH_PEERING_CLOSE = 3,
+       WLAN_SP_MGK_INFORM = 4,
+       WLAN_SP_MGK_ACK = 5,
+};
+
+/* Mesh action codes */
+enum ieee80211_mesh_actioncode {
+       WLAN_MESH_ACTION_LINK_METRIC_REPORT,
+       WLAN_MESH_ACTION_HWMP_PATH_SELECTION,
+       WLAN_MESH_ACTION_GATE_ANNOUNCEMENT,
+       WLAN_MESH_ACTION_CONGESTION_CONTROL_NOTIFICATION,
+       WLAN_MESH_ACTION_MCCA_SETUP_REQUEST,
+       WLAN_MESH_ACTION_MCCA_SETUP_REPLY,
+       WLAN_MESH_ACTION_MCCA_ADVERTISEMENT_REQUEST,
+       WLAN_MESH_ACTION_MCCA_ADVERTISEMENT,
+       WLAN_MESH_ACTION_MCCA_TEARDOWN,
+       WLAN_MESH_ACTION_TBTT_ADJUSTMENT_REQUEST,
+       WLAN_MESH_ACTION_TBTT_ADJUSTMENT_RESPONSE,
+};
+
 /* Security key length */
 enum ieee80211_key_len {
        WLAN_KEY_LEN_WEP40 = 5,
@@ -1337,15 +1615,57 @@ enum ieee80211_key_len {
        WLAN_KEY_LEN_AES_CMAC = 16,
 };
 
+/* Public action codes */
+enum ieee80211_pub_actioncode {
+       WLAN_PUB_ACTION_TDLS_DISCOVER_RES = 14,
+};
+
+/* TDLS action codes */
+enum ieee80211_tdls_actioncode {
+       WLAN_TDLS_SETUP_REQUEST = 0,
+       WLAN_TDLS_SETUP_RESPONSE = 1,
+       WLAN_TDLS_SETUP_CONFIRM = 2,
+       WLAN_TDLS_TEARDOWN = 3,
+       WLAN_TDLS_PEER_TRAFFIC_INDICATION = 4,
+       WLAN_TDLS_CHANNEL_SWITCH_REQUEST = 5,
+       WLAN_TDLS_CHANNEL_SWITCH_RESPONSE = 6,
+       WLAN_TDLS_PEER_PSM_REQUEST = 7,
+       WLAN_TDLS_PEER_PSM_RESPONSE = 8,
+       WLAN_TDLS_PEER_TRAFFIC_RESPONSE = 9,
+       WLAN_TDLS_DISCOVERY_REQUEST = 10,
+};
+
+/*
+ * TDLS capabililites to be enabled in the 5th byte of the
+ * @WLAN_EID_EXT_CAPABILITY information element
+ */
+#define WLAN_EXT_CAPA5_TDLS_ENABLED    BIT(5)
+#define WLAN_EXT_CAPA5_TDLS_PROHIBITED BIT(6)
+
+/* TDLS specific payload type in the LLC/SNAP header */
+#define WLAN_TDLS_SNAP_RFTYPE  0x2
+
+/**
+ * enum - mesh synchronization method identifier
+ *
+ * @IEEE80211_SYNC_METHOD_NEIGHBOR_OFFSET: the default synchronization method
+ * @IEEE80211_SYNC_METHOD_VENDOR: a vendor specific synchronization method
+ *     that will be specified in a vendor specific information element
+ */
+enum {
+       IEEE80211_SYNC_METHOD_NEIGHBOR_OFFSET = 1,
+       IEEE80211_SYNC_METHOD_VENDOR = 255,
+};
+
 /**
  * enum - mesh path selection protocol identifier
  *
  * @IEEE80211_PATH_PROTOCOL_HWMP: the default path selection protocol
  * @IEEE80211_PATH_PROTOCOL_VENDOR: a vendor specific protocol that will
- * be specified in a vendor specific information element
+ *     be specified in a vendor specific information element
  */
 enum {
-       IEEE80211_PATH_PROTOCOL_HWMP = 0,
+       IEEE80211_PATH_PROTOCOL_HWMP = 1,
        IEEE80211_PATH_PROTOCOL_VENDOR = 255,
 };
 
@@ -1354,13 +1674,35 @@ enum {
  *
  * @IEEE80211_PATH_METRIC_AIRTIME: the default path selection metric
  * @IEEE80211_PATH_METRIC_VENDOR: a vendor specific metric that will be
- * specified in a vendor specific information element
+ *     specified in a vendor specific information element
  */
 enum {
-       IEEE80211_PATH_METRIC_AIRTIME = 0,
+       IEEE80211_PATH_METRIC_AIRTIME = 1,
        IEEE80211_PATH_METRIC_VENDOR = 255,
 };
 
+/**
+ * enum ieee80211_root_mode_identifier - root mesh STA mode identifier
+ *
+ * These attribute are used by dot11MeshHWMPRootMode to set root mesh STA mode
+ *
+ * @IEEE80211_ROOTMODE_NO_ROOT: the mesh STA is not a root mesh STA (default)
+ * @IEEE80211_ROOTMODE_ROOT: the mesh STA is a root mesh STA if greater than
+ *     this value
+ * @IEEE80211_PROACTIVE_PREQ_NO_PREP: the mesh STA is a root mesh STA supports
+ *     the proactive PREQ with proactive PREP subfield set to 0
+ * @IEEE80211_PROACTIVE_PREQ_WITH_PREP: the mesh STA is a root mesh STA
+ *     supports the proactive PREQ with proactive PREP subfield set to 1
+ * @IEEE80211_PROACTIVE_RANN: the mesh STA is a root mesh STA supports
+ *     the proactive RANN
+ */
+enum ieee80211_root_mode_identifier {
+       IEEE80211_ROOTMODE_NO_ROOT = 0,
+       IEEE80211_ROOTMODE_ROOT = 1,
+       IEEE80211_PROACTIVE_PREQ_NO_PREP = 2,
+       IEEE80211_PROACTIVE_PREQ_WITH_PREP = 3,
+       IEEE80211_PROACTIVE_RANN = 4,
+};
 
 /*
  * IEEE 802.11-2007 7.3.2.9 Country information element
@@ -1453,9 +1795,6 @@ enum ieee80211_sa_query_action {
 };
 
 
-/* A-MSDU 802.11n */
-#define IEEE80211_QOS_CONTROL_A_MSDU_PRESENT 0x0080
-
 /* cipher suite selectors */
 #define WLAN_CIPHER_SUITE_USE_GROUP    0x000FAC00
 #define WLAN_CIPHER_SUITE_WEP40                0x000FAC01
@@ -1464,6 +1803,9 @@ enum ieee80211_sa_query_action {
 #define WLAN_CIPHER_SUITE_CCMP         0x000FAC04
 #define WLAN_CIPHER_SUITE_WEP104       0x000FAC05
 #define WLAN_CIPHER_SUITE_AES_CMAC     0x000FAC06
+#define WLAN_CIPHER_SUITE_GCMP         0x000FAC08
+
+#define WLAN_CIPHER_SUITE_SMS4         0x00147201
 
 /* AKM suite selectors */
 #define WLAN_AKM_SUITE_8021X           0x000FAC01
@@ -1475,6 +1817,50 @@ enum ieee80211_sa_query_action {
 
 #define WLAN_PMKID_LEN                 16
 
+#define WLAN_OUI_WFA                   0x506f9a
+#define WLAN_OUI_TYPE_WFA_P2P          9
+#define WLAN_OUI_MICROSOFT             0x0050f2
+#define WLAN_OUI_TYPE_MICROSOFT_WPA    1
+#define WLAN_OUI_TYPE_MICROSOFT_WMM    2
+#define WLAN_OUI_TYPE_MICROSOFT_WPS    4
+
+/*
+ * WMM/802.11e Tspec Element
+ */
+#define IEEE80211_WMM_IE_TSPEC_TID_MASK                0x0F
+#define IEEE80211_WMM_IE_TSPEC_TID_SHIFT       1
+
+enum ieee80211_tspec_status_code {
+       IEEE80211_TSPEC_STATUS_ADMISS_ACCEPTED = 0,
+       IEEE80211_TSPEC_STATUS_ADDTS_INVAL_PARAMS = 0x1,
+};
+
+struct ieee80211_tspec_ie {
+       u8 element_id;
+       u8 len;
+       u8 oui[3];
+       u8 oui_type;
+       u8 oui_subtype;
+       u8 version;
+       __le16 tsinfo;
+       u8 tsinfo_resvd;
+       __le16 nominal_msdu;
+       __le16 max_msdu;
+       __le32 min_service_int;
+       __le32 max_service_int;
+       __le32 inactivity_int;
+       __le32 suspension_int;
+       __le32 service_start_time;
+       __le32 min_data_rate;
+       __le32 mean_data_rate;
+       __le32 peak_data_rate;
+       __le32 max_burst_size;
+       __le32 delay_bound;
+       __le32 min_phy_rate;
+       __le16 sba;
+       __le16 medium_time;
+} __packed;
+
 /**
  * ieee80211_get_qos_ctl - get pointer to qos control bytes
  * @hdr: the frame
@@ -1562,33 +1948,20 @@ static inline bool ieee80211_is_robust_mgmt_frame(struct ieee80211_hdr *hdr)
 }
 
 /**
- * ieee80211_fhss_chan_to_freq - get channel frequency
- * @channel: the FHSS channel
- *
- * Convert IEEE802.11 FHSS channel to frequency (MHz)
- * Ref IEEE 802.11-2007 section 14.6
+ * ieee80211_is_public_action - check if frame is a public action frame
+ * @hdr: the frame
+ * @len: length of the frame
  */
-static inline int ieee80211_fhss_chan_to_freq(int channel)
+static inline bool ieee80211_is_public_action(struct ieee80211_hdr *hdr,
+                                             size_t len)
 {
-       if ((channel > 1) && (channel < 96))
-               return channel + 2400;
-       else
-               return -1;
-}
+       struct ieee80211_mgmt *mgmt = (void *)hdr;
 
-/**
- * ieee80211_freq_to_fhss_chan - get channel
- * @freq: the channels frequency
- *
- * Convert frequency (MHz) to IEEE802.11 FHSS channel
- * Ref IEEE 802.11-2007 section 14.6
- */
-static inline int ieee80211_freq_to_fhss_chan(int freq)
-{
-       if ((freq > 2401) && (freq < 2496))
-               return freq - 2400;
-       else
-               return -1;
+       if (len < IEEE80211_MIN_ACTION_SIZE)
+               return false;
+       if (!ieee80211_is_action(hdr->frame_control))
+               return false;
+       return mgmt->u.action.category == WLAN_CATEGORY_PUBLIC;
 }
 
 /**
@@ -1627,56 +2000,6 @@ static inline int ieee80211_freq_to_dsss_chan(int freq)
                return -1;
 }
 
-/* Convert IEEE802.11 HR DSSS channel to frequency (MHz) and back
- * Ref IEEE 802.11-2007 section 18.4.6.2
- *
- * The channels and frequencies are the same as those defined for DSSS
- */
-#define ieee80211_hr_chan_to_freq(chan) ieee80211_dsss_chan_to_freq(chan)
-#define ieee80211_freq_to_hr_chan(freq) ieee80211_freq_to_dsss_chan(freq)
-
-/* Convert IEEE802.11 ERP channel to frequency (MHz) and back
- * Ref IEEE 802.11-2007 section 19.4.2
- */
-#define ieee80211_erp_chan_to_freq(chan) ieee80211_hr_chan_to_freq(chan)
-#define ieee80211_freq_to_erp_chan(freq) ieee80211_freq_to_hr_chan(freq)
-
-/**
- * ieee80211_ofdm_chan_to_freq - get channel center frequency
- * @s_freq: starting frequency == (dotChannelStartingFactor/2) MHz
- * @channel: the OFDM channel
- *
- * Convert IEEE802.11 OFDM channel to center frequency (MHz)
- * Ref IEEE 802.11-2007 section 17.3.8.3.2
- */
-static inline int ieee80211_ofdm_chan_to_freq(int s_freq, int channel)
-{
-       if ((channel > 0) && (channel <= 200) &&
-           (s_freq >= 4000))
-               return s_freq + (channel * 5);
-       else
-               return -1;
-}
-
-/**
- * ieee80211_freq_to_ofdm_channel - get channel
- * @s_freq: starting frequency == (dotChannelStartingFactor/2) MHz
- * @freq: the frequency
- *
- * Convert frequency (MHz) to IEEE802.11 OFDM channel
- * Ref IEEE 802.11-2007 section 17.3.8.3.2
- *
- * This routine selects the channel with the closest center frequency.
- */
-static inline int ieee80211_freq_to_ofdm_chan(int s_freq, int freq)
-{
-       if ((freq > (s_freq + 2)) && (freq <= (s_freq + 1202)) &&
-           (s_freq >= 4000))
-               return (freq + 2 - s_freq) / 5;
-       else
-               return -1;
-}
-
 /**
  * ieee80211_tu_to_usec - convert time units (TU) to microseconds
  * @tu: the TUs