linux/drivers/staging/r8188eu/include/wifi.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
   2/* Copyright(c) 2007 - 2012 Realtek Corporation. */
   3
   4#ifndef _WIFI_H_
   5#define _WIFI_H_
   6
   7#include <linux/ieee80211.h>
   8
   9#ifdef BIT
  10/* error        "BIT define occurred earlier elsewhere!\n" */
  11#undef BIT
  12#endif
  13#define BIT(x)  (1 << (x))
  14
  15#define WLAN_ETHHDR_LEN         14
  16#define WLAN_ETHADDR_LEN        6
  17#define WLAN_IEEE_OUI_LEN       3
  18#define WLAN_ADDR_LEN           6
  19#define WLAN_CRC_LEN            4
  20#define WLAN_BSSID_LEN          6
  21#define WLAN_BSS_TS_LEN         8
  22#define WLAN_HDR_A3_LEN         24
  23#define WLAN_HDR_A4_LEN         30
  24#define WLAN_HDR_A3_QOS_LEN     26
  25#define WLAN_HDR_A4_QOS_LEN     32
  26#define WLAN_SSID_MAXLEN        32
  27#define WLAN_DATA_MAXLEN        2312
  28
  29#define WLAN_A3_PN_OFFSET       24
  30#define WLAN_A4_PN_OFFSET       30
  31
  32#define WLAN_MIN_ETHFRM_LEN     60
  33#define WLAN_MAX_ETHFRM_LEN     1514
  34#define WLAN_ETHHDR_LEN         14
  35
  36#define P80211CAPTURE_VERSION   0x80211001
  37
  38/*  This value is tested by WiFi 11n Test Plan 5.2.3. */
  39/*  This test verifies the WLAN NIC can update the NAV through sending
  40 *  the CTS with large duration. */
  41#define WiFiNavUpperUs                          30000   /*  30 ms */
  42
  43enum WIFI_FRAME_TYPE {
  44        WIFI_MGT_TYPE  =        (0),
  45        WIFI_CTRL_TYPE =        (BIT(2)),
  46        WIFI_DATA_TYPE =        (BIT(3)),
  47        WIFI_QOS_DATA_TYPE      = (BIT(7)|BIT(3)),      /*  QoS Data */
  48};
  49
  50enum WIFI_FRAME_SUBTYPE {
  51        /*  below is for mgt frame */
  52        WIFI_ASSOCREQ       = (0 | WIFI_MGT_TYPE),
  53        WIFI_ASSOCRSP       = (BIT(4) | WIFI_MGT_TYPE),
  54        WIFI_REASSOCREQ     = (BIT(5) | WIFI_MGT_TYPE),
  55        WIFI_REASSOCRSP     = (BIT(5) | BIT(4) | WIFI_MGT_TYPE),
  56        WIFI_PROBEREQ       = (BIT(6) | WIFI_MGT_TYPE),
  57        WIFI_PROBERSP       = (BIT(6) | BIT(4) | WIFI_MGT_TYPE),
  58        WIFI_BEACON         = (BIT(7) | WIFI_MGT_TYPE),
  59        WIFI_ATIM           = (BIT(7) | BIT(4) | WIFI_MGT_TYPE),
  60        WIFI_DISASSOC       = (BIT(7) | BIT(5) | WIFI_MGT_TYPE),
  61        WIFI_AUTH           = (BIT(7) | BIT(5) | BIT(4) | WIFI_MGT_TYPE),
  62        WIFI_DEAUTH         = (BIT(7) | BIT(6) | WIFI_MGT_TYPE),
  63        WIFI_ACTION         = (BIT(7) | BIT(6) | BIT(4) | WIFI_MGT_TYPE),
  64
  65        /*  below is for control frame */
  66        WIFI_PSPOLL         = (BIT(7) | BIT(5) | WIFI_CTRL_TYPE),
  67        WIFI_RTS            = (BIT(7) | BIT(5) | BIT(4) | WIFI_CTRL_TYPE),
  68        WIFI_CTS            = (BIT(7) | BIT(6) | WIFI_CTRL_TYPE),
  69        WIFI_ACK            = (BIT(7) | BIT(6) | BIT(4) | WIFI_CTRL_TYPE),
  70        WIFI_CFEND          = (BIT(7) | BIT(6) | BIT(5) | WIFI_CTRL_TYPE),
  71        WIFI_CFEND_CFACK    = (BIT(7) | BIT(6) | BIT(5) | BIT(4) |
  72        WIFI_CTRL_TYPE),
  73
  74        /*  below is for data frame */
  75        WIFI_DATA           = (0 | WIFI_DATA_TYPE),
  76        WIFI_DATA_CFACK     = (BIT(4) | WIFI_DATA_TYPE),
  77        WIFI_DATA_CFPOLL    = (BIT(5) | WIFI_DATA_TYPE),
  78        WIFI_DATA_CFACKPOLL = (BIT(5) | BIT(4) | WIFI_DATA_TYPE),
  79        WIFI_DATA_NULL      = (BIT(6) | WIFI_DATA_TYPE),
  80        WIFI_CF_ACK         = (BIT(6) | BIT(4) | WIFI_DATA_TYPE),
  81        WIFI_CF_POLL        = (BIT(6) | BIT(5) | WIFI_DATA_TYPE),
  82        WIFI_CF_ACKPOLL     = (BIT(6) | BIT(5) | BIT(4) | WIFI_DATA_TYPE),
  83        WIFI_QOS_DATA_NULL      = (BIT(6) | WIFI_QOS_DATA_TYPE),
  84};
  85
  86enum WIFI_REASON_CODE   {
  87        _RSON_RESERVED_                 = 0,
  88        _RSON_UNSPECIFIED_              = 1,
  89        _RSON_AUTH_NO_LONGER_VALID_     = 2,
  90        _RSON_DEAUTH_STA_LEAVING_       = 3,
  91        _RSON_INACTIVITY_               = 4,
  92        _RSON_UNABLE_HANDLE_            = 5,
  93        _RSON_CLS2_                     = 6,
  94        _RSON_CLS3_                     = 7,
  95        _RSON_DISAOC_STA_LEAVING_       = 8,
  96        _RSON_ASOC_NOT_AUTH_            = 9,
  97
  98        /*  WPA reason */
  99        _RSON_INVALID_IE_               = 13,
 100        _RSON_MIC_FAILURE_              = 14,
 101        _RSON_4WAY_HNDSHK_TIMEOUT_      = 15,
 102        _RSON_GROUP_KEY_UPDATE_TIMEOUT_ = 16,
 103        _RSON_DIFF_IE_                  = 17,
 104        _RSON_MLTCST_CIPHER_NOT_VALID_  = 18,
 105        _RSON_UNICST_CIPHER_NOT_VALID_  = 19,
 106        _RSON_AKMP_NOT_VALID_           = 20,
 107        _RSON_UNSUPPORT_RSNE_VER_       = 21,
 108        _RSON_INVALID_RSNE_CAP_         = 22,
 109        _RSON_IEEE_802DOT1X_AUTH_FAIL_  = 23,
 110
 111        /* belowing are Realtek definition */
 112        _RSON_PMK_NOT_AVAILABLE_        = 24,
 113        _RSON_TDLS_TEAR_TOOFAR_         = 25,
 114        _RSON_TDLS_TEAR_UN_RSN_         = 26,
 115};
 116
 117/* Reason codes (IEEE 802.11-2007, 7.3.1.7, Table 7-22)
 118
 119#define WLAN_REASON_UNSPECIFIED 1
 120#define WLAN_REASON_PREV_AUTH_NOT_VALID 2
 121#define WLAN_REASON_DEAUTH_LEAVING 3
 122#define WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY 4
 123#define WLAN_REASON_DISASSOC_AP_BUSY 5
 124#define WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA 6
 125#define WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA 7
 126#define WLAN_REASON_DISASSOC_STA_HAS_LEFT 8
 127#define WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH 9 */
 128/* IEEE 802.11h */
 129#define WLAN_REASON_PWR_CAPABILITY_NOT_VALID 10
 130#define WLAN_REASON_SUPPORTED_CHANNEL_NOT_VALID 11
 131
 132/* IEEE 802.11i
 133#define WLAN_REASON_INVALID_IE 13
 134#define WLAN_REASON_MICHAEL_MIC_FAILURE 14
 135#define WLAN_REASON_4WAY_HANDSHAKE_TIMEOUT 15
 136#define WLAN_REASON_GROUP_KEY_UPDATE_TIMEOUT 16
 137#define WLAN_REASON_IE_IN_4WAY_DIFFERS 17
 138#define WLAN_REASON_GROUP_CIPHER_NOT_VALID 18
 139#define WLAN_REASON_PAIRWISE_CIPHER_NOT_VALID 19
 140#define WLAN_REASON_AKMP_NOT_VALID 20
 141#define WLAN_REASON_UNSUPPORTED_RSN_IE_VERSION 21
 142#define WLAN_REASON_INVALID_RSN_IE_CAPAB 22
 143#define WLAN_REASON_IEEE_802_1X_AUTH_FAILED 23
 144#define WLAN_REASON_CIPHER_SUITE_REJECTED 24 */
 145
 146enum WIFI_STATUS_CODE {
 147        _STATS_SUCCESSFUL_              = 0,
 148        _STATS_FAILURE_                 = 1,
 149        _STATS_CAP_FAIL_                = 10,
 150        _STATS_NO_ASOC_                 = 11,
 151        _STATS_OTHER_                   = 12,
 152        _STATS_NO_SUPP_ALG_             = 13,
 153        _STATS_OUT_OF_AUTH_SEQ_         = 14,
 154        _STATS_CHALLENGE_FAIL_          = 15,
 155        _STATS_AUTH_TIMEOUT_            = 16,
 156        _STATS_UNABLE_HANDLE_STA_       = 17,
 157        _STATS_RATE_FAIL_               = 18,
 158};
 159
 160/* Status codes (IEEE 802.11-2007, 7.3.1.9, Table 7-23)
 161#define WLAN_STATUS_SUCCESS 0
 162#define WLAN_STATUS_UNSPECIFIED_FAILURE 1
 163#define WLAN_STATUS_CAPS_UNSUPPORTED 10
 164#define WLAN_STATUS_REASSOC_NO_ASSOC 11
 165#define WLAN_STATUS_ASSOC_DENIED_UNSPEC 12
 166#define WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG 13
 167#define WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION 14
 168#define WLAN_STATUS_CHALLENGE_FAIL 15
 169#define WLAN_STATUS_AUTH_TIMEOUT 16
 170#define WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA 17
 171#define WLAN_STATUS_ASSOC_DENIED_RATES 18 */
 172
 173/* entended */
 174/* IEEE 802.11b */
 175#define WLAN_STATUS_ASSOC_DENIED_NOSHORT 19
 176#define WLAN_STATUS_ASSOC_DENIED_NOPBCC 20
 177#define WLAN_STATUS_ASSOC_DENIED_NOAGILITY 21
 178/* IEEE 802.11h */
 179#define WLAN_STATUS_SPEC_MGMT_REQUIRED 22
 180#define WLAN_STATUS_PWR_CAPABILITY_NOT_VALID 23
 181#define WLAN_STATUS_SUPPORTED_CHANNEL_NOT_VALID 24
 182/* IEEE 802.11g */
 183#define WLAN_STATUS_ASSOC_DENIED_NO_SHORT_SLOT_TIME 25
 184#define WLAN_STATUS_ASSOC_DENIED_NO_ER_PBCC 26
 185#define WLAN_STATUS_ASSOC_DENIED_NO_DSSS_OFDM 27
 186/* IEEE 802.11w */
 187#define WLAN_STATUS_ASSOC_REJECTED_TEMPORARILY 30
 188#define WLAN_STATUS_ROBUST_MGMT_FRAME_POLICY_VIOLATION 31
 189/* IEEE 802.11i */
 190#define WLAN_STATUS_INVALID_IE 40
 191#define WLAN_STATUS_GROUP_CIPHER_NOT_VALID 41
 192#define WLAN_STATUS_PAIRWISE_CIPHER_NOT_VALID 42
 193#define WLAN_STATUS_AKMP_NOT_VALID 43
 194#define WLAN_STATUS_UNSUPPORTED_RSN_IE_VERSION 44
 195#define WLAN_STATUS_INVALID_RSN_IE_CAPAB 45
 196#define WLAN_STATUS_CIPHER_REJECTED_PER_POLICY 46
 197#define WLAN_STATUS_TS_NOT_CREATED 47
 198#define WLAN_STATUS_DIRECT_LINK_NOT_ALLOWED 48
 199#define WLAN_STATUS_DEST_STA_NOT_PRESENT 49
 200#define WLAN_STATUS_DEST_STA_NOT_QOS_STA 50
 201#define WLAN_STATUS_ASSOC_DENIED_LISTEN_INT_TOO_LARGE 51
 202/* IEEE 802.11r */
 203#define WLAN_STATUS_INVALID_FT_ACTION_FRAME_COUNT 52
 204#define WLAN_STATUS_INVALID_PMKID 53
 205#define WLAN_STATUS_INVALID_MDIE 54
 206#define WLAN_STATUS_INVALID_FTIE 55
 207
 208enum WIFI_REG_DOMAIN {
 209        DOMAIN_FCC      = 1,
 210        DOMAIN_IC       = 2,
 211        DOMAIN_ETSI     = 3,
 212        DOMAIN_SPA      = 4,
 213        DOMAIN_FRANCE   = 5,
 214        DOMAIN_MKK      = 6,
 215        DOMAIN_ISRAEL   = 7,
 216        DOMAIN_MKK1     = 8,
 217        DOMAIN_MKK2     = 9,
 218        DOMAIN_MKK3     = 10,
 219        DOMAIN_MAX
 220};
 221
 222#define _TO_DS_         BIT(8)
 223#define _FROM_DS_       BIT(9)
 224#define _MORE_FRAG_     BIT(10)
 225#define _RETRY_         BIT(11)
 226#define _PWRMGT_        BIT(12)
 227#define _MORE_DATA_     BIT(13)
 228#define _PRIVACY_       BIT(14)
 229#define _ORDER_         BIT(15)
 230
 231#define SetToDs(pbuf)   \
 232        *(__le16 *)(pbuf) |= cpu_to_le16(_TO_DS_)
 233
 234#define GetToDs(pbuf)   (((*(__le16 *)(pbuf)) & cpu_to_le16(_TO_DS_)) != 0)
 235
 236#define ClearToDs(pbuf) \
 237        *(__le16 *)(pbuf) &= (~cpu_to_le16(_TO_DS_))
 238
 239#define SetFrDs(pbuf)   \
 240        *(__le16 *)(pbuf) |= cpu_to_le16(_FROM_DS_)
 241
 242#define GetFrDs(pbuf)   (((*(__le16 *)(pbuf)) & cpu_to_le16(_FROM_DS_)) != 0)
 243
 244#define ClearFrDs(pbuf) \
 245        *(__le16 *)(pbuf) &= (~cpu_to_le16(_FROM_DS_))
 246
 247#define get_tofr_ds(pframe)     ((GetToDs(pframe) << 1) | GetFrDs(pframe))
 248
 249#define SetMFrag(pbuf)  \
 250        *(__le16 *)(pbuf) |= cpu_to_le16(_MORE_FRAG_)
 251
 252#define GetMFrag(pbuf)  (((*(__le16 *)(pbuf)) & cpu_to_le16(_MORE_FRAG_)) != 0)
 253
 254#define ClearMFrag(pbuf)        \
 255        *(__le16 *)(pbuf) &= (~cpu_to_le16(_MORE_FRAG_))
 256
 257#define SetRetry(pbuf)  \
 258        *(__le16 *)(pbuf) |= cpu_to_le16(_RETRY_)
 259
 260#define GetRetry(pbuf)  (((*(__le16 *)(pbuf)) & cpu_to_le16(_RETRY_)) != 0)
 261
 262#define ClearRetry(pbuf)        \
 263        *(__le16 *)(pbuf) &= (~cpu_to_le16(_RETRY_))
 264
 265#define SetPwrMgt(pbuf) \
 266        *(__le16 *)(pbuf) |= cpu_to_le16(_PWRMGT_)
 267
 268#define GetPwrMgt(pbuf) (((*(__le16 *)(pbuf)) & cpu_to_le16(_PWRMGT_)) != 0)
 269
 270#define ClearPwrMgt(pbuf)       \
 271        *(__le16 *)(pbuf) &= (~cpu_to_le16(_PWRMGT_))
 272
 273#define SetMData(pbuf)  \
 274        *(__le16 *)(pbuf) |= cpu_to_le16(_MORE_DATA_)
 275
 276#define GetMData(pbuf)  (((*(__le16 *)(pbuf)) & cpu_to_le16(_MORE_DATA_)) != 0)
 277
 278#define ClearMData(pbuf)        \
 279        *(__le16 *)(pbuf) &= (~cpu_to_le16(_MORE_DATA_))
 280
 281#define SetPrivacy(pbuf)        \
 282        *(__le16 *)(pbuf) |= cpu_to_le16(_PRIVACY_)
 283
 284#define GetPrivacy(pbuf)                                        \
 285        (((*(__le16 *)(pbuf)) & cpu_to_le16(_PRIVACY_)) != 0)
 286
 287#define ClearPrivacy(pbuf)      \
 288        *(__le16 *)(pbuf) &= (~cpu_to_le16(_PRIVACY_))
 289
 290#define GetOrder(pbuf)                                  \
 291        (((*(__le16 *)(pbuf)) & cpu_to_le16(_ORDER_)) != 0)
 292
 293#define GetFrameType(pbuf)                              \
 294        (le16_to_cpu(*(__le16 *)(pbuf)) & (BIT(3) | BIT(2)))
 295
 296#define SetFrameType(pbuf, type)        \
 297        do {    \
 298                *(unsigned short *)(pbuf) &= __constant_cpu_to_le16(~(BIT(3) | BIT(2))); \
 299                *(unsigned short *)(pbuf) |= __constant_cpu_to_le16(type); \
 300        } while (0)
 301
 302#define GetFrameSubType(pbuf)   (le16_to_cpu(*(__le16 *)(pbuf)) & (BIT(7) |\
 303         BIT(6) | BIT(5) | BIT(4) | BIT(3) | BIT(2)))
 304
 305#define SetFrameSubType(pbuf, type) \
 306        do {    \
 307                *(__le16 *)(pbuf) &= cpu_to_le16(~(BIT(7) | BIT(6) |    \
 308                 BIT(5) | BIT(4) | BIT(3) | BIT(2))); \
 309                *(__le16 *)(pbuf) |= cpu_to_le16(type); \
 310        } while (0)
 311
 312#define GetSequence(pbuf)                       \
 313        (le16_to_cpu(*(__le16 *)((size_t)(pbuf) + 22)) >> 4)
 314
 315#define GetFragNum(pbuf)                        \
 316        (le16_to_cpu(*(__le16 *)((size_t)(pbuf) + 22)) & 0x0f)
 317
 318#define GetTupleCache(pbuf)                     \
 319        (cpu_to_le16(*(unsigned short *)((size_t)(pbuf) + 22)))
 320
 321#define SetFragNum(pbuf, num) \
 322        do {    \
 323                *(unsigned short *)((size_t)(pbuf) + 22) = \
 324                        ((*(unsigned short *)((size_t)(pbuf) + 22)) &   \
 325                        le16_to_cpu(~(0x000f))) | \
 326                        cpu_to_le16(0x0f & (num));     \
 327        } while (0)
 328
 329#define SetSeqNum(pbuf, num) \
 330        do {    \
 331                *(__le16 *)((size_t)(pbuf) + 22) = \
 332                        ((*(__le16 *)((size_t)(pbuf) + 22)) & cpu_to_le16((unsigned short)0x000f)) | \
 333                        cpu_to_le16((unsigned short)(0xfff0 & (num << 4))); \
 334        } while (0)
 335
 336#define SetDuration(pbuf, dur) \
 337        *(__le16 *)((size_t)(pbuf) + 2) = cpu_to_le16(0xffff & (dur))
 338
 339#define SetPriority(pbuf, tid)  \
 340        *(__le16 *)(pbuf) |= cpu_to_le16(tid & 0xf)
 341
 342#define GetPriority(pbuf)       ((le16_to_cpu(*(__le16 *)(pbuf))) & 0xf)
 343
 344#define SetEOSP(pbuf, eosp)     \
 345                *(__le16 *)(pbuf) |= cpu_to_le16((eosp & 1) << 4)
 346
 347#define SetAckpolicy(pbuf, ack) \
 348        *(__le16 *)(pbuf) |= cpu_to_le16((ack & 3) << 5)
 349
 350#define GetAckpolicy(pbuf) (((le16_to_cpu(*(__le16 *)pbuf)) >> 5) & 0x3)
 351
 352#define GetAMsdu(pbuf) (((le16_to_cpu(*(__le16 *)pbuf)) >> 7) & 0x1)
 353
 354#define SetAMsdu(pbuf, amsdu)   \
 355        *(__le16 *)(pbuf) |= cpu_to_le16((amsdu & 1) << 7)
 356
 357#define GetAid(pbuf)    (le16_to_cpu(*(__le16 *)((size_t)(pbuf) + 2)) & 0x3fff)
 358
 359#define GetTid(pbuf)    (le16_to_cpu(*(__le16 *)((size_t)(pbuf) +       \
 360                        (((GetToDs(pbuf)<<1) | GetFrDs(pbuf)) == 3 ?    \
 361                        30 : 24))) & 0x000f)
 362
 363#define GetAddr1Ptr(pbuf)       ((unsigned char *)((size_t)(pbuf) + 4))
 364
 365#define GetAddr2Ptr(pbuf)       ((unsigned char *)((size_t)(pbuf) + 10))
 366
 367#define GetAddr3Ptr(pbuf)       ((unsigned char *)((size_t)(pbuf) + 16))
 368
 369#define GetAddr4Ptr(pbuf)       ((unsigned char *)((size_t)(pbuf) + 24))
 370
 371static inline int IS_MCAST(unsigned char *da)
 372{
 373        if ((*da) & 0x01)
 374                return true;
 375        else
 376                return false;
 377}
 378
 379static inline unsigned char *get_da(unsigned char *pframe)
 380{
 381        unsigned char   *da;
 382        unsigned int to_fr_ds = (GetToDs(pframe) << 1) | GetFrDs(pframe);
 383
 384        switch (to_fr_ds) {
 385        case 0x00:      /*  ToDs=0, FromDs=0 */
 386                da = GetAddr1Ptr(pframe);
 387                break;
 388        case 0x01:      /*  ToDs=0, FromDs=1 */
 389                da = GetAddr1Ptr(pframe);
 390                break;
 391        case 0x02:      /*  ToDs=1, FromDs=0 */
 392                da = GetAddr3Ptr(pframe);
 393                break;
 394        default:        /*  ToDs=1, FromDs=1 */
 395                da = GetAddr3Ptr(pframe);
 396                break;
 397        }
 398        return da;
 399}
 400
 401static inline unsigned char *get_sa(unsigned char *pframe)
 402{
 403        unsigned char   *sa;
 404        unsigned int    to_fr_ds = (GetToDs(pframe) << 1) | GetFrDs(pframe);
 405
 406        switch (to_fr_ds) {
 407        case 0x00:      /*  ToDs=0, FromDs=0 */
 408                sa = GetAddr2Ptr(pframe);
 409                break;
 410        case 0x01:      /*  ToDs=0, FromDs=1 */
 411                sa = GetAddr3Ptr(pframe);
 412                break;
 413        case 0x02:      /*  ToDs=1, FromDs=0 */
 414                sa = GetAddr2Ptr(pframe);
 415                break;
 416        default:        /*  ToDs=1, FromDs=1 */
 417                sa = GetAddr4Ptr(pframe);
 418                break;
 419        }
 420        return sa;
 421}
 422
 423static inline unsigned char *get_hdr_bssid(unsigned char *pframe)
 424{
 425        unsigned char   *sa;
 426        unsigned int    to_fr_ds = (GetToDs(pframe) << 1) | GetFrDs(pframe);
 427
 428        switch (to_fr_ds) {
 429        case 0x00:      /*  ToDs=0, FromDs=0 */
 430                sa = GetAddr3Ptr(pframe);
 431                break;
 432        case 0x01:      /*  ToDs=0, FromDs=1 */
 433                sa = GetAddr2Ptr(pframe);
 434                break;
 435        case 0x02:      /*  ToDs=1, FromDs=0 */
 436                sa = GetAddr1Ptr(pframe);
 437                break;
 438        case 0x03:      /*  ToDs=1, FromDs=1 */
 439                sa = GetAddr1Ptr(pframe);
 440                break;
 441        default:
 442                sa = NULL; /*  */
 443                break;
 444        }
 445        return sa;
 446}
 447
 448static inline int IsFrameTypeCtrl(unsigned char *pframe)
 449{
 450        if (WIFI_CTRL_TYPE == GetFrameType(pframe))
 451                return true;
 452        else
 453                return false;
 454}
 455/*-----------------------------------------------------------------------------
 456                        Below is for the security related definition
 457------------------------------------------------------------------------------*/
 458#define _RESERVED_FRAME_TYPE_           0
 459#define _SKB_FRAME_TYPE_                2
 460#define _PRE_ALLOCMEM_                  1
 461#define _PRE_ALLOCHDR_                  3
 462#define _PRE_ALLOCLLCHDR_               4
 463#define _PRE_ALLOCICVHDR_               5
 464#define _PRE_ALLOCMICHDR_               6
 465
 466#define _SIFSTIME_                              \
 467        (priv->pmib->dot11BssType.net_work_type = 10)
 468#define _ACKCTSLNG_             14      /* 14 bytes long, including crclng */
 469#define _CRCLNG_                4
 470
 471#define _ASOCREQ_IE_OFFSET_     4       /*  excluding wlan_hdr */
 472#define _ASOCRSP_IE_OFFSET_     6
 473#define _REASOCREQ_IE_OFFSET_   10
 474#define _REASOCRSP_IE_OFFSET_   6
 475#define _PROBEREQ_IE_OFFSET_    0
 476#define _PROBERSP_IE_OFFSET_    12
 477#define _AUTH_IE_OFFSET_        6
 478#define _DEAUTH_IE_OFFSET_      0
 479#define _BEACON_IE_OFFSET_      12
 480#define _PUBLIC_ACTION_IE_OFFSET_       8
 481
 482#define _FIXED_IE_LENGTH_       _BEACON_IE_OFFSET_
 483
 484#define _SSID_IE_               0
 485#define _SUPPORTEDRATES_IE_     1
 486#define _DSSET_IE_              3
 487#define _TIM_IE_                5
 488#define _IBSS_PARA_IE_          6
 489#define _COUNTRY_IE_            7
 490#define _CHLGETXT_IE_           16
 491#define _SUPPORTED_CH_IE_       36
 492#define _CH_SWTICH_ANNOUNCE_    37      /* Secondary Channel Offset */
 493#define _RSN_IE_2_              48
 494#define _SSN_IE_1_              221
 495#define _ERPINFO_IE_            42
 496#define _EXT_SUPPORTEDRATES_IE_ 50
 497
 498#define _HT_CAPABILITY_IE_      45
 499#define _FTIE_                  55
 500#define _TIMEOUT_ITVL_IE_       56
 501#define _SRC_IE_                59
 502#define _HT_EXTRA_INFO_IE_      61
 503#define _HT_ADD_INFO_IE_        61 /* _HT_EXTRA_INFO_IE_ */
 504#define _WAPI_IE_               68
 505
 506#define EID_BSSCoexistence      72 /*  20/40 BSS Coexistence */
 507#define EID_BSSIntolerantChlReport      73
 508#define _RIC_Descriptor_IE_     75
 509
 510#define _LINK_ID_IE_            101
 511#define _CH_SWITCH_TIMING_      104
 512#define _PTI_BUFFER_STATUS_     106
 513#define _EXT_CAP_IE_            127
 514#define _VENDOR_SPECIFIC_IE_    221
 515
 516#define _RESERVED47_            47
 517
 518/* ---------------------------------------------------------------------------
 519                                        Below is the fixed elements...
 520-----------------------------------------------------------------------------*/
 521#define _AUTH_ALGM_NUM_         2
 522#define _AUTH_SEQ_NUM_          2
 523#define _BEACON_ITERVAL_        2
 524#define _CAPABILITY_            2
 525#define _CURRENT_APADDR_        6
 526#define _LISTEN_INTERVAL_       2
 527#define _RSON_CODE_             2
 528#define _ASOC_ID_               2
 529#define _STATUS_CODE_           2
 530#define _TIMESTAMP_             8
 531
 532#define AUTH_ODD_TO             0
 533#define AUTH_EVEN_TO            1
 534
 535#define WLAN_ETHCONV_ENCAP      1
 536#define WLAN_ETHCONV_RFC1042    2
 537#define WLAN_ETHCONV_8021h      3
 538
 539#define cap_ESS         BIT(0)
 540#define cap_IBSS        BIT(1)
 541#define cap_CFPollable  BIT(2)
 542#define cap_CFRequest   BIT(3)
 543#define cap_Privacy     BIT(4)
 544#define cap_ShortPremble BIT(5)
 545#define cap_PBCC        BIT(6)
 546#define cap_ChAgility   BIT(7)
 547#define cap_SpecMgmt    BIT(8)
 548#define cap_QoSi        BIT(9)
 549#define cap_ShortSlot   BIT(10)
 550
 551/*-----------------------------------------------------------------------------
 552                                Below is the definition for 802.11i / 802.1x
 553------------------------------------------------------------------------------*/
 554#define _IEEE8021X_MGT_                 1       /*  WPA */
 555#define _IEEE8021X_PSK_                 2       /*  WPA with pre-shared key */
 556
 557/*
 558#define _NO_PRIVACY_                    0
 559#define _WEP_40_PRIVACY_                1
 560#define _TKIP_PRIVACY_                  2
 561#define _WRAP_PRIVACY_                  3
 562#define _CCMP_PRIVACY_                  4
 563#define _WEP_104_PRIVACY_               5
 564#define _WEP_WPA_MIXED_PRIVACY_ 6       WEP + WPA
 565*/
 566
 567/*-----------------------------------------------------------------------------
 568                                Below is the definition for WMM
 569------------------------------------------------------------------------------*/
 570#define _WMM_IE_Length_                         7  /*  for WMM STA */
 571#define _WMM_Para_Element_Length_               24
 572
 573/*-----------------------------------------------------------------------------
 574                                Below is the definition for 802.11n
 575------------------------------------------------------------------------------*/
 576
 577#define SetOrderBit(pbuf)       \
 578        do      {       \
 579                *(unsigned short *)(pbuf) |= cpu_to_le16(_ORDER_); \
 580        } while (0)
 581
 582#define GetOrderBit(pbuf)                       \
 583        (((*(unsigned short *)(pbuf)) & le16_to_cpu(_ORDER_)) != 0)
 584
 585/**
 586 * struct rtw_ieee80211_bar - HT Block Ack Request
 587 *
 588 * This structure refers to "HT BlockAckReq" as
 589 * described in 802.11n draft section 7.2.1.7.1
 590 */
 591struct rtw_ieee80211_bar {
 592        __le16 frame_control;
 593        __le16 duration;
 594        unsigned char ra[ETH_ALEN];
 595        unsigned char ta[ETH_ALEN];
 596        __le16 control;
 597        __le16 start_seq_num;
 598} __packed;
 599
 600/**
 601 * struct ieee80211_ht_cap - HT additional information
 602 *
 603 * This structure refers to "HT information element" as
 604 * described in 802.11n draft section 7.3.2.53
 605 */
 606struct ieee80211_ht_addt_info {
 607        unsigned char   control_chan;
 608        unsigned char   ht_param;
 609        __le16  operation_mode;
 610        __le16  stbc_param;
 611        unsigned char   basic_set[16];
 612} __packed;
 613
 614struct HT_caps_element {
 615        union {
 616                struct {
 617                        __le16  HT_caps_info;
 618                        unsigned char   AMPDU_para;
 619                        unsigned char   MCS_rate[16];
 620                        __le16  HT_ext_caps;
 621                        __le16  Beamforming_caps;
 622                        unsigned char   ASEL_caps;
 623                } HT_cap_element;
 624                unsigned char HT_cap[26];
 625        } u;
 626} __packed;
 627
 628struct HT_info_element {
 629        unsigned char   primary_channel;
 630        unsigned char   infos[5];
 631        unsigned char   MCS_rate[16];
 632} __packed;
 633
 634struct AC_param {
 635        unsigned char           ACI_AIFSN;
 636        unsigned char           CW;
 637        __le16  TXOP_limit;
 638} __packed;
 639
 640struct WMM_para_element {
 641        unsigned char           QoS_info;
 642        unsigned char           reserved;
 643        struct AC_param ac_param[4];
 644} __packed;
 645
 646struct ADDBA_request {
 647        unsigned char   action_code;
 648        unsigned char   dialog_token;
 649        __le16  BA_para_set;
 650        __le16  BA_timeout_value;
 651        __le16  BA_starting_seqctrl;
 652} __packed;
 653
 654enum ht_cap_ampdu_factor {
 655        MAX_AMPDU_FACTOR_8K     = 0,
 656        MAX_AMPDU_FACTOR_16K    = 1,
 657        MAX_AMPDU_FACTOR_32K    = 2,
 658        MAX_AMPDU_FACTOR_64K    = 3,
 659};
 660
 661/* Spatial Multiplexing Power Save Modes */
 662#define WLAN_HT_CAP_SM_PS_STATIC        0
 663#define WLAN_HT_CAP_SM_PS_DYNAMIC       1
 664#define WLAN_HT_CAP_SM_PS_INVALID       2
 665#define WLAN_HT_CAP_SM_PS_DISABLED      3
 666
 667#define OP_MODE_PURE                    0
 668#define OP_MODE_MAY_BE_LEGACY_STAS      1
 669#define OP_MODE_20MHZ_HT_STA_ASSOCED    2
 670#define OP_MODE_MIXED                   3
 671
 672#define HT_INFO_HT_PARAM_SECONDARY_CHNL_OFF_MASK        ((u8) BIT(0) | BIT(1))
 673#define HT_INFO_HT_PARAM_SECONDARY_CHNL_ABOVE           ((u8) BIT(0))
 674#define HT_INFO_HT_PARAM_SECONDARY_CHNL_BELOW           ((u8) BIT(0) | BIT(1))
 675#define HT_INFO_HT_PARAM_REC_TRANS_CHNL_WIDTH           ((u8) BIT(2))
 676#define HT_INFO_HT_PARAM_RIFS_MODE                      ((u8) BIT(3))
 677#define HT_INFO_HT_PARAM_CTRL_ACCESS_ONLY               ((u8) BIT(4))
 678#define HT_INFO_HT_PARAM_SRV_INTERVAL_GRANULARITY       ((u8) BIT(5))
 679
 680#define HT_INFO_OPERATION_MODE_OP_MODE_MASK     \
 681                ((u16) (0x0001 | 0x0002))
 682#define HT_INFO_OPERATION_MODE_OP_MODE_OFFSET           0
 683#define HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT      ((u8) BIT(2))
 684#define HT_INFO_OPERATION_MODE_TRANSMIT_BURST_LIMIT     ((u8) BIT(3))
 685#define HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT       ((u8) BIT(4))
 686
 687#define HT_INFO_STBC_PARAM_DUAL_BEACON          ((u16) BIT(6))
 688#define HT_INFO_STBC_PARAM_DUAL_STBC_PROTECT    ((u16) BIT(7))
 689#define HT_INFO_STBC_PARAM_SECONDARY_BC         ((u16) BIT(8))
 690#define HT_INFO_STBC_PARAM_LSIG_TXOP_PROTECT_ALLOWED    ((u16) BIT(9))
 691#define HT_INFO_STBC_PARAM_PCO_ACTIVE           ((u16) BIT(10))
 692#define HT_INFO_STBC_PARAM_PCO_PHASE            ((u16) BIT(11))
 693
 694/*      ===============WPS Section=============== */
 695/*      For WPSv1.0 */
 696#define WPSOUI                                  0x0050f204
 697/*      WPS attribute ID */
 698#define WPS_ATTR_VER1                           0x104A
 699#define WPS_ATTR_SIMPLE_CONF_STATE              0x1044
 700#define WPS_ATTR_RESP_TYPE                      0x103B
 701#define WPS_ATTR_UUID_E                         0x1047
 702#define WPS_ATTR_MANUFACTURER                   0x1021
 703#define WPS_ATTR_MODEL_NAME                     0x1023
 704#define WPS_ATTR_MODEL_NUMBER                   0x1024
 705#define WPS_ATTR_SERIAL_NUMBER                  0x1042
 706#define WPS_ATTR_PRIMARY_DEV_TYPE               0x1054
 707#define WPS_ATTR_SEC_DEV_TYPE_LIST              0x1055
 708#define WPS_ATTR_DEVICE_NAME                    0x1011
 709#define WPS_ATTR_CONF_METHOD                    0x1008
 710#define WPS_ATTR_RF_BANDS                       0x103C
 711#define WPS_ATTR_DEVICE_PWID                    0x1012
 712#define WPS_ATTR_REQUEST_TYPE                   0x103A
 713#define WPS_ATTR_ASSOCIATION_STATE              0x1002
 714#define WPS_ATTR_CONFIG_ERROR                   0x1009
 715#define WPS_ATTR_VENDOR_EXT                     0x1049
 716#define WPS_ATTR_SELECTED_REGISTRAR             0x1041
 717
 718/*      Value of WPS attribute "WPS_ATTR_DEVICE_NAME */
 719#define WPS_MAX_DEVICE_NAME_LEN                 32
 720
 721/*      Value of WPS Request Type Attribute */
 722#define WPS_REQ_TYPE_ENROLLEE_INFO_ONLY         0x00
 723#define WPS_REQ_TYPE_ENROLLEE_OPEN_8021X        0x01
 724#define WPS_REQ_TYPE_REGISTRAR                  0x02
 725#define WPS_REQ_TYPE_WLAN_MANAGER_REGISTRAR     0x03
 726
 727/*      Value of WPS Response Type Attribute */
 728#define WPS_RESPONSE_TYPE_INFO_ONLY     0x00
 729#define WPS_RESPONSE_TYPE_8021X         0x01
 730#define WPS_RESPONSE_TYPE_REGISTRAR     0x02
 731#define WPS_RESPONSE_TYPE_AP            0x03
 732
 733/*      Value of WPS WiFi Simple Configuration State Attribute */
 734#define WPS_WSC_STATE_NOT_CONFIG        0x01
 735#define WPS_WSC_STATE_CONFIG            0x02
 736
 737/*      Value of WPS Version Attribute */
 738#define WPS_VERSION_1                   0x10
 739
 740/*      Value of WPS Configuration Method Attribute */
 741#define WPS_CONFIG_METHOD_FLASH         0x0001
 742#define WPS_CONFIG_METHOD_ETHERNET      0x0002
 743#define WPS_CONFIG_METHOD_LABEL         0x0004
 744#define WPS_CONFIG_METHOD_DISPLAY       0x0008
 745#define WPS_CONFIG_METHOD_E_NFC         0x0010
 746#define WPS_CONFIG_METHOD_I_NFC         0x0020
 747#define WPS_CONFIG_METHOD_NFC           0x0040
 748#define WPS_CONFIG_METHOD_PBC           0x0080
 749#define WPS_CONFIG_METHOD_KEYPAD        0x0100
 750#define WPS_CONFIG_METHOD_VPBC          0x0280
 751#define WPS_CONFIG_METHOD_PPBC          0x0480
 752#define WPS_CONFIG_METHOD_VDISPLAY      0x2008
 753#define WPS_CONFIG_METHOD_PDISPLAY      0x4008
 754
 755/*      Value of Category ID of WPS Primary Device Type Attribute */
 756#define WPS_PDT_CID_DISPLAYS            0x0007
 757#define WPS_PDT_CID_MULIT_MEDIA         0x0008
 758#define WPS_PDT_CID_RTK_WIDI            WPS_PDT_CID_MULIT_MEDIA
 759
 760/*      Value of Sub Category ID of WPS Primary Device Type Attribute */
 761#define WPS_PDT_SCID_MEDIA_SERVER       0x0005
 762#define WPS_PDT_SCID_RTK_DMP            WPS_PDT_SCID_MEDIA_SERVER
 763
 764/*      Value of Device Password ID */
 765#define WPS_DPID_P                      0x0000
 766#define WPS_DPID_USER_SPEC              0x0001
 767#define WPS_DPID_MACHINE_SPEC           0x0002
 768#define WPS_DPID_REKEY                  0x0003
 769#define WPS_DPID_PBC                    0x0004
 770#define WPS_DPID_REGISTRAR_SPEC         0x0005
 771
 772/*      Value of WPS RF Bands Attribute */
 773#define WPS_RF_BANDS_2_4_GHZ            0x01
 774#define WPS_RF_BANDS_5_GHZ              0x02
 775
 776/*      Value of WPS Association State Attribute */
 777#define WPS_ASSOC_STATE_NOT_ASSOCIATED          0x00
 778#define WPS_ASSOC_STATE_CONNECTION_SUCCESS      0x01
 779#define WPS_ASSOC_STATE_CONFIGURATION_FAILURE   0x02
 780#define WPS_ASSOC_STATE_ASSOCIATION_FAILURE     0x03
 781#define WPS_ASSOC_STATE_IP_FAILURE              0x04
 782
 783/*      =====================P2P Section===================== */
 784/*      For P2P */
 785#define P2POUI                                  0x506F9A09
 786
 787/*      P2P Attribute ID */
 788#define P2P_ATTR_STATUS                         0x00
 789#define P2P_ATTR_MINOR_REASON_CODE              0x01
 790#define P2P_ATTR_CAPABILITY                     0x02
 791#define P2P_ATTR_DEVICE_ID                      0x03
 792#define P2P_ATTR_GO_INTENT                      0x04
 793#define P2P_ATTR_CONF_TIMEOUT                   0x05
 794#define P2P_ATTR_LISTEN_CH                      0x06
 795#define P2P_ATTR_GROUP_BSSID                    0x07
 796#define P2P_ATTR_EX_LISTEN_TIMING               0x08
 797#define P2P_ATTR_INTENTED_IF_ADDR               0x09
 798#define P2P_ATTR_MANAGEABILITY                  0x0A
 799#define P2P_ATTR_CH_LIST                        0x0B
 800#define P2P_ATTR_NOA                            0x0C
 801#define P2P_ATTR_DEVICE_INFO                    0x0D
 802#define P2P_ATTR_GROUP_INFO                     0x0E
 803#define P2P_ATTR_GROUP_ID                       0x0F
 804#define P2P_ATTR_INTERFACE                      0x10
 805#define P2P_ATTR_OPERATING_CH                   0x11
 806#define P2P_ATTR_INVITATION_FLAGS               0x12
 807
 808/*      Value of Status Attribute */
 809#define P2P_STATUS_SUCCESS                              0x00
 810#define P2P_STATUS_FAIL_INFO_UNAVAILABLE                0x01
 811#define P2P_STATUS_FAIL_INCOMPATIBLE_PARAM              0x02
 812#define P2P_STATUS_FAIL_LIMIT_REACHED                   0x03
 813#define P2P_STATUS_FAIL_INVALID_PARAM                   0x04
 814#define P2P_STATUS_FAIL_REQUEST_UNABLE                  0x05
 815#define P2P_STATUS_FAIL_PREVOUS_PROTO_ERR               0x06
 816#define P2P_STATUS_FAIL_NO_COMMON_CH                    0x07
 817#define P2P_STATUS_FAIL_UNKNOWN_P2PGROUP                0x08
 818#define P2P_STATUS_FAIL_BOTH_GOINTENT_15                0x09
 819#define P2P_STATUS_FAIL_INCOMPATIBLE_PROVSION           0x0A
 820#define P2P_STATUS_FAIL_USER_REJECT                     0x0B
 821
 822/*      Value of Inviation Flags Attribute */
 823#define P2P_INVITATION_FLAGS_PERSISTENT                 BIT(0)
 824
 825#define DMP_P2P_DEVCAP_SUPPORT  (P2P_DEVCAP_SERVICE_DISCOVERY | \
 826                                P2P_DEVCAP_CLIENT_DISCOVERABILITY | \
 827                                P2P_DEVCAP_CONCURRENT_OPERATION | \
 828                                P2P_DEVCAP_INVITATION_PROC)
 829
 830#define DMP_P2P_GRPCAP_SUPPORT  (P2P_GRPCAP_INTRABSS)
 831
 832/*      Value of Device Capability Bitmap */
 833#define P2P_DEVCAP_SERVICE_DISCOVERY            BIT(0)
 834#define P2P_DEVCAP_CLIENT_DISCOVERABILITY       BIT(1)
 835#define P2P_DEVCAP_CONCURRENT_OPERATION         BIT(2)
 836#define P2P_DEVCAP_INFRA_MANAGED                BIT(3)
 837#define P2P_DEVCAP_DEVICE_LIMIT                 BIT(4)
 838#define P2P_DEVCAP_INVITATION_PROC              BIT(5)
 839
 840/*      Value of Group Capability Bitmap */
 841#define P2P_GRPCAP_GO                           BIT(0)
 842#define P2P_GRPCAP_PERSISTENT_GROUP             BIT(1)
 843#define P2P_GRPCAP_GROUP_LIMIT                  BIT(2)
 844#define P2P_GRPCAP_INTRABSS                     BIT(3)
 845#define P2P_GRPCAP_CROSS_CONN                   BIT(4)
 846#define P2P_GRPCAP_PERSISTENT_RECONN            BIT(5)
 847#define P2P_GRPCAP_GROUP_FORMATION              BIT(6)
 848
 849/*      P2P Public Action Frame (Management Frame) */
 850#define P2P_PUB_ACTION_ACTION                   0x09
 851
 852/*      P2P Public Action Frame Type */
 853#define P2P_GO_NEGO_REQ                         0
 854#define P2P_GO_NEGO_RESP                        1
 855#define P2P_GO_NEGO_CONF                        2
 856#define P2P_INVIT_REQ                           3
 857#define P2P_INVIT_RESP                          4
 858#define P2P_DEVDISC_REQ                         5
 859#define P2P_DEVDISC_RESP                        6
 860#define P2P_PROVISION_DISC_REQ                  7
 861#define P2P_PROVISION_DISC_RESP                 8
 862
 863/*      P2P Action Frame Type */
 864#define P2P_NOTICE_OF_ABSENCE                   0
 865#define P2P_PRESENCE_REQUEST                    1
 866#define P2P_PRESENCE_RESPONSE                   2
 867#define P2P_GO_DISC_REQUEST                     3
 868
 869#define P2P_MAX_PERSISTENT_GROUP_NUM            10
 870
 871#define P2P_PROVISIONING_SCAN_CNT               3
 872
 873#define P2P_WILDCARD_SSID_LEN                   7
 874
 875/* default value, used when: (1)p2p disabed or (2)p2p enabled
 876 * but only do 1 scan phase */
 877#define P2P_FINDPHASE_EX_NONE           0
 878/*  used when p2p enabled and want to do 1 scan phase and
 879 *  P2P_FINDPHASE_EX_MAX-1 find phase */
 880#define P2P_FINDPHASE_EX_FULL           1
 881#define P2P_FINDPHASE_EX_SOCIAL_FIRST   (P2P_FINDPHASE_EX_FULL+1)
 882#define P2P_FINDPHASE_EX_MAX            4
 883#define P2P_FINDPHASE_EX_SOCIAL_LAST    P2P_FINDPHASE_EX_MAX
 884
 885/* 5 seconds timeout for sending the provision discovery request */
 886#define P2P_PROVISION_TIMEOUT           5000
 887/* 3 seconds timeout for sending the prov disc request concurrent mode */
 888#define P2P_CONCURRENT_PROVISION_TIME   3000
 889/* 5 seconds timeout for receiving the group negotiation response */
 890#define P2P_GO_NEGO_TIMEOUT             5000
 891/* 3 seconds timeout for sending the negotiation request under concurrent mode */
 892#define P2P_CONCURRENT_GO_NEGO_TIME     3000
 893/* 100ms */
 894#define P2P_TX_PRESCAN_TIMEOUT          100
 895/* 5 seconds timeout for sending the invitation request */
 896#define P2P_INVITE_TIMEOUT              5000
 897/* 3 seconds timeout for sending the invitation request under concurrent mode */
 898#define P2P_CONCURRENT_INVITE_TIME      3000
 899/* 25 seconds timeout to reset the scan channel (based on channel plan) */
 900#define P2P_RESET_SCAN_CH               25000
 901#define P2P_MAX_INTENT                  15
 902
 903#define P2P_MAX_NOA_NUM                 2
 904
 905/*      WPS Configuration Method */
 906#define WPS_CM_NONE                     0x0000
 907#define WPS_CM_LABEL                    0x0004
 908#define WPS_CM_DISPLYA                  0x0008
 909#define WPS_CM_EXTERNAL_NFC_TOKEN       0x0010
 910#define WPS_CM_INTEGRATED_NFC_TOKEN     0x0020
 911#define WPS_CM_NFC_INTERFACE            0x0040
 912#define WPS_CM_PUSH_BUTTON              0x0080
 913#define WPS_CM_KEYPAD                   0x0100
 914#define WPS_CM_SW_PUHS_BUTTON           0x0280
 915#define WPS_CM_HW_PUHS_BUTTON           0x0480
 916#define WPS_CM_SW_DISPLAY_P             0x2008
 917#define WPS_CM_LCD_DISPLAY_P            0x4008
 918
 919enum P2P_ROLE {
 920        P2P_ROLE_DISABLE = 0,
 921        P2P_ROLE_DEVICE = 1,
 922        P2P_ROLE_CLIENT = 2,
 923        P2P_ROLE_GO = 3
 924};
 925
 926enum P2P_STATE {
 927        P2P_STATE_NONE = 0,                     /* P2P disable */
 928        /* P2P had enabled and do nothing */
 929        P2P_STATE_IDLE = 1,
 930        P2P_STATE_LISTEN = 2,                   /* In pure listen state */
 931        P2P_STATE_SCAN = 3,                     /* In scan phase */
 932        /* In the listen state of find phase */
 933        P2P_STATE_FIND_PHASE_LISTEN = 4,
 934        /* In the search state of find phase */
 935        P2P_STATE_FIND_PHASE_SEARCH = 5,
 936        /* In P2P provisioning discovery */
 937        P2P_STATE_TX_PROVISION_DIS_REQ = 6,
 938        P2P_STATE_RX_PROVISION_DIS_RSP = 7,
 939        P2P_STATE_RX_PROVISION_DIS_REQ = 8,
 940        /* Doing the group owner negoitation handshake */
 941        P2P_STATE_GONEGO_ING = 9,
 942        /* finish the group negoitation handshake with success */
 943        P2P_STATE_GONEGO_OK = 10,
 944        /* finish the group negoitation handshake with failure */
 945        P2P_STATE_GONEGO_FAIL = 11,
 946        /* receiving the P2P Inviation request and match with the profile. */
 947        P2P_STATE_RECV_INVITE_REQ_MATCH = 12,
 948        /* Doing the P2P WPS */
 949        P2P_STATE_PROVISIONING_ING = 13,
 950        /* Finish the P2P WPS */
 951        P2P_STATE_PROVISIONING_DONE = 14,
 952        /* Transmit the P2P Invitation request */
 953        P2P_STATE_TX_INVITE_REQ = 15,
 954        /* Receiving the P2P Invitation response */
 955        P2P_STATE_RX_INVITE_RESP_OK = 16,
 956        /* receiving the P2P Inviation request and dismatch with the profile. */
 957        P2P_STATE_RECV_INVITE_REQ_DISMATCH = 17,
 958        /* receiving the P2P Inviation request and this wifi is GO. */
 959        P2P_STATE_RECV_INVITE_REQ_GO = 18,
 960        /* receiving the P2P Inviation request to join an existing P2P Group. */
 961        P2P_STATE_RECV_INVITE_REQ_JOIN = 19,
 962        /* recveing the P2P Inviation response with failure */
 963        P2P_STATE_RX_INVITE_RESP_FAIL = 20,
 964        /* receiving p2p negoitation response with information is not available */
 965        P2P_STATE_RX_INFOR_NOREADY = 21,
 966        /* sending p2p negoitation response with information is not available */
 967        P2P_STATE_TX_INFOR_NOREADY = 22,
 968};
 969
 970enum P2P_WPSINFO {
 971        P2P_NO_WPSINFO                          = 0,
 972        P2P_GOT_WPSINFO_PEER_DISPLAY_PIN        = 1,
 973        P2P_GOT_WPSINFO_SELF_DISPLAY_PIN        = 2,
 974        P2P_GOT_WPSINFO_PBC                     = 3,
 975};
 976
 977#define P2P_PRIVATE_IOCTL_SET_LEN               64
 978
 979enum P2P_PROTO_WK_ID {
 980        P2P_FIND_PHASE_WK = 0,
 981        P2P_RESTORE_STATE_WK = 1,
 982        P2P_PRE_TX_PROVDISC_PROCESS_WK = 2,
 983        P2P_PRE_TX_NEGOREQ_PROCESS_WK = 3,
 984        P2P_PRE_TX_INVITEREQ_PROCESS_WK = 4,
 985        P2P_AP_P2P_CH_SWITCH_PROCESS_WK =5,
 986        P2P_RO_CH_WK = 6,
 987};
 988
 989enum P2P_PS_STATE {
 990        P2P_PS_DISABLE = 0,
 991        P2P_PS_ENABLE = 1,
 992        P2P_PS_SCAN = 2,
 993        P2P_PS_SCAN_DONE = 3,
 994        P2P_PS_ALLSTASLEEP = 4, /*  for P2P GO */
 995};
 996
 997enum P2P_PS_MODE {
 998        P2P_PS_NONE = 0,
 999        P2P_PS_CTWINDOW = 1,
1000        P2P_PS_NOA       = 2,
1001        P2P_PS_MIX = 3, /*  CTWindow and NoA */
1002};
1003
1004/*      =====================WFD Section===================== */
1005/*      For Wi-Fi Display */
1006#define WFD_ATTR_DEVICE_INFO            0x00
1007#define WFD_ATTR_ASSOC_BSSID            0x01
1008#define WFD_ATTR_COUPLED_SINK_INFO      0x06
1009#define WFD_ATTR_LOCAL_IP_ADDR          0x08
1010#define WFD_ATTR_SESSION_INFO           0x09
1011#define WFD_ATTR_ALTER_MAC              0x0a
1012
1013/*      For WFD Device Information Attribute */
1014#define WFD_DEVINFO_SOURCE                      0x0000
1015#define WFD_DEVINFO_PSINK                       0x0001
1016#define WFD_DEVINFO_SSINK                       0x0002
1017#define WFD_DEVINFO_DUAL                        0x0003
1018
1019#define WFD_DEVINFO_SESSION_AVAIL               0x0010
1020#define WFD_DEVINFO_WSD                         0x0040
1021#define WFD_DEVINFO_PC_TDLS                     0x0080
1022#define WFD_DEVINFO_HDCP_SUPPORT                0x0100
1023
1024#define IP_MCAST_MAC(mac)                               \
1025        ((mac[0] == 0x01) && (mac[1] == 0x00) && (mac[2] == 0x5e))
1026#define ICMPV6_MCAST_MAC(mac)                           \
1027        ((mac[0] == 0x33) && (mac[1] == 0x33) && (mac[2] != 0xff))
1028
1029#endif /*  _WIFI_H_ */
1030