1981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/*
2981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * mlmeSm.c
3981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *
4981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
5981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * All rights reserved.
6981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *
7981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * Redistribution and use in source and binary forms, with or without
8981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * modification, are permitted provided that the following conditions
9981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * are met:
10981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *
11981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *  * Redistributions of source code must retain the above copyright
12981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *    notice, this list of conditions and the following disclaimer.
13981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *  * Redistributions in binary form must reproduce the above copyright
14981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *    notice, this list of conditions and the following disclaimer in
15981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *    the documentation and/or other materials provided with the
16981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *    distribution.
17981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *  * Neither the name Texas Instruments nor the names of its
18981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *    contributors may be used to endorse or promote products derived
19981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *    from this software without specific prior written permission.
20981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *
21981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt */
33981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
34981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/** \file mlmeSM.c
35981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *  \brief 802.11 MLME SM source
36981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *
37981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt *  \see mlmeSM.h
38981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt */
39981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
40981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
41981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/***************************************************************************/
42981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/*                                                                         */
43981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/*      MODULE: mlmeSM.c                                                   */
44981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/*    PURPOSE:  802.11 MLME SM source                                      */
45981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/*                                                                         */
46981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/***************************************************************************/
47981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
48981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#define __FILE_ID__  FILE_ID_69
49981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "osApi.h"
50981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "paramOut.h"
51981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "fsm.h"
52981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "report.h"
53981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "smeApi.h"
54981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "AssocSM.h"
55981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "authSm.h"
56981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "mlmeBuilder.h"
57981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "mlmeSm.h"
58981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "openAuthSm.h"
59981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "sharedKeyAuthSm.h"
60981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "connApi.h"
61981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "DrvMainModules.h"
62981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
63981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
64981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#ifdef TI_DBG
65981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#include "siteMgrApi.h"
66981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt#endif
67981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* Constants */
68981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
69981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* Enumerations */
70981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
71981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* Typedefs */
72981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
73981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* Structures */
74981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
75981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* External data definitions */
76981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
77981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* External functions definitions */
78981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
79981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* Global variables */
80981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
81981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* Local function prototypes */
82981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic void mlme_stopAssocAndAuth(mlme_t *pMlme);
83981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
84981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* functions */
85981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
86981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/**
87981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
88981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* mlme_Create - allocate memory for MLME SM
89981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
90981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description:
91981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
92981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Allocate memory for MLME SM. \n
93981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*       Allocates memory for MLME context. \n
94981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*       Allocates memory for MLME timer. \n
95981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*       Allocates memory for MLME SM matrix. \n
96981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
97981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS:
98981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
99981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*  I   - pOs - OS context  \n
100981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
101981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS:
102981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
103981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*  TI_OK if successful, TI_NOK otherwise.
104981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
105981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa rsn_mainSecSmKeysOnlyStop()
106981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/
107981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_HANDLE mlme_create(TI_HANDLE hOs)
108981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
109981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    mlme_t  *pHandle;
110981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_STATUS       status;
111981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
112981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    /* allocate MLME context memory */
113981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle = (mlme_t*)os_memoryAlloc(hOs, sizeof(mlme_t));
114981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    if (pHandle == NULL)
115981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    {
116981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        return NULL;
117981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    }
118981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
119981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    /* zero all MLME context */
120981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    os_memoryZero(hOs, pHandle, sizeof(mlme_t));
121981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
122981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->hOs = hOs;
123981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
124981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    /* allocate memory for MLME state machine */
125981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    status = fsm_Create(hOs, &pHandle->pMlmeSm, MLME_SM_NUM_STATES, MLME_SM_NUM_EVENTS);
126981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    if (status != TI_OK)
127981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    {
128981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        os_memoryFree(hOs, pHandle, sizeof(mlme_t));
129981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        return NULL;
130981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    }
131981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
132981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return pHandle;
133981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
134981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
135981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
136981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/**
137981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
138981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* mlme_Unload - unload MLME SM from memory
139981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
140981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description:
141981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
142981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Unload MLME SM from memory
143981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
144981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS:
145981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
146981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*  I   - hMlme - MLME SM context  \n
147981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
148981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS:
149981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
150981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*  TI_OK if successful, TI_NOK otherwise.
151981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
152981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa rsn_mainSecSmKeysOnlyStop()
153981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/
154981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS mlme_unload(TI_HANDLE hMlme)
155981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
156981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_STATUS       status;
157981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    mlme_t      *pHandle;
158981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
159981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle = (mlme_t*)hMlme;
160981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
161981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    status = fsm_Unload(pHandle->hOs, pHandle->pMlmeSm);
162981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    if (status != TI_OK)
163981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    {
164981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        /* report failure but don't stop... */
165981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    }
166981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
167981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    os_memoryFree(pHandle->hOs, hMlme, sizeof(mlme_t));
168981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
169981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return TI_OK;
170981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
171981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
172981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/**
173981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
174981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* mlme_smConfig - configure a new MLME SM
175981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
176981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description:
177981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
178981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Configure a new MLME SM and other modules handles.
179981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
180981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS:
181981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
182981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*  void
183981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
184981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa mlme_Create, mlme_Unload
185981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/
186981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtvoid mlme_init (TStadHandlesList *pStadHandles)
187981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
188981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    mlme_t *pHandle = (mlme_t *)(pStadHandles->hMlmeSm);
189981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
190981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    /** Main 802.1X State Machine matrix */
191981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    fsm_actionCell_t    mlme_smMatrix[MLME_SM_NUM_STATES][MLME_SM_NUM_EVENTS] =
192981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    {
193981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        /* next state and actions for IDLE state */
194981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        {{MLME_SM_STATE_AUTH_WAIT, (fsm_Action_t)mlme_smStartIdle},             /* MLME_SM_EVENT_START */
195981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smNOP},                     /* MLME_SM_EVENT_STOP  */
196981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smActionUnexpected},       /* MLME_SM_EVENT_AUTH_SUCCESS */
197981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smActionUnexpected},       /* MLME_SM_EVENT_AUTH_FAIL */
198981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smActionUnexpected},       /* MLME_SM_EVENT_ASSOC_SUCCESS */
199981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smActionUnexpected}        /* MLME_SM_EVENT_ASSOC_FAIL */
200981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        },
201981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        /* next state and actions for AUTH_WAIT state */
202981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        {{MLME_SM_STATE_AUTH_WAIT, (fsm_Action_t)mlme_smActionUnexpected},      /* MLME_SM_EVENT_START */
203981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smNOP},                       /* MLME_SM_EVENT_STOP  */
204981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_ASSOC_WAIT, (fsm_Action_t)mlme_smAuthSuccessAuthWait},  /* MLME_SM_EVENT_AUTH_SUCCESS */
205981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smAuthFailAuthWait},           /* MLME_SM_EVENT_AUTH_FAIL */
206981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_AUTH_WAIT, (fsm_Action_t)mlme_smActionUnexpected},      /* MLME_SM_EVENT_ASSOC_SUCCESS */
207981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_AUTH_WAIT, (fsm_Action_t)mlme_smActionUnexpected}       /* MLME_SM_EVENT_ASSOC_FAIL */
208981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        },
209981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        /* next state and actions for ASSOC_WAIT state */
210981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        {{MLME_SM_STATE_ASSOC_WAIT, (fsm_Action_t)mlme_smActionUnexpected}, /* MLME_SM_EVENT_START */
211981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smStopAssocWait},          /* MLME_SM_EVENT_STOP  */
212981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_ASSOC_WAIT, (fsm_Action_t)mlme_smActionUnexpected}, /* MLME_SM_EVENT_AUTH_SUCCESS */
213981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_ASSOC_WAIT, (fsm_Action_t)mlme_smActionUnexpected}, /* MLME_SM_EVENT_AUTH_FAIL */
214981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_ASSOC, (fsm_Action_t)mlme_smAssocSuccessAssocWait}, /* MLME_SM_EVENT_ASSOC_SUCCESS */
215981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smAssocFailAssocWait}      /* MLME_SM_EVENT_ASSOC_FAIL */
216981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        },
217981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        /* next state and actions for ASSOC state */
218981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        {{MLME_SM_STATE_ASSOC, (fsm_Action_t)mlme_smActionUnexpected},  /* MLME_SM_EVENT_START */
219981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smStopAssoc},          /* MLME_SM_EVENT_STOP  */
220981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_ASSOC, (fsm_Action_t)mlme_smActionUnexpected},  /* MLME_SM_EVENT_AUTH_SUCCESS */
221981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_ASSOC, (fsm_Action_t)mlme_smActionUnexpected},  /* MLME_SM_EVENT_AUTH_FAIL */
222981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_ASSOC, (fsm_Action_t)mlme_smActionUnexpected},  /* MLME_SM_EVENT_ASSOC_SUCCESS */
223981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt         {MLME_SM_STATE_ASSOC, (fsm_Action_t)mlme_smActionUnexpected}   /* MLME_SM_EVENT_ASSOC_FAIL */
224981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        }
225981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    };
226981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
227981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    fsm_Config(pHandle->pMlmeSm, &mlme_smMatrix[0][0], MLME_SM_NUM_STATES, MLME_SM_NUM_EVENTS, mlme_smEvent, pStadHandles->hOs);
228981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
229981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->currentState = MLME_SM_STATE_IDLE;
230981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->legacyAuthType = AUTH_LEGACY_NONE;
231981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->reAssoc = TI_FALSE;
232981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->disConnType = DISCONNECT_IMMEDIATE;
233981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->disConnReason = STATUS_UNSPECIFIED;
234981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
235981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->hAssoc            = pStadHandles->hAssoc;
236981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->hAuth             = pStadHandles->hAuth;
237981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->hSiteMgr          = pStadHandles->hSiteMgr;
238981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->hCtrlData         = pStadHandles->hCtrlData;
239981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->hTxMgmtQ          = pStadHandles->hTxMgmtQ;
240981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->hMeasurementMgr   = pStadHandles->hMeasurementMgr;
241981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->hSwitchChannel    = pStadHandles->hSwitchChannel;
242981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->hRegulatoryDomain = pStadHandles->hRegulatoryDomain;
243981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->hReport           = pStadHandles->hReport;
244981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->hOs               = pStadHandles->hOs;
245981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->hConn             = pStadHandles->hConn;
246981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->hCurrBss          = pStadHandles->hCurrBss;
247981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->hApConn           = pStadHandles->hAPConnection;
248981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->hScanCncn         = pStadHandles->hScanCncn;
249981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->hQosMngr          = pStadHandles->hQosMngr;
250981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->hTWD              = pStadHandles->hTWD;
251981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->hTxCtrl           = pStadHandles->hTxCtrl;
252981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
253981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    /*
254981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    debug info
255981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    */
256981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->debug_lastProbeRspTSFTime = 0;
257981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->debug_lastDtimBcnTSFTime = 0;
258981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->debug_lastBeaconTSFTime = 0;
259981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->debug_isFunctionFirstTime = TI_TRUE;
260981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->BeaconsCounterPS = 0;
261981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
262981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
263981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtvoid mlme_SetDefaults (TI_HANDLE hMlmeSm, TMlmeInitParams *pMlmeInitParams)
264981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
265981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    mlme_t *pMlme = (mlme_t *)(hMlmeSm);
266981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
267981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    /* set default values */
268981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pMlme->bParseBeaconWSC = pMlmeInitParams->parseWSCInBeacons;
269981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
270981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
271981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS mlme_setParam(TI_HANDLE           hMlmeSm,
272981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt                        paramInfo_t         *pParam)
273981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
274981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    mlme_t *pMlmeSm = (mlme_t *)hMlmeSm;
275981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
276981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    switch(pParam->paramType)
277981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    {
278981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    case MLME_LEGACY_TYPE_PARAM:
279981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
280981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        switch (pParam->content.mlmeLegacyAuthType)
281981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        {
282981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        case AUTH_LEGACY_RESERVED1:
283981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        case AUTH_LEGACY_OPEN_SYSTEM:
284981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            /* First configure the MLME with the new legacy authentication type */
285981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            pMlmeSm->legacyAuthType = pParam->content.mlmeLegacyAuthType;
286981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            /* Now configure the authentication module. */
287981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            pParam->paramType = AUTH_LEGACY_TYPE_PARAM;
288981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            return auth_setParam(pMlmeSm->hAuth, pParam);
289981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
290981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        case AUTH_LEGACY_SHARED_KEY:
291981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            /* First configure the MLME with the new legacy authentication type */
292981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            pMlmeSm->legacyAuthType = AUTH_LEGACY_SHARED_KEY;
293981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            /* Now configure the authentication module. */
294981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            pParam->paramType = AUTH_LEGACY_TYPE_PARAM;
295981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            return auth_setParam(pMlmeSm->hAuth, pParam);
296981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
297981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        case AUTH_LEGACY_AUTO_SWITCH:
298981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            /* First configure the MLME with the new legacy authentication type */
299981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            pMlmeSm->legacyAuthType = AUTH_LEGACY_AUTO_SWITCH;
300981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            /* Now configure the authentication module,
301981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt                Auto switch mode means start always with shared key, if fail move to open system. */
302981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            pParam->paramType = AUTH_LEGACY_TYPE_PARAM;
303981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            pParam->content.authLegacyAuthType = AUTH_LEGACY_SHARED_KEY;
304981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            return auth_setParam(pMlmeSm->hAuth, pParam);
305981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
306981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        default:
307981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            TRACE1(pMlmeSm->hReport, REPORT_SEVERITY_ERROR, "Set param, Params is not supported, 0x%x\n\n", pParam->content.mlmeLegacyAuthType);
308981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            return PARAM_VALUE_NOT_VALID;
309981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        }
310981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/*      break;  - unreachable */
311981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
312981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    case MLME_RE_ASSOC_PARAM:
313981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        pMlmeSm->reAssoc = pParam->content.mlmeReAssoc;
314981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        break;
315981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
316981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    default:
317981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        TRACE1(pMlmeSm->hReport, REPORT_SEVERITY_ERROR, "Set param, Params is not supported, 0x%x\n\n", pParam->paramType);
318981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        return PARAM_NOT_SUPPORTED;
319981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    }
320981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
321981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return TI_OK;
322981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
323981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
324981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS mlme_getParam(TI_HANDLE           hMlmeSm,
325981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt                        paramInfo_t         *pParam)
326981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
327981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    mlme_t *pMlmeSm = (mlme_t *)hMlmeSm;
328981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
329981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    switch(pParam->paramType)
330981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    {
331981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    case MLME_LEGACY_TYPE_PARAM:
332981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        pParam->content.mlmeLegacyAuthType = pMlmeSm->legacyAuthType;
333981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        break;
334981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
335981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    case MLME_CAPABILITY_PARAM:
336981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        pParam->content.mlmeLegacyAuthType = pMlmeSm->legacyAuthType;
337981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        assoc_smCapBuild(pMlmeSm->hAssoc, &(pParam->content.siteMgrSiteCapability));
338981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        break;
339981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
340981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    case MLME_BEACON_RECV:
341981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        pParam->content.siteMgrTiWlanCounters.BeaconsRecv = pMlmeSm->BeaconsCounterPS;
342981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        break;
343981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
344981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    default:
345981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        TRACE1(pMlmeSm->hReport, REPORT_SEVERITY_ERROR, "Get param, Params is not supported, %d\n\n", pParam->content.mlmeLegacyAuthType);
346981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        return PARAM_NOT_SUPPORTED;
347981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    }
348981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
349981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return TI_OK;
350981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
351981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
352981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/**
353981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
354981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* mlme_Start - Start event for the MLME SM
355981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
356981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description:
357981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
358981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Start event for the MLME SM
359981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
360981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS:
361981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
362981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*  I   - hMlme - MLME SM context  \n
363981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
364981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS:
365981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
366981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*  TI_OK if successful, TI_NOK otherwise.
367981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
368981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa mlme_Stop, mlme_Recv
369981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/
370981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS mlme_start(TI_HANDLE hMlme)
371981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
372653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt    TI_STATUS	status;
373653850f71f9caaa41af19cadbab24bb5e655daf4Dmitry Shmidt    mlme_t		*pHandle = (mlme_t*)hMlme;
374981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
375981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    if (pHandle == NULL)
376981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    {
377981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        return TI_NOK;
378981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    }
379981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
380981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    if (pHandle->legacyAuthType == AUTH_LEGACY_NONE)
381981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    {
382981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        TRACE0(pHandle->hReport, REPORT_SEVERITY_ERROR, "mlme_start: pHandle->legacyAuthType == AUTH_LEGACY_NONE\n");
383981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        return TI_NOK;
384981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    }
385981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
386981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    status = mlme_smEvent(&pHandle->currentState, MLME_SM_EVENT_START, pHandle);
387981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
388981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return status;
389981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
390981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
391981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/**
392981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
393981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* mlme_Stop - Stop event for the MLME SM
394981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
395981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description:
396981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
397981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Stop event for the MLME SM
398981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
399981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS:
400981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
401981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*  I   - hMlme - MLME SM context  \n
402981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
403981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS:
404981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
405981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*  TI_OK if successful, TI_NOK otherwise.
406981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
407981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa mlme_Start, mlme_Recv
408981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/
409981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS mlme_stop(TI_HANDLE hMlme, DisconnectType_e disConnType, mgmtStatus_e reason)
410981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
411981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_STATUS       status;
412981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    mlme_t      *pHandle;
413981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
414981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle = (mlme_t*)hMlme;
415981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
416981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    if (pHandle->legacyAuthType == AUTH_LEGACY_NONE)
417981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        return TI_NOK;
418981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
419981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->disConnType = disConnType;
420981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->disConnReason = reason;
421981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
422981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    status = mlme_smEvent(&pHandle->currentState, MLME_SM_EVENT_STOP, pHandle);
423981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
424981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return status;
425981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
426981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
427981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
428981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/**
429981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
430981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* mlme_reportAuthStatus - Set a specific parameter to the MLME SM
431981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
432981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description:
433981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
434981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Set a specific parameter to the MLME SM.
435981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
436981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS:
437981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
438981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*  I   - hMlme - MLME SM context  \n
439981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*  I/O - pParam - Parameter \n
440981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
441981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS:
442981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
443981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*  TI_OK if successful, TI_NOK otherwise.
444981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
445981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa mlme_Start, mlme_Stop
446981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/
447981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS mlme_reportAuthStatus(TI_HANDLE hMlme, TI_UINT16 status)
448981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
449981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    mlme_t          *pHandle;
450981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    paramInfo_t     param;
451981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_STATUS       fStatus;
452981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
453981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle = (mlme_t*)hMlme;
454981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
455981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    if (pHandle == NULL)
456981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        return TI_NOK;
457981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
458981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    if (pHandle->legacyAuthType == AUTH_LEGACY_NONE)
459981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        return TI_NOK;
460981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
461981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->mlmeData.uStatusCode = status;
462981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
463981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    /* If status is successful */
464981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    if (status == 0)
465981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    {
466981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        /* Mark a successful status - used for conn.c */
467981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        pHandle->mlmeData.mgmtStatus = STATUS_SUCCESSFUL;
468981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        fStatus = mlme_smEvent(&pHandle->currentState, MLME_SM_EVENT_AUTH_SUCCESS, pHandle);
469981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    }
470981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    else
471981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    {
472981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        /* Now, if the MLME legacy auth type is AUTO_SWITCH, and the Auth legacy auth type is shared key,
473981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            we configure the auth SM to open system, otherwise, this is really an authentication failure. */
474981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        param.paramType = AUTH_LEGACY_TYPE_PARAM;
475981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        auth_getParam(pHandle->hAuth, &param);
476981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
477981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        if ((pHandle->legacyAuthType == AUTH_LEGACY_AUTO_SWITCH) && (param.content.authLegacyAuthType ==  AUTH_LEGACY_SHARED_KEY))
478981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        {
479981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            param.content.authLegacyAuthType = AUTH_LEGACY_OPEN_SYSTEM;
480981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            fStatus = auth_setParam(pHandle->hAuth, &param);
481981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            fStatus = auth_start(pHandle->hAuth);
482981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        }
483981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
484981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        else
485981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        {
486981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            pHandle->mlmeData.mgmtStatus = STATUS_AUTH_REJECT;
487981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt            fStatus = mlme_smEvent(&pHandle->currentState, MLME_SM_EVENT_AUTH_FAIL, pHandle);
488981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        }
489981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
490981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    }
491981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
492981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return fStatus;
493981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
494981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
495981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/**
496981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
497981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* mlme_reportAssocStatus - Set a specific parameter to the MLME SM
498981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
499981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description:
500981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
501981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Set a specific parameter to the MLME SM.
502981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
503981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS:
504981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
505981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*  I   - hMlme - MLME SM context  \n
506981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*  I/O - pParam - Parameter \n
507981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
508981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS:
509981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
510981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*  TI_OK if successful, TI_NOK otherwise.
511981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
512981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa mlme_Start, mlme_Stop
513981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/
514981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS mlme_reportAssocStatus(TI_HANDLE hMlme, TI_UINT16 status)
515981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
516981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    mlme_t      *pHandle;
517981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_STATUS   fStatus;
518981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
519981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle = (mlme_t*)hMlme;
520981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
521981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    if (pHandle == NULL)
522981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        return TI_NOK;
523981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
524981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    if (pHandle->legacyAuthType == AUTH_LEGACY_NONE)
525981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        return TI_NOK;
526981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
527981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    pHandle->mlmeData.uStatusCode = status;
528981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
529981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    /* If status is successful */
530981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    if (status == 0)
531981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    {
532981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        pHandle->mlmeData.mgmtStatus = STATUS_SUCCESSFUL;
533981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        fStatus = mlme_smEvent(&pHandle->currentState, MLME_SM_EVENT_ASSOC_SUCCESS, pHandle);
534981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    } else
535981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    {
536981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        pHandle->mlmeData.mgmtStatus = STATUS_ASSOC_REJECT;
537981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        fStatus = mlme_smEvent(&pHandle->currentState, MLME_SM_EVENT_ASSOC_FAIL, pHandle);
538981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    }
539981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
540981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return fStatus;
541981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
542981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
543981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
544981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/**
545981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
546981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* mlme_SetParam - Set a specific parameter to the MLME SM
547981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
548981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b Description:
549981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
550981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* Set a specific parameter to the MLME SM.
551981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
552981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b ARGS:
553981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
554981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*  I   - hMlme - MLME SM context  \n
555981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*  I/O - pParam - Parameter \n
556981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
557981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \b RETURNS:
558981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
559981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*  TI_OK if successful, TI_NOK otherwise.
560981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*
561981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt* \sa mlme_Start, mlme_Stop
562981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*/
563981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS mlme_smEvent(TI_UINT8 *currentState, TI_UINT8 event, TI_HANDLE hMlme)
564981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
565981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt   mlme_t *pMlme = (mlme_t *)hMlme;
566981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_STATUS       status;
567981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_UINT8        nextState;
568981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
569981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    status = fsm_GetNextState(pMlme->pMlmeSm, *currentState, event, &nextState);
570981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    if (status != TI_OK)
571981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    {
572981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        TRACE0(pMlme->hReport, REPORT_SEVERITY_ERROR, "MLME_SM: ERROR - failed getting next state \n");
573981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
574981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        return(TI_NOK);
575981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    }
576981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
577981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt	TRACE3( pMlme->hReport, REPORT_SEVERITY_INFORMATION, "mlme_smEvent: <currentState = %d, event = %d> --> nextState = %d\n", *currentState, event, nextState);
578981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
579981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    status = fsm_Event(pMlme->pMlmeSm, currentState, event, (void *)pMlme);
580981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
581981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return(status);
582981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
583981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
584981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* state machine functions */
585981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
586981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS mlme_smStartIdle(mlme_t *pMlme)
587981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
588981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_STATUS       status;
589981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
590981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    status = auth_start(pMlme->hAuth);
591981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
592981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return status;
593981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
594981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
595981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS mlme_smClass3Idle(mlme_t *pMlme)
596981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
597981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return TI_OK;
598981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
599981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
600981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
601981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
602981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS mlme_smAuthSuccessAuthWait(mlme_t *pMlme)
603981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
604981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_STATUS       status;
605981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
606981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    if (pMlme->reAssoc)
607981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    {
608981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        status = reassoc_start(pMlme->hAssoc);
609981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    }
610981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    else
611981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    {
612981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        status = assoc_start(pMlme->hAssoc);
613981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    }
614981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
615981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return status;
616981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
617981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
618981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS mlme_smAuthFailAuthWait(mlme_t *pMlme)
619981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
620981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_STATUS       status;
621981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
622981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    status = mlme_smReportStatus(pMlme);
623981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
624981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return status;
625981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
626981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
627981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS mlme_smStopAssocWait(mlme_t *pMlme)
628981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
629981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    mlme_stopAssocAndAuth(pMlme);
630981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return TI_OK;
631981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
632981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
633981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS mlme_smAssocSuccessAssocWait(mlme_t *pMlme)
634981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
635981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_STATUS       status;
636981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
637981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    status = mlme_smReportStatus(pMlme);
638981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
639981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return status;
640981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
641981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
642981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS mlme_smAssocFailAssocWait(mlme_t *pMlme)
643981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
644981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_STATUS       status;
645981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
646981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    status = mlme_smReportStatus(pMlme);
647981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
648981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return status;
649981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
650981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
651981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
652981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS mlme_smStopAssoc(mlme_t *pMlme)
653981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
654981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    mlme_stopAssocAndAuth(pMlme);
655981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return TI_OK;
656981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
657981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
658981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
659981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
660981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS mlme_smNOP(mlme_t *pMlme)
661981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
662981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return TI_OK;
663981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
664981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
665981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS mlme_smActionUnexpected(mlme_t *pMlme)
666981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
667981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return TI_OK;
668981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
669981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
670981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/* local functions */
671981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
672981801b95b81e6d1c7a2085967406e86af0f08fcDmitry ShmidtTI_STATUS mlme_smReportStatus(mlme_t *pMlme)
673981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
674981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_STATUS       status;
675981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
676981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    if (pMlme == NULL)
677981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    {
678981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt        return TI_NOK;
679981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    }
680981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
681981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    status = conn_reportMlmeStatus(pMlme->hConn, pMlme->mlmeData.mgmtStatus, pMlme->mlmeData.uStatusCode);
682981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    return status;
683981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
684981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
685981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
686981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidtstatic void mlme_stopAssocAndAuth(mlme_t *pMlme)
687981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt{
688981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
689981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_BOOL         sendDeAuth;
690981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    TI_BOOL         sendDisAssoc;
691981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
692981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    /* Don't send deauth/disassoc, FW will do it on disconnect command */
693981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    sendDeAuth   = TI_FALSE;
694981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    sendDisAssoc = TI_FALSE;
695981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
696981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt	TRACE0(pMlme->hReport, REPORT_SEVERITY_INFORMATION, "mlme_stopAssocAndAuth: Auth/assoc stop without sending deauth/disassoc\n");
697981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
698981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    assoc_setDisAssocFlag(pMlme->hAssoc, sendDisAssoc);
699981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    assoc_stop(pMlme->hAssoc);
700981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
701981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt    auth_stop(pMlme->hAuth, sendDeAuth, pMlme->disConnReason );
702981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt}
703981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt/*****************************************************************************
704981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt**
705981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt** MLME messages builder/Parser
706981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt**
707981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt*****************************************************************************/
708981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
709981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
710981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
711981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
712981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
713981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
714981801b95b81e6d1c7a2085967406e86af0f08fcDmitry Shmidt
715