tdls.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  1. /*
  2. ** Id: include/tdls.h#1
  3. */
  4. /*! \file "tdls.h"
  5. \brief This file contains the internal used in TDLS modules
  6. for MediaTek Inc. 802.11 Wireless LAN Adapters.
  7. */
  8. /*
  9. ** Log: tdls.h
  10. *
  11. * 11 18 2013 vend_samp.lin
  12. * NULL
  13. * Initial version.
  14. *
  15. **
  16. */
  17. #ifndef _TDLS_H
  18. #define _TDLS_H
  19. #if CFG_SUPPORT_TDLS
  20. /*******************************************************************************
  21. * C O M P I L E R F L A G S
  22. ********************************************************************************
  23. */
  24. #define TDLS_CFG_CMD_TEST
  25. /*******************************************************************************
  26. * M A C R O S
  27. ********************************************************************************
  28. */
  29. /* assign station record idx for the packet */
  30. #define TDLSEX_STA_REC_IDX_GET(__prAdapter__, __MsduInfo__) \
  31. { \
  32. STA_RECORD_T *__StaRec__; \
  33. __MsduInfo__->ucStaRecIndex = STA_REC_INDEX_NOT_FOUND; \
  34. __StaRec__ = cnmGetStaRecByAddress(__prAdapter__, \
  35. (UINT_8) NETWORK_TYPE_AIS_INDEX,\
  36. __MsduInfo__->aucEthDestAddr); \
  37. if ((__StaRec__ != NULL) && (IS_DLS_STA(__StaRec__))) \
  38. __MsduInfo__->ucStaRecIndex = __StaRec__->ucIndex; \
  39. }
  40. /* fill wiphy flag */
  41. #define TDLSEX_WIPHY_FLAGS_INIT(__fgFlag__) \
  42. { \
  43. __fgFlag__ |= (WIPHY_FLAG_SUPPORTS_TDLS | WIPHY_FLAG_TDLS_EXTERNAL_SETUP);\
  44. }
  45. #define LR_TDLS_FME_FIELD_FILL(__Len) \
  46. { \
  47. pPkt += __Len; \
  48. u4PktLen += __Len; \
  49. }
  50. /*******************************************************************************
  51. * E X T E R N A L R E F E R E N C E S
  52. ********************************************************************************
  53. */
  54. extern int wlanHardStartXmit(struct sk_buff *prSkb, struct net_device *prDev);
  55. /*******************************************************************************
  56. * C O N S T A N T S
  57. ********************************************************************************
  58. */
  59. /* Status code */
  60. #define TDLS_STATUS WLAN_STATUS
  61. #define TDLS_STATUS_SUCCESS WLAN_STATUS_SUCCESS
  62. #define TDLS_STATUS_FAIL WLAN_STATUS_FAILURE
  63. #define TDLS_STATUS_INVALID_LENGTH WLAN_STATUS_INVALID_LENGTH
  64. #define TDLS_STATUS_RESOURCES WLAN_STATUS_RESOURCES
  65. #define TDLS_FME_MAC_ADDR_LEN 6
  66. #define TDLS_EX_CAP_PEER_UAPSD BIT(0)
  67. #define TDLS_EX_CAP_CHAN_SWITCH BIT(1)
  68. #define TDLS_EX_CAP_TDLS BIT(2)
  69. #define TDLS_CMD_PEER_UPDATE_EXT_CAP_MAXLEN 5
  70. #define TDLS_CMD_PEER_UPDATE_SUP_RATE_MAX 50
  71. #define TDLS_CMD_PEER_UPDATE_SUP_CHAN_MAX 50
  72. #define MAXNUM_TDLS_PEER 4
  73. /* command */
  74. typedef enum _TDLS_CMD_ID {
  75. TDLS_CMD_TEST_TX_FRAME = 0x00,
  76. TDLS_CMD_TEST_RCV_FRAME,
  77. TDLS_CMD_TEST_PEER_ADD,
  78. TDLS_CMD_TEST_PEER_UPDATE,
  79. TDLS_CMD_TEST_DATA_FRAME,
  80. TDLS_CMD_TEST_RCV_NULL
  81. } TDLS_CMD_ID;
  82. /* protocol */
  83. #define TDLS_FRM_PROT_TYPE 0x890d
  84. /* payload specific type in the LLC/SNAP header */
  85. #define TDLS_FRM_PAYLOAD_TYPE 2
  86. #define TDLS_FRM_CATEGORY 12
  87. typedef enum _TDLS_FRM_ACTION_ID {
  88. TDLS_FRM_ACTION_SETUP_REQ = 0x00,
  89. TDLS_FRM_ACTION_SETUP_RSP,
  90. TDLS_FRM_ACTION_CONFIRM,
  91. TDLS_FRM_ACTION_TEARDOWN,
  92. TDLS_FRM_ACTION_PTI,
  93. TDLS_FRM_ACTION_CHAN_SWITCH_REQ,
  94. TDLS_FRM_ACTION_CHAN_SWITCH_RSP,
  95. TDLS_FRM_ACTION_PEER_PSM_REQ,
  96. TDLS_FRM_ACTION_PEER_PSM_RSP,
  97. TDLS_FRM_ACTION_PTI_RSP,
  98. TDLS_FRM_ACTION_DISCOVERY_REQ,
  99. TDLS_FRM_ACTION_DISCOVERY_RSP = 0x0e,
  100. TDLS_FRM_ACTION_EVENT_TEAR_DOWN_TO_SUPPLICANT = 0x30
  101. } TDLS_FRM_ACTION_ID;
  102. /* 7.3.2.62 Link Identifier element */
  103. #define ELEM_ID_LINK_IDENTIFIER 101
  104. typedef struct _IE_LINK_IDENTIFIER_T {
  105. UINT_8 ucId;
  106. UINT_8 ucLength;
  107. UINT_8 aBSSID[6];
  108. UINT_8 aInitiator[6];
  109. UINT_8 aResponder[6];
  110. } __KAL_ATTRIB_PACKED__ IE_LINK_IDENTIFIER_T;
  111. #define TDLS_LINK_IDENTIFIER_IE(__ie__) ((IE_LINK_IDENTIFIER_T *)(__ie__))
  112. /*******************************************************************************
  113. * D A T A T Y P E S
  114. ********************************************************************************
  115. */
  116. typedef struct _STATION_PRARAMETERS {
  117. const u8 *supported_rates;
  118. struct net_device *vlan;
  119. u32 sta_flags_mask, sta_flags_set;
  120. u32 sta_modify_mask;
  121. int listen_interval;
  122. u16 aid;
  123. u8 supported_rates_len;
  124. u8 plink_action;
  125. u8 plink_state;
  126. const struct ieee80211_ht_cap *ht_capa;
  127. const struct ieee80211_vht_cap *vht_capa;
  128. u8 uapsd_queues;
  129. u8 max_sp;
  130. /* enum nl80211_mesh_power_mode local_pm; */
  131. u16 capability;
  132. const u8 *ext_capab;
  133. u8 ext_capab_len;
  134. } STATION_PRARAMETERS, P_STATION_PRARAMETERS;
  135. /* test command use */
  136. typedef struct _PARAM_CUSTOM_TDLS_CMD_STRUCT_T {
  137. UINT_8 ucFmeType; /* TDLS_FRM_ACTION_ID */
  138. UINT_8 ucToken;
  139. UINT_8 ucCap;
  140. /* bit0: TDLS, bit1: Peer U-APSD Buffer, bit2: Channel Switching */
  141. UINT_8 ucExCap;
  142. UINT_8 arSupRate[4];
  143. UINT_8 arSupChan[4];
  144. UINT_32 u4Timeout;
  145. UINT_8 arRspAddr[TDLS_FME_MAC_ADDR_LEN];
  146. UINT_8 arBssid[TDLS_FME_MAC_ADDR_LEN];
  147. /* Linux Kernel-3.10 */
  148. struct ieee80211_ht_cap rHtCapa;
  149. struct ieee80211_vht_cap rVhtCapa;
  150. /* struct */
  151. STATION_PRARAMETERS rPeerInfo;
  152. } PARAM_CUSTOM_TDLS_CMD_STRUCT_T;
  153. typedef enum _ENUM_TDLS_LINK_OPER {
  154. TDLS_DISCOVERY_REQ,
  155. TDLS_SETUP,
  156. TDLS_TEARDOWN,
  157. TDLS_ENABLE_LINK,
  158. TDLS_DISABLE_LINK
  159. } ENUM_TDLS_LINK_OPER;
  160. typedef struct _TDLS_CMD_LINK_OPER_T {
  161. UINT_8 aucPeerMac[6];
  162. ENUM_TDLS_LINK_OPER oper;
  163. } TDLS_CMD_LINK_OPER_T;
  164. typedef struct _TDLS_CMD_LINK_MGT_T {
  165. UINT_8 aucPeer[6];
  166. UINT_8 ucActionCode;
  167. UINT_8 ucDialogToken;
  168. UINT_16 u2StatusCode;
  169. UINT_32 u4SecBufLen;
  170. UINT_8 aucSecBuf[1000];
  171. } TDLS_CMD_LINK_MGT_T;
  172. typedef struct _TDLS_CMD_PEER_ADD_T {
  173. UINT_8 aucPeerMac[6];
  174. ENUM_STA_TYPE_T eStaType;
  175. } TDLS_CMD_PEER_ADD_T;
  176. typedef struct _TDLS_CMD_PEER_UPDATE_HT_CAP_MCS_INFO_T {
  177. UINT_8 arRxMask[SUP_MCS_RX_BITMASK_OCTET_NUM];
  178. UINT_16 u2RxHighest;
  179. UINT_8 ucTxParams;
  180. UINT_8 Reserved[3];
  181. } TDLS_CMD_PEER_UPDATE_HT_CAP_MCS_INFO_T;
  182. typedef struct _TDLS_CMD_PEER_UPDATE_VHT_CAP_MCS_INFO_T {
  183. UINT_8 arRxMask[SUP_MCS_RX_BITMASK_OCTET_NUM];
  184. } TDLS_CMD_PEER_UPDATE_VHT_CAP_MCS_INFO_T;
  185. typedef struct _TDLS_CMD_PEER_UPDATE_HT_CAP_T {
  186. UINT_16 u2CapInfo;
  187. UINT_8 ucAmpduParamsInfo;
  188. /* 16 bytes MCS information */
  189. TDLS_CMD_PEER_UPDATE_HT_CAP_MCS_INFO_T rMCS;
  190. UINT_16 u2ExtHtCapInfo;
  191. UINT_32 u4TxBfCapInfo;
  192. UINT_8 ucAntennaSelInfo;
  193. } TDLS_CMD_PEER_UPDATE_HT_CAP_T;
  194. typedef struct _TDLS_CMD_PEER_UPDATE_VHT_CAP_T {
  195. UINT_16 u2CapInfo;
  196. /* 16 bytes MCS information */
  197. TDLS_CMD_PEER_UPDATE_VHT_CAP_MCS_INFO_T rVMCS;
  198. } TDLS_CMD_PEER_UPDATE_VHT_CAP_T;
  199. typedef struct _TDLS_CMD_PEER_UPDATE_T {
  200. UINT_8 aucPeerMac[6];
  201. UINT_8 aucSupChan[TDLS_CMD_PEER_UPDATE_SUP_CHAN_MAX];
  202. UINT_16 u2StatusCode;
  203. UINT_8 aucSupRate[TDLS_CMD_PEER_UPDATE_SUP_RATE_MAX];
  204. UINT_16 u2SupRateLen;
  205. UINT_8 UapsdBitmap;
  206. UINT_8 UapsdMaxSp; /* MAX_SP */
  207. UINT_16 u2Capability;
  208. UINT_8 aucExtCap[TDLS_CMD_PEER_UPDATE_EXT_CAP_MAXLEN];
  209. UINT_16 u2ExtCapLen;
  210. TDLS_CMD_PEER_UPDATE_HT_CAP_T rHtCap;
  211. TDLS_CMD_PEER_UPDATE_VHT_CAP_T rVHtCap;
  212. BOOLEAN fgIsSupHt;
  213. ENUM_STA_TYPE_T eStaType;
  214. } TDLS_CMD_PEER_UPDATE_T;
  215. /* Command to TDLS core module */
  216. typedef enum _TDLS_CMD_CORE_ID {
  217. TDLS_CORE_CMD_TEST_NULL_RCV = 0x00
  218. } TDLS_CMD_CORE_ID;
  219. typedef struct _TDLS_CMD_CORE_TEST_NULL_RCV_T {
  220. UINT_32 u4PM;
  221. } TDLS_CMD_CORE_TEST_NULL_RCV_T;
  222. typedef struct _TDLS_CMD_CORE_T {
  223. UINT_32 u4Command;
  224. UINT_8 aucPeerMac[6];
  225. #define TDLS_CMD_CORE_RESERVED_SIZE 50
  226. union {
  227. TDLS_CMD_CORE_TEST_NULL_RCV_T rCmdNullRcv;
  228. UINT_8 Reserved[TDLS_CMD_CORE_RESERVED_SIZE];
  229. } Content;
  230. } TDLS_CMD_CORE_T;
  231. typedef enum _TDLS_EVENT_HOST_ID {
  232. TDLS_HOST_EVENT_TEAR_DOWN = 0x00,
  233. TDLS_HOST_EVENT_TX_DONE
  234. } TDLS_EVENT_HOST_ID;
  235. typedef enum _TDLS_EVENT_HOST_SUBID_TEAR_DOWN {
  236. TDLS_HOST_EVENT_TD_PTI_TIMEOUT = 0x00,
  237. TDLS_HOST_EVENT_TD_AGE_TIMEOUT,
  238. TDLS_HOST_EVENT_TD_PTI_SEND_FAIL,
  239. TDLS_HOST_EVENT_TD_PTI_SEND_MAX_FAIL,
  240. TDLS_HOST_EVENT_TD_WRONG_NETWORK_IDX,
  241. TDLS_HOST_EVENT_TD_NON_STATE3,
  242. TDLS_HOST_EVENT_TD_LOST_TEAR_DOWN
  243. } TDLS_EVENT_HOST_SUBID_TEAR_DOWN;
  244. typedef enum _TDLS_REASON_CODE {
  245. TDLS_REASON_CODE_UNREACHABLE = 25,
  246. TDLS_REASON_CODE_UNSPECIFIED = 26,
  247. TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_UNKNOWN = 0x80, /* 128 */
  248. TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_WIFI_OFF = 0x81, /* 129 */
  249. TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_ROAMING = 0x82, /* 130 */
  250. TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_PTI_TIMEOUT = 0x83, /* 131 */
  251. TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_AGE_TIMEOUT = 0x84, /* 132 */
  252. TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_REKEY = 0x85, /* 133 */
  253. TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_PTI_SEND_FAIL = 0x86, /* 134 */
  254. TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_PTI_SEND_MAX_FAIL = 0x87, /* 135 */
  255. TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_WRONG_NETWORK_IDX = 0x88, /* 136 */
  256. TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_NON_STATE3 = 0x89, /* 137 */
  257. TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_TX_QUOTA_EMPTY = 0x8a, /* 138 */
  258. TDLS_REASON_CODE_MTK_DIS_BY_US_DUE_TO_LOST_TEAR_DOWN = 0x8b /* 139 */
  259. } TDLS_REASON_CODE;
  260. /*******************************************************************************
  261. * P U B L I C D A T A
  262. ********************************************************************************
  263. */
  264. /*******************************************************************************
  265. * P R I V A T E D A T A
  266. ********************************************************************************
  267. */
  268. /*******************************************************************************
  269. * M A C R O S
  270. ********************************************************************************
  271. */
  272. /*******************************************************************************
  273. * F U N C T I O N D E C L A R A T I O N S
  274. ********************************************************************************
  275. */
  276. UINT_32 TdlsFrameGeneralIeAppend(ADAPTER_T *prAdapter, STA_RECORD_T *prStaRec, UINT_8 *pPkt);
  277. WLAN_STATUS /* TDLS_STATUS */
  278. TdlsDataFrameSend_TearDown(ADAPTER_T *prAdapter,
  279. STA_RECORD_T *prStaRec,
  280. UINT_8 *pPeerMac,
  281. UINT_8 ucActionCode,
  282. UINT_8 ucDialogToken, UINT_16 u2StatusCode, UINT_8 *pAppendIe, UINT_32 AppendIeLen);
  283. WLAN_STATUS /* TDLS_STATUS */
  284. TdlsDataFrameSend_CONFIRM(ADAPTER_T *prAdapter,
  285. STA_RECORD_T *prStaRec,
  286. UINT_8 *pPeerMac,
  287. UINT_8 ucActionCode,
  288. UINT_8 ucDialogToken, UINT_16 u2StatusCode, UINT_8 *pAppendIe, UINT_32 AppendIeLen);
  289. WLAN_STATUS /* TDLS_STATUS */
  290. TdlsDataFrameSend_SETUP_REQ(ADAPTER_T *prAdapter,
  291. STA_RECORD_T *prStaRec,
  292. UINT_8 *pPeerMac,
  293. UINT_8 ucActionCode,
  294. UINT_8 ucDialogToken, UINT_16 u2StatusCode, UINT_8 *pAppendIe, UINT_32 AppendIeLen);
  295. WLAN_STATUS /* TDLS_STATUS */
  296. TdlsDataFrameSend_DISCOVERY_REQ(ADAPTER_T *prAdapter,
  297. STA_RECORD_T *prStaRec,
  298. UINT_8 *pPeerMac,
  299. UINT_8 ucActionCode,
  300. UINT_8 ucDialogToken, UINT_16 u2StatusCode, UINT_8 *pAppendIe, UINT_32 AppendIeLen);
  301. WLAN_STATUS /* TDLS_STATUS */
  302. TdlsDataFrameSend_SETUP_RSP(ADAPTER_T *prAdapter,
  303. STA_RECORD_T *prStaRec,
  304. UINT_8 *pPeerMac,
  305. UINT_8 ucActionCode,
  306. UINT_8 ucDialogToken, UINT_16 u2StatusCode, UINT_8 *pAppendIe, UINT_32 AppendIeLen);
  307. WLAN_STATUS /* TDLS_STATUS */
  308. TdlsDataFrameSend_DISCOVERY_RSP(ADAPTER_T *prAdapter,
  309. STA_RECORD_T *prStaRec,
  310. UINT_8 *pPeerMac,
  311. UINT_8 ucActionCode,
  312. UINT_8 ucDialogToken, UINT_16 u2StatusCode, UINT_8 *pAppendIe, UINT_32 AppendIeLen);
  313. UINT_32 TdlsexLinkOper(P_ADAPTER_T prAdapter, PVOID pvSetBuffer, UINT_32 u4SetBufferLen, PUINT_32 pu4SetInfoLen);
  314. UINT_32 TdlsexLinkMgt(P_ADAPTER_T prAdapter, PVOID pvSetBuffer, UINT_32 u4SetBufferLen, PUINT_32 pu4SetInfoLen);
  315. VOID TdlsexEventHandle(P_GLUE_INFO_T prGlueInfo, UINT_8 *prInBuf, UINT_32 u4InBufLen);
  316. VOID TdlsEventTearDown(GLUE_INFO_T *prGlueInfo, UINT_8 *prInBuf, UINT_32 u4InBufLen);
  317. VOID TdlsBssExtCapParse(P_STA_RECORD_T prStaRec, P_UINT_8 pucIE);
  318. WLAN_STATUS
  319. TdlsSendChSwControlCmd(P_ADAPTER_T prAdapter, PVOID pvSetBuffer, UINT_32 u4SetBufferLen, PUINT_32 pu4SetInfoLen);
  320. /*******************************************************************************
  321. * F U N C T I O N S
  322. ********************************************************************************
  323. */
  324. #endif /* CFG_SUPPORT_TDLS */
  325. #endif /* _TDLS_H */