cnm.h 8.6 KB

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