cnm.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. /*
  2. ** Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/cnm.h#1
  3. */
  4. /*! \file "cnm.h"
  5. \brief
  6. */
  7. /*
  8. ** Log: cnm.h
  9. **
  10. ** 07 19 2013 yuche.tsai
  11. ** [BORA00002398] [MT6630][Volunteer Patch] P2P Driver Re-Design for Multiple BSS support
  12. ** Code update for P2P.
  13. **
  14. ** 05 07 2013 cm.chang
  15. ** [BORA00002149] [MT6630 Wi-Fi] Initial software development
  16. ** Provide macro for TXM to query if BSS is CH_GRANTED
  17. **
  18. ** 01 30 2013 yuche.tsai
  19. ** [BORA00002398] [MT6630][Volunteer Patch] P2P Driver Re-Design for Multiple BSS support
  20. ** Code first update.
  21. **
  22. ** 01 21 2013 cm.chang
  23. ** [BORA00002149] [MT6630 Wi-Fi] Initial software development
  24. ** 1. Create rP2pDevInfo structure
  25. ** 2. Support 80/160 MHz channel bandwidth for channel privilege
  26. **
  27. ** 01 17 2013 cm.chang
  28. ** [BORA00002149] [MT6630 Wi-Fi] Initial software development
  29. ** Use ucBssIndex to replace eNetworkTypeIndex
  30. **
  31. ** 09 17 2012 cm.chang
  32. ** [BORA00002149] [MT6630 Wi-Fi] Initial software development
  33. ** Duplicate source from MT6620 v2.3 driver branch
  34. ** (Davinci label: MT6620_WIFI_Driver_V2_3_120913_1942_As_MT6630_Base)
  35. *
  36. * 06 23 2011 cp.wu
  37. * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module
  38. * change parameter name from PeerAddr to BSSID
  39. *
  40. * 06 20 2011 cp.wu
  41. * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module
  42. * 1. specify target's BSSID when requesting channel privilege.
  43. * 2. pass BSSID information to firmware domain
  44. *
  45. * 04 12 2011 cm.chang
  46. * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency
  47. * .
  48. *
  49. * 03 10 2011 cm.chang
  50. * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module
  51. * Add some functions to let AIS/Tethering or AIS/BOW be the same channel
  52. *
  53. * 01 12 2011 cm.chang
  54. * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module
  55. * Provide function to decide if BSS can be activated or not
  56. *
  57. * 12 07 2010 cm.chang
  58. * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk
  59. * 1. BSSINFO include RLM parameter
  60. * 2. free all sta records when network is disconnected
  61. *
  62. * 08 24 2010 cm.chang
  63. * NULL
  64. * Support RLM initail channel of Ad-hoc, P2P and BOW
  65. *
  66. * 07 19 2010 cm.chang
  67. *
  68. * Set RLM parameters and enable CNM channel manager
  69. *
  70. * 07 13 2010 cm.chang
  71. *
  72. * Rename MSG_CH_RELEASE_T to MSG_CH_ABORT_T
  73. *
  74. * 07 08 2010 cp.wu
  75. *
  76. * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
  77. *
  78. * 07 08 2010 cm.chang
  79. * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver
  80. * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT
  81. *
  82. * 07 01 2010 cm.chang
  83. * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver
  84. * Need bandwidth info when requesting channel privilege
  85. *
  86. * 07 01 2010 cm.chang
  87. * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver
  88. * Modify CNM message handler for new flow
  89. *
  90. * 05 12 2010 kevin.huang
  91. * [BORA00000794][WIFISYS][New Feature]Power Management Support
  92. * Add Power Management - Legacy PS-POLL support.
  93. *
  94. * 05 05 2010 cm.chang
  95. * [BORA00000018]Integrate WIFI part into BORA for the 1st time
  96. * Add a new function to send abort message
  97. *
  98. * 03 16 2010 kevin.huang
  99. * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support
  100. * Add AdHoc Mode
  101. *
  102. * 03 10 2010 kevin.huang
  103. * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support
  104. * Add Channel Manager for arbitration of JOIN and SCAN Req
  105. *
  106. * 02 08 2010 cm.chang
  107. * [BORA00000018]Integrate WIFI part into BORA for the 1st time
  108. * Support partial part about cmd basic configuration
  109. *
  110. * Nov 18 2009 mtk01104
  111. * [BORA00000018] Integrate WIFI part into BORA for the 1st time
  112. * Add prototype of cnmFsmEventInit()
  113. *
  114. * Nov 2 2009 mtk01104
  115. * [BORA00000018] Integrate WIFI part into BORA for the 1st time
  116. *
  117. **
  118. */
  119. #ifndef _CNM_H
  120. #define _CNM_H
  121. /*******************************************************************************
  122. * C O M P I L E R F L A G S
  123. ********************************************************************************
  124. */
  125. /*******************************************************************************
  126. * E X T E R N A L R E F E R E N C E S
  127. ********************************************************************************
  128. */
  129. /*******************************************************************************
  130. * C O N S T A N T S
  131. ********************************************************************************
  132. */
  133. /*******************************************************************************
  134. * D A T A T Y P E S
  135. ********************************************************************************
  136. */
  137. typedef enum _ENUM_CH_REQ_TYPE_T {
  138. CH_REQ_TYPE_JOIN,
  139. CH_REQ_TYPE_P2P_LISTEN,
  140. CH_REQ_TYPE_OFFCHNL_TX,
  141. CH_REQ_TYPE_GO_START_BSS,
  142. CH_REQ_TYPE_NUM
  143. } ENUM_CH_REQ_TYPE_T, *P_ENUM_CH_REQ_TYPE_T;
  144. typedef struct _MSG_CH_REQ_T {
  145. MSG_HDR_T rMsgHdr; /* Must be the first member */
  146. UINT_8 ucBssIndex;
  147. UINT_8 ucTokenID;
  148. UINT_8 ucPrimaryChannel;
  149. ENUM_CHNL_EXT_T eRfSco;
  150. ENUM_BAND_T eRfBand;
  151. ENUM_CHANNEL_WIDTH_T eRfChannelWidth; /* To support 80/160MHz bandwidth */
  152. UINT_8 ucRfCenterFreqSeg1; /* To support 80/160MHz bandwidth */
  153. UINT_8 ucRfCenterFreqSeg2; /* To support 80/160MHz bandwidth */
  154. ENUM_CH_REQ_TYPE_T eReqType;
  155. UINT_32 u4MaxInterval; /* In unit of ms */
  156. } MSG_CH_REQ_T, *P_MSG_CH_REQ_T;
  157. typedef struct _MSG_CH_ABORT_T {
  158. MSG_HDR_T rMsgHdr; /* Must be the first member */
  159. UINT_8 ucBssIndex;
  160. UINT_8 ucTokenID;
  161. } MSG_CH_ABORT_T, *P_MSG_CH_ABORT_T;
  162. typedef struct _MSG_CH_GRANT_T {
  163. MSG_HDR_T rMsgHdr; /* Must be the first member */
  164. UINT_8 ucBssIndex;
  165. UINT_8 ucTokenID;
  166. UINT_8 ucPrimaryChannel;
  167. ENUM_CHNL_EXT_T eRfSco;
  168. ENUM_BAND_T eRfBand;
  169. ENUM_CHANNEL_WIDTH_T eRfChannelWidth; /* To support 80/160MHz bandwidth */
  170. UINT_8 ucRfCenterFreqSeg1; /* To support 80/160MHz bandwidth */
  171. UINT_8 ucRfCenterFreqSeg2; /* To support 80/160MHz bandwidth */
  172. ENUM_CH_REQ_TYPE_T eReqType;
  173. UINT_32 u4GrantInterval; /* In unit of ms */
  174. } MSG_CH_GRANT_T, *P_MSG_CH_GRANT_T;
  175. typedef struct _MSG_CH_REOCVER_T {
  176. MSG_HDR_T rMsgHdr; /* Must be the first member */
  177. UINT_8 ucBssIndex;
  178. UINT_8 ucTokenID;
  179. UINT_8 ucPrimaryChannel;
  180. ENUM_CHNL_EXT_T eRfSco;
  181. ENUM_BAND_T eRfBand;
  182. ENUM_CHANNEL_WIDTH_T eRfChannelWidth; /* To support 80/160MHz bandwidth */
  183. UINT_8 ucRfCenterFreqSeg1; /* To support 80/160MHz bandwidth */
  184. UINT_8 ucRfCenterFreqSeg2; /* To support 80/160MHz bandwidth */
  185. ENUM_CH_REQ_TYPE_T eReqType;
  186. } MSG_CH_RECOVER_T, *P_MSG_CH_RECOVER_T;
  187. typedef struct _CNM_INFO_T {
  188. BOOLEAN fgChGranted;
  189. UINT_8 ucBssIndex;
  190. UINT_8 ucTokenID;
  191. } CNM_INFO_T, *P_CNM_INFO_T;
  192. #if CFG_ENABLE_WIFI_DIRECT
  193. /* Moved from p2p_fsm.h */
  194. typedef struct _DEVICE_TYPE_T {
  195. UINT_16 u2CategoryId; /* Category ID */
  196. UINT_8 aucOui[4]; /* OUI */
  197. UINT_16 u2SubCategoryId; /* Sub Category ID */
  198. } __KAL_ATTRIB_PACKED__ DEVICE_TYPE_T, *P_DEVICE_TYPE_T;
  199. #endif
  200. /*******************************************************************************
  201. * P U B L I C D A T A
  202. ********************************************************************************
  203. */
  204. /*******************************************************************************
  205. * P R I V A T E D A T A
  206. ********************************************************************************
  207. */
  208. /*******************************************************************************
  209. * M A C R O S
  210. ********************************************************************************
  211. */
  212. #define CNM_CH_GRANTED_FOR_BSS(_prAdapter, _ucBssIndex) \
  213. ((_prAdapter)->rCnmInfo.fgChGranted && \
  214. (_prAdapter)->rCnmInfo.ucBssIndex == (_ucBssIndex))
  215. /*******************************************************************************
  216. * F U N C T I O N D E C L A R A T I O N S
  217. ********************************************************************************
  218. */
  219. VOID cnmInit(P_ADAPTER_T prAdapter);
  220. VOID cnmUninit(P_ADAPTER_T prAdapter);
  221. VOID cnmChMngrRequestPrivilege(P_ADAPTER_T prAdapter, P_MSG_HDR_T prMsgHdr);
  222. VOID cnmChMngrAbortPrivilege(P_ADAPTER_T prAdapter, P_MSG_HDR_T prMsgHdr);
  223. VOID cnmChMngrHandleChEvent(P_ADAPTER_T prAdapter, P_WIFI_EVENT_T prEvent);
  224. BOOLEAN
  225. cnmPreferredChannel(P_ADAPTER_T prAdapter, P_ENUM_BAND_T prBand, PUINT_8 pucPrimaryChannel, P_ENUM_CHNL_EXT_T prBssSCO);
  226. BOOLEAN cnmAisInfraChannelFixed(P_ADAPTER_T prAdapter, P_ENUM_BAND_T prBand, PUINT_8 pucPrimaryChannel);
  227. VOID cnmAisInfraConnectNotify(P_ADAPTER_T prAdapter);
  228. BOOLEAN cnmAisIbssIsPermitted(P_ADAPTER_T prAdapter);
  229. BOOLEAN cnmP2PIsPermitted(P_ADAPTER_T prAdapter);
  230. BOOLEAN cnmBowIsPermitted(P_ADAPTER_T prAdapter);
  231. BOOLEAN cnmBss40mBwPermitted(P_ADAPTER_T prAdapter, UINT_8 ucBssIndex);
  232. BOOLEAN cnmBss80mBwPermitted(P_ADAPTER_T prAdapter, UINT_8 ucBssIndex);
  233. UINT_8 cnmGetBssMaxBw(P_ADAPTER_T prAdapter, UINT_8 ucBssIndex);
  234. P_BSS_INFO_T cnmGetBssInfoAndInit(P_ADAPTER_T prAdapter, ENUM_NETWORK_TYPE_T eNetworkType, BOOLEAN fgIsP2pDevice);
  235. VOID cnmFreeBssInfo(P_ADAPTER_T prAdapter, P_BSS_INFO_T prBssInfo);
  236. #if CFG_SUPPORT_CHNL_CONFLICT_REVISE
  237. BOOLEAN cnmAisDetectP2PChannel(P_ADAPTER_T prAdapter, P_ENUM_BAND_T prBand, PUINT_8 pucPrimaryChannel);
  238. #endif
  239. /*******************************************************************************
  240. * F U N C T I O N S
  241. ********************************************************************************
  242. */
  243. #ifndef _lint
  244. /* We don't have to call following function to inspect the data structure.
  245. * It will check automatically while at compile time.
  246. * We'll need this to guarantee the same member order in different structures
  247. * to simply handling effort in some functions.
  248. */
  249. static __KAL_INLINE__ VOID cnmMsgDataTypeCheck(VOID)
  250. {
  251. DATA_STRUCT_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, rMsgHdr) == 0);
  252. DATA_STRUCT_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, rMsgHdr) == OFFSET_OF(MSG_CH_RECOVER_T, rMsgHdr));
  253. DATA_STRUCT_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, ucBssIndex) == OFFSET_OF(MSG_CH_RECOVER_T, ucBssIndex));
  254. DATA_STRUCT_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, ucTokenID) == OFFSET_OF(MSG_CH_RECOVER_T, ucTokenID));
  255. DATA_STRUCT_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, ucPrimaryChannel) ==
  256. OFFSET_OF(MSG_CH_RECOVER_T, ucPrimaryChannel));
  257. DATA_STRUCT_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, eRfSco) == OFFSET_OF(MSG_CH_RECOVER_T, eRfSco));
  258. DATA_STRUCT_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, eRfBand) == OFFSET_OF(MSG_CH_RECOVER_T, eRfBand));
  259. DATA_STRUCT_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, eReqType) == OFFSET_OF(MSG_CH_RECOVER_T, eReqType));
  260. }
  261. #endif /* _lint */
  262. #endif /* _CNM_H */