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