import PULS_20160108
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / misc / mediatek / connectivity / combo / drv_wlan / mt6630 / wlan / include / mgmt / cnm.h
1 /*
2 ** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/cnm.h#1 $
3 */
4
5 /*! \file "cnm.h"
6 \brief
7 */
8
9
10
11 /*
12 ** $Log: cnm.h $
13 **
14 ** 07 19 2013 yuche.tsai
15 ** [BORA00002398] [MT6630][Volunteer Patch] P2P Driver Re-Design for Multiple BSS support
16 ** Code update for P2P.
17 **
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
21 **
22 ** 01 30 2013 yuche.tsai
23 ** [BORA00002398] [MT6630][Volunteer Patch] P2P Driver Re-Design for Multiple BSS support
24 ** Code first update.
25 **
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
30 **
31 ** 01 17 2013 cm.chang
32 ** [BORA00002149] [MT6630 Wi-Fi] Initial software development
33 ** Use ucBssIndex to replace eNetworkTypeIndex
34 **
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)
39 *
40 * 06 23 2011 cp.wu
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
43 *
44 * 06 20 2011 cp.wu
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
48 *
49 * 04 12 2011 cm.chang
50 * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency
51 * .
52 *
53 * 03 10 2011 cm.chang
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
56 *
57 * 01 12 2011 cm.chang
58 * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module
59 * Provide function to decide if BSS can be activated or not
60 *
61 * 12 07 2010 cm.chang
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
65 *
66 * 08 24 2010 cm.chang
67 * NULL
68 * Support RLM initail channel of Ad-hoc, P2P and BOW
69 *
70 * 07 19 2010 cm.chang
71 *
72 * Set RLM parameters and enable CNM channel manager
73 *
74 * 07 13 2010 cm.chang
75 *
76 * Rename MSG_CH_RELEASE_T to MSG_CH_ABORT_T
77 *
78 * 07 08 2010 cp.wu
79 *
80 * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
81 *
82 * 07 08 2010 cm.chang
83 * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver
84 * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT
85 *
86 * 07 01 2010 cm.chang
87 * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver
88 * Need bandwidth info when requesting channel privilege
89 *
90 * 07 01 2010 cm.chang
91 * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver
92 * Modify CNM message handler for new flow
93 *
94 * 05 12 2010 kevin.huang
95 * [BORA00000794][WIFISYS][New Feature]Power Management Support
96 * Add Power Management - Legacy PS-POLL support.
97 *
98 * 05 05 2010 cm.chang
99 * [BORA00000018]Integrate WIFI part into BORA for the 1st time
100 * Add a new function to send abort message
101 *
102 * 03 16 2010 kevin.huang
103 * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support
104 * Add AdHoc Mode
105 *
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
109 *
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
113 *
114 * Nov 18 2009 mtk01104
115 * [BORA00000018] Integrate WIFI part into BORA for the 1st time
116 * Add prototype of cnmFsmEventInit()
117 *
118 * Nov 2 2009 mtk01104
119 * [BORA00000018] Integrate WIFI part into BORA for the 1st time
120 *
121 **
122 */
123
124 #ifndef _CNM_H
125 #define _CNM_H
126
127 /*******************************************************************************
128 * C O M P I L E R F L A G S
129 ********************************************************************************
130 */
131
132 /*******************************************************************************
133 * E X T E R N A L R E F E R E N C E S
134 ********************************************************************************
135 */
136
137 /*******************************************************************************
138 * C O N S T A N T S
139 ********************************************************************************
140 */
141
142 /*******************************************************************************
143 * D A T A T Y P E S
144 ********************************************************************************
145 */
146
147 typedef enum _ENUM_CH_REQ_TYPE_T {
148 CH_REQ_TYPE_JOIN,
149 CH_REQ_TYPE_P2P_LISTEN,
150 CH_REQ_TYPE_OFFCHNL_TX,
151 CH_REQ_TYPE_GO_START_BSS,
152 CH_REQ_TYPE_NUM
153 } ENUM_CH_REQ_TYPE_T, *P_ENUM_CH_REQ_TYPE_T;
154
155 typedef struct _MSG_CH_REQ_T {
156 MSG_HDR_T rMsgHdr; /* Must be the first member */
157 UINT_8 ucBssIndex;
158 UINT_8 ucTokenID;
159 UINT_8 ucPrimaryChannel;
160 ENUM_CHNL_EXT_T eRfSco;
161 ENUM_BAND_T eRfBand;
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;
168
169 typedef struct _MSG_CH_ABORT_T {
170 MSG_HDR_T rMsgHdr; /* Must be the first member */
171 UINT_8 ucBssIndex;
172 UINT_8 ucTokenID;
173 } MSG_CH_ABORT_T, *P_MSG_CH_ABORT_T;
174
175 typedef struct _MSG_CH_GRANT_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 UINT_32 u4GrantInterval; /* In unit of ms */
187 } MSG_CH_GRANT_T, *P_MSG_CH_GRANT_T;
188
189 typedef struct _MSG_CH_REOCVER_T {
190 MSG_HDR_T rMsgHdr; /* Must be the first member */
191 UINT_8 ucBssIndex;
192 UINT_8 ucTokenID;
193 UINT_8 ucPrimaryChannel;
194 ENUM_CHNL_EXT_T eRfSco;
195 ENUM_BAND_T eRfBand;
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;
201
202
203 typedef struct _CNM_INFO_T {
204 BOOLEAN fgChGranted;
205 UINT_8 ucBssIndex;
206 UINT_8 ucTokenID;
207 } CNM_INFO_T, *P_CNM_INFO_T;
208
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;
216 #endif
217
218
219 /*******************************************************************************
220 * P U B L I C D A T A
221 ********************************************************************************
222 */
223
224 /*******************************************************************************
225 * P R I V A T E D A T A
226 ********************************************************************************
227 */
228
229 /*******************************************************************************
230 * M A C R O S
231 ********************************************************************************
232 */
233 #define CNM_CH_GRANTED_FOR_BSS(_prAdapter, _ucBssIndex) \
234 ((_prAdapter)->rCnmInfo.fgChGranted && \
235 (_prAdapter)->rCnmInfo.ucBssIndex == (_ucBssIndex))
236
237 /*******************************************************************************
238 * F U N C T I O N D E C L A R A T I O N S
239 ********************************************************************************
240 */
241 VOID cnmInit(P_ADAPTER_T prAdapter);
242
243 VOID cnmUninit(P_ADAPTER_T prAdapter);
244
245 VOID cnmChMngrRequestPrivilege(P_ADAPTER_T prAdapter, P_MSG_HDR_T prMsgHdr);
246
247 VOID cnmChMngrAbortPrivilege(P_ADAPTER_T prAdapter, P_MSG_HDR_T prMsgHdr);
248
249 VOID cnmChMngrHandleChEvent(P_ADAPTER_T prAdapter, P_WIFI_EVENT_T prEvent);
250
251 BOOLEAN
252 cnmPreferredChannel(P_ADAPTER_T prAdapter,
253 P_ENUM_BAND_T prBand, PUINT_8 pucPrimaryChannel, P_ENUM_CHNL_EXT_T prBssSCO);
254
255 BOOLEAN
256 cnmAisInfraChannelFixed(P_ADAPTER_T prAdapter, P_ENUM_BAND_T prBand, PUINT_8 pucPrimaryChannel);
257
258 VOID cnmAisInfraConnectNotify(P_ADAPTER_T prAdapter);
259
260 BOOLEAN cnmAisIbssIsPermitted(P_ADAPTER_T prAdapter);
261
262 BOOLEAN cnmP2PIsPermitted(P_ADAPTER_T prAdapter);
263
264 BOOLEAN cnmBowIsPermitted(P_ADAPTER_T prAdapter);
265
266 BOOLEAN cnmBss40mBwPermitted(P_ADAPTER_T prAdapter, UINT_8 ucBssIndex);
267
268 BOOLEAN cnmBss80mBwPermitted(P_ADAPTER_T prAdapter, UINT_8 ucBssIndex);
269
270 UINT_8 cnmGetBssMaxBw(P_ADAPTER_T prAdapter, UINT_8 ucBssIndex);
271
272 P_BSS_INFO_T
273 cnmGetBssInfoAndInit(P_ADAPTER_T prAdapter,
274 ENUM_NETWORK_TYPE_T eNetworkType, BOOLEAN fgIsP2pDevice);
275
276 VOID cnmFreeBssInfo(P_ADAPTER_T prAdapter, P_BSS_INFO_T prBssInfo);
277 #if CFG_SUPPORT_CHNL_CONFLICT_REVISE
278 BOOLEAN
279 cnmAisDetectP2PChannel (
280 P_ADAPTER_T prAdapter,
281 P_ENUM_BAND_T prBand,
282 PUINT_8 pucPrimaryChannel
283 );
284 #endif
285 /*******************************************************************************
286 * F U N C T I O N S
287 ********************************************************************************
288 */
289 #ifndef _lint
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.
294 */
295 static __KAL_INLINE__ VOID cnmMsgDataTypeCheck(VOID)
296 {
297 DATA_STRUC_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, rMsgHdr) == 0);
298
299 DATA_STRUC_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, rMsgHdr) ==
300 OFFSET_OF(MSG_CH_RECOVER_T, rMsgHdr));
301
302 DATA_STRUC_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, ucBssIndex) ==
303 OFFSET_OF(MSG_CH_RECOVER_T, ucBssIndex));
304
305 DATA_STRUC_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, ucTokenID) ==
306 OFFSET_OF(MSG_CH_RECOVER_T, ucTokenID));
307
308 DATA_STRUC_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, ucPrimaryChannel) ==
309 OFFSET_OF(MSG_CH_RECOVER_T, ucPrimaryChannel));
310
311 DATA_STRUC_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, eRfSco) ==
312 OFFSET_OF(MSG_CH_RECOVER_T, eRfSco));
313
314 DATA_STRUC_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, eRfBand) ==
315 OFFSET_OF(MSG_CH_RECOVER_T, eRfBand));
316
317 DATA_STRUC_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, eReqType) ==
318 OFFSET_OF(MSG_CH_RECOVER_T, eReqType));
319
320 return;
321 }
322 #endif /* _lint */
323
324 #endif /* _CNM_H */