tdls.h 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  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 == 1)
  20. /*******************************************************************************
  21. * C O M P I L E R F L A G S
  22. ********************************************************************************
  23. */
  24. #define TDLS_CFG_CMD_TEST 1
  25. #define TDLS_CFG_HT_SUP 1
  26. /*******************************************************************************
  27. * E X T E R N A L R E F E R E N C E S
  28. ********************************************************************************
  29. */
  30. extern int wlanHardStartXmit(struct sk_buff *prSkb, struct net_device *prDev);
  31. extern BOOLEAN flgTdlsTestExtCapElm;
  32. extern UINT8 aucTdlsTestExtCapElm[];
  33. /*******************************************************************************
  34. * C O N S T A N T S
  35. ********************************************************************************
  36. */
  37. typedef struct _TDLS_LINK_HIS_OTHERS_T {
  38. BOOLEAN fgIsHt; /* TRUE: HT device */
  39. } TDLS_LINK_HIS_OTHERS_T;
  40. /* command */
  41. typedef enum _TDLS_CMD_ID {
  42. TDLS_CMD_TEST_TX_FRAME = 0x00,
  43. TDLS_CMD_TEST_RCV_FRAME = 0x01,
  44. TDLS_CMD_TEST_PEER_ADD = 0x02,
  45. TDLS_CMD_TEST_PEER_UPDATE = 0x03,
  46. TDLS_CMD_TEST_DATA_FRAME = 0x04,
  47. TDLS_CMD_TEST_RCV_NULL = 0x05,
  48. TDLS_CMD_MIB_UPDATE = 0x06,
  49. TDLS_CMD_TEST_SKIP_TX_FAIL = 0x07,
  50. TDLS_CMD_UAPSD_CONF = 0x08,
  51. TDLS_CMD_CH_SW_CONF = 0x09,
  52. TDLS_CMD_TEST_SKIP_KEEP_ALIVE = 0x0a,
  53. TDLS_CMD_TEST_SKIP_CHSW_TIMEOUT = 0x0b,
  54. TDLS_CMD_TEST_TX_TDLS_FRAME = 0x0c,
  55. TDLS_CMD_TEST_PROHIBIT_SET_IN_AP = 0x0d,
  56. TDLS_CMD_TEST_SCAN_DISABLE = 0x0e,
  57. TDLS_CMD_TEST_DATA_FRAME_CONT = 0x0f,
  58. TDLS_CMD_TEST_CH_SW_PROHIBIT_SET_IN_AP = 0x10,
  59. TDLS_CMD_SETUP_CONF = 0x11,
  60. TDLS_CMD_INFO = 0x12,
  61. TDLS_CMD_TEST_DELAY = 0x13,
  62. TDLS_CMD_KEY_INFO = 0x14,
  63. TDLS_CMD_TEST_PTI_TX_FAIL = 0x15
  64. } TDLS_CMD_ID;
  65. typedef enum _TDLS_EVENT_HOST_ID {
  66. TDLS_HOST_EVENT_TEAR_DOWN = 0x00, /* TDLS_EVENT_HOST_SUBID_TEAR_DOWN */
  67. TDLS_HOST_EVENT_TX_DONE,
  68. TDLS_HOST_EVENT_FME_STATUS, /* TDLS_EVENT_HOST_SUBID_SPECIFIC_FRAME */
  69. TDLS_HOST_EVENT_STATISTICS
  70. } TDLS_EVENT_HOST_ID;
  71. typedef enum _TDLS_EVENT_HOST_SUBID_TEAR_DOWN {
  72. TDLS_HOST_EVENT_TD_PTI_TIMEOUT = 0x00,
  73. TDLS_HOST_EVENT_TD_AGE_TIMEOUT,
  74. TDLS_HOST_EVENT_TD_PTI_SEND_FAIL,
  75. TDLS_HOST_EVENT_TD_PTI_SEND_MAX_FAIL,
  76. TDLS_HOST_EVENT_TD_WRONG_NETWORK_IDX,
  77. TDLS_HOST_EVENT_TD_NON_STATE3,
  78. TDLS_HOST_EVENT_TD_LOST_TEAR_DOWN
  79. } TDLS_EVENT_HOST_SUBID_TEAR_DOWN;
  80. typedef enum _TDLS_EVENT_HOST_SUBID_SPECIFIC_FRAME {
  81. TDLS_HOST_EVENT_SF_BA,
  82. TDLS_HOST_EVENT_SF_BA_OK,
  83. TDLS_HOST_EVENT_SF_BA_DECLINE,
  84. TDLS_HOST_EVENT_SF_BA_PEER,
  85. TDLS_HOST_EVENT_SF_BA_RSP_OK,
  86. TDLS_HOST_EVENT_SF_BA_RSP_DECLINE
  87. } TDLS_EVENT_HOST_SUBID_SPECIFIC_FRAME;
  88. /* payload specific type in the LLC/SNAP header */
  89. #define TDLS_FRM_PAYLOAD_TYPE 2
  90. #define TDLS_FRM_CATEGORY 12
  91. typedef enum _TDLS_FRM_ACTION_ID {
  92. TDLS_FRM_ACTION_SETUP_REQ = 0x00,
  93. TDLS_FRM_ACTION_SETUP_RSP,
  94. TDLS_FRM_ACTION_CONFIRM,
  95. TDLS_FRM_ACTION_TEARDOWN,
  96. TDLS_FRM_ACTION_PTI,
  97. TDLS_FRM_ACTION_CHAN_SWITCH_REQ,
  98. TDLS_FRM_ACTION_CHAN_SWITCH_RSP,
  99. TDLS_FRM_ACTION_PEER_PSM_REQ,
  100. TDLS_FRM_ACTION_PEER_PSM_RSP,
  101. TDLS_FRM_ACTION_PTI_RSP, /* 0x09 */
  102. TDLS_FRM_ACTION_DISCOVERY_REQ,
  103. TDLS_FRM_ACTION_EVENT_TEAR_DOWN_TO_SUPPLICANT = 0x30,
  104. TDLS_FRM_DATA_TEST_DATA = 0x80
  105. } TDLS_FRM_ACTION_ID;
  106. #define TDLS_FRM_ACTION_DISCOVERY_RESPONSE 14
  107. /*******************************************************************************
  108. * D A T A T Y P E S
  109. ********************************************************************************
  110. */
  111. /* 7.3.2.62 Link Identifier element */
  112. #define ELEM_ID_LINK_IDENTIFIER 101
  113. #define ELEM_LEN_LINK_IDENTIFIER 18
  114. typedef struct _IE_LINK_IDENTIFIER_T {
  115. UINT_8 ucId;
  116. UINT_8 ucLength;
  117. UINT_8 aBSSID[6];
  118. UINT_8 aInitiator[6];
  119. UINT_8 aResponder[6];
  120. } __KAL_ATTRIB_PACKED__ IE_LINK_IDENTIFIER_T;
  121. #define TDLS_LINK_IDENTIFIER_IE(__ie__) ((IE_LINK_IDENTIFIER_T *)(__ie__))
  122. /* test command use */
  123. typedef struct _PARAM_CUSTOM_TDLS_CMD_STRUCT_T {
  124. UINT_8 ucFmeType; /* TDLS_FRM_ACTION_ID */
  125. UINT_8 ucToken;
  126. UINT_16 u2Cap;
  127. /* bit0: TDLS, bit1: Peer U-APSD Buffer, bit2: Channel Switching */
  128. #define TDLS_EX_CAP_PEER_UAPSD BIT(0)
  129. #define TDLS_EX_CAP_CHAN_SWITCH BIT(1)
  130. #define TDLS_EX_CAP_TDLS BIT(2)
  131. UINT_8 ucExCap;
  132. UINT_8 arSupRate[4];
  133. UINT_8 arSupChan[4];
  134. UINT_32 u4Timeout;
  135. #define TDLS_FME_MAC_ADDR_LEN 6
  136. UINT_8 arRspAddr[TDLS_FME_MAC_ADDR_LEN];
  137. UINT_8 arBssid[TDLS_FME_MAC_ADDR_LEN];
  138. /*
  139. Linux Kernel-3.10
  140. struct station_parameters {
  141. const u8 *supported_rates;
  142. struct net_device *vlan;
  143. u32 sta_flags_mask, sta_flags_set;
  144. u32 sta_modify_mask;
  145. int listen_interval;
  146. u16 aid;
  147. u8 supported_rates_len;
  148. u8 plink_action;
  149. u8 plink_state;
  150. const struct ieee80211_ht_cap *ht_capa;
  151. const struct ieee80211_vht_cap *vht_capa;
  152. u8 uapsd_queues;
  153. u8 max_sp;
  154. enum nl80211_mesh_power_mode local_pm;
  155. u16 capability;
  156. const u8 *ext_capab;
  157. u8 ext_capab_len;
  158. };
  159. */
  160. struct ieee80211_ht_cap rHtCapa;
  161. struct ieee80211_vht_cap rVhtCapa; /* LINUX_KERNEL_VERSION >= 3.10.0 */
  162. struct station_parameters rPeerInfo;
  163. } PARAM_CUSTOM_TDLS_CMD_STRUCT_T;
  164. typedef struct _TDLS_MGMT_TX_INFO {
  165. UINT8 aucPeer[6];
  166. UINT8 ucActionCode;
  167. UINT8 ucDialogToken;
  168. UINT16 u2StatusCode;
  169. UINT32 u4SecBufLen;
  170. UINT8 aucSecBuf[1000];
  171. } TDLS_MGMT_TX_INFO;
  172. /*******************************************************************************
  173. * P U B L I C D A T A
  174. ********************************************************************************
  175. */
  176. /*******************************************************************************
  177. * P R I V A T E D A T A
  178. ********************************************************************************
  179. */
  180. /*******************************************************************************
  181. * M A C R O S
  182. ********************************************************************************
  183. */
  184. /* check any TDLS link */
  185. #define TDLS_IS_NO_LINK_GOING(__GlueInfo__) \
  186. ((__GlueInfo__)->rTdlsLink.cLinkCnt == 0)
  187. /* increase TDLS link count */
  188. #define TDLS_LINK_INCREASE(__GlueInfo__) \
  189. ((__GlueInfo__)->rTdlsLink.cLinkCnt++)
  190. /* decrease TDLS link count */
  191. #define TDLS_LINK_DECREASE(__GlueInfo__) \
  192. do { \
  193. if ((__GlueInfo__)->rTdlsLink.cLinkCnt > 0) \
  194. (__GlueInfo__)->rTdlsLink.cLinkCnt--; \
  195. } while (0)
  196. /* get TDLS link count */
  197. #define TDLS_LINK_COUNT(__GlueInfo__) \
  198. ((__GlueInfo__)->rTdlsLink.cLinkCnt)
  199. /* reset TDLS link count */
  200. #define TDLS_LINK_COUNT_RESET(__GlueInfo__) \
  201. ((__GlueInfo__)->rTdlsLink.cLinkCnt = 0)
  202. /*******************************************************************************
  203. * F U N C T I O N D E C L A R A T I O N S
  204. ********************************************************************************
  205. */
  206. /* Note: these functions are used only in tdls module, not other modules */
  207. UINT_32 TdlsFrameGeneralIeAppend(ADAPTER_T *prAdapter, STA_RECORD_T *prStaRec, UINT_16 u2StatusCode, UINT_8 *pPkt);
  208. TDLS_STATUS
  209. TdlsDataFrameSend(ADAPTER_T *prAdapter,
  210. STA_RECORD_T *prStaRec,
  211. UINT_8 *pPeerMac,
  212. UINT_8 ucActionCode,
  213. UINT_8 ucDialogToken, UINT_16 u2StatusCode, UINT_8 *pAppendIe, UINT_32 AppendIeLen);
  214. /*******************************************************************************
  215. * F U N C T I O N S
  216. ********************************************************************************
  217. */
  218. #endif /* CFG_SUPPORT_TDLS */
  219. #endif /* _TDLS_H */