1a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/*
2a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * qosMngr.c
3a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
43bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt * Copyright(c) 1998 - 2010 Texas Instruments. All rights reserved.
5a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * All rights reserved.
6a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
7a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * Redistribution and use in source and binary forms, with or without
8a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * modification, are permitted provided that the following conditions
9a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * are met:
10a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
11a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *  * Redistributions of source code must retain the above copyright
12a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    notice, this list of conditions and the following disclaimer.
13a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *  * Redistributions in binary form must reproduce the above copyright
14a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    notice, this list of conditions and the following disclaimer in
15a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    the documentation and/or other materials provided with the
16a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    distribution.
17a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *  * Neither the name Texas Instruments nor the names of its
18a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    contributors may be used to endorse or promote products derived
19a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    from this software without specific prior written permission.
20a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
21a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt */
33a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
34a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/** \file qosMngr.c
35a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *  \brief QOS module interface
36a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
37a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *  \see qosMngr.h
38a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt */
39a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
40a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/****************************************************************************************************/
41a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/*																									*/
42a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/*		MODULE:		qosMGr.c																	    */
43a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/*		PURPOSE:	QOS module interface.												            */
44a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/*                  This module handles the QOS manager configuration.	 							*/
45a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/*																						 			*/
46a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/****************************************************************************************************/
47a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#define __FILE_ID__  FILE_ID_74
48a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "report.h"
49a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "osApi.h"
50a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "paramOut.h"
51a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "siteMgrApi.h"
52a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "qosMngr.h"
53a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "qosMngr_API.h"
54a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "sme.h"
55a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "EvHandler.h"
56a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#ifdef XCC_MODULE_INCLUDED
57a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "XCCMngr.h"
58a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "XCCTSMngr.h"
59a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#endif
60a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "TWDriver.h"
61a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "DrvMainModules.h"
62a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "StaCap.h"
633bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt#include "roamingMngrApi.h"
64a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
65a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
66a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtextern int WMEQosTagToACTable[MAX_NUM_OF_802_1d_TAGS];
67a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
68a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/* Translate input AC to TID */
69a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtconst TI_UINT8 WMEQosAcToTid[MAX_NUM_OF_AC] = { 0, 2, 4, 6 };
70a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
71a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/* Translate input TID to the other TID of the same AC */
72a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtconst TI_UINT32 WMEQosMateTid[MAX_NUM_OF_802_1d_TAGS] = { 3, 2, 1, 0, 5, 4, 7, 6 };
73a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
74a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/* Used to indicate no user priority is assigned for AC */
75a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#define INACTIVE_USER_PRIORITY 0xFF
76a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
773bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt/* Used for TSPEC nominal fixed size */
783bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt#define FIXED_NOMINAL_MSDU_SIZE_MASK 0x8000
793bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt
80a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
81a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/********************************************************************************/
82a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/*						Internal functions prototypes.							*/
83a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/********************************************************************************/
84a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic void release_module(qosMngr_t *pQosMngr, TI_UINT32 initVec);
85a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic TI_STATUS verifyAndConfigTrafficParams(qosMngr_t *pQosMngr, TQueueTrafficParams *pQtrafficParams);
86a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic TI_STATUS verifyAndConfigQosParams(qosMngr_t *pQosMngr,TAcQosParams *pAcQosParams);
87a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic TI_STATUS getWMEInfoElement(qosMngr_t *pQosMngr,TI_UINT8 *pWMEie,TI_UINT8 *pLen);
88a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic TI_STATUS verifyWmeIeParams(qosMngr_t *pQosMngr,TI_UINT8 *pQosIeParams);
89a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic TI_STATUS updateACParams(qosMngr_t *pQosMngr,dot11_ACParameters_t *pAcParams);
90a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic TI_STATUS setWmeSiteParams(qosMngr_t *pQosMngr, TI_UINT8 *pQosIeParams);
91a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic void qosMngr_resetAdmCtrlParameters(TI_HANDLE hQosMngr);
92a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic TI_STATUS qosMngr_getCurrAcStatus(TI_HANDLE hQosMngr, OS_802_11_AC_UPSD_STATUS_PARAMS *pAcStatusParams);
93a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic void deleteTspecConfiguration(qosMngr_t *pQosMngr, TI_UINT8 acID);
94a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic void setNonQosAdmissionState(qosMngr_t *pQosMngr, TI_UINT8 acID);
95a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic void qosMngr_storeTspecCandidateParams (tspecInfo_t *pCandidateParams, OS_802_11_QOS_TSPEC_PARAMS *pTSPECParams, TI_UINT8 ac);
96a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic TI_STATUS qosMngr_SetPsRxStreaming (qosMngr_t *pQosMngr, TPsRxStreaming *pNewParams);
97a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
98a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/********************************************************************************
99a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *							qosMngr_create										*
100a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ********************************************************************************
101a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: QOS module creation function, called by the config mgr in creation phase.
102a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				performs the following:
103a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				- Allocate the QOS MNGR handle.
104a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hOs -			Handle to OS
105a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
106a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
107a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
108a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
109a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     Handle to the QOS MNGR module on success, NULL otherwise
110a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
111a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
112a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_HANDLE qosMngr_create(TI_HANDLE hOs)
113a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
114a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	qosMngr_t		*pQosMngr = NULL;
115a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_UINT32			initVec = 0;
116a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
117a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(!hOs)
118a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return NULL;
119a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
120a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* allocating the WME object */
121a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pQosMngr = os_memoryAlloc(hOs,sizeof(qosMngr_t));
122a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
123a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (pQosMngr == NULL)
124005bbf20350954d05c8a111d3f487d6fddb049bbDmitry Shmidt    {
125005bbf20350954d05c8a111d3f487d6fddb049bbDmitry Shmidt        return NULL;
126005bbf20350954d05c8a111d3f487d6fddb049bbDmitry Shmidt    }
127a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
128a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    os_memoryZero (hOs, pQosMngr, sizeof(qosMngr_t));
129a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
130a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	initVec |= (1 << QOS_MNGR_INIT_BIT_LOCAL_VECTOR);
131a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
132a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* create admission control object */
133a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pQosMngr->pTrafficAdmCtrl = trafficAdmCtrl_create(hOs);
134a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
135a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (pQosMngr->pTrafficAdmCtrl == NULL)
136a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
137a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		qosMngr_destroy(pQosMngr);
138a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return NULL;
139a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
140a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
141a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	initVec |= (1 << QOS_MNGR_INIT_BIT_ADM_CTRL);
142a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
143a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return(pQosMngr);
144a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
145a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
146a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
147a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_destroy							    *
148a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
149a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: QOS MNGR module destroy function, called by the config mgr in
150a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				 the destroy phase
151a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				 performs the following:
152a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				-	Free all memory alocated by the module
153a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
154a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	-	QOS Manager handle.
155a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
156a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
157a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
158a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
159a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
160a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
161a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS qosMngr_destroy(TI_HANDLE hQosMngr)
162a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
163a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_UINT32				   initVec;
164a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
165a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
166a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (pQosMngr == NULL)
167a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_OK;
168a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
169a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	initVec = 0xFFFF;
170a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    release_module(pQosMngr, initVec);
171a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
172a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return TI_OK;
173a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
174a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
175a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/***********************************************************************
176a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        release_module
177a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ***********************************************************************
178a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION:	Called by the destroy function or by the create function (on failure)
179a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				Go over the vector, for each bit that is set, release the corresponding module.
180a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
181a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      pQosMngr  -  QOS Mngr pointer.
182a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			initVec	  -	 Vector that contains a bit set for each module thah had been initiualized
183a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
184a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
185a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
186a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
187a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
188a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic void release_module(qosMngr_t *pQosMngr, TI_UINT32 initVec)
189a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
190a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
191a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (initVec & (1 << QOS_MNGR_INIT_BIT_ADM_CTRL))
192a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		trafficAdmCtrl_unload(pQosMngr->pTrafficAdmCtrl);
193a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
194a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (initVec & (1 << QOS_MNGR_INIT_BIT_LOCAL_VECTOR))
195a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		os_memoryFree(pQosMngr->hOs, pQosMngr, sizeof(qosMngr_t));
196a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
197a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	initVec = 0;
198a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
199a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
200a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
201a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_init		     						*
202a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
203a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: QOS Manager module configuration function, called by the config
204a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				mgr in configuration phase
205a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				performs the following:
206a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				-	Reset & initiailzes local variables
207a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				-	Init the handles to be used by the module
208a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
209a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      pStadHandles  - The driver modules handles
210a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
211a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
212a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
213a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
214a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     void
215a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
216a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtvoid qosMngr_init (TStadHandlesList *pStadHandles)
217a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
218a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    qosMngr_t *pQosMngr = (qosMngr_t *)(pStadHandles->hQosMngr);
219a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
220a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* init handles */
221a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->hOs              = pStadHandles->hOs;
222a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->hReport          = pStadHandles->hReport;
223a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->hSiteMgr         = pStadHandles->hSiteMgr;
224a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->hTWD             = pStadHandles->hTWD;
225a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->hTxCtrl          = pStadHandles->hTxCtrl;
226a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->hTxMgmtQ         = pStadHandles->hTxMgmtQ;
227a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->hMeasurementMngr = pStadHandles->hMeasurementMgr;
228a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->hSmeSm           = pStadHandles->hSme;
229a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->hCtrlData        = pStadHandles->hCtrlData;
230a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pQosMngr->hEvHandler       = pStadHandles->hEvHandler;
231a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pQosMngr->hXCCMgr          = pStadHandles->hXCCMngr;
232a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pQosMngr->hTimer           = pStadHandles->hTimer;
233a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->hStaCap          = pStadHandles->hStaCap;
2343bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt    pQosMngr->hRoamMng         = pStadHandles->hRoamingMngr;
235a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
236a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->isConnected = TI_FALSE;
237a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
238a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
239a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
240a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS qosMngr_SetDefaults (TI_HANDLE hQosMngr, QosMngrInitParams_t *pQosMngrInitParams)
241a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
242a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
243a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_UINT8   acID, uTid;
244a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_STATUS  status;
245a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
246a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* init params */
247a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->WMEEnable = pQosMngrInitParams->wmeEnable;
248a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->trafficAdmCtrlEnable = pQosMngrInitParams->trafficAdmCtrlEnable;
249a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->tagZeroConverHeader = pQosMngrInitParams->qosTagZeroConverHeader;
250a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pQosMngr->qosPacketBurstEnable = pQosMngrInitParams->PacketBurstEnable;
251a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pQosMngr->qosPacketBurstTxOpLimit = pQosMngrInitParams->PacketBurstTxOpLimit;
252a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pQosMngr->desiredPsMode = pQosMngrInitParams->desiredPsMode;
253a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->bCwFromUserEnable = pQosMngrInitParams->bCwFromUserEnable;
254a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->uDesireCwMin = pQosMngrInitParams->uDesireCwMin;
255a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->uDesireCwMax = pQosMngrInitParams->uDesireCwMax;
256a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pQosMngr->bEnableBurstMode = pQosMngrInitParams->bEnableBurstMode;
257a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
258a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
259a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->activeProtocol    = QOS_NONE;
260a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->WMESiteSupport    = TI_FALSE;
261a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
262a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pQosMngr->desiredMaxSpLen	= pQosMngrInitParams->desiredMaxSpLen;
263a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
264a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->voiceTspecConfigured = TI_FALSE;
265a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pQosMngr->videoTspecConfigured = TI_FALSE;
266a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->performTSPECRenegotiation = TI_FALSE;
267a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pQosMngr->TSPECNegotiationResultCallb = NULL;
268a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pQosMngr->TSPECNegotiationResultModule = NULL;
269a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
270a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* No template has been set for UPSD */
271a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->QosNullDataTemplateUserPriority = 0xFF;
272a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
273a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TWD_CfgBurstMode(pQosMngr->hTWD, pQosMngr->bEnableBurstMode);
274a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
275a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* configure admission control parameters */
276a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	qosMngr_resetAdmCtrlParameters(pQosMngr);
277a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
278a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	status = trafficAdmCtrl_config (pQosMngr->pTrafficAdmCtrl,
279a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                    pQosMngr->hTxMgmtQ,
280a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                    pQosMngr->hReport,
281a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                    pQosMngr->hOs,
282a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                    pQosMngr,
283a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                    pQosMngr->hCtrlData,
284a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                    pQosMngr->hXCCMgr,
285a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                    pQosMngr->hTimer,
286a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                    pQosMngr->hTWD,
287a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                    pQosMngr->hTxCtrl,
288a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                    &pQosMngrInitParams->trafficAdmCtrlInitParams);
289a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(status != TI_OK)
290a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
291a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
292a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/*
293a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	 * configure per AC traffic parameters
294a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	 */
295a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    for(acID = FIRST_AC_INDEX;acID < MAX_NUM_OF_AC; acID++)
296a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
297a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/*
298a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 * setting ac traffic params for TrafficCategoryCfg (TNET configuration
299a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 * The parameters can be changed in run-time, so they are saved in "init params"
300a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 * for 'disconnecting' .
301a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 * the parameters being set in setSite; "select" phase.
302a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt         */
303a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].QtrafficParams.queueID       = acID;
304a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].QtrafficParams.channelType   = CHANNEL_TYPE_EDCF;
305a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].QtrafficParams.tsid          = acID;
306a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].QtrafficParams.dot11EDCATableMSDULifeTime = 0;
307a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].QtrafficParams.psScheme      = PS_SCHEME_LEGACY;
308a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].QtrafficParams.ackPolicy     = pQosMngrInitParams->acAckPolicy[acID];
309a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].QtrafficParams.APSDConf[0]   = 0;
310a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].QtrafficParams.APSDConf[1]   = 0;
311a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
312a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
313a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/*
314a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 * Update the qTrafficInitParams as well
315a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 */
316a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		os_memoryCopy(pQosMngr->hOs,
317a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                      &pQosMngr->acParams[acID].QTrafficInitParams,
318a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                      &pQosMngr->acParams[acID].QtrafficParams,
319a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                      sizeof(TQueueTrafficParams));
320a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
321a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* will be config only after select */
322a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		verifyAndConfigTrafficParams(pQosMngr,&(pQosMngr->acParams[acID].QtrafficParams));
323a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
324a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/*
325a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 * setting ac QoS params for acQosParams (TNET configuration)
326a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 * The parameters can be changed in run-time, so they are saved in "init params"
327a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 * for 'disconnecting'.
328a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 * the parameters being set in setSite; "select" phase.
329a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt         */
330a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].acQosParams.ac        = acID;
331a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].acQosParams.aifsn     = AIFS_DEF;
332a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].acQosParams.cwMax     = pQosMngr->uDesireCwMax;
333a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].acQosParams.cwMin     = pQosMngr->uDesireCwMin;
334a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].acQosParams.txopLimit = QOS_TX_OP_LIMIT_DEF;
335a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].msduLifeTimeParam     = pQosMngrInitParams->MsduLifeTime[acID];
336a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
337a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* The protocol is QOS_NONE. If Packet Burst is Enable,            */
338a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* then, the BE queue is configured to the TxOP Limit of Packet burst */
339a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* (that is, 3 ms) and the txopContinuation is set to  qosPacketBurstEnable  */
340a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* The protocol is QOS_NONE. If Packet Burst is Enable,            */
341a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* then, the BE queue is configured to the TxOP Limit of Packet burst */
342a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* (that is, 3 ms) and the txopContinuation is set to  qosPacketBurstEnable  */
343a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
344a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if (acID == QOS_AC_BE)
345a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
346a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			if (pQosMngr->qosPacketBurstEnable==TI_TRUE)
347a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{
348a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pQosMngr->acParams[QOS_AC_BE].acQosParams.txopLimit = pQosMngr->qosPacketBurstTxOpLimit;
349a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			}
350a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			else
351a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{
352a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pQosMngr->acParams[QOS_AC_BE].acQosParams.txopLimit = QOS_TX_OP_LIMIT_DEF;
353a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			}
354a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
355a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
356a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/*
357a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 * Update the acQosInitParams as well
358a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 */
359a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		os_memoryCopy(pQosMngr->hOs,
360a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                      &pQosMngr->acParams[acID].acQosInitParams,
361a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                      &pQosMngr->acParams[acID].acQosParams,
362a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                      sizeof(TAcQosParams));
363a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
364a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* will be config only after select */
365a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(verifyAndConfigQosParams(hQosMngr,&(pQosMngr->acParams[acID].acQosParams)) != TI_OK)
366a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
367a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_SetDefault: failed on verifyAndConfigQosParams\n");
368a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
369a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
370a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /*
371a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 * setting ps mode per ac for protocol specific configuration.
372a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 */
373a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
374a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* validity check - allow to set the desired Ps mode per-AC to UPSD ONLY IF the station supports UPSD */
375a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        if ((pQosMngrInitParams->desiredPsMode == PS_SCHEME_UPSD_TRIGGER) && (pQosMngrInitParams->desiredWmeAcPsMode[acID] == PS_SCHEME_UPSD_TRIGGER))
376a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
377a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		        pQosMngr->acParams[acID].desiredWmeAcPsMode = PS_SCHEME_UPSD_TRIGGER;
378a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
379a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        else
380a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
381a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt               pQosMngr->acParams[acID].desiredWmeAcPsMode = PS_SCHEME_LEGACY;
382a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
383a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
384a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].currentWmeAcPsMode  = PS_SCHEME_LEGACY; /* default configuration is legacy PS  for all queues */
385a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
386a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* configure AC params to TxCtrl. */
387a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		txCtrlParams_setAcMsduLifeTime(pQosMngr->hTxCtrl, acID, pQosMngrInitParams->MsduLifeTime[acID]);
388a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		txCtrlParams_setAcAckPolicy(pQosMngr->hTxCtrl, acID, ACK_POLICY_LEGACY);
389a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
390a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* setting wme Ack Policy */
391a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].wmeAcAckPolicy = pQosMngrInitParams->acAckPolicy[acID];
392a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
393a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* Set admission state per AC for non-QoS and update the Tx module. */
394a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		setNonQosAdmissionState(pQosMngr, acID);
395a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
396a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
397a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* Reset all PS-Rx-Streaming configurations */
398a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    for (uTid = 0; uTid < MAX_NUM_OF_802_1d_TAGS; uTid++)
399a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
400a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pQosMngr->aTidPsRxStreaming[uTid].uTid     = uTid;
401a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pQosMngr->aTidPsRxStreaming[uTid].bEnabled = TI_FALSE;
402a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
403a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->uNumEnabledPsRxStreams = 0;
404a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
405a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* update Tx header convert mode */
406a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	txCtrlParams_setQosHeaderConverMode(pQosMngr->hTxCtrl, HDR_CONVERT_LEGACY);
407a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
408a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
409a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* 802.11n BA session setting */
410a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    for (uTid = 0; uTid < MAX_NUM_OF_802_1d_TAGS; ++uTid)
411a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
412a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pQosMngr->aBaPolicy[uTid] = pQosMngrInitParams->aBaPolicy[uTid];
413a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pQosMngr->aBaInactivityTimeout[uTid] = pQosMngrInitParams->aBaInactivityTimeout[uTid];
414a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
415a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
416a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
417a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
418a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TRACE0(pQosMngr->hReport, REPORT_SEVERITY_INFORMATION, "qosMngr_config : QoS configuration complete!");
419a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
420a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    return TI_OK;
421a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
422a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
423a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
424a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                    qosMngr_resetAdmCtrlParameters	                *
425a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
426a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: reset the admCtrl parameters
427a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
428a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	         -	Qos Manager handle.
429a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
430a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
431a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
432a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:
433a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
434a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
435a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
436a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtvoid qosMngr_resetAdmCtrlParameters(TI_HANDLE hQosMngr)
437a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
438a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_UINT8 acID;
439a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
440a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
441a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* reset admission control parameters */
442a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	for(acID = FIRST_AC_INDEX ; acID < MAX_NUM_OF_AC ; acID++)
443a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
444a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.currentTspecInfo[acID].AC = (EAcTrfcType)acID;
445a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.currentTspecInfo[acID].userPriority = INACTIVE_USER_PRIORITY; /* Setting invalid user Priority to prevent GET_TSPEC or DELETE */
446a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.currentTspecInfo[acID].nominalMsduSize = 0;
447a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pQosMngr->resourceMgmtTable.currentTspecInfo[acID].minimumPHYRate = 0;
448a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.currentTspecInfo[acID].meanDataRate = 0;
449a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.currentTspecInfo[acID].surplausBwAllowance = 0;
450a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.currentTspecInfo[acID].mediumTime = 0;
451a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.currentTspecInfo[acID].UPSDFlag = 0;
452a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.currentTspecInfo[acID].uMinimumServiceInterval = 0;
453a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.currentTspecInfo[acID].uMaximumServiceInterval = 0;
454a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.currentTspecInfo[acID].streamDirection = BI_DIRECTIONAL;
455a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.currentTspecInfo[acID].trafficAdmState = AC_NOT_ADMITTED;
456a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
457a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].AC = (EAcTrfcType)acID;
458a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].userPriority = INACTIVE_USER_PRIORITY; /* Setting invalid user Priority to prevent GET_TSPEC or DELETE */
459a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].nominalMsduSize = 0;
460a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].minimumPHYRate = 0;
461a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].meanDataRate = 0;
462a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].surplausBwAllowance = 0;
463a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].mediumTime = 0;
464a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].UPSDFlag = 0;
465a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].uMinimumServiceInterval = 0;
466a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].uMaximumServiceInterval = 0;
467a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].streamDirection = BI_DIRECTIONAL;
468a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].trafficAdmState = AC_NOT_ADMITTED;
469a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
470a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.totalAllocatedMediumTime = 0;
471a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
472a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
473a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
474a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
475a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
476a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_disconnect   			                *
477a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
478a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: the function is called upon driver disconnecting to reset all
479a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt             QOS parameters to init values.
480a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
481a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	-	Qos Manager handle.
482a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            bDisconnect - True if full AP disconnection, False if roaming to another AP
483a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
484a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
485a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
486a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
487a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
488a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
489a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS qosMngr_disconnect (TI_HANDLE hQosMngr, TI_BOOL bDisconnect)
490a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
491a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
492a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_UINT32  acID;
493a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_STATUS  status;
494a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
495a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(hQosMngr == NULL)
496a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_OK;
497a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
498a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pQosMngr->activeProtocol    = QOS_NONE;
499a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->WMESiteSupport    = TI_FALSE;
500a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
501a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* clear admission control params */
502a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	qosMngr_resetAdmCtrlParameters(pQosMngr);
503a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
504a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	trafficAdmCtrl_stop(pQosMngr->pTrafficAdmCtrl);
505a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
506a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	for(acID = FIRST_AC_INDEX;acID < MAX_NUM_OF_AC; acID++)
507a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
508a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* Disable medium time events in TX */
509a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		txCtrlParams_setAdmissionCtrlParams(pQosMngr->hTxCtrl, acID, 0 , 0, TI_FALSE);
510a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
511a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* The protocol after disconnect is QOS_NONE. If Packet Burst is Enabled, the BE queue InitParams
512a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		    is configured to the TxOP Limit of Packet burst  (that is, 3 ms) and the
513a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		    txopContinuation is set to qosPacketBurstEnable. */
514a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
515a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if (acID == QOS_AC_BE)
516a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
517a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			if (pQosMngr->qosPacketBurstEnable==TI_TRUE)
518a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{
519a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pQosMngr->acParams[QOS_AC_BE].acQosInitParams.txopLimit = pQosMngr->qosPacketBurstTxOpLimit;
520a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			}
521a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			else
522a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{
523a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pQosMngr->acParams[QOS_AC_BE].acQosInitParams.txopLimit = QOS_TX_OP_LIMIT_DEF;
524a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			}
525a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
526a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
527a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* Copy init traffic params (non-QoS defaults) to current traffic params, and config to HAL and TNET. */
528a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt       os_memoryCopy(pQosMngr->hOs,&(pQosMngr->acParams[acID].acQosParams),&(pQosMngr->acParams[acID].acQosInitParams),sizeof(TAcQosParams));
529a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
530a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/*
531a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 * Update the qTrafficInitParams as well
532a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 */
533a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	   os_memoryCopy(pQosMngr->hOs,&(pQosMngr->acParams[acID].QtrafficParams),&(pQosMngr->acParams[acID].QTrafficInitParams),sizeof(TQueueTrafficParams));
534a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
535a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
536a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	   pQosMngr->acParams[acID].currentWmeAcPsMode  = PS_SCHEME_LEGACY; /* default configuration is legacy PS  for all queues */
537a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
538a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	   /* configure Ack-Policy to TxCtrl (working in Non-QoS method). */
539a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	   txCtrlParams_setAcAckPolicy(pQosMngr->hTxCtrl, acID, ACK_POLICY_LEGACY);
540a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
541a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	   /* Set admission state per AC for non-QoS and update the Tx module. */
542a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	   setNonQosAdmissionState(pQosMngr, acID);
543a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
544a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
545a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/*
546a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	 * configure only BE AC
547a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	 * NOTE : this is done after "disconnect" or Init phase so those are defaults BE params
548a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	 */
549a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
550a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/*
551a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	 * configureQueue
552a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	 */
553a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	status = verifyAndConfigTrafficParams(hQosMngr,&(pQosMngr->acParams[QOS_AC_BE].QtrafficParams));
554a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (status != TI_OK)
555a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
556005bbf20350954d05c8a111d3f487d6fddb049bbDmitry Shmidt        TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_setSite:failed to init NON_QOS Queue Traffic parameters!!!\n\n");
557005bbf20350954d05c8a111d3f487d6fddb049bbDmitry Shmidt		return status;
558a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
559a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
560a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/*
561a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	 * configureAC
562a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	 */
563a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
564a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	status = verifyAndConfigQosParams(hQosMngr,&(pQosMngr->acParams[QOS_AC_BE].acQosParams));
565a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (status != TI_OK)
566a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
567a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_setSite:failed to init NON_QOS AC QoS parameters!!!\n\n");
568a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return status;
569a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
570a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
571a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* update Tx header convert mode */
572a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	txCtrlParams_setQosHeaderConverMode(pQosMngr->hTxCtrl, HDR_CONVERT_LEGACY);
573a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
574a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* If disconnect (not roaming), reset all PS-Rx-Streaming configurations. */
575a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    if (bDisconnect)
576a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
577a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TI_UINT32  uTid;
578a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        for (uTid = 0; uTid < MAX_NUM_OF_802_1d_TAGS; uTid++)
579a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
580a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TPsRxStreaming *pCurrTidParams = &pQosMngr->aTidPsRxStreaming[uTid];
581a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
582a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            if (pCurrTidParams->bEnabled)
583a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            {
584a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                pCurrTidParams->bEnabled = TI_FALSE;
585a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                TWD_CfgPsRxStreaming (pQosMngr->hTWD, pCurrTidParams, NULL, NULL);
586a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            }
587a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
588a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pQosMngr->uNumEnabledPsRxStreams = 0;
589a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
590a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
591a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* Update our internal state */
592a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->isConnected = TI_FALSE;
593a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
594a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* Mark that no Qos Null template is currently set into firmware */
595a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->QosNullDataTemplateUserPriority = 0xFF;
596a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
597a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->voiceTspecConfigured = TI_FALSE;
598a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->videoTspecConfigured = TI_FALSE;
599a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
600a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* Mark that no Qos Null template is currently set into firmware */
601a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->QosNullDataTemplateUserPriority = 0xFF;
602a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
603a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_INFORMATION, "qosMngr_disconnect : QoS disconnect complete!");
604a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
605a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#ifdef XCC_MODULE_INCLUDED
606a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	measurementMgr_stopTsMetrics(pQosMngr->hMeasurementMngr);
607a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#endif
608a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
609a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return TI_OK;
610a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
611a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
612a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
613a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
614a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_connect   			                *
615a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
616a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: the function is called upon driver connection to inform all
617a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt             the other modules about the voice mode
618a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
619a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	         -	Qos Manager handle.
620a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
621a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
622a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
623a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
624a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
625a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
626a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
627a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS qosMngr_connect(TI_HANDLE hQosMngr)
628a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
629a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
630a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    psPollTemplate_t        psPollTemplate;
631a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TSetTemplate            templateStruct;
632a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    QosNullDataTemplate_t   QosNullDataTemplate;
633a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_UINT8   acID,UPSDCnt=0;
634a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
635a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   if (pQosMngr->isConnected == TI_TRUE)
636a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   {
637a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_connect : Already connected !!!\n");
638a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt     return TI_OK;
639a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   }
640a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
641a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* Send PsPoll template to HAL */
642a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
643a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    templateStruct.ptr = (TI_UINT8 *)&psPollTemplate;
644a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    templateStruct.type = PS_POLL_TEMPLATE;
645a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    templateStruct.uRateMask = RATE_MASK_UNSPECIFIED;
646a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    buildPsPollTemplate(pQosMngr->hSiteMgr, &templateStruct);
647a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TWD_CmdTemplate (pQosMngr->hTWD, &templateStruct, NULL, NULL);
648a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
649a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* Update our internal state */
650a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->isConnected = TI_TRUE;
651a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
652a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* Set Qos-Null Data template into firmware */
653a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	for(acID = FIRST_AC_INDEX;acID < MAX_NUM_OF_AC; acID++)
654a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
655a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* Set QOS Null data template into the firmware (only if at least one AC is configured as UPSD )*/
656a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        if (pQosMngr->acParams[acID].currentWmeAcPsMode == PS_SCHEME_UPSD_TRIGGER)
657a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
658a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt           UPSDCnt++;
659a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt           if ( pQosMngr->acParams[acID].apInitAdmissionState != ADMISSION_REQUIRED )
660a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt           {
661a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pQosMngr->QosNullDataTemplateUserPriority = WMEQosAcToTid[acID];
662a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
663a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            templateStruct.ptr = (TI_UINT8 *)&QosNullDataTemplate;
664a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            templateStruct.type = QOS_NULL_DATA_TEMPLATE;
665a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            templateStruct.uRateMask = RATE_MASK_UNSPECIFIED;
666a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            buildQosNullDataTemplate(pQosMngr->hSiteMgr, &templateStruct,pQosMngr->QosNullDataTemplateUserPriority);
667a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TWD_CmdTemplate (pQosMngr->hTWD, &templateStruct, NULL, NULL);
668a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
669a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TRACE2(pQosMngr->hReport, REPORT_SEVERITY_INFORMATION, "setWmeSiteParams: Setting QOS Null data for UserPriority %d (belongs to AC %d)\n", WMEQosAcToTid[acID], acID);
670a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
671a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            break; /* Only need to set ONE template, so after setting it, we can exit the loop */
672a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt           }
673a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
674a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
675a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
676a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
677a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* If MAX_NUM_OF_AC (4) ACs were found as UPSD, but we still haven't configured any UP in the Qos Null data template, it must mean all ACs require admission - not valid*/
678a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    if ((pQosMngr->QosNullDataTemplateUserPriority == 0xFF) && (UPSDCnt == MAX_NUM_OF_AC))
679a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
680a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_connect : QOS Null Data template not set since all ACs require admission !!!\n");
681a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
682a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
683a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    return TI_OK;
684a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
685a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
686a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/**
687a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \fn     qosMngr_SetBaPolicies
688a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \brief  Set the BA session policies to the FW.
689a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
690a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \note
691a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \param  hQosMngr	- Qos Manager handle.
692a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \return None
693a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * \sa
694a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt */
695a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtvoid qosMngr_SetBaPolicies(TI_HANDLE hQosMngr)
696a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
697a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
698a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_BOOL     b11nEnable;
699a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_UINT32   uTidIndex;
700a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    paramInfo_t param;
701a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
702a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    StaCap_IsHtEnable(pQosMngr->hStaCap, &b11nEnable);
703a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
704a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    if (b11nEnable)
705a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
706a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
707a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        param.paramType = CTRL_DATA_CURRENT_BSSID_PARAM;
708a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        ctrlData_getParam(pQosMngr->hCtrlData, &param);
709a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
710a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* 802.11n BA session setting */
711a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        for (uTidIndex = 0; uTidIndex < MAX_NUM_OF_802_1d_TAGS; ++uTidIndex)
712a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
713a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            if ((pQosMngr->aBaPolicy[uTidIndex] == BA_POLICY_INITIATOR) ||
714a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                (pQosMngr->aBaPolicy[uTidIndex] == BA_POLICY_INITIATOR_AND_RECEIVER))
715a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            {
716a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                TWD_CfgSetBaInitiator (pQosMngr->hTWD,
717a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                       uTidIndex,
718a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                       TI_TRUE,
719a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                       param.content.ctrlDataCurrentBSSID,
720a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                       RX_QUEUE_WIN_SIZE,
721a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                       pQosMngr->aBaInactivityTimeout[uTidIndex]);
722a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            }
723a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
724a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            if ((pQosMngr->aBaPolicy[uTidIndex] == BA_POLICY_RECEIVER) ||
725a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                (pQosMngr->aBaPolicy[uTidIndex] == BA_POLICY_INITIATOR_AND_RECEIVER))
726a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            {
727a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                TWD_CfgSetBaReceiver (pQosMngr->hTWD,
728a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                      uTidIndex,
729a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                      TI_TRUE,
730a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                      param.content.ctrlDataCurrentBSSID,
731a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                      RX_QUEUE_WIN_SIZE);
732a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            }
733a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
734a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
735a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
736a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
737a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
738a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
739a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_evalSite					            *
740a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
741a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: Evaluate the site for the selction algorithm
742a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			 In case the station is configure to work in UPSD mode
743a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			 prefer a site that support UPSD and return 1.
744a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			 All other case return 0.
745a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
746a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      siteAPSDSupport - the UPSD capabilit of the site
747a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
748a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
749a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
750a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     1 - evaluation is good...
751a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			0 - evaluation can be better....
752a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
753a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
754a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_UINT8 qosMngr_evalSite(TI_HANDLE hQosMngr, TI_BOOL siteAPSDSupport)
755a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
756a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
757a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
758a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   if (pQosMngr->desiredPsMode == PS_SCHEME_UPSD_TRIGGER && siteAPSDSupport)
759a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   {
760a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return 1;
761a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   }
762a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
763a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   return 0;
764a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
765a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
766a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS qosMngr_getParamsActiveProtocol(TI_HANDLE hQosMngr, EQosProtocol *actProt)
767a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
768a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
769a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
770a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (pQosMngr == NULL)
771a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
772a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    *actProt = pQosMngr->activeProtocol;
773a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    return TI_OK;
774a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
775a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
776a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
777a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_getACparams           			    *
778a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
779a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: The function is an API for external modules to qet qos parameters
780a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
781a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	         -	Qos Manager handle.
782a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pParamInfo           -  qos parameters information.
783a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
784a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
785a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
786a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
787a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
788a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
789a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
790a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
791a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS qosMngr_getParams(TI_HANDLE  hQosMngr,paramInfo_t *pParamInfo)
792a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
793a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	EAcTrfcType           acID;
794a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
795a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
796a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosMngr == NULL)
797a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
798a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
799a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TRACE1(pQosMngr->hReport, REPORT_SEVERITY_INFORMATION, "qosMngr_getParams: %x\n", pParamInfo->paramType);
800a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
801a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	switch(pParamInfo->paramType)
802a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
803a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	case QOS_PACKET_BURST_ENABLE:
804a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pParamInfo->content.qosPacketBurstEnb = pQosMngr->qosPacketBurstEnable;
805a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		break;
806a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	case QOS_MNGR_CURRENT_PS_MODE:
807a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pParamInfo->content.currentPsMode = pQosMngr->currentPsMode;
808a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		break;
809a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
810a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    case QOS_MNGR_ACTIVE_PROTOCOL:
811a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt       pParamInfo->content.qosSiteProtocol = pQosMngr->activeProtocol;
812a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt       break;
813a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
814a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    case QOS_MNGR_GET_DESIRED_PS_MODE:
815a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pParamInfo->content.qosDesiredPsMode.uDesiredPsMode = pQosMngr->desiredPsMode;
816a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		for(acID = FIRST_AC_INDEX; acID < MAX_NUM_OF_AC ; acID++ )
817a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pParamInfo->content.qosDesiredPsMode.uDesiredWmeAcPsMode[acID] = pQosMngr->acParams[acID].desiredWmeAcPsMode;
818a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        break;
819a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
820a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	case QOS_MNGR_VOICE_RE_NEGOTIATE_TSPEC:
821a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* Check if voice call present. If so, store current TSPEC configuration */
822a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pParamInfo->content.TspecConfigure.voiceTspecConfigure = (TI_UINT8)pQosMngr->voiceTspecConfigured;
823a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pParamInfo->content.TspecConfigure.videoTspecConfigure = (TI_UINT8)pQosMngr->videoTspecConfigured;
824a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
825a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TRACE1(pQosMngr->hReport, REPORT_SEVERITY_INFORMATION, "qosMngr_getParams: QOS_MNGR_VOICE_RE_NEGOTIATE_TSPEC=%d\n", pQosMngr->voiceTspecConfigured);
826a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
827a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if (pQosMngr->voiceTspecConfigured == TI_TRUE)
828a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
829a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			OS_802_11_QOS_TSPEC_PARAMS *pTspecParams;
830a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			tspecInfo_t *pConfiguredParams;
831a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
832a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			/* Store voice TSPEC params - must be configured */
833a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pTspecParams = &pQosMngr->tspecRenegotiationParams[USER_PRIORITY_6];
834a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pConfiguredParams = &pQosMngr->resourceMgmtTable.candidateTspecInfo[USER_PRIORITY_6];
835a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
836a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pTspecParams->uUserPriority = pConfiguredParams->userPriority;
837a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pTspecParams->uNominalMSDUsize = pConfiguredParams->nominalMsduSize;
838a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pTspecParams->uMeanDataRate = pConfiguredParams->meanDataRate;
839a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pTspecParams->uMinimumPHYRate = pConfiguredParams->minimumPHYRate;
840a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pTspecParams->uSurplusBandwidthAllowance = pConfiguredParams->surplausBwAllowance;
841a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pTspecParams->uAPSDFlag = pConfiguredParams->UPSDFlag;
842a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pTspecParams->uMinimumServiceInterval = pConfiguredParams->uMinimumServiceInterval;
843a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pTspecParams->uMaximumServiceInterval = pConfiguredParams->uMaximumServiceInterval;
844a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pTspecParams->uMediumTime = pConfiguredParams->mediumTime;
845a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
846a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		else
847a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
848a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pQosMngr->tspecRenegotiationParams[USER_PRIORITY_6].uUserPriority = MAX_USER_PRIORITY;
849a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
850a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
851a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if (pQosMngr->videoTspecConfigured == TI_TRUE)
852a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
853a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			OS_802_11_QOS_TSPEC_PARAMS *pTspecParams;
854a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			tspecInfo_t *pConfiguredParams;
855a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
856a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			/* Store signalling TSPEC params if configured in user priority 4 */
857a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pTspecParams = &pQosMngr->tspecRenegotiationParams[USER_PRIORITY_4];
858a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pConfiguredParams = &pQosMngr->resourceMgmtTable.candidateTspecInfo[USER_PRIORITY_4];
859a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
860a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pTspecParams->uUserPriority = pConfiguredParams->userPriority;
861a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pTspecParams->uNominalMSDUsize = pConfiguredParams->nominalMsduSize;
862a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pTspecParams->uMeanDataRate = pConfiguredParams->meanDataRate;
863a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pTspecParams->uMinimumPHYRate = pConfiguredParams->minimumPHYRate;
864a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pTspecParams->uSurplusBandwidthAllowance = pConfiguredParams->surplausBwAllowance;
865a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pTspecParams->uAPSDFlag = pConfiguredParams->UPSDFlag;
866a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pTspecParams->uMinimumServiceInterval = pConfiguredParams->uMinimumServiceInterval;
867a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pTspecParams->uMaximumServiceInterval = pConfiguredParams->uMaximumServiceInterval;
868a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pTspecParams->uMediumTime = pConfiguredParams->mediumTime;
869a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			}
870a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			else
871a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{
872a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pQosMngr->tspecRenegotiationParams[USER_PRIORITY_4].uUserPriority = MAX_USER_PRIORITY;
873a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
874a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		break;
875a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
876a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	case QOS_MNGR_AC_STATUS:
877a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		switch (qosMngr_getCurrAcStatus (hQosMngr,&pParamInfo->content.qosCurrentAcStatus))
878a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
879a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   			case TI_OK:
880a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      			return TI_OK;
881a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			case NOT_CONNECTED:
882a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "Not connected to an AP...\n");
883a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				break;
884a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   			case NO_QOS_AP:
885a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "AP does not support QOS...\n");
886a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      			break;
887a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   			case TI_NOK:
888a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "Invalid parameter...\n");
889a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      			break;
890a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   			default:
891a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "Unknown return value...\n");
892a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      			break;
893a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   		}
894a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
895a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
896a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	case QOS_MNGR_OS_TSPEC_PARAMS:
897a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
898a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if( pParamInfo->content.qosTspecParameters.uUserPriority > MAX_USER_PRIORITY )
899a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
900a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_getTspecParams: userPriority > 7 -> Ignore !!!\n");
901a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return TI_NOK;
902a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
903a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
904a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(pQosMngr->isConnected == TI_FALSE)
905a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
906a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_getTspecParams: Not connected - Ignoring request !!!\n");
907a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return NOT_CONNECTED;
908a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
909a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
910a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(pQosMngr->activeProtocol == QOS_NONE)
911a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
912a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_getTspecParams: Not connected to QOS AP - Ignoring reqeust !!!\n");
913a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return NO_QOS_AP;
914a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
915a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
916a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		acID = (EAcTrfcType)WMEQosTagToACTable[pParamInfo->content.qosTspecParameters.uUserPriority];
917a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
918a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* check if signaling is already in process*/
919a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].trafficAdmState == AC_WAIT_ADMISSION)
920a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
921a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_requestAdmission: AC = %d , TSPEC Signaling is in progress -> Ignoring request !!!\n",acID);
922a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return TRAFIC_ADM_PENDING;
923a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
924a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
925a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	   /* check if UP is admitted or not */
926a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	   if(pQosMngr->resourceMgmtTable.currentTspecInfo[acID].userPriority != pParamInfo->content.qosTspecParameters.uUserPriority)
927a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt       {
928a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_getTspecParams: user priority is not admitted. -> Ignore !!!\n");
929a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 return USER_PRIORITY_NOT_ADMITTED;
930a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
931a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
932a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pParamInfo->content.qosTspecParameters.uMeanDataRate = pQosMngr->resourceMgmtTable.currentTspecInfo[acID].meanDataRate;
933a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pParamInfo->content.qosTspecParameters.uNominalMSDUsize = pQosMngr->resourceMgmtTable.currentTspecInfo[acID].nominalMsduSize;
934a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pParamInfo->content.qosTspecParameters.uAPSDFlag  = pQosMngr->resourceMgmtTable.currentTspecInfo[acID].UPSDFlag;
935a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pParamInfo->content.qosTspecParameters.uMinimumServiceInterval  = pQosMngr->resourceMgmtTable.currentTspecInfo[acID].uMinimumServiceInterval;
936a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pParamInfo->content.qosTspecParameters.uMaximumServiceInterval  = pQosMngr->resourceMgmtTable.currentTspecInfo[acID].uMaximumServiceInterval;
937a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pParamInfo->content.qosTspecParameters.uMinimumPHYRate  = pQosMngr->resourceMgmtTable.currentTspecInfo[acID].minimumPHYRate;
938a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pParamInfo->content.qosTspecParameters.uSurplusBandwidthAllowance  = pQosMngr->resourceMgmtTable.currentTspecInfo[acID].surplausBwAllowance;
939a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pParamInfo->content.qosTspecParameters.uMediumTime = pQosMngr->resourceMgmtTable.currentTspecInfo[acID].mediumTime;
940a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		break;
941a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
942a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	case QOS_MNGR_AP_QOS_PARAMETERS:  /* API GetAPQosParameters */
943a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		acID = (EAcTrfcType) pParamInfo->content.qosApQosParams.uAC;
944a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
945a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(acID > QOS_HIGHEST_AC_INDEX)
946a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
947a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_setParams :Error  trying to set invalid acId: %d param\n",pParamInfo->content.qosApQosParams.uAC);
948a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return (PARAM_VALUE_NOT_VALID);
949a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
950a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(pQosMngr->isConnected == TI_FALSE)
951a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
952a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "Not connected to an AP...\n");
953a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return NOT_CONNECTED;
954a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
955a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(pQosMngr->activeProtocol == QOS_NONE)
956a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
957a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "AP does not support QOS...\n");
958a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return NO_QOS_AP;
959a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
960a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
961a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pParamInfo->content.qosApQosParams.uAssocAdmissionCtrlFlag = pQosMngr->acParams[acID].apInitAdmissionState; /* admission flag */
962a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pParamInfo->content.qosApQosParams.uAIFS = pQosMngr->acParams[acID].acQosParams.aifsn;
963a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pParamInfo->content.qosApQosParams.uCwMin = (1 << pQosMngr->acParams[acID].acQosParams.cwMin)-1;
964a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pParamInfo->content.qosApQosParams.uCwMax = (1 << pQosMngr->acParams[acID].acQosParams.cwMax)-1;
965a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pParamInfo->content.qosApQosParams.uTXOPLimit = pQosMngr->acParams[acID].acQosParams.txopLimit << 5;
966a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
967a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		break;
968a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
969a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    case QOS_MNGR_PS_RX_STREAMING:
970a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
971a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TPsRxStreaming *pParams    = &pParamInfo->content.tPsRxStreaming;
972a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TI_UINT32       uTid       = pParams->uTid;
973a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TPsRxStreaming *pTidStream = &pQosMngr->aTidPsRxStreaming[uTid];
974a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
975a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            os_memoryCopy (pQosMngr->hOs, (void *)pParams, (void *)pTidStream, sizeof(TPsRxStreaming));
976a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
977a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		break;
978a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
979a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
980a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	default:
981a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt           TRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_getParams Error: unknown paramType 0x%x!\n",pParamInfo->paramType);
982a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return (PARAM_NOT_SUPPORTED);
983a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
984a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
985a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return TI_OK;
986a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
987a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
988a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
989a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_setParams              			    *
990a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
991a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: The function is an API for external modules to set qos parameters
992a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
993a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	         -	Qos Manager handle.
994a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pParamInfo           -  qos parameters information.
995a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
996a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
997a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
998a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
999a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
1000a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1001a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
1002a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1003a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS qosMngr_setParams(TI_HANDLE  hQosMngr,paramInfo_t *pParamInfo)
1004a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
1005a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
1006a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TTwdParamInfo		   param;
1007a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	EAcTrfcType           acID;
1008a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_STATUS              status;
1009a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1010a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosMngr == NULL)
1011a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
1012a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1013a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pParamInfo == NULL)
1014a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1015a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_setParams :Error trying to set NULL params!\n");
1016a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
1017a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1018a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1019a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE1(pQosMngr->hReport, REPORT_SEVERITY_INFORMATION, "qosMngr_setParams: %x\n", pParamInfo->paramType);
1020a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1021a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	switch(pParamInfo->paramType)
1022a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1023a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1024a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		case QOS_PACKET_BURST_ENABLE:
1025a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1026a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			if (pParamInfo->content.qosPacketBurstEnb > QOS_PACKET_BURST_ENABLE_MAX)
1027a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				return (PARAM_VALUE_NOT_VALID);
1028a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1029a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			/* No change */
1030a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			if (pParamInfo->content.qosPacketBurstEnb == pQosMngr->qosPacketBurstEnable)
1031a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				return TI_OK;
1032a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1033a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			/* Update the qosPacketBurstEnable parameter */
1034a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pQosMngr->qosPacketBurstEnable = pParamInfo->content.qosPacketBurstEnb;
1035a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1036a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			/* Packet burst enable changed from F to T */
1037a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			if (pParamInfo->content.qosPacketBurstEnb == TI_TRUE)
1038a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{
1039a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				/* Update the acTrafficInitParams of BE to the packet burst def*/
1040a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pQosMngr->acParams[QOS_AC_BE].acQosInitParams.txopLimit = pQosMngr->qosPacketBurstTxOpLimit;
1041a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1042a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				/* Update the acTrafficParams of BE and the hal to the packet burst def*/
1043a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				if (pQosMngr->activeProtocol == QOS_NONE)
1044a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				{
1045a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt					pQosMngr->acParams[QOS_AC_BE].acQosParams.txopLimit = pQosMngr->qosPacketBurstTxOpLimit;
1046a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt					/* verify the parameters and update the hal */
1047a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt					status = verifyAndConfigQosParams(hQosMngr,&(pQosMngr->acParams[QOS_AC_BE].acQosParams));
1048a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt					if(status != TI_OK)
1049a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt						return status;
1050a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				}
1051a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			}
1052a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1053a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			/* Packet burst enable changed from T to F*/
1054a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			else
1055a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{
1056a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				/* Update the acTrafficInitParams of BE to the AC def*/
1057a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pQosMngr->acParams[QOS_AC_BE].acQosInitParams.txopLimit = QOS_TX_OP_LIMIT_DEF;
1058a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1059a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				/* Update the acTrafficParams of BE  and the hal to the AC def*/
1060a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				if (pQosMngr->activeProtocol == QOS_NONE)
1061a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				{
1062a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt					pQosMngr->acParams[QOS_AC_BE].acQosParams.txopLimit = QOS_TX_OP_LIMIT_DEF;
1063a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt					/* verify the parameters and update the hal */
1064a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt					status = verifyAndConfigQosParams(hQosMngr,&(pQosMngr->acParams[QOS_AC_BE].acQosParams));
1065a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt					if(status != TI_OK)
1066a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt						return status;
1067a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				}
1068a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			}
1069a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			break;
1070a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1071a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		case QOS_MNGR_SET_SITE_PROTOCOL:
1072a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			if(pParamInfo->content.qosSiteProtocol == QOS_WME)
1073a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pQosMngr->WMESiteSupport = TI_TRUE;
1074a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			else
1075a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pQosMngr->WMESiteSupport = TI_FALSE;
1076a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		break;
1077a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1078a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1079a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    case QOS_MNGR_PS_RX_STREAMING:
1080a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return qosMngr_SetPsRxStreaming (pQosMngr, &pParamInfo->content.tPsRxStreaming);
1081a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1082a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1083a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	case QOS_MNGR_SET_OS_PARAMS:
1084a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if((EAcTrfcType)pParamInfo->content.qosOsParams.acID > QOS_HIGHEST_AC_INDEX)
1085a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
1086a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_setParams :Error  trying to set invalid acId: %d param\n",pParamInfo->content.qosOsParams.acID);
1087a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1088a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return (PARAM_VALUE_NOT_VALID);
1089a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
1090a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1091a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(((PSScheme_e)pParamInfo->content.qosOsParams.PSDeliveryProtocol != PS_SCHEME_LEGACY) && ((PSScheme_e)pParamInfo->content.qosOsParams.PSDeliveryProtocol != PS_SCHEME_UPSD_TRIGGER))
1092a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
1093a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_setParams :Error trying to set invalid PSDeliveryProtocol: %d param\n",pParamInfo->content.qosOsParams.PSDeliveryProtocol);
1094a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1095a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return (PARAM_VALUE_NOT_VALID);
1096a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
1097a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1098a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* config tidConf */
1099a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		acID = (EAcTrfcType)pParamInfo->content.qosOsParams.acID;
1100a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1101a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if( (pParamInfo->content.qosOsParams.PSDeliveryProtocol != pQosMngr->acParams[acID].desiredWmeAcPsMode) &&
1102a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			(pQosMngr->isConnected == TI_TRUE) )
1103a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
1104a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_setParams :Error  trying to set new PS protocol while connected");
1105a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1106a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return (PARAM_VALUE_NOT_VALID);
1107a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
1108a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1109a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1110a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* UPSD_FW open in upsd integration */
1111a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* set the current PS mode. In not connected state it is always Legacy since the currentPsMode only
1112a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 update after connection */
1113a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].QtrafficParams.psScheme = pQosMngr->acParams[acID].currentWmeAcPsMode;
1114a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].msduLifeTimeParam = pParamInfo->content.qosOsParams.MaxLifeTime;
1115a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1116a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		status = verifyAndConfigTrafficParams(pQosMngr,&(pQosMngr->acParams[acID].QtrafficParams));
1117a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(status != TI_OK)
1118a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return status;
1119a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1120a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* configure MSDU-Lifetime to TxCtrl. */
1121a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		txCtrlParams_setAcMsduLifeTime(pQosMngr->hTxCtrl, acID, pParamInfo->content.qosOsParams.MaxLifeTime);
1122a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1123a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* synch psPoll mode with qosMngr */
1124a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* Update the PsMode parameter */
1125a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].desiredWmeAcPsMode = (PSScheme_e) pParamInfo->content.qosOsParams.PSDeliveryProtocol;
1126a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		break;
1127a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1128a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	case QOS_MNGR_CURRENT_PS_MODE:
1129a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if( (pQosMngr->activeProtocol == QOS_WME) && (pQosMngr->desiredPsMode == PS_SCHEME_UPSD_TRIGGER) && (pParamInfo->content.currentPsMode == PS_SCHEME_UPSD_TRIGGER) )
1130a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pQosMngr->currentPsMode = PS_SCHEME_UPSD_TRIGGER;
1131a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		else
1132a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pQosMngr->currentPsMode = PS_SCHEME_LEGACY;
1133a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		break;
1134a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1135a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    case QOS_MNGR_ADD_TSPEC_REQUEST:
1136a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->TSPECNegotiationResultCallb = NULL;
1137a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->TSPECNegotiationResultModule = NULL;
1138a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		status = qosMngr_requestAdmission(hQosMngr,  &pParamInfo->content.qosAddTspecRequest);
1139a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		switch (status)
1140a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   		{
1141a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   			case TI_OK:
1142a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      			return TI_OK;
1143a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1144a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   			case TRAFIC_ADM_PENDING:
1145a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "Driver is still waiting for a response of previous request...\n");
1146a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      			break;
1147a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   			case AC_ALREADY_IN_USE:
1148a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "Other user priority from the same AC has already used a TSPEC...\n");
1149a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      			break;
1150a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   			case NOT_CONNECTED:
1151a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "Not connected to an AP...\n");
1152a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      			break;
1153a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   			case NO_QOS_AP:
1154a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "AP does not support QOS...\n");
1155a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      			break;
1156a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   			case TI_NOK:
1157a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "Invalid parameter...\n");
1158a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      			break;
1159a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   			default:
1160a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "Unknown return value...\n");
1161a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      			break;
1162a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   		}
1163a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
1164a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1165a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	case QOS_MNGR_RESEND_TSPEC_REQUEST:
1166a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_INFORMATION, "qosMngr_setParams: QOS_MNGR_RESEND_TSPEC_REQUEST\n");
1167a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->TSPECNegotiationResultCallb = (qosMngrCallb_t)pParamInfo->content.qosRenegotiateTspecRequest.callback;
1168a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->TSPECNegotiationResultModule = pParamInfo->content.qosRenegotiateTspecRequest.handler;
1169a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		status = qosMngr_requestAdmission(hQosMngr,  &pQosMngr->tspecRenegotiationParams[USER_PRIORITY_6]);
1170a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1171a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if ((status == TI_OK) && (pQosMngr->tspecRenegotiationParams[USER_PRIORITY_4].uUserPriority != MAX_USER_PRIORITY))
1172a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
1173a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			status = qosMngr_requestAdmission(hQosMngr,  &pQosMngr->tspecRenegotiationParams[USER_PRIORITY_4]);
1174a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
1175a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return (status);
1176a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1177a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    case QOS_MNGR_DEL_TSPEC_REQUEST:
1178a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		status = qosMngr_deleteAdmission(hQosMngr, &pParamInfo->content.qosDelTspecRequest);
1179a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		switch (status)
1180a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   		{
1181a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   			case TI_OK:
1182a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      			return TI_OK;
1183a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			case NOT_CONNECTED:
1184a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "Not connected to an AP...\n");
1185a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				break;
1186a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   			case NO_QOS_AP:
1187a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "AP does not support QOS...\n");
1188a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      			break;
1189a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   			case TI_NOK:
1190a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "Invalid parameter...\n");
1191a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      			break;
1192a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   			default:
1193a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "Unknown return value...\n");
1194a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      			break;
1195a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   		}
1196a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
1197a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1198a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	case QOS_SET_RX_TIME_OUT:
1199a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if (pParamInfo->content.rxTimeOut.UPSD == 0)
1200a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
1201a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, " :Error trying to set invalid zero timeout for UPSD \n");
1202a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				return PARAM_VALUE_NOT_VALID;
1203a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1204a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
1205a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->rxTimeOut.psPoll = (TI_UINT16)pParamInfo->content.rxTimeOut.psPoll;
1206a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->rxTimeOut.UPSD = (TI_UINT16)pParamInfo->content.rxTimeOut.UPSD;
1207a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1208a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1209a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* set RxTimeOut to FW */
1210a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		param.paramType	= TWD_RX_TIME_OUT_PARAM_ID;
1211a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		param.content.halCtrlRxTimeOut = pQosMngr->rxTimeOut;
1212a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		TWD_SetParam (pQosMngr->hTWD, &param);
1213a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		break;
1214a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1215a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	case QOS_MNGR_VOICE_RE_NEGOTIATE_TSPEC:
1216a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1217a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if( pParamInfo->content.TspecConfigure.voiceTspecConfigure || pParamInfo->content.TspecConfigure.videoTspecConfigure)
1218a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pQosMngr->performTSPECRenegotiation = TI_TRUE;
1219a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		else
1220a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pQosMngr->performTSPECRenegotiation = TI_FALSE;
1221a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1222a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE1(pQosMngr->hReport, REPORT_SEVERITY_INFORMATION, "qosMngr_setParams: QOS_MNGR_VOICE_RE_NEGOTIATE_TSPEC=%d\n", pQosMngr->performTSPECRenegotiation);
1223a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	   break;
1224a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1225a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	default:
1226a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt         TRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_getParams Error: unknown paramType 0x%x!\n",pParamInfo->paramType);
1227a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return (PARAM_NOT_SUPPORTED);
1228a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1229a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1230a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return TI_OK;
1231a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1232a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1233a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
1234a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1235a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
1236a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        verifyAndConfigTrafficParams  			    *
1237a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
1238a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: The function verifies the parameters set by qosMngr to
1239a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt             the queue traffic params in whalCtrl to be configured to TNET.
1240a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1241a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	         -	Qos Manager handle.
1242a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pAcTrafficParams     -  pointer to ac parameters.
1243a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1244a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
1245a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1246a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
1247a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1248a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
1249a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1250a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic TI_STATUS verifyAndConfigTrafficParams(qosMngr_t *pQosMngr, TQueueTrafficParams *pQtrafficParams)
1251a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
1252a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TTwdParamInfo		   param;
1253a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TQueueTrafficParams   queueTrafficParams;
1254a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1255a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQtrafficParams->queueID > MAX_NUM_OF_AC - 1)
1256a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
1257a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "verifyAndConfigTrafficParams :Error  trying to set invalid queueID: %d param",pQtrafficParams->queueID);
1258a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1259a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return (PARAM_VALUE_NOT_VALID);
1260a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1261a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1262a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1263a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQtrafficParams->channelType > MAX_CHANNEL_TYPE)
1264a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1265a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "verifyAndConfigTrafficParams :Error  trying to set invalid channelType: %d param",pQtrafficParams->channelType);
1266a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1267a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return (PARAM_VALUE_NOT_VALID);
1268a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1269a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1270a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1271a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* TBD */
1272a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQtrafficParams->tsid > AC_PARAMS_MAX_TSID)
1273a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1274a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "verifyAndConfigTrafficParams :Error  trying to set invalid tsid: %d param",pQtrafficParams->tsid);
1275a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1276a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return (PARAM_VALUE_NOT_VALID);
1277a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1278a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1279a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1280a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQtrafficParams->psScheme > MAX_PS_SCHEME)
1281a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1282a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "verifyAndConfigTrafficParams :Error  trying to set invalid psScheme: %d param",pQtrafficParams->psScheme);
1283a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1284a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return (PARAM_VALUE_NOT_VALID);
1285a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1286a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1287a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQtrafficParams->ackPolicy > MAX_ACK_POLICY)
1288a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1289a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "verifyAndConfigTrafficParams :Error  trying to set invalid ackPolicy: %d param",pQtrafficParams->ackPolicy);
1290a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1291a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return (PARAM_VALUE_NOT_VALID);
1292a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1293a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1294a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    queueTrafficParams = *pQtrafficParams;
1295a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1296a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	param.paramType = TWD_QUEUES_PARAM_ID;
1297a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* set parameters */
1298a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	param.content.pQueueTrafficParams = &queueTrafficParams;
1299a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1300a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return TWD_SetParam (pQosMngr->hTWD, &param);
1301a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
1302a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1303a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
1304a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        verifyAndConfigQosParams          		    *
1305a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
1306a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: The function verifies the parameters set by qosMngr to
1307a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt             the AC Qos params in whalCtrl to be configured to TNET.
1308a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1309a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	         -	Qos Manager handle.
1310a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pAcTrafficParams     -  pointer to ac parameters.
1311a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1312a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
1313a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1314a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
1315a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1316a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
1317a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1318a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic TI_STATUS  verifyAndConfigQosParams(qosMngr_t *pQosMngr,TAcQosParams *pAcQosParams)
1319a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
1320a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TAcQosParams          acQosParams;
1321a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1322a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pAcQosParams->ac >  MAX_NUM_OF_AC - 1 )
1323a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
1324a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "verifyAndConfigQosParams :Error  trying to set invalid ac : %d param",pAcQosParams->ac);
1325a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return (PARAM_VALUE_NOT_VALID);
1326a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1327a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /*  verification is unnecessary due to limited range of pAcQosParams->aifsn data type (TI_UINT8)
1328a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pAcQosParams->aifsn >  QOS_AIFS_MAX )
1329a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
1330a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "verifyAndConfigQosParams :Error  trying to set invalid aifsn : %d param",pAcQosParams->aifsn);
1331a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1332a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt       return (PARAM_VALUE_NOT_VALID);
1333a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1334a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    */
1335a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pAcQosParams->cwMax >  QOS_CWMAX_MAX )
1336a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
1337a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "verifyAndConfigQosParams :Error  trying to set invalid cwMax : %d param",pAcQosParams->cwMax);
1338a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return (PARAM_VALUE_NOT_VALID);
1339a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1340a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1341a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pAcQosParams->cwMin >  QOS_CWMIN_MAX )
1342a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
1343a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "verifyAndConfigQosParams :Error  trying to set invalid cwMax : %d param",pAcQosParams->cwMax);
1344a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return (PARAM_VALUE_NOT_VALID);
1345a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1346a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1347a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pAcQosParams->txopLimit >  QOS_TX_OP_LIMIT_MAX )
1348a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
1349a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "verifyAndConfigQosParams :Error  trying to set invalid txopLimit : %d param",pAcQosParams->txopLimit);
1350a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return (PARAM_VALUE_NOT_VALID);
1351a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1352a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1353a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	acQosParams.ac = pAcQosParams->ac;
1354a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	acQosParams.aifsn =  pAcQosParams->aifsn;
1355a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1356a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* convert to TNET units */
1357a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	acQosParams.cwMax =  (1 << pAcQosParams->cwMax) - 1; /* CwMax = 2^CwMax - 1*/
1358a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	acQosParams.cwMin =  (1 << pAcQosParams->cwMin) - 1; /* CwMin = 2^CwMin - 1*/
1359a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	acQosParams.txopLimit =  pAcQosParams->txopLimit << 5; /* in us */
1360a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1361a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return TWD_CfgAcParams (pQosMngr->hTWD, &acQosParams, NULL, NULL);
1362a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
1363a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1364a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
1365a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_GetWmeEnableFlag    			            *
1366a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
1367a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: The function is called in order to get the WME enable flag
1368a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt             of qosMngr according to init file desired mode.
1369a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt             called from StaCap_GetHtCapabilitiesIe.
1370a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1371a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	         -	Qos Manager handle.
1372a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            bWmeEnable           -  return flag.
1373a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1374a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
1375a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1376a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
1377a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1378a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
1379a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS qosMngr_GetWmeEnableFlag(TI_HANDLE hQosMngr, TI_BOOL *bWmeEnable)
1380a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
1381a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   	qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
1382a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1383a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	*bWmeEnable = pQosMngr->WMEEnable;
1384a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1385a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    return TI_OK;
1386a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
1387a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1388a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
1389a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_selectActiveProtocol    			            *
1390a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
1391a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: The function is called in order to set the active protocol in
1392a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt             the qosMngr according to site capabilities and desired mode.
1393a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt             called from SystemConfig.
1394a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1395a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:
1396a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1397a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
1398a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1399a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
1400a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1401a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
1402a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS qosMngr_selectActiveProtocol(TI_HANDLE  hQosMngr)
1403a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
1404a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   	qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
1405a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1406a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* decide qos protocol */
1407a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* NOTE: if both XCC qnd wme supported wme is chosen */
1408a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosMngr->WMESiteSupport && pQosMngr->WMEEnable)
1409a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1410a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->activeProtocol = QOS_WME;
1411a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1412a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	else
1413a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
1414a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->activeProtocol = QOS_NONE;
1415a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1416a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE1(pQosMngr->hReport, REPORT_SEVERITY_INFORMATION, " qosMngr_selectActiveProtocol() : pQosMngr->activeProtocol %d\n",pQosMngr->activeProtocol);
1417a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1418a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    return TI_OK;
1419a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
1420a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1421a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
1422a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_setAcPsDeliveryMode    			            *
1423a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
1424a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: The function is called in order to set the upsd/ps_poll according
1425a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt             to the desired and current upsd mode (per AC as well).
1426a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt             called from systemConfig.
1427a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1428a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:
1429a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1430a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
1431a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1432a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
1433a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1434a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
1435a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS qosMngr_setAcPsDeliveryMode(TI_HANDLE  hQosMngr)
1436a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
1437a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   TI_UINT8 acID;
1438a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
1439a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1440a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* in case the current PS mode is not UPSD  - the IE is empty */
1441a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosMngr->currentPsMode == PS_SCHEME_UPSD_TRIGGER)
1442a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1443a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		for(acID = FIRST_AC_INDEX;acID < MAX_NUM_OF_AC; acID++)
1444a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
1445a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			if(pQosMngr->acParams[acID].desiredWmeAcPsMode == PS_SCHEME_UPSD_TRIGGER)
1446a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{
1447a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pQosMngr->acParams[acID].currentWmeAcPsMode = PS_SCHEME_UPSD_TRIGGER;
1448a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			}
1449a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
1450a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
1451a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1452a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return TI_OK;
1453a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1454a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
1455a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1456a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1457a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
1458a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_getQosCapabiltyInfeElement    			            *
1459a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
1460a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: The function is called in order to build the Qos Capability
1461a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			 IE for the associatiomn request.
1462a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1463a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:
1464a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1465a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
1466a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1467a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
1468a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1469a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
1470a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS qosMngr_getQosCapabiltyInfeElement(TI_HANDLE  hQosMngr, TI_UINT8 *pQosIe, TI_UINT32 *pLen)
1471a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
1472a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
1473a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	dot11_QOS_CAPABILITY_IE_t *dot11_QOS_CAPABILITY_IE = (dot11_QOS_CAPABILITY_IE_t *)pQosIe;
1474a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_STATUS status = TI_OK;
1475a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_UINT8	extraIeLen = 0;
1476a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1477a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosMngr->activeProtocol == QOS_WME)
1478a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1479a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		dot11_QOS_CAPABILITY_IE->hdr[0]    = DOT11_QOS_CAPABILITY_ELE_ID;
1480a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		dot11_QOS_CAPABILITY_IE->hdr[1]   = DOT11_QOS_CAPABILITY_ELE_LEN;
1481a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1482a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* The default configuration of QoS info Field is legacy PS for all ACs */
1483a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		dot11_QOS_CAPABILITY_IE->QosInfoField = 0;
1484a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1485a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* in case the current PS mode is not UPSD  - the IE is empty */
1486a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(pQosMngr->currentPsMode == PS_SCHEME_UPSD_TRIGGER)
1487a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
1488a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			if(pQosMngr->acParams[QOS_AC_VO].currentWmeAcPsMode == PS_SCHEME_UPSD_TRIGGER)
1489a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{
1490a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				dot11_QOS_CAPABILITY_IE->QosInfoField |= (1 << AC_VO_APSD_FLAGS_SHIFT);
1491a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			}
1492a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			if(pQosMngr->acParams[QOS_AC_VI].currentWmeAcPsMode == PS_SCHEME_UPSD_TRIGGER)
1493a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{
1494a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				dot11_QOS_CAPABILITY_IE->QosInfoField |= (1 << AC_VI_APSD_FLAGS_SHIFT);
1495a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			}
1496a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1497a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			if(pQosMngr->acParams[QOS_AC_BK].currentWmeAcPsMode == PS_SCHEME_UPSD_TRIGGER)
1498a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{
1499a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				dot11_QOS_CAPABILITY_IE->QosInfoField |= (1 << AC_BK_APSD_FLAGS_SHIFT);
1500a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			}
1501a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1502a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			if(pQosMngr->acParams[QOS_AC_BE].currentWmeAcPsMode == PS_SCHEME_UPSD_TRIGGER)
1503a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{
1504a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				dot11_QOS_CAPABILITY_IE->QosInfoField |= (1 << AC_BE_APSD_FLAGS_SHIFT);
1505a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			}
1506a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1507a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			dot11_QOS_CAPABILITY_IE->QosInfoField |= (((pQosMngr->desiredMaxSpLen) & MAX_SP_LENGTH_MASK) << MAX_SP_LENGTH_SHIFT);
1508a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1509a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TRACE1(pQosMngr->hReport, REPORT_SEVERITY_INFORMATION, "dot11_QOS_CAPABILITY_IE->QosInfoField = 0x%x\n",dot11_QOS_CAPABILITY_IE->QosInfoField);
1510a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
1511a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1512a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		*pLen = dot11_QOS_CAPABILITY_IE->hdr[1] + sizeof(dot11_eleHdr_t);
1513a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1514a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#ifdef XCC_MODULE_INCLUDED
1515a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* If required, add XCC info-elements to the association request packets */
1516a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if (pQosMngr->performTSPECRenegotiation == TI_TRUE)
1517a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
1518a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TRACE0(pQosMngr->hReport, REPORT_SEVERITY_INFORMATION, "qosMngr_getQosCapabiltyInfeElement: performing TSPEC renegotiation\n");
1519a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1520a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			status = XCCMngr_getXCCQosIElements(pQosMngr->hXCCMgr, (pQosIe+(*pLen)), &extraIeLen);
1521a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
1522a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#endif
1523a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		*pLen += extraIeLen;
1524a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1525a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	else
1526a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1527a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		*pLen = 0;
1528a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1529a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1530a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return status;
1531a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1532a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
1533a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
1534a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_assocReqBuild    			            *
1535a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
1536a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: The function is called in order to build the assocReq IE for
1537a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt             the current site QOS protocol.
1538a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1539a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	         -	Qos Manager handle.
1540a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1541a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
1542a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1543a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
1544a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1545a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
1546a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1547a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS qosMngr_assocReqBuild(TI_HANDLE  hQosMngr, TI_UINT8 *pQosIe, TI_UINT32 *pLen)
1548a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
1549a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
1550a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_STATUS		status;
1551a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_UINT8 temp;
1552a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1553a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1554a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosMngr == NULL)
1555a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1556a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		*pLen = 0;
1557a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_OK;
1558a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1559a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1560a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* building assocReq frame */
1561a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	switch(pQosMngr->activeProtocol)
1562a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1563a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	case QOS_WME:
1564a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		status = getWMEInfoElement(pQosMngr,pQosIe,&temp);
1565a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if (status !=TI_OK)
1566a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
1567a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			*pLen = 0;
1568a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
1569a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		*pLen = temp;
1570a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		break;
1571a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1572a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	case QOS_NONE:
1573a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			*pLen = 0;
1574a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return TI_OK;
1575a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1576a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	default:
1577a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			*pLen = 0;
1578a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		break;
1579a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1580a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1581a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return TI_OK;
1582a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
1583a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1584a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
1585a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        getWMEInfoElement     			            *
1586a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
1587a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: building QOS_WME IE.
1588a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1589a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	         -	Qos Manager handle.
1590a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1591a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
1592a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1593a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
1594a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1595a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
1596a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1597a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic TI_STATUS getWMEInfoElement(qosMngr_t *pQosMngr,TI_UINT8 *pWMEie,TI_UINT8 *pLen)
1598a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
1599a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	dot11_WME_IE_t *pDot11_WME_IE = (dot11_WME_IE_t *)pWMEie;
1600a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1601a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pDot11_WME_IE->hdr[0]         = DOT11_WME_ELE_ID;
1602a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pDot11_WME_IE->hdr[1]        = DOT11_WME_ELE_LEN;
1603a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pDot11_WME_IE->OUI[0]            = 0x00;
1604a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pDot11_WME_IE->OUI[1]            = 0x50;
1605a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pDot11_WME_IE->OUI[2]            = 0xf2;
1606a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pDot11_WME_IE->OUIType           = dot11_WME_OUI_TYPE;
1607a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pDot11_WME_IE->OUISubType        = dot11_WME_OUI_SUB_TYPE_IE;
1608a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pDot11_WME_IE->version           = dot11_WME_VERSION;
1609a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pDot11_WME_IE->ACInfoField       = 0;
1610a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1611a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosMngr->currentPsMode == PS_SCHEME_UPSD_TRIGGER)
1612a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1613a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(pQosMngr->acParams[QOS_AC_VO].currentWmeAcPsMode == PS_SCHEME_UPSD_TRIGGER)
1614a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
1615a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pDot11_WME_IE->ACInfoField |= (1 << AC_VO_APSD_FLAGS_SHIFT);
1616a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
1617a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(pQosMngr->acParams[QOS_AC_VI].currentWmeAcPsMode == PS_SCHEME_UPSD_TRIGGER)
1618a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
1619a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pDot11_WME_IE->ACInfoField |= (1 << AC_VI_APSD_FLAGS_SHIFT);
1620a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
1621a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1622a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(pQosMngr->acParams[QOS_AC_BK].currentWmeAcPsMode == PS_SCHEME_UPSD_TRIGGER)
1623a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
1624a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pDot11_WME_IE->ACInfoField |= (1 << AC_BK_APSD_FLAGS_SHIFT);
1625a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
1626a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1627a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(pQosMngr->acParams[QOS_AC_BE].currentWmeAcPsMode == PS_SCHEME_UPSD_TRIGGER)
1628a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
1629a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pDot11_WME_IE->ACInfoField |= (1 << AC_BE_APSD_FLAGS_SHIFT);
1630a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
1631a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1632a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pDot11_WME_IE->ACInfoField |= (((pQosMngr->desiredMaxSpLen) & MAX_SP_LENGTH_MASK) << MAX_SP_LENGTH_SHIFT);
1633a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1634a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1635a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	*pLen = pDot11_WME_IE->hdr[1] + sizeof(dot11_eleHdr_t);
1636a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1637a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return TI_OK;
1638a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1639a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
1640a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1641a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
1642a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_checkTspecRenegResults		        *
1643a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
1644a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: The function is called upon association response to check
1645a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            Tspec renegotiation results
1646a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1647a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	  -	Qos Manager handle.
1648a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            assocRsp      -  pointer to received IE parameters received
1649a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			                 in association response.
1650a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
1651a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1652a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     -
1653a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1654a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
1655a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtvoid qosMngr_checkTspecRenegResults(TI_HANDLE hQosMngr, assocRsp_t *assocRsp)
1656a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
1657a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	tspecInfo_t	tspecInfo;
1658a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
1659a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#ifdef XCC_MODULE_INCLUDED
1660a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_UINT32 acCount;
1661a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#endif
1662a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1663a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE2(pQosMngr->hReport, REPORT_SEVERITY_INFORMATION, "qosMngr_checkTspecRenegResults: performTSPECRenegotiation = %d, tspecParams received= %x\n",		pQosMngr->performTSPECRenegotiation, assocRsp->tspecVoiceParameters);
1664a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1665a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (pQosMngr->performTSPECRenegotiation != TI_TRUE)
1666a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1667a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* If no re-negotiation was requested, no parsing shall be done */
1668a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#ifdef XCC_MODULE_INCLUDED
1669a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		measurementMgr_disableTsMetrics(pQosMngr->hMeasurementMngr, MAX_NUM_OF_AC);
1670a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#endif
1671a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return;
1672a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1673a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1674a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if ( (assocRsp->tspecVoiceParameters == NULL) && (assocRsp->tspecSignalParameters == NULL) )
1675a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1676a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* The renegotiation request was ignored - update QoS Manager database */
1677a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		qosMngr_setAdmissionInfo(pQosMngr, USER_PRIORITY_6,
1678a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt								 &pQosMngr->resourceMgmtTable.candidateTspecInfo[USER_PRIORITY_6],
1679a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt								 STATUS_TRAFFIC_ADM_REQUEST_REJECT);
1680a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1681a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if (pQosMngr->tspecRenegotiationParams[USER_PRIORITY_4].uUserPriority != MAX_USER_PRIORITY)
1682a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
1683a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			qosMngr_setAdmissionInfo(pQosMngr, USER_PRIORITY_4,
1684a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt									 &pQosMngr->resourceMgmtTable.candidateTspecInfo[USER_PRIORITY_4],
1685a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt									 STATUS_TRAFFIC_ADM_REQUEST_REJECT);
1686a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
1687a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#ifdef XCC_MODULE_INCLUDED
1688a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        measurementMgr_disableTsMetrics(pQosMngr->hMeasurementMngr, MAX_NUM_OF_AC);
1689a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#endif
1690a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return;
1691a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1692a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1693a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1694a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (assocRsp->tspecVoiceParameters != NULL)
1695a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1696a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* The renogitaion was performed - update QoS Manager database */
1697a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pQosMngr->voiceTspecConfigured = TI_TRUE;
1698a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	trafficAdmCtrl_parseTspecIE(&tspecInfo, assocRsp->tspecVoiceParameters);
1699a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1700a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	qosMngr_setAdmissionInfo(pQosMngr, tspecInfo.AC, &tspecInfo, STATUS_TRAFFIC_ADM_REQUEST_ACCEPT);
1701a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1702a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1703a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (assocRsp->tspecSignalParameters != NULL)
1704a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1705a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* Signal TSPEC was re-negotiated as well */
1706a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->videoTspecConfigured = TI_TRUE;
1707a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		trafficAdmCtrl_parseTspecIE(&tspecInfo, assocRsp->tspecSignalParameters);
1708a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		qosMngr_setAdmissionInfo(pQosMngr, tspecInfo.AC, &tspecInfo, STATUS_TRAFFIC_ADM_REQUEST_ACCEPT);
1709a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1710a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	else if (pQosMngr->tspecRenegotiationParams[USER_PRIORITY_4].uUserPriority != MAX_USER_PRIORITY)
1711a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1712a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* Signal TSPEC was not re-negotiated although requested to - ERROR */
1713005bbf20350954d05c8a111d3f487d6fddb049bbDmitry Shmidt        TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_setSite: Signal TSPEC was not re-negotiated while voice was \n");
1714a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		qosMngr_setAdmissionInfo(pQosMngr, USER_PRIORITY_4,
1715a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt								 &pQosMngr->resourceMgmtTable.candidateTspecInfo[USER_PRIORITY_4],
1716a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt								 STATUS_TRAFFIC_ADM_REQUEST_REJECT);
1717a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1718a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1719a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#ifdef XCC_MODULE_INCLUDED
1720a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* If XCC IEs are present for one or more ACs, update other modules with received parameters */
1721a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	for (acCount = 0; acCount < MAX_NUM_OF_AC; acCount++)
1722a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1723a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		XCCMngr_setXCCQoSParams(pQosMngr->hXCCMgr, &assocRsp->XCCIEs[acCount], acCount);
1724a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1725a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#endif
1726a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
1727a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1728a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1729a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
1730a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_setSite        			            *
1731a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
1732a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: The function is called upon association response to set site
1733a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt             parameters.
1734a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1735a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	  -	Qos Manager handle.
1736a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            assocRsp      -  pointer to received IE parameters received
1737a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			                 in association response.
1738a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
1739a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1740a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
1741a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1742a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
1743a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS qosMngr_setSite(TI_HANDLE hQosMngr, assocRsp_t *assocRsp)
1744a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
1745a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
1746a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_STATUS  status;
1747a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1748a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(hQosMngr == NULL)
1749a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return TI_NOK;
1750a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1751a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* checking active protocol */
1752a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	switch(pQosMngr->activeProtocol)
1753a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1754a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		case QOS_WME:
1755a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			/* verify QOS protocol received in association response */
1756a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			status = verifyWmeIeParams(pQosMngr, (TI_UINT8 *)assocRsp->WMEParams);
1757a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			if(status != TI_OK)
1758a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{
1759a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                pQosMngr->activeProtocol = QOS_NONE;
1760a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_setSite: setting active protocol QOS_WME params with non QOS_WME IE params frame, setting active protocol back to NONE \n");
1761005bbf20350954d05c8a111d3f487d6fddb049bbDmitry Shmidt                status = qosMngr_setSite(hQosMngr, assocRsp);
1762005bbf20350954d05c8a111d3f487d6fddb049bbDmitry Shmidt                return status;
1763a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			}
1764a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1765a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            status = setWmeSiteParams(pQosMngr, (TI_UINT8 *)assocRsp->WMEParams);
1766a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			if (status != TI_OK)
1767a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{
1768a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                pQosMngr->activeProtocol = QOS_NONE;
1769a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "Warning: qosMngr_setSite-> failed to set AC QOS_WME parameters!!! , setting active protocol back to NONE\n");
1770a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                return TI_NOK;
1771a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			}
1772a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			/* update siteMgr with recevied params */
1773a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			status = siteMgr_setWMEParamsSite(pQosMngr->hSiteMgr, assocRsp->WMEParams);
1774a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			if (status != TI_OK)
1775a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{
1776a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                pQosMngr->activeProtocol = QOS_NONE;
1777a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_setSite:failed to init QOS_WME parameters!!! , setting active protocol back to NONE\n\n");
1778a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                return TI_NOK;
1779a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			}
1780a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1781a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			break;
1782a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1783a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	case QOS_NONE:
1784a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1785a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			/* Check if the packet burst is enable, if it is,
1786a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			should update the BE parames and the hal to the packet burst def */
1787a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			if (pQosMngr->qosPacketBurstEnable == TI_TRUE)
1788a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{
1789a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				/* Update the acTrafficInitParams of BE to the packet burst def*/
1790a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pQosMngr->acParams[QOS_AC_BE].acQosInitParams.txopLimit = pQosMngr->qosPacketBurstTxOpLimit;
1791a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				/* Update the acTrafficParams of BE to the packet burst def*/
1792a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pQosMngr->acParams[QOS_AC_BE].acQosInitParams.txopLimit = pQosMngr->qosPacketBurstTxOpLimit;
1793a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				/* verify the parameters and update the hal */
1794a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				status = verifyAndConfigQosParams(hQosMngr,&(pQosMngr->acParams[QOS_AC_BE].acQosParams));
1795a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				if (status != TI_OK)
1796a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				{
1797005bbf20350954d05c8a111d3f487d6fddb049bbDmitry Shmidt                    TRACE0(pQosMngr->hReport, REPORT_SEVERITY_WARNING, "qosMngr_setSite:failed to init NON_QOS parameters!!!\n\n");
1798a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt					return TI_NOK;
1799a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				}
1800a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			}
1801a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1802a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		break;
1803a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1804a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	default:
1805005bbf20350954d05c8a111d3f487d6fddb049bbDmitry Shmidt        TRACE0(pQosMngr->hReport, REPORT_SEVERITY_WARNING, "Warning: qosMngr_setSite NO active protocls To set \n");
1806a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		break;
1807a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1808a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1809a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* Check if TSPEC re-negotiation was performed, if so - look for results */
1810a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	qosMngr_checkTspecRenegResults(pQosMngr, assocRsp);
1811a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1812a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    return TI_OK;
1813a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1814a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
1815a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1816a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
1817a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_updateIEinfo     			            *
1818a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
1819a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: The function is called upon run-time update of AC parameters
1820a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1821a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	         -	Qos Manager handle.
1822a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pQosIeParams         -  pointer to received IE parameters received
1823a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			                        in beacon or probe response.
1824a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
1825a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1826a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
1827a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1828a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
1829a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1830a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtvoid qosMngr_updateIEinfo(TI_HANDLE hQosMngr, TI_UINT8 *pQosIeParams, EQosProtocol qosSetProtocol)
1831a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
1832a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
1833a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_STATUS  status;
1834a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	dot11_WME_PARAM_t		*pWMEparams;
1835a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1836a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1837a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1838a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosMngr == NULL)
1839a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return;
1840a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1841a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* checking active protocol */
1842a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	switch(pQosMngr->activeProtocol)
1843a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1844a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	case QOS_WME:
1845a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(qosSetProtocol != QOS_WME)
1846a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return;
1847a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1848a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(pQosIeParams == NULL)
1849a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
1850a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_WARNING, "Warning: updateIEinfo -> trying to update QOS_WME parameters with NULL site parameters!!!\n");
1851a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return ;
1852a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
1853a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1854a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* verify QOS protocol received in update IE */
1855a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		status = verifyWmeIeParams(pQosMngr,pQosIeParams);
1856a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(status != TI_OK)
1857a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
1858a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_WARNING, "Warning: updateIEinfo ->upadting active protocl QOS_WME params with non QOS_WME IE params frame !!!\n");
1859a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return ;
1860a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
1861a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pWMEparams = (dot11_WME_PARAM_t *)pQosIeParams;
1862a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1863a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* update AC params */
1864a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		status = updateACParams(pQosMngr,&(pWMEparams->WME_ACParameteres));
1865a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(status != TI_OK)
1866a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
1867a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_WARNING, "updateIEinfo-> failed to update AC QOS_WME parameters!!!\n\n");
1868a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return ;
1869a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
1870a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		break;
1871a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1872a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1873a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	default:
1874a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_WARNING, "updateIEinfo-> trying to update qos paramters without active protocol !!!");
1875a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		break;
1876a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1877a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
1878a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1879a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
1880a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_buildTSPec       			            *
1881a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************/
1882a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_UINT32 qosMngr_buildTSPec(TI_HANDLE hQosMngr, TI_UINT32 user_priority, TI_UINT8 *pQosIe)
1883a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
1884a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
1885a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	OS_802_11_QOS_TSPEC_PARAMS *pPreservedParams;
1886a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	tspecInfo_t *pCandidateParams;
1887a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_UINT32 ieLen;
1888a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1889a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pPreservedParams = &pQosMngr->tspecRenegotiationParams[user_priority];
1890a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pCandidateParams = &pQosMngr->resourceMgmtTable.candidateTspecInfo[user_priority];
1891a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1892a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (pPreservedParams->uUserPriority != MAX_USER_PRIORITY)
1893a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1894a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		qosMngr_storeTspecCandidateParams (pCandidateParams, pPreservedParams, user_priority);
1895a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pCandidateParams->trafficAdmState = AC_WAIT_ADMISSION;
1896a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1897a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		trafficAdmCtrl_buildTSPec(pQosMngr->pTrafficAdmCtrl, pCandidateParams, pQosIe, &ieLen);
1898a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return ieLen;
1899a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1900a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	else
1901a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1902a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return 0;
1903a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1904a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
1905a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1906a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
1907a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        setWmeSiteParams        			            *
1908a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
1909a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: The function is called upon association response to set QOS_WME site
1910a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt             parameters.
1911a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1912a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	         -	Qos Manager handle.
1913a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pQosIeParams         -  pointer to received IE parameters received
1914a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			                        in association response.
1915a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
1916a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1917a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
1918a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1919a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
1920a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1921a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic TI_STATUS setWmeSiteParams(qosMngr_t *pQosMngr, TI_UINT8 *pQosIeParams)
1922a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
1923a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	dot11_WME_PARAM_t  *pWMEparams = (dot11_WME_PARAM_t *)pQosIeParams;
1924a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_STATUS           status;
1925a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_UINT8               acID;
1926a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1927a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (pQosIeParams == NULL)
1928a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1929a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_WARNING, "setWmeSiteParams: pQosIeParams is NULL !");
1930a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
1931a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1932a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1933a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	for(acID = FIRST_AC_INDEX;acID < MAX_NUM_OF_AC; acID++)
1934a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1935a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	   /* configure Ack-Policy to TxCtrl. */
1936a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		txCtrlParams_setAcAckPolicy(pQosMngr->hTxCtrl, acID, pQosMngr->acParams[acID].wmeAcAckPolicy);
1937a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
1938a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1939a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* update AC params */
1940a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pWMEparams->WME_ACParameteres.ACBEParametersRecord.TXOPLimit =
1941a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		ENDIAN_HANDLE_WORD(pWMEparams->WME_ACParameteres.ACBEParametersRecord.TXOPLimit);
1942a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pWMEparams->WME_ACParameteres.ACBKParametersRecord.TXOPLimit =
1943a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		ENDIAN_HANDLE_WORD(pWMEparams->WME_ACParameteres.ACBKParametersRecord.TXOPLimit);
1944a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pWMEparams->WME_ACParameteres.ACVIParametersRecord.TXOPLimit =
1945a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		ENDIAN_HANDLE_WORD(pWMEparams->WME_ACParameteres.ACVIParametersRecord.TXOPLimit);
1946a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pWMEparams->WME_ACParameteres.ACVOParametersRecord.TXOPLimit =
1947a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		ENDIAN_HANDLE_WORD(pWMEparams->WME_ACParameteres.ACVOParametersRecord.TXOPLimit);
1948a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1949a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	status = updateACParams(pQosMngr,&(pWMEparams->WME_ACParameteres));
1950a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(status != TI_OK)
1951a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return status;
1952a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1953a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* update Tx header convert mode */
1954a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	txCtrlParams_setQosHeaderConverMode(pQosMngr->hTxCtrl, HDR_CONVERT_QOS);
1955a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1956a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return TI_OK;
1957a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
1958a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1959a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1960a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
1961a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        updateACParams     			                *
1962a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
1963a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: the function is called upon QOS protocol updates paramters
1964a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt             to TNET and TxCtrl object
1965a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1966a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	         -	Qos Manager handle.
1967a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1968a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
1969a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1970a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
1971a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1972a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
1973a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1974a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic TI_STATUS updateACParams(qosMngr_t *pQosMngr,dot11_ACParameters_t *pAcParams)
1975a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
1976a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_UINT8    acID,i;
1977a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_STATUS   status;
1978a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    dot11_QOS_AC_IE_ParametersRecord_t *pACParameteresRecord;
1979a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    ETrafficAdmState *pAcTrafficAdmState;
1980a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1981a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1982a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/*
1983a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	 * For QOS_WME: setting ac traffic params (edcf etc')
1984a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	 * in this order BE, BK , VI, VO .
1985a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	 */
1986a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1987a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pACParameteresRecord = (dot11_QOS_AC_IE_ParametersRecord_t *)pAcParams;
1988a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1989a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	for(i = FIRST_AC_INDEX; i < MAX_NUM_OF_AC; i++, pACParameteresRecord++)
1990a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
1991a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        acID = (pACParameteresRecord->ACI_AIFSN & AC_PARAMS_ACI_MASK) >> 5;
1992a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1993a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pAcTrafficAdmState = &(pQosMngr->resourceMgmtTable.currentTspecInfo[acID].trafficAdmState);
1994a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1995a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* edcf params */
1996a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
1997a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].acQosParams.ac        				   = acID;
1998a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].acQosParams.aifsn                     = pACParameteresRecord->ACI_AIFSN & AC_PARAMS_AIFSN_MASK;
1999a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].acQosParams.txopLimit                 = pACParameteresRecord->TXOPLimit;
2000a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2001a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* to use user setting ? */
2002a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        if(TI_TRUE ==pQosMngr->bCwFromUserEnable)
2003a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
2004a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pQosMngr->acParams[acID].acQosParams.cwMin                 = pQosMngr->uDesireCwMin;
2005a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pQosMngr->acParams[acID].acQosParams.cwMax                 = pQosMngr->uDesireCwMax;
2006a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
2007a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        else
2008a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
2009a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pQosMngr->acParams[acID].acQosParams.cwMin                 = pACParameteresRecord->ECWmin_ECWmax & AC_PARAMS_CWMIN_MASK;
2010a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pQosMngr->acParams[acID].acQosParams.cwMax                 = (pACParameteresRecord->ECWmin_ECWmax & AC_PARAMS_CWMAX_MASK) >> 4;
2011a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
2012a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2013a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		status = verifyAndConfigQosParams(pQosMngr,&(pQosMngr->acParams[acID].acQosParams));
2014a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(status != TI_OK)
2015a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return status;
2016a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2017a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2018a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* UPSD configuration */
2019a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].QtrafficParams.psScheme = pQosMngr->acParams[acID].currentWmeAcPsMode;
2020a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		status = verifyAndConfigTrafficParams(pQosMngr,&(pQosMngr->acParams[acID].QtrafficParams));
2021a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(status != TI_OK)
2022a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			return status;
2023a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2024a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2025a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* update admission state */
2026a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if(pACParameteresRecord->ACI_AIFSN & AC_PARAMS_ACM_MASK)
2027a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
2028a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pQosMngr->acParams[acID].apInitAdmissionState = ADMISSION_REQUIRED;
2029a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			*pAcTrafficAdmState = AC_NOT_ADMITTED;
2030a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2031a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			txCtrlParams_setAcAdmissionStatus(pQosMngr->hTxCtrl, acID, ADMISSION_REQUIRED, AC_NOT_ADMITTED);
2032a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
2033a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		else
2034a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
2035a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pQosMngr->acParams[acID].apInitAdmissionState = ADMISSION_NOT_REQUIRED;
2036a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			*pAcTrafficAdmState = AC_ADMITTED;
2037a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2038a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			txCtrlParams_setAcAdmissionStatus(pQosMngr->hTxCtrl, acID, ADMISSION_NOT_REQUIRED, AC_ADMITTED);
2039a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
2040a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2041a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* If AC is admidtted and has enabled PS-Rx-Streamings, configure it to FW */
2042a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* Note: this may occur after roaming */
2043a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        if (*pAcTrafficAdmState == AC_ADMITTED)
2044a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
2045a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TI_UINT32       uTid1       = WMEQosAcToTid[acID];
2046a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TI_UINT32       uTid2       = WMEQosMateTid[uTid1];
2047a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TPsRxStreaming *pTid1Params = &pQosMngr->aTidPsRxStreaming[uTid1];
2048a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TPsRxStreaming *pTid2Params = &pQosMngr->aTidPsRxStreaming[uTid2];
2049a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2050a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            if (pTid1Params->bEnabled)
2051a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            {
2052a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                TWD_CfgPsRxStreaming (pQosMngr->hTWD, pTid1Params, NULL, NULL);
2053a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            }
2054a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            if (pTid2Params->bEnabled)
2055a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            {
2056a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                TWD_CfgPsRxStreaming (pQosMngr->hTWD, pTid2Params, NULL, NULL);
2057a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            }
2058a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
2059a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2060a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2061a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return TI_OK;
2062a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
2063a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2064a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2065a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2066a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
2067a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        verifyWmeIeParams     			            *
2068a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
2069a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: verify QOS_WME IE.
2070a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2071a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	         -	Qos Manager handle.
2072a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2073a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
2074a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2075a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
2076a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2077a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
2078a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2079a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic TI_STATUS verifyWmeIeParams(qosMngr_t *pQosMngr,TI_UINT8 *pQosIeParams)
2080a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
2081a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	dot11_WME_IE_t  WMEie;
2082a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_UINT8           Len;
2083a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	dot11_WME_IE_t  *pWMERecvIe = (dot11_WME_IE_t  *)pQosIeParams;
2084a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2085a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosIeParams == NULL)
2086a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2087a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_WARNING, ": pQosIeParams is NULL!! \n");
2088a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
2089a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2090a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2091a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* get QOS_WME IE */
2092a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	getWMEInfoElement(pQosMngr,(TI_UINT8 *)&WMEie,(TI_UINT8 *)&Len);
2093a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2094a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if((WMEie.hdr[0] != pWMERecvIe->hdr[0] ) ||
2095a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	   (WMEie.OUI[0] != pWMERecvIe->OUI[0]) ||
2096a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	   (WMEie.OUI[1] != pWMERecvIe->OUI[1]) ||
2097a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	   (WMEie.OUI[2] != pWMERecvIe->OUI[2]) ||
2098a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	   (WMEie.OUIType != pWMERecvIe->OUIType))
2099a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2100a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_WARNING, ": QosIeParams mismatch (ID or OUI)!! \n");
2101a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
2102a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2103a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2104a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2105a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    if(WMEie.version != pWMERecvIe->version)
2106a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE2(pQosMngr->hReport, REPORT_SEVERITY_WARNING, ": Driver QOS_WME version: %d, Site QOS_WME version: %d\n", WMEie.version, pWMERecvIe->version);
2107a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2108a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return TI_OK;
2109a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
2110a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2111a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2112a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
2113a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_SetPsRxStreaming                      *
2114a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
2115a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: Verify and configure a TID PS-Rx-Streaming setting
2116a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2117a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      pQosMngr	- Qos Manager handle.
2118a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pNewParams  - The new TID streaming parameters to configure
2119a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2120a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
2121a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2122a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, relevant failures otherwise
2123a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2124a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
2125a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic TI_STATUS qosMngr_SetPsRxStreaming (qosMngr_t *pQosMngr, TPsRxStreaming *pNewParams)
2126a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
2127a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_UINT32       uCurrTid            = pNewParams->uTid;
2128a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_UINT32       uAcId               = WMEQosTagToACTable[uCurrTid];
2129a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TPsRxStreaming  *pCurrTidParams     = &pQosMngr->aTidPsRxStreaming[uCurrTid];
2130a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_BOOL         bTidPrevEnabled     = pCurrTidParams->bEnabled;
2131a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2132a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* Verify STA is connected to AP */
2133a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (pQosMngr->isConnected == TI_FALSE)
2134a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2135a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_SetPsRxStreaming: Not connected - Ignoring request !!!\n");
2136a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return NOT_CONNECTED;
2137a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2138a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2139a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* Check TID validity */
2140a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (uCurrTid > MAX_USER_PRIORITY)
2141a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2142a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "TID = %d > 7 !!!\n", uCurrTid);
2143a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return PARAM_VALUE_NOT_VALID;
2144a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2145a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2146a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* Verify that the AC is admitted */
2147a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (pQosMngr->resourceMgmtTable.currentTspecInfo[uAcId].trafficAdmState != AC_ADMITTED)
2148a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2149a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_SetPsRxStreaming: AC = %d is not admitted -> Ignoring request !!!\n", uAcId);
2150a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return USER_PRIORITY_NOT_ADMITTED;
2151a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2152a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2153a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* Verify that a disabled TID is not beeing disabled again */
2154a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (!pNewParams->bEnabled && !pCurrTidParams->bEnabled)
2155a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2156a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_SetPsRxStreaming: TID %d is already disabled -> Ignoring request !!!\n", uCurrTid);
2157a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return PARAM_VALUE_NOT_VALID;
2158a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2159a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2160a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* Verify that the max number of enabled TIDs is not exeeded */
2161a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (pNewParams->bEnabled  &&
2162a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        !pCurrTidParams->bEnabled  &&
2163a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pQosMngr->uNumEnabledPsRxStreams == MAX_ENABLED_PS_RX_STREAMS)
2164a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2165a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_SetPsRxStreaming: Can't have more than %d TIDs enabled -> Ignoring request !!!\n", MAX_ENABLED_PS_RX_STREAMS);
2166a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return PARAM_VALUE_NOT_VALID;
2167a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2168a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2169a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* Save the new streaming configuration of the TID */
2170a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    os_memoryCopy (pQosMngr->hOs, (void *)pCurrTidParams, (void *)pNewParams, sizeof(TPsRxStreaming));
2171a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2172a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* Update the relevant AC which of its TIDs parameters to use (save pointer of desired TID) */
2173a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (pCurrTidParams->bEnabled)
2174a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
2175a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        if (!bTidPrevEnabled)
2176a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
2177a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pQosMngr->uNumEnabledPsRxStreams++;
2178a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
2179a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
2180a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	else
2181a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
2182a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pQosMngr->uNumEnabledPsRxStreams--;
2183a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
2184a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2185a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* Send configuration update to the FW */
2186a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    return TWD_CfgPsRxStreaming (pQosMngr->hTWD, pCurrTidParams, NULL, NULL);
2187a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
2188a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2189a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2190a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
2191a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                    Admission Control Functions     		            *
2192a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************/
2193a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
2194a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_requestAdmission     			        *
2195a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
2196a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: This function is API function for TSPEC request.
2197a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2198a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	         -	Qos Manager handle.
2199a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			addTspecParams		 -  The Tspec Parameters
2200a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
2201a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2202a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
2203a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2204a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
2205a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2206a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS qosMngr_requestAdmission(TI_HANDLE			hQosMngr,
2207a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                   OS_802_11_QOS_TSPEC_PARAMS *addTspecParams)
2208a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
2209a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2210a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
2211a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_STATUS	status;
2212a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_UINT8		acID;
2213a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2214a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2215a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* check if STA is already connected to AP */
2216a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosMngr->isConnected == TI_FALSE)
2217a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2218a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_requestAdmission: Not connected - Ignoring request !!!\n");
2219a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return NOT_CONNECTED;
2220a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2221a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2222a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* check if AP support QOS_WME */
2223a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosMngr->activeProtocol != QOS_WME)
2224a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2225a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_requestAdmission: Not connected to a QOS AP - Ignoring request !!!\n");
2226a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return NO_QOS_AP;
2227a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2228a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2229a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* check if Traffic Admission Control is enable */
2230a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosMngr->trafficAdmCtrlEnable == TI_FALSE)
2231a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2232a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_requestAdmission: Admission-Control is disabled - Ignoring request !!!\n");
2233a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return ADM_CTRL_DISABLE;
2234a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2235a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2236a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* check UP validity */
2237a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if( addTspecParams->uUserPriority > MAX_USER_PRIORITY)
2238a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2239a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "uUserPriority = %d > 7 !!!\n",addTspecParams->uUserPriority);
2240a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
2241a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2242a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2243a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* find acID from the user priority */
2244a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	acID = WMEQosTagToACTable[addTspecParams->uUserPriority];
2245a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2246a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* check if signaling is already in process for this AC */
2247a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].trafficAdmState == AC_WAIT_ADMISSION)
2248a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2249a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_requestAdmission: AC = %d , signaling is in process -> Ignore Request !!!\n",acID);
2250a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TRAFIC_ADM_PENDING;
2251a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2252a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2253a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* check if AC is already admitted with other UP */
2254a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if( (pQosMngr->resourceMgmtTable.currentTspecInfo[acID].trafficAdmState == AC_ADMITTED) &&
2255a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		(pQosMngr->resourceMgmtTable.currentTspecInfo[acID].userPriority <= MAX_USER_PRIORITY) &&
2256a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		(pQosMngr->resourceMgmtTable.currentTspecInfo[acID].userPriority != addTspecParams->uUserPriority) )
2257a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2258a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE2(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_requestAdmission: AC = %d , another UP (%d) on same AC is already admited -> Ignoring request !!!\n",			acID, pQosMngr->resourceMgmtTable.currentTspecInfo[acID].userPriority);
2259a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return AC_ALREADY_IN_USE;
2260a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2261a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2262a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* check msdu size validity */
22633bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt	if( (addTspecParams->uNominalMSDUsize & (~FIXED_NOMINAL_MSDU_SIZE_MASK)) > MAX_DATA_BODY_LENGTH)
2264a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2265a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "uNominalMSDUsize = %d > 2312, !!!\n",addTspecParams->uNominalMSDUsize);
2266a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
2267a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2268a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2269a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* check PS mode validity */
2270a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if( (addTspecParams->uAPSDFlag == PS_SCHEME_UPSD_TRIGGER) && (pQosMngr->currentPsMode != PS_SCHEME_UPSD_TRIGGER) )
2271a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2272a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "The STA's current status does not support UPSD -> Ignoring TSPEC request that has UPSD on !!!\n");
2273a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
2274a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2275a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2276a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE2(pQosMngr->hReport, REPORT_SEVERITY_INFORMATION, "qosMngr_requestAdmission: UP = %d , acID = %d\n",addTspecParams->uUserPriority, acID);
2277a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2278a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* set tspec parameters in candidateTspecInfo table */
2279a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	qosMngr_storeTspecCandidateParams (&(pQosMngr->resourceMgmtTable.candidateTspecInfo[acID]),
2280a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt										addTspecParams, (TI_UINT8)acID);
2281a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2282a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* Perhaps this should be done only if the request was successfully sent */
2283a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (acID == QOS_AC_VO)
2284a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2285a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->voiceTspecConfigured = TI_TRUE;
2286a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2287a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2288a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (acID == QOS_AC_VI)
2289a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2290a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->videoTspecConfigured = TI_TRUE;
2291a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2292a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2293a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* call TrafficAdmCtrl API function for the signaling proccess */
2294a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	status = trafficAdmCtrl_startAdmRequest(pQosMngr->pTrafficAdmCtrl, &(pQosMngr->resourceMgmtTable.candidateTspecInfo[acID]));
2295a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2296a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(status == TI_OK)
2297a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2298a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* request transmitted TI_OK */
2299a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].trafficAdmState = AC_WAIT_ADMISSION;
2300a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE1(pQosMngr->hReport, REPORT_SEVERITY_INFORMATION, "qosMngr_requestAdmission: UP = %d , request TI_OK !!!\n",addTspecParams->uUserPriority);
2301a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2302a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	else
2303a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2304a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* reaquest not transmitted TI_OK */
2305a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].trafficAdmState = AC_NOT_ADMITTED;
2306a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE2(pQosMngr->hReport, REPORT_SEVERITY_WARNING, "qosMngr_requestAdmission: UP = %d , request  NOT TI_OK status=%d!!!\n",addTspecParams->uUserPriority, status);
2307a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
2308a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2309a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2310a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return status;
2311a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
2312a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2313a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
2314a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_deleteAdmission     		            *
2315a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
2316a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: This function is API fuunction for tspec delete.
2317a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2318a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	         -	Qos Manager handle.
2319a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			delAdmissionParams	 -
2320a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
2321a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2322a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
2323a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2324a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
2325a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2326a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS qosMngr_deleteAdmission(TI_HANDLE hQosMngr, OS_802_11_QOS_DELETE_TSPEC_PARAMS *delAdmissionParams)
2327a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
2328a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2329a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
2330a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	TI_UINT8		acID;
2331a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2332a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* check UP validity */
2333a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if( delAdmissionParams->uUserPriority > MAX_USER_PRIORITY )
2334a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2335a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_deleteAdmission: userPriority > 7 -> Ignore !!!");
2336a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
2337a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2338a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2339a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* check if STA is already connected to AP */
2340a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosMngr->isConnected == TI_FALSE)
2341a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2342a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_deleteAdmission: pQosMngr->connected == TI_FALSE -> Ignore !!!");
2343a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return NOT_CONNECTED;
2344a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2345a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2346a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* check if AP support QOS_WME */
2347a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosMngr->activeProtocol != QOS_WME)
2348a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2349a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_deleteAdmission: activeProtocol != QOS_WME -> Ignore !!!");
2350a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return NO_QOS_AP;
2351a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2352a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2353a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* find acID from the user priority */
2354a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	acID = WMEQosTagToACTable[delAdmissionParams->uUserPriority];
2355a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2356a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* check if tspec is already addmited for this AC */
2357a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosMngr->resourceMgmtTable.currentTspecInfo[acID].trafficAdmState != AC_ADMITTED)
2358a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2359a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_deleteAdmission: AC is not ADMITED -> Ignore !!!");
2360a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
2361a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2362a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2363a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* check if AC is already admited with the same UP */
2364a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosMngr->resourceMgmtTable.currentTspecInfo[acID].userPriority != delAdmissionParams->uUserPriority)
2365a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2366a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_deleteAdmission: user priority is invalid. -> Ignore !!!\n");
2367a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return USER_PRIORITY_NOT_ADMITTED;
2368a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2369a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2370a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* check if signaling is already in procces for this AC */
2371a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].trafficAdmState == AC_WAIT_ADMISSION)
2372a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2373a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_deleteAdmission: AC is under negotiation -> Ignore !!!");
2374a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TRAFIC_ADM_PENDING;
2375a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2376a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2377a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2378a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2379a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* call TrafficAdmCtrl API function for the delete tspec */
2380a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	trafficAdmCtrl_sendDeltsFrame(pQosMngr->pTrafficAdmCtrl, &(pQosMngr->resourceMgmtTable.currentTspecInfo[acID]),
2381a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt										(TI_UINT8)delAdmissionParams->uReasonCode );
2382a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2383a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2384a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	deleteTspecConfiguration(pQosMngr, acID);
2385a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2386a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return TI_OK;
2387a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2388a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
2389a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
2390a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        deleteTspecConfiguration     		            *
2391a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
2392a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: configure the driver and FW to default configuration after
2393a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			 tspec deletion.
2394a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2395a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	             - Qos Manager handle.
2396a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			acID					 - the AC of the Tspec to delete
2397a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
2398a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2399a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
2400a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2401a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
2402a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2403a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic void deleteTspecConfiguration(qosMngr_t *pQosMngr, TI_UINT8 acID)
2404a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
2405a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	paramInfo_t param;
2406a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2407a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* Zero Tspec parameters */
2408a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->resourceMgmtTable.currentTspecInfo[acID].nominalMsduSize = 0;
2409a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->resourceMgmtTable.currentTspecInfo[acID].minimumPHYRate = 0;
2410a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->resourceMgmtTable.currentTspecInfo[acID].meanDataRate = 0;
2411a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->resourceMgmtTable.currentTspecInfo[acID].surplausBwAllowance = 0;
2412a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->resourceMgmtTable.currentTspecInfo[acID].mediumTime = 0;
2413a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->resourceMgmtTable.currentTspecInfo[acID].UPSDFlag = 0;
2414a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->resourceMgmtTable.currentTspecInfo[acID].uMinimumServiceInterval = 0;
2415a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->resourceMgmtTable.currentTspecInfo[acID].uMaximumServiceInterval = 0;
2416a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->resourceMgmtTable.currentTspecInfo[acID].streamDirection = BI_DIRECTIONAL;
2417a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2418a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* update total medium time */
2419a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pQosMngr->resourceMgmtTable.totalAllocatedMediumTime -= pQosMngr->resourceMgmtTable.currentTspecInfo[acID].mediumTime;
2420a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2421a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* disable TSRS for this ac */
2422a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	param.content.txDataQosParams.acID = acID;
2423a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	param.content.txDataQosParams.tsrsArrLen = 0;
2424a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	param.paramType = CTRL_DATA_TSRS_PARAM;
2425a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	ctrlData_setParam(pQosMngr->hCtrlData, &param);
2426a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2427a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* stop TS metrix for this ac */
2428a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#ifdef XCC_MODULE_INCLUDED
2429a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	measurementMgr_disableTsMetrics(pQosMngr->hMeasurementMngr, acID);
2430a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#endif
2431a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2432a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* update medium time and rate adaptation event only when init admission bit was 0 */
2433a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if( pQosMngr->acParams[acID].apInitAdmissionState == ADMISSION_REQUIRED )
2434a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2435a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* update currentTspecInfo parameters */
2436a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.currentTspecInfo[acID].trafficAdmState = AC_NOT_ADMITTED;
2437a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2438a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* set params to TX */
2439a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		txCtrlParams_setAdmissionCtrlParams(pQosMngr->hTxCtrl,
2440a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt									acID,
2441a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt									pQosMngr->resourceMgmtTable.currentTspecInfo[acID].mediumTime ,
2442a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt									pQosMngr->resourceMgmtTable.currentTspecInfo[acID].minimumPHYRate, TI_FALSE);
2443a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2444a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	else
2445a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2446a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.currentTspecInfo[acID].trafficAdmState = AC_ADMITTED;
2447a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2448a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2449a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* After we have updated the TxCtrl with the new status of the UP, we can zero the userPriority field */
2450a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pQosMngr->resourceMgmtTable.currentTspecInfo[acID].userPriority = INACTIVE_USER_PRIORITY;
2451a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2452a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* set PS mode according to the PS mode from the association */
2453a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* restore the current Ps mode per AC to UPSD ONLY IF both the station and AP support UPSD */
2454a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    if ((pQosMngr->currentPsMode == PS_SCHEME_UPSD_TRIGGER) && (pQosMngr->acParams[acID].desiredWmeAcPsMode == PS_SCHEME_UPSD_TRIGGER))
2455a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
2456a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	  pQosMngr->acParams[acID].currentWmeAcPsMode = PS_SCHEME_UPSD_TRIGGER;
2457a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
2458a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    else
2459a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
2460a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	  pQosMngr->acParams[acID].currentWmeAcPsMode = PS_SCHEME_LEGACY;
2461a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
2462a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2463a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(acID == QOS_AC_VO)
2464a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2465a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->voiceTspecConfigured = TI_FALSE;
2466a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2467a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2468a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (acID == QOS_AC_VI)
2469a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2470a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->videoTspecConfigured = TI_FALSE;
2471a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
2472a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2473a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* UPSD_FW - open comment in UPSD FW integration */
2474a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2475a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* UPSD configuration */
2476a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pQosMngr->acParams[acID].QtrafficParams.psScheme = pQosMngr->acParams[acID].currentWmeAcPsMode;
2477a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	verifyAndConfigTrafficParams(pQosMngr,&(pQosMngr->acParams[acID].QtrafficParams));
2478a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2479a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* If the AC is not admitted, disable its TIDs' PS-Streamings if enabled */
2480a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    if (pQosMngr->resourceMgmtTable.currentTspecInfo[acID].trafficAdmState == AC_NOT_ADMITTED)
2481a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
2482a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TI_UINT32       uTid1       = WMEQosAcToTid[acID];
2483a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TI_UINT32       uTid2       = WMEQosMateTid[uTid1];
2484a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TPsRxStreaming *pTid1Params = &pQosMngr->aTidPsRxStreaming[uTid1];
2485a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TPsRxStreaming *pTid2Params = &pQosMngr->aTidPsRxStreaming[uTid2];
2486a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2487a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        if (pTid1Params->bEnabled)
2488a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
2489a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pTid1Params->bEnabled = TI_FALSE;
2490a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TWD_CfgPsRxStreaming (pQosMngr->hTWD, pTid1Params, NULL, NULL);
2491a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pQosMngr->uNumEnabledPsRxStreams--;
2492a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
2493a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        if (pTid2Params->bEnabled)
2494a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
2495a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pTid2Params->bEnabled = TI_FALSE;
2496a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TWD_CfgPsRxStreaming (pQosMngr->hTWD, pTid2Params, NULL, NULL);
2497a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pQosMngr->uNumEnabledPsRxStreams--;
2498a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
2499a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
2500a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
2501a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2502a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/*-----------------------------------------------------------------------------
2503a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRoutine Name: qosMngr_sendUnexpectedTSPECResponse
2504a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRoutine Description: send event to user application, informing of unexpected TSPEC response
2505a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt					 which might imply loss of UPSD mode synch between AP and STA
2506a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtArguments: pTspecInfo - contains unexpected TSPEC response information
2507a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtReturn Value:
2508a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt-----------------------------------------------------------------------------*/
2509a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS qosMngr_sendUnexpectedTSPECResponseEvent(TI_HANDLE	hQosMngr,
2510a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt								   tspecInfo_t	*pTspecInfo)
2511a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
2512a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	OS_802_11_QOS_TSPEC_PARAMS addtsReasonCode;
2513a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    qosMngr_t *pQosMngr =	(qosMngr_t *)hQosMngr;
2514a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2515a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* set the event params */
2516a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	addtsReasonCode.uAPSDFlag = pTspecInfo->UPSDFlag;
2517a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	addtsReasonCode.uMinimumServiceInterval = pTspecInfo->uMinimumServiceInterval;
2518a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	addtsReasonCode.uMaximumServiceInterval = pTspecInfo->uMaximumServiceInterval;
2519a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	addtsReasonCode.uUserPriority = pTspecInfo->userPriority;
2520a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	addtsReasonCode.uNominalMSDUsize = pTspecInfo->nominalMsduSize;
2521a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	addtsReasonCode.uMeanDataRate = pTspecInfo->meanDataRate;
2522a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	addtsReasonCode.uMinimumPHYRate = pTspecInfo->minimumPHYRate;
2523a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	addtsReasonCode.uSurplusBandwidthAllowance = pTspecInfo->surplausBwAllowance;
2524a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	addtsReasonCode.uMediumTime = pTspecInfo->mediumTime;
2525a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2526a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    addtsReasonCode.uReasonCode = pTspecInfo->statusCode + TSPEC_RESPONSE_UNEXPECTED;
2527a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2528a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* send event */
2529a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	EvHandlerSendEvent(pQosMngr->hEvHandler, IPC_EVENT_TSPEC_STATUS, (TI_UINT8*)(&addtsReasonCode), sizeof(OS_802_11_QOS_TSPEC_PARAMS));
2530a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2531a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return TI_OK;
2532a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
2533a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2534a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
2535a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_setAdmissionInfo                      *
2536a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
2537a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: This function is API function.
2538a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            the trafficAdmCtrl object calls this function in
2539a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            order to update the QOSMngr on TSPEC request status
2540a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2541a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr                 - Qos Manager handle.
2542a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pTspecInfo               - The TSPEC Parameters
2543a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            trafficAdmRequestStatus  - the status of the request
2544a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
2545a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2546a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
2547a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2548a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
2549a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS qosMngr_setAdmissionInfo(TI_HANDLE    hQosMngr,
2550a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                   TI_UINT8        acID,
2551a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                   tspecInfo_t  *pTspecInfo,
2552a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                   trafficAdmRequestStatus_e trafficAdmRequestStatus)
2553a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
2554a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_UINT32                 actualMediumTime;
2555a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    OS_802_11_QOS_TSPEC_PARAMS addtsReasonCode;
2556a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    qosMngr_t *pQosMngr =  (qosMngr_t *)hQosMngr;
2557a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TSetTemplate           templateStruct;
2558a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    QosNullDataTemplate_t  QosNullDataTemplate;
2559a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2560a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    /* Check if the updated AC is in WAIT state */
2561a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    if(pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].trafficAdmState != AC_WAIT_ADMISSION)
2562a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
2563a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TRACE1(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_setAdmissionInfo: acID = %d, trafficAdmState != WAIT. IGNORE !!!\n", acID);
2564a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2565a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return TI_NOK;
2566a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
2567a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2568a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    if (pQosMngr->TSPECNegotiationResultCallb != NULL)
2569a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
2570a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pQosMngr->TSPECNegotiationResultCallb (pQosMngr->TSPECNegotiationResultModule, trafficAdmRequestStatus);
2571a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pQosMngr->TSPECNegotiationResultCallb = NULL;
2572a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pQosMngr->TSPECNegotiationResultModule = NULL;
2573a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
2574a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2575a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    switch(trafficAdmRequestStatus)
2576a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
2577a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    case STATUS_TRAFFIC_ADM_REQUEST_ACCEPT:
2578a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* Received admission response with status accept */
2579a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2580a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TRACE3(pQosMngr->hReport, REPORT_SEVERITY_INFORMATION, "qosMngr_setAdmissionInfo: admCtrl status =  REQUEST_ACCEPT [ acID = %d, mediumTime = %d, minimumPHYRate = %d ]\n", acID, pTspecInfo->mediumTime, pTspecInfo->minimumPHYRate);
2581a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2582a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* Set the event params */
2583a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uAPSDFlag = pTspecInfo->UPSDFlag;
2584a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uMinimumServiceInterval = pTspecInfo->uMinimumServiceInterval;
2585a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uMaximumServiceInterval = pTspecInfo->uMaximumServiceInterval;
2586a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uUserPriority = pTspecInfo->userPriority;
25873bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt        addtsReasonCode.uNominalMSDUsize = pTspecInfo->nominalMsduSize & ~FIXED_NOMINAL_MSDU_SIZE_MASK;
2588a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uMeanDataRate = pTspecInfo->meanDataRate;
2589a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uMinimumPHYRate = pTspecInfo->minimumPHYRate;
2590a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uSurplusBandwidthAllowance = pTspecInfo->surplausBwAllowance;
2591a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uMediumTime = pTspecInfo->mediumTime;
2592a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2593a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* Free the candidate parameters */
2594a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].trafficAdmState = AC_NOT_ADMITTED;
2595a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2596a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* Validate tid matching */
2597a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        if (pTspecInfo->tid == pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].tid)
2598a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
2599a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            addtsReasonCode.uReasonCode = ADDTS_RESPONSE_ACCEPT;
2600a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2601a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            /* Send event */
2602a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            EvHandlerSendEvent (pQosMngr->hEvHandler,
2603a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                IPC_EVENT_TSPEC_STATUS,
2604a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                (TI_UINT8*)&addtsReasonCode,
2605a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                sizeof(OS_802_11_QOS_TSPEC_PARAMS));
2606a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
2607a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        else
2608a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
2609a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            addtsReasonCode.uReasonCode = ADDTS_RESPONSE_AP_PARAM_INVALID;
2610a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2611a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            /* Send event */
2612a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            EvHandlerSendEvent (pQosMngr->hEvHandler,
2613a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                IPC_EVENT_TSPEC_STATUS,
2614a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                (TI_UINT8*)&addtsReasonCode,
2615a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                sizeof(OS_802_11_QOS_TSPEC_PARAMS));
2616a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            return TI_OK;
2617a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
2618a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2619a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* Update the current TSPEC parameters from the received TSPEC */
2620a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        os_memoryCopy (pQosMngr->hOs,
2621a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                       &pQosMngr->resourceMgmtTable.currentTspecInfo[acID],
2622a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                       pTspecInfo,
2623a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                       sizeof(tspecInfo_t));
2624a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2625a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* Set the TSPEC to admitted */
2626a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pQosMngr->resourceMgmtTable.currentTspecInfo[acID].trafficAdmState = AC_ADMITTED;
2627a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2628a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* Update total medium time */
2629a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pQosMngr->resourceMgmtTable.totalAllocatedMediumTime += pTspecInfo->mediumTime;
2630a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2631a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /*
2632a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt         * Set QOS Null-data template into the firmware.
2633a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt         * When a new TSPEC with UPSD is "accepted" by the AP,
2634a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt         * we set the user priority of it into the firmware.
2635a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt         * Since this AC is already ADMITTED (we are processing the successful response),
2636a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt         * it is TI_OK to set the qos null data template with this UP
2637a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt         */
2638a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        if (addtsReasonCode.uAPSDFlag == PS_SCHEME_UPSD_TRIGGER &&
2639a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pQosMngr->QosNullDataTemplateUserPriority == 0xFF)
2640a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
2641a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            /* Remember the user priority which we have set */
2642a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pQosMngr->QosNullDataTemplateUserPriority = (TI_UINT8)addtsReasonCode.uUserPriority;
2643a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2644a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            templateStruct.ptr = (TI_UINT8 *)&QosNullDataTemplate;
2645a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            templateStruct.type = QOS_NULL_DATA_TEMPLATE;
2646a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            templateStruct.uRateMask = RATE_MASK_UNSPECIFIED;
2647a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            buildQosNullDataTemplate (pQosMngr->hSiteMgr, &templateStruct, pQosMngr->QosNullDataTemplateUserPriority);
2648a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TWD_CmdTemplate (pQosMngr->hTWD, &templateStruct, NULL, NULL);
2649a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2650a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            TRACE1(pQosMngr->hReport, REPORT_SEVERITY_INFORMATION, "qosMngr_setAdmissionInfo: Setting QOS null data for UserPriority=%d (due to TSPEC ACCEPT response)\n", addtsReasonCode.uUserPriority);
2651a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
2652a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2653a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* Set params to TX */
2654a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /*------------------*/
2655a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2656a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* Update medium time and rate adaptation event only when init admission bit was 0 */
2657a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        if (pQosMngr->acParams[acID].apInitAdmissionState == ADMISSION_REQUIRED)
2658a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
2659a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            /* mediumTime is in units of 32uSec and we work in mSec */
2660a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            actualMediumTime = (pTspecInfo->mediumTime * 32) / 1000;
2661a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2662a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            /* Set TX params */
2663a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			txCtrlParams_setAdmissionCtrlParams(pQosMngr->hTxCtrl,
2664a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                          acID,
2665a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                          actualMediumTime,
2666a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                          pTspecInfo->minimumPHYRate,
2667a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                          TI_TRUE);
2668a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
2669a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2670a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
2671a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            PSScheme_e psMode = pTspecInfo->UPSDFlag ? PS_SCHEME_UPSD_TRIGGER
2672a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                                     : PS_SCHEME_LEGACY;
2673a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2674a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            if (pQosMngr->acParams[acID].currentWmeAcPsMode != psMode)
2675a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            {
2676a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                TI_STATUS status;
2677a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2678a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                pQosMngr->acParams[acID].currentWmeAcPsMode = psMode;
2679a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2680a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                /* UPSD_FW - open comment in UPSD FW integration */
2681a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                pQosMngr->acParams[acID].QtrafficParams.psScheme = pQosMngr->acParams[acID].currentWmeAcPsMode;
2682a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                status = verifyAndConfigTrafficParams (pQosMngr, &pQosMngr->acParams[acID].QtrafficParams);
2683a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                if (status != TI_OK)
2684a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                    return status;
2685a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            }
2686a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
2687a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        break;
2688a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2689a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    case STATUS_TRAFFIC_ADM_REQUEST_REJECT:
2690a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* Received admission response with status reject */
2691a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2692a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TRACE1(pQosMngr->hReport, REPORT_SEVERITY_INFORMATION, "qosMngr_setAdmissionInfo: admCtrl status = REQUEST_REJECT [ acID = %d ]\n", acID);
2693a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2694a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* Validate tid matching */
2695a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        if (pTspecInfo->tid == pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].tid)
2696a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
2697a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            addtsReasonCode.uReasonCode = pTspecInfo->statusCode;
2698a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
2699a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        else
2700a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
2701a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            addtsReasonCode.uReasonCode = ADDTS_RESPONSE_AP_PARAM_INVALID;
2702a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        }
2703a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2704a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* Free the candidate parameters */
2705a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].trafficAdmState = AC_NOT_ADMITTED;
2706a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2707a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* Send event to application */
2708a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uAPSDFlag = pTspecInfo->UPSDFlag;
2709a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uMinimumServiceInterval = pTspecInfo->uMinimumServiceInterval;
2710a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uMaximumServiceInterval = pTspecInfo->uMaximumServiceInterval;
2711a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uUserPriority = pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].userPriority;
27123bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt        addtsReasonCode.uNominalMSDUsize = pTspecInfo->nominalMsduSize & ~FIXED_NOMINAL_MSDU_SIZE_MASK;
2713a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uMeanDataRate = pTspecInfo->meanDataRate;
2714a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uMinimumPHYRate = pTspecInfo->minimumPHYRate;
2715a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uSurplusBandwidthAllowance = pTspecInfo->surplausBwAllowance;
2716a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uMediumTime = pTspecInfo->mediumTime;
2717a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2718a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        EvHandlerSendEvent (pQosMngr->hEvHandler,
2719a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                            IPC_EVENT_TSPEC_STATUS,
2720a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                            (TI_UINT8*)&addtsReasonCode,
2721a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                            sizeof(OS_802_11_QOS_TSPEC_PARAMS));
2722a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        break;
2723a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2724a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    case STATUS_TRAFFIC_ADM_REQUEST_TIMEOUT:
2725a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TRACE1(pQosMngr->hReport, REPORT_SEVERITY_INFORMATION, "qosMngr_setAdmissionInfo: admCtrl status = REQUEST_TIMEOUT [ acID = %d ]\n", acID);
2726a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2727a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* Free the candidate parameters */
2728a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].trafficAdmState = AC_NOT_ADMITTED;
2729a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2730a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        /* Send event to application */
2731a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uUserPriority = pQosMngr->resourceMgmtTable.candidateTspecInfo[acID].userPriority;
2732a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uReasonCode = ADDTS_RESPONSE_TIMEOUT;
2733a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uAPSDFlag = 0;
2734a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uMinimumServiceInterval = 0;
2735a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uMaximumServiceInterval = 0;
2736a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uNominalMSDUsize = 0;
2737a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uMeanDataRate = 0;
2738a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uMinimumPHYRate = 0;
2739a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uSurplusBandwidthAllowance = 0;
2740a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        addtsReasonCode.uMediumTime = 0;
2741a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2742a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        EvHandlerSendEvent (pQosMngr->hEvHandler,
2743a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                            IPC_EVENT_TSPEC_STATUS,
2744a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                            (TI_UINT8*)&addtsReasonCode,
2745a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                            sizeof(OS_802_11_QOS_TSPEC_PARAMS));
2746a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        break;
2747a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2748a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    default:
2749a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_setAdmissionInfo: receive state from admCtrl = unknown !!! \n");
2750a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        break;
2751a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
2752a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2753a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    return TI_OK;
2754a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
2755a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2756a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
2757a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                    QosMngr_receiveActionFrames                       *
2758a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
2759a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION:
2760a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2761a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
2762a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2763a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
2764a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_STATUS QosMngr_receiveActionFrames(TI_HANDLE hQosMngr, TI_UINT8* pData, TI_UINT8 action, TI_UINT32 bodyLen)
2765a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
27663bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt	TI_UINT8					    acID;
27673bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt	tsInfo_t				        tsInfo;
27683bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt	TI_UINT8					    userPriority;
27693bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt    OS_802_11_QOS_TSPEC_PARAMS      addtsReasonCode;
27703bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt    TI_UINT8                        statusCode = 0;
27713bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt#ifdef XCC_MODULE_INCLUDED
27723bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt	paramInfo_t                     param;
27733bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt#endif
2774a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
2775a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2776a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* check if STA is already connected to AP */
2777a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if( (pQosMngr->isConnected == TI_FALSE) ||
2778a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		(pQosMngr->activeProtocol != QOS_WME) ||
2779a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		(pQosMngr->trafficAdmCtrlEnable == TI_FALSE) )
2780a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2781005bbf20350954d05c8a111d3f487d6fddb049bbDmitry Shmidt        TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "QosMngr_receiveActionFrames:  Ignore  !!!");
2782a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
2783a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2784a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2785a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* check DELTS action code */
2786a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if (action == DELTS_ACTION)
2787a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2788a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/*
2789a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 *  parse the frame
2790a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		 */
2791a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2792a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* skip dialog-token (1 byte), status-code (1 byte) and dot11_WME_TSPEC_IE header (8 bytes). */
2793a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pData += 10;
2794a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2795a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/*  Get TS-Info from TSpec IE in DELTS, and get from it the user-priority. */
2796a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		tsInfo.tsInfoArr[0] = *pData;
2797a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pData++;
2798005bbf20350954d05c8a111d3f487d6fddb049bbDmitry Shmidt        tsInfo.tsInfoArr[1] = *pData;
2799a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pData++;
2800a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		tsInfo.tsInfoArr[2] = *pData;
2801a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2802a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        userPriority = (((tsInfo.tsInfoArr[1]) & TS_INFO_1_USER_PRIORITY_MASK) >> USER_PRIORITY_SHIFT);
2803a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2804a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		acID = WMEQosTagToACTable[userPriority];
2805a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2806a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2807005bbf20350954d05c8a111d3f487d6fddb049bbDmitry Shmidt        TRACE1(pQosMngr->hReport, REPORT_SEVERITY_INFORMATION, "QosMngr_receiveActionFrames: DELTS [ acID = %d ] \n", acID);
2808a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2809a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2810a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		/* check if this AC is admitted with the correct userPriority */
2811a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if( (pQosMngr->resourceMgmtTable.currentTspecInfo[acID].trafficAdmState == AC_ADMITTED) &&
2812a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			( pQosMngr->resourceMgmtTable.currentTspecInfo[acID].userPriority == userPriority) )
2813a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
2814a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			deleteTspecConfiguration(pQosMngr, acID);
2815a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2816a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            /* Send event to notify DEL_TS */
2817a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            addtsReasonCode.uAPSDFlag = 0;
2818a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            addtsReasonCode.uMinimumServiceInterval = 0;
2819a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            addtsReasonCode.uMaximumServiceInterval = 0;
2820a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		    addtsReasonCode.uUserPriority = userPriority;
2821a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            addtsReasonCode.uReasonCode = TSPEC_DELETED_BY_AP;
2822a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		    addtsReasonCode.uNominalMSDUsize = 0;
2823a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		    addtsReasonCode.uMeanDataRate = 0;
2824a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		    addtsReasonCode.uMinimumPHYRate = 0;
2825a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		    addtsReasonCode.uSurplusBandwidthAllowance = 0;
2826a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		    addtsReasonCode.uMediumTime = 0;
2827a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2828a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            EvHandlerSendEvent(pQosMngr->hEvHandler, IPC_EVENT_TSPEC_STATUS, (TI_UINT8*)(&addtsReasonCode), sizeof(OS_802_11_QOS_TSPEC_PARAMS));
2829a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
2830a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		else
2831a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
2832005bbf20350954d05c8a111d3f487d6fddb049bbDmitry Shmidt            TRACE3(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "QosMngr_receiveActionFrames: DELTS [ acID = %d userPriority = %d  currentUserPriority = %d] Current State in not ADMITED !! \n", acID, userPriority,pQosMngr->resourceMgmtTable.currentTspecInfo[acID].userPriority);
2833a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2834a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
2835a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2836a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* if action code is ADDTS call trafficAdmCtrl object API function */
2837a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	else if (action == ADDTS_RESPONSE_ACTION)
2838a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
28393bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt        statusCode = *(pData+1);
28403bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt
28413bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt#ifdef XCC_MODULE_INCLUDED
28423bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt
28433bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt        if (ADDTS_STATUS_CODE_SUCCESS != statusCode)
28443bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt        {
28453bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt            tspecInfo_t tspecInfo;
28463bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt            param.paramType = ROAMING_MNGR_TRIGGER_EVENT;
28473bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt            param.content.roamingTriggerType =  ROAMING_TRIGGER_TSPEC_REJECTED;
28483bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt            roamingMngr_setParam(pQosMngr->hRoamMng, &param);
28493bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt
28503bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt
28513bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt            trafficAdmCtrl_parseTspecIE(&tspecInfo, pData+2);
28523bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt
28533bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt            addtsReasonCode.uAPSDFlag = tspecInfo.UPSDFlag;
28543bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt            addtsReasonCode.uMinimumServiceInterval = tspecInfo.uMinimumServiceInterval;
28553bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt            addtsReasonCode.uMaximumServiceInterval = tspecInfo.uMaximumServiceInterval;
28563bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt            addtsReasonCode.uUserPriority = (TI_UINT32)tspecInfo.userPriority;
28573bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt            addtsReasonCode.uReasonCode = ADDTS_RESPONSE_REJECT;
28583bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt            addtsReasonCode.uNominalMSDUsize = (TI_UINT32)tspecInfo.nominalMsduSize & ~FIXED_NOMINAL_MSDU_SIZE_MASK;
28593bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt            addtsReasonCode.uMeanDataRate = tspecInfo.meanDataRate;
28603bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt            addtsReasonCode.uMinimumPHYRate = tspecInfo.minimumPHYRate;
28613bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt            addtsReasonCode.uSurplusBandwidthAllowance = (TI_UINT32)tspecInfo.surplausBwAllowance;
28623bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt            addtsReasonCode.uMediumTime = (TI_UINT32)tspecInfo.mediumTime;
28633bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt
28643bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt            EvHandlerSendEvent(pQosMngr->hEvHandler, IPC_EVENT_TSPEC_STATUS, (TI_UINT8*)(&addtsReasonCode), sizeof(OS_802_11_QOS_TSPEC_PARAMS));
28653bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt        }
28663bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt#endif
28673bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt
2868a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		if (trafficAdmCtrl_recv(pQosMngr->pTrafficAdmCtrl, pData, action) == TI_OK)
2869a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		{
2870a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#ifdef XCC_MODULE_INCLUDED
2871a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			/* Check if XCC IEs present, if so, parse them and update relevant modules;
2872a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt               skip the TSPEC IE;
2873a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt               do not forget 2 bytes of status and dialog code that must be skipped as well */
2874a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			XCCv4IEs_t			XCCIE;
2875a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			TI_UINT32 				readLen;
2876a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2877a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			XCCIE.edcaLifetimeParameter = NULL;
2878a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			XCCIE.trafficStreamParameter = NULL;
2879a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			XCCIE.tsMetrixParameter = NULL;
2880a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2881a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			userPriority = GET_USER_PRIORITY_FROM_WME_TSPEC_IE(pData+2);
2882a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			acID = WMEQosTagToACTable[userPriority];
2883a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2884a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			/* The length is in the second byte of the IE header, after the token and status. */
2885a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			readLen = (TI_UINT32)(*(pData + 3));
2886a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2887a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			/* 4 stands for 1 byte of token + 1 byte of status + 1 byte of EID + 1 byte of len */
2888a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			bodyLen = bodyLen - 4 - readLen;
2889a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pData = pData + 4 + readLen;
2890a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2891a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			while (bodyLen)
2892a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			{
2893a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				mlmeParser_readXCCOui(pData, bodyLen, &readLen, &XCCIE);
2894a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				bodyLen -= readLen;
2895a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				pData += readLen;
2896a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			}
2897a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2898a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			XCCMngr_setXCCQoSParams(pQosMngr->hXCCMgr, &XCCIE, acID);
2899a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#endif
2900a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		}
2901a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2902a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	else
2903a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2904005bbf20350954d05c8a111d3f487d6fddb049bbDmitry Shmidt        TRACE1(pQosMngr->hReport, REPORT_SEVERITY_WARNING, "QosMngr_receiveActionFrames: Receive unknown action code = %d  -> Ignore !! \n",action);
2905a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2906a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2907a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return TI_OK;
2908a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
2909a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2910a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
2911a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        qosMngr_getCurrAcStatus     		            *
2912a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
2913a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: This function is API fuunction for getting tha AC status .
2914a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2915a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      hQosMngr	             - Qos Manager handle.
2916a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			pAcStatusParams
2917a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2918a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
2919a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2920a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:     TI_OK on success, TI_NOK otherwise
2921a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2922a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
2923a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic TI_STATUS qosMngr_getCurrAcStatus(TI_HANDLE hQosMngr, OS_802_11_AC_UPSD_STATUS_PARAMS *pAcStatusParams)
2924a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
2925a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    qosMngr_t *pQosMngr = (qosMngr_t *)hQosMngr;
2926a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2927a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* check AC validity */
2928a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if( pAcStatusParams->uAC > MAX_NUM_OF_AC - 1 )
2929a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2930a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_getCurrAcStatus: acID > 3 -> Ignore !!!");
2931a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return TI_NOK;
2932a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2933a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2934a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	/* check if sta is connected to AP */
2935a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosMngr->isConnected == TI_FALSE)
2936a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2937a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_getCurrAcStatus: pQosMngr->connected == TI_FALSE -> Ignore !!!");
2938a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return NOT_CONNECTED;
2939a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2940a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2941a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	 /* check if AP support QOS_WME */
2942a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(pQosMngr->activeProtocol != QOS_WME)
2943a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2944a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		TRACE0(pQosMngr->hReport, REPORT_SEVERITY_ERROR, "qosMngr_getCurrAcStatus: activeProtocol != QOS_WME -> Ignore !!!");
2945a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		return NO_QOS_AP;
2946a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2947a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2948a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pAcStatusParams->uCurrentUAPSDStatus = pQosMngr->acParams[pAcStatusParams->uAC].currentWmeAcPsMode;
2949a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pAcStatusParams->pCurrentAdmissionStatus = pQosMngr->resourceMgmtTable.currentTspecInfo[pAcStatusParams->uAC].trafficAdmState;
2950a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2951a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	return TI_OK;
2952a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
2953a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2954a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2955a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2956a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/************************************************************************
2957a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *                        setNonQosAdmissionState  		                *
2958a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt ************************************************************************
2959a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtDESCRIPTION: This function resets the admission state variables as required
2960a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt				for non-QoS mode and configures the Tx module.
2961a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2962a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtINPUT:      pQosMngr	- Qos Manager pointer.
2963a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt			acId		- the AC to update.
2964a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2965a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtOUTPUT:
2966a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2967a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtRETURN:
2968a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2969a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt************************************************************************/
2970a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2971a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic void setNonQosAdmissionState(qosMngr_t *pQosMngr, TI_UINT8 acID)
2972a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
2973a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	if(acID == QOS_AC_BE)
2974a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2975a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].apInitAdmissionState = ADMISSION_NOT_REQUIRED;
2976a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.currentTspecInfo[acID].trafficAdmState = AC_ADMITTED;
2977a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2978a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		txCtrlParams_setAcAdmissionStatus(pQosMngr->hTxCtrl, acID, ADMISSION_NOT_REQUIRED, AC_ADMITTED);
2979a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2980a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	else
2981a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	{
2982a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->acParams[acID].apInitAdmissionState = ADMISSION_REQUIRED;
2983a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		pQosMngr->resourceMgmtTable.currentTspecInfo[acID].trafficAdmState = AC_NOT_ADMITTED;
2984a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2985a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt		txCtrlParams_setAcAdmissionStatus(pQosMngr->hTxCtrl, acID, ADMISSION_REQUIRED, AC_NOT_ADMITTED);
2986a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	}
2987a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
2988a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
2989a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidtstatic void qosMngr_storeTspecCandidateParams (tspecInfo_t *pCandidateParams, OS_802_11_QOS_TSPEC_PARAMS *pTSPECParams, TI_UINT8 ac)
2990a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
2991a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pCandidateParams->AC = (EAcTrfcType)ac;
2992a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pCandidateParams->tid = (TI_UINT8)pTSPECParams->uUserPriority;
2993a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pCandidateParams->userPriority = (TI_UINT8)pTSPECParams->uUserPriority;
2994a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pCandidateParams->meanDataRate = pTSPECParams->uMeanDataRate;
29953bb9a92880f8cda8c242707ad02077f13b009632Dmitry Shmidt	pCandidateParams->nominalMsduSize = ((TI_UINT16)pTSPECParams->uNominalMSDUsize) | FIXED_NOMINAL_MSDU_SIZE_MASK;
2996a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pCandidateParams->UPSDFlag = (TI_BOOL)pTSPECParams->uAPSDFlag;
2997a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pCandidateParams->uMinimumServiceInterval = pTSPECParams->uMinimumServiceInterval;
2998a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pCandidateParams->uMaximumServiceInterval = pTSPECParams->uMaximumServiceInterval;
2999a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pCandidateParams->surplausBwAllowance = (TI_UINT16)pTSPECParams->uSurplusBandwidthAllowance;
3000a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pCandidateParams->minimumPHYRate = pTSPECParams->uMinimumPHYRate;
3001a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pCandidateParams->streamDirection = BI_DIRECTIONAL;
3002a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt	pCandidateParams->mediumTime = 0;
3003a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
3004005bbf20350954d05c8a111d3f487d6fddb049bbDmitry Shmidt
3005