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, ¶m); 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, ¶m); 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, ¶m); 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, ¶m); 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, ¶m); 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