blob: 1aa972522b8b2efb5d3e8ef2583c1dda2eede1d2 [file] [edit]
/******************************************************************************
*
* This file is provided under a dual license. When you use or
* distribute this software, you may choose to be licensed under
* version 2 of the GNU General Public License ("GPLv2 License")
* or BSD License.
*
* GPLv2 License
*
* Copyright(C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of version 2 of the GNU General Public License as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*
* BSD LICENSE
*
* Copyright(C) 2016 MediaTek Inc. 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 of the copyright holder 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
* HOLDER 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.
*
*****************************************************************************/
/*
* Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/
* include/mgmt/ais_fsm.h#2
*/
/*! \file ais_fsm.h
* \brief Declaration of functions and finite state machine for AIS Module.
*
* Declaration of functions and finite state machine for AIS Module.
*/
#ifndef _AIS_FSM_H
#define _AIS_FSM_H
/*******************************************************************************
* C O M P I L E R F L A G S
*******************************************************************************
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
*******************************************************************************
*/
#if CFG_DISCONN_DEBUG_FEATURE
extern struct AIS_DISCONN_INFO_T g_rDisconnInfoTemp;
extern uint8_t g_DisconnInfoIdx;
extern struct AIS_DISCONN_INFO_T *g_prDisconnInfo;
#endif
/*******************************************************************************
* C O N S T A N T S
*******************************************************************************
*/
#define AIS_BG_SCAN_INTERVAL_MIN_SEC 2 /* 30 // exponential to 960 */
#define AIS_BG_SCAN_INTERVAL_MAX_SEC 2 /* 960 // 16min */
#define AIS_DELAY_TIME_OF_DISCONNECT_SEC 5 /* 10 */
#define AIS_IBSS_ALONE_TIMEOUT_SEC 20 /* seconds */
#define AIS_BEACON_TIMEOUT_COUNT_ADHOC 30
#define AIS_BEACON_TIMEOUT_COUNT_INFRA 10
#define AIS_BEACON_TIMEOUT_GUARD_TIME_SEC 1 /* Second */
#define AIS_BEACON_MAX_TIMEOUT_TU 100
#define AIS_BEACON_MIN_TIMEOUT_TU 5
#define AIS_BEACON_MAX_TIMEOUT_VALID TRUE
#define AIS_BEACON_MIN_TIMEOUT_VALID TRUE
#define AIS_BMC_MAX_TIMEOUT_TU 100
#define AIS_BMC_MIN_TIMEOUT_TU 5
#define AIS_BMC_MAX_TIMEOUT_VALID TRUE
#define AIS_BMC_MIN_TIMEOUT_VALID TRUE
#define AIS_JOIN_CH_GRANT_THRESHOLD 10
#if CFG_SUPPORT_CFG80211_AUTH
/* expand 4000 to 6000 to improve SAE connection success probability */
#define AIS_JOIN_CH_REQUEST_INTERVAL 6000
#else
#define AIS_JOIN_CH_REQUEST_INTERVAL 4000
#endif
#define AIS_SCN_DONE_TIMEOUT_SEC 15 /* 15 for 2.4G + 5G */ /* 5 */
#define AIS_SCN_REPORT_SEQ_NOT_SET (0xFFFF)
#define AIS_WAIT_OKC_PMKID_SEC 1000 /* unit: ms */
/* Support AP Selection*/
#define AIS_BLACKLIST_TIMEOUT 15 /* seconds */
#ifdef CFG_SUPPORT_ADJUST_JOIN_CH_REQ_INTERVAL
#define AIS_JOIN_CH_REQUEST_MAX_INTERVAL 4000
#endif
/*******************************************************************************
* D A T A T Y P E S
*******************************************************************************
*/
enum ENUM_AIS_STATE {
AIS_STATE_IDLE = 0,
AIS_STATE_SEARCH,
AIS_STATE_SCAN,
AIS_STATE_ONLINE_SCAN,
AIS_STATE_LOOKING_FOR,
AIS_STATE_WAIT_FOR_NEXT_SCAN,
AIS_STATE_REQ_CHANNEL_JOIN,
AIS_STATE_JOIN,
AIS_STATE_JOIN_FAILURE,
AIS_STATE_IBSS_ALONE,
AIS_STATE_IBSS_MERGE,
AIS_STATE_NORMAL_TR,
AIS_STATE_DISCONNECTING,
AIS_STATE_REQ_REMAIN_ON_CHANNEL,
AIS_STATE_REMAIN_ON_CHANNEL,
AIS_STATE_NUM
};
#if CFG_SUPPORT_CSI
enum CSI_DATA_TLV_TAG {
CSI_DATA_VER,
CSI_DATA_TYPE,
CSI_DATA_TS,
CSI_DATA_RSSI,
CSI_DATA_SNR,
CSI_DATA_DBW,
CSI_DATA_CH_IDX,
CSI_DATA_TA,
CSI_DATA_I,
CSI_DATA_Q,
CSI_DATA_EXTRA_INFO,
CSI_DATA_RSVD1,
CSI_DATA_RSVD2,
CSI_DATA_RSVD3,
CSI_DATA_RSVD4,
CSI_DATA_TX_IDX,
CSI_DATA_RX_IDX,
CSI_DATA_FRAME_MODE,
CSI_DATA_H_IDX,
CSI_DATA_RX_RATE,
CSI_DATA_TLV_TAG_NUM,
};
#endif
/* reconnect level for determining if we should reconnect */
enum ENUM_RECONNECT_LEVEL_T {
RECONNECT_LEVEL_MIN = 0,
RECONNECT_LEVEL_ROAMING_FAIL, /* roaming failed */
RECONNECT_LEVEL_BEACON_TIMEOUT, /* driver beacon timeout */
RECONNECT_LEVEL_USER_SET, /* user set connect */
/* or disassociate */
RECONNECT_LEVEL_MAX
};
struct MSG_AIS_ABORT {
struct MSG_HDR rMsgHdr; /* Must be the first member */
uint8_t ucReasonOfDisconnect;
u_int8_t fgDelayIndication;
};
struct MSG_AIS_IBSS_PEER_FOUND {
struct MSG_HDR rMsgHdr; /* Must be the first member */
uint8_t ucBssIndex;
u_int8_t fgIsMergeIn; /* TRUE: Merge In, FALSE: Merge Out */
struct STA_RECORD *prStaRec;
};
enum ENUM_AIS_REQUEST_TYPE {
AIS_REQUEST_SCAN,
AIS_REQUEST_RECONNECT,
AIS_REQUEST_ROAMING_SEARCH,
AIS_REQUEST_ROAMING_CONNECT,
AIS_REQUEST_REMAIN_ON_CHANNEL,
AIS_REQUEST_NUM
};
struct AIS_REQ_HDR {
struct LINK_ENTRY rLinkEntry;
enum ENUM_AIS_REQUEST_TYPE eReqType;
};
struct AIS_REQ_CHNL_INFO {
enum ENUM_BAND eBand;
enum ENUM_CHNL_EXT eSco;
uint8_t ucChannelNum;
uint32_t u4DurationMs;
uint64_t u8Cookie;
};
struct AIS_MGMT_TX_REQ_INFO {
u_int8_t fgIsMgmtTxRequested;
struct MSDU_INFO *prMgmtTxMsdu;
uint64_t u8Cookie;
};
/* Support AP Selection */
struct AIS_BLACKLIST_ITEM {
struct LINK_ENTRY rLinkEntry;
uint8_t aucBSSID[MAC_ADDR_LEN];
uint16_t u2DeauthReason;
uint16_t u2AuthStatus;
uint8_t ucCount;
uint8_t ucSSIDLen;
uint8_t aucSSID[32];
OS_SYSTIME rAddTime;
uint32_t u4DisapperTime;
u_int8_t fgIsInFWKBlacklist;
};
/* end Support AP Selection */
struct AIS_FSM_INFO {
enum ENUM_AIS_STATE ePreviousState;
enum ENUM_AIS_STATE eCurrentState;
u_int8_t fgTryScan;
u_int8_t fgIsScanning;
u_int8_t fgIsChannelRequested;
u_int8_t fgIsChannelGranted;
#if CFG_SUPPORT_ROAMING
u_int8_t fgIsRoamingScanPending;
#endif /* CFG_SUPPORT_ROAMING */
uint8_t ucAvailableAuthTypes; /* Used for AUTH_MODE_AUTO_SWITCH */
struct BSS_DESC *prTargetBssDesc; /* For destination */
struct STA_RECORD *prTargetStaRec; /* For JOIN Abort */
uint32_t u4SleepInterval;
struct TIMER rBGScanTimer;
struct TIMER rIbssAloneTimer;
uint32_t u4PostponeIndStartTime;
struct TIMER rJoinTimeoutTimer;
struct TIMER rChannelTimeoutTimer;
struct TIMER rScanDoneTimer;
struct TIMER rDeauthDoneTimer;
struct TIMER rWaitOkcPMKTimer;
struct TIMER rSecModeChangeTimer;
uint8_t ucSeqNumOfReqMsg;
uint8_t ucSeqNumOfChReq;
uint8_t ucSeqNumOfScanReq;
/* Save SeqNum for reporting scan done.
* In order to distinguish seq num and default value, make sure that
* sizeof(u2SeqNumOfScanReport) > sizeof(ucSeqNumOfScanReq).
* Set AIS_SCN_REPORT_SEQ_NOT_SET as default value
*/
uint16_t u2SeqNumOfScanReport;
uint32_t u4ChGrantedInterval;
uint8_t ucConnTrialCount;
struct PARAM_SCAN_REQUEST_ADV rScanRequest;
uint8_t aucScanIEBuf[MAX_IE_LENGTH];
u_int8_t fgIsScanOidAborted;
/* Pending Request List */
struct LINK rPendingReqList;
/* Join Request Timestamp */
OS_SYSTIME rJoinReqTime;
/* for cfg80211 REMAIN_ON_CHANNEL support */
struct AIS_REQ_CHNL_INFO rChReqInfo;
/* Mgmt tx related. */
struct AIS_MGMT_TX_REQ_INFO rMgmtTxInfo;
/* Packet filter for AIS module. */
uint32_t u4AisPacketFilter;
/* for roaming target */
struct PARAM_SSID rRoamingSSID;
/* Support AP Selection */
uint8_t ucJoinFailCntAfterScan;
/* end Support AP Selection */
/* Scan target channel when device roaming */
uint8_t fgTargetChnlScanIssued;
};
enum WNM_AIS_BSS_TRANSITION {
BSS_TRANSITION_NO_MORE_ACTION,
BSS_TRANSITION_REQ_ROAMING,
BSS_TRANSITION_DISASSOC,
BSS_TRANSITION_MAX_NUM
};
struct MSG_AIS_BSS_TRANSITION_T {
struct MSG_HDR rMsgHdr; /* Must be the first member */
uint8_t ucToken;
u_int8_t fgNeedResponse;
uint8_t ucValidityInterval;
enum WNM_AIS_BSS_TRANSITION eTransitionType;
uint16_t u2CandListLen;
uint8_t *pucCandList;
};
#if CFG_DISCONN_DEBUG_FEATURE
struct AIS_DISCONN_INFO_T {
#if KERNEL_VERSION(5, 0, 0) <= LINUX_VERSION_CODE
struct timespec64 tv;
#else
struct timeval tv;
#endif
uint8_t ucTrigger;
uint8_t ucDisConnReason;
uint8_t ucBcnTimeoutReason;
uint8_t ucDisassocReason;
uint16_t u2DisassocSeqNum;
struct STA_RECORD rStaRec;
int32_t rBcnRssi;
struct CMD_NOISE_HISTOGRAM_REPORT rNoise;
struct PARAM_HW_WLAN_INFO rHwInfo;
struct PARAM_GET_STA_STATISTICS rStaStatistics;
};
#endif
/*******************************************************************************
* P U B L I C D A T A
*******************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
*******************************************************************************
*/
/*******************************************************************************
* M A C R O S
*******************************************************************************
*/
#define aisChangeMediaState(_prAdapter, _eNewMediaState) \
(_prAdapter->prAisBssInfo->eConnectionState = (_eNewMediaState))
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
*******************************************************************************
*/
void aisInitializeConnectionSettings(IN struct ADAPTER
*prAdapter, IN struct REG_INFO *prRegInfo);
void aisFsmInit(IN struct ADAPTER *prAdapter);
void aisFsmUninit(IN struct ADAPTER *prAdapter);
void aisFsmStateInit_JOIN(IN struct ADAPTER *prAdapter,
struct BSS_DESC *prBssDesc);
u_int8_t aisFsmStateInit_RetryJOIN(IN struct ADAPTER
*prAdapter, IN struct STA_RECORD *prStaRec);
void aisFsmStateInit_IBSS_ALONE(IN struct ADAPTER
*prAdapter);
void aisFsmStateInit_IBSS_MERGE(IN struct ADAPTER
*prAdapter, struct BSS_DESC *prBssDesc);
void aisFsmStateAbort(IN struct ADAPTER *prAdapter,
uint8_t ucReasonOfDisconnect, u_int8_t fgDelayIndication);
void aisFsmStateAbort_JOIN(IN struct ADAPTER *prAdapter);
void aisFsmStateAbort_SCAN(IN struct ADAPTER *prAdapter);
void aisFsmStateAbort_NORMAL_TR(IN struct ADAPTER
*prAdapter);
void aisFsmStateAbort_IBSS(IN struct ADAPTER *prAdapter);
void aisFsmSteps(IN struct ADAPTER *prAdapter,
enum ENUM_AIS_STATE eNextState);
/*----------------------------------------------------------------------------*/
/* Mailbox Message Handling */
/*----------------------------------------------------------------------------*/
void aisFsmRunEventScanDone(IN struct ADAPTER *prAdapter,
IN struct MSG_HDR *prMsgHdr);
void aisFsmRunEventAbort(IN struct ADAPTER *prAdapter,
IN struct MSG_HDR *prMsgHdr);
void aisFsmRunEventJoinComplete(IN struct ADAPTER
*prAdapter, IN struct MSG_HDR *prMsgHdr);
enum ENUM_AIS_STATE aisFsmJoinCompleteAction(
IN struct ADAPTER *prAdapter, IN struct MSG_HDR *prMsgHdr);
void aisFsmRunEventFoundIBSSPeer(IN struct ADAPTER
*prAdapter, IN struct MSG_HDR *prMsgHdr);
void aisFsmRunEventRemainOnChannel(IN struct ADAPTER
*prAdapter, IN struct MSG_HDR *prMsgHdr);
void aisFsmRunEventCancelRemainOnChannel(IN struct ADAPTER
*prAdapter, IN struct MSG_HDR *prMsgHdr);
/*----------------------------------------------------------------------------*/
/* Handling for Ad-Hoc Network */
/*----------------------------------------------------------------------------*/
void aisFsmCreateIBSS(IN struct ADAPTER *prAdapter);
void aisFsmMergeIBSS(IN struct ADAPTER *prAdapter,
IN struct STA_RECORD *prStaRec);
/*----------------------------------------------------------------------------*/
/* Handling of Incoming Mailbox Message from CNM */
/*----------------------------------------------------------------------------*/
void aisFsmRunEventChGrant(IN struct ADAPTER *prAdapter,
IN struct MSG_HDR *prMsgHdr);
/*----------------------------------------------------------------------------*/
/* Generating Outgoing Mailbox Message to CNM */
/*----------------------------------------------------------------------------*/
void aisFsmReleaseCh(IN struct ADAPTER *prAdapter);
/*----------------------------------------------------------------------------*/
/* Event Indication */
/*----------------------------------------------------------------------------*/
void
aisIndicationOfMediaStateToHost(IN struct ADAPTER
*prAdapter,
enum ENUM_PARAM_MEDIA_STATE eConnectionState,
u_int8_t fgDelayIndication);
void aisPostponedEventOfDisconnTimeout(IN struct ADAPTER *prAdapter,
IN struct AIS_FSM_INFO *prAisFsmInfo);
void aisUpdateBssInfoForJOIN(IN struct ADAPTER *prAdapter,
struct STA_RECORD *prStaRec,
struct SW_RFB *prAssocRspSwRfb);
void aisUpdateBssInfoForCreateIBSS(IN struct ADAPTER *prAdapter);
void aisUpdateBssInfoForMergeIBSS(IN struct ADAPTER *prAdapter,
IN struct STA_RECORD *prStaRec);
u_int8_t aisValidateProbeReq(IN struct ADAPTER *prAdapter,
IN struct SW_RFB *prSwRfb,
OUT uint32_t *pu4ControlFlags);
uint32_t
aisFsmRunEventMgmtFrameTxDone(IN struct ADAPTER *prAdapter,
IN struct MSDU_INFO *prMsduInfo,
IN enum ENUM_TX_RESULT_CODE rTxDoneStatus);
/*----------------------------------------------------------------------------*/
/* Disconnection Handling */
/*----------------------------------------------------------------------------*/
void aisFsmDisconnect(IN struct ADAPTER *prAdapter,
IN u_int8_t fgDelayIndication);
#if CFG_DISCONN_DEBUG_FEATURE
void aisCollectDisconnInfo(IN struct ADAPTER *prAdapter);
#endif
/*----------------------------------------------------------------------------*/
/* Event Handling */
/*----------------------------------------------------------------------------*/
void aisBssBeaconTimeout(IN struct ADAPTER *prAdapter);
void aisBssLinkDown(IN struct ADAPTER *prAdapter);
void aisBssSecurityChanged(IN struct ADAPTER *prAdapter);
uint32_t
aisDeauthXmitComplete(IN struct ADAPTER *prAdapter,
IN struct MSDU_INFO *prMsduInfo,
IN enum ENUM_TX_RESULT_CODE rTxDoneStatus);
#if CFG_SUPPORT_ROAMING
void aisFsmRunEventRoamingDiscovery(IN struct ADAPTER
*prAdapter, uint32_t u4ReqScan);
enum ENUM_AIS_STATE aisFsmRoamingScanResultsUpdate(
IN struct ADAPTER *prAdapter);
void aisFsmRoamingDisconnectPrevAP(IN struct ADAPTER
*prAdapter,
IN struct STA_RECORD *prTargetStaRec);
void aisUpdateBssInfoForRoamingAP(IN struct ADAPTER
*prAdapter, IN struct STA_RECORD *prStaRec,
IN struct SW_RFB *prAssocRspSwRfb);
#endif /*CFG_SUPPORT_ROAMING */
/*----------------------------------------------------------------------------*/
/* Timeout Handling */
/*----------------------------------------------------------------------------*/
void aisFsmRunEventBGSleepTimeOut(IN struct ADAPTER
*prAdapter, unsigned long ulParamPtr);
void aisFsmRunEventIbssAloneTimeOut(IN struct ADAPTER
*prAdapter, unsigned long ulParamPtr);
void aisFsmRunEventJoinTimeout(IN struct ADAPTER *prAdapter,
unsigned long ulParamPtr);
void aisFsmRunEventChannelTimeout(IN struct ADAPTER
*prAdapter, unsigned long ulParamPtr);
void aisFsmRunEventDeauthTimeout(IN struct ADAPTER
*prAdapter, unsigned long ulParamPtr);
void aisFsmRunEventSecModeChangeTimeout(IN struct ADAPTER
*prAdapter, unsigned long ulParamPtr);
/*----------------------------------------------------------------------------*/
/* OID/IOCTL Handling */
/*----------------------------------------------------------------------------*/
void aisFsmScanRequest(IN struct ADAPTER *prAdapter,
IN struct PARAM_SSID *prSsid, IN uint8_t *pucIe,
IN uint32_t u4IeLength);
void
aisFsmScanRequestAdv(IN struct ADAPTER *prAdapter,
IN struct PARAM_SCAN_REQUEST_ADV *prRequestIn);
/*----------------------------------------------------------------------------*/
/* Internal State Checking */
/*----------------------------------------------------------------------------*/
u_int8_t aisFsmIsRequestPending(IN struct ADAPTER *prAdapter,
IN enum ENUM_AIS_REQUEST_TYPE eReqType,
IN u_int8_t bRemove);
struct AIS_REQ_HDR *aisFsmGetNextRequest(IN struct ADAPTER *prAdapter);
u_int8_t aisFsmInsertRequest(IN struct ADAPTER *prAdapter,
IN enum ENUM_AIS_REQUEST_TYPE eReqType);
void aisFsmFlushRequest(IN struct ADAPTER *prAdapter);
uint32_t
aisFuncTxMgmtFrame(IN struct ADAPTER *prAdapter,
IN struct AIS_MGMT_TX_REQ_INFO *prMgmtTxReqInfo,
IN struct MSDU_INFO *prMgmtTxMsdu, IN uint64_t u8Cookie);
void aisFsmRunEventMgmtFrameTx(IN struct ADAPTER *prAdapter,
IN struct MSG_HDR *prMsgHdr);
void aisFuncValidateRxActionFrame(IN struct ADAPTER *prAdapter,
IN struct SW_RFB *prSwRfb);
void aisFsmRunEventSetOkcPmk(IN struct ADAPTER *prAdapter);
void aisFsmRunEventBssTransition(IN struct ADAPTER *prAdapter,
IN struct MSG_HDR *prMsgHdr);
enum ENUM_AIS_STATE aisFsmStateSearchAction(
IN struct ADAPTER *prAdapter, uint8_t ucPhase);
#if defined(CFG_TEST_MGMT_FSM) && (CFG_TEST_MGMT_FSM != 0)
void aisTest(void);
#endif /* CFG_TEST_MGMT_FSM */
/* Support AP Selection */
void aisRefreshFWKBlacklist(struct ADAPTER *prAdapter);
struct AIS_BLACKLIST_ITEM *aisAddBlacklist(struct ADAPTER *prAdapter,
struct BSS_DESC *prBssDesc);
void aisRemoveBlackList(struct ADAPTER *prAdapter, struct BSS_DESC *prBssDesc);
void aisRemoveTimeoutBlacklist(struct ADAPTER *prAdapter);
struct AIS_BLACKLIST_ITEM *aisQueryBlackList(struct ADAPTER *prAdapter,
struct BSS_DESC *prBssDesc);
uint16_t aisCalculateBlackListScore(struct ADAPTER *prAdapter,
struct BSS_DESC *prBssDesc);
/* end Support AP Selection */
/* Support 11K */
#if CFG_SUPPORT_802_11K
void aisResetNeighborApList(struct ADAPTER *prAdapter);
void aisCollectNeighborAP(struct ADAPTER *prAdapter, uint8_t *pucApBuf,
uint16_t u2ApBufLen, uint8_t ucValidInterval);
void aisSendNeighborRequest(struct ADAPTER *prAdapter);
#endif
/* end Support 11K */
void aisPreSuspendFlow(IN struct GLUE_INFO *prGlueInfo);
void aisFuncUpdateMgmtFrameRegister(
IN struct ADAPTER *prAdapter,
IN uint32_t u4NewPacketFilter);
/*******************************************************************************
* F U N C T I O N S
*******************************************************************************
*/
#endif /* _AIS_FSM_H */