/* * txCtrl_Api.h * * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * Neither the name Texas Instruments nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /***************************************************************************/ /* */ /* MODULE: txCtrl_Api.h */ /* PURPOSE: TxCtrl module API Header file */ /* */ /***************************************************************************/ #ifndef _TX_CTRL_API_H_ #define _TX_CTRL_API_H_ #include "GeneralUtilApi.h" #include "DrvMainModules.h" /* TxCtrl Xmit results */ typedef enum { STATUS_XMIT_SUCCESS, STATUS_XMIT_BUSY, STATUS_XMIT_ERROR } EStatusXmit; typedef struct { TI_BOOL bHtEnable; /* current flag of HT Capabilities enabled */ TI_UINT32 uTxCtrlHtControl; /* The HT Control Field for futur use. for now empty and the FW set it */ } TtxCtrlHtControl; /* Build the buffers descriptor of a typical two buffers (header & data) Tx packet */ #define BUILD_TX_TWO_BUF_PKT_BDL(pPktCtrlBlk, pHdrBuf, uHdrLen, pDataBuf, uDataLen) \ pPktCtrlBlk->tTxnStruct.aBuf[0] = (TI_UINT8 *) (pHdrBuf); \ pPktCtrlBlk->tTxnStruct.aLen[0] = (TI_UINT16 ) (uHdrLen); \ pPktCtrlBlk->tTxnStruct.aBuf[1] = (TI_UINT8 *) (pDataBuf); \ pPktCtrlBlk->tTxnStruct.aLen[1] = (TI_UINT16 ) (uDataLen); \ pPktCtrlBlk->tTxnStruct.aLen[2] = 0; \ pPktCtrlBlk->tTxDescriptor.length = (TI_UINT16)((uHdrLen) + (uDataLen)); /****************************************************************/ /* MODULE PUBLIC FUNCTIONS */ /****************************************************************/ /* * The TxCtrl MAIN public functions (in txCtrl.c): */ TI_HANDLE txCtrl_Create (TI_HANDLE hOs); void txCtrl_Init (TStadHandlesList *pStadHandles); TI_STATUS txCtrl_SetDefaults (TI_HANDLE hTxCtrl, txDataInitParams_t *txDataInitParams); TI_STATUS txCtrl_Unload (TI_HANDLE hTxCtrl); TI_STATUS txCtrl_XmitData (TI_HANDLE hTxCtrl, TTxCtrlBlk *pPktCtrlBlk); TI_STATUS txCtrl_XmitMgmt (TI_HANDLE hTxCtrl, TTxCtrlBlk *pPktCtrlBlk); void txCtrl_UpdateQueuesMapping (TI_HANDLE hTxCtrl); void * txCtrl_AllocPacketBuffer (TI_HANDLE hTxCtrl, TTxCtrlBlk *pPktCtrlBlk, TI_UINT32 uPacketLen); void txCtrl_FreePacket (TI_HANDLE hTxCtrl, TTxCtrlBlk *pPktCtrlBlk, TI_STATUS eStatus); TI_STATUS txCtrl_NotifyFwReset(TI_HANDLE hTxCtrl); TI_STATUS txCtrl_CheckForTxStuck(TI_HANDLE hTxCtrl); TI_UINT32 txCtrl_BuildDataPktHdr (TI_HANDLE hTxCtrl, TTxCtrlBlk *pPktCtrlBlk, AckPolicy_e ackPolicy); /* * The txCtrlParams.c sub-module public functions: */ void txCtrlParams_resetCounters(TI_HANDLE hTxCtrl); TI_HANDLE txCtrlParams_RegNotif(TI_HANDLE hTxCtrl, TI_UINT16 EventMask, GeneralEventCall_t CallBack, TI_HANDLE context, TI_UINT32 Cookie); TI_STATUS txCtrlParams_AddToNotifMask(TI_HANDLE hTxCtrl, TI_HANDLE Notifh, TI_UINT16 EventMask); TI_STATUS txCtrlParams_UnRegNotif(TI_HANDLE hTxCtrl, TI_HANDLE RegEventHandle); TI_STATUS txCtrlParams_setAdmissionCtrlParams(TI_HANDLE hTxCtrl, TI_UINT8 acId, TI_UINT16 mediumTime, TI_UINT32 minimumPHYRate, TI_BOOL admFlag); TI_STATUS txCtrlParams_getParam(TI_HANDLE hTxCtrl, paramInfo_t *pParamInfo); TI_STATUS txCtrlParams_setParam(TI_HANDLE hTxCtrl, paramInfo_t *pParamInfo); TI_STATUS txCtrlParams_SetHtControl (TI_HANDLE hTxCtrl, TtxCtrlHtControl *pHtControl); void txCtrlParams_setBssId (TI_HANDLE hTxCtrl, TMacAddr *pCurrBssId); void txCtrlParams_setBssType (TI_HANDLE hTxCtrl, ScanBssType_e currBssType); void txCtrlParams_setQosHeaderConverMode (TI_HANDLE hTxCtrl, EHeaderConvertMode headerConverMode); void txCtrlParams_setCurrentPrivacyInvokedMode (TI_HANDLE hTxCtrl, TI_BOOL currentPrivacyInvokedMode); void txCtrlParams_setEapolEncryptionStatus (TI_HANDLE hTxCtrl, TI_BOOL eapolEncryptionStatus); void txCtrlParams_setEncryptionFieldSizes (TI_HANDLE hTxCtrl, TI_UINT8 encryptionFieldSize); void txCtrlParams_getCurrentEncryptionInfo (TI_HANDLE hTxCtrl, TI_BOOL *pCurrentPrivacyInvokedMode, TI_UINT8 *pEncryptionFieldSize); ERate txCtrlParams_GetTxRate (TI_HANDLE hTxCtrl); void txCtrlParams_setAcAdmissionStatus (TI_HANDLE hTxCtrl, TI_UINT8 ac, EAdmissionState admissionRequired, ETrafficAdmState admissionState); void txCtrlParams_setAcMsduLifeTime (TI_HANDLE hTxCtrl, TI_UINT8 ac, TI_UINT32 msduLifeTime); void txCtrlParams_setAcAckPolicy (TI_HANDLE hTxCtrl, TI_UINT8 ac, AckPolicy_e ackPolicy); void txCtrlParams_updateMgmtRateAttributes(TI_HANDLE hTxCtrl, TI_UINT8 ratePolicyId, TI_UINT8 ac); void txCtrlParams_updateDataRateAttributes(TI_HANDLE hTxCtrl, TI_UINT8 ratePolicyId, TI_UINT8 ac); void txCtrlParams_updateTxSessionCount(TI_HANDLE hTxCtrl, TI_UINT16 txSessionCount); #ifdef TI_DBG void txCtrlParams_printInfo(TI_HANDLE hTxCtrl); void txCtrlParams_printDebugCounters(TI_HANDLE hTxCtrl); void txCtrlParams_resetDbgCounters(TI_HANDLE hTxCtrl); #endif /* TI_DBG */ /* * The txCtrlServ.c sub-module public functions: */ TI_STATUS txCtrlServ_buildNullFrame(TI_HANDLE hTxCtrl, TI_UINT8* pFrame, TI_UINT32* pLength); TI_STATUS txCtrlServ_buildWlanHeader(TI_HANDLE hTxCtrl, TI_UINT8* pFrame, TI_UINT32* pLength); #endif /* _TX_CTRL_API_H_ */