Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / staging / rtl8188eu / include / ieee80211_ext.h
diff --git a/kernel/drivers/staging/rtl8188eu/include/ieee80211_ext.h b/kernel/drivers/staging/rtl8188eu/include/ieee80211_ext.h
new file mode 100644 (file)
index 0000000..15e53d3
--- /dev/null
@@ -0,0 +1,290 @@
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __IEEE80211_EXT_H
+#define __IEEE80211_EXT_H
+
+#include <osdep_service.h>
+#include <drv_types.h>
+
+#define WMM_OUI_TYPE 2
+#define WMM_OUI_SUBTYPE_INFORMATION_ELEMENT 0
+#define WMM_OUI_SUBTYPE_PARAMETER_ELEMENT 1
+#define WMM_OUI_SUBTYPE_TSPEC_ELEMENT 2
+#define WMM_VERSION 1
+
+#define WPA_PROTO_WPA BIT(0)
+#define WPA_PROTO_RSN BIT(1)
+
+#define WPA_KEY_MGMT_IEEE8021X BIT(0)
+#define WPA_KEY_MGMT_PSK BIT(1)
+#define WPA_KEY_MGMT_NONE BIT(2)
+#define WPA_KEY_MGMT_IEEE8021X_NO_WPA BIT(3)
+#define WPA_KEY_MGMT_WPA_NONE BIT(4)
+
+
+#define WPA_CAPABILITY_PREAUTH BIT(0)
+#define WPA_CAPABILITY_MGMT_FRAME_PROTECTION BIT(6)
+#define WPA_CAPABILITY_PEERKEY_ENABLED BIT(9)
+
+
+#define PMKID_LEN 16
+
+
+struct wpa_ie_hdr {
+       u8 elem_id;
+       u8 len;
+       u8 oui[4]; /* 24-bit OUI followed by 8-bit OUI type */
+       u8 version[2]; /* little endian */
+} __packed;
+
+struct rsn_ie_hdr {
+       u8 elem_id; /* WLAN_EID_RSN */
+       u8 len;
+       u8 version[2]; /* little endian */
+} __packed;
+
+struct wme_ac_parameter {
+#if defined(__LITTLE_ENDIAN)
+       /* byte 1 */
+       u8      aifsn:4,
+               acm:1,
+               aci:2,
+               reserved:1;
+
+       /* byte 2 */
+       u8      eCWmin:4,
+               eCWmax:4;
+#elif defined(__BIG_ENDIAN)
+       /* byte 1 */
+       u8      reserved:1,
+               aci:2,
+               acm:1,
+               aifsn:4;
+
+       /* byte 2 */
+       u8      eCWmax:4,
+               eCWmin:4;
+#else
+#error "Please fix <endian.h>"
+#endif
+
+       /* bytes 3 & 4 */
+       u16 txopLimit;
+} __packed;
+
+struct wme_parameter_element {
+       /* required fields for WME version 1 */
+       u8 oui[3];
+       u8 oui_type;
+       u8 oui_subtype;
+       u8 version;
+       u8 acInfo;
+       u8 reserved;
+       struct wme_ac_parameter ac[4];
+
+} __packed;
+
+#define WPA_PUT_LE16(a, val)                   \
+       do {                                    \
+               (a)[1] = ((u16)(val)) >> 8;     \
+               (a)[0] = ((u16)(val)) & 0xff;   \
+       } while (0)
+
+#define WPA_PUT_BE32(a, val)                                   \
+       do {                                                    \
+               (a)[0] = (u8)((((u32) (val)) >> 24) & 0xff);    \
+               (a)[1] = (u8)((((u32) (val)) >> 16) & 0xff);    \
+               (a)[2] = (u8)((((u32) (val)) >> 8) & 0xff);     \
+               (a)[3] = (u8)(((u32) (val)) & 0xff);            \
+       } while (0)
+
+#define WPA_PUT_LE32(a, val)                                   \
+       do {                                                    \
+               (a)[3] = (u8)((((u32) (val)) >> 24) & 0xff);    \
+               (a)[2] = (u8)((((u32) (val)) >> 16) & 0xff);    \
+               (a)[1] = (u8)((((u32) (val)) >> 8) & 0xff);     \
+               (a)[0] = (u8)(((u32) (val)) & 0xff);            \
+       } while (0)
+
+#define RSN_SELECTOR_PUT(a, val) WPA_PUT_BE32((u8 *)(a), (val))
+
+/* Action category code */
+enum ieee80211_category {
+       WLAN_CATEGORY_SPECTRUM_MGMT = 0,
+       WLAN_CATEGORY_QOS = 1,
+       WLAN_CATEGORY_DLS = 2,
+       WLAN_CATEGORY_BACK = 3,
+       WLAN_CATEGORY_HT = 7,
+       WLAN_CATEGORY_WMM = 17,
+};
+
+/* SPECTRUM_MGMT action code */
+enum ieee80211_spectrum_mgmt_actioncode {
+       WLAN_ACTION_SPCT_MSR_REQ = 0,
+       WLAN_ACTION_SPCT_MSR_RPRT = 1,
+       WLAN_ACTION_SPCT_TPC_REQ = 2,
+       WLAN_ACTION_SPCT_TPC_RPRT = 3,
+       WLAN_ACTION_SPCT_CHL_SWITCH = 4,
+       WLAN_ACTION_SPCT_EXT_CHL_SWITCH = 5,
+};
+
+/* BACK action code */
+enum ieee80211_back_actioncode {
+       WLAN_ACTION_ADDBA_REQ = 0,
+       WLAN_ACTION_ADDBA_RESP = 1,
+       WLAN_ACTION_DELBA = 2,
+};
+
+/* HT features action code */
+enum ieee80211_ht_actioncode {
+       WLAN_ACTION_NOTIFY_CH_WIDTH = 0,
+       WLAN_ACTION_SM_PS = 1,
+       WLAN_ACTION_PSPM = 2,
+       WLAN_ACTION_PCO_PHASE = 3,
+       WLAN_ACTION_MIMO_CSI_MX = 4,
+       WLAN_ACTION_MIMO_NONCP_BF = 5,
+       WLAN_ACTION_MIMP_CP_BF = 6,
+       WLAN_ACTION_ASEL_INDICATES_FB = 7,
+       WLAN_ACTION_HI_INFO_EXCHG = 8,
+};
+
+/* BACK (block-ack) parties */
+enum ieee80211_back_parties {
+       WLAN_BACK_RECIPIENT = 0,
+       WLAN_BACK_INITIATOR = 1,
+       WLAN_BACK_TIMER = 2,
+};
+
+struct ieee80211_mgmt {
+       u16 frame_control;
+       u16 duration;
+       u8 da[6];
+       u8 sa[6];
+       u8 bssid[6];
+       u16 seq_ctrl;
+       union {
+               struct {
+                       u16 auth_alg;
+                       u16 auth_transaction;
+                       u16 status_code;
+                       /* possibly followed by Challenge text */
+                       u8 variable[0];
+               }  __packed auth;
+               struct {
+                       u16 reason_code;
+               }  __packed deauth;
+               struct {
+                       u16 capab_info;
+                       u16 listen_interval;
+                       /* followed by SSID and Supported rates */
+                       u8 variable[0];
+               }  __packed assoc_req;
+               struct {
+                       u16 capab_info;
+                       u16 status_code;
+                       u16 aid;
+                       /* followed by Supported rates */
+                       u8 variable[0];
+               }  __packed assoc_resp, reassoc_resp;
+               struct {
+                       u16 capab_info;
+                       u16 listen_interval;
+                       u8 current_ap[6];
+                       /* followed by SSID and Supported rates */
+                       u8 variable[0];
+               }  __packed reassoc_req;
+               struct {
+                       u16 reason_code;
+               }  __packed disassoc;
+               struct {
+                       __le64 timestamp;
+                       u16 beacon_int;
+                       u16 capab_info;
+                       /* followed by some of SSID, Supported rates,
+                        * FH Params, DS Params, CF Params, IBSS Params, TIM */
+                       u8 variable[0];
+               }  __packed beacon;
+               struct {
+                       /* only variable items: SSID, Supported rates */
+                       u8 variable[0];
+               }  __packed probe_req;
+               struct {
+                       __le64 timestamp;
+                       u16 beacon_int;
+                       u16 capab_info;
+                       /* followed by some of SSID, Supported rates,
+                        * FH Params, DS Params, CF Params, IBSS Params */
+                       u8 variable[0];
+               }  __packed probe_resp;
+               struct {
+                       u8 category;
+                       union {
+                               struct {
+                                       u8 action_code;
+                                       u8 dialog_token;
+                                       u8 status_code;
+                                       u8 variable[0];
+                               }  __packed wme_action;
+                               struct {
+                                       u8 action_code;
+                                       u8 dialog_token;
+                                       u16 capab;
+                                       u16 timeout;
+                                       u16 start_seq_num;
+                               }  __packed addba_req;
+                               struct {
+                                       u8 action_code;
+                                       u8 dialog_token;
+                                       u16 status;
+                                       u16 capab;
+                                       u16 timeout;
+                               }  __packed addba_resp;
+                               struct {
+                                       u8 action_code;
+                                       u16 params;
+                                       u16 reason_code;
+                               }  __packed delba;
+                               structi {
+                                       u8 action_code;
+                                       /* capab_info for open and confirm,
+                                        * reason for close
+                                        */
+                                       u16 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];
+                               }  __packed plink_action;
+                               struct{
+                                       u8 action_code;
+                                       u8 variable[0];
+                               }  __packed mesh_action;
+                       } __packed u;
+               }  __packed action;
+       } __packed u;
+} __packed;
+
+/* mgmt header + 1 byte category code */
+#define IEEE80211_MIN_ACTION_SIZE                              \
+        FIELD_OFFSET(struct ieee80211_mgmt, u.action.u)
+
+#endif