wifi.h revision 8e3ddadf740e6d1b3678129b315817f48d801475
1/****************************************************************************** 2 * 3 * Copyright(c) 2007 - 2012 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 ******************************************************************************/ 15#ifndef _WIFI_H_ 16#define _WIFI_H_ 17 18#define P80211CAPTURE_VERSION 0x80211001 19 20/* This value is tested by WiFi 11n Test Plan 5.2.3. 21 * This test verifies the WLAN NIC can update the NAV through sending 22 * the CTS with large duration. 23 */ 24#define WiFiNavUpperUs 30000 /* 30 ms */ 25 26enum WIFI_FRAME_TYPE { 27 WIFI_MGT_TYPE = (0), 28 WIFI_CTRL_TYPE = (BIT(2)), 29 WIFI_DATA_TYPE = (BIT(3)), 30 WIFI_QOS_DATA_TYPE = (BIT(7)|BIT(3)), /* QoS Data */ 31}; 32 33enum WIFI_FRAME_SUBTYPE { 34 /* below is for mgt frame */ 35 WIFI_ASSOCREQ = (0 | WIFI_MGT_TYPE), 36 WIFI_ASSOCRSP = (BIT(4) | WIFI_MGT_TYPE), 37 WIFI_REASSOCREQ = (BIT(5) | WIFI_MGT_TYPE), 38 WIFI_REASSOCRSP = (BIT(5) | BIT(4) | WIFI_MGT_TYPE), 39 WIFI_PROBEREQ = (BIT(6) | WIFI_MGT_TYPE), 40 WIFI_PROBERSP = (BIT(6) | BIT(4) | WIFI_MGT_TYPE), 41 WIFI_BEACON = (BIT(7) | WIFI_MGT_TYPE), 42 WIFI_ATIM = (BIT(7) | BIT(4) | WIFI_MGT_TYPE), 43 WIFI_DISASSOC = (BIT(7) | BIT(5) | WIFI_MGT_TYPE), 44 WIFI_AUTH = (BIT(7) | BIT(5) | BIT(4) | WIFI_MGT_TYPE), 45 WIFI_DEAUTH = (BIT(7) | BIT(6) | WIFI_MGT_TYPE), 46 WIFI_ACTION = (BIT(7) | BIT(6) | BIT(4) | WIFI_MGT_TYPE), 47 48 /* below is for control frame */ 49 WIFI_PSPOLL = (BIT(7) | BIT(5) | WIFI_CTRL_TYPE), 50 WIFI_RTS = (BIT(7) | BIT(5) | BIT(4) | WIFI_CTRL_TYPE), 51 WIFI_CTS = (BIT(7) | BIT(6) | WIFI_CTRL_TYPE), 52 WIFI_ACK = (BIT(7) | BIT(6) | BIT(4) | WIFI_CTRL_TYPE), 53 WIFI_CFEND = (BIT(7) | BIT(6) | BIT(5) | WIFI_CTRL_TYPE), 54 WIFI_CFEND_CFACK = (BIT(7) | BIT(6) | BIT(5) | BIT(4) | WIFI_CTRL_TYPE), 55 56 /* below is for data frame */ 57 WIFI_DATA = (0 | WIFI_DATA_TYPE), 58 WIFI_DATA_CFACK = (BIT(4) | WIFI_DATA_TYPE), 59 WIFI_DATA_CFPOLL = (BIT(5) | WIFI_DATA_TYPE), 60 WIFI_DATA_CFACKPOLL = (BIT(5) | BIT(4) | WIFI_DATA_TYPE), 61 WIFI_DATA_NULL = (BIT(6) | WIFI_DATA_TYPE), 62 WIFI_CF_ACK = (BIT(6) | BIT(4) | WIFI_DATA_TYPE), 63 WIFI_CF_POLL = (BIT(6) | BIT(5) | WIFI_DATA_TYPE), 64 WIFI_CF_ACKPOLL = (BIT(6) | BIT(5) | BIT(4) | WIFI_DATA_TYPE), 65 WIFI_QOS_DATA_NULL = (BIT(6) | WIFI_QOS_DATA_TYPE), 66}; 67 68 69enum WIFI_REG_DOMAIN { 70 DOMAIN_FCC = 1, 71 DOMAIN_IC = 2, 72 DOMAIN_ETSI = 3, 73 DOMAIN_SPAIN = 4, 74 DOMAIN_FRANCE = 5, 75 DOMAIN_MKK = 6, 76 DOMAIN_ISRAEL = 7, 77 DOMAIN_MKK1 = 8, 78 DOMAIN_MKK2 = 9, 79 DOMAIN_MKK3 = 10, 80 DOMAIN_MAX 81}; 82 83 84#define SetToDs(pbuf) \ 85 (*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_TODS)) 86 87#define SetFrDs(pbuf) \ 88 (*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_FROMDS)) 89 90#define SetRetry(pbuf) \ 91 (*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_RETRY)) 92 93#define SetPwrMgt(pbuf) \ 94 (*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_PM)) 95 96#define SetMData(pbuf) \ 97 (*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_MOREDATA)) 98 99#define SetPrivacy(pbuf) \ 100 (*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_PROTECTED)) 101 102#define SetFrameType(pbuf, type) \ 103 do { \ 104 *(__le16 *)(pbuf) &= __constant_cpu_to_le16(~(BIT(3) | BIT(2))); \ 105 *(__le16 *)(pbuf) |= __constant_cpu_to_le16(type); \ 106 } while (0) 107 108#define SetFrameSubType(pbuf, type) \ 109 do { \ 110 *(__le16 *)(pbuf) &= cpu_to_le16(~(BIT(7) | BIT(6) | BIT(5) | BIT(4) | BIT(3) | BIT(2))); \ 111 *(__le16 *)(pbuf) |= cpu_to_le16(type); \ 112 } while (0) 113 114#define SetFragNum(pbuf, num) \ 115 do { \ 116 *(unsigned short *)((unsigned long)(pbuf) + 22) = \ 117 ((*(unsigned short *)((unsigned long)(pbuf) + 22)) & le16_to_cpu(~(0x000f))) | \ 118 cpu_to_le16(0x0f & (num)); \ 119 } while (0) 120 121#define SetSeqNum(pbuf, num) \ 122 do { \ 123 *(__le16 *)((size_t)(pbuf) + 22) = \ 124 ((*(__le16 *)((size_t)(pbuf) + 22)) & cpu_to_le16((unsigned short)0x000f)) | \ 125 cpu_to_le16((unsigned short)(0xfff0 & (num << 4))); \ 126 } while (0) 127 128#define SetDuration(pbuf, dur) \ 129 (*(__le16 *)((unsigned long)(pbuf) + 2) = \ 130 cpu_to_le16(0xffff & (dur))) 131 132#define SetPriority(pbuf, tid) \ 133 (*(__le16 *)(pbuf) |= cpu_to_le16(tid & 0xf)) 134 135#define SetEOSP(pbuf, eosp) \ 136 (*(__le16 *)(pbuf) |= cpu_to_le16((eosp & 1) << 4)) 137 138#define SetAckpolicy(pbuf, ack) \ 139 (*(__le16 *)(pbuf) |= cpu_to_le16((ack & 3) << 5)) 140 141#define SetAMsdu(pbuf, amsdu) \ 142 (*(__le16 *)(pbuf) |= cpu_to_le16((amsdu & 1) << 7)) 143 144#define _ASOCREQ_IE_OFFSET_ 4 /* excluding wlan_hdr */ 145#define _ASOCRSP_IE_OFFSET_ 6 146#define _REASOCREQ_IE_OFFSET_ 10 147#define _REASOCRSP_IE_OFFSET_ 6 148#define _PROBEREQ_IE_OFFSET_ 0 149#define _PROBERSP_IE_OFFSET_ 12 150#define _AUTH_IE_OFFSET_ 6 151#define _DEAUTH_IE_OFFSET_ 0 152#define _BEACON_IE_OFFSET_ 12 153#define _PUBLIC_ACTION_IE_OFFSET_ 8 154 155#define _FIXED_IE_LENGTH_ _BEACON_IE_OFFSET_ 156 157 158#define EID_BSSIntolerantChlReport 73 159 160/* --------------------------------------------------------------------------- 161 Below is the fixed elements... 162-----------------------------------------------------------------------------*/ 163#define _AUTH_ALGM_NUM_ 2 164#define _AUTH_SEQ_NUM_ 2 165#define _BEACON_ITERVAL_ 2 166#define _CAPABILITY_ 2 167#define _CURRENT_APADDR_ 6 168#define _LISTEN_INTERVAL_ 2 169#define _ASOC_ID_ 2 170#define _STATUS_CODE_ 2 171#define _TIMESTAMP_ 8 172 173#define cap_ESS BIT(0) 174#define cap_IBSS BIT(1) 175#define cap_CFPollable BIT(2) 176#define cap_CFRequest BIT(3) 177#define cap_Privacy BIT(4) 178#define cap_ShortPremble BIT(5) 179#define cap_PBCC BIT(6) 180#define cap_ChAgility BIT(7) 181#define cap_SpecMgmt BIT(8) 182#define cap_QoS BIT(9) 183#define cap_ShortSlot BIT(10) 184 185/*----------------------------------------------------------------------------- 186 Below is the definition for WMM 187------------------------------------------------------------------------------*/ 188#define _WMM_IE_Length_ 7 /* for WMM STA */ 189#define _WMM_Para_Element_Length_ 24 190 191 192/*----------------------------------------------------------------------------- 193 Below is the definition for 802.11n 194------------------------------------------------------------------------------*/ 195 196/* struct rtw_ieee80211_ht_cap - HT additional information 197 * 198 * This structure refers to "HT information element" as 199 * described in 802.11n draft section 7.3.2.53 200 */ 201struct ieee80211_ht_addt_info { 202 unsigned char control_chan; 203 unsigned char ht_param; 204 unsigned short operation_mode; 205 unsigned short stbc_param; 206 unsigned char basic_set[16]; 207} __packed; 208 209struct HT_caps_element { 210 union { 211 struct { 212 unsigned short HT_caps_info; 213 unsigned char AMPDU_para; 214 unsigned char MCS_rate[16]; 215 unsigned short HT_ext_caps; 216 unsigned int Beamforming_caps; 217 unsigned char ASEL_caps; 218 } HT_cap_element; 219 unsigned char HT_cap[26]; 220 } u; 221} __packed; 222 223struct HT_info_element { 224 unsigned char primary_channel; 225 unsigned char infos[5]; 226 unsigned char MCS_rate[16]; 227} __packed; 228 229struct AC_param { 230 unsigned char ACI_AIFSN; 231 unsigned char CW; 232 unsigned short TXOP_limit; 233} __packed; 234 235struct WMM_para_element { 236 unsigned char QoS_info; 237 unsigned char reserved; 238 struct AC_param ac_param[4]; 239} __packed; 240 241struct ADDBA_request { 242 unsigned char dialog_token; 243 unsigned short BA_para_set; 244 unsigned short BA_timeout_value; 245 unsigned short BA_starting_seqctrl; 246} __packed; 247 248 249#define OP_MODE_PURE 0 250#define OP_MODE_MAY_BE_LEGACY_STAS 1 251#define OP_MODE_20MHZ_HT_STA_ASSOCED 2 252#define OP_MODE_MIXED 3 253 254#define HT_INFO_HT_PARAM_SECONDARY_CHNL_OFF_MASK ((u8) BIT(0) | BIT(1)) 255#define HT_INFO_HT_PARAM_SECONDARY_CHNL_ABOVE ((u8) BIT(0)) 256#define HT_INFO_HT_PARAM_SECONDARY_CHNL_BELOW ((u8) BIT(0) | BIT(1)) 257#define HT_INFO_HT_PARAM_REC_TRANS_CHNL_WIDTH ((u8) BIT(2)) 258#define HT_INFO_HT_PARAM_RIFS_MODE ((u8) BIT(3)) 259#define HT_INFO_HT_PARAM_CTRL_ACCESS_ONLY ((u8) BIT(4)) 260#define HT_INFO_HT_PARAM_SRV_INTERVAL_GRANULARITY ((u8) BIT(5)) 261 262#define HT_INFO_OPERATION_MODE_OP_MODE_MASK \ 263 ((u16) (0x0001 | 0x0002)) 264#define HT_INFO_OPERATION_MODE_OP_MODE_OFFSET 0 265#define HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT ((u8) BIT(2)) 266#define HT_INFO_OPERATION_MODE_TRANSMIT_BURST_LIMIT ((u8) BIT(3)) 267#define HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT ((u8) BIT(4)) 268 269#define HT_INFO_STBC_PARAM_DUAL_BEACON ((u16) BIT(6)) 270#define HT_INFO_STBC_PARAM_DUAL_STBC_PROTECT ((u16) BIT(7)) 271#define HT_INFO_STBC_PARAM_SECONDARY_BCN ((u16) BIT(8)) 272#define HT_INFO_STBC_PARAM_LSIG_TXOP_PROTECT_ALLOWED ((u16) BIT(9)) 273#define HT_INFO_STBC_PARAM_PCO_ACTIVE ((u16) BIT(10)) 274#define HT_INFO_STBC_PARAM_PCO_PHASE ((u16) BIT(11)) 275 276 277 278/* ===============WPS Section=============== */ 279/* For WPSv1.0 */ 280#define WPSOUI 0x0050f204 281/* WPS attribute ID */ 282#define WPS_ATTR_VER1 0x104A 283#define WPS_ATTR_SIMPLE_CONF_STATE 0x1044 284#define WPS_ATTR_RESP_TYPE 0x103B 285#define WPS_ATTR_UUID_E 0x1047 286#define WPS_ATTR_MANUFACTURER 0x1021 287#define WPS_ATTR_MODEL_NAME 0x1023 288#define WPS_ATTR_MODEL_NUMBER 0x1024 289#define WPS_ATTR_SERIAL_NUMBER 0x1042 290#define WPS_ATTR_PRIMARY_DEV_TYPE 0x1054 291#define WPS_ATTR_SEC_DEV_TYPE_LIST 0x1055 292#define WPS_ATTR_DEVICE_NAME 0x1011 293#define WPS_ATTR_CONF_METHOD 0x1008 294#define WPS_ATTR_RF_BANDS 0x103C 295#define WPS_ATTR_DEVICE_PWID 0x1012 296#define WPS_ATTR_REQUEST_TYPE 0x103A 297#define WPS_ATTR_ASSOCIATION_STATE 0x1002 298#define WPS_ATTR_CONFIG_ERROR 0x1009 299#define WPS_ATTR_VENDOR_EXT 0x1049 300#define WPS_ATTR_SELECTED_REGISTRAR 0x1041 301 302/* Value of WPS attribute "WPS_ATTR_DEVICE_NAME */ 303#define WPS_MAX_DEVICE_NAME_LEN 32 304 305/* Value of WPS Request Type Attribute */ 306#define WPS_REQ_TYPE_ENROLLEE_INFO_ONLY 0x00 307#define WPS_REQ_TYPE_ENROLLEE_OPEN_8021X 0x01 308#define WPS_REQ_TYPE_REGISTRAR 0x02 309#define WPS_REQ_TYPE_WLAN_MANAGER_REGISTRAR 0x03 310 311/* Value of WPS Response Type Attribute */ 312#define WPS_RESPONSE_TYPE_INFO_ONLY 0x00 313#define WPS_RESPONSE_TYPE_8021X 0x01 314#define WPS_RESPONSE_TYPE_REGISTRAR 0x02 315#define WPS_RESPONSE_TYPE_AP 0x03 316 317/* Value of WPS WiFi Simple Configuration State Attribute */ 318#define WPS_WSC_STATE_NOT_CONFIG 0x01 319#define WPS_WSC_STATE_CONFIG 0x02 320 321/* Value of WPS Version Attribute */ 322#define WPS_VERSION_1 0x10 323 324/* Value of WPS Configuration Method Attribute */ 325#define WPS_CONFIG_METHOD_FLASH 0x0001 326#define WPS_CONFIG_METHOD_ETHERNET 0x0002 327#define WPS_CONFIG_METHOD_LABEL 0x0004 328#define WPS_CONFIG_METHOD_DISPLAY 0x0008 329#define WPS_CONFIG_METHOD_E_NFC 0x0010 330#define WPS_CONFIG_METHOD_I_NFC 0x0020 331#define WPS_CONFIG_METHOD_NFC 0x0040 332#define WPS_CONFIG_METHOD_PBC 0x0080 333#define WPS_CONFIG_METHOD_KEYPAD 0x0100 334#define WPS_CONFIG_METHOD_VPBC 0x0280 335#define WPS_CONFIG_METHOD_PPBC 0x0480 336#define WPS_CONFIG_METHOD_VDISPLAY 0x2008 337#define WPS_CONFIG_METHOD_PDISPLAY 0x4008 338 339/* Value of Category ID of WPS Primary Device Type Attribute */ 340#define WPS_PDT_CID_DISPLAYS 0x0007 341#define WPS_PDT_CID_MULIT_MEDIA 0x0008 342#define WPS_PDT_CID_RTK_WIDI WPS_PDT_CID_MULIT_MEDIA 343 344/* Value of Sub Category ID of WPS Primary Device Type Attribute */ 345#define WPS_PDT_SCID_MEDIA_SERVER 0x0005 346#define WPS_PDT_SCID_RTK_DMP WPS_PDT_SCID_MEDIA_SERVER 347 348/* Value of Device Password ID */ 349#define WPS_DPID_PIN 0x0000 350#define WPS_DPID_USER_SPEC 0x0001 351#define WPS_DPID_MACHINE_SPEC 0x0002 352#define WPS_DPID_REKEY 0x0003 353#define WPS_DPID_PBC 0x0004 354#define WPS_DPID_REGISTRAR_SPEC 0x0005 355 356/* Value of WPS RF Bands Attribute */ 357#define WPS_RF_BANDS_2_4_GHZ 0x01 358#define WPS_RF_BANDS_5_GHZ 0x02 359 360/* Value of WPS Association State Attribute */ 361#define WPS_ASSOC_STATE_NOT_ASSOCIATED 0x00 362#define WPS_ASSOC_STATE_CONNECTION_SUCCESS 0x01 363#define WPS_ASSOC_STATE_CONFIGURATION_FAILURE 0x02 364#define WPS_ASSOC_STATE_ASSOCIATION_FAILURE 0x03 365#define WPS_ASSOC_STATE_IP_FAILURE 0x04 366 367/* P2P Public Action Frame ( Management Frame ) */ 368#define P2P_PUB_ACTION_ACTION 0x09 369 370/* P2P Public Action Frame Type */ 371#define P2P_GO_NEGO_REQ 0 372#define P2P_GO_NEGO_RESP 1 373#define P2P_GO_NEGO_CONF 2 374#define P2P_INVIT_REQ 3 375#define P2P_INVIT_RESP 4 376#define P2P_DEVDISC_REQ 5 377#define P2P_DEVDISC_RESP 6 378#define P2P_PROVISION_DISC_REQ 7 379#define P2P_PROVISION_DISC_RESP 8 380 381/* WPS Configuration Method */ 382#define WPS_CM_NONE 0x0000 383#define WPS_CM_LABEL 0x0004 384#define WPS_CM_DISPLYA 0x0008 385#define WPS_CM_EXTERNAL_NFC_TOKEN 0x0010 386#define WPS_CM_INTEGRATED_NFC_TOKEN 0x0020 387#define WPS_CM_NFC_INTERFACE 0x0040 388#define WPS_CM_PUSH_BUTTON 0x0080 389#define WPS_CM_KEYPAD 0x0100 390#define WPS_CM_SW_PUHS_BUTTON 0x0280 391#define WPS_CM_HW_PUHS_BUTTON 0x0480 392#define WPS_CM_SW_DISPLAY_PIN 0x2008 393#define WPS_CM_LCD_DISPLAY_PIN 0x4008 394 395#endif /* _WIFI_H_ */ 396