linux/drivers/staging/rtl8188eu/include/ieee80211_ext.h
<<
>>
Prefs
   1/******************************************************************************
   2 *
   3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
   4 *
   5 * This program is free software; you can redistribute it and/or modify it
   6 * under the terms of version 2 of the GNU General Public License as
   7 * published by the Free Software Foundation.
   8 *
   9 * This program is distributed in the hope that it will be useful, but WITHOUT
  10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  12 * more details.
  13 *
  14 * You should have received a copy of the GNU General Public License along with
  15 * this program; if not, write to the Free Software Foundation, Inc.,
  16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
  17 *
  18 *
  19 ******************************************************************************/
  20#ifndef __IEEE80211_EXT_H
  21#define __IEEE80211_EXT_H
  22
  23#include <osdep_service.h>
  24#include <drv_types.h>
  25
  26#define WMM_OUI_TYPE 2
  27#define WMM_OUI_SUBTYPE_INFORMATION_ELEMENT 0
  28#define WMM_OUI_SUBTYPE_PARAMETER_ELEMENT 1
  29#define WMM_OUI_SUBTYPE_TSPEC_ELEMENT 2
  30#define WMM_VERSION 1
  31
  32#define WPA_PROTO_WPA BIT(0)
  33#define WPA_PROTO_RSN BIT(1)
  34
  35#define WPA_KEY_MGMT_IEEE8021X BIT(0)
  36#define WPA_KEY_MGMT_PSK BIT(1)
  37#define WPA_KEY_MGMT_NONE BIT(2)
  38#define WPA_KEY_MGMT_IEEE8021X_NO_WPA BIT(3)
  39#define WPA_KEY_MGMT_WPA_NONE BIT(4)
  40
  41
  42#define WPA_CAPABILITY_PREAUTH BIT(0)
  43#define WPA_CAPABILITY_MGMT_FRAME_PROTECTION BIT(6)
  44#define WPA_CAPABILITY_PEERKEY_ENABLED BIT(9)
  45
  46
  47#define PMKID_LEN 16
  48
  49
  50struct wpa_ie_hdr {
  51        u8 elem_id;
  52        u8 len;
  53        u8 oui[4]; /* 24-bit OUI followed by 8-bit OUI type */
  54        u8 version[2]; /* little endian */
  55} __packed;
  56
  57struct rsn_ie_hdr {
  58        u8 elem_id; /* WLAN_EID_RSN */
  59        u8 len;
  60        u8 version[2]; /* little endian */
  61} __packed;
  62
  63struct wme_ac_parameter {
  64#if defined(__LITTLE_ENDIAN)
  65        /* byte 1 */
  66        u8      aifsn:4,
  67                acm:1,
  68                aci:2,
  69                reserved:1;
  70
  71        /* byte 2 */
  72        u8      eCWmin:4,
  73                eCWmax:4;
  74#elif defined(__BIG_ENDIAN)
  75        /* byte 1 */
  76        u8      reserved:1,
  77                aci:2,
  78                acm:1,
  79                aifsn:4;
  80
  81        /* byte 2 */
  82        u8      eCWmax:4,
  83                eCWmin:4;
  84#else
  85#error  "Please fix <endian.h>"
  86#endif
  87
  88        /* bytes 3 & 4 */
  89        u16 txopLimit;
  90} __packed;
  91
  92struct wme_parameter_element {
  93        /* required fields for WME version 1 */
  94        u8 oui[3];
  95        u8 oui_type;
  96        u8 oui_subtype;
  97        u8 version;
  98        u8 acInfo;
  99        u8 reserved;
 100        struct wme_ac_parameter ac[4];
 101
 102} __packed;
 103
 104#define WPA_PUT_LE16(a, val)                    \
 105        do {                                    \
 106                (a)[1] = ((u16)(val)) >> 8;     \
 107                (a)[0] = ((u16)(val)) & 0xff;   \
 108        } while (0)
 109
 110#define WPA_PUT_BE32(a, val)                                    \
 111        do {                                                    \
 112                (a)[0] = (u8)((((u32) (val)) >> 24) & 0xff);    \
 113                (a)[1] = (u8)((((u32) (val)) >> 16) & 0xff);    \
 114                (a)[2] = (u8)((((u32) (val)) >> 8) & 0xff);     \
 115                (a)[3] = (u8)(((u32) (val)) & 0xff);            \
 116        } while (0)
 117
 118#define WPA_PUT_LE32(a, val)                                    \
 119        do {                                                    \
 120                (a)[3] = (u8)((((u32) (val)) >> 24) & 0xff);    \
 121                (a)[2] = (u8)((((u32) (val)) >> 16) & 0xff);    \
 122                (a)[1] = (u8)((((u32) (val)) >> 8) & 0xff);     \
 123                (a)[0] = (u8)(((u32) (val)) & 0xff);            \
 124        } while (0)
 125
 126#define RSN_SELECTOR_PUT(a, val) WPA_PUT_BE32((u8 *)(a), (val))
 127
 128/* Action category code */
 129enum ieee80211_category {
 130        WLAN_CATEGORY_SPECTRUM_MGMT = 0,
 131        WLAN_CATEGORY_QOS = 1,
 132        WLAN_CATEGORY_DLS = 2,
 133        WLAN_CATEGORY_BACK = 3,
 134        WLAN_CATEGORY_HT = 7,
 135        WLAN_CATEGORY_WMM = 17,
 136};
 137
 138/* SPECTRUM_MGMT action code */
 139enum ieee80211_spectrum_mgmt_actioncode {
 140        WLAN_ACTION_SPCT_MSR_REQ = 0,
 141        WLAN_ACTION_SPCT_MSR_RPRT = 1,
 142        WLAN_ACTION_SPCT_TPC_REQ = 2,
 143        WLAN_ACTION_SPCT_TPC_RPRT = 3,
 144        WLAN_ACTION_SPCT_CHL_SWITCH = 4,
 145        WLAN_ACTION_SPCT_EXT_CHL_SWITCH = 5,
 146};
 147
 148/* BACK action code */
 149enum ieee80211_back_actioncode {
 150        WLAN_ACTION_ADDBA_REQ = 0,
 151        WLAN_ACTION_ADDBA_RESP = 1,
 152        WLAN_ACTION_DELBA = 2,
 153};
 154
 155/* HT features action code */
 156enum ieee80211_ht_actioncode {
 157        WLAN_ACTION_NOTIFY_CH_WIDTH = 0,
 158        WLAN_ACTION_SM_PS = 1,
 159        WLAN_ACTION_PSPM = 2,
 160        WLAN_ACTION_PCO_PHASE = 3,
 161        WLAN_ACTION_MIMO_CSI_MX = 4,
 162        WLAN_ACTION_MIMO_NONCP_BF = 5,
 163        WLAN_ACTION_MIMP_CP_BF = 6,
 164        WLAN_ACTION_ASEL_INDICATES_FB = 7,
 165        WLAN_ACTION_HI_INFO_EXCHG = 8,
 166};
 167
 168/* BACK (block-ack) parties */
 169enum ieee80211_back_parties {
 170        WLAN_BACK_RECIPIENT = 0,
 171        WLAN_BACK_INITIATOR = 1,
 172        WLAN_BACK_TIMER = 2,
 173};
 174
 175struct ieee80211_mgmt {
 176        u16 frame_control;
 177        u16 duration;
 178        u8 da[6];
 179        u8 sa[6];
 180        u8 bssid[6];
 181        u16 seq_ctrl;
 182        union {
 183                struct {
 184                        u16 auth_alg;
 185                        u16 auth_transaction;
 186                        u16 status_code;
 187                        /* possibly followed by Challenge text */
 188                        u8 variable[0];
 189                }  __packed auth;
 190                struct {
 191                        u16 reason_code;
 192                }  __packed deauth;
 193                struct {
 194                        u16 capab_info;
 195                        u16 listen_interval;
 196                        /* followed by SSID and Supported rates */
 197                        u8 variable[0];
 198                }  __packed assoc_req;
 199                struct {
 200                        u16 capab_info;
 201                        u16 status_code;
 202                        u16 aid;
 203                        /* followed by Supported rates */
 204                        u8 variable[0];
 205                }  __packed assoc_resp, reassoc_resp;
 206                struct {
 207                        u16 capab_info;
 208                        u16 listen_interval;
 209                        u8 current_ap[6];
 210                        /* followed by SSID and Supported rates */
 211                        u8 variable[0];
 212                }  __packed reassoc_req;
 213                struct {
 214                        u16 reason_code;
 215                }  __packed disassoc;
 216                struct {
 217                        __le64 timestamp;
 218                        u16 beacon_int;
 219                        u16 capab_info;
 220                        /* followed by some of SSID, Supported rates,
 221                         * FH Params, DS Params, CF Params, IBSS Params, TIM */
 222                        u8 variable[0];
 223                }  __packed beacon;
 224                struct {
 225                        /* only variable items: SSID, Supported rates */
 226                        u8 variable[0];
 227                }  __packed probe_req;
 228                struct {
 229                        __le64 timestamp;
 230                        u16 beacon_int;
 231                        u16 capab_info;
 232                        /* followed by some of SSID, Supported rates,
 233                         * FH Params, DS Params, CF Params, IBSS Params */
 234                        u8 variable[0];
 235                }  __packed probe_resp;
 236                struct {
 237                        u8 category;
 238                        union {
 239                                struct {
 240                                        u8 action_code;
 241                                        u8 dialog_token;
 242                                        u8 status_code;
 243                                        u8 variable[0];
 244                                }  __packed wme_action;
 245                                struct {
 246                                        u8 action_code;
 247                                        u8 dialog_token;
 248                                        u16 capab;
 249                                        u16 timeout;
 250                                        u16 start_seq_num;
 251                                }  __packed addba_req;
 252                                struct {
 253                                        u8 action_code;
 254                                        u8 dialog_token;
 255                                        u16 status;
 256                                        u16 capab;
 257                                        u16 timeout;
 258                                }  __packed addba_resp;
 259                                struct {
 260                                        u8 action_code;
 261                                        u16 params;
 262                                        u16 reason_code;
 263                                }  __packed delba;
 264                                structi {
 265                                        u8 action_code;
 266                                        /* capab_info for open and confirm,
 267                                         * reason for close
 268                                         */
 269                                        u16 aux;
 270                                        /* Followed in plink_confirm by status
 271                                         * code, AID and supported rates,
 272                                         * and directly by supported rates in
 273                                         * plink_open and plink_close
 274                                         */
 275                                        u8 variable[0];
 276                                }  __packed plink_action;
 277                                struct{
 278                                        u8 action_code;
 279                                        u8 variable[0];
 280                                }  __packed mesh_action;
 281                        } __packed u;
 282                }  __packed action;
 283        } __packed u;
 284} __packed;
 285
 286/* mgmt header + 1 byte category code */
 287#define IEEE80211_MIN_ACTION_SIZE                               \
 288         FIELD_OFFSET(struct ieee80211_mgmt, u.action.u)
 289
 290#endif
 291