utils/802_11Defs.h
changeset 0 10c42ec6c05f
equal deleted inserted replaced
-1:000000000000 0:10c42ec6c05f
       
     1 /*
       
     2  * 802_11Defs.h
       
     3  *
       
     4  * Copyright(c) 1998 - 2010 Texas Instruments. All rights reserved.      
       
     5  * All rights reserved.      
       
     6  * 
       
     7  * This program and the accompanying materials are made available under the 
       
     8  * terms of the Eclipse Public License v1.0 or BSD License which accompanies
       
     9  * this distribution. The Eclipse Public License is available at
       
    10  * http://www.eclipse.org/legal/epl-v10.html and the BSD License is as below.                                   
       
    11  *                                                                       
       
    12  * Redistribution and use in source and binary forms, with or without    
       
    13  * modification, are permitted provided that the following conditions    
       
    14  * are met:                                                              
       
    15  *                                                                       
       
    16  *  * Redistributions of source code must retain the above copyright     
       
    17  *    notice, this list of conditions and the following disclaimer.      
       
    18  *  * Redistributions in binary form must reproduce the above copyright  
       
    19  *    notice, this list of conditions and the following disclaimer in    
       
    20  *    the documentation and/or other materials provided with the         
       
    21  *    distribution.                                                      
       
    22  *  * Neither the name Texas Instruments nor the names of its            
       
    23  *    contributors may be used to endorse or promote products derived    
       
    24  *    from this software without specific prior written permission.      
       
    25  *                                                                       
       
    26  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   
       
    27  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     
       
    28  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
       
    29  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  
       
    30  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
       
    31  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      
       
    32  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
       
    33  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
       
    34  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   
       
    35  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
       
    36  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       
    37  */
       
    38 
       
    39 
       
    40 /****************************************************************************
       
    41  *
       
    42  *   MODULE:  802_11Defs.h
       
    43  *   PURPOSE: Contains 802.11 defines/structures
       
    44  *
       
    45  ****************************************************************************/
       
    46 
       
    47 #ifndef _802_11_INFO_DEFS_H
       
    48 #define _802_11_INFO_DEFS_H
       
    49 
       
    50 #include "tidef.h"
       
    51 #include "osDot11.h"
       
    52 #ifdef XCC_MODULE_INCLUDED
       
    53 #include "osdot11XCC.h"
       
    54 #endif
       
    55 
       
    56 #define DOT11_OUI_LEN                       3
       
    57 #define DOT11_COUNTRY_STRING_LEN            3
       
    58 #define DOT11_MAX_SUPPORTED_RATES           32
       
    59 
       
    60 /* Maximum size of beacon or probe-request information element */
       
    61 #define DOT11_WSC_PROBE_REQ_MAX_LENGTH 80
       
    62 
       
    63 
       
    64 typedef enum
       
    65 {
       
    66     DOT11_B_MODE    = 1,
       
    67     DOT11_A_MODE    = 2,
       
    68     DOT11_G_MODE    = 3,
       
    69     DOT11_DUAL_MODE = 4,
       
    70     DOT11_N_MODE    = 5,
       
    71 
       
    72     DOT11_MAX_MODE
       
    73 
       
    74 } EDot11Mode;
       
    75 
       
    76 
       
    77 /* FrameControl field of the 802.11 header  */
       
    78 
       
    79 /**/
       
    80 /* bit 15    14     13     12     11     10      9     8     7-4     3-2      1-0*/
       
    81 /* +-------+-----+------+-----+-------+------+------+----+---------+------+----------+*/
       
    82 /* | Order | WEP | More | Pwr | Retry | More | From | To | Subtype | Type | Protocol |*/
       
    83 /* |       |     | Data | Mgmt|       | Frag | DS   | DS |         |      | Version  |*/
       
    84 /* +-------+-----+------+-----+-------+------+------+----+---------+------+----------+*/
       
    85 /*     1      1      1     1      1       1      1     1       4       2        2*/
       
    86 
       
    87 
       
    88 #define DOT11_FC_PROT_VERSION_MASK   ( 3 << 0 )
       
    89 #define DOT11_FC_PROT_VERSION        ( 0 << 0 )
       
    90 
       
    91 #define DOT11_FC_TYPE_MASK           ( 3 << 2 )
       
    92 typedef enum
       
    93 {
       
    94   DOT11_FC_TYPE_MGMT         = ( 0 << 2 ),
       
    95   DOT11_FC_TYPE_CTRL         = ( 1 << 2 ),
       
    96   DOT11_FC_TYPE_DATA         = ( 2 << 2 )
       
    97 } dot11_Fc_Type_e;
       
    98 
       
    99 #define DOT11_FC_SUB_MASK           ( 0x0f << 4 )
       
   100 typedef enum
       
   101 {
       
   102   /* Management subtypes */
       
   103   DOT11_FC_SUB_ASSOC_REQ     = (    0 << 4 ),
       
   104   DOT11_FC_SUB_ASSOC_RESP    = (    1 << 4 ),
       
   105   DOT11_FC_SUB_REASSOC_REQ   = (    2 << 4 ),
       
   106   DOT11_FC_SUB_REASSOC_RESP  = (    3 << 4 ),
       
   107   DOT11_FC_SUB_PROBE_REQ     = (    4 << 4 ),
       
   108   DOT11_FC_SUB_PROBE_RESP    = (    5 << 4 ),
       
   109   DOT11_FC_SUB_BEACON        = (    8 << 4 ),
       
   110   DOT11_FC_SUB_ATIM          = (    9 << 4 ),
       
   111   DOT11_FC_SUB_DISASSOC      = (   10 << 4 ),
       
   112   DOT11_FC_SUB_AUTH          = (   11 << 4 ),
       
   113   DOT11_FC_SUB_DEAUTH        = (   12 << 4 ),
       
   114   DOT11_FC_SUB_ACTION        = (   13 << 4 ),
       
   115 
       
   116   /* Control subtypes */
       
   117   DOT11_FC_SUB_BAR                    = (    8 << 4 ),
       
   118   DOT11_FC_SUB_BA                     = (    9 << 4 ),
       
   119   DOT11_FC_SUB_PS_POLL                = (   10 << 4 ),
       
   120   DOT11_FC_SUB_RTS                    = (   11 << 4 ),
       
   121   DOT11_FC_SUB_CTS                    = (   12 << 4 ),
       
   122   DOT11_FC_SUB_ACK                    = (   13 << 4 ),
       
   123   DOT11_FC_SUB_CF_END                 = (   14 << 4 ),
       
   124   DOT11_FC_SUB_CF_END_CF_ACK          = (   15 << 4 ),
       
   125 
       
   126   /* Data subtypes */
       
   127   DOT11_FC_SUB_DATA                   = (    0 << 4 ),
       
   128   DOT11_FC_SUB_DATA_CF_ACK            = (    1 << 4 ),
       
   129   DOT11_FC_SUB_DATA_CF_POLL           = (    2 << 4 ),
       
   130   DOT11_FC_SUB_DATA_CF_ACK_CF_POLL    = (    3 << 4 ),
       
   131   DOT11_FC_SUB_NULL_FUNCTION          = (    4 << 4 ),
       
   132   DOT11_FC_SUB_CF_ACK                 = (    5 << 4 ),
       
   133   DOT11_FC_SUB_CF_POLL                = (    6 << 4 ),
       
   134   DOT11_FC_SUB_CF_ACK_CF_POLL         = (    7 << 4 ),
       
   135   DOT11_FC_SUB_DATA_QOS               = (    8 << 4 ),
       
   136   DOT11_FC_SUB_DATA_NULL_QOS          = (   12 << 4 )
       
   137 } dot11_Fc_Sub_Type_e;
       
   138 
       
   139 #define  DOT11_FC_TYPESUBTYPE_MASK    ( DOT11_FC_TYPE_MASK | DOT11_FC_SUB_MASK )
       
   140 typedef enum
       
   141 {
       
   142   DOT11_FC_ASSOC_REQ           = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_ASSOC_REQ           ),
       
   143   DOT11_FC_ASSOC_RESP          = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_ASSOC_RESP          ),
       
   144   DOT11_FC_REASSOC_REQ         = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_REASSOC_REQ         ),
       
   145   DOT11_FC_REASSOC_RESP        = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_REASSOC_RESP        ),
       
   146   DOT11_FC_PROBE_REQ           = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_PROBE_REQ           ),
       
   147   DOT11_FC_PROBE_RESP          = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_PROBE_RESP          ),
       
   148   DOT11_FC_BEACON              = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_BEACON              ),
       
   149   DOT11_FC_ATIM                = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_ATIM                ),
       
   150   DOT11_FC_DISASSOC            = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_DISASSOC            ),
       
   151   DOT11_FC_AUTH                = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_AUTH                ),
       
   152   DOT11_FC_DEAUTH              = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_DEAUTH              ),
       
   153   DOT11_FC_ACTION              = ( DOT11_FC_TYPE_MGMT | DOT11_FC_SUB_ACTION              ),
       
   154   DOT11_FC_PS_POLL             = ( DOT11_FC_TYPE_CTRL | DOT11_FC_SUB_PS_POLL             ),
       
   155   DOT11_FC_RTS                 = ( DOT11_FC_TYPE_CTRL | DOT11_FC_SUB_RTS                 ),
       
   156   DOT11_FC_CTS                 = ( DOT11_FC_TYPE_CTRL | DOT11_FC_SUB_CTS                 ),
       
   157   DOT11_FC_ACK                 = ( DOT11_FC_TYPE_CTRL | DOT11_FC_SUB_ACK                 ),
       
   158   DOT11_FC_CF_END              = ( DOT11_FC_TYPE_CTRL | DOT11_FC_SUB_CF_END              ),
       
   159   DOT11_FC_CF_END_CF_ACK       = ( DOT11_FC_TYPE_CTRL | DOT11_FC_SUB_CF_END_CF_ACK       ),
       
   160   DOT11_FC_DATA                = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_DATA                ),
       
   161   DOT11_FC_DATA_CF_ACK         = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_DATA_CF_ACK         ),
       
   162   DOT11_FC_DATA_CF_POLL        = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_DATA_CF_POLL        ),
       
   163   DOT11_FC_DATA_CF_ACK_CF_POLL = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_DATA_CF_ACK_CF_POLL ),
       
   164   DOT11_FC_DATA_NULL_FUNCTION  = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_NULL_FUNCTION       ),
       
   165   DOT11_FC_CF_ACK              = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_CF_ACK              ),
       
   166   DOT11_FC_CF_POLL             = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_CF_POLL             ),
       
   167   DOT11_FC_CF_ACK_CF_POLL      = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_CF_ACK_CF_POLL      ),
       
   168   DOT11_FC_DATA_QOS            = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_DATA_QOS            ),
       
   169   DOT11_FC_DATA_NULL_QOS       = ( DOT11_FC_TYPE_DATA | DOT11_FC_SUB_DATA_NULL_QOS       )
       
   170 } dot11_Fc_Type_Sub_Type_e;
       
   171 
       
   172 typedef enum
       
   173 {
       
   174   DOT11_FC_TO_DS               = ( 1 << 8  ),
       
   175   DOT11_FC_FROM_DS             = ( 1 << 9  ),
       
   176   DOT11_FC_MORE_FRAG           = ( 1 << 10 ),
       
   177   DOT11_FC_RETRY               = ( 1 << 11 ),
       
   178   DOT11_FC_PWR_MGMT            = ( 1 << 12 ),
       
   179   DOT11_FC_MORE_DATA           = ( 1 << 13 ),
       
   180   DOT11_FC_WEP                 = ( 1 << 14 ),
       
   181   DOT11_FC_ORDER               = ( 1 << 15 )
       
   182 } dot11_Fc_Other_e;
       
   183 
       
   184 typedef enum
       
   185 {
       
   186   DOT11_CAPABILITY_ESS               = ( 1 ),
       
   187   DOT11_CAPABILITY_IESS              = ( 1 << 1 ),
       
   188   DOT11_CAPABILITY_CF_POLLABE        = ( 1 << 2 ),
       
   189   DOT11_CAPABILITY_CF_POLL_REQ       = ( 1 << 3 ),
       
   190   DOT11_CAPABILITY_PRIVACY           = ( 1 << 4 ),
       
   191   DOT11_CAPABILITY_PREAMBLE          = ( 1 << 5 ),
       
   192   DOT11_CAPABILITY_PBCC              = ( 1 << 6 ),
       
   193   DOT11_CAPABILITY_AGILE             = ( 1 << 7 )
       
   194 } dot11_Capability_e;
       
   195 
       
   196 #define  DOT11_FC_TO_DS_SHIFT        8
       
   197 #define  DOT11_FC_FROM_DS_SHIFT      9
       
   198 #define  DOT11_FC_MORE_FRAG_SHIFT   10
       
   199 #define  DOT11_FC_RETRY_SHIFT       11
       
   200 #define  DOT11_FC_PWR_MGMT_SHIFT    12
       
   201 #define  DOT11_FC_MORE_DATA_SHIFT   13
       
   202 #define  DOT11_FC_WEP_SHIFT         14
       
   203 #define  DOT11_FC_ORDER_SHIFT       15
       
   204 
       
   205 #define IS_WEP_ON(fc)       ((1 << DOT11_FC_WEP_SHIFT) & (fc))
       
   206 #define IS_DATA(fc)         (((DOT11_FC_TYPE_MASK) & (fc)) == DOT11_FC_TYPE_DATA)
       
   207 #define IS_CTRL(fc)         (((DOT11_FC_TYPE_MASK) & (fc)) == DOT11_FC_TYPE_CTRL)
       
   208 #define IS_MGMT(fc)         (((DOT11_FC_TYPE_MASK) & (fc)) == DOT11_FC_TYPE_MGMT)
       
   209 #define IS_LEGACY_DATA(fc)  (((DOT11_FC_TYPESUBTYPE_MASK) & (fc)) == DOT11_FC_DATA)
       
   210 #define IS_AUTH(fc)         (((DOT11_FC_AUTH) & (fc)) == DOT11_FC_AUTH)
       
   211 #define IS_QOS_FRAME(fc)    ((((fc) & (DOT11_FC_TYPESUBTYPE_MASK)) == DOT11_FC_DATA_QOS)   ||   \
       
   212                              (((fc) & (DOT11_FC_TYPESUBTYPE_MASK)) == DOT11_FC_DATA_NULL_QOS) )
       
   213 #define IS_HT_FRAME(fc)     ((fc) & (DOT11_FC_ORDER))
       
   214 
       
   215 
       
   216 
       
   217 #define TUs_TO_MSECs(x)     (((x) << 10) / 1000)
       
   218 
       
   219 #define TIME_STAMP_LEN  8
       
   220 
       
   221 /* SequenceControl field of the 802.11 header */
       
   222 /**/
       
   223 /* bit    15 - 4           3 - 0*/
       
   224 /* +-------------------+-----------+*/
       
   225 /* |  Sequence Number  | Fragment  |*/
       
   226 /* |                   |  Number   |*/
       
   227 /* +-------------------+-----------+*/
       
   228 /*         12                4*/
       
   229 
       
   230 typedef enum
       
   231 {
       
   232   DOT11_SC_FRAG_NUM_MASK = ( 0xf   << 0 ),
       
   233   DOT11_SC_SEQ_NUM_MASK  = ( 0xfff << 4 )
       
   234 } dot11_Sc_t;
       
   235 
       
   236 /* QoS Control field of the 802.11 header */
       
   237 #define DOT11_QOS_CONTROL_FIELD_TID_BITS    0x000f
       
   238 #define DOT11_QOS_CONTROL_FIELD_A_MSDU_BITS 0x0080
       
   239 
       
   240 #define DOT11_QOS_CONTROL_ACK        0x0000
       
   241 #define DOT11_QOS_CONTROL_DONT_ACK   0x0020
       
   242 
       
   243 typedef struct
       
   244 {
       
   245   TI_UINT16        fc;
       
   246   TI_UINT16        duration;
       
   247   TMacAddr         address1;
       
   248   TMacAddr         address2;
       
   249   TMacAddr         address3;
       
   250   TI_UINT16        seqCtrl;
       
   251   TI_UINT16        qosControl;
       
   252 /*  TMacAddr    address4;*/
       
   253 }  dot11_header_t;
       
   254 
       
   255 typedef struct
       
   256 {
       
   257   TI_UINT16        fc;
       
   258   TI_UINT16        duration;
       
   259   TMacAddr         address1;
       
   260   TMacAddr         address2;
       
   261   TMacAddr         address3;
       
   262   TI_UINT16        seqCtrl;
       
   263 } legacy_dot11_header_t;
       
   264 
       
   265 
       
   266 
       
   267 typedef struct
       
   268 {
       
   269   TI_UINT16        fc;
       
   270   TI_UINT16        duration;
       
   271   TMacAddr         DA;
       
   272   TMacAddr         SA;
       
   273   TMacAddr         BSSID;
       
   274   TI_UINT16        seqCtrl;
       
   275 } dot11_mgmtHeader_t;
       
   276 
       
   277 typedef struct
       
   278 {
       
   279   TI_UINT8     DSAP;
       
   280   TI_UINT8     SSAP;
       
   281   TI_UINT8     Control;
       
   282   TI_UINT8     OUI[3];
       
   283   TI_UINT16    Type;
       
   284 } Wlan_LlcHeader_T;
       
   285 
       
   286 typedef struct
       
   287 {
       
   288   TI_UINT16        fc;
       
   289   TI_UINT16        AID;
       
   290   TMacAddr         BSSID;
       
   291   TMacAddr         TA;
       
   292 } dot11_PsPollFrameHeader_t;
       
   293 
       
   294 typedef struct
       
   295 {
       
   296   TI_UINT16        fc;
       
   297   TI_UINT16        duration;
       
   298   TMacAddr         RA;
       
   299   TMacAddr         TA;
       
   300 } dot11_BarFrameHeader_t;
       
   301 
       
   302 
       
   303 #define FCS_SIZE    4
       
   304 
       
   305 #define WLAN_HDR_LEN                            24
       
   306 #define WLAN_HT_HDR_LEN                         28
       
   307 #define WLAN_QOS_HDR_LEN                        26
       
   308 #define WLAN_QOS_HT_HDR_LEN                     30
       
   309 #define WLAN_QOS_HT_CONTROL_FIELD_LEN           4
       
   310 #define WLAN_SNAP_HDR_LEN                       8
       
   311 #define WLAN_WITH_SNAP_HEADER_MAX_SIZE          (WLAN_HDR_LEN + WLAN_SNAP_HDR_LEN)
       
   312 #define WLAN_WITH_SNAP_QOS_HEADER_MAX_SIZE      (WLAN_QOS_HDR_LEN + WLAN_SNAP_HDR_LEN)
       
   313 #define HT_CONTROL_SIZE							4
       
   314 
       
   315 #define GET_MAX_HEADER_SIZE(macHeaderPointer,headerSize)    \
       
   316     if (IS_QOS_FRAME(*(TI_UINT16*)(macHeaderPointer)))      \
       
   317     {\
       
   318        if (IS_HT_FRAME(*(TI_UINT16*)(macHeaderPointer)))    \
       
   319            *headerSize = WLAN_QOS_HT_HDR_LEN;               \
       
   320        else                                                 \
       
   321            *headerSize = WLAN_QOS_HDR_LEN;                  \
       
   322      }\
       
   323      else                                                   \
       
   324      {\
       
   325        if (IS_HT_FRAME(*(TI_UINT16*)(macHeaderPointer)))    \
       
   326            *headerSize = WLAN_HT_HDR_LEN;                   \
       
   327        else                                                 \
       
   328            *headerSize = WLAN_HDR_LEN;                      \
       
   329      }
       
   330 
       
   331 /****************************************************************************************
       
   332     The next table is defined in 802.11 spec section 7.2.2 for the address field contents :
       
   333     To DS   From DS     Address 1    Address 2  Address 3    Address 4
       
   334     -------------------------------------------------------------------
       
   335     0           0           DA          SA          BSSID       N/A
       
   336     0           1           DA          BSSID       SA          N/A
       
   337     1           0           BSSID       SA          DA          N/A
       
   338     1           1           RA          TA          DA          SA         
       
   339     
       
   340 NOTE: We only support packets coming from within the DS (i.e. From DS = 0)
       
   341 *****************************************************************************************/
       
   342 /* return the destination address used in *dot11_header_t */
       
   343 #define GET_DA_FROM_DOT11_HEADER_T(pDot11Hdr)   ((pDot11Hdr->fc & DOT11_FC_TO_DS) ? (pDot11Hdr->address3) : (pDot11Hdr->address1)) 
       
   344 
       
   345 
       
   346 /*
       
   347  * MANAGEMENT
       
   348  * -----------------
       
   349  */
       
   350 
       
   351 /* mgmt body max length */
       
   352 #define MAX_MGMT_BODY_LENGTH                2312
       
   353 /* maximal length of beacon body - note that actual beacons may actually be longer
       
   354    than this size, at least according to the spec, but so far no larger beacon was seen */
       
   355 #define MAX_BEACON_BODY_LENGTH              350
       
   356 
       
   357 /* general mgmt frame structure */
       
   358 typedef struct
       
   359 {
       
   360     dot11_mgmtHeader_t  hdr;
       
   361     TI_UINT8                body[MAX_MGMT_BODY_LENGTH];
       
   362 } dot11_mgmtFrame_t;
       
   363 
       
   364 /* Capabilities Information Field - IN THE AIR */
       
   365 /**/
       
   366 /*  bit  15      14       13         12        11         10      9      8      7   -   0*/
       
   367 /* +----------+------+----------+---------+----------+---------+------+-----+---------------+*/
       
   368 /* |  Channel |      |  Short   | Privacy | CF Poll  |   CF    |      |     |   RESERVED    |   */
       
   369 /* |  Agility | PBCC | Preamble |         | Request  | Pollable| IBSS | ESS |               |*/
       
   370 /* +----------+------+----------+---------+----------+---------+------+-----+---------------+   */
       
   371 /*       1        1       1          1         1          1       1      1*/
       
   372 
       
   373 
       
   374 /* Capabilities Information Field - IN THE MGMT SOFTWARE AFTER THE SWAP */
       
   375 /**/
       
   376 /* bit 15 - 8         7        6       5          4         3          2       1      0*/
       
   377 /* +------------+----------+------+----------+---------+----------+---------+------+-----+*/
       
   378 /* |            |  Channel |      |  Short   | Privacy | CF Poll  |   CF    |      |     |*/
       
   379 /* |  Reserved  |  Agility | PBCC | Preamble |         | Request  | Pollable| IBSS | ESS |*/
       
   380 /* +------------+----------+------+----------+---------+----------+---------+------+-----+*/
       
   381 /*       8            1        1       1          1         1          1       1      1*/
       
   382 
       
   383 
       
   384 
       
   385 typedef enum
       
   386 { 
       
   387   DOT11_CAPS_ESS             = ( 1 << 0 ),
       
   388   DOT11_CAPS_IBSS            = ( 1 << 1 ),
       
   389   DOT11_CAPS_CF_POLLABLE     = ( 1 << 2 ),
       
   390   DOT11_CAPS_CF_POLL_REQUEST = ( 1 << 3 ),
       
   391   DOT11_CAPS_PRIVACY         = ( 1 << 4 ),
       
   392   DOT11_CAPS_SHORT_PREAMBLE  = ( 1 << 5 ),
       
   393   DOT11_CAPS_PBCC            = ( 1 << 6 ),
       
   394   DOT11_CAPS_CHANNEL_AGILITY = ( 1 << 7 ),
       
   395   DOT11_SPECTRUM_MANAGEMENT  = ( 1 << 8 ),
       
   396   DOT11_CAPS_QOS_SUPPORTED   = ( 1 << 9 ),
       
   397   DOT11_CAPS_SHORT_SLOT_TIME = (1  << 10),
       
   398 
       
   399   DOT11_CAPS_APSD_SUPPORT    = ( 1 << 11),
       
   400 
       
   401   DOT11_CAPS_DELAYED_BA      = ( 1 << 14),
       
   402   DOT11_CAPS_IMMEDIATE_BA    = ( 1 << 15)
       
   403 
       
   404 } dot11_capabilities_e;
       
   405 
       
   406 typedef enum 
       
   407 {
       
   408     /* ESS */
       
   409     CAP_ESS_MASK            = 1,
       
   410     CAP_ESS_SHIFT           = 0,
       
   411 
       
   412     /* IBSS */
       
   413     CAP_IBSS_MASK           = 1,
       
   414     CAP_IBSS_SHIFT          = 1,
       
   415 
       
   416     /* CF Pollable */
       
   417     CAP_CF_POLL_MASK        = 1,
       
   418     CAP_CF_POLL_SHIFT       = 2,
       
   419     
       
   420     /* CF Poll request */
       
   421     CAP_CF_REQ_MASK         = 1,
       
   422     CAP_CF_REQ_SHIFT        = 3,
       
   423     
       
   424     /* Privacy */
       
   425     CAP_PRIVACY_MASK        = 1,
       
   426     CAP_PRIVACY_SHIFT       = 4,
       
   427 
       
   428     /* Short Preamble*/
       
   429     CAP_PREAMBLE_MASK       = 1,
       
   430     CAP_PREAMBLE_SHIFT      = 5,
       
   431     
       
   432     /* PBCC */
       
   433     CAP_PBCC_MASK           = 1,
       
   434     CAP_PBCC_SHIFT          = 6,
       
   435     
       
   436     /* Agile */
       
   437     CAP_AGILE_MASK          = 1,
       
   438     CAP_AGILE_SHIFT         = 7,
       
   439 
       
   440     /* Slot time */
       
   441     CAP_SLOT_TIME_MASK      = 1,
       
   442     CAP_SLOT_TIME_SHIFT     = 10,
       
   443 
       
   444     /* APSD */
       
   445     CAP_APSD_MASK           = 1,
       
   446     CAP_APSD_SHIFT          = 11
       
   447 
       
   448 
       
   449 } wdrv_mgmtCapabilities_e;
       
   450 
       
   451 
       
   452 /*
       
   453  * 802.11 Information elements
       
   454  * ---------------------------
       
   455  */
       
   456 
       
   457 typedef TI_UINT8 dot11_eleHdr_t[2];  /* Byte-0: IE-ID,  Byte-1: IE-Length  */
       
   458 
       
   459 /* fixed fields lengths, except of currentAP & timestamp*/
       
   460 #define FIX_FIELD_LEN       2
       
   461 
       
   462 /* SSID Information Element */
       
   463 #define DOT11_SSID_ELE_ID   0
       
   464 
       
   465 /* Max SSID length */
       
   466 #define DOT11_SSID_MAX_LEN  32
       
   467 
       
   468 typedef struct 
       
   469 {
       
   470   dot11_eleHdr_t    hdr;
       
   471   char              serviceSetId[DOT11_SSID_MAX_LEN];
       
   472 }  dot11_SSID_t;
       
   473 
       
   474 
       
   475 /* Supportted rates Information Element */
       
   476 #define DOT11_SUPPORTED_RATES_ELE_ID        1
       
   477 #define DOT11_EXT_SUPPORTED_RATES_ELE_ID        50
       
   478 typedef struct 
       
   479 {
       
   480   dot11_eleHdr_t hdr;
       
   481   TI_UINT8 rates[DOT11_MAX_SUPPORTED_RATES];
       
   482 }  dot11_RATES_t;
       
   483 
       
   484 
       
   485 #define ERP_IE_NON_ERP_PRESENT_MASK         0x1
       
   486 #define ERP_IE_USE_PROTECTION_MASK          0x2
       
   487 #define ERP_IE_BARKER_PREAMBLE_MODE_MASK    0x4
       
   488 #define DOT11_ERP_IE_ID 42
       
   489 typedef struct
       
   490 {
       
   491     dot11_eleHdr_t  hdr;
       
   492     TI_UINT8           ctrl;
       
   493 }  dot11_ERP_t;
       
   494 
       
   495 /* RSN Information Element */
       
   496 #define MAX_RSN_IE                          3
       
   497 #define DOT11_RSN_MAX                       255 
       
   498 typedef struct 
       
   499 {
       
   500   dot11_eleHdr_t hdr;
       
   501   TI_UINT8 rsnIeData[DOT11_RSN_MAX];
       
   502 }  dot11_RSN_t;
       
   503 
       
   504 /* General definitions needed by rsn.c */
       
   505 #define IV_FIELD_SIZE   4 
       
   506 #define ICV_FIELD_SIZE  4
       
   507 #define MIC_FIELD_SIZE  8 
       
   508 #define EIV_FIELD_SIZE  4
       
   509 #ifdef GEM_SUPPORT
       
   510     #define GEM_KEY_IDX_FIELD_SIZE   1
       
   511     #define GEM_RESERVED_FIELD_SIZE  1
       
   512     #define GEM_PN_FIELD_SIZE   16
       
   513     #define GEM_MIC_FIELD_SIZE  16
       
   514 #endif
       
   515 #define WEP_AFTER_HEADER_FIELD_SIZE  IV_FIELD_SIZE
       
   516 #define TKIP_AFTER_HEADER_FIELD_SIZE (IV_FIELD_SIZE + EIV_FIELD_SIZE)
       
   517 #define AES_AFTER_HEADER_FIELD_SIZE  8
       
   518 #ifdef GEM_SUPPORT
       
   519     #define GEM_AFTER_HEADER_FIELD_SIZE (GEM_KEY_IDX_FIELD_SIZE + GEM_RESERVED_FIELD_SIZE + GEM_PN_FIELD_SIZE)
       
   520     #define GEM_AFTER_HEADER_PAD    2
       
   521     #define GEM_BUFFER_ALIGNMENT    2
       
   522 
       
   523 #endif
       
   524 
       
   525 
       
   526 /* DS params Information Element */
       
   527 #define DOT11_DS_PARAMS_ELE_ID      3
       
   528 #define DOT11_DS_PARAMS_ELE_LEN     1
       
   529 typedef struct 
       
   530 {
       
   531   dot11_eleHdr_t hdr;
       
   532   TI_UINT8  currChannel;
       
   533 }  dot11_DS_PARAMS_t;
       
   534 
       
   535 
       
   536 /* DS params Information Element */
       
   537 #define DOT11_IBSS_PARAMS_ELE_ID    6
       
   538 #define DOT11_IBSS_PARAMS_ELE_LEN   2
       
   539 typedef struct 
       
   540 {
       
   541     dot11_eleHdr_t  hdr;
       
   542     TI_UINT16          atimWindow;
       
   543 } dot11_IBSS_PARAMS_t;
       
   544 
       
   545 #define DOT11_FH_PARAMS_ELE_ID      2
       
   546 #define DOT11_FH_PARAMS_ELE_LEN     5
       
   547 typedef struct 
       
   548 {
       
   549     dot11_eleHdr_t  hdr;
       
   550     TI_UINT16          dwellTime;
       
   551     TI_UINT8           hopSet;
       
   552     TI_UINT8           hopPattern;
       
   553     TI_UINT8           hopIndex;
       
   554 }  dot11_FH_PARAMS_t;
       
   555 
       
   556 /* tim Information Element */
       
   557 #define DOT11_TIM_ELE_ID    5
       
   558 #define DOT11_PARTIAL_VIRTUAL_BITMAP_MAX    251
       
   559 typedef struct 
       
   560 {
       
   561     dot11_eleHdr_t  hdr;
       
   562     TI_UINT8           dtimCount;
       
   563     TI_UINT8           dtimPeriod;
       
   564     TI_UINT8           bmapControl;
       
   565     TI_UINT8           partialVirtualBmap[DOT11_PARTIAL_VIRTUAL_BITMAP_MAX];
       
   566 }  dot11_TIM_t;
       
   567 
       
   568 /* tim Information Element */
       
   569 #define DOT11_CF_ELE_ID             4
       
   570 #define DOT11_CF_PARAMS_ELE_LEN     6
       
   571 typedef struct 
       
   572 {
       
   573     dot11_eleHdr_t  hdr;
       
   574     TI_UINT8           cfpCount;
       
   575     TI_UINT8           cfpPeriod;
       
   576     TI_UINT16          cfpMaxDuration;
       
   577     TI_UINT16          cfpDurRemain;
       
   578 } dot11_CF_PARAMS_t;
       
   579 
       
   580 /* Challenge text Information Element */
       
   581 #define DOT11_CHALLENGE_TEXT_ELE_ID     16
       
   582 #define DOT11_CHALLENGE_TEXT_MAX        253
       
   583 typedef struct 
       
   584 {
       
   585     dot11_eleHdr_t  hdr;
       
   586     TI_UINT8           text[ DOT11_CHALLENGE_TEXT_MAX ];
       
   587 }  dot11_CHALLENGE_t;
       
   588 
       
   589 
       
   590 #define DOT11_NUM_OF_MAX_TRIPLET_CHANNEL    32
       
   591 
       
   592 typedef struct
       
   593 {
       
   594     TI_UINT8           firstChannelNumber;
       
   595     TI_UINT8           numberOfChannels;
       
   596     TI_UINT8           maxTxPowerLevel;
       
   597 } dot11_TripletChannel_t;
       
   598 
       
   599 typedef struct
       
   600 {
       
   601     TI_UINT8                CountryString[DOT11_COUNTRY_STRING_LEN];
       
   602     dot11_TripletChannel_t  tripletChannels[DOT11_NUM_OF_MAX_TRIPLET_CHANNEL];
       
   603 } dot11_countryIE_t;
       
   604 
       
   605 
       
   606 /* Country Inforamtion Element */
       
   607 #define DOT11_COUNTRY_ELE_ID        7
       
   608 #define DOT11_COUNTRY_ELE_LEN_MAX   ( ((DOT11_NUM_OF_MAX_TRIPLET_CHANNEL+1)*3) + !((DOT11_NUM_OF_MAX_TRIPLET_CHANNEL&0x1)))
       
   609 typedef struct 
       
   610 {
       
   611     dot11_eleHdr_t    hdr;
       
   612     dot11_countryIE_t countryIE;
       
   613 }  dot11_COUNTRY_t;
       
   614 
       
   615 
       
   616 /* Power Constraint Information Element */
       
   617 #define DOT11_POWER_CONSTRAINT_ELE_ID       (32)
       
   618 #define DOT11_POWER_CONSTRAINT_ELE_LEN      (1)
       
   619 typedef struct 
       
   620 {
       
   621     dot11_eleHdr_t  hdr;
       
   622     TI_UINT8           powerConstraint;
       
   623 }  dot11_POWER_CONSTRAINT_t;
       
   624 
       
   625 
       
   626 
       
   627 /* Power Capability Information Element */
       
   628 #define DOT11_CAPABILITY_ELE_ID         (33)
       
   629 #define DOT11_CAPABILITY_ELE_LEN        (2)
       
   630 typedef struct 
       
   631 {
       
   632     dot11_eleHdr_t  hdr;
       
   633     TI_UINT8           minTxPower;
       
   634     TI_UINT8           maxTxPower;
       
   635 } dot11_CAPABILITY_t;
       
   636 
       
   637 /* TPC request Information Element */
       
   638 #define DOT11_TPC_REQUEST_ELE_ID        (34)
       
   639 #define DOT11_TPC_REQUEST_ELE_LEN       (0)
       
   640 typedef struct 
       
   641 {
       
   642     dot11_eleHdr_t  hdr;
       
   643 }  dot11_TPC_REQUEST_t;
       
   644 
       
   645 /* TPC report Information Element */
       
   646 #define DOT11_TPC_REPORT_ELE_ID         (35)
       
   647 #define DOT11_TPC_REPORT_ELE_LEN        (2)
       
   648 typedef struct 
       
   649 {
       
   650     dot11_eleHdr_t  hdr;
       
   651     TI_UINT8           transmitPower;
       
   652     TI_UINT8           linkMargin;
       
   653 } dot11_TPC_REPORT_t;
       
   654 
       
   655 
       
   656 #ifdef  XCC_MODULE_INCLUDED
       
   657 
       
   658 /* Cell Transmit Power Information Element */
       
   659 #define DOT11_CELL_TP_ELE_ID            (150)
       
   660 #define DOT11_CELL_TP_ELE_LEN           (6)
       
   661 
       
   662 typedef struct 
       
   663 {
       
   664     dot11_eleHdr_t  hdr;
       
   665     TI_UINT8           oui[4];
       
   666     TI_UINT8           power;
       
   667     TI_UINT8           reserved;
       
   668 } dot11_CELL_TP_t;
       
   669 
       
   670 #define   DOT11_CELL_TP \
       
   671     dot11_CELL_TP_t         *cellTP;
       
   672     
       
   673 #else   /* XCC_MODULE_INCLUDED */
       
   674 
       
   675 #define   DOT11_CELL_TP
       
   676 
       
   677 #endif  /* XCC_MODULE_INCLUDED */
       
   678 
       
   679 
       
   680 /* Channel Supported Information Element */
       
   681 #define DOT11_CHANNEL_SUPPORTED_ELE_ID  (36)
       
   682 #define DOT11_CHANNEL_SUPPORTED_ELE_LEN (26)
       
   683 typedef struct 
       
   684 {
       
   685     dot11_eleHdr_t  hdr;
       
   686     TI_UINT8           supportedChannel[DOT11_CHANNEL_SUPPORTED_ELE_LEN];
       
   687 
       
   688 } dot11_CHANNEL_SUPPORTED_t;
       
   689 
       
   690 /* Channel Switch Announcement Information Element */
       
   691 #define DOT11_CHANNEL_SWITCH_ELE_ID     (37)
       
   692 #define DOT11_CHANNEL_SWITCH_ELE_LEN    (3)
       
   693 typedef struct 
       
   694 {
       
   695     dot11_eleHdr_t  hdr;
       
   696     TI_UINT8           channelSwitchMode;
       
   697     TI_UINT8           channelNumber;
       
   698     TI_UINT8           channelSwitchCount;
       
   699 }  dot11_CHANNEL_SWITCH_t;
       
   700 
       
   701 #define MAX_NUM_REQ (16)
       
   702 
       
   703 /* Measurement request Information Element */
       
   704 #define DOT11_MEASUREMENT_REQUEST_ELE_ID        (38)
       
   705 #define DOT11_MEASUREMENT_REQUEST_LEN           (2)
       
   706 #define DOT11_MEASUREMENT_REQUEST_ELE_LEN       (3 + DOT11_MEASUREMENT_REQUEST_LEN*MAX_NUM_REQ)
       
   707 typedef struct 
       
   708 {
       
   709     dot11_eleHdr_t  hdr;
       
   710     TI_UINT8           measurementToken;
       
   711     TI_UINT8           measurementMode;
       
   712     TI_UINT8           measurementType;
       
   713     TI_UINT8           measurementRequests[DOT11_MEASUREMENT_REQUEST_LEN*MAX_NUM_REQ];
       
   714 }  dot11_MEASUREMENT_REQUEST_t;
       
   715 
       
   716 
       
   717 /* Quiet Information Element */
       
   718 #define DOT11_QUIET_ELE_ID              (40)
       
   719 #define DOT11_QUIET_ELE_LEN             (6)
       
   720 typedef struct 
       
   721 {
       
   722     dot11_eleHdr_t  hdr;
       
   723     TI_UINT8           quietCount;
       
   724     TI_UINT8           quietPeriod;
       
   725     TI_UINT16          quietDuration;
       
   726     TI_UINT16          quietOffset;
       
   727 } dot11_QUIET_t;
       
   728 
       
   729 
       
   730 /* QoS Capability Information Element */
       
   731 #define DOT11_QOS_CAPABILITY_ELE_ID     (46)
       
   732 #define DOT11_QOS_CAPABILITY_ELE_LEN    (1)
       
   733 
       
   734 #define AC_APSD_FLAGS_MASK              (1)
       
   735 #define Q_ACK_BITG_MASK                 (1)
       
   736 #define MAX_SP_LENGTH_MASK              (3)
       
   737 #define MORE_DATA_ACK_MASK              (1)
       
   738 
       
   739 #define AC_VO_APSD_FLAGS_SHIFT          (0)
       
   740 #define AC_VI_APSD_FLAGS_SHIFT          (1)
       
   741 #define AC_BK_APSD_FLAGS_SHIFT          (2)
       
   742 #define AC_BE_APSD_FLAGS_SHIFT          (3)
       
   743 #define Q_ACK_FLAGS_SHIFT               (4)
       
   744 #define MAX_SP_LENGTH_SHIFT             (5)
       
   745 #define MORE_DATA_ACK_SHIFT             (7)
       
   746 
       
   747 #define QOS_CONTROL_UP_SHIFT            (0)
       
   748 
       
   749 #define AP_QOS_INFO_UAPSD_MASK          (1)
       
   750 #define AP_QOS_INFO_UAPSD_SHIFT         (7)
       
   751 
       
   752 typedef struct 
       
   753 {
       
   754     dot11_eleHdr_t  hdr;
       
   755     TI_UINT8           QosInfoField;
       
   756 }  dot11_QOS_CAPABILITY_IE_t;
       
   757 
       
   758 /* WPS Information Element */
       
   759 #define DOT11_WPS_ELE_ID    (221)
       
   760 #define DOT11_WPS_OUI       {0x00, 0x50, 0xF2, 0x04}
       
   761 #define DOT11_WPS_OUI_LEN   4
       
   762 
       
   763 /* WME Information Element */
       
   764 #define DOT11_WME_ELE_ID                (221)
       
   765 #define DOT11_WME_ELE_LEN               (7)
       
   766 typedef struct 
       
   767 {
       
   768     dot11_eleHdr_t  hdr;
       
   769     TI_UINT8           OUI[3];
       
   770     TI_UINT8           OUIType;
       
   771     TI_UINT8           OUISubType;
       
   772     TI_UINT8           version;
       
   773     TI_UINT8           ACInfoField;
       
   774 }  dot11_WME_IE_t;
       
   775 
       
   776 
       
   777 typedef struct
       
   778 {
       
   779     TI_UINT8           ACI_AIFSN;
       
   780     TI_UINT8           ECWmin_ECWmax;
       
   781     TI_UINT16          TXOPLimit;
       
   782 } dot11_QOS_AC_IE_ParametersRecord_t;
       
   783 
       
   784 typedef struct
       
   785 {
       
   786     dot11_QOS_AC_IE_ParametersRecord_t        ACBEParametersRecord;
       
   787     dot11_QOS_AC_IE_ParametersRecord_t        ACBKParametersRecord;
       
   788     dot11_QOS_AC_IE_ParametersRecord_t        ACVIParametersRecord;
       
   789     dot11_QOS_AC_IE_ParametersRecord_t        ACVOParametersRecord;
       
   790 } dot11_ACParameters_t;
       
   791 
       
   792 
       
   793 /* WME Parameter Information Element */
       
   794 #define DOT11_WME_PARAM_ELE_ID          (221)
       
   795 #define DOT11_WME_PARAM_ELE_LEN         (24)
       
   796 typedef struct 
       
   797 {
       
   798     dot11_eleHdr_t      hdr;
       
   799     TI_UINT8               OUI[3];
       
   800     TI_UINT8               OUIType;
       
   801     TI_UINT8               OUISubType;
       
   802     TI_UINT8               version;
       
   803     TI_UINT8               ACInfoField;
       
   804     TI_UINT8               reserved;
       
   805     dot11_ACParameters_t   WME_ACParameteres;
       
   806 }  dot11_WME_PARAM_t;
       
   807 
       
   808 
       
   809 /* 802.11n HT Information Element */
       
   810 #define DOT11_HT_CAPABILITIES_ELE_LEN    (26)
       
   811 #define DOT11_HT_INFORMATION_ELE_LEN    (22)
       
   812 
       
   813 #define DOT11_HT_CAPABILITIES_MCS_RATE_OFFSET   (3)
       
   814 #define DOT11_HT_INFORMATION_MCS_RATE_OFFSET    (6)
       
   815 
       
   816 typedef struct 
       
   817 {
       
   818     dot11_eleHdr_t  tHdr;
       
   819     TI_UINT8        aHtCapabilitiesIe[DOT11_HT_CAPABILITIES_ELE_LEN];   /* HT capabilities IE unparsed */
       
   820 }  Tdot11HtCapabilitiesUnparse;
       
   821 
       
   822 typedef struct 
       
   823 {
       
   824     dot11_eleHdr_t  tHdr;
       
   825     TI_UINT8        aHtInformationIe[DOT11_HT_INFORMATION_ELE_LEN];     /* HT Information IE unparsed */
       
   826 }  Tdot11HtInformationUnparse;
       
   827 
       
   828 /* BA session bits mask */
       
   829 #define DOT11_BAR_CONTROL_FIELD_TID_BITS            0xf000
       
   830 #define DOT11_BA_PARAMETER_SET_FIELD_TID_BITS       0x003C
       
   831 #define DOT11_BA_PARAMETER_SET_FIELD_WINSIZE_BITS   0xffC0
       
   832 #define DOT11_DELBA_PARAMETER_FIELD_TID_BITS        0xf000
       
   833 
       
   834 /* action field BA frames */
       
   835 typedef enum
       
   836 {
       
   837     DOT11_BA_ACTION_ADDBA           = 0,
       
   838     DOT11_BA_ACTION_DELBA           = 2
       
   839 } Edot11BaAction;
       
   840 
       
   841 
       
   842 /* WiFi Simple Config Information Element */
       
   843 #define DOT11_WSC_PARAM_ELE_ID          (221)
       
   844 
       
   845 #define DOT11_WSC_SELECTED_REGISTRAR_CONFIG_METHODS      0x1053
       
   846 #define DOT11_WSC_SELECTED_REGISTRAR_CONFIG_METHODS_PIN  0xC
       
   847 #define DOT11_WSC_SELECTED_REGISTRAR_CONFIG_METHODS_PBC  0x80
       
   848 
       
   849 #define DOT11_WSC_DEVICE_PASSWORD_ID      0x1012
       
   850 #define DOT11_WSC_DEVICE_PASSWORD_ID_PIN  0x0000
       
   851 #define DOT11_WSC_DEVICE_PASSWORD_ID_PBC  0x0004
       
   852 
       
   853 /* WiFi Simple Config Parameter Information Element */
       
   854 #define DOT11_WSC_PROBE_REQ_PARAM_ELE_LEN           (22)
       
   855 #define DOT11_WSC_BEACON_MAX_LENGTH 160
       
   856 
       
   857 typedef struct 
       
   858 {
       
   859     dot11_eleHdr_t              hdr;
       
   860     TI_UINT8                        OUI[3];
       
   861     TI_UINT8                        OUIType;
       
   862     TI_UINT8 WSCBeaconOrProbIE[DOT11_WSC_BEACON_MAX_LENGTH];
       
   863 }  dot11_WSC_t;
       
   864 
       
   865 #define dot11_WPA_OUI_TYPE                  (1)
       
   866 #define dot11_WME_OUI_TYPE                  (2)
       
   867 #define dot11_WSC_OUI_TYPE                  (4)
       
   868 #define dot11_WME_OUI_SUB_TYPE_IE           (0)
       
   869 #define dot11_WME_OUI_SUB_TYPE_PARAMS_IE    (1)
       
   870 #define dot11_WME_VERSION                   (1)
       
   871 #define dot11_WME_ACINFO_MASK               0x0f
       
   872 
       
   873 /* -------------------- TSPEC ----------------- */
       
   874 
       
   875 typedef struct
       
   876 {
       
   877     TI_UINT8   tsInfoArr[3];
       
   878 
       
   879 }  tsInfo_t;
       
   880 
       
   881 
       
   882 
       
   883 /* This structure is part of the TSPEC structure. It was seperated since there are some cases (such as DEL_TS), which we dont need
       
   884 to send ALL the TSPEC structure, but only as far as TsInfo. The TSPEC structure contains this smaller structure */
       
   885 typedef struct
       
   886 {
       
   887     dot11_eleHdr_t  hdr;
       
   888     
       
   889     TI_UINT8   OUI[3];
       
   890     TI_UINT8   oui_type;
       
   891     TI_UINT8   oui_subtype;
       
   892     TI_UINT8   version;
       
   893 
       
   894     tsInfo_t tsInfoField;
       
   895 }  dot11_WME_TSPEC_IE_hdr_t;
       
   896 
       
   897 typedef struct
       
   898 {
       
   899 
       
   900     dot11_WME_TSPEC_IE_hdr_t tHdr;
       
   901 
       
   902     TI_UINT16  nominalMSDUSize;
       
   903     TI_UINT16  maximumMSDUSize;
       
   904     TI_UINT32  minimumServiceInterval;
       
   905     TI_UINT32  maximumServiceInterval;
       
   906     TI_UINT32  inactivityInterval;
       
   907     TI_UINT32  suspensionInterval;
       
   908     TI_UINT32  serviceStartTime;
       
   909     TI_UINT32  minimumDataRate;
       
   910     TI_UINT32  meanDataRate;
       
   911     TI_UINT32  peakDataRate;
       
   912     TI_UINT32  maximumBurstSize;
       
   913     TI_UINT32  delayBound;
       
   914     TI_UINT32  minimumPHYRate;
       
   915     TI_UINT16  surplusBandwidthAllowance;
       
   916     TI_UINT16  mediumTime;
       
   917 
       
   918 } dot11_WME_TSPEC_IE_t;
       
   919 
       
   920 
       
   921 #define WME_TSPEC_IE_ID                         221
       
   922 #define WME_TSPEC_IE_LEN                        61
       
   923 #define WME_TSPEC_IE_TSINFO_LEN                 9                
       
   924 #define WME_TSPEC_IE_OUI_TYPE                   0x02
       
   925 #define WME_TSPEC_IE_OUI_SUB_TYPE               0x02
       
   926 #define WME_TSPEC_IE_VERSION                    0x01
       
   927 
       
   928 /* OUI TYPE values that can be present in management packets inside Cisco vendor specific IE */
       
   929 typedef enum
       
   930 {
       
   931     TS_METRIX_OUI_TYPE = 0x07,
       
   932     TS_RATE_SET_OUI_TYPE = 0x08,
       
   933     EDCA_LIFETIME_OUI_TYPE = 0x09
       
   934 } XCC_IE_OUI_TYPE_t;
       
   935 
       
   936 #define ADDTS_REQUEST_ACTION                    0x00
       
   937 #define ADDTS_RESPONSE_ACTION                   0x01
       
   938 #define DELTS_ACTION                            0x02
       
   939 
       
   940 #define ADDTS_STATUS_CODE_SUCCESS               0x00
       
   941 #define DELTS_CODE_SUCCESS                      0x00
       
   942  
       
   943 
       
   944 #define TS_INFO_0_TRAFFIC_TYPE_MASK             0x01
       
   945 #define TS_INFO_0_TSID_MASK                     0x1E
       
   946 #define TS_INFO_0_DIRECTION_MASK                0x60
       
   947 #define TS_INFO_0_ACCESS_POLICY_MASK            0x80
       
   948 
       
   949 #define TS_INFO_1_ACCESS_POLICY_MASK            0x01
       
   950 #define TS_INFO_1_AGGREGATION_MASK              0x02
       
   951 #define TS_INFO_1_APSD_MASK                     0x04    
       
   952 #define TS_INFO_1_USER_PRIORITY_MASK            0x38
       
   953 #define TS_INFO_1_TSINFO_ACK_POLICY_MASK        0xC0
       
   954 
       
   955 #define TS_INFO_2_SCHEDULE_MASK                 0x01
       
   956 #define TS_INFO_2_RESERVED_MASK                 0xF7    
       
   957 
       
   958 #define TRAFFIC_TYPE_SHIFT                      0
       
   959 #define TSID_SHIFT                              1
       
   960 #define DIRECTION_SHIFT                         5
       
   961 #define ACCESS_POLICY_SHIFT                     7
       
   962 #define AGGREGATION_SHIFT                       1
       
   963 #define APSD_SHIFT                              2   
       
   964 #define USER_PRIORITY_SHIFT                     3
       
   965 #define TSINFO_ACK_POLICY_SHIFT                 6
       
   966 #define SCHEDULE_SHIFT                          0
       
   967 #define RESERVED_SHIFT                          1
       
   968 #define SURPLUS_BANDWIDTH_ALLOW                 13  
       
   969 
       
   970 #define TS_INFO_0_ACCESS_POLICY_EDCA            0x1                 
       
   971 #define NORMAL_ACKNOWLEDGEMENT                  0x00        
       
   972 #define NO_SCHEDULE                             0x00        
       
   973 #define PS_UPSD                                 0x01
       
   974 #define EDCA_MODE                               0x08
       
   975 #define FIX_MSDU_SIZE                           0x8000
       
   976 
       
   977 #define WPA_IE_OUI                              {0x00, 0x50, 0xf2}
       
   978 #define XCC_OUI                                 {0x00, 0x40, 0x96}
       
   979 
       
   980 /* Action field structure
       
   981     used for extended management action such as spectrum management */ 
       
   982 typedef TI_UINT8 dot11_ACTION_FIELD_t[2];
       
   983 
       
   984 
       
   985 /* Management frames sub types */
       
   986 typedef enum
       
   987 {
       
   988     ASSOC_REQUEST       = 0,
       
   989     ASSOC_RESPONSE      = 1,
       
   990     RE_ASSOC_REQUEST    = 2,
       
   991     RE_ASSOC_RESPONSE   = 3,
       
   992     PROBE_REQUEST       = 4,
       
   993     PROBE_RESPONSE      = 5,
       
   994     BEACON              = 8,
       
   995     ATIM                = 9,
       
   996     DIS_ASSOC           = 10,
       
   997     AUTH                = 11,
       
   998     DE_AUTH             = 12,
       
   999     ACTION              = 13
       
  1000 } dot11MgmtSubType_e;
       
  1001 
       
  1002 /* Management frames element IDs */
       
  1003 typedef enum
       
  1004 {
       
  1005     SSID_IE_ID                          = 0,
       
  1006     SUPPORTED_RATES_IE_ID               = 1,
       
  1007     FH_PARAMETER_SET_IE_ID              = 2,
       
  1008     DS_PARAMETER_SET_IE_ID              = 3,
       
  1009     CF_PARAMETER_SET_IE_ID              = 4,
       
  1010     TIM_IE_ID                           = 5,
       
  1011     IBSS_PARAMETER_SET_IE_ID            = 6,
       
  1012     COUNTRY_IE_ID                       = 7,
       
  1013     CHALLANGE_TEXT_IE_ID                = 16,
       
  1014     POWER_CONSTRAINT_IE_ID              = 32,
       
  1015     TPC_REPORT_IE_ID                    = 35,
       
  1016     CHANNEL_SWITCH_ANNOUNCEMENT_IE_ID   = 37,
       
  1017     QUIET_IE_ID                         = 40,
       
  1018     ERP_IE_ID                           = 42,
       
  1019     HT_CAPABILITIES_IE_ID               = 45,
       
  1020     QOS_CAPABILITY_IE_ID                = 46,
       
  1021     RSN_IE_ID                           = 48,
       
  1022     EXT_SUPPORTED_RATES_IE_ID           = 50,
       
  1023     HT_INFORMATION_IE_ID                = 61,
       
  1024     XCC_EXT_1_IE_ID                     = 133,
       
  1025     XCC_EXT_2_IE_ID                     = 149,  
       
  1026     CELL_POWER_IE                       = 150, /*XCC*/
       
  1027     WPA_IE_ID                           = 221
       
  1028 
       
  1029 } dot11MgmtIeId_e;
       
  1030 
       
  1031 /* Spectrum Management Action fields */
       
  1032 typedef enum
       
  1033 {
       
  1034     MEASUREMENT_REQUEST             = 0,
       
  1035     MEASUREMENT_REPORT              = 1,
       
  1036     TPC_REQUEST                     = 2,
       
  1037     TPC_REPORT                      = 3,
       
  1038     CHANNEL_SWITCH_ANNOUNCEMENT     = 4
       
  1039 } dot11ActionFrameTypes_e;
       
  1040 
       
  1041 /* Category fields (such as apectrum management)*/
       
  1042 typedef enum
       
  1043 {
       
  1044     CATAGORY_SPECTRUM_MANAGEMENT        = 0,
       
  1045     CATAGORY_QOS                        = 1,
       
  1046     WME_CATAGORY_QOS                    = 17,
       
  1047     CATAGORY_SPECTRUM_MANAGEMENT_ERROR  = 128
       
  1048 } dot11CategoryTypes_e;
       
  1049 
       
  1050 
       
  1051 /* 
       
  1052  * Management templates to set to the HAL:
       
  1053  */
       
  1054 
       
  1055 #ifdef XCC_MODULE_INCLUDED
       
  1056 
       
  1057     typedef struct  
       
  1058     {
       
  1059         dot11_mgmtHeader_t  hdr;
       
  1060         char                infoElements[sizeof( dot11_SSID_t ) + 
       
  1061                                          sizeof( dot11_RATES_t ) +
       
  1062                                          sizeof( dot11_RATES_t ) +
       
  1063                                          sizeof( Tdot11HtCapabilitiesUnparse ) +
       
  1064                                          sizeof( DOT11_WSC_PROBE_REQ_MAX_LENGTH ) +
       
  1065                                          sizeof( XCC_radioManagmentCapability_IE_t )
       
  1066                                         ];
       
  1067     } probeReqTemplate_t;
       
  1068 
       
  1069 #else /* XCC_MODULE_INCLUDED */
       
  1070 
       
  1071     typedef struct  
       
  1072     {
       
  1073         dot11_mgmtHeader_t  hdr;
       
  1074         char                infoElements[sizeof( dot11_SSID_t ) + 
       
  1075                                          sizeof( dot11_RATES_t ) +
       
  1076                                          sizeof( dot11_RATES_t ) +
       
  1077                                          sizeof( Tdot11HtCapabilitiesUnparse ) +
       
  1078                                          sizeof( DOT11_WSC_PROBE_REQ_MAX_LENGTH )
       
  1079                                         ];
       
  1080     } probeReqTemplate_t;
       
  1081 
       
  1082 #endif /* XCC_MODULE_INCLUDED */
       
  1083 
       
  1084 
       
  1085 typedef struct 
       
  1086 {
       
  1087     dot11_mgmtHeader_t  hdr;
       
  1088     TI_UINT8               timeStamp[TIME_STAMP_LEN];
       
  1089     TI_UINT16              beaconInterval;
       
  1090     TI_UINT16              capabilities;
       
  1091     char                infoElements[ sizeof( dot11_SSID_t ) + 
       
  1092                                       sizeof( dot11_RATES_t ) +
       
  1093                                       sizeof( dot11_RATES_t ) +
       
  1094                                       sizeof( dot11_DS_PARAMS_t ) +
       
  1095                                       sizeof( dot11_COUNTRY_t)      ];
       
  1096 }  probeRspTemplate_t;
       
  1097 
       
  1098 typedef struct 
       
  1099 {
       
  1100     dot11_mgmtHeader_t  hdr;
       
  1101 } nullDataTemplate_t;
       
  1102 
       
  1103 typedef struct 
       
  1104 {
       
  1105     dot11_mgmtHeader_t  hdr;
       
  1106     TI_UINT16 disconnReason;
       
  1107 } disconnTemplate_t; /* Deauth or Disassoc */
       
  1108 
       
  1109 typedef struct
       
  1110 {
       
  1111    dot11_PsPollFrameHeader_t   hdr;
       
  1112 } psPollTemplate_t;
       
  1113 
       
  1114 typedef struct
       
  1115 {
       
  1116    dot11_header_t   hdr;
       
  1117 }  QosNullDataTemplate_t;
       
  1118 
       
  1119 /* Traffic Stream Rate Set (TSRS) info-elements */
       
  1120 typedef struct 
       
  1121 {
       
  1122     dot11_eleHdr_t  hdr;
       
  1123     TI_UINT8           OUI[3];
       
  1124     TI_UINT8           oui_type;
       
  1125     TI_UINT8           tsid;
       
  1126     TI_UINT8           tsNominalRate;
       
  1127 } dot11_TSRS_STA_IE_t;
       
  1128 
       
  1129 typedef struct 
       
  1130 {
       
  1131     dot11_eleHdr_t  hdr;
       
  1132     TI_UINT8           OUI[3];
       
  1133     TI_UINT8           oui_type;
       
  1134     TI_UINT8           tsid;
       
  1135     TI_UINT8           tsRates[8];
       
  1136 }  dot11_TSRS_IE_t;
       
  1137 
       
  1138 /* MSDU lifetime info-element */
       
  1139 typedef struct 
       
  1140 {
       
  1141     dot11_eleHdr_t  hdr;
       
  1142     TI_UINT8           OUI[3];
       
  1143     TI_UINT8           oui_type;
       
  1144     TI_UINT8           tsid;
       
  1145     TI_UINT16          msduLifeTime;
       
  1146 }  dot11_MSDU_LIFE_TIME_IE_t;
       
  1147 
       
  1148 typedef struct 
       
  1149 {
       
  1150     dot11_eleHdr_t  hdr;
       
  1151     TI_UINT8           OUI[3];
       
  1152     TI_UINT8           oui_type;
       
  1153     TI_UINT8           tsid;
       
  1154     TI_UINT8           state;
       
  1155     TI_UINT16          measureInterval;
       
  1156 }  dot11_TS_METRICS_IE_t;
       
  1157 
       
  1158 typedef struct 
       
  1159 {
       
  1160     dot11_TSRS_IE_t             *trafficStreamParameter;
       
  1161     dot11_MSDU_LIFE_TIME_IE_t   *edcaLifetimeParameter;
       
  1162     dot11_TS_METRICS_IE_t       *tsMetrixParameter;
       
  1163 } XCCv4IEs_t;
       
  1164 
       
  1165 
       
  1166 /* Measurement Report message frame structure */
       
  1167 #define DOT11_MEASUREMENT_REPORT_ELE_ID     (39)
       
  1168 #define DOT11_MAX_MEASUREMENT_REPORT_LEN    (4)
       
  1169 #define DOT11_MIN_MEASUREMENT_REPORT_IE_LEN (3)
       
  1170 #define DOT11_MEASUREMENT_REPORT_ELE_IE_LEN (DOT11_MIN_MEASUREMENT_REPORT_IE_LEN + DOT11_MAX_MEASUREMENT_REPORT_LEN*MAX_NUM_REQ)
       
  1171 
       
  1172 typedef struct
       
  1173 {
       
  1174     dot11_ACTION_FIELD_t    actionField;
       
  1175     TI_UINT8   dialogToken;
       
  1176 
       
  1177     dot11_eleHdr_t  hdr;
       
  1178     TI_UINT8            measurementToken;
       
  1179     TI_UINT8            measurementMode;
       
  1180     TI_UINT8            measurementType;
       
  1181     TI_UINT8            measurementReports[DOT11_MAX_MEASUREMENT_REPORT_LEN*MAX_NUM_REQ];
       
  1182 }  MeasurementReportFrame_t;
       
  1183 
       
  1184 
       
  1185 
       
  1186 typedef enum 
       
  1187 {
       
  1188     STATUS_SUCCESSFUL = 0,
       
  1189     STATUS_UNSPECIFIED,
       
  1190     STATUS_AUTH_REJECT,
       
  1191     STATUS_ASSOC_REJECT,
       
  1192     STATUS_SECURITY_FAILURE,
       
  1193     STATUS_AP_DEAUTHENTICATE,
       
  1194     STATUS_AP_DISASSOCIATE,
       
  1195     STATUS_ROAMING_TRIGGER,
       
  1196     STATUS_DISCONNECT_DURING_CONNECT,
       
  1197     STATUS_SG_RESELECT,
       
  1198     MGMT_STATUS_MAX_NUM
       
  1199 } mgmtStatus_e;
       
  1200 
       
  1201 /* Used as a status code in case of STATUS_AUTH_REJECT or STATUS_ASSOC_REJECT that was not received at all */
       
  1202 #define STATUS_PACKET_REJ_TIMEOUT   0xFFFF
       
  1203 
       
  1204 /* As defined in 802.11 spec section 7.3.1 - status codes for deAuth packet */
       
  1205 #define STATUS_CODE_802_1X_AUTHENTICATION_FAILED 23
       
  1206 
       
  1207 /* map field included in measurement report IE (only in basic report) */
       
  1208 typedef enum
       
  1209 {
       
  1210   DOT11_BSS_ONLY                    = (0x01),
       
  1211   DOT11_OFDM_ONLY                   = (0x02),
       
  1212   DOT11_RADAR_AND_UNIDENTIFIED      = (0x0C)
       
  1213 } dot11_Map_Sub_Field_e;
       
  1214 
       
  1215 
       
  1216 typedef struct
       
  1217 {
       
  1218    legacy_dot11_header_t dot11Header;
       
  1219    Wlan_LlcHeader_T  snapHeader;
       
  1220 }  legacy_dot11_DataMsduHeader_t;
       
  1221 
       
  1222 
       
  1223 #define WLAN_HEADER_TYPE_CONCATENATION 0x01
       
  1224 #define WLAN_CONCAT_HEADER_LEN 2
       
  1225 
       
  1226 
       
  1227 #endif   /* _802_11_INFO_DEFS_H */