add MTK-combo-module,continue with commit 17f39ed917874e77e80411f33faba1b7ee8138c8
[firefly-linux-kernel-4.4.55.git] / drivers / mtk_wcn_combo / drv_wlan / wlan / include / mgmt / cnm.h
1 /*
2 ** $Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_2/include/mgmt/cnm.h#1 $
3 */
4
5 /*! \file   "cnm.h"
6     \brief
7 */
8
9 /*******************************************************************************
10 * Copyright (c) 2009 MediaTek Inc.
11 *
12 * All rights reserved. Copying, compilation, modification, distribution
13 * or any other use whatsoever of this material is strictly prohibited
14 * except in accordance with a Software License Agreement with
15 * MediaTek Inc.
16 ********************************************************************************
17 */
18
19 /*******************************************************************************
20 * LEGAL DISCLAIMER
21 *
22 * BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND
23 * AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK
24 * SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE
25 * PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY
26 * DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
27 * LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
28 * PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE
29 * ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY
30 * WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK
31 * SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY
32 * WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE
33 * FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO
34 * CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
35 *
36 * BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
37 * LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL
38 * BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT
39 * ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY
40 * BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
41 *
42 * THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
43 * WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT
44 * OF LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING
45 * THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN
46 * FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE
47 * (ICC).
48 ********************************************************************************
49 */
50
51 /*
52 ** $Log: cnm.h $
53  *
54  * 06 23 2011 cp.wu
55  * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module
56  * follow-ups for frequency-shifted WAPI AP support
57  *
58  * 04 12 2011 cm.chang
59  * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency
60  * .
61  *
62  * 03 18 2011 cp.wu
63  * [WCXRP00000577] [MT6620 Wi-Fi][Driver][FW] Create V2.0 branch for firmware and driver
64  * create V2.0 driver release based on label "MT6620_WIFI_DRIVER_V2_0_110318_1600" from main trunk
65  *
66  * 03 10 2011 cm.chang
67  * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module
68  * Add some functions to let AIS/Tethering or AIS/BOW be the same channel
69  *
70  * 01 12 2011 cm.chang
71  * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module
72  * Provide function to decide if BSS can be activated or not
73  *
74  * 12 07 2010 cm.chang
75  * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk
76  * 1. BSSINFO include RLM parameter
77  * 2. free all sta records when network is disconnected
78  *
79  * 08 24 2010 cm.chang
80  * NULL
81  * Support RLM initail channel of Ad-hoc, P2P and BOW
82  *
83  * 07 19 2010 cm.chang
84  *
85  * Set RLM parameters and enable CNM channel manager
86  *
87  * 07 13 2010 cm.chang
88  *
89  * Rename MSG_CH_RELEASE_T to MSG_CH_ABORT_T
90  *
91  * 07 08 2010 cp.wu
92  *
93  * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
94  *
95  * 07 08 2010 cm.chang
96  * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver
97  * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT
98  *
99  * 07 01 2010 cm.chang
100  * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver
101  * Need bandwidth info when requesting channel privilege
102  *
103  * 07 01 2010 cm.chang
104  * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver
105  * Modify CNM message handler for new flow
106  *
107  * 05 12 2010 kevin.huang
108  * [BORA00000794][WIFISYS][New Feature]Power Management Support
109  * Add Power Management - Legacy PS-POLL support.
110  *
111  * 05 05 2010 cm.chang
112  * [BORA00000018]Integrate WIFI part into BORA for the 1st time
113  * Add a new function to send abort message
114  *
115  * 03 16 2010 kevin.huang
116  * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support
117  * Add AdHoc Mode
118  *
119  * 03 10 2010 kevin.huang
120  * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support
121  * Add Channel Manager for arbitration of JOIN and SCAN Req
122  *
123  * 02 08 2010 cm.chang
124  * [BORA00000018]Integrate WIFI part into BORA for the 1st time
125  * Support partial part about cmd basic configuration
126  *
127  * Nov 18 2009 mtk01104
128  * [BORA00000018] Integrate WIFI part into BORA for the 1st time
129  * Add prototype of cnmFsmEventInit()
130  *
131  * Nov 2 2009 mtk01104
132  * [BORA00000018] Integrate WIFI part into BORA for the 1st time
133  *
134 **
135 */
136
137 #ifndef _CNM_H
138 #define _CNM_H
139
140 /*******************************************************************************
141 *                         C O M P I L E R   F L A G S
142 ********************************************************************************
143 */
144
145 /*******************************************************************************
146 *                    E X T E R N A L   R E F E R E N C E S
147 ********************************************************************************
148 */
149
150 /*******************************************************************************
151 *                              C O N S T A N T S
152 ********************************************************************************
153 */
154
155 /*******************************************************************************
156 *                             D A T A   T Y P E S
157 ********************************************************************************
158 */
159
160 typedef enum _ENUM_CH_REQ_TYPE_T {
161     CH_REQ_TYPE_JOIN,
162     CH_REQ_TYPE_P2P_LISTEN,
163
164     CH_REQ_TYPE_NUM
165 } ENUM_CH_REQ_TYPE_T, *P_ENUM_CH_REQ_TYPE_T;
166
167 typedef struct _MSG_CH_REQ_T {
168     MSG_HDR_T           rMsgHdr;    /* Must be the first member */
169     UINT_8              ucNetTypeIndex;
170     UINT_8              ucTokenID;
171     UINT_8              ucPrimaryChannel;
172     ENUM_CHNL_EXT_T     eRfSco;
173     ENUM_BAND_T         eRfBand;
174     ENUM_CH_REQ_TYPE_T  eReqType;
175     UINT_32             u4MaxInterval;  /* In unit of ms */
176     UINT_8              aucBSSID[6];
177     UINT_8              aucReserved[2];
178 } MSG_CH_REQ_T, *P_MSG_CH_REQ_T;
179
180 typedef struct _MSG_CH_ABORT_T {
181     MSG_HDR_T           rMsgHdr;    /* Must be the first member */
182     UINT_8              ucNetTypeIndex;
183     UINT_8              ucTokenID;
184 } MSG_CH_ABORT_T, *P_MSG_CH_ABORT_T;
185
186 typedef struct _MSG_CH_GRANT_T {
187     MSG_HDR_T           rMsgHdr;    /* Must be the first member */
188     UINT_8              ucNetTypeIndex;
189     UINT_8              ucTokenID;
190     UINT_8              ucPrimaryChannel;
191     ENUM_CHNL_EXT_T     eRfSco;
192     ENUM_BAND_T         eRfBand;
193     ENUM_CH_REQ_TYPE_T  eReqType;
194     UINT_32             u4GrantInterval;    /* In unit of ms */
195 } MSG_CH_GRANT_T, *P_MSG_CH_GRANT_T;
196
197 typedef struct _MSG_CH_REOCVER_T {
198     MSG_HDR_T           rMsgHdr;    /* Must be the first member */
199     UINT_8              ucNetTypeIndex;
200     UINT_8              ucTokenID;
201     UINT_8              ucPrimaryChannel;
202     ENUM_CHNL_EXT_T     eRfSco;
203     ENUM_BAND_T         eRfBand;
204     ENUM_CH_REQ_TYPE_T  eReqType;
205 } MSG_CH_RECOVER_T, *P_MSG_CH_RECOVER_T;
206
207
208 typedef struct _CNM_INFO_T {
209     UINT_32     u4Reserved;
210 } CNM_INFO_T, *P_CNM_INFO_T;
211
212 #if CFG_ENABLE_WIFI_DIRECT
213 /* Moved from p2p_fsm.h */
214 typedef struct _DEVICE_TYPE_T {
215     UINT_16     u2CategoryId;           /* Category ID */
216     UINT_8      aucOui[4];              /* OUI */
217     UINT_16     u2SubCategoryId;        /* Sub Category ID */
218 } __KAL_ATTRIB_PACKED__ DEVICE_TYPE_T, *P_DEVICE_TYPE_T;
219 #endif
220
221
222 /*******************************************************************************
223 *                            P U B L I C   D A T A
224 ********************************************************************************
225 */
226
227 /*******************************************************************************
228 *                           P R I V A T E   D A T A
229 ********************************************************************************
230 */
231
232 /*******************************************************************************
233 *                                 M A C R O S
234 ********************************************************************************
235 */
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
242 cnmInit (
243     P_ADAPTER_T prAdapter
244     );
245
246 VOID
247 cnmUninit (
248     P_ADAPTER_T     prAdapter
249     );
250
251 VOID
252 cnmChMngrRequestPrivilege (
253     P_ADAPTER_T prAdapter,
254     P_MSG_HDR_T prMsgHdr
255     );
256
257 VOID
258 cnmChMngrAbortPrivilege (
259     P_ADAPTER_T prAdapter,
260     P_MSG_HDR_T prMsgHdr
261     );
262
263 VOID
264 cnmChMngrHandleChEvent (
265     P_ADAPTER_T     prAdapter,
266     P_WIFI_EVENT_T  prEvent
267     );
268
269 BOOLEAN
270 cnmPreferredChannel (
271     P_ADAPTER_T         prAdapter,
272     P_ENUM_BAND_T       prBand,
273     PUINT_8             pucPrimaryChannel,
274     P_ENUM_CHNL_EXT_T   prBssSCO
275     );
276
277 BOOLEAN
278 cnmAisInfraChannelFixed (
279     P_ADAPTER_T         prAdapter,
280     P_ENUM_BAND_T       prBand,
281     PUINT_8             pucPrimaryChannel
282     );
283
284 VOID
285 cnmAisInfraConnectNotify (
286     P_ADAPTER_T         prAdapter
287     );
288
289 BOOLEAN
290 cnmAisIbssIsPermitted (
291     P_ADAPTER_T     prAdapter
292     );
293
294 BOOLEAN
295 cnmP2PIsPermitted (
296     P_ADAPTER_T     prAdapter
297     );
298
299 BOOLEAN
300 cnmBowIsPermitted (
301     P_ADAPTER_T     prAdapter
302     );
303
304 BOOLEAN
305 cnmBss40mBwPermitted (
306     P_ADAPTER_T                 prAdapter,
307     ENUM_NETWORK_TYPE_INDEX_T   eNetTypeIdx
308     );
309
310 /*******************************************************************************
311 *                              F U N C T I O N S
312 ********************************************************************************
313 */
314 #ifndef _lint
315 /* We don't have to call following function to inspect the data structure.
316  * It will check automatically while at compile time.
317  * We'll need this to guarantee the same member order in different structures
318  * to simply handling effort in some functions.
319  */
320 __KAL_INLINE__ VOID
321 cnmMsgDataTypeCheck (
322     VOID
323     )
324 {
325     DATA_STRUC_INSPECTING_ASSERT(
326         OFFSET_OF(MSG_CH_GRANT_T,rMsgHdr) == 0);
327
328     DATA_STRUC_INSPECTING_ASSERT(
329         OFFSET_OF(MSG_CH_GRANT_T,rMsgHdr) ==
330         OFFSET_OF(MSG_CH_RECOVER_T,rMsgHdr));
331
332     DATA_STRUC_INSPECTING_ASSERT(
333         OFFSET_OF(MSG_CH_GRANT_T,ucNetTypeIndex) ==
334         OFFSET_OF(MSG_CH_RECOVER_T,ucNetTypeIndex));
335
336     DATA_STRUC_INSPECTING_ASSERT(
337         OFFSET_OF(MSG_CH_GRANT_T,ucTokenID) ==
338         OFFSET_OF(MSG_CH_RECOVER_T,ucTokenID));
339
340     DATA_STRUC_INSPECTING_ASSERT(
341         OFFSET_OF(MSG_CH_GRANT_T,ucPrimaryChannel) ==
342         OFFSET_OF(MSG_CH_RECOVER_T,ucPrimaryChannel));
343
344     DATA_STRUC_INSPECTING_ASSERT(
345         OFFSET_OF(MSG_CH_GRANT_T,eRfSco) ==
346         OFFSET_OF(MSG_CH_RECOVER_T,eRfSco));
347
348     DATA_STRUC_INSPECTING_ASSERT(
349         OFFSET_OF(MSG_CH_GRANT_T,eRfBand) ==
350         OFFSET_OF(MSG_CH_RECOVER_T,eRfBand));
351
352     DATA_STRUC_INSPECTING_ASSERT(
353         OFFSET_OF(MSG_CH_GRANT_T,eReqType) ==
354         OFFSET_OF(MSG_CH_RECOVER_T,eReqType));
355
356     return;
357 }
358 #endif /* _lint */
359
360 #endif /* _CNM_H */
361
362