Home | History | Annotate | Download | only in Sta_Management
      1 /*
      2  * mlmeApi.h
      3  *
      4  * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
      5  * All rights reserved.
      6  *
      7  * Redistribution and use in source and binary forms, with or without
      8  * modification, are permitted provided that the following conditions
      9  * are met:
     10  *
     11  *  * Redistributions of source code must retain the above copyright
     12  *    notice, this list of conditions and the following disclaimer.
     13  *  * Redistributions in binary form must reproduce the above copyright
     14  *    notice, this list of conditions and the following disclaimer in
     15  *    the documentation and/or other materials provided with the
     16  *    distribution.
     17  *  * Neither the name Texas Instruments nor the names of its
     18  *    contributors may be used to endorse or promote products derived
     19  *    from this software without specific prior written permission.
     20  *
     21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     24  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     25  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     26  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     27  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     28  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     29  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     30  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     31  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     32  */
     33 
     34 /** \file mlmeApi.h
     35  *  \brief MLME API
     36  *
     37  *  \see mlmeSm.c
     38  */
     39 
     40 /***************************************************************************/
     41 /*                                                                          */
     42 /*    MODULE:   mlmeApi.h                                                   */
     43 /*    PURPOSE:  MLME API                                                    */
     44 /*                                                                          */
     45 /***************************************************************************/
     46 #ifndef __MLME_API_H__
     47 #define __MLME_API_H__
     48 
     49 #include "tidef.h"
     50 #include "paramOut.h"
     51 #include "802_11Defs.h"
     52 #include "TWDriver.h"
     53 #include "DrvMainModules.h"
     54 
     55 /* Constants */
     56 
     57 /* Enumerations */
     58 
     59 typedef enum
     60 {
     61     MLME_LEGACY_TYPE_PARAM   = 0x01,
     62     MLME_RE_ASSOC_PARAM      = 0x02,
     63     MLME_TNET_WAKE_ON_PARAM  = 0x03,
     64     MLME_CAPABILITY_PARAM    = 0x04
     65 
     66 } EMlmeParam;
     67 
     68 
     69 typedef enum
     70 {
     71     AUTH_LEGACY_TYPE_PARAM   = 0x01
     72 
     73 } EAuthLegacyParam;
     74 
     75 
     76 typedef enum
     77 {
     78     MSG_BROADCAST,
     79     MSG_MULTICAST,
     80     MSG_UNICAST
     81 } mlmeMsgDestType_t;
     82 
     83 /* Typedefs */
     84 
     85 /* Disassociation frame structure */
     86 typedef struct
     87 {
     88     TI_UINT16                   reason;
     89 }  disAssoc_t;
     90 
     91 
     92 /* (Re)Association response frame structure */
     93 #define ASSOC_RESP_FIXED_DATA_LEN 6
     94 #define ASSOC_RESP_AID_MASK  0x3FFF  /* The AID is only in 14 LS bits. */
     95 
     96 typedef struct
     97 {
     98     TI_UINT16                   capabilities;
     99     TI_UINT16                   status;
    100     TI_UINT16                   aid;
    101     dot11_RATES_t               *pRates;
    102     dot11_RATES_t               *pExtRates;
    103     TI_UINT8                    useProtection;
    104     TI_BOOL                     ciscoIEPresent;
    105     EPreamble                   barkerPreambleMode;
    106     TI_UINT8                    NonErpPresent;
    107     dot11_WME_PARAM_t           *WMEParams;
    108     dot11_RSN_t                 *pRsnIe;
    109     TI_UINT8                    rsnIeLen;
    110     dot11_QOS_CAPABILITY_IE_t   *QoSCapParameters;
    111 	Tdot11HtCapabilitiesUnparse *pHtCapabilities;
    112 	Tdot11HtInformationUnparse	*pHtInformation;
    113     TI_UINT8                    *tspecVoiceParameters;  /* dot11_WME_TSPEC_IE_t is unpacked so need to access as bytes. */
    114     TI_UINT8                    *tspecSignalParameters; /* dot11_WME_TSPEC_IE_t is unpacked so need to access as bytes. */
    115     XCCv4IEs_t                  XCCIEs[MAX_NUM_OF_AC];
    116 }  assocRsp_t;
    117 
    118 
    119 /* Probe response frame structure */
    120 /* Please notice, the order of fields in the beacon must be identical to the order of
    121     field in the probe response. This is because of the parsing that is done by the site manager. */
    122 typedef struct
    123 {
    124     char                        timestamp[TIME_STAMP_LEN];
    125     TI_UINT16                   beaconInerval;
    126     TI_UINT16                   capabilities;
    127     dot11_SSID_t                *pSsid;
    128     dot11_RATES_t               *pRates;
    129     dot11_COUNTRY_t             *country;
    130     dot11_POWER_CONSTRAINT_t    *powerConstraint;
    131     dot11_CHANNEL_SWITCH_t      *channelSwitch;
    132     dot11_QUIET_t               *quiet;
    133     dot11_TPC_REPORT_t          *TPCReport;
    134 
    135 #ifdef XCC_MODULE_INCLUDED
    136     dot11_CELL_TP_t             *cellTP;
    137 #endif
    138 
    139     dot11_WME_PARAM_t           *WMEParams;
    140     dot11_WSC_t                 *WSCParams;
    141     dot11_RATES_t               *pExtRates;
    142     TI_UINT8                    useProtection;
    143     EPreamble                   barkerPreambleMode;
    144     TI_UINT8                    NonErpPresent;
    145     dot11_FH_PARAMS_t           *pFHParamsSet;
    146     dot11_DS_PARAMS_t           *pDSParamsSet;
    147     dot11_CF_PARAMS_t           *pCFParamsSet;
    148     dot11_IBSS_PARAMS_t         *pIBSSParamsSet;
    149     dot11_RSN_t                 *pRsnIe;
    150     TI_UINT8                    rsnIeLen;
    151     dot11_QOS_CAPABILITY_IE_t   *QoSCapParameters;
    152 	Tdot11HtCapabilitiesUnparse *pHtCapabilities;
    153 	Tdot11HtInformationUnparse	*pHtInformation;
    154     dot11_TIM_t                 *pTIM;                  /* for beacons only */
    155     TI_UINT8                    *pUnknownIe;
    156     TI_UINT16                   unknownIeLen;
    157 } beacon_probeRsp_t;
    158 
    159 
    160 /* Authentication message frame structure */
    161 typedef struct
    162 {
    163     TI_UINT16                   authAlgo;
    164     TI_UINT16                   seqNum;
    165     TI_UINT16                   status;
    166     dot11_CHALLENGE_t           *pChallenge;
    167 }  authMsg_t;
    168 
    169 /* DeAuthentication message frame structure */
    170 typedef struct
    171 {
    172     TI_UINT16                   reason;
    173 }  deAuth_t;
    174 
    175 /* Action message frame structure */
    176 typedef struct
    177 {
    178     TI_UINT8                    frameType;
    179     TI_UINT8                    category;
    180     TI_UINT8                    action;
    181 } action_t;
    182 
    183 
    184 typedef struct
    185 {
    186     dot11MgmtSubType_e subType;
    187 
    188     union
    189     {
    190         beacon_probeRsp_t iePacket;
    191         disAssoc_t  disAssoc;
    192         assocRsp_t  assocRsp;
    193         authMsg_t   auth;
    194         deAuth_t    deAuth;
    195         action_t    action;
    196     } content;
    197 
    198     union
    199     {
    200         mlmeMsgDestType_t   destType;
    201     } extesion;
    202 
    203 } mlmeFrameInfo_t;
    204 
    205 typedef struct
    206 {
    207     dot11_SSID_t            ssid;
    208     TMacAddr                bssid;
    209     dot11_CHALLENGE_t       challenge;
    210     dot11_RATES_t           rates;
    211     dot11_RATES_t           extRates;
    212     dot11_FH_PARAMS_t       fhParams;
    213     dot11_CF_PARAMS_t       cfParams;
    214     dot11_DS_PARAMS_t       dsParams;
    215     dot11_IBSS_PARAMS_t     ibssParams;
    216     dot11_COUNTRY_t         country;
    217     dot11_WME_PARAM_t       WMEParams;
    218     dot11_WSC_t             WSCParams;
    219     dot11_POWER_CONSTRAINT_t powerConstraint;
    220     dot11_CHANNEL_SWITCH_t  channelSwitch;
    221     dot11_QUIET_t           quiet;
    222     dot11_TPC_REPORT_t      TPCReport;
    223 #ifdef XCC_MODULE_INCLUDED
    224     dot11_CELL_TP_t         cellTP;
    225 #endif
    226     dot11_RSN_t             rsnIe[3];
    227     dot11_TIM_t             tim;
    228     dot11_QOS_CAPABILITY_IE_t   QosCapParams;
    229 	Tdot11HtCapabilitiesUnparse tHtCapabilities;
    230 	Tdot11HtInformationUnparse	tHtInformation;
    231     TI_UINT8                rxChannel;
    232     TI_UINT8                band;
    233     TI_BOOL                 myBssid;
    234     TI_BOOL                 myDst;
    235     TI_BOOL                 mySa;
    236 
    237     TI_BOOL                 recvChannelSwitchAnnoncIE;
    238 
    239 	TI_UINT8                unknownIe[MAX_BEACON_BODY_LENGTH];
    240 
    241     mlmeFrameInfo_t         frame;
    242 }mlmeIEParsingParams_t;
    243 
    244 typedef void (*mlme_resultCB_t)( TI_HANDLE hObj, TMacAddr* bssid, mlmeFrameInfo_t* pFrameInfo,
    245                                  TRxAttr* pRxAttr, TI_UINT8* frame, TI_UINT16 frameLength );
    246 
    247 /* External data definitions */
    248 
    249 /* External functions definitions */
    250 
    251 /* Function prototypes */
    252 
    253 /* MLME SM API */
    254 
    255 TI_HANDLE mlme_create(TI_HANDLE hOs);
    256 
    257 TI_STATUS mlme_unload(TI_HANDLE hMlme);
    258 
    259 void      mlme_init (TStadHandlesList *pStadHandles);
    260 
    261 void      mlme_SetDefaults (TI_HANDLE hMlmeSm, TMlmeInitParams *pMlmeInitParams);
    262 
    263 TI_STATUS mlme_setParam(TI_HANDLE           hMlmeSm,
    264                         paramInfo_t         *pParam);
    265 
    266 TI_STATUS mlme_getParam(TI_HANDLE           hMlmeSm,
    267                         paramInfo_t         *pParam);
    268 
    269 TI_STATUS mlme_start(TI_HANDLE hMlme);
    270 
    271 TI_STATUS mlme_stop(TI_HANDLE hMlme, DisconnectType_e disConnType, mgmtStatus_e reason);
    272 
    273 TI_STATUS mlme_reportAuthStatus(TI_HANDLE hMlme, TI_UINT16 status);
    274 
    275 TI_STATUS mlme_reportAssocStatus(TI_HANDLE hMlme, TI_UINT16 status);
    276 
    277 /* MLME parser API */
    278 
    279 TI_STATUS mlmeParser_recv(TI_HANDLE hMlme, void *pBuffer, TRxAttr* pRxAttr);
    280 
    281 TI_STATUS mlmeParser_parseIEs(TI_HANDLE hMlme,
    282                               TI_UINT8 *pData,
    283                               TI_INT32 bodyDataLen,
    284                               mlmeIEParsingParams_t *params);
    285 TI_BOOL mlmeParser_ParseIeBuffer (TI_HANDLE hMlme, TI_UINT8 *pIeBuffer, TI_UINT32 length, TI_UINT8 desiredIeId, TI_UINT8 **pDesiredIe, TI_UINT8 *pMatchBuffer, TI_UINT32 matchBufferLen);
    286 
    287 #ifdef XCC_MODULE_INCLUDED
    288 void mlmeParser_readXCCOui (TI_UINT8 *pData,
    289                             TI_UINT32 dataLen,
    290                             TI_UINT32 *pReadLen,
    291                             XCCv4IEs_t *XCCIEs);
    292 #endif
    293 
    294 mlmeIEParsingParams_t *mlmeParser_getParseIEsBuffer(TI_HANDLE *hMlme);
    295 
    296 /* Association SM API */
    297 
    298 TI_HANDLE assoc_create(TI_HANDLE pOs);
    299 
    300 TI_STATUS assoc_unload(TI_HANDLE pAssoc);
    301 
    302 void      assoc_init (TStadHandlesList *pStadHandles);
    303 
    304 TI_STATUS assoc_SetDefaults (TI_HANDLE hAssoc, assocInitParams_t *pAssocInitParams);
    305 
    306 TI_STATUS assoc_setParam(TI_HANDLE hCtrlData, paramInfo_t   *pParam);
    307 
    308 TI_STATUS assoc_getParam(TI_HANDLE hCtrlData, paramInfo_t   *pParam);
    309 
    310 /* Authentication SM API */
    311 
    312 TI_HANDLE auth_create(TI_HANDLE hOs);
    313 
    314 TI_STATUS auth_unload(TI_HANDLE hAuth);
    315 
    316 void      auth_init (TStadHandlesList *pStadHandles);
    317 
    318 TI_STATUS auth_SetDefaults (TI_HANDLE hAuth, authInitParams_t *pAuthInitParams);
    319 
    320 TI_STATUS auth_setParam(TI_HANDLE hCtrlData, paramInfo_t    *pParam);
    321 
    322 TI_STATUS auth_getParam(TI_HANDLE hCtrlData, paramInfo_t    *pParam);
    323 
    324 #endif /* __MLME_API_H__*/
    325