164064216a8433360745f69edddce19a606659163The Android Open Source Project/** \file mlmeSM.c
264064216a8433360745f69edddce19a606659163The Android Open Source Project *  \brief 802.11 MLME SM source
364064216a8433360745f69edddce19a606659163The Android Open Source Project *
464064216a8433360745f69edddce19a606659163The Android Open Source Project *  \see mlmeSM.h
564064216a8433360745f69edddce19a606659163The Android Open Source Project */
664064216a8433360745f69edddce19a606659163The Android Open Source Project
764064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
864064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
964064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
1064064216a8433360745f69edddce19a606659163The Android Open Source Project**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
1164064216a8433360745f69edddce19a606659163The Android Open Source Project**| All rights reserved.                                                  |**
1264064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
1364064216a8433360745f69edddce19a606659163The Android Open Source Project**| Redistribution and use in source and binary forms, with or without    |**
1464064216a8433360745f69edddce19a606659163The Android Open Source Project**| modification, are permitted provided that the following conditions    |**
1564064216a8433360745f69edddce19a606659163The Android Open Source Project**| are met:                                                              |**
1664064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
1764064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions of source code must retain the above copyright     |**
1864064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer.      |**
1964064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions in binary form must reproduce the above copyright  |**
2064064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer in    |**
2164064216a8433360745f69edddce19a606659163The Android Open Source Project**|    the documentation and/or other materials provided with the         |**
2264064216a8433360745f69edddce19a606659163The Android Open Source Project**|    distribution.                                                      |**
2364064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Neither the name Texas Instruments nor the names of its            |**
2464064216a8433360745f69edddce19a606659163The Android Open Source Project**|    contributors may be used to endorse or promote products derived    |**
2564064216a8433360745f69edddce19a606659163The Android Open Source Project**|    from this software without specific prior written permission.      |**
2664064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
2764064216a8433360745f69edddce19a606659163The Android Open Source Project**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
2864064216a8433360745f69edddce19a606659163The Android Open Source Project**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
2964064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
3064064216a8433360745f69edddce19a606659163The Android Open Source Project**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
3164064216a8433360745f69edddce19a606659163The Android Open Source Project**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
3264064216a8433360745f69edddce19a606659163The Android Open Source Project**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
3364064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
3464064216a8433360745f69edddce19a606659163The Android Open Source Project**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
3564064216a8433360745f69edddce19a606659163The Android Open Source Project**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
3664064216a8433360745f69edddce19a606659163The Android Open Source Project**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
3764064216a8433360745f69edddce19a606659163The Android Open Source Project**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
3864064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
3964064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
4064064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************/
4164064216a8433360745f69edddce19a606659163The Android Open Source Project
4264064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************/
4364064216a8433360745f69edddce19a606659163The Android Open Source Project/*																		   */
4464064216a8433360745f69edddce19a606659163The Android Open Source Project/*		MODULE:	mlmeSM.c												   */
4564064216a8433360745f69edddce19a606659163The Android Open Source Project/*    PURPOSE:	802.11 MLME SM source									   */
4664064216a8433360745f69edddce19a606659163The Android Open Source Project/*																	 	   */
4764064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************/
4864064216a8433360745f69edddce19a606659163The Android Open Source Project
4964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osApi.h"
5064064216a8433360745f69edddce19a606659163The Android Open Source Project
5164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "paramOut.h"
5264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "paramIn.h"
5364064216a8433360745f69edddce19a606659163The Android Open Source Project
5464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "utils.h"
5564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "fsm.h"
5664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "report.h"
5764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "smeApi.h"
5864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "Assoc/AssocSM.h"
5964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "Auth/authSm.h"
6064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "mlmeBuilder.h"
6164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "mlmeSm.h"
6264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "Auth/open/openAuthSm.h"
6364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "Auth/shared/sharedKeyAuthSm.h"
6464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "whalCtrl_api.h"
6564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "connApi.h"
6664064216a8433360745f69edddce19a606659163The Android Open Source Project
6764064216a8433360745f69edddce19a606659163The Android Open Source Project
6864064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG
6964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "siteMgrApi.h"
7064064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
7164064216a8433360745f69edddce19a606659163The Android Open Source Project/* Constants */
7264064216a8433360745f69edddce19a606659163The Android Open Source Project
7364064216a8433360745f69edddce19a606659163The Android Open Source Project/* Enumerations */
7464064216a8433360745f69edddce19a606659163The Android Open Source Project
7564064216a8433360745f69edddce19a606659163The Android Open Source Project/* Typedefs */
7664064216a8433360745f69edddce19a606659163The Android Open Source Project
7764064216a8433360745f69edddce19a606659163The Android Open Source Project/* Structures */
7864064216a8433360745f69edddce19a606659163The Android Open Source Project
7964064216a8433360745f69edddce19a606659163The Android Open Source Project/* External data definitions */
8064064216a8433360745f69edddce19a606659163The Android Open Source Project
8164064216a8433360745f69edddce19a606659163The Android Open Source Project/* External functions definitions */
8264064216a8433360745f69edddce19a606659163The Android Open Source Project
8364064216a8433360745f69edddce19a606659163The Android Open Source Project/* Global variables */
8464064216a8433360745f69edddce19a606659163The Android Open Source Project
8564064216a8433360745f69edddce19a606659163The Android Open Source Project/* Local function prototypes */
8664064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef NO_HAL_VOB
8764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void mlme_logBeaconReceived(TI_HANDLE hMlme);
8864064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
8964064216a8433360745f69edddce19a606659163The Android Open Source Project
9064064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid mlme_stopAssocAndAuth(mlme_t *pMlme);
9164064216a8433360745f69edddce19a606659163The Android Open Source Project
9264064216a8433360745f69edddce19a606659163The Android Open Source Project/* functions */
9364064216a8433360745f69edddce19a606659163The Android Open Source Project
9464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
9564064216a8433360745f69edddce19a606659163The Android Open Source Project*
9664064216a8433360745f69edddce19a606659163The Android Open Source Project* mlme_Create - allocate memory for MLME SM
9764064216a8433360745f69edddce19a606659163The Android Open Source Project*
9864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
9964064216a8433360745f69edddce19a606659163The Android Open Source Project*
10064064216a8433360745f69edddce19a606659163The Android Open Source Project* Allocate memory for MLME SM. \n
10164064216a8433360745f69edddce19a606659163The Android Open Source Project* 		Allocates memory for MLME context. \n
10264064216a8433360745f69edddce19a606659163The Android Open Source Project* 		Allocates memory for MLME timer. \n
10364064216a8433360745f69edddce19a606659163The Android Open Source Project* 		Allocates memory for MLME SM matrix. \n
10464064216a8433360745f69edddce19a606659163The Android Open Source Project*
10564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
10664064216a8433360745f69edddce19a606659163The Android Open Source Project*
10764064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pOs - OS context  \n
10864064216a8433360745f69edddce19a606659163The Android Open Source Project*
10964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
11064064216a8433360745f69edddce19a606659163The Android Open Source Project*
11164064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
11264064216a8433360745f69edddce19a606659163The Android Open Source Project*
11364064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa rsn_mainSecSmKeysOnlyStop()
11464064216a8433360745f69edddce19a606659163The Android Open Source Project*/
11564064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_HANDLE mlme_create(TI_HANDLE hOs)
11664064216a8433360745f69edddce19a606659163The Android Open Source Project{
11764064216a8433360745f69edddce19a606659163The Android Open Source Project	mlme_t 	*pHandle;
11864064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS		status;
11964064216a8433360745f69edddce19a606659163The Android Open Source Project
12064064216a8433360745f69edddce19a606659163The Android Open Source Project	/* allocate MLME context memory */
12164064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle = (mlme_t*)os_memoryAlloc(hOs, sizeof(mlme_t));
12264064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pHandle == NULL)
12364064216a8433360745f69edddce19a606659163The Android Open Source Project	{
12464064216a8433360745f69edddce19a606659163The Android Open Source Project		return NULL;
12564064216a8433360745f69edddce19a606659163The Android Open Source Project	}
12664064216a8433360745f69edddce19a606659163The Android Open Source Project
12764064216a8433360745f69edddce19a606659163The Android Open Source Project	/* zero all MLME context */
12864064216a8433360745f69edddce19a606659163The Android Open Source Project	os_memoryZero(hOs, pHandle, sizeof(mlme_t));
12964064216a8433360745f69edddce19a606659163The Android Open Source Project
13064064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->hOs = hOs;
13164064216a8433360745f69edddce19a606659163The Android Open Source Project
13264064216a8433360745f69edddce19a606659163The Android Open Source Project	/* allocate memory for MLME state machine */
13364064216a8433360745f69edddce19a606659163The Android Open Source Project	status = fsm_Create(hOs, &pHandle->pMlmeSm, MLME_SM_NUM_STATES, MLME_SM_NUM_EVENTS);
13464064216a8433360745f69edddce19a606659163The Android Open Source Project	if (status != OK)
13564064216a8433360745f69edddce19a606659163The Android Open Source Project	{
13664064216a8433360745f69edddce19a606659163The Android Open Source Project		os_memoryFree(hOs, pHandle, sizeof(mlme_t));
13764064216a8433360745f69edddce19a606659163The Android Open Source Project		return NULL;
13864064216a8433360745f69edddce19a606659163The Android Open Source Project	}
13964064216a8433360745f69edddce19a606659163The Android Open Source Project
14064064216a8433360745f69edddce19a606659163The Android Open Source Project	return pHandle;
14164064216a8433360745f69edddce19a606659163The Android Open Source Project}
14264064216a8433360745f69edddce19a606659163The Android Open Source Project
14364064216a8433360745f69edddce19a606659163The Android Open Source Project
14464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
14564064216a8433360745f69edddce19a606659163The Android Open Source Project*
14664064216a8433360745f69edddce19a606659163The Android Open Source Project* mlme_Unload - unload MLME SM from memory
14764064216a8433360745f69edddce19a606659163The Android Open Source Project*
14864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
14964064216a8433360745f69edddce19a606659163The Android Open Source Project*
15064064216a8433360745f69edddce19a606659163The Android Open Source Project* Unload MLME SM from memory
15164064216a8433360745f69edddce19a606659163The Android Open Source Project*
15264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
15364064216a8433360745f69edddce19a606659163The Android Open Source Project*
15464064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hMlme - MLME SM context  \n
15564064216a8433360745f69edddce19a606659163The Android Open Source Project*
15664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
15764064216a8433360745f69edddce19a606659163The Android Open Source Project*
15864064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
15964064216a8433360745f69edddce19a606659163The Android Open Source Project*
16064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa rsn_mainSecSmKeysOnlyStop()
16164064216a8433360745f69edddce19a606659163The Android Open Source Project*/
16264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_unload(TI_HANDLE hMlme)
16364064216a8433360745f69edddce19a606659163The Android Open Source Project{
16464064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS 		status;
16564064216a8433360745f69edddce19a606659163The Android Open Source Project	mlme_t		*pHandle;
16664064216a8433360745f69edddce19a606659163The Android Open Source Project
16764064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle = (mlme_t*)hMlme;
16864064216a8433360745f69edddce19a606659163The Android Open Source Project
16964064216a8433360745f69edddce19a606659163The Android Open Source Project	status = fsm_Unload(pHandle->hOs, pHandle->pMlmeSm);
17064064216a8433360745f69edddce19a606659163The Android Open Source Project    if (status != OK)
17164064216a8433360745f69edddce19a606659163The Android Open Source Project	{
17264064216a8433360745f69edddce19a606659163The Android Open Source Project		/* report failure but don't stop... */
17364064216a8433360745f69edddce19a606659163The Android Open Source Project	}
17464064216a8433360745f69edddce19a606659163The Android Open Source Project
17564064216a8433360745f69edddce19a606659163The Android Open Source Project	os_memoryFree(pHandle->hOs, hMlme, sizeof(mlme_t));
17664064216a8433360745f69edddce19a606659163The Android Open Source Project
17764064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
17864064216a8433360745f69edddce19a606659163The Android Open Source Project}
17964064216a8433360745f69edddce19a606659163The Android Open Source Project
18064064216a8433360745f69edddce19a606659163The Android Open Source Project/**
18164064216a8433360745f69edddce19a606659163The Android Open Source Project*
18264064216a8433360745f69edddce19a606659163The Android Open Source Project* mlme_smConfig - configure a new MLME SM
18364064216a8433360745f69edddce19a606659163The Android Open Source Project*
18464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
18564064216a8433360745f69edddce19a606659163The Android Open Source Project*
18664064216a8433360745f69edddce19a606659163The Android Open Source Project* Configure a new MLME SM.
18764064216a8433360745f69edddce19a606659163The Android Open Source Project*
18864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
18964064216a8433360745f69edddce19a606659163The Android Open Source Project*
19064064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hMlme - MLME SM context  \n
19164064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pMlme - MLME SM context  \n
19264064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pSiteMgr - Site manager context  \n
19364064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pCtrlData - Control data context  \n
19464064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pTxData - TX data context  \n
19564064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pHalCtrl - Hal control context  \n
19664064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pReport - Report context  \n
19764064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pOs - OS context  \n
19864064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - mlmeTimeout - MLME SM timeout \n
19964064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - mlmeMaxCount - Max number of MLME requests to send  \n
20064064216a8433360745f69edddce19a606659163The Android Open Source Project*
20164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
20264064216a8433360745f69edddce19a606659163The Android Open Source Project*
20364064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
20464064216a8433360745f69edddce19a606659163The Android Open Source Project*
20564064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa mlme_Create, mlme_Unload
20664064216a8433360745f69edddce19a606659163The Android Open Source Project*/
20764064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_config(TI_HANDLE hMlme,
20864064216a8433360745f69edddce19a606659163The Android Open Source Project				   TI_HANDLE hAuth,
20964064216a8433360745f69edddce19a606659163The Android Open Source Project				   TI_HANDLE hAssoc,
21064064216a8433360745f69edddce19a606659163The Android Open Source Project				   TI_HANDLE hSiteMgr,
21164064216a8433360745f69edddce19a606659163The Android Open Source Project				   TI_HANDLE hCtrlData,
21264064216a8433360745f69edddce19a606659163The Android Open Source Project				   TI_HANDLE hConn,
21364064216a8433360745f69edddce19a606659163The Android Open Source Project				   TI_HANDLE hTxData,
21464064216a8433360745f69edddce19a606659163The Android Open Source Project				   TI_HANDLE hHalCtrl,
21564064216a8433360745f69edddce19a606659163The Android Open Source Project				   TI_HANDLE hMemMgr,
21664064216a8433360745f69edddce19a606659163The Android Open Source Project				   TI_HANDLE hMeasurementMgr,
21764064216a8433360745f69edddce19a606659163The Android Open Source Project				   TI_HANDLE hSwitchChannel,
21864064216a8433360745f69edddce19a606659163The Android Open Source Project				   TI_HANDLE hRegulatoryDomain,
21964064216a8433360745f69edddce19a606659163The Android Open Source Project				   TI_HANDLE hReport,
22064064216a8433360745f69edddce19a606659163The Android Open Source Project				   TI_HANDLE hOs,
22164064216a8433360745f69edddce19a606659163The Android Open Source Project				   TI_HANDLE hCurrBss,
22264064216a8433360745f69edddce19a606659163The Android Open Source Project				   TI_HANDLE hAPConn,
22364064216a8433360745f69edddce19a606659163The Android Open Source Project				   TI_HANDLE hScanCncn,
22464064216a8433360745f69edddce19a606659163The Android Open Source Project				   TI_HANDLE hQosMngr,
22564064216a8433360745f69edddce19a606659163The Android Open Source Project                   TI_HANDLE hConfigMgr)
22664064216a8433360745f69edddce19a606659163The Android Open Source Project{
22764064216a8433360745f69edddce19a606659163The Android Open Source Project	mlme_t		*pHandle;
22864064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS		status;
22964064216a8433360745f69edddce19a606659163The Android Open Source Project	/** Main 802.1X State Machine matrix */
23064064216a8433360745f69edddce19a606659163The Android Open Source Project	fsm_actionCell_t	mlme_smMatrix[MLME_SM_NUM_STATES][MLME_SM_NUM_EVENTS] =
23164064216a8433360745f69edddce19a606659163The Android Open Source Project	{
23264064216a8433360745f69edddce19a606659163The Android Open Source Project		/* next state and actions for IDLE state */
23364064216a8433360745f69edddce19a606659163The Android Open Source Project		{{MLME_SM_STATE_AUTH_WAIT, (fsm_Action_t)mlme_smStartIdle},         	/* MLME_SM_EVENT_START */
23464064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smNOP},	                 /* MLME_SM_EVENT_STOP  */
23564064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smActionUnexpected},		/* MLME_SM_EVENT_AUTH_SUCCESS */
23664064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smActionUnexpected},		/* MLME_SM_EVENT_AUTH_FAIL */
23764064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smActionUnexpected},		/* MLME_SM_EVENT_ASSOC_SUCCESS */
23864064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smActionUnexpected}		/* MLME_SM_EVENT_ASSOC_FAIL */
23964064216a8433360745f69edddce19a606659163The Android Open Source Project		},
24064064216a8433360745f69edddce19a606659163The Android Open Source Project		/* next state and actions for AUTH_WAIT state */
24164064216a8433360745f69edddce19a606659163The Android Open Source Project		{{MLME_SM_STATE_AUTH_WAIT, (fsm_Action_t)mlme_smActionUnexpected},  	/* MLME_SM_EVENT_START */
24264064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smNOP},			 		   /* MLME_SM_EVENT_STOP  */
24364064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_ASSOC_WAIT, (fsm_Action_t)mlme_smAuthSuccessAuthWait}, 	/* MLME_SM_EVENT_AUTH_SUCCESS */
24464064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smAuthFailAuthWait},			/* MLME_SM_EVENT_AUTH_FAIL */
24564064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_AUTH_WAIT, (fsm_Action_t)mlme_smActionUnexpected},		/* MLME_SM_EVENT_ASSOC_SUCCESS */
24664064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_AUTH_WAIT, (fsm_Action_t)mlme_smActionUnexpected}		/* MLME_SM_EVENT_ASSOC_FAIL */
24764064216a8433360745f69edddce19a606659163The Android Open Source Project		},
24864064216a8433360745f69edddce19a606659163The Android Open Source Project		/* next state and actions for ASSOC_WAIT state */
24964064216a8433360745f69edddce19a606659163The Android Open Source Project		{{MLME_SM_STATE_ASSOC_WAIT, (fsm_Action_t)mlme_smActionUnexpected}, /* MLME_SM_EVENT_START */
25064064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smStopAssocWait},			/* MLME_SM_EVENT_STOP  */
25164064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_ASSOC_WAIT, (fsm_Action_t)mlme_smActionUnexpected},	/* MLME_SM_EVENT_AUTH_SUCCESS */
25264064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_ASSOC_WAIT, (fsm_Action_t)mlme_smActionUnexpected},	/* MLME_SM_EVENT_AUTH_FAIL */
25364064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_ASSOC, (fsm_Action_t)mlme_smAssocSuccessAssocWait},	/* MLME_SM_EVENT_ASSOC_SUCCESS */
25464064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smAssocFailAssocWait}		/* MLME_SM_EVENT_ASSOC_FAIL */
25564064216a8433360745f69edddce19a606659163The Android Open Source Project		},
25664064216a8433360745f69edddce19a606659163The Android Open Source Project		/* next state and actions for ASSOC state */
25764064216a8433360745f69edddce19a606659163The Android Open Source Project		{{MLME_SM_STATE_ASSOC, (fsm_Action_t)mlme_smActionUnexpected}, 	/* MLME_SM_EVENT_START */
25864064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_IDLE, (fsm_Action_t)mlme_smStopAssoc},			/* MLME_SM_EVENT_STOP  */
25964064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_ASSOC, (fsm_Action_t)mlme_smActionUnexpected},	/* MLME_SM_EVENT_AUTH_SUCCESS */
26064064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_ASSOC, (fsm_Action_t)mlme_smActionUnexpected},	/* MLME_SM_EVENT_AUTH_FAIL */
26164064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_ASSOC, (fsm_Action_t)mlme_smActionUnexpected},	/* MLME_SM_EVENT_ASSOC_SUCCESS */
26264064216a8433360745f69edddce19a606659163The Android Open Source Project		 {MLME_SM_STATE_ASSOC, (fsm_Action_t)mlme_smActionUnexpected}	/* MLME_SM_EVENT_ASSOC_FAIL */
26364064216a8433360745f69edddce19a606659163The Android Open Source Project		}
26464064216a8433360745f69edddce19a606659163The Android Open Source Project	};
26564064216a8433360745f69edddce19a606659163The Android Open Source Project
26664064216a8433360745f69edddce19a606659163The Android Open Source Project
26764064216a8433360745f69edddce19a606659163The Android Open Source Project	if (hMlme == NULL)
26864064216a8433360745f69edddce19a606659163The Android Open Source Project	{
26964064216a8433360745f69edddce19a606659163The Android Open Source Project		return NOK;
27064064216a8433360745f69edddce19a606659163The Android Open Source Project	}
27164064216a8433360745f69edddce19a606659163The Android Open Source Project
27264064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle = (mlme_t*)hMlme;
27364064216a8433360745f69edddce19a606659163The Android Open Source Project
27464064216a8433360745f69edddce19a606659163The Android Open Source Project	status = fsm_Config(pHandle->pMlmeSm, &mlme_smMatrix[0][0], MLME_SM_NUM_STATES, MLME_SM_NUM_EVENTS, mlme_smEvent, hOs);
27564064216a8433360745f69edddce19a606659163The Android Open Source Project	if (status != OK)
27664064216a8433360745f69edddce19a606659163The Android Open Source Project	{
27764064216a8433360745f69edddce19a606659163The Android Open Source Project		return NOK;
27864064216a8433360745f69edddce19a606659163The Android Open Source Project	}
27964064216a8433360745f69edddce19a606659163The Android Open Source Project
28064064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->currentState = MLME_SM_STATE_IDLE;
28164064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->legacyAuthType = AUTH_LEGACY_NONE;
28264064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->reAssoc = FALSE;
28364064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->disConnType = DISCONN_TYPE_IMMEDIATE;
28464064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->disConnReason = STATUS_UNSPECIFIED;
28564064216a8433360745f69edddce19a606659163The Android Open Source Project
28664064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->hAssoc = hAssoc;
28764064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->hAuth = hAuth;
28864064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->hSiteMgr = hSiteMgr;
28964064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->hCtrlData = hCtrlData;
29064064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->hTxData = hTxData;
29164064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->hHalCtrl = hHalCtrl;
29264064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->hMemMgr = hMemMgr;
29364064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->hMeasurementMgr = hMeasurementMgr;
29464064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->hSwitchChannel = hSwitchChannel;
29564064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->hRegulatoryDomain = hRegulatoryDomain;
29664064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->hReport = hReport;
29764064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->hOs = hOs;
29864064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->hConn = hConn;
29964064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->hCurrBss = hCurrBss;
30064064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->hApConn = hAPConn;
30164064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->hScanCncn = hScanCncn;
30264064216a8433360745f69edddce19a606659163The Android Open Source Project    pHandle->hConfigMgr = hConfigMgr;
30364064216a8433360745f69edddce19a606659163The Android Open Source Project
30464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* nullify beacon and probe response registration information */
30564064216a8433360745f69edddce19a606659163The Android Open Source Project    pHandle->resultCBFunc = NULL;
30664064216a8433360745f69edddce19a606659163The Android Open Source Project    pHandle->resultCBObj = NULL;
30764064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->hQosMngr = hQosMngr;
30864064216a8433360745f69edddce19a606659163The Android Open Source Project    /*
30964064216a8433360745f69edddce19a606659163The Android Open Source Project    debug info
31064064216a8433360745f69edddce19a606659163The Android Open Source Project    */
31164064216a8433360745f69edddce19a606659163The Android Open Source Project    pHandle->debug_lastProbeRspTSFTime = 0;
31264064216a8433360745f69edddce19a606659163The Android Open Source Project    pHandle->debug_lastDtimBcnTSFTime = 0;
31364064216a8433360745f69edddce19a606659163The Android Open Source Project    pHandle->debug_lastBeaconTSFTime = 0;
31464064216a8433360745f69edddce19a606659163The Android Open Source Project    pHandle->debug_isFunctionFirstTime = TRUE;
31564064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->BeaconsCounterPS = 0;
31664064216a8433360745f69edddce19a606659163The Android Open Source Project
31764064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef NO_HAL_VOB
31864064216a8433360745f69edddce19a606659163The Android Open Source Project	/* Register the Beacon interrrput that can be used for debug -
31964064216a8433360745f69edddce19a606659163The Android Open Source Project		i.e. on each received beacon in the FW, the FW generated  a beacon interrupt. */
32064064216a8433360745f69edddce19a606659163The Android Open Source Project
32164064216a8433360745f69edddce19a606659163The Android Open Source Project	/*	there is no Beacon Receive in WSP7.1, in 4.1 its for Prints only hence will not
32264064216a8433360745f69edddce19a606659163The Android Open Source Project		be supported at this time */
32364064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_OS_REPORT(("mlme_config : NO_HAL_VOB not supported"));
32464064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
32564064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
32664064216a8433360745f69edddce19a606659163The Android Open Source Project}
32764064216a8433360745f69edddce19a606659163The Android Open Source Project
32864064216a8433360745f69edddce19a606659163The Android Open Source Project
32964064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_setParam(TI_HANDLE			hMlmeSm,
33064064216a8433360745f69edddce19a606659163The Android Open Source Project						paramInfo_t			*pParam)
33164064216a8433360745f69edddce19a606659163The Android Open Source Project{
33264064216a8433360745f69edddce19a606659163The Android Open Source Project	mlme_t *pMlmeSm = (mlme_t *)hMlmeSm;
33364064216a8433360745f69edddce19a606659163The Android Open Source Project
33464064216a8433360745f69edddce19a606659163The Android Open Source Project	switch(pParam->paramType)
33564064216a8433360745f69edddce19a606659163The Android Open Source Project	{
33664064216a8433360745f69edddce19a606659163The Android Open Source Project	case MLME_LEGACY_TYPE_PARAM:
33764064216a8433360745f69edddce19a606659163The Android Open Source Project
33864064216a8433360745f69edddce19a606659163The Android Open Source Project		switch (pParam->content.mlmeLegacyAuthType)
33964064216a8433360745f69edddce19a606659163The Android Open Source Project		{
34064064216a8433360745f69edddce19a606659163The Android Open Source Project        case AUTH_LEGACY_RESERVED1:
34164064216a8433360745f69edddce19a606659163The Android Open Source Project		case AUTH_LEGACY_OPEN_SYSTEM:
34264064216a8433360745f69edddce19a606659163The Android Open Source Project			/* First configure the MLME with the new legacy authentication type */
34364064216a8433360745f69edddce19a606659163The Android Open Source Project			pMlmeSm->legacyAuthType = pParam->content.mlmeLegacyAuthType;
34464064216a8433360745f69edddce19a606659163The Android Open Source Project			/* Now configure the authentication module. */
34564064216a8433360745f69edddce19a606659163The Android Open Source Project			pParam->paramType = AUTH_LEGACY_TYPE_PARAM;
34664064216a8433360745f69edddce19a606659163The Android Open Source Project			return auth_setParam(pMlmeSm->hAuth, pParam);
34764064216a8433360745f69edddce19a606659163The Android Open Source Project
34864064216a8433360745f69edddce19a606659163The Android Open Source Project		case AUTH_LEGACY_SHARED_KEY:
34964064216a8433360745f69edddce19a606659163The Android Open Source Project			/* First configure the MLME with the new legacy authentication type */
35064064216a8433360745f69edddce19a606659163The Android Open Source Project			pMlmeSm->legacyAuthType = AUTH_LEGACY_SHARED_KEY;
35164064216a8433360745f69edddce19a606659163The Android Open Source Project			/* Now configure the authentication module. */
35264064216a8433360745f69edddce19a606659163The Android Open Source Project			pParam->paramType = AUTH_LEGACY_TYPE_PARAM;
35364064216a8433360745f69edddce19a606659163The Android Open Source Project			return auth_setParam(pMlmeSm->hAuth, pParam);
35464064216a8433360745f69edddce19a606659163The Android Open Source Project
35564064216a8433360745f69edddce19a606659163The Android Open Source Project		case AUTH_LEGACY_AUTO_SWITCH:
35664064216a8433360745f69edddce19a606659163The Android Open Source Project			/* First configure the MLME with the new legacy authentication type */
35764064216a8433360745f69edddce19a606659163The Android Open Source Project			pMlmeSm->legacyAuthType = AUTH_LEGACY_AUTO_SWITCH;
35864064216a8433360745f69edddce19a606659163The Android Open Source Project			/* Now configure the authentication module,
35964064216a8433360745f69edddce19a606659163The Android Open Source Project				Auto switch mode means start always with shared key, if fail move to open system. */
36064064216a8433360745f69edddce19a606659163The Android Open Source Project			pParam->paramType = AUTH_LEGACY_TYPE_PARAM;
36164064216a8433360745f69edddce19a606659163The Android Open Source Project			pParam->content.authLegacyAuthType = AUTH_LEGACY_SHARED_KEY;
36264064216a8433360745f69edddce19a606659163The Android Open Source Project			return auth_setParam(pMlmeSm->hAuth, pParam);
36364064216a8433360745f69edddce19a606659163The Android Open Source Project
36464064216a8433360745f69edddce19a606659163The Android Open Source Project		default:
36564064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_REPORT_ERROR(pMlmeSm->hReport, MLME_SM_MODULE_LOG, ("Set param, Params is not supported, 0x%x\n\n", pParam->content.mlmeLegacyAuthType));
36664064216a8433360745f69edddce19a606659163The Android Open Source Project			return PARAM_VALUE_NOT_VALID;
36764064216a8433360745f69edddce19a606659163The Android Open Source Project		}
36864064216a8433360745f69edddce19a606659163The Android Open Source Project/*		break;  - unreachable */
36964064216a8433360745f69edddce19a606659163The Android Open Source Project
37064064216a8433360745f69edddce19a606659163The Android Open Source Project	case MLME_RE_ASSOC_PARAM:
37164064216a8433360745f69edddce19a606659163The Android Open Source Project		pMlmeSm->reAssoc = pParam->content.mlmeReAssoc;
37264064216a8433360745f69edddce19a606659163The Android Open Source Project		break;
37364064216a8433360745f69edddce19a606659163The Android Open Source Project
37464064216a8433360745f69edddce19a606659163The Android Open Source Project	default:
37564064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_ERROR(pMlmeSm->hReport, MLME_SM_MODULE_LOG, ("Set param, Params is not supported, 0x%x\n\n", pParam->paramType));
37664064216a8433360745f69edddce19a606659163The Android Open Source Project		return PARAM_NOT_SUPPORTED;
37764064216a8433360745f69edddce19a606659163The Android Open Source Project	}
37864064216a8433360745f69edddce19a606659163The Android Open Source Project
37964064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
38064064216a8433360745f69edddce19a606659163The Android Open Source Project}
38164064216a8433360745f69edddce19a606659163The Android Open Source Project
38264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_getParam(TI_HANDLE			hMlmeSm,
38364064216a8433360745f69edddce19a606659163The Android Open Source Project						paramInfo_t			*pParam)
38464064216a8433360745f69edddce19a606659163The Android Open Source Project{
38564064216a8433360745f69edddce19a606659163The Android Open Source Project	mlme_t *pMlmeSm = (mlme_t *)hMlmeSm;
38664064216a8433360745f69edddce19a606659163The Android Open Source Project
38764064216a8433360745f69edddce19a606659163The Android Open Source Project	switch(pParam->paramType)
38864064216a8433360745f69edddce19a606659163The Android Open Source Project	{
38964064216a8433360745f69edddce19a606659163The Android Open Source Project	case MLME_LEGACY_TYPE_PARAM:
39064064216a8433360745f69edddce19a606659163The Android Open Source Project		pParam->content.mlmeLegacyAuthType = pMlmeSm->legacyAuthType;
39164064216a8433360745f69edddce19a606659163The Android Open Source Project		break;
39264064216a8433360745f69edddce19a606659163The Android Open Source Project
39364064216a8433360745f69edddce19a606659163The Android Open Source Project	case MLME_CAPABILITY_PARAM:
39464064216a8433360745f69edddce19a606659163The Android Open Source Project		pParam->content.mlmeLegacyAuthType = pMlmeSm->legacyAuthType;
39564064216a8433360745f69edddce19a606659163The Android Open Source Project		assoc_smCapBuild(pMlmeSm->hAssoc, &(pParam->content.siteMgrSiteCapability));
39664064216a8433360745f69edddce19a606659163The Android Open Source Project		break;
39764064216a8433360745f69edddce19a606659163The Android Open Source Project
39864064216a8433360745f69edddce19a606659163The Android Open Source Project    case MLME_BEACON_RECV:
39964064216a8433360745f69edddce19a606659163The Android Open Source Project        pParam->content.siteMgrTiWlanCounters.BeaconsRecv = pMlmeSm->BeaconsCounterPS;
40064064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
40164064216a8433360745f69edddce19a606659163The Android Open Source Project
40264064216a8433360745f69edddce19a606659163The Android Open Source Project	default:
40364064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_ERROR(pMlmeSm->hReport, MLME_SM_MODULE_LOG, ("Get param, Params is not supported, %d\n\n", pParam->content.mlmeLegacyAuthType));
40464064216a8433360745f69edddce19a606659163The Android Open Source Project		return PARAM_NOT_SUPPORTED;
40564064216a8433360745f69edddce19a606659163The Android Open Source Project	}
40664064216a8433360745f69edddce19a606659163The Android Open Source Project
40764064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
40864064216a8433360745f69edddce19a606659163The Android Open Source Project}
40964064216a8433360745f69edddce19a606659163The Android Open Source Project
41064064216a8433360745f69edddce19a606659163The Android Open Source Project/**
41164064216a8433360745f69edddce19a606659163The Android Open Source Project*
41264064216a8433360745f69edddce19a606659163The Android Open Source Project* mlme_Start - Start event for the MLME SM
41364064216a8433360745f69edddce19a606659163The Android Open Source Project*
41464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
41564064216a8433360745f69edddce19a606659163The Android Open Source Project*
41664064216a8433360745f69edddce19a606659163The Android Open Source Project* Start event for the MLME SM
41764064216a8433360745f69edddce19a606659163The Android Open Source Project*
41864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
41964064216a8433360745f69edddce19a606659163The Android Open Source Project*
42064064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hMlme - MLME SM context  \n
42164064216a8433360745f69edddce19a606659163The Android Open Source Project*
42264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
42364064216a8433360745f69edddce19a606659163The Android Open Source Project*
42464064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
42564064216a8433360745f69edddce19a606659163The Android Open Source Project*
42664064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa mlme_Stop, mlme_Recv
42764064216a8433360745f69edddce19a606659163The Android Open Source Project*/
42864064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_start(TI_HANDLE hMlme)
42964064216a8433360745f69edddce19a606659163The Android Open Source Project{
43064064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS 		status;
43164064216a8433360745f69edddce19a606659163The Android Open Source Project	mlme_t		*pHandle;
43264064216a8433360745f69edddce19a606659163The Android Open Source Project
43364064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle = (mlme_t*)hMlme;
43464064216a8433360745f69edddce19a606659163The Android Open Source Project
43564064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pHandle == NULL)
43664064216a8433360745f69edddce19a606659163The Android Open Source Project		return NOK;
43764064216a8433360745f69edddce19a606659163The Android Open Source Project
43864064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pHandle->legacyAuthType == AUTH_LEGACY_NONE)
43964064216a8433360745f69edddce19a606659163The Android Open Source Project		return NOK;
44064064216a8433360745f69edddce19a606659163The Android Open Source Project
44164064216a8433360745f69edddce19a606659163The Android Open Source Project	status = mlme_smEvent(&pHandle->currentState, MLME_SM_EVENT_START, pHandle);
44264064216a8433360745f69edddce19a606659163The Android Open Source Project
44364064216a8433360745f69edddce19a606659163The Android Open Source Project	return status;
44464064216a8433360745f69edddce19a606659163The Android Open Source Project}
44564064216a8433360745f69edddce19a606659163The Android Open Source Project
44664064216a8433360745f69edddce19a606659163The Android Open Source Project/**
44764064216a8433360745f69edddce19a606659163The Android Open Source Project*
44864064216a8433360745f69edddce19a606659163The Android Open Source Project* mlme_Stop - Stop event for the MLME SM
44964064216a8433360745f69edddce19a606659163The Android Open Source Project*
45064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
45164064216a8433360745f69edddce19a606659163The Android Open Source Project*
45264064216a8433360745f69edddce19a606659163The Android Open Source Project* Stop event for the MLME SM
45364064216a8433360745f69edddce19a606659163The Android Open Source Project*
45464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
45564064216a8433360745f69edddce19a606659163The Android Open Source Project*
45664064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hMlme - MLME SM context  \n
45764064216a8433360745f69edddce19a606659163The Android Open Source Project*
45864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
45964064216a8433360745f69edddce19a606659163The Android Open Source Project*
46064064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
46164064216a8433360745f69edddce19a606659163The Android Open Source Project*
46264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa mlme_Start, mlme_Recv
46364064216a8433360745f69edddce19a606659163The Android Open Source Project*/
46464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_stop(TI_HANDLE hMlme, disConnType_e disConnType, mgmtStatus_e reason)
46564064216a8433360745f69edddce19a606659163The Android Open Source Project{
46664064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS 		status;
46764064216a8433360745f69edddce19a606659163The Android Open Source Project	mlme_t		*pHandle;
46864064216a8433360745f69edddce19a606659163The Android Open Source Project
46964064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle = (mlme_t*)hMlme;
47064064216a8433360745f69edddce19a606659163The Android Open Source Project
47164064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pHandle->legacyAuthType == AUTH_LEGACY_NONE)
47264064216a8433360745f69edddce19a606659163The Android Open Source Project		return NOK;
47364064216a8433360745f69edddce19a606659163The Android Open Source Project
47464064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->disConnType = disConnType;
47564064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->disConnReason = reason;
47664064216a8433360745f69edddce19a606659163The Android Open Source Project
47764064216a8433360745f69edddce19a606659163The Android Open Source Project	status = mlme_smEvent(&pHandle->currentState, MLME_SM_EVENT_STOP, pHandle);
47864064216a8433360745f69edddce19a606659163The Android Open Source Project
47964064216a8433360745f69edddce19a606659163The Android Open Source Project	return status;
48064064216a8433360745f69edddce19a606659163The Android Open Source Project}
48164064216a8433360745f69edddce19a606659163The Android Open Source Project
48264064216a8433360745f69edddce19a606659163The Android Open Source Project
48364064216a8433360745f69edddce19a606659163The Android Open Source Project/**
48464064216a8433360745f69edddce19a606659163The Android Open Source Project*
48564064216a8433360745f69edddce19a606659163The Android Open Source Project* mlme_reportAuthStatus - Set a specific parameter to the MLME SM
48664064216a8433360745f69edddce19a606659163The Android Open Source Project*
48764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
48864064216a8433360745f69edddce19a606659163The Android Open Source Project*
48964064216a8433360745f69edddce19a606659163The Android Open Source Project* Set a specific parameter to the MLME SM.
49064064216a8433360745f69edddce19a606659163The Android Open Source Project*
49164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
49264064216a8433360745f69edddce19a606659163The Android Open Source Project*
49364064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hMlme - MLME SM context  \n
49464064216a8433360745f69edddce19a606659163The Android Open Source Project*  I/O - pParam - Parameter \n
49564064216a8433360745f69edddce19a606659163The Android Open Source Project*
49664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
49764064216a8433360745f69edddce19a606659163The Android Open Source Project*
49864064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
49964064216a8433360745f69edddce19a606659163The Android Open Source Project*
50064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa mlme_Start, mlme_Stop
50164064216a8433360745f69edddce19a606659163The Android Open Source Project*/
50264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_reportAuthStatus(TI_HANDLE hMlme, UINT16 status)
50364064216a8433360745f69edddce19a606659163The Android Open Source Project{
50464064216a8433360745f69edddce19a606659163The Android Open Source Project	mlme_t			*pHandle;
50564064216a8433360745f69edddce19a606659163The Android Open Source Project	paramInfo_t		param;
50664064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS       fStatus;
50764064216a8433360745f69edddce19a606659163The Android Open Source Project
50864064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle = (mlme_t*)hMlme;
50964064216a8433360745f69edddce19a606659163The Android Open Source Project
51064064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pHandle == NULL)
51164064216a8433360745f69edddce19a606659163The Android Open Source Project		return NOK;
51264064216a8433360745f69edddce19a606659163The Android Open Source Project
51364064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pHandle->legacyAuthType == AUTH_LEGACY_NONE)
51464064216a8433360745f69edddce19a606659163The Android Open Source Project		return NOK;
51564064216a8433360745f69edddce19a606659163The Android Open Source Project
51664064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->mlmeData.uStatusCode = status;
51764064216a8433360745f69edddce19a606659163The Android Open Source Project
51864064216a8433360745f69edddce19a606659163The Android Open Source Project	/* If status is successful */
51964064216a8433360745f69edddce19a606659163The Android Open Source Project	if (status == 0)
52064064216a8433360745f69edddce19a606659163The Android Open Source Project	{
52164064216a8433360745f69edddce19a606659163The Android Open Source Project		/* Mark a successful status - used for conn.c */
52264064216a8433360745f69edddce19a606659163The Android Open Source Project		pHandle->mlmeData.mgmtStatus = STATUS_SUCCESSFUL;
52364064216a8433360745f69edddce19a606659163The Android Open Source Project
52464064216a8433360745f69edddce19a606659163The Android Open Source Project		fStatus = mlme_smEvent(&pHandle->currentState, MLME_SM_EVENT_AUTH_SUCCESS, pHandle);
52564064216a8433360745f69edddce19a606659163The Android Open Source Project	}
52664064216a8433360745f69edddce19a606659163The Android Open Source Project	else
52764064216a8433360745f69edddce19a606659163The Android Open Source Project	{
52864064216a8433360745f69edddce19a606659163The Android Open Source Project		/* Now, if the MLME legacy auth type is AUTO_SWITCH, and the Auth legacy auth type is shared key,
52964064216a8433360745f69edddce19a606659163The Android Open Source Project			we configure the auth SM to open system, otherwise, this is really an authentication failure. */
53064064216a8433360745f69edddce19a606659163The Android Open Source Project		param.paramType = AUTH_LEGACY_TYPE_PARAM;
53164064216a8433360745f69edddce19a606659163The Android Open Source Project		auth_getParam(pHandle->hAuth, &param);
53264064216a8433360745f69edddce19a606659163The Android Open Source Project
53364064216a8433360745f69edddce19a606659163The Android Open Source Project		if ((pHandle->legacyAuthType == AUTH_LEGACY_AUTO_SWITCH) && (param.content.authLegacyAuthType ==  AUTH_LEGACY_SHARED_KEY))
53464064216a8433360745f69edddce19a606659163The Android Open Source Project		{
53564064216a8433360745f69edddce19a606659163The Android Open Source Project			param.content.authLegacyAuthType = AUTH_LEGACY_OPEN_SYSTEM;
53664064216a8433360745f69edddce19a606659163The Android Open Source Project			fStatus = auth_setParam(pHandle->hAuth, &param);
53764064216a8433360745f69edddce19a606659163The Android Open Source Project			fStatus = auth_start(pHandle->hAuth);
53864064216a8433360745f69edddce19a606659163The Android Open Source Project		}
53964064216a8433360745f69edddce19a606659163The Android Open Source Project		else
54064064216a8433360745f69edddce19a606659163The Android Open Source Project		{
54164064216a8433360745f69edddce19a606659163The Android Open Source Project			pHandle->mlmeData.mgmtStatus = STATUS_AUTH_REJECT;
54264064216a8433360745f69edddce19a606659163The Android Open Source Project			fStatus = mlme_smEvent(&pHandle->currentState, MLME_SM_EVENT_AUTH_FAIL, pHandle);
54364064216a8433360745f69edddce19a606659163The Android Open Source Project		}
54464064216a8433360745f69edddce19a606659163The Android Open Source Project	}
54564064216a8433360745f69edddce19a606659163The Android Open Source Project
54664064216a8433360745f69edddce19a606659163The Android Open Source Project	return fStatus;
54764064216a8433360745f69edddce19a606659163The Android Open Source Project}
54864064216a8433360745f69edddce19a606659163The Android Open Source Project
54964064216a8433360745f69edddce19a606659163The Android Open Source Project/**
55064064216a8433360745f69edddce19a606659163The Android Open Source Project*
55164064216a8433360745f69edddce19a606659163The Android Open Source Project* mlme_reportAssocStatus - Set a specific parameter to the MLME SM
55264064216a8433360745f69edddce19a606659163The Android Open Source Project*
55364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
55464064216a8433360745f69edddce19a606659163The Android Open Source Project*
55564064216a8433360745f69edddce19a606659163The Android Open Source Project* Set a specific parameter to the MLME SM.
55664064216a8433360745f69edddce19a606659163The Android Open Source Project*
55764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
55864064216a8433360745f69edddce19a606659163The Android Open Source Project*
55964064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hMlme - MLME SM context  \n
56064064216a8433360745f69edddce19a606659163The Android Open Source Project*  I/O - pParam - Parameter \n
56164064216a8433360745f69edddce19a606659163The Android Open Source Project*
56264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
56364064216a8433360745f69edddce19a606659163The Android Open Source Project*
56464064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
56564064216a8433360745f69edddce19a606659163The Android Open Source Project*
56664064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa mlme_Start, mlme_Stop
56764064216a8433360745f69edddce19a606659163The Android Open Source Project*/
56864064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_reportAssocStatus(TI_HANDLE hMlme, UINT16 status)
56964064216a8433360745f69edddce19a606659163The Android Open Source Project{
57064064216a8433360745f69edddce19a606659163The Android Open Source Project	mlme_t		*pHandle;
57164064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS   fStatus;
57264064216a8433360745f69edddce19a606659163The Android Open Source Project
57364064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle = (mlme_t*)hMlme;
57464064216a8433360745f69edddce19a606659163The Android Open Source Project
57564064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pHandle == NULL)
57664064216a8433360745f69edddce19a606659163The Android Open Source Project		return NOK;
57764064216a8433360745f69edddce19a606659163The Android Open Source Project
57864064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pHandle->legacyAuthType == AUTH_LEGACY_NONE)
57964064216a8433360745f69edddce19a606659163The Android Open Source Project		return NOK;
58064064216a8433360745f69edddce19a606659163The Android Open Source Project
58164064216a8433360745f69edddce19a606659163The Android Open Source Project	pHandle->mlmeData.uStatusCode = status;
58264064216a8433360745f69edddce19a606659163The Android Open Source Project
58364064216a8433360745f69edddce19a606659163The Android Open Source Project	/* If status is successful */
58464064216a8433360745f69edddce19a606659163The Android Open Source Project	if (status == 0)
58564064216a8433360745f69edddce19a606659163The Android Open Source Project	{
58664064216a8433360745f69edddce19a606659163The Android Open Source Project		pHandle->mlmeData.mgmtStatus = STATUS_SUCCESSFUL;
58764064216a8433360745f69edddce19a606659163The Android Open Source Project		fStatus = mlme_smEvent(&pHandle->currentState, MLME_SM_EVENT_ASSOC_SUCCESS, pHandle);
58864064216a8433360745f69edddce19a606659163The Android Open Source Project	} else
58964064216a8433360745f69edddce19a606659163The Android Open Source Project	{
59064064216a8433360745f69edddce19a606659163The Android Open Source Project		pHandle->mlmeData.mgmtStatus = STATUS_ASSOC_REJECT;
59164064216a8433360745f69edddce19a606659163The Android Open Source Project		fStatus = mlme_smEvent(&pHandle->currentState, MLME_SM_EVENT_ASSOC_FAIL, pHandle);
59264064216a8433360745f69edddce19a606659163The Android Open Source Project	}
59364064216a8433360745f69edddce19a606659163The Android Open Source Project
59464064216a8433360745f69edddce19a606659163The Android Open Source Project	return fStatus;
59564064216a8433360745f69edddce19a606659163The Android Open Source Project}
59664064216a8433360745f69edddce19a606659163The Android Open Source Project
59764064216a8433360745f69edddce19a606659163The Android Open Source Project
59864064216a8433360745f69edddce19a606659163The Android Open Source Project/**
59964064216a8433360745f69edddce19a606659163The Android Open Source Project*
60064064216a8433360745f69edddce19a606659163The Android Open Source Project* mlme_SetParam - Set a specific parameter to the MLME SM
60164064216a8433360745f69edddce19a606659163The Android Open Source Project*
60264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
60364064216a8433360745f69edddce19a606659163The Android Open Source Project*
60464064216a8433360745f69edddce19a606659163The Android Open Source Project* Set a specific parameter to the MLME SM.
60564064216a8433360745f69edddce19a606659163The Android Open Source Project*
60664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
60764064216a8433360745f69edddce19a606659163The Android Open Source Project*
60864064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hMlme - MLME SM context  \n
60964064216a8433360745f69edddce19a606659163The Android Open Source Project*  I/O - pParam - Parameter \n
61064064216a8433360745f69edddce19a606659163The Android Open Source Project*
61164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
61264064216a8433360745f69edddce19a606659163The Android Open Source Project*
61364064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
61464064216a8433360745f69edddce19a606659163The Android Open Source Project*
61564064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa mlme_Start, mlme_Stop
61664064216a8433360745f69edddce19a606659163The Android Open Source Project*/
61764064216a8433360745f69edddce19a606659163The Android Open Source Project
61864064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef REPORT_LOG
61964064216a8433360745f69edddce19a606659163The Android Open Source Project
62064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic char *mlmeSMStateDesc[MLME_SM_NUM_STATES] = {
62164064216a8433360745f69edddce19a606659163The Android Open Source Project		"MLME_SM_STATE_IDLE",
62264064216a8433360745f69edddce19a606659163The Android Open Source Project		"MLME_SM_STATE_AUTH_WAIT",
62364064216a8433360745f69edddce19a606659163The Android Open Source Project		"MLME_SM_STATE_ASSOC_WAIT",
62464064216a8433360745f69edddce19a606659163The Android Open Source Project		"MLME_SM_STATE_ASSOC"
62564064216a8433360745f69edddce19a606659163The Android Open Source Project	};
62664064216a8433360745f69edddce19a606659163The Android Open Source Project
62764064216a8433360745f69edddce19a606659163The Android Open Source Project	/* State machine inputs */
62864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic char *mlmeSMEventDesc[MLME_SM_NUM_EVENTS] = {
62964064216a8433360745f69edddce19a606659163The Android Open Source Project		"MLME_SM_EVENT_START",
63064064216a8433360745f69edddce19a606659163The Android Open Source Project		"MLME_SM_EVENT_STOP",
63164064216a8433360745f69edddce19a606659163The Android Open Source Project		"MLME_SM_EVENT_AUTH_SUCCESS",
63264064216a8433360745f69edddce19a606659163The Android Open Source Project		"MLME_SM_EVENT_AUTH_FAIL",
63364064216a8433360745f69edddce19a606659163The Android Open Source Project		"MLME_SM_EVENT_ASSOC_SUCCESS",
63464064216a8433360745f69edddce19a606659163The Android Open Source Project		"MLME_SM_EVENT_ASSOC_FAIL"
63564064216a8433360745f69edddce19a606659163The Android Open Source Project	};
63664064216a8433360745f69edddce19a606659163The Android Open Source Project
63764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
63864064216a8433360745f69edddce19a606659163The Android Open Source Project
63964064216a8433360745f69edddce19a606659163The Android Open Source Project
64064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_smEvent(UINT8 *currentState, UINT8 event, TI_HANDLE hMlme)
64164064216a8433360745f69edddce19a606659163The Android Open Source Project{
64264064216a8433360745f69edddce19a606659163The Android Open Source Project   mlme_t *pMlme = (mlme_t *)hMlme;
64364064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS 		status;
64464064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT8		nextState;
64564064216a8433360745f69edddce19a606659163The Android Open Source Project
64664064216a8433360745f69edddce19a606659163The Android Open Source Project	status = fsm_GetNextState(pMlme->pMlmeSm, *currentState, event, &nextState);
64764064216a8433360745f69edddce19a606659163The Android Open Source Project	if (status != OK)
64864064216a8433360745f69edddce19a606659163The Android Open Source Project	{
64964064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_ERROR(pMlme->hReport, MLME_SM_MODULE_LOG,
65064064216a8433360745f69edddce19a606659163The Android Open Source Project						  ("MLME_SM: ERROR - failed getting next state \n"));
65164064216a8433360745f69edddce19a606659163The Android Open Source Project
65264064216a8433360745f69edddce19a606659163The Android Open Source Project		return(NOK);
65364064216a8433360745f69edddce19a606659163The Android Open Source Project	}
65464064216a8433360745f69edddce19a606659163The Android Open Source Project
65564064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_SM(pMlme->hReport, MLME_SM_MODULE_LOG,
65664064216a8433360745f69edddce19a606659163The Android Open Source Project					 ("MLME_SM: <%s, %s> --> %s\n",
65764064216a8433360745f69edddce19a606659163The Android Open Source Project					  mlmeSMStateDesc[*currentState],
65864064216a8433360745f69edddce19a606659163The Android Open Source Project					  mlmeSMEventDesc[event],
65964064216a8433360745f69edddce19a606659163The Android Open Source Project					  mlmeSMStateDesc[nextState]));
66064064216a8433360745f69edddce19a606659163The Android Open Source Project
66164064216a8433360745f69edddce19a606659163The Android Open Source Project	status = fsm_Event(pMlme->pMlmeSm, currentState, event, (void *)pMlme);
66264064216a8433360745f69edddce19a606659163The Android Open Source Project
66364064216a8433360745f69edddce19a606659163The Android Open Source Project	return(status);
66464064216a8433360745f69edddce19a606659163The Android Open Source Project}
66564064216a8433360745f69edddce19a606659163The Android Open Source Project
66664064216a8433360745f69edddce19a606659163The Android Open Source Project/* state machine functions */
66764064216a8433360745f69edddce19a606659163The Android Open Source Project
66864064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_smStartIdle(mlme_t *pMlme)
66964064216a8433360745f69edddce19a606659163The Android Open Source Project{
67064064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS		status;
67164064216a8433360745f69edddce19a606659163The Android Open Source Project
67264064216a8433360745f69edddce19a606659163The Android Open Source Project	status = auth_start(pMlme->hAuth);
67364064216a8433360745f69edddce19a606659163The Android Open Source Project
67464064216a8433360745f69edddce19a606659163The Android Open Source Project	return status;
67564064216a8433360745f69edddce19a606659163The Android Open Source Project}
67664064216a8433360745f69edddce19a606659163The Android Open Source Project
67764064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_smClass3Idle(mlme_t *pMlme)
67864064216a8433360745f69edddce19a606659163The Android Open Source Project{
67964064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
68064064216a8433360745f69edddce19a606659163The Android Open Source Project}
68164064216a8433360745f69edddce19a606659163The Android Open Source Project
68264064216a8433360745f69edddce19a606659163The Android Open Source Project
68364064216a8433360745f69edddce19a606659163The Android Open Source Project
68464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_smAuthSuccessAuthWait(mlme_t *pMlme)
68564064216a8433360745f69edddce19a606659163The Android Open Source Project{
68664064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS		status;
68764064216a8433360745f69edddce19a606659163The Android Open Source Project
68864064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pMlme->reAssoc)
68964064216a8433360745f69edddce19a606659163The Android Open Source Project	{
69064064216a8433360745f69edddce19a606659163The Android Open Source Project		status = reassoc_start(pMlme->hAssoc);
69164064216a8433360745f69edddce19a606659163The Android Open Source Project	}
69264064216a8433360745f69edddce19a606659163The Android Open Source Project	else
69364064216a8433360745f69edddce19a606659163The Android Open Source Project	{
69464064216a8433360745f69edddce19a606659163The Android Open Source Project		status = assoc_start(pMlme->hAssoc);
69564064216a8433360745f69edddce19a606659163The Android Open Source Project	}
69664064216a8433360745f69edddce19a606659163The Android Open Source Project
69764064216a8433360745f69edddce19a606659163The Android Open Source Project	return status;
69864064216a8433360745f69edddce19a606659163The Android Open Source Project}
69964064216a8433360745f69edddce19a606659163The Android Open Source Project
70064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_smAuthFailAuthWait(mlme_t *pMlme)
70164064216a8433360745f69edddce19a606659163The Android Open Source Project{
70264064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS		status;
70364064216a8433360745f69edddce19a606659163The Android Open Source Project
70464064216a8433360745f69edddce19a606659163The Android Open Source Project	status = mlme_smReportStatus(pMlme);
70564064216a8433360745f69edddce19a606659163The Android Open Source Project
70664064216a8433360745f69edddce19a606659163The Android Open Source Project	return status;
70764064216a8433360745f69edddce19a606659163The Android Open Source Project}
70864064216a8433360745f69edddce19a606659163The Android Open Source Project
70964064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_smStopAssocWait(mlme_t *pMlme)
71064064216a8433360745f69edddce19a606659163The Android Open Source Project{
71164064216a8433360745f69edddce19a606659163The Android Open Source Project	mlme_stopAssocAndAuth(pMlme);
71264064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
71364064216a8433360745f69edddce19a606659163The Android Open Source Project}
71464064216a8433360745f69edddce19a606659163The Android Open Source Project
71564064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_smAssocSuccessAssocWait(mlme_t *pMlme)
71664064216a8433360745f69edddce19a606659163The Android Open Source Project{
71764064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS		status;
71864064216a8433360745f69edddce19a606659163The Android Open Source Project
71964064216a8433360745f69edddce19a606659163The Android Open Source Project	status = mlme_smReportStatus(pMlme);
72064064216a8433360745f69edddce19a606659163The Android Open Source Project
72164064216a8433360745f69edddce19a606659163The Android Open Source Project	return status;
72264064216a8433360745f69edddce19a606659163The Android Open Source Project}
72364064216a8433360745f69edddce19a606659163The Android Open Source Project
72464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_smAssocFailAssocWait(mlme_t *pMlme)
72564064216a8433360745f69edddce19a606659163The Android Open Source Project{
72664064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS		status;
72764064216a8433360745f69edddce19a606659163The Android Open Source Project
72864064216a8433360745f69edddce19a606659163The Android Open Source Project	status = mlme_smReportStatus(pMlme);
72964064216a8433360745f69edddce19a606659163The Android Open Source Project
73064064216a8433360745f69edddce19a606659163The Android Open Source Project	return status;
73164064216a8433360745f69edddce19a606659163The Android Open Source Project}
73264064216a8433360745f69edddce19a606659163The Android Open Source Project
73364064216a8433360745f69edddce19a606659163The Android Open Source Project
73464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_smStopAssoc(mlme_t *pMlme)
73564064216a8433360745f69edddce19a606659163The Android Open Source Project{
73664064216a8433360745f69edddce19a606659163The Android Open Source Project	mlme_stopAssocAndAuth(pMlme);
73764064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
73864064216a8433360745f69edddce19a606659163The Android Open Source Project}
73964064216a8433360745f69edddce19a606659163The Android Open Source Project
74064064216a8433360745f69edddce19a606659163The Android Open Source Project
74164064216a8433360745f69edddce19a606659163The Android Open Source Project
74264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_smNOP(mlme_t *pMlme)
74364064216a8433360745f69edddce19a606659163The Android Open Source Project{
74464064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
74564064216a8433360745f69edddce19a606659163The Android Open Source Project}
74664064216a8433360745f69edddce19a606659163The Android Open Source Project
74764064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_smActionUnexpected(mlme_t *pMlme)
74864064216a8433360745f69edddce19a606659163The Android Open Source Project{
74964064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
75064064216a8433360745f69edddce19a606659163The Android Open Source Project}
75164064216a8433360745f69edddce19a606659163The Android Open Source Project
75264064216a8433360745f69edddce19a606659163The Android Open Source Project/* local functions */
75364064216a8433360745f69edddce19a606659163The Android Open Source Project
75464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS mlme_smReportStatus(mlme_t *pMlme)
75564064216a8433360745f69edddce19a606659163The Android Open Source Project{
75664064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS		status;
75764064216a8433360745f69edddce19a606659163The Android Open Source Project
75864064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pMlme == NULL)
75964064216a8433360745f69edddce19a606659163The Android Open Source Project	{
76064064216a8433360745f69edddce19a606659163The Android Open Source Project		return NOK;
76164064216a8433360745f69edddce19a606659163The Android Open Source Project	}
76264064216a8433360745f69edddce19a606659163The Android Open Source Project
76364064216a8433360745f69edddce19a606659163The Android Open Source Project	status = conn_reportMlmeStatus(pMlme->hConn, pMlme->mlmeData.mgmtStatus, pMlme->mlmeData.uStatusCode);
76464064216a8433360745f69edddce19a606659163The Android Open Source Project
76564064216a8433360745f69edddce19a606659163The Android Open Source Project	return status;
76664064216a8433360745f69edddce19a606659163The Android Open Source Project}
76764064216a8433360745f69edddce19a606659163The Android Open Source Project
76864064216a8433360745f69edddce19a606659163The Android Open Source Project
76964064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef NO_HAL_VOB
77064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void mlme_logBeaconReceived(TI_HANDLE hMlme)
77164064216a8433360745f69edddce19a606659163The Android Open Source Project{
77264064216a8433360745f69edddce19a606659163The Android Open Source Project	mlme_beaconReceivedPrint(hMlme);
77364064216a8433360745f69edddce19a606659163The Android Open Source Project}
77464064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
77564064216a8433360745f69edddce19a606659163The Android Open Source Project
77664064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid mlme_stopAssocAndAuth(mlme_t *pMlme)
77764064216a8433360745f69edddce19a606659163The Android Open Source Project{
77864064216a8433360745f69edddce19a606659163The Android Open Source Project
77964064216a8433360745f69edddce19a606659163The Android Open Source Project	BOOL 		sendDeAuth;
78064064216a8433360745f69edddce19a606659163The Android Open Source Project	BOOL 		sendDisAssoc;
78164064216a8433360745f69edddce19a606659163The Android Open Source Project
78264064216a8433360745f69edddce19a606659163The Android Open Source Project	switch( pMlme->disConnType )
78364064216a8433360745f69edddce19a606659163The Android Open Source Project	{
78464064216a8433360745f69edddce19a606659163The Android Open Source Project	case DISCONN_TYPE_IMMEDIATE:
78564064216a8433360745f69edddce19a606659163The Android Open Source Project		sendDeAuth 	 = FALSE;
78664064216a8433360745f69edddce19a606659163The Android Open Source Project		sendDisAssoc = FALSE;
78764064216a8433360745f69edddce19a606659163The Android Open Source Project		break;
78864064216a8433360745f69edddce19a606659163The Android Open Source Project
78964064216a8433360745f69edddce19a606659163The Android Open Source Project	case DISCONN_TYPE_DISASSOC:
79064064216a8433360745f69edddce19a606659163The Android Open Source Project		sendDisAssoc = TRUE;
79164064216a8433360745f69edddce19a606659163The Android Open Source Project		sendDeAuth   = FALSE;
79264064216a8433360745f69edddce19a606659163The Android Open Source Project		break;
79364064216a8433360745f69edddce19a606659163The Android Open Source Project
79464064216a8433360745f69edddce19a606659163The Android Open Source Project	case DISCONN_TYPE_DEAUTH:
79564064216a8433360745f69edddce19a606659163The Android Open Source Project		sendDisAssoc = FALSE;
79664064216a8433360745f69edddce19a606659163The Android Open Source Project		sendDeAuth   = TRUE;
79764064216a8433360745f69edddce19a606659163The Android Open Source Project		break;
79864064216a8433360745f69edddce19a606659163The Android Open Source Project
79964064216a8433360745f69edddce19a606659163The Android Open Source Project	default:
80064064216a8433360745f69edddce19a606659163The Android Open Source Project		return;
80164064216a8433360745f69edddce19a606659163The Android Open Source Project	}
80264064216a8433360745f69edddce19a606659163The Android Open Source Project
80364064216a8433360745f69edddce19a606659163The Android Open Source Project	assoc_setDisAssocFlag(pMlme->hAssoc, sendDisAssoc);
80464064216a8433360745f69edddce19a606659163The Android Open Source Project	assoc_stop(pMlme->hAssoc);
80564064216a8433360745f69edddce19a606659163The Android Open Source Project
80664064216a8433360745f69edddce19a606659163The Android Open Source Project	auth_stop(pMlme->hAuth, sendDeAuth, pMlme->disConnReason );
80764064216a8433360745f69edddce19a606659163The Android Open Source Project
80864064216a8433360745f69edddce19a606659163The Android Open Source Project	/* If the dis association frame is not sent the MLME generate the event
80964064216a8433360745f69edddce19a606659163The Android Open Source Project	   by itself */
81064064216a8433360745f69edddce19a606659163The Android Open Source Project	if (( sendDisAssoc == FALSE) && (sendDeAuth==FALSE)) {
81164064216a8433360745f69edddce19a606659163The Android Open Source Project		conn_disConnFrameSentCBFunc(pMlme->hConn);
81264064216a8433360745f69edddce19a606659163The Android Open Source Project	}
81364064216a8433360745f69edddce19a606659163The Android Open Source Project}
81464064216a8433360745f69edddce19a606659163The Android Open Source Project/*****************************************************************************
81564064216a8433360745f69edddce19a606659163The Android Open Source Project**
81664064216a8433360745f69edddce19a606659163The Android Open Source Project** MLME messages builder/Parser
81764064216a8433360745f69edddce19a606659163The Android Open Source Project**
81864064216a8433360745f69edddce19a606659163The Android Open Source Project*****************************************************************************/
81964064216a8433360745f69edddce19a606659163The Android Open Source Project
82064064216a8433360745f69edddce19a606659163The Android Open Source Project
82164064216a8433360745f69edddce19a606659163The Android Open Source Project
82264064216a8433360745f69edddce19a606659163The Android Open Source Project
82364064216a8433360745f69edddce19a606659163The Android Open Source Project
82464064216a8433360745f69edddce19a606659163The Android Open Source Project
82564064216a8433360745f69edddce19a606659163The Android Open Source Project
826