| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427 |
- /*
- ** Id: include/tdls_extr.h#1
- */
- /*! \file "tdls_extr.h"
- \brief This file contains the external used in other modules
- for MediaTek Inc. 802.11 Wireless LAN Adapters.
- */
- /*
- ** Log: tdls_extr.h
- *
- * 11 18 2013 vend_samp.lin
- * NULL
- * Initial version.
- *
- **
- */
- #ifndef _TDLS_EXTR_H
- #define _TDLS_EXTR_H
- #if (CFG_SUPPORT_TDLS == 1)
- /*******************************************************************************
- * 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
- ********************************************************************************
- */
- #define TDLS_TX_QUOTA_EMPTY_TIMEOUT 10
- /*******************************************************************************
- * C O N S T A N T S
- ********************************************************************************
- */
- /* protocol */
- #define TDLS_FRM_PROT_TYPE 0x890d
- /* TDLS uses Ethertype 89-0d frames. The UP shall be AC_VI, unless otherwise specified. */
- #define USER_PRIORITY_TDLS 5
- /* Status code */
- #define TDLS_STATUS WLAN_STATUS
- #define TDLS_STATUS_SUCCESS WLAN_STATUS_SUCCESS
- #define TDLS_STATUS_FAILURE WLAN_STATUS_FAILURE
- #define TDLS_STATUS_INVALID_LENGTH WLAN_STATUS_INVALID_LENGTH
- #define TDLS_STATUS_RESOURCES WLAN_STATUS_RESOURCES
- /*******************************************************************************
- * D A T A T Y P E S
- ********************************************************************************
- */
- #define TDLS_U32 UINT32
- #define TDLS_U16 UINT16
- #define TDLS_U8 UINT8
- typedef enum _TDLS_REASON_CODE {
- TDLS_REASON_CODE_UNREACHABLE = 25,
- TDLS_REASON_CODE_UNSPECIFIED = 26,
- TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_UNKNOWN = 0x80, /* 128 */
- TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_WIFI_OFF = 0x81, /* 129 */
- TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_ROAMING = 0x82, /* 130 */
- TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_PTI_TIMEOUT = 0x83, /* 131 */
- TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_AGE_TIMEOUT = 0x84, /* 132 */
- TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_REKEY = 0x85, /* 133 */
- TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_PTI_SEND_FAIL = 0x86, /* 134 */
- TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_PTI_SEND_MAX_FAIL = 0x87, /* 135 */
- TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_WRONG_NETWORK_IDX = 0x88, /* 136 */
- TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_NON_STATE3 = 0x89, /* 137 */
- TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_TX_QUOTA_EMPTY = 0x8a, /* 138 */
- TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_LOST_TEAR_DOWN = 0x8b /* 139 */
- } TDLS_REASON_CODE;
- /* TDLS FSM */
- typedef struct _TDLS_CMD_PEER_ADD_T {
- TDLS_U8 aucPeerMac[6];
- #if 0
- ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex;
- UINT_16 u2CapInfo;
- UINT_16 u2OperationalRateSet;
- UINT_16 u2BSSBasicRateSet;
- BOOLEAN fgIsUnknownBssBasicRate;
- UINT_8 ucPhyTypeSet;
- #endif
- } TDLS_CMD_PEER_ADD_T;
- typedef struct _TDLS_CMD_LINK_T {
- TDLS_U8 aucPeerMac[6];
- BOOLEAN fgIsEnabled;
- } TDLS_CMD_LINK_T;
- typedef struct _TDLS_CMD_PEER_UPDATE_HT_CAP_MCS_INFO_T {
- TDLS_U8 arRxMask[10];
- TDLS_U16 u2RxHighest;
- TDLS_U8 ucTxParams;
- TDLS_U8 Reserved[3];
- } TDLS_CMD_PEER_UPDATE_HT_CAP_MCS_INFO_T;
- typedef struct _TDLS_CMD_PEER_UPDATE_HT_CAP_T {
- TDLS_U16 u2CapInfo;
- TDLS_U8 ucAmpduParamsInfo;
- /* 16 bytes MCS information */
- TDLS_CMD_PEER_UPDATE_HT_CAP_MCS_INFO_T rMCS;
- TDLS_U16 u2ExtHtCapInfo;
- TDLS_U32 u4TxBfCapInfo;
- TDLS_U8 ucAntennaSelInfo;
- } TDLS_CMD_PEER_UPDATE_HT_CAP_T;
- typedef struct _TDLS_CMD_PEER_UPDATE_T {
- TDLS_U8 aucPeerMac[6];
- #define TDLS_CMD_PEER_UPDATE_SUP_CHAN_MAX 50
- TDLS_U8 aucSupChan[TDLS_CMD_PEER_UPDATE_SUP_CHAN_MAX];
- TDLS_U16 u2StatusCode;
- #define TDLS_CMD_PEER_UPDATE_SUP_RATE_MAX 50
- TDLS_U8 aucSupRate[TDLS_CMD_PEER_UPDATE_SUP_RATE_MAX];
- TDLS_U16 u2SupRateLen;
- TDLS_U8 UapsdBitmap;
- TDLS_U8 UapsdMaxSp; /* MAX_SP */
- TDLS_U16 u2Capability;
- #define TDLS_CMD_PEER_UPDATE_EXT_CAP_MAXLEN 5
- TDLS_U8 aucExtCap[TDLS_CMD_PEER_UPDATE_EXT_CAP_MAXLEN];
- TDLS_U16 u2ExtCapLen;
- TDLS_CMD_PEER_UPDATE_HT_CAP_T rHtCap;
- BOOLEAN fgIsSupHt;
- } TDLS_CMD_PEER_UPDATE_T;
- /* Command to TDLS core module */
- typedef enum _TDLS_CMD_CORE_ID {
- TDLS_CORE_CMD_TEST_NULL_RCV = 0x00,
- TDLS_CORE_CMD_TEST_PTI_RSP = 0x01,
- TDLS_CORE_CMD_MIB_UPDATE = 0x02,
- TDLS_CORE_CMD_TEST_TX_FAIL_SKIP = 0x03,
- TDLS_CORE_CMD_UAPSD_CONF = 0x04,
- TDLS_CORE_CMD_TEST_DATA_RCV = 0x05,
- TDLS_CORE_CMD_TEST_PTI_REQ = 0x06,
- TDLS_CORE_CMD_TEST_CHSW_REQ = 0x07,
- TDLS_CORE_CMD_CHSW_CONF = 0x08,
- TDLS_CORE_CMD_TEST_KEEP_ALIVE_SKIP = 0x09,
- TDLS_CORE_CMD_TEST_CHSW_TIMEOUT_SKIP = 0x0a,
- TDLS_CORE_CMD_TEST_CHSW_RSP = 0x0b,
- TDLS_CORE_CMD_TEST_SCAN_SKIP = 0x0c,
- TDLS_CORE_CMD_SETUP_CONF = 0x0d,
- TDLS_CORE_CMD_TEST_TEAR_DOWN = 0x0e,
- TDLS_CORE_CMD_KEY_INFO = 0x0f,
- TDLS_CORE_CMD_TEST_PTI_TX_FAIL = 0x10
- } TDLS_CMD_CORE_ID;
- typedef struct _TDLS_CMD_CORE_TEST_NULL_RCV_T {
- TDLS_U32 u4PM;
- } TDLS_CMD_CORE_TEST_NULL_RCV_T;
- typedef struct _TDLS_CMD_CORE_TEST_PTI_REQ_RCV_T {
- TDLS_U32 u4DialogToken;
- } TDLS_CMD_CORE_TEST_PTI_REQ_RCV_T;
- typedef struct _TDLS_CMD_CORE_TEST_PTI_RSP_RCV_T {
- TDLS_U32 u4DialogToken;
- TDLS_U32 u4PM;
- } TDLS_CMD_CORE_TEST_PTI_RSP_RCV_T;
- typedef struct _TDLS_CMD_CORE_TEST_TEAR_DOWN_RCV_T {
- TDLS_U32 u4ReasonCode;
- } TDLS_CMD_CORE_TEST_TEAR_DOWN_RCV_T;
- typedef struct _TDLS_CMD_CORE_TEST_CHST_REQ_RCV_T {
- TDLS_U32 u4Chan;
- TDLS_U32 u4RegClass;
- TDLS_U32 u4SecChanOff;
- TDLS_U32 u4SwitchTime;
- TDLS_U32 u4SwitchTimeout;
- } TDLS_CMD_CORE_TEST_CHST_REQ_RCV_T;
- typedef struct _TDLS_CMD_CORE_TEST_CHST_RSP_RCV_T {
- TDLS_U32 u4Chan;
- TDLS_U32 u4SwitchTime;
- TDLS_U32 u4SwitchTimeout;
- TDLS_U32 u4StatusCode;
- } TDLS_CMD_CORE_TEST_CHST_RSP_RCV_T;
- typedef struct _TDLS_CMD_CORE_TEST_DATA_RCV_T {
- TDLS_U32 u4PM;
- TDLS_U32 u4UP;
- TDLS_U32 u4EOSP;
- TDLS_U32 u4IsNull;
- } TDLS_CMD_CORE_TEST_DATA_RCV_T;
- typedef struct _TDLS_CMD_CORE_MIB_PARAM_UPDATE_T {
- BOOLEAN Tdlsdot11TunneledDirectLinkSetupImplemented;
- BOOLEAN Tdlsdot11TDLSPeerUAPSDBufferSTAActivated;
- BOOLEAN Tdlsdot11TDLSPeerPSMActivated;
- TDLS_U16 Tdlsdot11TDLSPeerUAPSDIndicationWindow;
- BOOLEAN Tdlsdot11TDLSChannelSwitchingActivated;
- TDLS_U8 Tdlsdot11TDLSPeerSTAMissingAckRetryLimit;
- TDLS_U8 Tdlsdot11TDLSResponseTimeout;
- TDLS_U16 Tdlsdot11TDLSProbeDelay;
- TDLS_U8 Tdlsdot11TDLSDiscoveryRequestWindow;
- TDLS_U8 Tdlsdot11TDLSACDeterminationInterval;
- } TDLS_CMD_CORE_MIB_PARAM_UPDATE_T;
- typedef struct _TDLS_CMD_CORE_TEST_TX_FAIL_SKIP_T {
- BOOLEAN fgIsEnable;
- } TDLS_CMD_CORE_TEST_TX_FAIL_SKIP_T;
- typedef struct _TDLS_CMD_CORE_UAPSD_CONFIG_T {
- BOOLEAN fgIsSpTimeoutSkip;
- BOOLEAN fgIsPtiTimeoutSkip;
- } TDLS_CMD_CORE_UAPSD_CONFIG_T;
- typedef struct _TDLS_CMD_CORE_SETUP_CONFIG_T {
- BOOLEAN fgIs2040Supported;
- } TDLS_CMD_CORE_SETUP_CONFIG_T;
- typedef struct _TDLS_CMD_CORE_CHSW_CONFIG_T {
- TDLS_U8 ucNetTypeIndex;
- BOOLEAN fgIsChSwEnabled;
- BOOLEAN fgIsChSwStarted;
- TDLS_U8 ucRegClass;
- TDLS_U8 ucTargetChan;
- TDLS_U8 ucSecChanOff;
- BOOLEAN fgIsChSwRegular;
- } TDLS_CMD_CORE_CHSW_CONFIG_T;
- typedef struct _TDLS_CMD_CORE_TEST_KEEP_ALIVE_SKIP_T {
- BOOLEAN fgIsEnable;
- } TDLS_CMD_CORE_TEST_KEEP_ALIVE_SKIP_T;
- typedef struct _TDLS_CMD_CORE_TEST_CHSW_TIMEOUT_SKIP_T {
- BOOLEAN fgIsEnable;
- } TDLS_CMD_CORE_TEST_CHSW_TIMEOUT_SKIP_T;
- typedef struct _TDLS_CMD_CORE_TEST_PROHIBIT_T {
- BOOLEAN fgIsEnable;
- BOOLEAN fgIsSet;
- } TDLS_CMD_CORE_TEST_PROHIBIT_T;
- typedef struct _TDLS_CMD_CORE_TEST_SCAN_SKIP_T {
- BOOLEAN fgIsEnable;
- } TDLS_CMD_CORE_TEST_SCAN_SKIP_T;
- typedef struct _TDLS_CMD_CORE_INFO_DISPLAY_T {
- BOOLEAN fgIsToClearAllHistory;
- } TDLS_CMD_CORE_INFO_DISPLAY_T;
- typedef struct _TDLS_CMD_CORE_TEST_PTI_TX_FAIL_T {
- BOOLEAN fgIsEnable;
- } TDLS_CMD_CORE_TEST_PTI_TX_FAIL_T;
- typedef struct _TDLS_CMD_CORE_T {
- TDLS_U32 u4Command; /* TDLS_CMD_CORE_ID */
- TDLS_U8 aucPeerMac[6];
- TDLS_U8 ucNetTypeIndex;
- #define TDLS_CMD_CORE_RESERVED_SIZE 50
- union {
- TDLS_CMD_CORE_TEST_NULL_RCV_T rCmdNullRcv;
- TDLS_CMD_CORE_TEST_PTI_REQ_RCV_T rCmdPtiReqRcv;
- TDLS_CMD_CORE_TEST_PTI_RSP_RCV_T rCmdPtiRspRcv;
- TDLS_CMD_CORE_TEST_TEAR_DOWN_RCV_T rCmdTearDownRcv;
- TDLS_CMD_CORE_TEST_CHST_REQ_RCV_T rCmdChStReqRcv;
- TDLS_CMD_CORE_TEST_CHST_RSP_RCV_T rCmdChStRspRcv;
- TDLS_CMD_CORE_TEST_DATA_RCV_T rCmdDatRcv;
- TDLS_CMD_CORE_TEST_TX_FAIL_SKIP_T rCmdTxFailSkip;
- TDLS_CMD_CORE_TEST_KEEP_ALIVE_SKIP_T rCmdKeepAliveSkip;
- TDLS_CMD_CORE_TEST_CHSW_TIMEOUT_SKIP_T rCmdChSwTimeoutSkip;
- TDLS_CMD_CORE_TEST_PROHIBIT_T rCmdProhibit;
- TDLS_CMD_CORE_TEST_SCAN_SKIP_T rCmdScanSkip;
- TDLS_CMD_CORE_TEST_PTI_TX_FAIL_T rCmdPtiTxFail;
- TDLS_CMD_CORE_MIB_PARAM_UPDATE_T rCmdMibUpdate;
- TDLS_CMD_CORE_UAPSD_CONFIG_T rCmdUapsdConf;
- TDLS_CMD_CORE_CHSW_CONFIG_T rCmdChSwConf;
- TDLS_CMD_CORE_SETUP_CONFIG_T rCmdSetupConf;
- TDLS_CMD_CORE_INFO_DISPLAY_T rCmdInfoDisplay;
- TDLS_U8 Reserved[TDLS_CMD_CORE_RESERVED_SIZE];
- } Content;
- } TDLS_CMD_CORE_T;
- /*******************************************************************************
- * 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
- ********************************************************************************
- */
- /*
- assign station record idx for the packet only when STA_STATE_3
- Or we will try to send data frame when the TDLS peer's state is STA_STATE_1
- EX:
- 1. mtk_cfg80211_add_station: First create the STA_RECORD_T;
- 2. TdlsexCfg80211TdlsMgmt: Send a TDLS request frame.
- 3. mtk_cfg80211_add_station: Change state to STA_STATE_1.
- 4. TdlsexCfg80211TdlsMgmt: Send a TDLS request frame.
- */
- #define TDLSEX_STA_REC_IDX_GET(__prAdapter__, __MsduInfo__) \
- { \
- STA_RECORD_T *__StaRec__; \
- __MsduInfo__->ucStaRecIndex = STA_REC_INDEX_NOT_FOUND; \
- __StaRec__ = cnmGetStaRecByAddress(__prAdapter__, \
- (UINT_8) NETWORK_TYPE_AIS_INDEX, \
- __MsduInfo__->aucEthDestAddr); \
- if ((__StaRec__ != NULL) && \
- ((__StaRec__)->ucStaState == STA_STATE_3) && \
- (IS_TDLS_STA(__StaRec__))) { \
- __MsduInfo__->ucStaRecIndex = __StaRec__->ucIndex; \
- } \
- }
- /* fill wiphy flag */
- #define TDLSEX_WIPHY_FLAGS_INIT(__fgFlag__)\
- { \
- __fgFlag__ |= (WIPHY_FLAG_SUPPORTS_TDLS | WIPHY_FLAG_TDLS_EXTERNAL_SETUP);\
- }
- /* assign user priority of a TDLS action frame */
- /*
- According to 802.11z: Setup req/resp are sent in AC_BK, otherwise we should default
- to AC_VI.
- */
- #define TDLSEX_UP_ASSIGN(__UserPriority__) \
- { \
- __UserPriority__ = USER_PRIORITY_TDLS; \
- }
- /*******************************************************************************
- * F U N C T I O N D E C L A R A T I O N S
- ********************************************************************************
- */
- int
- TdlsexCfg80211TdlsMgmt(struct wiphy *wiphy, struct net_device *dev,
- const u8 *peer, u8 action_code, u8 dialog_token,
- u16 status_code, u32 peer_capability,
- bool initiator, const u8 *buf, size_t len);
- int TdlsexCfg80211TdlsOper(struct wiphy *wiphy, struct net_device *dev,
- const u8 *peer, enum nl80211_tdls_operation oper);
- VOID TdlsexCmd(P_GLUE_INFO_T prGlueInfo, UINT_8 *prInBuf, UINT_32 u4InBufLen);
- VOID TdlsexBssExtCapParse(STA_RECORD_T *prStaRec, UINT_8 *pucIE);
- VOID TdlsexEventHandle(P_GLUE_INFO_T prGlueInfo, UINT8 *prInBuf, UINT32 u4InBufLen);
- TDLS_STATUS TdlsexKeyHandle(ADAPTER_T *prAdapter, PARAM_KEY_T *prNewKey);
- VOID TdlsexInit(ADAPTER_T *prAdapter);
- BOOLEAN TdlsexIsAnyPeerInPowerSave(ADAPTER_T *prAdapter);
- TDLS_STATUS TdlsexLinkCtrl(ADAPTER_T *prAdapter, VOID *pvSetBuffer, UINT_32 u4SetBufferLen, UINT_32 *pu4SetInfoLen);
- VOID
- TdlsexLinkHistoryRecord(GLUE_INFO_T *prGlueInfo,
- BOOLEAN fgIsTearDown, UINT8 *pucPeerMac, BOOLEAN fgIsFromUs, UINT16 u2ReasonCode);
- TDLS_STATUS TdlsexMgmtCtrl(ADAPTER_T *prAdapter, VOID *pvSetBuffer, UINT_32 u4SetBufferLen, UINT_32 *pu4SetInfoLen);
- TDLS_STATUS TdlsexPeerAdd(P_ADAPTER_T prAdapter, PVOID pvSetBuffer, UINT_32 u4SetBufferLen, PUINT_32 pu4SetInfoLen);
- TDLS_STATUS TdlsexPeerUpdate(P_ADAPTER_T prAdapter, PVOID pvSetBuffer, UINT_32 u4SetBufferLen, PUINT_32 pu4SetInfoLen);
- BOOLEAN TdlsexRxFrameDrop(GLUE_INFO_T *prGlueInfo, UINT_8 *pPkt);
- VOID TdlsexRxFrameHandle(GLUE_INFO_T *prGlueInfo, UINT8 *pPkt, UINT16 u2PktLen);
- TDLS_STATUS TdlsexStaRecIdxGet(ADAPTER_T *prAdapter, MSDU_INFO_T *prMsduInfo);
- VOID TdlsexTxQuotaCheck(GLUE_INFO_T *prGlueInfo, STA_RECORD_T *prStaRec, UINT8 FreeQuota);
- VOID TdlsexUninit(ADAPTER_T *prAdapter);
- /*******************************************************************************
- * F U N C T I O N S
- ********************************************************************************
- */
- #endif /* CFG_SUPPORT_TDLS */
- #endif /* _TDLS_EXTR_H */
|