blob: 367fc9482be9df1e36f57606488beb1ee713484c [file] [log] [blame]
/*
* Copyright (c) 2012-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.
*/
/*
* aniGlobal.h: MAC Modules Adapter Definitions.
* Author: V. K. Kandarpa
* Date: 10/25/2002
*
* History:-
* Date: 04/08/2008 Modified by: Santosh Mandiganal
* Modification Information: Added the logDump.h header file and defined the
* dumpTablecurrentId, dumpTableEntry.
* --------------------------------------------------------------------------
*
*/
#ifndef _ANIGLOBAL_H
#define _ANIGLOBAL_H
#include "halTypes.h"
#include "sirCommon.h"
#include "aniSystemDefs.h"
#include "sysDef.h"
#include "dphGlobal.h"
#include "limGlobal.h"
#include "pmmGlobal.h"
#include "schGlobal.h"
#include "sysGlobal.h"
#include "cfgGlobal.h"
#include "utilsGlobal.h"
#include "sirApi.h"
#include "wlan_qct_hal.h"
#include "pmc.h"
#include "csrApi.h"
#ifdef WLAN_FEATURE_VOWIFI_11R
#include "sme_FTApi.h"
#endif
#include "csrSupport.h"
#include "smeInternal.h"
#include "sapApi.h"
#include "ccmApi.h"
#include "csrInternal.h"
#ifdef FEATURE_OEM_DATA_SUPPORT
#include "oemDataInternal.h"
#endif
#if defined WLAN_FEATURE_VOWIFI
#include "smeRrmInternal.h"
#include "rrmGlobal.h"
#endif
#if defined(FEATURE_WLAN_ESE) && !defined(FEATURE_WLAN_ESE_UPLOAD)
#include "eseApi.h"
#include "eseGlobal.h"
#endif
#include "p2p_Api.h"
#if defined WLAN_FEATURE_VOWIFI_11R
#include <limFTDefs.h>
#endif
// New HAL API interface defs.
#include "logDump.h"
#include "ol_txrx_ctrl_api.h"
//Check if this definition can actually move here from halInternal.h even for Volans. In that case
//this featurization can be removed.
#define PMAC_STRUCT( _hHal ) ( (tpAniSirGlobal)_hHal )
#define ANI_DRIVER_TYPE(pMac) (((tpAniSirGlobal)(pMac))->gDriverType)
#define IS_MIRACAST_SESSION_PRESENT(pMac) (((tpAniSirGlobal)(pMac))->fMiracastSessionPresent ? 1 : 0)
// -------------------------------------------------------------------
// Bss Qos Caps bit map definition
#define LIM_BSS_CAPS_OFFSET_HCF 0
#define LIM_BSS_CAPS_OFFSET_WME 1
#define LIM_BSS_CAPS_OFFSET_WSM 2
#define LIM_BSS_CAPS_HCF (1 << LIM_BSS_CAPS_OFFSET_HCF)
#define LIM_BSS_CAPS_WME (1 << LIM_BSS_CAPS_OFFSET_WME)
#define LIM_BSS_CAPS_WSM (1 << LIM_BSS_CAPS_OFFSET_WSM)
// cap should be one of HCF/WME/WSM
#define LIM_BSS_CAPS_GET(cap, val) (((val) & (LIM_BSS_CAPS_ ## cap)) >> LIM_BSS_CAPS_OFFSET_ ## cap)
#define LIM_BSS_CAPS_SET(cap, val) ((val) |= (LIM_BSS_CAPS_ ## cap ))
#define LIM_BSS_CAPS_CLR(cap, val) ((val) &= (~ (LIM_BSS_CAPS_ ## cap)))
// 40 beacons per heart beat interval is the default + 1 to count the rest
#define MAX_NO_BEACONS_PER_HEART_BEAT_INTERVAL 41
/* max number of legacy bssid we can store during scan on one channel */
#define MAX_NUM_LEGACY_BSSID_PER_CHANNEL 10
#define P2P_WILDCARD_SSID "DIRECT-" //TODO Put it in proper place;
#define P2P_WILDCARD_SSID_LEN 7
#ifdef WLAN_FEATURE_CONCURRENT_P2P
#define MAX_NO_OF_P2P_SESSIONS 5
#endif //WLAN_FEATURE_CONCURRENT_P2P
#define SPACE_ASCII_VALUE 32
#define WLAN_HOST_SEQ_NUM_MIN 2048
#define WLAN_HOST_SEQ_NUM_MAX 4095
#define LOW_SEQ_NUM_MASK 0x000F
#define HIGH_SEQ_NUM_MASK 0x0FF0
#define HIGH_SEQ_NUM_OFFSET 4
/*
* NSS cfg bit definition.
* STA BIT[0:1]
* SAP BIT[2:3]
* P2P_GO BIT[4:5]
* P2P_CLIENT BIT[6:7]
* IBSS BIT[8:9]
* TDLS BIT[10:11]
* P2P_DEVICE BIT[12:13]
* OCB BIT[14:15]
*/
#define CFG_STA_NSS(_x) ((((_x) >> 0) & 0x3) ? (((_x) >> 0) & 0x3) : 1)
#define CFG_SAP_NSS(_x) ((((_x) >> 2) & 0x3) ? (((_x) >> 2) & 0x3) : 1)
#define CFG_P2P_GO_NSS(_x) ((((_x) >> 4) & 0x3) ? (((_x) >> 4) & 0x3) : 1)
#define CFG_P2P_CLI_NSS(_x) ((((_x) >> 6) & 0x3) ? (((_x) >> 6) & 0x3) : 1)
#define CFG_IBSS_NSS(_x) ((((_x) >> 8) & 0x3) ? (((_x) >> 8) & 0x3) : 1)
#define CFG_TDLS_NSS(_x) ((((_x) >> 10) & 0x3) ? (((_x) >> 10) & 0x3) : 1)
#define CFG_P2P_DEV_NSS(_x) ((((_x) >> 12) & 0x3) ? (((_x) >> 12) & 0x3) : 1)
#define CFG_OCB_NSS(_x) ((((_x) >> 14) & 0x3) ? (((_x) >> 14) & 0x3) : 1)
/**
* enum log_event_type - Type of event initiating bug report
* @WLAN_LOG_TYPE_NON_FATAL: Non fatal event
* @WLAN_LOG_TYPE_FATAL: Fatal event
*
* Enum indicating the type of event that is initiating the bug report
*/
enum log_event_type {
WLAN_LOG_TYPE_NON_FATAL,
WLAN_LOG_TYPE_FATAL,
};
/**
* enum log_event_indicator - Module triggering bug report
* @WLAN_LOG_INDICATOR_UNUSED: Unused
* @WLAN_LOG_INDICATOR_FRAMEWORK: Framework triggers bug report
* @WLAN_LOG_INDICATOR_HOST_DRIVER: Host driver triggers bug report
* @WLAN_LOG_INDICATOR_FIRMWARE: FW initiates bug report
* @WLAN_LOG_INDICATOR_HOST_ONLY: Host triggers fatal event bug report
*
* Enum indicating the module that triggered the bug report
*/
enum log_event_indicator {
WLAN_LOG_INDICATOR_UNUSED,
WLAN_LOG_INDICATOR_FRAMEWORK,
WLAN_LOG_INDICATOR_HOST_DRIVER,
WLAN_LOG_INDICATOR_FIRMWARE,
WLAN_LOG_INDICATOR_HOST_ONLY,
};
/**
* enum log_dump_trace_mask - Mask to indicate what traces to log
* @DUMP_NO_TRACE: Do not dump any logs
* @DUMP_VOS_TRACE: Dump vos trace logs
* @DUMP_PACKET_TRACE: Dump packet trace
*
*/
enum log_dump_trace_mask {
DUMP_NO_TRACE = 0x0,
DUMP_VOS_TRACE = 0x1,
DUMP_PACKET_TRACE = 0x2
};
/**
* enum log_event_host_reason_code - Reason code for bug report
* @WLAN_LOG_REASON_CODE_UNUSED: Unused
* @WLAN_LOG_REASON_ROAM_FAIL: Driver initiated roam has failed
* @WLAN_LOG_REASON_THREAD_STUCK: Monitor Health of host threads and report
* fatal event if some thread is stuck
* @WLAN_LOG_REASON_DATA_STALL: Unable to send/receive data due to low resource
* scenario for a prolonged period
* @WLAN_LOG_REASON_SME_COMMAND_STUCK: SME command is stuck in SME active queue
* @WLAN_LOG_REASON_QUEUE_FULL: Defer queue becomes full for a prolonged period
* @WLAN_LOG_REASON_POWER_COLLAPSE_FAIL: Unable to allow apps power collapse
* for a prolonged period
* @WLAN_LOG_REASON_MALLOC_FAIL: Memory allocation Fails
* @WLAN_LOG_REASON_VOS_MSG_UNDER_RUN: VOS Core runs out of message wrapper
* @WLAN_LOG_REASON_IOCTL: Initiated by IOCTL
* @WLAN_LOG_REASON_CODE_FRAMEWORK: Initiated by framework
* @WLAN_LOG_REASON_DEL_BSS_STA_FAIL: DEL BSS/STA rsp is failure
* @WLAN_LOG_REASON_ADD_BSS_STA_FAIL: ADD BSS/STA rsp is failure
* @WLAN_LOG_REASON_HDD_TIME_OUT: Wait for event Timeout in HDD layer
* @WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT:Management frame timedout
* @WLAN_LOG_REASON_SME_OUT_OF_CMD_BUFL sme out of cmd buffer
* @WLAN_LOG_REASON_NO_SCAN_RESULTS: no scan results to report from HDD
* This enum contains the different reason codes for bug report
* @WLAN_LOG_REASON_SCAN_NOT_ALLOWED: scan not allowed due to connection states
*/
enum log_event_host_reason_code {
WLAN_LOG_REASON_CODE_UNUSED,
WLAN_LOG_REASON_ROAM_FAIL,
WLAN_LOG_REASON_THREAD_STUCK,
WLAN_LOG_REASON_DATA_STALL,
WLAN_LOG_REASON_SME_COMMAND_STUCK,
WLAN_LOG_REASON_QUEUE_FULL,
WLAN_LOG_REASON_POWER_COLLAPSE_FAIL,
WLAN_LOG_REASON_MALLOC_FAIL,
WLAN_LOG_REASON_VOS_MSG_UNDER_RUN,
WLAN_LOG_REASON_IOCTL,
WLAN_LOG_REASON_CODE_FRAMEWORK,
WLAN_LOG_REASON_DEL_BSS_STA_FAIL,
WLAN_LOG_REASON_ADD_BSS_STA_FAIL,
WLAN_LOG_REASON_HDD_TIME_OUT,
WLAN_LOG_REASON_MGMT_FRAME_TIMEOUT,
WLAN_LOG_REASON_SME_OUT_OF_CMD_BUF,
WLAN_LOG_REASON_NO_SCAN_RESULTS,
WLAN_LOG_REASON_STALE_SESSION_FOUND,
WLAN_LOG_REASON_SCAN_NOT_ALLOWED,
};
/**
* enum userspace_log_level - Log level at userspace
* @LOG_LEVEL_NO_COLLECTION: verbose_level 0 corresponds to no collection
* @LOG_LEVEL_NORMAL_COLLECT: verbose_level 1 correspond to normal log level,
* with minimal user impact. this is the default value
* @LOG_LEVEL_ISSUE_REPRO: verbose_level 2 are enabled when user is lazily
* trying to reproduce a problem, wifi performances and power can be impacted
* but device should not otherwise be significantly impacted
* @LOG_LEVEL_ACTIVE: verbose_level 3+ are used when trying to
* actively debug a problem
*
* Various log levels defined in the userspace for logging applications
*/
enum userspace_log_level {
LOG_LEVEL_NO_COLLECTION,
LOG_LEVEL_NORMAL_COLLECT,
LOG_LEVEL_ISSUE_REPRO,
LOG_LEVEL_ACTIVE,
};
/**
* enum wifi_driver_log_level - Log level defined in the driver for logging
* @WLAN_LOG_LEVEL_OFF: No logging
* @WLAN_LOG_LEVEL_NORMAL: Default logging
* @WLAN_LOG_LEVEL_REPRO: Normal debug level
* @WLAN_LOG_LEVEL_ACTIVE: Active debug level
*
* Log levels defined for logging by the wifi driver
*/
enum wifi_driver_log_level {
WLAN_LOG_LEVEL_OFF,
WLAN_LOG_LEVEL_NORMAL,
WLAN_LOG_LEVEL_REPRO,
WLAN_LOG_LEVEL_ACTIVE,
};
/**
* enum wifi_logging_ring_id - Ring id of logging entities
* @RING_ID_WAKELOCK: Power events ring id
* @RING_ID_CONNECTIVITY: Connectivity event ring id
* @RING_ID_PER_PACKET_STATS: Per packet statistic ring id
* @RING_ID_DRIVER_DEBUG: Driver debug messages ring id
* @RING_ID_FIRMWARE_DEBUG: Firmware debug messages ring id
*
* This enum has the ring id values of logging rings
*/
enum wifi_logging_ring_id {
RING_ID_WAKELOCK,
RING_ID_CONNECTIVITY,
RING_ID_PER_PACKET_STATS,
RING_ID_DRIVER_DEBUG,
RING_ID_FIRMWARE_DEBUG,
};
/* vendor element ID */
#define IE_EID_VENDOR (221) /* 0xDD */
#define IE_LEN_SIZE (1)
#define IE_EID_SIZE (1)
/* Minimum size of vendor IE = 3 bytes of oui_data + 1 byte of data */
#define IE_VENDOR_OUI_SIZE (4)
// -------------------------------------------------------------------
// Change channel generic scheme
typedef void (*CHANGE_CHANNEL_CALLBACK)(tpAniSirGlobal pMac, eHalStatus status, tANI_U32 *data,
tpPESession psessionEntry);
/// LIM global definitions
typedef struct sAniSirLimIbss
{
void *pHdr;
void *pBeacon;
} tAniSirLimIbss;
typedef struct sDialogueToken
{
//bytes 0-3
tANI_U16 assocId;
tANI_U8 token;
tANI_U8 rsvd1;
//Bytes 4-7
tANI_U16 tid;
tANI_U8 rsvd2[2];
struct sDialogueToken* next;
}tDialogueToken, *tpDialogueToken;
typedef struct sLimTimers
{
//TIMERS IN LIM ARE NOT SUPPOSED TO BE ZEROED OUT DURING RESET.
//DURING limInitialize DONOT ZERO THEM OUT.
//STA SPECIFIC TIMERS
// Periodic background scan timer
TX_TIMER gLimBackgroundScanTimer;
TX_TIMER gLimPreAuthClnupTimer;
// Association related timers
TX_TIMER gLimAssocFailureTimer;
TX_TIMER gLimReassocFailureTimer;
/// Heartbeat timer on STA
TX_TIMER gLimHeartBeatTimer;
/// Wait for Probe after Heartbeat failure timer on STA
TX_TIMER gLimProbeAfterHBTimer;
// Authentication related timers
TX_TIMER gLimAuthFailureTimer;
// Join Failure timeout on STA
TX_TIMER gLimJoinFailureTimer;
// Keepalive timer
TX_TIMER gLimKeepaliveTimer;
// Scan related timers
TX_TIMER gLimMinChannelTimer;
TX_TIMER gLimMaxChannelTimer;
TX_TIMER gLimPeriodicProbeReqTimer;
// CNF_WAIT timer
TX_TIMER *gpLimCnfWaitTimer;
TX_TIMER gLimAddtsRspTimer; // max wait for a response
// Update OLBC Cache Timer
TX_TIMER gLimUpdateOlbcCacheTimer;
TX_TIMER gLimChannelSwitchTimer;
// This TIMER is started on the STA, as indicated by the
// AP in its Quiet BSS IE, for the specified interval
TX_TIMER gLimQuietTimer;
// This TIMER is started on the AP, prior to the AP going
// into LEARN mode
// This TIMER is started on the STA, for the specified
// quiet duration
TX_TIMER gLimQuietBssTimer;
#ifdef WLAN_FEATURE_VOWIFI_11R
TX_TIMER gLimFTPreAuthRspTimer;
#endif
#ifdef FEATURE_WLAN_ESE
TX_TIMER gLimEseTsmTimer;
#endif
TX_TIMER gLimRemainOnChannelTimer;
TX_TIMER gLimPeriodicJoinProbeReqTimer;
TX_TIMER gLimDisassocAckTimer;
TX_TIMER gLimDeauthAckTimer;
TX_TIMER g_lim_periodic_auth_retry_timer;
// This timer is started when single shot NOA insert msg is sent to FW for scan in P2P GO mode
TX_TIMER gLimP2pSingleShotNoaInsertTimer;
/* This timer is used to convert active channel to
* passive channel when there is no beacon
* for a period of time on a particular DFS channel
*/
TX_TIMER gLimActiveToPassiveChannelTimer;
//********************TIMER SECTION ENDS**************************************************
// ALL THE FIELDS BELOW THIS CAN BE ZEROED OUT in limInitialize
//****************************************************************************************
}tLimTimers;
typedef struct {
void *pMlmDisassocReq;
void *pMlmDeauthReq;
}tLimDisassocDeauthCnfReq;
typedef struct sAniSirLim
{
////////////////////////////////////// TIMER RELATED START ///////////////////////////////////////////
tLimTimers limTimers;
/// Flag to track if LIM timers are created or not
tANI_U32 gLimTimersCreated;
////////////////////////////////////// TIMER RELATED END ///////////////////////////////////////////
////////////////////////////////////// SCAN/LEARN RELATED START ///////////////////////////////////////////
/**
* This flag when set, will use scan mode instead of
* Learn mode on BP/AP. By default this flag is set
* to true until HIF getting stuck in 0x800 state is
* debugged.
*/
tANI_U32 gLimUseScanModeForLearnMode;
/**
* This is useful for modules other than LIM
* to see if system is in scan/learn mode or not
*/
tANI_U32 gLimSystemInScanLearnMode;
// Scan related globals on STA
tANI_U8 gLimReturnAfterFirstMatch;
tANI_U8 gLim24Band11dScanDone;
tANI_U8 gLim50Band11dScanDone;
tANI_U8 gLimReturnUniqueResults;
// Background Scan related globals on STA
tANI_U32 gLimNumOfBackgroundScanSuccess;
tANI_U32 gLimNumOfConsecutiveBkgndScanFailure;
tANI_U32 gLimNumOfForcedBkgndScan;
tANI_U8 gLimBackgroundScanDisable; //based on BG timer
tANI_U8 gLimForceBackgroundScanDisable; //debug control flag
tANI_U8 gLimBackgroundScanTerminate; //controlled by SME
tANI_U8 gLimReportBackgroundScanResults;//controlled by SME
/// Place holder for current channel ID
/// being scanned
tANI_U32 gLimCurrentScanChannelId;
// Hold onto SCAN criteria
/* The below is used in P2P GO case when we need to defer processing SME Req
* to LIM and insert NOA first and process SME req once SNOA is started
*/
tANI_U16 gDeferMsgTypeForNOA;
tANI_U32 *gpDefdSmeMsgForNOA;
tLimMlmScanReq *gpLimMlmScanReq;
/// This indicates total length of 'matched' scan results
tANI_U16 gLimMlmScanResultLength;
/// This indicates total length of 'cached' scan results
tANI_U16 gLimSmeScanResultLength;
/**
* Hash table definition for storing SCAN results
* This is the placed holder for 'cached' scan results
*/
tLimScanResultNode
*gLimCachedScanHashTable[LIM_MAX_NUM_OF_SCAN_RESULTS];
/// This indicates total length of 'matched' scan results
tANI_U16 gLimMlmLfrScanResultLength;
/// This indicates total length of 'cached' scan results
tANI_U16 gLimSmeLfrScanResultLength;
/**
* Hash table definition for storing LFR SCAN results
* This is the placed holder for roaming candidates as forwarded
* by FW
*/
tLimScanResultNode
*gLimCachedLfrScanHashTable[LIM_MAX_NUM_OF_SCAN_RESULTS];
/// Place holder for current channel ID
/// being scanned during background scanning
tANI_U32 gLimBackgroundScanChannelId;
/* Flag to indicate that background scan timer has been started */
tANI_U8 gLimBackgroundScanStarted;
/* Used to store the list of legacy bss sta detected during scan on one channel */
tANI_U16 gLimRestoreCBNumScanInterval;
tANI_U16 gLimRestoreCBCount;
tSirMacAddr gLimLegacyBssidList[MAX_NUM_LEGACY_BSSID_PER_CHANNEL];
/*
* If this flag is 1,
* then, LIM will "try and trigger" a background
* scan whenever it receives a Quiet BSS IE
*
* If this flag is 0,
* then, LIM will simply shut-off Tx/Rx whenever it
* receives a Quiet BSS IE.
* This is the default behaviour when a Quiet BSS IE
* is received and 11H is enabled
*/
tANI_U32 gLimTriggerBackgroundScanDuringQuietBss;
// This variable store the total duration to do scan
tANI_U32 gTotalScanDuration;
tANI_U32 p2pRemOnChanTimeStamp;
// abort scan is used to abort an on-going scan
tANI_U8 abortScan;
tLimScanChnInfo scanChnInfo;
struct lim_scan_channel_status scan_channel_status;
////////////////////////////////////// SCAN/LEARN RELATED START ///////////////////////////////////////////
tSirMacAddr gSelfMacAddr; //added for BT-AMP Support
////////////////////////////////////////// BSS RELATED END ///////////////////////////////////////////
// Place holder for StartBssReq message
// received by SME state machine
tANI_U8 gLimCurrentBssUapsd;
/* This is used for testing sta legacy bss detect feature */
tANI_U8 gLimForceNoPropIE;
//
// Store the BSS Index returned by HAL during
// WDA_ADD_BSS_RSP here.
//
// For now:
// This will be used during WDA_SET_BSSKEY_REQ in
// order to set the GTK
// Later:
// There could be other interfaces needing this info
//
//
// Due to the asynchronous nature of the interface
// between PE <-> HAL, some transient information
// like this needs to be cached.
// This is cached upon receipt of eWNI_SME_SETCONTEXT_REQ.
// This is released while posting LIM_MLM_SETKEYS_CNF
//
void* gpLimMlmSetKeysReq;
void* gpLimMlmRemoveKeyReq;
////////////////////////////////////////// BSS RELATED END ///////////////////////////////////////////
////////////////////////////////////////// IBSS RELATED START ///////////////////////////////////////////
//This indicates whether this STA coalesced and adapter to peer's capabilities or not.
tANI_U8 gLimIbssCoalescingHappened;
/// Definition for storing IBSS peers BSS description
tLimIbssPeerNode *gLimIbssPeerList;
tANI_U32 gLimNumIbssPeers;
tANI_U32 gLimIbssRetryCnt;
// ibss info - params for which ibss to join while coalescing
tAniSirLimIbss ibssInfo;
////////////////////////////////////////// IBSS RELATED END ///////////////////////////////////////////
////////////////////////////////////////// STATS/COUNTER RELATED START ///////////////////////////////////////////
tANI_U16 maxStation;
tANI_U16 maxBssId;
tANI_U32 gLimNumBeaconsRcvd;
tANI_U32 gLimNumBeaconsIgnored;
tANI_U32 gLimNumDeferredMsgs;
/// Variable to keep track of number of currently associated STAs
tANI_U16 gLimNumOfAniSTAs; // count of ANI peers
tANI_U16 gLimAssocStaLimit;
uint16_t glim_assoc_sta_limit_ap;
uint16_t glim_assoc_sta_limit_go;
// Heart-Beat interval value
tANI_U32 gLimHeartBeatCount;
tSirMacAddr gLimHeartBeatApMac[2];
tANI_U8 gLimHeartBeatApMacIndex;
// Statistics to keep track of no. beacons rcvd in heart beat interval
tANI_U16 gLimHeartBeatBeaconStats[MAX_NO_BEACONS_PER_HEART_BEAT_INTERVAL];
#ifdef WLAN_DEBUG
// Debug counters
tANI_U32 numTot, numBbt, numProtErr, numLearn, numLearnIgnore;
tANI_U32 numSme, numMAC[4][16];
// Debug counter to track number of Assoc Req frame drops
// when received in pStaDs->mlmState other than LINK_ESTABLISED
tANI_U32 gLimNumAssocReqDropInvldState;
// counters to track rejection of Assoc Req due to Admission Control
tANI_U32 gLimNumAssocReqDropACRejectTS;
tANI_U32 gLimNumAssocReqDropACRejectSta;
// Debug counter to track number of Reassoc Req frame drops
// when received in pStaDs->mlmState other than LINK_ESTABLISED
tANI_U32 gLimNumReassocReqDropInvldState;
// Debug counter to track number of Hash Miss event that
// will not cause a sending of de-auth/de-associate frame
tANI_U32 gLimNumHashMissIgnored;
// Debug counter to track number of Beacon frames
// received in unexpected state
tANI_U32 gLimUnexpBcnCnt;
// Debug counter to track number of Beacon frames
// received in wt-join-state that do have SSID mismatch
tANI_U32 gLimBcnSSIDMismatchCnt;
// Debug counter to track number of Link establishments on STA/BP
tANI_U32 gLimNumLinkEsts;
// Debug counter to track number of Rx cleanup
tANI_U32 gLimNumRxCleanup;
// Debug counter to track different parse problem
tANI_U32 gLim11bStaAssocRejectCount;
#endif
//Time stamp of the last beacon received from the BSS to which STA is connected.
tANI_U64 gLastBeaconTimeStamp;
//RX Beacon count for the current BSS to which STA is connected.
tANI_U32 gCurrentBssBeaconCnt;
tANI_U8 gLastBeaconDtimCount;
tANI_U8 gLastBeaconDtimPeriod;
////////////////////////////////////////// STATS/COUNTER RELATED END ///////////////////////////////////////////
////////////////////////////////////////// STATES RELATED START ///////////////////////////////////////////
// Counts Heartbeat failures
tANI_U8 gLimHBfailureCntInLinkEstState;
tANI_U8 gLimProbeFailureAfterHBfailedCnt;
tANI_U8 gLimHBfailureCntInOtherStates;
/**
* This variable indicates whether LIM module need to
* send response to host. Used to identify whether a request
* is generated internally within LIM module or by host
*/
tANI_U8 gLimRspReqd;
/// Previous SME State
tLimSmeStates gLimPrevSmeState;
/// MLM State visible across all Sirius modules
tLimMlmStates gLimMlmState;
/// Previous MLM State
tLimMlmStates gLimPrevMlmState;
// LIM to HAL SCAN Management Message Interface states
tLimLimHalScanState gLimHalScanState;
//WLAN_SUSPEND_LINK Related
SUSPEND_RESUME_LINK_CALLBACK gpLimSuspendCallback;
tANI_U32 *gpLimSuspendData;
SUSPEND_RESUME_LINK_CALLBACK gpLimResumeCallback;
tANI_U32 *gpLimResumeData;
//end WLAN_SUSPEND_LINK Related
tANI_U8 fScanDisabled;
//Can be set to invalid channel. If it is invalid, HAL
//should move to previous valid channel or stay in the
//current channel. CB state goes along with channel to resume to
tANI_U16 gResumeChannel;
ePhyChanBondState gResumePhyCbState;
// Change channel generic scheme
CHANGE_CHANNEL_CALLBACK gpchangeChannelCallback;
tANI_U32 *gpchangeChannelData;
/// SME State visible across all Sirius modules
tLimSmeStates gLimSmeState;
/// This indicates whether we're an AP, STA in BSS/IBSS
tLimSystemRole gLimSystemRole;
// Number of STAs that do not support short preamble
tLimNoShortParams gLimNoShortParams;
// Number of STAs that do not support short slot time
tLimNoShortSlotParams gLimNoShortSlotParams;
// OLBC parameters
tLimProtStaParams gLimOverlap11gParams;
tLimProtStaParams gLimOverlap11aParams;
tLimProtStaParams gLimOverlapHt20Params;
tLimProtStaParams gLimOverlapNonGfParams;
//
// ---------------- DPH -----------------------
// these used to live in DPH but are now moved here (where they belong)
tANI_U32 gLimPhyMode;
tANI_U32 propRateAdjustPeriod;
tANI_U32 scanStartTime; // used to measure scan time
tANI_U8 gLimMyMacAddr[6];
tANI_U8 ackPolicy;
tANI_U8 gLimQosEnabled:1; //11E
tANI_U8 gLimWmeEnabled:1; //WME
tANI_U8 gLimWsmEnabled:1; //WSM
tANI_U8 gLimHcfEnabled:1;
tANI_U8 gLim11dEnabled:1;
tANI_U8 gLimProbeRespDisableFlag:1; // control over probe response
// ---------------- DPH -----------------------
////////////////////////////////////////// STATES RELATED END ///////////////////////////////////////////
////////////////////////////////////////// MISC RELATED START ///////////////////////////////////////////
/* Deferred Queue Parameters */
tLimDeferredMsgQParams gLimDeferredMsgQ;
#ifdef SAP_AUTH_OFFLOAD
/* SAP deferred msg queue */
struct slim_deferred_sap_queue glim_sap_deferred_msgq;
#endif
// addts request if any - only one can be outstanding at any time
tSirAddtsReq gLimAddtsReq;
tANI_U8 gLimAddtsSent;
tANI_U8 gLimAddtsRspTimerCount;
//protection related config cache
tCfgProtection cfgProtection;
tANI_U8 gLimProtectionControl;
/* RF band to determine 2.4/5 GHz */
// alternate radio info used by STA
tSirAlternateRadioInfo gLimAlternateRadio;
//This flag will remain to be set except while LIM is waiting for specific response messages
//from HAL. e.g when LIM issues ADD_STA req it will clear this flag and when it will receive
//the response the flag will be set.
tANI_U8 gLimProcessDefdMsgs;
// UAPSD flag used on AP
tANI_U8 gUapsdEnable;
/* Used on STA, this is a static UAPSD mask setting
* derived from SME_JOIN_REQ and SME_REASSOC_REQ. If a
* particular AC bit is set, it means the AC is both
* trigger enabled and delivery enabled.
*/
tANI_U8 gUapsdPerAcBitmask;
/* Used on STA, this is a dynamic UPASD mask setting
* derived from AddTS Rsp and DelTS frame. If a
* particular AC bit is set, it means AC is trigger
* enabled.
*/
tANI_U8 gUapsdPerAcTriggerEnableMask;
/* Used on STA, dynamic UPASD mask setting
* derived from AddTS Rsp and DelTs frame. If
* a particular AC bit is set, it means AC is
* delivery enabled.
*/
tANI_U8 gUapsdPerAcDeliveryEnableMask;
/* Used on STA for AC downgrade. This is a dynamic mask
* setting which keep tracks of ACs being admitted.
* If bit is set to 0: That particular AC is not admitted
* If bit is set to 1: That particular AC is admitted
*/
tANI_U8 gAcAdmitMask[SIR_MAC_DIRECTION_DIRECT];
//dialogue token List head/tail for Action frames request sent.
tpDialogueToken pDialogueTokenHead;
tpDialogueToken pDialogueTokenTail;
tLimTspecInfo tspecInfo[LIM_NUM_TSPEC_MAX];
// admission control policy information
tLimAdmitPolicyInfo admitPolicyInfo;
vos_lock_t lkPeGlobalLock;
tANI_U8 disableLDPCWithTxbfAP;
#ifdef FEATURE_WLAN_TDLS
tANI_U8 gLimTDLSBufStaEnabled;
tANI_U8 gLimTDLSUapsdMask;
tANI_U8 gLimTDLSOffChannelEnabled;
// TDLS WMM Mode
tANI_U8 gLimTDLSWmmMode;
#endif
////////////////////////////////////////// MISC RELATED END ///////////////////////////////////////////
////////////////////////////////////////// ASSOC RELATED START ///////////////////////////////////////////
// Place holder for JoinReq message
// received by SME state machine
// tpSirSmeJoinReq gpLimJoinReq;
// Place holder for ReassocReq message
// received by SME state machine
//tpSirSmeReassocReq gpLimReassocReq; sep23 review
// Current Authentication type used at STA
//tAniAuthType gLimCurrentAuthType;
// Place holder for current authentication request
// being handled
tLimMlmAuthReq *gpLimMlmAuthReq;
// Reason code to determine the channel change context while sending
// WDA_CHNL_SWITCH_REQ message to HAL
tANI_U32 channelChangeReasonCode;
/// MAC level Pre-authentication related globals
tSirMacChanNum gLimPreAuthChannelNumber;
tAniAuthType gLimPreAuthType;
tSirMacAddr gLimPreAuthPeerAddr;
tANI_U32 gLimNumPreAuthContexts;
tLimPreAuthTable gLimPreAuthTimerTable;
// Placed holder to deauth reason
tANI_U16 gLimDeauthReasonCode;
// Place holder for Pre-authentication node list
struct tLimPreAuthNode * pLimPreAuthList;
// Assoc or ReAssoc Response Data/Frame
void *gLimAssocResponseData;
//One cache for each overlap and associated case.
tCacheParams protStaOverlapCache[LIM_PROT_STA_OVERLAP_CACHE_SIZE];
tCacheParams protStaCache[LIM_PROT_STA_CACHE_SIZE];
////////////////////////////////////////// ASSOC RELATED END ///////////////////////////////////////////
//////////////////////////////// HT RELATED //////////////////////////////////////////
//
// The following global LIM variables maintain/manage
// the runtime configurations related to 802.11n
// 802.11n Station detected HT capability in Beacon Frame
tANI_U8 htCapabilityPresentInBeacon;
// 802.11 HT capability: Enabled or Disabled
tANI_U8 htCapability;
tANI_U8 gHTGreenfield;
tANI_U8 gHTShortGI40Mhz;
tANI_U8 gHTShortGI20Mhz;
//Set to 0 for 3839 octets
//Set to 1 for 7935 octets
tANI_U8 gHTMaxAmsduLength;
// DSSS/CCK at 40 MHz: Enabled 1 or Disabled
tANI_U8 gHTDsssCckRate40MHzSupport;
// PSMP Support: Enabled 1 or Disabled 0
tANI_U8 gHTPSMPSupport;
// L-SIG TXOP Protection used only if peer support available
tANI_U8 gHTLsigTXOPProtection;
// MIMO Power Save
tSirMacHTMIMOPowerSaveState gHTMIMOPSState;
// Scan In Power Save
tANI_U8 gScanInPowersave;
//
// 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 gHTAMpduDensity;
tANI_BOOLEAN gMaxAmsduSizeEnabled;
// Maximum Tx/Rx A-MPDU factor
tANI_U8 gHTMaxRxAMpduFactor;
//
// Scheduled PSMP related - Service Interval Granularity
// 000 - 5 ms
// 001 - 10 ms
// 010 - 15 ms
// 011 - 20 ms
// 100 - 25 ms
// 101 - 30 ms
// 110 - 35 ms
// 111 - 40 ms
//
tANI_U8 gHTServiceIntervalGranularity;
// Indicates whether an AP wants to associate PSMP enabled Stations
tANI_U8 gHTControlledAccessOnly;
// RIFS Mode. Set if no APSD legacy devices associated
tANI_U8 gHTRifsMode;
// OBss Mode . set when we have Non HT STA is associated or with in overlap bss
tANI_U8 gHTObssMode;
// Identifies the current Operating Mode
tSirMacHTOperatingMode gHTOperMode;
// Indicates if PCO is activated in the BSS
tANI_U8 gHTPCOActive;
//
// If PCO is active, indicates which PCO phase to use
// 0 - switch to 20 MHz phase
// 1 - switch to 40 MHz phase
//
tANI_U8 gHTPCOPhase;
//
// Used only in beacons. For PR, this is set to 0
// 0 - Primary beacon
// 1 - Secondary beacon
//
tANI_U8 gHTSecondaryBeacon;
//
// Dual CTS Protection
// 0 - Use RTS/CTS
// 1 - Dual CTS Protection is used
//
tANI_U8 gHTDualCTSProtection;
/*
* Identifies a single STBC MCS that shall be used for
* STBC control frames and STBC beacons
*/
tANI_U8 gHTSTBCBasicMCS;
tANI_U8 gHTNonGFDevicesPresent;
tANI_U8 gAddBA_Declined; // Flag to Decline the BAR if the particular bit (0-7) is being set
//////////////////////////////// HT RELATED //////////////////////////////////////////
#ifdef FEATURE_WLAN_TDLS
tANI_U8 gLimAddStaTdls ;
tANI_U8 gLimTdlsLinkMode ;
//////////////////////////////// TDLS RELATED //////////////////////////////////////////
#endif
// wsc info required to form the wsc IE
tLimWscIeInfo wscIeInfo;
tpPESession gpSession ; //Pointer to session table
/*
* sessionID and transactionID from SME is stored here for those messages, for which
* there is no session context in PE, e.g. Scan related messages.
**/
tANI_U8 gSmeSessionId;
tANI_U16 gTransactionId;
#ifdef FEATURE_OEM_DATA_SUPPORT
tLimMlmOemDataReq *gpLimMlmOemDataReq;
tLimMlmOemDataRsp *gpLimMlmOemDataRsp;
#endif
tSirRemainOnChnReq *gpLimRemainOnChanReq; //hold remain on chan request in this buf
vos_list_t gLimMgmtFrameRegistratinQueue;
tANI_U32 mgmtFrameSessionId;
uint32_t tdls_frm_session_id;
tSirBackgroundScanMode gLimBackgroundScanMode;
#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_ESE) || defined(FEATURE_WLAN_LFR)
tpPESession pSessionEntry;
tANI_U8 reAssocRetryAttempt;
#endif
tLimDisassocDeauthCnfReq limDisassocDeauthCnfReq;
tANI_U8 deferredMsgCnt;
tSirDFSChannelList dfschannelList;
tANI_U8 deauthMsgCnt;
tANI_U8 gLimIbssStaLimit;
/* Number of channel switch IEs sent so far */
tANI_U8 gLimDfsChanSwTxCount;
tANI_U8 gLimDfsTargetChanNum;
tANI_U8 fOffloadScanPending; /*Flag to track offload scan */
tANI_U8 fOffloadScanP2PSearch; /*Flag to track the p2p search */
tANI_U8 fOffloadScanP2PListen; /*Flag to track the p2p listen */
tANI_U8 probeCounter;
tANI_U8 maxProbe;
uint8_t retry_packet_cnt;
} tAniSirLim, *tpAniSirLim;
typedef struct sLimMgmtFrameRegistration
{
vos_list_node_t node; // MUST be first element
tANI_U16 frameType;
tANI_U16 matchLen;
tANI_U16 sessionId;
tANI_U8 matchData[1];
} tLimMgmtFrameRegistration, *tpLimMgmtFrameRegistration;
#if defined WLAN_FEATURE_VOWIFI
typedef struct sRrmContext
{
tRrmSMEContext rrmSmeContext;
tRrmPEContext rrmPEContext;
}tRrmContext, *tpRrmContext;
#endif
//Check if this definition can actually move here even for Volans. In that case
//this featurization can be removed.
/** ------------------------------------------------------------------------- *
\typedef tDriverType
\brief Indicate the driver type to the mac, and based on this do
appropriate initialization.
-------------------------------------------------------------------------- */
typedef enum
{
eDRIVER_TYPE_PRODUCTION = 0,
eDRIVER_TYPE_MFG = 1,
eDRIVER_TYPE_DVT = 2
} tDriverType;
/** ------------------------------------------------------------------------- *
\typedef tMacOpenParameters
\brief Parameters needed for Enumeration of all status codes returned by the higher level
interface functions.
-------------------------------------------------------------------------- */
typedef struct sMacOpenParameters
{
tANI_U16 maxStation;
tANI_U16 maxBssId;
tANI_U32 frameTransRequired;
tANI_U8 powersaveOffloadEnabled;
/* Powersave Parameters */
tANI_U8 staMaxLIModDtim;
tANI_U8 staModDtim;
tANI_U8 staDynamicDtim;
tDriverType driverType;
tANI_U8 maxWoWFilters;
tANI_U8 wowEnable;
/* Here olIniInfo is used to store ini
* status of arp offload, ns offload
* and others. Currently 1st bit is used
* for arp off load and 2nd bit for ns
* offload currently, rest bits are unused
*/
tANI_U8 olIniInfo;
v_BOOL_t ssdp;
bool enable_mc_list;
bool enable_bcst_ptrn;
/*
* DFS Phyerror Filtering offload status from ini
* 0 indicates offload disabled
* 1 indicates offload enabled
*/
tANI_U8 dfsPhyerrFilterOffload;
/* pass intra-bss-fwd info to txrx module */
tANI_U8 apDisableIntraBssFwd;
/* max offload peer */
tANI_U8 apMaxOffloadPeers;
/* max offload reorder buffs */
tANI_U8 apMaxOffloadReorderBuffs;
#ifdef FEATURE_WLAN_RA_FILTERING
tANI_U16 RArateLimitInterval;
v_BOOL_t IsRArateLimitEnabled;
#endif
/* is RX re-ordering offloaded to the fw */
tANI_U8 reorderOffload;
/* dfs radar pri multiplier */
tANI_S32 dfsRadarPriMultiplier;
#ifdef IPA_UC_OFFLOAD
/* IPA Micro controller data path offload enable flag */
tANI_U8 ucOffloadEnabled;
/* IPA Micro controller data path offload TX buffer count */
tANI_U32 ucTxBufCount;
/* IPA Micro controller data path offload TX buffer size */
tANI_U32 ucTxBufSize;
/* IPA Micro controller data path offload RX indication ring count */
tANI_U32 ucRxIndRingCount;
/* IPA Micro controller data path offload TX partition base */
tANI_U32 ucTxPartitionBase;
#endif /* IPA_UC_OFFLOAD */
bool tx_chain_mask_cck;
uint16_t self_gen_frm_pwr;
#ifdef WLAN_FEATURE_LPSS
bool is_lpass_enabled;
#endif
#ifdef WLAN_FEATURE_NAN
bool is_nan_enabled;
#endif
#ifdef WLAN_FEATURE_TSF_PLUS
bool is_ptp_enabled;
#endif
uint16_t max_mgmt_tx_fail_count;
bool force_target_assert_enabled;
uint16_t pkt_bundle_timer_value;
uint16_t pkt_bundle_size;
#ifdef QCA_SUPPORT_TXRX_DRIVER_TCP_DEL_ACK
uint8_t del_ack_enable;
uint16_t del_ack_timer_value;
uint16_t del_ack_pkt_count;
#endif
bool bpf_packet_filter_enable;
struct ol_tx_sched_wrr_ac_specs_t ac_specs[OL_TX_NUM_WMM_AC];
} tMacOpenParameters;
typedef struct sHalMacStartParameters
{
/* Parameters for the Firmware */
tDriverType driverType;
} tHalMacStartParameters;
/**
* struct vdev_type_nss - vdev type nss structure
*
* @sta: STA Nss value.
* @sap: SAP Nss value.
* @p2p_go: P2P GO Nss value.
* @p2p_cli: P2P CLI Nss value.
* @p2p_dev: P2P device Nss value.
* @ibss: IBSS Nss value.
* @tdls: TDLS Nss value.
* @ocb: OCB Nss value.
*
* Holds the Nss values of different vdev types.
*/
struct vdev_type_nss {
uint8_t sta;
uint8_t sap;
uint8_t p2p_go;
uint8_t p2p_cli;
uint8_t p2p_dev;
uint8_t ibss;
uint8_t tdls;
uint8_t ocb;
};
typedef enum
{
LIM_AUTH_ACK_NOT_RCD,
LIM_AUTH_ACK_RCD_SUCCESS,
LIM_AUTH_ACK_RCD_FAILURE,
} t_auth_ack_status;
// -------------------------------------------------------------------
/// MAC Sirius parameter structure
typedef struct sAniSirGlobal
{
tDriverType gDriverType;
tSirMbMsg* pResetMsg;
tAniSirCfg cfg;
tAniSirLim lim;
tAniSirPmm pmm;
tAniSirSch sch;
tAniSirSys sys;
tAniSirUtils utils;
/* PAL/HDD handle */
tHddHandle hHdd;
tSmeStruct sme;
tSapStruct sap;
tCsrScanStruct scan;
tCsrRoamStruct roam;
#ifdef FEATURE_OEM_DATA_SUPPORT
tOemDataStruct oemData;
#endif
tPmcInfo pmc;
tCcm ccm;
#if defined WLAN_FEATURE_VOWIFI
tRrmContext rrm;
#endif
#ifdef WLAN_FEATURE_CONCURRENT_P2P
tp2pContext p2pContext[MAX_NO_OF_P2P_SESSIONS];
#else
tp2pContext p2pContext;
#endif
tANI_U32 gCurrentLogSize;
tANI_U32 menuCurrent;
/* logDump specific */
tANI_U32 dumpTablecurrentId;
/* Instead of static allocation I will dynamically allocate memory
for dumpTableEntry thinking of using linked list */
tDumpModuleEntry *dumpTableEntry[MAX_DUMP_TABLE_ENTRY];
#ifdef FEATURE_WLAN_TDLS
v_BOOL_t isTdlsPowerSaveProhibited;
#endif
tANI_U8 fScanOffload;
tANI_U8 isCoalesingInIBSSAllowed;
tANI_U8 psOffloadEnabled;
/* Power Save offload Info */
tPmcOffloadInfo pmcOffloadInfo;
/* P2P Listen Offload */
tANI_U8 fP2pListenOffload;
/* PNO offload */
v_BOOL_t pnoOffload;
csrReadyToSuspendCallback readyToSuspendCallback;
void *readyToSuspendContext;
tANI_U8 lteCoexAntShare;
tANI_U8 beacon_offload;
tANI_U32 fEnableDebugLog;
tANI_U16 mgmtSeqNum;
v_BOOL_t enable5gEBT;
/* Miracast session 0-Disabled, 1-Source, 2-sink*/
tANI_U8 fMiracastSessionPresent;
#ifdef WLAN_FEATURE_EXTWOW_SUPPORT
csrReadyToExtWoWCallback readyToExtWoWCallback;
void *readyToExtWoWContext;
#endif
#ifdef SAP_AUTH_OFFLOAD
bool sap_auth_offload;
uint32_t sap_auth_offload_sec_type;
#endif /* SAP_AUTH_OFFLOAD */
/* 802.11p enable */
bool enable_dot11p;
uint32_t f_sta_miracast_mcc_rest_time_val;
uint8_t f_prefer_non_dfs_on_radar;
uint32_t fine_time_meas_cap;
/* per band chain mask support */
bool per_band_chainmask_supp;
struct vdev_type_nss vdev_type_nss_2g;
struct vdev_type_nss vdev_type_nss_5g;
uint8_t user_configured_nss;
t_auth_ack_status auth_ack_status;
bool first_scan_done;
int8_t first_scan_bucket_threshold;
sir_mgmt_frame_ind_callback mgmt_frame_ind_cb;
sir_p2p_ack_ind_callback p2p_ack_ind_cb;
bool snr_monitor_enabled;
/* channel information callback */
void (*chan_info_cb)(struct scan_chan_info *chan_info);
uint8_t sub20_config_info;
uint8_t sub20_channelwidth;
uint8_t sub20_dynamic_channelwidth;
uint8_t sta_sub20_current_channelwidth;
bool sta_change_cc_via_beacon;
bool max_power_cmd_pending;
uint32_t sta_auth_retries_for_code17;
} tAniSirGlobal;
typedef enum
{
eHIDDEN_SSID_NOT_IN_USE,
eHIDDEN_SSID_ZERO_LEN,
eHIDDEN_SSID_ZERO_CONTENTS
} tHiddenssId;
#ifdef FEATURE_WLAN_TDLS
#define RFC1042_HDR_LENGTH (6)
#define GET_BE16(x) ((tANI_U16) (((x)[0] << 8) | (x)[1]))
#define ETH_TYPE_89_0d (0x890d)
#define ETH_TYPE_LEN (2)
#define PAYLOAD_TYPE_TDLS_SIZE (1)
#define PAYLOAD_TYPE_TDLS (2)
#endif
#endif /* _ANIGLOBAL_H */