Home | History | Annotate | Download | only in Data_link
      1 /*
      2  * txCtrl.h
      3  *
      4  * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
      5  * All rights reserved.
      6  *
      7  * Redistribution and use in source and binary forms, with or without
      8  * modification, are permitted provided that the following conditions
      9  * are met:
     10  *
     11  *  * Redistributions of source code must retain the above copyright
     12  *    notice, this list of conditions and the following disclaimer.
     13  *  * Redistributions in binary form must reproduce the above copyright
     14  *    notice, this list of conditions and the following disclaimer in
     15  *    the documentation and/or other materials provided with the
     16  *    distribution.
     17  *  * Neither the name Texas Instruments nor the names of its
     18  *    contributors may be used to endorse or promote products derived
     19  *    from this software without specific prior written permission.
     20  *
     21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     24  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     25  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     26  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     27  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     28  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     29  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     30  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     31  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     32  */
     33 
     34 
     35 /***************************************************************************/
     36 /*                                                                         */
     37 /*    MODULE:   txCtrl.h                                                   */
     38 /*    PURPOSE:  txCtrl module Header file                                  */
     39 /*                                                                         */
     40 /***************************************************************************/
     41 #ifndef _TX_CTRL_H_
     42 #define _TX_CTRL_H_
     43 
     44 
     45 #include "paramOut.h"
     46 #include "DataCtrl_Api.h"
     47 
     48 
     49 extern void wlanDrvIf_FreeTxPacket (TI_HANDLE hOs, TTxCtrlBlk *pPktCtrlBlk, TI_STATUS eStatus);
     50 
     51 
     52 #define DEF_TX_PORT_STATUS              CLOSE
     53 #define DEF_CURRENT_PRIVACY_MODE        TI_FALSE
     54 #define DEF_EAPOL_ENCRYPTION_STATUS     TI_FALSE
     55 #define HEADER_PAD_SIZE                 2       /* 2-byte pad before header with QoS, for 4-byte alignment */
     56 #define MGMT_PKT_LIFETIME_TU            2000    /* Mgmt pkts lifetime in TUs (1024 usec). */
     57 
     58 /* defined in qosMngr.c - standard WMM translation from TID to AC. */
     59 extern int WMEQosTagToACTable[MAX_NUM_OF_802_1d_TAGS];
     60 extern const TI_UINT8 WMEQosAcToTid[MAX_NUM_OF_AC];
     61 
     62 /* The TX delay histogram ranges start and end in uSec. */
     63 static const TI_UINT32 txDelayRangeStart[TX_DELAY_RANGES_NUM] = {    0,  1000, 10000, 20000, 40000, 60000,  80000, 100000, 200000 };
     64 static const TI_UINT32 txDelayRangeEnd  [TX_DELAY_RANGES_NUM] = { 1000, 10000, 20000, 40000, 60000, 80000, 100000, 200000, 0xFFFFFFFF };
     65 
     66 /* BE is ordered here above BK for priority sensitive functions (BE is 0 but has higher priority than BK). */
     67 static const EAcTrfcType priorityOrderedAc[] = {QOS_AC_BK, QOS_AC_BE, QOS_AC_VI, QOS_AC_VO};
     68 
     69 typedef struct
     70 {
     71     TI_UINT32  dbgNumPktsSent[MAX_NUM_OF_AC];       /* Pkts sent by data-queue or mgmt-queue. */
     72     TI_UINT32  dbgNumPktsBackpressure[MAX_NUM_OF_AC];/* Pkts for which backpressure was set by HW-Q */
     73     TI_UINT32  dbgNumPktsBusy[MAX_NUM_OF_AC];      /* Pkts for which busy was received from HW-Q */
     74     TI_UINT32  dbgNumPktsXfered[MAX_NUM_OF_AC];    /* Pkts sent to Xfer */
     75     TI_UINT32  dbgNumPktsSuccess[MAX_NUM_OF_AC];   /* Pkts for which success was received from Xfer */
     76     TI_UINT32  dbgNumPktsPending[MAX_NUM_OF_AC];   /* Pkts for which pending was received from Xfer */
     77     TI_UINT32  dbgNumPktsError[MAX_NUM_OF_AC];     /* Pkts for which error was received from Xfer */
     78     TI_UINT32  dbgNumTxCmplt[MAX_NUM_OF_AC];        /* Pkts that reached complete CB */
     79     TI_UINT32  dbgNumTxCmpltOk[MAX_NUM_OF_AC];     /* Pkts that reached complete CB with status TI_OK */
     80     TI_UINT32  dbgNumTxCmpltError[MAX_NUM_OF_AC];  /* Pkts that reached complete CB with status TI_NOK */
     81     TI_UINT32  dbgNumTxCmpltOkBytes[MAX_NUM_OF_AC];/* Acknowledged bytes (complete status TI_OK) */
     82     TI_UINT32  dbgNumXferCmplt;                    /* Number of Xfer-Complete events (after pending). */
     83 } txDataDbgCounters_t;
     84 
     85 
     86 
     87 /*
     88  *  Module object structure.
     89  */
     90 typedef struct
     91 {
     92     /* Handles */
     93     TI_HANDLE           hOs;
     94     TI_HANDLE           hReport;
     95     TI_HANDLE           hCtrlData;
     96     TI_HANDLE           hTWD;
     97     TI_HANDLE           hTxDataQ;
     98     TI_HANDLE           hTxMgmtQ;
     99     TI_HANDLE           hEvHandler;
    100     TI_HANDLE           TxEventDistributor;
    101     TI_HANDLE           hHealthMonitor;
    102     TI_HANDLE           hTimer;
    103     TI_HANDLE           hStaCap;
    104     TI_HANDLE           hXCCMngr;
    105     TI_HANDLE           hQosMngr;
    106     TI_HANDLE           hRxData;
    107 
    108     TI_HANDLE           hCreditTimer;   /* The medium-usage credit timer handle */
    109 
    110     /* External parameters */
    111     EHeaderConvertMode  headerConverMode;  /* QoS header needed for data or not. */
    112     TI_BOOL             currentPrivacyInvokedMode;
    113     TI_BOOL             eapolEncryptionStatus;
    114     TI_UINT8            encryptionFieldSize;  /* size to reserve in WLAN header for encryption */
    115     ScanBssType_e       currBssType;
    116     TMacAddr            currBssId;
    117     TI_UINT16           aMsduLifeTimeTu[MAX_NUM_OF_AC];
    118     AckPolicy_e         ackPolicy[MAX_NUM_OF_AC];
    119     TtxCtrlHtControl    tTxCtrlHtControl;
    120 	TI_UINT16           genericEthertype;
    121 
    122     /* ACs admission and busy mapping */
    123     TI_UINT32           busyAcBitmap;   /* Current bitmap of busy ACs (in HW-Q backpressure format). */
    124     TI_UINT32           busyTidBitmap;  /* Current bitmap of busy TIDs reflected from admitted ACs. */
    125     TI_UINT32           admittedAcToTidMap[MAX_NUM_OF_AC]; /* From HW-AC to bitmap of TIDs that currently use it. */
    126     EAcTrfcType         highestAdmittedAc[MAX_NUM_OF_AC]; /* Provide highest admitted AC equal or below given AC. */
    127     ETrafficAdmState    admissionState[MAX_NUM_OF_AC];    /* AC is allowed to transmit or not. */
    128     EAdmissionState     admissionRequired[MAX_NUM_OF_AC]; /* AC requires AP's admission or not. */
    129 
    130     /* Tx Attributes */
    131     TI_UINT32           mgmtRatePolicy[MAX_NUM_OF_AC];  /* Current rate policy for mgmt packets per AC. */
    132     TI_UINT32           dataRatePolicy[MAX_NUM_OF_AC];  /* Current rate policy for data packets per AC. */
    133     TI_UINT16           txSessionCount;     /* Current Tx-Session index as configured to FW in last Join command. */
    134     TI_UINT16           dataPktDescAttrib;  /* A prototype of Tx-desc attrib bitmap for data pkts. */
    135     TI_UINT8            dbgPktSeqNum;       /* Increment every tx-pkt, insert in descriptor for debug. */
    136 
    137     /* Counters */
    138     TTxDataCounters     txDataCounters[MAX_NUM_OF_AC]; /* Save Tx statistics per Tx-queue. */
    139     TI_UINT32           SumTotalDelayUs[MAX_NUM_OF_AC]; /* Store pkt delay sum in Usecs to avoid divide per
    140                                                             pkt, and covert to msec on user request. */
    141     TI_UINT32           currentConsecutiveRetryFail; /* current consecutive number of tx failures due to max retry */
    142     ERate               eCurrentTxRate;                 /* Save last data Tx rate for applications' query */
    143 
    144     /* credit calculation parameters */
    145 	TI_BOOL				bCreditCalcTimerEnabled;        /* credit timer is enabled from registry */
    146 	TI_BOOL				bCreditCalcTimerRunning;        /* credit calculation timer is running */
    147     TI_UINT32           creditCalculationTimeout;
    148     TI_INT32            lowMediumUsageThreshold[MAX_NUM_OF_AC];
    149     TI_INT32            highMediumUsageThreshold[MAX_NUM_OF_AC];
    150     TI_UINT32           lastCreditCalcTimeStamp[MAX_NUM_OF_AC];
    151     TI_BOOL             useAdmissionAlgo[MAX_NUM_OF_AC];
    152     TI_INT32            credit[MAX_NUM_OF_AC];
    153     TI_UINT32           mediumTime[MAX_NUM_OF_AC];
    154     TI_UINT32           totalUsedTime[MAX_NUM_OF_AC];
    155 
    156 #ifdef TI_DBG
    157     txDataDbgCounters_t dbgCounters;    /* debug counters */
    158 #endif
    159 
    160 } txCtrl_t;
    161 
    162 
    163 
    164 #endif  /* _TX_CTRL_H_ */
    165