2 ** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/cnm.h#1 $
14 ** 07 19 2013 yuche.tsai
15 ** [BORA00002398] [MT6630][Volunteer Patch] P2P Driver Re-Design for Multiple BSS support
16 ** Code update for P2P.
18 ** 05 07 2013 cm.chang
19 ** [BORA00002149] [MT6630 Wi-Fi] Initial software development
20 ** Provide macro for TXM to query if BSS is CH_GRANTED
22 ** 01 30 2013 yuche.tsai
23 ** [BORA00002398] [MT6630][Volunteer Patch] P2P Driver Re-Design for Multiple BSS support
26 ** 01 21 2013 cm.chang
27 ** [BORA00002149] [MT6630 Wi-Fi] Initial software development
28 ** 1. Create rP2pDevInfo structure
29 ** 2. Support 80/160 MHz channel bandwidth for channel privilege
31 ** 01 17 2013 cm.chang
32 ** [BORA00002149] [MT6630 Wi-Fi] Initial software development
33 ** Use ucBssIndex to replace eNetworkTypeIndex
35 ** 09 17 2012 cm.chang
36 ** [BORA00002149] [MT6630 Wi-Fi] Initial software development
37 ** Duplicate source from MT6620 v2.3 driver branch
38 ** (Davinci label: MT6620_WIFI_Driver_V2_3_120913_1942_As_MT6630_Base)
41 * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module
42 * change parameter name from PeerAddr to BSSID
45 * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module
46 * 1. specify target's BSSID when requesting channel privilege.
47 * 2. pass BSSID information to firmware domain
50 * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency
54 * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module
55 * Add some functions to let AIS/Tethering or AIS/BOW be the same channel
58 * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module
59 * Provide function to decide if BSS can be activated or not
62 * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk
63 * 1. BSSINFO include RLM parameter
64 * 2. free all sta records when network is disconnected
68 * Support RLM initail channel of Ad-hoc, P2P and BOW
72 * Set RLM parameters and enable CNM channel manager
76 * Rename MSG_CH_RELEASE_T to MSG_CH_ABORT_T
80 * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
83 * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver
84 * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT
87 * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver
88 * Need bandwidth info when requesting channel privilege
91 * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver
92 * Modify CNM message handler for new flow
94 * 05 12 2010 kevin.huang
95 * [BORA00000794][WIFISYS][New Feature]Power Management Support
96 * Add Power Management - Legacy PS-POLL support.
99 * [BORA00000018]Integrate WIFI part into BORA for the 1st time
100 * Add a new function to send abort message
102 * 03 16 2010 kevin.huang
103 * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support
106 * 03 10 2010 kevin.huang
107 * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support
108 * Add Channel Manager for arbitration of JOIN and SCAN Req
110 * 02 08 2010 cm.chang
111 * [BORA00000018]Integrate WIFI part into BORA for the 1st time
112 * Support partial part about cmd basic configuration
114 * Nov 18 2009 mtk01104
115 * [BORA00000018] Integrate WIFI part into BORA for the 1st time
116 * Add prototype of cnmFsmEventInit()
118 * Nov 2 2009 mtk01104
119 * [BORA00000018] Integrate WIFI part into BORA for the 1st time
127 /*******************************************************************************
128 * C O M P I L E R F L A G S
129 ********************************************************************************
132 /*******************************************************************************
133 * E X T E R N A L R E F E R E N C E S
134 ********************************************************************************
137 /*******************************************************************************
139 ********************************************************************************
142 /*******************************************************************************
144 ********************************************************************************
147 typedef enum _ENUM_CH_REQ_TYPE_T
{
149 CH_REQ_TYPE_P2P_LISTEN
,
150 CH_REQ_TYPE_OFFCHNL_TX
,
151 CH_REQ_TYPE_GO_START_BSS
,
153 } ENUM_CH_REQ_TYPE_T
, *P_ENUM_CH_REQ_TYPE_T
;
155 typedef struct _MSG_CH_REQ_T
{
156 MSG_HDR_T rMsgHdr
; /* Must be the first member */
159 UINT_8 ucPrimaryChannel
;
160 ENUM_CHNL_EXT_T eRfSco
;
162 ENUM_CHANNEL_WIDTH_T eRfChannelWidth
; /* To support 80/160MHz bandwidth */
163 UINT_8 ucRfCenterFreqSeg1
; /* To support 80/160MHz bandwidth */
164 UINT_8 ucRfCenterFreqSeg2
; /* To support 80/160MHz bandwidth */
165 ENUM_CH_REQ_TYPE_T eReqType
;
166 UINT_32 u4MaxInterval
; /* In unit of ms */
167 } MSG_CH_REQ_T
, *P_MSG_CH_REQ_T
;
169 typedef struct _MSG_CH_ABORT_T
{
170 MSG_HDR_T rMsgHdr
; /* Must be the first member */
173 } MSG_CH_ABORT_T
, *P_MSG_CH_ABORT_T
;
175 typedef struct _MSG_CH_GRANT_T
{
176 MSG_HDR_T rMsgHdr
; /* Must be the first member */
179 UINT_8 ucPrimaryChannel
;
180 ENUM_CHNL_EXT_T eRfSco
;
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 UINT_32 u4GrantInterval
; /* In unit of ms */
187 } MSG_CH_GRANT_T
, *P_MSG_CH_GRANT_T
;
189 typedef struct _MSG_CH_REOCVER_T
{
190 MSG_HDR_T rMsgHdr
; /* Must be the first member */
193 UINT_8 ucPrimaryChannel
;
194 ENUM_CHNL_EXT_T eRfSco
;
196 ENUM_CHANNEL_WIDTH_T eRfChannelWidth
; /* To support 80/160MHz bandwidth */
197 UINT_8 ucRfCenterFreqSeg1
; /* To support 80/160MHz bandwidth */
198 UINT_8 ucRfCenterFreqSeg2
; /* To support 80/160MHz bandwidth */
199 ENUM_CH_REQ_TYPE_T eReqType
;
200 } MSG_CH_RECOVER_T
, *P_MSG_CH_RECOVER_T
;
203 typedef struct _CNM_INFO_T
{
207 } CNM_INFO_T
, *P_CNM_INFO_T
;
209 #if CFG_ENABLE_WIFI_DIRECT
210 /* Moved from p2p_fsm.h */
211 typedef struct _DEVICE_TYPE_T
{
212 UINT_16 u2CategoryId
; /* Category ID */
213 UINT_8 aucOui
[4]; /* OUI */
214 UINT_16 u2SubCategoryId
; /* Sub Category ID */
215 } __KAL_ATTRIB_PACKED__ DEVICE_TYPE_T
, *P_DEVICE_TYPE_T
;
219 /*******************************************************************************
220 * P U B L I C D A T A
221 ********************************************************************************
224 /*******************************************************************************
225 * P R I V A T E D A T A
226 ********************************************************************************
229 /*******************************************************************************
231 ********************************************************************************
233 #define CNM_CH_GRANTED_FOR_BSS(_prAdapter, _ucBssIndex) \
234 ((_prAdapter)->rCnmInfo.fgChGranted && \
235 (_prAdapter)->rCnmInfo.ucBssIndex == (_ucBssIndex))
237 /*******************************************************************************
238 * F U N C T I O N D E C L A R A T I O N S
239 ********************************************************************************
241 VOID
cnmInit(P_ADAPTER_T prAdapter
);
243 VOID
cnmUninit(P_ADAPTER_T prAdapter
);
245 VOID
cnmChMngrRequestPrivilege(P_ADAPTER_T prAdapter
, P_MSG_HDR_T prMsgHdr
);
247 VOID
cnmChMngrAbortPrivilege(P_ADAPTER_T prAdapter
, P_MSG_HDR_T prMsgHdr
);
249 VOID
cnmChMngrHandleChEvent(P_ADAPTER_T prAdapter
, P_WIFI_EVENT_T prEvent
);
252 cnmPreferredChannel(P_ADAPTER_T prAdapter
,
253 P_ENUM_BAND_T prBand
, PUINT_8 pucPrimaryChannel
, P_ENUM_CHNL_EXT_T prBssSCO
);
256 cnmAisInfraChannelFixed(P_ADAPTER_T prAdapter
, P_ENUM_BAND_T prBand
, PUINT_8 pucPrimaryChannel
);
258 VOID
cnmAisInfraConnectNotify(P_ADAPTER_T prAdapter
);
260 BOOLEAN
cnmAisIbssIsPermitted(P_ADAPTER_T prAdapter
);
262 BOOLEAN
cnmP2PIsPermitted(P_ADAPTER_T prAdapter
);
264 BOOLEAN
cnmBowIsPermitted(P_ADAPTER_T prAdapter
);
266 BOOLEAN
cnmBss40mBwPermitted(P_ADAPTER_T prAdapter
, UINT_8 ucBssIndex
);
268 BOOLEAN
cnmBss80mBwPermitted(P_ADAPTER_T prAdapter
, UINT_8 ucBssIndex
);
270 UINT_8
cnmGetBssMaxBw(P_ADAPTER_T prAdapter
, UINT_8 ucBssIndex
);
273 cnmGetBssInfoAndInit(P_ADAPTER_T prAdapter
,
274 ENUM_NETWORK_TYPE_T eNetworkType
, BOOLEAN fgIsP2pDevice
);
276 VOID
cnmFreeBssInfo(P_ADAPTER_T prAdapter
, P_BSS_INFO_T prBssInfo
);
277 #if CFG_SUPPORT_CHNL_CONFLICT_REVISE
279 cnmAisDetectP2PChannel (
280 P_ADAPTER_T prAdapter
,
281 P_ENUM_BAND_T prBand
,
282 PUINT_8 pucPrimaryChannel
285 /*******************************************************************************
287 ********************************************************************************
290 /* We don't have to call following function to inspect the data structure.
291 * It will check automatically while at compile time.
292 * We'll need this to guarantee the same member order in different structures
293 * to simply handling effort in some functions.
295 static __KAL_INLINE__ VOID
cnmMsgDataTypeCheck(VOID
)
297 DATA_STRUC_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T
, rMsgHdr
) == 0);
299 DATA_STRUC_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T
, rMsgHdr
) ==
300 OFFSET_OF(MSG_CH_RECOVER_T
, rMsgHdr
));
302 DATA_STRUC_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T
, ucBssIndex
) ==
303 OFFSET_OF(MSG_CH_RECOVER_T
, ucBssIndex
));
305 DATA_STRUC_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T
, ucTokenID
) ==
306 OFFSET_OF(MSG_CH_RECOVER_T
, ucTokenID
));
308 DATA_STRUC_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T
, ucPrimaryChannel
) ==
309 OFFSET_OF(MSG_CH_RECOVER_T
, ucPrimaryChannel
));
311 DATA_STRUC_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T
, eRfSco
) ==
312 OFFSET_OF(MSG_CH_RECOVER_T
, eRfSco
));
314 DATA_STRUC_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T
, eRfBand
) ==
315 OFFSET_OF(MSG_CH_RECOVER_T
, eRfBand
));
317 DATA_STRUC_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T
, eReqType
) ==
318 OFFSET_OF(MSG_CH_RECOVER_T
, eReqType
));