blob: 4cd9bfc6564749364526c4be569a4fef89048de1 [file] [log] [blame]
/*
* Copyright (c) 2011-2017 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all
* copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/*
* This file was originally distributed by Qualcomm Atheros, Inc.
* under proprietary terms before Copyright ownership was assigned
* to the Linux Foundation.
*/
/*
*
* Author: Sandesh Goel
* Date: 02/25/02
* History:-
* Date Modified by Modification Information
* --------------------------------------------------------------------
*
*/
#ifndef __DPH_GLOBAL_H__
#define __DPH_GLOBAL_H__
#include "limGlobal.h"
#include "sirMacProtDef.h"
#include "sirMacPropExts.h"
#include "sirApi.h"
/// Following determines whether statistics are maintained or not
#define DPH_STATS
/// STAID for Management frames
#define DPH_USE_MGMT_STAID -1
// Keep Alive frames
#define DPH_NON_KEEPALIVE_FRAME 0
#define DPH_KEEPALIVE_FRAME 1
//DPH Hash Index for BSS(STA's Peer) on station.
#define DPH_STA_HASH_INDEX_PEER 1
#ifdef WLAN_FEATURE_11W
//DPH PMF SA Query state for station
#define DPH_SA_QUERY_NOT_IN_PROGRESS 1
#define DPH_SA_QUERY_IN_PROGRESS 2
#define DPH_SA_QUERY_TIMED_OUT 3
#endif
typedef struct sDphRateBasedCtr
{
tANI_U32 hi;
tANI_U32 lo;
} tDphRateBasedCtr;
typedef struct sDphPhyRates
{
tANI_U8 dataRateX2;
tANI_U8 ackRateX2;
tANI_U8 rtsRateX2;
} tDphPhyRates;
typedef struct sDphIFSValues
{
tANI_U8 sifs;
tANI_U8 pifs;
tANI_U8 difs;
tANI_U8 preamble;
} tDphIFSValues;
typedef struct sDphQosParams
{
tANI_U8 addtsPresent;
tSirAddtsReqInfo addts;
tSirMacQosCapabilityStaIE capability;
} tDphQosParams;
/// Queue attribute structure
typedef struct sDphQueueAttr
{
tANI_U16 valid : 1;
tANI_U16 seqNum : 12;
tANI_U16 ackPolicy : 2;
tANI_U16 rsvd : 1;
} tDphQueueAttr, *tpDphQueueAttr;
typedef struct sCfgTrafficClass {
//Use Block ACK on this STA/TID
// Fields used to store the default TC parameters for this TSPEC.
// They will be used when the TSPEC is deleted.
tANI_U8 fDisableTx:1;
tANI_U8 fDisableRx:1;
tANI_U8 fUseBATx:1;
tANI_U8 fUseBARx:1;
// 1: expect to see frames with compressed BA coming from this peer MAC
tANI_U8 fRxCompBA:1;
tANI_U8 fTxCompBA:1;
// immediate ACK or delayed ACK for frames from this peer MAC
tANI_U8 fRxBApolicy:1;
// immediate ACK or delayed ACK for frames to this peer MAC
tANI_U8 fTxBApolicy:1;
//Initiator or recipient
tANI_U8 role;
//Max # of MSDU received from this STA, negotiated at ADDBA
// used for maintaining block ack state info
tANI_U16 rxBufSize;
//Max # of MSDU send to this STA, negotiated at ADDBA
tANI_U16 txBufSize;
//BA timeout negotiated at ADDBA. Unit: TU
tANI_U16 tuTxBAWaitTimeout; //Time for Tx to wait for BA. 0 means no timeout
tANI_U16 tuRxBAWaitTimeout; //Time for Rx to wait for explicit/implicit BAR. 0 means no timeout
} tCfgTrafficClass;
/// STA state node
typedef struct sDphHashNode
{
//BYTE 0
// HASH ENTRY FIELDS NOT NEEDED IN HAL.
/// This STA valid or not
tANI_U8 valid : 1;
tANI_U8 encPolicy : 3;
tANI_U8 defaultKey : 1;
tANI_U8 defaultKeyId : 2;
tANI_U8 qosMode : 1;
//BYTE 1
tANI_U8 erpEnabled : 1;
tANI_U8 added : 1; // This has been added to the dph hash table
tANI_U8 linkTestOn : 1;
tANI_U8 shortPreambleEnabled : 1;
tANI_U8 shortSlotTimeEnabled : 1;
tANI_U8 stopTx:1;
tANI_U8 wmeEnabled: 1; // set if both ap and sta are wme capable
tANI_U8 lleEnabled: 1; // set if both ap and sta are 11e capable
//BYTE 2
tANI_U8 wsmEnabled: 1; // set if both ap and sta are wsm capable
tANI_U8 versionPresent:1; // station gave version info
tANI_U8 burstEnableForce:1; // allow bursting regardless of qosMode
tANI_U8 staAuthenticated:1;
tANI_U8 fAniCount:1;
tANI_U8 rmfEnabled:1;
/// Fragmentation size
tANI_U16 fragSize;
/// LIM state
tLimMlmStaContext mlmStaContext;
/// Number of Tim to wait if the STA doesn't respond / fetch data
tANI_U8 timWaitCount;
/* Number of Successful MPDU's being sent */
tANI_U32 curTxMpduCnt;
/// number of consecutive TIMs sent without response
tANI_U8 numTimSent;
// qos parameter info
tDphQosParams qos;
// station version info - valid only if versionPresent is set
tSirMacPropVersion version;
#ifdef PLM_WDS
tANI_U8 wdsIndex;
tANI_U8 wdsPeerBeaconSeen;
#endif
tANI_U16 baPolicyFlag; //BA Policy for each TID.
/*
* All the legacy supported rates.
*/
tSirSupportedRates supportedRates;
tANI_U8 htGreenfield:1;
tANI_U8 htShortGI40Mhz:1;
tANI_U8 htShortGI20Mhz:1;
// DSSS/CCK at 40 MHz: Enabled 1 or Disabled
tANI_U8 htDsssCckRate40MHzSupport:1;
// L-SIG TXOP Protection used only if peer support available
tANI_U8 htLsigTXOPProtection:1;
// A-MPDU Density
// 000 - No restriction
// 001 - 1/8 usec
// 010 - 1/4 usec
// 011 - 1/2 usec
// 100 - 1 usec
// 101 - 2 usec
// 110 - 4 usec
// 111 - 8 usec
//
tANI_U8 htAMpduDensity:3;
//Set to 0 for 3839 octets
//Set to 1 for 7935 octets
tANI_U8 htMaxAmsduLength;
// MIMO Power Save
tSirMacHTMIMOPowerSaveState htMIMOPSState;
//
// Maximum Rx A-MPDU factor
tANI_U8 htMaxRxAMpduFactor:3;
//
// Recommended Tx Width Set
// 0 - use 20 MHz channel (control channel)
// 1 - use 40 Mhz channel
//
tANI_U8 htSupportedChannelWidthSet:1;
tANI_U8 htSecondaryChannelOffset:2;
tANI_U8 rsvd1:2;
///////////////////////////////////////////////////////////////////////
// DPH HASH ENTRY FIELDS NEEDED IN HAL ONLY
///////////////////////////////////////////////////////////////////////
tANI_U8 dpuSig:4; /* DPU signature */
tANI_U8 staSig:4; // STA signature
tANI_U8 staType;
tANI_U16 bssId; // BSSID
tANI_U16 assocId; // Association ID
//This is the real sta index generated by HAL
tANI_U16 staIndex;
tANI_U8 staAddr[6];
/*The DPU signatures will be sent eventually to TL to help it determine the
association to which a packet belongs to*/
/*Unicast DPU signature*/
tANI_U8 ucUcastSig;
/*Broadcast DPU signature*/
tANI_U8 ucBcastSig;
//
// PE needs this info on a per-STA, per-TID basis
// At any point in time, when this data is sampled,
// it gives a measure of:
// a) All the active bA sessions
// b) And the BA configuration itself
//
tCfgTrafficClass tcCfg[STACFG_MAX_TC];
//BA state bitmap 2 bits per tid
// BA state for tid i = (baState >> tid*2) & 0x3
tANI_U32 baState;
#ifdef WLAN_FEATURE_11AC
tANI_U8 vhtSupportedChannelWidthSet;
tANI_U8 vhtSupportedRxNss;
tANI_U8 vhtBeamFormerCapable;
#endif
#ifdef WLAN_FEATURE_11W
tANI_U8 pmfSaQueryState;
tANI_U8 pmfSaQueryRetryCount;
tANI_U16 pmfSaQueryCurrentTransId;
tANI_U16 pmfSaQueryStartTransId;
TX_TIMER pmfSaQueryTimer;
v_TIME_t last_unprot_deauth_disassoc;
tANI_U8 proct_deauh_disassoc_cnt;
v_TIME_t last_assoc_received_time;
#endif
tANI_U8 htLdpcCapable;
tANI_U8 vhtLdpcCapable;
#ifdef FEATURE_WLAN_TDLS
tANI_U16 ht_caps;
tANI_U32 vht_caps;
#endif
/* Timing and fine Timing measurement capability clubbed together */
tANI_U8 timingMeasCap;
/* key installed for this STA or not in the firmware */
tANI_U8 isKeyInstalled;
uint8_t nss;
tANI_U8 isDisassocDeauthInProgress;
bool sta_deletion_in_progress;
tANI_S8 del_sta_ctx_rssi;
uint8_t sub20_dynamic_channelwidth;
/* Flag indicating connected STA doesn't support ECSA */
uint8_t non_ecsa_capable;
/* When a station with an existing dph entry tries to
* associate again, the old dph entry will be zeroed out except
* for the next pointer. The next pointer must be defined at the
* end of the structure.
*/
struct sDphHashNode *next;
/* DO NOT ADD NEW MEMBER AFTER MEMBER *next */
} tDphHashNode, *tpDphHashNode;
#include "dphHashTable.h"
// -------------------------------------------------------------------
typedef struct sAniSirDph
{
/// The hash table object
dphHashTableClass dphHashTable;
} tAniSirDph, *tpAniSirDph;
#endif