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